var _selectHeight = 23;

var _forms = document.getElementsByTagName('form');
var inputs = new Array();
var selects = new Array();
var labels = new Array();
var radios = new Array();
var radioLabels = new Array();
var checkboxes = new Array();
var checkboxLabels = new Array();
var buttons = new Array();
var selects = new Array();
var all_selects = false;
var active_select = null;
var agt = navigator.userAgent.toLowerCase();
var isMac = is_mac();
var selectText = "please select";
var IN_CFORMS = true;
var _bodySpan;
var _div;
var _fixWidth = 7;
var _maxSelectWidth = 340;

function is_mac() {
	if (navigator.appVersion.indexOf("Safari") != -1)
	{
		if(!window.getComputedStyle)
		{
			return true;
		}
	}

	return false;
}
function initCastomForms() {
	_div = document.getElementsByTagName('div');
	//set width
	var _body = document.getElementsByTagName('body')[0];
	var _bodySpanCr = document.createElement('span');
	_bodySpanCr.id = 'setWidth';
	_bodySpanCr.style.position = 'absolute';
	_bodySpanCr.style.visibility = 'hidden';
	_body.appendChild(_bodySpanCr);
	_bodySpan = document.getElementById('setWidth');

	if(!document.getElementById) {return false;}
	getElements();
	separateElements();
	//replaceRadios();
	//replaceCheckboxes();
	replaceSelects();
	fixCustomSelect();
    setInterval('fixCustomSelect()',500);
    try{
		_fixWidth = Browser.Engine.trident?9:7;
    }
    catch(e){};
}

function initSelectsOver() {
	var selectsClasses = [];
	var selects = $$('select').each(function(item, index) {
		if(!item.hasClass('outtaHere')) {
			selectsClasses[i] = 'drop-' + item.className;
		}

		var selectArea = $('sarea' + index);
		if(selectArea) {
			selectArea.addEvent('mouseenter', function(event) {
				_this = this;
				setTimeout(function() {
					_this.addClass('over');
					setTimeout(function() {
						_this.removeClass('over');
					}, 400);
				}, 100);
				setTimeout(function() {
					_this.addClass('over');
					setTimeout(function(){
						_this.removeClass('over');
					}, 400);
				}, 1200);

				return false;
			});
		}
	});

	for(var i = 0; i < selectsClasses.length; i++) {
		var selectDiv = $('optionsDiv' + i);
		if(selectDiv) {
			if(selectsClasses[i]) {
				selectDiv.addClass(selectsClasses[i]);
			}
		}
	}
}

// getting all the required elements
function getElements() {
	for (var nf = 0; nf < document.getElementsByTagName("form").length; nf++) {
		if (document.getElementsByTagName("form")[nf].className.indexOf('niceform') != -1) {
			for(var nfi = 0; nfi < document.forms[nf].getElementsByTagName("input").length; nfi++) {inputs.push(document.forms[nf].getElementsByTagName("input")[nfi]);}
			for(var nfl = 0; nfl < document.forms[nf].getElementsByTagName("label").length; nfl++) {labels.push(document.forms[nf].getElementsByTagName("label")[nfl]);}
			for(var nfs = 0; nfs < document.forms[nf].getElementsByTagName("select").length; nfs++) {selects.push(document.forms[nf].getElementsByTagName("select")[nfs]);}
		}
	}
}

// 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") {
			radios[r] = inputs[q]; ++r;
			for(var w = 0; w < labels.length; w++) {
				if((inputs[q].id) && labels[w].htmlFor == inputs[q].id)
				{
					radioLabels[rl] = labels[w];
					++rl;
				}
			}
		}
		if(inputs[q].type == "checkbox") {
			checkboxes[c] = inputs[q]; ++c;
			for(var w = 0; w < labels.length; w++) {
				if((inputs[q].id) && (labels[w].htmlFor == inputs[q].id))
				{
					checkboxLabels[cl] = labels[w];
					++cl;
				}
			}
		}
		if((inputs[q].type == "submit") || (inputs[q].type == "button")) {
			buttons[b] = inputs[q]; ++b;
		}
	}
}

