var strFormBackgroundColour = '#ffc';
var strErrorBackgroundColour = '#8ea9f0';
var conMinimumPasswordLength = 6;

function validate_emailaddress(strAddress) {
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	if(reg.test(strAddress) == false) {
		return false;
	}
	return true;
}

function validate_number(datafield, blankandzeroacceptable) {
	var strTemp = String(datafield.value).split(',').join('');
	strTemp = String(strTemp).split('£').join('');
	//strTemp = String(strTemp).split(',').join('');
	if (Trim(strTemp) == '')
		if (blankandzeroacceptable)
			return true;
		else
			return false;
	if (isNaN(strTemp))
		return false;
	datafield.value = strTemp;
	if ((Number(strTemp) < 1) && (blankandzeroacceptable == false))
		return false;
	return true;
}

function validate_creditcard(datafield) {
	var strTemp = String(datafield.value).split('-').join('');
	strTemp = String(strTemp).split(' ').join('');
	strTemp = Trim(strTemp);
	if (strTemp.length != 16)
		return false;
	if (isNaN(strTemp))
		return false;
	datafield.value = strTemp;
	return true;
}

function validate_password(strPassword, intMinimumPasswordLength) {
	var reg = new RegExp('([A-Za-z0-9]{' + intMinimumPasswordLength + ',})');
	if(reg.test(strPassword) == false) {
		return false;
	}
	return true;
}

function validate_postcode(strPostcode) {
	var reg = /^([a-zA-Z]{1,2}[0-9][0-9A-Za-z]? [0-9][a-zA-Z]{2})$/;
	if(reg.test(strPostcode) == false) {
		return false;
	}
	return true;
}

function validate_time(datafield) {
	var strTime = datafield.value;
	if (!strTime == '') {
		if (!/^([01]?[0-9]|[2][0-3])(:[0-5][0-9])?$/.test(strTime)) {
			document.getElementById(strFieldID).focus();
			document.getElementById(strFieldID).select();
			alert(strTime + ' is is not a valid time!');
			return false;
		}
	}
}

function Trim(strText) {
	if (strText == null)
		return '';
	return strText.replace(/^\s+|\s+$/g, '');
}

