function RecoverScroll() {

    x = 0;
    y = 0;
    delay = null;

    cookieExpireDays = 1;
    cookieName = "RecoverScroll";


    this.init = function(name) {

        var data, dx=0, dy=0;

        if(name != 'undefined' && name != "") {
            cookieName = name;
        }

        this.addEventListener(window, "scroll", recordData, false);

        if(window.location.hash == "" 

            && (data = readDataFromCookie(cookieName)) != null
            && data != ""  
            && (data = data.split('|')).length == 4 
            && !isNaN(dx=Number(data[1])) && !isNaN(dy=Number(data[3]))) {

            window.scrollTo(dx, dy);
        }
    }

    this.addEventListener = function(element, event_name, observer, capturing)  {  

        if ( element.addEventListener ) {  
            element.addEventListener( event_name, observer, capturing ); 
        } else if ( element.attachEvent ) {
            element.attachEvent( "on" + event_name, observer );
        }
    }

    setDataToCookie = function(name, value, days) {

        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days*24*60*60*1000));
            var expires = "; expires=" + date.toGMTString();
        } else {
            var expires = "";
        }

        document.cookie = name + "=" + value + expires + "; path=/";
    }

    readDataFromCookie = function(name) {

        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') c = c.substring(1,c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        
        return null;
    }

    recordData = function() {
          clearTimeout(delay);
          delay = setTimeout(function(){prepareRecordData(this.cookieName);}, 500);
    }

    getXYPosition = function() {

        if( typeof( window.pageYOffset ) == 'number' ) {
            y = window.pageYOffset; 
            x = window.pageXOffset;
        } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
            y = document.body.scrollTop; 
            x = document.body.scrollLeft;
        } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
            y = document.documentElement.scrollTop; 
            x = document.documentElement.scrollLeft;
        }

        if (x > 0 || y > 0) {
            return true;
        } else {
            return false;
        }
    }

    prepareRecordData = function(name) {

        if (getXYPosition()) {

            var result = 'x|'+this.x+'|y|'+this.y;

            setDataToCookie(cookieName, result, cookieExpireDays);
        }
    }

}
