/*global $, $$, Ajax, show, Constants, hide, get, prepareLinks, resize, WindowUtilities, BrowserDetect, doNifty */
//================= Description popups ==================\\
var Description = (function() {
	var cache = {}, topic;
	function success(request) {
		var description = JSON.parse(request.responseText);
		// format: {title,description}
		show(description);
		cache[topic] = description;
	}
	function failure(request) {
		var failed = {title:'Content not found',description:"We're sorry, but the requested content could not be found."};
		show(failed);
	}
	var url = Constants.ajax() + "getdescription",
		params = {method:'get', onSuccess:success, onFailure:failure},
		ajax, holder, closes = [], content, title, text, padding=60;

	function prepareLinks() {
		var links = document.getElementsByClassName('descPopup', 'a'),
			matches = [];
		for (var i=0; i<links.length; i++) {
			matches = links[i].href.match(/topic=(.*)/);
			if (matches && matches.length==2) {
				(function(topic) {
					links[i].setClick(function() { get(topic); return false; });
				})(matches[1]);
			}
		}
	}
	
	function get(t) {
		topic = t;
		if (cache[t]) {
			show(cache[t]);
		} else {
			params.parameters = "topic=" + t;
			ajax = new Ajax(url, params);
			ajax.send();
		}
	}
	function hide() {
		holder.hide();
		WindowUtilities.enableScreen();
		document.onscroll = null;
		window.onresize = null;
	}
	function show(desc) {
		if (desc.title === "" && desc.description === "") {
			failure();
			return;
		}
		title.update(desc.title.replace(/&quot;/g,'"'));
		text.update(desc.description.replace(/&quot;/g,'"'));
		//holder.show();
		holder.popup();
		
		document.onscroll = resize;
		window.onresize = resize;
		resize();
	}
	function resize() {
		content.style.height = "auto";
		var pageSize = WindowUtilities.getPageSize(),
			pageHeight = pageSize.windowHeight,
			objHeight = content.offsetHeight;
		
		if ((objHeight+padding) > pageHeight) { content.style.height = (pageHeight-padding)+"px"; }
		holder._centerMe();
	}

	function setup() {
		holder = document.create('div', 'descriptionHolder');
		content = holder.create('div', 'descriptionContent');
		title = content.create('h2', 'descriptionTitle');
		text = content.create('p', 'descriptionText');
		var mac = BrowserDetect.OS.toLowerCase() == "mac", cB = mac ? 1 : 0;
		for (var i=cB; i<cB + 1; i++) {
			closes[i] = holder.create('div', 'descClose'+(i+1), 'descriptionClose');
			closes[i].addEvent('mouseover', function() { this.addClassName('closeHover'); });
			closes[i].addEvent('mouseout', function() { this.removeClassName('closeHover'); });
			closes[i].setClick(hide);
		}
		holder.hide();

		document.body.appendChild(holder);
		if (window.doNifty) { doNifty("div#descriptionHolder", "transparent"); }

		prepareLinks();
	}
	window.addLoad(setup);

	return { get:get, hide:hide };
})();
