// JavaScript Document

/* Radiobutton-Ersatz für Suche */

crir = {

	userAgent: '',

	isSafari: false,

	init: function() {

		

		this.userAgent = navigator.userAgent.toLowerCase();

		this.isSafari = ((this.userAgent.indexOf('safari')!=-1)&&(this.userAgent.indexOf('mac')!=-1))?true:false;

		

		if (! this.isSafari) { // the script doesn't work in safari.

			arrLabels = document.getElementsByTagName('label');

		

			searchLabels:

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

				// get the input element based on the for attribute of the label tag

				if (arrLabels[i].getAttributeNode('for') && arrLabels[i].getAttributeNode('for').value != '') {

					labelElementFor = arrLabels[i].getAttributeNode('for').value;				

					inputElement = document.getElementById(labelElementFor);

				}

				else {				

					continue searchLabels;

				}	

								

				inputElementClass = inputElement.className;	

			

				// if the input is specified to be hidden intiate it

				if (inputElementClass == 'crirHiddenJS') {

					inputElement.className = 'crirHidden';

					

					inputElementType = inputElement.getAttributeNode('type').value;	

					

					// add the appropriate event listener to the input element

					if (inputElementType == "checkbox") {

						inputElement.onclick = crir.toggleCheckboxLabel;

					}

					else {

						inputElement.onclick = crir.toggleRadioLabel;

					}

					

					// set the initial label state

					if (inputElement.checked) {

						if (inputElementType == 'checkbox') { arrLabels[i].className = 'checkbox_checked'}

						else { arrLabels[i].className = 'radio_checked' }

					}

					else {

						if (inputElementType == 'checkbox') { arrLabels[i].className = 'checkbox_unchecked'}

						else { arrLabels[i].className = 'radio_unchecked' }

					}

				}

				else if (inputElement.nodeName != 'SELECT' && inputElement.getAttributeNode('type').value == 'radio') { // this so even if a radio is not hidden but belongs to a group of hidden radios it will still work.

					arrLabels[i].onclick = crir.toggleRadioLabel;

					inputElement.onclick = crir.toggleRadioLabel;

				}

			}

		}

	},	

	

	findLabel: function (inputElementID) {

		arrLabels = document.getElementsByTagName('label');

	

		searchLoop:

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

			if (arrLabels[i].getAttributeNode('for') && arrLabels[i].getAttributeNode('for').value == inputElementID) {				

				return arrLabels[i];

				break searchLoop;				

			}

		}		

	},	

	

	toggleCheckboxLabel: function () {

		labelElement = crir.findLabel(this.getAttributeNode('id').value);

	

		if(labelElement.className == 'checkbox_checked') {

			labelElement.className = "checkbox_unchecked";

		}

		else {

			labelElement.className = "checkbox_checked";

		}

	},	

	

	toggleRadioLabel: function () {			 

		clickedLabelElement = crir.findLabel(this.getAttributeNode('id').value);

		

		clickedInputElement = this;

		clickedInputElementName = clickedInputElement.getAttributeNode('name').value;

		

		arrInputs = document.getElementsByTagName('input');

	

		// uncheck (label class) all radios in the same group

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

			inputElementType = arrInputs[i].getAttributeNode('type').value;

			if (inputElementType == 'radio') {

				inputElementName = arrInputs[i].getAttributeNode('name').value;

				inputElementClass = arrInputs[i].className;

				// find radio buttons with the same 'name' as the one we've changed and have a class of chkHidden

				// and then set them to unchecked

				if (inputElementName == clickedInputElementName && inputElementClass == 'crirHidden') {				

					inputElementID = arrInputs[i].getAttributeNode('id').value;

					labelElement = crir.findLabel(inputElementID);

					labelElement.className = 'radio_unchecked';

				}

			}

		}

	

		// if the radio clicked is hidden set the label to checked

		if (clickedInputElement.className == 'crirHidden') {

			clickedLabelElement.className = 'radio_checked';

		}

	},

	

	addEvent: function(element, eventType, doFunction, useCapture){

		if (element.addEventListener) 

		{

			element.addEventListener(eventType, doFunction, useCapture);

			return true;

		} else if (element.attachEvent) {

			var r = element.attachEvent('on' + eventType, doFunction);

			return r;

		} else {

			element['on' + eventType] = doFunction;

		}

	}

}



crir.addEvent(window, 'load', crir.init, false);
