// JavaScript Document
jQuery.fn.sort = function()
{
	return this.pushStack( [].sort.apply( this, arguments ), []);
};

function sortAlphaAsc(a,b)
{
	return $(a).children()[0].innerHTML > $(b).children()[0].innerHTML ? 1 : -1;
};

function sortAlphaDesc(a,b)
{
	return $(a).children()[0].innerHTML < $(b).children()[0].innerHTML ? 1 : -1;
};

function sortPriceAsc(a,b)
{
	return parseFloat($(a).children(".yp").children("b").html().substr(1)) > parseFloat($(b).children(".yp").children("b").html().substr(1)) ? 1 : -1;
	//var thing1 = $(a).children(".yp").children("b").html().substr(1);
	//var thing2 = $(b).children(".yp").children("b").html().substr(1);
	//$("body").append(thing1+" VS "+thing2+"<br />");
	//return parseFloat($(a).children()[3].innerHTML.substr(16).replace("</b>",'')) > parseFloat($(b).children()[3].innerHTML.substr(16).replace("</b>",'')) ? 1 : -1;
};

function sortPriceDesc(a,b)
{
	return parseFloat($(a).children(".yp").children("b").html().substr(1)) < parseFloat($(b).children(".yp").children("b").html().substr(1)) ? 1 : -1;
};

function sortOrderValue(a,b)
{
	return parseInt(a.className.substr(3)) > parseInt(b.className.substr(3)) ? 1 : -1;
};

function sortCustRat(a,b)
{
	//get only the numeric value of the class
	var c1 = parseFloat($(a).children()[1].className.substr(14).replace(/_/ig,'.'));
	var c2 = parseFloat($(b).children()[1].className.substr(14).replace(/_/ig,'.'));
	if (isNaN(c1))
		c1 = 0;
	if (isNaN(c2))
		c2 = 0;
	//if they have the same rating, order by the number of reviews
	if (c1 == c2)
	{
		var n1 = parseInt($(a).children()[1].innerHTML.replace(/[^0-9]/,''));
		var n2 = parseInt($(b).children()[1].innerHTML.replace(/[^0-9]/,''));
		return n1 < n2 ? 1 : -1;
	}
	
	return c1 < c2 ? 1 : -1;
};

