﻿//=====================================================================
//====  BEGIN   Ajax.Net request handling

var _aspnetBeginRequestHandlers = new Object();

//----  Begin Request Handlers
//  Process registered end request handlers
function ASPNetBeginRequestHandler(sender, args) {
    for (var handler in _aspnetBeginRequestHandlers) {
        if (_aspnetBeginRequestHandlers[handler]) {
            _aspnetBeginRequestHandlers[handler](sender, args);
        }
    }
}

//  Add new end request handler
function AddASPNetBeginRequestHandler(handler, key) {
    if (!key) {
        key = handler.toString();
    }

    _aspnetBeginRequestHandlers[key] = handler;
}

//  Remove an end request handler
function RemoveASPNetBeginRequestHandler(key) {
    if (key) {
        _aspnetBeginRequestHandlers[key.toString()] = null;
    }
}

//  Clear all end request handlers
function ClearASPNetBeginRequestHandlers() {
    _aspnetBeginRequestHandlers = new Object();
}

//  End request handling startup routine
function SetupASPNetBeginRequestHandlers() {
    try {
        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(ASPNetBeginRequestHandler);
    }
    catch (exception) {
    }
}

//----  End Request Handlers
var _aspnetEndRequestHandlers = new Object();

//  Process registered end request handlers
function ASPNetEndRequestHandler(sender, args) {
    for (var handler in _aspnetEndRequestHandlers) {
        if (_aspnetEndRequestHandlers[handler]) {
            _aspnetEndRequestHandlers[handler](sender, args);
        }
    }
}

//  Add new end request handler
function AddASPNetEndRequestHandler(handler, key) {
    if (!key) {
        key = handler.toString();
    }

    _aspnetEndRequestHandlers[key] = handler;
}

//  Remove an end request handler
function RemoveASPNetEndRequestHandler(key) {
    if (key) {
        _aspnetEndRequestHandlers[key.toString()] = null;
    }
}

//  Clear all end request handlers
function ClearASPNetEndRequestHandlers() {
    _aspnetEndRequestHandlers = new Object();
}

//  End request handling startup routine
function SetupASPNetEndRequestHandlers() {
    try {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(ASPNetEndRequestHandler);
    }
    catch (exception) {
    }
}

//----  Startup handling on document ready
$(document).ready(function() {
    //  Setup end request handlers
    SetupASPNetBeginRequestHandlers();
    SetupASPNetEndRequestHandlers();

});

//====  END   Ajax.Net request handling
//=====================================================================

function CenterControl(controlToCenter, referenceControl) {
    var referenceControlHeight;
    var referenceControlWidth;
    var referenceControlScrollTop;
    var referenceControlScrollLeft;

    if (!referenceControl) {
        referenceControl = window;
    }

    if (referenceControl == window && referenceControl != top) {
        //  Iframe
        referenceControlHeight = 600;
        referenceControlWidth = 600;
        referenceControlScrollTop = GetTopScrollTop(); //document.documentElement.scrollTop > document.body.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
        referenceControlScrollLeft = GetTopScrollLeft(); //document.documentElement.scrollLeft > document.body.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft;
    }
    else {
        referenceControlHeight = $(referenceControl).height();
        referenceControlWidth = $(referenceControl).width();
        referenceControlScrollTop = $(referenceControl).scrollTop();
        referenceControlScrollLeft = $(referenceControl).scrollLeft();
    }

    var jControlToCenter = $(controlToCenter);
    var topPosition = ((referenceControlHeight - jControlToCenter.height()) / 2 + referenceControlScrollTop);
    var leftPosition = ((referenceControlWidth - jControlToCenter.width()) / 2 + referenceControlScrollLeft);

    jControlToCenter.css("position", "absolute");

//    alert('referenceControl.height: ' + $(referenceControl).height() + ', referenceControl.width: ' + $(referenceControl).width() +
//        ', topPosition: ' + topPosition + ', leftPosition: ' + leftPosition +
//        ', top.height: ' + referenceControlHeight + ', top.width: ' + referenceControlWidth +
//        ', top.scrollTop: ' + GetTopScrollTop() + ', top.scrollLeft: ' + GetTopScrollLeft() +
//        ', referenceControl.scrollTop: ' + $(referenceControl).scrollTop() + ', referenceControl.scrollLeft: ' + $(referenceControl).scrollLeft() +
//        ', jControlToCenter.height: ' + jControlToCenter.height() + ', jControlToCenter.width: ' + jControlToCenter.width());
     
    jControlToCenter.css("top", topPosition + "px");
    jControlToCenter.css("left", leftPosition + "px");

    return jControlToCenter;
}

