// fxSelect

function fxSelect(objPlaceholder) {
	this.placeholder = objPlaceholder;
	this.placeholder.fxSelect = this;
	this.render = fxSelect_render;
	this.interlock = fxSelect_interlock;
	this.interlockelement = null;
	this.toggleoptions = fxSelect_toggleoptions;
	this.selectoption = fxSelect_selectoption;
	this.rendergraphical = fxSelect_rendergraphical;
	this.populate = fxSelect_populate;
	this.interlockarray = new Array();
	this.selectedoption = null;
	this.selectedoption2 = null;
	this.optionlist = null;
	this.test = fxSelect_test;
}

fxSelect.prototype.placeholder = function() {
	return this.placeholder;
};

fxSelect.prototype.interlockelement = function() {
	return this.interlockelement;
};

function fxSelect_render() {
	var elmt = this.placeholder;
	var fn = this.interlockelement.onchange;
	if (this.interlockelement != null) {
	if (this.interlockelement.onchange) {
		this.interlockelement.onchange = function() {
			fn();
			elmt.fxSelect.interlock();
		}
		}else{
		this.interlockelement.onchange = function() {
			elmt.fxSelect.interlock();
		}
		}
	}
}

function fxSelect_interlock() {
	var j = 1;
	this.placeholder.options.length = 0;
	if(typeof this.interlockarray[this.interlockelement.value] == 'object') {
		for (i = 0; i < this.interlockarray[this.interlockelement.value].length; i++) {
			if (this.interlockarray[this.interlockelement.value][i] != undefined) {
				this.placeholder.options.length = j;
				this.placeholder.options[j] = new Option(this.interlockarray[this.interlockelement.value][i],i);
				if (i == document.getElementById(this.placeholder.id + '_value').innerHTML) {
					var tempIndex = j;
				}
				j++;
			}
		}
		this.placeholder.selectedIndex = tempIndex;
	}
	if(this.placeholder.options.length == 0) {
		this.placeholder.options.length = 1;
		this.placeholder.options[1] = new Option('','null');
	}
	if (this.selectedoption != null) {
		this.populate();
	}
}

function fxSelect_toggleoptions() {
	if (this.optionlist.className == 'optionlisthidden') {
		this.optionlist.className = 'optionlist';
		this.optionlist.style.zIndex = 2;
	} else {
		if (this.optionlist.className == 'optionlist') {
			this.optionlist.className = 'optionlisthidden';
			this.optionlist.style.zIndex = 0;
		}
	}
}

function fxSelect_selectoption(selIndex) {
	this.placeholder.selectedIndex = selIndex;
	this.selectedoption.innerHTML = '<div class="selecteddropdown"></div>' + this.placeholder.options[selIndex].text;
	this.toggleoptions();
}

function fxSelect_test() {
	//alert(this.selectedoption.innerHTML);
	alert(this.optionlist.innerHTML);
}

function fxSelect_rendergraphical() {
	//Replace the select object
  this.placeholder.className += ' replaced';
 
  //Create a selectedoption div
  var div1 = document.createElement('div');
  div1.className = 'selectedoption';
  
  //Add selectedoption mouse events
  var elmt = this;
	div1.onclick = function() {
    elmt.toggleoptions();
  }

	//Create the option list div
  var div2 = this.optionlist = document.createElement('div');
  div2.className = 'optionlisthidden';

  this.selectedoption = this.placeholder.parentNode.insertBefore(div1,this.placeholder);
  this.optionlist = this.placeholder.parentNode.insertBefore(div2,this.placeholder);
  tempX = findPosX(this.placeholder);
  tempY = findPosY(this.placeholder);
  this.optionlist.style.top = tempY + 25;
  this.optionlist.style.left = tempX + 1;

  this.populate();
}

function fxSelect_populate() {
	//Populate the selectedoption div
	var opts = this.placeholder.options;
	if (opts.length > 0) {
	  for (var i=0; i<opts.length; i++) {
	    var selectedOpt;
	    if (opts[i].selected) {
	      selectedOpt = i;
	      break;
	    } else {
	      selectedOpt = 0;
	    }
	  }
	  //alert(this.placeholder.id);
		this.selectedoption.innerHTML = '<div class="selecteddropdown"></div>' + opts[selectedOpt].text;
		
		//Populate optionlist div
	  var ul = document.createElement('ul');
	  
	  for (var i=0; i<opts.length; i++) {
	    var li = document.createElement('li');
	    var txt = document.createTextNode(opts[i].text);
	    li.appendChild(txt);
	    li.selIndex = opts[i].index;
	    var elmt = this;
	    li.onclick = function() {
	      elmt.selectoption(this.selIndex);
	      if (elmt.placeholder.onchange) {
	 		    elmt.placeholder.onchange();
	 		  }
	    }
	    if (window.attachEvent) {
	      li.onmouseover = function() {
	        this.className += ' hover';
	      }
	      li.onmouseout = function() {
	        this.className = 
	          this.className.replace(new RegExp(" hover\\b"), '');
	      }
	    }
	    ul.appendChild(li);
	  }
	
		this.optionlist.innerHTML = '';
	  this.optionlist.appendChild(ul);
	} else {
		this.selectedoption.innerHTML = '<div class="selecteddropdown"></div>';
		this.optionlist.innerHTML = '';
	}
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}
