/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


var keyListenerArray = new Array();
var contadorKeyListenerArray=0;
var YUI = {};

YUI.VALIDATION = {
    init :  function (){

        YUI.VALIDATION.addValidators();

    },
    addValidators : function() {
        try{
        var elements = YAHOO.util.Dom.getElementsByClassName('microValidate');


        for(i=0;i<elements.length;i++){

            if(elements[i].nodeName == 'A'){
                /*Para tratar los A*/
                YAHOO.util.Event.addListener(elements[i], 'click', YUI.VALIDATION.validate);

            }
        }
         /*Agrego el escucha a todos los form*/
            var forms = document.getElementsByTagName('form');
            for(var i=0;i<forms.length;i++) {
                YAHOO.util.Event.addListener(forms[i], "submit", YUI.VALIDATION.validate);
            }
            }catch(e){alert();}
    },
    validate:function(event){
        var allegraValid=true;
        var allegraValidators=new Array('microRequired',
        'microOnlyNumber','microMail','microNotFirst','microDate','microUrl','microOnlyAlpha','microOnlyInteger','microEqual'); //agregar otros validadores
        var url='?';
        var elements ;
        if(this.nodeName == 'A'){
            /*Elementos ligados */
            elements = YAHOO.util.Dom.getElementsByClassName(this.getAttribute('name'));
        }else if(this.nodeName == 'FORM'){
            /*Elementos del form*/
            elements = getElementsForm(this);
        }

        for(z=0; z<allegraValidators.length;z++ ){
            var requireds = YAHOO.util.Selector.filter(elements, '[class*='+allegraValidators[z]+']');
            var url2='';
            if(requireds.length > 0){
                url2=validateFields(requireds,allegraValidators[z]);
                if(url2){url=url+url2;}
                else{allegraValid= false;YAHOO.util.Event.stopEvent(event);}
            }
        }
        return allegraValid;

    }

}

function getElementsForm(aform){
    var elements = new Array();
    for (var n=0; n < aform.elements.length; n++) {
        elements[n] = aform.elements[n];
    }
    return elements;
}
function validateFields(requireds,type){
    if(type == 'microRequired'){
        return validateRequireds(requireds);
    }else if(type == 'microOnlyNumber'){
        return validateNumbers(requireds);
    }
    else if(type == 'microMail'){
        return validateMail(requireds);
    }else if(type == 'microNotFirst'){
        //Solo se aplica a selects
        return validateNotFirst(requireds);
    }else if(type == 'microDate'){
        return validateDate(requireds);
    }else if(type == 'microUrl'){
        return validateUrl(requireds);
    }else if(type == 'microOnlyAlpha'){
        return validateAlpha(requireds);
    }else if(type == 'microOnlyInteger'){
        return microOnlyInteger(requireds);
    }else if(type == 'microEqual'){
        return microEqual(requireds);
    }


}


function microEqual(requireds){

 var valid=true;


 try{
    for(i=0; i<requireds.length -1 ;i++ ){

        if(requireds[i].value != requireds[i+1].value){
            valid = false;
            validateFalse('Los campos deben ser iguales',requireds[i]);
            validateFalse('Los campos deben ser iguales',requireds[i+1]);
        }
    }
}catch(e){alert(e);}
 return valid;
}
function microOnlyInteger(requireds){
     var valid=true;
    for(i=0; i<requireds.length ;i++ ){

            if(!isInteger(requireds[i].value)){
                valid = false;
                validateFalse('Debe ser URL',requireds[i]);
            }

    }
    return valid;
}

function validateAlpha(requireds){
    var valid=true;
    for(i=0; i<requireds.length ;i++ ){

            if(!isAlphabet(requireds[i].value)){
                valid = false;
                validateFalse('Debe ser URL',requireds[i]);
            }

    }
    return valid;
}
function validateUrl(requireds){

    var valid=true;
    for(i=0; i<requireds.length ;i++ ){

            if(!isURL(requireds[i].value)){
                valid = false;
                validateFalse('Debe ser URL',requireds[i]);
            }

    }
    return valid;
}
function validateDate(requireds){
    var valid=true;
    for(i=0; i<requireds.length ;i++ ){

            if(!isDate(requireds[i].value)){
                valid = false;
                validateFalse('Debe ser formato dd/MM/YYYY',requireds[i]);
            }

    }
    return valid;
}

function validateNotFirst(requireds){
    var valid=true;
    for(i=0; i<requireds.length ;i++ ){
        if(requireds[i].type =='select-one' || requireds[i].type =='select-multiple'){
            if( requireds[i].selectedIndex == 0){
                valid = false;
                validateFalse('Selecciona una opcion en '+requireds[i].getAttribute('name'), requireds[i]);
            }
        }
    }
    return valid;
}



function validateMail(requireds) {
    var valid=true;
    for(i=0; i<requireds.length ;i++ ){

        if (requireds[i].value=='' || !isMail(requireds[i].value)) {
            valid = false;
            validateFalse('Selecciona una opcion en '+requireds[i].getAttribute('name'), requireds[i]);
        }
    }
    return valid;
}

