
var nbsp = 160;		// non-breaking space char
var node_text = 3;	// DOM text node-type
var emptyString = /^\s*$/ ;
var global_valfield;	// retain valfield for timer thread
var proceed = 2;

function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '');
}

function setFocusDelayed()
{
  global_valfield.focus();
}

function setfocus(valfield)
{
  // save valfield in global variable so value retained when routine exits
  global_valfield = valfield;
  setTimeout( 'setFocusDelayed()', 100 );
}

function msg(fld,msgtype,message)
{
  // setting an empty string can give problems if later set to a
  // non-empty string, so ensure a space present. (For Mozilla and Opera one could
  // simply use a space, but IE demands something more, like a non-breaking space.)
  var dispmessage;
  if (emptyString.test(message))
  {dispmessage = String.fromCharCode(nbsp);}
  else
  {dispmessage = message;}

  var elem = document.getElementById(fld);
  elem.style.color='red';
  elem.firstChild.nodeValue = dispmessage;

  elem.className = msgtype;   // set the CSS class to adjust appearance of message
}


function commonCheck(obj,id,required)
{
  if (!document.getElementById)return true;

  var elem = document.getElementById(id);
  if (!elem.firstChild) return true;  // not available on this browser
  if (elem.firstChild.nodeType != node_text) return true;  // infofield is wrong type of node

  if (emptyString.test(obj.value)) {
    if (required) {
      msg (id, "error", "ERROR: required");
      setfocus(obj);
      return false;
    }
    else {
      msg (id, "warn", "");   // OK
      return true;
    }
  }
  return proceed;
}

function validName(obj,id,strg,required){
	var fname = obj.value;
	var fnameRegxp = /^([a-z A-Z]{2,20})$/;

	var stat = commonCheck(obj, id, required);
	if (stat != proceed)
	return stat;

	var tfld = trim(fname);
	if (!fnameRegxp.test(tfld)){
	msg (id, "warn", strg);
	setfocus(obj);
	return false;
    }
    else
    {msg (id, "warn", "");return true;}

}

