var W3CDOM = (document.createElement && document.getElementsByTagName);
function cleanTree(obj){
	if(obj.hasChildNodes()){
		obj = cleanWhiteSpace(obj);
		for(var i = 0; i < obj.childNodes.length; i++) cleanTree(obj.childNodes[i]);
	}
}

// elimina los nodos #text "molestos" (los que hay al hacer salto de lineas de una etiqueta a otra, por ejemplo) de un elemento
function cleanWhiteSpace(element){
	for (var i = 0; i < element.childNodes.length; i++)
	{
		var node = element.childNodes[i];
		if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) element.removeChild(node)
	}
	return element;
}
document.getElementsByClassName = function(className, container){
   var data = tags = [];
   var obj = document.getElementById("wrapper");
   var node = aux = null;
	var strClassName = className.replace(/\-/g, "\\-");
    var pattern = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	if(container) node = (typeof(container) == "object") ? container : document.getElementById(container);
	else node = (obj) ? obj : document;
	aux = node.getElementsByTagName("*");
	tags = (document.all) ? node.all : aux;
   for(var i=0;i<tags.length;i++) { if(pattern.test(tags[i].className)) data.push(tags[i]);}
   return data;
}

var e = {
	addEvent : function(obj, evType, fn, useCapture){
		if (obj.addEventListener){
			obj.addEventListener(evType, fn, useCapture);
			return true;
		}else if (obj.attachEvent){
			var r = obj.attachEvent("on"+evType, fn);
			return r;
		}else {
			return false;
		}
	}
}


var curves={

	setSideBar:function(){
		var obj = document.getElementById("sideBar");
		var firstElement = obj.firstChild;
		// crear elementos
		var cLTop = curves.createElementsCurves("cLTop");
		var cRTop = curves.createElementsCurves("cRTop");
		var cLBottom = curves.createElementsCurves("cLBottom");
		var cRBottom = curves.createElementsCurves("cRBottom");
		// insertar curvas arriba
		obj.insertBefore(cRTop, firstElement);
		obj.insertBefore(cLTop, cRTop);
		// insertar curvas abajo
		obj.appendChild(cLBottom);
		obj.appendChild(cRBottom);

	},
	setSideBarHome:function(){
		var obj = document.getElementById("sideBar");
		var firstElement = obj.firstChild;
		// crear elementos
		var cLBottom = curves.createElementsCurves("cLBottom");
		var cRBottom = curves.createElementsCurves("cRBottom");
		// insertar curvas abajo
		obj.appendChild(cLBottom);
		obj.appendChild(cRBottom);
	},
	createElementsCurves:function(style){
		var element = document.createElement("span");
		element.className = style;
		element.appendChild(document.createTextNode(" "));
		return element;
	}

}

var pickerForm= {
	showCampos:function(){
		var picker = new Array();
		picker[1] = document.getElementById('viaEmail');
		picker[2] = document.getElementById('viaCorreo');
		picker[3] = document.getElementById('viaTfno');

		var campos = new Array();
		campos[1] = document.getElementById('camposEmail');
		campos[2] = document.getElementById('camposPostal');
		campos[3] = document.getElementById('camposTelefono');

		for(var i=1; i<4;i++){
			picker[i].checked = false;
		};

		picker[1].onclick = function(){
			campos[1].style.display="block";
			campos[2].style.display="none";
			campos[3].style.display="none";
		},
		picker[2].onclick = function(){
			campos[1].style.display="none";
			campos[2].style.display="block";
			campos[3].style.display="none";
		},
		picker[3].onclick = function(){
			campos[1].style.display="none";
			campos[2].style.display="none";
			campos[3].style.display="block";
		}
	}
}

var calidades ={
	showCategory:function(){
		var listaCalidades = document.getElementById('listaCategoria');
		var itemsListaC = listaCalidades.getElementsByTagName('a');
		for(var i = 0; i < itemsListaC.length; i++){
			itemsListaC[i].index = i;
			itemsListaC[i].onclick = function(){ calidades.toggleVisibility(this.index); }
		}
	},
	toggleVisibility:function(i){
		var listaTextos = document.getElementById('listaTextos');
		var itemsListaT = listaTextos.getElementsByTagName('div');
		for(var j=0; j< itemsListaT.length; j++){
			itemsListaT[j].style.display="none";
		};
		itemsListaT[i].style.display="block";
	}
}

