/**
* Fun??o utilizada como callback de janelas que foram criadas com o objectivo
* de selecionar algum bean.
* Possui as informa??es necess?rias para a janela saber como deve preencher o
* formu?rio que a chamou
*/
function selecionarCallbackObject(valueInput, labelInput, valueType, button, buttonUnselect, callback) {
	this.valueInput = valueInput;
	this.labelInput = labelInput;
	this.valueType = valueType;
	this.button = button;
	this.buttonUnselect = buttonUnselect;
	this.callback = callback;
}

function imprimirVoltar() {
	if (top.cadastrar) {
		document.write("<input type='button' value='Voltar' onclick='refreshPai()'>");
	}
}

function refreshPai() {
	//top.opener.document.forms[0].ACAO.value = top.cadastrar;
	//alert(top.opener.document.forms[0].ACAO.value);
	top.opener.document.forms[0].submit();
	top.close();
}

/**
 * Imprime o bot?o selecionar onde for necess?rio
 * O bot?o selecionar s? ? impresso onde a classe for da hierarquia da classe que pediu para selecionar
 */
function imprimirSelecionar(listaClasses, valor, label) {
	//alert('valor '+valor+'  label '+label+'    listaclasses '+listaClasses);
	//alert(top.selecionarCallback);
	if (top.selecionarCallback) {
		//document.write("dd");
		var ok = false;
		for (i in listaClasses) {
			var clazz = listaClasses[i];
			if (clazz == top.selecionarCallback.valueType) {
				ok = true;
			}
		}
		if (ok) {
			//document.write("<a href="javascript:alert('Info: valor="+valor+" label="+label+"')">info</a>&nbsp;");
			document.write("<button type=\"button\" onclick=\"selecionar('" + valor + "','" + label + "')\" class=\"botao_pequeno\">selecionar</button>");
		}
		//DEBUG ----- c?digo abaixo ? debug descomente se nao aparecer o botao selecionar
		//else {
		//	alert('A classe n'+listaClasses[0]+' não é a mesma ou uma subclasse de n'+top.selecionarCallback.valueType);
		//}
	}
}

function selecionar(valor, label, forcombo) {
	var isNN = navigator.appName.indexOf("Netscape") != -1;
	if (top.selecionarCallback) {
		if (forcombo) {
			var callback = top.selecionarCallback;
			var callbackcallback = callback.callback;
			var onchangeFunction = callback.valueInput.onchange;
			//callback.valueInput.value = valor;
			//alert(callback.valueInput.name);
			var combo = callback.valueInput;
			var options = combo.options;
			var op = new Option(label, valor, false, true);
			var isNN = navigator.appName.indexOf("Netscape") != -1;
			if (isNN) {
				options.add(op);
			} else {
				callbackcallback(label, valor);
			}
			//options[options.length++].text = label;
			//combo.value = valor;
			if (onchangeFunction) {
				onchangeFunction();
			}
			if (isNN) {
				setTimeout("top.close()", 500);
			} else {
				top.close();
			}
		} else {
			var callback = top.selecionarCallback;
			var onchangeFunction = callback.labelInput.onchange;
			callback.valueInput.value = valor;
			callback.labelInput.value = label;
			if (onchangeFunction) {
				onchangeFunction();
			//alert(onchangeFunction);
			}
			callback.button.style.display = "none";
			callback.buttonUnselect.style.display = "";
			if (isNN) {
				setTimeout("top.close()", 500);
			} else {
				top.close();
			}
		}
	}
}

function preparaHtmlArea(editorurl) {
	_editor_url = editorurl;
	var win_ie_ver = parseFloat(navigator.appVersion.split("MSIE")[1]);
	if (navigator.userAgent.indexOf("Mac") >= 0) {
		win_ie_ver = 0;
	}
	if (navigator.userAgent.indexOf("Windows CE") >= 0) {
		win_ie_ver = 0;
	}
	if (navigator.userAgent.indexOf("Opera") >= 0) {
		win_ie_ver = 0;
	}
	if (win_ie_ver >= 5.5) {
		document.write("<scr" + "ipt src=\"" + editorurl + "editor.js\"");
		document.write(" language=\"Javascript1.2\"></scr" + "ipt>");
	} else {
		document.write("<scr" + "ipt>function editor_generate() { return false; }</scr" + "ipt>");
	}
	//alert(_editor_url);
}

