$(document).ready( function(){
	
	// Fix ie Buggs
	fixZIndexForIE();
	
	// Init Eventhandlers for public behaviour.
	initDirClickEvent();
	initDisplayFileName();
	
	$(".file").each( function() {
		$(this).html($(this).html() + '<div style="position: absolute; top: 3px; right: 3px; z-index: 300; "><img src="images2/addToMail.png" alt="addToMail" valign="top" style="cursor: pointer;"/></div>');
	});
	
	initAddLinkToMailFoo();
	
	// init Admin Functions
	if(isAdmin() == true){
		initUserSelection();
		initCheckBoxes();
		initArchiveFolder();
		initTextAreaEvents();
	}
	
	
	
	
});

/*
 * Function: initDirClickEvent
 * ------------------------
 * This function inits the events triggered when clicking on a folder.
 */
function initDirClickEvent() {
	
	$(".folder img[alt=folder]").click( function() {
		var pid = $(this).parent().attr("poster_id");
		$("div[parentId=" + pid + "]").toggle();
	});
	
	$(".folder .dirName").click( function() {
		var pid = $(this).parent().attr("poster_id");
		$("div[parentId=" + pid + "]").toggle();
	});
}

/*
 * Function: initDisplayFileName
 * ------------------------
 * This function inits the events triggered when hovering on a file.
 */
function initDisplayFileName() {
	$(".file").hover( function() {
		$(this).find('.fileNameBox').css('display','inline');
	}, function() {
		$(this).find('.fileNameBox').css('display','none');
	});
}


/*
 * Function: fixZIndexForIE
 * ------------------------
 * This function makes sure that all the files has a falling z-index so that 
 * hover effects will walk over the next object
 */

function fixZIndexForIE() {
	var zIndex = 10000;
	$(".file").each( function(){
		zIndex--;
		$(this).css("z-index",zIndex);
	});
}

/*
 * Function: doLogout
 * ------------------------
 * This function is used to logout from current session.
 */
function doLogout() {
	$.post("admin/login.lasso", {reason: "logout"}, function(data) {
		var url = new String(window.location);
		var a = url.indexOf("!");
		if(a != -1) {
			url = url.substring(0, a-1);
		}
		window.location = url;
	});
}

/*
 * Function: initUserSelection
 * ------------------------
 * Creats the userlist ands the events for user selection.
 */
function initUserSelection() {
	
	$('.userSelect').hover( function() {
		if($(this).attr("selected").equal("true"))
			$(this).css('background','url(images2/select_bg_selected.png) repeat-x');
	}, function() {
		if($(this).attr("selected").equal("true"))
			$(this).css('background','url(images2/select_bg.png) repeat-x');
	});
	
	$('.userSelect').click( function() {
		$(".userSelect[selected=true]").each( function() {
			$(this).attr('selected','false');
			$(this).css('background','url(images2/select_bg.png) repeat-x');
		});
		$(this).attr('selected','true');
		$(this).css('background','url(images2/select_bg_selected.png) repeat-x');
		$('.adminSettings').attr('userId',$(this).attr('userId'));
		initCheckBoxes();
	});
}


/*
 * Function: initCheckBoxes
 * ------------------------
 * Creats and/or updates the stat of the checkboxes
 */
function initCheckBoxes() {
	var uid = $('.adminSettings').attr("userId");
	var display = $('.adminSettings').attr("display");
	
	// Following statement should only be runned once.
	if(display != "true"){
		$(".folder img[alt=folder]").each( function() {
			if($(this).parent().parent('.folder').length == 0){
				$(this).before('<img src="images2/add_files_to_archive.png" width="15" height="15" alt="addToArchive" style="cursor: pointer;" /> <input type="checkbox" name="addFolder" />');
			}
			else
			{
				$(this).before('<input type="checkbox" name="addFolder" />');
			}
		});
		
		$(".file").each( function() {
			$(this).html($(this).html() + '<div class="opacityBox"></div><div style="position: absolute; top: 5px; right: 10px; z-index: 300; "><img src="images2/addToMail.png" alt="addToMail" valign="top" style="cursor: pointer;"/> <input type="checkbox" name="addFile" style="position: relative; top: -3px;" /></div>');
		});
		$('.adminSettings').attr("display","true");
		
		// Inits the events assossiated to checkboexs
		initRightsFoo();
		initAddLinkToMailFoo();
	}
	
	
	
	$("input[name=addFolder]").each( function() {
		var rights = $(this).parent().attr("rights");
		rights = rights.split(";");
		
		if($.inArray(uid, rights) > -1){
			$(this).attr('checked',true);
		}
		else
			$(this).attr('checked',false);
	});
	
	
	$("input[name=addFile]").each( function() {
		var rights = $(this).parent().parent().attr("rights");
		if(rights != null)
			rights = rights.split(";");
		else
			rights = Array();
		
		if($.inArray(uid, rights) > -1){
			$(this).attr('checked',true);
		}
		else
			$(this).attr('checked',false);
		
	});
}

