/******************************************************

	Archivo: fechas.js
	Autor: Pablo Salaberri
	Fecha: 23/02/2007
	Descripción: Gestión de datos tipo fecha
	

	Formato en el que se trabajará con la fecha

********************************************************/

function CFormChecker(){
	
	var a = CFormChecker.arguments;
	this.elements=new Array();
	this._tosave =false;
	
	for (var i = 0; i<a.length;i=i+4){
		var nobj = new Object();
		
		nobj.nombre = a[i];
		nobj.titulo = a[i+1];
		nobj.tipo = a[i+2];
		nobj.attribs = a[i+3];
		
		this.elements.push(nobj);
		
	}
}

CFormChecker.prototype.check = function(){
	
	var els = this.elements;
	this.error = '';
	for (var i = 0;i<els.length;i++){
		
		if (typeof(eval('this._'+els[i].tipo))!='undefined'){
			ret = eval('this._'+els[i].tipo+'(\''+(els[i].nombre)+'\')');
			if (!ret){
				 alert('El elemento:"'+els[i].titulo+'"' +
				 		' no es correcto\n'+this.error);
				 return false;
			}
		
		}
			if (els[i].attribs!=''){
				
				ret = this.checkattribs(els[i]);
				//eval('this.checkattribs(\''+(els[i])+'\')');
				if (!ret){
						 alert('El elemento:"'+els[i].titulo+'"' +
						 		' no es correcto\n'+this.error);
						 return false;
				}
			}
				
	}
	return true;
}
CFormChecker.prototype.setChSv = function(ident){
	
	this.enSave(ident,false);
	for(var i=0; i< this.elements.length;i++){
		$(this.elements[i].nombre).observe('keypress',(function(event){
			if(event.keyCode==Event.KEY_RETURN){
				Event.stopObserving(event);return false;
			}
			this.enSave(ident,true);
			
			return false;
			}).bindAsEventListener(this,ident));
		$(this.elements[i].nombre).observe('change',(function(event){
			
			this.enSave(ident,true);
			
			return false;
			}).bindAsEventListener(this,ident));	
		//$(this.elements[i].nombre).observe('change',(function(){this.enSave(ident,true)}).bind(this,ident));
	}
}

CFormChecker.prototype.setSaveAlert = function(savealert){
	this._tosavealert=savealert;
	
	return true;
}
CFormChecker.prototype.toSaveAlert = function(){
	
	if (this._tosave){
		if(typeof(this._tosavealert)!='undefined'){
			return confirm(this._tosavealert);
		}
		return confirm('Ha realizado cambios en sus datos personales. ¿Desea guardarlos?');
	}
	return false;
}

CFormChecker.prototype.enSave = function(ident,what){
	if(!what){
		this._tosave=false;
		$(ident).addClassName('disinput');
		$(ident).writeAttribute('disabled');
	}
	else{
		this._tosave=true;
		$(ident).removeClassName('disinput');
		$(ident).removeAttribute('disabled');
		
	}
	
} 
//______________________________________________ checkattribs
//
//	Devuelve: revisa los atributos para que no sean erróneos
//
//			dd/mm/aa : dd de mm de aaaa
//_________________________________________________________

CFormChecker.prototype.checkattribs = function(obj){
	var reg = new RegExp('(not null)');
	
	var ok = reg.exec(obj.attribs.toString());
	error = false;
	
	if(ok !== null){
		for (var i = 1; i < ok.length;i++){
			switch(ok[i]){
				case 'not null':
						if(obj.nombre=='password') break;
						if(typeof(eval('this._'+obj.tipo+'_notnull'))!=='undefined'){
							var ok = eval('this._'+obj.tipo+'_notnull(obj);');
							if(!ok) return false;
						}
						else
						{
							if (($F(obj.nombre)==='')){
								this.error = 'no puede estar vacío';
								error = true;
							}
						}
					break;
			}
			if (error) return false;
		}
	}
	return true;
}

CFormChecker.prototype.getValue = function(objectname){
var object = findObject(objectname);

	if ((typeof(object.value)!='undefined')){
		return object.value;
	}
	if (typeof(object)=='string'){
		
		return object.toString();
	}
	
	return null;
}
//______________________________________________ email
//
//	Devuelve: true si la fecha es correcta en los siguientes
// 				formatos
//
//			dd/mm/aa : dd de mm de aaaa
//_________________________________________________________

CFormChecker.prototype._email = function(_str){
		
		var str = this.getValue(_str);
		if(str==null) return null;
		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		   this.error = "E-mail inválido";
		   return false
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   this.error = "E-mail inválido";
		   return false
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    this.error = "E-mail inválido";
		    return false
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    this.error = "E-mail inválido";
		    return false
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    this.error = "E-mail inválido";
		    return false
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    this.error = "E-mail inválido";
		    return false
		 }
		
		 if (str.indexOf(" ")!=-1){
		    this.error = "E-mail inválido";
		    return false
		 }

 		 return true					
}
//______________________________________________ int
//
//	Devuelve: true si la fecha es correcta en los siguientes
// 				formatos
//
//			dd/mm/aa : dd de mm de aaaa
//_________________________________________________________

CFormChecker.prototype._int = function(_number){
  	
  	var numero = this.getValue(_number);
  	
	if(numero==null) return null;
   ok =  (numero - 0) == numero && numero.length > 0;
   if (!ok) this.error = 'Debe ser numérico';
   return ok;
}

//______________________________________________ date
//
//	Devuelve: true si la fecha es correcta en los siguientes
// 				formatos
//
//			dd/mm/aa : dd de mm de aaaa
//_________________________________________________________

CFormChecker.prototype._date = function(__fecha){
	
	
	var fecha = this.getValue(__fecha);
	return true;
	if(fecha==null) return null;
	if (fecha.indexOf("/",0) == -1){
		//El formato de la fecha solo puede ser
		// dd de mm de aaaa
		//Hacemos un pattern de captura
		var pattern = /(\d)+ de (\w*)+ de (\d*)/g;
		//var pattern = /(de)/;
		var devolucion = pattern.exec(fecha);
		
		if (devolucion != null){
			//La respuesta es correcta
			return false;
		}		
				//Patrón de sólo año
		pattern = /(\d*)/; //Buscamos algo como 2006
		devolucion = pattern.exec(fecha);
		
		if (devolucion != null){
			if (devolucion[0]!=""){
				return false;
			}
		}

	}
	else{
		//Formato del tipo aaaa/mm/dd
		var pattern = /(\d*)(?:\/)(\d*)(?:\/)(\d*)/;
		var devolucion = pattern.exec(fecha);

		if (devolucion != null){

			return false;
		}
	}
	return true;
}
CFormChecker.prototype._multioption_notnull=function(obj){
	
	var objs = $$('[multopt='+obj.nombre+']');
	var ok = false;
	for (var i=0;i<objs.length;i++){
		
		if($F(objs[i])!==null){
			ok =true;
		}
	}
	return ok;
	//this._optgroup_notnull(obj);
}
CFormChecker.prototype._optgroup_notnull = function(obj){
	
	var descs = Element.descendants($(obj.nombre));		
	var ok = false;	
	
	for(var i=0; i<descs.length;i++){
		if(descs[i].id.indexOf(obj.nombre)!==-1){
			ok|=($F(descs[i])=='on');
		}
	}
	if(!ok){
		this.error = "Debe marcar alguno.";
		
		return false;
	}
	return true;
}




