var lang;
var channels = [];
var maxLength = 160;
var selectedChannels = new Array(5);
var analytics = "Sirius.ca";

var proxyEndpoint = "/en/tellafriend/proxy.aspx"

var defaultCategory = 0; //-- Set default category (0-4)
var defaultSubcategory = 0; //-- Set default subcategory (0-?)

jQuery(document).ready(function() {
    log("Document Ready");

    lang = (location.href.indexOf("/en/") == -1) ? "fr" : "en";
    
    analytics = (location.href.indexOf("/lounge/") == -1) ? "Sirius.ca" : "Lounge";
    //analytics += (lang == "en") ? " English" : " French";

    loadXML();
});

/**
 * loadXML()
 * Loads Channel data via webservice and parses it into an Object
 */
function loadXML()
{
	log("Load XML");
	
	jQuery.get(proxyEndpoint, 
	{
		'method':'channels',
		'lang':lang
	}, function (xml) 
	{
		log("XML Loaded");
		
		/* -- Sample object schema
        [
            {
                "name": "Music",
                "subcategories": [
                    {
                        "name": "Pop",
                        "channels": [
                            {
                                "name": "Sirius Hits 1",
                                "number": "01",
                                "shortdesc": "...",
                                "longdesc": "..." 
                            } 
                        ] 
                    } 
                ] 
            } 
        ]
        */
		
		//-- Find distinct categories
		jQuery(xml).find("channel").each(function () 
		{
			var data = jQuery(this);
			
			var item = getCategory(data.attr("displaycategory"));

			if (!item)
				addCategory(data.attr("displaycategory"));
		});
		
		//-- Find distinct subcategories
		for (var cat in channels)
		{
			var catName = channels[cat].category;
			jQuery(xml).find("channel[displaycategory = '" + catName + "']").filter(function (index) 
			{
				var subcat = getSubCategory(catName, jQuery(this).attr("displaysubcategory"));
				
				if (!subcat)
					addSubCategory(catName, jQuery(this).attr("displaysubcategory"));
			});			
		}
		
		//-- Apply channels to subcategories
		for (cat in channels)
		{
			var catName = channels[cat].category;
			var subs = channels[cat].subcategories;
			for (var subcat in subs)
			{
				var subcatName = subs[subcat].subcategory;
				jQuery(xml).find("channel[displaycategory = '" + catName + "'][displaysubcategory = '" + subcatName + "']").filter(function (index) 
				{
					var channel = getChannel(catName, subcatName, jQuery(this).attr("name"));
					
					if (!channel)
						addChannel(catName, subcatName, jQuery(this));
				});
			}
		}
		
		//-- Construct the Made In Canada Category
		var catLabel = "Made in Canada";
		addCategory(catLabel);
		addSubCategory(catLabel, "English");
		addSubCategory(catLabel, "French");
		
		jQuery(xml).find("channel[canadian]").each(function() 
		{
			var l = jQuery(this).attr("canadian");
			var channel = getChannel(catLabel, l, jQuery(this).attr("name"));
			
			if (!channel)
				addChannel(catLabel, l, jQuery(this));
		});
		
		//-- Resort navigation elements
		var canada = channels.pop();
		var sports = channels.pop();
		var talk = channels.pop();
		var news = channels.pop();

        channels.splice(1, 0, talk);
	    channels.splice(2, 0, canada);	    
	    channels.splice(3, 0, sports);
	    channels.splice(4, 0, news);

		log(channels);
		constructNavigation();
	});
}

/**
 * addCategory()
 * @param data
 * Construct the category object
 */
function addCategory(data)
{
	var o = {};
	o.category = data;
	o.subcategories = [];
	channels.push(o);
}

/**
 * getCategory()
 * @param name
 * Check category for existence of object
 */
function getCategory(name)
{
	for (var itemObj in channels)
	{
		if (channels[itemObj].category == name)
		{
			return channels[itemObj];
		}
	}
	
	return null;
}

function addSubCategory(name, data)
{
	var o = {};
	var cat = getCategory(name);
	o.subcategory = data;
	o.channels = [];
	cat.subcategories.push(o);
}

function getSubCategory(name, data)
{
	var cat = getCategory(name);
	
	for (var item in cat.subcategories)
	{
		if (cat.subcategories[item].subcategory == data)
		{
			return cat.subcategories[item];
		}
	}
	
	return null;
}

function addChannel(cat, subcat, data)
{
	var o = {
		name: data.attr("name"),
		number: data.attr("number"),
		shortdesc: data.attr("shortdesc"),
		longdesc: data.attr("longdesc") 
	};
	var subcat = getSubCategory(cat, subcat);
	subcat.channels.push(o);
}

function getChannel(cat, subcat, data)
{
	var subcat = getSubCategory(cat, subcat);
	
	for (var item in subcat.channels)
	{
		if (subcat.channels[item].name == data)
		{
			return subcat.channels[item];
		}
	}
	
	return null;
}

