var current_standard = {};

function tags_sort(s, e) {
	var scc_ts = $(e).parent().siblings(".standards-tags");

	var ts = [];
	scc_ts.find(".standards-tag").each(function() {
		ts.push($(this));
	});

	if (s == "A") {
		ts.sort(function(a,b) { return a.html() < b.html() ? -1 : a.html() > b.html() ? 1 : 0; });
	} else {
		ts.sort(function(a,b) {
			var a_pos = parseInt(a.attr("tag-pop"));
			var b_pos = parseInt(b.attr("tag-pop"));
			return a_pos < b_pos ? -1 : a_pos > b_pos ? 1 : 0;
		});
	}

	scc_ts.empty();

	for (var t in ts) {
		scc_ts.append(ts[t]).append(" ");
	}

	$(e).addClass("active").siblings().removeClass("active");
}

// DOM ready
(function($) {
$.fn.loading = function(selector) {
	var e = (selector)?$(selector):this.eq(0);

	e.each(function() {
		var el = $(this);
		var d = $('<div />').css({width: el.width(), height: el.height()}).html("loading");
		var s = $("<span />");
				s.append(d).addClass("loading_wait");

    el.hide().before(s).load(function () {
      s.removeClass("loading_wait").before(el);
      el.fadeIn();
    }).error(function () {
			el.remove();
    });
	});
}
})(jQuery);