//replacing radio buttons
function replaceRadios() {
	for (var q = 0; q < radios.length; q++) {
		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+')');
		if (radioLabels[q])
		{
			radioLabels[q].onclick = new Function('rechangeRadios('+q+')');
		}
	}
	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++) {
		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 = checkboxArea.onclick2 = new Function('rechangeCheckboxes('+q+')');
		if (checkboxLabels[q])
		{
			checkboxLabels[q].onclick = new Function('changeCheckboxes('+q+')');
		}

		checkboxes[q].onkeydown = checkEvent;
	}
	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
}


function replaceSelects() {
	for(var q = 0; q < selects.length; q++) {
	if (!selects[q].replaced && selects[q].offsetWidth)
	{
		selects[q]._number = q;
		//create and build div structure
		var selectArea = new Element('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 = new Element('span', {
			'id': 'mySelectText' + q,
			'class': 'center',
			'html': selects[q].value
		});

		var button = new Element('a', {
			'href': 'javascript:;',
			'class': 'selectButton'
		});

		var stWidth = selects[q].offsetWidth;
		selectArea.style.width = stWidth + "px";
		if (selects[q].parentNode.className.indexOf("type2") != -1) {
			button.addEvent('click', (function(event, q) {
				showOptions(q, true);

				return false;
			}).bindWithEvent(button, q));
			center.addEvent('click', (function(event, q) {
				showOptions(q, true);

				return false;
			}).bindWithEvent(button, q));
		}
		else {
			button.addEvent('click', (function(event, q) {
				showOptions(q, false);

				return false;
			}).bindWithEvent(button, q));
			center.addEvent('click', (function(event, q) {
				showOptions(q, false);

				return false;
			}).bindWithEvent(button, q));
		}
		selectArea.className = "selectArea";

		if(selects[q].id == 'order-expedited') {
			selectArea.className += ' expeditied';
		}
		selectArea.id = "sarea"+q;
		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.innerHTML += "<div class='select-top'><div></div></div>";
		optionsDiv.appendChild(optionsList);

		selects[q]._options = optionsList;
		//optionsDiv.style.width = stWidth + "px";
		optionsDiv._parent = selectArea;

		optionsDiv.className = "optionsDivInvisible";
		if(selects[q].id == 'order-expedited') {
			optionsDiv.className += ' drop-expeditied';
		}
		optionsDiv.id = "optionsDiv"+q;

		populateSelectOptions(selects[q], q);
		optionsDiv.innerHTML += "<div class='select-bottom'><div class='select-bottom-left'></div><div class='select-bottom-right'></div></div>";
		document.getElementsByTagName("body")[0].appendChild(optionsDiv);
		selects[q].replaced = false;
		}
		all_selects = true;
		if (document.getElementById('optionsDiv'+q)) {
			var _optWidthSelected = document.getElementById('optionsDiv'+q)
											.getElementsByTagName('a')[selects[q]._selected].rel;
			if (document.getElementById('sarea'+q).className.indexOf('expeditied') != -1)
				document.getElementById('sarea'+q).style.width = (parseInt(_optWidthSelected)+7)+'px';
			else
				document.getElementById('sarea'+q).style.width = (parseInt(_optWidthSelected)+7)+'px';
		}
	}

	initSelectsOver();
}

//collecting select options
function populateSelectOptions(me, q) {
	me._options.innerHTML = "";

	for(var w = 0; w < me.options.length; w++) {

		var optionHolder = document.createElement('li');
		var optionLink = document.createElement('a');
		var optionTxt;
		if (me.options[w].title.indexOf('image') != -1) {
			optionTxt = document.createElement('img');
			optionSpan = document.createElement('span');
			optionTxt.src = me.options[w].title;
			optionSpan = document.createTextNode(me.options[w].text);
		} else {
			optionTxt = document.createTextNode(me.options[w].text);
		}

		_bodySpan.innerHTML = me.options[w].text;
        var __width = Math.min(_bodySpan.offsetWidth,_maxSelectWidth);
		if (me.parentNode.className.indexOf('description') != -1) {
			_bodySpan.className = 'normal';
			optionLink.rel = __width + 10;
		}
		else {
			_bodySpan.className = '';
			optionLink.rel = __width + 8;
		}

		optionLink.href = "javascript:showOptions("+me._number+"); selectMe('"+me.id+"',"+w+","+me._number+");";

		/*if (me._number == 0) {
			var _width = parseInt(optionLink.rel);
			document.getElementById("sarea"+q).style.width = (_width)+'px';
		}*/
		if (me.options[w].title.indexOf('image') != -1) {
			optionLink.appendChild(optionTxt);
			optionLink.appendChild(optionSpan);
		} else {
			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);
			var _opt = selects[me._number].getElementsByTagName('option');
			for(var i=0; i<_opt.length; i++) {
				if (_opt[i].selected)
					selects[me._number]._selected = i;
			}
		}
	}
	if (me.disabled) {
		me._disabled.style.display = "block";
	}
	else {
		me._disabled.style.display = "none";
	}
}

