/**
 * @author: Ovi Roatis
 * @version: 1.1
 * Miscelanous functions, procedures and gloabal variables used for data call and data storage
 */


/*
 * globals
 */
var zipRegxp = /(^\d{5}$)/;
//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;
//phone pattern
var phoneRegxp = /^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$/;

var errorBlock;
var formisvalid = true;

//event listeners
var formobserver;
var companyfieldobserver;

var loading=false;

var companies = new Array();

ignoreObserver = false;

function init()
{
	 
	validate();
	
	companyfieldobserver = new Form.Element.Observer('name', 0.1, lookUpCompany);
	
	formobserver = new Form.Observer('hrstaffregister', 0.1, validate);	 
}

//run AJAX call to EmailLookup servlet - looks for enetered email in the DB 
function lookUpCompany()
{
	
	//if other request in progress, quit
	if(loading)
		return;
	
	if(ignoreObserver)
	{
		ignoreObserver=false;
		return;
	}	
	
	//request in progress
	loading = true;	
	
	
	//initial message
	if($('name').getValue()!="")
	{
		
		$('box').style.display = "block";
		$('results').innerHTML = "<p>Searching for entered company</p>";
		
		//servlet
		var url = '../Autocomplete';
	
		//parameters
		var pars = "CompanySearchPattern="+$('name').getValue()+"&status=*";
	
		//ajax call
		var myAjax = new Ajax.Request
		(
			url, 
			{
				method: 'post', 
				parameters: pars, 
				onComplete: responseLookup
			}
		);
	
	}
	else
		loading=false;	
}

//response from server to lookUpEmail call
function responseLookup(originalRequest)
{
	
	loading=false;
	
	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="";
		
		html += '<table><tr><td></td><td><strong>Company name</strong></td><td><strong>Zip</strong></td></tr>';
			
		var xRecord = xmlobject.childNodes[0].childNodes[1].childNodes;
	
		for(var i=0; i<xRecord.length; i++)
		{
			
			var myCompany = new company();
			
			
			
			
			myCompany.name = xRecord[i].firstChild.nodeValue;
			
			
			
			myCompany.zip = xRecord[i].attributes[1].value;
			myCompany.contactName = xRecord[i].childNodes[1].firstChild.nodeValue;
			myCompany.contactEmail = xRecord[i].childNodes[2].firstChild.nodeValue;
			myCompany.status = xRecord[i].childNodes[3].firstChild.nodeValue;
			myCompany.address1 =  xRecord[i].childNodes[4].firstChild.nodeValue;
			myCompany.address2 =  xRecord[i].childNodes[5].firstChild.nodeValue;
			myCompany.city =  xRecord[i].childNodes[6].firstChild.nodeValue;
			myCompany.state =  xRecord[i].childNodes[7].firstChild.nodeValue;
			companies[i] = myCompany;
			
			
			html += '<tr><td>'+
			'<input type="radio" name="complete" onClick="insertCompany('+i+')" />'+
			'</td><td>'+myCompany.name+'</td>'+
			'<td>'+myCompany.zip+'</td>'+
			'</tr>';
			
		}				
		
		html += "</table>";
	}
	
	if(i==0)
	{	
		$('box').style.display="none";
	}
	else
	{	
		$('box').style.display="block";
		$('boxmessage').innerHTML = "A company with a similar name was found in the database. Was this your company?";
		$('results').innerHTML = html;	
	}	
}

function insertCompany(index)
{
	
	//not approved or declined
	//insert data into form
	if(companies[index].status!=1 || companies[index].status!=1)
	{
		$('name').setValue(companies[index].name);
		$('zipcode').setValue(companies[index].zip);
		$('address1').setValue(companies[index].address1!='null' ? companies[index].address1 : "");
		$('address2').setValue(companies[index].address2!='null' ? companies[index].address2 : "");
		$('city').setValue(companies[index].city!='null' ? companies[index].city : "");
		$('state').setValue(companies[index].state!='null' ? companies[index].state : "");
		
		
		ignoreObserver = true;
		
		closeBox();
	}
	else
	{
		$('results').innerHTML="Your company was registered by someone else."+
		"<p>"+(companies[index].contactName!= 'null' ? companies[index].contactName+"<br />" : "<p>")+
		(companies[index].contactEmail!= 'null' ? "<a href='mailto:"+companies[index].contactEmail+"'>"+companies[index].contactEmail+"</a></p>" : "</p>")+
		"<p>To complete your registration process, please contact your local American Heart Association representative. If you do not know whom to contact, please click <a href='http://www.heart.org/presenter.jhtml;jsessionid=5UVGUWYO2FLXWCQFCXQCCZQ?identifier=3005688' target='_blank'>here</a>."
		;
		
		$('hrstaffregister').style.display="none";
	}
}

