
var formObjectFocused = false;

function ucwords( str ) {
	return (str+'').replace(/^(.)|\s(.)/g, function ( $1 ) { return $1.toUpperCase( ); } );
}

function submitForm(objName){
	if(eval("validate"+ucwords(objName)+"()")){
        var form = document.getElementById(objName+"Form");
        if(form){
            if(form.onsubmit()){
                form.submit();
            }
        }
	}
}

function exitWithoutSave(){
	var idElement = document.getElementById("id");
	if(idElement){
		var id = idElement.value;
		if(id != ""){
			if(formIsChanged()){
				if(!confirm("Los datos que has modificado no se guardar\u00e1n. \u00BFRealmente quieres salir?")){
					return false;
				}
			}
		}
	}
	return true;
}

function cancelForm(){
	if(exitWithoutSave()){
		if(window.parent == window){
			history.go(-1);
		}else{
			self.close();
		}
	}
}

function cancelFormPopUp(){
	if(exitWithoutSave()){
		self.close();
	}
}

function clearDefaultValue(formObject, defaultValue) {
	if (formObject.value == defaultValue) {
		formObject.value = "";
	}
}
	
function resetDefaultValue(formObject, defaultValue) {
	if (formObject.value == "") {
		formObject.value = defaultValue;
	}
}

function ltrim ( str, charlist ) {
    charlist = !charlist ? ' \xA0' : (charlist+'').replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
    var re = new RegExp('^[' + charlist + ']+', 'g');
    return (str+'').replace(re, '');
}

function isEmptyField(formObjectName, defaultValue){
	if(defaultValue == null) defaultValue = "";
	var empty = false;
	var formObject = document.getElementById(formObjectName);
	clearError(formObjectName);
	if(formObject && !formObject.disabled){
		if(!isInLangGrouperDisabled(formObjectName)){
			formObject.value = ltrim(formObject.value);
			if(formObject.value==defaultValue){
				empty=true;
				showError(formObjectName, "Este campo es obligatorio.");
				setFocus(formObject);
			}
		}
	}
	return empty;
}

function isEmptyAreaWysiwyg(formObjectName){
	var empty = false;
	var formObject = document.getElementById(formObjectName+"_ifr");
	var paragraphs = formObject.contentDocument.getElementById('tinymce').getElementsByTagName('p');
	var paragraph = paragraphs[0];
	clearError(formObjectName);
	if (paragraphs.length==1 && (paragraph.innerHTML=='<br>' || paragraph.innerHTML=='<br mce_bogus="1">')){
		empty=true;
		showError(formObjectName, "Este campo es obligatorio.");
		setFocus(formObject);
	}	
	return empty;
}

function isEmptyDate(formObjectName){
	var empty = false;
	var day = document.getElementById(formObjectName+"Day");
	var month = document.getElementById(formObjectName+"Month");
	var year = document.getElementById(formObjectName+"Year");
	clearError(formObjectName);
	if(day.value=="" || month.value=="" || year.value==""){
		empty=true;
		showError(formObjectName, "Este campo es obligatorio.");
		setFocus(day);		
	}
	return empty;
}

function isEmptyRadioButton(formObjectName){
	//Jorgito: Se utiliza getElementsByName y no ById !!
	//TODO: repasar el setFocus del error
	var empty = true;
	var formObject = document.getElementsByName(formObjectName);
	clearError(formObjectName);
	if(formObject && !formObject.disabled){
		var num = formObject.length;
		var i = 0;
		var checked = false;
		while ((i < num) && !checked){
			if (formObject[i].checked == true){	
				empty = false;
				checked = true;
			}else{
				i++;
			}
		}
	}
	if (empty === true ) {
		showError(formObjectName, "Este campo es obligatorio.");
		setFocus(formObject[0]);
	}
	return empty;	
}

function isEmptyURL(formObjectName){
	var empty = false;
	var formObject = document.getElementById(formObjectName);
	clearError(formObjectName);
	if(formObject && !formObject.disabled){
		if(formObject.value=="" || formObject.value=="http://"){
			empty=true;
			showError(formObjectName, "Este campo es obligatorio.");
			setFocus(formObject);
		}
	}
	return empty;
}