/*
 * Function: initRightsFoo
 * ------------------------
 * This function inits all events based on adding or removing rights for a current user.
 */
function initRightsFoo() {

	$("input[name=addFolder]").click( function() {
		
		var uid = $('.adminSettings').attr("userId");
		var rights = $(this).parent().attr("rights");
		var poster_id = $(this).parent().attr("poster_id");
		
		if($(this).attr("checked")){
			var rights = fixRights(uid, rights, true);
			$(this).parent().attr("rights",rights);
			setDBRights(rights, poster_id);
			updateTree(poster_id, true, true);
		}
		else
		{
			var rights = fixRights(uid, rights, false);
			$(this).parent().attr("rights",rights);
			setDBRights(rights, poster_id);
			updateTree(poster_id, true, false);
		}
	});
	
	$("input[name=addFile]").click( function() {
			
		var uid = $('.adminSettings').attr("userId");
		var rights = $(this).parent().parent().attr("rights");
		var poster_id = $(this).parent().parent().attr("poster_id");
		
		
		if($(this).attr("checked")){
			var rights = fixRights(uid, rights, true);
			$(this).parent().parent().attr("rights",rights);
			setDBRights(rights, poster_id);
			updateTree(poster_id, false, true);
		}
		else
		{
			var rights = fixRights(uid, rights, false);
			$(this).parent().parent().attr("rights",rights);
			setDBRights(rights, poster_id);
			updateTree(poster_id, false, false);
		}
	});
	
	
}

/*
 * Function: fixRights
 * ------------------------
 * This function fixes the rights string.
 * Returns a new string with the working rights
 */
function fixRights(uid, rights, add){
	
	var newRights = "";
	if(rights != null){
	rights = rights.split(';');
	for(var i in rights)
		if(rights[i] != uid && rights[i] != "")
			newRights += rights[i] + ';';

	}
	
	if(add)
		newRights += uid + ';';
	
	return newRights;
}

/*
 * Function: setDBRights
 * ------------------------
 * This function is used to update the database records with the new rights 
 * assossiated to a folder or a file. If directly added to a folder,
 * then the folder ands it's childrens are added/removed from the current user.
 */
function setDBRights(rights, poster_id) {
	$.post('ajax/setUserRights.lasso', { poster_id: poster_id, rights: rights });
}

