
	$.fx.speeds._default = 1000;

	var dmCMS = {
		
		sitepath: '/',
		
		init: function(parentElement){
			this.loadLogin();
			//this.loadTabs(parentElement);
			//this.loadTable(parentElement);
			//this.loadForm(parentElement);
			//this.loadPortlets(parentElement);
			// If were logged in
			if($('#dmcms-admin-toolbar').length > 0){
				this.loadCMSmenus();
			}
		},
		
		reload: function(parentElement){
			this.loadTabs(parentElement);
			this.loadTable(parentElement);
			this.loadForm(parentElement);
			this.loadPortlets(parentElement);
			this.findOverlayLinks(parentElement);
			this.findTabLinks(parentElement);
			$.ui.dialog.overlay.resize(); // Fix ajax load overlay size
			if($.isFunction('loadTinyMCE')) loadTinyMCE(this.sitepath);

		}, 
		
		destroy: function(){
			
			
			
		},
		
		loadLogin: function(){
			
			$(document).keypress(function(event) {
				
				if((event.keyCode==120)||(event.keyCode==76)){ /* If F9 (120) in FF or Shift L in IE (76)*/
					
					var loginForm = "<div id=\"dmCMS-login\" title=\"Login\">"
					loginForm += "<p id=\"login-alert\" class=\"ui-state-highlight ui-corner-all\"><span style=\"float: left; margin-right: 0.3em;\" class=\"ui-icon ui-icon-info\"></span> All form fields are required.</p>";
					loginForm += "<form id=\"loginForm\" action=\"javascript:dmCMS.doLogin();\">";
					loginForm += "<input type=\"hidden\" name=\"login\" value=\"admin\" />";
					loginForm += "<fieldset style=\"padding: 10px;\">";
					loginForm += "	<dl><dt><label for=\"username\">Username:</label></dt>";
					loginForm += "	<dd><input type=\"text\" name=\"username\" id=\"username\" class=\"{required: true}\" /></dd>";
					loginForm += "	<dt><label for=\"password\">Password:</label></dt>";
					loginForm += "	<dd><input type=\"password\" name=\"password\" id=\"password\" value=\"\" class=\"{required: true}\" /></dd></dl>";
					loginForm += "</fieldset>";
					loginForm += "</form>";
					loginForm += "<p style=\"margin-bottom: -5px; margin-top: -4px;\"><a style=\"opacity: 0.6;\" href=\"javascript:alert('do password reminder');\">Forgotten Password?</a></p>";
					loginForm += "</div>";
					
					if($('#dmCMS-login').length > 0) loginForm = "#dmCMS-login";
					
					$(loginForm).dialog({
						resizable: false,
						open: function(){
							$('.ui-widget-overlay').hide().fadeIn();
						},
						show: "fade",
						width: 400,
						modal: true,
						buttons: {
							"Login": function() {
								$('#loginForm').submit();
							},
							Cancel: function() {
								$( this ).dialog("close");
							}
						},
						close: function() {
							
						}

					}).parent().find('.ui-dialog-buttonpane:first').append('<a href="http://www.design-monkey.co.uk/" target="_blank"><img src="images/dmlogo.png" alt="Powered By Design Monkey" title="Powered By Design Monkey" border="0" /></a>');
					
					dmCMS.reload($('#dmCMS-login'));
					
				}	
			});
			
		},
		doLogin: function(){
			// Show Loading...
			$('#login-alert').removeClass('ui-state-error ui-state-highlight ui-corner-all').html('<span class=\"ui-progressbar-label\"><a>Checking Details...</a></span>')
			.progressbar({ value: 30 });
			// Login
			$.post('admin/login.php', $("#loginForm").serialize(), function(data) {
				
				$('#login-alert').progressbar("destroy");
				
				switch(data){
					case '1':
						$('#login-alert').removeClass('ui-state-error').addClass('ui-corner-all').html('<span class=\"ui-progressbar-label\"><a>Logging In...</a></span>').progressbar({ value: 70 });
						dmCMS.loadAdmin();
					break;
					case '2':
						$('#login-alert').removeClass('ui-state-highlight').addClass('ui-state-error ui-corner-all').html('<span style=\"float: left; margin-right: 0.3em;\" class=\"ui-icon ui-icon-alert\"></span><strong>Error:</strong> Email Address has not been validated.');
					break;
					case '3':
						$('#login-alert').removeClass('ui-state-highlight').addClass('ui-state-error ui-corner-all').html('<span style=\"float: left; margin-right: 0.3em;\" class=\"ui-icon ui-icon-alert\"></span><strong>Error:</strong> Incorrect Details.');
					break;
					case '4':
						$('#login-alert').removeClass('ui-state-highlight').addClass('ui-state-error ui-corner-all').html('<span style=\"float: left; margin-right: 0.3em;\" class=\"ui-icon ui-icon-alert\"></span><strong>Error:</strong> No Details Provided.');
					break;
				}
			});

			
		},
		loadAdmin: function(){
			// If were coming from the login screen
			if($('#dmCMS-login').length > 0) {
				$('#login-alert').progressbar("destroy").html('<span class=\"ui-progressbar-label\"><a>Done! Reloading Page...</a></span>').progressbar({ value: 100 });
				setTimeout("location.reload();", 1000 ); // Now Reload the page
			}
		},
		findOverlayLinks: function(parentElement){
			// Links
			$(parentElement).find('a[rel=dmcms],button[rel=dmcms]').click(function(e){
				dmCMS.loadOverlay($(this).attr("title"),$(this).attr("href"),'','','');
				e.preventDefault();
			});
			// Forms
			$(parentElement).find('form[rel=dmcms]').submit(function(e){
				if($(this).valid()==true) dmCMS.loadOverlay($(this).attr("title"),$(this).attr("action"),$(this).attr("method"),$(this).serialize(),''); // If there are no errors then submit the form
				e.preventDefault();
			});
			
			
		},
		findTabLinks: function(parentElement){
			// Links
			$(parentElement).find('a[rel=dmtab],button[rel=dmtab]').click(function(e){
				$(this).parents('.tabs:first').find('.loader:first').show();
				dmCMS.reloadTab($(this).parents('.ui-tabs-panel:first'),$(this).attr("href"),'','');
				e.preventDefault();
			});
			// Forms
			$(parentElement).find('form[rel=dmtab]').submit(function(e){
				// Show Loader
				$(this).parents('.tabs:first').find('.loader:first').show();
				if($(this).valid()==true){
					dmCMS.reloadTab($(this).parents('.ui-tabs-panel:first'),$(this).attr("action"),$(this).attr("method"),$(this).serialize()); // If there are no errors then submit the form
				}else{
					// Hide Loader
					$(this).parents('.tabs:first').find('.loader:first').hide();
				}
				e.preventDefault();
			});
		},
		loadOverlay: function(title,url,type,data,width){
			
			dmCMS.removeTinyMCE($('#dmCMS-overlay'));
			
			if((!width)||(width==0)) width = 700;
			
			var overlayContent = $('<div id=\"dmCMS-overlay\"></div>');
			if($('#dmCMS-overlay').length > 0) overlayContent = "#dmCMS-overlay";
			
			var overlay = $('<div class="ui-widget-overlay"></div>');
			var progress = $('<span class="ui-progressbar-label" style="padding: 1px; overlay: hidden;"></span>').progressbar({ value: 100 });
			var loader = $('<div style="position: absolute; width: 240px; left: 50%; top: 50px; padding: 0; margin-left: -120px;"></div>');
			$(loader).append(progress);
			$(overlayContent).append(overlay).append(loader);
			
			
			switch(type){
				case 'get':
					$.get(url, data, function(data){
						$(overlayContent).html(data);
						dmCMS.reload($('#dmCMS-overlay'));
					});
				break;
				case 'post':
					$.post(url, data, function(data){
						$(overlayContent).html(data);
						dmCMS.reload($('#dmCMS-overlay'));
					});
				break;
				default:
					$(overlayContent).load(url, function(){
						dmCMS.reload($('#dmCMS-overlay'));
					});
			}
			
			$(overlayContent).dialog({
				resizable: false,
				open: function(){
					$('.ui-widget-overlay').hide().fadeIn();
				},
				show: "fade",
				width: width,
				modal: true,
				title: title,
				maxHeight: 500,
				close: function() {
					dmCMS.removeTinyMCE($(this));
				},
				dialogClass: "fixme"

			});
			
			// Fix position of dialog
			$('.fixme.ui-dialog').css({position:"fixed", left:"50%", top: "100px", marginLeft: "-350px"}); // Need to set margin left for 1/2 of dialog width
			  $(".ui-resizable").stop(function() {
			    $(".fixme.ui-dialog").css({position:"fixed"});
			});
		

		},
		loadCMSmenus: function(){
			
			// Content Add and Reorder
			$(".dropable").append('<span class="ui-widget dmcms-contentarea ui-widget-header ui-corner-all" style="overflow: hidden; padding: 2px 3px 2px 5px; margin: 3px;"></span>');
			
			var buttons = $('<span style="font-size: 0.7em; margin: 0;">'
				+ '		<button class="dmcms-content-add">Add</button>'
				+ '		<button class="dmcms-content-order">Re-Order</button>'
				+ '	</span>');
			
			$('.dmcms-contentarea').html(buttons).find('span').buttonset();
			$('.dmcms-content-add').button( "option", "icons", {primary:'ui-icon-plusthick'} ).button( "option", "text", false ).click(function(){
				var id = $(this).parent().parent().parent().attr('id').replace('dropable_',''); // Find Dropable ID
				dmCMS.loadOverlay('Add Content','modify.php?type=contentmodules&position=' + id,'','','');	
			
			});
			$('.dmcms-content-order').button( "option", "icons", {primary:'ui-icon-arrow-4'} ).button( "option", "text", false ).click(function(){
				alert('reorder');				
			});
			
			// Content Edit
			if($(".dragable").length > 0){
				$('<div id="dmcms-menu" class="ui-menu ui-widget ui-widget-content ui-corner-all" style="display:none;">'
					+ '<div class="ui-widget-header ui-helper-clearfix ui-corner-all" style="padding: 4px;">Options</div>'
					+ '<ul class="ui-helper-clearfix">'
					+ '	<li><a href="#edit"><span class="ui-icon ui-icon-pencil" style="float: left; margin: 1px 4px 0 0;"></span>Edit</a></li>'
					/*+ '	<li><a href="#cut"><span class="ui-icon ui-icon-scissors" style="float: left; margin: 1px 4px 0 0;"></span>Cut</a></li>'
					+ '	<li><a href="#copy"><span class="ui-icon ui-icon-copy" style="float: left; margin: 1px 4px 0 0;"></span>Copy</a></li>'
					+ '	<li><a href="#paste"><span class="ui-icon ui-icon-clipboard" style="float: left; margin: 1px 4px 0 0;"></span>Paste</a></li>'*/
					+ '	<li><a href="#delete"><span class="ui-icon ui-icon-trash" style="float: left; margin: 1px 4px 0 0;"></span>Delete</a></li>'
					+ '</ul>'
					+ '</div>').appendTo('body');
				
				$(".dragable").contextMenu({
					menu: 'dmcms-menu'
				},
					function(action, el, pos) {
					
						switch(action){
							case 'edit':
								var id = $(el).attr('id').replace('dragable_','');
								var type =$(el).attr('class').replace('dragable ','');
								dmCMS.loadOverlay('Edit Content','modify.php?q=1&w=600&h=500&type=module&contentid=' + id + '&module=' + type,'','','');
							break;
							case 'delete':
								var id = $(el).attr('id').replace('dragable_','');
								var type =$(el).attr('class').replace('dragable ','');
								var position =$(el).parents('.dropable:first').attr('id').replace('dropable_','');
								dmCMS.deleteContent(position,$(el),id);
							break;
						}

					}
				);
				
				$('#dmcms-menu ul').menu();
			}
			
		},
		reloadCMSmenus: function(){
			$(".dropable").remove('.dmcms-contentarea');
			$(document).remove('#dmcms-menu');
			dmCMS.loadCMSmenus();
		},
		loadTabs: function(parentElement){
			
			$(parentElement).find(".tabs").tabs({
				select: function(event, ui) {
					dmCMS.removeTinyMCE($(ui.panel).parent().find('.ui-tabs-panel:visible'));
					$(ui.panel).parent().find('.loader:first').show();
				},
				cache: false,
				collapsible: false,
				spinner: 'Loading...',
				fx: { /*height: 'toggle', */opacity: 'toggle', duration: 'slow' },
				ajaxOptions: {
					error: function(xhr, status, index, anchor) {
						$(anchor.hash).html("Couldn't load this tab. We'll try to fix this as soon as possible.");
					}
				},
				load: function(event, ui) { 
					$(ui.panel).parent().find('.loader:first').hide(); // Hide Loader
					
					$(ui.tab).parent().parent().children('.unloader').each(function(index) {
						if(index!=ui.index){
							// Unload Content
							$(this).parent().parent().children('.ui-tabs-panel:eq(' + index + ')').html('');
						}
					});
					
					var wait = setInterval(function() {
						if($(ui.panel).is(':visible')) {
							dmCMS.reload(ui.panel);
							clearInterval(wait);
						}
					}, 100);
				}
			})
			
			
			
			// Add a close icon on the edit tab
			.find(".closeme").append('<span class="ui-icon ui-icon-close">Remove Tab</span>')
			
			.live('click', function() {
				
				if($(this).parent().parent().tabs("option", "selected")==0){
					dmCMS.removeTinyMCE($(this));
					$(this).parent().parent().tabs("remove", 0) 	// Remove First Tab
					.tabs("select",0) 						// Select first tab
					.tabs("load",0);						// Load first tab
				}else{
					$(this).parent().parent().tabs("remove", 0); 	// Remove First Tab
				}
				
			});

			$('<img src="images/cms/ajax-loader.gif" class="loader" style="position: absolute; top: 10px; right: 5px;" />').insertAfter($(parentElement).find(".tabs:not('.noloader') ul:first"));
			
		},
		reloadTab: function(container,url,type,data){
			
			dmCMS.removeTinyMCE(container);
			
			switch(type){
				case 'get':
					$.get(url, data, function(data){
						container.html(data);
						dmCMS.reload(container);
						//$('#dmCMS-overlay').animate({height: 'auto', opacity: 1});
					});
				break;
				case 'post':
					$.post(url, data, function(data){
						container.html(data);
						dmCMS.reload(container);
						//$('#dmCMS-overlay').animate({height: 'auto', opacity: 1});
					});
				break;
				default:
					container.load(url, function(){
						dmCMS.reload(container);
						//$('#dmCMS-overlay').animate({height: 'auto', opacity: 1});
					});
			}
			
			$(container).parents('.tabs:first').find('.loader:first').hide();
			
		},
		loadPortlets: function(parentElement){
		
			$(parentElement).find(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all")
			.find(".portlet-header")
				.addClass("ui-widget-header ui-corner-all")
				//.prepend('<span class="ui-icon ui-icon-minusthick"></span>')
				.end()
			.find(".portlet-content");

			/*$(parentElement).find(".portlet-header .ui-icon").click(function() {
				$(this).toggleClass("ui-icon-minusthick").toggleClass("ui-icon-plusthick");
				$(this).parents(".portlet:first").find(".portlet-content").toggle();
			});*/

			
		},
		loadTable: function(parentElement){
			// Table
			$(parentElement).find('.dataTable').dataTable( {
				"bJQueryUI": true,
				"sPaginationType": "full_numbers",
				"fnRowCallback": function( nRow, aData, iDisplayIndex ) {
					// Load Buttons
					dmCMS.findOverlayLinks(nRow);
					dmCMS.findTabLinks(nRow);
					setTimeout(function(){
						$(nRow).find('.option-buttons').buttonset();
						$(nRow).find('button.edit[type=submit]').button({ icons: { primary: 'ui-icon-pencil' } , text: false}); 
						$(nRow).find('button.delete[type=submit]').button({ icons: { primary: 'ui-icon-trash' } , text: false}); 
						$(nRow).find('button.publish[type=submit]').button({ icons: { primary: 'ui-icon-plus' } , text: false}); 
						$(nRow).find('button.unpublish[type=submit]').button({ icons: { primary: 'ui-icon-minus' } , text: false}); 
						$(nRow).find('button.duplicate[type=submit]').button({ icons: { primary: 'ui-icon-copy' } , text: false}); 
						$(nRow).find('button.login[type=submit]').button({ icons: { primary: 'ui-icon-locked' } , text: false}); 
					},100);
					
					return nRow;
				}
			} );
		},
		
		reloadTable: function(parentElement){
			// Table
			$(parentElement).find('.dataTable').dataTable();
		},
		
		loadForm: function(parentElement){
			
			// forms
			$(parentElement).uiforms({container: parentElement});
			if(!$.browser.msie){
				$(parentElement).find('select:not(.multiselect)').selectmenu({style:'dropdown'});
				$(parentElement).find(".multiselect").multiselect();
				$(parentElement).find('input[type=checkbox]').checkbox();
				//$(parentElement).find('input:not(.ui-helper-hidden-accessible)[type=radio]').radiobutton();
			}
			
			$(parentElement).find("input.datepicker").datepicker({
				showOn: 'button',
				buttonImage: 'images/icons/calendar.png',
				buttonImageOnly: true,
				dateFormat: 'dd/mm/yy'
			});
			
			$(parentElement).find('fieldset legend')
				.prepend('<span class="ui-icon ui-icon-triangle-1-n">^</span>')
				.click(function(){
					$(this).find('.ui-icon').toggleClass("ui-icon-triangle-1-s").toggleClass("ui-icon-triangle-1-n");
					$(this).parent().find(".fieldset-container:first").slideToggle();
				})
				.end();
				
			dmCMS.loadFormValidation(parentElement);
			
			$(parentElement).find('button[type=submit]').button({ icons: { secondary: 'ui-icon-circle-check' } });
			$(parentElement).find('button[type=button]').button({ icons: { secondary: 'ui-icon-circle-check' } });
			$(parentElement).find('button.save[type=submit]').button({ icons: { secondary: 'ui-icon-disk' } });
			$(parentElement).find('button.back[type=submit]').button({ icons: { primary: 'ui-icon-circle-arrow-w' } }); 
			$(parentElement).find('button.draft[type=submit]').button({ icons: { secondary: 'ui-icon-script' } }); 

		},
		
		loadFormValidation: function(parentElement){
			/* Validate form */
			$.validator.setDefaults({
				/*submitHandler: function() { alert("submitted!"); },*/
				highlight: function(input) {
					$(input).addClass("ui-state-highlight");
				},
				unhighlight: function(input) {
					$(input).removeClass("ui-state-highlight");
				},
				errorClass: 'error ui-state-error ui-corner-all'
			});

			$(parentElement).find('form').validate({wrapper: 'span class="errorwrapper"'/*, errorContainer: $('#myform-errors')*/});	
			
		},		
		deleteContent: function(positionID,deleteitem,contentID){
			if(confirm('Are you sure you would like to delete this item?') == true){
			    // Check permissions
				$.post("includes/ajaxrequest.php", {
						action: 'check_permissions', 
						positionID: positionID, 
						contentID: contentID
					}, 
					function(data){		

						if(data=='1'){
								$.post("includes/ajaxrequest.php", {
										action: 'delete_item', 
										contentID: contentID
									}, 
									function(data){	
										$(deleteitem).fadeOut();
									}
								);
						}else if(data=='refresh'){
							window.location.href = window.location.href;
						}else if(data=='0'){
							alert('Unable to delete!');
						}
					}
				);
			}
		},

		 reloadContentSection: function(positionID,pageID){
			if($('#dropable_' + positionID).length > 0){
				$.post("includes/ajaxrequest.php", {
						action: 'update_section', 
						positionID: positionID, 
						pageID: pageID
					}, 
					function(data){
						$('#dropable_' + positionID).html(data);
						//alert('reload section');
						dmCMS.reloadCMSmenus();
					}
				);
			}
		},
		
		removeTinyMCE: function(parentElement){
			// Remove TinyMCE Instance(s)
			if(typeof tinyMCE != 'undefined') {
				if($(parentElement).length > 0){
					$(parentElement).find('.tinymce').each(function(){
						//alert('remove mce ' + $(this).attr('id'));
						if (tinyMCE.getInstanceById($(this).attr('id')))
						{
							tinyMCE.execCommand('mceFocus', false, $(this).attr('id'));                    
							tinyMCE.execCommand('mceRemoveControl', false, $(this).attr('id'));
							$('#' + $(this).attr('id')).remove();

						}
					});
				}
			}
		}
	};
	
	$(document).ready(function() {
		/*jQuery.fx.off = true;*/
		dmCMS.sitepath = sitepath;
		dmCMS.init('body');
	});

