/*
******************************************************************
*  Form Check, JavaScript Form Validation Library
*  written by M.Neset KABAKLI <contact at neset dot com>
*
*  Please do not hesitate to contact me for comments, suggestions
*  or requests. You can also get more information and download
*  the latest version of this file from wwww.neset.com web site.
*
*  Version	: v1.0.1
*  Date		: 09/08/2003
*  Last Update	: 31/08/2004
******************************************************************
*
*  FormCheck currently supports the following contols:
*	- Null values
*	- Minimum and maximum lengths
*	- Minimum and maximum values (for numbers)
*	- Type controls
*
*  FormCheck currently supports the following input types:
*	- date (mm/dd/yyyyy)
*	- datemysql (yyyy-mm-dd)
*	- email
*	- ipaddress
*	- number
*	- text
*
*/
function securityCheck(input) {
	/*
	  SecurityCheck Function
	  Author: M. Neset KABAKLI <contact at neset dot com>
	  Date	: 09/08/2003
	  Update: 31/08/2004
	*/
	var badchars	= Array('\'','\"','%','\\');
	for(var i=0; i<badchars.length;i++) {
		if(input.indexOf(badchars[i]) != -1)
		  return false;
	}
}

function inputCheck(input,type) {
	/*
	  InputCheck Function
	  Author: M. Neset KABAKLI <contact at neset dot com>
	  Date	: 09/08/2003
	  Update: 31/08/2003
	*/
	var errors = 0;
	var expression;

	switch(type) {
		case 'email':
			expression	= /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
		break;
		case 'text':
			expression	= "";
		break;
		case 'number':
			expression	= "";
		break;
		case 'date':
			expression	= /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
		break;
		case 'datedb':
			expression	= /^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$/;
		break;
		case 'datemysql':
			expression	= /^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$/;
		break;
		case 'ipaddress':
			expression	= /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;
		break;
		case 'credit_card':
			expression = /^[0-9]{16}$/;
			break;
		case 'style_card':
			expression = /^[0-9]{15,16}$/;
			break;
		case '':
		break;
	}

	if((errors == 0) && (expression != '')) {
		if(!expression.exec(input))
		  errors++;
	}

	if (errors == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function formCheck(cform) {
	/*
	  FormCheck Function
	  Author: M. Neset KABAKLI <contact at neset dot com>
	  Date	: 09/08/2003
	  Update: 31/08/2003
	*/
	if(!cform) {
		alert("Empty form object detected!");
		return false;
	}

	var errors		= 0;
	var message		= "Alert: \n";
	var controlmessages	= Array();

	for(i=0;i<cform.elements.length;i++) {
		// Get manual message for this input
		if(cform.elements[i].getAttribute('vMsg'))
		  controlmessages[i] = cform.elements[i].getAttribute('vMsg');
		else
		  controlmessages[i] = "";
		// Get message

		// 1. NULL CONTROL
		if(cform.elements[i].getAttribute('vNull') && cform.elements[i].getAttribute('vNull')=='0') {
			if(cform.elements[i].value) {
				if((cform.elements[i].value == '') || (cform.elements[i].value == ' ')) {
					errors++;
					if(controlmessages[i] != "")
				  	  message +="* "+controlmessages[i]+"\n";
					else
				 	  message +="* Field "+cform.elements[i].name+" cannot be blank.\n";
				}
			} else {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Field "+cform.elements[i].name+" cannot be undefined.\n";
			}
		}
		// END OF NULL CONTROL

		// 2. TYPE CONTROL
		if((cform.elements[i].getAttribute('vType')) && (cform.elements[i].value)) {
			if(!inputCheck(cform.elements[i].value,cform.elements[i].getAttribute('vType'))) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Invalid "+cform.elements[i].getAttribute('vType')+" format in "+cform.elements[i].name+".\n";
			}
		}
		// END OF TYPE CONTROL

		// 3. LENGTH CONTROL
		if((cform.elements[i].getAttribute('vMinLen')) && (cform.elements[i].value)) {
			if(cform.elements[i].value.length < cform.elements[i].getAttribute('vMinLen')) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Length of "+cform.elements[i].name+" cannot be less than "+cform.elements[i].getAttribute('vMinLen')+" characters.\n";
			}
		}
		if((cform.elements[i].getAttribute('vMaxLen')) && (cform.elements[i].value)) {
			if(cform.elements[i].value.length > cform.elements[i].getAttribute('vMaxLen')) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Length of "+cform.elements[i].name+" cannot be more than "+cform.elements[i].getAttribute('vMaxLen')+" characters.\n";
			}
		}
		// END OF LENGTH CONTROL

		// 3. MIN/MAX VALUE CONTROL FOR NUMBERS
		if((cform.elements[i].getAttribute('vMin')) && (cform.elements[i].value)) {
			if(cform.elements[i].value < cform.elements[i].getAttribute('vMin')) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Value of "+cform.elements[i].name+" cannot be less than "+cform.elements[i].getAttribute('vMin')+".\n";
			}
		}
		if((cform.elements[i].getAttribute('vMax')) && (cform.elements[i].value)) {
			if(cform.elements[i].value > cform.elements[i].getAttribute('vMax')) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Value of "+cform.elements[i].name+" cannot be less than "+cform.elements[i].getAttribute('vMax')+".\n";
			}
		}
		// END OF MIN/MAX VALUE CONTROL
	} // END OF THE FOR LOOP

	if(errors == 0) {
	  return true;
	} else {
	  alert(message);
	  return false;
	}
}

