if (typeof aisen == 'undefined') {
	var aisen = {};	
}

// =====
// ADMIN
// =====

aisen.admin = {
	menuClick: function(id) {
		var $this = $("#" + id);
		var querydata = $this.data("parameters");
		querydata = aisen.qs.createQP(querydata);
				
		$("#cookie_trail .level2").html($this.text());
		$("#admin_content_heading").empty();
		$("#admin_content").empty().addClass("loading"); 

		$("#sidemenu .current").removeClass("current");
		
		$this.addClass("current");

		aisen.async.trigger(querydata);
	},
	
	linkClick: function(id) {
		var $this = $("#" + id); 
		var querydata = $this.data("parameters");
		
		querydata = aisen.qs.createQP(querydata);
		
		if (querydata) {
			aisen.async.trigger(querydata);
		}
	},
	
	redirect: function(viewscript) {
		// generic page redirect
		var page = "";
		if (typeof(viewscript) != 'undefined') {
			page = viewscript;
		}
		else {
			page = '/';
		}
		window.location = page;
	},
	
	tabClick: function(id) {
		var $this = $("#" + id); 
		var querydata = $this.data("parameters");
		
		querydata = aisen.qs.createQP(querydata);
		
		if (querydata) {
			$(".tabs li").removeClass("current");

			$this.addClass("current");

			// sub menu
			var $parent = $this.parents(".tab_sub");
			if ($parent.length == 1) {
				if (!$parent.hasClass("current")) {
					$parent.addClass("current");
				}
				
				// hide the submenu
				$parent.removeClass("over");
			}
	
			$("#tab_content").addClass("loading"); 
			aisen.async.trigger(querydata);
		}
	},
		
	tabOver: function(id) {
		var $this = $("#" + id);
		if ($this.hasClass("tab_sub")) {
			$("li", $this).width($this.outerWidth() - 1);
		}
		
		$("#" + id).addClass("over");
	},
	
	tabOut: function(id) {
		$("#" + id).removeClass("over");
	},
	
	returnRandomNo: function() {
		return Math.floor(Math.random() * 10000000000000);
	}
};


aisen.gallery = {
	setUser: function(id) {
		var $this = $("#" + id);
		var $selection_list_val = $("#selection_list");
		var $permission_selection = $("#permission_selection");
		var selection_list_val = $selection_list_val.val();
		var selection_list = new Array();

		id = $this.attr('id').replace("select_item_", "");

		if (selection_list_val != "") {
			selection_list = selection_list_val.split('|');
		}
		
		// assign into working array
		if ($this.closest('.rhs_selection_inner').length > 0) {
			$this.clone().appendTo('.lhs_selection_inner',  $permission_selection); 
			for (var i = 0; i <= selection_list.length; i++) {
				if (id == selection_list[i]) {
					selection_list.splice(i, 1);
				}
			}
		}
		else if ($this.closest('.lhs_selection_inner').length > 0) {
			$this.clone().appendTo('.rhs_selection_inner',  $permission_selection); 
			selection_list.push(id);
		}
		
		// assign back to input element		
		if (selection_list.length > 1) {
			$selection_list_val.val(selection_list.join('|'));
		}
		else if (selection_list.length == 1) {
			$selection_list_val.val(selection_list[0])
		}
		else {
			$selection_list_val.val("");
		}
		
		// remove the clicked item
		$this.remove();
	},
	
	initSort: function() {
		$("#gallery_sort_list").sortable({
			update: function(event, ui) {
				var ids = ""; 
				
				$(this).find("li").each(function() {
					ids += $(this).attr("id") + "|";
				});
				
				ids = ids.substring(0, ids.length-1); 
				
				$("#gallery_sequence").val(ids);
			}
		});
	}
};

// ============
// QUERY STRING
// ============

aisen.qs = {
	// querystring parameters
	createQP: function(data) {
		var parameters, parameter, key, value, querydata = "";
		if (data) {
			parameters = data.replace(" ", "").split(",");
			for (var i=0; i< parameters.length; i++) {
				parameter = parameters[i].split("|");
				if (parameter[0] && parameter[1]) {
					querydata += parameter[0] + "=" + parameter[1] + (i != parameters.length-1?"&":"");
				}
			}
		}
		return querydata;
	}
};


// ====
// FORM
// ====