/**
 * constructNavigation()
 * Displays category/subcategory menu
 */
function constructNavigation()
{
	log("Construct Navigation");
	
	//-- Add placeholders to #navigation
	jQuery("#navigation").append('<div class="pri"></div><br style="clear:both;"/>');
	jQuery("#navigation").append('<div class="sec"></div>');
	jQuery("#navigation .sec").append('<div id="activeSection"><img src="/' + lang + '/tellafriend/images/icon_arrow_subnav.png" alt="" title="" border="0" class="pngfix" /></div>');
	
	//-- Iterate through all available categories
	for (var i = 0; i < channels.length; i++)
	{
		var catData = channels[i];
		var catName = catData.category;
		
		jQuery("#navigation .pri").append('<span class="cat_' + i + '" catname="' + catName + '"></span>'); //' + catName + '
		jQuery("#navigation .pri .cat_" + i).bind("click", function(e) {

		    var cat = jQuery(this).attr("class").split("_")[1];

		    jQuery("#navigation .sec div").hide(); //-- Hide all subnav sections
		    jQuery("#channelDetails").hide(); //-- Hide channel details
		    jQuery("#navigation .sec .cat_" + cat).toggle(); //-- Show the requested subnav

		    loadChannel(cat, 0); //-- Load channels for the category, default to the first subnav category
		    positionActiveIcon(jQuery("#navigation .sec .cat_" + cat + " .subcat_0")); //-- Reposition Active Icon

		    log("Show Subnav: " + cat + ", 0");

		});
		
		jQuery("#navigation .sec").append('<div class="cat_' + i + '"></div>');
		
		//-- Iterate through all available subcategories
		for (var j = 0; j < catData.subcategories.length; j++)
		{
			var subcatData = catData.subcategories[j];
			var subcatName = subcatData.subcategory;
			
			if (lang == "fr" && 
			    subcatName == "English")
				subcatName = "Anglais";
				
			if (lang == "fr" && 
			    subcatName == "French")
				subcatName = "Fran&ccedil;ais";
			
			jQuery("#navigation .sec .cat_" + i).append('<span class="subcat_' + j + '">' + subcatName + '</span>');
			jQuery("#navigation .sec .cat_" + i + " .subcat_" + j).bind("click", function (e) 
			{
				var cat = jQuery(this).parent().attr("class").split("_")[1];
				var subcat = jQuery(this).attr("class").split("_")[1];
				
				jQuery("#channelDetails").hide(); //-- Hide channel details
				positionActiveIcon(jQuery(this));

				//-- On click show channels
				loadChannel(cat, subcat);
			});
		}
	}
	
	//-- Populate selection placeholders
	for (i = 0; i < selectedChannels.length; i++)
	{
		jQuery("#selectedChannels .placeholders").append('<span class="placeholder pl_' + i + '"><span class="label">' + ((lang == 'en') ? 'Selection' : 'S&eacute;lectionner') + ' ' + (i + 1) + '</span></span>');
		jQuery("#selectedChannels .placeholder").show();
	}
	
	//-- Set defult cat/subcat to be visible from init
	jQuery("#navigation .sec .cat_" + defaultCategory).toggle();
	loadChannel(defaultCategory, defaultSubcategory);
	
	jQuery("#send").hover(function () 
	{
		jQuery(this).attr("src", "/" + lang + "/tellafriend/images/button_send_on.png");
	},
	function ()
	{
		jQuery(this).attr("src", "/" + lang + "/tellafriend/images/button_send_off.png");
	});
	
	var counter = maxLength - jQuery("#message").val().length;
	jQuery("#maxLength").html(counter);
	
	var noAlert = {};
	noAlert.border = "none";
	noAlert.background = "#FFF";
	
	var alert = {};
	alert.border = "1px solid red";
	alert.background = "#FFEBEB";

	var yourName = jQuery("#yourName");
	var yourEmail = jQuery("#yourEmail");
	var yourESN = jQuery("#yourESN");
	var friendsName = jQuery("#friendsName");
	var friendsEmail = jQuery("#friendsEmail");
	var message = jQuery("#message");
	var tc = jQuery("#tc");

	jQuery("#send").click(function(e) {
	    var valid = true;

	    //-- Clear all previously alerted fields
	    yourName.css(noAlert);
	    yourEmail.css(noAlert);
	    yourESN.css(noAlert);
	    friendsName.css(noAlert);
	    friendsEmail.css(noAlert);
	    //message.css(noAlert);

	    jQuery("#yourNameValidator").css("display", "none");
	    jQuery("#yourEmailValidator").css("display", "none");
	    jQuery("#yourESNValidator").css("display", "none");
	    jQuery("#friendsNameValidator").css("display", "none");
	    jQuery("#friendsEmailValidator").css("display", "none");
	    //jQuery("#messageValidator").css("display", "none");
	    jQuery("#rrValidator").css("display", "none");

	    if (yourName.val() == "") {
	        yourName.css(alert);
	        jQuery("#yourNameValidator").html((lang == "en") ? "Please enter your name." : "Entrez votre nom.");
	        jQuery("#yourNameValidator").css("display", "block");
	        valid = false;
	    }

	    if (yourEmail.val() == "" &&
			yourESN.val() == "") {
	        yourEmail.css(alert);
	        jQuery("#yourEmailValidator").html((lang == "en") ? "Please enter a valid email address." : "Entrez une adresse de courriel valable.");
	        jQuery("#yourEmailValidator").css("display", "block");

	        yourESN.css(alert);
	        jQuery("#yourESNValidator").html((lang == "en") ? "Please enter a valid ESN number." : "Entrez un code ESN valable.");
	        jQuery("#yourESNValidator").css("display", "block");

	        valid = false;
	    }

	    if (yourEmail.val() != "") {
	        if (!isValidEmail(yourEmail.val())) {
	            yourEmail.css(alert);
	            jQuery("#yourEmailValidator").html((lang == "en") ? "Please enter a valid email address." : "Entrez une adresse de courriel valable.");
	            jQuery("#yourEmailValidator").css("display", "block");
	            valid = false;
	        }
	    }

	    if (yourESN.val() != "") {
	        if (!isValidESN(yourESN.val())) {
	            yourESN.css(alert);
	            jQuery("#yourESNValidator").html((lang == "en") ? "Please enter a valid ESN number." : "Entrez un code ESN valable.");
	            jQuery("#yourESNValidator").css("display", "block");
	            valid = false;
	        }
	        else if (yourName.val() == "") {
	            yourName.css(noAlert);
	            jQuery("#yourNameValidator").css("display", "none");
	            valid = true;
	        }
	    }

	    if (friendsName.val() == "") {
	        friendsName.css(alert);
	        jQuery("#friendsNameValidator").html((lang == "en") ? "Please enter your friend's name." : "Entrez le nom de votre ami(e).");
	        jQuery("#friendsNameValidator").css("display", "block");
	        valid = false;
	    }

	    if (friendsEmail.val() == "") {
	        friendsEmail.css(alert);
	        jQuery("#friendsEmailValidator").html((lang == "en") ? "Please enter a valid friend's email." : "Entrez une adresse de courriel valable de votre ami(e).");
	        jQuery("#friendsEmailValidator").css("display", "block");
	        valid = false;
	    }

	    if (friendsEmail.val() != "") {
	        if (!isValidEmail(friendsEmail.val())) {
	            friendsEmail.css(alert);
	            jQuery("#friendsEmailValidator").html((lang == "en") ? "Please enter a valid friend's email." : "Entrez une adresse de courriel valable de votre ami(e).");
	            jQuery("#friendsEmailValidator").css("display", "block");
	            valid = false;
	        }
	    }

	    /*
	    if (message.val() == "")
	    {
	    message.css(alert);
	    jQuery("#messageValidator").html((lang == "en") ? "Please enter a message." : "Entrez un message.");
	    jQuery("#messageValidator").css("display", "block");
	    valid = false;
	    }
	    */

	    /*-- Permission to send email without choosing channels
	    if (selectedChannels[0] == "")
	    {
	    jQuery("#selectedChannels p").css("color", "red");
	    valid = false;
	    }
	    */

	    if (!jQuery("#tc").is(":checked")) 
	    {
	        jQuery("#tclabel").css("color", "red");
	        jQuery("#regsValidator").html((lang == "en") ? "Please agree to the Rules &amp; Regulations." : "Acceptez les r&egrave;gles et r&eacute;glementations.");
	        jQuery("#regsValidator").css("display", "block");
	        valid = false;
	    }

	    log("Form valid? " + valid + ";");

	    if (valid) 
	    {
        	pageTracker._trackEvent('Tell a Friend ' + lang, 'Email Event', 'Email Sent: ' + yourName.val() + '');
	        submitForm(yourName.val(), yourEmail.val(), yourESN.val(), friendsName.val(), friendsEmail.val(), message.val(), selectedChannels, lang, analytics);

			return false;
	    }
	    else {
	        //showModal(-1, "Please complete the red-coloured fields and try again.");
	        return false;
	    }
	});
	
	jQuery("#yourName").bind("focus", function () 
	{
		resetValidation(jQuery(this));
	});
	
	jQuery("#yourEmail").bind("focus", function () 
	{
		resetValidation(jQuery(this));
	});
	
	jQuery("#yourESN").bind("focus", function () 
	{
		resetValidation(jQuery(this));
	});
	
	jQuery("#friendsName").bind("focus", function () 
	{
		resetValidation(jQuery(this));
	});
	
	jQuery("#friendsEmail").bind("focus", function () 
	{
		resetValidation(jQuery(this));
	});
	
	/*
	jQuery("#message").bind("focus", function () 
	{
		resetValidation(jQuery(this));
	});
	*/
	
	jQuery("#message").bind("keypress", count);
	jQuery("#maxLength").val();
	
	jQuery("#tclabel").bind("click", function () 
	{
		jQuery(this).css("color", "#4C4B4C");
   		jQuery("#regsValidator").css("display", "none");
	});
		
	jQuery("#preview").hover(function () 
	{
		jQuery(this).attr("src", "/" + lang + "/tellafriend/images/button_preview_on.png");
	}, 
	function () 
	{
		jQuery(this).attr("src", "/" + lang + "/tellafriend/images/button_preview_off.png");
	});

	jQuery("#preview").click(function(e) {

	    
	    var valid = true;

	    //-- Clear all previously alerted fields
	    yourName.css(noAlert);
	    yourEmail.css(noAlert);
	    yourESN.css(noAlert);
	    friendsEmail.css(noAlert);
	    //message.css(noAlert);

	    jQuery("#yourNameValidator").css("display", "none");
	    jQuery("#yourEmailValidator").css("display", "none");
	    jQuery("#yourESNValidator").css("display", "none");
	    jQuery("#friendsNameValidator").css("display", "none");
	    jQuery("#friendsEmailValidator").css("display", "none");
	    //jQuery("#messageValidator").css("display", "none");
	    jQuery("#regsValidator").css("display", "none");

	    if (yourName.val() == "") {
	        yourName.css(alert);
	        jQuery("#yourNameValidator").html((lang == "en") ? "Please enter your name." : "Entrez votre nom.");
	        jQuery("#yourNameValidator").css("display", "block");
	        valid = false;
	    }

	    /*
	    if (yourEmail.val() == "")
	    {
	    yourEmail.css(alert);
	    jQuery("#yourEmailValidator").html((lang == "en") ? "Please enter a valid email address." : "Entrez une adresse de courriel valable.");
	    jQuery("#yourEmailValidator").css("display", "block");
	    valid = false;
	    }
	    */

	    if (friendsName.val() == "") {
	        friendsName.css(alert);
	        jQuery("#friendsNameValidator").html((lang == "en") ? "Please enter your friend's name." : "Entrez le nom de votre ami(e).");
	        jQuery("#friendsNameValidator").css("display", "block");
	        valid = false;
	    }

	    if (friendsEmail.val() == "") {
	        friendsEmail.css(alert);
	        jQuery("#friendsEmailValidator").html((lang == "en") ? "Please enter a valid email address." : "Entrez une adresse de courriel valable.");
	        jQuery("#friendsEmailValidator").css("display", "block");
	        valid = false;
	    }

	    /*
	    if (message.val() == "")
	    {
	    message.css(alert);
	    jQuery("#messageValidator").html((lang == "en") ? "Please enter a message." : "Entrez un message.");
	    jQuery("#messageValidator").css("display", "block");
	    valid = false;
	    }
	    */

	    /*-- Permission to send email without choosing channels
	    if (selectedChannels[0] == "")
	    {
	    jQuery("#selectedChannels p").css("color", "red");
	    valid = false;
	    }
	    */

	    log("Preview valid? " + valid + ";");

	    if (valid)
	        previewForm(yourName, friendsName, friendsEmail, message, selectedChannels);

	    return false;
	});
	
	jQuery("#yourESNLabel").hover(function () 
	{
		jQuery(".infoPanel").show();
	},
	function () 
	{
		jQuery(".infoPanel").hide();
	});

    //Check QueryStrings for email values
    checkQueryStrings();
}

