// (c) Damien Debin

// cf. http://remysharp.com/2007/09/18/auto-populate-multiple-select-boxes/
// --------
(function ($) {
	$.fn.selectChain = function (options) {
		var defaults = {
			key: "id",
			value: "label"
		};

		var settings = $.extend({}, defaults, options);

		if (!(settings.target instanceof $)) settings.target = $(settings.target);

		return this.each(function () {
			var $$ = $(this);

			$$.change(function () {
				var data = null;
				if (typeof settings.data == "string") {
					data = settings.data + "&" + this.name + "=" + $$.val();
				} else if (typeof settings.data == "object") {
					data = settings.data;
					data[this.name] = $$.val();
				}

				settings.target.empty();

				$.ajax({
					url: settings.url,
					data: data,
					type: (settings.type || "get"),
					dataType: "json",
					success: function (j) {
						var options = [], i = 0, o = null;

						for (i = 0; i < j.length; i++) {
							// required to get around IE bug (http://support.microsoft.com/?scid=kb%3Ben-us%3B276228)
							o = document.createElement("OPTION");
							o.value = typeof j[i] == "object" ? j[i][settings.key] : j[i];
							o.text = typeof j[i] == "object" ? j[i][settings.value] : j[i];
							settings.target.get(0).options[i] = o;
						}

						// hand control back to browser for a moment
						setTimeout(function () {
							if (settings.setall()) settings.target.find("option").attr("selected", "selected");
							else settings.target.find("option:first").attr("selected", "selected");
							settings.target.find("option:first").parent("select").change();
						}, 0);
					},
					error: function (xhr, desc, er) {
						alert("An error occurred ! " + descr);
					}
				});
			});
		});
	};
})(jQuery);
// --------

var table = null;
function compute_table()
{
	var ref_cond = "";
	$("#refSelect option:selected").each(function () {
		if (ref_cond != "") ref_cond += " or ";
		ref_cond += "ref='" + $(this).val() + "'";
	});

	ref_cond = "(" + ref_cond + ") and (ctry='" + $("#countrySelect option:selected").attr("value") + "')";

	var view_array = [ ], sortColumn = 0;
	$("#statmenu input.col:checked").each(function () {
		view_array.push(parseInt($(this).val()));
		if ($(this).val() == "3") sortColumn = view_array.length - 1;
	});
	if (view_array.length == 0) {
		view_array.push(1);
		$("#statmenu input[value=1]").attr("checked","checked");
	}
	
	if (table != null)
	{
		var query = new google.visualization.Query("/RefurbFeeds/AjaxGoogleDataSource/");
		var q = "select id, ref, title, price, cdate, sdate, descr where " + ref_cond;
		if ($("label#group input").is(":checked")) {
			q = q.replace(/price/, "min(price)").replace(/cdate/, "min(cdate)").replace(/sdate/, "max(sdate)") + " group by ref";
		}
		//alert(q);
		query.setQuery(q);
		query.send(function(res) {
			if (res.isError()) {
				alert('Error ! ' + res.getMessage() + " ; " + res.getDetailedMessage());
			} else {
				var data = res.getDataTable();
				var formatter = new google.visualization.TableNumberFormat();
				formatter.format(data, 3);
				formatter = new google.visualization.TablePatternFormat('<a href="/url/{1}" target="_blank">{0}</a>');
				formatter.format(data, [1, 0]);
				var view = new google.visualization.DataView(data);
				view.setColumns(view_array);
				table.draw(view, {"page":"disable", "allowHtml":true, "alternatingRowStyle":true, "sort":"enable", "sortColumn":sortColumn});
			}
		});
	}
}

function check_country_changed(e)
{
	if ($("select[name=type_store_radio] option:selected").attr("value") == "us")
	{
		if (!$("input[name=check_all]").is(":checked"))
		{
			$("input[name=check_iphone]").removeAttr("disabled");
		}
		else
		{
			$("input[name=check_iphone]").attr("checked","checked");
		}
	}
	else
	{
		$("input[name=check_iphone]").removeAttr("checked");
		$("input[name=check_iphone]").attr("disabled","disabled");
	}
	return true;
}

function check_all_changed(e)
{
	if ($("input[name=check_all]").is(":checked"))
	{
		$(".apple").attr("checked","checked");
		$(".apple").attr("disabled","disabled");
	}
	else
	{
		$(".apple").removeAttr("checked");
		$(".apple").removeAttr("disabled");
		$("input[name=check_allmac]").attr("checked","checked");
		check_allmac_changed(e);
	}
	check_country_changed(e);
	return true;
}

