/* TODO
Consertar, qdo carregar um formulaio, verificar o ESTADO para carregar a cidade, e bairro
usar MD5 para integridade dos dados enviados por GET
*/

formName="formulario"; // Nome do formulario padrao

/* Cria um objeto, para se usar nas funcoes aonde se passa o 'this' como argumento */
function makeObj(formName, fieldName, target)
{
	if(target) t = target + ".";
	else t = "";
	obj = eval(t + "document." + formName + "." + fieldName);
}

/* Remove toda selecao de um campo SELECT */
function unSelectAll(formName, fieldName)
{
	obj = eval("document." + formName + "." + fieldName);
	obj.selectedIndex == -1;
}

/* Selecionar/Deselecionar TODOS valores de um SELECT
flag = (true=Selecionar|false=Deselecionar)
*/
function selectAll(formName, fieldName, flag) // 25.09.2003
{
	if(flag == false) sel = false;
	else sel = true;
	obj = eval("document." + formName + "." + fieldName);
	if(obj.options.length == 0) return;
	for (var i=0; i < obj.options.length; i++)
	{
		obj.options[i].selected = sel;
	}
}

/* Split e Retorna o index de uma string
Usado em selectUpValue e selectDownvalue, select2select*/
function returnIndex(s,index,sep)  // 24.09.2003
{
	if(!sep) sep = "_";
	_tmp = s.split(sep);
	return _tmp[index];
}

/* Move para bairo um valor selecionado de um SELECT */
function selectDownValue(formName,fieldName) // 23.09.2003
{
	obj = eval("document." + formName + "." + fieldName);
	_sels = select2array(formName, fieldName, 1);
	size = obj.length - 1; // -1 para igualar ao index
	i=0;
	s = "";
	for(k in _sels)
	{
		if(i==size) { return; }
		if(obj[i].selected == true)
		{
			k_posterior = obj.options[(i+1)].value;
			k_posterior_id = returnIndex(k_posterior,1);
			k_posterior = i + "_" + k_posterior_id;
			t_posterior = obj.options[(i+1)].text;
			k_atual = obj.options[i].value;
			k_atual_id = returnIndex(k_atual,1);
			k_atual = (i+1) + "_" + k_atual_id;
			t_atual = obj.options[i].text;
			obj.options[i] = new Option(t_posterior, k_posterior);
			obj.options[(i+1)] = new Option(t_atual,k_atual);
			setSelect(formName, fieldName, k_atual);
			return;
		}
		i++;
	}
}


/* Move para cima um valor selecionado de um SELECT */
function selectUpValue(formName,fieldName) // 23.09.2003
{
	obj = eval("document." + formName + "." + fieldName);
	_sels = select2array(formName, fieldName, 1);
	i=0;
	s = "";
	for(k in _sels)
	{
		if(i==0) { i++; continue; }
		if(obj[i].selected == true)
		{
			k_anterior = obj.options[(i-1)].value;
			k_anterior_id = returnIndex(k_anterior,1);
			k_anterior = i + "_" + k_anterior_id;
			t_anterior = obj.options[(i-1)].text;
			k_atual = obj.options[i].value;
			k_atual_id = returnIndex(k_atual,1);
			k_atual = (i-1) + "_" + k_atual_id;
			t_atual = obj.options[i].text;
			obj.options[i] = new Option(t_anterior, k_anterior);
			obj.options[(i-1)] = new Option(t_atual,k_atual);
			setSelect(formName, fieldName, k_atual);
		}
		i++;
	}
}

/* Zera um campo Select */
function cleanSelect(formName,fieldName) // 23.09.2003
{
	obj = eval("document." + formName + "." + fieldName);
	obj.options.length = 0;
}

/* Remove Valores selecionados de um select e atualizando o index */
function delSelectValues(formName,fieldName) // 23.09.2003
{
	_select = select2array(formName,fieldName); // Valores selecionados
	_selectAll = select2array(formName,fieldName,1); // Todos valores
	var _ss = new Object();
	i=0; // contador
	for(k in _selectAll)
	{
		index_id = k.split("_"); id = i + "_" + index_id[1];
		v = _selectAll[k];
		if(_select[k]) continue;
		_ss[id] = v;
		i++;
	}
	makeSelect(_ss, formName, fieldName);
}


/* Passa os valores selecionados do field1 para o field2

comRetirada [1|0] = Retira valor de Origem
comVerificacao [1|0]= Verifica se o field 2 já tem o valor do field1
*/
function select2select(formName, field1, field2, comRetirada, comVerificacao) // 25.09.2003
{

	_select1 = select2array(formName,field1); // Valores selecionados do campo1
	_select1All = select2array(formName,field1,1); // Todos valores do campo1
	_select2All = select2array(formName,field2,1); // Todos valores do campo2

	// criando novo array para construir o seleect do field2
	var _ss = new Object();
	var i=0; // contador
	var msgAlert = "";
	for(k in _select2All)
	{
		k1 = returnIndex(k,1);
		v = _select2All[k];
		key = i + "_" + k1;
		_ss[key] = v;
		i++;
	}
	for(k in _select1)
	{
		v = _select1[k];
		key = i + "_" + k;
		if(comVerificacao) if(in_Select(formName,field2,v)) { msgAlert += "- " + v + "\n" ; continue;}
		_ss[key] = v;
		i++;
	}
	if(msgAlert) alert("O(s) valore(s) já existe(m) no campo de destino:\n" + msgAlert);
	makeSelect(_ss, formName, field2);
	if(comRetirada)
	{
		var _ss = new Object();
		for(k in _select1All)
		{
			v = _select1All[k];
			if(_select1[k]) continue;
			_ss[k] = v;
		}
		makeSelect(_ss, formName, field1);
	}
}

