//-- ivgStores Common Javascript Definitions
//-- Copyright 2007 ivgStores, LLC, All Rights Reserved.
// 
// Usage:  <script src="/common.js" type="text/javascript"></script>

String.prototype.trim = function () 
{ return this.replace(/^\s+|\s+$/g, ''); }

// ivgPopUp:  Opens a popup window
// DEFAULTS:  
// bScrollBar = 1, sWindowName = "ivgPop", bToolbar = 0, bLocation = 0
// names the window "ivgMain" if it has no name
function ivgPopUp(sUrl, nWidth, nHeight, bScrollBar, sWindowName, bToolbar, bLocation) 
{
    if (!bScrollBar)
        bScrollBar = 1;
    if (!sWindowName)
        sWindowName = "ivgPop";
    if (sWindowName == '')
    
        sWindowName = "ivgPop";
    if (!bToolbar)
        bToolbar = 0;
    if (!bLocation)
        bLocation = 0;
        
    ivgPopUpWin = window.open(sUrl, sWindowName, "width=" + nWidth + ",height=" + nHeight + ",scrollbars=" + bScrollBar + ",toolbar=" + bToolbar + ",location=" + bLocation + ",directories=0,status=0,menubar=0,resizable=1");
    if (self.name == "")
        self.name = "ivgMain";
    ivgPopUpWin.focus();
}

function ivgPopFull(sUrl, nWidth, nHeight, sWindowName) 
{
    if (!sWindowName)
        sWindowName = "ivgPopFull";
    if (sWindowName == '')
        sWindowName = "ivgPopFull";
		
	var sOptions;
	
	if (nWidth)
	{
		sOptions = "width=" + nWidth;
		if (nHeight)
			sOptions = sOptions + ",height=" + nHeight;
		sOptions = sOptions + ",scrollbars=1,toolbar=1,location=1,directories=1,status=1,menubar=1,resizable=1";
    }
    
	if (!sOptions)
		ivgPopUpWin = window.open(sUrl, sWindowName);
	else
		ivgPopUpWin = window.open(sUrl, sWindowName, sOptions);
		
    if (self.name == "")
        self.name = "ivgMain";
    ivgPopUpWin.focus();
}


function SubmitRollOver(oButton)
{ oButton.className += '_Hover'; }

function SubmitRollOff(oButton)
{
	var sClass = oButton.className
	oButton.className = sClass.replace('_Hover', '');
}

var panes = new Array();
function setupPanes(containerId, defaultTabId) 
{
    // go through the DOM, find each tab-container
    // set up the panes array with named panes
    // find the max height, set tab-panes to that height
    panes[containerId] = new Array();
    var maxHeight = 0; var maxWidth = 0;
    var container = document.getElementById(containerId);
    if (container == null)
        return;
    var paneContainer = container.getElementsByTagName("div")[0];
    var paneList = paneContainer.childNodes;
    for (var i=0; i < paneList.length; i++ ) {
        var pane = paneList[i];
        if (pane.nodeType != 1) continue;
        // Uncomment this pair and the pair below to resize the pane container to the size of the largest pane
        // if (pane.offsetHeight > maxHeight) maxHeight = pane.offsetHeight;
        // if (pane.offsetWidth  > maxWidth ) maxWidth  = pane.offsetWidth;
        panes[containerId][pane.id] = pane;
        pane.style.display = "none";
    }
    // paneContainer.style.height = maxHeight + "px";
    // paneContainer.style.width  = maxWidth + "px";
    document.getElementById(defaultTabId).onclick();
}

function ShowReviews(paneId, activeTab, sDiv, sReviewSelectID)
{
    if (sDiv != null)
        showPaneAndMove(paneId, activeTab, sDiv);
    else
        showPane(paneId, activeTab);
    ResortReviews(sReviewSelectID);
    return false;    
}

// var bResorted = false;
function ResortReviews(sReviewSelectID)
{
    // if (bResorted)
    //     return;
    // bResorted = true;
    
    var RevSortBy  = document.getElementById(sReviewSelectID);
    if (RevSortBy != null)
    {
        var RevSortByOpts = RevSortBy.options;
        for (optOffset = 0; optOffset < RevSortByOpts.length; optOffset++)
        {
            if (RevSortByOpts[optOffset].value == 'rating_high')
                RevSortByOpts[optOffset].selected = true;
            else
                RevSortByOpts[optOffset].selected = false;
        }
        RevSortBy.onchange();
    }
}

function showPaneAndMove(paneId, activeTab, sDiv) 
{
    showPane(paneId, activeTab);
    Effect.ScrollTo(sDiv, { duration: 1.0 });
}

