function addEvent(el,event,handler)
{
 if(el.addEventListener)
	 el.addEventListener(event,handler,false);
 else if(el.attachEvent)
 	el.attachEvent("on"+event,handler);
}

function SelectBox(control)
{
	//alert(parent.name);
	this.controlSelect = control;
	
	//var s_type = control.getAttribute('onchange');
	//alert(s_type);
	
	//var w= new dhtmlXCombo(z,parent.name,size,s_type);
	
	this.options = new Array();
	for(var i=0;i<this.controlSelect.options.length;i++){
		if(this.controlSelect.options[i].selected) this.selectedIndex=i;
		var label = this.controlSelect.options[i].innerHTML;
		var val = this.controlSelect.options[i].getAttribute("value");
		if((typeof(val)=="undefined")||(val===null)) val=label;
		this.options[i]=[val,label];
	}
	
	//w.addOption(x);
	//w.selectOption(sel);

	//alert(this.options[0][1]);

	this.display();	
	control.parentNode.removeChild(control);
	
	 addEvent(document.body,"click",function(e){if(window.selectBoxOpen)window.selectBoxOpen.close();});
	 addEvent(document.body,"keydown",function(e){try{if(window.selectBoxOpen && (e||event).keyCode==9)window.selectBoxOpen.close();}catch(e){}return true;});
	
	return this;
	
}

SelectBox.prototype.selectbox = null;
SelectBox.prototype.controlSelect = null;
SelectBox.prototype.options = null;
SelectBox.prototype.selectedIndex = -1;
SelectBox.prototype.elementSelectBox = null;
SelectBox.prototype.elementOptionsList = null;

SelectBox.prototype.close = function()
{
	var el = this.elementOptionsList;
	if (el && el.style.display=='block')
	{
		var elInput = el.selectbox.elementSelectBox.getElementsByTagName("input")[0];
		if (!elInput.hasFocus)
		{
			el.selectbox.elementSelectBox.className = 'selectBox';
			elInput.className = '';			
		}	

		el.style.display = 'none';
		window.selectBoxOpen = null;
	}
}


SelectBox.prototype.getSelectedOptionText = function()
{
	if (this.selectedIndex >= 0)
	{
		if (this.options.length > this.selectedIndex)
		{
			return html_entity_decode(this.options[this.selectedIndex][1]); 			
		}
	}
	return '';
}

SelectBox.prototype.setSelectedIndex = function(index)
{
	if (this.options && this.options.length > index)
	{
		this.selectedIndex = index;
	}

	var elSelectedOption = this.elementSelectBox.getElementsByTagName("input")[0];
	
	elSelectedOption.value = this.getSelectedOptionText();
	this.controlSelect.selectedIndex = this.selectedIndex;

	if (this.controlSelect.onchange)
	{
		this.controlSelect.onchange();
	}
}

SelectBox.prototype.onKeyDown = function(e)
{
	e = e||event;
	

	// tab or shift or ctrl or altgr
	if (e.keyCode==9 || e.keyCode==16 || e.keyCode==17 || e.keyCode==18) 
	{
		if (e.keyCode==9) this.parentNode.selectbox.close();
		e.cancelBubble = true;
		return true;
	}
	
	// return or escape or space
	if (e.keyCode==13 || e.keyCode==27 || e.keyCode==32)
	{
		if (e.keyCode==27) this.parentNode.selectbox.close();
		else this.parentNode.onclick(e);
		
		e.cancelBubble = true;
		return false;
	}
	
	// left or right arrow
	if (e.keyCode==37 || e.keyCode==39)
	{
		e.cancelBubble = true;
		return false;	
	}
	
	// up or down arrow
	if (e.keyCode==38 || e.keyCode==40)
	{
		e.cancelBubble = true;
		return false;	
	}
	
	e.cancelBubble = true;
	//alert(e.keyCode);
	return true;
}

