
function checkSelect(o,s) {
	var x = o.value; 
	if (x=="null" || x=="0" || x=="" || x=="-1" ) {
		alert('Please select '+s);
		return false;
	} else {
		return true;
	}
}

// placeholders and ajax calls.  use a lib later -sjm
function getZipResponse() {
}
function getPhoneResponse(elemID) {
	this.elemID = elemID;
}

getZipResponse.prototype.processResponse = function() {
	var response = Math.round(xmlHttp.responseText * 1);
	// alert ('response is '+response);

	if (response == 0) {
		var f = get('zip');
		f.value = "";
		alert('Please enter a valid Zip Code');
		switchid('step1');
		f.focus();
	} else {
		//alert('Thanks a Good '+response);
	}
}

getPhoneResponse.prototype.processResponse = function() {
	var a = get(this.elemID+'_area_code');
	var p = get(this.elemID+'_prefix');
	var s = get(this.elemID+'_suffix');

	var response = Math.round(xmlHttp.responseText * 1);
	// alert ('response is '+response);

	if (response == 0) {
		s.value = "";
		p.value = "";
		a.value = "";
		alert('Please enter a valid ' + this.elemID.charAt(0).toUpperCase() + this.elemID.substr(1) + ' Phone Number');
		switchid('step3');
		a.focus();
	} else {
		//alert('Thanks a Good '+response);
	}
}

// pass in a form field to validate
function validateZip(o) {
	if (o.getAttribute&&o.value.length==o.getAttribute("maxlength")) {
		var z = o.value;
		checkZip(z);
	}
}

// pass in a form field to validate
function validatePhone(lField) {
	var a = get(lField+'_area_code');
	var p = get(lField+'_prefix');
	var s = get(lField+'_suffix');
	
	if (a.getAttribute&&a.value.length==a.getAttribute("maxlength")) {
		if (p.getAttribute&&p.value.length==p.getAttribute("maxlength")) {
			if (s.getAttribute&&s.value.length==s.getAttribute("maxlength")) {
				var av = a.value;
				var pv = p.value;
				checkPhone(lField,av,pv);
				return true;
			}
		}
	}
	return false;
}

// pass in a email to check via internal js check
function checkEmail(e) {
 // this function sucks change later....

	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	var matchArray=e.match(emailPat);
	if (matchArray==null) {
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];
	if (user.match(userPat)==null) {
		return false;
	}

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		  for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				return false;
			}
		}
		return true;
	}
	var domainArray=domain.match(domainPat);
	if (domainArray==null) {
		return false;
	}
	var atomPat=new RegExp(atom,"g");
	var domArr=domain.match(atomPat);
	var len=domArr.length;
	if (domArr[domArr.length-1].length<2 ||
		domArr[domArr.length-1].length>3) {
		return false;
	}
	if (len<2) {
	   return false;
	}
	return true;
}

// pass in a zipcode to check via ajax call / response
function checkZip(z) {
		
		// fix IE retarded caching, can also be written as....  var time = new Date().getTime();
		var d = new Date();
		var time = d.getTime();

		var base_url = window.location.protocol + "//" + window.location.host + "/";
        	var url = base_url + 'scripts/checkZip.cgi?z=' + z + '&time=' + time;
		// alert('url is '+url);
		
		// does this scale okay - sjm? look into jquery/prototype
		var o = new getZipResponse();
 		sendAJAXRequest(url,o);
}

// pass in area_code and prefix to check via ajax call / response
function checkPhone(lField,av,pv) {
		
		// fix IE retarded caching, can also be written as....  var time = new Date().getTime();
		var d = new Date();
		var time = d.getTime();

		var base_url = window.location.protocol + "//" + window.location.host + "/";
        	var url = base_url + 'scripts/checkPhone.cgi?av=' + av + '&pv=' + pv + '&time=' + time;
		//alert('url is '+url);
		
		// does this scale okay - sjm? look into jquery/prototype
		var o = new getPhoneResponse(lField);
 		sendAJAXRequest(url,o);
}


/* fetch city and state from original ('zip' input field) and attach as children inputs to the parent form */
function fetchLocation(original) {
	var p = original.form;  /* parent form */
	var z = original.value;
	alert('fetching'+z+" into "+p.name);
}


