 SelectList = function(pId) {  
  this.Show = SelectList.Show;
  this.Hide = SelectList.Hide;
  this.Toggle = SelectList.Toggle;
  this.SelectEl = SelectList.SelectEl;
  this.SetValue = SelectList.SetValue;
  this.AddEvents = SelectList.AddEvents;
  this.SetByValue = SelectList.SetByValue;
  this.GetInputValue = SelectList.GetInputValue;
  
  this.mList = document.getElementById(pId);
  this.mSelectListHead = GetChildren(this.mList)[0];
  this.mSelectListHead.parent = this;
  this.mSelectListHead.onclick = this.Toggle;
  this.mSelectList = GetChildren(GetChildren(this.mList.parentNode)[2])[0];

  this.mSelectListInput = this.mSelectListHead.getElementsByTagName('div')[0];
  this.mInput = this.mList.getElementsByTagName('input')[0];
  this.mSelectList.style.display = 'none'
  
  this.mElements = this.mSelectList.getElementsByTagName('li');  
  
  this.mSelectedIndex = 0;
  this.mValue = '';
  this.AddEvents();
  this.SetByValue();
  
  if(undefined == SelectList.Lists){
    SelectList.Lists = [];
  }
  SelectList.Lists.push(this);
  
}

SelectList.Show = function(){
   this.mSelectList.style.display = 'block';
}

SelectList.Hide = function(){
   this.mSelectList.style.display = 'none';
}

Hide = function(){
  this.style.display = 'none';
}


SelectList.Toggle = function(){
  var obj = this;
  if(!this.mSelectList){
    obj = this.parent;
  }
  
  if('block' != obj.mSelectList.style.display){
    SelectList.HideAll(obj);
    obj.Show();
  }
  else{
    obj.Hide();
  }
}

SelectList.HideAll = function(pNoHideIt){
  for(var i = 0 ; i < SelectList.Lists.length ; i++) {
    if(pNoHideIt != SelectList.Lists[i]){
      SelectList.Lists[i].Hide();
    }
  }
}

SelectList.AddEvents = function() {
  for(var i = 0; i < this.mElements.length ; i++){
    if(undefined == this.mElements[i].parent){
      this.mElements[i].parent = this;
    }
    this.mElements[i].onmouseover = SelectList.evMouseOver;
    this.mElements[i].onmouseout = SelectList.evMouseOut;
    this.mElements[i].onclick = SelectList.evClick;
  }
}

SelectList.SelectEl = function(pIndex){
  var elValue = this.mElements[pIndex].value;

  this.mSelectListInput.innerHTML = '';
  var clon = this.mElements[pIndex].getElementsByTagName('div')[0].cloneNode(true);
  clon.style.width = '16px';
  
  this.mSelectListInput.appendChild(clon);
  this.mSelectListInput.style.width = '63px';
  this.mSelectListInput.style.margin = '0px 2px 2px 2px';
  this.SetValue(elValue);
  this.mSelectedIndex = pIndex;
  return elValue;
}

SelectList.SetValue = function(pValue){
  if(false == /\+/.test(pValue)){
    pValue = '+' + pValue;
  }
  this.mValue = pValue;
  this.mInput.value = pValue;
  
  /*
  var exdate=new Date();
  var expiredays = 1;
  exdate.setDate(exdate.getDate()+expiredays);
  document.cookie = "fld_" + this.mInput.name+ "=" +escape(this.mInput.value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
  */
  
  this.mSelectListInput.innerHTML +=  pValue;
  return pValue;
}

SelectList.GetInputValue = function(){
  return this.mInput.value;
}

SelectList.SetByValue = function(){
  if('' == this.mInput.value){
    return;
  }
  
  for(var i = 0 ; i < this.mElements.length ; i++){
    if(this.mElements[i].value == this.mInput.value){
      this.SelectEl(i);
      
      return i;
    }
  }
  
  return;
}

GetChildren = function(pChildNodes){

  var children = [];
  pChildNodes = pChildNodes.childNodes;
  for(var i = 0 ; i < pChildNodes.length ; i++){
    if(1 == pChildNodes[i].nodeType){
      children.push(pChildNodes[i]);
    }
  }
  return children;
}


SelectList.GetEl = function(pThis, pList ){
   
  for(var i = 0 ; i < pList.mElements.length ; i++){
    if(pThis == pList.mElements[i]){
      pList.SelectEl(i);
    }
  }
  pList.Hide();
  return pThis;
}

SelectList.evMouseOver = function(){
  
  this.className = 'hover';
}

SelectList.evClick = function(pEv){
  SelectList.GetEl(this, this.parent);
}

SelectList.evMouseOut = function(){
  this.className = 'blur';
}
