var searchOpen=false;

function readKey(e)
{
	if (!e) e = window.event;
	
	var keyInfo = e['keyCode'];
	
		
	//if enter
	if(e['keyCode']==13)
	{
		if(searchOpen)
			search();
		else	
			register();
	}

}

document.onkeypress = readKey;

//autocomplete code for Company field
var contact_name_auto_completer;
//listens to basic form
var formobserver1;
//validates basic form
var validateoberver1;
//boolean, represents validity of basic form
var valid;
//boolean, represents validity of addressform
var validadd;
//block to display general error messages
var errorBlock;
//block to display general adres form error messages
var errorAddBlock;
//listens to email DB lookup AJAX object
var emaillookup;
//listens to company DB lookup AJAX object
var companylookup;
//email pattern
var emailRegxp = /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i;
//zip code pattern
var zipRegxp = /(^\d{5}$)/;
//number
var numRegxp = /^[1-9]\d{0,9}$/;

//boolean, reperesents availability of curretly enetered email
var emailavailability;

var companyavailability=true;
//ad event to page load
addEvent(window, 'load', init);



//runs at page load, initiaizes variables, other junk
function init()
{
	//validate basic form
	validate1();
	
	//run code to initialize autocomplete
	//contact_name_auto_completer = new Ajax.Autocompleter('Company', 'contact_name_auto_complete', 'Autocomplete', {})	
	
	//check email
	lookUpEmail();
	
	//check company
	//lookUpCompany();
	
	//instantiate base form listener
	formobserver1 = new Form.Observer('registration', 0.1, validate1);

	//instantiate listener for address form
	formobserver2 = new Form.Observer('stage2', 0.1, validate2);
	
	//listen to email field
	emaillookup = new Form.Element.Observer('Email', 0.1, lookUpEmail);	
	
	//listen to Company field
	//companylookup = new Form.Element.Observer('Company', 0.1, lookUpCompany);
}

//validate the first part of the form
function validate1()
{
	var html = "";
	valid = true;
	
	if($("Feet").getValue()!="" && $("Inches").getValue()!="")
	{
		var height = parseInt($("Feet").getValue()) * 12 + parseInt($("Inches").getValue());
		$("Height").setValue(height);
	}
	
	if($('NameFirst').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "First Name is required";
		valid = false;
		errorBlock = $('NameFirstErr');
	}
	else if($('NameLast').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "Last Name is required";
		valid = false;
		errorBlock = $('NameLastErr');
	}	
	else if($('Email').getValue()=="" || !emailRegxp.test($('Email').getValue()))
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "A valid email is required";
		valid = false;
		errorBlock = $('EmailErr');		
	}
	else if(!emailavailability)
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "Your email is already in the system. Please go back to the homepage to log in.";
		valid = false;
		errorBlock = $('EmailErr');	
	}
	else if($('Address1').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "Address 1 is required";
		valid = false;
		errorBlock = $('Address1Err');
	}
	else if($('City').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "City is required";
		valid = false;
		errorBlock = $('CityErr');
	}
	else if($('State').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "State is required";
		valid = false;
		errorBlock = $('StateErr');
	}
	else if($('Zip').getValue()=="" || !zipRegxp.test($('Zip').getValue()))
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "A valid Zip code is required";
		valid = false;
		errorBlock = $('ZipErr');
	}
	else if($('Company').getValue()!="" && !zipRegxp.test($('CompanyZip').getValue()))
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "A valid Company Zip code is required";
		valid = false;
		errorBlock = $('CompanyZipErr');
	}
	else if($('CompanyZip').getValue()!="" && $('Company').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "Please enter a Company name";
		valid = false;
		errorBlock = $('CompanyErr');
	}
	else if($('Password').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "Pasword is required";
		valid = false;
		errorBlock = $('PasswordErr');
	}
	else if($('Confirm').getValue()=="" || $('Confirm').getValue()!=$('Password').getValue())
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "Password confirmation is invalid";
		valid = false;
		errorBlock = $('ConfirmErr');
	}
	else if($("Weight").getValue()=="" || !numRegxp.test($("Weight").getValue()))
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		html += "Please enter a valid weight";
		valid = false;
		errorBlock = $('WeightErr');
	}	
	else
		valid = true;	
	
	if(!valid)
	{
		//show error
		errorBlock.innerHTML = html;
		
		if(errorAddBlock)
			errorAddBlock.innerHTML = "";
		//hide second stage
		//$('stage2').style.display="none";
		//$('submitform').style.display="none";
	}	
	else		
	{
		//create eror message
		errorBlock.innerHTML = "";
		//no errors, show part 2 and submit button
		//$('stage2').style.display="block";
		//$('submitform').style.display="block";
		validate2();
	}	
}