function checkForm(lForm)
{
	setCookie("original",1,1);
	var form = get(lForm); 

	/* Check for multiple submits */
	if (form.submitted.value == "true")
	{
		alert("Form has been submitted. Please wait for response from the server.");
		return false;
	}
	/* Check for each Step to be done */
	if(Step1(lForm)) { 
		//alert("step1 okay");
		if(Step2(lForm)) { 
			//alert("step2 okay");
			if(Step3(lForm)) { 
			//	alert("step3 okay");
				form.submitted.value = true; 
				return true; 
			} else { 
				return false; 
			}
		 }
 	}
 	return false; 
}


function Step1(lForm) {
	var form = get(lForm); 

	// check tax amount owed
	if(!checkSelect(form.elements["tax_amount_owed"],"a Tax Amount Owed.")) { return false; }
	
	// check zip
    	if(""==form.zip.value || form.zip.value.length<5) {
		alert('Please enter a Zip Code');
		return false;
	}

	// check tax amount owed is a number on backend
	return true;
}


function Step2(lForm) {
	var form = get(lForm);

	if(document.getElementById('step1').style.display == 'block') { 
		document.getElementById('step_image').src = '/images/right_form_step2.gif'; 
		document.getElementById('step1').style.display = 'none'; 
		document.getElementById('step2').style.display = 'block'; 
		return false; 
	}
	if (form.has_lien_on_property[0].checked == false && form.has_lien_on_property[1].checked == false) {
		alert('Please select if you have a Tax Lien.');
		return false;
	}
	if (form.has_wage_garnishment[0].checked == false && form.has_wage_garnishment[1].checked == false) {
		alert('Please select if you have a Wage Garnishment.');
		return false;
	}
	//if (form.has_bank_account_levy[0].checked == false && form.has_bank_account_levy[1].checked == false) {
	//	alert('Please select if you have a Bank Account Levy.');
	//	return false;
	//}
	if (form.has_unfiled_tax_returns[0].checked == false && form.has_unfiled_tax_returns[1].checked == false) {
		alert('Please select if you have Unfiled Tax Returns.');
		return false;
	}

	return true;
}

function Step3(lForm) {
	var form = get(lForm);
	
	if(document.getElementById('step2').style.display == 'block') { 
		document.getElementById('step_image').src = '/images/right_form_step3.gif'; 
		document.getElementById('step2').style.display = 'none'; 
		document.getElementById('step3').style.display = 'block'; 
		return false; 
	}

	if (form.first_name.value.length < 1) {
		alert('Please enter First Name.');
		return false;
	}
	if (form.last_name.value.length < 1) {
		alert('Please enter Last Name.');
		return false;
	}
	//if (form.address.value.length < 1) {
	//	alert('Please enter Address.');
	//	return false;
	//}
	if (form.email.value.length < 1) {
		alert('Please enter an E-mail Address.');
		return false;
	}
	if (!checkEmail(form.email.value))  {
		alert("Please enter a valid E-mail.");
		// switchid('Step3');
		form.email.focus();
		return false;
	}
	if (form.home_area_code.value.length < 3) {
		alert('Please enter Home Phone area code.');
		return false;
	}
	if (form.home_prefix.value.length < 3) {
		alert('Please enter Home Phone prefix.');
		return false;
	}
	if (form.home_suffix.value.length < 4) {
		alert('Please enter Home Phone suffix.');
		return false;
	}
	
	
	return true;
}