function EnsureVisibleInWindow(control, yOffset) {
    var scrollingFunction = function() {
        //                alert('div scrollTop: ' + $("#divAdvertisementComparison").scrollTop() +
        //                    ", window scrollTop:" + $(window).scrollTop() +
        //                    ", div offset().top:" + $("#divAdvertisementComparison").offset().top
        //                    );
        if (typeof (yOffset) == "undefined") {
            yOffset = 0;
        }

        var jControl;

        if (typeof (control) == "string") {
            jControl = $(control);
        }
        else {
            jControl = control;
        }

        var divTop = jControl.offset().top + yOffset;
        var winTop;
        var winHeight;

        winTop = $(window).scrollTop();
        winHeight = $(window).height();

        //jControl.remove(".test_scroll").append("<div class='test_scroll'>offsetTop: " + jControl.offset().top + ", scrollTop: " + $(window).scrollTop() + ", GetTopScrollTop: " + GetTopScrollTop() + "</div>");

        if (divTop < winTop) {
            jControl
			    .stop()
			    .animate({ "top": winTop + "px" }, "slow");
        }
        else {
            var divHeight = jControl.height();
            var divBottom = divTop + divHeight;
            var winBottom = winTop + winHeight;
            if (divBottom > winBottom) {
                jControl
			        .stop()
			        .animate({ "top": (winBottom - divHeight) + "px" }, "slow");
            }
        }
    };

//    if (window != top) {
//        //  Iframe
//        top.onscroll = scrollingFunction;
//    }
//    else {
        $(window).scroll(scrollingFunction);
//    }

}

//  2009-11-18  FF
//problems with IE7: when the page scroll down, the comparison div was shown 70px under the window, but when the page scroll up worked fine

var lastWinTop;//this variable is used to strore the last win top in order to compare it to current wintop and know if is scrolling up or down
var scrollDownIE7 = false; //this variable is used to know when there was a scroll down in ie7

//Ensure window original doesn't work correctly, using this insted:
function EnsureVisibleInWindowForIframe(control, yOffset) {
    var scrollingFunction = function() {
        //                alert('div scrollTop: ' + $("#divAdvertisementComparison").scrollTop() +
        //                    ", window scrollTop:" + $(window).scrollTop() +
        //                    ", div offset().top:" + $("#divAdvertisementComparison").offset().top
        //                    );
        if (typeof (yOffset) == "undefined") {
            yOffset = 0;
        }

        var jControl;

        if (typeof (control) == "string") {
            jControl = $(control);
        }
        else {
            jControl = control;
        }
        //var yOffsetNew = 0;

        var divTop = jControl.offset().top + yOffset;
        var winTop;
        var winHeight;
        winTop = $(window).scrollTop();
        //        alert("last: " + lastWinTop + " wintop: " + winTop);
        //if the lastWintTop is lower than the winTop, it means a scroll down on the window
        if (typeof (lastWinTop) != "undefined" && lastWinTop < winTop) {
            jQuery.each(jQuery.browser, function(i, val) {
                //if the browser is ie 7.0 and the variable scrollDownIE7 was not written yet
                if (i == "msie" && !scrollDownIE7) {
                    scrollDownIE7 = true;
                }
            });
            //there was a problem when scrolling on IE7, scrolling function was triggered 3 times
        } else if (typeof (lastWinTop) != "undefined" && lastWinTop > winTop) {
            scrollDownIE7 = false;
        }
        //save current state of winTop into global variable
        lastWinTop = winTop;

        winHeight = $(window).height();


        //jControl.remove(".test_scroll").append("<div class='test_scroll'>offsetTop: " + jControl.offset().top + ", scrollTop: " + $(window).scrollTop() + ", GetTopScrollTop: " + GetTopScrollTop() + "</div>");
        if (divTop < winTop) {
            //            alert("entro if");
            //            alert("winTop: " + winTop + ", yOffset: " + yOffset);
            jControl
			    .stop()
                .animate({ "top": winTop - (scrollDownIE7 ? yOffset + 70 : yOffset) + "px" }, "slow"); //add 70px only when scroll down in IE7
        }
        else {
            //            alert("entro else");
            var divHeight = jControl.height();
            var divBottom = divTop + divHeight;
            var winBottom = winTop + winHeight;
            //            alert("winTop: " + winTop + ", yOffset: " + yOffset);
            //            if (divBottom > winBottom) {
            //                alert("entro if del else");
            jControl
			        .stop()
			        .animate({ "top": (winBottom - divHeight - (scrollDownIE7 ? yOffset + 70 : yOffset)) + "px" }, "slow"); //add 70px only when scroll down in IE7
            //            }
        }
    };

    //    if (window != top) {
    //        //  Iframe
    //        top.onscroll = scrollingFunction;
    //    }
    //    else {
    $(window).scroll(scrollingFunction);
    //    }

}

