﻿/// <reference path="jquery-1.4.2-vsdoc.js" />

var openTimer = null;
var closeTimer = null;
var optionsCache = new Array();
var xmlHttp = null;

var popupOpen = false;
var seeMoreInfoInitialAltText = null;

var flagImageArray = new Array();

function getMousePosition(e) {

    var posx = 0;
    var posy = 0;
    if (!e) var e = window.event;
    
    if (e.pageX || e.pageY) {
        posx = e.pageX;
        posy = e.pageY;
    }
    else if (e.clientX || e.clientY) {
        posx = e.clientX + document.body.scrollLeft
					+ document.documentElement.scrollLeft;
        posy = e.clientY + document.body.scrollTop
					+ document.documentElement.scrollTop;
    }

    return { x: posx, y: posy };

}

function createPopup(modelNumber, popupID, ignoreTimer) {

    var timeout = 100;
    if (ignoreTimer)
        timeout = 0;
        
    openTimer = setTimeout(function() { doCreatePopup(modelNumber, popupID) }, timeout);

}

function stopPopup() {
    if (!popupOpen) {
        clearTimeout(openTimer);
    }
}

function doCreatePopup(modelNumber, popupID) {
    var popup = document.getElementById(popupID);
    if (popup) // make sure popup container is created
    {
        popup.onmouseout = function(event) { killPopup(event, popupID); };
        
        var hoverCell = document.getElementById('HoverCell' + modelNumber);
        hoverCell = $(hoverCell);
        var popupHoverCell = document.getElementById(popupID + '-ModelPopupMoreOptions');

        popupHoverCell.style.height = hoverCell.outerHeight() + 'px';

        var image = document.getElementById("ModelImage" + modelNumber);
        var imageURL = document.getElementById("ModelImageUrl" + modelNumber).value;

        var imageLink = document.getElementById("ModelImageLink" + modelNumber);
        var imageLinkContainer = document.getElementById("ModelImageContainer" + modelNumber);
        var imageCell = document.getElementById("ModelImageCell" + modelNumber);
        var linkCell = document.getElementById("ModelLinkCell" + modelNumber);
        var link = document.getElementById("ModelLink" + modelNumber);
        var priceCell = document.getElementById("ModelPrice" + modelNumber);
        var modelReviews = document.getElementById("ModelReviews" + modelNumber);
        var categoryLinkCell = document.getElementById("CategoryLinkCell" + modelNumber);
        var brandLinkCell = document.getElementById("BrandLinkCell" + modelNumber);

        var popupImageLinkContainer = document.getElementById(popupID + '-ModelPopupImageLinkContainer');
        var popupImageContainer = document.getElementById(popupID + '-ModelPopupImageContainer');
        var popupImage = document.getElementById(popupID + '-ModelPopupImage');
        var popupImageLink = document.getElementById(popupID + '-ModelPopupImageLink');
        var popupLinkContainer = document.getElementById(popupID + '-ModelPopupLink');
        var popupPriceContainer = document.getElementById(popupID + '-ModelPopupPrice');
        var popupSeeMoreInfo = document.getElementById(popupID + '-ModelPopupSeeMoreInfo');
        var popupReviewStars = document.getElementById(popupID + '-ModelPopupReviewStars');
        var popupCategoryLinkContainer = document.getElementById(popupID + "-ModelPopupCategoryLink");
        var popupBrandLinkContainer = document.getElementById(popupID + "-ModelPopupBrandLink");

        popupLinkContainer.innerHTML = linkCell.innerHTML;
        popupPriceContainer.innerHTML = priceCell.innerHTML;        
                
        if(categoryLinkCell)
        {
            popupCategoryLinkContainer.innerHTML = categoryLinkCell.innerHTML;
            $(popupCategoryLinkContainer).css('paddingTop', $(categoryLinkCell).css('paddingTop'));
        }
        else
        {
            popupCategoryLinkContainer.innerHTML = '';
        }
        
        if(brandLinkCell)
        {
            popupBrandLinkContainer.innerHTML = brandLinkCell.innerHTML;  
            $(popupBrandLinkContainer).css('paddingTop', $(brandLinkCell).css('paddingTop'));          
        }
        else
        {
            popupBrandLinkContainer.innerHTML = '';
        }

        if (modelReviews) {
            popupReviewStars.innerHTML = modelReviews.innerHTML;

            $(popupReviewStars).css('paddingTop', $(modelReviews).css('paddingTop'));
        }
        else {
            popupReviewStars.innerHTML = '';
        }

        $(popupImageLinkContainer).css('background-image', $(imageLinkContainer).css('background-image'));
        $(popupImageLinkContainer).css('background-repeat', $(imageLinkContainer).css('background-repeat'));
        $(popupImageLinkContainer).css('background-position', 'center');

        popupImage.src = image.src;
        popupImage.alt = image.alt;
        popupImage.border = '0';

        popupImageLink.href = imageLink.href;
        popupImageLink.title = imageLink.title;
        popupImageLink.className = imageLink.className;
        popupImageLink.rel = imageLink.rel;       

        popupImageContainer.style.height = $(imageCell).outerHeight() + 'px';

        popupSeeMoreInfo.href = imageLink.href;
        if (!seeMoreInfoInitialAltText)
            seeMoreInfoInitialAltText = popupSeeMoreInfo.title;

        popupSeeMoreInfo.title = seeMoreInfoInitialAltText + ' ' + link.innerHTML;

        image = $(image);

        getOptions(modelNumber, popupID);
        positionPopup(modelNumber, popupID);

        popupOpen = true;
    }
}

