var lightbox = new Object();

lightbox.getAbsoluteOffset = function(obj){
	var offsetX = 0;
	var offsetY = 0;
	var o = obj;
	while(o != document.body.offsetParent){
		offsetX += o.offsetLeft;
		offsetY += o.offsetTop;
		o = o.offsetParent;
	}
	return [offsetX, offsetY];
};


lightbox.show = function (trigger){
	
	var lbcontainer = document.createElement("div");
	lbcontainer.style.marginTop = "-1em";
	jEl = $(document.getElementById("tpl-carcass") || window);

	var shield = document.createElement("div");
	shield.style.background = "#000000";
	shield.style.position = "absolute";
	shield.style.top = "0px";
	shield.style.zIndex = "1000";
	shield.style.left = (-document.getElementById('tpl-alloverwrap').offsetLeft) + "px";
	shield.style.width = Math.max(document.body.clientWidth, jEl.width()) + "px";
	shield.style.height = Math.max(document.body.clientHeight, jEl.height()) + "px";
	$(shield).fadeTo(0, .19);
	lbcontainer.appendChild(shield);
	lbcontainer.sheld = shield;
	lightbox.lbcontainer = lbcontainer;
	lbcontainer.close = function(){
		if (lightbox.lbcontainer){
			lightbox.lbcontainer.parentNode.removeChild(lightbox.lbcontainer);
			$(lightbox.lbcontainer).trigger("lightbox-close");
			delete lightbox.lbcontainer;
		}
	};
	
	var lightboxTable = document.createElement("table");
	lightboxTable.className = "tpl-lightbox";
	var tbody = document.createElement("tbody");
	
		var tr = document.createElement("tr");
			var td = document.createElement("th"); td.className = "tpl-lightbox-nw"; tr.appendChild(td);
			var td = document.createElement("th"); td.className = "tpl-lightbox-n"; tr.appendChild(td);
			var td = document.createElement("th"); td.className = "tpl-lightbox-ne"; tr.appendChild(td);
		tbody.appendChild(tr);
		var tr = document.createElement("tr");
			var td = document.createElement("th"); td.className = "tpl-lightbox-w"; tr.appendChild(td);
			var td = document.createElement("td"); td.className = "tpl-lightbox-content"; tr.appendChild(td); var lightboxContent = td;
			var td = document.createElement("th"); td.className = "tpl-lightbox-e"; tr.appendChild(td);
		tbody.appendChild(tr);
		var tr = document.createElement("tr");
			var td = document.createElement("th"); td.className = "tpl-lightbox-sw"; tr.appendChild(td);
			var td = document.createElement("th"); td.className = "tpl-lightbox-s"; tr.appendChild(td);
			var td = document.createElement("th"); td.className = "tpl-lightbox-se"; tr.appendChild(td);
		tbody.appendChild(tr);
		

	var lightboxTitle = document.createElement("a");
	lightboxTitle.innerHTML = (($(trigger).attr('title'))?($(trigger).attr('title')):(trigger.innerHTML));
	lightboxTitle.className = "tpl-lightbox-title";
	$(lightboxTitle).click(lightbox.lbcontainer.close)
	lightboxContent.appendChild(lightboxTitle);
	
	var classRegex = /(^|\s+)js-([^\s$]+)-trigger($|\s+)/.exec(trigger.className);
	if (classRegex){
		var clone = $(".js-" + classRegex[2] + "-container").clone(true);
		clone.css('display', 'block');

		$(lightboxContent).append(clone);
	}
	
	var offsets = lightbox.getAbsoluteOffset(trigger);
	
	lightboxTable.style.top = (offsets[1] - 7) + "px";
		
	lightboxTable.appendChild(tbody);
	
	lbcontainer.appendChild(lightboxTable);
	
	var attachPoint = (document.getElementById('tpl-alloverwrap') || document.body);
	
	attachPoint.appendChild(lbcontainer);
	$(shield).click(lightbox.lbcontainer.close)
}

lightbox.toggleAcc = function (trigger){
	
	jTrigger = $(trigger);
	jGroup = jTrigger.parents(".tpl-personal-group");
	jData = $("dd", jGroup);
	data = jData.get(0);
	
	
	if (jGroup.hasClass("tpl-personal-group-active")){
		jGroup.removeClass("tpl-personal-group-active");
		$("dd", jGroup).slideUp(300);
		return true;
	};
	
	
	$(".tpl-personal-group").each(function(i){
		dynData = $("dd", this).get(0);
		if (!dynData) return true;
		
		if (dynData == data){
			$(this).addClass("tpl-personal-group-active");
			$(dynData).slideDown(300);
		} else {
			$(this).removeClass("tpl-personal-group-active");
			$(dynData).slideUp(300);
		};
	})
	
}


lightbox.dispatcher = new Object();
lightbox.dispatcher.click = function(e){
	var trigger = (e.srcElement||e.target);
	if (/(^|\s+)js-[^\s$]+-trigger($|\s+)/.test(trigger.className)){
		lightbox.show(trigger);
		if (e.stopPropagation) e.stopPropagation();
		if (e.preventDefault) e.preventDefault();
		return false;
	};
	if (/(^|\s+)tpl-personal-group-toggler($|\s+)/.test(trigger.className)){
		lightbox.toggleAcc(trigger);
		if (e.stopPropagation) e.stopPropagation();
		if (e.preventDefault) e.preventDefault();
		return false;
	}
};

$(document).click(lightbox.dispatcher.click);
