
function ValidateFields(scvControlsId,scvMsg,scvType,BlackBoardId){
	/*alert(scvControlsId);
	alert(scvMsg);
	alert(scvType);
	alert(BlackBoardId);*/
	vControlsId=scvControlsId.split(',');
	var vMsg=scvMsg.split(",");
	var vType=scvType.split(",");
	var sMsg="";
	idFocus="";
	
	for (j=0;j<vControlsId.length;j++)
	{
		//alert(vControlsId[j]+"--"+vType[j]);
		if(!ValidateField(vControlsId[j],vType[j])){
			if ((vMsg[j]==null) ||(vMsg[j]=="")) sMsgAux=GetDefaultMsg(vType[j]);
			else sMsgAux=vMsg[j];
			if(sMsg=="")	sMsg+=sMsgAux;
			else	sMsg+=","+sMsgAux ;
			if (idFocus=="") idFocus=vControlsId[j];			
		}
	}
	if (sMsg=="") return true;
	else{
		if ((BlackBoardId==null)||(BlackBoardId=="")){
			sMsg=replaceSubstring(sMsg,',','\n\r');
			//alert("The following fields are required or invalid:\n\r"+sMsg);
			ShowAlert("The following fields are required or invalid:\n\r"+sMsg);
		}
		else{
			//sMsg=replaceSubstring(sMsg,',','<br>');
			sMsg="<table cellspacing=0 cellpadding=1 border=0 class=resalted ><tr><td>"+sMsg;
			sMsg=replaceSubstring(sMsg,',','</td></tr><tr><td>');
			sMsg=sMsg+"</td></tr></table>";
			var objBlackBoard=document.getElementById(BlackBoardId);
			if (objBlackBoard.innerHTML.length==0)objBlackBoard.innerHTML+=sMsg+'';		
			else objBlackBoard.innerHTML+="<br>"+sMsg+'';		
		}
		if(document.getElementById(idFocus).type!="select-one")	document.getElementById(idFocus).focus();
		//document.getElementById(idFocus).select();
		return false;		
	}
}



/******************** GENERAL FUNCTION **********************/
function ValidateField(sId,sType)
{
	//alert("ValidateField("+sId+","+sType+")");
	if(sType==null) sType="txt";
	sType=sType.toLowerCase();
	var obj=document.getElementById(sId);
	switch (sType)
	{
		case "txt":
			return ValidatorTxt(obj);
			break;
		case "date":
			return ValidatorDate(obj);
			break;
		case "date-mm-yy":
			return ValidatorDate_MM_YY(obj);
			break;
		case "float":
			return ValidatorFloat(obj);
			break;
		case "int":
			return ValidatorInt(obj);
			break;
		case "email":
			return ValidatorEmail(obj);
			break;
		case "url":
			return ValidatorUrl(obj,document.getElementById('hdRegExp'));
			break;		
		case "fax":
			return ValidatorFax(obj);
			break;
		case "password":
			return ValidatorPassword(obj);
			break;
		case "ddl":
			return ValidatorDdl(obj);
			break;
		case "image":
			return ValidatorImage(obj);
			break;
		case "pdf":
			return ValidatorPDF(obj);
			break;	
		case "creditcardnumber":
			return ValidatorCreditCardNumber(obj);
			break;
		case "natural":
			return ValidatorNatural(obj);
			break;			
		default:
			return ValidatorTxt(obj);
			break;
	}
}

/*****  GetDefaultMsg ****************/

function GetDefaultMsg(sType){
	sType=sType.toLowerCase();
	switch (sType)
	{
		case "txt":
			return "* Invalid Text";
			break;
		case "date":
			return "* Invalid Date";
			break;
		case "float":
			return "* Invalid float number";
			break;
		case "email":
			return "* Invalid email";
			break;
		case "url":
			return "* Invalid URL";
			break;			
		case "fax":
			return "* Invalid fax";
			break;
		case "password":
			return "* Invalid password";
			break;
		case "ddl":
			return "* Select ";
			break;
	}
	
}