function positionPopup(modelNumber, popupID) {
    var popup = document.getElementById(popupID);

    if (popup) {
        var popupImage = document.getElementById(popupID + "-ModelPopupImage");

        if (popupImage) {
            popup.style.left = '0px';
            popup.style.top = '0px';

            var image = document.getElementById("ModelImage" + modelNumber);
            image = $(image);

            var leftPadding = $(popupImage).offset().left - $(popup).offset().left;
            var topPadding = $(popupImage).offset().top - $(popup).offset().top;

            var left = image.position().left - leftPadding;
            var top = image.position().top - topPadding;

            var popupHeight = $(popup).height();
            var popupWidth = $(popup).width();

            if (left < 0)
                left = 0;

            if (left + popupWidth > $(window).width())
                left = $(window).width() - popupWidth - 1;

            if (top < $(window).scrollTop())
                top = $(window).scrollTop();

            if (top + popupHeight > $(window).scrollTop() + $(window).height()) {
                top = $(window).scrollTop() + $(window).height() - popupHeight - 1;
            }

            popup.style.left = left + 'px';
            popup.style.top = top + 'px';


            // IE7 or less Fix

            //if (isIELessThan8()) {
                var headerLeftWidth = $('#' + popupID + ' div.HeaderLeft').width();
                var headerRightWidth = $('#' + popupID + ' div.HeaderRight').width();

                var footerLeftWidth = $('#' + popupID + ' div.FooterLeft').width();
                var footerRightWidth = $('#' + popupID + ' div.FooterRight').width();

                var newWidth = $('#' + popupID + ' div.StockPopupBody').width();

                //alert(newWidth);
                $('#' + popupID + ' div.HeaderMiddle').css('width', newWidth - headerLeftWidth - headerRightWidth);
                $('#' + popupID + ' div.FooterMiddle').css('width', newWidth - footerLeftWidth - footerRightWidth);
            //}
        }
    }
}

function isIELessThan8()
{
    var isIEAny = /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);

    if (isIEAny) {
        if (document.documentMode && document.documentMode >= 8) {
            return false; // IE8+
        }
        else {
            return true;
        }
    }
    else {
        var ieVersion = getInternetExplorerVersion();
        if (ieVersion >= 8.0) {
            return false;
        }
        else
            return true;
        return false;
    }
}