function isEmptyFile(formObjectName){
	var empty = false;
	var element = document.getElementById(formObjectName+"Dummy");	
	clearError(formObjectName);
	if(element){
		empty=true;
		showError(formObjectName, "Este campo es obligatorio.");
		var form = document.getElementById(formObjectName+"Form");
		if(form){
			setFocus(form.elements["userfile"]);
		}
	}
	return empty;
}

function isUnique(objectName, formObjectName){
	var formObject = document.getElementById(formObjectName);
	if(formObject){
		var selfId = "";
		var idObject = document.getElementById("id");
		if(idObject) selfId = idObject.value;
		var paramsGET = "?func=isUnique&objectName="+objectName+"&property="+formObjectName+"&selfId="+selfId+"&value="+formObject.value;
		var urlServlet = "/common/engine/resources/servlet.php";
		callAjax(isUniqueCallback, paramsGET, urlServlet);
	}
}
function isUniqueCallback(xmlhttp){
	var response = xmlhttp.responseXML.getElementsByTagName("response")[0].getAttribute("value");
	var property = xmlhttp.responseXML.getElementsByTagName("data")[0].getAttribute("property");
	if(response=="1"){
		clearError(property);
		document.getElementById(property+"_unique").value = "1";
	}else{
		showError(property, "Este campo ya existe en nuestra base de datos.");
		document.getElementById(property+"_unique").value = "0";
	}
}

function isEmptySelectNtoN(formObjectName){
	var numRows = document.getElementById(formObjectName+"_numRows").value;
	var empty = true;
	clearError(formObjectName);
	for (var i=0; i<numRows; i++){
		var id = formObjectName+i;
		var select = document.getElementById(id);
		if(empty && select){
			empty = isEmptyField(id) && empty;
		}
	}
	if(empty) showError(formObjectName, "Este campo es obligatorio.");
	return empty;
}

function isEmptyYouTube(formObjectName){
	clearError(formObjectName);
	var isEmpty = document.getElementById(formObjectName+"Empty").value;
	var empty = (isEmpty=="1");
	if(empty) showError(formObjectName, "Este campo es obligatorio.");
	return empty;
}

function setFocus(formObject){
	if(typeof(getFieldGrouper) =='function'){
		var grouper = getFieldGrouper(formObject.name);
		if(grouper != null){
			new Grouper().setDisplay(grouper, true);
		}
	}
	if(!formObjectFocused){
		formObject.focus();	
		formObjectFocused = true;
	}
}

function showError(formObjectName, text){
	var formObject = document.getElementById(formObjectName+"Error");
	if(formObject) formObject.innerHTML=text;
	formObject = document.getElementById(formObjectName);
	if(!formObject){
		formObject = document.getElementById(formObjectName+"Legend");
	}
	if(formObject){
		if(text==""){
			formObject.className = "";
		}else{
			formObject.className = "incorrect";
		}
	}
}
		
function clearError(formObjectName){
	showError(formObjectName, "");
}

function checkTelephone(formObjectName, defaultValue){
	if(defaultValue == null) defaultValue = "";
	var ok = true;
	var formObject = document.getElementById(formObjectName);
	if(!formObject.disabled){
		var value = formObject.value;
		if(value != defaultValue){
			formObject.value = clearSpaces(value);
			value = formObject.value;
			if(value.indexOf("+")==0){
				value = value.substr(1);
			}
			if(isNaN(value) || value.length<9){
				showError(formObjectName, "Tel&eacute;fono incorrecto.");
				setFocus(formObject);				
				ok=false;
			}else{
				clearError(formObjectName);
			}
		}
	}
	return ok;
}

function checkEmail(formObjectName, defaultValue){
	if(defaultValue == null) defaultValue = "";
	var ok = true;
	var formObject = document.getElementById(formObjectName);
	if(!formObject.disabled){	
		var value = formObject.value;
		if(value != defaultValue){
			var emailChecker=/^[A-Za-z0-9][\w-.]+[A-Za-z0-9]@[A-Za-z0-9]?([\w-.]+[A-Za-z0-9]\.)+([A-Za-z]){2,4}$/i;
			if(emailChecker.test(value)){
				//clearError(formObjectName);	
			}else{
				showError(formObjectName, "E-mail incorrecto.");
				setFocus(formObject);				
				ok=false;
			}
		}
	}
	return ok;
}

