/* form validations *******************************/

function validateContactForm(form){
	var defMsg = 'Please correct the following:\n------------------------------';
	var msg = defMsg;
	
	if(trim(form.name.value) == '')
		msg = msg + '\nEnter your Name';
	
	if(trim(form.email.value) == '' || !validateEMail(form.email.value))
		msg = msg + '\nEnter a valid E-Mail Address';
		
	if(trim(form.MSG.value) == '')
		msg = msg + '\nEnter a Message';
		
	if(msg == defMsg)
		return true;
	
	alert(msg);
	return false;
}

function validateUnsubscribeForm(form){
	var defMsg = 'Please correct the following:\n------------------------------';
	var msg = defMsg;

	if(trim(form.email.value) == '' || !validateEMail(form.email.value))
		msg = msg + '\nEnter a valid E-Mail Address';
	
	if(msg == defMsg)
		return true;
	
	alert(msg);
	return false;
}

function validateSinglePageForm(form){
	var returnVal = validatePage2(form) && validatePage1(form, true);
	if(!returnVal)
	{
		var btn_submit = document.getElementById('step2_btn');
		btn_submit.disabled = false;
		btn_submit.value = "Get Quote!";
	}
	return returnVal;
}

function validatePage1(form, singlePage){
	
	if(singlePage === undefined)
		singlePage = false;
		
	var defMsg = 'Please correct the following:\n------------------------------';
	var msg = defMsg;
	
	var re_name = /^[A-Za-z\s\-]+$/g;
	if(form.First_Name.value.match(re_name) == null || trim(form.First_Name.value) == ''){
		msg = msg + '\nEnter a valid First Name';
	}
	if(form.Last_Name.value.match(re_name) == null || trim(form.Last_Name.value) == ''){
		msg = msg + '\nEnter a valid Last Name';
	}
	if(trim(form.Email.value) == '' || !validateEMail(form.Email.value)){
		msg = msg + '\nEnter a valid E-Mail Address';
	}
	
	var re = /^[0-9]+$/g;
	if(form.area_code.value.match(re) == null || form.phone1.value.match(re) == null || form.phone2.value.match(re) == null ||
				form.area_code.value.length != 3 || form.phone1.value.length != 3 || form.phone2.value.length != 4)
		msg = msg + '\nEnter a valid Phone Number';
	
	if(trim(form.ext.value) != '' && form.ext.value.match(re) == null)
		msg = msg + '\nEnter a valid Extension (or leave it blank)';
	
	if(msg == defMsg)
	{
		if(!singlePage)
		{
			var btn_submit = document.getElementById('step1_btn');
			btn_submit.disabled = true;
			btn_submit.value = "Processing...";
		}
		return true;
	}
	
	alert(msg);
	return false;
}