SelectBox.prototype.createSelectBoxElement = function()
{
	
	this.elementSelectBox = document.createElement("DIV");
	this.elementSelectBox.style.cssText = this.controlSelect.style.cssText;
	this.elementSelectBox.className = 'selectBox';
	this.elementSelectBox.selectbox = this;
	//this.elementSelectBox.onclick=this.toggleOptionsList;
	this.elementSelectBox.onclick = function(e) { try {this.getElementsByTagName("input")[0].onclick(e);} catch(e){}return false;};
	
		var elSelectedOption = document.createElement("INPUT");

		elSelectedOption.type = 'text';
		elSelectedOption.readOnly = true;
		elSelectedOption.enabled=false; 		
		elSelectedOption.selectbox = this;
		elSelectedOption.onkeydown = this.onKeyDown;
		//elSelectedOption.onkeypress = this._onKeyF;
		//elSelectedOption.onkeydown = function(e) { if (e.keyCode!=9){this.onclick(e);return false;}return true;};
		elSelectedOption.onfocus = function(e) { this.hasFocus=true; this.className = 'focused';	this.parentNode.className = 'selectBox selectBoxFocused'; clearSelection(); return true;};
		elSelectedOption.onblur = function(e) { this.hasFocus=false; if (window.selectBoxOpen!=this.parentNode.selectbox) { this.className = ''; this.parentNode.className = 'selectBox'; } return true; };
		//elSelectedOption.onclick = function(e) { this.className = 'focused';	this.parentNode.className = 'selectBox selectBoxFocused';};
		elSelectedOption.onselect = function(e) { var o = this.value; this.value=''; this.value=o;};
		elSelectedOption.onkeyup = function(e) { var o = this.value; this.value=''; this.value=o;};
		elSelectedOption.value = this.getSelectedOptionText()+'                                       ';
		elSelectedOption.onclick=this.toggleOptionsList;
		
		elSelectedOption.style.position = 'absolute';
		elSelectedOption.style.width = this.elementSelectBox.style.width;
		elSelectedOption.style.overflow = 'hidden';
		elSelectedOption.style.left = 0;

		
		disableSelection(elSelectedOption);
		
		this.elementSelectBox.appendChild(elSelectedOption);


		var elButtonImage = document.createElement("IMG");
		elButtonImage.src = '/gfx/selectbox_button.gif';
		elButtonImage.style.width = '17px';
		elButtonImage.style.height = '15px';
		elButtonImage.style.position = 'absolute';
		elButtonImage.onclick = function(e) { try {var el = this.parentNode.getElementsByTagName("input")[0]; el.focus(); } catch(e){}return false;};
	
	this.elementSelectBox.appendChild(elButtonImage);

	disableSelection(this.elementSelectBox);
	return this.elementSelectBox;
}

SelectBox.prototype.createOptionListElement = function()
{
	var elementOptionsListShadow = document.createElement("DIV");
	elementOptionsListShadow.className = 'selectBoxOptionsList';
	elementOptionsListShadow.style.display = 'none';
	elementOptionsListShadow.selectbox = this;
	
	var elementOptionsList = document.createElement("DIV");
	//elementOptionsList.className = 'selectBoxOptionsList';
	//elementOptionsList.style.display = 'none';
	
	disableSelection(elementOptionsList);
	
	var elList = document.createElement("UL");
	
	for(var i=0;i<this.options.length;i++)
	{
		var elOption = document.createElement("LI");
		//elOption.style.cssText = 'background-color:white;display:block;white-space:nowrap;z-index:99';
		//elOption.style.cssText='';
		elOption.innerHTML = this.options[i][1];
		elOption.selectIndex = i;
		elOption.onclick = this.optionClick;
		elOption.selectbox = this;
		elOption.className = '';
		elOption.onmouseover = function () { this.className = 'selected' };		
		elList.appendChild(elOption);
	}
	elementOptionsList.appendChild(elList);
	elementOptionsListShadow.appendChild(elementOptionsList);
	
	this.elementOptionsList = elementOptionsListShadow; 
	//this.elementOptionsList.onclick=this.toggleOptionsList;
	return this.elementOptionsList;
}


SelectBox.prototype.optionClick = function (e)
{
	if (this.selectIndex >= 0)
	{
		this.selectbox.setSelectedIndex(this.selectIndex);
	}
}