function updateTree(poster_id, folder, add){
	
	if(folder){
		// If Folder
		if(add){
			// Add folder
			$(".folder[poster_id= " + poster_id + "]").each( function() {
				var uid = $('.adminSettings').attr("userId");
				var parentid = $(this).attr("parentid");
				
				// Add children files
				$(this).find(".file").each( function() {
					var uid = $('.adminSettings').attr("userId");
					var rights = fixRights(uid, $(this).attr("rights"), true);
					var poster_id = $(this).attr("poster_id");
					$(this).attr("rights",rights);
					setDBRights(rights, poster_id);
					$(this).find("input[name=addFile]").each( function() {
						$(this).attr("checked",true);
					});
				});
				
				// Add children folders
				$(this).find(".folder").each( function() {
					var uid = $('.adminSettings').attr("userId");
					var rights = fixRights(uid, $(this).attr("rights"), true);
					var poster_id = $(this).attr("poster_id");
					$(this).attr("rights",rights);
					setDBRights(rights, poster_id);
					$(this).find("input[name=addFolder]").each( function() {
						$(this).attr("checked",true);
					});
				});
				updateParentRoot(uid, parentid ,true);
			});
		}
		else
		{
			// Delete Folder
			$(".folder[poster_id= " + poster_id + "]").each( function() {
				var uid = $('.adminSettings').attr("userId");
				var parentid = $(this).attr("parentid");
				
				// Delete children files
				$(this).find(".file").each( function() {
					var uid = $('.adminSettings').attr("userId");
					var rights = fixRights(uid, $(this).attr("rights"), false);
					var poster_id = $(this).attr("poster_id");
					$(this).attr("rights",rights);
					setDBRights(rights, poster_id);
					$(this).find("input[name=addFile]").each( function() {
						$(this).attr("checked",false);
					});
				});
				
				// Delete children folders
				$(this).find(".folder").each( function() {
					var uid = $('.adminSettings').attr("userId");
					var rights = fixRights(uid, $(this).attr("rights"), false);
					var poster_id = $(this).attr("poster_id");
					$(this).attr("rights",rights);
					setDBRights(rights, poster_id);
					$(this).find("input[name=addFolder]").each( function() {
						$(this).attr("checked",false);
					});
				});
				updateParentRoot(uid, parentid ,false);
			});
		}
	}
	else
	{
		// If file
		if(add){
			$(".file[poster_id= " + poster_id + "]").each( function() {
				var uid = $('.adminSettings').attr("userId");
				var parentid = $(this).attr("parentid");
			
				updateParentRoot(uid, parentid ,true);
			});
		}
		else
		{
			$(".file[poster_id= " + poster_id + "]").each( function() {
				var uid = $('.adminSettings').attr("userId");
				var parentid = $(this).attr("parentid");
			
				updateParentRoot(uid, parentid ,false);
			});
		}
	}
}

/*
 * Function: updateParentRoot
 * ------------------------
 * This function updates the parent root with the selected folder as origin.
 * Then moves its way back. Works for adding or deleting parentroot.
 */
function updateParentRoot(uid, parentid ,add){
	if(parentid != null){
		var rights = $(".folder[poster_id=" + parentid + "]").attr("rights");
		var nextParent_id = $(".folder[poster_id=" + parentid + "]").attr("parentid");
		
		if(add){
			// Add folder rights
			rights = fixRights(uid, rights, true);
			$(".folder[poster_id=" + parentid + "]").attr("rights", rights);
			$(".folder[poster_id=" + parentid + "]>input[name=addFolder]").attr("checked",true);
			setDBRights(rights, parentid);
			if(nextParent_id != null)
				updateParentRoot(uid, nextParent_id, true);
		}
		else
		{	
			// Delete Folder rights
			if(!hasChildrens(uid, parentid)){
				rights = fixRights(uid, rights, false);
				$(".folder[poster_id=" + parentid + "]").attr("rights", rights);
				$(".folder[poster_id=" + parentid + "]>input[name=addFolder]").attr("checked",false);
				setDBRights(rights, parentid);
				if(nextParent_id != null)
					updateParentRoot(uid, nextParent_id, false);
			}
		}
	}
}

/*
 * Function: hasChildrens
 * ------------------------
 * Checks if a given folder has rights to a child object due to the current user
 */
function hasChildrens(uid, poster_id){
	var found = false;
		$(".folder[poster_id=" + poster_id + "]>.folder").each( function() {
			if(hasRights(uid, $(this).attr("poster_id"), true))
				found = true;
		});
	
	if(!found){
		$(".folder[poster_id=" + poster_id + "]>.file").each( function() {
			if(hasRights(uid, $(this).attr("poster_id"), false))
				found = true;
		});
	}
	
	return found;
}

/*
 * Function: hasChildrens
 * ------------------------
 * Checks if a given user has rights to a given folder or file
 */
function hasRights(uid, poster_id, folder){
	if(folder){
		// Current object is a folder
		var rights = $(".folder[poster_id=" + poster_id +"]").attr("rights");
		if(rights != null){
			rights = rights.split(';');
			for(var i in rights)
				if(rights[i] == uid)
					return true;
		}
	}
	else 
	{
		// Current object is a file
		var rights = $(".file[poster_id=" + poster_id +"]").attr("rights");
		if(rights != null){
			rights = rights.split(';');
			for(var i in rights)
				if(rights[i] == uid)
					return true;
		}
	}
	return false;
}


