/*
 * jQuery NiceForms plugin
 * jQueryAuthor: Roberto Ortelli
 * jQueryVersion: v1.1.3.1
 */

(function($) {
	
	$.fn.niceForms = function (o)
	{
		var defaults, oForm;
		
		defaults = {
			input: true,
			inputClass: {
				className: "niceform-input-text"
			},
			inputRadio: true,
			inputRadioParent: "td",
			inputRadioClass: {
				input: "input-radio",
				label: "label-radio",
				on: "label-radio-on",
				off: "label-radio-off"
			},
			inputCheckbox: true,
			inputCheckboxParent: "td",
			inputCheckboxClass: {
				label: "label-checkbox",
				on: "label-checkbox-on",
				off: "label-checkbox-off"
			},
			textarea: true,
			textareaOptions: {
				className: "niceform-textarea",
				extraRowsAdd: 2
			},
			select:	true,
			selectClass: {
				mainClass: "niceform-select",
				childClass: "niceform-selected",
				optionsClass: "niceform-select-options",
				hoverClass: "niceform-select-options-hover",
				selectContainer: "jScrollPaneContainer"
			},
			selectOptions: {
				showArrows:true,
				scrollbarWidth: 21,
				scrollbarMargin: 1
			},
			jumpOnSelect: false
			
		}
		
		$.extend(defaults, o);
		
		oForm = $(this);
		
		if (defaults.input == true)
			oForm.niceFormsInput(defaults.inputClass);
		
		if (defaults.inputRadio == true)
			oForm.niceFormsInputRadio(defaults.inputRadioClass, defaults.inputRadioParent);
		
		if (defaults.inputCheckbox == true)
			oForm.niceFormsInputCheckbox(defaults.inputCheckboxClass, defaults.inputCheckboxParent);
		
		if (defaults.select == true)
			oForm.niceFormsSelect(defaults.selectClass, defaults.selectOptions, defaults.jumpOnSelect);
		
		if (defaults.textarea == true)
			oForm.niceFormTextarea(defaults.textareaOptions);
	}
	
	/*
	 *	input[@type="checkbox"]
	 *	<label><input type="checkbox" name="" value="" /></label> 
	 */
	$.fn.niceFormsInputCheckbox = function(classes, parentEl)
	{
		var oForm = $(this), inputClasses = classes;
		
		$(":checkbox", oForm).each(function(){
			$(this).parent(parentEl)
				.addClass(inputClasses.label)
				.addClass(inputClasses.off);
		});

		$(":checkbox[@checked]", oForm).parent().addClass(inputClasses.on);

		$("." + inputClasses.off).mousedown(function(e){
			
			var clickObserve = e.which || e.button;
			
			if (clickObserve == 1)
			{
				var inputName = $("input", $(this)).attr("name");
	
				if ($(this).is("." + inputClasses.on) == true)
				{
					$(this).removeClass(inputClasses.on);
					if ($.browser.msie)
						$("input", $(this)).attr("checked", "");
				}
				else
				{
					$(this).addClass(inputClasses.on);
					if ($.browser.msie)
						$("input", $(this)).attr("checked", "checked");
				}
			}
		});
	}
	
	/*
	 *	input[@type="radio"]
	 *	<label><input type="radio" name="" value="" /></label> 
	 */
	$.fn.niceFormsInputRadio = function(classes, parentEl)
	{
		var oForm = $(this), inputClasses = classes;
		
		$(":radio", oForm).each(function(){
			$(this).parent().addClass(inputClasses.label).addClass(inputClasses.off);
		});

		$("." + inputClasses.off).mousedown(function(e){
			
			var clickObserve = e.which || e.button;
			
			if (clickObserve == 1)
			{
				var inputName = $("input", $(this)).attr("name");
				
				if ($("input[@name="+inputName+"]").size() > 0)
					$("input[@name="+inputName+"]").parent(parentEl).removeClass(inputClasses.on);
				
				$(this).addClass(inputClasses.on);
				$("input", $(this)).attr("checked", "checked");
			}
		});
		
		$(":radio[@checked]", oForm).parent().addClass(inputClasses.on);
	}
	
	/*
	 *	input[@type="text"] input[@type="password"]
	 */
	$.fn.niceFormsInput = function(classes)
	{
		var oForm = $(this), inputClasses = classes;
		
		$("input[@type=text], input[@type=password]", oForm).each(function(){
			$(this).addClass(inputClasses.className);
		});
	}
	
	/*
	 *	textarea
	 */
	$.fn.niceFormTextarea = function(options)
	{
		var oForm = $(this), textareaOptions = options;
		
		$("textarea", oForm).each(function(){
			$(this).addClass(textareaOptions.className).css({
				width: ""
			});
		});
		
		$("textarea", oForm).bind("keyup", function(){
			
			var oTextarea, textareaContent, textareaCols, textareaRows, textareaLines;
			oTextarea = $(this);
			textareaContent = oTextarea.val();
			textareaCols = oTextarea.attr("cols");
			textareaRows = oTextarea.attr("rows");
			textareaLines = 1;

			textareaContent = textareaContent.split("\n");
			
			for (var i = 0; i < textareaContent.length; i++)
			{
				var line = textareaContent[i];
				textareaLines = textareaLines + Math.floor((line.length) / textareaCols) + 1;
			}
			
			oTextarea.attr("rows", (textareaLines + textareaOptions.extraRowsAdd));
		});
	}
	
	
	/*
	 *	select
	 */
	$.fn.niceFormsSelect = function(classes, options, jump)
	{
		var oForm = $(this), selectClasses = classes, selectOptions = options;
		
		$("select", oForm).each(function(){
			
			var el = $(this), defaultText, options = "", newSelect, newSelectOptions;
			
			if ($(":selected", el).size() > 0 && $(":selected", el).text() != undefined)
				defaultText = $(":selected", el).text();
			
			$("option", el).each(function(){
				var optionText = $(this).text(), optionValue = $(this).val();
				options += "<li rel=\""+ optionValue +"\">"+ optionText +"</li>";
			});
			
			newSelect = "<div class='"+selectClasses.mainClass+"'><div class='"+selectClasses.childClass+"'>"+defaultText+"</div><ul class='niceform-select-options scroll-pane'>"+options+"</ul></div>";
			$(newSelect).insertBefore(el);
			el.hide();
			
			newSelectOptions = $(this).siblings("." + selectClasses.mainClass);
			
			
			$(".niceform-select-options").jScrollPane({
				showArrows: selectOptions.showArrows,
				scrollbarWidth: selectOptions.scrollbarWidth,
				scrollbarMargin: selectOptions.scrollbarMargin
			});
			
			if ($("option", el).size() > 7)
				$(".jScrollPaneContainer", newSelectOptions).css({height:"125px", borderRight:"1px solid #ccc"});
			
		});
		
		$(".niceform-select-options").jScrollPane({
			showArrows: selectOptions.showArrows,
			scrollbarWidth: selectOptions.scrollbarWidth,
			scrollbarMargin: selectOptions.scrollbarMargin
		});
		
		
		
		
		$("." + selectClasses.selectContainer).hide();
		
		$("." + selectClasses.childClass).bind("click", function(){
			
			var selectEl = $(this), selectOptions, openedEl;
			
			selectOptions = selectEl.siblings("." + selectClasses.selectContainer);
			openedEl = selectOptions.is(":visible") ? true : false;
			
			$("." + selectClasses.selectContainer).hide();
			
			if (openedEl == false)
				selectOptions.show();
			
			return false;
		});
		
		$("." + selectClasses.optionsClass + " li").hover(function(){
			$(this).addClass(selectClasses.hoverClass);
		}, function(){
			$(this).removeClass(selectClasses.hoverClass);
		});
		
		$("." + selectClasses.optionsClass + " li").bind("click", function(){
			
			var optionTxt, optionVal, selectGlobal, selectEl;
			optionTxt = $(this).text();
			optionVal = $(this).attr("rel");
			selectGlobal = $(this).parents("." + selectClasses.mainClass)
			selectEl = selectGlobal.siblings("select");

			$("." + selectClasses.childClass, selectGlobal).html(optionTxt);
			
			$("option", selectEl).each(function(){
				$(this).attr("selected", "");
			});
			
			$("option[@value="+optionVal+"]", selectEl).attr("selected", "selected");
			$(".jScrollPaneContainer", selectGlobal).hide();
			
			if (selectEl.attr("rel") == "jump")
				return document.location = optionVal;
			
			return false;
		});
	}
})(jQuery);