function personalise(){
	var podid = "";
	var podidfav = "";
	var handler = "";
	var location = "";
	var searchTimer; // the search key up timer
	
	this.initbackend = function(podid1, handler1) {
		podid = podid1;
		handler = handler1;
		location = "backend";
		var $perspod = $(podid);
		
		// TO DO SECTION		
		$perspod.delegate('.menu .deletetodospan','click',this.DeleteToDo);
		$perspod.delegate('.menu .markasdonespan','click',this.MarkAsDone);
		$perspod.delegate('.menu .markasnotdonespan','click',this.MarkAsNotDone);
		$('body').delegate('.menu #perslistfilter','submit',this.FilterTodo);
		$perspod.delegate('.menu #todotxtfilter','keyup',this.throttleSearchToDoString);
		$perspod.delegate('.rdotodofilter', 'click', this.throttleSearchToDoString);
		$perspod.delegate('.chktodofilter', 'click', this.throttleSearchToDoString);		
		$perspod.delegate('.menu #addtodospan','click',this.AddToDo);
		$perspod.delegate('.menu .edittodospan','click',this.EditToDo);
		
		//$("#todoolpod").delegate('.edittodospan','click',this.EditToDo);
		$("#todoolpod").delegate('.markasdonespan','click',this.MarkAsDone);
		// TO DO SECTION END 
		
		// FAV SECTION
		//$perspod.delegate('.menu #addfavanchor','click',this.AddFav);
		$perspod.delegate('.menu .deletefavspan','click',this.MarkToDeleteFav);
		$perspod.delegate('.menu .markedtodeletefavspan','click',this.UnMarkToDeleteFav);		
		$perspod.delegate('#DeleteMarkedFavs','click',this.DeleteFav);
		$('body').delegate('.menu #perslistfavfilter','submit',this.FilterFav);
		$perspod.delegate('.menu #favtxtfilter','keyup',this.throttleSearchFavString);
		$perspod.delegate('.rdofavfilter', 'click', this.throttleSearchFavString);
		$perspod.delegate('.menu .action1','click',PagesManager.clickEditPage);
		$perspod.delegate('.menu .editMediaFile','click',PodController.showFileEditor);
		
		$("#searchpages").delegate('.addfav,.removefav','click',this.AddFav);
		$("#mediaPod").delegate('.addfav,.removefav','click',this.AddFav);
		// FAV SECTION END
		
		// Preferences SECTION
		$("#PersEditPreferences").click(this.EditPreferences);		
		$("#dialog-message").delegate('#frmPreferences','submit',this.postPreferences);
		// END Preferences SECTION
	}
	
	this.initfrontend = function(podid1, podid2, handler1) {
		podid = podid1;
		podidfav = podid2;
		handler = handler1;
		location = "frontend";
		var $perspod = $(podid);
		var $perspodfav = $(podidfav);
		
		// TO DO SECTION
		$perspod.delegate('.deletetodospan','click',this.DeleteToDo);
		$perspod.delegate('.markasdonespan','click',this.MarkAsDone);
		$perspod.delegate('.markasnotdonespan','click',this.MarkAsNotDone);
		$('body').delegate('#perslistfilter','submit',this.FilterTodoFrontEnd);
		$perspod.delegate('#todotxtfilter','keyup',this.throttleSearchToDoFrontEnd);
		$perspod.delegate('.rdotodofilter', 'click', this.throttleSearchToDoFrontEnd);
		$perspod.delegate('.chktodofilter', 'click', this.throttleSearchToDoFrontEnd);	
		$perspod.delegate('#addtodospan','click',this.AddToDo);
		$perspod.delegate('.edittodospan','click',this.EditToDo);
		// TO DO SECTION END
		
		// FAV SECTION
		//$(podidfav).delegate('#addfavanchor','click',this.AddFav);
		$perspodfav.delegate('.deletefavspan','click',this.MarkToDeleteFav);
		$perspodfav.delegate('.markedtodeletefavspan','click',this.UnMarkToDeleteFav);
		$perspodfav.delegate('#DeleteMarkedFavs','click',this.DeleteFav);
		$('body').delegate('#perslistfavfilter','submit',this.FilterFavFrontEnd);
		$perspodfav.delegate('#favtxtfilter','keyup',this.throttleSearchFavFrontEnd);
		$perspodfav.delegate('.rdofavfilter', 'click', this.throttleSearchFavFrontEnd);
		$("#content_wrapper").delegate('.addfav,.removefav','click',this.AddFav);
		// FAV SECTION END
		
		// Preferences SECTION
		$("#PersEditPreferences").click(this.EditPreferences);
		// END Preferences SECTION
	}
	
	// TO DO SECTION
	var reloadpods = function(){
		if (location == "backend") {
			$(podid).find('.menu').load(handler + "?act=listtodos");
			$("#todoolpod").load(handler + "?act=listtodosforpod");
		} else if (location == "frontend") {
			$(podid).load(handler + "?act=listtodos");
		}
	}
	
	this.AddToDo = function(ev){
		ev.preventDefault();
		var $datepickerclassvar;
		var $dialogmessage = $("#dialog-message");
		
		$dialogmessage.load(handler+ "?act=showaddtodo",
			function() {
				$datepickerclassvar = $('.datepickerclass');
				$datepickerclassvar.datepicker({dateFormat: 'yy-mm-dd'});				
			}
		);
		
		$dialogmessage.dialog({
			title: 'Add To Do',
			modal: true,
			width: 600,
			height: 270,
			buttons: {
				Cancel: function() {
					$datepickerclassvar.datepicker("destroy");
					$dialogmessage.dialog( "close" );
					$dialogmessage.empty();
				},
				Submit: function() {
					
					if(ValidateAddToDo())
						$.post(
							handler+ "?act=actionaddtodo", 
							$("#AddToDo").serialize(),
							function(data){
								reloadpods();
								$datepickerclassvar.datepicker("destroy");
								$dialogmessage.dialog( "close" );
								$dialogmessage.empty();
								},
							"json"
						);
				}				
			},
			close: function() {
				$datepickerclassvar.datepicker("destroy");
				$dialogmessage.empty();
			}
		});
	}
	
	this.EditToDo = function(ev){
		ev.preventDefault();
		var $datepickerclassvar;
		var tmparray = this.href.split('/');
		var tmptodoid = tmparray[tmparray.length-1];
		var $dialogmessage = $("#dialog-message");
		
		$dialogmessage.load(handler+ "?act=showedittodo&todoid=" + tmptodoid,
			function() {
				$datepickerclassvar = $('.datepickerclass');
				$datepickerclassvar.datepicker({dateFormat: 'yy-mm-dd'});				
			}
		);
		$dialogmessage.dialog({
			title: 'Edit To Do',
			modal: true,
			width: 600,
			height: 270,
			buttons: {
				Delete: function(){
					if (confirm("Are you sure you want to delete this item?")) {
						$.get(
							handler+ "?act=deletetodo&todoid=" + tmptodoid,
							function(){								
								reloadpods();
								$datepickerclassvar.datepicker("destroy");
								$dialogmessage.dialog("close");
								$dialogmessage.empty();
							}
						);
					}
				},
				Cancel: function() {
					$datepickerclassvar.datepicker("destroy");
					$dialogmessage.dialog( "close" );
					$dialogmessage.empty();
				},
				Submit: function() {
					if(ValidateEditToDo())
						$.post(
							handler+ "?act=actionedittodo", 
							$("#EditToDo").serialize(),
							function(data){
								reloadpods();
								$datepickerclassvar.datepicker("destroy");
								$dialogmessage.dialog( "close" );
								$dialogmessage.empty();
								},
							"json"
						);
				}
			},
			close: function() {
				$datepickerclassvar.datepicker("destroy");
				$dialogmessage.empty();
			}
		});
	}
	
	this.DeleteToDo = function(ev){	
		ev.preventDefault();
		var tmparray = this.href.split('/');
		if(confirm("Are you sure you want to delete this item?"))
			$.get(
				handler+ "?act=deletetodo&todoid=" + tmparray[tmparray.length-1],
				function(){
					reloadpods();
				}
			);
	}
	
	this.MarkAsDone = function(ev){
		ev.preventDefault();
		$.get(
			handler+ "?act=marktodoasdone&todoid=" + this.title, 
			function(data){
				reloadpods();
			}
		);
	}
	
	this.MarkAsNotDone = function(ev){
		ev.preventDefault();
		$.get(
			handler+ "?act=marktodoasnotdone&todoid=" + this.title,
			function(data){
				reloadpods();
			}
		);		
	}
	
	this.throttleSearchToDoString = function (ev) {
		clearTimeout(searchTimer);
		searchTimer = setTimeout(
			FilterToDoForThrottle
		, 250);
	}
	
	var FilterToDoForThrottle = function(){
		$.post(
			handler+ "?act=listtodosfiltered", 
			$("#perslistfilter").serialize(),
			function(data){
				$('#todolistresults').html(data);
				$("#todotxtfilter").focus();
			}
		);
	}
	
	this.throttleSearchToDoFrontEnd = function (ev) {
		clearTimeout(searchTimer);
		searchTimer = setTimeout(
			FilterToDoForThrottleFrontEnd
		, 250);
	}
	
	var FilterToDoForThrottleFrontEnd = function(){
		$.post(
			handler+ "?act=listtodosfiltered", 
			$("#perslistfilter").serialize(),
			function(data){
				$('#todolistresults').html(data);
				$("#todotxtfilter").focus();
			}
		);
	}
	
	this.FilterTodo = function(ev){
		ev.preventDefault();
	}
	
	this.FilterTodoFrontEnd = function(ev){
		ev.preventDefault();
	}
	// TO DO SECTION END
	
	
	// FAV SECTION
	var reloadfavpods = function(){
		if (location == "backend") {
			$(podid).find('.menu').load(handler+ "?act=listfavs");
			$("#favolpod").load(handler+ "?act=listfavsforpod");
		} else if (location == "frontend") {
			$(podidfav).load(handler+ "?act=listfavs");
		}
	}
	
	this.AddFav = function(ev){
		ev.preventDefault();
		var link = this;
		var tmparray = link.href.split('/');
		var tmpurl = tmparray[tmparray.length-1].replace(/%7C/g, "|");
		
		if(this.className == "addfav"){
			$.get(
				handler+ "?act=actionaddfav&" + tmpurl,
				function(data){
					link.href=link.href + "&favid=" + data;
					link.className = "removefav";
				}
			);
		}
		else {
			tmpfavidarr = link.href.split('&');
			tmpfavid = tmpfavidarr[tmpfavidarr.length-1].split('=')[1];
			$.get(
				handler+ "?act=deletefav&favid=" + tmpfavid,
				function(){
					link.href = link.href.replace("&favid=" + tmpfavid,"");
					link.className = "addfav";
				}
			);
		}
		/*$.get(
			handler+ "?act=actionaddfav&" + tmpurl,
			function(){
				reloadfavpods();
			}
		);*/
	}
	
	this.MarkToDeleteFav = function(ev){
		ev.preventDefault();
		
		var tmparray = this.href.split('/');
		
		var tmphiddeninput = $("#lstFavToDel").val();
		
		tmphiddeninput = tmphiddeninput + tmparray[tmparray.length-1] + ",";
		
		$("#lstFavToDel").val(tmphiddeninput);
		
		this.className="markedtodeletefavspan";
		
		if($("#perslistfavdelete").is(":hidden"))
			$("#perslistfavdelete").slideToggle(400);
	}
	
	this.UnMarkToDeleteFav = function(ev){
		ev.preventDefault();
		
		var tmparray = this.href.split('/');
		
		var tmphiddeninput = $("#lstFavToDel").val();
		
		tmphiddeninput = tmphiddeninput.replace(tmparray[tmparray.length-1] + ",","");
		
		$("#lstFavToDel").val(tmphiddeninput);
		
		this.className="deletefavspan";			
	}
	
	this.DeleteFav = function(ev){
		ev.preventDefault();
		
		var tmplistfavs = $("#lstFavToDel").val();
		
		if(tmplistfavs != "")
			$.get(
				handler+ "?act=deletefav&favid=" + tmplistfavs + "0",
				function(){
					reloadfavpods();
				}
			);
	}
	
	this.throttleSearchFavString = function (ev) {		
		clearTimeout(searchTimer);
		searchTimer = setTimeout(
			FilterFavForThrottle
		, 250);
	}
	
	var FilterFavForThrottle = function(){
		$.post(
			handler+ "?act=listfavsfiltered", 
			$("#perslistfavfilter").serialize(),
			function(data){
				$('#favlistresults').html(data);
				$("#favtxtfilter").focus();
			}
		);		
	}
	
	this.throttleSearchFavFrontEnd = function (ev) {		
		clearTimeout(searchTimer);
		searchTimer = setTimeout(
			FilterFavForThrottle
		, 250);
	}
	
	this.FilterFavFrontEndForThrottle = function(){
		$.post(
			handler+ "?act=listfavsfiltered", 
			$("#perslistfavfilter").serialize(),
			function(data){
				$('#favlistresults').html(data);
				$("#favtxtfilter").focus();
			}
		);
		return false;
	}
	
	this.FilterFavFrontEnd = function(ev){
		ev.preventDefault();
	}
	
	this.FilterFav = function(ev){
		ev.preventDefault();
	}
	// FAV SECTION END
	
	// Preferences SECTION
	this.EditPreferences = function(ev){
		ev.preventDefault();
		var $dialogmessage = $("#dialog-message");
		
		$dialogmessage.load(handler+ "?act=editpreferences");
		$dialogmessage.dialog({
			title: 'Preferences',
			modal: true,
			width: 800,
			height: 470,
			position: ['center',50],
			buttons: {
				Back: function() {
					$dialogmessage.dialog( "close" );
					$dialogmessage.empty();
				},
				Submit: function() {
					if (validateForm()) {
						if (document.getElementById('useprefs-password').value) {
							$.get(handler + '?act=passwordReused&userid=' + document.getElementById('useprefs-userid').value + '&pw=' + encodeURIComponent(document.getElementById('useprefs-password').value), function(data){
								if (parseInt(data) == 0) {
									$.post(handler + "?act=editpreferencesaction", $("form[name=frmPreferences]").serialize(), function(data){
										$dialogmessage.html(data);
									}, "html");
								}
								else {
									alert('This password has been used by this user recently. Please choose a different password.');
								}
							});
						} else {
							$.post(	handler+ "?act=editpreferencesaction",$("form[name=frmPreferences]").serialize(),function(data){
								$dialogmessage.html(data);
							},"html");
						}
					}
				}
			},
			close: function() {
				$dialogmessage.empty();
			}
		});
	}
	
	this.postPreferences = function(ev){		
		ev.preventDefault();
	}
	// END Preferences SECTION
}