var standards_browser = function() {
	var $tabs = $(".tabs .tab");
	var $panels = $(".tabs-panels .tab-panel");

	var current_details = {};
	var search_to = false;

	this.init = function() {
		$panels.find(".standards-search-submit").click(search);
		$panels.find(".standards-search input[type='text'], .standards-search input[type='checkbox'], .standards-search select").change(function () {
			if (search_to)
				clearTimeout(search_to);

			search_to = setTimeout(search, 500);
		});
		$panels.find("select[name='categoryid']").change(function () {
			var classification = standards_contents[current_details.classificationid];
			var category = classification.categories[$(this).val()];

			var tags = category.tags;

			$panels.find("[name='search_string']").val("");

			var te = $panels.find("select[name='tag']");
					te.empty().append('<option value=""></option>');
			var te_p = te.parent();

			if (category.designs_count <= 60) {
				te_p.hide();
				return;
			}

			var ts = [];
			for (t in tags) {
				ts.push(tags[t]);
			}
			if (ts.length > 0) {
				ts.sort(function(a,b) { return a.title < b.title ? -1 : a.title > b.title ? 1 : 0; });

				for (t in ts) {
					te.append('<option value="'+ts[t].tag+'">'+ts[t].title+'</option>');
				}

				te_p.show();
			} else {
				te_p.hide();
			}
		});

		$tabs.click(function() {
			var p = $(this).attr("panel");
			panel_load(p);
		});

		var l_cl = (typeof standards_start.classificationid != "undefined" && standards_start.classificationid)?standards_start.classificationid:$tabs.filter(":first").attr("panel");
		var l_ca = (typeof standards_start.categoryid != "undefined" && standards_start.categoryid)?standards_start.categoryid:false;
		panel_load(l_cl, l_ca);
	};

	var panel_load = function(p, ca) {
		current_details = {
			"classificationid": p
		};

		var tt_c = $tabs.filter("[panel='"+p+"']");
				tt_c.addClass("tab-active").siblings().removeClass("tab-active");

		$panels.hide();
		var tp_c = $panels.filter("[panel='"+p+"']");
				tp_c.show();
		var tp_cc = tp_c.find(".standards-categories");

		if (tp_cc.html() == "") {
			var classification = standards_contents[p];

			for (c in classification.categoryids_popular) {
				var cc = classification.categories[classification.categoryids_popular[c]];
				var cc_w = $('<div class="standards-category-highlight-wrap" />');
				var cc_d = $('<div class="standards-category-highlight" />');
						cc_d.appendTo(cc_w)
								.append('<a class="standards-category-link" href="'+cc.href+'">'+cc.category+'</a>')
								.append('<div class="standards-category-descr">'+cc.descr+'</div>')
								.append('<div class="standards-category-count">'+cc.designs_count+' designs and counting here are some of our most popular...</div>');
				var cc_de = $('<div class="standards-category-designs" />');
						cc_de.appendTo(cc_d);

				var designs = cc.designs;
				var i = 0;
				for (d in designs) {
					var ii, ii_c;
							ii = designs[d].thumbnail;
							ii_c = "standards-design-tn";

					var mt = (ii.image_x/ii.image_y < 1)?-1*(parseInt(ii.image_y)-46)/2:0;

					var img = $("<img />").attr({src: ii.src, width: ii.image_x, height: ii.image_y}).css("margin-top", mt+"px");

					cc_de.append($('<span class="'+ii_c+'" />').append($('<a href="'+cc.href+'?designid='+d+'&variationid='+designs[d].variationid+'" />').append(img)));
					img.loading();

					i++;
					if (i >= 8)
						break;
				}
				cc_d.append($('<div class="standards-category-more" />').append('<a href="'+cc.href+'">Shop all '+cc.category+' '+classification.classification+'</a>'));

				tp_cc.append(cc_w);

				if (c >= 2)
					break;
			}

			tp_cc.append($('<div class="standards-categories-more" />').append('<a href="'+classification.href+'">See all of our '+classification.categoryids_popular.length+' '+classification.classification+' categories</a>'));
		}

		current_details.panel = tp_c;

		if (typeof ca != "undefined") {
			current_details.panel.find(".standards-search").find("[name='categoryid']").val(ca);
		} else {
			current_details.panel.find(".standards-search").find("[name='categoryid']").val("");
		}

		tags_panel(p);
		search();
	};

	var nav_q = {};
	var navigate = function() {
		var sn = current_details.panel.find(".standards-navigate");
		var nq = search_q

		if (sn.find("[name='l']").val()) {
			nav_q.l = sn.find("[name='l']").val();
		}
		if (sn.find("[name='page']").val()) {
			nav_q.page = sn.find("[name='page']").val();
		}

		search(true);
	};

	var search_q = {};
	var search = function(from_nav) {
		if (typeof from_nav == "undefined") {
			var from_nav = false;
			nav_q.page = 1;
		}

		var ss = current_details.panel.find(".standards-search");

		var classification = standards_contents[current_details.classificationid];
		var href = classification.href;
		if (ss.find("[name='categoryid']").val()) {
			href = classification.categories[ss.find("[name='categoryid']").val()].href;
		}
		href += "?search=1";

		search_q = {
			aj: 1
		};
		if (ss.find("[name='sets']").attr("checked")) {
			search_q.sets = 1;
		}
		if (ss.find("[name='tag']").val()) {
			search_q.tag = ss.find("[name='tag']").val();
		}

		var ss_c = 0;
		if (ss.find("[name='search_string']").val()) {
			search_q["search_strings["+ss_c+"]"] = ss.find("[name='search_string']").val();
			ss_c++;
		}

		if (ss.find("[name='search_strings[]']").length) {
			ss.find("[name='search_strings[]']").each(function() {
				search_q["search_strings["+ss_c+"]"] = $(this).val();
				ss_c++;
			});
		}

		if (typeof nav_q.page == "undefined" || nav_q.page < 1 || !from_nav)
			nav_q.page = 1;

		var do_q = {};
		for (q in search_q)
			do_q[q] = search_q[q];
		for (q in nav_q)
			do_q[q] = nav_q[q];

		var cn = current_details.panel.find(".standards-navigate-wrap");
				cn.empty().hide();

		current_details.panel.find(".standards-results").css("height", "320px").mask("Searching...");
		current_details.panel.find(".standards-results").load(href, do_q, function(data) {
				var cr = current_details.panel.find(".standards-results");
						cr.unmask();
						cr.css("height", "auto");
				var r = cr.find(".DesignPreview");

				if (r.length > 0) {
					var link = href;
					var qv = [];
					for (_q in do_q) {
						if (_q == "aj")
							continue;

						qv.push(_q+"="+do_q[_q]);
					}
					if (qv.length > 0)
						link += "?"+qv.join("&");

					var rl = '<div style="float: left; line-height: 21px;">You are viewing '+r.length+' of '+standards_summary.navigation.total_results+' designs.</div>';
					if (r.length < parseInt(standards_summary.navigation.total_results)) {
//						rl += '<a href="'+link+'">See all results</a>';
					}
					cn.append(rl);

					var do_nav = false;
					var rn = '';
					if (r.length < parseInt(standards_summary.navigation.total_results)) {
						do_nav = true;

						rn += '<div class="standards-navigate-field">Page: ';
						rn += '<select name="page">';
						for (p in standards_summary.navigation.pages) {
							var pp = standards_summary.navigation.pages[p];
							rn += '<option value="'+pp+'"'+(pp == standards_summary.navigation.current_page?' selected':'')+'>'+pp+'</option>';
						}
						rn += '</select></div>';
					}

					do_nav = true;
					rn += '<div class="standards-navigate-field">Show '+
								'<select name="l">'+
								'<option value="0"'+(standards_summary.navigation.limit == 0?' selected':'')+'>24</option>'+
								'<option value="1"'+(standards_summary.navigation.limit == 1?' selected':'')+'>48</option>'+
								'<option value="2"'+(standards_summary.navigation.limit == 2?' selected':'')+'>96</option>'+
								'</select> results</div>';

					if (do_nav) {
						var nb = $('<input type="button" class="standards-navigate-button" value="Update" />');
								nb.click(navigate);

						cn.append($('<div class="standards-navigate" />').append(rn).append(nb));
					}

					cn.show();

					cr.find("a[rel='sdesigns']").load();
				} else {
					cr.html("Sorry, there are no results matching your search.");
				}
		});
	};

	var tags_panel = function(cl, ct) {
		var classification = standards_contents[cl];
		if (typeof classification == "undefined")
			return;

		var tags;
		if (typeof classification.tags != "undefined")
			tags = classification.tags;
		else
			return false;

		var scc_t = current_details.panel.find(".standards-tags-wrap");
				scc_t.empty();

		var scc_ts = $('<div class="standards-tags" />');
		var has_tags = false;
		var i = 0;
		for (t in tags) {
			if (tags[t])
				has_tags = true;

			scc_ts.append(
				$('<a class="standards-tag" href="'+classification.href+'?search=1&tag='+tags[t].tag+'" tag-pop="'+i+'" tag-count="'+tags[t].tag_count+'" />').data("tag", t).html(tags[t].title).click(function (e) {
					e.preventDefault();
					tag_search($(this).data("tag"));
					return false;
				})
			).append(" ");

			i++;
			if (i >= 100)
				break;
		}

		if (has_tags) {
			var sr = $('<div class="standards-tags-sort"><span class="standards-tag-sort-abc" onclick="tags_sort(\'A\', this);">A-Z</span><span class="standards-tag-sort-pop" onclick="tags_sort(\'P\', this);">Popular</span></div>');

			scc_t.append('<div class="standards-details-title">Popular Tags</div>').append(scc_ts);
		}
	};

	var tag_search = function(t) {
		var tags = standards_contents[current_details.classificationid].tags;
		current_details.panel.find(".standards-search").find("[name='search_string']").val(tags[t].title);
		search();
	};
};

$(document).ready(function() {
	var s_browser = new standards_browser();
			s_browser.init();
});
