sfHover = function(id) {
  var sfEls = document.getElementById(id).getElementsByTagName("LI");
  for (var i=0; i<sfEls.length; i++) {
    sfEls[i].onmouseover=function() {
      if(this.className.indexOf('sfhover') == -1){
        this.className+=" sfhover";
      }
    }
    sfEls[i].onmouseout=function() {
      this.className=this.className.replace(new RegExp("sfhover\\b"), "");
    }
  }
}


function updateSfSelect(node){

//  debug('                       ',true);
//  debugTime();

  // deduct the new value of the sfSelect from the caller's id
  var value = node.id;
  value = value.substring(14);
  value = value.split("_");

  // get a reference to the sfSelect by finding the grandparent
  var select = node.parentNode.parentNode.parentNode.parentNode.parentNode;

//  debug('after get grandparent: ');
//  debugTime();

  //set the value
  select.value = value[0];
  
  // get a reference to the selected-box of the sfSelect and set its value
  var selected = getElementsByClass('selected', select);
  selected[0].innerHTML = value[0];
  
  //manufacturer = document.getElementById('phone_manufacturer');
  //manufacturer.value = value;
  model = document.getElementById('phone_model');
  model.value = value[0];

  switch(select.id) {
    case "phone_manufacturer_select":
      manufacturer = document.getElementById('phone_manufacturer');
      manufacturer.value = value[0];
      break;
    case "dLFManufacturer_select":
      manufacturer = document.getElementById('dLFManufacturer');
      manufacturer.value = value[0];
      break;
    default:
      // model is selected now
      document.getElementById('phone_id').value = value[1];
      document.getElementById('dLFphone_id').value = value[1];
  }
  //alert(manufacturer.value);

/*
  if(select.id == "phone_manufacturer_select") {
    manufacturer = document.getElementById('phone_manufacturer');
    manufacturer.value = value[0];
  }
  else {
    document.getElementById('phone_id').value = value[1];
  }
*/
//  debug('after getByClass:      ');
//  debugTime();  
  
  //close the sf
  var li = select.getElementsByTagName('LI');
  li[0].className = li[0].className.replace(new RegExp("sfhover\\b"), "");

//  debug('                       ');
//  debugTime();  
  
  return false;
}

/*
 * Function for printing debug data from javascript code.
 * @param str (String) text to be printed
 * @param clear (boolean) Clear textarea?
 *
 * Recommended usage is to have a textarea with an id of 'debug'
 * on the page being debugged. If there is no textarea, alertboxes
 * are used to print the debug data.
 *
 */
function debug(str, clear) {
  if (document.getElementById('debug')) {
    if (clear) {
      document.getElementById('debug').value = str;
    } else {
      document.getElementById('debug').value += str;
    }
  } else {
    alert('str');
  }
}

function getElementsByClass(searchClass,node,tag) {
  var classElements = new Array();
  if ( node == null )
      node = document;
  if ( tag == null )
      tag = '*';
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
  for (i = 0, j = 0; i < elsLen; i++) {
      if ( pattern.test(els[i].className) ) {
          classElements[j] = els[i];
          j++;
      }
  }
  return classElements;
}

var previousDebTime;
function debugTime(silent){
  var now = new Date();
  var ms = now.getMilliseconds();
  var debTime = Number(Date.parse(now))+Number(now.getMilliseconds());
  if(!silent){
//    debug( (debTime-window.previousDebTime) +"\n");  
    debug( (debTime) +"\n");      
  }else{
//    debug('            '+ (debTime-window.previousDebTime) +"\n");  
    debug('            '+ (debTime) +"\n");  
  }
  
  window.previousDebTime = debTime;  
}