var pickerVivienda = {
	selectTipo:function(){
		var listaTipos = document.getElementById('pickerTipoVivienda');
		var itemsTipos = listaTipos.getElementsByTagName('h2');
		var aux=listaTipos.getElementsByTagName("ul");
		for(var j=0; j< aux.length; j++){
			itemsTipos[j].onclick = function(){

				for(var i=0; i< aux.length; i++){
					itemsTipos[i].parentNode.className= '';
				}
				this.parentNode.className= 'activo';
			}
		};
	}
}

var galImg = {
	imgVisible:0,
	showcase:function(id){
		var linkPrev = document.getElementsByClassName("imgAnterior")[0];
		var linkNext = document.getElementsByClassName("imgSiguiente")[0];
		cleanTree(id);
		var imagenes=id.getElementsByTagName("img");
		var imgContainer=new Array();
		linkPrev.style.display="none";
		if(imagenes.length == 1)linkNext.style.display="none";
		for(var x=0;x<imagenes.length;x++){
			imgContainer[x]=imagenes[x].parentNode;
			if(x!=0){
					imgContainer[x].style.display="none";
			}
		}

	e.addEvent(linkNext,"click",function(){
		galImg.switchImg(this,imgContainer,imagenes,linkPrev,linkNext,1);
	}, false);

	e.addEvent(linkPrev, "click",function(){
		galImg.switchImg(this,imgContainer,imagenes,linkPrev,linkNext,-1);
	}, false);

		/*for(var i=0; i< linkPrev.length+1; i++){
			linkPrev[i].onclick = function(){
			this.parentNode.className='hide';
			}
		};

		var linkNext = document.getElementsByClassName("imgSiguiente");
		for(var i=0; i< linkNext.length+1; i++){
			linkNext[i].onclick = function(){
			this.parentNode.className='hide';
			}
		};*/
	},
	switchImg:function(id,imgContainer,imagenes,linkPrev,linkNext,sentido){
		if(imgContainer[galImg.imgVisible+(sentido)]){
				imgContainer[galImg.imgVisible].style.display="none";
				imgContainer[galImg.imgVisible+(sentido)].style.display="block";
				(sentido>0)?galImg.imgVisible++:galImg.imgVisible--;

				switch (galImg.imgVisible){
					case 0:
						linkNext.style.display="block";
						linkPrev.style.display="none";
					break;
					case (imgContainer.length-1):
						if(imagenes[1]){
							linkNext.style.display="none";
						}
						linkPrev.style.display="block";
					break;
					default:
						linkPrev.style.display="block";
						linkNext.style.display="block";
					break;
				}
			}
	}
}

function blink(){
	elems = document.getElementsByClassName('parpadeante',document.getElementById('main'));
	for(i=0; i<elems.length; i++){
		if(elems[i].style.visibility == 'visible'){
			elems[i].style.visibility = 'hidden';
		} else {
			elems[i].style.visibility = 'visible';	
		}
	}
}

var parpadeante = {
	parpadear:function(){
		setInterval("blink()",500);		
	}
}

var fixes ={
	sideBarHome:function(){
		var obj = document.getElementById("sideBar");
		var cBottom = curves.createElementsCurves("bck");
		obj.appendChild(cBottom);
	},
	formCategory:function(){
		var obj = document.getElementById("promo_categ");
		obj.onchange = fixes.setAction;
	},
	setAction:function(){
		document.getElementById("internacional").style.display = (this.selectedIndex != 0) ? "none" : "block";
		this.parentNode.parentNode.parentNode.action = this.value;
	},
	hrefMap:function(){
		var map = document.getElementById("mapa_Map");
		var areas = document.getElementsByTagName("area");
		for(var i = 0; i < areas.length; i++) areas[i].onclick = fixes.setHrefMap;
	},
	setHrefMap:function(){
		var obj = document.getElementById("promo_categ");
		var params = this.href.split("?")[1];
		this.href = obj.parentNode.parentNode.parentNode.action + "?" + params;
	}
}

