var true_resourseList = [];

$(work_Load);
function work_Load() {
	True.WorkSystem.initialize({ clientSelectId: "clientSelect",
		serviceListId: "serviceList",
		resourceDisplayId: "resourceBoxWork",
		clientLabelId: "clientLabel",
		projectLabelId: "projectLabel"
	});
};

if (!window.True) {
	Type.registerNamespace("True");
}

True.WorkSystem = function(){};

True.WorkSystem.initialize = function(p_config) {
	var instance = True.WorkSystem.instance = new True.WorkSystem();
	instance.clientSelect = $("#" + p_config.clientSelectId);
	instance.serviceList = $("#" + p_config.serviceListId);
	instance.resourceDisplay = $("#" + p_config.resourceDisplayId);
	instance.clientLabel = $("#" + p_config.clientLabelId);
	instance.projectLabel = $("#" + p_config.projectLabelId);
	True.WorkSystem.load();
};

True.WorkSystem.__objFromXml = function(node) {
	var obj = {};
	for (var i = 0; i < node.attributes.length; i++) {
		obj[node.attributes[i].name] = node.attributes[i].value;
	}
	return obj;
};

True.WorkSystem.load = function() {
	$.get("/content/resources.xml",
		function(xml, status) {
			var instance = True.WorkSystem.instance;
			True.WorkSystem.setXml(xml);
			instance.clientSelect.get(0).selectedIndex = 0;
			instance.clientSelect.change(function(e) {
				instance.displayByClient(this.value);
			});
			instance.serviceList.find("a").click(function(e) {
				instance.displayByService(True.WorkSystem.getCommand(e));
				return false;
			}).end();
			var q = location.search;
			var p = undefined;
			if (q) { // load based on query
				var rawParams = q.substr(1).split("&");
				var params = {};
				for (var i = 0; i < rawParams.length; i++) {
					var keyVal = rawParams[i].split("=");
					params[keyVal[0]] = keyVal[1];
				}
				if (params["p"]) {
					p = "rs_" + params["p"];
				}
				if (params["s"]) {
					instance.displayByService(params["s"], p);
				}
				if (params["c"]) {
					instance.clientSelect.val(params["c"]);
					instance.displayByClient(params["c"], p);
				}
			}
			else { // load initial service
				for (var p in instance.services) {
						instance.displayByService(p);
						return;
				}
			}
		}
	);
};

True.WorkSystem.setXml = function(xml) {
	var self = True.WorkSystem.instance;
	self.xml = xml;
	self.clients = {};
	$("client", self.xml).each(function(i) {
		var client = True.WorkSystem.__objFromXml(this);
		client.defaultResourceKey = "rs_" + client.defaultResource;
		client.resources = [];
		self.clients[client.key] = client;
		self.clientSelect.append("<option value='" + client.key + "'>" + client.value + "</option>");
	});
	self.services = {};
	var serviceMarkup = "";
	$("service", self.xml).each(function(i) {
		var service = True.WorkSystem.__objFromXml(this);
		service.defaultResourceKey = "rs_" + service.defaultResource;
		service.resources = [];
		self.services[service.key] = service;
		serviceMarkup += "<li><a id='svc_" + service.key + "' href='#" + service.key + "' title='" + service.value + "'>" + service.value + "</a></li>";
	});
	self.serviceList.prepend(serviceMarkup);
	self.resources = {};

	$("resource", self.xml).each(function(i) {
		var resource = True.WorkSystem.__objFromXml(this);
		resource.items = [];
		$("item", this).each(function(i) {
			resource.items.push(True.WorkSystem.__objFromXml(this));
		});
		resource.key = "rs_" + resource.id;
		self.resources[resource.key] = resource;
		var client = self.clients[resource.client];
		if (client) { client.resources.push(resource); }
		var service = self.services[resource.service];
		if (service) { service.resources.push(resource); }
	});
	self.player = new True.SWF("/content/resourcePlayer.swf", "resourcePlayer");
	self.player.create("projectViewer", true);
	self.player.onFSCommand = function(cmd, args) { alert(cmd); };
};

