/*#############################################################

Name: Niceforms

Version: 0.9

Author: Lucian Slatineanu

Author of modification : Antoine Ughetto / URL : http://blog.makemepulse.com



URL: http://www.badboy.ro/



Feel free to use and modify but please provide credits.

#############################################################*/



//global variables that can be used by all the functions on this page.

var selects = new Array();

var inputs;

var radios = new Array();

var checkboxes = new Array();

var hovers = new Array();

var buttons = new Array();

var selectText = "please select";



//Theme Variables - edit these to match your theme

var selectRightSideWidth = 21;

var selectLeftSideWidth = 8;

var selectAreaHeight = 21;

var selectAreaOptionsOverlap = 2;

var imagesPath = "images/";



//this function runs when the page is loaded so put all your other onload stuff in here too.

function init_niceforms() {

	

	//check if styles are enabled and only then start replacing elements

	if(findPosX(document.getElementById('stylesheetTest')) == -999) {

		replaceSelects();

		replaceRadios();

		replaceCheckboxes();

	}

	hoverEffects();

	buttonHovers();

}



function replaceRadios() {

	//get all the radio buttons on the page

	var inputs = document.getElementsByTagName('input');

	var j = 0;

	for(var i=0; i < inputs.length; i++) {

		if(inputs[i].type=='radio') {

			radios[j] = inputs[i];

			++j;

		}

	}

	

	//cycle through the radio inputs

	for(var i=0; i <radios.length; i++) {

		

		//make them transparent

		radios[i].className = "transparent";

		

		//get their position

		var x = findPosX(radios[i]);

		var y = findPosY(radios[i]);

		

		//build new div

		var radioArea = document.createElement('div');

		if(radios[i].checked) {radios[i].nextSibling.className = "chosen"; radioArea.className = "radioAreaChecked";}

		else if(!radios[i].checked) {radioArea.className = "radioAreaUnchecked";}

		radioArea.style.left = x + 'px';

		radioArea.style.top = y + 'px';

		radioArea.id = 'myRadio'+i;

		radios[i].onclick = new Function('checkRadio('+i+')');

		radioArea.onclick = new Function('checkRadioByDiv('+i+')');



		//insert div

		document.getElementsByTagName("body")[0].appendChild(radioArea);

	}

}



function replaceCheckboxes() {

	//get all the checkboxes on the page

	var inputs = document.getElementsByTagName('input');

	var j = 0;

	for (var i2=0; i2 < inputs.length; i2++) {

		if(inputs[i2].type=='checkbox') {

			checkboxes[j] = inputs[i2];

			++j;

		}

	}



	//cycle through the checkboxes

	for(var i2=0; i2 < checkboxes.length; i2++) {



		//make them transparent

		checkboxes[i2].className = "transparent";



		//get their position

		var x = findPosX(checkboxes[i2]);

		var y = findPosY(checkboxes[i2]);



		//build new div

		var checkboxArea = document.createElement('div');

		if(checkboxes[i2].checked) {checkboxes[i2].nextSibling.className = "chosen"; checkboxArea.className = "checkboxAreaChecked";}

		else if(!checkboxes[i2].checked) {checkboxArea.className = "checkboxAreaUnchecked";}

		checkboxArea.style.left = x + 'px';

		checkboxArea.style.top = y + 'px';

		checkboxArea.id = 'myCheck'+i2;

		checkboxes[i2].onclick = new Function('checkCheck('+i2+')');

		checkboxArea.onclick = new Function('checkCheckByDiv('+i2+')');



		//insert div

		document.getElementsByTagName("body")[0].appendChild(checkboxArea);

	}

}