function limparCombo(combo, includeblank, holdValue) {
	pararEm = 0;
	var remove = 1;
	if (combo.type == "select-multiple") {
		holdValue = false;
	}
	while (combo.options.length > pararEm + remove - 1) {
		//alert((combo.options.length -1));
		if (holdValue) {
			if (remove == 1 && holdValue != "<null>" && combo.options[combo.options.length - 1].value == holdValue) {
				remove = 2;
			}
		}
		if ((combo.options.length - remove) >= 0) {
			combo.remove((combo.options.length - remove));
		}
	}
	var op = new Option();
	op.text = " ";
	op.value = "<null>";
	combo.options.add(op);//forçar o redimensionamento do form
	combo.remove(pararEm + remove - 1);
	if (includeblank) {
		op = new Option();
		op.text = " ";
		op.value = "<null>";
		combo.options.add(op);
	}
}

function cancelReadOnly(form) {
	var elements = form.elements;
	for (var i = 0; i < elements.length; i++) {
		var element = elements[i];
		if (element.type == "button") {
			var btnforcedreadonly = element.getAttribute("forcedReadOnly");
			var original = element.getAttribute("originalreadonly");
			if (original != null && original.length > 0) {
				continue;
			}
			if (element.disabled && btnforcedreadonly == "true") {
				element.disabled = false;
			}
		} else {
			if (element.type != "hidden") {
				if (element.readOnly || element.getAttribute("readonly")) {
					var original = element.getAttribute("originalreadonly");
					if (original == null) {
						element.readOnly = false;
						if (element.className) {
							var lastClass = element.className;
							if (lastClass.lastIndexOf(" ") > 0) {
								lastClass = lastClass.substring(lastClass.lastIndexOf(" ") + 1, lastClass.length);
							}
							var disabled = lastClass.substring(lastClass.length - "disabled".length, lastClass.length);
							if (disabled == "disabled") {
								element.className = element.className.substring(0, element.className.length - lastClass.length);
							}
						}
						if (element.type == "select-one" || element.type == "select-many" || element.type == "checkbox") {
							element.disabled = false;
							if (element.type == "checkbox") {//para checkbox tem que remover o subvalue se nao, nunca conseguiremos setar o valor do checkbox para false
								var subnome = element.name + "_subValue";
								var sub = form[subnome];
								if (sub) {
									sub.parentNode.removeChild(sub);
								}
							}
						}
					}
				}
			}
		}
	}
			
	//procurar as imagens
	var images = document.images;
	for (var i = 0; i < images.length; i++) {
		var image = images[i];
		var imgforcedreadonly = image.getAttribute("forcedReadOnly");
		if ((image.disabled || image.getAttribute("disabled") == "disabled") && imgforcedreadonly == "true") {
			image.disabled = false;
			image.setAttribute("disabled", false);
		}
	}
}

var ignoreFormParameters = ["ACAO", "suppressValidation", "suppressErrors"];
function getFormParameters(form) {
	var elements = form.elements;
	var params = "";
	OUTER:
	for (var i = 0; i < elements.length; i++) {
		var el = elements[i];
		if (!el.disabled) {
			for (var j = 0; j < ignoreFormParameters.length; j++) {
				if (ignoreFormParameters[j] == el.name) {
					continue OUTER;
				}
			}
			if (el.type == "checkbox") {
				params += el.name + "=" + el.checked;
			} else { //TODO não tá suportando select-many
				params += el.name + "=" + el.value;
			}
			params += "&";
			if (el.type == "select-many") {
				alert("N\xe3o \xe9 suportado select-many na fun\xe7a\xf5 javascript getFormParameters. Implementar");
			}
		}
	}
	//alert(params);
	return params;
}
		
