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

var activeConnectAreaId = "";
var cityList;
var dnisList;
var cityListXmlDom;
var cityListXmlUrl;
var adCodeListXmlDom;
var adCodeListXmlUrl;
var connectButtonSrc;
var connectButtonInactiveSrc;
var inputTextElement;
var campaign;
var connectArea;
var landingRightside;
var disclaimer;
var displayAreaNonTrial;
var landingRightsideNonTrial;
var disclaimerNonTrial;
var flashAreaNonTrial;
var isCampaignDisplayed;

// *** 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();    
        });
    }

    connectArea = document.getElementById("connectArea");
    connectArea.style.visibility = "hidden";
    displayAreaNonTrial = document.getElementById(activeConnectAreaId).style.backgroundImage;
    
    landingRightside = document.getElementById("landingRightside");
    landingRightside.style.visibility = "hidden";
    landingRightsideNonTrial = landingRightside.innerHTML;  
    	
    disclaimer = document.getElementById("disclaimer");
    disclaimer.style.visibility = "hidden";
    disclaimerNonTrial = disclaimer.innerHTML; 
    
    flashAreaNonTrial = document.getElementById("flashArea").innerHTML;

    isCampaignDisplayed = false;

    // setup campaign
    var requestAdcode = getURLParamValue("a");
    checkCampaignAndRender(adCode, locale);

    // logic to render the "connectArea"
    renderConnectArea();
}

function checkCampaignAndRender(adcode, locale) {
    if (campaignXmlUrl)
    {
    	var submitUrl = campaignServiceUrl + "?url=" + escape('http://localhost:8080' + campaignXmlUrl) 
    						+ "&groupId=" + groupId + "&locale=" + locale + "&adcode="+adcode;
    	jQuery.get(submitUrl, {}, function(data) {
        	campaign = data.campaign;
        	renderCampaignElements();
        }, "json");
    }
}
    
// 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;
    }
}

function renderCampaignElements() {
    // campaign rendering
//alert('campaign.available: ' + campaign.available);
    if(campaign.available) {
    	// flash area 
		var flashArea = document.getElementById("flashArea");
		
		if (AC_FL_RunContent == 0 || DetectFlashVer == 0) {
			alert("This page requires AC_RunActiveContent.js.");
		} else {
			var hasRightVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
			if(hasRightVersion) {  // if we've detected an acceptable version
				// embed the flash movie
				var c = AC_FL_GetContent(
//				AC_FL_RunContent(
					'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,24,0',
					'width', '404',
					'height', '278',
					'src', campaign.landingFlashArea,
					'quality', 'high',
					'pluginspage', 'http://www.macromedia.com/go/getflashplayer',
					'align', 'middle',
					'play', 'true',
					'loop', 'true',
					'scale', 'showall',
					'wmode', 'transparent',
					'devicefont', 'false',
					'id', 'sample1',
					'name', 'sample1',
					'menu', 'true',
					'allowScriptAccess','sameDomain',
					'allowFullScreen','false',
					'movie', campaign.landingFlashArea,
					'salign', 'center'
					); //end AC code
				flashArea.innerHTML = c;
			} else {  // flash is too old or we can't detect the plugin
				flashArea.innerHTML = '<a href="http://www.macromedia.com/go/getflash/"><img src="'+campaign.landingFlashArea+'" width="404" height="278" border="0" /></a>';
			}
		}

    	// display area
        var displayArea = document.getElementById(activeConnectAreaId);
    	displayArea.style.backgroundImage = "url(" + campaign.burstBackgroundUrl + ")";
    	var hardPhoneArea = document.getElementById("hardPhoneArea");
    	hardPhoneArea.style.backgroundImage = "url()";
    	var phoneConnectImg = document.getElementById("phoneConnectImg");
    	if(phoneConnectImg) {
    		phoneConnectImg.style.visibility = "hidden";
    	}
    	
    	// landingRightside
        landingRightside.innerHTML = campaign.landingRightSideContent;
    	
    	// disclaimer
	disclaimer.innerHTML = campaign.disclaimerContent; 

	isCampaignDisplayed = true;
    }
    else {
    	restoreNonTrialElements();
    }
    
    disclaimer.style.visibility = "visible";
    connectArea.style.visibility = "visible";
    landingRightside.style.visibility = "visible";
}

function restoreNonTrialElements() {
	if(isCampaignDisplayed) {
    		landingRightside.innerHTML = landingRightsideNonTrial;
		disclaimer.innerHTML = disclaimerNonTrial;

                var displayArea = document.getElementById(activeConnectAreaId);
    		displayArea.style.backgroundImage = displayAreaNonTrial;

		var flashArea = document.getElementById("flashArea");
		flashArea.innerHTML = flashAreaNonTrial;
		isCampaignDisplayed = false;
	}
}


// 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();
    checkCampaignAndRender(adCode, locale);
}

// 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);
    
    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();
});
