function fireEvent(obj,evt){

	var fireOnThis = obj;
	if( document.createEvent ) {
	  var evObj = document.createEvent('MouseEvents');
	  evObj.initEvent( evt, true, false );
	  fireOnThis.dispatchEvent(evObj);
	} else if( document.createEventObject ) {
	  fireOnThis.fireEvent('on'+evt);
	}
}

function activateSelect(obj2activate, oClass, cClass)
{
    if (obj2activate.className == oClass)
	{
        obj2activate.className=cClass;
		bringupselection(obj2activate);
	}
    else
	{
		obj2activate.className=oClass;
	}
    return false;
}

function redirectClick(e, redirObj, oClass, cClass, propagatte)
{
    var event = e || window.event;
    if(redirObj.tagName == "UL") return true;
    if (redirObj.className == oClass) redirObj.className=cClass; else redirObj.className=oClass;
    if(propagatte) return;
    if (event.stopPropagation) {event.stopPropagation();} else {event.cancelBubble = true;}
}

function redraw_selectboxes()
{
	var s_arr = document.getElementsByTagName('select');
	var n = 0;
	var z = s_arr.length;
	var selects = s_arr.length;
	for (n = 0; n < selects; n++)
	{
		var cs = s_arr[n];
		z = z-1;
		if(selects < 2) {z = 2;}
		try
		{
			if (cs.getAttribute('rel').toLowerCase() == 'fancy_select_regular')
			{
				var openclass = cs.getAttribute('open_class');
				var closeclass = cs.getAttribute('close_class');
				var tabindex = (cs.getAttribute('tabindex'))?cs.getAttribute('tabindex'):'';

				var h = '';
                h += '<div id="fancysel_'+cs.name+'" class="'+closeclass+'" onclick="close_fancy_select_boxes(event); activateSelect(this, \''+openclass+'\', \''+closeclass+'\');" onkeypress="onarrowkey(event, this);" tabindex="'+tabindex+'" style="z-index:'+(z+1)+';">';
				h += '<input type="hidden" id="'+cs.name+'" name="'+cs.name+'" value="'+cs.options[cs.selectedIndex].value+'" />';
                h += '<div class="'+cs.getAttribute("label_class")+'" id="'+cs.name+'_err" style="z-index:'+(z+1)+';overflow:hidden;" onclick="close_fancy_select_boxes(event);">'+cs.options[cs.selectedIndex].text+'<em onclick="close_fancy_select_boxes(event);redirectClick(event, this.parentNode.parentNode, \''+openclass+'\', \''+closeclass+'\', false);"></em></div>';
				h += '<ul>';
				for (var j = 0; j < cs.options.length; j++)
				{
                        h += '<li id="li_'+cs.name+'_'+cs.options[j].value+'" class="liopt" onclick="close_fancy_select_boxes(event);select_option(this, \''+cs.options[j].value+'\');">';
						h += '<b onclick="close_fancy_select_boxes(event);redirectClick(event, this.parentNode.parentNode, \''+openclass+'\', \''+closeclass+'\', false);">'+cs.options[j].text+'</b>';
						h += '<em onclick="close_fancy_select_boxes(event);redirectClick(event, this.parentNode.parentNode, \''+openclass+'\', \''+closeclass+'\', false);"></em>';
						h += '</li>';
				}
				h += '</ul>';
				h += '</div>'

				var v = document.createElement('DIV');
				v.innerHTML = h;

				cs.parentNode.replaceChild(v, cs);
				n--;
			}
			else if (cs.getAttribute('rel').toLowerCase() == 'fancy_select_regular_settings_account')
			{
				var openclass = cs.getAttribute('open_class');
				var closeclass = cs.getAttribute('close_class');
				var tabindex = (cs.getAttribute('tabindex'))?cs.getAttribute('tabindex'):'';

				var h = '';
				h += '<div class="'+closeclass+'" onclick="close_fancy_select_boxes(event); activateSelect(this, \''+openclass+'\', \''+closeclass+'\');" onkeypress="onarrowkey(event, this);" tabindex="'+tabindex+'" style="z-index:'+(z+1)+';">';
				h += '<input type="hidden" id="'+cs.name+'" name="'+cs.name+'" value="'+cs.options[cs.selectedIndex].value+'" />';
				h += '<div class="'+cs.getAttribute("label_class")+'" id="'+cs.name+'_err" style="z-index:'+(z+1)+';overflow:hidden;" onclick="close_fancy_select_boxes(event);">'+cs.options[cs.selectedIndex].text+'</div>';
				h += '<ul>';
				for (var j = 0; j < cs.options.length; j++)
				{
					if(cs.name == 'country_id')
					{
                        h += '<li id="li_'+cs.name+'_'+cs.options[j].value+'" class="liopt" onclick="close_fancy_select_boxes(event);select_option(this, \''+cs.options[j].value+'\');get_state(\''+cs.options[j].value+'\',0);">';
						h += '<b onclick="close_fancy_select_boxes(event);redirectClick(event, this.parentNode.parentNode, \''+openclass+'\', \''+closeclass+'\', false);">'+cs.options[j].text+'</b>';
						h += '<em onclick="close_fancy_select_boxes(event);redirectClick(event, this.parentNode.parentNode, \''+openclass+'\', \''+closeclass+'\', false);"></em>';
						h += '</li>';
					}
					else if(cs.name == 'state_id')
					{
						h += '<li id="li_'+cs.name+'_'+cs.options[j].value+'" class="liopt" onclick="close_fancy_select_boxes(event);select_option(this, \''+cs.options[j].value+'\');">'+cs.options[j].text+'</li>'; //get_county(\''+cs.options[j].value+'\',0)
					}
				}
				h += '</ul>';
				h += '</div>'

				var v = document.createElement('DIV');
				v.innerHTML = h;

				cs.parentNode.replaceChild(v, cs);
				n--;
			}
		}
		catch(e)
		{
			;
		}
	}
}