///////APP

var isNN = (navigator.appName.indexOf("Netscape") != -1);

function Trim(TRIM_VALUE) {
	if (TRIM_VALUE.length < 1) {
		return "";
	}
	TRIM_VALUE = RTrim(TRIM_VALUE);
	TRIM_VALUE = LTrim(TRIM_VALUE);
	if (TRIM_VALUE == "") {
		return "";
	} else {
		return TRIM_VALUE;
	}
}

function RTrim(VALUE) {
	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";
	if (v_length < 0) {
		return "";
	}
	var iTemp = v_length - 1;
	while (iTemp > -1) {
		if (VALUE.charAt(iTemp) == w_space) {
		} else {
			strTemp = VALUE.substring(0, iTemp + 1);
			break;
		}
		iTemp = iTemp - 1;
	}
	return strTemp;
}

function LTrim(VALUE) {
	var w_space = String.fromCharCode(32);
	if (v_length < 1) {
		return "";
	}
	var v_length = VALUE.length;
	var strTemp = "";
	var iTemp = 0;
	while (iTemp < v_length) {
		if (VALUE.charAt(iTemp) == w_space) {
		} else {
			strTemp = VALUE.substring(iTemp, v_length);
			break;
		}
		iTemp = iTemp + 1;
	}
	return strTemp;
}

function isNum(caractere) {
	var strValidos = "0123456789";
	if (strValidos.indexOf(caractere) == -1) {
		return false;
	}
	return true;
}

function efetuaPesquisa(formulario, firtPage) {
	if (firtPage && formulario.page != null && formulario.pageTemp != null) {
		formulario.page.value = "0";
	}
	formulario.ACAO.value = "";
	formulario.submit();
}

function proximaPagina(formulario, totalNumberOfPages) {
	var pagina = parseInt(formulario.page.value);
	if (pagina < totalNumberOfPages - 1) {
		pagina = pagina + 1;
		formulario.page.value = pagina.toString();
		efetuaPesquisa(formulario, false);
	}
}

function anteriorPagina(formulario) {
	var pagina = parseInt(formulario.page.value);
	if (pagina > 0) {
		pagina = pagina - 1;
		formulario.page.value = pagina.toString();
		efetuaPesquisa(formulario, false);
	}
}

function verificaPagina(ctrl, event) {
	var ENTER = 13;
	var tecla;
	
	//captures the digit
	if (navigator.appName.indexOf("Netscape") != -1) {
		tecla = event.which;
	} else {
		tecla = event.keyCode;
	}

	//tests allowed keys
	if (tecla == ENTER) {
		var num = 1;
		if (ctrl.value != null && Trim(ctrl.value) != "") {
			num = parseInt(ctrl.value);
			num = num < 1 ? 1 : num;
		}
		ctrl.value = num;
		submitFormulario();
	}
}

function popup(pagina, titulo, width, height, nostatus) {
	var left = ((screen.width) / 2) - (width / 2);
	var top = ((screen.height) / 2) - (height / 2);
	var params1 = "toolbar=no,location=no,directories=no,status=" + (nostatus ? "no" : "yes") + ",menubar=no,scrollbars=yes";
	var params2 = ",width=" + width;
	var params3 = ",height=" + height;
	var params4 = ",left=" + left;
	var params5 = ",top=" + top;
	var parametros = params1 + params2 + params3 + params4 + params5;
	window.open(pagina, titulo, parametros);
}

function getIndex(input) {
	var index = -1, i = 0, found = false;
	while (i < input.form.length && index == -1) {
		if (input.form[i] == input) {
			index = i;
		} else {
			i++;
		}
	}
	return index;
}