function checkPassword(formObjectName, defaultValue){
	if(defaultValue == null) defaultValue = "";
	var ok = true;
	var password1 = document.getElementById(formObjectName);
	if(!password1.disabled){
		var value = password1.value;
		if(value != defaultValue){
			//TODO: Poner mas validaciones.
			if(value.length < 4 || value.length > 12){
				showError(formObjectName+"Bis", "##ERROR_SHORTPASSWORD##");
				setFocus(password1);			
				ok=false;
			}else{
				var password2 = document.getElementById(formObjectName+"Bis");
				if(password2){
					clearError(formObjectName+"Bis");
					if(password1.value != password2.value){
						ok=false;
						showError(formObjectName+"Bis", "Las dos contrase&ntilde;as no coinciden.");
						setFocus(password1);		
					}
				}
			}
		}
	}
	return ok;
}

function checkNumber(formObjectName, defaultValue){
	if(defaultValue == null) defaultValue = "";
	var ok = true;
	var formObject = document.getElementById(formObjectName);
	if(!formObject.disabled){
		var value = formObject.value;
		value = value.replace(",", ".");
		if(value != defaultValue){
			formObject.value = value;
			if(isNaN(value)){
				showError(formObjectName, "N&uacute;mero incorrecto.");
				setFocus(formObject);			
				ok=false;
			}else{
				clearError(formObjectName);
			}
		}
	}
	return ok;
}

function checkMoney(formObjectName, defaultValue){
	if(defaultValue == null) defaultValue = "";
	var ok = true;
	var formObject = document.getElementById(formObjectName);
	if(!formObject.disabled){	
		var value = formObject.value;
		if(value != defaultValue){
			value = value.replace(",", ".");
			if(value.indexOf(".") >=0){
				valueSP = value.split(".");
				value = valueSP[0]+"."+valueSP[1].substr(0,2);
			}
			formObject.value = value;
			if(isNaN(value) || value < 0){
				showError(formObjectName, "Importe incorrecto.");
				setFocus(formObject);			
				ok=false;
			}else{
				clearError(formObjectName);
			}
		}
	}
	return ok;
}

function checkIGTZ(formObjectName, defaultValue){
	if(defaultValue == null) defaultValue = "";
	var ok = checkNumber(formObjectName);
	if(ok){
		var formObject = document.getElementById(formObjectName);
		if(!formObject.disabled){
			var value = formObject.value;
			if(value != defaultValue){
				if(value.indexOf(".") >=0){
					valueSP = value.split(".");
					value = valueSP[0];
				}
				formObject.value = value;
				if(isNaN(value) || value < 1){
					showError(formObjectName, "El n&uacute;mero ha de ser mayor de cero.");
					setFocus(formObject);				
					ok=false;
				}else{
					clearError(formObjectName);
				}
			}
		}
	}
	return ok;
}

//Retorna true si year es bisiesto
function isLeapYear(year) {
	if (year < 100)
		var end = year + 2000;
	else
		var end = year ;

	if (end % 4 != 0)
		return false;
	else {
		if (end % 100 == 0)	{
			if (end % 400 == 0) { return true; }
			else { return false; }
		}
		else { return true; }
	}
}

//Formato valido: dd/mm/aaaa
function checkDateText(text) {
	day=text.split("/")[0];
	month=text.split("/")[1];
	year=text.split("/")[2];
	if(isLeapYear(year)) february=29;
	else february=28;
	if (text != "") {
		if (((text.charAt(2) != "/") && (text.charAt(3) != "/")) || ((text.charAt(4) != "/") && (text.charAt(5) != "/") && (text.charAt(6) != "/"))) return false;	//Mal formado: dd/mm/aaaa
		if ((month<1) || (month>12)) return false;	//El mes introducido no es válido
		if ((month==2) && ((day<1) || (day>february))) return false;	//El día introducido no es válido
		if (((month==1) || (month==3) || (month==5) || (month==7) || (month==8) || (month==10) || (month==12)) && ((day<1) || (day>31))) return false;	//El día introducido no es válido
		if (((month==4) || (month==6) || (month==9) || (month==11)) && ((day<1) || (day>30))) return false;	//El día introducido no es válido
		if (year<0) return false; //El año introducido no es valido
	}
	return true;
}

function ucfirst( str ) {
    var f = str.charAt(0).toUpperCase();
    return f + str.substr(1, str.length-1);
}

function clearSpaces(string){
	while (string.indexOf(" ")>-1){
		string = string.replace(" ", "");
	}
	return string;
}

