/*
	Author: Sergei Tolmachyov;
	Version: 1.0;
	Wirking in WIN (it's tested in): FF 2.0/3.0, Safari 3.1, Opera 8.50+, IE 5.5 / 6 / 7 / 8(beta), Chrome 1.0
*/


var ST_Classes = {
	checkbox_radio_Cont:{position:'relative',overflow:'hidden'},
	checkbox_radio_Input:{margin:0,padding:0,position:'absolute',left:0,top:0}
}

var ST_Design = {
	css:
		function(target, styles){
			for (var i in styles) target.style[i] = styles[i]
		},
	getzIndex:
		function(nEl){
			var z;
			if (document.defaultView && document.defaultView.getComputedStyle) z = document.defaultView.getComputedStyle(nEl,null).zIndex;
				else if (nEl.currentStyle) z = nEl.currentStyle.zIndex;
			return parseInt((z < 1 || z == 'auto') ? 0 : z,10)
		},
	setzIndex:
		function(nEl,zIndex){
			nEl.style.zIndex = zIndex;
			return nEl
		},
	ce:	function(tag, tagClass){
			var result = document.createElement(tag);
			result.className = tagClass;
			return result
		},
	replaceClass:
		function(nEl, stReplace, stAdd){
			nEl.className = nEl.className.replace(stReplace, '');
			if(stAdd) nEl.className += ' ' + stAdd;
		},
	init:
		function(input){

			var ContClass	= input.type + 'InputContainer',
			CheckedClass	= input.type + 'Input-Checked',
			UnCheckedClass	= input.type + 'Input-UnChecked',
			FocusClass		= input.type + 'Input-Focus',
			UnFocusClass	= input.type + 'Input-UnFocus',
			HoverClass		= input.type + 'Input-Hover',
			DisabledClass	= input.type + 'Input-Disabled',
			DisabledCheckedClass
							= input.type + 'Input-DisabledChecked';

		if (input.parentNode.className.match(ContClass) != ContClass)
		{
			var cont = ST_Design.ce('DIV',ContClass);
			input.parentNode.insertBefore(cont,input);

			if (input.type == 'radio' || input.type == 'checkbox')
			{
				cont.appendChild(input);
				ST_Design.setzIndex(cont,ST_Design.getzIndex(input));

				ST_Design.css(cont,ST_Classes.checkbox_radio_Cont);
				ST_Design.css(input,ST_Classes.checkbox_radio_Input);

				var btnDiv = ST_Design.ce('DIV','');
				cont.appendChild(btnDiv);

				if (!input.getAttribute('disabled'))
				{
					btnDiv.onmouseover = function() { this.className += ' hover' }
					btnDiv.onmouseout = function() { ST_Design.replaceClass(this,'hover') }
					btnDiv.onclick = function() { input.click(); input.focus() }
				} else {
					if (input.getAttribute('checked')) {cont.className +=' ' + DisabledCheckedClass} else {cont.className +=' ' + DisabledClass};
				}
				

				ST_Design.css(btnDiv,ST_Classes.checkbox_radio_Input);
				ST_Design.setzIndex(btnDiv,ST_Design.getzIndex(input)+1);

				function setStylesForInput(input)
				{
					if (input.checked)
					{
						ST_Design.replaceClass(cont,CheckedClass);
						ST_Design.replaceClass(cont,UnCheckedClass);
						ST_Design.replaceClass(cont,UnCheckedClass, CheckedClass);
					}else{
						ST_Design.replaceClass(cont,UnCheckedClass);
						ST_Design.replaceClass(cont,CheckedClass);
						ST_Design.replaceClass(cont,CheckedClass, UnCheckedClass)
					}
				}

				if (input.type == 'radio')
				{
					var rBtns = document.getElementsByTagName('INPUT');
					var radioClick = function()
					{
						setStylesForInput(input);
						if (input.name)
							for (var i=0; i<rBtns.length; i++)
								if (rBtns[i].name && rBtns[i].name == input.name && rBtns[i] != input && rBtns[i].checked != 'true')
								{
									ST_Design.replaceClass(rBtns[i].parentNode,CheckedClass);
									ST_Design.replaceClass(rBtns[i].parentNode,CheckedClass,UnCheckedClass);
								}
					}
				}

				setStylesForInput(input);

				var oldOnClick = input.onclick;
				if (typeof oldOnClick != 'function')
				{
					if (input.type == 'checkbox') input.onclick = function(){ setStylesForInput(this) };
					if (input.type == 'radio') input.onclick = function(){ radioClick(this) };
				}else
					input.onclick = function()
					{
						oldOnClick();
						if (input.type == 'checkbox') setStylesForInput(this);
						if (input.type == 'radio') radioClick(this);
					}
			}// radio and checkbox


			input.onfocus = function()
			{
				ST_Design.replaceClass(cont,UnFocusClass,FocusClass);
				if (input.type == 'radio') radioClick(this);
			}
			input.onblur = function()
			{
				ST_Design.replaceClass(cont,FocusClass,UnFocusClass)
			}
			input.onchange = function()
			{
				setStylesForInput(this);
			}

		}

		}//init
}


