
var checkboxHeight = "25";
var radioHeight = "25";
var selectWidth = "190";
var selectMaxElements = 5;

/* No need to change anything after this */

var Custom = {
	init: function() {
		var inputs = document.getElementsByTagName("input"), span = Array(), options_div = Array(), divs = Array(), selects_inputs = Array(), textareas = Array(), options_list = Array(), textnode, option, active;
		var selects = document.getElementsByTagName("select");
		var textareas = document.getElementsByTagName("textarea");
		
		for(i = 0; i<inputs.length;i++){
			inputs[i].className = inputs[i].className.replace('replace','styled');
		}
		
		for(i = 0; i<selects.length;i++){
			selects[i].className = selects[i].className.replace('replace','styled');
		}
		
		for(i = 0; i<textareas.length;i++){
			textareas[i].className = textareas[i].className.replace('replace','styled');
		}
		
		for(a = 0; a < inputs.length; a++) {
			if((inputs[a].type == "checkbox" || inputs[a].type == "radio") && inputs[a].className.indexOf('styled') != -1) {
				inputs[a].style.display = 'none';
				span[a] = document.createElement("span");
				span[a].className = inputs[a].type;				

				if(inputs[a].checked == true) {
					if(inputs[a].type == "checkbox") {
						position = "0 -" + (checkboxHeight*2) + "px";
						span[a].style.backgroundPosition = position;
					} else {
						position = "0 -" + (radioHeight*2) + "px";
						span[a].style.backgroundPosition = position;
					}
				}
				inputs[a].parentNode.insertBefore(span[a], inputs[a]);
				tmp_function = inputs[a].onchange;
				if(inputs[a].onchange==undefined) inputs[a].onchange = Custom.clear;
				else {
					inputs[a].onchange = function() {tmp_function();Custom.clear();}
					span[a].onclick = tmp_function;
				}
				span[a].onmousedown = Custom.pushed;
				span[a].onmouseup = Custom.check;
				document.onmouseup = Custom.clear;
			}
			
			if((inputs[a].type=='text' || inputs[a].type=='password') && inputs[a].className.indexOf('styled') != -1){
				span[a] = document.createElement("span");
				if(inputs[a].className.indexOf('error') != -1) span[a].className = 'text error';
				else span[a].className = 'text';
				inputs[a].parentNode.insertBefore(span[a],inputs[a].parentNode.firstChild); //prependChild()
				span[a].appendChild(inputs[a]);
				if(inputs[a].className.indexOf('strlen')!=-1){
					sp = document.createElement("span");
					sp.className = "strlen_span";
					sp.id = "strlen_"+inputs[a].name;
					sp.appendChild(document.createTextNode('Pozostało '+(inputs[a].maxLength-inputs[a].value.length)+' znaków z '+inputs[a].maxLength));
					inputs[a].onkeydown = Custom.change_strlen;
					inputs[a].onkeyup = Custom.change_strlen;
					inputs[a].onchange = Custom.change_strlen;
					inputs[a].setAttribute("autocomplete", "off");
					if(span[a].nextSibling) span[a].parentNode.insertBefore(sp,span[a].nextSibling);
					else span[a].parentNode.appendChild(sp);
				}
			}
			else if((inputs[a].type=='text' || inputs[a].type=='password') && inputs[a].className.indexOf('styled') == -1){
				if(inputs[a].className.indexOf('strlen')!=-1){
					sp = document.createElement("span");
					sp.className = "strlen_span";
					sp.id = "strlen_"+inputs[a].name;
					sp.appendChild(document.createTextNode('Pozostało '+(inputs[a].maxLength-inputs[a].value.length)+' znaków z '+inputs[a].maxLength));
					inputs[a].onkeydown = Custom.change_strlen;
					inputs[a].onkeyup = Custom.change_strlen;
					inputs[a].onchange = Custom.change_strlen;
					if(span[a].nextSibling) span[a].parentNode.insertBefore(sp,span[a].nextSibling);
					else span[a].parentNode.appendChild(sp);
				}			
			}
			
			if(inputs[a].type=='file' && inputs[a].className.indexOf('styled') != -1){
				if(inputs[a].parentNode.className=='') inputs[a].parentNode.className='fileinputs';
				else inputs[a].parentNode.className=inputs[a].parentNode.className+' fileinputs';
				fakeFileUpload = document.createElement('div');
				fakeFileUpload.className = 'fakefile';
				fakeFileUpload.appendChild(document.createElement('input'));				
				inputs[a].className = 'file hidden';				
				var clone = fakeFileUpload.cloneNode(true);
				inputs[a].parentNode.appendChild(clone);
				inputs[a].relatedElement = clone.getElementsByTagName('input')[0];;
				if(inputs[a].value) inputs[a].onchange();
				inputs[a].onchange = inputs[a].onmouseout = function(){
					this.relatedElement.value = this.value;
				}			
			}
		}
		
		for(a = 0; a < textareas.length; a++) {
			//alert(textareas[a].className.substr(textareas[a].className.indexOf('maxlength')+10));
			max = textareas[a].className.substr(textareas[a].className.indexOf('maxlength')+10);
			//if(textareas[a].className.indexOf('styled') != -1) {
				if(textareas[a].className.indexOf('strlen')!=-1){
					sp = document.createElement("span");
					sp.className = "strlen_span";
					sp.id = "strlen_"+textareas[a].name;
					sp.appendChild(document.createTextNode('Pozostało '+(max-textareas[a].value.length)+' znaków z '+max));
					textareas[a].onkeydown = Custom.change_strlen;
					textareas[a].onkeyup = Custom.change_strlen;
					textareas[a].onchange = Custom.change_strlen;
					if(textareas[a].nextSibling) textareas[a].parentNode.insertBefore(sp,textareas[a].nextSibling);
					else textareas[a].parentNode.appendChild(sp);
				}	
				/*
				if (textareas[a].currentStyle) taWidth = textareas[a].currentStyle.width; //IE
				else if (document.defaultView && document.defaultView.getComputedStyle) taWidth = document.defaultView.getComputedStyle(textareas[a], "").width; //Firefox
				else taWidth = textareas[a].style.width; //inline
				taWidth = Math.ceil(taWidth.replace('px',''));
				
				div_ta = document.createElement("div");
				div_ta.className = 'ta';
				div_ta.style.width = taWidth+'px';
				div_tl = document.createElement("div");
				div_tl.className = 'tl';
				div_tr = document.createElement("div");
				div_tr.className = 'tr';
				div_br = document.createElement("div");
				div_br.className = 'br';
				div_bl = document.createElement("div");
				div_bl.className = 'bl';
				
				textareas[a].parentNode.appendChild(div_ta);
				div_ta.appendChild(div_tl);
				div_tl.appendChild(div_tr);
				div_tr.appendChild(div_br);
				div_br.appendChild(div_bl);
				div_bl.appendChild(textareas[a]);
				*/
			//}
		}
		
		for(a = 0; a < selects.length; a++) {
			if(selects[a].className.indexOf('styled') != -1) {
				selects[a].style.display = 'none'; // Ukrycie selecta
				selects[a].id = selects[a].name; // konieczność nadania id'a żeby mieć do czego się odwołać					
								
				divs[a] = document.createElement("div");
				divs[a].className = "select_div";
				divs[a].id = "select_div_" + selects[a].name;
				
				span[a] = document.createElement("span"); 
				span[a].className = "select";
				span[a].id = "select_" + selects[a].name;
				span[a].innerHTML = selects[a].options[selects[a].selectedIndex].text;
				span[a].onclick = Custom.showlist;
				
				selects_inputs[a] = document.createElement("input");
				selects_inputs[a].readonly = true;
				selects_inputs[a].id = "select_input_" + selects[a].name;
				//selects_inputs[a].onkeypress = "return false"; //zabezpieczenie przed onclickiem na enter w operze
				
				/* zabezpieczenie entera */
				selects_inputs[a].onkeypress = function(e){
					e = e||event;
					this.value = '';
					keyCode = e.charCode ? e.charCode : e.keyCode;
					if(keyCode == 13 || (keyCode>=34 && keyCode<=120 && keyCode != 116)){
						return false;
					}
				}
						
				selects_inputs[a].onkeyup = function(e){
					e = e||event;
					this.value = '';
					keyCode = e.charCode ? e.charCode : e.keyCode;
					if(keyCode == 13 || (keyCode>=34 && keyCode<=120 && keyCode != 116)){
						return false;
					}
				}
				
				selects_inputs[a].onfocus = function(){
					id = this.id.substring(13);
					opts_div = document.getElementById('options_div_'+id);
					opts_div.style.display = 'block';
				}
				
				divs[a].appendChild(span[a]);
				divs[a].appendChild(selects_inputs[a]);
				
				selects[a].parentNode.insertBefore(divs[a], selects[a]);
				
				options_div[a] = document.createElement("div");
				options_div[a].className = 'options_div';
				options_div[a].style.display = 'none';
				options_div[a].id = 'options_div_'+selects[a].name;
				options_list[a] = document.createElement("ul");
				options_list[a].className = 'select_options';
				options_div[a].appendChild(options_list[a]);
				options_div[a].style.height = ((selects[a].options.length>selectMaxElements?selectMaxElements:selects[a].options.length)*18)+'px';
				for(b = 0; b < selects[a].options.length;b++){
					var li = document.createElement('li');
					li.innerHTML = selects[a].options[b].text;
					li.setAttribute("rel", selects[a].options[b].value);
					li.onmouseover = Custom.option_hover;
					li.onclick = Custom.option_set;
					options_list[a].appendChild(li);
				}
				selects[a].parentNode.insertBefore(options_div[a],selects[a]);
				
				// Ustawienia szerokości
				if (selects[a].currentStyle) selectWidth = selects[a].currentStyle.width; //IE
				else if (document.defaultView && document.defaultView.getComputedStyle) selectWidth = document.defaultView.getComputedStyle(selects[a], "").width; //Firefox
				else selectWidth = selects[a].style.width; //inline
				selectWidth = selectWidth.replace('px','');
				
				if (span[a].currentStyle) padding_left = span[a].currentStyle.paddingLeft; //IE
				else if (document.defaultView && document.defaultView.getComputedStyle) padding_left = document.defaultView.getComputedStyle(span[a], "").paddingLeft; //Firefox
				else padding_left = span[a].style.paddingLeft; //inline				
				padding_left = padding_left.replace('px','');
				
				if (span[a].currentStyle) padding_right = span[a].currentStyle.paddingRight; //IE
				else if (document.defaultView && document.defaultView.getComputedStyle) padding_right = document.defaultView.getComputedStyle(span[a], "").paddingRight; //Firefox
				else padding_right = span[a].style.paddingRight; //inline				
				padding_right = padding_right.replace('px','');
				
				divs[a].style.width = selectWidth+'px';
				span[a].style.width = (selectWidth-padding_left-padding_right)+'px';
				
				var isMSIE = /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);
				if(isMSIE) {options_list[a].style.width = (selectWidth)+'px';} //Ustawienie sztywnej szerokosci dla IE
				
				options_list[a].style.minWidth = (selectWidth)+'px';
			}
		}
		
		
		//tabs 
		elements = document.getElementsByTagName('div');
		tabs_div = Array();
		j = 0;
		for(i = 0; i < elements.length;i++){
			if(elements[i].className.indexOf('tabs') != -1) {
				tabs_div[j] = elements[i];
				j++;
			}
		}
		
		if(tabs_div.length>0){
			//tabs_div_elements = Array();
			selected_tab = document.getElementById('checked_tab');
			for(i = 0; i < tabs_div.length; i++){
				tabs_div_elements = tabs_div[i].getElementsByTagName('*');
				
				if(selected_tab) first = false;
				else first = true;
				
				for(j=0;j<tabs_div_elements.length;j++){
					if(tabs_div_elements[j].className.indexOf('tab_button') != -1) {
						tabs_div_elements[j].href = "javascript:void(0);";
						tabs_div_elements[j].rel = tabs_div[i].id;
						tabs_div_elements[j].onclick = Custom.change_tab;
						if(first) tabs_div_elements[j].id = 'checked_tab';
						for(k=0;k<tabs_div_elements.length;k++){
							if(tabs_div_elements[k].className.indexOf('tab_content') != -1){
								tabs_div_elements[k].className = tabs_div_elements[k].className+' tabs_js';
								if(!first && selected_tab != tabs_div_elements[j] && tabs_div_elements[k].className.indexOf(tabs_div_elements[j].className.substr(11)) != -1){
									tabs_div_elements[k].style.display = 'none';
								}
							}
						}
						first = false;
					}
				}
			}
		}
		
		document.onclick = function(e) {
			if(window.event){
				e = window.event;
			}

			var targ = (e.target) ? e.target : e.srcElement;
		    if(targ != null) {
		        if(targ.nodeType == 3)
		            targ = targ.parentNode;
		    }
			
		    while(targ != null) {
				hide = true;
		        if(targ.className == 'select'){
					hide = false;
					break;
				}
		        targ = targ.offsetParent;
		    }
			if(hide) Custom.hidelists();
		}
		
		
		document.onkeydown = function(e) {
			if(window.event){
				e = window.event;
			}

			elms = document.getElementsByTagName('div');
			switch(e.keyCode){
				case 40: // down
					for(i=0;i<elms.length;i++){
						if(elms[i].className == 'options_div' && elms[i].style.display=='block'){
							select_input = document.getElementById('select_input_'+elms[i].id.substring(12));
							select_input.focus();
							opts = elms[i].getElementsByTagName('li');
							selected = 0;
							for(j=0;j<opts.length;j++){
								if(opts[j].className == 'hover'){
									selected = j;
									opts[j].className = '';
									break;
								}
							}
							if((selected+1)>(opts.length-1))
								selected = opts.length-1;
							else
								selected = selected + 1;
								
							opts[selected].className = 'hover';
							
							if(((selected+1)*18)>(elms[i].scrollTop+selectMaxElements*18)) elms[i].scrollTop = (selected+1-selectMaxElements)*18;
						}
					}					
					break;
				case 38: // up
					for(i=0;i<elms.length;i++){
						if(elms[i].className == 'options_div' && elms[i].style.display=='block'){
							select_input = document.getElementById('select_input_'+elms[i].id.substring(12));
							select_input.focus();
							opts = elms[i].getElementsByTagName('li');
							selected = 0;
							for(j=0;j<opts.length;j++){
								if(opts[j].className == 'hover'){
									selected = j;
									opts[j].className = '';
									break;
								}
							}
							
							if((selected-1)<0)
								selected = 0
							else
								selected = selected - 1;
								
								opts[selected].className = 'hover';
							
							if(((selected)*18)<elms[i].scrollTop) elms[i].scrollTop = selected*18;
						}
					}
					break;
				case 13: // enter
					for(i=0;i<elms.length;i++){
						if(elms[i].className == 'options_div' && elms[i].style.display=='block'){
							select_input = document.getElementById('select_input_'+elms[i].id.substring(12));
							select_div = document.getElementById('select_div_'+elms[i].id.substring(12));
							select_input.blur();
							
							opts = elms[i].getElementsByTagName('li');
							selected = 0;
							for(j=0;j<opts.length;j++){
								if(opts[j].className == 'hover'){
									selected = j;
									break;
								}
							}
							
							sel = document.getElementById(elms[i].id.substring(12));
							sel.value = opts[selected].innerHTML;
							span = document.getElementById('select_'+elms[i].id.substring(12));
							span.innerHTML = opts[selected].innerHTML;
							if(sel.onchange!=undefined){
								sel.onchange();
							}
							Custom.hidelists();
						}
					}
					break;
				case 9: // tab
					Custom.hidelists();
					break;
			}
		}
		
	},
	showlist: function(e){	
		id = this.id.substring(7);
		sel = document.getElementById(id);
		select_input = document.getElementById('select_input_'+id);
		opts_div = document.getElementById('options_div_'+id);
		if(opts_div.style.display=='none' || opts_div.style.display==''){
			Custom.hidelists();
			opts_div.style.display = 'block';
			
			opts = opts_div.getElementsByTagName('li');
			for(i=0;i<opts.length;i++){
				if(opts[i].getAttribute("rel")==sel.value){
					opts[i].className = "hover";
				}
				else{
					opts[i].className = "";
				}
			}
			
		}
		else{
			opts_div.style.display = 'none';
		}
	},
	
	hidelists: function(){
		//alert('hide');
		var els = document.getElementsByTagName("div");
		for (var i = 0; i < els.length; i++ ){
		    if (els[i].className=='options_div'){
				els[i].style.display = 'none';
		    }
		}
	},
	
	pushed: function() {
		element = this.nextSibling;
		if(element.checked == true && element.type == "checkbox") {
			this.style.backgroundPosition = "0 -" + checkboxHeight*3 + "px";
		} else if(element.checked == true && element.type == "radio") {
			this.style.backgroundPosition = "0 -" + radioHeight*3 + "px";
		} else if(element.checked != true && element.type == "checkbox") {
			this.style.backgroundPosition = "0 -" + checkboxHeight + "px";
		} else {
			this.style.backgroundPosition = "0 -" + radioHeight + "px";
		}
	},
	check: function() {
		element = this.nextSibling;
		if(element.checked == true && element.type == "checkbox") {
			this.style.backgroundPosition = "0 0";
			element.checked = false;
		} else {
			if(element.type == "checkbox") {
				this.style.backgroundPosition = "0 -" + checkboxHeight*2 + "px";
			} else {
				this.style.backgroundPosition = "0 -" + radioHeight*2 + "px";
				group = this.nextSibling.name;
				inputs = document.getElementsByTagName("input");
				for(a = 0; a < inputs.length; a++) {
					if(inputs[a].name == group && inputs[a] != this.nextSibling) {
						inputs[a].previousSibling.style.backgroundPosition = "0 0";
					}
				}
			}
			element.checked = true;
		}
	},
	clear: function() {
		inputs = document.getElementsByTagName("input");
		for(var b = 0; b < inputs.length; b++) {
			if(inputs[b].type == "checkbox" && inputs[b].checked == true && inputs[b].className == "styled") {
				inputs[b].previousSibling.style.backgroundPosition = "0 -" + checkboxHeight*2 + "px";
			} else if(inputs[b].type == "checkbox" && inputs[b].className == "styled") {
				inputs[b].previousSibling.style.backgroundPosition = "0 0";
			} else if(inputs[b].type == "radio" && inputs[b].checked == true && inputs[b].className == "styled") {
				inputs[b].previousSibling.style.backgroundPosition = "0 -" + radioHeight*2 + "px";
			} else if(inputs[b].type == "radio" && inputs[b].className == "styled") {
				inputs[b].previousSibling.style.backgroundPosition = "0 0";
			}
		}
	},
	choose: function() {
		option = this.getElementsByTagName("option");
		for(d = 0; d < option.length; d++) {
			if(option[d].selected == true) {
				document.getElementById("select" + this.name).childNodes[0].nodeValue = option[d].childNodes[0].nodeValue;
			}
		}
	},
	option_set: function() {
		id = this.parentNode.parentNode.id.substring(12);
		sel = document.getElementById(id);
		sel.value = this.getAttribute("rel");
		if(sel.onchange!=undefined){
			sel.onchange();
		}
		spn = document.getElementById('select_'+id);
		spn.innerHTML = sel.options[sel.selectedIndex].text;
	},
	option_hover: function() {		
		opts = this.parentNode.getElementsByTagName('li');
		for(i=0;i<opts.length;i++){
			opts[i].className = "";
		}
		this.className = 'hover';
	},
	change_strlen: function() {
		strlen_span = document.getElementById("strlen_"+this.name);
		if(this.maxLength){
			strlen_span.innerHTML = 'Pozostało '+(this.maxLength-this.value.length)+' znaków z '+this.maxLength;
		}
		else{
			if(this.value.length>max) this.value=this.value.substring(0,max);
			max = this.className.substr(this.className.indexOf('maxlength')+10);
			strlen_span.innerHTML = 'Pozostało '+(max-this.value.replace("\n",'').length)+' znaków z '+max;
		}
	},
	change_tab: function(){
		tab_div = document.getElementById(this.rel);
		
		tabs_div_elements = tab_div.getElementsByTagName('*');
		for(j=0;j<tabs_div_elements.length;j++){
			if(tabs_div_elements[j].className.indexOf('tab_button') != -1) {
				tabs_div_elements[j].id = "";
			}
			
			if(tabs_div_elements[j].className.indexOf('tab_content') != -1){
				if(tabs_div_elements[j].className.indexOf(this.className.substr(11)) != -1){
					tabs_div_elements[j].style.display = 'block';
				}
				else{
					tabs_div_elements[j].style.display = 'none';
				}
			}
		}
		
		this.id = 'checked_tab';
	}
}
window.onload = Custom.init;