/*
libreria maestra
aplicacioweb------>libreriamaestra------->cualquier  framework ajax protype
 */

 /* especificacion de opciones para tipo de respuesta */
var $tipo ={
  XML: 0,
  TEXTO: 1,
  JSON: 2

}

 /* especificacion para el metodo */
 var $metodo ={
  GET: "GET",
  POST: "POST"
 }

  /* ----------------PARAMETROS------------

URL          direccon donde se hace la peticin
objeto       objeto jason con  los atributos opcionales

               OPCIONES DISPONIBLES

ID               identificador internno  para recibir junto a los datos
METODO            $metodo.POST o $metodo.GET
TIPORESPUESTA    $tipo.TEXTO, $tipo.JSON  o $tipo.XML
PARAMETROS       un string en formato URL oun HASH
CACHE             TRUE o FALSE
AVISOCARGANDO     un div   id que diga cargando
ONFINISH:         funcion a ejecutar cuando se reciben lo datos
                  esta funcion recibe el xml jason o texto  y el id de la peticion
ONERROR           funcion que se ejecuta canto aya n error
                   esta funcion recibe  un objeto con ls erres y el id de la peticion


  ------------------FIN -----------------  */

function $Ajax(url,opciones){
   //si quiere cache
   if(__$P(opciones, "cache",true)==false){
      //agregamos random ala url
      var caracter ="?";
      if(url.indexOf("?")>0) caracter="&";
      url +=caracter+ Math.random();
   }

   var metodo = __$P(opciones, "metodo", $metodo.GET);
   var parametros = __$P(opciones,"parametros");

//se genra enlace con prototype  esta se cambia por cualquier framework
var protoOpc ={
 method: metodo,
 onSuccess: __$AjaxRecibir.bind(this,opciones),
 onException: __$AjaxError.bind(this,opciones),
 onFailure: __$AjaxError.bind(this,opciones)
}

//si se definen paramtros se agregan
if(parametros!=undefined){
 protoOpc.parameters=parametros;
}

//genera peticion con prototype
var peticion = new Ajax.Request(url,protoOpc);

//PRENDE el div si esta cargando y si existe
if(__$P(opciones, "avisoCargando")!=undefined){
 __$AjaxCargando(opciones.avisoCargando,true);

}
}

//funciones que se encargrar de recibir peticiones desde prototype y ejecutar
function __$AjaxRecibir(opciones, xhr){
 //si readysate=4 y status =200 ejecuta esto


 var funcionRetorno = __$P(opciones, "onfinish");
 var id = __$P(opciones, "id");

 if(funcionRetorno!=undefined){
  //si el usuario indico q quiere respuesta por defecto texto
  var tipoRespuesta=__$P(opciones,"tipoRespuesta", $tipo.TEXTO);

  switch(tipoRespuesta){

     case $tipo.TEXTO:
       funcionRetorno(xhr.responseText, id);
       break;
     case $tipo.XML:
       funcionRetorno(xhr.responseXML, id);
       break;
     case $tipo.JSON:
        //evalua jason para versi es valido
        var objeto;
        try{
         objeto=xhr.responseText.evalJSON();
         }
         catch(e){
         __$AjaxError(opciones,xhr,{code: -1,
         message: "JSON No valido"});
         return;
         }
          funcionRetorno(objeto,id);
  }
 }

  //apaga div caragando
 if (__$P(opciones, "avisoCargando")!=undefined){
  __AjaxCargando(opciones.avisoCargando, true);
 }
}

//funcion q prende y apga el cartel si existe
function __$AjaxCargando(cartel, prender){
 if(prender){
  $(cartel).show();
 } else{
  $(cartel).hide();
 }
}

//fucnion que veerifica errores de protoype
function __$AjaxError(opciones, xhr, excepcion){
  //apagamos el cartel de cargando
  if (__$P(opciones, "avisoCargando")!=undefined){
   __$AjaxCargando(opciones.avisoCargando,false);

  }
  //error de servido no excepcion
  if (excepcion==undefined){
   excepcion= {conde: xhr.status, message: "Error en el servidor, intente mas tarde"}

  }
  //consuluto si evento onerror esta definido
  var funcionError= __$P(opciones, "onerror");
  if (funcionError!=undefined){
   funcionError(excepcion, __$P(opciones,"id"));
  }

}
//funcion que entrega json con valor por defecto
function __$P(coleccion,parametro,defecto){
 if(coleccion==undefined){
  return defecto;
 }else{
  if(coleccion[parametro]==undefined){
   return defecto;
  }else{
   return coleccion[parametro];
  }

 }
}
//funcion q carga el contenido
function mostrarseccion(nombre,dibv){

 $Ajax(nombre,{
 cache: false,
  onfinish: function(html){
   $(dibv).innerHTML=html;
  },
  avisoCargando: "divCargando"
 });

}



//formulario validar------------------
function VALasunto(){
		            var asunto = new LiveValidation('asunto');
                    asunto.add( Validate.Presence );
		            asunto.add(Validate.Length, { minimum: 10} );
}


function VALtel(){
		            var tel = new LiveValidation('tel');
					tel.add( Validate.Numericality );
		            tel.add(Validate.Length, { minimum: 5, maximum: 15 } );
}

function VALmail(){
		            var mail = new LiveValidation('mail');
					mail.add( Validate.Email );
		            mail.add(Validate.Length, { minimum: 10, maximum: 50 } );
}


function VALmail2(){
		            var mail2 = new LiveValidation('mail2');
                    mail2.add( Validate.Presence );
					mail2.add( Validate.Email );
		            mail2.add(Validate.Length, { minimum: 10, maximum: 50 } );
}

function VALtel2(){
		            var tel2 = new LiveValidation('tel2');
                    tel2.add( Validate.Presence );
					tel2.add( Validate.Numericality );
		            tel2.add(Validate.Length, { minimum: 5, maximum: 15 } );
}

function VALdireccion(){

		            var direccion = new LiveValidation('direccion');
		            direccion.add(Validate.Length, { minimum: 5} );

}

function VALnombre(){
		            var nombre = new LiveValidation('nombre');
					nombre.add( Validate.Presence );
		            nombre.add(Validate.Length, { minimum: 5, maximum: 70 } );

}