function showPane(paneId, activeTab) 
{
    // make tab active class
    // hide other panes (siblings)
    // make pane visible
  
    for (var con in panes) 
    {
        activeTab.blur();
        activeTab.className = "tab-active";
        if (panes[con][paneId] != null) // tab and pane are members of this container
        { 
            var pane = document.getElementById(paneId);
            pane.style.display = "block";
            var container = document.getElementById(con);
            var tabs = container.getElementsByTagName("ul")[0];
            var tabList = tabs.getElementsByTagName("a")
            for (var i=0; i<tabList.length; i++ ) 
            {
                var tab = tabList[i];
                if (tab != activeTab) tab.className = "tab-disabled";
            }
            for (var i in panes[con]) 
            {
                var pane = panes[con][i];
                if (pane == undefined) continue;
                if (pane.id == paneId) continue;
                if (pane.style == null) continue;
                pane.style.display = "none"
            }
        }
    }
    return false;    
}

function FlipDisplayPlusMinus(AttribID, image)
{
    if (AttribID.style.display == "block" || AttribID.style.display == "")
    {    
        document.cookie = AttribID.id+"=0;";
        AttribID.style.display = "none";
        image.src = "/IVG2/Templates/Images/Plus.gif";
    }
    else
    {    
        document.cookie = AttribID.id+"=1;";
        AttribID.style.display = "block";
        image.src = "/IVG2/Templates/Images/Minus.gif";
    }
}

function SetImage(imgID,imgSrc)
{
    var element = document.getElementById(imgID);
    element.src = imgSrc;
}

function SwapImage(sImgID, sImgSrc1, sImgSrc2)
{
    var element = document.getElementById(sImgID);
    if (element == null)
        return;
        
    if (element.src.indexOf(sImgSrc1) != -1)
        element.src = sImgSrc2;
    else if (element.src.indexOf(sImgSrc2) != -1)
        element.src = sImgSrc1;
}

function RewriteSearchUrl(sSearchUrlBase, sSearchTermParam)
{
    var sSearchValue = document.getElementById(sSearchTermParam).value
    if (sSearchValue != '')
    {
        if (sSearchValue.indexOf('"') != -1)
            return true;
        if (sSearchValue.length > 70)
            return true;
    
        var re = / /g;
        sSearchValue = sSearchValue.trim().replace(re, '+');
        document.location = sSearchUrlBase + sSearchValue + '.htm'
    }
    return false;
}

function addLoadEvent(func) 
{   
    var oldonload = window.onload;   
    if (typeof window.onload != 'function')
        window.onload = func;   
    else 
    {   
        window.onload = function() 
        {   
            if (oldonload)
                oldonload();   
            func();   
        }   
    }   
}   

function findPos(obj)
{
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        do 
        {
	        curleft += obj.offsetLeft;
	        curtop  += obj.offsetTop;
        } while (obj = obj.offsetParent);
    }    
    return [curleft,curtop];
}

function ValidEmail(sEmail)
{
	if (sEmail.indexOf('@') == -1 || 
	    sEmail.indexOf('.') == -1 || 
	    sEmail.indexOf('@') != sEmail.lastIndexOf('@') || 
	    sEmail.indexOf('@') > sEmail.lastIndexOf('.')  || 
	    sEmail.length - sEmail.lastIndexOf('.') <= 1)
        return false;
    return true;
}      

function JoinList(form, textarea, button, label)
{
    var eleForm     = document.getElementById(form);
    var eleTextarea = document.getElementById(textarea);
    var eleButton   = document.getElementById(button);
    var eleLabel    = document.getElementById(label);
    var email       = eleTextarea.value;

    if (!ValidEmail(email))
    {
        alert("Please enter a valid email address.");
        return false;
    }

    eleTextarea.style.display = "none";
    eleButton.style.display   = "none";
    eleLabel.style.display    = "block";
    
    AjaxPost(eleForm.action, textarea + "=" + email, true);
    return false;
}

function AjaxPost(sURL, sQuery, bAsync) 
{
    var request     = window.XMLHttpRequest
                    ? new XMLHttpRequest()                      // Mozilla/Safari
                    : new ActiveXObject("Microsoft.XMLHTTP");   // IE
    
    request.open('POST', sURL, bAsync);
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    // request.onreadystatehcange = function() 
    // {
    //     if (request.readyState == 4)
    //         // USE self.xmlHttpReq.responseText;
    // }
    request.send(sQuery);
}

function ShowDiv(sDiv, sHTML, nOffset)
{
    if (nOffset != null)
    {
        var oDiv = document.getElementById(sDiv);
        oDiv.style.display = "block";
        Effect.ScrollTo(sDiv, { duration: 1.0, offset: nOffset,  queue: "begin" });
        oDiv.style.display = "none";
    }
    if (sHTML != null)
        oDiv.innerHTML = sHTML;
    Effect.BlindDown(sDiv, { duration: 0.4, queue: "end" });
    return false;
}

function HideDiv(sDiv)
{
    Effect.BlindUp(sDiv, { duration: 0.4, queue: "end" });
    return false;
}

