
function SFX_Dropdown_Controller(id, writehtml, headertext, imagepath, disableId) {
	//alert("constructor");
    this._id = id;
	this._eventWrapperId = this._id + this._event_id_append;
	this._optionsId = this._id + this._options_id_append;
	this._headerId = this._id + this._header_id_append;
	//this._tabindex = tabindex;
	this._imagepath = imagepath
	if (headertext)
	{
		this._headerText = headertext;
	}	
	if (disableId)
	{
		this._disableId = disableId;
	}
	if(writehtml)
	{
		this.createControl();
	}	
	this.init();
	
}


SFX_Dropdown_Controller.prototype._id;

SFX_Dropdown_Controller.prototype._isBlue = false;

SFX_Dropdown_Controller.prototype._intervalId = 0;

SFX_Dropdown_Controller.prototype._eventWrapperId;

SFX_Dropdown_Controller.prototype._headerId;

SFX_Dropdown_Controller.prototype._optionsId;

SFX_Dropdown_Controller.prototype._maxDisplay = 12;

SFX_Dropdown_Controller.prototype._tabindex;

SFX_Dropdown_Controller.prototype._disableId;

SFX_Dropdown_Controller.prototype._viewStartIdx = 0;

SFX_Dropdown_Controller.prototype._viewEndIdx = 0;

SFX_Dropdown_Controller.prototype._currentIdx = 0;

SFX_Dropdown_Controller.prototype._listtype = 'li';

SFX_Dropdown_Controller.prototype._headerText;

SFX_Dropdown_Controller.prototype._disablehrefjump;

SFX_Dropdown_Controller.prototype._main_wrapper_class = 'SFX_dropdown';

SFX_Dropdown_Controller.prototype._event_id_append = '_sfx_select';

SFX_Dropdown_Controller.prototype._options_id_append = '_sfx_options';

SFX_Dropdown_Controller.prototype._header_id_append = '_sfx_select_header';

SFX_Dropdown_Controller.prototype._header_class = 'SFX_dropdown_header';

SFX_Dropdown_Controller.prototype._option_class = 'SFX_dropdown_options';

SFX_Dropdown_Controller.prototype._moveup_class = 'SFX_dropdown_moveup';

SFX_Dropdown_Controller.prototype._movedown_class = 'SFX_dropdown_movedown';

SFX_Dropdown_Controller.prototype._press = ' press';

SFX_Dropdown_Controller.prototype._textarr = null;

SFX_Dropdown_Controller.prototype._valuearr = null;

SFX_Dropdown_Controller.prototype._currentItem = 0;

SFX_Dropdown_Controller.prototype.createControl = function(){

var oObj = this.returnObjById(this._id);
if (oObj.parentNode.parentNode.className.toUpperCase() == "BLUE")
{
	this._isBlue = true;
	this._maxDisplay = 1000;
}
var mainParent = oObj.parentNode;
var eventWrapperDiv = document.createElement('div');
var strclass = 'class';
if(this.isIE())
strclass='className';

eventWrapperDiv.setAttribute('id', this._eventWrapperId);
if (this._tabindex)
{
	eventWrapperDiv.setAttribute('tabindex', this._tabindex);	
} 
else 
{
	eventWrapperDiv.setAttribute('tabindex', 0);		
}
mainParent.appendChild(eventWrapperDiv);

var headerDiv = document.createElement('div');
headerDiv.setAttribute(strclass, this._header_class);
headerDiv.setAttribute('id', this._headerId);	
headerDiv.innerHTML =  this._headerText + "<b></b>";
eventWrapperDiv.appendChild(headerDiv);

var optionDiv = document.createElement('div');
optionDiv.setAttribute('id', this._id + this._options_id_append);
optionDiv.setAttribute(strclass, this._option_class);
optionDiv.setAttribute("sfxwrapper", this._eventWrapperId);
optionDiv.setAttribute("selectid", this._id);
mainParent.appendChild(optionDiv);

var moveup = document.createElement(this._listtype);
if (this._listtype == 'a')
{
	if(this._disablehrefjump)
	{
		moveup.setAttribute('href', '#');
	} else {
		moveup.setAttribute('href', '#' + this._eventWrapperId);
	}
}
moveup.setAttribute(strclass,this._moveup_class);
moveup.innerHTML = "<img class=\"upArrow\" src=\""+ this._imagepath + "arrow_up.gif\" /><b></b>&nbsp;";

var selectitemsholder = optionDiv;
if (this._listtype == 'li')
{
var ullist = document.createElement('ul');	
optionDiv.appendChild(ullist);
selectitemsholder = ullist;
}

selectitemsholder.appendChild(moveup);

for(i=0;i< oObj.length ;i++){
	
	var text = oObj.options[i].text;
	var opvalue = oObj.options[i].value;
	
	if (opvalue){
	if (opvalue != "" && opvalue !="\n"){
	var option_a = document.createElement(this._listtype);
	if (this._listtype == 'a')
	{
		if(this._disablehrefjump)
		{
			option_a.setAttribute('href', '#');
		} else {
			option_a.setAttribute('href', '#' + this._eventWrapperId);
		}
	}
	//option_a.setAttribute('value', opvalue);
	option_a.setAttribute("optidx", i);
	option_a.innerHTML = text + "<b></b>";
	selectitemsholder.appendChild(option_a);
	}
	}
}


var movedown = document.createElement(this._listtype);
if(this._disablehrefjump)
{
	movedown.setAttribute('href', '#');
} else {
	movedown.setAttribute('href', '#' + this._eventWrapperId);
}

movedown.setAttribute(strclass, this._movedown_class);
movedown.setAttribute("id", this._optionsId + "_movedown" );
movedown.innerHTML = "<img class=\"downArrow\" src=\""+ this._imagepath + "arrow_down.gif\" /><b></b>";

selectitemsholder.appendChild(movedown);

}

