// JavaScript Document
	var Exito = new function(){
		//
		this.show = function(msj){
			$('msjExito').innerHTML = msj;
			
			var l = $('capaExito');
			l.style.top = (((HScreen() - l.offsetHeight) / 2) + YPos()) + 'px';
			l.style.left = (((WScreen() - l.offsetWidth) / 2) + XPos()) + 'px';
			l.style.visibility = 'visible';
			
			try{ $('aceptarExito').focus(); }catch(e){ ; }
			AddEvent(document, 'keypress', escape);
			AddEvent($('aceptarExito'), 'click', accept);
			AddEvent($('cerrarExito'), 'click', accept);
		}
		
		this.hide = function(){
			RemEvent(document, 'keypress', escape);
			RemEvent($('aceptarExito'), 'click', accept);
			RemEvent($('cerrarExito'), 'click', accept);
			var l = $('capaExito');
			l.style.visibility = 'hidden';
			l.style.top = '-1000px';
		}
		
		this.onAccept = null;
		
		var accept = function(e){
			if(!!e){ StopEvent(e); }
			this.hide();
			if(!!this.onAccept){ this.onAccept(); }
		}.closure(this);
		
		var escape = function(event){
			if(event.keyCode == 27){ accept(); }
		}.closure(this);
		
		//
	}
// JavaScript Document
	var Error = new function(){
		//
		this.show = function(msj){
			$('msjError').innerHTML = msj;
			
			var l = $('capaError');
			l.style.top = (((HScreen() - l.offsetHeight) / 2) + YPos()) + 'px';
			l.style.left = (((WScreen() - l.offsetWidth) / 2) + XPos()) + 'px';
			l.style.visibility = 'visible';
			
			try{ $('aceptarError').focus(); }catch(e){ ; }
			AddEvent(document, 'keypress', escape);
			AddEvent($('aceptarError'), 'click', accept);
			AddEvent($('cerrarError'), 'click', accept);
		}
		
		this.hide = function(){
			RemEvent(document, 'keypress', escape);
			RemEvent($('aceptarError'), 'click', accept);
			RemEvent($('cerrarError'), 'click', accept);
			var l = $('capaError');
			l.style.visibility = 'hidden';
			l.style.top = '-1000px';
		}
		
		this.onAccept = null;
		
		var accept = function(e){
			if(!!e){ StopEvent(e); }
			this.hide();
			if(!!this.onAccept){ this.onAccept(); }
		}.closure(this);
		var escape = function(event){
			if(event.keyCode == 27){ accept(); }
		}.closure(this);
		
		//
	}
