/* Script Name :	jsMCOMProjectQuery.js
 * Script by :		oliver@maklott.com
 * Version :		0.1
 * Created :		2008 11 23
 * Last Changes :	2009 01 10
 * -----------------------------------------------------------------------------
 * This program is free software; you can redistribute it and/or modify it under 
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 3 of the License, or (at your option) any later version.
 * 
 * This program is distributed AS IS in the hope that it will be useful, but WITHOUT 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 * -----------------------------------------------------------------------------
*/

/* -------------------------------- Definitions -------------------------------- */
var target_script = "BuildMediaQuery.php";
var target_window = "_self";

var itemColor_active = "#999999";
var itemColor_inactive = "#cccccc";

var elementBaseID = "query";
var elementSuffix = "dataVis";
var elementSeparator = "_";

var activeType = "music";

var validate = new Object();
var link = new Object();
var state = new Object();
var reference = new Object();
var filter = new Object();


/* ---------------------------------- Methods ---------------------------------- */
function cloneObject(a_obj)
{
	var newObject = new Object();
	for (i in a_obj) { newObject[i] = a_obj[i]; }
	return newObject;
}
function cloneArray(a_array) { return a_array.slice(); }

function toggleQueryItemState(a_type, a_item)
{
	//alert("toggleQueryItemState ... \n   type: " + a_type + "\n   item: " + a_item + "\n   old state: " + state[a_type][a_item]);
	
	state[a_type][a_item] = !state[a_type][a_item];
	if (a_type == "type") { activeType = a_item; }
	query();
}
function setQueryItemState(a_type, a_item, a_state)
{
	//alert("setQueryItemState ... \n   type: " + a_type + "\n   item: " + a_item + "\n   a_state: " + a_state);
	
	state[a_type][a_item] = a_state ? true : false;
	if (a_type == "type") { activeType = a_item; }
	query();
}
function setQueryItemStateExclusive(a_type, a_item, a_state)
{
	//alert("setQueryItemStateExclusive ... \n   type: " + a_type + "\n   item: " + a_item + "\n   a_state: " + a_state);
	
	resetQueryStates(a_type);
	setQueryItemState(a_type, a_item, a_state);
}
function resetQueryStates(a_type)
{
	//alert("resetQueryStates ... \n   type: " + a_type);
	
	for (a_item in state[a_type])
		{ state[a_type][a_item] = false; }
}

