// Form elements functions
// Bernat Comerma 
// Last update: 5/05/2003

/**
 * FUNCTIONS FOR <SELECT> OBJECTS 
**/

// Deletes all select entries
function clearSelect(selectObj) 
{
  var j = selectObj.options.length
  for (var i = 0; i < j; i++) 
  {
  	selectObj.options[i] = null
  }
  selectObj.length = 0
}

// Loads a select 
function loadSelect(pSelectObj, arrLabels, arrValues) 
{
	clearSelect(pSelectObj);
  if (arrValues)
  {
    for ( var i = 0; i < arrValues.length; i++ ) 
    {
      pSelectObj.options[i] = new Option(arrLabels[i], arrValues[i])
    }
  }
  else if (arrLabels && "object" == typeof(arrLabels[0]))
  {
    for ( var i = 0; i < arrLabels.length; i++ ) 
    {
      pSelectObj.options[i] = new Option(arrLabels[i].text, arrLabels[i].value);
    }
  }
  else 
  {
    var j=0;
    for (var i in arrLabels)
       pSelectObj.options[j++] = new Option(arrLabels[i], i);
  }
}

// Adds an entry in a select as first element
function addSelectOptFirst(pSelectObj, pValue, pLabel)
{
  var aOpts = [];
  for (var i = 0; i < pSelectObj.length; i++)
    aOpts[pSelectObj.options[i].value] = pSelectObj.options[i].text;
  clearSelect(pSelectObj);
  pSelectObj[0] = new Option(pLabel, pValue);
  for (var i in aOpts)
     pSelectObj[pSelectObj.length] = new Option(aOpts[i], i);
}

// Adds an entry in a select
function addSelectOpt(pSelectObj, pValue, pLabel)
{
  pSelectObj[pSelectObj.length] = new Option(pLabel, pValue);
}

// Modifies a select entry with a new text
function modifSelectOpt(pSelectObj, pValue, pText)
{
   for (var i = 0; i < pSelectObj.length; i++)
   {
     if (pSelectObj[i].value == pValue)
     {
      pSelectObj[i].text = pText;
      pSelectObj.selectedIndex = i;
      return;
     }
   }
}

// Sorts a select by texts
function sortSelect(pSelectObj)
{
  var aSelect = [];
  for (var i = 0; i < pSelectObj.length; i++)
    aSelect[i] = [pSelectObj[i].text, pSelectObj[i].value];
  aSelect.sort();
  clearSelect(pSelectObj);
  for (var i = 0; i < aSelect.length; i++)
     pSelectObj.options[i] = new Option(aSelect[i][0], aSelect[i][1]);
}

// Returns the selected value (default) or a text from a select
function getSelect(pSelectObj, pTextValue)
{
  var textValue = pTextValue || "value";
  return (pSelectObj.selectedIndex == -1) ? "" : eval("pSelectObj.options[pSelectObj.selectedIndex]." + textValue);
}

// Returns true if a text is found in a select
function searchSelectText(pSelectObj, pText)
{
   for (var i = 0; i < pSelectObj.length; i++)
     if (pSelectObj[i].text == pText) return true
   return false;   
}

// Returns the number of selected entries in a select
function getSelectNumSelected(selectObj) 
{
  var tSelected = 0;
  for ( var i = 0; i < selectObj.length; i++ ) 
  {
    if (selectObj.options[i].selected) 
      tSelected++;
  }
  return tSelected;
}

// Returns an array of indexes of selected entries in a select
function getSelectArraySelected(selectObj) 
{
  var aSelected=[];
  for ( var i = 0, j=0; i < selectObj.length; i++ ) 
  {
    if (selectObj.options[i].selected) 
      aSelected[j++]=i;
  }
  return aSelected;
}

// Returns an array of values of all entries in a select
function getSelectArrayValues(selectObj)
{
  var aSelected=[];
  for ( var i = 0; i < selectObj.length; i++ )
  {
    aSelected[i]=selectObj.options[i].value;
  }
  return aSelected;
}


// Returns an array of values of selected entries in a select
function getSelectArrayValuesSelected(selectObj) 
{
  var aSelected=[];
  for ( var i = 0, j=0; i < selectObj.length; i++ ) 
  {
    if (selectObj.options[i].selected) 
      aSelected[j++]=selectObj.options[i].value;
  }
  return aSelected;
}