SFX_Dropdown_Controller.prototype.init = function(){
	if (this._disableId)
	{
		var disableme = this.returnObjById(this._disableId);
		disableme.onkeydown = function (oEvent) {

	        //check for the proper location of the event object
	        if (!oEvent) {
				oEvent = window.event;
	        }    

	        //call the handleKeyDown() method with the event object
	        oThis.handleDisableTab(oEvent);
	    };
	}
	
	
	
	var oThis = this;
	var oObj = this.returnObjById(this._eventWrapperId);
	var parentObj = oObj.parentNode;

	if(oObj.id == this._eventWrapperId) {
		//alert("init");
		oObj.onkeydown = function (oEvent) {

	        //check for the proper location of the event object
	        if (!oEvent) {
				oEvent = window.event;
	        }    

	        //call the handleKeyDown() method with the event object
	        oThis.handleHeaderKeyDown(oEvent);
	    };
	
		oObj.onclick = function (oEvent) {

	        //check for the proper location of the event object
	        if (!oEvent) {
	            oEvent = window.event;
	        }    
			
	        //call the handleHeaderOnClick() method with the event object
	        oThis.handleHeaderOnClick(oEvent);
	    };	
	}
	var selectitems = oObj.parentNode.getElementsByTagName(this._listtype);
	for(i=0;i<selectitems.length;i++) {
		
		var classtest = 'undefined';
		if (selectitems[i].className)classtest=selectitems[i].className;
		
		if (classtest == 'undefined' && classtest != 'SFX_dropdown_moveup' && classtest != 'SFX_dropdown_movedown')
		{
			selectitems[i].onclick = function (oEvent) {

		        //check for the proper location of the event object
		    	if (!oEvent) {
		       		oEvent = window.event;
		    	}    

		        //call the handleOnClick() method with the event object
		    oThis.handleOptionOnClick(oEvent);
			};
			if (selectitems.length >= (this._maxDisplay + 2) )// add 2 for up and down arrows
			{
				
			selectitems[i].onmousewheel = function (oEvent) {

		        //check for the proper location of the event object
		        if (!oEvent) {
		            oEvent = window.event;
		        }    

		        //call the handleOptionMouseWheel() method with the event object
		        oThis.handleOptionMouseWheel(oEvent);
		    };
		
			if (window.addEventListener) 
			{
				selectitems[i].addEventListener('DOMMouseScroll', this.handleOptionMouseWheel, false);
			}
		    }
		/**	selectitems[i].onmouseover = function (oEvent) {

		        //check for the proper location of the event object
		        if (!oEvent) {
		            oEvent = window.event;
		        }    

		        //call the handleHeaderMouseWheel() method with the event object
		        oThis.handleOptionMouseOver(oEvent);
		    };
			
			selectitems[i].onblur = function (oEvent) {

			     //check for the proper location of the event object
			     if (!oEvent) {
			         oEvent = window.event;
			     }    

			        //call the handleHeaderMouseWheel() method with the event object
			        oThis.handleOptionBlur(oEvent);
			};
			
			selectitems[i].onmouseout = function (oEvent) {

			     //check for the proper location of the event object
			     if (!oEvent) {
			          oEvent = window.event;
			     }    

			     //call the handleHeaderMouseWheel() method with the event object
			     oThis.handleOptionMouseOut(oEvent);
			};
			
		**/	
		} else 	if (classtest == 'SFX_dropdown_moveup' || classtest == 'SFX_dropdown_movedown')
		{
			selectitems[i].onclick = function (oEvent) {

			//check for the proper location of the event object
			if (!oEvent) {
			     oEvent = window.event;
			}    

			     //call the handleScrollClick() method with the event object
			   oThis.handleScrollClick(oEvent);
			};
			
			selectitems[i].onmousedown = function (oEvent) {

			//check for the proper location of the event object
			if (!oEvent) {
			     oEvent = window.event;
			}    

			     //call the handleScrollClick() method with the event object
			   oThis.handleScrollMouseDown(oEvent);
			};
			
			if (classtest == 'SFX_dropdown_moveup'){
				
				var aup = selectitems[i].getElementsByTagName("img")[0];
				
					aup.onmouseover = function (oEvent) {

					//check for the proper location of the event object
					if (!oEvent) {
					     oEvent = window.event;
					}    

					     //call the handleScrollClick() method with the event object
					   oThis.handleArrowScrollUp(oEvent);
					};
					
					aup.onmouseout = function (oEvent) {

					//check for the proper location of the event object
					if (!oEvent) {
					     oEvent = window.event;
					}    

					     //call the handleScrollClick() method with the event object
					   oThis.handleClearScrollInterval(oEvent);
					};
				
			}
			
			if (classtest == 'SFX_dropdown_movedown'){
				var adown = selectitems[i].getElementsByTagName("img")[0];
				
					adown.onmouseover = function (oEvent) {

					//check for the proper location of the event object
					if (!oEvent) {
					     oEvent = window.event;
					}    

					     //call the handleScrollClick() method with the event object
					   oThis.handleArrowScrollDown(oEvent);
					};
					
					adown.onmouseout = function (oEvent) {

					//check for the proper location of the event object
					if (!oEvent) {
					     oEvent = window.event;
					}    

					     //call the handleScrollClick() method with the event object
					   oThis.handleClearScrollInterval(oEvent);
					};
					
				
			}
			
		} 
	}
	
	document.onclick = function (oEvent) {

		//check for the proper location of the event object
		if (!oEvent) {
		    oEvent = window.event;
		}    

		//call the handleOnClick() method with the event object
		oThis.handleClickOuts(oEvent);
	};
	
	this._textarr = [];
	this._valuearr = [];
	var oObj = this.returnObjById(this._id);
	oObj.style.left="-9999px";
    oObj.style.top="-9999px";
	oObj.style.position="absolute";
	oObj.setAttribute("customControlInit","true");
	this.initHeader(oObj);
	return false;
}

