var userEmailValue;

function enterFunc(evt) {
    var charCode = 0;
    if (!evt) {evt = event;}
    if (evt.which) { charCode = evt.which; }
    else if (evt.charCode) { charCode = evt.charCode; }
    else if (evt.keyCode) { charCode = evt.keyCode; }
    if ((charCode == 13) || (charCode == 3)) 
    {
    	emailVerify(); 
    }
}

function makeRequest(url,data) {
	var http_request = false;
	if (window.XMLHttpRequest) { // Mozilla
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
		}
	}
	else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {http_request = new ActiveXObject("Microsoft.XMLHTTP");}
	}
    http_request.open("post", url, true);
    http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	http_request.send(data);
	return (http_request);
}

function getCookieOptOut(name) {
	var nameEQ = name+'=';
	if (!document.cookie) { return null; }
	var ca = document.cookie.split(';');
	for(var i=0; i < ca.length; i++)	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function clearElement(element) {
	if (element.hasChildNodes()) {
		var total = element.childNodes.length;
		for (var i=0; i<total; i++) {
			element.removeChild(element.lastChild);
		}
	}
}
function urlDecode(string) {
	var HEXCHARS = "0123456789ABCDEFabcdef"; 
	var decoded = ''; var i=0;
	if (string != null)
	{
		while (i < string.length) {
			var ch = string.charAt(i);
			if (ch == "+") {
				decoded += " ";
				i++;
		   }
			else if (ch == "%") {
				if ((i<(string.length-2))&&(HEXCHARS.indexOf(string.charAt(i+1)) != -1) && (HEXCHARS.indexOf(string.charAt(i+2)) != -1)) {
					decoded += unescape(string.substr(i,3));
					i += 3;
				}
				else {
					decoded += "%[ERROR]";
					i++;
				}
			}
			else {
				decoded += ch;
				i++;
			}
		} // while
	}
   return decoded;
}

function showCommError(text) {
	var element = document.getElementById('optOutError');
	clearElement(element);
	element.appendChild(document.createTextNode(text));
	if (document.getElementById('unSubButton')) {
		document.getElementById('unSubButton').removeAttribute('disabled');
	}
}

function showCommPrefs(text) {
	var element = document.getElementById('optOutError');
	clearElement(element);
	var prefsResponse = document.getElementById('optOutMain');
	prefsResponse.appendChild(document.createTextNode(text));
	if (document.getElementById('unSubButton')) {
		document.getElementById('unSubButton').removeAttribute('disabled');
	}
}

function unSubNow() {
	document.getElementById('unSubButton').disabled = 'disabled';
	var inputArray = document.getElementById('optOutMain').getElementsByTagName('input');
	var j = 0;
	for (i=0; i<inputArray.length; i++) {
		if (inputArray[i].checked) {
			j++;
			var commId = inputArray[i].id.match(/optOutCheck_(\d*)/);
			var unsub_request = makeRequest('/preferenceCenter/deactivateCommPreference','comm='+commId[1],'email='+userEmailValue);
		}
	}
	if (!unsub_request) {
		showCommError('Please select an alert to unsubscribe from.');
		return;
	}
	unsub_request.onreadystatechange = function() {
		if ((unsub_request.readyState == 4) && (unsub_request.status == 200)) {
			xmlDoc = unsub_request.responseXML.documentElement;
			if (!xmlDoc) {
				showCommError ('There was a server error');
				return;
			}
			clearElement(document.getElementById('optOutMain'));
			var resultText = 'You have been unsubscribed from '+j+' alert';
			if (j>1) {resultText += 's'; }
			showCommPrefs(resultText);
			return;
		}
		else {
			if (unsub_request.readyState == 4) {
				showCommError ('There was a server error');
				return;
			}
		}
	}
}

function init() {
	var qsArray = location.search.substring(1).split('&');
/*	for (var i=0; i<qsArray.length; i++) {
		var tmpArray = qsArray[i].split('=');
		if (tmpArray[0]=='email') {
			emailLookup(tmpArray[1]);
		}
	}*/
	drawInitState('start');
}

function emailVerify() {
	var userEmail = document.getElementById('optOutEmail').value;
	userEmailValue = userEmail;
	if (userEmail.indexOf('@')<0) {
		showCommError('Please enter a valid email address');
		document.getElementById('optOutEmail').value='';
		document.getElementById('optOutEmail').focus();
		return;
	}
	clearElement(document.getElementById('optOutMain'));
	//emailLookup(userEmail);
	timedMsg();
	//drawInitState();
}

 function timedMsg()
  {
    var t=setTimeout("drawInitState('clk')",2000)
  }

function drawInitState(entry) {
	var persistCookie = urlDecode(getCookieOptOut('STUB_PERSISTENT'));
	var sessionCookie = urlDecode(getCookieOptOut('STUB_SESSION'));
	if (persistCookie.match(/stub_uid\~\^\~(\d*)\~\^\~/)) {
		showPrefs('user');
	}
	else if (sessionCookie.match(/guest_uid\~\^\~(\d*)\~\^\~/)) {
		showPrefs('guest'); 
	}
	else if (entry == 'clk')
	{
		showPrefs('clk');
	}
	else 
	{
		showEmail();
	}
}

function showEmail() {
	showCommError('');
	var outputArea = document.getElementById('optOutMain');
	
	var newHeader = document.createElement('div');
	newHeader.appendChild(document.createTextNode('Email Communications'));
	newHeader.id = 'emailCommunications';
												   
	var newBold = document.createElement('strong');
	newBold.appendChild(document.createTextNode('Step 1 of 2'));
	
	var newPara = document.createElement('p');
	newPara.appendChild(document.createTextNode('If you would like to unsubscribe please enter your email address:'));
	
	var newInputSpan = document.createElement('span');
	var newButton = document.createElement('img');
	newInputSpan.innerHTML = '<input type="text" id="optOutEmail" onkeydown="enterFunc(event);" />';
	
	newButton.src = '/promotions/scratch/common/unsubscribe-btn-enter.gif';
	newButton.id = 'optOutEmailButton';
	newButton.onclick = function () { emailVerify(); }

	outputArea.appendChild(newHeader);
	outputArea.appendChild(newBold);
	outputArea.appendChild(newPara);
	outputArea.appendChild(newInputSpan);
	outputArea.appendChild(newButton);
}


function emailLookup(pcEmail) {
	var xmlRequest = 'serviceRequestBody=<userValidation><emailAddress>'+pcEmail+'</emailAddress></userValidation>';
	var getuser_request = makeRequest('/userSvc/updateCookiesWithUserId',xmlRequest);
	getuser_request.onreadystatechange = function() {
		if ((getuser_request.readyState == 4) && (getuser_request.status == 200)) {
			var xmlDoc = getuser_request.responseXML.documentElement;
			if (!xmlDoc) {
				lookupFailure();
				return;
			}
			if (!xmlDoc.getElementsByTagName('userId')) {
				lookupFailure();
				return;
			}
		}
		else {
			if (getuser_request.readyState == 4) {
				lookupFailure();
				return;
			}
		}
	}
}

function lookupFailure() {
	showCommError('No record found for this user');
	showEmail();
}

function showPrefs(type) {	
	var persistCookie = urlDecode(getCookieOptOut('STUB_PERSISTENT'));
	var element = document.getElementById('optOutPrefs');
	clearElement(element);
	if (type == 'user') {
		linkUrl = '/?gSec=account&action=my';
		linkBtnSrc = '/promotions/scratch/common/unsubscribe-btn-login.gif';
		functionTxt = 'Login to your account to update your preferences'
	}
	else { // guest
		linkUrl = '/?gSec=login&gAct=register';
		linkBtnSrc = '/promotions/scratch/common/unsubscribe-btn-reg.gif';
		functionTxt = 'Complete your registration to update your preferences'
	}
	var outputArea = document.getElementById('optOutPrefs');
	var newDiv = document.createElement('div');
	var newLink = document.createElement('a');
	var newBtn = document.createElement('img');
	newLink.href = linkUrl;
	newBtn.src = linkBtnSrc;
	newBtn.id = 'linkBtnId';
	newDiv.id = 'updatePrefsText';
	
	var newOptDiv = document.createElement('div');
	newOptDiv.id = 'optionDiv';
	newOptDiv.appendChild(document.createTextNode('Or, opt out of email communications below.'));
	
	newDiv.appendChild(document.createTextNode(functionTxt));
	newLink.appendChild(newBtn);
	
	outputArea.appendChild(newDiv);
	outputArea.appendChild(newLink);
	outputArea.appendChild(newOptDiv);
	//outputArea.appendChild(document.createElement('br'));
	//outputArea.appendChild(document.createTextNode('Or, opt out of email communications below.'));
	var comm_request = false;
	//comm_request = makeRequest('/preferenceCenter/getPreferredComm','email='+userEmailValue);
	if (type == 'clk')
	{
		comm_request = makeRequest('/preferenceCenter/getPreferredComm','email='+userEmailValue);
	}
	else
	{
		comm_request = makeRequest('/preferenceCenter/getPreferredComm','');
	}
	comm_request.onreadystatechange = function() {
		if ((comm_request.readyState == 4) && (comm_request.status == 200)) {
			clearElement(document.getElementById('optOutMain'));
			xmlDoc = comm_request.responseXML.documentElement;
			if (!xmlDoc) {
				showCommError('Could not retrieve preferences');
				return;
			}
			if (xmlDoc.getElementsByTagName('id').length > 0) {
				showCommError(' ');
				var outputArea = document.getElementById('optOutMain');
				
				var optOutHeader = document.createElement('div');
				optOutHeader.id = 'emailCommunications';
				optOutHeader.appendChild(document.createTextNode('Email Communications'));
				outputArea.appendChild(optOutHeader);
				
				var newPara = document.createElement('div');
				newPara.id = 'optOutText';
				newPara.appendChild(document.createTextNode('Check the alerts you no longer wish to receive and click "unsubscribe"'));
				outputArea.appendChild(newPara);
				var commIds = xmlDoc.getElementsByTagName('id');
				var commDescs = xmlDoc.getElementsByTagName('description');
				newPara = document.createElement('p');
				for (var i=0; i<commIds.length; i++) {
					var newCheckBox = document.createElement('input');
					newCheckBox.type = 'checkbox';
					newCheckBox.id = 'optOutCheck_'+commIds[i].childNodes[0].nodeValue;
					var commText = ' '+commDescs[i].childNodes[0].nodeValue.replace('Check to receive ','');
					var newText = document.createTextNode(commText);
					newPara.appendChild(newCheckBox);
					newPara.appendChild(newText);
					newPara.appendChild(document.createElement('br'));
				}
				outputArea.appendChild(newPara);
				
				var newButton = document.createElement('img');
				newButton.id = 'unSubButton';
				newButton.src = '/promotions/scratch/common/unsubscribe-btn-unsub.gif';
				newButton.onclick = function() { unSubNow(); }
				outputArea.appendChild(newButton);
				return;
			}
			else {
				showCommError('You are not currently subscribed to any StubHub Communications.');
				return;
			}
		}
		else {
			if (comm_request.readyState == 4) {
				showCommError('Could not retrieve preferences');
				return;
			}
		}
	}
}

window.onload = function(){init();}
