/*
 * iba.js
 *
 * Provides common javascript functions to IBA site admin pages
 * for selecting and moving items between multi-select menus.
 *
 * Authors: 	Gary Helmling
 * Modified: 	05/16/2004
 *
 */

function copyOption(opt)
{
   var newOpt = new Option( opt.text,
                            opt.value,
                            opt.defaultSelected,
                            opt.selected );

   return newOpt;
}

function createOption()
{
   var opt = new Option("", "", false, false);
   return opt;
}


/*
 * open help window
 * 
 */
function openHelp(anchor, page) {
	MM_openBrWindow(page + "#" + anchor, 'HELP', 'scrollbars=yes,resizable=yes,width=450,height=450');
}


/*
 * open any page like the glossary page to
 * an specific anchor within the page -- ghelmling
 */
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

	function submitForm(selectedForm)
	{
        	var isValid = true;
		selectAll(selectedForm.bcr);
		selectAll(selectedForm.county);
		isValid = validate(selectedForm);
		//alert("isValid= "+isValid);
		return isValid;
	}

function addSelections(items, menu)
{
   var currentItems = 0;
   if (menu.options[0] && menu.options[0].value)
   {
      currentItems = menu.options.length;
   }

   var length = items.length;
   for(i=0; i<length; i++)
   {
      if (items[i].selected && items[i].value)
      {
      		//do not allow duplicates   
		 	if(!itemFound(items[i].value, menu))
		 	{
         		menu.options[ currentItems ] = copyOption(items[i]);
		 		if (items[i].value != menu.options[i])
		 		{
         			// make new option selected
         			menu.options[ currentItems ].defaultSelected = true;
         			menu.options[ currentItems ].selected = true;

         			currentItems++;
         			// reset selected flag
         			items[i].selected = false;
         		}
         	}                  
      }
   }

}

//hklasky (07/28/04) IBA-41
function itemFound(value, menu)
{
	var found = false;
	
	for(var j=0; j<menu.length; j++)
	{
	   	if (value == menu[j].value)
	   	{
	   		found = true;	     		
	   		break;
	   	}
	}

	 //alert("itemFound: "+found);   	
	 return found;    
}

function setSelections(items, menu)
{
   var currentItems = 0;

   var length = items.length;
   for(i=0; i<length; i++)
   {
      if (items[i].selected && items[i].value)
      {
         menu.options[ currentItems ] = copyOption(items[i]);
		 
         // make new option selected
         menu.options[ currentItems ].defaultSelected = true;
         menu.options[ currentItems ].selected = true;

         currentItems++;
         // reset selected flag
         items[i].selected = false;
      }
   }

}


/*
 *  Removes all selected entries from a given menu.
 */

function removeSelections(menu)
{
   if (menu)
   {
      var length = menu.options.length;
      //var itemsLength = items.options.length;
      for(i=0; i<length; i++)
      {
         if (menu.options[i] && menu.options[i].selected)
         {
         	//hklasky (07/28/04) IBA-41
            //put back the selected option
            //items.options[itemsLength] = copyOption(menu[i]);             
            menu.options[i] = null;
            //itemsLength++;
         }
      }
   }
}


/*
 * Sets the focus to a given field input.
 */
function setFocus(fieldName) {
  	var inputField = document.getElementById(fieldName);
  	if (inputField) {
  		inputField.focus();
  	}
}


/*
 * Selects all items in a given option list
 */
function selectAll(optionList)
{
	if (optionList && optionList.options)
	{
		for (i=0; i<optionList.options.length; i++)
		{
			optionList.options[i].selected = true;
		}
	}
}


function trimField(field) 
{
	var trimmedValue = trim(field.value);
	field.value = trimmedValue;
	
	return false;
}


function trim(rawValue)
{
	var trimmedValue = rawValue;
	while(''+trimmedValue.charAt(0)==' ')
	{
		trimmedValue = trimmedValue.substring(1, trimmedValue.length);
	}
	while(''+trimmedValue.charAt(trimmedValue.length-1)==' ')
	{
		trimmedValue = trimmedValue.substring(0, trimmedValue.length-1);
	}
	
	return trimmedValue;
}

function rightTrim(item)
{
	while(''+item.value.charAt(item.value.length-1)==' ')
	{
		item.value=item.value.substring(0,item.value.length-1);
	}
	return false;
}
/*
 * hklasky (08/02/04) IBA-45 & IBA-60
 */
function leftTrim(item)
{
	while(''+item.value.charAt(0)==' ')
	{
		item.value=item.value.substring(1,item.value.length);
	}
	return false;
}
/*
 * Convert degrees/minutes/seconds entries for lat/long
 * into decimal degrees.
 */
function convertDegrees(frm, targetId) {
	var targetFrm = document.getElementById(targetId);
	if (frm.latDegrees.value && frm.latMinute.value && frm.latSecond.value) {
    	latitude = toDecimalDegrees( frm.latDegrees.value,
                                     frm.latMinute.value,
                                     frm.latSecond.value );
   		targetFrm.decimalLatitude.value = latitude;
   		targetFrm.latHemisphereDec.value = frm.latHemisphere.value;
    }
    
	if (frm.longDegrees.value && frm.longMinute.value && frm.longSecond.value) {
    	longitude = toDecimalDegrees( frm.longDegrees.value,
                                     frm.longMinute.value,
                                     frm.longSecond.value );
   		targetFrm.decimalLongitude.value = longitude;
   		targetFrm.longHemisphereDec.value = frm.longHemisphere.value;
    }
}


function toDecimalDegrees(deg, min, sec) {
	var decValue = 0;
	
    if (deg && min && sec) {
		decValue = (parseInt(deg, 10) + (parseInt(min, 10)/60 + parseInt(sec, 10)/3600));
    }
    return decValue;
}


/*
 * Convert simple data forms to simple alternate forms (like acres to
 * hectares; feet to meters) ghelmling
 */
var conversionFactors = new Array();
conversionFactors['acresToHectares'] = 0.4047;
conversionFactors['feetToMeters'] = 0.3048;

function convertUnits(inValue, type, targetFieldId) {
	var outValue = inValue * conversionFactors[type];
	var targetField = document.getElementById(targetFieldId);
	if (targetField)
	{
		targetField.value = outValue;
	}
}


var NS4 = (document.layers);
var IE4 = (document.all);

var win = this;
var n   = 0;

function findInPage(str) {
	var txt, i, found;
	if (str == "")
		return false;
		
	if (IE4) {
		txt = win.document.body.createTextRange();
		for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
			txt.moveStart("character", 1);
			txt.moveEnd("textedit");
		}
		if (found) {
			txt.moveStart("character", -1);
			txt.findText(str);
			txt.select();
			txt.scrollIntoView();
			n++;
		}
		else {
			if (n > 0) {
				n = 0;
				findInPage(str);
			}
			else
				alert(str + " was not found on this page.");
		}
	}
	else if (window.find) {
		if (!window.find(str))
			while(window.find(str, false, true))
				n++;
		else
			n++;
		if (n == 0) 
			alert(str + " was not found on this page.");
	}
	return false;
}


function doFind(e, str) {
    var evnt = getEvent(e);
    var chr = evnt.keyCode;
    if (str == "")
    return false;
     //alert("got a key = " + event.keyCode);
    if (chr == 13) {
    return findInPage(str);
    }
}


function getEvent(e) {
	if (e) {
		// DOM compliant
		return e;
	}
	else if (window && window.event) {
		// IE
		return window.event;
	}
}