function check_field() {
	var blnStatus = true;
	var blnZeroAcceptable;
	var arrArgs = check_field.arguments;
	var strBackgroundColour = String(arrArgs[0]);
	var datafield;
	var errorfield;

	for(i=1; i<arrArgs.length; i++) {
		if (String(arrArgs[i]).substring(0, 2) == 'DP')
			datafield = document.getElementsByName(String(arrArgs[i]).substring(2))[0];
		else
			datafield = document.getElementById(String(arrArgs[i]).substring(2));
		errorfield = document.getElementById('err_' + String(arrArgs[i]).substring(2));
		if (datafield) {
			if (errorfield)
				errorfield.className = 'pwc_novalidationerror';
			switch (String(arrArgs[i]).substring(0, 2)) {
			case 'BL': case 'PW':
				if ((Trim(datafield.value) == '') || (Trim(datafield.value) == '* required')) {
					datafield.style.backgroundColor = strErrorBackgroundColour;
					if (String(arrArgs[i]).substring(0, 2) == 'BL')
						datafield.value = '* required';
					if (errorfield)
						errorfield.className = 'pwc_validationerror';						
					blnStatus = false;
				}
				else
					datafield.style.backgroundColor = strBackgroundColour;
				break;
			case 'NM': case 'N0':
				blnZeroAcceptable = true;
				if (String(arrArgs[i]).substring(0, 2) == 'N0')
					blnZeroAcceptable = false;
				if (validate_number(datafield, blnZeroAcceptable))
					datafield.style.backgroundColor = strBackgroundColour;
				else {
					datafield.style.backgroundColor = strErrorBackgroundColour;
					blnStatus = false;
				}
				break;			
			case 'CC':
				if (validate_creditcard(datafield))
					datafield.style.backgroundColor = strBackgroundColour;
				else {
					datafield.style.backgroundColor = strErrorBackgroundColour;
					if (Trim(datafield.value) == '')
						datafield.value = '* required';
					blnStatus = false;
				}
				break;
			case 'EM':
				if (validate_emailaddress(datafield.value))
					datafield.style.backgroundColor = strBackgroundColour;
				else {
					datafield.style.backgroundColor = strErrorBackgroundColour;
					if (Trim(datafield.value) == '')
						datafield.value = '* required';
					blnStatus = false;
				}
				break;
			case 'PC':
				if (datafield.value == '* required')
					datafield.value = '';
				strTemp = String(datafield.value).split(' ').join('');
				if (strTemp.length > 4)
					datafield.value = strTemp.substring(0, strTemp.length - 3) + ' ' + strTemp.substring(strTemp.length - 3);
				if (validate_postcode(datafield.value))
					datafield.style.backgroundColor = strBackgroundColour;
				else {
					datafield.style.backgroundColor = strErrorBackgroundColour;
					if (Trim(datafield.value) == '')
						datafield.value = '* required';
					blnStatus = false;
				}
				break;
			case 'DP': // as opposed to DT for date, DP means date picker
				if (datafield.value == 'None') {
					datafield.style.backgroundColor = strErrorBackgroundColour;
					blnStatus = false;
				}
				else
					datafield.style.backgroundColor = strBackgroundColour;
				break;
			case 'DR':
				if (datafield.value == '-42') {
					datafield.style.backgroundColor = strErrorBackgroundColour;
					blnStatus = false;
				}
				else
					datafield.style.backgroundColor = strBackgroundColour;
				break;		
			default:
				alert('error');
			}
		}
	}
	return blnStatus;
}

function reset_background() {
	var strBackgroundColour = strFormBackgroundColour;
	var arrArgs = reset_background.arguments;
	if (arrArgs.length > 1) 
		strBackgroundColour = String(arrArgs[1]);
	arrArgs[0].style.backgroundColor = strBackgroundColour;
	if (((arrArgs[0].value + '  ').substring(0, 2) == '* ') || (arrArgs[0].value == '0'))
		arrArgs[0].value = '';
}

function check_frmCategory() {
	var blnReturn = true;
	
	document.getElementById('pwc_validationerrormessage').innerHTML = '';
	blnReturn = check_field(strFormBackgroundColour, 'BLdescription', 'N0order');
	
	if (blnReturn)
		blnReturn = check_duplicate('Category', 'caDescription', document.forms[0].description.value, 'caID', document.forms[0].id.value, 'Sorry, the Category \'' + document.forms[0].description.value + '\' is not unique in the database');

	return blnReturn;
}

function check_frmCountry() {
	var blnReturn = true;
	
	document.getElementById('pwc_validationerrormessage').innerHTML = '';
	blnReturn = check_field(strFormBackgroundColour, 'BLname', 'BLcode', 'BLiso2', 'BLiso3');
	
	if ((blnReturn) && (document.forms[0].code.value.length != 3)) {
		blnReturn = false;
		document.getElementById('code').style.backgroundColor = strErrorBackgroundColour;
	}
	if ((blnReturn) && (document.forms[0].iso2.value.length != 2)) {
		blnReturn = false;
		document.getElementById('iso2').style.backgroundColor = strErrorBackgroundColour;
	}
	if ((blnReturn) && (document.forms[0].iso3.value.length != 3)) {
		blnReturn = false;
		document.getElementById('iso3').style.backgroundColor = strErrorBackgroundColour;
	}

	if (blnReturn)
		blnReturn = check_duplicate('Country', 'ctCode', document.forms[0].code.value, 'ctID', document.forms[0].id.value, 'Sorry, the Country Code \'' + document.forms[0].code.value + '\' is not unique in the database');
	
	return blnReturn;
}