$(document).ready(function()
{
	//fix the subcategory banner
	var sub_ban = $("#sub_ban").attr("className").split(" ");
	var sub_ban_image = sub_ban[0].substr(4);
	var sub_ban_link = sub_ban[1].substr(4);
	$("#sub_ban").css("background","url(/images/banners/"+sub_ban_image+") no-repeat top");
	
	$("#sub_ban").click(function()
	{
		top.location.href = sub_ban_link;
	});
	
	$("a.product_link").each(function()
	{
		if ($(this).attr("sl"))
			$(this).css("background","url("+$(this).attr("sl")+") no-repeat top");
		else
			$(this).css("background","url(/images/products/"+($(this).attr("id"))+"_1S.jpg) no-repeat top");
	});
	
	$("a.product_link").hover(function()
	{
		$(".net_pop").hide();
		
		if ($(this).attr("sl"))
		{
			return;	
		}
		
		var pos = $(this).parent().offset();
		var scrollTop = $(window).scrollTop();
		var winHeight = $(window).height();
		var winWidth = $(window).width();
		var net_box = $("#np_"+$(this).parent().attr("pc"));
		var t = pos.top-40;
		var l = pos.left+160;
		
		var nt = pos.top+70;
		var nl = l-12;
		
		//see if it needs to be adjusted to fit on screen
		if (t < scrollTop)
			t = scrollTop;
		else if (t+300 > scrollTop + winHeight)
			t = scrollTop + winHeight - 300;
		
		//see if we need to switch the popup to the left side
		if (l+247+185 > winWidth)
		{
			l -= 247+185;
			nl -= 247-97;
			$("#net_arrow").css("background-position","-45px -230px");
		}
		else
		{
			$("#net_arrow").css("background-position","-6px -230px");
		}
		
		$(net_box).css({"top":t+"px","left":l+"px"});
		
		//alert(nt+" "+scrollTop);
		//alert(nt - scrollTop);
		if (scrollTop + winHeight - nt <= 87)	//too low
		{
			if (scrollTop + winHeight - nt < -19)
				return;	//way too low
			nt = scrollTop + winHeight - 87;
			//$("#net_arrow").css("background-position","0 -230px");
		}
		else if (nt - scrollTop <= 37)	//too high
		{
			if (nt - scrollTop <= -77)
				return;	//way too high
			nt = scrollTop + 37;
			//$("#net_arrow").css("background-position","0 -230px");
		}
		else
		{
			//$("#net_arrow").css("background-position","0 -230px");
		}
		
		$("#net_arrow").css({"top":nt+"px","left":nl+"px","display":"block"});
		//$("#net_arrow").html("top"+nt+"px"+"left"+nl+"px"+"display"+"block");
		$(net_box).show();
	}, function()
	{
		$(".net_pop,#net_arrow").hide();
	});
	
	$(".atc,.oos").click(function()
	{
		top.location.href = $(this).parent().children("a").attr("href");
	});
	
	var pn = 1;	//page_number
	var all_p = $("#right_container #product_holder ul#product_list li");
	var num_p = all_p.length;
	var ipp = 12;	//items per page
	var max_pn = Math.ceil(num_p/ipp);
	
	$(".pn_3").html("Page "+pn+" of "+max_pn);
	
	$("#right_container ul#product_nav li ul li").click(function()
	{
		var n = $(this).attr("className").substr(3);
		if (n==3)
			return;
		else if (n==1)	// |<
			pn = 1;
		else if (n==2 && pn > 1)	// <
			pn--;
		else if (n==4 && pn < max_pn)	// >
			pn++;
		else if (n==5)	// >|
			pn = max_pn;
		$(".pn_3").html("Page "+pn+" of "+max_pn);
		$("#right_container #product_holder ul#product_list").css({"top":((pn-1)*-990)+"px"});
		
		top.location.href="#";
	});
	
	function update_order_by(val)
	{
		var sortFunc = sortOrderValue;
		if (val == "name_asc")
			sortFunc = sortAlphaAsc;
		else if (val == "name_desc")
			sortFunc = sortAlphaDesc;
		else if (val == "price_asc")
			sortFunc = sortPriceAsc;
		else if (val == "price_desc")
			sortFunc = sortPriceDesc;
		else if (val == "num_stars_desc")
			sortFunc = sortCustRat;
		
		$("#right_container #product_holder ul#product_list li").sort(sortFunc).appendTo("#right_container #product_holder ul#product_list");
		//reset page_number
		pn = 1;	
		//move back to page 1
		$("#right_container #product_holder ul#product_list").css({"top":"0px"});
		$(".pn_3").html("Page "+pn+" of "+max_pn);
		//back to top
		top.location.href="#";
	}
	
	function update_items_per_page(val)
	{
		//reset page_number
		pn = 1;	
		//update items per page and max page number
		if (val != "all")
		{
			ipp = Math.min(parseInt(val), num_p);
		}
		else
		{
			ipp = num_p;
		}
		max_pn = Math.ceil(num_p/ipp);
		//move back to page 1
		$("#right_container #product_holder ul#product_list").css({"top":"0px"});
		$(".pn_3").html("Page "+pn+" of "+max_pn);
		//update the height of the holder to show the correct number of items
		var num_rows = Math.ceil(ipp/4);
		$("#right_container #product_holder").css({"height":(num_rows*330)+"px"});
		
		top.location.href="#";
	}
	
	//works for order_by and items_per_page
	$(".order_by,.items_per_page").change(function()
	{
		var val = $(this).attr("value");
		var cn = $(this).attr("className");
		var all_nav_opt = $("."+cn);
		var si = $(this).attr("selectedIndex");
		for (var o=0; o<all_nav_opt.length; o++)
		{
			all_nav_opt[o].options[si].selected = true;
		}
		eval("update_"+cn+"('"+val+"')");	//now run the appropriate function, passing the selected value
	});
	
	//sort the list
	$("#right_container #product_holder ul#product_list li").sort(sortOrderValue).appendTo("#right_container #product_holder ul#product_list");
	
	//me: disable filters that aren't available
	//me: fix positioning in IE6
	
	//when a filter is clicked
	$(".filter").click(function()
	{
		if ($(this).hasClass("disabled"))
		{
			return;
		}
		
		if ($(this).hasClass("selected"))	//uncheck it and remove filtering
		{
			$(this).removeClass("selected");
			$(this).parent().children().removeClass("disabled");
			$("#right_container #product_holder ul#product_list li").removeClass("hidden");
			
			//update the pagination
			//reset page_number
			pn = 1;	
			//update number of products and max page number
			num_p = $(all_p).length;	//only count things that aren't hidden
			max_pn = Math.ceil(num_p/ipp);
			//move back to page 1
			$("#right_container #product_holder ul#product_list").css({"top":"0px"});
			$(".pn_3").html("Page "+pn+" of "+max_pn);
			//update the height of the holder to show the correct number of items
			var num_rows = Math.ceil(ipp/4);
			$("#right_container #product_holder").css({"height":(num_rows*330)+"px"});
			
			top.location.href="#";
			
			return;
		}
		
		$(this).parent().children().removeClass("selected");
		$(this).parent().children().addClass("disabled");
		$(this).removeClass("disabled");
		$(this).addClass("selected");
		
		var f_info = this.id.split(":");
		//ids are formatted as such	->	parv:url_name:min_quantity:max_quantity
		//example ->	parv:price:0:9.99
		var min_val = parseFloat(f_info[2]);
		var max_val = parseFloat(f_info[3]);
		
		
		$("#right_container #product_holder ul#product_list li").addClass("hidden");
		
		for (var i=0; i<all_p.length; i++)
		{
			if (f_info[1] == "price")
			{
				var tmp_val = parseFloat($(all_p[i]).children(".yp").children("b").html().substr(1));
			}
			else
			{
				//me: TBD
				var tmp_val = min_val;	//just pass it
			}
			if (tmp_val >= min_val && tmp_val <= max_val)
				$(all_p[i]).removeClass("hidden");
		}
		
		//update the pagination
		//reset page_number
		pn = 1;	
		//update number of products and max page number
		num_p = $(all_p).filter(":not(.hidden)").length;	//only count things that aren't hidden
		max_pn = Math.ceil(num_p/ipp);
		//move back to page 1
		$("#right_container #product_holder ul#product_list").css({"top":"0px"});
		$(".pn_3").html("Page "+pn+" of "+max_pn);
		//update the height of the holder to show the correct number of items
		var num_rows = Math.ceil(ipp/4);
		$("#right_container #product_holder").css({"height":(num_rows*330)+"px"});
		
		top.location.href="#";
		
	});
	
	var fixIE = (Prototype.Browser.IE7 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7) || (Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6);
	
	//update sale, clearance, and new tags
	var specials = Array("sale", "clearance", "new", "new_release");
	for (var i=0; i<specials.length; i++)
	{
		var on_sale = $("."+specials[i]);
		if (on_sale.length > 0)
		{
			for (var s=0; s<on_sale.length; s++)
			{
				var sale_tag = document.createElement("div");
				sale_tag.className = specials[i]+"_tag";
				if (fixIE)
					sale_tag.style.top = ($(on_sale[s]).parent().offset().top-609)+"px";
				else
					sale_tag.style.top = ($(on_sale[s]).parent().position().top)+"px";
				if (fixIE)
					sale_tag.style.left = ($(on_sale[s]).parent().offset().left-367)+"px";
				else
					sale_tag.style.left = ($(on_sale[s]).parent().position().left+7)+"px";
				$(on_sale[s]).append(sale_tag);
			}
		}
	}
});