SFX_Dropdown_Controller.prototype.handleScrollClick  = function (oEvent /*:Event*/) {
	//alert("Scroll event: " + oEvent);
	var eventobj = this.getTarget(oEvent);
	var obj = this.returnObjById(this._optionsId);
	var selectitems = obj.getElementsByTagName(this._listtype);
	selectitems = this.filterselectitems(selectitems);
	if(eventobj.className)
	{
		if(eventobj.className == 'SFX_dropdown_movedown press')
		{
			eventobj.className = 'SFX_dropdown_movedown';
			this.getNextScrollView(selectitems);
			
		} else if(eventobj.className == 'SFX_dropdown_moveup press') {
			eventobj.className = 'SFX_dropdown_moveup';	
			this.getPrevScrollView(selectitems);
			
		} else if(eventobj.className == 'downArrow')
		{
			this.getNextScrollView(selectitems);
			
		} else if(eventobj.className == 'upArrow') {
			this.getPrevScrollView(selectitems);
		}
		
	}
	
};

SFX_Dropdown_Controller.prototype.handleScrollMouseDown  = function (oEvent /*:Event*/) {
	//alert("Scroll event: " + oEvent);
	var eventobj = this.getTarget(oEvent);
	if(eventobj.className == 'SFX_dropdown_movedown')
	{
	eventobj.className = 'SFX_dropdown_movedown press';
		
	} else if(eventobj.className == 'SFX_dropdown_moveup') {
	eventobj.className = 'SFX_dropdown_moveup press';	
	}
};

SFX_Dropdown_Controller.prototype.handleHeaderKeyDown  = function (oEvent /*:Event*/) {
	//alert("event: " + oEvent);
	var eventobj = this.getTarget(oEvent);
	if(eventobj.parentNode.id == this._eventWrapperId )
	{
		eventobj = eventobj.parentNode;
	}

    switch(oEvent.keyCode) {
	
		case 37: //left arrow
			this.getPrevValueIndex();
            break;
        case 38: //up arrow
			this.getPrevValueIndex();
            break;
        case 40: //down arrow 
			this.getNextValueIndex();
			break;
		case 39: //right arrow 
			this.getNextValueIndex();
			break;
        case 13: //enter
            break;
    }

};

SFX_Dropdown_Controller.prototype.handleDisableTab  = function (oEvent /*:Event*/) {
	
    switch(oEvent.keyCode) {
	
		case 9: //tab
			var oObj = this.returnObjById(this._id);
			oObj.style.left="0px";
			oObj.style.top="0px";
			oObj.style.position="relative";
			oObj.style.display="block";
			var eventobj = this.returnObjById(this._eventWrapperId);
			eventobj.style.left="-9999px";
			eventobj.style.top="-9999px";
			eventobj.style.position="absolute";
			var optionsObj = this.returnObjById(this._optionsId);
			var selectitems = optionsObj.getElementsByTagName(this._listtype);
			for(i=0;i<selectitems.length;i++){
				selectitems[i].style.left="-9999px";
				selectitems[i].style.top="-9999px";
				selectitems[i].style.position="absolute";
			}
            break;
        case 13: //enter
            break;
    }

};

