﻿// JScript File

var __dtCh_FV= '-';
var __minYear_FV=1900;
var __maxYear_FV=3000;


function __stripCharsInBag_FV(s, bag){
	var i;
    var returnString = '';
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function __daysInFebruary_FV (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function __DaysArray_FV(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31;
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30;}
		if (i==2) {this[i] = 29;}
   } 
   return this;
}



function __IsDate_FV(dtStr)
{
    var exp = '^([0-9]{2}[-]){2}[0-9]{4}$'; //Formato de fecha
    var retval=true;
	var re = new RegExp(exp);
	var daysInMonth = __DaysArray_FV(12);
	var pos1=dtStr.indexOf(__dtCh_FV);
	var pos2=dtStr.indexOf(__dtCh_FV,pos1+1);
	var strDay=dtStr.substring(0,pos1);
	var strMonth=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	strYr=strYear;
	if (strDay.charAt(0)=='0' && strDay.length>1) strDay=strDay.substring(1);
	if (strMonth.charAt(0)=='0' && strMonth.length>1) strMonth=strMonth.substring(1);
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=='0' && strYr.length>1) strYr=strYr.substring(1);
	}
	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);
	if (pos1==-1 || pos2==-1)
		retval= false;
	if (strMonth.length<1 || month<1 || month>12)
		retval= false;
	
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>__daysInFebruary_FV(year)) || day > daysInMonth[month])
		retval= false;

	if (strYear.length != 4 || year==0 || year<__minYear_FV || year>__maxYear_FV)
		return false;
	if(!dtStr.match(re))
	    retval=false;
	return retval;
}

function __IsInt_FV(num)
{
  var exp = '^[-]?([0-9]+[.]?)*[0-9]$'; //Numero positivo o negativo signo -
	var re = new RegExp(exp);
	return num.match(re);
}

function __IsNumeric_FV(num)
{

    return __isDecimalExp_FV(num);
}

function __isDecimalExp_FV(num)
{
	var exp = '^[-]?([0-9]+[.]?)*[0-9]([,][0-9])?$'; //Numero positivo o negativo signo -
	//var exp2='^[-]?([0-9]+[.]?)*[0-9]([,][0-9])?[%]$'; //Porcentaje positivo o negativo signo -
	var re = new RegExp(exp);
	//var re2= new RegExp(exp2);
	//return num.match(re)||num.match(re2);
	return num.match(re);
}


function __ValidarForm_FV(fn)
{
    form=document.forms[0]
    messages= new Array()
    for(i=0;i<form.length;i++)
    {
        if(form[i].getAttribute('FV:FrmValidator')==1)
        {
           it=form[i];
           
           required=it.getAttribute('FV:Required')=='true'
           entra=required || (!required && it.value.length>0)
           if(entra)
           {
            type=it.getAttribute('FV:DataType').toUpperCase()
            message=it.getAttribute('FV:Message')?it.getAttribute('FV:Message'):"";
            regexp=it.getAttribute('FV:RegExp')?it.getAttribute('FV:RegExp'):"";
            if(regexp.length==0)
                switch (type)
                {
                    case 'STRING':
                        size=0
                        if(!isNaN(it.getAttribute('FV:StringSize')))
                            size=parseInt(it.getAttribute('FV:StringSize'));
                        if(it.value.length==0 ||(size>0 && it.value.length>size))
                        {
                            len=messages.length;
                            if(message.length>0)
                                messages[len]=message;
                            else
                                messages[len]=('Formato para ' +it.name + ' incorrecto'); 
                         }      
                        break;
                    case 'NUMBER':
                        if(!__IsNumeric_FV(it.value))
                        {
                            len=messages.length;
                            if(message.length>0)
                                 messages[len]=message;
                            else
                                messages[len]=(it.name + ' no es un número');
                        }
                        break;
                    case 'DATE':
                       if(it.value.length==0 || !__IsDate_FV(it.value))
                        {
                            len=messages.length;
                            if(message.length>0)
                                messages[len]=message;
                            else
                                messages[len]=(it.name + ' no es un número');
                        }
                        break;
                    case 'DROPDOWNLIST':
                        if (it.selectedIndex == 0)
                        {
                            len=messages.length;
                            if(message.length>0)
                                messages[len]=message;
                            else
                                messages[len]=('Formato para ' +it.name + ' incorrecto'); 
                        }
                }
             else
                __ValidateRegExp_FV(it,messages); 
           }
        }
    }
    if(messages.length==0)
    {
      if(typeof(eval(fn))=='function')
      {
        return eval(fn+'();');
        return false;
      }
      else
        return true;
    }
    else
    {
        mes='';
        for(i=0;i<messages.length;i++)
            mes+="- "+messages[i] + '<br/>';
        
        mess=new msgBox(mes,"Error de validación.",1);
        mess.show();
        return false;
    }
}

function __ValidateRegExp_FV(obj,messages)
{
    regexp=new Array();
    regExp=new Array();
    regexp=obj.getAttribute('FV:RegExp').split("|@|");
    expr="";
    for(j=0;j<regexp.length;j++)
    {
        regExp[regExp.length]=new RegExp(regexp[j]);
    }
    for(j=0;j<regExp.length;j++)
    {
        val='obj.value.match(regExp['+j+'])'
        expr+=expr.length==0?val:'||'+val;
    }
    if(!eval(expr))
    {
        mess=obj.getAttribute('FV:Message')?it.getAttribute('FV:Message'):"";
        if(mess.length>0)
            messages[messages.length]=mess;
        else
            messages[messages.length]=('Formato para ' +obj.name + ' incorrecto'); 
    }
}