function replaceSelects() {

	selects = document.getElementsByTagName("select");

	for(var q = 0; q < selects.length; q++) {

		//create and build div structure



		if(!document.getElementById("mySelectText"+q)){

			var selectArea = document.createElement('div');

			var left = document.createElement('div');

			var right = document.createElement('div');

			var center = document.createElement('div');

			var button = document.createElement('a');

			var text = document.createTextNode(selectText);

			center.id = "mySelectText"+q;

			//get width and height

			var vParameter = selects[q].className.split("_");

			

			var selectHeight = 160;			

			var selectWidth = 160;

			

			if(selects[q].getAttribute("width", false) != null){

				selectWidth = parseInt(selects[q].getAttribute("width", false))

			}

			

			if(selects[q].getAttribute("height", false) != null){

				selectWidth = parseInt(selects[q].getAttribute("height", false));

			}

			

			var ismultiple = false;		

				

			

			if (window.attachEvent) {

				if(selects[q].getAttribute("multiple", false) != false ){		

					var ismultiple = true;

				}

			}else{

				if(selects[q].getAttribute("multiple", false) != null){

					var ismultiple = true;

				}

			}

			var selectJavascript = false;

			if(selects[q].getAttribute("js_action", false) != null){

					selectJavascript = selects[q].getAttribute("js_action", false)

			}

			

			center.style.width = selectWidth - 10 + 'px';

			selectArea.style.width = selectWidth + selectRightSideWidth + selectLeftSideWidth + 'px';

			button.style.width = selectWidth + selectRightSideWidth + selectLeftSideWidth + 'px';

			button.style.marginLeft = - selectWidth - selectLeftSideWidth + 'px';

			button.href = "javascript:showOptions("+q+")";

			button.onkeydown = selectEvent;

			button.className = "selectButton"; //class used to check for mouseover

			selectArea.className = "selectArea";

			selectArea.id = "sarea"+q;

			left.className = "left";

			right.className = "right";

			center.className = "center";

			right.appendChild(button);

			center.appendChild(text);

			selectArea.appendChild(left);

			selectArea.appendChild(right);

			selectArea.appendChild(center);

			//hide the select field

			selects[q].style.display='none';





			var myElem = document.getElementById(selects[q].id)



			myElem.parentNode.insertBefore(selectArea, myElem);





			//build & place options div



			if(document.getElementById("optionsDiv"+q)){

				document.getElementsByTagName("body")[0].removeChild(document.getElementById("optionsDiv"+q))

			}



			var optionsDiv = document.createElement('div');

			optionsDiv.style.width = selectWidth + 1 + 'px';

			//set height

			var totalHeight = selects[q].options.length*18;

			if(selectHeight<totalHeight) {

				optionsDiv.style.height = selectHeight+'px';

			}

			optionsDiv.style.overflow = 'auto';

			optionsDiv.className = "optionsDivInvisible";

			



			optionsDiv.id = "optionsDiv"+q;

			optionsDiv.style.left = findPosX(selectArea) + 'px';

			optionsDiv.style.top = findPosY(selectArea) + selectAreaHeight - selectAreaOptionsOverlap + 'px';

			//get select's options and add to options div

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

				var optionHolder = document.createElement('p');

				if(ismultiple){

					var optionLink = document.createElement('a');

					var optionTxt = document.createTextNode(myElem.options[w].text);



					optionLink.style.padding = "1px 40px 1px 20px";

					optionLink.href = "javascript:selectMe('"+myElem.id+"',"+w+","+q+", 1);";

					if(myElem.options[w].selected) {

						optionLink.className = "backgroundChecked";

						showMyLabel(myElem.id,w,q);

					}else{

						optionLink.className = "backgroundCheck";

					}



				}else{



					var optionLink = document.createElement('a');

					var optionTxt = document.createTextNode(myElem.options[w].text);

					optionLink.href = "javascript:showOptions("+q+"); selectMe('"+myElem.id+"',"+w+","+q+", 0);";

					if(myElem.options[w].selected) {selectMe(myElem.id,w,q, 0);}

				}

				

				if(selectJavascript != false){

					selectJavascriptOption = selectJavascript.replace(/#OBJ#/g, "{id:'"+selects[q].id+"', value:'"+selects[q].options[w].value+"'}");

					optionLink.href = optionLink.href + selectJavascriptOption;

				}



				if(ismultiple){

					optionLink.appendChild(optionTxt);

					optionHolder.appendChild(optionLink);

					optionsDiv.appendChild(optionHolder);

				}else{

					optionLink.appendChild(optionTxt);

					optionHolder.appendChild(optionLink);

					optionsDiv.appendChild(optionHolder);

				}



				//check for pre-selected items





			}

			//insert options div

			document.getElementsByTagName("body")[0].appendChild(optionsDiv);

		}

	}

}

function showOptions(g) {

	for(var q = 0; q < selects.length; q++) {

		if(q != g){

			elem = document.getElementById("optionsDiv"+q);

			elem.className = "optionsDivInvisible";

		}

	}

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

	if(elem.className=="optionsDivInvisible") {elem.className = "optionsDivVisible";}

	else if(elem.className=="optionsDivVisible") {elem.className = "optionsDivInvisible";}

	elem.onmouseout = hideOptions;

}



//Any good solution ?

function hideOptions(e) { //hiding the options on mouseout

	//	if (!e) var e = window.event;

	//	var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;

	//	if(((reltg.nodeName != 'A') && (reltg.nodeName != 'DIV')) || ((reltg.nodeName == 'A') && (reltg.className=="selectButton") && (reltg.nodeName != 'DIV'))) {this.className = "optionsDivInvisible";};

	//	e.cancelBubble = true;

	//	if (e.stopPropagation) e.stopPropagation();

}