var googleMaps = {
	mapa:function load() {
		if (document.getElementById('gMaps')){
			document.getElementById('gMaps').style.display = 'block';
		}
		if (GBrowserIsCompatible()) {
			var map = new GMap2(document.getElementById("gMaps"));

			map.addControl(new GSmallMapControl());

			map.setCenter(new GLatLng(41.642604,-4.704541), 14);

			// Creates a marker at the given point with the given number label
			function createMarker(point) {
				var marker = new GMarker(map.getCenter());
				return marker;
			}

			var point = new GLatLng(41.642604,-4.704541);
			map.addOverlay(createMarker(point));
		}
	}
}

var formsValidations = {
	setMsgError:function(form){
		var msgError = document.getElementsByClassName("warning", form);
		if(msgError.length == 0){
			var msgElement = document.createElement("span");
			var fieldset = form.getElementsByTagName("fieldset")[0];
			var legend = fieldset.getElementsByTagName("legend")[0];
			var pElement = fieldset.getElementsByTagName("p")[0];
			var ulElement = fieldset.getElementsByTagName("ul")[0];
			msgElement.className = "warning"
			msgElement.appendChild(document.createTextNode("(!) Por favor, revisa el formulario y completa los datos marcados en rojo"));
			fieldset.insertBefore(msgElement,legend);
		}
	},
	markError:function(obj, error) {
		if(obj.className.indexOf("condiciones") != -1){
			if(error) obj.className += " errorValidacion";
			else obj.className = obj.className.replace("errorValidacion", "")
		}else obj.className = (error) ? "errorValidacion" : "";
	},
	validaFormInfoSolicitud:function() {
		var f = document.forms.infoSolicitud;
		var ok = true;
		if (f.nombre.value == ""){
			formsValidations.markError(f.nombre.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.nombre.parentNode, false);
		if (f.apellidos.value == ""){
			formsValidations.markError(f.apellidos.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.apellidos.parentNode, false);

		if(document.getElementById("interes")){
			if (f.interes.selectedIndex < 0){
				formsValidations.markError(f.interes.parentNode, true);
				ok = false;
			}else formsValidations.markError(f.interes.parentNode, false);
		}

		if (!f.via[0].checked && !f.via[1].checked && !f.via[2].checked){
			formsValidations.markError(f.via[0].parentNode.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.via[0].parentNode.parentNode, false);


		if (f.via[0].checked && !regularExpressions.isValidEmail(f.email.value)){
			formsValidations.markError(f.email.parentNode, true);
			ok = false;
		}else  formsValidations.markError(f.email.parentNode, false);

		if (f.via[1].checked && !regularExpressions.esNumero(f.cpostal.value)){
			formsValidations.markError(f.cpostal, true);
			formsValidations.markError(f.cpostal.previousSibling.previousSibling, true)
			ok = false;
		}else{
			formsValidations.markError(f.cpostal, false);
			formsValidations.markError(f.cpostal.previousSibling.previousSibling, false)
		}

		if (f.via[2].checked && !regularExpressions.esNumero(f.telefono.value)){
			formsValidations.markError(f.telefono, true);
			formsValidations.markError(f.telefono.previousSibling.previousSibling, true)
			ok = false;
		}else{
			formsValidations.markError(f.telefono, false);
			formsValidations.markError(f.telefono.previousSibling.previousSibling, false)
		}

		if (f.via[2].checked && !regularExpressions.esNumero(f.movil.value)){
			formsValidations.markError(f.movil, true);
			formsValidations.markError(f.movil.previousSibling.previousSibling, true)
			ok = false;
		}else{
			formsValidations.markError(f.movil, false);
			formsValidations.markError(f.movil.previousSibling.previousSibling, false)
		}


		if (f.motivo.value == ""){
			formsValidations.markError(f.motivo.parentNode, true);
			ok = false;
		}
		else formsValidations.markError(f.motivo.parentNode, false);
		if (!f.acepto.checked){
			formsValidations.markError(f.acepto.parentNode, true);
			ok = false;
		}
		else formsValidations.markError(f.acepto.parentNode, false);
		if(!ok){
			formsValidations.setMsgError(document.getElementById("infoSolicitud"));
			return false;
		}
	},
	validaFormSugerencias:function() {
		var f = document.forms.sugerencias;
		var ok = true;
		if (f.nombre.value == ""){
			formsValidations.markError(f.nombre.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.nombre.parentNode, false);
		if (f.apellidos.value == ""){
			formsValidations.markError(f.apellidos.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.apellidos.parentNode, false);

		if (!regularExpressions.isValidEmail(f.email.value)){
			formsValidations.markError(f.email.parentNode, true);
			ok = false;
		}else  formsValidations.markError(f.email.parentNode, false);

		if (f.sugerencia.value == ""){
			formsValidations.markError(f.sugerencia.parentNode, true);
			ok = false;
		}
		else formsValidations.markError(f.sugerencia.parentNode, false);
		if (!f.acepto.checked){
			formsValidations.markError(f.acepto.parentNode, true);
			ok = false;
		}
		else formsValidations.markError(f.acepto.parentNode, false);
		if(!ok){
			formsValidations.setMsgError(document.getElementById("sugerencias"));
			return false;
		}
	},
	validaFormNewsletter:function(obj){
		//var f = eval("document.forms."+obj.name);
		//var f = document.forms.formsNewsletter + obj;
		var f = eval("document.forms.formsNewsletter"+obj);
		var ok = true;
		/*if (f.nombre.value == ""){
			formsValidations.markError(f.nombre.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.nombre.parentNode, false);*/

		if (!regularExpressions.isValidEmail(f.email.value)){
			formsValidations.markError(f.email.parentNode, true);
			ok = false;
		}else  formsValidations.markError(f.email.parentNode, false);

		if (!f.acepto.checked){
			formsValidations.markError(f.acepto.parentNode, true);
			ok = false;
		}
		else formsValidations.markError(f.acepto.parentNode, false);
		if(!ok){
			formsValidations.setMsgError(document.getElementById("formsNewsletter"));
			return false;
		}// else f.submit();
	},
	validaFormAvisos:function() {
		var f = document.forms.avisos;
		var ok = true;

		if (!regularExpressions.isValidEmail(f.email.value)){
			formsValidations.markError(f.email.parentNode, true);
			ok = false;
		}else  formsValidations.markError(f.email.parentNode, false);

		if (!f.acepto.checked){
			formsValidations.markError(f.acepto.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.acepto.parentNode, false);
		if(!ok){
			formsValidations.setMsgError(document.getElementById("avisos"));
			return false;
		} else f.submit();
	},
	validaFormRecomendar:function(){
		var f = document.forms.recomendar;
		var ok = true;
		if (f.nombre.value == ""){
			formsValidations.markError(f.nombre.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.nombre.parentNode, false);
		if (!regularExpressions.isValidEmail(f.email.value)){
			formsValidations.markError(f.email.parentNode, true);
			ok = false;
		}else  formsValidations.markError(f.email.parentNode, false);

		if (!regularExpressions.isValidEmail(f.email2.value)){
			formsValidations.markError(f.email2.parentNode, true);
			ok = false;
		}else  formsValidations.markError(f.email2.parentNode, false);

		if (f.comentarios.value == ""){
			formsValidations.markError(f.comentarios.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.comentarios.parentNode, false);

		if(!ok){
			formsValidations.setMsgError(document.getElementById("recomendar"));
			return false;
		}
	},
	validaFormRRHH:function(){
		var f = document.forms.formRRHH;
		var ok = true;
		if (f.nombre.value == ""){
			formsValidations.markError(f.nombre.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.nombre.parentNode, false);
		if (f.apellidos.value == ""){
			formsValidations.markError(f.apellidos.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.apellidos.parentNode, false);


		if (!regularExpressions.isValidEmail(f.email.value)){
			formsValidations.markError(f.email.parentNode, true);
			ok = false;
		}else  formsValidations.markError(f.email.parentNode, false);


		if (f.attachCarta.value == ""){
			formsValidations.markError(f.attachCarta.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.attachCarta.parentNode, false);

		if (f.attachCV.value == ""){
			formsValidations.markError(f.attachCV.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.attachCV.parentNode, false);


		if (!f.acepto.checked){
			formsValidations.markError(f.acepto.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.acepto.parentNode, false);

		if(!ok){
			formsValidations.setMsgError(document.getElementById("formRRHH"));
			return false;
		}
	},
	validaFormIncidencias:function(){
		var f = document.forms.incidencias;
		var ok = true;
		/*if (f.incidencia.value == ""){
			formsValidations.markError(f.incidencia.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.incidencia.parentNode, false);
		if (f.estancia.value == ""){
			formsValidations.markError(f.estancia.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.estancia.parentNode, false);

		if (f.loc.value == ""){
			formsValidations.markError(f.loc.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.loc.parentNode, false);


		if (f.tipo.selectedIndex == 0){
			formsValidations.markError(f.tipo.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.tipo.parentNode, false);*/

		if (f.motivo.value == ""){
			formsValidations.markError(f.motivo.parentNode, true);
			ok = false;
		}else formsValidations.markError(f.motivo.parentNode, false);



		if(!ok){
			formsValidations.setMsgError(document.getElementById("incidencias"));
			return false;
		}
	}
}

var regularExpressions = {
	isValidEmail:function (str){
		var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
		return (filter.test(str));
	},
	//esCadena:function(c){ return /^[0-9A-Z/\\t\n\r\s]+$/.test(c); },
	esCadena:function(c) { return /^[0-9A-Za-z-\/Ññ?É?ÓÚáéíóúÜüÄäËë?ïÖö´,'/\\t\n\r\s]+$/.test(c); },
	esAlfabetico:function(c){return /^([a-zA-Z])+$/.test(c);},
	esNumero:function(c){return /^[0-9]+$/.test(c);},
	esTelefono:function(c){return /^[0-9\s\+\-)(]+$/.test(c)}

}


var load={
	existeId:function(cid){
		if(document.getElementById(cid)) return true;
		return false;
	},
	setEvents:function(){
		if(load.existeId("home")){
			curves.setSideBarHome()
			fixes.sideBarHome();
		}
		if(load.existeId("sideBar") && !load.existeId("home") ) curves.setSideBar();
		if(load.existeId("promo_categ")){
			 fixes.formCategory();
			 fixes.hrefMap();
		}
		//if(load.existeId("gMaps")) googleMaps.mapa()
		if(load.existeId("infoSolicitud")) pickerForm.showCampos()
		if(load.existeId("blink")) parpadeante.parpadear()
		if(load.existeId("listaCategoria")) calidades.showCategory()
		if(load.existeId("pickerTipoVivienda")) pickerVivienda.selectTipo()
		if(load.existeId("galeriaImg")) galImg.showcase(document.getElementById("galeriaImg"));
		if(load.existeId("infoSolicitud")) document.getElementById("infoSolicitud").onsubmit =  formsValidations.validaFormInfoSolicitud;
		if(load.existeId("sugerencias")) document.getElementById("sugerencias").onsubmit =  formsValidations.validaFormSugerencias;
		if(load.existeId("formsNewsletter")) document.getElementById("formsNewsletter").onsubmit = function() {return formsValidations.validaFormNewsletter("");};
		if(load.existeId("formsNewsletter2")) document.getElementById("formsNewsletter2").onsubmit = function() {return formsValidations.validaFormNewsletter("2");};
		if(load.existeId("avisos")) document.getElementById("avisos").onsubmit =  formsValidations.validaFormAvisos;
		if(load.existeId("recomendar")) document.getElementById("recomendar").onsubmit =  formsValidations.validaFormRecomendar;
		if(load.existeId("formRRHH")) document.getElementById("formRRHH").onsubmit =  formsValidations.validaFormRRHH;
		if(load.existeId("incidencias")) document.getElementById("incidencias").onsubmit =  formsValidations.validaFormIncidencias;
	}
}


if(W3CDOM) e.addEvent(window, "load", load.setEvents, false);