function BindSubmitButtonEvents(container, submitControlSelector, useBind) {
    //  Apply to all input controls within .ic_size_four class elements
    if (!submitControlSelector) {
        submitControlSelector = "input[type='submit']";
    }

    if (!useBind) {
        $(container).find("input[type!='submit']").live("keypress", function(event) {

            var keyCode = event.keyCode || event.charCode || window.event.keyCode;
            if (keyCode == 13) {

                //  Enter
                event.preventDefault();
                event.stopPropagation();

                var submitControl = $(container).find(submitControlSelector + ":first");

                if (submitControl.length > 0) {
                    //                alert(submitControl.get(0).tagName);
                    //                alert(submitControl.get(0).onclick);
                    //                alert(submitControl.get(0).href);
                    if (submitControl.get(0).tagName == "A" && submitControl.get(0).href.match(/javascript\:.*/)) {
                        //  href is javascript code (e.g. asp:LinkButton with server side click event)
                        eval(submitControl.get(0).href);
                    }
                    else if (submitControl.get(0).tagName != "INPUT" && submitControl.get(0).onclick) {
                        //  Has click event
                        submitControl.get(0).onclick();
                    }
                    else {
                        //  jQuery click
                        submitControl.click();
                    }
                }
            }
        }
);
    }
    else {
        $(container).find("input[type!='submit']").bind("keypress keyup", function(event) {

            var keyCode = event.keyCode || event.charCode || window.event.keyCode;
            if (keyCode == 13) {

                //  Enter
                event.preventDefault();
                event.stopPropagation();

                var submitControl = $(container).find(submitControlSelector + ":first");

                if (submitControl.length > 0) {
                    //                alert(submitControl.get(0).tagName);
                    //                alert(submitControl.get(0).onclick);
                    //                alert(submitControl.get(0).href);
                    if (submitControl.get(0).tagName == "A" && submitControl.get(0).href.match(/javascript\:.*/)) {
                        //  href is javascript code (e.g. asp:LinkButton with server side click event)
                        eval(submitControl.get(0).href);
                    }
                    else if (submitControl.get(0).tagName != "INPUT" && submitControl.get(0).onclick) {
                        //  Has click event
                        submitControl.get(0).onclick();
                    }
                    else {
                        //  jQuery click
                        submitControl.click();
                    }
                }
            }
        }
);
        $(container).find("select").bind("keyup", function(event) {

            var keyCode = event.keyCode || event.charCode || window.event.keyCode;
            if (keyCode == 13) {

                //  Enter
                event.preventDefault();
                event.stopPropagation();

                var submitControl = $(container).find(submitControlSelector + ":first");

                if (submitControl.length > 0) {
                    //                alert(submitControl.get(0).tagName);
                    //                alert(submitControl.get(0).onclick);
                    //                alert(submitControl.get(0).href);
                    if (submitControl.get(0).tagName == "A" && submitControl.get(0).href.match(/javascript\:.*/)) {
                        //  href is javascript code (e.g. asp:LinkButton with server side click event)
                        eval(submitControl.get(0).href);
                    }
                    else if (submitControl.get(0).onclick) {
                        //  Has click event
                        submitControl.get(0).onclick();
                    }
                    else {
                        //  jQuery click
                        submitControl.click();
                    }
                }
            }
        }
);
    }

}

//  TODO: Check if this code works ok when iframe container is in different domain than the iframe
function GetTopScrollTop() {
    var element = top;
    var iebody = (element.document.compatMode && element.document.compatMode != "BackCompat") ? element.document.documentElement : element.document.body;

    var dsocleft = element.document.all ? iebody.scrollLeft : element.pageXOffset;
    var dsoctop = element.document.all ? iebody.scrollTop : element.pageYOffset;

    return dsoctop;
}

function GetTopScrollLeft() {
    var element = top;
    var iebody = (element.document.compatMode && element.document.compatMode != "BackCompat") ? element.document.documentElement : element.document.body;

    var dsocleft = element.document.all ? iebody.scrollLeft : element.pageXOffset;
    var dsoctop = element.document.all ? iebody.scrollTop : element.pageYOffset;

    return dsocleft;
}