function replaceSubstring(inputString, fromString, toString) {
   // Goes through the inputString and replaces every occurrence of fromString with toString
   var temp = inputString;
   if (fromString == "") {
      return inputString;
   }
   if (toString.indexOf(fromString) == -1) {
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } else { 
      var midStrings = new Array("~", "`", "_", "^", "#");
      var midStringLen = 1;
      var midString = "";
      while (midString == "") {
         for (var i=0; i < midStrings.length; i++) {
            var tempMidString = "";
            for (var j=0; j < midStringLen; j++) { tempMidString += midStrings[i]; }
            if (fromString.indexOf(tempMidString) == -1) {
               midString = tempMidString;
               i = midStrings.length + 1;
            }
         }
      }
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + midString + toTheRight;
      }
      while (temp.indexOf(midString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(midString));
         var toTheRight = temp.substring(temp.indexOf(midString)+midString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   }
   return temp;
} 

function Trim(str){return str.replace(/^\s*|\s*$/g,"");}
/******************** VALIDATE TXT FUNCTIONS **********************/


function ValidatorTxt(obj)
{
	var value=Trim(obj.value);
	if(value=="")return false;
	else return true;
}


/******************** VALIDATE DATE FUNCTIONS **********************/

function ValidatorDate_MM_YY(obj)
{ 
    var bOk = true; 
    var value = obj.value;
    //alert(value);
    if (value != null)
    { 
		//alert("1");
		bOk = bOk && (ValidateYear(obj)); 
		//alert("2");
		bOk = bOk && (ValidateMonth(obj)); 
		//alert("3");
		bOk = bOk && (ValidateSeparator_MM_YY(obj)); 
		//alert("4");
		if (!bOk) return false; 
		else return true; 
    }return  true; 
} 


function ValidatorDate(obj)
{ 
    var bOk = true; 
    var value = obj.value;
    //alert(value);
    if (value != null)
    { 
		//alert("1");
		bOk = bOk && (ValidateYear(obj)); 
		//alert("2");
		bOk = bOk && (ValidateMonth(obj)); 
		//alert("3");
		bOk = bOk && (ValidateDay(obj)); 
		//alert("4");
		bOk = bOk && (ValidateSeparator(obj)); 
		//alert("5");
		if (!bOk) return false; 
		else return true; 
    }return  true; 
} 

function ValidateDay(oTxt)
{ 
    var bOk = false; 
    var nDay = parseInt(oTxt.value.split('/')[1],10); 
    //alert("31");
   // var nDay = parseInt(oTxt.value.substr(3, 2), 10); 
    bOk = bOk || ((nDay >= 1) && (nDay <= EndMonth(oTxt))); 
    //alert("32");
    return bOk; 
} 

function EndMonth(oTxt)
{ 
	var nYear = parseInt(oTxt.value.split('/')[2],10); 
    var nMonth = parseInt(oTxt.value.split('/')[0],10); 
    var nDay = parseInt(oTxt.value.split('/')[1],10); 
    var nRes = 0; 
    switch (nMonth){ 
     case 1: nRes = 31; break; 
     case 2: nRes = 28; break; 
     case 3: nRes = 31; break; 
     case 4: nRes = 30; break; 
     case 5: nRes = 31; break; 
     case 6: nRes = 30; break; 
     case 7: nRes = 31; break; 
     case 8: nRes = 31; break; 
     case 9: nRes = 30; break; 
     case 10: nRes = 31; break; 
     case 11: nRes = 30; break; 
     case 12: nRes = 31; break; 
    } 
    return nRes + (((nMonth == 2) && (nYear % 4) == 0)? 1: 0); 
} 

function ValidateMonth(oTxt)
{ 
    var bOk = false; 
    var nMonth = parseInt(oTxt.value.split('/')[0],10); 
    bOk = bOk || ((nMonth >= 1) && (nMonth <= 12)); 
    return bOk; 
} 

function ValidateYear(oTxt)
{ 
	var bOk = false; 
	
	var vDate=oTxt.value.split('/');
	var sYear=vDate[vDate.length-1];
    var nYear = parseInt(sYear,10); 
    if(!isNaN(nYear)){
		if (((sYear.length==2)&&(nYear>-1) &&(nYear<100))||((nYear>1900) &&(nYear<2500))) bOk=true;
	}
    return bOk; 
}

function isDigit(sChr)
{ 
	var sCod = sChr.charCodeAt(0); 
    return ((sCod > 47) && (sCod < 58)); 
} 

function ValidateSeparator(oTxt)
{ 
    var bOk = false; 
    var sMonth = oTxt.value.split('/')[0]+""; 
    var sDay = oTxt.value.split('/')[1]+""; 
	var nIndexSep = sMonth.length +sDay.length +1
    var sep1 = oTxt.value.charAt(sMonth.length); 
    var sep2 = oTxt.value.charAt(nIndexSep); 
    bOk = bOk || ((sep1 == "/") && (sep2 == "/")); 
    return bOk; 
} 

function ValidateSeparator_MM_YY(oTxt)
{ 
    var bOk = false; 
    var sMonth = oTxt.value.split('/')[0]+""; 
    var sep1 = oTxt.value.charAt(sMonth.length); 
    bOk = bOk || (sep1 == "/"); 
    return bOk; 
} 

/********************END VALIDATE DATE FUNCTIONS **********************/

/******************** VALIDATE INT FUNCTIONS **********************/

function ValidatorInt(obj)
{
	var Frm=/^\d{1,8}$/;
	if(!Frm.test(obj.value))return false;
	else return true;

}

function ValidatorFloat(obj)
{
	var Frm=/^((\d+(\.\d*)?)|((\d*\.)?\d+))$/;
	if(!Frm.test(obj.value))return false;
	else return true;
}

/******************** VALIDATE INT FUNCTIONS **********************/


/******************** VALIDATE FAX FUNCTIONS***************/
function ValidatorFax(obj)
{
	var Frm=/^\d{1,10}$/;
	if(!Frm.test(obj.value))return false;
	else return true;
}
/******************** END VALIDATE FAX FUNCTIONS***************/

/******************** VALIDATE EMAIL FUNCTIONS **********************/

function ValidatorEmail(obj)
{ 
	if(obj.value=="")	return false;
	if(!obj.value.length||obj.disabled) return true; // blank fields are the domain of requireValue 
	
    var phony= /@(\w+\.)*example\.(com|net|org)$/i;
    if(phony.test(obj.value))	return false; 
    
    var emailfmt= /^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,8}$/;
    if(!emailfmt.test(obj.value))	return false;
	return true;
}

