//////////////////////////////////////////////////////////////////////////////////
//   Form Acceptor V 2.0					                //
//   Copyright © 2007 Unovision.co.uk                                                 //          
//////////////////////////////////////////////////////////////////////////////////

function submitAccept(objForm) {
	objInputs = objForm.getElementsByTagName("INPUT");
	objSelects = objForm.getElementsByTagName("SELECT");
	objTextarea = objForm.getElementsByTagName("TEXTAREA");

	isOK = true;
	objTemp = objInputs;
	for(i=0; i<objTemp.length; i++) {
		var message = '';
		if((objTemp[i].type != "hidden") && (objTemp[i].type != "submit") && (!objTemp[i].disabled)) {
			if((objTemp[i].getAttribute("required") == "true") && (objTemp[i].value == "")) {
				message = "This field is required";
				//alert(objTemp[i].name);
				isOK = false;
			}
			if((objTemp[i].getAttribute("sameas") != null)) {
				sameObj = getElementByName(objTemp, objTemp[i].getAttribute("sameas"));
				if (sameObj != null) {
					if (objTemp[i].value != sameObj.value) {					
						message = "Should be the same as " + sameObj.name + " field.";
						isOK = false;
						//alert(objTemp[i].name);
					}
				}
			}
			if(objTemp[i].value != "") {
				switch(objTemp[i].getAttribute("dataType")) {
					case "int":
						message = _checkInt(objTemp[i]);
						break;
					case "float":
						message = _checkFloat(objTemp[i]);
						break;
					case "email":
						message = _checkEmail(objTemp[i]);
						break;
					case "date":
						message = _checkDate(objTemp[i]);
						break;
					case "ukPostcode":
						message = _checkUKPostcode(objTemp[i]);
						break;
				}
			}
		}
		if (message != '') {
			
			objTemp[i].title = message;
			objTemp[i].style.backgroundColor = 'red';
			//alert(objTemp[i].name);
			isOK = false;
		}
		else {
			objTemp[i].title = '';
			objTemp[i].style.backgroundColor = 'white';
		}
	}
	objTemp = objSelects;
	for(i=0; i<objTemp.length; i++) {
		if((objTemp[i].value == "") && (!objTemp[i].disabled) && (objTemp[i].required == "true")) {
			//alert (objTemp[i].name);
			if(objTemp[i].type != "hidden") {
				objTemp[i].title = "This field is required";
				objTemp[i].style.backgroundColor = 'beige';
				objTemp[i].style.color = 'red';
			}
			isOK = false;
			//alert(objTemp[i].name);
		}
		else {
			objTemp[i].style.backgroundColor = 'white';
			objTemp[i].style.color = 'black';    
    }
	}
	
	objTemp = objTextarea;
	for(i=0; i<objTemp.length; i++)
		if((objTemp[i].value == "") && (!objTemp[i].disabled) && (objTemp[i].required == "true")) {
			if(objTemp[i].type != "hidden") {
				objTemp[i].title = "This field is required";
				objTemp[i].style.backgroundColor = 'red';
			}
			isOK = false;
			//alert(objTemp[i].name);
		}
	if (!isOK) alert("All fields are required.");
	return isOK;
}

function _checkEmail(emailFld) {
	var emailPat = /^(\w+(?:\.\w+)*)@((?:\w+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	var matchArray = emailFld.value.match(emailPat);
	if (matchArray == null) {
		return "Your email address seems incorrect.  Please try again (check the '@' and '.'s in the email address)";
	}
	var IPArray = matchArray[2].match(/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/);
	if (IPArray != null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				return "Destination IP address is invalid!";
			}
        }
	}
	return '';
}

function _checkInt(intFld) {
	var re = new RegExp("^[+-]?[0-9]*$");
	if(!re.test(intFld.value)) {
		return "An integer number is required!";
	}
	if (objTemp[i].getAttribute("dataLow")!=null && 
			parseInt(intFld.value) < parseInt(objTemp[i].getAttribute("dataLow")))
		return "An integer number greater than " + objTemp[i].getAttribute("dataLow") + " is required.";
	if (objTemp[i].getAttribute("dataHigh")!=null && 
			parseInt(intFld.value) > parseInt(objTemp[i].getAttribute("dataHigh")))
		return "An integer number lower than " + objTemp[i].getAttribute("dataHigh") + " is required.";	
	return '';
}


function _checkFloat(floatFld) {
	re = new RegExp("^[+-]?[0-9]*\\.?[0-9]*([eE][+-]?[0-9]+)*$");
	if(!re.test(floatFld)) {
		return "A float number is required!";
	}
	return '';

}


function _checkDate(dateFld) {
	var datePat = /^(\d{4})(\/|-)(\d{1,2})\2(\d{1,2})$/;
	var matchArray = dateFld.value.match(datePat); // is the format ok?
	if (matchArray == null) {
		return "Date is not in a valid format.";
	}
	month = matchArray[3]; // parse date into variables
	day = matchArray[4];
	year = matchArray[1];
	if (month < 1 || month > 12) { // check month range
		return "Month must be between 1 and 12.";
	}
	if (day < 1 || day > 31) {
		return "Day must be between 1 and 31.";
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		return "Month "+month+" doesn't have 31 days!";
	}
	if (month == 2) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) {
			return "February " + year + " doesn't have " + day + " days!";
		}
	}
	return '';  // date is valid
}

function _checkUKPostcode(postcodeFld) {
	var re = /^([A-Za-z]{1,2}\d+)\s+(\d+[A-Za-z]{2,})$/;
	if(!re.test(postcodeFld.value)) {
		return "This is not a valid UK post code.";
	}
	return '';	
}

function getElementByName(obj, name) {
	for (j=0; i<obj.length; j++) {
		if (obj[j].name == name) return obj[j];
	}
	return null;
}

		
	
