function showAlertaError() {
	var alertaErrorElem=document.getElementById("alertaError");
	if(alertaErrorElem) {
		alertaErrorElem.style.display="";

		var indxDummyLink=new String(document.location).indexOf("#dummy");
		if (indxDummyLink!=-1) {
			// #dummy has to be removed from url and #alertaLink added
			document.location=new String(document.location).substring(0,indxDummyLink)+"#alertaLink";
		} else {
			if(new String(document.location).indexOf("#alertaLink")==-1) {
				document.location=document.location + "#alertaLink";
			}
		}
	}
}

// gets filled in addErrorMessage and reset in resetAlertaError
var highlightedInputs=new Object();

/*  TODO(Sergion+Rudi): 
	No se reestablecen las clases originales de los elementos modificados (inputs, checks, divs, spans, etc).
	Ejemplo: Con un error <div class="Etiqueta"> pierde la clase para quedar en <div class="InputError">
	Se podria crear otro objecto con las clases de los elementos antes de perderla
*/

// hides alerta div and de-highlights bad input fields
function resetAlertaError() {
	var indxAlertaLink=new String(document.location).indexOf("#alertaLink");
	if (indxAlertaLink!=-1) {
		// #alertaLink has to be removed from url, otherwise the browser doesn't
		// jump to top of screen in case user presses "submit" button a second time.
		// But if we remove it the browser reloads the page, so #dummy gets added instead
		document.location=new String(document.location).substring(0,indxAlertaLink)+"#dummy";
	}

	//hide alerta Correcto
	hideDiv("alertaCorrecto");
	
	var alertaErrorElem=document.getElementById("alertaError");
	if(alertaErrorElem) {
		alertaErrorElem.style.display="none";

		// hide: "Los campos en rojo deben corregirse"
		hideDiv("AlertaErrorCampos");
		
		var alertasListaElem=document.getElementById("AlertasLista");
		if(alertasListaElem) {
			alertasListaElem.innerHTML="";

			for(var key in highlightedInputs) {
				someInput=highlightedInputs[key];
				if(someInput.type=="text" || someInput.type=="password" || someInput.type=="textarea") {
					someInput.className="";
					if(someInput.parentNode.tagName=="LABEL") {
						someInput.parentNode.className="";
					}

				} else if(someInput.parentNode!=null) {
					someInput.parentNode.className="";
					setLabelClass(someInput,"");
				}
			}
			highlightedInputs=new Object();
		}

		// hide: lista de errores
		hideDiv("alertasLista");
	}
}

// Shows an error message and hides all other alert-divs.
// Also highlights bad input field(s).
// inputs-parameter can be a single html-field or an array of fields
// message can be null or not passed, then no error message is displayed and only
// input field(s) are highlighted
function addErrorMessage(inputs,message) {
	var alertasListaElem=document.getElementById("AlertasLista");
	if(alertasListaElem) {
		if(arguments.length>1 && message!=null) {
			alertasListaElem.innerHTML=alertasListaElem.innerHTML + "<li>"+message+"</li>";

			// show: lista de errores
			showDiv("AlertasLista");

			showAlertaError();
		}
		if(inputs!=null && someInput != "undefined") {
			if(inputs.length==null || inputs.tagName=="SELECT") {
				// inputs is not an array, convert it to array
				var inputTmp=inputs;
				inputs=new Array(1);
				inputs[1]=inputTmp;
			}
			for(var i=0;i<inputs.length;i++) {
				var someInput=inputs[i];
				if(someInput != null && someInput != "undefined") {
					if(someInput.type=="text" || someInput.type=="password" || someInput.type=="textarea") {
						someInput.className="InputError";
						setLabelClass(someInput,"LabelFormError");

					} else {
						// SELECTs, CHECKBOXES AND RADIOBOXES are wrapped inside <LABEL><SPAN>..</SPAN></LABEL>
						// important <LABEL><DIV></DIV></LABEL> doesn't work, because parentNode doesn't find the <LABEL>
						if(someInput.parentNode.tagName=="SPAN" || someInput.parentNode.tagName=="DIV") {
							someInput.parentNode.className="InputError";
							setLabelClass(someInput,"LabelFormError");
						}
					}

					// show: "Los campos en rojo deben corregirse"
					showDiv("AlertaErrorCampos");					

					highlightedInputs[someInput.name]=someInput;
				}
			}
		}
  		// deactivate any alerta that is not error
  		hideDiv("alertaAviso");
		hideDiv("alertaCorrecto");
		
	} else if(arguments.length>1 && message!=null) {
		alert(message);
	}
}

// shows a success message and hides all other alert-divs
function addSuccessMessage(message) {
	resetAlertaError();
	var alertaTexto=document.getElementById("alertaCorrectoTexto");
	if(alertaTexto) {
		alertaTexto.innerHTML=alertaTexto.innerHTML + message;

		showDiv("alertaCorrecto");

		// deactivate any alerta that is not success
		hideDiv("alertaError");		
		hideDiv("alertaAviso");		
	} else {
		alert(message);
	}
}

// shows a aviso message and hides all other alert-divs
function addInfoMessage(message) {
	resetAlertaError();
	var alertaTexto=document.getElementById("alertaAvisoTexto");
	if(alertaTexto) {
		alertaTexto.innerHTML=alertaTexto.innerHTML + message;

		showDiv("alertaAviso");

		// deactivate any alerta that is not success
		hideDiv("alertaError");
		hideDiv("alertaCorrecto");		
	} else {
		alert(message);
	}
}

// tries to set input's class to given value. If input is not of type
// LABEL tries to set class of its parentNode (and so forth recursively).
//
// If no LABEL is found via parentNodes a LABEL having the id someInput.name+"_LABEL" is used.
function setLabelClass(someInput,theClass) {
	if(!setLabelClassUsingParents(someInput,theClass)) {
		// label wasn't found, so try getting it via ID
		var someLabel=document.getElementById(someInput.name+"_LABEL");
		if(someLabel!=null) {
			someLabel.className=theClass;
		}
	}
}

function setLabelClassUsingParents(someInput,theClass) {
	if(someInput!=null) {
		if(someInput.tagName=="LABEL") {
			someInput.className=theClass;
			return true;
		} else {
			return setLabelClassUsingParents(someInput.parentNode,theClass);
		}
	}
	return false;
}

// Oculta el div con id pasado como parametro
function hideDiv(idDiv) {
	var idDivElem=document.getElementById(idDiv);
	if(idDivElem) {
		idDivElem.style.display="none";
	}
}

// Muestra el div con id pasado como parametro
function showDiv(idDiv) {
	var idDivElem=document.getElementById(idDiv);
	if(idDivElem) {
		idDivElem.style.display="";
	}
}