SFX_Dropdown_Controller.prototype.initHeader = function (oObj)
{	
	var headerDiv = this.returnObjById(this._headerId);
	var selectObj = oObj.parentNode.getElementsByTagName('select')[0];
	var selectitems = oObj.parentNode.getElementsByTagName(this._listtype);
	var selecttext = this.getSelectText(selectObj.value);
	var found = false;	
	for(i=0;i<selectitems.length;i++){
		//alert(selecttext +":" + selectitems[i].innerHTML.toUpperCase());
		if (selecttext.toUpperCase() == selectitems[i].innerHTML.toUpperCase())
		//if (selectObj.value == selectitems[i].getAttribute('value'))
		{
				var setvalue = selectitems[i].innerHTML;
				headerDiv.innerHTML =  setvalue;
				found = true;
				
		}
	
	}	
	
	if (!found)
	{
		//alert(found + selecttext);
		headerDiv.innerHTML =  selecttext;
	}
}


SFX_Dropdown_Controller.prototype.getSelectValue = function (text)
{	
	
	var oObj = this.returnObjById(this._id);
	for(i=0;i< oObj.length ;i++){
		var textoption = oObj.options[i].text + "<b></b>";;
		var opvalue = oObj.options[i].value;
		//alert(textoption.toUpperCase() + text);
		if (textoption.toUpperCase() == text.toUpperCase())
		{
			return opvalue;
		}
	}
		
	return "";
}

SFX_Dropdown_Controller.prototype.getSelectValue2 = function (text, id)
{	
	
	var oObj = SFX_Dropdown_Controller.prototype.returnObjById(id);
	for(i=0;i< oObj.length ;i++){
		var textoption = oObj.options[i].text + "<b></b>";;
		var opvalue = oObj.options[i].value;
		//alert(textoption.toUpperCase() + text);
		if (textoption.toUpperCase() == text.toUpperCase())
		{
			return opvalue;
		}
	}
		
	return "";
}

SFX_Dropdown_Controller.prototype.getSelectText = function (value)
{	
	
	var oObj = this.returnObjById(this._id);
	for(i=0;i< oObj.length ;i++){
		var text = oObj.options[i].text;
		var opvalue = oObj.options[i].value;
		if (opvalue.toUpperCase() == value.toUpperCase())
		{
			return text + "<b></b>";
		}
	}
		
	return "";
}


SFX_Dropdown_Controller.prototype.getNextValueIndex = function ()
{
	var oObj = this.returnObjById(this._eventWrapperId);
	var headerDiv = this.getHeaderDiv(oObj);
	var selectitems = oObj.parentNode.getElementsByTagName(this._listtype);
	var index = -1;
	if(headerDiv)
	{

	for(i=0;i<selectitems.length;i++) {
		var tester = selectitems[i].firstChild.nodeValue + "<b></b>";
		var original = headerDiv.innerHTML;
		var anchor = selectitems[i];
		
		selectitems[i].style.left="-9999px";
		selectitems[i].style.top="-9999px";
		selectitems[i].style.position="absolute";
		var classtest = 'undefined';
		if (selectitems[i].className)
		{
			classtest=selectitems[i].className;
		}
		if (classtest != 'SFX_dropdown_moveup press' && classtest != 'SFX_dropdown_movedown press')
		{
			//alert("testing..... " + tester + "=" + original);
	       if (original.toUpperCase() == tester.toUpperCase())
			{
					//alert("found " + tester + "=" + original);
					if (i==0)
					{
						index = 0;
					} else {
						index = i;
					}
			}
		}
		
		
	}
	var next = (index+1);
	if (next <= 0)next=1;
	var finish = selectitems.length -1;
	if(next < finish  && selectitems.length > 0)
	{
		var setvalue = selectitems[next].firstChild.nodeValue + "<b></b>";
		//alert(" ok" + setvalue);
		headerDiv.innerHTML =  setvalue;
		var selectObj = oObj.parentNode.getElementsByTagName('select')[0];
		var valueset = this.getSelectValue(setvalue.toUpperCase());
		selectObj.value = valueset;
		this.fireSelectOnChange(selectObj);
	}
	headerDiv.className = "SFX_dropdown_header";
	}
	
	return 0;
}

SFX_Dropdown_Controller.prototype.getPrevValueIndex = function ()
{

	var oObj = this.returnObjById(this._eventWrapperId);
	var selectitems = oObj.parentNode.getElementsByTagName(this._listtype);
	var headerDiv = this.getHeaderDiv(oObj);
	var index = -1;
	if(headerDiv)
	{
	for(i=0;i<selectitems.length;i++) {
		var tester = selectitems[i].firstChild.nodeValue + "<b></b>";
		var original = headerDiv.innerHTML;
		
		selectitems[i].style.left="-9999px";
		selectitems[i].style.top="-9999px";
		selectitems[i].style.position="absolute";
		var classtest = 'undefined';
		if (selectitems[i].className)
		{
			classtest=selectitems[i].className;
		}
		if (classtest != 'SFX_dropdown_moveup press' && classtest != 'SFX_dropdown_movedown press')
		{
       		if (original.toUpperCase() == tester.toUpperCase())
			{
				//alert("found");
				if (i==0)
				{
					index = 0;
				} else {
					index = i;
				}
			}
		}
	}
	var prev = (index-1);
	if(prev >= 1)
	{
		var setvalue = selectitems[prev].firstChild.nodeValue + "<b></b>";
		//alert(" ok" + setvalue);
		headerDiv.innerHTML =  setvalue;
		//alert(headerObj.parentNode.className);
		var selectObj = oObj.parentNode.getElementsByTagName('select')[0];
		var anchor = selectitems[prev].firstChild;
		//alert(anchor.nodeValue.toUpperCase());
		var checkme = anchor.nodeValue + "<b></b>";
		var valueset = this.getSelectValue(checkme.toUpperCase());
		selectObj.value = valueset;
		//selectObj.value =  selectitems[prev].firstChild.nodeValue.toUpperCase();
		this.fireSelectOnChange(selectObj);
	}
	headerDiv.className = "SFX_dropdown_header";
	}

		
	return 0;
}

