// scrollsaver.js
// Copyright (C) 2009 M. Mahdi Hasheminezhad (hasheminezhad at gmail dot com)
// Maintain scroll position of every element on postbacks and partial updates
// This source is licensed under Common Public License Version 1.0 (CPL) 
// History:
// 2009-08-21 First Public Release M. Mahdi Hasheminezhad (http://hasheminezhad.com)


//(function(){function ls(){var c=document.cookie.split(';');for(var i=0;i<c.length;i++){var p=c[i].split('=');if(p[0]=='scrollPosition'){p=unescape(p[1]).split('/');for(var j=0;j<p.length;j++){var e=p[j].split(',');try{if(e[0]=='window'){window.scrollTo(e[1],e[2]);}else if(e[0]){var o=document.getElementById(e[0]);o.scrollLeft=e[1];o.scrollTop=e[2];}}catch(ex){}}return;}}}function ss(){var s='scrollPosition=';var l,t;if(window.pageXOffset!==undefined){l=window.pageXOffset;t=window.pageYOffset;}else if(document.documentElement&&document.documentElement.scrollLeft!==undefined){l=document.documentElement.scrollLeft;t=document.documentElement.scrollTop;}else{l=document.body.scrollLeft;t=document.body.scrollTop;}if(l||t){s+='window,'+l+','+t+'/';}var es=(document.all)?document.all:document.getElementsByTagName('*');for(var i=0;i<es.length;i++){var e=es[i];if(e.id&&(e.scrollLeft||e.scrollTop)){s+=e.id+','+e.scrollLeft+','+e.scrollTop+'/';}}document.cookie=s+';';}var a,p;if(window.attachEvent){a=window.attachEvent;p='on';}else{a=window.addEventListener;p='';}a(p+'load',function(){ls();if(typeof Sys!='undefined'&&typeof Sys.WebForms!='undefined'){Sys.WebForms.PageRequestManager.getInstance().add_endRequest(ls);Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(ss);}},false);a(p+'unload',ss,false);})();


(function() {
    function loadScroll() {
        var cookieList = document.cookie.split(';');
        for (var i = 0; i < cookieList.length; i++) {
            var cookieParts = cookieList[i].split('=');
            if (cookieParts[0] == 'scrollPosition') {
                var values = unescape(cookieParts[1]).split('/');
                for (var j = 0; j < values.length; j++) {
                    var currentValue = values[j].split(',');
                    try {
                        if (currentValue[0] == 'window') {
                            window.scrollTo(currentValue[1], currentValue[2]);
                        } else if (currentValue[0]) {
                            var elm = document.getElementById(currentValue[0]);
                            elm.scrollLeft = currentValue[1];
                            elm.scrollTop = currentValue[2];
                        }
                    } catch (ex) { }
                }
                return;
            }
        }
    }
    function saveScroll() {
        var s = 'scrollPosition=';
        var wl, wt;
        if (window.pageXOffset !== undefined) {
            wl = window.pageXOffset;
            wt = window.pageYOffset;
        } else if (document.documentElement && document.documentElement.scrollLeft !== undefined) {
            wl = document.documentElement.scrollLeft;
            wt = document.documentElement.scrollTop;
        } else {
            wl = document.body.scrollLeft;
            wt = document.body.scrollTop;
        }
        if (wl || wt) {
            s += 'window,' + wl + ',' + wt + '/';
        }
        var elements = (document.all) ? document.all : document.getElementsByTagName('*');
        for (var i = 0; i < elements.length; i++) {
            var e = elements[i];
            if (e.id && (e.scrollLeft || e.scrollTop)) {
                s += e.id + ',' + e.scrollLeft + ',' + e.scrollTop + '/';
            }
        }
        document.cookie = s + ';';
    }
    var addEvent, eventPrefix;
    if (window.attachEvent) {
        addEvent = window.attachEvent;
        eventPrefix = 'on';
    } else {
        addEvent = window.addEventListener;
        eventPrefix = '';
    }
    addEvent(eventPrefix + 'load', function() {
        loadScroll();
        if (typeof Sys != 'undefined' && typeof Sys.WebForms != 'undefined') {
            Sys.WebForms.PageRequestManager.getInstance().add_endRequest(loadScroll);
            Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(saveScroll);
        }
    }, false);
    addEvent(eventPrefix + 'unload', saveScroll, false);
})();

