// JavaScript Document

var isValid = {
"first_name":0,
"last_name":0,
"company":0,
"email":0
};

var idList = ["first_name","last_name","company","email"];

function checkName(input) {
	var v = new RegExp(/\w+(\w+\s*)+/);

	if(v.test(input))
		return true;

	return false;
}


function checkURL(input) {
   var v = new RegExp("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");

	if(!v.test(input)) {
		v.compile("[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");

		if(!v.test(input)) return false;
	}

	return true;
}

function checkEmail(emailStr) {
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	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=emailStr.match(emailPat);

	if(matchArray == null) return false;

	var user=matchArray[1];
	var domain=matchArray[2];

	for(i=0; i<user.length; i++)
		if(user.charCodeAt(i) > 127) return false;

	for(i=0; i<domain.length; i++)
		if(domain.charCodeAt(i) > 127)	return false;

	if(user.match(userPat) == null) return false;

	var IPArray=domain.match(ipDomainPat);

	if(IPArray != null) {
		// this is an IP address

		for (var i=1;i<=4;i++)
			if(IPArray[i]>255) return false;

		return true;
	}

	// Domain is symbolic name.  Check if it's valid.

	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;

	for(i=0 ;i<len; i++)
		if(domArr[i].search(atomPat)==-1) return false;

	if(checkTLD && domArr[domArr.length-1].length != 2 &&
	   domArr[domArr.length-1].search(knownDomsPat) == -1)
		return false;

	if(len < 2) return false;

	return true;
}


function checkNumber(input) {
	var v = new RegExp(/(^\d+$)|(^\$?\d{1,3}(\,?\d{3})+$)/);
	
	if(v.test(input)) return true;
	
	return false;
}

// I need to find the index of a value in an array if it exists.
[].indexOf || (Array.prototype.indexOf = function(v) {
       for(var i = this.length; i-- && this[i] != v;);
       return i;
});

function validate(type, id) {
	var validEntry = false;
	var elt = document.getElementById(id);

	if(elt) {
		var userInput = elt.value;

		if("name" == type) validEntry = checkName(userInput);
		else if ("URL" == type) validEntry = checkURL(userInput);
		else if ("email" == type) validEntry = checkEmail(userInput);
		else if ("phone" == type) validEntry = checkPhone(userInput);
		else validEntry = checkNumber(userInput);

	} else alert("DEBUG: NO ELT");
	
	var validator_id = id+'_validator';
	var validator_symbol = document.getElementById(validator_id);

	if(validEntry) {
		isValid[id] = 1;
		if(validator_symbol) validator_symbol.style.color = 'green';
		else alert("DEBUG: NO VALIDATOR_SYMBOL");
		return true;
	}
	
	isValid[id] = 0;
	if(validator_symbol) validator_symbol.style.color = 'red';
	else alert("DEBUG: NO VALIDATOR_SYMBOL");
}

function verify() {
	var verified = true;
	
	for(var i = 5; i >= 0; --i)
	   if(0 == isValid[idList[i]]) {
		   verified = false;
			break;
 		}

	if(verified) {
		var elt = document.getElementById("submit");
		if(elt) {
			elt.style.display = 'block';
			elt.style.visibility = 'visible';
			elt.disabled = false;
  		}
  		
		elt = document.getElementById("fakeButton");
		if(elt) {
			elt.style.display = 'none';
			elt.style.visibility = 'hidden';
			elt.disabled = 'disabled';
  		}
	} else {
		var elt = document.getElementById("submit");
		if(elt) {
			elt.style.display = 'none';
			elt.style.visibility = 'hidden';
			elt.disabled = true;
		}

		elt = document.getElementById("fakeButton");
		if(elt) {
			elt.style.display = 'block';
			elt.style.visibility = 'visible';
			elt.disabled = 'disabled';
  		}

	}
}

function promptUser() {
	alert("Complete the form with correct values.");
}
