
var formSkin = {

	init : function() {
		xAddEventListener(window, 'load', this.startup, false);
	}
	
	, startup : function() {
				
		// przeglï¿½damy elementy
		
		var inputs = xGetElementsByTagName('input');
		var areas = xGetElementsByTagName('textarea');
		var selects = xGetElementsByTagName('select');

		var ref;
		if (inputs.length > 0) ref = inputs[0];
		else if (areas.length > 0) ref = areas[0];
		else if (selects.length > 0) ref = selects[0];
		if (!ref || !xDef(ref.style) || !xDef(ref.innerHTML) || !xDef(ref.insertBefore) || !xDef(ref.className) || document.location.hash == '#noskin') {
			//formSkin.debug('unsupported!');
			return;
		}
		
		//formSkin.debug('Got inputs ', {i:inputs, a:areas, s:selects});
		
		for(var i = 0; i < inputs.length; ++i) {
			var e = inputs[i];
			switch(e.type.toLowerCase()) {
				case 'text':
					formSkin.catchText(e);
					break;				
				case 'checkbox':
					formSkin.catchCheck(e);
					break;				
				case 'radio':
					formSkin.catchRadio(e);
					break;				
			}
		}
		for(var i = 0; i < areas.length; ++i) {
			formSkin.catchTextArea(areas[i]);
		}
		for(var i = 0; i < selects.length; ++i) {
			if (selects[i].multiple == false) {
				formSkin.catchCombo(selects[i]);
			}
		}
		
		if (xDef(fixIeAlpha)) {
			fixIeAlpha();
		}
		
		
		
	}
	
	,catchElement:function(o, type) {
		var div = xCreateElement('div');
		div.innerHTML = '';
		div.className = 'fs_replacer fs_' + type;
		if (o.className) {
			div.className += ' ' + o.className;
		}
		if (o.style.display) {
			div.style.display = o.style.display;
		}
		xAddClass(o, 'fs_origin');
		
		//this.debug(xWidth(o));
		
		//xWidth(div, xWidth(o));
		div.style.width = xWidth(o) + 'px';

		o._replacer = div;
		div._origin = o;
		return div;
	}
	, finalizeElement:function(o,div) {
		xParent(o, true).insertBefore(div, o);
		//this.debug(div, div.outerHTML);
		return true;
	}
	
	, catchText : function(o) {
		var div = this.catchElement(o, 'text');
		xAddClass(o, 'fs_text');
		var fUpdate = function() { 
			try {
				var v = o.value;
				v = v.replace(new RegExp('<','g'), '&lt;');
				v = v.replace(new RegExp('>','g'), '&gt;');
				v = v.replace(new RegExp('\n','g'), '<br/>');
				div.innerHTML =  v ? v : '&nbsp;';
			} catch(e) {
				if (xDef(div.innerText)) {
					div.innerText = o.value ? o.value : ' ';
				}
				
			}
		};
		
		if (xIE4Up) {
			xWidth(div, xWidth(o) - 4);
			o.style.margin = '-1px 1px -1px 1px';
		}
		
		var fFocus = function(e) {
			o.focus();
			o.style.position = '';
			o.style.left = '';		
			div.style.position = 'absolute';	
			div.style.left = '-4500px';	
			fUpdate();
		};
		var fBlur = function(e) {
			o.style.position = 'absolute';
			o.style.left = '-4500px';			
			//o.style.top = '50px';			
			div.style.position = '';	
			fUpdate();
		};
		
		fUpdate();
		fBlur();
		
		xAddEventListener(o, 'change', fUpdate, false);
		xAddEventListener(o, 'focus', fFocus, false);
		xAddEventListener(o, 'blur', fBlur, false);
		xAddEventListener(div, 'click', fFocus, false);

		this.finalizeElement(o, div);
		
		return div;
		
	}
	, catchTextArea : function(o) {
		var div = this.catchText(o);
		xAddClass(div, 'fs_area');
		div.style.height = xHeight(o) + 'px';
	}
	
	, fOnFocus:function(e) {
		e = new xEvent(e);
		//formSkin.debug('focus', e);
		xAddClass(e.target._replacer, 'fs_focused');
	}
	, fOnBlur:function(e) {
		e = new xEvent(e);
		xRemoveClass(e.target._replacer, 'fs_focused');
	}
	, hideOriginal:function(o) {
		o.style.position = 'absolute';
		o.style.left = '-4500px';
	}
	, catchCheck : function(o) {
		var div = this.catchElement(o, 'check');
		div.innerHTML = '<div class="fs_check_bck"><div class="fs_check_mark">&nbsp;</div></div>';
		var fUpdate = function() {
			if (o.checked) {
				xAddClass(div, 'fs_check_on');
			} else {
				xRemoveClass(div, 'fs_check_on');
			}
		};
		var fClick = function() {
			o.checked = !o.checked;
			o.focus();
			fUpdate();
		};
		
		fUpdate();
		
		//div.innerHTML = o.innerHTML;
		//o.innerHTML = '';
		this.finalizeElement(o, div);
		this.hideOriginal(o);

		xAddEventListener(o, 'change', fUpdate, false);
		xAddEventListener(o, 'focus', this.fOnFocus, false);
		xAddEventListener(o, 'blur', this.fOnBlur, false);
		xAddEventListener(div, 'click', fClick, false);
		
	}
	, catchRadio : function(o) {
		var div = this.catchElement(o, 'radio');
		xAddClass(div, 'fs_check');
		div.innerHTML = '<div class="fs_check_bck fs_radio_bck"><div class="fs_check_mark">&nbsp;</div></div>';
		var fUpdate = function() {
			if (o.checked) {
				xAddClass(div, 'fs_check_on');
				// musimy sprawdziæ wszystkie o tej samej nazwie...
				var inputs = xGetElementsByTagName('input');
				for (var i = 0; i < inputs.length; ++i) {
					//formSkin.debug(inputs[i].type.toLowerCase(), inputs[i]);
					if (inputs[i].type.toLowerCase() == o.type.toLowerCase() && inputs[i].name.toLowerCase() == o.name.toLowerCase() && xDef(inputs[i]._fUpdate) && inputs[i].checked == false) {
						inputs[i]._fUpdate();
					}
				}
			} else {
				xRemoveClass(div, 'fs_check_on');
			}
		};
		var fClick = function() {
			o.checked = !o.checked;
			fUpdate();
			o.focus();
		};
		
		fUpdate();
		
		//div.innerHTML = o.innerHTML;
		//o.innerHTML = '';
		this.finalizeElement(o, div);
		this.hideOriginal(o);
		o._fUpdate = fUpdate;
		xAddEventListener(o, 'change', fUpdate, false);
		xAddEventListener(o, 'focus', this.fOnFocus, false);
		xAddEventListener(o, 'blur', this.fOnBlur, false);
		xAddEventListener(div, 'click', fClick, false);
		
	}
	, glowifyHTML : function(html, cls) {
		html =
			'<table border=0 cellspacing=0 cellpadding=0 class="'+cls+' css_glow" id="css_glow">'
			+ '<tr><td class="cb_bg cb_bg_tl cb_bg_chunksmall"></td><td class="cb_bg cb_bg_tm"></td><td class="cb_bg cb_bg_tr cb_bg_chunksmall"></td></tr>'
			+ '<tr><td class="cb_bg cb_bg_ml"></td><td class="cb_bg_mm">'
			+ html
			+ '</td><td class="cb_bg cb_bg_mr"></td></tr>'
			+ '<tr><td class="cb_bg cb_bg_bl cb_bg_chunksmall"></td><td class="cb_bg cb_bg_bm"></td><td class="cb_bg cb_bg_br cb_bg_chunksmall"></td></tr></table>'
		;
		return html;
	}
	, _lastId : 0
	, catchCombo : function(o) {
		var div = this.catchElement(o, 'combo');

		if (xWidth(o) < 50) div.style.width = '40px';
		
		//div.style.width = '';
		var id = 'fs_cb_' + (++this._lastId);
		var inner = '<div class="cb_container">';
		
		var buttonInner = '<div class="cb_button_inner" onclick="return ComboDropDownClick(\''+id+'\');">';
		buttonInner += '<div class="cb_value">...</div>';
		buttonInner += '<div class="cb_button_right"></div>';
		buttonInner += '</div>';
		inner += formSkin.glowifyHTML(buttonInner, 'cb_button');
		inner += '<div class="cb_expanded_container" id="'+id+'" onmouseover="return ComboDropDownOver(\''+id+'\');" onmouseout="return ComboDropDownOut(\''+id+'\');">';
	
		var itemsInner = '<div class="cb_menu">';
		
		var options = xGetElementsByTagName('option', o);
		for (var i = 0; i < options.length; ++i) {
			itemsInner += '<a class="cb_item" href="#" onclick="return false;">'+options[i].text+'</a>';
		}
  		itemsInner += '</div>';
		inner += formSkin.glowifyHTML(itemsInner, 'cb_items_table');
  		inner += '</div>';


  		
		div.innerHTML = inner;
		

		
		var value = xGetElementsByClassName('cb_value', div);
		value = value[0];
		var table = xGetElementsByClassName('cb_items_table', div);
		var table = table[0];
		table.style.width = div.style.width;
		
	
		
		var items = xGetElementsByClassName('cb_item', div, 'a');

		var fUpdate = function() {
			if (xDef(value.innerText)) {
				value.innerText = o.options[o.selectedIndex].text;
			} else {
				value.innerHTML = o.options[o.selectedIndex].text;
			}
		};
		var fClick = function(_e) {
			e = new xEvent(_e);
			//formSkin.debug('Click', e.target._index);
			
			o.selectedIndex = e.target._index;
			
			fUpdate();
			ComboDropDownClick(id);
		};
		for(var i=0; i < items.length; ++i) {
			xAddEventListener(items[i], 'click', fClick, false);
			items[i]._index = i;
		}
		
		xAddEventListener(o, 'change', fUpdate, false);
		xAddEventListener(o, 'focus', this.fOnFocus, false);
		xAddEventListener(o, 'blur', this.fOnBlur, false);
		xAddEventListener(div, 'click', function() {o.focus();}, false);
		fUpdate();

		this.finalizeElement(o, div);
  		this.hideOriginal(o);
	}
	
	, debug : function (msg, obj) {
		if (typeof(console) != 'undefined') {
			console.debug(msg, obj);
		} else {
			alert('debug' + msg + ' : ' + obj);	
		}
		
	}

};

//wylaczenie elementow graficznych
//formSkin.init();
