// *** PAGE SPECIFIC VARIABLES *** //

var activeConnectAreaId = "";
var cityList;
var dnisList;
var cityListXmlDom;
var cityListXmlUrl;
var adCodeListXmlDom;
var adCodeListXmlUrl;
var connectButtonSrc;
var connectButtonInactiveSrc;
var inputTextElement;

// *** PAGE SPECIFIC FUNCTIONS *** //

// init function called after page has loaded
function init()
{
    // initialize google analytics variables
    pageTracker = _gat._getTracker(googleAnalyticsAccountNumber);
    pageTracker._initData();
    
    // initialize required variables
    setCookieIdAndSessionId();
    locale = getLocale();
    id = evalParamAndCookieValue("id", id);
    setAdCodeAndContext();
    setActiveConnectAreaId();
    
    // setup adCode list
    if (adCodeListXmlUrl)
    {
        jQuery.get(adCodeListXmlUrl, {}, function(xml) {
            adCodeListXmlDom = parseXmlString(xml);
            renderLocaleElements();    
        });
    }
    
    // logic to render the "connectArea"
    renderConnectArea();
}
    
// use to properly render the 'connect area' of the page
function renderConnectArea()
{
    if (activeConnectAreaId == "cityDisplay")
    {
        // activate connect area city display only for users outside north america
        var cityDisplay = document.getElementById(activeConnectAreaId);
        if (cityDisplay)
        {
            // unhide connect area
            cityDisplay.className = "connect_sm";
            
            // prepopuluate the city if previously selected one
            renderLastCitySelected();
            
            // setup city list auto suggest
            if (cityListXmlUrl)
            {
                jQuery.get(cityListXmlUrl, {}, function(xml) {
                    cityListXmlDom = parseXmlString(xml);
                    initAutoSuggest();
                });
            }
            
            // set focus on input text box
            inputTextElement = document.getElementById(activeConnectAreaId + ".areaCode");
            if (inputTextElement) setTimeout("inputTextElement.focus()", 2000);
        }
        
        // set pageId/pageEventId
        pageId = "15";
        pageEventId = "0";
        
        pageTracker._trackPageview("homeNoDirectDial");
    }
    else if (activeConnectAreaId == "phoneNumberDisplay")
    {
        // activate connect area phone number display only for windows/firefox users
        var phoneNumberDisplay = document.getElementById(activeConnectAreaId);
        if (phoneNumberDisplay)
        {
            // unhide connect area
            phoneNumberDisplay.className = "connect_sm";
        }
        
        // set pageId/pageEventId
        pageId = "14";
        pageEventId = "0";
        
        pageTracker._trackPageview("homeDirectDialOnly");
    }
    else
    {
        // activate connect area phone number and city display
        var phoneNumberCityDisplay = document.getElementById(activeConnectAreaId);
        if (phoneNumberCityDisplay)
        {
            // unhide connect area
            phoneNumberCityDisplay.className = "connect_full";
            
            // prepopuluate the city if previously selected one
            renderLastCitySelected();
            
            // setup city list auto suggest
            if (cityListXmlUrl)
            {
                jQuery.get(cityListXmlUrl, {}, function(xml) {
                    cityListXmlDom = parseXmlString(xml);
                    initAutoSuggest();
                });
            }
            
            // set focus on input text box
            inputTextElement = document.getElementById(activeConnectAreaId + ".areaCode");
            if (inputTextElement) setTimeout("inputTextElement.focus()", 2000);
        }
        
        // set pageId/pageEventId
        pageId = "0";
        pageEventId = "0";
        
        pageTracker._trackPageview("homeMain");
    }
    
    // send tracker update
    trackerUpdate(pageId, pageEventId);
}

// use to properly render locale based elements 
function renderLocaleElements()
{
    var localeFlagPic = document.getElementById(activeConnectAreaId + ".localeFlagPic");
    var localeLink = document.getElementById(activeConnectAreaId + ".localeLink");
    var advertisedNumber = document.getElementById(activeConnectAreaId + ".advertisedNumber");
    
    switch (locale)
    {
        case "en_US":
            if (localeFlagPic) localeFlagPic.src = "/voiceLL-theme/images/flag_connect_US.gif";
            if (localeLink) localeLink.innerHTML = "Switch to Canada";
            if (advertisedNumber) advertisedNumber.innerHTML = getAdvertisedNumber();
            break;
        case "en_CA":
            if (localeFlagPic) localeFlagPic.src = "/voiceLL-theme/images/flag_connect_CA.gif";
            if (localeLink) localeLink.innerHTML = "Switch to USA";
            if (advertisedNumber) advertisedNumber.innerHTML = getAdvertisedNumber();
            break;
        default:
            break;
    }
}