//run AJAX call to EmailLookup servlet - looks for entered email in the DB 
function lookUpEmail()
{
	//if email is valid
	if(emailRegxp.test($('Email').getValue()))
	{
		//initial message
		errorBlock.innerHTML = "Searching for entered email";
		
		//servlet
		var url = 'EmailLookup';
	
		//parameters
		var pars = "Email="+$('Email').getValue();
	
		//ajax call
		var myAjax = new Ajax.Request
		(
			url, 
			{
				method: 'post', 
				parameters: pars, 
				onComplete: responseLookUpEmail
			}
		);
	}		
}

//response from server to lookUpEmail call
function responseLookUpEmail(originalRequest)
{
	var response = Trim(originalRequest.responseText);	
	var xmlobject;
	
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlobject = (new DOMParser()).parseFromString(response, "text/xml");
	}
	catch (e)
	{
		// Internet Explorer
		xmlobject = new ActiveXObject("Microsoft.XMLDOM");
  		xmlobject.async="false";
  		xmlobject.loadXML(response);
	 }
	
	
	//initialize
	emailavailability = false;
	var xMessage = xmlobject.childNodes[0].childNodes[0];
	//get message status  
	var mStatus = xMessage.attributes[1].value;
	
	//if avaiable, move one with validation
	if(mStatus=="available")
	{
		emailavailability = true;
		validate1();	
	}	
	else if(mStatus=="unavailable")
	{
		//if not, display message
		emailavailability = false;
		validate1();
	}
	else if(xMessage.attributes[0].value=="error")
	{
		$('resultreg').innerHTML = mStatus;
		$('EmailErr').style.display = "none";
		emailavailability = false;
	}
}


//run AJAX call to EmailLookup servlet - looks for entered company  in the DB 
function lookUpCompany()
{
	
	//initial message
	if($('Company').getValue()!="")
	{
		errorBlock.innerHTML = "Searching for entered company";
		
		//servlet
		var url = 'CompanyLookup';
	
		//parameters
		var pars = "Title="+$('Company').getValue();
	
		//ajax call
		var myAjax = new Ajax.Request
		(
			url, 
			{
				method: 'post', 
				parameters: pars, 
				onComplete: responseLookUpCompany
			}
		);
	}	
}

//response from server to lookUpEmail call
function responseLookUpCompany(originalRequest)
{
	var response = Trim(originalRequest.responseText);	
	
	var xmlobject;
	
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlobject = (new DOMParser()).parseFromString(response, "text/xml");
	}
	catch (e)
	{
		// Internet Explorer
		xmlobject = new ActiveXObject("Microsoft.XMLDOM");
  		xmlobject.async="false";
  		xmlobject.loadXML(response);
	 }
	
	
	//initialize
	companyavailability = false;
	
	var xMessage = xmlobject.childNodes[0].childNodes[0];
	//get message status  
	var mStatus = xMessage.attributes[1].value;
	
	//if avaiable, move one with validation
	if(mStatus=="available")
	{
		companyavailability = true;
		validate1();	
	}	
	else if(mStatus=="unavailable")
	{
		//if not, display message
		companyavailability = false;
		validate1();
	}
	else if(xMessage.attributes[0].value=="error")
	{
		$('resultreg').innerHTML = mStatus;
		$('CompanyErr').style.display = "none";
		companyavailability = false;
	}	
}