aisen.form = {
	send: function(form_id) {
		var $form = $("#" + form_id);
		var $submit = $("input[type='submit']", $form);

		var submit_data = $submit.data();
		var proceed = true;
		
		if (submit_data && submit_data.confirmation) {
			proceed = confirm(submit_data.confirmation.split("|")[1]);
		}
		
		if (proceed) {
			var $tiny_mce_editor = $("#tiny_mce_editor textarea");
			if ($tiny_mce_editor.length > 0) {
				tinyMCE.triggerSave();
			}

			var form_data = $form.serialize();
			aisen.async.trigger(form_data, $form);
		}
		return false;
	},
	
	initTextbox: function () {
		var $table_edit = $("table.edit");
		var $textarea = $("textarea", $table_edit);
		
		// disable enter press for textareas
		$table_edit.bind("keypress", function(e) {
			if ($(e.target).is("textarea")) {
				if (e.keyCode == 13) {
					e.preventDefault();
				}
			}
		});

		// show remaining chars		
		$textarea.bind("focus", function() {
			$(this).parent().find(".char_count").slideDown(100);
		});
		
		// hide remaining chars
		$textarea.bind("blur", function() {
			$(this).parent().find(".char_count").slideUp(100);
		});	
		
		// calculate and show remaining chars
		$table_edit.bind("keyup", function(e) {
			var $this = $(e.target);
			if ($this.is("textarea")) {
				var maxChars = 64;
				var remainingChars = 0;
				var chars = $this.val().length;
				if (chars > maxChars) {
					$this.val($this.val().substring(0, maxChars));
					chars = $this.val().length;
				}
				remainingChars = maxChars - chars;
				
				$this.parent().find(".char_count span").html(remainingChars);
			}
		});
	}
};


// ==================
// TABLES & DATAGRIDS
// ==================

aisen.datagrid = {
	rowHover: function(id) {
		$("#" + id).toggleClass("over");
	},
	
	rowClick: function(id) {
		var querydata = $("#" + id).data("parameters");
		querydata = aisen.qs.createQP(querydata);
		
		aisen.async.trigger(querydata);
	}
};


// =====
// ASYNC
// =====

aisen.async = {
	trigger: function(formdata, $form) {
		var form_exist = false;
		var response_exist = false;
		
		// loading status
		if ($form && $form.length == 1) {
			form_exist = true;
			var $response = $(".response", $form);
			if ($response.length == 1) {
				response_exist = true;
			}
		}
		
		if (formdata) {			
			$.ajax({
				url: "/_process.php",
				cache: false,
				data: formdata,
				type: "POST",
				dataType: "json",
				
				beforeSend: function() {
					// hide all messages
					aisen.message.hideAll();
					
					// show the loading status
					if (form_exist && response_exist) {
						$response.empty().addClass("loading").show();
					}
				},
				
				success: function(data) {
					if (data) {
						if (data.validated) {
							// redirect page
							if (data.redirect) {
								aisen.admin.redirect(data.redirect);
							}

							// remove loading status
							if (response_exist && data.response) {
								$response.removeClass("loading");
							}
							
							// heading
							if ((data.heading_target != "") && (data.heading != "")) {
								$("#" + data.heading_target).html(data.heading);
							}
							
							// content
							if (data.content_target && data.content) {
								$("#" + data.content_target).removeClass("loading").html(data.content);
							}

							// content2
							if ((data.content_target2 != "") && (data.content2 != "")) {
								$("#" + data.content_target2).removeClass("loading").html(data.content2);
							}

							// tinymce update
							if (data.tinymce) {
								$(".tiny_mce").html(data.tinymce);
							}
							
							// show status/notification/errors
							if (data.status && data.status.length > 0) {
								aisen.message.show(data.status, 'status');
							}
							else if (data.notification && data.notification.length > 0) {
								aisen.message.show(data.notification, 'notification');
							}
							else if (data.errors && data.errors.length > 0) {
								aisen.message.show(data.errors, 'error');
							}
							
							// show the response msg
							if (response_exist && data.response) {
								$response.html(data.response);
							}
						}
						else {
							// redirect page
							if (data.redirect) {
								aisen.admin.redirect(data.redirect);
							}
							
							// show errors (i.e. field validation)
							aisen.message.show(data.errors, 'error');
						}
					}
				},
				
				complete: function(data) {
					// hide loading status
					if (response_exist) {
						$response.delay(3000).hide(50);
					}
				},
				
				error: function(xhr, textStatus, errorThrown) {
					alert("[ An error has occured ] \n\n- Status: " + xhr.status + " - " + xhr.statusText + "\n- Response: " + textStatus + "\n\nCheck system logs");
				}
			});
		}
	}
};


// ==========================
// STATUS, ERROR AND RESPONSE
// ==========================

aisen.message = {
	show: function(msg, type) {
		var msg_html = "";
		var $message = $(".message");
	
		if ($message.length == 1 && msg && msg.length > 0) {
			msg_html = "<strong>";
			switch(type) {
				case 'error':
					msg_html += "Please review the following errors";
					break;
				case 'notification':
					msg_html += "Notification";
					break;
				case 'status':
					msg_html += "Success";
					break;
				default:
					break;
			}
			msg_html += "</strong>";
			
			msg_html += "<ul>";
			for (var i in msg) {
				msg_html += "<li>" + msg[i] + "</li>";
			}
			msg_html += "</ul>";
			
			$message.html('<div class="' + type + '"></div>');

			if (type == 'error') {
				$("." + type, $message).html(msg_html).fadeIn(250);
			}
			else {
				$("." + type, $message).html(msg_html).fadeIn(250).delay(10000).fadeOut(250);				
			}
			
			window.scrollTo($message.offset().left, $message.offset().top);
		}
	},
	
	hideAll: function() {
		var $main = $("#main");
		$(".error", $main).hide();
		$(".status", $main).hide();
		$(".notification", $main).hide();
	}	
};


