var portals;
var columnamount = 5;

var template_button = '<img src="%s" onclick="crudaction(\'%s\',\'%s\',%s)" class="%s" />';
var template_groupheader = '<div class="lp-groupheader">%s</div>';
var template_groupheader_loggedin = '<div class="lp-groupheader"><table><tr><td>%s</td><td class="lp-option-column">%s</td><td class="lp-option-column">%s</td><td class="lp-option-column">%s</td></tr></table></div>';
var template_link = '<div class="lp-grouplink"><table><tbody><tr><td style="width:17px;"><div style="background-image: url(images/222222_256x240.png);background-repeat:no-repeat;background-position:%s;height: 16px;width: 16px;">&nbsp;</div></td><td><a href="%s" target="_blank">%s</a></td></tr></tbody></table></div>';
var template_link_loggedin = '<div class="lp-grouplink"><table><tbody><tr><td style="width:17px;"><div style="background-image: url(images/222222_256x240.png);background-repeat:no-repeat;background-position:%s;height: 16px;width: 16px;">&nbsp;</div></td><td><a href="%s" target="_blank">%s</a></td><td class="lp-option-column">%s</td>	<td class="lp-option-column">%s</td></tr></tbody></table></div>';

function getPortalUser() {return jaaulde.utils.cookies.get('LPU');};
function setPortalUser(value) {
	if (value) {jaaulde.utils.cookies.set('LPU', value, {minutesToLive: 15,path: '/'});}
	else {jaaulde.utils.cookies.del('LPU', {path: '/'});}
};

function getPortalTicket() {return jaaulde.utils.cookies.get('LPT');};
function setPortalTicket(value) {
	if (value) {jaaulde.utils.cookies.set('LPT', value, {minutesToLive: 15,path: '/'});}
	else {jaaulde.utils.cookies.del('LPT', {path: '/'});}	
};