function validatePage2(form){
	
	var defMsg = 'Please correct the following:\n------------------------------';
	var msg = defMsg;
	
	if(trim(form.Company.value) == ''){
		msg = writeCompanyInfoErrorHeader(msg, defMsg);
		msg = msg + '\nEnter a valid Company Name';
	}
	
	var re = /^[0-9]{5}$/g;
	if(trim(form.Company_Zip_Code.value) == '' || form.Company_Zip_Code.value.match(re) == null){
		msg = writeCompanyInfoErrorHeader(msg, defMsg);
		msg = msg + '\nEnter a valid Company Zip Code';
	}
	
	/*
	var re_sic = /^[0-9]{4}$/g;
	if(trim(form.SIC_Code.value) != '' && (form.SIC_Code.value.match(re_sic) == null || (form.SIC_Code.value < 100 || form.SIC_Code.value > 9995))){
		msg = writeCompanyInfoErrorHeader(msg, defMsg);
		msg = msg + '\nEnter a valid 4 digit SIC Code (or leave it blank)';
	}
	*/
	
	var curDate   = new Date();
	var curMonth  = curDate.getMonth()+1;
	var curDay    = curDate.getDate();
	var curYear   = curDate.getFullYear();
	var RED_month = form.RED_month.value;
	var RED_day   = form.RED_day.value;
	var RED_year  = form.RED_year.value;
	
	if(curYear == RED_year && (RED_month < curMonth || (RED_month == curMonth && RED_day < curDay))){
		msg = writeCompanyInfoErrorHeader(msg, defMsg);
		msg = msg + '\nEnter a valid future requested effective date';
	}

	if(form.census_checkbox != null && form.census_checkbox.checked)
	{
		// for now dont require census, just capture the lead
		/*if(form.spreadsheet != null && trim(form.spreadsheet.value) == ''){
			msg = writeEmployeeInfoErrorHeader(msg, defMsg);
			msg = msg + '\nSelect a census file to upload (click Browse)';
		}*/
	}
	

	var no_of_emps = form.No_of_Employees.options[form.No_of_Employees.selectedIndex].value;	
	var name = null, zip = null, dob_m = null, dob_d = null, dob_y = null;
	var re_name = /^[A-Za-z\s\-]+$/g;

	for(var i=1;i<=no_of_emps;i++)
	{
		name = document.getElementById('initials' + i);
		if(name != null && (trim(name.value) == '' || name.value.match(re_name) == null)){
			msg = writeCensusErrorHeader(msg, defMsg);
			msg = msg + '\nEnter a valid Employee Name for row ' + i;
		}
		
		zip = document.getElementById('zipcode' + i);
		if(zip != null && (trim(zip.value) == '' || zip.value.match(re) == null )){
			msg = writeCensusErrorHeader(msg, defMsg);
			msg = msg + '\nEnter a valid Employee Home Zip Code for row ' + i;
		}
		
		dob_m = document.getElementById('month' + i);
		if(dob_m != null && dob_m.options[dob_m.selectedIndex].value == ''){
			msg = writeCensusErrorHeader(msg, defMsg);
			msg = msg + '\nSelect a valid Employee Birthday Month for row ' + i;
		}
		
		dob_d = document.getElementById('day' + i);
		if(dob_d != null && dob_d.options[dob_d.selectedIndex].value == ''){
			msg = writeCensusErrorHeader(msg, defMsg);
			msg = msg + '\nSelect a valid Employee Birthday Day for row ' + i;
		}
		
		dob_y = document.getElementById('year' + i);
		if(dob_y != null && dob_y.options[dob_y.selectedIndex].value == ''){
			msg = writeCensusErrorHeader(msg, defMsg);
			msg = msg + '\nSelect a valid Employee Birthday Year for row ' + i;
		}
	}
	
	if(!form.terms.checked)
	{
		if(msg != defMsg)
			msg = msg + '\n';
			
		msg = msg + '\nRead and agree to the terms and conditions by checking the box';
	}
	
	if(msg == defMsg){
		var btn_submit = document.getElementById('step2_btn');
		btn_submit.disabled = true;
		btn_submit.value = "Processing Quote...";
		return true;
	}
	
	alert(msg);
	return false;
}

function writeCensusErrorHeader(msg, defMsg){
	
	if(msg == defMsg || msg.indexOf('[ Employee Census Errors ]') == -1)
	{
		if(msg.indexOf('[ Company Information Errors ]') != -1 || msg.indexOf('[ Employee Information Errors ]') != -1)
			msg = msg + '\n';
			
		return msg + '\n[ Employee Census Errors ]';
	}else
		return msg;
}		

function writeCompanyInfoErrorHeader(msg, defMsg){
	
	if(msg == defMsg || msg.indexOf('[ Company Information Errors ]') == -1)
		return msg + '\n[ Company Information Errors ]';
	else
		return msg;
}		

function writeEmployeeInfoErrorHeader(msg, defMsg){
	
	if(msg == defMsg || msg.indexOf('[ Employee Information Errors ]') == -1)
	{
		if(msg.indexOf('[ Company Information Errors ]') != -1)
			msg = msg + '\n';
			
		return msg + '\n[ Employee Information Errors ]';
	}else
		return msg;
}		