//selecting me
function selectMe(selectFieldId,linkNo,selectNo) {
	//alert(1);
	selectField = selects[selectNo];
	var _optDiv = document.getElementById("optionsDiv"+selectNo);
	var _sarea = document.getElementById("sarea"+selectNo);
	if (_optDiv && _sarea)
	{
		var _width = Math.max(_sarea.offsetWidth - _fixWidth,parseInt(_optDiv.getElementsByTagName('a')[linkNo].rel));
		_sarea.style.width = (_width+_fixWidth)+'px';
	}
	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;
	var optionSpan;
	if (selectField.options[linkNo].title.indexOf('image') != -1) {
		newText = document.createElement('img');
		newText.src = selectField.options[linkNo].title;
		optionSpan = document.createElement('span');
		optionSpan = document.createTextNode(selectField.options[linkNo].text);
	} else {
		newText = document.createTextNode(selectField.options[linkNo].text);
	}
	if (selectField.options[linkNo].title.indexOf('image') != -1) {
		if (textVar.childNodes.length > 1) textVar.removeChild(textVar.childNodes[0]);
		textVar.replaceChild(newText, textVar.childNodes[0]);
		textVar.appendChild(optionSpan);
	} else {
		if (textVar.childNodes.length > 1) textVar.removeChild(textVar.childNodes[0]);
		textVar.replaceChild(newText, textVar.childNodes[0]);
	}
	if (selectField.onchange && all_selects)
	{
		eval(selectField.onchange());
	}
	if (selectField.id == 'type') {
		var _id = selectField.options[linkNo].value;
		for(var i=0; i<_div.length; i++) {
			if (_div[i].className.indexOf('tab-options') != -1) {
				if (_div[i].id != _id)
					_div[i].style.display = 'none';
				else
					_div[i].style.display = 'block';
			}
		}
		if(orderPage) {
			orderPage.selectTab(linkNo == 1? orderPage.options.idEmailOptions: orderPage.options.idWebPageOptions);
		}
	}
	else if(selectField.id == 'order-expedited') {
		if(orderPage) {
			orderPage.selectExpedite(linkNo);
		}
	}
	if (_optDiv && _sarea)
	{
		var _width = parseInt(_optDiv.getElementsByTagName('a')[linkNo].rel);
		_sarea.style.width = (_width+_fixWidth)+'px';
	}
}