//validate address form
function validate2()
{
	if(valid)
	{
		var html = "";
		
		validadd = true;
		
		if($F('OptTerms')==null)
		{
			if(errorAddBlock)
				errorAddBlock.innerHTML = "";
			html += "Please check terms";
			validadd = false;
			errorAddBlock = $('OptTermsErr');
		}
		else if($F('OptCommunity')==null)
		{
			if(errorAddBlock)
				errorAddBlock.innerHTML = "";
			html += "Please check community guidelines";
			validadd = false;
			errorAddBlock = $('OptCommunityErr');			
		}
		
		if(!validadd)
		{
			//show error
			if(errorAddBlock)
				errorAddBlock.innerHTML = html;
			//$('submitform').style.display="none";
		}	
		else
		{
			if(errorAddBlock)
				errorAddBlock.innerHTML = "";
			//$('submitform').style.display="block";
		}
	}	
}


//track the user registration 
function trackRegistration()
{

	var click1 = new Image();
	var axel = Math.random()+"";
	var a = axel * 10000000000000;
	click1.src = 'http://ad.doubleclick.net/activity;src=1429819;type=start335;cat=mysta630;ord='+a+'?';

}



//runs registration, sends data to server, colcts async response
function register()
{
	
	if(valid && validadd)
	{
		trackRegistration();
		var url = 'Register';
		
		var pars = $('registration').serialize() + "&" + $('stage2').serialize() + 
				"&Company=" + encodeURIComponent($('Company').getValue()) + "&CompanyZip=" + $('CompanyZip').getValue();
			
		
		var myAjax = new Ajax.Request
		(
			url, 
			{
				method: 'post', 
				parameters: pars, 
				onComplete: showRegisterResponse
			}
		);
	}
	else
		alert("Please be sure you've filled out all the required fields.");	
					
}

//displays server response after registartion, response to register
function showRegisterResponse(originalRequest)
{
	
	var response = originalRequest.responseText;
	
	var output="";
	var variant = "";
	
	var xmlobject;
	
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlobject = (new DOMParser()).parseFromString(response, "text/xml");
	}
	catch (e)
	{
		// Internet Explorer
		xmlobject = new ActiveXObject("Microsoft.XMLDOM");
  		xmlobject.async="false";
  		xmlobject.loadXML(response);
	}
		
	//get message node
	var xMessage = xmlobject.childNodes[0].childNodes[0];	
	
	//get message type
	var mType = xMessage.attributes[0].value;
	
	var mErrorType;
	
	//get message status  
	var mStatus = xMessage.attributes[1].value;
	
	if(mStatus=="ok")
	{
		$("registration").style.display="none";
		$("stage2").style.display="none";
		$("submitform").style.display="none";
		output += "<b>Your registration was successful.</b>" +
				"<ul>" +
				"<li>Access the MyStart! Community.  <a href='login.jsp'>Please log in from the home page</a>.</li>" +
				"<li>Access the MyStart! Online Tracker. <a href='index.jsp'>Please log in from the home page</a>.</li>" +
				"<li>Access the MyStart! Walking Plan. <a href='mystart_tracker.jsp?section=plans'>Please log in from the home page</a>.</li>" +
				"<li>Download your FREE <a href='http://www.americanheart.org/presenter.jhtml?identifier=3069262'>Start! Holiday Healthy Eating</a> booklet, compliments of the American Heart Association’s Start! Team.</li>" +
				"</ul>"
		variant += "Thank you for joining the Start! Movement. Your free membership gets you:";
		
	}
	else 
	{
		mErrorType=xMessage.attributes[2].value;
		
		if(mErrorType=="invalid")
		{
		
			var xRecord = xmlobject.childNodes[0].childNodes[1].childNodes;
					
			for(var i=0; i<xRecord.length; i++)
			{
				output += xRecord[i].firstChild.nodeValue;
			}
		}
		else
		{
			output += mErrorType;
		}	
	}
	
	
	$('resultreg').innerHTML = output;
	$('variant').innerHTML = variant;
}