function autoTabLength(input, e, autotab) {
	if (!autotab) {
		return;
	}
	var tetoMax = 2000;
	var len = input.maxLength > tetoMax ? tetoMax : input.maxLength;
	len = len == -1 ? tetoMax : input.maxLength;
	var keyCode = (isNN) ? e.which : e.keyCode;
	var RETURN = 13;

	//ignorar se for TAB
	if (keyCode == 9) {
		return true;
	}
	//ignorar se for SHIFT
	if (keyCode == 16) {
		return false;
	}

	//se for seta mudar a seleção do campo	
	if (keyCode == 37 || keyCode == 38 || keyCode == 39 || keyCode == 40) {
		return;
	}
	if (input.value.length >= len || keyCode == RETURN) {
		input.value = input.value.slice(0, len);
		try {
			var proximo = input.form[(getIndex(input) + 1) % input.form.length];
			while (proximo && proximo.type && proximo.type == "hidden") {
				proximo = proximo.form[(getIndex(proximo) + 1) % proximo.form.length];
			}
			try {
				proximo.focus();
			}
			catch (e) {
				proximo = input.form[(getIndex(input) + 2) % input.form.length];
				proximo.focus();
			}
		}
		catch (e) {
		}
	}
	return true;
}

function expandCollapse(control, groupName) {
	var imgsrc = control.childNodes[0].src;
	//é o mesmo que endsWith
	var toExpand = imgsrc.substring(imgsrc.length - "expand.gif".length, imgsrc.length) == "expand.gif";
	//Captura todas as tr da mesma tabela
	var table = control;
	while (table.nodeName != "TABLE") {
		table = table.parentNode;
	}
	var trs = table.tBodies[0].rows;
	var img = control.childNodes[0];
	if (toExpand) {
		img.src = img.src.replace("expand.gif", "collapse.gif");
	} else {
		img.src = img.src.replace("collapse.gif", "expand.gif");
	}
	//Agrupa todas do mesmo grupo
	for (var i = 0; i < trs.length; i++) {
		var attribg = trs[i].getAttribute("group");
		if (attribg != null && attribg.substring(0, groupName.length) == groupName) {
			if (trs[i].getAttribute("isgroupline") != null) {
				var subtag = trs[i].childNodes[0].childNodes[0];
				if (subtag && subtag.tagName == "A") {
					var subimg = subtag.childNodes[0];
					if (subimg.tagName == "IMG") {
						if (toExpand) {
							subimg.src = subimg.src.replace("expand.gif", "collapse.gif");
						} else {
							subimg.src = subimg.src.replace("collapse.gif", "expand.gif");
						}
					}
				}
			}
			if (toExpand) {
				trs[i].style.display = "";
			} else {
				trs[i].style.display = "none";
			}
		}
	}
}

function expandCollapseArea(link) {
	var comps = link.parentNode.parentNode.childNodes;
	var display = "";
	//Se tiver aberto...
	if (link.getAttribute("mode") == "opened") {
		//...fecha!
		display = "none";
		link.setAttribute("mode", "closed");
		link.className = "MIRAGE_panelArea_legend_closed";
	} else {
		link.setAttribute("mode", "opened");
		link.className = "MIRAGE_panelArea_legend_opened";
	}
	for (var i = 0; i < comps.length; i++) {
		var compToHide = comps[i];
		if (compToHide.nodeName != "LEGEND" && compToHide.nodeName != "#text") {
			//aplica
			compToHide.style.display = display;
		}
	}
}

function marcaTodasCheckboxes(botao, fieldName) {
	var fieldNames = fieldName.split(".");
	var fieldPrefix = fieldNames[0];
	var fieldSufix = fieldNames[1];
	
	//Captura os titulos marcados
	var count = 0;
	do {
		var existe = false;
		var nomeCHK = fieldPrefix + "[" + count + "]." + fieldSufix;
		count++;
		var controleCHK = document.getElementsByName(nomeCHK)[0];
		if (controleCHK != null) {
			controleCHK.checked = botao.checked;
			existe = true;
		}
	} while (existe);
}
