/*********************** UTILS *************************/

/**
 * Selecciona un campo del formulario
 * @param name
 * @param func
 * @param param
 */
function forEachControl(name, func, param) {


	var controls = document.forms[formulariocanalmail][name];
	if (!controls) return;

	if (!controls.nodeName) {
		for (var i = 0; i < controls.length; i++) {
			func.apply(null, [controls[i], param]);
		}
	} else {
		func.apply(null, [controls, param]);
	}
};

/**
 * Devuelve el id del campo y añade la propiedad
 * si el campo no la tiene
 *@param id a comprobar
 */
function getid(id){
   var campo = document.forms[formulariocanalmail][id];

   if(!campo.id){
      if(campo.nodeName)
         campo.id = id;
      else{
         for(i = 0; i < campo.length; i++)
            campo[i].id=id;
      }
   }

   return id;
}


/**
 * Devuelve el valor de un campo del formulario
 * @param campo
 */
function cm_get(campo) {
	var result = [];
	forEachControl(campo, function(control, result) {
		if ((control.type != "radio" && control.type != "checkbox") || control.checked) {
			result.push(control.value);
		}
	}, result);

	return result.length > 1? result : result[0];
};

/**
 * Comprueba si un valor se encuentra en el array
 * @param array
 * @param valor
 */
function inArray(array, valor) {

	if (!array) {
		return false;
	}

	if (typeof array == "string") {
		return array == valor;
	}

	for (var i = 0; i < array.length; i++) {
		if (array[i] == valor) {
			return true;
		}
	}

	return false;
};


/**
 * Comprueba si un valor es vacio
 * @param valor
 */
function empty(valor) {
	return valor == null || valor.length == 0;
};

function setClass(element, className, value) {

	if (value) {
    	var cn = element.className;

		if (!inArray((cn && cn.split(" ")) || [], className)) {
			element.className += " " + className;
		}
	} else if (element.className) {
		element.className = element.className.replace(className, "");
	}
};

/**
 * devuelve todos los nodos hijos de un nodo del html (DOM)
 * @param parent
 * @param nodeName
 */

function getChilds(parent, nodeName) {
	var res = [];
	var childs = parent.childNodes;


	for (var i = 0; i < childs.length; i++) {
		var child = childs[i];

		if (child.nodeName.toLowerCase() == nodeName) {
			res.push(child);
		}
	}

	return res;
};

function cambiaForm(origen, destino, valida) {

	if (!valida || suscripcion.valida(origen)) {
		enableButton(origen, 1, false);
		enableButton(origen, 2, false);
		enableButton(destino, 1, true);
		enableButton(destino, 2, true);
		document.getElementById(origen).style.display = "none";
		document.getElementById(destino).style.display = "block";


		if (!valida) {
			document.getElementById("errors").innerHTML = "";
		}
	}

	return false;
};
/**
 * Activa/Desactiva un elemento del html
 * @param tab
 * @param index
 * @param value
 */
function enableButton(tab, index, value) {
	var el = document.getElementById("bot." + tab + "." + index);

	if (el != null) {
		el.disabled = value? false : true;
	}
};

/**
 * Fuerza a obligatorio un campo del modelo
 * @param campo
 * @param value
 */
function setRequired(campo, value){
	formModel.fields[campo].required=value;
}
/**
 * Inserta un alias para un campo del modelo canalmail
 * @param campo
 * @param alias
 */
function setAlias(campo, alias){
	var cambiado = false;

	for (var id in formModel.fields){
		if(id == campo){
			formModel.fields[id].alias=alias;
			cambiado=!cambiado;
			break;
		}
	}
	if(!cambiado)
		alert(""+getMessage("nocampo$label")+""+campo);


};
/**
 * annade un campo al formulario
 * @param name
 * @param label
 */
function addField(name, etiqueta){
	var field =  { required : "true", label : "" };
	formModel.fields[name]=field;
	formModel.fields[name].label=etiqueta
}

/**
 * Genera el desplegable de edad
 * @param name
 */