var cLang = new Array();
cLang['en'] = 'Postage Incorrect for Delivery Address\nPlease go back to the basket and change';
cLang['fr'] = 'Frais d\'envoi incorrect pour l\'adresse de livraison\nVeuillez aller de nouveau au panier et changez';

function checkoutCheck(cform,postage,lang) {
	if (postage == '') postage = 1;
	if ((postage == 1 && cform.country.value != 'GB')
	 || (postage == 2 && cform.country.value == 'GB')) {
		alert(cLang[lang]);
		return false;
	}
	if (formCheck(cform)) {
		cform.address.value = cform.M_address.value;
		cform.delvAddress.value = cform.address.value;
		cform.delvName.value = cform.name.value;
		cform.delvPostcode.value = cform.postcode.value;
		cform.delvCountry.value = cform.country.value;
		// if we have a payment_method (UK)
		if (cform.payment_method != null) {
		 // loop through payment methods to find checked and set the form action to the value passed
		 for(var i=0;i<cform.payment_method.length;i++) {
		  if (cform.payment_method[i].checked) {
		   cform.action = cform.payment_method[i].value;
		   break;
			}
		 }
		}
		return true;
	}	else {
		return false;
	}
}

function checkoutStyleCheck(cform) {
	if (formCheck(cform)) {
	  if (cform.delvAddress == '') {
	    cform.delvName.value = cform.name.value;
			cform.delvAddress.value = cform.address.value;
			cform.delvPostcode.value = cform.postcode.value;
			cform.delvCountry.value = cform.country.value;
		}
		return true;
	}	else {
		return false;
	}
}

function enterKey(myfield, e)
{
var key;
var keychar;

if (window.event)
   key = window.event.keyCode;
else if (e)
   key = e.which;
else
   return false;
keychar = String.fromCharCode(key);

return (key == 13) ? true : false;
}

function numbersonly(myfield, e, dec)
{
var key;
var keychar;

if (window.event)
   key = window.event.keyCode;
else if (e)
   key = e.which;
else
   return true;
keychar = String.fromCharCode(key);

// control keys
if ((key==null) || (key==0) || (key==8) ||
    (key==9) || (key==13) || (key==27) )
   return true;

// numbers
else if ((("0123456789").indexOf(keychar) > -1))
   return true;

// decimal point jump
else if (dec && (keychar == "."))
   {
   myfield.form.elements[dec].focus();
   return false;
   }
else
   return false;
}

/* basket functions */

function add(id) {
  if (document.basket.quantity.value == '' || document.basket.quantity.value == 0)
   document.basket.quantity.value=1;
 	document.basket.id.value=id;
	document.basket._action.value='add';
	document.basket.submit();
}

function remove(id) {
 document.basket.id.value=id;
 document.basket._action.value='remove';
 document.basket.submit();
}

function update() {
 document.basket._action.value='update';
 document.basket.submit();
}

function checkout() {
 document.basket._action.value='checkout';
 document.basket.submit();
}