True.WorkSystem.displayResource = function(p_source, p_key) {
	$("div.resourceColumn a").removeClass("on");
	if (p_source)
		$(p_source).addClass("on");
	var self = True.WorkSystem.instance;
	if (self.resources && self.player.getMovie()) {
		var data = self.resources[p_key];
		setTimeout(function() {
			self.player.setJSON({ "resource": data });
			self.displayLabel(data.client, data.title);
		}, 20);
	}
};

True.WorkSystem.prototype.displayByClient = function(p_key, p_r) {
	this.serviceList.find("a").removeClass("on").end();
	this.resourceDisplay.empty();
	var client = this.clients[p_key];
	if (!client.serviceLists) {
		client.serviceLists = {};
		for (p in this.services) {
			for (var i = 0; i < client.resources.length; i++) {
				if (client.resources[i].service == p) {
					var sName = this.services[p].value;
					if (!client.serviceLists[sName]) {
						client.serviceLists[sName] = [];
					}
					client.serviceLists[sName].push(client.resources[i]);
				}
			}
		}
	}

	p_r = p_r || client.defaultResourceKey;
	this.displayLists(client.serviceLists);
	True.WorkSystem.displayResource($("#rLink-" + p_r).get(0), p_r);
};


True.WorkSystem.prototype.displayByService = function(p_key, p_r) {
	this.serviceList.find("a").removeClass("on").filter("#svc_" + p_key).addClass("on").end().end();

	this.clientSelect.get(0).selectedIndex = 0;
	this.resourceDisplay.empty();
	var service = this.services[p_key];
	if (!service.clientLists) {
		service.clientLists = {};
		for (p in this.clients) {
			for (var i = 0; i < service.resources.length; i++) {
				if (service.resources[i].client == p) {
					var cName = this.clients[p].value;
					if (!service.clientLists[cName]) {
						service.clientLists[cName] = [];
					}
					service.clientLists[cName].push(service.resources[i]);
				}
			}
		}
	}

	this.displayLists(service.clientLists);
	p_r = p_r || service.defaultResourceKey;
	True.WorkSystem.displayResource($("#rLink-" + p_r).get(0), p_r);
};

True.WorkSystem.prototype.displayLists = function(p_lists) {
	var count = 0;
	var sections = [];
	for (var p in p_lists) {
		sections.push({ name: p, resources: p_lists[p] });
	}
	var listCount = 0
	var content = "";
	for (var i = 0; i < sections.length; i++) {
		var section = sections[i];
		var isEven = Math.floor(i / 2) == (i / 2);
		var isLast = i == sections.length - 1;
		if (isEven) {
			if (isLast) {
				listCount = section.resources.length + 1;
			}
			else {
				listCount = Math.max(section.resources.length, sections[i + 1].resources.length) + 1;
			}
		}
		content += "<div class='resourceColumn floatLeft'><div class='resourceHeadline'>" + section.name + "</div><ul>";
		for (var j = 0; j < listCount; j++) {
			if (j >= section.resources.length) {
				content += "<li class='spacer'></li>";
			}
			else {
				content += "<li><a id='rLink-" + section.resources[j].key + "' href='javascript:;' onclick='True.WorkSystem.displayResource(this, \"" + section.resources[j].key + "\");' title=''>" + section.resources[j].title + "</a></li>"
			}
		}
		content += "</ul></div>"
		if (!isEven || isLast) {
			content += "<div class='clearIt'></div>";
		}
	}
	this.resourceDisplay.html(content);
};

True.WorkSystem.prototype.displayLabel = function(p_clientKey, p_project) {
	this.clientLabel.html("+ " + this.clients[p_clientKey].value + " = ");
	this.projectLabel.html(p_project);
};

True.WorkSystem.getCommand = function(e) {
	var t = e.target || e.srcElement;
	while (t && !t.href) {
		t = t.parentNode;
	}
	if (t) {
		return t.href.split("#")[1];
	}
};

True.WorkSystem.register("True.WorkSystem");