//showing options
function showOptions(g) {
		var _val = document.getElementById("mySelectText"+g).innerHTML;

		_elem = document.getElementById("optionsDiv"+g);

		var divArea = document.getElementById("sarea"+g);
		if (active_select && active_select != _elem) {
			active_select.className = active_select.className.replace('optionsDivVisible','');
			active_select.className += " optionsDivInvisible";
			active_select.style.height = "auto";
		}
		if(_elem.className.indexOf("optionsDivInvisible") != -1) {
			_elem.style.left = "-9999px";
			_elem.style.top = findPosY(divArea) + _selectHeight + 'px';
			_elem.className = _elem.className.replace('optionsDivInvisible','');
			_elem.className += " optionsDivVisible";
			/*if (_elem.offsetHeight > 200)
			{
				_elem.style.height = "200px";
			}*/
			_elem.style.left = findPosX(divArea) + 'px';

			active_select = _elem;
			if(document.documentElement)
			{
				document.documentElement.onclick = hideSelectOptions;
			}
			else
			{
				window.onclick = hideSelectOptions;
			}

			var _maxWidth = 0;
			for(var i=0; i<_elem.getElementsByTagName('a').length; i++) {
				var thisWidth = parseInt(_elem.getElementsByTagName('a')[i].rel);
				if (thisWidth > _maxWidth) _maxWidth = thisWidth;
			}
			_elem.getElementsByTagName('a')[0].parentNode.parentNode.parentNode.style.width = (_maxWidth+10)+'px';
		}
		else if(_elem.className.indexOf("optionsDivVisible") != -1) {
			_elem.style.height = "auto";
			_elem.className = _elem.className.replace('optionsDivVisible','');
			_elem.className += " optionsDivInvisible";
			active_select = false;
		}

		// hide view
		_elemA = _elem.getElementsByTagName('a');
		for(var i=0; i<_elemA.length; i++) {
			_elemA[i].parentNode.style.display = 'block';
		}
		for(var i=0; i<_elemA.length; i++) {
			if (_elemA[i].innerHTML.indexOf(_val) != -1) {
				_elemA[i].parentNode.style.display = 'none';
			}
		}

		// for mouseout
		/*_elem.timer = false;
		_elem.onmouseover = function() {
			if (this.timer) clearTimeout(this.timer);
		}
		_elem.onmouseout = function() {
			var _this = this;
			this.timer = setTimeout(function(){
				_this.style.height = "auto";
				_this.className = _this.className.replace('optionsDivVisible','');
				if (_elem.className.indexOf('optionsDivInvisible') == -1)
					_this.className += " optionsDivInvisible";
			},200);
		}*/
}

function hideSelectOptions(e)
{
	if(active_select)
	{
		if(!e) e = window.event;
		var _target = (e.target || e.srcElement);
		if(isElementBefore(_target,'selectArea') == 0 && isElementBefore(_target,'optionsDiv') == 0)
		{
			active_select.className = active_select.className.replace('optionsDivVisible', '');
			active_select.className = active_select.className.replace('optionsDivInvisible', '');
			active_select.className += " optionsDivInvisible";
			active_select = false;

			if(document.documentElement)
			{
				document.documentElement.onclick = function(){};
			}
			else
			{
				window.onclick = null;
			}
		}
	}
}

function isElementBefore(_el,_class)
{
	var _parent = _el;
	do
	{
		_parent = _parent.parentNode;
	}
	while(_parent && _parent.className != null && _parent.className.indexOf(_class) == -1)

	if(_parent.className && _parent.className.indexOf(_class) != -1)
	{
		return 1;
	}
	else
	{
		return 0;
	}

}

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;
}

function fixCustomSelect()
{
	for(var q = 0; q < selects.length; q++)
    {
        if (true || selects[q].replaced)
        {
            var _divSelect = document.getElementById('sarea'+q);
            if(_divSelect)
            {
                var _spans = _divSelect.parentNode.getElementsByTagName('span');
                if(_spans[0])
                {
                    _maxSelectWidth = _divSelect.parentNode.offsetWidth - _spans[0].offsetWidth - 17;
				}
            }
            var _div = document.getElementById('optionsDiv'+q);
            if(_div)
            {
                var _as = _div.getElementsByTagName('a');
                for(var i = 0; i < _as.length; i++)
                {
                    _bodySpan.innerHTML = _as[i].innerHTML;
                    var __width = Math.min(_bodySpan.offsetWidth,_maxSelectWidth);
                    if (selects[q].parentNode.className.indexOf('description') != -1) {
                        _as[i].rel = __width + 10;
                    }
                    else {
                        _as[i].rel = __width + 9;
                    }
                }
            }
			var _optDiv = document.getElementById("optionsDiv"+q);
			var _sarea = document.getElementById("sarea"+q);
			var textVar = document.getElementById("mySelectText"+q);
			if (_optDiv && _sarea && textVar)
			{
				var _width = parseInt(_optDiv.getElementsByTagName('a')[selects[q].selectedIndex].rel);
				_sarea.style.width = (_width + _fixWidth)+'px';
				try{
					if(Browser.Engine.gecko)
					{
						textVar.style.width = (_maxSelectWidth + _fixWidth) + "px";
						//selectMe(selects[q].id,selects[q].selectedIndex,q);
					}
				}
				catch(e){}
			}
        }
    }
	try {
		flashUploadOrderFormFileReposition();
	} catch (e) {
		// TODO: handle exception
	}

}
