function innnerNode(elem) {
 var el = elem;
 for (; el.tagName; el = el.firstChild);
 return el.parentNode.innerHTML;
}

function eventTarget(e){
 var targ = null;
 if (e.target) { targ = (e.target.tagName ? e.target : e.target.parentNode) }
 else { if (e.srcElement) { targ = e.srcElement } }
 return targ;
}


function targetIsChildClass(e, className) {
 var etarget = eventTarget(e);
 if (etarget){
  for (; etarget.tagName != 'BODY'; etarget = etarget.parentNode) {
   if (etarget.className == className) return true;
  }
 }
 return false;
}


function targetIsChildElement(e, element) {
 var etarget = eventTarget(e);
 if (etarget){
  while (etarget.tagName != 'BODY'){   
   if (etarget == element) {return true};
   etarget = etarget.parentNode;
  }
 };
 return false;
}


function setupEvent (elem, eventType, handler, capture){
 if (elem.attachEvent) { elem.attachEvent ('on' + eventType, handler) };
 if (elem.addEventListener) { elem.addEventListener (eventType, handler, capture) }
};

function onSelectMouseDownOut(e, select){
 var etarget = eventTarget(e);

 if(select.Active) {
  var targ = eventTarget(e); 
  if ((targ != select.Btn) && !targetIsChildElement(e, select.currOption) && !targetIsChildElement(e, select.Options)){        
   select.Options.style.display = 'none';
   select.Active = false;
  }
 }
 return false;
};


function Option(option_id){
 var thisCopy = this;   
 this.Option = document.getElementById(option_id);   
 setupEvent (this.Option, 'mouseover', function() {return thisCopy.onMouseOver()}, false);
 setupEvent (this.Option, 'mouseout',  function() {return thisCopy.onMouseOut()}, false)  
};

Option.prototype.onMouseOver = function(){
 this.Option.style.background = "#08246b";
 this.Option.style.color = "#fff"
};

Option.prototype.onMouseOut = function(){
 this.Option.style.background = "white";
 this.Option.style.color = "#000"
};


function Select(field_id){
 var thisCopy = this;
 this.Field = document.getElementById(field_id);
 this.Label = document.getElementById("l" + field_id);
 this.Active = false;
 
 this.currOption = document.getElementById("curr"+field_id);
 this.Btn = document.getElementById("btn"+field_id);

 this.currValue = document.getElementById("currv"+field_id);

 this.Options = document.getElementById("options"+field_id);
 this.Option = new Array();
 var i = 0;
 while (document.getElementById("o"+i+field_id)){
  this.Option[i] = new Option("o"+i+field_id);    
  setupEvent (this.Option[i].Option, 'mouseup', function(e) {return thisCopy.onMouseUp(e)}, false); 
  i++;
 }


 setupEvent (this.Btn, 'mousedown', function(e) {return thisCopy.onMouseDown(e)}, false); 
 setupEvent (this.currOption, 'mousedown', function(e) {return thisCopy.onMouseDown(e)}, false);
 setupEvent (document, 'mousedown', function(e) {return onSelectMouseDownOut(e, thisCopy)}, false); 

 if (this.Btn.attachEvent) {
  setupEvent (this.Btn, 'drag', function(e) {return thisCopy.onDrag(e)}, false); 
  setupEvent (this.Btn, 'dblclick', function(e) {return thisCopy.onMouseDown(e)}, false); 
  setupEvent (this.currOption, 'dblclick', function(e) {return thisCopy.onMouseDown(e)}, false) 
 };

}


Select.prototype.onMouseDown = function(e) {
 if (e.preventDefault) e.preventDefault();
 if (this.Options.style.display == 'none') {
  this.Btn.src = '/i/dwnselect.gif';

  this.Options.style.width = document.getElementById("tb"+this.Field.id).offsetWidth - (this.Btn.attachEvent ? 0 : 2) + 'px';
  this.Options.style.display = '';
  this.Active = true;
 }
 else { 
  this.Options.style.display = 'none';   
  this.Active = false;
 }
};


Select.prototype.onMouseUp = function(e) {
 if(this.Active) {
  this.Btn.src = '/i/upselect.gif';
  
  var etarget = eventTarget(e);  
  var newValue = innnerNode(etarget);
  this.currValue.innerHTML = newValue;
  this.Field.value = etarget.getAttribute('value');
  document.getElementById("formSelect").submit(); 
  this.Options.style.display = 'none';
  this.Active = false;
 }
};


Select.prototype.onDrag = function(e){
 return false; 
};