function ToggleDivVisibility(sDiv)
{
    var oDiv = document.getElementById(sDiv);
    if (oDiv.style.display == "none")
        ShowDiv(sDiv, null, null);    
    else
        HideDiv(sDiv)
}

function SelectOption(sHideDiv, sOptionSelect, sOptionID, nOffset)
{
    var optionSelect = document.getElementById(sOptionSelect);
    var nCount;
    for (nCount = 0; nCount < optionSelect.length; nCount++)
    {
        if (optionSelect[nCount].value == sOptionID)
        {
            optionSelect.selectedIndex = nCount;
            Effect.BlindUp(sHideDiv, { duration: 0.4, queue: "begin" });
            Effect.ScrollTo(sOptionSelect, { duration: 1.0, offset: nOffset, queue: "end" });
            return false;
        }
    }
}

function ChangeStyle(sElementID, sClassName)
{
    var element = document.getElementById(sElementID);
    if (element != null)
        element.className = sClassName; 
}

function setDivHeights()
{
    var iLeftHeight = 0;
    var iRightHeight = 0;
    var oMerchGroups = document.getElementById("MerchGroups");
    if (oMerchGroups != null) 
        iLeftHeight = oMerchGroups.offsetHeight;
    var oTopSellers = document.getElementById("TopSellers");
    if (oTopSellers != null)
        iRightHeight = oTopSellers.offsetHeight;
    if (iLeftHeight > iRightHeight && oTopSellers != null)
        oTopSellers.style.height = (iLeftHeight - 24) + "px";
}

function HighlightError(sLabelID, sInputID, sClassName, sErrorBoxID)
{
    var oLabel = document.getElementById(sLabelID);
    var oInput = document.getElementById(sInputID);
    if (oLabel != null)
        oLabel.className = sClassName;
    if (oInput != null)
        oInput.className = sClassName;
        
    var oErrorBox = document.getElementById(sErrorBoxID);
    if (oErrorBox != null)
        oErrorBox.style.display = "block";
}

function ValidateCreditCardNumber(sCardNumber)
{
    sCardNumber         = sCardNumber.replace("-", "").replace(" ", "");
    var nLength         = sCardNumber.length;
    var nChecksum       = 0;
    var bAlternateDigit = false;
    
    for (var nPos = nLength - 1; nPos >= 0; nPos--)
    {
        var nDigit = parseInt(sCardNumber.substring(nPos, nPos + 1));
        if (nDigit < 0 || nDigit > 10)
            return false;

        if (bAlternateDigit)
        {
            nDigit *= 2;
            if (nDigit > 9)
                nDigit -= 9;
        }
        nChecksum += nDigit;
        bAlternateDigit = !bAlternateDigit;
    }
    return ((nChecksum % 10) == 0);
}

function setCookie(sName, sValue, fExpireDays, sPath, sDomain, bSecure)
{
    if (fExpireDays)
        fExpireDays = fExpireDays * 1000 * 60 * 60 * 24;
    var dtNow     = new Date();
    var dtExpires = new Date(dtNow.getTime() + fExpireDays);

    var sCookieText  = escape(sName) + '=' + escape(sValue);
    sCookieText     += (fExpireDays ? '; EXPIRES=' + dtExpires.toGMTString() : '');
    sCookieText     += (sPath       ? '; PATH='    + sPath : '');
    sCookieText     += (sDomain     ? '; DOMAIN='  + sDomain : '');
    sCookieText     += (bSecure     ? '; SECURE' : '');
    
    document.cookie = sCookieText;
}

function GetVisitorID(sURL, sReferrer, sOrderCode)
{
    var IVGDH      = new ivgDataHandler();
    var nVisitorID = IVGDH.LogVisitor(sURL, sReferrer);
    setCookie("IVGContext.VisitorID", nVisitorID, 20 * 365, '/', '', 0)

    var oOrderCode = document.getElementById(sOrderCode);
    if (oOrderCode == null)
        return nVisitorID;
        
    var sVisitorID    = nVisitorID.toString(16);
    var sVisitorIDHex = "";
    for (var nChar = 0; nChar < sVisitorID.length; nChar++)
    {
        if ((nChar > 0) && ((nChar % 4) == 0))
            sVisitorIDHex += "-";
        sVisitorIDHex += sVisitorID.charAt(nChar);
    }
    oOrderCode.innerHTML = sVisitorIDHex;
    return nVisitorID;
}

function GetBrowserWindowInfo()
{
    if (navigator.appName == "Netscape") 
        return window.innerWidth + '|' + window.innerHeight; 
    else if (navigator.appName == "Microsoft Internet Explorer") 
        return document.body.clientWidth + '|' + document.body.clientHeight; 
    return 0;
}

function SetBrowserWindowInfoInCookie()
{ setCookie("IVGContext.BrowserInfo", GetBrowserWindowInfo(), 1, '/', '', 0) }