/*

 * Funções Uteis

 */
/**
 * Função que retorna a String com os parametros que se encontram numa form
 *  
 * @param formname nome do form que se está a fazer submit
 *
 */
function buildURLFormParameters(formName) {
	var i = 0;
	var parametros = "";
	var elementos = document.getElementById(formName).elements;
	
	for (i = 0; i < elementos.length; i++) {
		var tempParam = null;
		var tipo = elementos[i].type;
		// Radio Buttons
		if(tipo == "radio") {
			if (elementos[i].checked == true) {
				tempParam = "&"+elementos[i].name+"="+elementos[i].value;
			}else{
				tempParam = "";
			}
		}
		// Check Boxes
		else if(tipo == "checkbox") {
			if (elementos[i].checked == true) {
				tempParam = "&"+elementos[i].name+"="+elementos[i].checked;
			}else{
				tempParam = "&"+elementos[i].name+"="+"false";
			}			
		} else if(tipo == "submit" || tipo == "reset") {
			tempParam = "";
		}	
		// Outros Casos
		else {
			if (elementos[i].id)
				tempParam = "&"+elementos[i].id+"=";
			else (elementos[i].name)
				tempParam = "&"+elementos[i].name+"=";
			tempParam += elementos[i].value;
		} 
		parametros += tempParam;
	}
	return parametros;
}

function undef(v) { 

		var u; return v==u; 

}



function getFormField(idName,formObj) {

	if (!undef(formObj)){

		return formObj.elements[idName];

	}else{

		return document.getElementById(idName);

	}

}



function getFormFieldValue(name,formObj) {

  var field = getFormField(name,formObj);

  if (!undef(field)){

  	return getFieldValue(field);

  }

  return "";

}



function setFormFieldValue(name, value,formObj) {

  var field = getFormField(name,formObj);

  if (!undef(field)){

	  setFieldValue(field, value);

  }

}



function setFieldValue(field, value) {

  if (field instanceof Array) {

    // radio group

    var defaultRadio = field[0];

    for (var i in field) {

      if (field[i].value == value) {

			field[i].checked = true;

			return;

      }

	  if (field[i].defaultChecked) {

			defaultRadio = field[i];

      }

    }

    defaultRadio.checked = true;

  } else if (isFieldType(field, "radio")) {

    field.checked = (value == field.value);

  } else if (isFieldType(field, "checkbox")) {

    field.checked = value;

  } else if (isFieldType(field, "select-one")) {

    for(var i = 0; i < field.options.length; i++) {

      if (field.options[i].value == value) {

		field.options[i].selected = true;

		break;

      }

    }

  } else if (field.length) {

    for (var i = 0; i < field.length; i++) {

      setFieldValue(field[i], value);

    }

  } else {

    field.value = value

  }

}



function getFieldValue(field) {

  if (field instanceof Array) {

   // radio group

    for (var i in field) {

      if (field[i].checked) {

			return field[i].value;

      }

    }

    return "";

  } else if (isFieldType(field, "checkbox")) {

    return field.checked;

  } else if (isFieldType(field, "select-one")) {

  	if(field.selectedIndex>=0 && field.options[field.selectedIndex]) {

    	return field.options[field.selectedIndex].value;

    } else {

    	return "";

    }

  } else {

    return field.value;

  }

}



function isFieldType(field, type) {

  return (field.type && (field.type == type));

}





function setEnableFields(fieldsIds,enable,formObj){

	for (var i=0;i<fieldsIds.length;i++){

		setEnable(fieldsIds[i],enable);

	}

}





function setEnable(fieldId, toEnable,formObj) {

	var field =  getFormField(fieldId,formObj);

	if (isFieldType(field, "checkbox") || isFieldType(field, "radio") || isFieldType(field, "select-one")) {

	  field.disabled = (! toEnable);

	} else {

	  field.readOnly = (! toEnable);

	}

	//field.className = (toEnable ? "class1" : "class2");

}

function getAllFieldsID(formObj){

	var elements = formObj.elements;

	var elemsID = new Array();

	for (var i=0; i < elements.length;  i++) {	    	

		if (elements[i].id != ""){

			elemsID.push(elements[i].id);

		}else{

			elemsID.push(elements[i].name);

		}

	}

	return elemsID;

}



function clearAllFields(formObj){

	if (!undef(formObj)){

		clearFieldsById(getAllFieldsID(formObj),formObj);

	}else{

		clearFieldsById(getAllFieldsID(document.forms[0]));

	}

}



