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

var activeConnectAreaId = "";
var dsCityList;
var cityList;
var cityNameDnisList;
var adCodeList;
var adCodeListUrl;
var sprySuggest;
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();
    
    // setup city list
    dsCityList = new Spry.Data.XMLDataSet("/nightExchange-theme/data/cityList.xml", "/cities/city", {sortOnLoad:"name"});
    
    // setup adCode list
    jQuery(document).ready(function() {
        if (adCodeListUrl)
        {
            jQuery.get(adCodeListUrl, {}, function(xml) {
                adCodeList = parseXmlString(xml);
                renderLocaleElements();    
            });
        }
    });
    
    // logic to render the "connectArea"
    renderConnectArea();
}
    
// use to properly render the 'connect area' of the page
function renderConnectArea()
{
    if (locale != "en_US" && locale != "en_CA")
    {
        // activate connect area city display only for users outside north america
        activeConnectAreaId = "cityDisplay";
        var cityDisplay = document.getElementById(activeConnectAreaId);
        if (cityDisplay)
        {
            // unhide connect area
            cityDisplay.className = "connect_sm";
            
            // prepopuluate the city if previously selected one
            renderLastCitySelected();
            
            // setup auto suggest
            dsCityList.addObserver(dsCityListObserverFunction);
            dsCityList.loadData();
            
            // 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 (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";
        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
        activeConnectAreaId = "phoneNumberCityDisplay";
        var phoneNumberCityDisplay = document.getElementById(activeConnectAreaId);
        if (phoneNumberCityDisplay)
        {
            // unhide connect area
            phoneNumberCityDisplay.className = "connect_full";
            
            // prepopuluate the city if previously selected one
            renderLastCitySelected();
            
            // setup auto suggest
            dsCityList.addObserver(dsCityListObserverFunction);
            dsCityList.loadData();
            
            // 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
    neTrackerUpdate(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 = "/nightExchange-theme/images/NE_connect_US.gif";
            if (localeLink) localeLink.innerHTML = "Switch to Canada";
            if (advertisedNumber) advertisedNumber.innerHTML = getAdvertisedNumber();
            break;
        case "en_CA":
            if (localeFlagPic) localeFlagPic.src = "/nightExchange-theme/images/NE_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;
}

// custom spry auto suggest event handler called when a data change event is detected
function customAutoSuggestEventHandler(suggestions)
{
    var inputText = document.getElementById(activeConnectAreaId + ".areaCode");
    if (suggestions && inputText && inputText.value.length > 0)
    {
        var isDisabled = true;
        for (var i = 0; i < suggestions.length; i++)
        {
            if (suggestions[i]["name"].toLowerCase() == inputText.value.toLowerCase())
            {
                isDisabled = false;
                inputText.value = suggestions[i]["name"];
                saveCookie("city", suggestions[i]["name"]);
                saveCookie("dnis", suggestions[i]["dnis"]);
                break;
            }
        }
        disableConnectButton(isDisabled);
    }
}

// use to validate the input text box (valid returns false)
function validateInputText()
{
    var isDisabled = true;
    if (cityNameDnisList && inputTextElement && inputTextElement.value.length > 0)
    {
        for (var i = 0; i < cityNameDnisList.length; i++)
        {
            if (cityNameDnisList[i]["name"].toLowerCase() == inputTextElement.value.toLowerCase())
            {
                isDisabled = false;
                inputTextElement.value = cityNameDnisList[i]["name"];
                saveCookie("city", cityNameDnisList[i]["name"]);
                saveCookie("dnis", cityNameDnisList[i]["dnis"]);
                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";
            neTrackerUpdate(pageId, pageEventId);
            break;
        case "en_CA":
            locale = "en_US";
            pageEventId = "9";
            neTrackerUpdate(pageId, pageEventId);
            break;
        default:
            break;
    }
    saveCookie("locale", locale);
    renderLocaleElements();
}

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

// custom dsCityList object function called when an event is detected
function dsCityListObserverFunction(notificationType, dataSet, data)
{
    if (notificationType == "onPostLoad")
    {
        cityNameDnisList = dsCityList.getData();
        cityList = new Array();
        for (var i = 0; i < cityNameDnisList.length; i++) cityList[i] = cityNameDnisList[i]["name"];
        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";
        neTrackerUpdate(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 = "276216"; // default adCode when there's non in the url or its not coming from clickthru
	context = "nnr";
        logAdCodeRewrite(cookieId, context, oldAdCode, adCode, document.referrer);
    } else if (adCode.length < 1) {        
	adCode = "276216"; // default adCode when there's non in the url or its not coming from clickthru
        context = "nnr";
        logAdCodeRewrite(cookieId, context, oldAdCode, adCode, document.referrer);
    } else if (context == null) {
        context = "nnr";
    }
    
    // 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 == "276216")
    {
        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 = 5;
    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";
    //neTrackerUpdate(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;
}