function closeBox()
{
	$('results').innerHTML="";
	$('box').style.display="none";
	
	if($('hrstaffregister').style.display=="none")
	{
		window.location="../index.jsp"
	}
}


function validate()
{
	formisvalid = true;
	
	var editHtml = "";
	
	
	if($('name').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		editHtml += "Please enter a Company Name";
		formisvalid = false;
		errorBlock = $('nameError');				
	}
	else if($('address1').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		editHtml += "Please enter a Street Address";
		formisvalid = false;
		errorBlock = $('adddres1Error');
				
	}
	else if($('city').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		editHtml += "Please enter a city";
		formisvalid = false;
		errorBlock = $('cityError');
	}
	else if($('state').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		editHtml += "Please select a state";
		formisvalid = false;
		errorBlock = $('stateError');
	}
	else if($('zipcode').getValue()=="" || !zipRegxp.test($('zipcode').getValue()))
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		formisvalid = false;
		editHtml += "Please enter a zip-code";
		errorBlock = $('zipcodeError');
	}
	else if($('contactName').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		editHtml += "Please enter a Contact Name";
		formisvalid = false;
		errorBlock = $('contactNameError');
				
	}	
	else if($('contactEmail').getValue()=="" || !emailRegxp.test($('contactEmail').getValue()))
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		formisvalid = false;
		editHtml += "Please enter a valid Email";
		errorBlock = $('contactEmailError');
	}
	else if($('contactPhone').getValue()=="" || !phoneRegxp.test($('contactPhone').getValue()))
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		formisvalid = false;
		editHtml += "Please enter a valid phone number";
		errorBlock = $('contactPhoneError'); 
	}
	else if($('password').getValue()=="")
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		editHtml += "Please enter a password";
		formisvalid = false;
		errorBlock = $('passwordError');
				
	}
	else if($('password').getValue()!=$('confirm').getValue())
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		editHtml += "Please confirm your password";
		formisvalid = false;
		errorBlock = $('confirmError');				
	}
	else if(!$('agree').checked)
	{
		if(errorBlock)
			errorBlock.innerHTML = "";
		editHtml += "Please check!";
		formisvalid = false;
		errorBlock = $('agreeError');
	}
	
	if(!formisvalid)
	{
		//show error
		errorBlock.innerHTML = editHtml;		
	}	
	else
	{	if(errorBlock)	
			errorBlock.innerHTML = "";
	}	
}

function save()
{
	if(formisvalid)
	{
		var url = '../DashboardRegisterCompany';
		var pars = $('hrstaffregister').serialize();
		var myAjax = new Ajax.Request
		(
			url, 
			{
				method: 'post', 
				parameters: pars, 
				onComplete: saveResponse
			}
		);
	}
}

function saveResponse(originalRequest)
{
	var response = originalRequest.responseText;
	
	//get response string and make convert to XML
	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 status node
	var xStatus = xmlobject.firstChild.firstChild.childNodes[0].firstChild.nodeValue;
	
	if(xStatus=="ok")
	{
		$('response').innerHTML = xmlobject.firstChild.firstChild.childNodes[1].firstChild.nodeValue;
		$('hrstaffregister').style.display="none";
		$('fill').style.display = "none";
		
	}	
	else
	{
		var error = xmlobject.firstChild.firstChild.childNodes[1].firstChild.nodeValue;
		$('response').innerHTML = error;
		$('hrstaffregister').style.display="none";
	}	
	
}