function check_frmHomePage() {
	var blnReturn = true;
	
	blnReturn = check_field(strFormBackgroundColour, 'BLdescription', 'N0order');
	
	return blnReturn;
}

function check_frmLogin() {
	var blnReturn = true;
	
	blnReturn = check_field(strFormBackgroundColour, 'BLusername', 'PWpassword');

	return blnReturn;
}

function check_frmMenu() {
	var blnReturn = true;
	
	document.getElementById('pwc_validationerrormessage').innerHTML = '';
	blnReturn = check_field(strFormBackgroundColour, 'BLdescription', 'BLurl', 'N0order');
	
	if (blnReturn)
		blnReturn = check_duplicate('Menu', 'mnDescription', document.forms[0].description.value, 'mnID', document.forms[0].id.value, 'Sorry, the Menu Description \'' + document.forms[0].description.value + '\' is not unique in the database');

	return blnReturn;
}

function check_frmPassword() {
	var blnReturn = true;

	document.getElementById('pwc_validationerrormessage').innerHTML = '';
	blnReturn = check_field(strFormBackgroundColour, 'PWexisting', 'PWnewpass', 'PWconfirm');
	
	if (blnReturn)
		blnReturn = check_password(document.forms[0].newpass.value, document.forms[0].confirm.value, conMinimumPasswordLength);
	
	return blnReturn;
}

function check_password(strPassword, strConfirm, intMinimumLength) {
	var blnReturn = true;
	
	blnReturn = validate_password(strPassword, intMinimumLength);
	if (blnReturn) {
		if (strPassword.toLowerCase() != strConfirm.toLowerCase()) {
			blnReturn = false;
			document.getElementById('pwc_validationerrormessage').innerHTML = 'Your Password and Confirmation do not match';
		}
	} else
		document.getElementById('pwc_validationerrormessage').innerHTML = 'Passwords must be at least ' + conMinimumPasswordLength + ' characters long and contain only A - z and 0 - 9';
	
	return blnReturn;
}

function check_frmPR() {
	var blnReturn = true;
	
	blnReturn = check_field(strFormBackgroundColour, 'BLname', 'BLdescription', 'N0order');
	
	return blnReturn;
}

function check_frmPress() {
	var blnReturn = true;
	
	blnReturn = check_field(strFormBackgroundColour, 'BLname', 'N0yearmonth', 'BLdescription', 'N0order');

	if (blnReturn && (document.forms[0].yearmonth.value.length != 6)) {
		document.forms[0].yearmonth.style.backgroundColor = strErrorBackgroundColour;
		blnReturn = false;
	}
	
	return blnReturn;
}

function check_frmProduct() {
	var blnReturn = true;
	var intTab = 0;

	blnReturn = check_field(strFormBackgroundColour, 'BLname', 'BLdescription', 'N0order', 'N0postageunits');

	if (!blnReturn)
		$('#tabs_pwc').tabs('select', intTab);
	
	return blnReturn;
}

function check_frmPromotion() {
	var blnReturn = true;
	
	document.getElementById('pwc_validationerrormessage').innerHTML = '';
	blnReturn = check_field(strFormBackgroundColour, 'BLcode', 'BLtitle', 'NMpvalue', 'NMminimum');

	if (blnReturn)
		blnReturn = check_duplicate('Promotion', 'ofCode', document.forms[0].code.value, 'ofID', document.forms[0].id.value, 'Sorry, the Promotion \'' + document.forms[0].code.value + '\' is not unique in the database');

	return blnReturn;
}