SFX_Dropdown_Controller.prototype.fireSelectOnChange = function (selectObj)
{
	//On IE
	if(selectObj.fireEvent)
	{
		selectObj.fireEvent('onchange');
	}
	//On Gecko based browsers
	if(document.createEvent)
	{
		var evt = document.createEvent('HTMLEvents');
		if(evt.initEvent)
		{
			evt.initEvent('change', true, true);
		}
		if(selectObj.dispatchEvent)
		{
			selectObj.dispatchEvent(evt);
		}
	}
}

SFX_Dropdown_Controller.prototype.getTarget = function (e)
{
	if (e.target) {
        return e.target;
    }
    if (e.srcElement) {
        return e.srcElement;
    }
}

SFX_Dropdown_Controller.prototype.handleHeaderOnClick  = function (oEvent /*:Event*/) {
    
	
	//alert("event: " + oEvent);
	var eventobj = this.getTarget(oEvent);
	if(eventobj.parentNode.id == this._eventWrapperId )
	{
		eventobj = eventobj.parentNode;
	} else if 	(eventobj.parentNode.parentNode.id == this._eventWrapperId )
	{
			eventobj = eventobj.parentNode.parentNode
	}
	//alert(eventobj.className);
	var headerDiv = this.getHeaderDiv(eventobj);
	var parentObj = eventobj.parentNode;

		
	while(parentObj.className != "SFX_dropdown") {
		parentObj = parentObj.parentNode
	};
	var selectObj = eventobj.parentNode.getElementsByTagName('select')[0];	
	var selectitems = eventobj.parentNode.getElementsByTagName(this._listtype);
	selectitems = this.filterselectitems(selectitems);
	var scollIndex = 0;
	var startindex = 0;
	if (selectitems.length > this._maxDisplay)
	{
		startindex = this.findOptionIndex(selectitems, selectObj);
	}
	
	for(i=startindex;i<selectitems.length;i++) {
		//alert(i);
		if (scollIndex < this._maxDisplay){
			selectitems[i].style.left="0px";
			selectitems[i].style.top="0px";
			selectitems[i].style.position="relative";
			selectitems[i].style.display="block";
			scollIndex++;
		}
		
		if (selectitems.length <= this._maxDisplay && i == (selectitems.length - 1))
		{
			selectitems[i].className = 'SFX_dropdown_lastoption';
		}
		
	}
	var oObj = this.returnObjById(this._optionsId);
			
	//Make the header look like it is open
	headerDiv.className = "SFX_dropdown_header_hover";
	//assign the onkeyup event handler
	
	/// stack the sandwich to a higer level on the outer most div SFX_Dropdown
	//alert(this._listtype);
	//alert(parentObj.className);
	parentObj.style.zIndex = "1";
	
	//add event handler to go next
	var hashValue="#" + this._optionsId + "_movedown";
	if(location.hash!=hashValue)
	location.hash=hashValue
	return false;

};

SFX_Dropdown_Controller.prototype.filterselectitems  = function (selectitems) {
	var selectitems2=[];
	var index2 = 0;
	var l = selectitems.length;
	for(i=0;i<selectitems.length;i++) {
		var classtest = 'undefined';
		if (selectitems[i].className)classtest=selectitems[i].className;
		if (classtest == 'SFX_dropdown_moveup' || classtest == 'SFX_dropdown_movedown' || classtest == 'SFX_dropdown_moveup press' || classtest == 'SFX_dropdown_movedown press')
		{
			var optionsavail = l - 2;
			if (optionsavail > this._maxDisplay)
			{
					selectitems[i].style.left="0px";
					selectitems[i].style.top="0px";
					selectitems[i].style.position="relative";
					selectitems[i].style.display="block";
			}
			
		} else {
			
			selectitems2[index2] = selectitems[i];
			index2++;
		}
	}
	
	return selectitems2;
};

SFX_Dropdown_Controller.prototype.getCurrentScrollView  = function (selectitems) {
	var setones = [];
	var arrIdx = 0;
	for(i=0;i<selectitems.length;i++) {
		if (selectitems[i].style.display == "block"  && selectitems[i].style.top == "0px")
		{
			setones[arrIdx] = i;
			arrIdx++;	
		}
	}

	return setones;
};