// JavaScript Document
function form(nombre, archivo){
	
	var error = $('error' + nombre);
	var loader = $('loader' + nombre);
	
	var enviando = false;
	var errores = 0;
	var aCampos = new Array();
	var aValidar = new Array();
	var aLimpiar = new Array();
	var req = new Request();
	var elemento = false;
	this.moreInfo = '';
	//
	this.onSuccess = null;
	this.onError = null;
	this.onSend = null;
	
	//
	req.listener = function(){
		enviando = false;
		var d = req.respuestaXML;
		block(false);
		Blocker.hide()
		Loader.hide();
		
		if(!!loader){ loader.style.display = 'none'; }
		if(!d){ alert(req.respuestaHTML); }
		else if(d.getAttribute('exito') == 'si'){
			if(!this.onSuccess){
				block(true);
				Exito.onAccept = onAccept;
				Exito.show(d.firstChild.data);
			}
			else{ this.onSuccess(d); }

		}
		else{
			if(!this.onError){
				block(true);
				Error.onAccept = onAccept;
				Error.show(d.firstChild.data);
			}
			else{ this.onError(d); }
		}

	}.closure(this);
	
	this.pedirExterno = function(archivo,valor){
		req.pedir(archivo,valor);	
	}
	
	this.onAccept = function(){
		onAccept();	
	}
	
	var onAccept = function(){
		clean();
		block(false);
	}.closure(this);
	
	this.addField = function(campo, nombre, expresion, clear){
		var o = {'c':campo, 'n':nombre};
		//
		aCampos.push(o);
		if(expresion){
			campo.expresion = expresion;
			campo.inputError = inputError;

			if(campo.tagName.toLowerCase() != 'select')campo.onblur = funcVal.closure(campo);
			else campo.onchange = funcVal.closure(campo);
			//
			aValidar.push(aCampos.length - 1);
		}
		if(clear){ aLimpiar.push(aCampos.length - 1); }
		return aCampos.length-1;
	}
	
	var clean = function(){
		var i = null;
		//
		for(i in aLimpiar){ aCampos[aLimpiar[i]]['c'].value = ''; }
		for(i in aCampos){ inputError(aCampos[i]['c'], false); }
		errores = 0;
		showError();
	}
	
	this.enter = function(event){
		if(event.keyCode == 13){ this.send(); }
	}.closure(this);
	
	this.send = function(event){
		var v = '', i = null;
		if(!!event){ StopEvent(event); }
		if(!!this.onSend){ this.onSend(); }
		//
	
		if(enviando){ return false; }
		else if(validate()){ return false; }
		enviando = true;
				//
		block(true);
		Blocker.show()
		Loader.show();
		
		if(!!loader){ loader.style.display = 'block'; }
		//

		for(i in aCampos){
			v += aCampos[i]['n'] + SEP_IGUAL + trim(aCampos[i]['c'].value) + SEP_AND;
		}
		if(this.moreInfo != ''){ v += this.moreInfo; }
			//
		req.pedir(DIR_ROOT + 'requests/' + archivo + '.php', v);
	}.closure(this);
	
	var inputError = function(c, b){
		errores += (b)? 1:0;
		c.className = (b)? 'inputError':'';
	}.closure(this);
	
	var showError = function(){
		error.style.display = (errores > 0)? 'block':'none';
	}
	
	var funcVal = function(){
		this.value = trim(this.value);
		if(this.value.search(this.expresion) == 0){ this.inputError(this, false); }
		else{ this.inputError(this, true); }
	}
	
	var validate = function(){
		var i = null, c;
		//
		errores = 0;
		for(i in aValidar){
			c = aCampos[aValidar[i]]['c'];
			if(!c.disabled){ 
				if(c.tagName.toLowerCase() != 'select')c.onblur();
				else c.onchange();
				
			}
		}
		
		showError();
		return (errores > 0);
	}
	
	this.unblock = function(){
		var i = null;		
		enviando = false;
		for(i in aCampos){ aCampos[i]['c'].disabled = false; }
		
	}
	
	var block = function(b){
		var i = null;
		//
		enviando = b;
		for(i in aCampos){ aCampos[i]['c'].disabled = b; }
	}

}
	
	var oReclamar = null
	
	AddEvent(window, 'load', function(){
		oReclamar = new form('Reclamar', 'reclamos');
    	//
		oReclamar.addField($('nombre'), 		'nombre', 		ER_STR, 		false);
		oReclamar.addField($('direccion'), 		'direccion',	ER_STR, 		false);
		oReclamar.addField($('barrio'),	 		'barrio',		false, 			false);
		oReclamar.addField($('ciudad'),	 		'ciudad',		false, 			false);
		oReclamar.addField($('telefono'),	 	'telefono',		ER_STR, 		false);		
		oReclamar.addField($('email'), 			'email', 		ER_EMAIL, 		false);
		oReclamar.addField($('corredor'), 		'idCorredor', 	ER_NATURAL_NOCERO, 	false);
		oReclamar.addField($('mensajeReclamo'),	'reclamo',		ER_STR, 		true);				
		oReclamar.onSuccess = function(d){
			if(oReclamar.accion != 'buscarLineas'){
				oReclamar.unblock();
				Exito.onAccept = oReclamar.onAccept;
				Exito.show(d.firstChild.data);
			}
			else{ 
				$('corredor').disabled = false;			
				$('contLinea').innerHTML = d.firstChild.data;
				$('loaderLinea').style.display = 'none';
				oReclamar.accion = '';
			}
		}
		oReclamar.buscarLineas = function(idCorredor){
			oReclamar.accion = 'buscarLineas';
			$('corredor').disabled = true;
			$('linea').disabled = true;
			$('loaderLinea').style.display = 'inline';
			oReclamar.pedirExterno(DIR_ROOT + 'requests/cargar_linea.php','idCorredor' + SEP_IGUAL + idCorredor + SEP_AND);
		}
		AddEvent($('enviarReclamo'), 'click', function(){
			if($('linea') && !$('linea').disabled){
				oReclamar.moreInfo += 'idLinea' + SEP_IGUAL + $('linea').value + SEP_AND;
				oReclamar.moreInfo += 'tipoReclamo' + SEP_IGUAL + $('tipoReclamo').value + SEP_AND;				
				oReclamar.send();
			}	
		});
		AddEvent($('corredor'), 'change', function(){
			oReclamar.buscarLineas($('corredor').value);
		})
	});
	