/********************END VALIDATE EMAIL FUNCTIONS **********************/

/******************** VALIDATE URL FUNCTIONS **********************/

function ValidatorUrl(obj,objRegExp)
{ 
	if(obj.value=="")	return true;
	var re = new RegExp(objRegExp.value);//objRegExp.Value
	var result = obj.value.match(re);//re.exec(obj.value)
	if(result==null) return false;
	else return true;
}

/********************END VALIDATE URL FUNCTIONS **********************/


/***************VALIDATE DDL FUNCTIONS**********/
function ValidatorDdl(obj)
{
	var value=obj.value;
	if ((value==-1) || (value==0)) return false;
	else return true;
}

/******************/

/******************** VALIDATE Password FUNCTIONS **********************/
function ValidatorPassword(obj)
{
	var sPasswordFrm=/^([a-z]|[A-Z]|\d){8,100}$/;
	if(!sPasswordFrm.test(obj.value)) return false;
	else return true;
}
/********************END VALIDATE Password FUNCTIONS **********************/


/*********** VALIDATE CONFIRM PASSWORD FUNCTIONS*********************/
function ConfirmPwd(sId1,sId2,sMsg,BlackBoardId)
{
	var obj =document.getElementById(sId1);
	var Password = document.getElementById(sId1).value;
	var ConfirmPassword =document.getElementById(sId2).value;
	if(Password==""||ConfirmPassword=="")
	{
		sMsg="* 'Password' and 'Confirm Password' are required";
		if (BlackBoardId==null)ShowAlert(sMsg);
		else{
			var objBlackBoard=document.getElementById(BlackBoardId);
			if (objBlackBoard.innerHTML.length==0)objBlackBoard.innerHTML+=sMsg;
			else objBlackBoard.innerHTML+="<br>"+sMsg;
		}
		obj.focus();
		obj.select();
		return false;
	}
	if(Password==ConfirmPassword)return true;
	else
	{
		if (sMsg=="")sMsg="'Password' and 'Confirm Password' are distinct";
		if (BlackBoardId==null)ShowAlert(sMsg);
		else{
			var objBlackBoard=document.getElementById(BlackBoardId);
			if (objBlackBoard.innerHTML.length==0)objBlackBoard.innerHTML+=sMsg;
			else objBlackBoard.innerHTML+="<br>"+sMsg;
		}
		obj.focus();
		obj.select();
		return false;
	}
}
/*********** VALIDATE CONFIRM PASSWORD FUNCTIONS*********************/