SFX_Dropdown_Controller.prototype.getNextScrollView  = function (selectitems) {
	var currentview = this.getCurrentScrollView(selectitems);
	var startindex = 0;
	if(currentview.length > 0)
	{
		startindex = currentview[currentview.length - 1];
	}
	
	var endindex = startindex + this._maxDisplay;
	
	if (endindex > (selectitems.length -1))
	{
		endindex = selectitems.length - 1;
	}
	if (startindex < selectitems.length - 1){
		for(i=0;i<selectitems.length;i++) {
		//alert(i);
			if (i > startindex && i<=endindex){
				selectitems[i].style.left="0px";
				selectitems[i].style.top="0px";
				selectitems[i].style.position="relative";
				selectitems[i].style.display="block";
			} else {
				selectitems[i].style.left="-9999px";
				selectitems[i].style.top="-9999px";
				selectitems[i].style.position="absolute";
			}
		
		}
	}
	

};


SFX_Dropdown_Controller.prototype.getPrevScrollView  = function (selectitems) {
	var currentview = this.getCurrentScrollView(selectitems);
	var endindex = 0;
	if(currentview.length > 0)
	{
		endindex = currentview[0];
	}
	
	var startindex = endindex - this._maxDisplay;
	
	if (startindex < 0 )
	{
		startindex = 0;
		endindex = startindex + this._maxDisplay;
	}
	if (startindex >= 0 && endindex > 0){
		for(i=0;i<selectitems.length;i++) {
		//alert(i);
			if (i >= startindex && i< endindex){
				selectitems[i].style.left="0px";
				selectitems[i].style.top="0px";
				selectitems[i].style.position="relative";
				selectitems[i].style.display="block";
			} else {
				selectitems[i].style.left="-9999px";
					selectitems[i].style.top="-9999px";
					selectitems[i].style.position="absolute";
			}
		
			}
	}
	
};






SFX_Dropdown_Controller.prototype.findOptionIndex  = function (selectitems, selectObj) {

	var selecttext = this.getSelectText(selectObj.value);	
	for(i=0;i<selectitems.length;i++){
		if (selecttext.toUpperCase() == selectitems[i].innerHTML.toUpperCase())
		{
				return i;
		}
	
	}
	
	return 0;
};

SFX_Dropdown_Controller.prototype.handleOptionOnClick  = function (oEvent /*:Event*/) {
		var eventobj = this.getTarget(oEvent);
		var oObj = this.returnObjById(this._eventWrapperId);
		
		/// stack the sandwich to a lower level on the outer most div SFX_Dropdown
		oObj.parentNode.style.zIndex = "0";
		
		var selectitems = oObj.parentNode.getElementsByTagName(this._listtype);
		var headerDiv = this.getHeaderDiv(oObj);
		for(i=0;i<selectitems.length;i++){
		
		selectitems[i].style.left="-9999px";
		selectitems[i].style.top="-9999px";
		selectitems[i].style.position="absolute";
		} 
		var setvalue = eventobj.childNodes[0].nodeValue + "<b></b>";
		headerDiv.innerHTML =  setvalue;
		var selectObj = oObj.parentNode.getElementsByTagName('select')[0];
		//bind the values
		var valueset = this.getSelectValue(eventobj.innerHTML);
		selectObj.value = valueset;

		//Make the header go back to normal
		headerDiv.className = "SFX_dropdown_header";
		
		//fire event on select box
		
		this.fireSelectOnChange(selectObj);
		//alert("secondtime");
		for(i=0;i<selectitems.length;i++){
		
		selectitems[i].style.left="-9999px";
		selectitems[i].style.top="-9999px";
		selectitems[i].style.position="absolute";
		}
		

	
};

SFX_Dropdown_Controller.prototype.handleKeyDown  = function (oEvent /*:Event*/) {

    switch(oEvent.keyCode) {
        case 38: //up arrow
            alert("up arrow");
            break;
        case 40: //down arrow 
             alert("down arrow");
			break;
        case 13: //enter
           // alert("other");
            break;
    }
};

SFX_Dropdown_Controller.prototype.handleClickOuts = function(oEvent){

	var srcEl = this.getTarget(oEvent);
	if (srcEl.tagName.toUpperCase() == 'B')
	{
		srcEl = srcEl.parentNode;
	}
	//alert(srcEl.tagName);
	var drops = this.getElementsByClassName("SFX_dropdown", null);	
	var headerIds = [];
	for(i=0;i<drops.length;i++){
		var headerDiv = this.getHeaderDiv(drops[i]);
		if (headerDiv)headerIds[i] = headerDiv.id;
	}
	var idfound = false;
	for(i=0;i<headerIds.length;i++){
		if (headerIds[i] ==  srcEl.id)
		{
			idfound = true;	
		}	
	}
	
	var ul = this.getParent(srcEl,"UL");
	if (ul)
	{
		var pdiv = ul.parentNode;
		if (pdiv.className != this._option_class)
		{
			ul = false;
		}
	}
    if(ul == undefined  && !idfound)
	    { 
		//	alert("toggle");
			this.toggleDropDowns(drops);
		}

	if(ul == false && !idfound)
		{ 
		//	alert("toggle");
			this.toggleDropDowns(drops);
		}
	
}


