/*********************** 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 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("No se encontro el campo para "+campo);


};
/**
 * annade un campo al formulario
 * @param name
 * @param label
 */
function addField(name, label){
	var field =  { required : "true", label : "" };
	formModel.fields[name]=field;
	formModel.fields[name].label=label
}

/**
 * Genera el desplegable de edad
 * @param name
 */

function fill(name){
	  var combo = document.forms[formulariocanalmail][name];
	  if(combo.type.indexOf("select")!=0){
	  		alert(name +" no es un combo")
	  		return false;
	  	}

	  var mydate = new Date();
	  var anio = mydate.getFullYear()-62;
	  var edad = 62;
	  var option = new Option("Maior de 62","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("Menor de 15","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 ){
           target.innerHTML = req.responseText;
               //Cambiamos el id del formulario
//                forEachControl(botonsubmit, function (control, value){
//                		control.value=value;
//                	},etiquetacorregistro);
           var meta = formModel.hiddens["corregistro"];
           alert('cambiamos el estado');
           formModel.hiddens["corregistro"].state="true";
           alert('estado cambiado '+document.forms[formulariocanalmail].id);           
           document.forms[formulariocanalmail].id=meta.label;
           //Si la suscripcion no devuelve resultados forzamos el submit del formulario
           if(target.innerHTML==""){
              forEachControl(botonsubmit, function(control, value){
                 control.click();
              }, "");
           }
        } else {
                target.innerHTML = "";
        }

}


/**
 *
 * Validacion del corregistro
 * @param nombreForm
 */


function validaCorregistro(nombreForm){
	var error="";

	form = document.getElementById(nombreForm);

	var elementos = form.elements;
   var focus = null;
	for(i = 0; i < elementos.length; i++){
		nombre = elementos[i].id;
		//comprobamos si es el elemento que buscamos

		esselect = nombre.indexOf("selectCuestionario");

		if( esselect > -1 ){
			select = document.getElementById(nombre);

			//Buscamos el si
			for(var padre = select.parentNode;padre.nodeName.toUpperCase()!="DIV";padre=padre.parentNode);

			if(cm_get(nombre)==""){
            if(error=="")
					error = "Foram encontrados os seguintes erros:\n"
				error += "   - Deves seleccionar um valor para "+padre.id+"\n";
            if(focus==null)
               focus=select;
         }
		}
	}
	if (error!=""){
		alert(error);
      focus.focus();
      return false;
	}
	return true;
}

/**
 * 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
 */

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();
			}else
				return false;
}


/**
 * Validacion del codigo postal
 * @param cp
 * @param pattern
 */
function CompruebaCp(cp, pattern){

     var longitud = document.form1.cp.value.length;
     if (cp=='')
         return "'Debes introducir el código postal";
     if (longitud != 5 && pais=='ESP'){
          alert('El código postal no es correcto');
          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('El código postal no es correcto');
            hayError='true';
            return true;
         }
        validos='0123456789';
        for (contador=0;contador<longitud;contador++){
            if (validos.indexOf(cp.charAt(contador))==-1){
               alert('El código postal no puede contener letras ');
               hayError='true';
               return true;
            }
        }
     }

      hayError='false';
        return false;

}

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
   {
      eval('document.getElementById("'+id+'").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;
   }
}


/**
 * 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;
}


function proccesErrors(errors, labelmode, tagDivError, focus){
   if(errors.length==0)
      return true;

   divError = document.getElementById(tagDivError);
   var text = "Se han producido los siguientes errores:"+(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";
   }

}