function checkQueryStrings()
{
	var qsEmail = queryString("email");
	var qsName = unescape(queryString("name"));
	var qsFriendsEmail = queryString("friendsEmail");
	var qsFriendsName = unescape(queryString("friendsName"));
	var qsConfirmFlag = queryString("confirm");
	
	if (qsEmail != "undefined")
		jQuery("#yourEmail").val(qsEmail);
	
	if (qsName != "undefined")
		jQuery("#yourName").val(qsName);
	
	if (qsFriendsEmail != "undefined")
		jQuery("#friendsEmail").val(qsFriendsEmail);
		
    if (qsFriendsName != "undefined")
        jQuery("#friendsName").val(qsFriendsName);
}

function queryString(searchTerm) 
{
    var qs = location.href.split("?")[1];

    if (qs != undefined)
    {
        if (qs.indexOf("#"))
            qs = qs.split("#")[0];
            
        var query = qs.split("&");
        for (var i = 0; i < query.length; i++)
        {
            var key = query[i].split("=");
            if (key[0] == searchTerm)
                return key[1];
        }
    }
}

function resetValidation(target)
{
	var noAlert = {};
	noAlert.border = "none";
	noAlert.background = "#FFF";

	target.css(noAlert);

    switch(target.attr("id"))
    {
		case "yourName": jQuery("#yourNameValidator").css("display", "none"); break;
		case "yourEmail": jQuery("#yourEmailValidator").css("display", "none"); break;
		case "yourESN": jQuery("#yourESNValidator").css("display", "none"); break;
		case "friendsName": jQuery("#friendsNameValidator").css("display", "none"); break;
		case "friendsEmail": jQuery("#friendsEmailValidator").css("display", "none"); break;
		case "message": jQuery("#messageValidator").css("display", "none"); break;
		case "tclabel": jQuery("#regsValidator").css("display", "none"); break;
    }
}

