var _forms = [];
var inputs = new Array();
var selects = new Array();
var radios = new Array();
var checkboxes = new Array();
var buttons = new Array();
var selects = new Array();
var all_selects = false;
var active_select = null;
var agt = navigator.userAgent.toLowerCase();
//this.ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
var isMac = is_mac();
var selectText = "please select";
var _timeouts = [];
var _stimeout = 500;
var firstoption;

var IN_CFORMS = true;

function is_mac() {
	if (navigator.appVersion.indexOf("Safari") != -1)
	{
		if(!window.getComputedStyle)
		{
				return true;
		}
	}
	return false;
}

function init2() {
	if(!document.getElementById) {return false;}
	getElements();
	separateElements();
	replaceSelects();
	//replaceRadios();
	//replaceCheckboxes();
	//if (!isMac) {
	//	replaceButtons();	
	//}
}


// getting all the required elements
function getElements() {
	for (var nf = 0; nf < document.getElementsByTagName("form").length; nf++) {
		for(var nfi = 0; nfi < document.forms[nf].getElementsByTagName("input").length; nfi++) {
			var tmp = document.forms[nf].getElementsByTagName("input")[nfi];
			if (!tmp.replaced)
			{
				inputs.push(tmp);
			}
		}
		for(var nfs = 0; nfs < document.forms[nf].getElementsByTagName("select").length; nfs++) {
			var tmp = document.forms[nf].getElementsByTagName("select")[nfs];
			if (!tmp.replaced)
			{
				selects.push(tmp);
			}
		}
	}
}

// separating all the elements in their respective arrays
function separateElements() {
	var r = 0; var c = 0; var t = 0; var rl = 0; var cl = 0; var tl = 0; var b = 0;
	for (var q = 0; q < inputs.length; q++) {
		if(inputs[q].type == "radio" && !inputs[q].replaced) {
			radios[r] = inputs[q]; ++r;
		}
		if(inputs[q].type == "checkbox" && !inputs[q].replaced) {
			checkboxes[c] = inputs[q]; ++c;
		}
		if(((inputs[q].type == "submit") || (inputs[q].type == "button")) && !inputs[q].replaced) {
			buttons[b] = inputs[q]; ++b;
		}
	}
}

//replacing radio buttons
function replaceRadios() {
	for (var q = 0; q < radios.length; q++) {
		if (!radios[q].replaced)
		{
			radios[q].className = "outtaHere";
			var radioArea = document.createElement("div");
			if(radios[q].checked) {
				radioArea.className = "radioAreaChecked";
			}
			else
			{
				radioArea.className = "radioArea";
			}
			radioArea.id = "myRadio" + q;
			radios[q].parentNode.insertBefore(radioArea, radios[q]);
			radios[q]._ra = radioArea;
	
			radioArea.onclick = new Function('rechangeRadios('+q+')');
		}
		radios[q].replaced = true;
	}
	return true;
}

//checking radios
function checkRadios(who) {
	var what = radios[who]._ra;
	for(var q = 0; q < radios.length; q++) {
		if((radios[q]._ra.className == "radioAreaChecked")&&(radios[q]._ra.nextSibling.name == radios[who].name))
		{
			radios[q]._ra.className = "radioArea";
		}
	}
	what.className = "radioAreaChecked";
}

//changing radios
function changeRadios(who) {
	if(radios[who].checked) {
		for(var q = 0; q < radios.length; q++) {
			if(radios[q].name == radios[who].name) {
				radios[q].checked = false;
			} 
			radios[who].checked = true; 
			checkRadios(who);
		}
	}
}

//rechanging radios
function rechangeRadios(who) {
	if(!radios[who].checked) {
		for(var q = 0; q < radios.length; q++) {
			if(radios[q].name == radios[who].name)	{
				radios[q].checked = false; 
			}
			radios[who].checked = true; 
			checkRadios(who);
		}
	}
}

//replacing checkboxes
function replaceCheckboxes() {
	for (var q = 0; q < checkboxes.length; q++) {
		if (!checkboxes[q].replaced) {
			checkboxes[q].className = "outtaHere";
			var checkboxArea = document.createElement("div");
			if(checkboxes[q].checked) {
				checkboxArea.className = "checkboxAreaChecked";
			}
			else {
				checkboxArea.className = "checkboxArea";
			}
			checkboxArea.id = "myCheckbox" + q;
			checkboxes[q].parentNode.insertBefore(checkboxArea, checkboxes[q]);
			checkboxes[q]._ca = checkboxArea;
			checkboxArea.onclick = new Function('rechangeCheckboxes('+q+')');
			
			checkboxes[q].onkeydown = checkEvent;
			checkboxes[q].replaced = true;
		}
	}
	return true;
}

