$(document).ready(function(){

	window.bindJobHandlers = function(){
		
		$("a.add, a.add-group").unbind();
				
		autocompleteExtra = {
			user_id: {
				focus: function(event, ui){
					$(event.target).val(ui.item.label);
					$("#" + $(event.target).attr("id").substring(0, $(event.target).attr("id").length - 8)).val(ui.item.id);
					return false;
				},
				select: function(event, ui){
					$(event.target).val(ui.item.label);
					$("#" + $(event.target).attr("id").substring(0, $(event.target).attr("id").length - 8)).val(ui.item.id);
					return false;
				}
			}
		};
		
		$(".autocomplete").each(function(){
		
			var nameParts = $(this).attr("name").split('][');
			var id = nameParts[nameParts.length - 1].split('_id]');
		
			if(id[0].substring((id[0].length -1), id[0].length) != "]"){ // If it's an id field
				
				if($(this).hasClass("form-error"))
					$(this).parent().addClass("error");
			
				$clone = $(this).clone();
				$(this).attr("name", $(this).attr("name") + "_display");
				$(this).attr("id", $(this).attr("id") + "_display");
				$(this).val($(this).attr("display_value"));
				$(this).after($clone);
				$(this).autocomplete(
					$.extend(
						{ 
							source: "/admin/" + id[0] + "s/autocomplete.json"
						},
						autocompleteExtra[id[0] + "_id"]
					)
				);
				$clone.hide();
			
			} else { // If it's not an id field
			
				var model = nameParts[0].split("data[");
				model = model[1].toLowerCase() + "s";
				var field = null;
			
				if(nameParts[1] != parseInt(nameParts[1])){
					field = nameParts[1].split("]");
				} else {
					field = nameParts[2].split("]");
				}
			
				field = field[0];

				if($(this).attr("name").match(/^.*grip_model.*$/)){
				
					var curInputName = $(this).attr("name");
				
					$(this).autocomplete(
						{
							source: function(request, response) {
								
								var currentOpts = new Array();
																
								$("input[name*=grip_model]").each(function(){
									if($(this).val().length > 0 && curInputName != $(this).attr("name")){
										currentOpts.push(encodeURIComponent($(this).val()));
									}
								});
								
								$.ajax({
									url: "/admin/" + model + "/autocomplete.json",
									dataType: "json",
									data: {
										maxRows: 12,
										field: field,
										currentOpts: currentOpts.toString(),
										term: request.term
									},
									success: function(data) {
										response($.map(data, function(item) {
											return {
												label: item.label,
												value: item.value
											}
										}))
									}
								})
							}
						}
					);
				
				} else {
					$(this).autocomplete(
						{
							source: "/admin/" + model + "/autocomplete.json?field=" + field
						}
					);			
				}
		
			}
		
		});
		
		$(".datepicker").datepicker({ dateFormat: 'dd/mm/yy' });
		
		$("fieldset a.add-group").click(function(){

			$groupClone = $(this).parent().find("fieldset:last").clone();

			$(this).before($groupClone);

			$rowClone = $groupClone.find("tbody tr:first").clone();
			$groupClone.find("tbody tr").remove();
			$groupClone.find("table").append($rowClone);

			minClub = minVal(/data\[Club\]\[\-?[0-9]*\]/);
			minGroup =  minVal(/data\[Group\]\[\-?[0-9]*\]/);

			$groupClone.find("input, select").each(function(){

				var name_parts = $(this).attr("name").split("][");

				if(name_parts[0] == "data[Club"){
					var min = minClub;
				} else {
					var min = minGroup;
				} 

				name_parts[1] = (min > 0)? (min * -1) : (min);

				$(this).attr("name", name_parts.join("]["));

				$(this).parent().removeClass("error");
				$(this).parent().find(".error-message").remove();

				if(name_parts[2] != "form_group_id]"){
					smartReset($(this));
				} else {
					$(this).val(minGroup);
				}

			});

			window.bindJobHandlers();

			return false;

		});

		$("fieldset fieldset a.add").click(function(){

			$row = $(this).parent().find("table tr:last");
			$rowClone = $row.clone();

			$rowClone.find("input, select").each(function(){

				if($(this).get(0).tagName == "SELECT"){
					$(this).val($row.find("select[name='" + $(this).attr("name") + "']").find(":selected").val());
				}

				var name_parts = $(this).attr("name").split("][");
				var min = minVal(/data\[Club\]\[\-?[0-9]*\]/);

				name_parts[1] = (min > 0)? (min * -1) : (min);

				$(this).attr("name", name_parts.join("]["));

				$(this).parent().removeClass("error");
				$(this).parent().find(".error-message").remove();

				if(name_parts[2] != "form_group_id"){
					smartReset($(this));
				} 

			});

			if($rowClone.find("input[name$='form_group_id]']").eq(0).val() == ""){

				var name_parts = $rowClone.find("input:first").attr("name").split("][");
				var min = minVal(/data\[Club\]\[\-?[0-9]*\]/);

				var group_id = $row.parent().parent().parent().find("input:first").attr("name").split("][")[1];

				$rowClone.find("input:last").after('<input name="data[Club][' + name_parts[1] + '][form_group_id]" value="' + group_id + '" type="hidden" />');
			}
			
			$rowClone.find(".dynamic-actions").html("");
			$rowClone.find(".dynamic-actions").append('<a href="#">x</a>');
			$rowClone.find('.dynamic-actions a').click(function(){
				$(this).parent().parent().remove();
				return false;
			});

			$rowClone.appendTo($(this).parent().find("table tbody"));

			window.bindJobHandlers();

			return false;

		});
		
		$("fieldset.step-2 ul > li > div.checkbox input[type=checkbox]").click(function(){
			if($(this).attr("checked")){
				$(this).parent().parent().find("ul > li input[type=checkbox]").attr("checked", true);
			} else {
				$(this).parent().parent().find("ul > li input[type=checkbox]").attr("checked", false);
			}
		});
		
	}
	
	if($(".group-chooser")){
		$("#group-new").hide();
	}

	$(".group-chooser input").click(function(){
		if($(".group-chooser input:checked").val() == "yes"){
			$("#group-new").show();
			$("#group-existing").hide();
		} else {
			$("#group-new").hide();
			$("#group-existing").show();
		}
	});
	
	$("fieldset fieldset[class!='group-chooser']").append('<a href="#" class="add">Add another club</a>');
	
	$("fieldset.step-3").append('<a href="#" class="add-group">Add another group</a>');

	window.bindJobHandlers();
	
	function minVal(regex){

		min = 99999999999;

		$("input, select").filter(function(){

			return this.name.match(regex);

		}).each(function(){
			var name_parts = $(this).attr("name").split("][");

			if(parseInt(name_parts[1]) < parseInt(min)){
				min = name_parts[1];
			}

		});

		return min - 1;

	}
	
	function smartReset(elem){
				
		if(elem.get(0).tagName == "INPUT" && elem.attr("name").indexOf("grip") == -1  && elem.attr("name").indexOf("old") == -1){
			elem.val("");
		} else if(elem.get(0).tagName == "SELECT" && elem.attr("name").indexOf("grip") == -1 ){
			elem.val(elem.find("option:first").attr("value"));
		} 
		
	}
	
});