// ==================
// IMAGES / GALLERIES
// ==================

aisen.images = {
	initLightbox: function() {
		$("a.fancybox").fancybox({
			'type': 'image',
			'cyclic': true,
			'transitionIn': 'elastic',
			'transitionOut': 'elastic',
			'speedIn': 600,
			'speedOut': 200,
			'overlayOpacity': 0.75,
			'overlayColor': '#000'
		});
	},
	
	selectImage: function(id) {
		var $this = $("#" + id);
		var $parent_td = $this.parent();
		var $sister;
						
		if ($this.is("img")) {
			$this.toggleClass("selected");
			$sister = $parent_td.find("input");
			
			if ($sister.is(":checked")) {
				$sister.attr("checked", false);
			}
			else {
				$sister.attr("checked", true);
			}
		}
		else if ($this.is("input")) {
			$sister = $parent_td.find("img");
			if ($this.is(":checked")) {
				$sister.addClass("selected");
			}
			else {
				$sister.removeClass("selected");
			}
		}
	},

	selectAll: function() {
		var $checkbox_select = $(".checkbox_select");
		var $parent = $checkbox_select.parent();
		var $process = $parent.find("table.process");
		
		if ($checkbox_select.text() == 'Select All') {
			$checkbox_select.text('Deselect All');
			$("input:checkbox", $process).each(function() {
				$(this).attr("checked", true);
			});
			
			$("img", $process).each(function() {
				$(this).addClass("selected");
			});
		}
		else {
			$checkbox_select.text('Select All');
			
			$("input:checkbox", $process).each(function() {
				$(this).attr("checked", false);
			});
			
			$("img", $process).each(function() {
				$(this).removeClass("selected");
			});
		}
	},
	
	initSort: function() {
		$("#image_sort").sortable({
			update: function(event, ui) {
				var ids = ""; 
				
				$(this).find("img").each(function() {
					ids += $(this).attr("id").replace('id_', '') + "|";
				});
				
				ids = ids.substring(0, ids.length-1); 
				
				$("#image_sort_ids").val(ids);
			}
		});
	}
};


// ===========================
// page content (static pages)
// ===========================

aisen.page = {
	getContent: function(id, value) {
		var $this = $("#" + id); 
		var querydata = $this.data("parameters");
		
		querydata = aisen.qs.createQP(querydata) + "&page_id=" + value;
		
		if (querydata) {
			aisen.async.trigger(querydata);
		}
	}
};



// =======
// tinymce
// =======

aisen.tinymce = {
	init: function() {
		$(document).ready(function() {
			var $tiny_mce_editor = $("#tiny_mce_editor");
			var $textarea = $("textarea", $tiny_mce_editor);
			
			if ($textarea.length > 0) {
				tinyMCE.init({
					// General options
					theme : "advanced",
					mode: "textareas",
	
					//plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,advlist",
			
					// Theme options
					//theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
					//theme_advanced_buttons2 : "search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview",
					//theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview",
					//theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
					//theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
					theme_advanced_toolbar_location : "top",
					theme_advanced_toolbar_align : "left",
					theme_advanced_statusbar_location : "bottom",
	
					width: "660px",
					height: "500px",
			
					// Drop lists for link/image/media/template dialogs
					/*
					template_external_list_url : "lists/template_list.js",
					external_link_list_url : "lists/link_list.js",
					external_image_list_url : "lists/image_list.js",
					media_external_list_url : "lists/media_list.js"
					*/
				});
			}
		});
	}
};


// =========
// uploadify 
// =========

aisen.uploadify = {
	_type: null,
	_parameters: null,
	
	init: function() {
		$("#uploadify").uploadify({
			'uploader': '/js/uploadify/uploadify.swf',
			'script': '/js/uploadify/uploadify_' + aisen.uploadify._type + '.php',
			'cancelImg': '/js/uploadify/cancel.png',
			'expressInstall': '/js/uploadify/expressInstall.swf',
			//'checkScript': '/js/uploadify/check.php',
			'queueID': 'fileQueue',
			'buttonText': 'Browse',
			'fileDesc': 'Images Files (JPG/JPEG - *.jpg, *.JPG)',
			'fileExt': '*.jpg;*.JPG',
			'width': '120',
			'wmode': 'transparent',
			'sizeLimit': '12000000',
			'scriptData': {'parameters': aisen.uploadify._parameters},
			'multi': true,
			
			'onError': function(a,b,c,d) {
				alert('Status: ' + d.type + + '\n' + 'Type: ' + d.info);
			},
			
			'onComplete': function(a,b,c,d,e) {
				if (d !== '1') {
					alert(d);
				}
			},
			
			'onSelectOnce': function() {
				$(".btn_upload").show(); 
				$(".btn_cancel").show();
			},
			
			'onClearQueue': function() {
				$(".btn_upload").hide(); 
				$(".btn_cancel").hide();
			},
			
			'onAllComplete': function() {
				$(".btn_upload").hide(); 
				$(".btn_cancel").hide();
			}
		});
    }
};


/* disable context menu */
$(document).bind("contextmenu", function(e) {
	//return false;
});
