var currentSelections = new Array();
var currentMenu = 0;
var optionsCount = 0;
var selectOptions = new Array();
var selectMenuOpen = false;
var selectMenus = new Array();
var selectOpenSubmenus = new Array();
var selectSubmenuCount = 0;
var selectOverMenu = false;

var ie = false;
if (document.all) { ie = true; }

function getObj(id) {
	if (ie) { return document.all[id]; }
	else {	return document.getElementById(id);	}
}

//var selectDownArrow = '?';
var selectDownArrow = '';
//var selectRightArrow = '?';
var selectRightArrow = '';
//if (ie) { selectRightArrow = '>'; }

function selectGetOptions(level) {
	var option;
	var returnArray = new Array();
	for (i = 0; i < selectOptions.length; i++) {
		option = selectOptions[i];
		if (option.substring(0, level.length + 2) == '' + level + '||') {
			returnArray[returnArray.length] = selectGetOptionLink(option, i);
		}
	}
	return returnArray;
}

function selectGetOptionLink(option, index) {
	var start = option.indexOf('||');
	var finish = option.lastIndexOf('||');
	var level = option.substring(0, start);
	var prefix = option.substring(start+2, finish);
	var suffix = option.substring(finish+2, option.length);
	if (suffix.indexOf('@@') == 0) {
		var parentIndex = level.substring(level.lastIndexOf('.') + 1, level.length);
		if (option.indexOf('' + parentIndex) != 0) parentIndex++;
		return '<div class="select_inner_div" onmouseover="selectHighlight(this); selectOpenTimer(' + (index+1) + ', \'' + suffix + '\', this, ' + parentIndex + ');" onmouseout="selectLowlight(this);selectCancelOpenTimer();" onClick="selectOpenSubmenu(' + (index+1) + ', \'' + suffix + '\', this, ' + parentIndex + ');"><span>' + prefix + '</span> ' + selectRightArrow + '</div>';
	} else {
		return '<div class="select_inner_div" onmouseover="selectHighlight(this);" onmouseout="selectLowlight(this);" onClick="selectPickValue(' + index + ', \'' + suffix + '\');"><span>' + prefix + '</span> </div>';
	}
}

var selectTimerParent;
var selectSubmenuTimer;
function selectOpenTimer(index, suffix, parent, parentIndex) {
	selectTimerParent = parent;
	var command = 'selectOpenSubmenu(' + index + ', \'' + suffix + '\', selectTimerParent, ' + parentIndex + ')';
	selectSubmenuTimer = setTimeout(command, 200);
}

function selectCancelOpenTimer() {
	clearTimeout(selectSubmenuTimer);
}

var selectHighlightedObject = false;

function selectHighlight(div, index) {
	if (selectHighlightedObject) {
		selectLowlight(selectHighlightedObject);
	}
	div.className = 'select_inner_active';
	selectHighlightedObject = div;
}

function selectLowlight(div) {
	div.className = 'select_inner_div';
	selectHighlightedObject = false;
}

function selectGetOptionName(index) {
	var option = selectOptions[index];
	return option.substring(option.indexOf('||')+2, option.lastIndexOf('||'));
}

function selectGetOptionGroup(index) {
	var option = selectOptions[index];
	return option.substring(0, option.indexOf('||'));
}

function openSelect(parent) {

	var openMenu = true;
	if (selectMenuOpen != false) {

		openMenu = (selectMenuOpen != parent.id);
		var index = currentSelections[selectMenuOpen];
		var option = selectOptions[index];
		selectPickValue(index, option.substring(option.lastIndexOf('||') + 2, option.length));

	}
	if (/msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent) && !/msie 7/i.test(navigator.userAgent))
		$$('select').each(function (el) { el.hide(); });


	if (openMenu) {
		selectMenuOpen = parent.id;
		var div = selectGetSubMenu(selectMenus[parent.id]);
		selectPositionMenu(div, parent);
		div.style.display = 'block';
		if (div.scrollWidth < 100) { div.style.width = 100; }
		selectOpenSubmenus[selectSubmenuCount] = selectMenus[parent.id];
		selectSubmenuCount++;
	}
}

function selectRelateMenu(menuName) {
	var field = getObj(menuName + '_field')
	var value = field.value;
	var startIndex = '' + selectMenus[menuName];
	var label;
	var option;
	var index = startIndex;
	if (value != '') {
		for (i = 0; i < selectOptions.length; i++) {
			option = selectOptions[i];
			if (option.substring(0, startIndex.length) == startIndex) {
				if (option.substring(option.lastIndexOf('||')+2, option.length) == value) {
					index = i;
				}
			}
		}
	}

	currentSelections[menuName] = index;
	label = selectGetOptionName(index);
	getObj(menuName).innerHTML = label + ' ' + selectDownArrow;
}