/* Escreve em uma nova janela

obs: por ser stream, nao tem document.close()*/
ww=0; // usado na funcao abaixo
function writeWindow(msg,end,W,H) // 23.09.2003
{
	if(!H) H = 400; if(!W) W=400;
	if(!ww) { ww = 1;
		note = window.open('','msg','scrollbars=yes,resizable=yes,width=' +W+ ',heigth=' +H);
		note.document.write("<title>writeWindow v1</title>");
	}
	note.document.write(msg);
	if(end) {
		ww=0;
		note.focus();
		note.document.close()};
}


/*
	Pega os valores selecionados de um campo SELECT e retorna um array
	se onlySel = 1 ou true, pega todos os valores do SELECT
*/
function select2array(formName, fieldName, onlySel, t_v)  //01.10.2003
{
	if(!onlySel) selected = true;
	else selected = false;
	objSel = eval("document." + formName + "." + fieldName);
	s= Array();
	j=0;
	for(i=0 ; i < objSel.length; i++)
	{
		k = objSel[i].value;
		v = objSel[i].text;
		if(selected)
		{
			if(objSel[i].selected == true)
			{
				if(t_v) s[j] = v;
				else s[j] = k;
				j++;
			}
			continue;
		}
		else
		{
			if(t_v) s[i] = v;
			else s[i] = k;
			continue;
		}
	}
	return s;
}
/*
	Pega TODOS os valores Selecionado e se t_v = (1=text|0=value) padrao value
	e retorna uma lista
	onlySel = true|false padrao true
*/
function select2lista(formName, fieldName, sep, onlySel, t_v) // 25.09.2003
{
	if(!sep) sep="|"
	if(!onlySel) selected = true;
	else selected = false;
	objSel = eval("document." + formName + "." + fieldName);
	s="";
	for(i=0 ; i < objSel.length; i++)
	{
		k = objSel[i].value;
		v = objSel[i].text;
		if(selected)
		{
			if(objSel[i].selected == true)
			{
				if(i > 0) if(s) s += sep;
				if(t_v) s += v;
				else s += k;
			}
		}
		else
		{
			if(i > 0) s += sep;
			if(t_v) s += v;
			else s += k;
		}
	}
	return s;
}



/* Existe o valor em um campo SELECT , retorna true se encontrar */
function in_Select(formName,fieldName,v) // 17.07.2003
{
	obj = eval("document." + formName + "." + fieldName);
	for(i=0; i < obj.length; i++)
	{
		if(obj[i].value == v || obj[i].text == v) return true;
	}
	return false;
}

/*
	Setar Valor em um FORM>SELECT
	Modo de usar:
	setSelect(formName, fieldName, value2sel)
		formName = Nome do Formulario
		fieldName = Nome do Campo
		value2sel = Valor selecionado, pode ser multiplos quando form for multiple
			'PR|SC|SP'
		targ = Alvo (parent ...)
	ex.: setSelect('formulario','uf','PR|SC')

	obs.: Se o "<select" nao tiver multiple, e quando o valor
	value2sel = "A|B|C" ou multiplos, será marcado apenas o ultimo valor
*/
function setSelect(formName, fieldName, value2sel, targ) // 02.09.2003
{
	if(targ && targ != "undefined") targ = targ + "."
	else targ="";

	if('' == value2sel || value2sel.length == 0) return;
	objSelect = eval(targ + "document." + formName + "." + fieldName);
	if(!objSelect) return;

	if(!value2sel) return;
	_values = value2sel.split("|");

	for (var i=0; i < objSelect.options.length; i++)
	{
		objSelect.options[i].selected = false; // Limpa campos
		// Setar os valores
		for(j=0; j < _values.length; j++)
		{
			if (objSelect[i].value == _values[j] || objSelect[i].text == _values[j])
				objSelect.options[i].selected = true;

		}
	}
}

/* Pega o valor de um campo TEXT ou TEXTAREA */
function getTextValue(formName, fieldName) // 24.09.2003
{
	o = eval("document." +formName+ "." +fieldName);
	return o.value;
}

/* Retorna o valor selecionado de um SELECT */
function getSelectValue(formName,fieldName) // 17.07.2003
{
	obj = eval("document." + formName + "." + fieldName);
	if(obj.selectedIndex == -1) {return false};
	return obj.options[obj.selectedIndex].value;
}