/**
 * positionActiveIcon()
 * @param target Object
 * Position active arrow under the Subnav
 */
function positionActiveIcon(target)
{
	var pos = target.position().left + (target.width() >> 1);
	jQuery("#navigation .sec #activeSection").css("left", pos.toString() + "px");
	jQuery("#navigation .sec #activeSection").show(); //-- Show the Active Icon once repositioned
}

var animateId;

/**
 * loadChannel()
 * @param cat String
 * @param subcat String
 * Loads channels per selected cat/subcat
 */
function loadChannel(cat, subcat)
{
	var channelList = channels[cat].subcategories[subcat].channels;
	log("Load Channels: " + cat + ", " + subcat);
	log(channelList);
	
	//-- Clear Primary Nav
	var path;
	for (var i = 0; i < selectedChannels.length; i++)
	{	
		switch (i)
		{
			case 0: path = "music"; break;
			case 1: path = "sports"; break;
			case 2: path = "canada"; break;
			case 3: path = "news"; break;
			case 4: path = "talk"; break;
		}
		
		jQuery("#navigation .pri .cat_" + i).css("background-image", "url('/" + lang + "/tellafriend/images/nav_" + path + "_off.png')");
	}

	//-- Set Primary Nav
	var active;
	switch (parseInt(cat))
	{
		case 0: active = "music"; break;
		case 1: active = "sports"; break;
		case 2: active = "canada"; break;
		case 3: active = "news"; break;
		case 4: active = "talk"; break;
	}
	
	jQuery("#navigation .pri .cat_" + cat).css("background-image", "url('/" + lang + "/tellafriend/images/nav_" + active + "_on.png')");
	
	//-- Clear previous channels
	var m;
	if (lang == "en")
	    m = "Choose up to 5 channels that your friend will love and we'll send your email.";
	else
	    m = "Choisissez jusqu'&agrave; 5 stations que votre ami(e) aimera et nous enverrons votre courriel.";
	
	jQuery("#channels").html("");
	jQuery("#channels").html('<div id="instructions">' + m + '</div>')
	
	//-- An exception for Music - Rock
	jQuery("#channels").css("height", ((cat == 0 && subcat == 1) ? 362 : 232) + "px");
	
	//-- Iterate through all channels
	for (i = 0; i < channelList.length; i++)
	{
		var data = channelList[i];
		var numberPadded = (data.number < 10) ? "0" + data.number.toString() : (data.number < 100) ? "0" + data.number.toString() : data.number.toString(); 
		var description = data.longdesc.replace(/&quot;|"/ig, '%22');
		
		var html = '<dd class="cat_' + cat + '_' + subcat + '_' + numberPadded + '">';
		html += '<div class="trigger"></div>';
		html += '<img src="/' + lang + '/tellafriend/assets/png/Channel-' + numberPadded + '.png" alt="' + data.number + '" title="' + data.name + '" desc="' + description + '" class="pngfix" />';
		html += '</dd>';
		
		//-- Display channel icons
		jQuery("#channels").append(html);
		
		var item = jQuery("#channels .cat_" + cat + "_" + subcat + "_" + numberPadded);
		item.fadeIn("slow", function (e) 
		{
			jQuery(this).css("display", "block");
		});
		
		//-- Show details
		item.hoverIntent({
			sensitivity:3,
			interval:100,
			over:function () 
			{
				var details = jQuery("#channelDetails");
				var pos = jQuery(this).position();
				var channel = jQuery(this).attr("class").split("_")[3];
				var title = jQuery(this).find("img").attr("title");
				var desc = jQuery(this).find("img").attr("desc");
				var newPosition = 0;
				
				//-- Offset Fix for FF
				var centerOffset = jQuery(this).parent().parent().parent().position().left;
				
				if (animateId != channel)
				{
					//-- Crop the initial 0 if any detected
					if (channel.substr(0, 1) == "0")
						channel = channel.substr(1, channel.length - 1);
					
					details.css("z-index", "100");
					details.css("top", pos.top + 70 + "px");
					
					var offset = (pos.left > 400) ? -145 : 0;
					
					newPosition = pos.left + offset;
					
					details.css("left", newPosition + "px");

					var detailHTML = '<div class="arrow"></div>';
					detailHTML += '<span class="channelId">' + channel + '</span>';
					detailHTML += '<div class="channelInfo">';
					detailHTML += '<span class="channelTitle">' + title + '</span><br/>';
					detailHTML += '<span class="channelDesc">' + unescape(desc) + '</span>';
					detailHTML += '</div>';
					details.html(detailHTML);
	
					//-- Position the label id based on length
					jQuery("#channelDetails .channelId").css("left", ((channel.length == 1) ? 40 : (channel.length == 2) ? 35 : 30) + "px");
					jQuery("#channelDetails .arrow").css("left", ((offset == -145) ? 205 : 60) + "px");
	
					animateId = channel;
					details.fadeIn("slow");
					
					if (typeof document.addEventListener != 'function') 
					{
						//IE6 Exclusion
						jQuery("#channelDetails .arrow").css("display", "none");
					}
				}
			},
			timeout:50,
			out:function ()
			{
				var details = jQuery("#channelDetails");
				var channel = jQuery(this).attr("class").split("_")[3];

				details.hide();
				animateId = -1;
			}
		});
		
		item.bind("click", function (e) 
		{
			var channel = jQuery(this).attr("class").split("_")[3];
			
			//-- On click add channel to selection list
			if (!checkChannel(channel))
				selectChannel(channel);
		});
	}
}

/**
 * checkChannel()
 * @param channel String
 * @return Boolean
 * Checks existence of channel. Only one instance can be added to array
 */
function checkChannel(channel)
{
	var result = false;
	
	for (var i = 0; i < selectedChannels.length; i++)
	{
		if (selectedChannels[i] == channel)
			return true;
	}
	
	return result;
}

/**
 * selectChannel()
 * @param channel String
 * Adds selected channel to selectedChannels array and displays on screen
 */
function selectChannel(channel)
{
	log("Selected Channel: " + selectedChannels);
	
	//-- Determine next available space in the array
	var nextSpace = -1;
	for (var i = 0; i < selectedChannels.length; i++)
	{
		if (selectedChannels[i] == undefined || selectedChannels[i] == "")
		{
			nextSpace = i;
			break;
		}
	}
	
	if (nextSpace == -1)
	{
		//-- If no more spaces issue warning
		log("No more spaces");
	}
	else
	{
		//-- If space available add icon and append to array
	    selectedChannels[nextSpace] = channel;
		
		
		//-- Hide the Selection Label
		for (i = 0; i < (nextSpace + 1); i++)
			jQuery(".pl_" + i).find("span").hide();
		
		jQuery("#selectedChannels .channels").append('<span class="ch_' + channel + '"><img src="/' + lang + '/tellafriend/assets/png/Channel-' + channel + '.png" class="pngfix" /></span>');
		//alert(channel.toString());
        pageTracker._trackEvent('Tell a Friend ' + lang, 'Click Event', 'Channel Selected: ' + channel.toString());

		var item = jQuery("#selectedChannels span").bind("click", function(e) {
		    var channel = jQuery(this).attr("class").split("_")[1];

		    //-- On click remove channel		    
		    removeChannel(channel);
		});
	}	
}

/**
 * removeChannel()
 * @param channel String
 * Removes the channel from the selectedChannels array
 */
function removeChannel(channel)
{
	log("Remove Channel: " + channel);
	
	var icon = jQuery("#selectedChannels").find("span[class = 'ch_" + channel + "']");
	var loc;
	
	for (var i = 0; i < selectedChannels.length; i++)
	{
		if (selectedChannels[i] == channel)
		{
			loc = i;
			break;
		}
	}
	
	selectedChannels[loc] = "";
	jQuery("#selectedChannels").find("span[class = 'ch_" + channel + "']").remove();
	//alert(channel.toString());
    pageTracker._trackEvent('Tell a Friend ' + lang, 'Click Event', 'Channel Removed: ' + channel.toString());

	for (i = 0; i < selectedChannels.length; i++)
	{
	    if (selectedChannels[i] == "")
    		jQuery(".pl_" + i).find("span").show();
	}
}

function removeAllChannels()
{
	for (var i = 0; i < selectedChannels.length; i++)
	{
		selectedChannels[i] = "";
		jQuery("#selectedChannels .channels span").remove();
		jQuery(".pl_" + i).find("span").show();
	}
}

function count()
{
	var counter = maxLength - jQuery("#message").val().length;
	var maxContent = jQuery("#message").val().substring(0, maxLength - 1);
	
	if (counter <= 0)
	{
		jQuery("#message").val(maxContent);
		counter = 0;
	}

	jQuery("#maxLength").html(counter);
}

function isValidEmail(value)
{
	return /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(value);
}

function isValidESN(value)
{
	return /^[0-9]{12}$/.test(value);
}

function previewForm(yourName, friendsName, friendsEmail, message, selectedChannels)
{
    var url = "";
    url += "/" + lang + "/tellafriend/email/preview.html";
    url += "?yN=" + yourName.val().replace(" ", "+");
    //url += "&yE=" + yourEmail.val().replace(" ", "+");
    url += "&fN=" + friendsName.val().replace(" ", "+");
    url += "&fE=" + friendsEmail.val().replace(" ", "+");
    url += "&m=" + message.val().replace(" ", "+");
    url += "&c=" + selectedChannels;

	//alert(yourName.val());
    pageTracker._trackEvent('Tell a Friend Preview ' + lang, 'Email Event', 'Username: ' + yourName.val());
	window.open(url,'tellAFriendPreview','scrollbars=yes'); 
}

function submitForm(yourName, yourEmail, yourESN, friendsName, friendsEmail, message, selectedChannels, lang, referer)
{
	
	//pageTracker._trackEvent('Tell a Friend ' + lang, 'Email Event', 'Email Sent: ' + yourName.val() + '');
	log("Submit Form");
	
	try {
		jQuery.ajax({
			url: proxyEndpoint,
			type: "POST",
			data: {
				'method':'refer',
				'referee_email':yourEmail,
				'esn':yourESN,
				'client_id':'',
				'referral_email':friendsEmail,
				'referral_name':friendsName,
				'message':message,
				'referer':referer,
				'language':lang,
				'channels':selectedChannels
			},
			dataType: "xml",
			success: function (data)
			{
				/*
				0 - Success
				1 - Refer Confirm
				100 - Referee Email is invalid
				101 - Referee Email or ESN must be provided
				102 - Referral Email is invalid  
				201 - Account ID is invalid ,
				202 - Email of this client is in the list of exceptions  
				203 - This email does not belong to SIRIUS Customer
				204 - WRONG ESN , please check it 
				205 - Oracle system error message 
				301 - Already a customer
				302 - This email address was referred already 
				303 - This email is in the list of exceptions
				304 - Email format is invalid
				305 - Oracle system error message, 
				401 - Oracle system error message 
				402 - check referrer or referral failed
				*/
	
				if (data != null)
				{
					var status = jQuery(data).find("status").text();
					var message = jQuery(data).find("message").text();

					
					if (lang == "en")
					{
						switch (status)
						{
    						case "0": message = "Thanks for referring " + jQuery("#friendsName").val() + " to SIRIUS.<br/>You will receive an email confirmation of this referral.<br/>Your referral email has been sent to " + jQuery("#friendsEmail").val() + ".<br/>When they sign up for SIRIUS using this email address, you'll receive a jQuery25 Esso Gift Card."; break;
							case "100": message = "Invalid email format (name@domain.com)"; break; //yourEmail
							case "101": message = "Please provide your SIRIUS account email or ESN"; break; //yourEmail
							case "102": message = "Invalid email format (name@domain.com)"; break; //yourEmail
							case "201": message = "You must be a SIRIUS subscriber<br/>to take advantage of this offer."; break; //yourESN
							case "202": message = "This email does not qualify for the offer"; break; //yourEmail
							case "203": message = "You must be a SIRIUS subscriber<br/>to take advantage of this offer."; break; //yourEmail
							case "204": message = "ESN not found"; break; //yourESN
							case "205": message = "System Error"; break; //Modal
							case "301": message = "This individual is already a SIRIUS customer."; break; //friendsName
							case "302": message = "This email has already been referred."; break; //friendsEmail
							case "303": message = "This email does not qualify for the offer"; break; //friendsEmail
							case "304": message = "Invalid email format (name@domain.com)"; break; //friendsEmail
							case "305": message = "System Error"; break; //Modal
							case "401": message = "System Error"; break; //Modal
							case "402": message = "Referral failed. Please try again or send us an <a href='mailto:webmaster@siriuscanada.ca?subject=Tell a Friend Error'>email</a>"; break; //Modal
						}
					}
					else
					{
						switch (status)
						{
							case "0": message = 'Merci d\'avoir recommand&eacute; ' + jQuery('#friendsName').val() + ' &agrave; SIRIUS.<br/>Vous recevrez un courriel de confirmation de cette recommandation.<br/>Votre courriel de recommandation a &eacute;t&eacute; envoy&eacute; &agrave; ' + jQuery('#friendsEmail').val() + '.<br/>Quand votre ami(e) activera une radio SIRIUS Canada avec cette adresse de courriel, vous recevrez une carte-cadeau Esso de 25 jQuery.'; break;
							case "100": message = "Format de courriel non valable (nom@domaine.com)"; break;
							case "101": message = "Veuillez fournir votre adresse de courriel de compte ou code ESN SIRIUS"; break;
							case "102": message = "Format de courriel non valable (nom@domaine.com)"; break;
							case "201": message = "Vous devez ętre un abonn&eacute; SIRIUS pour profiter de cette offre."; break;
							case "202": message = "Ce courriel ne donne pas droit &agrave; l'offre"; break;
							case "203": message = "Vous devez ętre un abonn&eacute; SIRIUS pour profiter de cette offre."; break;
							case "204": message = "Code ESN introuvable"; break;
							case "205": message = "Message d'erreur systme Oracle"; break;
							case "301": message = "Cette personne est d&eacute;j&agrave; un client de SIRIUS."; break;
							case "302": message = "Cette adresse de courriel a d&eacute;j&agrave; &eacute;t&eacute; recommand&eacute;e."; break;
							case "303": message = "Ce courriel ne donne pas droit &agrave; l'offre"; break;
							case "304": message = "Format de courriel non valable (nom@domaine.com)"; break;
							case "305": message = "Message d'erreur systme Oracle"; break;
							case "401": message = "Message d'erreur systme Oracle"; break;
							case "402": message = "&Eacute;chec de recommandation. Veuillez essayer de nouveau ou nous faire parvenir un <a href='mailto:webmaster@siriuscanada.ca?subject=Parlez-en e un ami'>courriel</a>"; break;
						}
					}

					log("Status Code: " + status);
					
					if (status == "0" ||
					    status == "205" ||
					    status == "305" ||
					    status == "401" ||
					    status == "402")
					{
    					showModal(status, message); 
    		        }
			        else if (status == "100" ||
			            status == "101" ||
			            status == "102" ||
			            status == "201" ||
			            status == "202" ||
			            status == "203")
			        {
			            jQuery("#yourEmailValidator").html(message);
			            jQuery("#yourEmailValidator").css("display", "block");
			        }
			        else if (status == "204")
			        {
			            jQuery("#yourESNValidator").html(message);
			            jQuery("#yourESNValidator").css("display", "block");
			        }
			        else if (status == "301")
			        {
			            jQuery("#friendsNameValidator").html(message);
			            jQuery("#friendsNameValidator").css("display", "block");
			        }
			        else if (status == "302" ||
			            status == "303" ||
			            status == "304")
			        {
			            jQuery("#friendsEmailValidator").html(message);
			            jQuery("#friendsEmailValidator").css("display", "block");
			        }
    			    
                    //pageTracker._trackEvent('Tell-A-Friend','Refer Alert','Message',message);					
				}
				else
				{
					showModal(-1, "An error occurred.");
				}
			},
			error: function (XMLHttpRequest, textStatus, errorThrown)
			{
				showModal(-1, "An error occurred.");
			}
		});	
	} catch (e) {
		showModal(-1, "An error occurred.");
	}
	pageTracker._trackEvent('Tell a Friend ' + lang, 'Email Event', 'Email Sent: ' + yourEmail);
	return false;

}

function showModal(status, message)
{
    hideModal();
    
	log("Alert Window");
	
	window.scrollTo(0, 0);
	
   	jQuery("html").css("overflow", "hidden");
    
	jQuery("#modal").css("width", jQuery(window).width());
	jQuery("#modal").css("height", jQuery(window).height());
	jQuery("#modal .popup").css("top", ((jQuery(window).height() - 315) / 2) + "px");
	jQuery("#modal .popup").css("left", ((jQuery(window).width() - 544) / 2) + "px");
	jQuery("#modal .popup .message").html(message);

    //OK Button
	jQuery(".ok img").hover(function ()
	{
		jQuery(this).attr("src", "/" + lang + "/tellafriend/images/button_ok_on.png");
	},
	function ()
	{
		jQuery(this).attr("src", "/" + lang + "/tellafriend/images/button_ok_off.png");
	});

	jQuery(".ok").click(function (e)
	{
		hideModal();
	});

    //Do Again Button
	jQuery(".again img").hover(function ()
	{
		jQuery(this).attr("src", "/" + lang + "/tellafriend/images/button_again_on.png");
	},
	function ()
	{
		jQuery(this).attr("src", "/" + lang + "/tellafriend/images/button_again_off.png");
	});

	jQuery(".again").click(function (e)
	{
	
	    
		jQuery("#friendsEmail").val("");
		jQuery("#friendsName").val("");
		//jQuery("#message").val("");
		removeAllChannels();
		hideModal();
	});

    //Home Button
	jQuery(".home img").hover(function ()
	{
		jQuery(this).attr("src", "/" + lang + "/tellafriend/images/button_home_on.png");
	},
	function ()
	{
		jQuery(this).attr("src", "/" + lang + "/tellafriend/images/button_home_off.png");
	});

    //Adjust Modal Window based on Status Code
    if (status == 0)
    {
        jQuery(".home").show();
        jQuery(".again").show();
        jQuery(".ok").hide();
        jQuery("#modal .popup .message").css("top", "50px");
    }
    else
    {
        jQuery(".home").hide();
        jQuery(".again").hide();
        jQuery(".ok").show();
        jQuery("#modal .popup .message").css("top", "125px");
    }

	jQuery("#modal").show();
}

function hideModal()
{
   	jQuery("html").css("overflow", "auto");
	jQuery("#modal").hide();
}

/**
 * log()
 * @param msg String
 * Overrides Firebug console.log() for IE
 */
function log(msg)
{
//	if (navigator.userAgent.indexOf("MSIE") < 0 && console)
//	console.log(msg);
}