// Hilites a given entry of select
function setSelect(selectObj, elem, incrDecr) 
{
	var tFound = false
	var i = 0
	
	if (! elem || elem == "") return false
	if (! incrDecr) incrDecr = 0
	
	while (i < selectObj.length && !tFound) 
	{
		if (selectObj.options[i].value == elem) 
		{
			selectObj.selectedIndex = i + incrDecr
			tFound = true
		} 
		else 
		{
			i++
		}
	}
	return tFound
}

// Hilites different elements of a multiSelect
function setSelectMult(selectObj, aElems)
{
  for (var l = 0; l < selectObj.options.length; l++)
  {
    selectObj.options[l].selected = false;
  }
  for (var k = 0; k < aElems.length; k++)
  {
    for (var l = 0; l < selectObj.options.length; l++)
    {
      if (selectObj.options[l].value == aElems[k])
      {
        selectObj.options[l].selected = true;
        break;
      } 
    }
  }
}

function deleteSelectOption(selectObj, elem)
{
  var aOpts = [], tFound=false;
	for (var i = 0; i < selectObj.length; i++)
	{
		if (selectObj.options[i].value == elem) 
		  tFound = true;
		else
		  aOpts[selectObj.options[i].value] = selectObj.options[i].text;
	}
	if (tFound) 
	  loadSelect(selectObj, aOpts);
}

/**
 * FUNCTIONS FOR "RADIOBUTTON" OBJECTS
**/


// Selects an element from a radio button group
function setRadioButton(rbGroup, itemValue) 
{
  for (var i=0; i < rbGroup.length; i++)
    if (rbGroup[i].value == itemValue) 
      rbGroup[i].checked = true;
}


// Gets an choosen radioButton value
function getRadioButton(rbGroup) 
{
  if (! rbGroup.length)
  {
     if (rbGroup.checked)
        return rbGroup.value;
  }
  for (var i=0; i < rbGroup.length; i++)
    if (rbGroup[i].checked)
        return rbGroup[i].value;
  return "";      
}

function clearRadioButton(rbGroup) 
{
  for (var i=0; i < rbGroup.length; i++)
    rbGroup[i].checked = false;
}

/**
 * FUNCTIONS FOR <FORM> OBJECTS
**/


function trimForm(pForm)
{
  var formu = pForm || document.forms[0]
  for(var i = 0; i < formu.elements.length; i++)
  {
    if (formu.elements[i].type.indexOf("text") > -1) 
    {
       formu.elements[i].value = trim(formu.elements[i].value)
    }
  }
}

function clearForm(pForm)
{
  var formu = pForm || document.forms[0];
  var elemType;
  for(var i = 0; i < formu.elements.length; i++)
  {
    type = formu.elements[i].type;
    if ("text_textarea_password_fileupload".indexOf(type)>-1)
            formu.elements[i].value = "";
    else if ("select-one"==type || "select-multiple"==type)
            formu.elements[i].selectedIndex = -1;
    else if ("checkbox"==type || "radio"==type)
            formu.elements[i].checked = false;
  }
}

// Eliminates leading & trailing blanks
function trim(pStr) 
{
  if (! pStr) return pStr;
  var ini, fin, len = pStr.length;
  
  for (ini = 0; ini < len; ini++)
  {
    if (pStr.charAt(ini) != ' ') break;
  }
  for (fin = len - 1; fin > ini; fin--)
  {
    if (pStr.charAt(fin) != ' ') break;
  }
  return pStr.substring(ini, fin+1)
}

// uncheckes all checkboxes in a form
function resetCheckboxes(pForm)
{
  var formu = pForm || document.forms[0];
  for(var i = 0; i < formu.elements.length; i++)
  {
    if ("checkbox"==formu.elements[i].type)
            formu.elements[i].checked = false;
  }
}

// Returns the value of the first checked checkbox
function getFirstCheckedBox(pForm)
{
  var formu = pForm || document.forms[0];
  for(var i = 0; i < formu.elements.length; i++)
  {
    if ("checkbox" == formu.elements[i].type && formu.elements[i].checked)
       return formu.elements[i].value;
  }
  return "";
}
