function positionInfo(object) {

  var p_elm = object;

  this.getElementLeft = getElementLeft;
  function getElementLeft() {
    var x = 0;
    var elm;
    if(typeof(p_elm) == "object"){
      elm = p_elm;
    } else {
      elm = document.getElementById(p_elm);
    }
    while (elm != null) {
      x+= elm.offsetLeft;
      elm = elm.offsetParent;
    }
    return parseInt(x);
  }

  this.getElementWidth = getElementWidth;
  function getElementWidth(){
    var elm;
    if(typeof(p_elm) == "object"){
      elm = p_elm;
    } else {
      elm = document.getElementById(p_elm);
    }
    return parseInt(elm.offsetWidth);
  }

  this.getElementRight = getElementRight;
  function getElementRight(){
    return getElementLeft(p_elm) + getElementWidth(p_elm);
  }

  this.getElementTop = getElementTop;
  function getElementTop() {
    var y = 0;
    var elm;
    if(typeof(p_elm) == "object"){
      elm = p_elm;
    } else {
      elm = document.getElementById(p_elm);
    }
    while (elm != null) {
      y+= elm.offsetTop;
      elm = elm.offsetParent;
    }
    return parseInt(y);
  }

  this.getElementHeight = getElementHeight;
  function getElementHeight(){
    var elm;

    if(typeof(p_elm) == "object"){
      elm = p_elm;
    } else {
      elm = document.getElementById(p_elm);
    }
    
	return parseInt(elm.offsetHeight);
  }

  this.getElementBottom = getElementBottom;
  function getElementBottom(){
    return getElementTop(p_elm) + getElementHeight(p_elm);
  }
}

function ComboControl() {

  var comboId = 'ComboControl';
  var dateField = null;

  function getProperty(p_property){
    var p_elm = comboId;
    var elm = null;

    if(typeof(p_elm) == "object"){
      elm = p_elm;
    } else {
      elm = document.getElementById(p_elm);
    }
    if (elm != null){
      if(elm.style){
        elm = elm.style;
        if(elm[p_property]){
          return elm[p_property];
        } else {
          return null;
        }
      } else {
        return null;
      }
    }
  }

  function setElementProperty(p_property, p_value, p_elmId){
    var p_elm = p_elmId;
    var elm = null;

    if(typeof(p_elm) == "object"){
      elm = p_elm;
    } else {
      elm = document.getElementById(p_elm);
    }
    if((elm != null) && (elm.style != null)){
      elm = elm.style;
      elm[ p_property ] = p_value;
    }
  }

  function setProperty(p_property, p_value) {
    setElementProperty(p_property, p_value, comboId);
  }

  function comboDraw(value_array,w,dateField,runcode) {

    table="<table cellpadding=1 cellspacing=0 style='width:"+w+"px'>"
	for (i=0;i<value_array.length;i++)    {
	    if(value_array[i]!==undefined)
			table+="<tr style=\"height:14px\"><td nowrap onclick=\"document.getElementById('"+dateField.name+"').value='"+value_array[i].replace("'","\\'")+"';comboControl.hide();"+runcode+";\" onmouseover=\"this.style.backgroundColor='#316AC5';this.style.color='white'\"  onmouseout=\"this.style.backgroundColor='';this.style.color='black'\">"+value_array[i]+"</td></tr>";	
	}
	table+="<table>";
	return table;
  }

  this.show = show;
  function show(field,value_array,runcode) {
  
    // If the combo is visible and associated with
    // this field do not do anything.
    if (dateField == field) {
		comboControl.hide();
		return;
    } else {
      dateField = field;
    }

	
	if(document.getElementById){

      var fieldPos = new positionInfo(dateField);
      var comboPos = new positionInfo(comboId);

	  combo = document.getElementById(comboId);
      combo.innerHTML = comboDraw(value_array,fieldPos.getElementWidth(),dateField,runcode);

      setElementProperty('display', 'block', 'ComboControlIFrame');
      setProperty('display', 'block');

      var x = fieldPos.getElementLeft();
      var y = fieldPos.getElementBottom();

      setProperty('left', x + "px");
      setProperty('top', y + "px");
      setElementProperty('left', x + "px", 'ComboControlIFrame');
      setElementProperty('top', y + "px", 'ComboControlIFrame');
      setElementProperty('width', fieldPos.getElementWidth() + "px", 'ComboControlIFrame');
      setElementProperty('height', comboPos.getElementHeight() + "px", 'ComboControlIFrame');
    }
  
  
  }

  this.hide = hide;
  function hide() {
    if(dateField) {
      setProperty('display', 'none');
      setElementProperty('display', 'none', 'ComboControlIFrame');
      dateField = null;
    }
  }
}

var comboControl = new ComboControl();

function showComboControl(textField,value_array,runcode) {
  if(value_array!==undefined)
	  comboControl.show(textField,value_array,runcode);
}

function hideComboControl() {
  comboControl.hide();
}


document.write("<iframe id='ComboControlIFrame' src='javascript:false;' frameBorder='0' scrolling='no' style='DISPLAY: none;Z-INDEX: 99;LEFT: 0px;WIDTH: 250px;POSITION: absolute;'></iframe>");
document.write("<div id='ComboControl' style='PADDING-RIGHT: 0px;DISPLAY: none;PADDING-LEFT: 0px;Z-INDEX: 100;PADDING-BOTTOM: 0px;MARGIN: 0px;PADDING-TOP: 0px;POSITION: absolute;BACKGROUND-COLOR: #fff'></div>");
    