function crudaction(action, type, args)
{
	$("#portal-link-dialog").css("display", "none");
	$("#portal-group-dialog").css("display", "none");
	$("#portal-dialog").css("display", "none");
	
	switch(action) {
		case "create":
			switch(type) {
				case "link":
				if (portals[args.pid] && portals[args.pid].groups[args.gid]) {
					portal_link_dialog_var.data = { "header": 'Add link to group "' +  portals[args.pid].groups[args.gid].name + '"', "gid": args.gid, "pid": args.pid };
					refreshLinkDialog("Insert");
					$("#portal-link-dialog").css("display", "inline");
				}
				break;
				case "group":
				if (portals[args.pid]) {
					portal_group_dialog_var.data = { "header": 'Add group to portal "' +  portals[args.pid].name + '"', "pid": args.pid };
					refreshGroupDialog("Insert");
					$("#portal-group-dialog").css("display", "inline");
				}
				break;
				case "portal":
					portal_dialog_var.data = { "header": "Add portal" };
					refreshPortalDialog("Insert");
					$("#portal-dialog").css("display", "inline");
				break;
				default:
					alert("Prob. not implemented yet.");
				break;
			}
		break;
		case "update":
			switch(type) {
				case "link":
				$.getJSON("r_link.php?lid=" + args.lid,
				function(data){
					portal_link_dialog_var.data = {
						"header": 'Update link from group "' +  portals[args.pid].groups[args.gid].name + '"',
						"name": data.items[0].name,
						"description": data.items[0].description,
						"url": data.items[0].uri,
						"icon": data.items[0].imageuri,
						"lid": args.lid,
						"gid": args.gid,
						"pid": args.pid
					};
					refreshLinkDialog("Update");				
					$("#portal-link-dialog").css("display", "inline");
				});
				break;
				case "group":
				$.getJSON("r_group.php?gid=" + args.gid,
				function(data){
					portal_group_dialog_var.data = {
						"header": 'Update group from portal "' +  portals[args.pid].name + '"',
						"name": data.items[0].name,
						"description": data.items[0].description,
						"url": data.items[0].uri,
						"icon": data.items[0].imageuri,
						"gid": args.gid
					};
					refreshGroupDialog("Update");				
					$("#portal-group-dialog").css("display", "inline");
				});
				break;
				case "portal":
				$.getJSON("r_portal.php?pid=" + args.pid,
				function(data){
					portal_dialog_var.data = {
						"header": 'Update portal',
						"name": data.items[0].name,
						"description": data.items[0].description,
						"url": data.items[0].uri,
						"icon": data.items[0].imageuri,
						"pid": args.pid
					};
					refreshPortalDialog("Update");				
					$("#portal-dialog").css("display", "inline");
				});
				break;
				default:
					alert("Prob. not implemented yet.");
				break;
			}
		break;
		case "delete":
			switch(type) {
				case "link":
				$.getJSON("r_link.php?lid=" + args.lid,
				function(data){
					portal_link_dialog_var.data = {
						"header": 'Delete link from group "' +  portals[args.pid].groups[args.gid].name + '"',
						"name": data.items[0].name,
						"description": data.items[0].description,
						"url": data.items[0].uri,
						"icon": data.items[0].imageuri,
						"lid": args.lid,
						"gid": args.gid,
						"pid": args.pid
					};
					refreshLinkDialog("Delete");				
					$("#portal-link-dialog").css("display", "inline");
				});
				break;
				case "group":
				$.getJSON("r_group.php?gid=" + args.gid,
				function(data){
					portal_group_dialog_var.data = {
						"header": 'Delete group from portal "' +  portals[args.pid].name + '"',
						"name": data.items[0].name,
						"description": data.items[0].description,
						"url": data.items[0].uri,
						"icon": data.items[0].imageuri,
						"gid": args.gid,
						"pid": args.pid };
					refreshGroupDialog("Delete");				
					$("#portal-group-dialog").css("display", "inline");
				});
				break;
				case "portal":
				$.getJSON("r_portal.php?pid=" + args.pid,
				function(data){
					portal_dialog_var.data = {
						"header": 'Delete portal',
						"name": data.items[0].name,
						"description": data.items[0].description,
						"url": data.items[0].uri,
						"icon": data.items[0].imageuri,
						"pid": args.pid };
					refreshPortalDialog("Delete");				
					$("#portal-dialog").css("display", "inline");
				});
				break;
				default:
					alert("Prob. not implemented yet.");
				break;
			}
		break;
		default:
			alert("Unknown action.");
		break;
	}
}

function getQueryVariable(variable) {
	// lose the ?
	var query = window.location.search.substring(1);
	var vars = query.split("&");

	for (var i=0;i<vars.length;i++) {
	var pair = vars[i].split("=");
	if (pair[0] == variable) {
		return pair[1];
		}
	}  
	// alert('Not found');
}

function loggedIn() {
	if (getPortalTicket() && getPortalTicket() != "") {
		return true;
	}
	return false;
}

function refreshGroup(groupid, portalid) {
	if (portals[portalid] && portals[portalid]["groups"][groupid])
	{
		var groups = portals[portalid]["groups"]; // synonym
		groups[groupid]["linkcontainer"].empty();
		
		// foreach link
		$.getJSON("r_link.php?gid=" + groupid,
		function(linkdata){
			$.each(linkdata.items, 
			function(k,linkitem){
				if (groups[groupid]) {
					var backgroundpositionvalue = "-64px -176px";
					if (linkitem.imageuri && linkitem.imageuri != "")
					{
						backgroundpositionvalue = linkitem.imageuri;
					}
					
					if (!loggedIn()) { groups[groupid]["linkcontainer"].append(sprintf(template_link, backgroundpositionvalue, linkitem.uri, linkitem.name)); }
					else {
						// LINK OPTIONS
						groups[groupid]["linkcontainer"].append(sprintf(template_link_loggedin, backgroundpositionvalue, linkitem.uri, linkitem.name,
						sprintf(template_button, "images/link_edit.png", "update", "link", "{lid: '" + linkitem.id + "', gid: '" + groupid + "', pid: '" + portalid + "'}", "lp-action-button"),
						sprintf(template_button, "images/link_delete.png", "delete", "link", "{lid: '" + linkitem.id + "', gid: '" + groupid + "', pid: '" + portalid + "'}", "lp-action-button")
						));
					}
				}
			});
		});
	}
};

