(function($){
	$.fn.formStep = function() {
		return this.each(function() {
			
			var step = 0;
			var h2_counter = 0;
			var fieldset_count = $("fieldset", this).size();
			
			$(this).addClass("formStep");
			
			if ( fieldset_count > 1 ) {

				$(".info h2", this).each(function() {
					h2_counter = h2_counter + 1;
					$(this).append(" (Step " + h2_counter + " of " + fieldset_count + ")");
				});
				
			}
			
			$("input[class*='required'], textarea[class*='required'],", this).each(function() {
				var this_field = $(this).closest("field");
				$("label", this_field).append("<span class='reqText'>(Required)</span>");
			});
			
			$("input, textarea", this).bind("focus", function() {
				var formObj = $(this).closest(".formStep");
				var this_field = $(this).closest("field");
				var label = $("label", this_field).html();
				$(this_field).addClass("active");
			});
			
			$("input, textarea", this).bind("blur", function() {
				var this_field = $(this).closest("field");
				$(this_field).removeClass("active");
			});
			
			var counter_html = " \
				<div class='progress'> \
					<div class='bg'></div> \
					<img src='/new_includes/formStep/left.png' class='left' /> \
					<img src='/new_includes/formStep/right.png' class='right' /> \
				</div> \
			";
			
			var buttons_html = " \
			<div class='wfButtons'> \
				<button class='previous' style='display: none;'> \
					<img src='/new_media/fugue/arrow_180.png' alt='' /> Previous \
				</button> \
				<button class='submit' style='display: none;'> \
					<img src='/new_media/fugue/tick_circle.png' alt='' /> Submit \
				</button> \
				<button class='next'> \
					<img src='/new_media/fugue/arrow.png' alt='' /> Next \
				</button> \
				<div class='clear'></div> \
			</div> \
			";
			
			// $("fieldset", this).prepend(counter_html);
			$(".navButtons", this).append(buttons_html);
			
			if ( fieldset_count == 1 ) {
				$(".wfButtons .previous").hide();
				$(".wfButtons .next").hide();
				$(".wfButtons .submit").show();
			}
			
			$(".wfButtons .previous").bind("click", function() {
				if ( step > 0 ) {

					var formObj = $(this).closest(".formStep");
					var fieldsetObj = $("fieldset.active");

					is_valid = 1;
					
					if ( is_valid == true ) {
						
						step--;
					
						$(".circle").removeClass("activeStep");			
						var z = step + 1;
						$(".circle.c" + z).addClass("activeStep");

						$("fieldset", formObj).removeClass("active");
						$(formObj).find("fieldset").eq(step).addClass("active");
						$(formObj).find(".next").show();
						$(formObj).find(".submit").hide();
					
						if ( step == 0 ) {
							$(formObj).find(".previous").hide();
						}
						
						$.validationEngine.closePrompt(".formError", true);
						
					}
					
					$.fn.colorbox.resize()
					
				}
				return false;
			});
			
			$(".wfButtons .next").bind("click", function() {
				
				if ( step < ( fieldset_count - 1 ) ) {
					
					var formObj = $(this).closest(".formStep");
					var fieldsetObj = $("fieldset.active");

					var is_valid = 0;					
					var error_counter = 0;
					
					$("input[class*='validate'], textarea[class*='validate'], select[class*='validate']", fieldsetObj).each(function() {

						var tmp_id = $(this).attr("id");
						
						if ( tmp_id != '' ) {
							var error_tmp = $.validationEngine.loadValidation("#" + tmp_id);
						}
						
						if ( error_tmp == true ) {
							error_counter++;
						}

					});
					
					if ( error_counter == 0 ) {
						is_valid = 1;
					}
					
					if ( is_valid == 1 ) {
						
						step++;
					
						$(".circle").removeClass("activeStep");			
						var z = step + 1;
						$(".circle.c" + z).addClass("activeStep");

						$(formObj).find(".previous").show();
						$("fieldset", formObj).removeClass("active");
						$(formObj).find("fieldset").eq(step).addClass("active");
						$(formObj).find(".previous").show();
					
						if ( step == ( fieldset_count - 1 ) ) {
							$(formObj).find(".next").hide();
							$(formObj).find(".submit").show();
						}
						
						$.validationEngine.closePrompt(".formError", true);
						
					}
					
					$.fn.colorbox.resize()
					
				}
				return false;
			});
			
			$(".wfButtons .submit").bind("click", function() {

				var formObj = $(this).closest(".formStep");
				var fieldsetObj = $("fieldset.active");
				var formID = $(formObj).attr("id");
				var form_data = $(formObj).serialize();
				var formFunction = formID + "_submit('" + form_data + "');";
				
				var is_valid = 0;					
				var error_counter = 0;
				
				$("input[class*='validate'], textarea[class*='validate'], select[class*='validate']", fieldsetObj).each(function() {

					var tmp_id = $(this).attr("id");
					
					if ( tmp_id != '' ) {
						var error_tmp = $.validationEngine.loadValidation("#" + tmp_id);	
					}
					
					if ( error_tmp == true ) {
						error_counter++;
					}

				});
				
				if ( error_counter == 0 ) {
					is_valid = 1;
				}
				
				if ( is_valid == 1 ) {

					$.validationEngine.closePrompt(".formError", true);
					
					var action = $(formObj).attr("action");
					
					if ( action != '' && action != undefined ) {
						$(formObj).submit();
					} else {
						eval(formFunction);
					}
					
				}
				
				$.fn.colorbox.resize()
				
				return false;

			});

			$("fieldset", this).removeClass("active");
			
			$("fieldset:first", this).addClass("active");
			
			var tmp_counter = fieldset_count;
			
			while ( tmp_counter > 0 ) {
				
				$(".progress", this).prepend(" \
					<div class='circle c" + tmp_counter + "'> \
					<b>" + tmp_counter + "</b> \
					</div> \
				");
				
				tmp_counter--;

			}
			
			$(".progress .circle", this).bind("click", function() {

				var current_step = step;
				var b_num = $("b", this).html();
				b_num = b_num * 1;
				step = b_num - 1;
				var formObj = $(this).closest(".formStep");
				var fieldsetObj = $("fieldset.active");
				
				if ( step < current_step ) {
					
					// Going back, do not validate
					is_valid = 1;
					
				} else {
					
					var is_valid = 0;					
					var error_counter = 0;
				
					$("input[class*='validate'], textarea[class*='validate'], select[class*='validate']", fieldsetObj).each(function() {

						var tmp_id = $(this).attr("id");
					
						if ( tmp_id != '' ) {
							var error_tmp = $.validationEngine.loadValidation("#" + tmp_id);	
						}
					
						if ( error_tmp == true ) {
							error_counter++;
						}

					});
				
					if ( error_counter == 0 ) {
						is_valid = 1;
					}
					
				}
				
				if ( is_valid == 1 ) {
					
					$(formObj).find("fieldset", this).removeClass("active");
					$(formObj).find("fieldset", this).eq(step).addClass("active");

					$.validationEngine.closePrompt(".formError", true);

					$(".circle").removeClass("activeStep");			
					$(".circle.c" + b_num).addClass("activeStep");
				
					if ( b_num == "1" ) {
					
						$(formObj).find(".previous").hide();
						$(formObj).find(".next").show();
						$(formObj).find(".submit").hide();
					
					} else if ( b_num == fieldset_count ) {
					
						$(formObj).find(".previous").show();
						$(formObj).find(".next").hide();
						$(formObj).find(".submit").show();
					
					} else {
					
						$(formObj).find(".previous").show();
						$(formObj).find(".next").show();
						$(formObj).find(".submit").hide();
					
					}
					
					$.fn.colorbox.resize()
					
				}

			});
					
			$(".circle").removeClass("activeStep");			
			var z = step + 1;
			$(".circle.c" + z).addClass("activeStep");

		});
	};
})(jQuery);