//checking checkboxes
function checkCheckboxes(who, action) {
	var what = checkboxes[who]._ca;
	if(action == true) {
		what.className = "checkboxAreaChecked";
		what.checked = true;
	}
	if(action == false) {
		what.className = "checkboxArea";
		what.checked = false;
	}
}

//changing checkboxes
function changeCheckboxes(who) {
	if(checkboxes[who].checked) {
		checkCheckboxes(who, false);
	}
	else {
		checkCheckboxes(who, true);
	} 
}

//rechanging checkboxes
function rechangeCheckboxes(who) {
	var tester = false;
	if(checkboxes[who].checked == true) {
		tester = false;
	}
	else {
		tester = true;
	}
	checkboxes[who].checked = tester;
	checkCheckboxes(who, tester);
}

//check event
function checkEvent(e) {
	if (!e) var e = window.event;
	if(e.keyCode == 32) {for (var q = 0; q < checkboxes.length; q++) {if(this == checkboxes[q]) {changeCheckboxes(q);}}} //check if space is pressed
}

// replacing buttons
function replaceButtons() {
	for (var i = 0; i < buttons.length; i++) {
		if (!buttons[i].replaced)
		{
			// button holder
			var buttonHolder = document.createElement("div");
			buttonHolder.className = "buttonSubmit";		
			buttons[i].parentNode.appendChild(buttonHolder);
			
			// left image
			var buttonLeft = document.createElement("span");
			buttonLeft.className = "left";
			buttonHolder.appendChild(buttonLeft);
		
			// append button into holder
			buttonHolder.appendChild(buttons[i]);
		
			//right image
			var buttonRight = document.createElement('span');
			buttonRight.className = "right";
			buttonHolder.appendChild(buttonRight);
			buttons[i].replaced = true;
		}
	}
}

//replacing selects
function replaceSelects() {
	for(var q = 0; q < selects.length; q++) {
	if (!selects[q].replaced && selects[q].offsetWidth && (selects[q].className.indexOf('inp-select') != -1))
{
	selects[q]._number = q;
			//create and build div structure
			var selectArea = document.createElement("div");
		
			var left = document.createElement("span");
			left.className = "left";
			selectArea.appendChild(left);
		
			var disabled = document.createElement("span");
			disabled.className = "disabled";
			selectArea.appendChild(disabled);
		
			selects[q]._disabled = disabled;
		
			var center = document.createElement("span");
			var button = document.createElement("a");
			var text = document.createTextNode(selectText);
			center.id = "mySelectText"+q;
			center.id = "mySelectText"+q;
			center._q = q;

			var stWidth = selects[q].offsetWidth;
			selectArea.style.width = stWidth + "px";

			button.href = "javascript:showOptions("+q+")";
			button.onkeydown = selectEvent;
			button.className = "selectButton";
			button._q = q;
			selectArea.className = "selectArea";
			selectArea.className += " " + selects[q].className;
			selectArea.id = "sarea"+q;
			center.className = "center";
			center.appendChild(text);
			selectArea.appendChild(center);
			selectArea.appendChild(button);
		
			//hide the select field
			selects[q].className += " outtaHere";
			//insert select div
			selects[q].parentNode.insertBefore(selectArea, selects[q]);
			//build & place options div

			var optionsDiv = document.createElement("div");
		
			var optionsList = document.createElement("ul");
			optionsDiv.appendChild(optionsList);
		
			selects[q]._options = optionsList;
		
			//optionsDiv.style.width = stWidth - 4 + "px";
			optionsDiv.style.width = stWidth - 0 + "px";
			optionsDiv._parent = selectArea;
			optionsDiv.className = "optionsDivInvisible";
			if(selects[q].className.indexOf('sl1') != -1){ optionsDiv.className += ' select-drop1 ';}
			optionsDiv.id = "optionsDiv"+q;
			optionsDiv._q = q

			
			optionsDiv.onmouseover = function()
		{
			if(_timeouts[this._q])
			{
				clearTimeout(_timeouts[this._q]);
			}
		}
		optionsDiv.onmouseout = function()
		{
			_elem = document.getElementById("optionsDiv"+this._q);
			if(_elem && _elem.className.indexOf("optionsDivVisible") !=-1 )
				_timeouts[this._q] = setTimeout('showOptions(' + this._q + ')',_stimeout);
		}

		button.onmouseover = optionsDiv.onmouseover;
		button.onmouseout = optionsDiv.onmouseout;
		center.onmouseover = optionsDiv.onmouseover;
		center.onmouseout = optionsDiv.onmouseout;

	
			populateSelectOptions(selects[q]);	
			//selectArea.appendChild(optionsDiv);
			document.getElementsByTagName("body")[0].appendChild(optionsDiv);
			selects[q].replaced = true;
		}
	}
	all_selects = true;
}