function check_allmac_changed(e)
{
	if ($("input[name=check_allmac]").is(":checked"))
	{
		$(".mac").attr("checked","checked");
		$(".mac").attr("disabled","disabled");
	}
	else
	{
		$(".mac").removeAttr("checked");
		$(".mac").removeAttr("disabled");
	}
	check_country_changed(e);
	return true;
}

function compute_feed(e)
{
	var url;
	url = $("select[name=type_store_radio] option:selected").attr("value");
	url = url + "_" + $("select[name=type_feed_radio] option:selected").attr("value");
	if ($("#bodypage input:checked").size() == 0) $(".mac:first").attr("checked","checked");
	$("#bodypage input:checked").filter(":enabled").each(function() { url = url + "_" + $(this).attr("value"); });
	$("#feedname").val(url);
	css_url = "http://" + document.domain + "/css_feeds/" + url + ".xml";
	url = "http://" + document.domain + "/feeds/" + url + ".xml";
	$("a#url").attr("href",url);
	$("#previewframe").attr("src",css_url);
	$("a#gg").attr("href", "http://fusion.google.com/add?source=atgs&feedurl=" + escape(url));
	$("a#ng").attr("href", "http://www.newsgator.com/ngs/subscriber/subext.aspx?url=" + escape(url));
	$("a#bl").attr("href", "http://www.bloglines.com/sub/" + escape(url));
	$("a#ya").attr("href", "http://add.my.yahoo.com/rss?url=" + escape(url));
	$("a#ne").attr("href", "http://www.netvibes.com/subscribe.php?url=" + escape(url));
	if (url.length > 58) url = url.substring(0,58) + "…";
	$("a#url").text(url);
	return true;
}

function validate_email()
{
	//cf. http://fightingforalostcause.net/misc/2006/compare-email-regex.php
	var validemailreg = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i;
	if (validemailreg.test($("#RefurbEmails_EMAIL").attr("value")))	return true;
	else
	{
		if (lg == "fr")	alert("Une adresse e-mail valide est nécessaire...\nVérifiez que vous l'avez rentrée correctement.");
		else alert("A valid e-mail address is required...\nPlease check you have entered your details correctly.");
		return false;
	}
}

var lg, email_reseted = false;
function setup_feed()
{
    lg = $("html").attr("xml:lang");
	if (lg == undefined) alert("Couldn't get browser language !");

	$("#submit").hide();
	$("#email").show();
	$("#menu").show();
	
	//add "preview" iframe
	$("#bodypage").css("margin-left", "-34em");
	$("#preview").html('<iframe frameborder="0" src="#" id="previewframe">Version temps réel du flux RSS décrit sur la gauche.</iframe>');

	$("input[name=check_all]").change(check_all_changed);
	$("input[name=check_allmac]").change(check_allmac_changed);
	$("select[name=type_store_radio]").change(check_country_changed);
	$("#feedform input").change(compute_feed);
	$("#feedform select").change(compute_feed);
	
	$("#menu a").click(function() { $(".tabpage").toggle(); $("#menu a").toggleClass("link_disabled"); return false; });
	
	$("#emailform input[type=submit]").click(validate_email);
	$("#RefurbEmails_EMAIL").focus(function() { if (!email_reseted) $("#RefurbEmails_EMAIL").attr("value", ""); $("#RefurbEmails_EMAIL").removeClass("light_email"); email_reseted = true; });
	
	$("input[name=check_allmac]").attr("checked","checked");
	
	check_allmac_changed();
	check_country_changed();
	compute_feed();
}

function setup_table()
{
	table = new google.visualization.Table(document.getElementById("table-div"));
	
	var cntry = $("#countrySelect");
	var ctgry = $("#productCategory");
	var refer = $("#refSelect");
	
	refer.change(compute_table);
	$("#statmenu input").click(compute_table);
	
	ctgry.selectChain({
		target: refer,
		url: "/RefurbFeeds/AjaxCategoryList",
		data: { ajax: true },
		setall: function() { return false; /*return !($("#productCategory option:first").is(":selected"));*/ }
	});        

	// note that we're assigning in reverse order to allow the chaining change trigger to work
	cntry.selectChain({
		target: ctgry,
		url: "/RefurbFeeds/AjaxCategoryList",
		data: { ajax: true },
		setall: function() { return false; }
	});

	cntry.change();
}

$(setup_feed);

/*function google_onload() { $(setup_table); }
google.load("visualization", "1", {"packages": ["table"], "language" : lg, "callback": google_onload}); */
$(setup_table);