function validAddress(obj,id,required){
	var fname = obj.value;
	var fnameRegxp = /^([a-zA-Z0-9 \#\-\,]{10,50})$/;

	var stat = commonCheck(obj, id, required);
	if (stat != proceed)
	return stat;

	var tfld = trim(fname);
	if (!fnameRegxp.test(tfld)){
	msg (id, "warn", 'Your Address. is invalid');
	setfocus(obj);
	return false;
    }
    else
    {msg (id, "warn", "");return true;}

}

function validEmail(obj,id,required){
var fname = obj.value;
var fnameRegxp = /^([a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+)$/;

	var stat = commonCheck(obj, id, required);
	if (stat != proceed)
	return stat;

	var tfld = trim(fname);
	if (!fnameRegxp.test(tfld)){
	msg (id, "warn", 'Your email is invalid');
	setfocus(obj);
	return false;
    }
    else
    {msg (id, "warn", "");return true;}

}

function validTel(obj,id,required){
var fname = obj.value;
var fnameRegxp = /^([0-9]{8})$/;

	var stat = commonCheck(obj, id, required);
	if (stat != proceed)
	return stat;

	var tfld = trim(fname);
	if (!fnameRegxp.test(tfld)){
	msg (id, "warn", 'Your mobile no. is invalid');
	setfocus(obj);
	return false;
    }
    else
    {msg (id, "warn", "");return true;}

}

function validPostalCode(obj,id,required){
var fname = obj.value;
var fnameRegxp = /^([0-9]{6,6})$/;

	var stat = commonCheck(obj, id, required);
	if (stat != proceed)
	return stat;

	var tfld = trim(fname);
	if (!fnameRegxp.test(tfld)){
	msg (id, "warn", 'Your Postal Code is invalid');
	setfocus(obj);
	return false;
    }
    else
    {msg (id, "warn", "");return true;}
}

function validDesc(obj,id,required){
var fname = obj.value;
var fnameRegxp = /^([a-zA-Z0-9 \,\.]{100,225})$/;

	var stat = commonCheck(obj, id, required);
	if (stat != proceed)
	return stat;

	var tfld = trim(fname);
	if (!fnameRegxp.test(tfld)){
	msg (id, "warn", '100 to 225 Alphanumeric characters, commas and fullstop only');
	setfocus(obj);
	return false;
    }
    else
    {msg (id, "warn", "");return true;}

}

function validPwd(obj,id,required){
var fname = obj.value;
var fnameRegxp = /^([a-zA-Z0-9]{6,20})$/;

	var stat = commonCheck(obj, id, required);
	if (stat != proceed)
	return stat;

	var tfld = trim(fname);
	if (!fnameRegxp.test(tfld)){
	msg (id, "warn", 'Password must be 6 -20 alphanumeric characters only');
	setfocus(obj);
	return false;
    }
    else
    {msg (id, "warn", "");return true;}

}


function validCaptchaNum(obj,id,required){
var fname = obj.value;
var fnameRegxp = /^([0-9]{5,5})$/;

	var stat = commonCheck(obj, id, required);
	if (stat != proceed)
	return stat;

	var tfld = trim(fname);
	if (!fnameRegxp.test(tfld)){
	msg (id, "warn", 'Must be 5 digit number only');
	setfocus(obj);
	return false;
    }
    else
    {msg (id, "warn", "");return true;}

}




function comparePwd(obj,id,required){

	var stat = commonCheck(obj, id, required);
	if (stat != proceed)
	return stat;

	validPwd(obj,id,required);
	
	if(document.form.Password2.value!=document.form.Password.value){
		msg (id, "warn", 'The passwords you entered do not match, please enter again');
		setfocus(obj);
		return false;
	}
	else
    {msg (id, "warn", "");return true;}
}


function validPhoto(obj,id,required){

	var stat = commonCheck(obj, id, required);
	if (stat != proceed)
	return stat;

		var fname = obj.value;
    
    	var iExt=fname.indexOf("\\");
    	var iDot=fname.indexOf(".");
    	
		if((iExt < 0 ) || (iDot < 0)){
			msg (id, "warn", 'Invalid File Path for Upload!');
			setfocus(obj);
			return false;
		}
		else{

			if(iDot > 0){
				var afname=fname.split(".");
				if(afname[afname.length-1].toLowerCase()!="jpg"){            
					msg (id, "warn", 'Only *.jpg Files Are Allowed!');
					setfocus(obj);
					return false; 
				}
				else
				{msg (id, "warn", "");return true;}
			}

		}
   
}

function validateOnSubmit(purpose) {

	if(purpose==1) {

		var elem;
		var errs=0;
		// execute all element validations in reverse order, so focus gets
		// set to the first one in error.
		if (!validCaptchaNum   (document.form.userdigit,	'capchaNum',	true)) errs += 1;
		if (!validEmail  (document.form.Email,		'mail', 	true)) errs += 1;
		if (!validTel    (document.form.ContactNo,	'Mobile', 	true)) errs += 1;

		if (errs>1)
		{
		 alert('There are fields which need correction before sending');
		 return (errs==0);
		}
		if (errs==1)
		{
		 alert('There is a field which needs correction before sending');
		 return (errs==0);
		}	

	}
	else
	{
		var elem;
		var errs=0;
		// execute all element validations in reverse order, so focus gets
		// set to the first one in error.
		if (!validCaptchaNum   (document.form.userdigit,	'capchaNum',	true)) errs += 1;
		if (!comparePwd  (document.form.Password2,	'Passwd2', 	true)) errs += 1;
		if (!validPwd    (document.form.Password,	'Passwd',	true)) errs += 1;
		if (!validEmail  (document.form.Email,		'mail', 	true)) errs += 1;
		if (!validTel    (document.form.ContactNo,	'Mobile', 	true)) errs += 1;
		if (!validName   (document.form.SurName,		'Sname', 'Please enter your Surname again',true))  errs += 1;
		if (!validName   (document.form.OtherName,	'name', 'Please enter your name again',true))   errs += 1;

		if (errs>1)
		{
		 alert('There are fields which need correction before sending');
		 return (errs==0);
		}
		if (errs==1)
		{
		 alert('There is a field which needs correction before sending');
		 return (errs==0);
		}
	}

}