function personaliseformodules(handler){
	
	var getParamsFromHREF = function (href) {
		var tokens = href.split("&");
		var ret = {};
		for (var i = 0; i < tokens.length; i++) {
			var keyVal = tokens[i].split("=");
			ret[keyVal[0]] = keyVal[1];
		}
		return ret;
	}

	
	// FAV SECTION
	this.Test = function(ev){
		ev.preventDefault();
		alert(3);
	}
	
	this.AddFav = function(ev){
		ev.preventDefault();
		var link = this;
		var tmparray = link.href.split('/');
		var tmpurl = tmparray[tmparray.length-1].replace(/%7C/g, "|");
		
		if(this.className == "addfav"){
			$.get(
				handler+ "?act=actionaddfav&" + tmpurl,
				function(data){
					link.href=link.href + "&favid=" + data;
					link.className = "removefav";
				}
			);
		}
		else {
			tmpfavidarr = link.href.split('&');
			tmpfavid = tmpfavidarr[tmpfavidarr.length-1].split('=')[1];
			$.get(
				handler+ "?act=deletefav&favid=" + tmpfavid,
				function(){
					link.href = link.href.replace("&favid=" + tmpfavid,"");
					link.className = "addfav";
				}
			);
		}
		/*$.get(
			handler+ "?act=actionaddfav&" + tmpurl,
			function(){
				reloadfavpods();
			}
		);*/
	}
	
	$("body").delegate('.addfav,.removefav','click',this.AddFav);
	// FAV SECTION END
}
