// Important Validation Types	REQ, ISNUM, ISDESI, ISEMAIL, ISRANGE 	
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Limitations of the Validation code is that we can only use this code in Single driven form per page.
///////////////////////////////////////////////////////////////////////////////////////////////////////

var arr = new Array();
var valarr = new Array();
var isFalse = 0;
var radioCheck = false;
var chekbobChek = false;
var fs = null;
function checkValidate(formindex)
{
	var curEle = "";
	for(var i=0;i<document.forms[formindex].elements.length;i++)
	{
		curEle = document.forms[formindex].elements[i];

		if(curEle.getAttribute("SanObj")!=null)
		{
			arr.push(i);
			var pNode = curEle.parentNode;
			pNode.innerHTML+="<span id=\"aValidate"+i+"\" class=\"ColorRedHide\"><span class=\"shImage\">&nbsp;</span><span id=\"aValidateText"+i+"\" class=\"shText\">&nbsp;</span></span>";
		}
	}
	checkEleType(formindex);
	document.forms[formindex].onsubmit = function (){ return autoValidate(formindex);	}	
}

function checkEleType(formindex)
{
	var n = -1;
	for(var i=0;i<(arr.length);i++)
	{
		var j = arr[i];
		var curEle =document.forms[formindex].elements[j];
		if((curEle.type=='radio')||(curEle.type=='checkbox'))
		{
			n++;
			valarr[n] = j;
			var itemname = curEle.name;
			valarr[n] = new Array();
			var chkEle = "";
			var rc = 0;
			for(var k=0;k<document.forms[formindex].elements.length;k++)
			{
				chkEle = document.forms[formindex].elements[k];
				
				if(((chkEle.type=="radio")||(chkEle.type=='checkbox'))&&(chkEle.name==itemname))
				{
					valarr[n][rc] =k;
					rc++;
				}				
			}
		}
	}
}
function resetErrorControls()
{
	for(var i=0;i<(arr.length);i++)
	{
		if(document.getElementById('aValidate'+arr[i])!=null)
		{
			document.getElementById('aValidate'+arr[i]).className = 'ColorRedHide';
		}
	}
}
function autoValidate(formindex)
{
	isFalse = 0;
	var n = -1;
	fs = null;
	if(arr.length>0)
	{
		resetErrorControls();
		
		for(var i=0;i<(arr.length);i++)
		{
			var j = arr[i];
			var type =document.forms[formindex].elements[j].type;
			if(type=="radio" || type=="checkbox")
			{			
				n++;
				radioCheckSelect(formindex,n,j);	
			}
			else
			{
				if(type=="text" || type=="select-one" || type=="textarea" || type=="password")
				{
					checkText(formindex,j);
				}
			}
		}
		if(isFalse>0)
		{
			document.forms[formindex].elements[fs].focus();
			return false;
		}
	}
}
function radioCheckSelect(formindex, ei, aei)
{	
	if(valarr[ei].length>0)
	{ 
		var t=0;
		var ctrlType = "";
		var erTxt = "Required";
		if(valarr[ei].length>1){	erTxt = "Select atleast One";	}		
		for(var m=0; m<valarr[ei].length;m++)
		{
			var eele = valarr[ei][m];
			if(m==0){
				ctrlType =document.forms[formindex].elements[eele].type; 	
			}
			if(document.forms[formindex].elements[eele].checked==true)
			{	t++;	}
		}
		if(t==0)
		{
			var errControl = document.getElementById('aValidate'+aei);
			var errControlTxt = document.getElementById('aValidateText'+aei);
			if(ctrlType=='radio')
				errControlTxt.innerHTML = erTxt;
			else
				errControlTxt.innerHTML = erTxt;
				
			errControl.className = 'ColorRed';
			if(fs == null){	fs = eele;	}
			isFalse++;	
		}
	}
}
function errorEvaluate(formindex, eleindex, ertype)
{
	var email = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	var numcheck = /^([0-9]+)$/;
	var telcheck = /^([0-9\.\+\ ]*)$/;
	var decicheck = /^([0-9]*\.[0-9]+|[0-9]+)$/;
	var eid = document.forms[formindex].elements[eleindex];
	var errControlTxt = document.getElementById('aValidateText'+eleindex);
	var errControl = document.getElementById('aValidate'+eleindex);
	var mele = null;
	var rv = 0;
	var ll = 0;
	var ul = 0;
	var rValue =0; 
	if((ertype.indexOf("ISRANGE")> -1)||(ertype.indexOf("ISTEL")> -1))
	{
		var etypeArr = ertype.split("/");
		ertype = etypeArr[0];
		ll =  etypeArr[1];
		ul =  etypeArr[2];
	}
	if(ertype.indexOf("MATCH")> -1)
	{
		var etypeArr = ertype.split("/");
		ertype = etypeArr[0];
		mele =  document.getElementById(etypeArr[1]);
	}
	switch(ertype)
	{
		case 'MATCH' :
			if(eid.value!=mele.value){
				errControlTxt.innerHTML = "Does Not Match.";
				errControl.className = 'ColorRed';
				if(fs == null){	fs = eleindex;	}
				isFalse++;
				rv++;
			}
		case 'REQ' :
			if(eid.type=="select-one"){
				if(eid.selectedIndex==0){
					errControlTxt.innerHTML = "Required";
					errControl.className = 'ColorRed';
					if(fs == null){	fs = eleindex;	}
					isFalse++;
					rv++;
				}
			}else if(eid.value=="")
			{
				errControlTxt.innerHTML = "Required";
				errControl.className = 'ColorRed';
				if(fs == null){	fs = eleindex;	}
				isFalse++;
				rv++;
			}
			break;
		case 'ISNUM' :
		    if(eid.value!=""){
			    if(!eid.value.match(numcheck))
			    {
				    errControlTxt.innerHTML = "Enter Numeric";
				    errControl.className = 'ColorRed';
				    if(fs == null){	fs = eleindex;	}
				    isFalse++;
				    rv++;
			    }
			}
			break;
		case 'ISTEL' :
		    if(eid.value!=""){
			    if(!eid.value.match(telcheck))
			    {
				    errControlTxt.innerHTML = "Invalid Telephone";
				    errControl.className = 'ColorRed';
				    if(fs == null){	fs = eleindex;	}
				    isFalse++;
				    rv++;
			    }else{
					var rVal = eid.value;
					rVal = rVal.replace(" ", "");
					rVal = rVal.replace("+", "");
					rVal = rVal.replace(".", "");
					rValue = rVal.length;
					if(ll==ul)
					{
						if(rValue!=ll)
						{
							errControlTxt.innerHTML = ll+" digits Only";
							errControl.className = 'ColorRed';
							if(fs == null){	fs = eleindex;	}
							isFalse++;
							rv++;
						}
					}
					else
					{
						if((rValue<ll)||(rValue>ul)){
							errControlTxt.innerHTML = ll+" to "+ul+" digits Only";
							errControl.className = 'ColorRed';
							if(fs == null){	fs = eleindex;	}
							isFalse++;
							rv++;
						}
					}
				}
			}
			break;
		case 'ISRANGE' :
			rValue = eid.value.length;
			if(rValue>0){
			    if(ll==ul)
			    {
				    if(rValue!=ll)
				    {
					    errControlTxt.innerHTML = ll+" digits Only";
					    errControl.className = 'ColorRed';
					    if(fs == null){	fs = eleindex;	}
					    isFalse++;
					    rv++;
				    }
			    }
			    else
			    {
				    if((rValue<ll)||(rValue>ul)){
					    errControlTxt.innerHTML = ll+" to "+ul+" digits Only";
					    errControl.className = 'ColorRed';
					    if(fs == null){	fs = eleindex;	}
					    isFalse++;
					    rv++;
				    }
			    }
			}
			break;
		case 'ISDESI' :
		    if(eid.value!=""){
			    if(!eid.value.match(decicheck))
			    {
				    errControlTxt.innerHTML = "Invalid (e.g. '0.0')";
				    errControl.className = 'ColorRed';
				    if(fs == null){	fs = eleindex;	}
				    isFalse++;
				    rv++;
			    }
			}
			break;
		case 'ISEMAIL' :
		    if(eid.value!=""){
			    if(!eid.value.match(email))
			    {
				    errControlTxt.innerHTML = "Invalid email";
				    errControl.className = 'ColorRed';
				    if(fs == null){	fs = eleindex;	}
				    isFalse++;
				    rv++;
			    }
			}
			break;
		case 'SPECIAL' :
		    if(eid.value!=""){
		        var result = true;
		        var string = eid.value;
		        var iChars = "<>%";
                for (var i = 0; i < string.length; i++) {
                    if (iChars.indexOf(string.charAt(i)) != -1)
                        result = false;
                }
                if (result == false)
                {
                    errControlTxt.innerHTML = "Invalid character";
				    errControl.className = 'ColorRed';
				    if(fs == null){	fs = eleindex;	}
				    isFalse++;
				    rv++;
                }
			}
			break;		
	}
	return rv;
}

function checkText(formindex,eleindex)
{
	//alert(formindex + '   '+ eleindex+ ' ' + document.forms[formindex].elements.length);
	var validtypeArr = document.forms[formindex].elements[eleindex].getAttribute("SanObj");
	if(validtypeArr!=null){
		var eid = document.forms[formindex].elements[eleindex].id;
		var validtype = Array();
		validtype = validtypeArr.split('#');
		var retValid =	0;
		validtype.push("SPECIAL");
		for(q=0; q<validtype.length;q++)
		{
			if(retValid==0)
				retValid = errorEvaluate(formindex, eleindex, validtype[q]);
		}
	}
}