// use to properly render the last city selected
function renderLastCitySelected()
{
    if (!inputTextElement) inputTextElement = document.getElementById(activeConnectAreaId + ".areaCode");
    var lastInputText = getCookie("city");
    if (inputTextElement && lastInputText != null) inputTextElement.value = lastInputText;
}

// use to set the activeConnectAreaId variable
function setActiveConnectAreaId()
{
    if (locale != "en_US" && locale != "en_CA")
    {
        // activate connect area city display only for users outside north america
        activeConnectAreaId = "cityDisplay";
    }
    else if (navigator.userAgent.toLowerCase().indexOf("windows") > -1 && navigator.userAgent.toLowerCase().indexOf("firefox") > -1)
    {
        // activate connect area phone number display only for windows/firefox users
        activeConnectAreaId = "phoneNumberDisplay";
    }
    else
    {
        // activate connect area phone number and city display
        activeConnectAreaId = "phoneNumberCityDisplay";
    }
    activeConnectAreaId = "phoneNumberDisplay"; // TEMPORARILY set to display PHONE NUMBER ONLY
}

// use to validate the input text box (valid returns false)
function validateInputText()
{
    var isDisabled = true;
    if (cityList && dnisList && inputTextElement && inputTextElement.value.length > 0)
    {
        for (var i = 0; i < cityList.length; i++)
        {
            if (cityList[i].toLowerCase() == inputTextElement.value.toLowerCase())
            {
                isDisabled = false;
                inputTextElement.value = cityList[i];
                saveCookie("city", cityList[i]);
                saveCookie("dnis", dnisList[i]);
                break;
            }
        }
        disableConnectButton(isDisabled);
    }
    return isDisabled;
}

// use to enable(false)/disable(true) connect button
function disableConnectButton(isDisabled)
{
    var connectButton = document.getElementById(activeConnectAreaId + ".connectButton");
    if (connectButton)
    {
        connectButton.disabled = isDisabled;
        if (isDisabled == false) connectButton.src = connectButtonSrc;
        else connectButton.src = connectButtonInactiveSrc;
    }
}

// use to flip locale between en_US and en_CA
function clickChangeLocale()
{
    switch (locale)
    {
        case "en_US":
            locale = "en_CA";
            pageEventId = "8";
            trackerUpdate(pageId, pageEventId);
            break;
        case "en_CA":
            locale = "en_US";
            pageEventId = "9";
            trackerUpdate(pageId, pageEventId);
            break;
        default:
            break;
    }
    saveCookie("locale", locale);
    renderLocaleElements();
}

// use to get the advertised number
function getAdvertisedNumber()
{
    var advertisedNumber = "";
    if (adCodeListXmlDom && adCodeListXmlDom != null && (locale == "en_US" || locale == "en_CA"))
    {
        var adCodeArray = adCodeListXmlDom.getElementsByTagName("a");
        for (var i = 0; i < adCodeArray.length; i++)
        {
            if (adCodeArray[i].childNodes[0].nodeValue == adCode) return adCodeListXmlDom.getElementsByTagName(locale)[i].childNodes[0].nodeValue;
        }
        // adcode not found
        if(locale == "en_US") {
        	return '1-877-902-9777';
        }
        else if(locale == "en_CA") {
        	return '1-877-402-1999';
        }
    }
    return advertisedNumber;
}

// initialize auto suggest feature
function initAutoSuggest()
{
    if (cityListXmlDom && cityListXmlDom != null)
    {
        var cityListArray = cityListXmlDom.getElementsByTagName("name");
        var dnisListArray = cityListXmlDom.getElementsByTagName("dnis");
        cityList = new Array();
        dnisList = new Array();
        for (var i = 0; i < cityListArray.length; i++) cityList[i] = cityListArray[i].childNodes[0].nodeValue;
        for (var i = 0; i < dnisListArray.length; i++) dnisList[i] = dnisListArray[i].childNodes[0].nodeValue;
        jQuery(document).ready(function() {
            if (!inputTextElement) inputTextElement = document.getElementById(activeConnectAreaId + ".areaCode");
            jQuery(inputTextElement).autocomplete(cityList, {autoFill: true});
            jQuery(inputTextElement).result(function(event, data, formatted) {
                validateInputText();
            });
            validateInputText();
        });
    }
}

