/* * UPDATED: 12.19.07 * * jNice * by Sean Mooney (sean@whitespace-creative.com)  * * To Use: place in the head  *  <link href="inc/style/jNice.css" rel="stylesheet" type="text/css" /> *  <script type="text/javascript" src="inc/js/jquery.jNice.js"></script> * * And apply the jNice class the form you want to style * * To Do: Add textareas, Add File upload * ******************************************** */function recupOnClick(click) {	var vide="";	tmp_onclick = vide.concat(click);	tmp_onclick = tmp_onclick.replace("\n", "");	var reg=new RegExp('function (.)*{', "g");	tmp_onclick = tmp_onclick.replace(reg, "");	tmp_onclick = tmp_onclick.replace("}", "");	var reg=new RegExp('(")', "g");	tmp_onclick = tmp_onclick.replace(reg, "'");	tmp_onclick = tmp_onclick.replace("return ", "");	var reg = new RegExp("(\r\n|\r|\n)", "g" )	tmp_onclick = tmp_onclick.replace(reg, "");	return tmp_onclick;}(function($){	$.fn.jNice = function(options){		var self = this;		var safari = $.browser.safari; /* We need to check for safari to fix the input:text problem */			/* each form */		this.each(function(){			/***************************			  Buttons			 ***************************/			var setButton = function(){								tmp_onclick = recupOnClick($(this).attr('onclick'));				if (tmp_onclick != '') {					$(this).replaceWith('<button onclick="return '+ tmp_onclick +'" value="'+ $(this).attr('value').replace('"', '&quot;') +'" id="'+ this.id +'" name="'+ this.name +'" type="'+ this.type +'" class="'+ this.className +'"><span><span>'+ $(this).attr('value') +'</span></span>');					//$(this).replaceWith('<button onclick="return CheckObligation(\'3\', this);" id="'+ this.id +'" name="'+ this.name +'" type="'+ this.type +'" class="'+ this.className +'"><span><span>'+ $(this).attr('value') +'</span></span></button>');				} else {					$(this).replaceWith('<button value="'+ $(this).attr('value') +'" id="'+ this.id +'" name="'+ this.name +'" type="'+ this.type +'" class="'+ this.className +'"><span><span>'+ $(this).attr('value') +'</span></span>');				}			};			$('input:submit, input:reset', this).each(setButton);						/***************************			  Text Fields 			 ***************************/			var setText = function(){				var $input = $(this);				$input.addClass("jNiceInput").wrap('<div class="jNiceInputWrapper"><div class="jNiceInputInner"><div></div></div></div>');				var $wrapper = $input.parents('div.jNiceInputWrapper');				$wrapper.css("width", $(this).width()+10);				$input.focus(function(){					$wrapper.addClass("jNiceInputWrapper_hover");				}).blur(function(){					$wrapper.removeClass("jNiceInputWrapper_hover");				});			};			$('input:text:visible, input:password', this).each(setText);			/* If this is safari we need to add an extra class */			if (safari){$('.jNiceInputWrapper').each(function(){$(this).addClass('jNiceSafari').find('input').css('width', $(this).width()+11);});}						/***************************			  Check Boxes 			 ***************************/			$('input:checkbox', this).each(function(){				$(this).addClass('jNiceHidden').wrap('<span class="jCheckBoxWrapper"></span>');				var $wrapper = $(this).parent();												$wrapper.prepend('<a href="#" class="jNiceCheckbox" ></a>');				/* Click Handler */				$(this).siblings('a.jNiceCheckbox').click(function(){					var $a = $(this);										var tmp_onclick = '';					//Lancement de la fonction associé au bouton  					if ($a.siblings('input')[0].getAttributeNode('onclick')) {  						//tmp_onclick = recupOnClick($a.siblings('input')[0].onclick);  						tmp_onclick = '1';  					}										if ((tmp_onclick != '' && $a.siblings('input')[0].onclick()) || tmp_onclick == '') {						if ($a.siblings('input')[0].disabled == false) {	             			var input = $a.siblings('input')[0];	  							             			if (input.checked===true){	  							input.checked = false;	  							$a.removeClass('jNiceChecked');	  						}	  						else {	  							input.checked = true;	  							$a.addClass('jNiceChecked');	  						}	  					}					}					return false;				});				/* set the default state */				if (this.checked){$('a.jNiceCheckbox', $wrapper).addClass('jNiceChecked');}			});						/***************************			  Radios 			 ***************************/			$('input:radio', this).each(function(){				$input = $(this);				$input.addClass('jNiceHidden').wrap('<span class="jRadioWrapper"></span>');				var $wrapper = $input.parent();								//$wrapper.prepend('<label for="'+ this.id +'"><a href="#" class="jNiceRadio" rel="'+ this.name +'"></a></label>');				$wrapper.prepend('<a href="#" class="jNiceRadio" rel="'+ this.name +'"></a>');				/* Click Handler */				$('a.jNiceRadio', $wrapper).click(function(){					var $a = $(this);		            		if ($a.siblings('input')[0].disabled == false) {		  						$a.siblings('input')[0].checked = true;  						  						$a.addClass('jNiceChecked');  						/* uncheck all others of same name */  						$('a[rel="'+ $a.attr('rel') +'"]').not($a).each(function(){  							$(this).removeClass('jNiceChecked').siblings('input')[0].checked=false;  						});  						  						//Lancement de la fonction associé au bouton  						if ($a.siblings('input')[0].getAttributeNode('onclick'))  							$a.siblings('input')[0].onclick();  						  						//Test des checks des boutons radios  						if ($a.siblings('input')[0].checked == false) {  							$a.removeClass('jNiceChecked');  						}  					}  					return false;				});				/* set the default state */				if (this.checked){$('a.jNiceRadio', $wrapper).addClass('jNiceChecked');}			});									/***************************			  Labels for Radios / Checkbox			***************************/			$('label', this).each(function(){				$label = $(this);				$(this).click(function(){					$label = $(this);					$span = $label.siblings('span');					$a = $span.children('a');										if ($a.siblings('input')[0].disabled == false && $span[0].className == 'jRadioWrapper') {	  						// Radio						$a.siblings('input')[0].checked = true;  						  						$a.addClass('jNiceChecked');  						/* uncheck all others of same name */  						$('a[rel="'+ $a.attr('rel') +'"]').not($a).each(function(){  							$(this).removeClass('jNiceChecked').siblings('input')[0].checked=false;  						});  						  						//Lancement de la fonction associé au bouton  						$a.siblings('input')[0].onclick();  						  						//Test des checks des boutons radios  						if ($a.siblings('input')[0].checked == false) {  							$a.removeClass('jNiceChecked');  						}  					} else if ($a.siblings('input')[0].disabled == false && $span[0].className == 'jCheckBoxWrapper') {  						// Checkbox  						var tmp_onclick = '';  												//Lancement de la fonction associé au bouton						if ($a.siblings('input')[0].getAttributeNode('onclick')) {	  						//tmp_onclick = recupOnClick($a.siblings('input')[0].onclick);	  						tmp_onclick = '1';	  					}	  											if ((tmp_onclick != '' && $a.siblings('input')[0].onclick()) || tmp_onclick == '') {							if ($a.siblings('input')[0].disabled == false) {		             			var input = $a.siblings('input')[0];		  								             			if (input.checked===true){		  							input.checked = false;		  							$a.removeClass('jNiceChecked');		  						}		  						else {		  							input.checked = true;		  							$a.addClass('jNiceChecked');		  						}		  					}						}  					}					return false;														});							});						/***************************			  Labels for Checkbox			***************************/			/*$('label', this).each(function(){				$label = $(this);				//alert($(this).nodeName);				$(this).click(function(){					$label = $(this);					$span = $label.siblings('span');					$a = $span.children('a');										if ($a.siblings('input')[0].disabled == false && $a.siblings('input')[0].className == 'jCheckBoxWrapper') {	  						if ($a.siblings('input')[0].disabled == false) {	             			var input = $a.siblings('input')[0];	  							             			if (input.checked===true){	  							input.checked = false;	  							$a.removeClass('jNiceChecked');	  						}	  						else {	  							input.checked = true;	  							$a.addClass('jNiceChecked');	  						}	  					}  					}					return false;														});							});*/									/***************************			  Selects 			 ***************************/			$('select', this).each(function(index){				var $select = $(this);				if ($select.size > 1) {          /* First thing we do is Wrap it */  				$(this).addClass('jNiceHidden').wrap('<div class="jNiceSelectWrapper"></div>');  				var $wrapper = $(this).parent().css({zIndex: 100-index});  				/* Now add the html for the select */  				$wrapper.prepend('<div><span></span><a href="#" class="jNiceSelectOpen"></a></div><ul></ul>');  				var $ul = $('ul', $wrapper);  				/* Now we add the options */  				$('option', this).each(function(i){  					$ul.append('<li><a href="#" index="'+ i +'">'+ this.text +'</a></li>');  				});  				/* Hide the ul and add click handler to the a */  				$ul.hide().find('a').click(function(){  						$('a.selected', $wrapper).removeClass('selected');  						$(this).addClass('selected');	  						/* Fire the onchange event */  						if ($select[0].selectedIndex != $(this).attr('index') && $select[0].onchange) { $select[0].selectedIndex = $(this).attr('index'); $select[0].onchange(); }  						$select[0].selectedIndex = $(this).attr('index');  						$('span:eq(0)', $wrapper).html($(this).html());  						$ul.hide();  						return false;  				});  				/* Set the defalut */  				$('a:eq('+ this.selectedIndex +')', $ul).click();  			}			});/* End select each */						/* Apply the click handler to the Open */			$('a.jNiceSelectOpen', this).click(function(){														var $ul = $(this).parent().siblings('ul');														if ($ul.css('display')=='none'){hideSelect();} /* Check if box is already open to still allow toggle, but close all other selects */    													$ul.slideToggle();														var offSet = ($('a.selected', $ul).offset().top - $ul.offset().top);														$ul.animate({scrollTop: offSet});														return false;												});				}); /* End Form each */				/* Hide all open selects */		var hideSelect = function(){			$('.jNiceSelectWrapper ul:visible').hide();		};				/* Check for an external click */		var checkExternalClick = function(event) {			if ($(event.target).parents('.jNiceSelectWrapper').length === 0) { hideSelect(); }		};		/* Apply document listener */		$(document).mousedown(checkExternalClick);							/* Add a new handler for the reset action */		var jReset = function(f){			var sel;			$('.jNiceSelectWrapper select', f).each(function(){sel = (this.selectedIndex<0) ? 0 : this.selectedIndex; $('ul', $(this).parent()).each(function(){$('a:eq('+ sel +')', this).click();});});			$('a.jNiceCheckbox, a.jNiceRadio', f).removeClass('jNiceChecked');			$('input:checkbox, input:radio', f).each(function(){if(this.checked){$('a', $(this).parent()).addClass('jNiceChecked');}});		};		this.bind('reset',function(){var action = function(){jReset(this);}; window.setTimeout(action, 10);});			};/* End the Plugin */	/* Automatically apply to any forms with class jNice */	$(function(){$('form.jNice').jNice();	});})(jQuery);				   