/* autor: http://www.smartwebby.com/DHTML/email_validation.asp */
function isMail(str) {
    var at='@'
    var dot='.'
    var lat=str.indexOf(at)
    var lstr=str.length
    var ldot=str.indexOf(dot)
    if (str.indexOf(at)==-1){
        return false
    }

    if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
        return false
    }

    if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
        return false
    }

    if (str.indexOf(at,(lat+1))!=-1){
        return false
    }

    if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
        return false
    }

    if (str.indexOf(dot,(lat+2))==-1){
        return false
    }

    if (str.indexOf(' ')!=-1){
        return false
    }

    return true
}


function validateNumbers(requireds){
    var valid=true;
    for(i=0; i<requireds.length ;i++ ){

        if (requireds[i].value=='' || !isNumeric(requireds[i].value)) {
            valid = false;
            validateFalse('Selecciona una opcion en '+requireds[i].getAttribute('name'), requireds[i]);
        }

    }
    return valid;
}

function validateRequireds(requireds){
    var valid=true;
    for(i=0; i<requireds.length ;i++ ){

        if(requireds[i].type =='checkbox'  ){
            if(!requireds[i].checked){
                valid = false;
                validateFalse('Completa ' + requireds[i].getAttribute('name') , requireds[i]);
            }
        }
        else{
            if(requireds[i].value == '' || requireds[i].value == null){
                valid = false;
                validateFalse('Completa '+requireds[i].getAttribute('name'), requireds[i]);
            }
        }

    }

    //For radio buttons
    var requiredsRadio = YAHOO.util.Selector.filter(requireds, '[type=radio]');
    for(i=0; i<requiredsRadio.length ;i++ ){
        valid = false;
        if(requiredsRadio[i].checked){
            valid =  true;
        }
        if(!valid){validateFalse('Completa ' + requiredsRadio[i].getAttribute('name') , requiredsRadio[i]);}
    }
    return valid;
}



function validateFalse(msg, el){
     // simpleMensaje(msg);
     // YAHOO.util.Dom.setStyle(el, 'background-color', 'red');
     // YAHOO.util.Event.addListener(el, 'focus',function(){YAHOO.util.Dom.setStyle(this, 'background-color', '');});

    // create a new element
    try{

            YAHOO.namespace("example.container");
            var nombre="msj" +(Math.random()*4);
            var x = YAHOO.util.Dom.getX(el)+el.offsetWidth;
            var y = YAHOO.util.Dom.getY(el);
            var div = '<span class =\'microRequerido\'> * Requerido  </span>'
			YAHOO.example.container.overlay2 = new YAHOO.widget.Overlay(nombre, { xy:[x,y],visible:true } );
            YAHOO.example.container.overlay2.cfg.setProperty("zIndex", 5000);
			//YAHOO.example.container.overlay2.setHeader("Overlay #2 from Script");
			YAHOO.example.container.overlay2.setBody(div);
			//YAHOO.example.container.overlay2.setFooter("End of Overlay #2");
  			YAHOO.example.container.overlay2.render(document.body);
            YAHOO.example.container.overlay2.show;
            YAHOO.util.Event.addListener(el, "focus", YAHOO.example.container.overlay2.hide, YAHOO.example.container.overlay2, true);


    }catch(e){alert(e)}
}

function isInteger(val){
	if (isBlank(val)){return false;}
	for(var i=0;i<val.length;i++){
		if(!isDigit(val.charAt(i))){return false;}
		}
	return true;
	}


function isAlphabet(v){
    if(!v.match(/^[a-zA-Z]+$/)){
      return false;
    }
    return true
}
function isURL(url){
    if(!url.match(/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i)){
        return false;
    }
    return true;
}
function isBlank(val){
	if(val==null){return true;}
	for(var i=0;i<val.length;i++) {
		if ((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")){return false;}
		}
	return true;
	}


function isDate(t){
    var d = new Date(t);
		if (isNaN(d) || t.length!=10) {
			//date bad
			return false;
		}
        return  true;
}

/* from http://www.mattkruse.com/javascript/validations/source.html */
function isNumeric(val){return(parseFloat(val,10)==(val*1));}


// This function is for stripping leading and trailing spaces
String.prototype.trim = function () {
    return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};
String.prototype.ltrim=function(){
    return this.replace(/^\s*/g,'');
}
String.prototype.rtrim=function(){
    return this.replace(/\s*$/g,'');
}



document.write("<style>.microRequerido { color:#FFF; z-index: 5000; background-color: #F00; font-size: 11px; font-family: Arial, Helvetica, sans-serif; padding-top: 2px; padding-right: 5px; padding-bottom: 2px; padding-left: 5px; display: inline-block;  }.yui-overlay { position:absolute;background:#fff;margin:10px; }	.yui-overlay .hd { border:0px solid red; }	.yui-overlay .bd { border:0px solid green; }	.yui-overlay .ft { border:0px solid blue; }</style>");
YAHOO.util.Event.addListener(window, "load", YUI.VALIDATION.init);