function onarrowkey(e, obj)
{
	var key;
	if (!e) var e = window.event;
	var key=e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
	var indx = 1;

	if(key == 38 || key == 40)
	{
		if(key == 38) indx = -1;
		movetoselection(e, obj, indx);
		e.preventDefault();
		return false;
	}
	
	return true;
}

function bringupselection(obj)
{
	var g = obj.getElementsByTagName('LI');
	var d = obj.getElementsByTagName('DIV')[0];
	var u = obj.getElementsByTagName('UL')[0];
	for (var k = 0; k < g.length; k++)
	{
		var li = g[k];
		if (li.innerHTML == d.innerHTML)
		{
			u.scrollTop = li.offsetTop;
			break;
		}
	}
}


movetoselection = function (e, obj, dir)
{
	if (e)
	{
		;
	}
	else if (event)
	{
		e = event;
	}
	var direction = 0;

	if (typeof dir == 'undefined')
	{
		if (e.wheelDelta >= 120)
		{
			direction = -1;
		}
		else if (e.wheelDelta <= -120)
		{
			direction = 1;
		}
	}
	else
	{
		direction = dir;
	}

	
	var g = obj.getElementsByTagName('LI');
	var d = obj.getElementsByTagName('div')[0];
	var u = obj.getElementsByTagName('UL')[0];
	for (var k = 0; k < g.length; k++)
	{
		var li = g[k];
		if (li.innerHTML == d.innerHTML)
		{
			if ((k + direction) >= 0 && (k + direction) < g.length)
			{
				//alert(g[k + direction]);
				g[k + direction].onclick();
				//u.scrollTop = g[k + direction].offsetTop;
			}
			break;
		}
	}
}

function jump2form(e)
{
	var key;
	if (!e) var e = window.event;
	var key=e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
	if(key == 9)
	{
		console.log('tab pressed');
	}
}

function close_fancy_select_boxes(e)
{
	try
	{
		var targ;
		if (!e)
		{
			var e = window.event;
		}

		if (e.target)
		{
			targ = e.target;
		}
		else if (e.srcElement)
		{
			targ = e.srcElement;
		}

		if (targ.nodeType == 3) // defeat Safari bug
		{
			targ = targ.parentNode;
		}

		var divs = document.getElementsByTagName('DIV');

		for (var i = 0; i < divs.length; i++)
		{
			if (divs[i].className.match('_opened') && divs[i] != targ.parentNode)
			{
				divs[i].className = divs[i].className.replace('opened', 'closed');
			}
		}
	}
	catch (e)
	{
		;
	}
}

document.onclick = close_fancy_select_boxes;
redraw_selectboxes();