SFX_Dropdown_Controller.prototype.toggleDropDowns = function (drops) 
{ 
	for(idx=0;idx<drops.length;idx++){
		var sfxdrop = drops[idx];
		sfxdrop.style.zIndex = "0";
		var selectitems = sfxdrop.getElementsByTagName(this._listtype);
		var headerDiv = this.getHeaderDiv(sfxdrop);
			
		for(b=0;b<selectitems.length;b++)
		{
				var item = selectitems[b];
				item.style.left="-9999px";
				item.style.top="-9999px";
				item.style.position="absolute";
		}

		var selectObjs = sfxdrop.getElementsByTagName("select");
		var selectObj = selectObjs[0];
		var selecttext = this.getSelectText(selectObj.value);
		headerDiv.className = "SFX_dropdown_header";
	}
}

SFX_Dropdown_Controller.prototype.returnObjById = function (id) 
{ 
    if (document.getElementById) 
        var returnVar = document.getElementById(id); 
    else if (document.all) 
        var returnVar = document.all[id]; 
    else if (document.layers) 
        var returnVar = document.layers[id]; 
    return returnVar; 
}


SFX_Dropdown_Controller.prototype.getHeaderDiv = function (obj) 
{ 
	var headerDivs = SFX_Dropdown_Controller.prototype.getElementsByClassName('SFX_dropdown_header', obj);

	if (headerDivs.length == 0)
	{
		headerDivs = SFX_Dropdown_Controller.prototype.getElementsByClassName('SFX_dropdown_header_hover', obj);	
	}
	var headerDiv = headerDivs[0];
	return headerDiv;
}


SFX_Dropdown_Controller.prototype.isIE = function () 
{
	var d, dom, ie, ie4, ie5x, moz, mac, win, lin, old, ie5mac, ie5xwin, op;
	d = document;
	n = navigator;
	na = n.appVersion;
	nua = n.userAgent;
	win = ( na.indexOf( 'Win' ) != -1 );
	mac = ( na.indexOf( 'Mac' ) != -1 );
	lin = ( nua.indexOf( 'Linux' ) != -1 );

	if ( !d.layers ){
		dom = ( d.getElementById );
		op = ( nua.indexOf( 'Opera' ) != -1 );
		konq = ( nua.indexOf( 'Konqueror' ) != -1 );
		saf = ( nua.indexOf( 'Safari' ) != -1 );
		moz = ( nua.indexOf( 'Gecko' ) != -1 && !saf && !konq);
		ie = ( d.all && !op );
		ie4 = ( ie && !dom );

		/*
		ie5x tests only for functionality. ( dom||ie5x ) would be default settings. 
		Opera will register true in this test if set to identify as IE 5
		*/

		ie5x = ( d.al22l && dom );
		ie5mac = ( mac && ie5x );
		ie5xwin = ( win && ie5x );
	}
	return ie;
}

SFX_Dropdown_Controller.prototype.getParent = function(obj, ref){//ref is used only if looking for a parent of a specific tag
    var endParent = obj.parentNode;
    try {
        if (ref && ref.indexOf('.') == 0) { //look for node with specific class
            query = ref.split('.');
            query = query[1];
            while (endParent && endParent.nodeType != 1 || endParent.className.indexOf(query) == -1) {//using indexOf incase of multiple classes
                endParent = endParent.parentNode;
            }
        }
        else 
            if (ref) { //look for node with specific tag
                while (endParent && endParent.nodeType != 1 || endParent.tagName != ref) {
                    endParent = endParent.parentNode;
                }
            }
            else { //look for any node that isn't whitespace
                while (endParent && endParent.nodeType != 1) {
                    endParent = endParent.parentNode;
                }
            }
        return endParent;
    } 
    catch (e) {
        return false;
    }
}

SFX_Dropdown_Controller.prototype.getElementsByClassName = function (classname, node)  {
    if(!node) node = document.getElementsByTagName("body")[0];
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
	{
        if(re.test(els[i].className))a.push(els[i]);
    return a;
	}
}

SFX_Dropdown_Controller.prototype.handleArrowScrollDown = function (oEvent /*:Event*/) {
	if (this._intervalId == 0)
	{
		this._intervalId = setInterval("SFX_Dropdown_Controller.prototype.arrowScroll('scrolldownwait', '" +this._eventWrapperId + "');",150);
		//alert("setinterval" + this._intervalId);
	}
}

SFX_Dropdown_Controller.prototype.handleClearScrollInterval = function (oEvent /*:Event*/) {
	//alert("clearnterval" + this._intervalId);
	if (this._intervalId > 0){
		clearInterval(this._intervalId);
		this._intervalId = 0;	
	}	
}

SFX_Dropdown_Controller.prototype.handleArrowScrollUp = function (oEvent /*:Event*/) {
	if (this._intervalId == 0)
	{
		this._intervalId = setInterval("SFX_Dropdown_Controller.prototype.arrowScroll('scrollupwait', '" +this._eventWrapperId + "');",150);
		//alert("setinterval" + this._intervalId);
	}
	
}	