function check_frmRegister() {
	var blnReturn = true;
	
	document.getElementById('pwc_validationerrormessage').innerHTML = '';
	blnReturn = check_field(strFormBackgroundColour, 'BLname', 'BLfirstname', 'BLlastname', 'PWpassword', 'BLaddress1', 'BLaddress4', 'BLpostcode', 'EMemail');

	if (blnReturn && document.forms[0].country.value == '826')
		blnReturn = check_field(strFormBackgroundColour, 'PCpostcode');
		
	if (blnReturn && document.forms[0].id.value < 0)
		blnReturn = check_password(document.forms[0].password.value, document.forms[0].confirm.value, conMinimumPasswordLength);

	if (blnReturn)
		blnReturn = check_duplicate('User', 'usName', document.forms[0].name.value, 'usID', document.forms[0].id.value, 'Sorry, the User Name \'' + document.forms[0].name.value + '\' is not unique in the database');

	return blnReturn;
}

function check_frmStockist() {
	var blnReturn = true;
	
	document.getElementById('pwc_validationerrormessage').innerHTML = '';
	blnReturn = check_field(strFormBackgroundColour, 'BLname', 'BLaddress1', 'BLaddress4', 'PCpostcode', 'N0order');

	if (blnReturn)
		blnReturn = check_duplicate('Stockist', 'stName', document.forms[0].name.value, 'stID', document.forms[0].id.value, 'Sorry, the Stockist \'' + document.forms[0].name.value + '\' is not unique in the database');

	return blnReturn;
}

function check_frmSystemParameter() {
	var blnReturn = true;
	
	document.getElementById('pwc_validationerrormessage').innerHTML = '';
	blnReturn = check_field(strFormBackgroundColour, 'BLname');
	
	if (blnReturn)
		blnReturn = check_duplicate('SystemParameter', 'spName', document.forms[0].name.value, 'spID', document.forms[0].id.value, 'Sorry, the System Parameter \'' + document.forms[0].name.value + '\' is not unique in the database');

	return blnReturn;
}

function check_frmUser() {
	var blnReturn = true;
	
	document.getElementById('pwc_validationerrormessage').innerHTML = '';
	blnReturn = check_field(strFormBackgroundColour, 'BLname', 'BLfirstname', 'BLlastname', 'PWpassword', 'BLaddress1', 'BLaddress4', 'BLpostcode', 'EMemail');

	if (blnReturn && document.forms[0].country.value == '826')
		blnReturn = check_field(strFormBackgroundColour, 'PCpostcode');

	if (blnReturn)
		blnReturn = check_password(document.forms[0].password.value, document.forms[0].password.value, conMinimumPasswordLength);

	if (blnReturn)
		blnReturn = check_duplicate('User', 'usName', document.forms[0].name.value, 'usID', document.forms[0].id.value, 'Sorry, the User Name \'' + document.forms[0].name.value + '\' is not unique in the database');

	return blnReturn;
}

function create_xmlhttprequest() {
	var xhr = null;
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	}	else {
		if (window.ActiveXObject) {
			xhr = new ActiveXObject('Microsoft.XMLHTTP');
		}
	}
	return xhr;
}

function check_duplicate(strTable, strField, strValue, strKeyField, intKeyValue, strError) {
	var http;
	var doc;
	var element;
	var params = '';
	var blnReturn = false;
		
	http = create_xmlhttprequest();
	if (http) {
		http.onreadystatechange = function() { 
			if (http.readyState == 4) {
				if (http.status == 200) {
					doc = http.responseXML;
					element = doc.getElementsByTagName('result').item(0);
					if (unescape(element.firstChild.data) == 'duplicate')
						document.getElementById('pwc_validationerrormessage').innerHTML = strError;
					else if (unescape(element.firstChild.data) != '-1')
						document.getElementById('pwc_validationerrormessage').innerHTML = unescape(element.firstChild.data);
				} else 
					document.getElementById('pwc_validationerrormessage').innerHTML = 'Error code: ' + http.status;
			}
		};
		params = params + 'type=' + escape('check_duplicate');
		params = params + '&table=' + escape(strTable);
		params = params + '&field=' + escape(strField);
		params = params + '&value=' + escape(strValue);
		params = params + '&keyfield=' + escape(strKeyField);
		params = params + '&keyvalue=' + escape(intKeyValue);
		http.open('POST', escape('includes/fnXMLHttpRequest.ASP'),  false); 
		http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		http.setRequestHeader('Content-length', params.length);
		http.send(params);
	} else
		document.getElementById('pwc_validationerrormessage').innerHTML = 'Unable to Create XMLHttpRequest';	
	
	if (document.getElementById('pwc_validationerrormessage').innerHTML == '')
		blnReturn = true;
	
	return blnReturn;
}