function trim(str) {
    return ltrim(rtrim(str), chars);
}

function ltrim(str) {
    chars = "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str) {
    chars = "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function validateEMail(str) {
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   return reg.test(str);
}
/****************************************************/



function DataRow(data) {
	this.data = data; // data is itself an array or other object that contains data
	this.row = null;
}


function sortTable(event,col) {/*
	var header = table.firstChild; // storing both heading and data in tbody.
	while(table.firstChild) table.removeChild(table.lastChild);
	table.appendChild(header);
	data.sort(function(a,b) { return a.data[col] - b.data[col]; });
	// you can have more complex logic based on the data and requirements
	for(var i=0;i<data.length;i++)
	table.appendChild(data[i]); */
}

function census_delete_row(row_num)
{
	var empObj = document.getElementById('No_of_Employees');
	var emps = empObj.options[empObj.selectedIndex].value;
	var delRowCount = document.getElementById('del_row_count');
	
	if(emps <= 2)
	{
		alert("You must have at least two employees");
	}
	else
	{
		var del_test = confirm('Are you sure you wish to delete row ' + row_num + '?');
		if(del_test)
		{
			var censusDIV = document.getElementById('census');
			var table = null;
			var data = new Array();
	
			if(censusDIV.firstChild.nodeName == 'TABLE')
			{
				table = censusDIV.firstChild;			
				
				var rows = table.getElementsByTagName('TR');
				
				var j=0;
				var cells = null;
				var firstCell = null;
				var lastCell = null;
				
				var re_id = /id="([^\d]+)\d+"/g
				var re_name = /name="([^\d]+)\d+"/g
				
				var cell_innerHTML;
				for(var i=0;i<rows.length;i++)
				{
					if(i != row_num)
					{
						if(i>0)	// skip header
						{
							cells = rows[i].getElementsByTagName("td");
							if(cells != null)
							{
								firstCell = cells.item(0);
								lastCell = cells.item(cells.length-1);
								//alert(cells.item(2).id.substring(0,cells.item(2).id.length-1));
								
								if(firstCell != null)
									firstCell.innerHTML = j;
									
								if(lastCell != null)
									lastCell.innerHTML = "<a href=\"javascript:census_delete_row('" + j + "')\">x</a>";
								
								/* fix cell names and ids */
								for(var z=0;z<cells.length;z++)
								{
									//alert(cells.item(z).innerHTML);
									//alert(cells.item(z).innerHTML.match(re_id));
									cells.item(z).innerHTML = cells.item(z).innerHTML.replace(re_id, "id=\"$1" + j + "\"");
									cells.item(z).innerHTML = cells.item(z).innerHTML.replace(re_name, "name=\"$1" + j + "\"");
									//alert(cells.item(z).innerHTML);
								}
							}
						}
						data[j] = rows[i];
						j++;
					}
				}
				
				table.deleteRow(row_num);
	/*			while(table.firstChild) 
					table.removeChild(table.lastChild);
					
				for(var i=0;i<j;i++){
					alert(data[i]);
					if(data[i] != null)
						table.appendChild(data[i]);
				}*/
			
				/* decrease employee count and increase del count */
				empObj.selectedIndex--;
				if(delRowCount != null)
					delRowCount.value++;
				
				/* resize div to fit new table */
				censusDIV.width = table.width;
				censusDIV.height = table.height;
				
				/* TODO: save data into session via ajax post */
				
				/**************/
			}
		}
	}
	
	//var emps = empObj.options[empObj.selectedIndex].value;
	/* //problem with this is it doesnt save data when you delete
	if(table != null && window.RegExp)
	{
		var tableSrc = table.innerHTML;
		var regex = new RegExp("<tr>\\n<td>" + row_num + "</td>\\n<td>(.|\\n)*?</tr>");
		tableSrc = tableSrc.replace(regex, '');
		table.innerHTML = tableSrc;
	}*/
	
	
}