/*
	Fmanizer 1.1
	Author: Linderman, Bulgaria
	Support: linderman83@gmail.com
	
	Based on jQuery (not a plugin).
	Required jQuery 1.4.2 +
	
	Easy HTML Form Customizing. 
	Supported form elements types: radio, checkbox, select, select multiple, file.
	
	Tested on: IE 6 +, Firefox 2 +, Chrome 5 +, Opera 10 +, Safari 5 + 
	
	DEMO Video: http://www.youtube.com/watch?v=dCcbZU1NzoU&hd=1
	
	Build Date: xx-May-2011
*/
var customForm={fclass:'fmanizer',cleanForm:true,radios:true,checks:true,select:true,multiple:false,file:false,getEvents:false,setOption:function(key,value){customForm[key]=value;return this;},start:function(){if($.browser.mozilla){$("."+this.fclass).attr("autocomplete","off");}
this.getElements();this.cleanForm?this.useCleanForm():'';},getElements:function(){if(this.radios){this.radios=$('.'+this.fclass+' input').filter("[type=radio]").filter(":not([rel=dont])");this.makeInput('radios');}
if(this.checks){this.checks=$('.'+this.fclass+' input').filter("[type=checkbox]").filter(":not([rel=dont])");this.makeInput('checks');}
if(this.select){this.select=$('.'+this.fclass+' select').filter(":not([multiple])").filter(":not([rel=dont])");this.makeSelect();}
if(this.multiple){this.multiple=$('.'+this.fclass+' select').filter("[multiple]").filter(":not([rel=dont])");this.makeMultiple()}
if(this.file){this.file=$('.'+this.fclass+' input').filter("[type=file]").filter(":not([rel=dont])");this.makeFile();}},makeInput:function(type){$(customForm[type]).each(function(){var name=$(this).attr('name').replace(/\[/g,'').replace(/\]/g,'');var disabled=$(this).is(':disabled')?' disabled':'';$(this).is(':checked')?selected=' selected':selected='';$(this).hasClass('error')?error=' error':error='';var events=customForm.getEvents?customForm.attachEvents($(this)):'';$(this).parents('.'+customForm.fclass).find('input[name='+name+']').is(':hidden')?'':$(this).parents('.'+customForm.fclass).append('<input type="hidden" name="'+$(this).attr('name')+'" value=""'+disabled+'/>');$(this).after('<a href="#" id="1" '+events+' class="'+$(this).attr('type')+selected+error+disabled+'" data-name="'+$(this).attr('name')+'" data-value="'+$(this).val()+'"><span></span></a>').detach();});$('a.selected').each(function(){$('input[name='+$(this).attr('data-name')+']:hidden').val($(this).attr('data-value'));});$('.'+this.fclass+' a[data-name]:not([class*=disabled])').bind('click',function(event){event.preventDefault();$(this).hasClass('radio')?customForm.changeValue('radio',$(this)):customForm.changeValue('checkbox',$(this));});$('.'+this.fclass+' a[data-name]').bind('keypress',function(event){if(event.which=='32'){event.preventDefault();$(this).trigger('click');}});var all=0;var cur=0;$('.'+this.fclass+' a.radio').bind('keydown',function(event){(all==0)?all=$(this).parents('.'+customForm.fclass).find('a[data-name='+$(this).attr('data-name')+']'):'';var i=$(all).index(cur);if(event.keyCode=='38'){event.preventDefault();(cur-1>=0)?function(){cur-=1;customForm.changeValue('radio',$(all).eq(cur))}():'';}
if(event.keyCode=='40'){event.preventDefault();(cur+1<all.length)?function(){cur+=1;customForm.changeValue('radio',$(all).eq(cur));}():'';}});},changeValue:function(type,elm){elm.trigger('focus');if(type=='radio'){elm.parents('.'+this.fclass).find('a.selected[data-name='+elm.attr('data-name')+']').removeClass('selected');elm.addClass('selected');elm.parents('.'+this.fclass).find('input[name="'+elm.attr('data-name')+'"]').val(elm.attr('data-value'));}else if(type=='checkbox'){elm.toggleClass('selected');elm.hasClass('selected')?val=elm.attr('data-value'):val='';elm.parents('.'+this.fclass).find('input[name="'+elm.attr('data-name')+'"]:hidden').val(val);}else{}},makeSelect:function(){$(this.select).each(function(s){var name=$(this).attr('name').replace(/\[/g,'').replace(/\]/g,'');$(this).hasClass('error')?error=' error':error='';var disabled=$(this).is(':disabled')?' disabled':'';var events=customForm.getEvents?customForm.attachEvents($(this)):'';var newElm='<div '+events+' class="selectbox '+name+error+disabled+'" id="'+name+'" data-name="'+$(this).attr('name')+'">';newElm+='<a href="#" id="2" class="drop"><span>'+$(this).find('option:selected').text()+'</span></a>';newElm+='<div class="list" style="display: none">';newElm+='<div class="innerList">';$(this).contents('optgroup').each(function(){newElm+='<span class="optgroup"><span class="label">'+$(this).attr('label')+'</span>';$(this).find('option').each(function(){newElm+='<a href="#" id="3" data-value="'+$(this).attr('value')+'" class="option'+($(this).attr('selected')?' selected':'')+($(this).is(':disabled')?' disabled':'')+'">'+$(this).text()+'</a>';});newElm+='</span>';});$(this).children('option').each(function(){newElm+='<a href="#" onclick="thesort(\''+$(this).attr('value')+'\')" id="'+$(this).attr('value')+'" data-value="'+$(this).attr('value')+'" class="option'+($(this).attr('selected')?' selected':'')+($(this).attr('disabled')?' disabled':'')+'">'+$(this).text()+'</a>';});newElm+='</div>';newElm+='</div>';newElm+='<input type="hidden" '+disabled+' name="'+$(this).attr('name')+'" value="'+$(this).find('option:selected').attr('value')+'" />';newElm+='</div>';$(this).after(newElm).detach();});$('.selectbox:not([class*=disabled])').bind({click:function(event){event.preventDefault();if($(this).hasClass('opened')){$(this).removeClass('opened');$(this).find('.list').slideUp();}else{$(this).addClass('opened');$(this).find('.list').slideDown();}
changeValue($(event.target),$(this).attr('data-name'));}});$('.selectbox:not([class*=disabled])').bind('keydown',function(event){var all=$(this).find('a.option');var s=$(this).find('a.selected').get(0);var i=$(all).index(s);if(event.keyCode=='38'){event.preventDefault();((i-1)>-1)?changeValue($(all).eq(i-1),$(this).attr('data-name')):'';}
if(event.keyCode=='40'){event.preventDefault();$(all).eq(i+1)?changeValue($(all).eq(i+1),$(this).attr('data-name')):'';}});function changeValue(et,name){if(et.attr('data-value')&&!et.hasClass('disabled')){$('input[name="'+name+'"]:hidden').val(et.attr('data-value'));et.parents('.selectbox').find('.selected').removeClass('selected');et.addClass('selected');et.parents('.selectbox').find('.drop span').text(et.text());}
return true;}},makeMultiple:function(){$(this.multiple).each(function(m){var name=$(this).attr('name').replace(/\[/g,'').replace(/\]/g,'');var disabled=$(this).is(':disabled')?' disabled':'';$(this).hasClass('error')?error=' error':error='';var events=customForm.getEvents?customForm.attachEvents($(this)):'';var newElm='<div '+events+' class="multiple '+name+error+disabled+'" data-name="'+$(this).attr('name')+'" id="'+name+'">';newElm+='<div class="list">';newElm+='<div class="innerList">';$(this).contents('optgroup').each(function(){newElm+='<span class="optgroup"><span class="label">'+$(this).attr('label')+'</span>';$(this).find('option').each(function(){newElm+='<a href="#" id="5" data-value="'+$(this).attr('value')+'" class="option'+($(this).attr('selected')?' selected':'')+($(this).attr('disabled')?' disabled':'')+'">'+$(this).text()+'</a>';newElm+=$(this).attr('selected')?'<input '+($(this).attr('disabled')?'disabled':'')+' type="hidden" value="'+$(this).attr('value')+'" name="'+$(this).parents('select').attr('name')+'" />':'';});newElm+='</span>';});$(this).children('option').each(function(){newElm+='<a href="#" id="6" data-value="'+$(this).attr('value')+'" class="option'+($(this).attr('selected')?' selected':'')+($(this).attr('disabled')?' disabled':'')+'">'+$(this).text()+'</a>';newElm+=$(this).attr('selected')?'<input '+($(this).attr('disabled')?'disabled':'')+' type="hidden" value="'+$(this).attr('value')+'" name="'+$(this).parent().attr('name')+'" />':'';});newElm+='</div>';newElm+='</div>';newElm+='</div>';$(this).after(newElm).detach();});$('.multiple:not([class*=disabled])').bind({focusin:function(event){var s=$(this).find('a.option').first().addClass('current');},click:function(event){event.preventDefault();changeValue($(event.target),$(this).attr('data-name'));},keydown:function(event){event.preventDefault();var all=$(this).find('a.option');if($(this).find('a.current').hasClass('current')){var s=$(this).find('a.current').first();}else{var s=$(this).find('a.option').first();}
var i=$(all).index(s);if(event.keyCode=='38'){if((i-1)>-1){s.removeClass('current');$(all).eq(i-1).addClass('current');}}
if(event.keyCode=='40'){if($(all).eq(i+1)){s.removeClass('current');$(all).eq(i+1).addClass('current');}}
if(event.which=='32'){changeValue($(this).find('.current'),$(this).attr('data-name'));}}});function changeValue(et,name){if($(et).attr('data-value')){if($(et).hasClass('selected')){$(et).removeClass('selected');$(et).siblings('input[value='+$(et).attr('data-value')+']:hidden').detach();}else{if(!$(et).hasClass('disabled')){$(et).addClass('selected');$(et).after('<input type="hidden" value="'+$(et).attr('data-value')+'" name="'+name+'" />');}}}
return true;}},makeFile:function(){$(this.file).each(function(f){var name=$(this).attr('name').replace(/\[/g,'').replace(/\]/g,'');var disabled=$(this).is(':disabled')?' disabled':'';$(this).hasClass('error')?error=' error':error='';var events=customForm.getEvents?customForm.attachEvents($(this)):'';$(this).wrap('<div '+events+' class="file '+name+error+disabled+'" id="'+name+'" />');$(this).before('<a href="javascript:;" id="'+name+'"><span></span></a>');$(this).change(function(event){$(this).siblings('a').find('span').text($(this).val());});});},useCleanForm:function(){$('.'+this.fclass).each(function(){$(this).submit(function(){$(this).find('input:hidden').each(function(){$(this).val()==''?$(this).detach():'';});});});},attachEvents:function(element){var events='';var arr=['class','id','name','rel','style','src','type','name','value','checked','disable','width','height','onchange'];var attrs=$(element)[0].attributes;var attr;for(var i=0;i<attrs.length;i++){attr=attrs[i];events+=(jQuery.inArray(attr.nodeName,arr)==-1)?attr.nodeName+'="'+attr.nodeValue+'" ':'';}
return events;}}
$(window).load(function(){customForm.start();});