function integer_onkeyup(objField) {
	var strOutput = '';
	var strInput = objField.value;
	for (var i = 0; i < strInput.length; i++)
		if ('0123456789'.indexOf(strInput.charAt(i)) != -1)
			strOutput += strInput.charAt(i);
	if (Number(strOutput))
		objField.value = Number(strOutput);
	else
		objField.value = '';
}

function check_addproduct() {
	var blnReturn = true;

	document.getElementById('pwc_validationerrormessage').innerHTML = '';

	blnReturn = check_field(strFormBackgroundColour, 'N0quantity');
	if (blnReturn) {
		if (Number(document.getElementById('variant').value) < 0) {
			blnReturn = false;
			document.getElementById('pwc_validationerrormessage').innerHTML = 'Sorry the Size/Colour chosen does not exist';
		}
	} else
		document.getElementById('pwc_validationerrormessage').innerHTML = 'Please enter a Quantity';

	return blnReturn;
}

function check_variant() {
	var http;
	var doc;
	var element;
	var params = '';
	var blnReturn = false;
	
	document.getElementById('pwc_validationerrormessage').innerHTML = '';
	
	http = create_xmlhttprequest();
	if (http) {
		http.onreadystatechange = function() { 
			if (http.readyState == 4) {
				if (http.status == 200) {
					doc = http.responseXML;
					element = doc.getElementsByTagName('result').item(0);
					document.getElementById('variant').value = unescape(element.firstChild.data);
					if (unescape(element.firstChild.data) == '-1')
						document.getElementById('pwc_validationerrormessage').innerHTML = 'Sorry the Size/Colour chosen does not exist';
					else {
						if (document.getElementById('trade').value == 'Y') {
							element = doc.getElementsByTagName('tradeprice').item(0);
							document.getElementById('price').innerHTML = unescape(element.firstChild.data);
						} else {
							element = doc.getElementsByTagName('retailprice').item(0);
							document.getElementById('price').innerHTML = unescape(element.firstChild.data);
							element = doc.getElementsByTagName('previousprice').item(0);
							if (unescape(element.firstChild.data) == '0.00')
								document.getElementById('previous').innerHTML = '';
							else
								document.getElementById('previous').innerHTML = '&nbsp;was&nbsp;&pound;' + unescape(element.firstChild.data);
						}
						element = doc.getElementsByTagName('instock').item(0);
						if (unescape(element.firstChild.data) == '-1')
							document.getElementById('stock').innerHTML = 'In Stock';
						else
							document.getElementById('stock').innerHTML = '<font color=red>Awaiting Stock</font>';
					}
				} else 
					document.getElementById('pwc_validationerrormessage').innerHTML = 'Error code: ' + http.status;
			}
		};
		params = params + 'type=' + escape('check_variant');
		params = params + '&product=' + escape(document.getElementById('id').value);
		params = params + '&variant0=' + escape(document.getElementById('variant0').value);
		params = params + '&variant1=' + escape(document.getElementById('variant1').value);
		http.open('POST', escape('includes/fnXMLHttpRequest.ASP'),  false); 
		http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		http.setRequestHeader('Content-length', params.length);
		http.send(params);
	} else
		document.getElementById('pwc_validationerrormessage').innerHTML = 'Unable to Create XMLHttpRequest';	
	
	if (document.getElementById('pwc_validationerrormessage').innerHTML == '')
		blnReturn = true;
	
	return blnReturn;
}