function selectOpenSubmenu(index, suffix, parent, parentIndex) {
	for (i = selectSubmenuCount; selectOpenSubmenus[i-1] != parentIndex; i--) {
		idx = selectOpenSubmenus[i-1];
		div = getObj('select_div_' + idx);
		div.style.display = 'none';
		selectSubmenuCount--;
	}

	var div = selectGetSubMenu(index);
	div.style.visibility = 'hidden';
	div.style.display = 'block';
	if (div.scrollWidth < 100) { div.style.width = 100; }
	selectPositionMenu(div, parent);
	div.style.visibility = 'visible';

	selectOpenSubmenus[selectSubmenuCount] = index;
	selectSubmenuCount++;
}

function selectPositionMenu(menu, parent) {

	menu.style.top = 1;
	menu.style.left = 1;

	if (parent.id == selectMenuOpen) {

		menu.style.left = (selectGetAbsoluteOffsetLeft(parent))+'px';
		menu.style.top = (selectGetAbsoluteOffsetTop(parent) + parent.scrollHeight + 1)+'px';

	} else {

		if (selectGetAbsoluteOffsetLeft(parent) + parent.scrollWidth + 4 + menu.scrollWidth > document.body.offsetWidth) {
			menu.style.left = (selectGetAbsoluteOffsetLeft(parent) - menu.scrollWidth - 4)+'px';
		} else {
			menu.style.left = (selectGetAbsoluteOffsetLeft(parent) + parent.scrollWidth + 4)+'px';
		}
		menu.style.top = (selectGetAbsoluteOffsetTop(parent))+'px';
	}

}

function selectPickValue(index, value) {
	var idx, div;
	for (i = selectSubmenuCount; i > 0; i--) {
		idx = selectOpenSubmenus[i-1];
		div = getObj('select_div_' + idx);
		div.style.display = 'none';
	}
	selectSybmenuCount = 0;
	currentSelections[selectMenuOpen] = index;
	getObj(selectMenuOpen).innerHTML = selectGetOptionName(index) +  ' ' + selectDownArrow;
	getObj(selectMenuOpen + '_field').value = value;
	selectMenuOpen = false;
	
	if (/msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent) && !/msie 7/i.test(navigator.userAgent))
		$$('select').each(function (el) { el.show(); });
}

function selectGetSubMenu(index) {
	var div = getObj('select_div_' + index);
	if (div == null) {
		div = selectBuildDivFor(index);
	}
	return div;
}

function selectBuildDivFor(index) {
	if (!document.createElement) { return; }
	var elemDiv = document.createElement('div');
	if (typeof(elemDiv.innerHTML) != 'string') { return; }
	elemDiv.id = 'select_div_' + index;
	elemDiv.className = 'select_pulldown';
	elemDiv.style.position = 'absolute';
	elemDiv.style.display = 'none';

	if (ie) {
		elemDiv.attachEvent('onmouseover', selectMouseOver);
		elemDiv.attachEvent('onmouseout', selectMouseOut);
	} else {
		elemDiv.addEventListener('mouseover', selectMouseOver, false);
		elemDiv.addEventListener('mouseout', selectMouseOut, false);
	}

	var options = selectGetOptions(selectGetOptionGroup(index));
	for (i = 0; i < options.length; i++) {
		elemDiv.innerHTML = elemDiv.innerHTML + options[i];
	}
	document.body.appendChild(elemDiv);
	return elemDiv;
}

function selectMouseOver() {
	selectOverMenu = true;
}

function selectMouseOut() {
	selectOverMenu = false;
}

function selectGetAbsoluteOffsetTop(obj) {

	var top = obj.offsetTop;
	var parent = obj.offsetParent;
	while (parent != document.body[0]) {
		top += parent.offsetTop;
		parent = parent.offsetParent;
	}
	return top;

}

function selectGetAbsoluteOffsetLeft(obj) {
	var left = obj.offsetLeft;
	var parent = obj.offsetParent;

	try {
		while (parent != document.body[0]) {
			left += parent.offsetLeft;
			parent = parent.offsetParent;
		}
	} catch(err) {

		txt="There was an error on this page.\n\n"
		txt+="Error description: " + err.description + "\n\n"
		txt+="Click OK to continue.\n\n"
		alert(txt);
	}

	return left;
}

if (ie) {
	document.attachEvent('onclick', selectCheckClick);
} else {
	document.addEventListener('click', selectCheckClick, false);
}

function selectCheckClick() {
	if (selectMenuOpen && !selectOverMenu) {
		var index = currentSelections[selectMenuOpen];
		var option = selectOptions[index];
		selectPickValue(index, option.substring(option.lastIndexOf('||') + 2, option.length));
	}
	return true;
}