var nbsp = 160;
var node_text = 3;
var emptyString = /^\s*$/ ;
var global_valfield;

function fnTrimSpaces(str)
{
	return str.replace(/^\s+|\s+$/g, '');
}

function fnErrorMessage(fld,msgtype,message)
{
  	var dispmessage;
  	if (emptyString.test(message)) 
    	dispmessage = String.fromCharCode(nbsp);    
  	else  
    	dispmessage = message;

  	var elem = document.getElementById(fld);
  	elem.firstChild.nodeValue = dispmessage;  
}

var proceed = 2;  

function fnValidatePresent(valfield,infofield,required)
{
  	if (!document.getElementById) return true; 
  	var elem = document.getElementById(infofield);
  	if (!elem.firstChild) return true;
  	if (elem.firstChild.nodeType != node_text) return true;
  	if (emptyString.test(valfield.value))
	{
    	if (required)
		{
      		fnErrorMessage(infofield, "error", "This is a required field");  
      		return false;
    	}
    	else
		{
      		fnErrorMessage (infofield, "warn", "");
      		return true;  
    	}
  	}
  	return proceed;
}

function fnValidateField(valfield,infofield,required)
{
	var stat = fnValidatePresent (valfield, infofield, required);   
	if (stat != proceed) return stat;    
	fnErrorMessage (infofield, "warn", "");     
	return true; 
}

function fnValidateEmail(valfield,infofield,required)
{
  	var stat = fnValidatePresent (valfield, infofield, required);
  	if (stat != proceed) return stat;

  	var tfld = fnTrimSpaces(valfield.value);
  	var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/  ;
  	
	if (!email.test(tfld))
	{
    	fnErrorMessage (infofield, "error", "Invalid e-mail address entered");
	    return false;
  	}
	
	var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/  ;
  	
	if (!email2.test(tfld)) 
    {
		fnErrorMessage (infofield, "warn", "Please conf");
	}
	else
	{
    	fnErrorMessage (infofield, "warn", "");
  		return true;
	}
}

function fnValidateLength(valfield,infofield,required,maxlength)
{
  	var stat = fnValidatePresent (valfield, infofield, required);
  	if (stat != proceed) return stat;

  	var tfld = (valfield.value);
  	if (tfld.length > maxlength)
	{
    	fnErrorMessage (infofield, "error", "Maximum (" + maxlength + ") characters exceeded");
    	return false;
	}
  	else
	{
		fnErrorMessage (infofield, "warn", "")
		return true;
  	}  
}

function fnValidateWWW(valfield,infofield,required)
{
  	var stat = fnValidatePresent (valfield, infofield, required);
  	if (stat != proceed) return stat;

  	var tfld = fnTrimSpaces(valfield.value);
  	var www = /^(www.){1}([\w]+)(.[\w]+){1,2}$/;
  	if (!www.test(tfld))
	{
    	fnErrorMessage (infofield, "error", "URL is not correctly formatted");
    	return false;
	}
  	else
	{
		fnErrorMessage (infofield, "warn", "")
		return true;
  	}
}

function fnValidateDate(valfield,infofield,required)
{
  	var stat = fnValidatePresent (valfield, infofield, required);
  	if (stat != proceed) return stat;

  	var tfld = fnTrimSpaces(valfield.value);
  	var date = /^(0[1-9]|[12][0-9]|3[01])\D(0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$/;
  	if (!date.test(tfld))
	{
    	fnErrorMessage (infofield, "error", "Date must be formatted dd/mm/yyyy");
	    return false;
	}
  	else
	{
		fnErrorMessage (infofield, "warn", "")
		return true;
  	}
}

function fnValidateTime(valfield,infofield,required)
{
  	var stat = fnValidatePresent (valfield, infofield, required);
  	if (stat != proceed) return stat;

  	var tfld = fnTrimSpaces(valfield.value);
  	var date = /^([01][0-9]|[2][0-3]):([0-5][0-9])$/;
  	if (!date.test(tfld))
	{
    	fnErrorMessage (infofield, "error", "Time must be formatted hh:mm");
    	return false;
	}
  	else
	{
		fnErrorMessage (infofield, "warn", "")
		return true;
  	}
}

function fnValidateNumeric(valfield,infofield,required,allowzero)
{
	var stat = fnValidatePresent (valfield, infofield, required);
  	var strValidChars = "0123456789.";
  	var blnIsNumber = true;
  	var intChar;
  
  	if (stat != proceed) return stat;

  	var tfld = fnTrimSpaces(valfield.value);

  	for (i = 0; i < tfld.length && blnIsNumber == true; i++) 
	{
		intChar = tfld.charAt(i); 
      	if (strValidChars.indexOf(intChar) == -1) 
	  	{
			blnIsNumber = false;
		}
	}
  
  	if (blnIsNumber)
	{
		if (!allowzero)
		{
	  		if (tfld==0)
			{
				fnErrorMessage (infofield, "error", "Value must be greater than zero");
				return false;
			}
	  		else
			{
				fnErrorMessage (infofield, "warn", "")
				return true;
	  		}
  		}
		else
		{
			fnErrorMessage (infofield, "warn", "")
			return true;
		}
	}
	else
	{
		fnErrorMessage (infofield, "error", "Field requires a number");
		return false;
	}
}

function fnValidatePostCode(valfield,infofield,required)
{
	var stat = fnValidatePresent (valfield, infofield, required);
  	if (stat != proceed) return stat;

  	var tfld = fnTrimSpaces(valfield.value);
  	var pcode = /^([A-Za-z]{1,2})([0-9]{1,2})([A-Za-z]{0,1})([0-9]{1})([A-Z]{2})$/;
  	
	if (!pcode.test(tfld))
	{
    	fnErrorMessage (infofield, "error", "Postcode must follow standard UK format");
	    return false;
	}
  	else
	{
		fnErrorMessage (infofield, "warn", "")
		return true;
  	}
}

function fnCheckFormType(valfield)
{
	var tfld = fnTrimSpaces(valfield.value);
	if (tfld=="Delete")
	{
		return false;
	}
	else
	{
		return true;
	}
}