function clearFieldsById(fieldsIdName,formObj){

	for (var i=0, j=fieldsIdName.length; i<j; i++) {	    	

  		var field = getFormField(fieldsIdName[i],formObj);

		if (!undef(field)){

			if (isFieldType(field, "password") || isFieldType(field, "text"))

	  			setFieldValue(field, "");

			if (isFieldType(field, "select"))

				setFieldValue(field, 0);

				setFieldValue(field, "");

  		}

	}

}



function buildParamtersForForm(formObj){

	return buildParamtersBaseOnFields(getAllFieldsID(formObj),formObj);

}



function buildParamtersBaseOnFields(fieldNames,formObj){

	return buildParamtersString(collectFieldValues(fieldNames,formObj),fieldNames);

}

function buildParamters(fieldNames,parameterNames,formObj){

	return buildParamtersString(collectFieldValues(fieldNames,formObj),parameterNames);

}





function collectFieldValues(fieldNames,formObj){

	var fieldValues = new Array(fieldNames.length);

	for (var i=0;i<fieldNames.length;i++){

		fieldValues[i] = getFormFieldValue(fieldNames[i],formObj);

	}

	return fieldValues;

}



function buildParamtersString(parameterValues,parameterNames){

	if (parameterValues.length != parameterNames.length){

		alert("Problem in buildParamters function!!");

	}

	var strParameter = "";

	for (var i=0;i<parameterValues.length;i++){

		strParameter += "&"+parameterNames[i]+"="+parameterValues[i];

	}

	return strParameter;

}



/**

 * Encontra um elemento num array

 *

 * @param (String/int) value

 * @param (Array) array

 *

 * retorna a posição em que o elemento se encontra no array, -1 se não encontrar

 */

function findInArray(value, array) {

	return findInArrayFrom(value,array,0);

}



/**

 * Encontra um elemento num array, a partir de certa posicao

 *

 * @param (String/int) value

 * @param (Array) array

 * @param (int) pos

 *

 * retorna a posição em que o elemento se encontra no array, -1 se não encontrar

 */

function findInArrayFrom(value, array, pos) {

	if (pos > array.length) {

		return -1;

	} else {	

	    for (var i = pos; i < array.length; i++) {

    	    if (array[i] == value) {

        	    return i;

	        }

    	}

	    return -1;

	}

}



/**

 * Encontra um elemento num array multidimensional numa certa coluna

 *

 * @param (String/int) value

 * @param (Array) array

 * @param (Int) coluna

 *

 * retorna a posição em que o elemento se encontra no array, -1 se não encontrar

 */

function findInArrayCol(value, array, col) {

	return findInArrayColFrom(value,array,col,0);

}





/**

 * Encontra um elemento numa coluna do array , a partir de certa posicao

 *

 * @param (String/int) value

 * @param (Array) array

 * @param (int) col

 * @param (int) pos

 *

 * retorna a posição em que o elemento se encontra no array, -1 se não encontrar

 */

function findInArrayColFrom(value, array, col, pos) {

	if (pos > array.length) {

		return -1;

	}else {	

		for (var i = pos; i < array.length; i++) {

			if (array[i][col] == value) {

				return i;

			}

		}

		return -1;

	}

}



/**

 * remove do array elementos duplicados no arrayToCheck para determinada coluna

 *

 * @param (Array) array

 * @param (Array) array

 * @param (int) col

 *

 * retorna o novo array 

 */



function removeFromArrayDuplicates(arrayToRemove, arrayToCheck, colToCheck) {

	var arrayToReturn = arrayToRemove;

	for (var i = 0; i < arrayToCheck.length; i++) {

		var pos = findInArrayCol(arrayToCheck[i][colToCheck],arrayToReturn,colToCheck);

		if (pos != -1){

			arrayToReturn = removeFromArray(pos,arrayToReturn);

		}

	}

	return arrayToReturn;

}



/**

 * remove do array a posicao indicada

 *

 * @param (Array) array

 * @param (int) pos

 *

 * retorna o novo array 

 */

	

function removeFromArray(pos, array) {

	var j = 0;

	var aTmp = null;

	var size = array.length;

	if (size > 1) {

		aTmp = new Array(size-1);

		for (var i = 0; i < size; i++) {

			if (i != pos) {

				aTmp[j] = array[i];

				j++;

			}

		}

	} else {

		aTmp = new Array();

	}



	return aTmp;

}



