/*
SELECT DROP-DOWN BOX
Acest script genereaza un select dropdown in care pot fi editate toate elementele.
Pornind de la un select genereaza dinamic un input in locul vechiului select pentru afisarea textului si
o lista <ul><li>text</li></ul> pentru optiunile din select

Toti parametrii sunt obligatorii.

Exemplu de apelare:

function select(parentNodeId,id,DisplayTextInputId,inputClass,listClass){

parentNodeId	    - id-ul div-ului parinte pentru selectBox
id		    	    - id-ul selectBox-ului
DisplayTextInputId  - id-ul inputului in care va fi afisat textul din selectBox
inputClass          - clasa CSS a inputului in care va fi afisat textul din selectBox
listClass           - clasa CSS pentru lista de optiuni din selectBox

*/
 function getTextWidth(text)
{
var spanElement = document.createElement("span");
spanElement.style.whiteSpace = "nowrap";
spanElement.innerHTML = text;
document.body.appendChild(spanElement);
var width = spanElement.offsetWidth;
document.body.removeChild(spanElement);

return width;
}
function getWidth(element)  { return (document.all ? element.offsetWidth : element.clientWidth); }
function getHeight(element) { return (document.all ? element.offsetHeight : element.clientHeight); }
function getXpos(obj) {
 
		var elem = obj;
		var xPos = 0; 
 
		while (elem) {
			xPos += elem.offsetLeft; 
			elem = elem.offsetParent;
		}
 
		return xPos;
	}
 
 
	function getYpos(obj) {
 
		var elem = obj;
		var yPos = 0;
 
		while (elem) {
			yPos += elem.offsetTop;
			elem = elem.offsetParent;
		}
 
	return yPos;
 
}

	var value = new Array();
	var name = new Array();
	var hidden = new Array();
	var container;
	var input;
	var contor = 2;
	var parent;
	var selectInit;
	var valoareInput;
	var valoareaCurenta;
	var indiceCurent=-1;
	var over = new Array();
	var searchKey;
	var previousResult = "";
	var previousI = -1;
		
	function HideCombo(id,classNameValue){
	    if(!classNameValue)
			var containers = $$(".customDropdown");
		else
		   var containers = $$(classNameValue);
		for(var i=0;i<containers.length;i++){
			if(containers[i].id==id){
				if(hidden[id]==true){
					document.getElementById(id).style.display = '';
					hidden[id] = false;
				}else{
					document.getElementById(id).style.display ='none';
					hidden[id] = true;
				}
			}else{
				document.getElementById(containers[i].id).style.display = "none";
				hidden[containers[i].id] = true;
			}
		}
	}
	
	function Check(pId,id){
		var pDiv = document.getElementById(pId);
		for(var i=0;i<pDiv.childNodes.length;i++){
			if(pDiv.childNodes[i].tagName == "INPUT"){
				if(pDiv.childNodes[i].type=="radio"){
					if(pDiv.childNodes[i].checked){
						pDiv.childNodes[i].checked = false;
					}
					if(pDiv.childNodes[i].id==id){
						pDiv.childNodes[i].checked = !pDiv.childNodes[i].checked;
					}
				}
			}
		}
	}
	function get_previousSibling(n)
	{
		x=n.previousSibling;
		while (x.nodeType!=1)
		  {
			x=x.previousSibling;
		  }
		return x;
	}
	function Search(eve){
		if(!eve) var eve = window.event;
		searchKey = String.fromCharCode(eve.keyCode);
		var prevIAux = previousI;
		var prevRes = previousResult;
		var containerDiv = get_previousSibling(this);
		var haystack = document.getElementById(containerDiv.id).childNodes;
		for(var i=0;i<haystack.length;i++){
			if(haystack[i].tagName=="LABEL"){
				if(haystack[i].innerHTML.toLowerCase().indexOf(searchKey.toLowerCase())==0&&haystack[i].innerHTML.toLowerCase()!=previousResult&&(previousI<i||previousI==0)){
					previousResult = haystack[i].innerHTML.toLowerCase();
					previousI = i;
					haystack[i].onclick();
					haystack[i].onmouseover();
					containerDiv.scrollTop = parseInt(containerDiv.scrollHeight/(haystack.length+10)*(i-1));
					//window.status = containerDiv.scrollHeight +"/"+(haystack.length+10)+"*"+(i-1);
					HideCombo(containerDiv.id);
					break;
				}else{
					haystack[i].onmouseout();
				}
			}
		}
		if(prevIAux == previousI){
			previousI = -1;
			previousResult = "";
		}
	}
	function select(parentNodeId,id,DisplayTextInputId,inputClass,listClass){
		selectInit = $(id);
		hidden[id] = true;
		over[id] = true;
		if(selectInit){
			if(selectInit.tagName=="SELECT"){
				/*
				Generare Input Display
				*/
				var selectedValue = selectInit.options[selectInit.selectedIndex];
				parent = $(parentNodeId);
				input = document.createElement("input");
				input.type = "text";
				input.id   = DisplayTextInputId;
				input.className = inputClass;
				input.onkeydown = Search;
				input.onkeypressed = function(){return false};
				input.readOnly = true;
				input.onmouseover = function(){this.style.cursor="pointer"}
				
				if (input.addEventListener)
				{
					input.addEventListener('click',function(){HideCombo(id,"."+listClass)}, false); 
				}
				else if (input.attachEvent)
				{
					input.attachEvent('onclick', function(){HideCombo(id,"."+listClass)});	
				}
				
				if (input.addEventListener)
				{
					input.addEventListener('blur',function(){if(!over[id]&&!hidden[id])HideCombo(id,"."+listClass)}, false); 
				}
				else if (input.attachEvent)
				{
					input.attachEvent('onblur', function(){if(!over[id]&&!hidden[id])HideCombo(id,"."+listClass)});	
				}
				
				input.value = selectedValue.text;
				parent.appendChild(input);
				/*input.setAttribute("onclick","HideCombo('"+id+"','."+listClass"')");*/
				/*
				End Generare Input Display
				*/
				
				/*
				Generare Container
				*/
				container = document.createElement('div');
				container.className = listClass;
				//window.status +=DisplayTextInputId+" - "+listClass+",";
				container.style.display = "none";				
				container.id = id;
				parent.replaceChild(container,selectInit);
				/*
				End Generare Container
				*/
				
				var n = selectInit.childNodes.length;
				var contorIntern = 0;
				
				if(selectInit.onchange){
					OnChangeFunction = selectInit.onchange.toString();
					//alert(OnChangeFunction);
					OnChangeFunction = OnChangeFunction.match(/(\{[\x00-\xff]+\}){1}/)[0];
					///alert(OnChangeFunction);
					OnChangeFunction = OnChangeFunction.replace("{","");
					//alert(OnChangeFunction);
					OnChangeFunction = OnChangeFunction.substr(0,OnChangeFunction.length-1);
					//alert(OnChangeFunction);
					/*pentru ajax-ul de la onchange la select*/
				}else{
					OnChangeFunction = "";
				}
				
				for(var i=0;i<n;i++)
				{
					if(selectInit.childNodes[i].tagName == "OPTION"){
						newItem = document.createElement('input');
						newItem.id = id+"_radio_"+i;
						newItem.name = selectInit.name;
						//newItem.checked = true;
						newItem.type = "radio";
						
						newItem.style.cssText = "position:absolute;top:-10px;left:-10px;filter:alpha(opacity=0);opacity:0;";
						newItem.value = selectInit.childNodes[i].value;
						if(OnChangeFunction.match(/this\.options\[this\.selectedIndex\]\.value/)){
							OnChangeFunctionAux = OnChangeFunction.replace(/this\.options\[this\.selectedIndex\]\.value/,selectInit.childNodes[i].value);
						}else if(OnChangeFunction.match(/this\.value/)){
							OnChangeFunctionAux = OnChangeFunction.replace(/this\.value/,selectInit.childNodes[i].value);
						}else{
							OnChangeFunctionAux = "";
						}
						if(OnChangeFunctionAux=="")
						{
							newItem.onclick = new Function(OnChangeFunction);
						}
						else
						{
							newItem.onclick = new Function(OnChangeFunctionAux);
						}
						container.appendChild(newItem);
						if(selectedValue.text==selectInit.childNodes[i].innerHTML){
							newItem.checked = "true";
						}
						newItemText = document.createElement("label");
						newItemText.htmlFor = id+"_radio_"+i;
						newItemText.onmouseover = function(){this.style.backgroundColor = "#EBDCC8";};
						newItemText.onmouseout = function(){this.style.backgroundColor = "#FFFFFF";};
						var trimmed = selectInit.childNodes[i].innerHTML;
						/*var straux = "";
						if(getTextWidth(trimmed)>110){
							var numeOptiuni = trimmed.split(' ');
							numeOptiuni.reverse();
							while(getTextWidth(straux)<110){
								straux += numeOptiuni.pop()+" ";
							}
							if(numeOptiuni.length>0){
								straux += "<br>"+numeOptiuni.pop();
							}
							numeOptiuni.reverse();
							straux+= numeOptiuni.join(" ");
						}else{
							straux = trimmed;
						}*/
						newItemText.innerHTML = trimmed;
						newItemText.onclick = new Function('$("'+DisplayTextInputId+'").value="'+selectInit.childNodes[i].innerHTML+'";HideCombo(this.parentNode.id,".'+listClass+'");Check(this.parentNode.id,this.htmlFor);$(this.htmlFor).onclick();');
						container.appendChild(newItemText);
						newBr = document.createElement("br");
						container.appendChild(newBr);
					}
				}
				/*var newDiv = document.createElement("div");
				newDiv.className = "clear";
				container.appendChild(newDiv);
				parent.appendChild(newDiv);*/
				//container.appendChild(container);
				parent.onmouseover = function(){if(!hidden[id])over[id] = true;}
				parent.onmouseout = function(){over[id] = false;}
				Event.observe(container,"mouseout",function(event){$(DisplayTextInputId).focus();});
				
				
			}
		}
	}
	
		
