/*
* @brief global CSS object that allows selecting and saving of alternate stylesheets
*/


var CSSPicker = new function()
{
	var unique_id = "css_picker";
	var window_class = "boks";  // a classname to be added to the css picker box
	var caption_none = "kein";

	this.open = function()
	{
		// create css selector box if it doesn't exist yet
		if(!document.getElementById(unique_id))
		{
			// setup box and add it to DOM
			var box = document.createElement("div");
			box.id = unique_id;
			box.className = window_class;
			var ul = document.createElement("ul");
			box.appendChild(ul);
			document.body.appendChild(box);

			// default stylesheet
			var radio = document.createElement("input");
			radio.type = "radio";
			radio.name = unique_id + "_stylesheet";
			radio.value = "";
			radio.setAttribute("onclick", "CSSPicker.setStylesheet(this.value);");
			radio.checked = true;
			var em = document.createElement("em");
			em.appendChild(document.createTextNode(caption_none));
			var label = document.createElement("label");
			label.appendChild(radio);
			label.appendChild(em);
			var li = document.createElement("li");
			li.appendChild(label);
			ul.appendChild(li);

			// add selectable stylesheets
			for(var i = 0; i < document.getElementsByTagName("link").length; i++)
			{
				var stylesheet = document.getElementsByTagName("link")[i];
				if(stylesheet.getAttribute("rel").match(/\bstylesheet\b/i) && stylesheet.getAttribute("title"))
				{
					var sheetname = stylesheet.getAttribute("title");
					var radio = document.createElement("input");
					radio.type = "radio";
					radio.name = unique_id + "_stylesheet";
					radio.value = sheetname;
					radio.setAttribute("onclick", "CSSPicker.setStylesheet(this.value);");
					if(stylesheet.disabled == false)
					{
						radio.checked = true;
					}
					var label = document.createElement("label");
					label.appendChild(radio);
					label.appendChild(document.createTextNode(sheetname));
					var li = document.createElement("li");
					li.appendChild(label);
					ul.appendChild(li);
				}
			}
		}
		else
		{
			document.getElementById(unique_id).removeAttribute("hidden");
		}

		// install close handler
		document.addEventListener("click", this.checkClick, true);
	}  // method open()


	this.close = function()
	{
		if(!document.getElementById(unique_id))
		{
			return;
		}

		// close css selector box
		document.getElementById(unique_id).setAttribute("hidden", true);
		document.removeEventListener("click", this.checkClick, true);
	}  // method close()


	this.setStylesheet = function(title)
	{
		var i, a, main;
		for(i = 0;(a = document.getElementsByTagName("link")[i]); i++)
		{
			if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title"))
			{
				a.disabled = true;
				if(a.getAttribute("title") == title)
				{
					a.disabled = false;
				}
			}
		}
	}  // method setStylesheet()


	this.checkClick = function(event)
	{
		var target = event.target;
		while(target)
		{
			if(target.id && target.id == unique_id)
			{
				return;
			}
			target = target.parentNode;
		}
		CSSPicker.close();
	}  // method checkClick()


}  // object CSSPicker