//scroll up and down with arrows
SFX_Dropdown_Controller.prototype.arrowScroll = function(action, id) {
	//alert("arrow scroll!!!!!");
	var oObj = SFX_Dropdown_Controller.prototype.returnObjById(id);
	var selectitems = oObj.parentNode.getElementsByTagName(SFX_Dropdown_Controller.prototype._listtype);
	selectitems = SFX_Dropdown_Controller.prototype.filterselectitems(selectitems);
	if(action == "scrollupwait") {
		SFX_Dropdown_Controller.prototype.shiftPrevItem(selectitems);
	} else if(action=="scrolldownwait")  {
		SFX_Dropdown_Controller.prototype.shiftNextItem(selectitems);
	}
}


SFX_Dropdown_Controller.prototype.handleOptionMouseWheel = function (oEvent /*:Event*/) {
		var performDefault = true;
		var eventobj = SFX_Dropdown_Controller.prototype.getTarget(oEvent);
		if (eventobj.nodeName.toUpperCase() != 'LI')
		{
			eventobj = eventobj.parentNode;
		}
		var selectitems = eventobj.parentNode.getElementsByTagName(SFX_Dropdown_Controller.prototype._listtype);
		selectitems = SFX_Dropdown_Controller.prototype.filterselectitems(selectitems);
		//Getting the wheel event
		var delta = 0;
		if (oEvent.wheelDelta) { /* IE/Opera. */
			delta = oEvent.wheelDelta/120;
			if (window.opera) delta = -delta; //In Opera 9, delta differs in sign as compared to IE.
		} else if (oEvent.detail) { /** Mozilla case. */
			delta = -oEvent.detail/3; //Mozilla is a multiple of 3 compared to ie
		}
		
		if (delta>0){ //&& objs.curItem > 0) { //Using the wheel event to scroll up the list
			SFX_Dropdown_Controller.prototype.shiftPrevItem(selectitems);
			performDefault=false;
		} else if(delta<0){// && objs.curItem < objs.numItems-1) {//Using the wheel event to scroll down the list
			SFX_Dropdown_Controller.prototype.shiftNextItem(selectitems);
			performDefault=false;
		}

		if(!performDefault) {
			if (oEvent.preventDefault) oEvent.preventDefault(); 
			oEvent.returnValue = false; //Tell page not to do default action such as scroll whole page
		}
};



//Move to the next item 
SFX_Dropdown_Controller.prototype.shiftNextItem  = function (selectitems) {
	var startindex = -1;
	var endindex = 0;
	for(i=0;i<selectitems.length;i++){
		if (startindex < 0 && selectitems[i].style.left=="0px")
		{
			startindex = i;
			//alert("set start:" + startindex);	
		} else if (selectitems[i].style.left=="0px")
		{
			endindex = i;
		}
		selectitems[i].style.left="-9999px";
		selectitems[i].style.top="-9999px";
		selectitems[i].style.position="absolute";
	}	
	var resetend = endindex;
	var resetstart = startindex;
	startindex = startindex + 1;
	endindex = startindex + SFX_Dropdown_Controller.prototype._maxDisplay -1;
	var lines = endindex - startindex;
	//alert("start:" + startindex + " end:" + endindex + " lines:" + lines);	
    if (endindex > (selectitems.length - 1))
	{
	endindex = resetend;
	startindex = resetstart;
	}
	for(i=0;i<selectitems.length;i++){
		if (i >= startindex && i<= endindex)
		{
			selectitems[i].style.left="0px";
			selectitems[i].style.top="0px";
			selectitems[i].style.position="relative";
			selectitems[i].style.display="block";
		}
	}	
	//alert("start:" + startindex + " end:" + endindex);
};

//Move to the prev item 
SFX_Dropdown_Controller.prototype.shiftPrevItem  = function (selectitems) {
    var startindex = -1;
	var endindex = 0;
	for(i=0;i<selectitems.length;i++){
		if (startindex < 0 && selectitems[i].style.left=="0px")
		{
			startindex = i;
		} else if (selectitems[i].style.left=="0px")
		{
			endindex = i;
		}
		selectitems[i].style.left="-9999px";
		selectitems[i].style.top="-9999px";
		selectitems[i].style.position="absolute";
	}	
	//alert("start:" + startindex + " end:" + endindex);	
	var resetend = endindex;
	var resetstart = startindex;
	endindex = endindex - 1;
	startindex = endindex - SFX_Dropdown_Controller.prototype._maxDisplay + 1;
	//alert("start:" + startindex + " end:" + endindex);	
	if (startindex <= 0)
	{
	startindex = 0;
	endindex = startindex + SFX_Dropdown_Controller.prototype._maxDisplay -1;
	}

	for(i=0;i<selectitems.length;i++){
		if (i >= startindex && i<= endindex)
		{
			selectitems[i].style.left="0px";
			selectitems[i].style.top="0px";
			selectitems[i].style.position="relative";
			selectitems[i].style.display="block";
		}
	}
};