function validateForm(lForm) {
	return true;
    if(""==document.forms[lForm].first_name.value) {
        alert("Please enter your First Name.");
        document.forms[lForm].first_name.focus();
        return false; 
    }   
    if(""==document.forms[lForm].last_name.value || document.forms[lForm].last_name.value.length<2) {
        alert("Please enter your Last Name.");
        document.forms[lForm].last_name.focus();
        return false;
    }
   // if(""==document.forms[lForm].address1.value) {
   //    alert("Please enter your Address.");
   //     document.forms[lForm].address1.focus();
   //     return false; 
   // }   
    if(""==document.forms[lForm].zip.value || isNaN(document.forms[lForm].zip.value)
        || document.forms[lForm].zip.value.length < 5) {
        alert("Please enter your Zip Code.");
        document.forms[lForm].zip.focus();
        return false; 
    }
    if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(document.forms[lForm].email.value)){
    } else {
        alert("Please enter your E-mail Address");
        document.forms[lForm].email.focus();
        return false;
    }
    if(""==document.forms[lForm].home_area_code.value || isNaN(document.forms[lForm].home_area_code.value)
        || document.forms[lForm].home_area_code.value.length < 3
    ) {
        alert("Please enter your Home Phone Area Code (3-digits).");
        document.forms[lForm].home_area_code.focus();
        return false; 
    }   
    if(""==document.forms[lForm].home_prefix.value || isNaN(document.forms[lForm].home_prefix.value)
        || document.forms[lForm].home_prefix.value.length < 3
    ) {
        alert("Please enter your Home Phone Prefix (3-digits).");
        document.forms[lForm].home_prefix.focus();
        return false; 
    }   
    if(""==document.forms[lForm].home_suffix.value || isNaN(document.forms[lForm].home_suffix.value)
        || document.forms[lForm].home_suffix.value.length < 4
    ) {
        alert("Please enter your Home Phone Suffix (4-digits).");
        document.forms[lForm].home_suffix.focus();
        return false; 
    }
//    var best = document.forms[lForm].best_contact_time.value;
//    if(!best || !/Anytime|Morning At (Home|Work)|Afternoon At (Home|Work)|Evening At (Home|Work)|Email Only/.test(best)) {
//        alert("Please choose the best time to contact you.");
//        document.forms[lForm].zip.focus();
//        return false; 
//    }   
    var tax = parseInt(document.forms[lForm].tax_amount_owed.value);
//    if(!tax || (parseInt(tax) < 10000)) {
    if(!tax) {
        alert("Please choose the tax amount you owe.");
        document.forms[lForm].tax_amount_owed.focus();
        return false; 
    }   
    return true;
}


function get(id) {
    return document.getElementById(id);
}

function isBlank(str) {
	if (str.length == 0)             // yes - nothing entered
	return true
	for (i=0; i<=str.length-1; i++)  // yes - all spaces
	if (str.charAt(i) != " ")
		return false
	return true                      // nope
}
function isDigit (c) {
	return ((c >= "0") && (c <= "9"))
}
function isIntegerPN (s) {   
	var i, startPos;

	if (isBlank(s))
	return false;


	// Search through string's characters one by one
	// until we find a non-numeric character.
	// When we do, return false; if we don't, return true.

	if ( s.charAt(0) == "-" )
		startPos = 1;
	else
		startPos = 0;

	for (i = startPos; i < s.length; i++) {
		// Check that current character is number.
		var c = s.charAt(i);

		if (!isDigit(c)) return false;
	}

	// All characters are numbers.
	return true;
}

function format_number(n) {
	if (!isNumber(n))
		return n;

	var isBlank = true;
	var isNegative = false;
		if (n.length == 0)             // yes - nothing entered
		return "";
		for (i=0; i<=n.length-1; i++)  // yes - all spaces
		if (n.charAt(i) != " ")
			isBlank = false;
		if ( isBlank )
			return "";

	n = removeCommas(n);
	var arr=new Array('0'), i=0;

	if ( n < 0 ) {
		isNegative = true;
		n = n * -1;
	}
	while (n>0)
		{arr[i]=''+n%1000; n=Math.floor(n/1000); i++;}
	arr=arr.reverse();
	for (var i in arr) if (i>0) //padding zeros
		while (arr[i].length<3) arr[i]='0'+arr[i];

	if ( isNegative )
		return "-" + arr.join();
	else
		return arr.join();
}

function isNumber( number ) {
  number = removeCommas( number );
  if ( isIntegerPN(number) ) return true;
  else return false
}
function removeCommas( strValue ) {
  var objRegExp = /,/g; //search for commas globally
  //replace all matches with empty strings
  return strValue.replace(objRegExp,'');
}

function nexttab(thisone, maxlength, nextfieldname) {
   if ( thisone.value.length == maxlength ) {
    eval('document.' + thisone.form.name + '.' + nextfieldname + '.focus()');
   }
 }