/**

 * insere no array o elemento indicado

 *

 * @param object value

 * @param (Array) array

 * @param (int) pos

 *

 * retorna o novo array 

 */



function insertPosInArray (value, pos, srcArray){

	var size = srcArray.length + 1;

    var newArray = new Array(size);	

	for (var i=0; i<size; i++) {

		if (i < pos) {

			newArray[i] = srcArray[i];

		} else if (i > pos) {

			newArray[i] = srcArray[i - 1];

		} else {

			newArray[i] = value;

		}

	}

	return newArray;	

}





function printArray(array,msg) {

	var size = array.length;	

	var printMsg = "";

	if (msg != null) {

		printMsg += (msg + "\n");

	}

	for (var i=0; i<size; i++) {

		printMsg += i + " - " + array[i] + "\n";

	}

	alert(printMsg);

}



//////////////////////////// SELECT BOXES

/**

Limpa o conteudo da select box indicada.

*/

function emptySelectBox(selectObj){

	var i = 0;

	while( selectObj.length>0) {

		selectObj.options[0] = null;

	}

}





// VALIDAÇÕES



/**

 * Verifica se e um codigo UNICODE de um algarismo

 * @param key Codigo a validar

 * @return true caso seja um algarismo

 */

function keyIsNumber(key){

    return (key >= 48 && key <= 57);

}





var validChars = "()- +/";

function ckeckKeyPressIsFoneNumber( obj, event){

	var key = window.event ? event.keyCode : event.which;



	if( key == 0){

		return true;

	}



	var chValue = String.fromCharCode(key);

	if ((!keyIsNumber(key)) && (validChars.indexOf(chValue) == -1) && key != 8){

		event.returnValue = false;

		return false;

	}

}



/**

 * Function: hide()

 * @param: (Object) obj

 * Esconde um objecto div

 */

function hide(obj) { 

    if (parseInt(navigator.appVersion) >= 5 || navigator.appVersion.indexOf["MSIE 5"] != -1) {

        obj.style.display="none";

		obj.style.visibility = "hidden";

    }

}



/**

 * Function: show()

 * @param: (Object) obj

 * Mostra um objecto div

 */

function show(obj) { 

    if (parseInt(navigator.appVersion) >= 5 || navigator.appVersion.indexOf["MSIE 5"] != -1) {

		obj.style.display="";

		obj.style.visibility = "visible";

    }

}



/**

 * Function: isVisible()

 * @param: (Object) obj

 * Devolve true se o objecto está visivel

 */

function isVisible(obj) { 

    if (parseInt(navigator.appVersion) >= 5 || navigator.appVersion.indexOf["MSIE 5"] != -1) {

		return obj.style.display =="" &&  obj.style.visibility == "visible";

    } else {

	    return false;

  	}

}





/**

* Methods to operate XML nodes 

*

*/



function getNodeListFromXML(xmlValue, tagName){

	if (!undef(xmlValue.getElementsByTagName(tagName))){

		return xmlValue.getElementsByTagName(tagName)[0]; 

	}

	return null;

} 



function getAttributeFromNodeList(nodeList,attName,listPosition){

	if (!undef(nodeList.childNodes) && (listPosition < nodeList.childNodes.length)){

		return nodeList.childNodes[listPosition].getAttribute(attName);

	}

	return "";

}



function getAttributeFromXML(xmlValue,tagName,attName,listPosition){

	var nodeList = getNodeListFromXML(xmlValue,tagName);

	if (!undef(nodeList)){

		return getAttributeFromNodeList(nodeList,attName,listPosition);

	}

	return "";

}





/////////////////////////////////////////////

var EVENT_LOAD	= "load";

var EVENT_CLICK = "click";

var EVENT_LOAD = "load";



/*

Adds an event to an object.



obj - The object to add the event handling to.

eventName - The event name to be processed.

func - The function that will handle the event.

*/

function addEvent(obj, eventName, func){

	//try{

		if (obj.addEventListener){

			obj.addEventListener(eventName, func, true);

			return true;

		} else if (obj.attachEvent){

			return obj.attachEvent("on"+eventName, func);

		} else {

			return false;

		}

	//} catch(err){

	//	// Traps any error that may occurr. Returns false if any error occur

	//	return false;

	//}

}