function fill(name){
	  var combo = document.forms[formulariocanalmail][name];
	  if(combo.type.indexOf("select")!=0){		
	  		alert(name +""+getMessage("nocombo$label")+"")
	  		return false;
	  	}

	  var mydate = new Date();
	  var anio = mydate.getFullYear()-62;
	  var edad = 62;
	  var option = new Option(""+getMessage("mayor62$label")+"","01-01-"+(anio-1));
	  combo.options[1] = option;
	  for (i=2;i<50;i++){
	    option = new Option(edad,"01-01-"+anio+"");
	    combo.options[i] = option;
	    anio++;
	    edad--;
	    }
	  option = new Option(""+getMessage("menor15$label")+"","01-01-"+(anio));
	  combo.options[i] = option;

}


function getEdad(fecha){
	var anyo = fecha.substr(6);
	return (new Date()).getFullYear()-parseInt(anyo);
}


/********************** AJAX ************************/

/**
 *
 * Funcion que se invoca cuando hay un cambio de estado en la peticion
 * @param req
 */

function listo(req){
	
        target = document.getElementById("resultados");

        if(req.readyState==4 ){
           var respuesta = req.responseText;
               //Cambiamos el id del formulario
//                forEachControl(botonsubmit, function (control, value){
//                		control.value=value;
//                	},etiquetacorregistro);
           //setEvent("change","selectCuestionario",show);
           var meta = formModel.hiddens["corregistro"];
           meta.state="true";
           document.forms[formulariocanalmail].id=meta.label;
           //Si la suscripcion no devuelve resultados forzamos el submit del formulario
           if(respuesta=="" || !(respuesta.indexOf("selectCuestionario") > 0)){
              forEachControl(botonsubmit, function(control, value){
                 control.click();
              }, "");
              
           }else{        	   
        	  
            target.innerHTML = respuesta;            
            cm_setStyles();            
            target.style.display="block";
            }
        } else {
            target.innerHTML = "";

        }

}


/**
 *
 * Validacion del corregistro
 * @param nombreForm
 */


function validaCorregistro(nombreForm){
   var error="";
   var errors = [];
   if(document.getElementById("id_cuestionario"))
      document.getElementById("id_cuestionario").value = '';
	//form = document.getElementById(nombreForm);

   var focus = null;

   var elementos = []
   elementos = document.getElementsByName("selectCuestionario");

	for(i = 0; i < elementos.length; i++){
		select = elementos[i].id;
		//comprobamos si es el elemento que buscamos

		idCampaign = select.substr("cm_idcampaign_".length,select.length);

		//Buscamos el si

		if(cm_get(select)==""){
		   var errorObj = new Object;
		   errorObj.msg = ""+getMessage("valorpara$label")+""+elementos[i].parentNode.id;
		   errorObj.id=select;
			errors.push(errorObj);
		}else
		 // valida c1 y c2 si existen

		if(cm_get(select)=="SI"){

		      document.getElementById("id_cuestionario").value += idCampaign + ',';

		   select = document.getElementById("cm_C1"+idCampaign);
		   if(select){
		      if(empty(document.getElementById("cm_C1"+idCampaign).value)){
		         label = document.getElementById("cm_C1"+idCampaign).parentNode;
		         var errorObj = new Object;
		         errorObj.msg = ""+getMessage("elcampo$label")+""+label.id+""+getMessage("obligatorio$label")+"";
		         errorObj.id = "cm_C1"+idCampaign;
		         errors.push(errorObj);
		         focus = select;
			   }
			}
			select = document.getElementById("cm_C2"+idCampaign);
			if(select){
			   if(empty(document.getElementById("cm_C2"+idCampaign).value)){

			      label = document.getElementById("cm_C2"+idCampaign).parentNode;

			      var errorObj = new Object;

		         errorObj.msg = ""+getMessage("elcampo$label")+""+label.id+""+getMessage("obligatorio$label")+"";
		         errorObj.id = "cm_C2"+idCampaign;
			      errors.push(errorObj);
			      focus = select;
	         }
	      }//if(cm_c1)

	   }//if cm_get(nombre)
	   if(focus==null &&
	      errors.length > 0)

         focus=document.getElementById(elementos[i].id);
   }//for


   return proccesErrors(errors, Suscripcion.labelErrorMode, "cm_errors", focus);



}