function createQueryData()
{
	filter = new Object();
	
	for (a_type in reference)
	{
		filter[a_type] = new Array();
		for (var i = 0; i < reference[a_type].length; i++)
		{
			var item_id = reference[a_type][i];
			
			if (state[a_type][item_id])
				{ filter[a_type].push(item_id); }
		}
	}
}
/*
function createQueryAttributesString()
{
	var accum = "";
	var is_first = true;
	
	accum += "type=" + encodeURIComponent(activeType); is_first = false;
	
	if ((typeof filter["album"] != "undefined") && filter["album"].length)
		{ accum += (is_first ? "" : "&") + "album=" + encodeURIComponent(filter["album"].join(",")); is_first = false; }
	if ((typeof filter["year"] != "undefined") && filter["year"].length)
		{ accum += (is_first ? "" : "&") + "year=" + encodeURIComponent(filter["year"].join(",")); is_first = false; }
	if ((typeof filter["author"] != "undefined") && filter["author"].length)
		{ accum += (is_first ? "" : "&") + "author=" + encodeURIComponent(filter["author"].join(",")); is_first = false; }
	if ((typeof filter["genre"] != "undefined") && filter["genre"].length)
		{ accum += (is_first ? "" : "&") + "genre=" + encodeURIComponent(filter["genre"].join(",")); is_first = false; }
	if ((typeof filter["tag"] != "undefined") && filter["tag"].length)
		{ accum += (is_first ? "" : "&") + "tag=" + encodeURIComponent(filter["tag"].join(",")); }
	return accum.replace(/\%20/g, "+");
}

*/
/*
function createQueryAttributesString()
{
	var accum = "";
	
	accum += "type=" + encodeURIComponent(activeType); is_first = false;
	if ((typeof filter["album"] != "undefined") && filter["album"].length)
		{ accum += "&album=" + encodeURIComponent(filter["album"].join(",")); }
	if ((typeof filter["year"] != "undefined") && filter["year"].length)
		{ accum += "&year=" + encodeURIComponent(filter["year"].join(",")); }
	if ((typeof filter["author"] != "undefined") && filter["author"].length)
		{ accum += "&author=" + encodeURIComponent(filter["author"].join(",")); }
	if ((typeof filter["genre"] != "undefined") && filter["genre"].length)
		{ accum += "&genre=" + encodeURIComponent(filter["genre"].join(",")); }
	if ((typeof filter["tag"] != "undefined") && filter["tag"].length)
		{ accum += "&tag=" + encodeURIComponent(filter["tag"].join(",")); }
	return accum.replace(/\%20/g, "+");
}
*/
function createQueryAttributesString()
{
	var accum = "";
	
	accum += "type=" + encodeURIComponent(activeType); is_first = false;
	if ((filter["album"] != undefined) && filter["album"].length)
		{ accum += "&album=" + encodeURIComponent(filter["album"].join(",")); }
	if ((filter["year"] != undefined) && filter["year"].length)
		{ accum += "&year=" + encodeURIComponent(filter["year"].join(",")); }
	if ((filter["author"] != undefined) && filter["author"].length)
		{ accum += "&author=" + encodeURIComponent(filter["author"].join(",")); }
	if ((filter["genre"] != undefined) && filter["genre"].length)
		{ accum += "&genre=" + encodeURIComponent(filter["genre"].join(",")); }
	if ((filter["tag"] != undefined) && filter["tag"].length)
		{ accum += "&tag=" + encodeURIComponent(filter["tag"].join(",")); }
	return accum.replace(/\%20/g, "+");
}
function writeStringToHTMLElement(a_elemID, a_string)
{
	var elem = document.getElementById(a_elemID);
	
	if (elem)
	{
		if (typeof a_string == "string")
			{ elem.innerHTML = a_string; }
		else
			{ elem.innerHTML = ""; }
	}
}

function writeGroupToHTMLElement(a_groupID)
{
	var accum = "";
	var prefix = "";
	var id = "";
	var elem = document.getElementById(elementBaseID + elementSeparator + a_groupID + elementSeparator + elementSuffix);
	
	//alert("writeGroupToHTMLElement ... a_groupID: " + a_groupID);
	
	if (elem)
	{
		if (typeof reference[a_groupID] != "undefined")
		{
			for (var i = 0; i < reference[a_groupID].length; i++)
			{
				id = reference[a_groupID][i];
				
				if (state[a_groupID][id])
				{
					if (itemColor_active.length)
					{
						accum += prefix + unescape(link[a_groupID][id]).replace(/style=""/g, ("style=\"color:" + itemColor_active + ";\""));
					}
					else
					{
						accum += prefix + unescape(link[a_groupID][id]);
					}
				}
				else
				{
					if (itemColor_inactive.length)
					{
						accum += prefix + unescape(link[a_groupID][id]).replace(/style=""/g, ("style=\"color:" + itemColor_inactive + ";\""));
					}
					else
					{
						accum += prefix + unescape(link[a_groupID][id]);
					}
				}
				prefix = ", ";
			}
		}
		if (accum.search(/undefined/) == -1)
			{ elem.innerHTML = accum; }
		else
			{ elem.innerHTML = ""; }
	}
}

function query()
{
	createQueryData();
	window.open((target_script + "?" + createQueryAttributesString()), target_window);
	
	writeStringToHTMLElement("subContentTitle",activeType);
	
	/*switch (activeType)
	{
		case "music" : 
		case "movie" : 
		case "image" : 
			writeGroupToHTMLElement("album");
			writeGroupToHTMLElement("genre");
		case "project" : 
		case "performance" : 
		case "application" : 
			writeGroupToHTMLElement("year");
			writeGroupToHTMLElement("author");
			writeGroupToHTMLElement("tag");
			break;
		default : 
			break;
	}*/
	
	writeGroupToHTMLElement("year");
	writeGroupToHTMLElement("album");
	writeGroupToHTMLElement("author");
	writeGroupToHTMLElement("genre");
	writeGroupToHTMLElement("tag");
}
