var bValid = 1;
var vCntrlRef = "";

function lr_trim()
{
	return this.replace(/^\s+/,'').replace(/\s+$/,'');
}
String.prototype.trim = lr_trim;

function chkSplCharacters(cntrl)
{
	var splChars = "~!@$%^*()+=[]\;{}|\":?";
    for (var i = 0; i < cntrl.value.length; i++)
    {
		if (splChars.indexOf(cntrl.value.charAt(i)) != -1)
		{
			alert ("Following special characters are not allowed.\n\n" + splChars);
			cntrl.select();
            bValid = 0;
            break;
        }
	}
}

function chkSplFormat(cntrl,format)
{
	switch(format)
	{
		case 'a':
			var testVal = cntrl.value;
			var validChars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ- ";
			for(i=0;i < testVal.length;i++)
				if(validChars.indexOf(testVal.charAt(i)) == -1)
				{
					alert("Please enter a valid alpha numeric value for " + vCntrlRef);
					cntrl.select();
					bValid = 0;
					break;
				}
			break;
		case 'e':
			var addr = cntrl.value;
			if (!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(addr))
			{
				alert("Invalid E-mail Address! Please re-enter.");
				cntrl.select();
				bValid = 0;
			}
			break;
		case 'p':
			var phoneFax = cntrl.value;
			var validChars = ", +-0123456789";
			for(i=0;i < phoneFax.length;i++)
				if(validChars.indexOf(phoneFax.charAt(i)) == -1)
				{
					alert("Please enter a valid " + vCntrlRef);
					cntrl.select();
					bValid = 0;
					break;
				}
			break;
		case 'n' :
			val = cntrl.value;
			if(parseFloat(val,10) != (val*1))
			{
				alert("Please enter only numeric value for " + vCntrlRef);
				cntrl.select();
				bValid = 0;
			}
			break;
		case '#' :
			chkSplFormat(cntrl,'n');
			val = cntrl.value;
			if(format == '#' && val <= 0)
			{
				alert("Zero (0) / negative value is not allowed for " + vCntrlRef);
				cntrl.select();
				bValid = 0;
			}
			break;
		case 'u':
			var splChars = "~!@#$%^&*()-+=[]\\\;,.<>/{}|\":?' ";
			for (var i = 0; i < cntrl.value.length; i++)
			{
				if (splChars.indexOf(cntrl.value.charAt(i)) != -1)
				{
					alert ("None of the special characters / blank spaces are allowed for " + vCntrlRef);
					cntrl.select();
			        bValid = 0;
			        break;
			    }
			}		
	}
}

function validate_form(frm)
{
	var aElements = frm.elements;
	var iArgsPosition = -1;
	var aIdArgs = new Array(2);
	var aArgValue = new Array(3);
	bValid = 1;
	vCntrlRef = "";
	for(var i=0;i < aElements.length;i++)
	{
		vIdArgs = aElements[i].id.split("@");
		if(vIdArgs.length > 1 && !aElements[i].disabled)
		{
			vCntrlRef = vIdArgs[0];
			for(var j = 0;j < vIdArgs[1].length;j++)
				aArgValue[j] =vIdArgs[1].charAt(j);
		
			if(aElements[i].type=="text" || aElements[i].type=="textarea" || aElements[i].type=="password")
			{
				if(aElements[i].type != "password")
					aElements[i].value = aElements[i].value.trim();

				if(aElements[i].value.length > 0)
				{
					if(aArgValue[0] != 'x')
						chkSplFormat(aElements[i],aArgValue[0]);
					else if(parseInt(aArgValue[2]))
						chkSplCharacters(aElements[i]);
				}
				else if(parseInt(aArgValue[1])) // If it is a mandatory field
				{
					alert(vCntrlRef + " cannot be left blank");
					aElements[i].focus();
					bValid = 0;
				}
				if(aElements[i].type=="textarea" && aElements[i].maxlength != null && bValid==1)
					if(aElements[i].value.length > aElements[i].maxlength)
					{
						alert(vCntrlRef + " should not exceed the maximum length of " + aElements[i].maxlength + " characters");
						aElements[i].focus();
						bValid = 0;
					}
			}
			if(aElements[i].type == "select") // If it is a combox box
				if(aElements[i][aElements[i].selectedIndex].value=="")
				{
					alert("Please select a " + aElements[i].id);
					cntrl.focus();
					bValid = 0;
				}
		}
		if(!bValid)
			return false;
	}
	return true;
}