var refreshPage = function() {
	$("#portals").accordion('destroy').empty();
	portals = new Object();
	groups = new Object();

	// get the portals
	var portalurl = "r_portal.php";
	var defaultuser = false;
	
	if (getPortalUser()) {
		portalurl = portalurl + "?user=" + getPortalUser();
	}
	else if (getQueryVariable("user")) {
		portalurl = portalurl + "?user=" + getQueryVariable("user");
	}
	else {
		portalurl = portalurl + "?user=default";
		defaultuser = true;
	}
		
	$.getJSON(portalurl,
	function(data){
		$.each(data.items, 
		function(i,portalitem){
		portals[portalitem.id] = new Object();
		// add the portal header
		portals[portalitem.id]["header"] = $('<div class="ui-corner-all"><a href="#">' + portalitem.name + '</a></div>');
		portals[portalitem.id]["name"] = portalitem.name;
		// add the portal table
		portals[portalitem.id]["table"] = $("<table />").attr("class","portal").attr("cellspacing","4");
		// add the group container to the portal
		portals[portalitem.id]["row"] = $("<tr />").attr("class","portalgroups");
		// add groups attribute
		portals[portalitem.id]["groups"] = new Object();
		var groups = portals[portalitem.id]["groups"]; // synonym
		
		var drophandler = function(event, ui) {
			var $item = ui.draggable;
			var $droppoint = this;
			var $portaloptions = $(this).droppable('option','customdata')
			var $groupoptions = $(ui.draggable).draggable('option','customdata')
			
			if (loggedIn()) {
				$username = getPortalUser();
				$ticket = getPortalTicket();
							
				$.post("u_portalgroup.php", { username:$username, ticket:$ticket, pid: $portaloptions.pid, gid: $groupoptions.gid, column: $portaloptions.column } );
			}
//			else { alert("Login required!"); }
				
			$item.fadeOut(function() {$item.prependTo($droppoint).fadeIn()});
		}
		
		portals[portalitem.id]["columns"] = []
		for (var index = 0; index < columnamount; index++) {
			portals[portalitem.id]["columns"][index] = $("<td />").attr("class","lp-portalcolumn").droppable({drop: drophandler, tolerance: 'pointer', accept: '.lp-group'})		
			portals[portalitem.id]["columns"][index].droppable('option','customdata',{pid: portalitem.id, column: index});		
		}
					
		// get the portal groups and add them to a sublist			
		$.getJSON("r_group.php?pid=" + portalitem.id,
			function(data){
				// for each group
				$.each(data.items, 
				function(j,groupitem){				
					groups[groupitem.id] = new Object();
					groups[groupitem.id]["name"] = groupitem.name;
					
					if (!loggedIn()) {
						groups[groupitem.id]["groupcontainer"] = $("<div />").attr("class","lp-group").html(sprintf(template_groupheader, groupitem.name));
					}
					else {
						// GROUP OPTIONS
						groups[groupitem.id]["groupcontainer"] = $("<div />").attr("class","lp-group")
							.html(sprintf(template_groupheader_loggedin, groupitem.name, 
							sprintf(template_button, "images/table_edit.png", "update", "group", "{pid: '" + portalitem.id + "',gid: '" + groupitem.id + "'}", "lp-action-button"),
							sprintf(template_button, "images/table_delete.png", "delete", "group", "{pid: '" + portalitem.id + "',gid: '" + groupitem.id + "'}", "lp-action-button"),
							sprintf(template_button, "images/link_add.png", "create", "link", "{pid: '" + portalitem.id + "',gid: '" + groupitem.id + "'}", "lp-action-button")
						));
					}					
					groups[groupitem.id]["groupcontainer"].draggable({ helper: 'clone' });
					groups[groupitem.id]["groupcontainer"].draggable('option', 'customdata', {gid: groupitem.id});
					groups[groupitem.id]["linkcontainer"] = $("<div />").attr("class","lp-grouplinks");

					// add the link container to the group
					groups[groupitem.id]["groupcontainer"].append(groups[groupitem.id]["linkcontainer"]);
					// add the group to the portal
					if (groupitem.columnno && groupitem.columnno < columnamount && groupitem.columnno >= 0) {
						portals[portalitem.id]["columns"][groupitem.columnno].append(groups[groupitem.id]["groupcontainer"]);
					}
					else {
						portals[portalitem.id]["columns"][0].append(groups[groupitem.id]["groupcontainer"]);
					}
				});
				
				// foreach link
				$.getJSON("r_link.php?pid=" + portalitem.id,
				function(data){
					$.each(data.items, 
					function(k,linkitem){
						if (groups[linkitem.groupid]) {
							var backgroundpositionvalue = "-64px -176px";
							if (linkitem.imageuri && linkitem.imageuri != "")
							{
								backgroundpositionvalue = linkitem.imageuri;
							}
							
							if (!loggedIn()) { groups[linkitem.groupid]["linkcontainer"].append(sprintf(template_link, backgroundpositionvalue, linkitem.uri, linkitem.name)); }
							else {
								// LINK OPTIONS
								groups[linkitem.groupid]["linkcontainer"].append(sprintf(template_link_loggedin, backgroundpositionvalue, linkitem.uri, linkitem.name,
								sprintf(template_button, "images/link_edit.png", "update", "link", "{lid: '" + linkitem.id + "', gid: '" + linkitem.groupid + "', pid: '" + linkitem.portalid + "'}", "lp-action-button"),
								sprintf(template_button, "images/link_delete.png", "delete", "link", "{lid: '" + linkitem.id + "', gid: '" + linkitem.groupid + "', pid: '" + linkitem.portalid + "'}", "lp-action-button")
								));
							}
						}
					});
				});
			});

		for (var index = 0; index < columnamount; index++) {
			portals[portalitem.id]["row"].append(portals[portalitem.id]["columns"][index]);
		}
		
		// PORTAL OPTIONS
		if (loggedIn()) {
				portals[portalitem.id]["table"].append(
				$('<tr><td style="background-color:white; border: solid 1px black;" colspan="' + columnamount + '"><table><tr><td style="width:100%;"><a href="#">Portal options: </a></td>'
				+ '<td>' + sprintf(template_button, "images/layout_edit.png", "update", "portal", "{pid: '" + portalitem.id + "'}", "lp-action-button")	+ '</td>'			
				+ '<td>' + sprintf(template_button, "images/layout_delete.png", "delete", "portal", "{pid: '" + portalitem.id + "'}", "lp-action-button")	+ '</td>'			
				+ '<td style="padding-right:8px;">' + sprintf(template_button, "images/table_add.png", "create", "group", "{pid: '" + portalitem.id + "'}", "lp-action-button")	+ '</td>'			
				+ '</tr></table></td></tr>'));
		}
		
		portals[portalitem.id]["table"].append(portals[portalitem.id]["row"]);
				
		$("#portals").append(portals[portalitem.id]["header"]);
		$("#portals").append($("<div />").append(portals[portalitem.id]["table"]));
		
        if ( i == 30 ) return false;
        });
		
		if (defaultuser) { $('#portals').accordion({ autoHeight: false, collapsible: true, active: false }); }
		else { $('#portals').accordion({ autoHeight: false, collapsible: true }); }
	});
}