SelectBox.prototype.toggleOptionsList = function (e)
{
	var el = this.selectbox.elementOptionsList;
	if (window.selectBoxOpen && el.selectbox==window.selectBoxOpen)
	{
		window.selectBoxOpen.close();
		//try {this.selectbox.elementSelectBox.getElementsByTagName("input")[0].blur();} catch(e){}
		//this.selectbox.close();
		//try {this.selectbox.elementSelectBox.getElementsByTagName("input")[0].focus();clearSelection(this.selectbox.elementSelectBox.getElementsByTagName("input")[0])} catch(e){}
	}
	else
	{
	
		if (window.selectBoxOpen) window.selectBoxOpen.close();
		

		try {if(!this.selectbox.elementSelectBox.getElementsByTagName("input")[0].hasFocus) this.selectbox.elementSelectBox.getElementsByTagName("input")[0].focus();} catch(e){}
		
		//var pos = Position.get(this.selectbox.elementSelectBox);
		var pos = getPosition(this.selectbox.elementSelectBox);
		pos.top = pos.top - 1;
		el.style.top = pos.top + pos.height + 'px';
		el.style.left = pos.left + 'px';
		
		
		el.style.minWidth = pos.width + 'px';
		//el.style.maxWidth = pos.width + 'px'
		//el.style.width = pos.width;

		var el2 = el.getElementsByTagName("div")[0];
		el2.style.minWidth = pos.width - 2 + 'px';
		//el2.style.maxWidth = pos.width + 'px'
		//el2.style.width = pos.width;

		el.style.display = 'block';
		el2.style.display = 'block';
		el.style.position = 'absolute';
		
		/*
		var elImg = this.selectbox.elementSelectBox.getElementsByTagName("img")[0];
		var posImg = getPosition(elImg);
		var elInput = this.selectbox.elementSelectBox.getElementsByTagName("input")[0];
		elInput.style.width = pos.width - posImg.width +'px';
		*/
		
		window.selectBoxOpen = this.selectbox;
	}
	(e||event).cancelBubble = true;
}

SelectBox.prototype.display = function()
{
	this.createSelectBoxElement();
	
	this.elementSelectBox.selectbox = this;
	
	var divPlaceHolder = document.createElement("DIV");
	divPlaceHolder.style.position = 'relative';
		
	divPlaceHolder.appendChild(this.elementSelectBox);
		
	//this.controlSelect.parentNode.style.position = 'relative';
	this.controlSelect.parentNode.insertBefore(divPlaceHolder,this.controlSelect);
	this.controlSelect.style.display='none';

	//this.elementSelectBox.appendChild(this.elementOptionsList);
	this.createOptionListElement();
	
	divPlaceHolder.appendChild(this.elementOptionsList);
	//divPlaceHolder.insertBefore(this.elementOptionsList,this.controlSelect);
	
	 	
}



/***********************************************
* Disable Text Selection script- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/
function disableSelection(target){
	if (typeof target.onselectstart!="undefined") //IE route
		target.onselectstart=function(){return false}
	else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
		target.style.MozUserSelect="none"
	else //All other route (ie: Opera)
		target.onmousedown=function(){return false}
	target.style.cursor = "default"
}



function getPosition(obj) {
	var pos = new Object();
	pos.left = 0;
	pos.top = 0;
	pos.width = 0;
	pos.height = 0;

	var objElement = obj;
	
	if (obj.width) pos.width = obj.width;
	if (obj.height) pos.height = obj.height;
	
	if (obj.offsetWidth) pos.width = obj.offsetWidth;
	if (obj.offsetHeight) pos.height = obj.offsetHeight;
	if (objElement.offsetParent) {
		pos.left = objElement.offsetLeft

		pos.top = objElement.offsetTop
		while ((objElement = objElement.offsetParent)==true) {
			pos.left += objElement.offsetLeft;
			pos.top += objElement.offsetTop;
		}
		
	}
	return pos;
}

function html_entity_decode(str) {
  var ta=document.createElement("textarea");
  ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
  return ta.value;
}

function clearSelection(el) {
	setTimeout('_clearSelection()',1000);
}
function _clearSelection() {
	try {
		if (document.getSelection)
		{
			document.getSelection().collapseToEnd();
		}
		else if (document.selection)
		{
			document.selection.clear();
		}
	} catch (e) { }
}
