(function(jQuery){
	/**
	 * refresh visual feedback of designed selects
	 * @param form - if true then this element is a wrapper (form) else this element is selects
	 * @author sarkiroka
	 */
	jQuery.fn.designSelectRefresh=function(form){
		var elemek;
		if(form){
			elemek=jQuery(this).find('select');
		}else{
			elemek=jQuery(this);
		}
		elemek.each(function(){
			var elem=jQuery(this);
			if(!elem.hasClass('designSelectDone')){return;}
			var wrapper=elem.next();
			if(wrapper.get(0).id.indexOf('_wrapper')==-1){return;}
			var designId=wrapper.get(0).id.substring(0,wrapper.get(0).id.indexOf('_wrapper'));
			var ul=jQuery('#'+designId+'_dropDown');
			ul.find('li').remove();
			elem.find('option').each(function(i){//every options
				var o=jQuery(this);
				ul.append('<li'+(o.val()==elem.val()?' class="selected"':'')+'><a href="#'+o.val()+'">'+o.html()+'</a></li>');
			});
			ul.find('a').click(function(designId){return function(){//list item functionality
				jQuery(this).parent().parent().find('li').removeClass('selected');
				jQuery(this).parent().addClass('selected');
				jQuery('#'+designId+'_show').html('<span>'+jQuery(this).html()+'</span>');
				jQuery('#'+designId+'_dropDown').hide();
				var selectElem=jQuery('#'+designId+'_wrapper').prev();
				var href=jQuery(this).get(0).href;
				href=decodeURI(href.substring(href.indexOf('#')+1));
				selectElem.val(href);
				selectElem.trigger('change');
				return false;
			};}(designId));
			jQuery('#'+designId+'_show').html('<span>'+elem.find('option[value="'+elem.val()+'"]').html()+'</span>');//default value
		});
	};
	/**
	 * change selects to ul>li>a elements
	 * @author sarkiroka
	 */
	jQuery.fn.designSelect=function(){
		var elemek=jQuery(this).find('select');
		var hasSelect=false;
		elemek.each(function(){
			hasSelect=true;
			var elem=jQuery(this);//The <select>
			var elemClass=elem.get(0).className;
			if(elem.hasClass('designSelectDone')){return;}//if already done then go next
			var designId=('designSelect'+Math.random()).replace('.', '');//generate special id for new elements
			elem.addClass('designSelectDone');//sign already done
			elem.hide();//hide select
			//after select insert new dom fragement
			elem.after('<div class="designSelect" id="'+designId+'_wrapper"><a id="'+designId+'_show" class="close"><span>'+elem.find('option[value="'+elem.val()+'"]').html()+'</span></a><ul id="'+designId+'_dropDown"></ul></div>');
			jQuery('#'+designId+'_wrapper').addClass(elemClass);
			var ul=jQuery('#'+designId+'_dropDown');//The <ul>
			var span=jQuery('#'+designId+'_show');//The <span>
			ul.hide();//hide dropdown
			elem.find('option').each(function(i){//every options
				var o=jQuery(this);
				ul.append('<li'+(o.val()==elem.val()?' class="selected"':'')+'><a href="'+o.val()+'">'+o.html()+'</a></li>');
			});
			span.click(function(designId){return function(){//drop down functionality
				jQuery('.designSelect ul').not('#'+designId+'_dropDown').hide();//every other close
				jQuery('#'+designId+'_dropDown').slideToggle('fast');//open this
				jQuery('.designSelect > a').removeClass('open').addClass('close');//all closes
				if(jQuery('#'+designId+'_dropDown').css('display')!='none'){//if opened then mark it
					jQuery('#'+designId+'_show').addClass('open').removeClass('close');
					}
			};}(designId));
			ul.find('a').click(function(designId){return function(){//list item functionality
				jQuery(this).parent().parent().find('li').removeClass('selected');
				jQuery(this).parent().addClass('selected');
				jQuery('#'+designId+'_show').html('<span>'+jQuery(this).html()+'</span>');
				jQuery('#'+designId+'_dropDown').hide();
				var selectElem=jQuery('#'+designId+'_wrapper').prev();
				var href=jQuery(this).get(0).href;
				href=decodeURI(href.substring(href.indexOf('#')+1));
				selectElem.val(href);
				selectElem.trigger('change');
				return false;
			};}(designId));
		});
		if(hasSelect){
			jQuery(document).mousedown(function(e){
				jQuery('.designSelect > a').removeClass('open').addClass('close');//all closes
				if(jQuery(e.target).closest('div.designSelect').length>0){//inside a dropdown list
					return true;
				}else{//outside
					jQuery('.designSelect ul').hide();
				}
			});
		}
	};//plugin
	
	jQuery.fn.designCheckbox=function(){
		var elemek=jQuery(this).find('input[type="checkbox"]');
		debugger;
		elemek.each(function(){
			var elem=jQuery(this);
			var designId=('designCheckbox'+Math.random()).replace('.', '');//generate special id for new elements
			elem.after('<div id="'+designId+'" class="designCheckbox"><a href="#"></a></div>');
			var designableElem=jQuery('#'+designId);
			designableElem.css({display:elem.css('display'),visibility:elem.css('visibility')});
			designableElem.addClass(elem.get(0).checked?'checked':'unchecked');
			designableElem.find('a').click(function(){
				var checkbox=jQuery(this).parent().prev();
				var checked=checkbox.get(0).checked;
				jQuery(this).parent().removeClass('unchecked').removeClass('checked').addClass(!checked?'unchecked':'checked');
			});
		});

	};
	
	jQuery.fn.designRadio=function(){
		var elemek=jQuery(this).find('input[type="radio"]');
		debugger;
		elemek.each(function(){
			var elem=jQuery(this);
			var designId=('designRadio'+Math.random()).replace('.', '');//generate special id for new elements
			elem.after('<div id="'+designId+'" class="designRadio"><a href="#"></a></div>');
			var designableElem=jQuery('#'+designId);
			designableElem.css({display:elem.css('display'),visibility:elem.css('visibility')});
			designableElem.addClass(elem.get(0).checked?'checked':'unchecked');
			designableElem.find('a').click(function(){
				var checkbox=jQuery(this).parent().prev();
				var checked=checkbox.get(0).checked;
				jQuery(this).parent().removeClass('unchecked').removeClass('checked').addClass(!checked?'unchecked':'checked');
			});
		});

	};	
	
})(jQuery);