$(document).ready(refreshPage);

$(document).ready(function() {
	if (getPortalUser() && getPortalTicket()) {
	$("#login-link").css("display","none");
	$("#logout-link").css("display","inline");
	
	$("#configure").css("visibility","visible");
	$("#create-portal").css("visibility","visible");
	}
});						   

function openlogindialog() {
	$("#liss-login-dialog").dialog({bgiframe: true, autoOpen: true, modal: true, minHeight: 50});
	$("#liss-login-dialog").dialog("open");
};

function login() {
	var user = $("#liss-login-dialog-username").attr("value");
	var pw = $("#liss-login-dialog-password").attr("value");
	
	$("#liss-login-dialog-password").attr("value", "");
	
	$.post("authenticate.php", { username: user, password: SHA1(pw) },
		function(data, textStatus){				
			if (data.ticket && data.ticket != "") {
				
				setPortalUser(user);
				setPortalTicket(data.ticket);			

				$("#login-link").css("display","none");
				$("#logout-link").css("display","inline");
				
				$("#configure").css("visibility","visible");
				$("#create-portal").css("visibility","visible");
				
				refreshPage();
			}
		}, "json");
	$("#liss-login-dialog").dialog("close");	
}
	
function logout() {
	$("#login-link").css("display","inline");
	$("#logout-link").css("display","none");
	
	$("#configure").css("visibility","hidden");
	$("#create-portal").css("visibility","hidden");
	
	setPortalUser(null);
	setPortalTicket(null);
	
	refreshPage();
}