//collecting select options
function populateSelectOptions(me) {
	me._options.innerHTML = "";
	
	for(var w = 0; w < me.options.length; w++) {
		
		var optionHolder = document.createElement('li');
		var optionLink = document.createElement('a');
		var optionTxt = document.createTextNode(me.options[w].text);
		
		//optionLink.href = "javascript:showOptions("+me._number+"); selectMe('"+me.id+"',"+w+","+me._number+");";
		optionLink.href = me.options[w].value;
		optionLink.appendChild(optionTxt);
		optionHolder.appendChild(optionLink);
		me._options.appendChild(optionHolder);
		//check for pre-selected items
		if(me.options[w].selected) {
			selectMe(me.id,w,me._number);
		}
	}
	if (me.disabled) {
		me._disabled.style.display = "block";
	}
	else {
		me._disabled.style.display = "none";
	}
}

//select event
function selectEvent(e) {
	if (!e) var e = window.event;
	var thecode = e.keyCode;
	switch(thecode){
		case 40: //down
			var fieldId = this.parentNode.parentNode.id.replace(/sarea/g, "");
			var linkNo = 0;
			for(var q = 0; q < selects[fieldId].options.length; q++) {if(selects[fieldId].options[q].selected) {linkNo = q;}}
			++linkNo;
			if(linkNo >= selects[fieldId].options.length) {linkNo = 0;}
			selectMe(selects[fieldId].id, linkNo, fieldId);
			break;
		case 38: //up
			var fieldId = this.parentNode.parentNode.id.replace(/sarea/g, "");
			var linkNo = 0;
			for(var q = 0; q < selects[fieldId].options.length; q++) {if(selects[fieldId].options[q].selected) {linkNo = q;}}
			--linkNo;
			if(linkNo < 0) {linkNo = selects[fieldId].options.length - 1;}
			selectMe(selects[fieldId].id, linkNo, fieldId);
			break;
		default:
			break;
	}
}

//selecting me
function selectMe(selectFieldId,linkNo,selectNo) {
	selectField = selects[selectNo];
	for(var k = 0; k < selectField.options.length; k++) {
		if(k==linkNo) {
			selectField.options[k].selected = true;
		}
		else {
			selectField.options[k].selected = false;
		}
	}
	
	//show selected option
	textVar = document.getElementById("mySelectText"+selectNo);
	var newText = document.createTextNode(selectField.options[linkNo].text);
	textVar.replaceChild(newText, textVar.childNodes[0]);
	if (selectField.onchange && all_selects)
			{
				eval(selectField.onchange());
			}
}

//showing options
function showOptions(g) {
		_elem = document.getElementById("optionsDiv"+g);		
        var ul = _elem.firstChild;
		if (active_select && active_select != _elem) {
			active_select.className = active_select.className.replace("optionsDivVisible", "optionsDivInvisible");
			active_select.style.height = "auto";
		}
		if(_elem.className.indexOf("optionsDivInvisible") != -1) {
            firstoption = ul.firstChild;
            ul.removeChild(firstoption);
			_elem.style.left = "-9999px";
			_elem.style.top = findPosY(_elem._parent) + 16 + 'px';
			_elem.className = _elem.className.replace("optionsDivInvisible", "optionsDivVisible");
			if (_elem.offsetHeight > 200)
			{
				_elem.style.height = "200px";
			}
			_elem.style.left = findPosX(_elem._parent) + 1 +'px';
			
			active_select = _elem;
		}
		else if(_elem.className.indexOf("optionsDivVisible") !=-1) {
		    ul.insertBefore(firstoption, ul.firstChild);
			_elem.style.height = "auto";
			_elem.className = _elem.className.replace("optionsDivVisible", "optionsDivInvisible");
		}
		//_elem.onmouseout = hideOptions;
}

function findPosY(obj) {
	var posTop = 0;
	while (obj.offsetParent) {posTop += obj.offsetTop; obj = obj.offsetParent;}
	return posTop;
}
function findPosX(obj) {
	var posLeft = 0;
	while (obj.offsetParent) {posLeft += obj.offsetLeft; obj = obj.offsetParent;}
	return posLeft;
}
