/*
Admin Main Functions
*/
(function($){


/*
##########################################################
				START DIALOG BOX FUNCTION
##########################################################
*/
	$.fn.e4eDialog = function() {
		var args = arguments[0] || {}; 	
		var options = $.extend({}, $.e4eDialog.defaults, args);
		var elem = $(this);
		
		return this.each(function() {
			new $.e4eDialog.construct(elem, options);
		});
	  };
  
	$.e4eDialog = {
		dragged: false,
		defaults: {
			diagTitle :'Dialog',
			follow :'link',
			width :750,
			height :550,
			buttons :[],
			buttonFunctions :[],
			showClose :true,
			callFunction :function(){},
			opacity :0.6,
			resizeable: false,
			editor: false,
			bind: false
		},
		construct: function(elem, options){
			if($('#admin_dialogBox').length != 0 && $('#admin_dialog_title h2').val() == options.diagTitle) return false;
			if(options.bind===true){
				$(elem).click(function(){
					$.e4eDialog.init(elem, options);
					return false;
				});
			}else{
				$.e4eDialog.init(elem, options);
				return false;
			}
		},
		init: function(elem, options){
			options.diagTitle = elem.attr('rel') || options.diagTitle;
			// create dialog box divs and append to the body
			var dialog = $('<div id="admin_dialogBox"></div>').prependTo('body').append('<div id="admin_dialog_title"><h2>'+options.diagTitle+'</h2></div>');
			var buttonHolder = $('<div id="admin_buttonHolder"><ul></ul></div>').appendTo(dialog).find('ul');
			//console.log(buttonHolder.get(0));
			var buttonScript = [];
			
                     var i;
			for (i=0; i<options.buttons.length; i++){
				var buttonInstance = '';
				  switch (options.buttons[i]){
					case 'close':
						buttonInstance = $('<li id="admin_button_close"><a href="#">Close</a></li>').appendTo(buttonHolder).find('a');
						$(buttonInstance).click(function(e) {e.preventDefault();$.e4eDialog.close();});
					break;
					case 'ok':
						buttonInstance = $('<li id="admin_button_ok"><a href="#">OK</a></li>').appendTo(buttonHolder).find('a');
						$(buttonInstance).click(function(e) {e.preventDefault();$.e4eDialog.close();});
					break;
					case 'cancel':
						buttonInstance = $('<li id="admin_button_cancel"><a href="#">Cancel</a></li>').appendTo(buttonHolder).find('a');
						$(buttonInstance).click(function(e) {e.preventDefault();$.e4eDialog.close();});
					break;
					case 'done':
						buttonInstance = $('<li id="admin_button_done"><a href="#">Done</a></li>').appendTo(buttonHolder).find('a');
						$(buttonInstance).click(function(e) {e.preventDefault();$.e4eDialog.close();});
					break;
					default:
						// if the user supplies something we dont know then create a custom button name.
						//console.log(options.buttonFunctions[i]);
						buttonInstance = $('<li id="admin_button_'+options.buttons[i]+'"><a href="#">'+options.buttons[i]+'</a></li>').appendTo(buttonHolder).find('a');
						$(buttonInstance).click(function(e){e.preventDefault();options.buttonFunctions[i]();});
					break;
				  }
				  //buttonHTML += buttonInstance;
			}
			if(options.showClose===true){
				buttonInstance = $('<li id="admin_button_close"><a href="#">Close</a></li>').appendTo(buttonHolder).find('a');
				$(buttonInstance).click(function(e) {e.preventDefault();$.e4eDialog.close();});
			}
			
			
			$.e4eDialog.overlay(elem, options);
			for (i=0; i<buttonScript.length; i++){
			  buttonScript[i]();
			  //console.log(buttonScript[i]);
			}
			$.e4eDialog.content(elem, options);
		},
		close: function(){
			//console.log("close");
			$('#admin_dialog_holder').remove();
			$.e4eDialog.dragged = false;
			return false;
		},
		content: function(elem, options){
			// check for a link in the element href.
			$('#admin_dialogBox').append('<div id="admin_dialog_content"></div>');
			$('#admin_dialog_content').css({				
				width: '100%',
				height: '100%',
				background:'#ffffff'
			});
			var ajaxLink = elem.attr('href');
			if (options.editor === true){
				$.e4eDialog.editor(elem, options);
			}else if(options.content !== null) {
				$("#admin_dialog_content").append(options.content);
			} else {
				$("#admin_dialog_content").load(ajaxLink);
			}
		},
		editor: function(elem, options){
			var strBodyContent = $(options.sourceID);
			var strBodyContentNew = $(strBodyContent).clone();
			$('#cmsEditMenu',strBodyContentNew).remove();
			var strBodyContentText = strBodyContentNew.html();
			$("#admin_dialog_content").html('<textarea name="ckEditor">'+strBodyContentText+'</textarea>');
			var oFCKeditor = new window.FCKeditor('itemContent', "100%", "100%", "e4eCMS", strBodyContentText );  
			oFCKeditor.BasePath = "/admin/_includes/editor/fck-2.6.4/";  
			$("#admin_dialog_content textarea").replaceWith(oFCKeditor.CreateHtml());
//			CKEDITOR.replace('ckEditor');
			strBodyContentNew = null;
			$("#admin_buttonHolder ul").append('<li id="admin_button_update"><span id="admin_editor_loading">Loading</span></li>');
			window.FCKeditor_OnComplete = function(editorInstance){
				$("#admin_button_update").html('<a href="#">Update</a>');
				$("#admin_button_update").click(function(){
					window.itemModified();
					var FCKCompletedContent = window.FCKeditorAPI.GetInstance('itemContent').GetXHTML();
					// update sourceID
					if(FCKCompletedContent==''){
						FCKCompletedContent = '<em>This item currently has no content.</em>';
					}
					$(options.sourceID).html(FCKCompletedContent);
					// update hidden form
					$(options.formFieldID).val(FCKCompletedContent);
					$.e4eDialog.close();
				});
			};
		},
		overlay: function (elem, options){
			var winW = $(window).width();
			var winH = $(window).height();
			var centralWindowHeight = winH/2 + $(document).scrollTop();
			var centralWindowWidth = winW/2 + $(document).scrollLeft();
			$('#admin_dialogBox').wrap('<div id="admin_dialog_holder"></div>');
			$('#admin_dialogBox').before('<div id="admin_dialog_overlay"></div>');
			$('#admin_dialog_overlay').css({				
				position:'fixed', 
				top:0, 
				left:0,
				width: winW,
				height: winH,
				background:'#000000',
				zIndex:9999,
				opacity:0
			});
			
			$('#admin_dialogBox')
				.css({
					position:'absolute', 
					top:centralWindowHeight-(options.height/2), 
					left:centralWindowWidth-(options.width/2),
					width: options.width-40,
					height: options.height-120,
					zIndex:10000,
					padding: '70px 20px 70px'
					});
				if($('#admin_dialogBox').draggable) {
					$('#admin_dialogBox').draggable({
					   containment: 'window',
					   handle: 'h2',
					   stop:function(event, ui) {$.e4eDialog.dragged = true;}
					}).find('h2').css('cursor', 'move');
				}
				if(options.resizeable===true){
					$('#admin_dialogBox').resizable({
					   containment: 'document',
					   minHeight: (options.height/2),
					   minWidth: (options.width/2)
				   });
				}
			$('#admin_dialog_overlay').animate({opacity: options.opacity},250);
			var fnReposition = function() {
				if($.e4eDialog.dragged) {return;}
				var winW = $(window).width();
				var winH = $(window).height();
				if(winW < options.width || winH < options.height) {return;}
				var centralWindowHeight = winH/2 + $(document).scrollTop();
				var centralWindowWidth = winW/2 + $(document).scrollLeft();
				$('#admin_dialogBox')
				.css({
					top:centralWindowHeight-(options.height/2), 
					left:centralWindowWidth-(options.width/2)
				});
				$('#admin_dialog_overlay').css({				
					width: winW,
					height: winH
				});
			};
			//$(document).scroll(fnReposition);
			$(window).scroll(fnReposition);
			$(window).resize(fnReposition);
		}
	};
/*
##########################################################
				END DIALOG BOX FUNCTION
##########################################################
*/
})(jQuery);