/* Retorna o texto Selecionado de um SELECT */
function getSelectText(formName,fieldName) // 17.07.2003
{
	obj = eval("document." + formName + "." + fieldName);
	if(obj.selectedIndex == -1) {return false};
	return obj.options[obj.selectedIndex].text;
}


/*
Setar um valor para um campo TEXT ou TEXTAREA
formName = Nome do formulario
fieldName = Nome do campo
value = valor para setar
*/
function setTextValue(formName, fieldName, value) // 18.10.2003
{
	o = eval("document." + formName + "." + fieldName);
	o.value = value;
}

/*
	Setar valor em um RADIO
	formName = Nome do formulario
	fieldName = Nome do campo
	value2sel = valor para selecionar
*/
function setRadioValue(formName, fieldName, value2sel) // 01.07.2003
{
	if('' == value2sel) return;
	objRadio = eval("document." + formName + "." + fieldName);
	for(i=0; i < objRadio.length; i++)
	{
		if(objRadio[i].value == value2sel)
		{
			objRadio[i].checked = true;
		}
	}
}


/* Pega o valor de um RADIO */
function getRadioValue(formName,fieldName) // 01.07.2003
{
	objRadio = eval("document." + formName + "." + fieldName);
	for(i=0; i < objRadio.length; i++)
	{
		if(objRadio[i].checked == true)
		{
			return objRadio[i].value;
		}
	}
	return;
}

/*
	Setar valor para um CHECKBOX
	formName = Nome do formulario
	fieldName = Nome do Campo
	value2sel = Valor(es) para ser(em) setados
		ex.: 'mae|pai|avó' ou 'mae'
	Use: setCheckboxValue('formulario','cbox','mae|pai|avó')
*/
function setCheckboxValue(formName,fieldName,value2sel) // 08.07.03
{
	if('' == value2sel) return;
	objCheckbox = eval("document." + formName + "." + fieldName)
	_values = value2sel.split("|");

	// Se houver 1 checkbox
	if(objCheckbox.length == undefined && objCheckbox.value == value2sel)
	{
		objCheckbox.checked = true;
	}

	for(i=0; i < objCheckbox.length ; i++)
	{
		objCheckbox[i].checked = false; // Limpando todos
		for(j=0; j < _values.length; j++)
		{
			if (objCheckbox[i].value == _values[j])
			{
				objCheckbox[i].checked = true;
			}
		}
	}
}

/*
	Cria um SELECT a partir de um array

	obs.: esta funcao deve ser chamada apos o objeto form, ou seja, depois do form>select
	que esta criando.
	obs2.: Se o <form> nao estiver dentro do <body></body> nao funciona
*/
function makeSelect(_array, formName, fieldName, pai) // 02.07.2003
{
	objSel = eval((pai ? pai + "." : "") + "document." + formName + "." + fieldName);
	objSel.options.length = 0;
	for (k in _array)
	{
	 	objSel.options[objSel.options.length] = new Option(_array[k],k);
	}
}

/*
	Cria um array associativo apartir de uma lista
	lista = "PR|Parana,SC|Santa Catarina" ou "PR|SC|AC.."
	sepOption = Separador de Array/Options ex.: /
	sepValue = Separador de valores ex.: ||
*/
function lista2assoc(lista,sepOption,sepValue) // 18.07.2003
{
	if(!sepOption) sepOption = ",";
	if(!sepValue) sepValue = "|";
	_a = new Array();
	if(!lista) { _a[""]="" ; return _a; }
	lista = lista.split(sepOption);
	for(k=0; k < lista.length; k++)
	{
		kv = lista[k].split(sepValue);
		if(!kv[1]) _a[kv[0]] = kv[0];
		else _a[kv[0]] = kv[1];
	}
	return _a;
}

/*
	habilita e dasabilita campos do formulario.
	formName = Nome do formulario
	fieldName = Nome do campo
	targ = Alvo (parent ...)
	flag = (true|false) habilita,desabilita) padrao=false
*/
function DisEnable(formName,fieldName,flag,targ) // 15.07.2003
{
	flag = flag ? true : false;
	if(targ) targ = targ + ".";
	else targ="";
	obj = eval(targ + "document." + formName + "." + fieldName);
	obj.disabled = flag;
}

/* Carrega link dentro do iframe */
function iframeSrc(iframeName,src) {
	document.getElementById(iframeName).src = src;
}
/* Escreve um iframe sem SRC H=0 W=0 B=0 M=0 FB=0*/
function writeIframe(nome,W,H,FB){
	if(!W) W=0; if(!H) L=0; if(!FB) FB=0;
	document.write('<iframe id="' +nome+ '" name="'+nome+'" src="" height="'+H+'" width="'+W+'" marginwidth="0" marginheight="0" frameborder="'+FB+'" border="' +FB+ '"> </iframe>');
	return nome;
}

function getLocation(src)
{
	iframeSrc(iframeName, src);
}





// Variaveis para o form dinamico
_v = new Array(); _v[""] = "Carregando...";
_z = new Array(); _z[""] = "";