/**
 * Compone la url de la página que hara la peticion a la
 * suscripcion con el valor de todos los campos
 */

function getCMFields(){

	var url = "";

	for(var id in formModel.hiddens){
		var meta = formModel.hiddens[id];
		var campo = meta.alias?cm_get(meta.alias):cm_get(id);

      if(campo=="undefined" ){
         if(!meta.required)
            campo="";
      }



      if( url.length==0 )
			url += destino+"?"+id+"="+campo;
		else
			url += "&"+id+"="+campo;
	}

	for(var id in formModel.fields){
		var meta = formModel.fields[id];
		var campo = meta.alias?cm_get(meta.alias):cm_get(id);

		if( url.length==0 )
			url += destino+"?"+id+"="+campo;
		else
			url += "&"+id+"="+campo;
	}

	if(url.indexOf(location.host)>0)
      return url;
   else
      return  location.protocol+"//"+location.host+"/"+url;
}


/**
 * Peticion ajax
 * @param form
 */

function enviar(form){

	//suscripcion

	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		req = new ActiveXObject("Microsoft.XMLHTTP");
	}

	//composicion de la url
	url = getCMFields()
	//url = url + "&red=" + document.form1.red.value;
	//url = url + "&email="+ document.form1.email.value;


	req.onreadystatechange = function() { listo(req); };
	req.open("GET", url + "&rand=" + Math.random(), true);
	req.send("");
	return false;

}
/**
 * Captura el evento submit
 * @param evt
 * @deprecated
 */

function eventCM(evt){

	target = window.event? window.event.srcElement : evt.target;


	if(target.id == botonsubmit )
		if(target.form.id == formulariocanalmail){
			enviar();
			return false;
		}else if ( target.form.id=="corregistro"){
			if(validaCorregistro(target.form.id))
				target.form.submit();
			}

	return false;
}

/**
 * Muestra, si existieran, las capas con los campos adicionales del corregistro
 * todo generalizar
 * @param evt
 */
function cm_show(target){
	

   if(target.name == "selectCuestionario" && cm_get(target.id)=="SI"){

      if(Suscripcion.labelErrorMode)
         hideErrorLabels();

      id = target.id.substr("cm_idcampaign_".length, target.id.length);

      if(document.getElementById("cm_C1"+id))
         document.getElementById("cm_C1"+id).disabled=false;

      if(document.getElementById("cm_C2"+id))
         document.getElementById("cm_C2"+id).disabled=false;
      if(document.getElementById("cm_C1"+id))
         document.getElementById(id+"_additional").style.display="block";

   }

};

/**
 * Validacion del codigo postal
 * @param cp
 * @param pattern
 */
function CompruebaCp(cp, pattern){

     var longitud = document.form1.cp.value.length;
     if (cp=='')    	
         return ""+getMessage("cpobligatorio$label")+"";
     if (longitud != 5 && pais=='ESP'){
          alert(''+getMessage("cpincorrecto$label")+'');
          hayError='true';
          return true;
       }
     if (longitud==5 && pais=='ESP')
       {
        var pos0=parseInt(cp.charAt(0));
        var pos1=parseInt(cp.charAt(1));
        if (  (( pos0==5)&& (pos1 > 2)) || ( pos0 > 5 )    ){
        	 alert(''+getMessage("cpincorrecto$label")+'');
            hayError='true';
            return true;
         }
        validos='0123456789';
        for (contador=0;contador<longitud;contador++){
            if (validos.indexOf(cp.charAt(contador))==-1){
            	 alert(''+getMessage("cpletras$label")+'');
               hayError='true';
               return true;
            }
        }
     }

      hayError='false';
        return false;

}


