
//***********************************************************************//
//      AUTHOR: Johnny Green / NOISEFLOORDESIGN
//    FILENAME: jquery.productpage.js
//        DATE: 03/09/2010
// DESCRIPTION: jQuery functionality for the product page.
//***********************************************************************//

$(document).ready(function() {
	var shape = "", 
	share_shape = "", 
	shape_position = [], 
	share_shape_position = [];
	
	function reset(speed) {
		$("#default .accordian").each(function() {
			$(this).css({"height": $("#default").height() - (parseInt($("#default").css("line-height")))*(($("#default .accordian").length + 2) - $(this).index()), "z-index": parseInt($(this).index())}).animate({top: $("#default").height() - (parseInt($("#default").css("line-height")))*(($("#default .accordian").length + 2) - $(this).index())}, speed, "swing");
			
			$(this).children(".accordian_x, .accordian_content").each(function() {
				$(this).fadeOut(speed);
			});
		});
	
		$("#window_holder .windows").each(function() {
			$(this).css({"top": $("#default").height()});
		});
		
		$("#window_holder .heading").each(function() {
			$(this).css({"color":""});
		});
		
		$("#product_info .heading").css({"color":"black"});
	}

	if($("#product_info_text a").length > 0) {
		var test = $("#product_info_text a").attr("id");
		
		if(test) {
			test = test.replace("_lining", "");
			test = test.charAt(0).toUpperCase() + test.slice(1);
			$("#product_info_text a").prepend(test + " ");
		}
	}
	
	reset(0);

	$("#review_container .review_text").each(function() {
		if($(this).height() > $(this).parent().height()) {
			$(this).parent().parent().append("<div class='review_more'><a href='javascript:void(0)'>... [MORE]</a></div>");
		}
	});
	
	$("#buttons .otherbuttons.accessorize").click(function() { $("#accessories_container").html(MZW.accessories); });
	
	//BUTTON FUNCTIONALITY//////////////
	$("#buttons .otherbuttons").click(function(e) {
		reset(1500);
		$("#default").fadeTo("fast", 0.25);
		$("#default .accordian_x").each(function() { $(this).fadeOut("slow"); });
		$("#window_holder .windows").each(function() { $(this).stop().css({"z-index": "-1"}).fadeTo(1, 0.0); });
		$("#window_holder").animate({'top': -$("#window_holder .windows").eq(0).height() + "px"}, 1500, "swing");
		$("#window_holder .windows").eq($(this).index()).css({"z-index": "0"}).fadeTo(1500, 1.0);
		$("#buttons .otherbuttons").each(function() { $(this).css({"background-color": "", "color": "", "font-weight": ""}); });
		$(this).css({"background-color": "#e1e1e1", "color": "white", "font-weight": "bold"});
	});
	///////////////////////////////////
	
	//ACCORDIAN FUNCTIONALITY//////////
	$("#product_info .heading").click(function() { reset(1500); });
	
	$("#default .accordian .heading").click(function(e) {
		var index = $(this).parent().parent().index();
		
		$("#default .accordian").each(function() {
			$(this).children(".accordian_x, .accordian_content").each(function() {				
				$(this).fadeOut();
			});
			
			if($(this).index() < index)
				$(this).animate({top: (parseInt($("#default").css("line-height")))*($(this).index())}, 1500, "swing");
			else if($(this).index() > index)
				$(this).animate({top: $("#default").height() - (parseInt($("#default").css("line-height")))*(($("#default .accordian").length + 2) - $(this).index())}, 1500, "swing");
		});
		
		$(this).parent().parent().animate({top: (parseInt($("#default").css("line-height")))*($(this).parent().parent().index())}, 1500, "swing", function() {
			$(this).children(".accordian_x, .accordian_content").each(function() {
				$(this).fadeIn("slow");
				
				
				if($(this).css("display") == "none")
					$(this).show();
			});
		});

		$("#default .heading").each(function() {
			$(this).css({"color":""});
		});
		
		$(this).css({"color": "black"});
	});
	
	$("#window_holder .x").click(function(e) {
		e.preventDefault();
		
		$("#window_holder").animate({top: 0 + "px"}, 1500, "swing");
		
		$("#window_holder .windows").each(function() {
			$(this).fadeTo(1500, 0.0);
		});
		
		$("#buttons .otherbuttons").each(function() {
			$(this).css({"background-color": "", "color": "", "font-weight": ""});
		});
		
		$("#default").delay(1500).fadeTo("fast", 1.0);
	});	
	
	$("#default .accordian_x").click(function() {
		reset(1500);
		$(this).parent().children(".accordian_x, .accordian_content").fadeOut("slow");
	});
	///////////////////////////////////
	
	//BASKET FUNCTIONALITY/////////////
	$("#accessory_options").on("click", ".accessory_info", function() {
		$("#accessory_options").hide(0);
	});
	
	$("#accessory_options").on("click", ".accessory_add", function() {
		$("#accessory_options").hide(0);
		
		MZW.cart.basket.add($(this).attr("id"), 1);
	});
	
	$("body").click(function(e) {
		if(!$(e.target).is("#accessories_container *"))
			$("#accessory_options").fadeOut("slow");
	});
	
	$("#open_form").click(function() {
		$("#review_form").resetForm();
		$("#review_form input, #review_form textarea").each(function() {
			$(this).css({"color": ""});
			$(this).css({"border-color": ""});
		});
		
		$("#review_thanks").hide();
		$("#review_content").show();
		$("#overlay, #review_box").fadeIn("slow");
	});
	
	$("#send_to_friend, .send_to_friend").click(function() {
		$("#share_form").resetForm();
		$("#share_form input, #share_form textarea").each(function() {
			$(this).css({"color": ""});
			$(this).css({"border-color": ""});
		});
		
		$("#share_thanks").hide();
		
		if($("#share_triangle, #share_circle, #share_star").length > 0) {
			$("#share_triangle, #share_circle, #share_star").remove();
			share_shape_position.pop();
			share_shape_position.pop();
		}
	
		var randomnumber = Math.floor(Math.random()*3);
		var shape_array = new Array("circle", "triangle", "star");
		
		share_shape = shape_array[randomnumber];
	
		var loops = shape_array.length;
		var randomorder = "";
		var offset = 10;
		
		for(var i = 0; i < loops; i++) {
			randomnumber = Math.floor(Math.random()*shape_array.length);
			randomorder += "<div id='share_" + shape_array[randomnumber] + "' class='" + shape_array[randomnumber].toUpperCase() + "' style='left: " + offset + "px'>&nbsp;</div>";
			shape_array.splice(randomnumber, 1);
			offset += 40;
		}
		
		$("#share_container").append(randomorder);
		$("#share_shape").text(share_shape);
		
		$("#share_" + share_shape).addClass("share_drag");
		share_shape_position.push($("#share_" + share_shape).css("left"));
		share_shape_position.push($("#share_" + share_shape).css("top"));
		
		$("#share_container").fadeIn("slow");
	});
	
	$("#overlay, #review_x").click(function() {
		$("#overlay, #review_box, #review_confirmation").fadeOut("slow");
	});
	
	$("#default .pocketing").hover(function() {
		$("#right_column .pocketing_text").eq($(this).index()).stop().fadeTo("fast", 1.0);
	}, function() {
		$("#right_column .pocketing_text").eq($(this).index()).stop().fadeTo("fast", 0.0);
	});
	
	$("#default .pocketing").mousemove(function(e) {
		$("#right_column .pocketing_text").each(function() {
			$(this).css({"left": e.pageX - $(this).parent().offset().left - 10 + "px", "top": e.pageY - $(this).parent().offset().top + 20 + "px"});
		});
	});
	
	$("#review_container .review_more").live("click", function() {
		$(this).children("a").text("[LESS]");
		$(this).addClass("review_less").removeClass("review_more");
		
		$(this).parent().children(".review_text_container").css({"height": $(this).parent().children(".review_text_container").children(".review_text").height()});
	});
	
	$("#review_container .review_less").live("click", function() {
		$(this).children("a").text("... [MORE]");
		$(this).addClass("review_more").removeClass("review_less");
		
		$(this).parent().children(".review_text_container").css({"height": "54px"});
	});
	
	$.validator.addMethod(
		"detectDefaultText", 
			function(value, element) { 
			var default_text = new Array("FIRST NAME", "LAST NAME", "EMAIL ADDRESS*", "LOCATION", "YOUR REVIEW", "RECIPIENT'S EMAIL", "YOUR EMAIL", "YOUR NAME", "MESSAGE");
		
			for(var text in default_text) {
				if(value == default_text[text]) {
					return false;
				}
			}
			
			return true;
		}, 
		"" 
	);
	
	$.validator.addMethod(
        "regex",
        function(value, element, regexp) {
        	var re = new RegExp(regexp);
        	return this.optional(element) || re.test(value);
        },
        ""
	);
	
	$("#review_form").validate({
		rules: {
			review_first_name: 		{required: true, regex: "^[a-zA-Z]+$", detectDefaultText: true},
			review_last_name: 		{required: false, regex: "^[a-zA-Z ]+$"},
	    	review_email_address: 	{required: true, email: true, detectDefaultText: true},
	    	review_location: 		{required: false, regex: "^[a-zA-Z0-9.,\\s]+$"},
	    	review_text: 			{required: true, regex: "^[-a-zA-Z0-9.,:;!?()'\\s]+$", detectDefaultText: true}
	   	},
	   	messages: {
	   		review_first_name: 		"",
	   		review_last_name: 		"",
	    	review_email_address: 	"",
			review_location: 		"",
			review_text: 			""
		},
		highlight: function(element) {
			$(element).css("border-color","red");
		},
		unhighlight: function(element) {
			$(element).css("border-color","black");
		}
	});
	
	$("#share_form").validate({
		rules: {
	    	share_name: 			{required: true, regex: "^[a-zA-Z\\s]+$", detectDefaultText: true},
	    	share_recipient_email: 	{required: true, email: true, detectDefaultText: true},
	    	share_email: 			{required: true, email: true, detectDefaultText: true},
	    	share_text: 			{required: true, regex: "^[-a-zA-Z0-9.,:;!?()'\\s]+$", detectDefaultText: true}
	   	},
	   	messages: {
	   		share_name: 			"",
	   		share_recipient_email: 	"",
	    	share_email:		 	"",
			share_text: 			""
		},
		highlight: function(element) {
			$(element).css("border-color","red");
		},
		unhighlight: function(element) {
			$(element).css("border-color","black");
		}
	});
	
	$("#review_form input, #review_form textarea").focus(function() {
		var default_array = new Array("FIRST NAME", "LAST NAME", "EMAIL ADDRESS*", "LOCATION", "YOUR REVIEW");
		
		for(var default_value in default_array) {
			if($(this).val() == default_array[default_value]) {
				$(this).val("");
				$(this).css("color","black");
			}
		}
	}).blur(function() {
		$(this).val($.trim($(this).val()));
		$(this).valid();
		
		if($(this).val() == "") {
			switch($(this).attr("id")) {
				case "review_first_name": $(this).val("FIRST NAME"); break;
				case "review_last_name": $(this).val("LAST NAME"); break;
				case "review_email_address": $(this).val("EMAIL ADDRESS*"); break;
				case "review_location": $(this).val("LOCATION"); break;
				case "review_text": $(this).val("YOUR REVIEW"); break;
			}
			
			$(this).css("color","");
		}
	});
	
	$("#review_submit_button").live("click", function() {
		var stop = false;
				
		$("#review_form input, #review_form textarea").each(function() {
			$(this).val($.trim($(this).val()));
			
			if(!$(this).valid()) {
				stop = true;
				$(this).fadeOut().fadeIn();
			}
		});
		
		if(!stop) {
			$("#review_content").fadeOut("slow", function() {
				if($("#review_location").val() == "LOCATION")
					$("#review_location").val("");
					
				if($("#review_last_name").val() == "LAST NAME")
					$("#review_last_name").val("");
				
				$("#review_form").ajaxSubmit({success: function() { 
					$("#review_thanks").fadeIn("slow");
				}});
			});
		}
	});
	
	$("#share_container").live("mousedown", function(e) {
		if($(e.target).is(".share_drag")) {
			e.preventDefault();
			
			if($.browser.webkit || $.browser.msie) {
				$(".share_drag").css({"cursor": "pointer"});
			} else if($.browser.mozilla) {
				$(".share_drag").css({"cursor": "-moz-grabbing"});
			}
			
			var iCX = e.pageX;
			var iCY = e.pageY;
			var iEL = $(".share_drag").offset().left;
			var iET = $(".share_drag").offset().top;
			var iPL = $(".share_drag").parent().parent().offset().left;
			var iPT = $(".share_drag").parent().parent().offset().top;
		
			$("#share_container").bind('mousemove', function(e) {
				e.preventDefault();
				$(".share_drag").css({"left": (iEL - iPL + e.pageX - iCX) + "px", "top": (iET - iPT + e.pageY - iCY) + "px"});
			});
		}
	}).live("mouseup", function(e) {
		$("#share_container").unbind('mousemove');
		
		if($(e.target).is(".share_drag")) {
			$(".share_drag").css({"cursor":""});
			
			if(
				(($(".share_drag").offset().left >= $("#share_drag_box").offset().left && $(".share_drag").offset().left <= $("#share_drag_box").offset().left + $("#share_drag_box").width()) && ($(".share_drag").offset().top >= $("#share_drag_box").offset().top && $(".share_drag").offset().top <= $("#share_drag_box").offset().top + $("#share_drag_box").height()))
				||
				(($(".share_drag").offset().left >= $("#share_drag_box").offset().left && $(".share_drag").offset().left <= $("#share_drag_box").offset().left + $("#share_drag_box").width()) && ($(".share_drag").offset().top + $(".share_drag").height() >= $("#share_drag_box").offset().top && $(".share_drag").offset().top + $(".share_drag").height() <= $("#share_drag_box").offset().top + $("#share_drag_box").height()))						
				||
				(($(".share_drag").offset().left + $(".share_drag").width() >= $("#share_drag_box").offset().left && $(".share_drag").offset().left + $(".share_drag").height() <= $("#share_drag_box").offset().left + $("#share_drag_box").width()) && ($(".share_drag").offset().top >= $("#share_drag_box").offset().top && $(".share_drag").offset().top <= $("#share_drag_box").offset().top + $("#share_drag_box").height()))
				||
				(($(".share_drag").offset().left + $(".share_drag").width() >= $("#share_drag_box").offset().left && $(".share_drag").offset().left + $(".share_drag").width() <= $("#share_drag_box").offset().left + $("#share_drag_box").width()) && ($(".share_drag").offset().top + $(".share_drag").height() >= $("#share_drag_box").offset().top && $(".share_drag").offset().top + $(".share_drag").height() <= $("#share_drag_box").offset().top + $("#share_drag_box").height()))
			) {
				var stop = false;
				
				$("#share_form input, #share_form textarea").each(function() {
					$(this).val($.trim($(this).val()));
					
					if(!$(this).valid()) {
						stop = true;
						$(this).fadeOut().fadeIn();
					}
				});
				
				if(!stop) {
					$("#share_container").fadeOut("slow", function() {
						$("#share_form").ajaxSubmit({success: function() { 
							$("#share_thanks").fadeIn("slow");
						}});
					});
					
					$("#share_circle, #share_star, #share_triangle").remove();
				} else {
					$(".share_drag").css({"left": share_shape_position[0], "top": share_shape_position[1]});
				}
			} else {
				$(".share_drag").css({"left": share_shape_position[0], "top": share_shape_position[1]});
			}
		}
	});
	
	$("#share_form input, #share_form textarea").focus(function() {
		var default_array = new Array("RECIPIENT'S EMAIL", "YOUR EMAIL", "YOUR NAME", "MESSAGE");
		
		for(var default_value in default_array) {
			if($(this).val() == default_array[default_value]) {
				$(this).val("");
				$(this).css("color","black");
			}
		}
	}).blur(function() {
		$(this).val($.trim($(this).val()));
		$(this).valid();
		
		if($(this).val() == "") {
			switch($(this).attr("id")) {
				case "share_name": $(this).val("YOUR NAME"); break;
				case "share_recipient_email": $(this).val("RECIPIENT'S EMAIL"); break;
				case "share_email": $(this).val("YOUR EMAIL"); break;
				case "share_text": $(this).val("MESSAGE"); break;
			}
			
			$(this).css("color","");
		}
	});
	
	$("#circle, #triangle, #star, #share_circle, #share_triangle, #share_star").live("mousedown", function(e) { e.preventDefault(); });
	
	$("#accessories_container .accessory_container").live("click", function(e) {
		e.preventDefault();
		$("#accessory_options").hide(0);
		
		var iCX = e.pageX,
			iCY = e.pageY,
			iPL = $(this).parent().parent().offset().left,
			iPT = $(this).parent().parent().offset().top;
		
		$("#accessory_options").css({"left": (iCX - iPL) + "px", "top": (iCY - iPT) + "px"});
		$("#accessory_options").fadeIn("slow");
		
		var accessory_link = MZW.Util.SID("product.php?products_id=" + $(this).find(".accessory_image img").attr("id"));
		
		$("#accessory_options .accessory_info").parent().attr("href", accessory_link);
		$("#accessory_options .accessory_add").attr("id", $(this).find(".accessory_image img").attr("id"));
	});
	
	$("#product_info_text a").live("mouseover", function(e) {
		if($("#swatch").length == 0)
			$("body").append("<div id='swatch'><img id='swatch_lining' src='' /></div>");
		
		$("#swatch_lining").attr("src", "zoom_module/images/lining/" + $(this).attr("id") + ".png");
		$("#swatch").css({"left": $(this).offset().left + $(this).width() + 10 + "px", "top": $(this).offset().top - 25 + "px"});
		$("#swatch").stop().fadeTo("slow", 1.0);
	});
	
	$("#product_info_text a").live("mouseout", function() { $("#swatch").stop().fadeTo("slow", 0.0); });
	$("#share_container").hide();
	$("#share_thanks").show();
});