function selectMe(selectFieldId,linkNo,selectNo, multiple) {

	//feed selected option to the actual select field

	selectField = document.getElementById(selectFieldId);

	if(multiple){

		if(selectField.options[linkNo].selected){

			document.getElementById("optionsDiv"+selectNo).getElementsByTagName("p")[linkNo].getElementsByTagName("a")[0].className = "backgroundCheck";

			selectField.options[linkNo].selected = "";

		}else{

			document.getElementById("optionsDiv"+selectNo).getElementsByTagName("p")[linkNo].getElementsByTagName("a")[0].className = "backgroundChecked";

			selectField.options[linkNo].selected = "selected";

		}

	}else{

		for(var k = 0; k < selectField.options.length; k++) {



			if(k==linkNo) {

				selectField.options[k].selected = "selected";

			}else{

				selectField.options[k].selected = "";

			}

		}

	}

	//show selected option

	textVar = document.getElementById("mySelectText"+selectNo);

	var newText = document.createTextNode(selectField.options[linkNo].text);

	textVar.replaceChild(newText, textVar.childNodes[0]);



}

function showMyLabel(selectFieldId,linkNo, selectNo){

	

	selectField = document.getElementById(selectFieldId);

	textVar = document.getElementById("mySelectText"+selectNo);

	var newText = document.createTextNode(selectField.options[linkNo].text);

	textVar.replaceChild(newText, textVar.childNodes[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 checkRadioByDiv(g) {

	radios[g].checked = true;

	checkRadio(g);

	

}

function checkRadio(g) {

	if(radios[g].checked) {

		for (var k = 0; k < radios.length; k++)

		{

			if(k != g) {

				document.getElementById('myRadio'+k).className = "radioAreaUnchecked";

				radios[k].nextSibling.className = "";

			}

			else if(k == g) {

				document.getElementById('myRadio'+k).className = "radioAreaChecked";

				radios[g].nextSibling.className = "chosen";

			}

		}

	}

	else if(!radios[g].checked) {

		document.getElementById('myRadio'+g).className = "radioAreaUnchecked"; 

		radios[g].nextSibling.className = "";

	}

}



function checkCheckByDiv(g) {

	checkboxes[g].checked = !checkboxes[g].checked;

	checkCheck(g);	

}

function checkCheck(g) {

	if(checkboxes[g].checked) {

		for(var k = 0; k < checkboxes.length; k++) {

			if(k == g) {

				document.getElementById('myCheck'+k).className = "checkboxAreaChecked";

				checkboxes[g].nextSibling.className = "chosen";

			}

		}

	}

	else if(!checkboxes[g].checked) {

		document.getElementById('myCheck'+g).className = "checkboxAreaUnchecked";

		checkboxes[g].nextSibling.className = "";

	}

}



function hoverEffects() {

	//get all elements (text inputs, passwords inputs, textareas)

	var elements = document.getElementsByTagName('input');

	var j = 0;

	for (var i4 = 0; i4 < elements.length; i4++) {

		if((elements[i4].type=='text')||(elements[i4].type=='password')) {

			hovers[j] = elements[i4];

			++j;

		}

	}

	elements = document.getElementsByTagName('textarea');

	for (var i4 = 0; i4 < elements.length; i4++) {

		hovers[j] = elements[i4];

		++j;

	}

	

	

	//add focus effects

	for (var i4 = 0; i4 < hovers.length; i4++) {		

		hovers[i4].onfocus = function() {this.className += "Hovered";}

		hovers[i4].onblur = function() {this.className = this.className.replace(/Hovered/g, "");}

		var actionJavascript = false;

		if(hovers[i4].getAttribute("js_action", false) != null){

			actionJavascript = hovers[i4].getAttribute("js_action", false)

			parametersJavascript = actionJavascript.split("=");

			parametersJavascript[1] = parametersJavascript[1].replace(/#OBJ#/g, "{id:'"+hovers[i4].id+"', value:'"+hovers[i4].value+"'}");

			if (window.attachEvent) {

			    hovers[i4].attachEvent(parametersJavascript[0], function() {eval(parametersJavascript[1])});

			  } else {

			    hovers[i4].addEventListener(parametersJavascript[0].replace("on", ""), function() {eval(parametersJavascript[1])}, false);

			  }

		}				

	}

}



function buttonHovers() {

	//get all buttons

	var elements = document.getElementsByTagName('input');

	var j = 0;

	for (var i5 = 0; i5 < elements.length; i5++) {

		if(elements[i5].type=='submit') {

			buttons[j] = elements[i5];

			++j;

		}

	}

	

	//add hover effects

	for (var i5 = 0; i5 < buttons.length; i5++) {



		buttons[i5].onmouseover = function() {this.className += "Hovered";}

		buttons[i5].onmouseout = function() {this.className = this.className.replace(/Hovered/g, "");}

	}

}



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;

	}

}





//Apply Window onload effects 

if (window.attachEvent) {

    window.attachEvent("onload", function() {init_niceforms()});

  } else {

    window.addEventListener("load", function() {init_niceforms()}, false);

  }
