/*
Hub central para validaciones de formularios.
Cada formulario html (carpeta templates) agrega sus campos a validar por medio de función f_addField()
31/05/05 Ismael Celis
*/
// array de campos a validar (con parámetros para formCheck)
campos = [];
// lógica extra por formulario (nombres de funciones)
f_extras = [];	
// funcs. a ejecutar en window.onload
f_onload = [];
// func. para setear mailto, subject, remitente (se ejecuta en window.onLoad)
function setField(campo,valor){
	var agrega = function(){
		if(campo == "titulo")
			$(val_settings[campo]).innerHTML = valor;
		else
			$(val_settings[campo]).value = valor;
	}
	agregaOnLoad(agrega);
}
// cambia value de field en tienpo real
function changeField(campo,valor){
	if(campo == "titulo")
		$(val_settings[campo]).innerHTML = valor;
	else
		$(val_settings[campo]).value = valor;
}
// func. para agregar funcion extra
function agregaLogica(nombreFunc){
	f_extras.push(nombreFunc);
}
// func. para agregar lógica onLoad
function agregaOnLoad(nombreFunc){
	f_onload.push(nombreFunc);
}
// func. para agregar array de parámetros a campos[]
function f_addField(){
	/*if(!f_addField.arguments.length) return;
	var arr = [];
	for(var i=0;i<f_addField.arguments.length;i++){
		arr.push(f_addField.arguments[i]);
	}
	campos.push(arr);*/
}
// Loop en campos y validación de cada uno

function valida(){
	var validado = true;
	if(!campos.length) return;
	
	//alert("veces validar "+ campos.length)
	for(var i=0; i < campos.length; i++){
		var arr = [];
		arr = campos[i];

		if (validado){
			theField = $(arr[0]);// en /include/js/global.js
			//alert("checkField("+theField+","+arr[1]+","+arr[2]+","+arr[3]+","+arr[4]+")");
			validado = checkField(theField,arr[1],arr[2],arr[3],arr[4]);
			if(!validado){enfoca(theField);}// Cambia de tab
		}
	}

	for(var o = 0;o<f_extras.length;o++){
		if (validado)
			validado = f_extras[o]();
	}

	if(validado){
		var formid = "form1";//default
		if(val_settings["formId"])
			formid = val_settings["formId"];
		var f = $(formid);
		f.action = val_settings["action"];
		f.submit();
	}
	return validado;
}
// update 18/07/2005
// fns. recursiva para encontrar y mostrar elemento "Item" de elemento
// se usa para "selects" que dan problemas de otro modo
function focusItem(elemento)
{
	if(elemento.className && elemento.className.indexOf(prods_settings["itemClass"]) != -1){
		//prods_items[1].className = prods_settings["itemClass"]+" hidden";
		// encuentra elemento en prods_items para prenderlo (y apagar los otros)
		for(var i=0;i<prods_items.length;i++){
			if(prods_items[i] == elemento){
				prods_showItem(i);
				return true;
			}
		}
		return true;
	}
	if(elemento.parentNode)focusItem(elemento.parentNode);//recursión
	return false;
}
// FIN update 18/07/2005
// funcion para mostrar el tab de un elemento de form
var last_focused_parent = false;
var last_focused_class = false;
function enfoca(theField)
{
	if(theField[prods_settings["idFormElements"]] > -1)
		prods_showItem(theField[prods_settings["idFormElements"]]);
	if(theField.nodeName != "SELECT")//Selects dan problemas en IE al enfocar
		theField.focus();
	else
		focusItem(theField);
	if(last_focused_parent){
		last_focused_parent.className = last_focused_class;
	}
	if(enfoca.arguments[1] != undefined){//otro objeto a enfocar
		var padre = $(enfoca.arguments[1]);
		last_focused_class = padre.className;//guarda clase de elemento
		padre.className += " focus";
		last_focused_parent = padre;
	}
}
function resetthis(){
	$(val_settings["formId"]).reset();	
}
function backthis(){
	history.back();
}
// ejecuta funcs. opcionales onload
window.onload = function(){
	var t = f_onload.length;
	if(t){
		for(var i=0;i<t;i++){
			f_onload[i]();
		}
	}
}
// agrega func. initPage() de productos_show.js
agregaOnLoad(initPage);
// Agrega fns para prender botón "enviar"
/* 
Agrega onClick a último item (tab) en array prods_items (en /include/js/productos_show.js)
*/
showEnviar = function()
{	if($("enviar") && $("siguiente"))
	if(prods_items && prods_items.length < 2){
		$("enviar").style.display = "inline";
		$("siguiente").style.display = "none";
	}
	else if(prods_items.length > 1){
		$("enviar").style.display = "none";
		$("siguiente").style.display = "inline";
		var aid = "menuItem"+(prods_items.length-1);
		var it = $(aid);
		// obtiene onCLick previo
		var cl = it.onclick;
		// agrega otro trigger
		it.onclick = function(){
			//alert(this.idx);
			prods_showItem(this.idx);
			$("enviar").style.display = "inline";
			$("siguiente").style.display = "none";
		}
	}
}
agregaOnLoad(showEnviar);
// pasa a siguiente paso (si es que hay)
siguiente = function()
{if($("enviar") && $("siguiente"))
	$("siguiente").onclick = function(){
		var lastsel = ITEM_SELECTED;
		if(true){//if(valida())
			if(prods_items.length-1 > ITEM_SELECTED)	
				prods_showItem(ITEM_SELECTED+1);
			if(lastsel+1 == prods_items.length-1){
				$("enviar").style.display = "inline";
				this.style.display = "none";
			}
		}
	}
	
}
agregaOnLoad(siguiente);