/*********** VALIDATE EXTENTION*********************/

function ValidatorPDF(obj){
	if(ValidateExt(obj,"pdf")
		) return true;
	else return false;
}


function ValidatorImage(obj){
	if(ValidateExt(obj,"jpg")
		//||ValidateExt(obj,"bmp")
		||ValidateExt(obj,"gif")
		) return true;
	else return false;
}


function ValidateExt(obj,sValidateExts){
	var sFile=obj.value;
	var len=sFile.length;
	var sExt=sFile.substring(len-3,len).toUpperCase();
	vValidateExt=sValidateExts.split(',');
	for(i=0;i<vValidateExt.length;i++){
		sValidateExt=vValidateExt[i].toUpperCase();
		if(sExt==sValidateExt)	return true;
	}
	obj.focus();
	return false;		
}	

function ValidatorRangeDate(DateFromId,DateToId,BlackBoardId){
	var sDateFrom=document.getElementById(DateFromId).value
	var sDateTo=document.getElementById(DateToId).value
	var vDateFrom=sDateFrom.split('/');
	var vDateTo=sDateTo.split('/');
	var nYearFrom=parseInt(vDateFrom[2],10);
	var nMonthFrom=parseInt(vDateFrom[0],10);
	var nDayFrom=parseInt(vDateFrom[1],10);
	
	var nYearTo=parseInt(vDateTo[2],10);
	var nMonthTo=parseInt(vDateTo[0],10);
	var nDayTo=parseInt(vDateTo[1],10);
	var bOk=true;
	if ((nYearFrom==1900) ||(nYearTo==1900)) bOk=false;
	if(!bOk||(nYearFrom>nYearTo)){	
		bOk=false;
	}
	else if(nYearFrom==nYearTo && nMonthFrom>nMonthTo){
		bOk=false;
	}
	else if(nYearFrom==nYearTo && nMonthFrom==nMonthTo && nDayFrom>nDayTo){
		bOk=false;
	}
	if( !bOk && (BlackBoardId!=null)){
		document.getElementById(BlackBoardId).innerHTML="<table cellspacing=0 cellpadding=0 border=0 class=resalted><tr><td width=5></td><td valign=top>*</td><td> Invalid Date Range</td></tr></table>";
	}
	return bOk;
	
}
/***********END VALIDATE EXT*********************/
		
		
		
function ValidatorCreditCardNumber(obj) {
	// Verifica que el número de la tarjeta de crédito/débito tiene un formato válido
	var ccRE=/\W/gi;
	var CCnumber=obj.value.replace(ccRE, "");
	if (isNaN(CCnumber)) {	return false;}
	if ((CCnumber.length!=16) && (CCnumber.length!=18)) 
	{
		return false;
	}
	var cardMath=0;
	for (i=CCnumber.length; i>0; i--) 
	{
		if (i % 2 == 1) 
		{
			var doubled = "" + (parseInt(CCnumber.substring(i - 1, i)) * 2);
			if (doubled.length==2) {doubled = parseInt(doubled.substring(0,1)) + parseInt(doubled.substring(1,2))}
			cardMath += parseInt(doubled);
		}
		else {cardMath += parseInt(CCnumber.substring(i - 1, i))}
	}
	if (cardMath % 10 != 0) {return false;}
	return true;
}

function DelLeftZero(sNatural)
{
	var vNatural=sNatural.split("");
	sReturn="";
	for (var i=0;i<vNatural.length;i++){
		sReturn+=(vNatural[i]!="0")?vNatural[i]:"";
	}
	return sReturn;
}

function ValidatorNatural(obj)
{
	if(ValidatorInt(obj)){
		var sValue=DelLeftZero(obj.value);
		var iNatural=parseInt(sValue);
		if(iNatural>0) return true;
		else return false;
	}
	else return false;

}