//PRE: UTC in seconds
function UTCtoString(UTC){
	var months = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
	var date = new Date(UTC*1000);
	var d = date.getDate();
	var m = date.getMonth();
	var y = date.getFullYear();
	var string = d+" de "+months[m]+" del "+y;
	return string;
}

function callbackSelect(xmlhttp){
	var elements = xmlhttp.responseXML.getElementsByTagName("data");
	//Con los cambios de CHARSETs en IE hubo problemas con el XML. Por eso
	//compruebo antes la longitud
	if(elements.length > 0){
		var fieldId = elements[0].getAttribute("fieldId");
		var defaultValue = xmlhttp.responseXML.getElementsByTagName("data")[0].getAttribute("defaultValue");
		var selectElement = document.getElementById(fieldId);
		var options = xmlhttp.responseXML.getElementsByTagName("option");
		if(options.length==0){
			/* Comento �sta linia para conseguir que si un SELECT es obligatorio
			 * pero al refrescarse no tiene valores, no se valide y no se pueda continuar. 
			 */
			//selectElement.disabled = false;
		}else{
			for(i=0; i< options.length; i++){
				var id = options[i].getAttribute("id");
				var label = decodeURI(options[i].getAttribute("label"));
				var currentId = selectElement.options.length;
				selectElement.options[currentId] = new Option(label, id);
				if(defaultValue==id) {
					selectElement.selectedIndex = currentId;
				}else{
					if(options.length == 1){
						selectElement.selectedIndex = currentId;
						if(selectElement.onchange) selectElement.onchange();
					}
				}
			}
			selectElement.disabled = false;
		}
	}
}

function getSelectText(id){
	var select = document.getElementById(id);
	var option = select.options[select.selectedIndex];
	return option.text;
}

//Borra las filas de una tabla
function emptyTable(tableName){
	var table = document.getElementById(tableName);
	while(table.rows.length > 0){
		table.deleteRow(0);
	}
}

function isChanged(formElementId){
	var element = document.getElementById(formElementId);
	if(element){
		var elementBack = document.getElementById(formElementId+"_bck");
		if(elementBack){
			return (element.value != elementBack.value);
		}
	}
	return false;
}

function isChangedcheckbox(formElementId){
	var element = document.getElementById(formElementId);
	if(element){
		var elementBack = document.getElementById(formElementId+"_bck");
		if(elementBack){
			return ((element.checked && elementBack.value == "0") || (!element.checked && elementBack.value == "1"));
		}
	}
	return false;
}

function isChangedDate(formElementId){
	var day = document.getElementById(formElementId+"Day");
	var month = document.getElementById(formElementId+"Month");
	var year = document.getElementById(formElementId+"Year");
	if(day && month && year){
		var elementBack = document.getElementById(formElementId+"_bck");
		if(elementBack){
			day = day.value;
			month = month.value;
			year = year.value;
			if(day < 10) day = "0"+day;
			if(month < 10) month = "0"+month;
			var value = year+"-"+month+"-"+day;
			return (elementBack.value.indexOf(value) != 0);
		}
	}
	return false;
}

function typeToString(value){
	if(value == 2){
		return "image";
	}else if(value == 1){
		return "document";		
	}else{
		return "";
	}
}

function inputYouTubeFilled(formObjectName){
	var formObject = document.getElementById(formObjectName+"Empty");
	if(formObject){
		formObject.value = 0;
	}
}

function isInLangGrouperDisabled(formObjectName){
	var isIn = false;
	var lagGrouperFields = document.getElementById("forminfo.langGrouper");
	if(lagGrouperFields){
		lagGrouperFields = lagGrouperFields.value;
		var index = lagGrouperFields.indexOf(","+formObjectName+",");
		if(index >= 0){
			var lang = formObjectName.substr(formObjectName.length-2, 2);
			var langCheckbox = document.getElementById("lang"+lang);
			if(langCheckbox){
				return (!langCheckbox.checked);
			}
		}
	}
	return isIn;
}

function getNodeContent(node){
	if(node.textContent){
		return node.textContent;
	}else{
		return node.text;
	}
}

function openEditorPopUp(attributeName, objectName, height, width){
	var childWindow = window.open("editorPopUp.html?attributeName="+attributeName+"&objectName="+objectName+"&ABM=new","_blank", "height="+height+",width="+width+",status=yes,scrollbars=yes,toolbar=no,menubar=no,location=no");
	if (childWindow.opener == null) childWindow.opener = self;
}
