/*===========================================================================
	Behavior (Global)
	
	This JavaScript executes dynamic behaviors such as:
	* Preloading images
	* Flash Replacements (i.e. sIFR, UFO, SWFObject, etc.)
	* Decorate the DOM with presentational elements
	* Collapsing/expanding sections
	* Form validation
	* Popup windows
===========================================================================*/

$(document).ready(function() {

	$("#edit-form #item-number").autocomplete("/admin/get/item-numbers");

	/* CATEGORIES */
	/* Sortable category list
	===========================================================================*/
	$(".sortable").sortable({
		axis: 'y',
		items: 'li:not(.add)',
		update: function(event, ui) {
			var post_url;
			$(".sortable li:even").removeClass("odd even").addClass("odd");
			$(".sortable li:odd").removeClass("odd even").addClass("even");
			var new_order = $(this).sortable("serialize");
			switch ($(this).attr("id")) {
				case "sub-categories":
					post_url = "/admin/update/category/order";
					break;
				
				case "products":
					post_url = "/admin/update/product/order";
					break;
					
				case "assets":
					post_url = "/admin/update/asset/order";
					break;
			}
			
			if ($(this).attr("id").match(/homepage-items-\d/)) {
				post_url = "/admin/update/homepage-items/order";
			}
			
			$.ajax({
				url: post_url,
				data: new_order,
				type: "POST"
			});
		}
	});

	/* New Category form response
	===========================================================================*/
	$("#new-category").ajaxForm({success: function(responseText, statusText, xhr, $form) {
		$form.parents("li").toggleClass("odd even");
		
		var weight = parseInt($form.children("input[name=weight]").val(), 10)+1;
		$form.children("input[name=weight]").attr("value", weight);
		
		var oddeven = $form.children("input[name=oddeven]").val() == "odd" ? "even" : "odd";
		$form.children("input[name=oddeven]").attr("value", oddeven);
		
		$(responseText).insertBefore("#sub-categories li:last-child");
	}});
	
	$("#sub-categories .delete").live("click", function(e) {
		e.preventDefault();
		$this = $(this);

		$.get($this.attr("href"), function(h) {
			$this.parents("li").remove();
			$("#sub-categories li").toggleClass("odd even");
			$("#sub-categories li:last-child").toggleClass("odd even");
		});
	});
	
	/* Add Category Button
	===========================================================================*/
	
	$(".add a").toggle(function(e) {
		e.preventDefault();
		$("#new-category").show();
	}, function(e) {
		e.preventDefault();
		$("#new-category").hide();
	});

	/* Edit category languages
	===========================================================================*/
	
	$("#update-languages").live("click", function(e) {
		e.preventDefault();
		// console.log();
		$("#languages").css("left", $(this).position().left).show();
	});

	/* PRODUCTS */
	/* Upload and delete Assembly Instructions
	===========================================================================*/
	$(".upload-assembly-instructions").each(function() {
		$(this).click(function(e) {
			e.preventDefault();
		});
		upload_id = $(this).attr("id");
		language_id = upload_id.split("-");
		new AjaxUpload(upload_id, {
			action: '/admin/upload/assembly-instructions',
			name: 'assembly-instructions',
			data: {
				language_id : language_id[language_id.length-1]
			},
			onComplete : function(file, response){
				$(this._button).parent().siblings(".upload-response").addClass("has-assembly-instructions").html(response);
				$("#language-editing").trigger("checkLanguage");
			}
		});
	});
	
	$("a.remove-assembly-instructions").live("click", function(e) {
		e.preventDefault();
		var lid = $(this).parents("fieldset").children("input[name=language_id]").val();
		var container = $(this).parents("div.upload-response");
		var asset_id = $(this).attr("href").split("#")[1];

		$.get("/admin/delete/assembly-instructions", {asset_id: asset_id}, function(h) {
			// container.html(h);
			container.html("").removeClass("has-assembly-instructions");
			$("#language-editing").trigger("checkLanguage");
		});
	});
	
	/* Change language form
	===========================================================================*/
	$("#language-navigation a").live("click", function(e) {
		e.preventDefault();
		$(".language").hide();
		var target = $(this).attr("href");
		$(target).show();
		$(this).parents("#language-editing").trigger("checkLanguage");
	});
	
	/* Language form event listeners
	===========================================================================*/
	$("#language-editing").bind('checkLanguage', function(e) {
		var language_filled = false;
		$(".language").each(function(i, e) {
			var current_language = "#"+$(this).attr("id");
			var amount_done = 0;
			$(this).find("input[type=text]").each(function(i, e) {
				if ($(this).val() != "") {
					amount_done++;
				}
			});
			
			if ($(this).find("textarea").val() != "") {
				amount_done++;
			}

			if ($(this).find(".has-assembly-instructions").length == 1) {
				amount_done++;
			}

			if (amount_done >= 4) {
				$("a[href="+current_language+"]").parent().addClass("finished");
			}
		});
	});
	
	$(".language input[type=text]").focusout(function() {
		$("#language-editing").trigger("checkLanguage");
	});
	$(".language textarea").focusout(function() {
		$("#language-editing").trigger("checkLanguage");
	});
	
	$("#language-editing").trigger("checkLanguage");

	/* Category changer
	===========================================================================*/	
	$(".top-level-category").change(function(){
		if ($(this).val() == "") {
			$(this).siblings(".second-level-category").attr("disabled", "true").html('<option value="">- Select a Sub Category -</option>');
			$(this).siblings(".third-level-category").attr("disabled", "true").html('<option value="">- Select a Group -</option>');
		} else {
			var tlc = $(this);
			$.getJSON("/admin/get/sub-categories",{id: $(this).val(), ajax: 'true'}, function(j){
				var options = '<option value="">- Select a Sub Category -</option>';
				for (var i = 0; i < j.length; i++) {
					options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
				}

				tlc.siblings(".second-level-category").removeAttr("disabled").html(options);
				tlc.siblings(".third-level-category").attr("disabled", "true").html('<option value="">- Select a Group -</option>');
			});
		}
	});

	$(".second-level-category").change(function(){
		if ($(this).val() == "") {
			$(this).siblings(".third-level-category").attr("disabled", "true").html('<option value="">- Select a Group -</option>');
		} else {
			var slc = $(this);
			$.getJSON("/admin/get/sub-categories",{id: $(this).val(), ajax: 'true'}, function(j){
				if (j.length > 0) {
					var options = '<option value="">- Select a Group -</option>';
					for (var i = 0; i < j.length; i++) {
						options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
					}
					slc.siblings(".third-level-category").removeAttr("disabled").html(options);
				} else {
					slc.siblings(".third-level-category").attr("disabled", "true").html('<option value="">- Select a Group -</option>');
				}
			});
		}
	});

	$(".add-category").live("click", function(e) {
		e.preventDefault();
		var $this = $(this);

		var category_id = $this.siblings(".third-level-category").val();
		if (category_id == "") {
			category_id = $this.siblings(".second-level-category").val();
		}
		var region_id = $this.siblings("input[name=region_id]").val();
		var item_number = ($("#item-number").length >= 1) ? $("#item-number").val() : null;
		var categories_count = $this.siblings(".category-list").find(".category");

		$.get("/admin/add/category-product-link", {category_id: category_id, region_id: region_id, product_id: item_number, category_count: categories_count.length }, function(h) {
			$this.siblings(".category-list").append(h);
			$this.parents("#category-regions").trigger("checkCategories");
		});
	});
	
	$(".remove-category").live("click", function(e) {
		e.preventDefault();
		$(this).parents(".category").remove();
		$(this).parents("#category-regions").trigger("checkCategories");
	});
	
	/* Category form event listeners
	===========================================================================*/
	$("#category-regions").bind('checkCategories', function(e) {
		$(".category-region").each(function(i, e) {
			var current_region = "#"+$(this).attr("id");
			var number_of_categories = $(this).find(".category-list").children(".category").length;

			if (number_of_categories > 0) {
				$("a[href="+current_region+"]").parent().addClass("finished");
			}
		});
	});

	$("#category-regions").trigger("checkCategories");
		
	/* Change region category form
	===========================================================================*/
	$("#region-navigation a").live("click", function(e) {
		e.preventDefault();
		$(".category-region").hide();
		$(".homepage-region").hide();
		var target = $(this).attr("href");
		$(target).show();
		$(this).parents("#category-regions").trigger("checkCategories");
	});
	
	/* Upload Assets
	===========================================================================*/
	if ($("#new-image").length >= 1) {
		$("#new-image").click(function(e) {
			e.preventDefault();
		});
		
		new AjaxUpload("#new-image", {
			action: '/admin/upload/asset/image',
			name: 'asset_image',
			onSubmit : function(file, extension) {
				this.setData({weight: $("#assets li").length});
			},
			onComplete : function(file, response){
				$("#assets").append(response);
			}
		});
	}
	
	if ($("#new-trade-show-image").length >= 1) {
		$("#new-trade-show-image").click(function(e) {
			e.preventDefault();
		});
		
		new AjaxUpload("#new-trade-show-image", {
			action: '/admin/upload/asset/trade-show-image',
			name: 'trade_show_image',
			onComplete : function(file, response){
				$("#show-logo").html(response);
			}
		});
	}
	
	if ($("#new-video").length >= 1) {
		$("#new-video").click(function(e) {
			e.preventDefault();
		});

		new AjaxUpload("#new-video", {
			action: '/admin/upload/asset/video',
			name: 'asset_video',
			onSubmit : function(file, extension) {
				this.setData({weight: $("#assets li").length})
			},
			onComplete : function(file, response){
				$("#assets").append(response);
			}
		});
	}

	$("a.remove-asset").live("click", function(e) {
		e.preventDefault();
		var asset_id = $(this).siblings("input").val();
		var asset_weight = $(this).siblings("input").attr("name").match(/(.+)\[(\d+)\]/)[2];

		$(this).parents(".asset").siblings("li").each(function() {
			$(this).find("input[type=hidden]").each(function() {
				var input_name = $(this).attr("name");
				var name = input_name.match(/(.+)\[(\d+)\]/);
				if (name[2] > asset_weight) {
					$(this).attr("name", name[1]+"["+(name[2]-1)+"]");
				}
			});
		});
		$(this).parents(".asset").remove();

		var new_order = $("#assets.sortable").sortable("serialize");
		$.ajax({
			url: '/admin/update/asset/order',
			data: new_order,
			type: "POST"
		});

		var $this = $(this);
		$.get("/admin/delete/asset", {asset_id: asset_id });
	});
	
	/* Related Products
	===========================================================================*/
	$("#edit-product-form #related-product-number").autocomplete("/admin/get/item-numbers");

	$("a.remove-related-product").live("click", function(e) {
		e.preventDefault();
		$(this).parents("li").remove();
	});
	
	$("#add-related-product").live("click", function(e) {
		e.preventDefault();
		var product_number = $("#related-product-number").val();
		
		$.get("/admin/add/related-product-link", {item_number: product_number}, function(h) {
			$("ul#related-products").append(h);
		});
	});
	
	/* Homepage Items
	===========================================================================*/
  
	$(".route").editable({ 
		type: "autocomplete",
		submit: "save",
		submitBy: "dblclick",
		editClass: "route-input",
		autoComplete: { url: "/admin/get/routes", minChars: 1, selectOnly: 1, extraParams: { region_id: function() { return $(".homepage-region:visible").attr("id").split("-")[1]; } } },
		onSubmit: function(content) {
			var item_id = $(this).parents(".item").attr("id").split("_")[1];
			$.get("/admin/edit/homepage-items", {item_id: item_id, route: content.current});
		}
	});
	
	$(".delete-homepage-item").live("click", function(e) {
		e.preventDefault();
		var parent_li = $(this).parents("li");
		$.get($(this).attr("href"), null, function(h) {
			parent_li.remove();
		});
	});

	$(".upload-homepage-item").each(function() {
		var upload_id = $(this).attr("id");
		var upload_action = $(this).attr("href");
		var region_list = $(this).siblings(".homepage-region-items");
		new AjaxUpload(upload_id, {
			action: upload_action,
			name: 'homepage-item',
			data: {
				weight: region_list.length
			},
			onComplete : function(file, response){
				region_list.append(response);
				$(".route").editable({ 
					type: "autocomplete",
					submit: "save",
					submitBy: "dblclick",
					editClass: "route-input",
					autoComplete: { url: "/admin/get/routes", minChars: 1, selectOnly: 1, extraParams: { region_id: function() { return $(".homepage-region:visible").attr("id").split("-")[1]; } } },
					onSubmit: function(content) {
						var item_id = $(this).parents(".item").attr("id").split("_")[1];
						$.get("/admin/edit/homepage-items", {item_id: item_id, route: content.current});
					}
				});
				
				region_list.find("li:last-child span.route").trigger("click");
			}
		});
	});

	/* Delete Image Cache
	===========================================================================*/
	
	$("#delete-image-cache").click(function(e) {
		var answer = confirm('Delete image cache?');
		return answer // answer is a boolean
	});

});