//run AJAX call to Company search (Autocomplete) servlet
function search()
{
	$('CompanySearchResults').style.display="block";
	
	//if search field not empty
	if($('CompanySearchPattern').getValue()!="")
	{
		//initial message
		$('CompanySearchResults').innerHTML = "Searching for entered company";
		
		//servlet
		var url = 'Autocomplete';
	
		//parameters
		var pars = $('CompanySearch').serialize();
	
		//ajax call
		var myAjax = new Ajax.Request
		(
			url, 
			{
				method: 'post', 
				parameters: pars, 
				onComplete: responseSearch
			}
		);
	}
	else
		$('CompanySearchResults').innerHTML = "Please enter a search pattern";
}

//response from server to lookUpEmail call
function responseSearch(originalRequest)
{
	var response = Trim(originalRequest.responseText);	
	var xmlobject;
	
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlobject = (new DOMParser()).parseFromString(response, "text/xml");
	}
	catch (e)
	{
		// Internet Explorer
		xmlobject = new ActiveXObject("Microsoft.XMLDOM");
  		xmlobject.async="false";
  		xmlobject.loadXML(response);
	 }
	
	
	//initialize
	var xMessage = xmlobject.childNodes[0].childNodes[0];
	//get message status  
	var mStatus = xMessage.attributes[1].value;
	
	if(mStatus=="ok")
	{
		var html="";
		
		var xRecord = xmlobject.childNodes[0].childNodes[1].childNodes;
		html = "<table id='ResultsTable'>"
		html += "<tr><td><strong>ZIP</strong></td><td><strong>Company</strong></td></tr>";
		for(var i=0; i<xRecord.length; i++)
		{
			
			html += "<tr>"
			html += '<td>'+xRecord[i].attributes[1].value+'</td>';
			html += '<td><a href="javascript:insert(\''+escape(escape(xRecord[i].firstChild.nodeValue))+'\',\''+xRecord[i].attributes[1].value+'\')">'+xRecord[i].firstChild.nodeValue+'</a></td>';
			html += "</tr>";			
			
		}				
		html += "</table>";
	}
	
	if(i==0)
		html = "No matches";
	
	$('CompanySearchResults').style.height = "75px";
	
	$('CompanySearchResults').innerHTML = html;
		
}

function closePanel()
{
	$('CompanySearchResults').style.display="none";
	$('CompanySearchResults').style.height="auto";
	$('CompanySearchResults').innerHTML = "";
	$('SearchPanel').style.display="none";
	searchOpen=false;	
}

function lookup()
{
	searchOpen=true;
	$('SearchPanel').style.display="block";	
	$('CompanySearchPattern').setValue("");
}

//inserts company name from search into company field
function insert(myCompany,myCompanyZip)
{
	$('Company').setValue(unescape(myCompany));
	$('CompanyZip').setValue(myCompanyZip);
	closePanel();	
}

//add event
function addEvent(obj, sType, fn)
{
    if (obj.addEventListener)
	{
        obj.addEventListener(sType, fn, false);
    }
	else
		if (obj.attachEvent)
		{
        	var r = obj.attachEvent("on"+sType, fn);
		}
		else
		{
        	alert("Handler could not be attached");
    	}
}

/**
 * clears company fields (name/id)
 */
function clearCompany()
{
	$('CompanyZip').setValue("");
	$('Company').setValue("");	
}

function pu(URL) 
{
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width=585,height=600,left = 502.5,top = 197.5');");
}