function proccesErrors(errors, labelmode, tagDivError, focus){
   if(errors.length==0)
      return true;

   divError = document.getElementById(tagDivError);
   
   var text = ""+getMessage("cabecera$label")+""+(divError?"<br><ul>":"\n");

   for(i = 0; i < errors.length; i++){
      id = errors[i].id;
      if(labelmode){
         createErrorLabel(id, errors[i].msg);
      }else if(divError){
         text +="<li>"+errors[i].msg+"</li>";
      }else
         text += "   -"+errors[i].msg+"\n";

   }

   if(!labelmode && divError){
      divError.innerHTML=text+"</ul>";
      divError.style.display="block";
   }else if(!labelmode)
      alert(text);

   focus.focus();

   return false;

}

function createErrorLabel(id,msg){
   var iLabel = document.getElementById(id+"_error_label_cm");
   if(!iLabel){

      var oLabel = document.createElement("LABEL");
      oLabel.id=id+"_error_label_cm";
      var msg = document.createTextNode(msg);
      oLabel.className = "cm_label_error";
      oLabel.appendChild(msg);
      document.getElementById(id).parentNode.appendChild(oLabel);
   }else{
      iLabel.innerHTML=msg;
      iLabel.style.display="block";
   }
}

function hideErrorLabels(){
   var labels = [];
   labels = document.getElementsByTagName("LABEL");
   for(i = 0; i < labels.length; i++){
      labels[i].style.display=(labels[i].id.indexOf("error_label_cm") > 0)?"none":"block";
   }

}

function setEvent(event, name, handler){
   var elements =[];

   elements = document.getElementsByName("selectCuestionario");

   if(elements.length>0)
      for(i = 0; i < elements.length; i++ ){

         if (window.addEventListener)
			   elements[i].addEventListener(event, handler, false);
      	else
            elements[i].attachEvent(event, handler);

      }
   else
      if (window.addEventListener)
			   elements[i].addEventListener(event, handler, false);
      	else
            elements[i].attachEvent(event, handler);

}

function insertStyle(){

   var oLink = document.createElement("LINK");
   oLink.setAttribute("href","http://www.canalmail.com/cm_corregistro.css");
   oLink.setAttribute("rel","stylesheet");
   oLink.setAttribute("type","text/css");
   oLink.setAttribute("media","screen");
   document.getElementsByTagName("HEAD")[0].appendChild(oLink);
}


function addStyleProperty(id, property){
   eval ("var elemento = {"+property +" : ' ' };");
   styleModel.elements[id]=elemento;

}


function cm_custom_style(id, propertyName, propertyValue ){

   var elementos = [];


   elementos = getElementsByNameCM(id);

   if(elementos.length > 1 ){	   
      for (i = 0; i< elementos.length; i++){
         eval('elementos['+i+'].style.'+propertyName+'="'+propertyValue+'";');
      }
   }
   else
   {
	   if (elementos.length==1){
		   for (i = 0; i< 1; i++){
			   eval('elementos['+i+'].style.'+propertyName+'="'+propertyValue+'";');
		   }	   
	   }      
   }
}



function cm_setStyles(){
   for (id in styleModel.elements){
      for(property in styleModel.elements[id]){    	  
         cm_custom_style(id, property, styleModel.elements[id][property]);
      }
   }
}


function getElementsByNameCM(name){
   var isIE = /*@cc_on!@*/false;

   if(!isIE){
        var elementos = document.getElementsByName(name);
        return elementos;
   }
   else{

       var elementos = document.getElementsByTagName("DIV");
       var campaigns = new Array();

       for(i = 0, i2 = 0;i < elementos.length; i++){
          if(elementos[i].name == name){
             campaigns[i2]=elementos[i];
             i2++;
          }
       }
       return campaigns;
   }
}


function getMessage(name){
	var paisTextos = Suscripcion.paisMensajes;
	var tratamientoTextos = Suscripcion.tratamiento;
	return mensajes[paisTextos][name][tratamientoTextos];
}