var portaldrophandler = function(event, ui) {
	var $item = ui.draggable;
	var $portaloptions = $(ui.draggable).draggable('option','customdata');
	
	if (loggedIn()) {
		$username = getPortalUser();
		$ticket = getPortalTicket();
					
		$.post("u_userportal.php", { username:$username, 
			   ticket:$ticket, pid: $portaloptions.pid, operation: "add", priority: this.id.split('_')[1] } );

		var dropelement = "#" + this.id; 
		$item.fadeOut(function() {$item.appendTo($(dropelement)).fadeIn()});
	}
//	else { alert("Login required!"); }	
}

var portalremovehandler = function(event, ui) {
	var $item = ui.draggable;
	var $portaloptions = $(ui.draggable).draggable('option','customdata');
	
	if (loggedIn()) {
		$username = getPortalUser();
		$ticket = getPortalTicket();
					
		$.post("u_userportal.php", { username:$username, 
			   ticket:$ticket, pid: $portaloptions.pid, operation: "remove", priority: "" } );

		var dropelement = "#" + this.id; 
		$item.fadeOut(function() {$item.appendTo($(dropelement)).fadeIn()});
	}
//	else { alert("Login required!"); }	
}

function configureportals() {
	$("#configure-dialog").dialog({bgiframe: true, autoOpen: true, modal: true});
	$("#configure-dialog").dialog("open");
	
	$("#userportals_1").empty().html("<b>Top</b>");
	$("#userportals_2").empty().html("<b>Middle 1</b>");
	$("#userportals_3").empty().html("<b>Middle 2</b>");
	$("#userportals_4").empty().html("<b>Middle 3</b>");
	$("#userportals_5").empty().html("<b>Bottom</b>");
	$("#portallist").empty().html("<b>Available</b>");
	
	$.getJSON("r_portal.php?userpref=" + getPortalUser(),
	function(data){
		$.each(data.items, function(i,portalitem){
			// portal option
			var portaloption = $("<div />").html(portalitem.name);
			portaloption.draggable({ helper: 'clone' });
			portaloption.draggable('option', 'customdata', {pid: portalitem.id});
			
			var targetname = "#userportals_" + portalitem.priority;
			if ( $(targetname).length > 0 ) { portaloption.appendTo( $(targetname) ); }			
			else { portaloption.appendTo( $("#portallist") ); }			
		});
	});
	
	$("#portallist").droppable({drop: portalremovehandler, tolerance: 'pointer'});
	$("#userportals_1").droppable({drop: portaldrophandler, tolerance: 'pointer'});
	$("#userportals_2").droppable({drop: portaldrophandler, tolerance: 'pointer'});
	$("#userportals_3").droppable({drop: portaldrophandler, tolerance: 'pointer'});
	$("#userportals_4").droppable({drop: portaldrophandler, tolerance: 'pointer'});
	$("#userportals_5").droppable({drop: portaldrophandler, tolerance: 'pointer'});
}