function getInternetExplorerVersion() {

    var rv = -1; // Return value assumes failure.

    if (navigator.appName == 'Microsoft Internet Explorer') {

        var ua = navigator.userAgent;

        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");

        if (re.exec(ua) != null)

            rv = parseFloat(RegExp.$1);

    }

    return rv;

}

function killPopup(event, popupID, ignoreTimer) {
    var popup = document.getElementById(popupID);

    if (!isMouseOverElement(event, popupID)) {
        var timeout = 400;
        if (ignoreTimer)
            timeout = 0;

        closeTimer = setTimeout(function() {
            popup.style.top = '-2000px';
            popup.style.left = '-2000px';
            popupOpen = false;
        }, timeout);

        if (!ignoreTimer) {
            popup.onmouseover = function() { clearTimeout(closeTimer); };
        }
    }
}

function isMouseOverElement(event, id) {
    var element = document.getElementById(id);
    element = $(element);

    var mousePos = getMousePosition(event);

    if (mousePos.x >= element.position().left && mousePos.x < (element.position().left + element.width())
					&& mousePos.y >= element.position().top && mousePos.y < (element.position().top + element.height())) {
        return true;
    }
    else
        return false;
}

function initAjaxRequest() {
    try {  // Firefox, Opera 8.0+, Safari  

        xmlHttp = new XMLHttpRequest();

    }
    catch (e) {  // Internet Explorer  
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            try {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e) {
            }
        }
    }
}

function getOptions(modelNumber, popupID) {

    var popupLoadingDiv = document.getElementById(popupID + '-PopupLoading');
    var stockOptions = document.getElementById(popupID + '-StockOptionsPopup');

    if (optionsCache[modelNumber] == null) {
        var elementID = 'ModelID' + modelNumber;
        var modelID = parseInt(document.getElementById(elementID).value);

        initAjaxRequest();
        xmlHttp.onreadystatechange = function() {
            showOptions(modelNumber, popupID, modelID);
        };

        popupLoadingDiv.style.display = 'block';
        popupLoadingDiv.style.visibility = 'visible';

        stockOptions.innerHTML = '';
        stockOptions.style.display = 'none';
        stockOptions.style.visibility = 'hidden';

        var url = 'AjaxScripts/StockOptions.aspx?ModelID=' + modelID;

        xmlHttp.open("GET", url, true);
        xmlHttp.send(null);
    }
    else {
        popupLoadingDiv.style.display = 'none';
        popupLoadingDiv.style.visibility = 'hidden';

        stockOptions.style.display = 'block';
        stockOptions.style.visibility = 'visible';
        stockOptions.innerHTML = optionsCache[modelNumber];
    }
}

function showOptions(modelNumber, popupID, modelID) {
    if (xmlHttp.readyState == 4) {
        var popupLoadingDiv = document.getElementById(popupID + '-PopupLoading');
        var stockOptions = document.getElementById(popupID + '-StockOptionsPopup');

        optionsCache[modelNumber] = xmlHttp.responseText;

        popupLoadingDiv.style.display = 'none';
        popupLoadingDiv.style.visibility = 'hidden';

        stockOptions.style.display = 'block';
        stockOptions.style.visibility = 'visible';
        stockOptions.innerHTML = optionsCache[modelNumber];

        if (popupOpen) {
            positionPopup(modelNumber, popupID);
        }
    }
}

function changeMoreOptionsForIE6(id, ie6ClickFunction, otherClickFunction) {
    var ieVersion = getInternetExplorerVersion();

    if (ieVersion > -1 && ieVersion < 7) {
        $('#' + id + ' img').hide().css('visibility', 'hidden');
        $('#' + id + ' span').click(function() { eval(ie6ClickFunction); });
    }
    else
        $('#' + id + ' span').click(function() { eval(otherClickFunction); });
}