function initAddLinkToMailFoo() {
	
	
	$("img[alt=addToMail]").click( function() {
		var rootDir = $(this).parent().parent().attr("rootDir");
		var filename = $(this).parent().parent().attr("file");
		var poster_id = $(this).parent().parent().attr("poster_id");
		
		if($(".linkMailList>.container").find(".mailLinkRow").size() > 0)
			$(".linkMailList>.container").html($(".linkMailList>.container").html() + '<div class="mailLinkRow" poster_id="' + poster_id + '"><div class="name">' + filename + '</div><input type="hidden" name="rootDir" value="' + rootDir + '" /><div class="delThisLink"></div></div>\n');
		else {
			$(".linkMailList>.container").css("text-align","left");
			$(".linkMailList>.container").attr("align","left");
			$(".linkMailList>.container").html('<div class="mailLinkRow" poster_id="' + poster_id + '"><div class="name">' + filename + '</div><input type="hidden" name="rootDir" value="' + rootDir + '" /><div class="delThisLink"></div></div>\n');
		}
		
		$(".delThisLink").click( function(){
			$(this).parent().remove();
		});
		
	});
	
	$('.linkMailList>.container>.item').hover( function() {
		if($(this).attr("selected") != "true")
			$(this).css('background','#FFFFFF');
	}, function() {
		if($(this).attr("selected") != "true")
			$(this).css('background','#E9E9E9');
	});
	
	$('.linkMailList>.container>.item').click( function() {
		$(".linkMailList[selected=true]").each( function() {
			$(this).attr('selected','false');
			$(this).css('background','#E9E9E9');
		});
		$(this).attr('selected','true');
		$(this).css('background','#FFFFFF');
	});
}

function submitMailLinkForm() {
	
	$(".linkMailList").each( function() {
		var kunder_id = $(this).attr("kunder_id");
		var kat_id = $(this).attr("kat");
		var ukat_id = $(this).attr("ukat");
		var emailText = $(this).find("textarea").val();
		
		if(emailText == "Skriv in ett personligt meddelande...")
			emailText = "";
			
		var emailAddr = $(this).find("input[name=emailAddr]").attr("value");
		var linkRows = "";
		$(".mailLinkRow").each( function() {
			newLink = $(this).find(".name").html();
			newLink += ":" + $(this).find("input[name=rootDir]").attr("value");
			linkRows += newLink + ";";
		});
		
		linkRows = linkRows.slice(0, -1);
		
		$.post('sendLinkEmail.lasso', {
			kunder_id : kunder_id,
			kat_id : kat_id,
			ukat_id : ukat_id,
			mailTo : emailAddr,
			mailText : emailText,
			linkRows : linkRows
		}, function(data){
			if(parseInt(data) == 0){
				$(".sentOK").html('<img src="images2/ok.gif" alt="" />');
			}
			else
			{
				$(".sentOK").html('<img src="images2/bad.gif" alt="" />');
			}
		});
		
	});
}

function isAdmin() {
	
	if($(".adminSettings").attr("userId") >= 0)
		return true;
	else
		return false;
}


function initArchiveFolder(){
	
	$("img[alt=addToArchive]").click(function() {
		var poster_id = $(this).parent().attr("poster_id");
		var archived = $(this).parent().attr("archived");
		var kunder_id = $(".adminSettings").attr("kunder_id");
		var kat_id = $(".adminSettings").attr("kat");
		var ukat_id = $(".adminSettings").attr("ukat");
		$.post('ajax/setArchiveStatus.lasso', {
			poster_id : poster_id,
			archived : archived,
			kunder_id : kunder_id,
			kat_id : kat_id,
			ukat_id : ukat_id
		}, function(data){
			location.reload();
		});
	});
}


function initTextAreaEvents() {
	
	$('.emailText textarea').focus( function() {
		if($(this).val() == ("Skriv in ett personligt meddelande..."))
			$(this).val("");		
	});
	
	$('.emailText textarea').blur( function() {
		if($(this).val() == null || $(this).val() == "")
			$(this).val("Skriv in ett personligt meddelande...");		
	});

}