// use to launch soft phone page
function connect()
{
    var rc = validateInputText();
    if (rc == false)
    {
        pageEventId = "4";
        trackerUpdate(pageId, pageEventId);
        saveCookie("fromHomePage", "1");
        window.location.href = setURLParams(buildHtmlUrl('softphone'));
    }
}

// use to set adCode and context variables
function setAdCodeAndContext()
{
    adCode = getURLParamValue("a");
    context = getURLParamValue("context");
    var fromClickthru = getCookie("fromClickthru");
    var oldAdCode = adCode;
    
    if ((adCode == null && context == null) || fromClickthru == null)
    {
        adCode = defaultAdCode; // default adCode when there's non in the url or its not coming from clickthru
	context = defaultContext;
        logAdCodeRewrite(cookieId, context, oldAdCode, adCode, document.referrer);
    } else if (adCode.length < 1) {        
	adCode = defaultAdCode; // default adCode when there's non in the url or its not coming from clickthru
        context = defaultContext;
        logAdCodeRewrite(cookieId, context, oldAdCode, adCode, document.referrer);
    } else if (context == null) {
        context = defaultContext;
    }
    
    // set fromClickthru cookie to be only for current browser session
    if (fromClickthru != null) setCookie("fromClickthru", "1", "", "/", "", ""); // remember only for current session

    // set different adCode if originating from a list of kown domain
    var newAdCode = setAdCodeBasedOnDomain(document.referrer, adCode);

    // we've got an adcode based on domain. check if adcode passed additionally
    if (newAdCode != adCode && adCode == defaultAdCode)
    {
        logAdCodeRewrite(cookieId, context, adCode, newAdCode, document.referrer);
        adCode = newAdCode;
    }
    
    // save locale info
    saveCookie("context", context);
}

// use to subscribe user's email address
function subscribe(email, gender)
{
    var product = 30;
    var myLocale = 0; // default
    var emailValue = email.replace(/^\s\s*/, "").replace(/\s\s*$/, ""); // trim the email
    var sGender='';
    if(gender!=0) {
    	sGender=gender==1?'M':'F';
    }

    switch (locale)
    {
        case "en":
            myLocale = 0;
            break;
        case "fr_CA":
            myLocale = 1;
            break;
        case "en_CA":
            myLocale = 2;
            break;
        case "en_AU":
            myLocale = 3;
            break;
        case "en_GB":
            myLocale = 4;
            break;
        case "en_US":
            myLocale = 5;
            break;
        case "fr_FR":
            myLocale = 6;
            break;
        default:
            break;
    }

    if (isValidEmail(emailValue)) sendSubscribeRequest(emailValue.toUpperCase(), product, sGender, myLocale);

    //pageEventId = "1";
    //trackerUpdate(pageId, pageEventId);
}

// use to send unsubscription request
function sendSubscribeRequest(email, product, gender, locale)
{
    var url = utilityUrl + "?tool=requestTypeSubscribe&product=" + product + "&gender=" + gender + "&locale=" + locale + "&email=" + email;
    httpPost(url);
}

// simple email validator
function isValidEmail(str)
{
    var at = "@";
    var dot = ".";
    var lstr = str.length - 1;

    // empty string
    if (str.length < 1) return false;

    // multiple "@"
    if (str.indexOf(at) != str.lastIndexOf(at)) return false;

    // missing "@", "@" at the start or "@" at the end
    if (str.indexOf(at) == -1 || str.indexOf(at) == 0 || str.indexOf(at) == lstr) return false;

    // missing ".", "." at the start or "." at the end
    if (str.indexOf(dot) == -1 || str.indexOf(dot) == 0 || str.indexOf(dot) == lstr) return false;

    // missing "." after the "@"
    if (str.indexOf(dot, str.indexOf(at)) == -1) return false;

     // contains blank, ";", "\"" or "\'"
     if (str.indexOf(" ") != -1 || str.indexOf(";") != -1 || str.indexOf("\"") != -1 || str.indexOf("\'") != -1) return false;

     return true;
}

// *** USE JQUERY TO START THE INIT() FUNCTION AFTER THE PAGE LOADS COMPLETELY *** //

jQuery(document).ready(function() {
    init();
});
