tibanna.ui = new Object();

/* 
 * Function tibanna.ui.initialize();
 * Setup initial event handlers for gui elements.
 */
tibanna.ui.initialize = function() {
	$(window).resize(function () { tibanna.ui.windowSize(); });
	
	tibanna.ui.windowSize();
	
	// Browser --------------
	$("#browser").click(function () { $(".file").removeClass("selected"); $(".folder").removeClass("selected"); } );
	$(".file").live("click", function() { 
		$(".file").removeClass("selected"); 
		$(".folder").removeClass("selected"); 
		$(this).addClass("selected");
		tibanna.actions.openFile($(this).attr("id"));
	});	
	$(".folder").live("click", function () {
		$(".file").removeClass("selected"); 
		$(".folder").removeClass("selected"); 
		$(this).addClass("selected"); 
		$("div", this).toggleClass("open");
	});
	$("#browser .folder").live("click", function () { $(this).next("ul").slideToggle("fast"); });
	
	$(".tool-delete").click(function (event){ tibanna.actions.deleteFile(event);});	
	$(".tool-permissions").click(function (event){
		event.stopPropagation();
		tibanna.ui.createBubble("Error", "Permissions not yet implemented");
	});
	
	$(".collapser").click(function () { tibanna.ui.toggleCollapse(); });
	
	// Tabs -----------------
	$(".tab").live("click", function() { tibanna.ui.toggleTab(this); tibanna.ui.selectTab(this); });	
	$(".tab-close").live("click", function(event){ tibanna.ui.closeTab($(this).parent().attr('id')); return false; });
	
	// Buttons --------------
	$("#add-button").click(tibanna.actions.createFile);	
	$("#save-button").click(function() {tibanna.actions.saveFile()});	
	$("#terminal-button").click(function () { $("#terminal").slideToggle("fast"); });
	$("#settings-button").click(function () { window.location = jsurl+"editor/config"; });
	$("#tools-button").click(function () { tibanna.ui.toggleTools(); });
	$("#share-button").click(function() { 
		tibanna.ui.createDialog("Share This", "<h3>Reference URL</h3><p><a href='"+jsurl+tibanna.mine.active.replace(/\//gi,":")+"'>"+jsurl+tibanna.mine.active.replace(/\//gi,":")+"</a></p>", null); 
	});

	// Toolbox --------------	
	$("#toolbox h3").live("click", function () { $(this).children("div.expand-triangle").toggleClass("open"); $(this).next(".toolbox-section").slideToggle("fast"); });
	
	// Commandline ----------
	$("#commandline").bind('keydown', 'return',function (evt){ tibanna.actions.processCommandline(evt); }); 
	
	// Dialogs --------------
	$(".popup .close").live("click", function () { $(this).parent().parent().fadeOut("fast"); $(this).parent().parent().remove() });	
	$(".bubble").live("click", function () { $(this).fadeOut("fast"); });		
}

/* 
 * Function tibanna.ui.selectTab(tab);
 * Switch to a new tab, changing the editor contents and document.
 */
tibanna.ui.selectTab = function(tab) {
	tibanna.bespinworks.storeContents(tab);
	var fileName = $(tibanna.util.esc("#"+tibanna.mine.active)+".tab").text();
	if(fileName != "Tibanna") {
		document.title = "[" +fileName + "] - Tibanna";
	} else { document.title = "Tibanna"; }
	
	if (tibanna.mine.active != "splash" && tibanna.mine.active != "preview"){
		tibanna.bespinworks.setBespinEditor(tibanna.mine.active);
	}
}

/* 
 * Function tibanna.ui.closeTab(tabID);
 * Quit this tab and select the next valid one.
 */
tibanna.ui.closeTab = function(tabID) {
	var tabIndex = tibanna.mine.paths.indexOf(tabID);
	tibanna.mine.paths.splice(tabIndex, 1); // Remove ID from the current tab IDs array.
	delete tibanna.mine.contents[tabID]; delete tibanna.mine.positions[tabID];
	$(tibanna.util.esc("#"+tabID)+":not(.file)").remove();
	
	// Handle next tab			
	if (tabID != tibanna.mine.active){ //Some tab other than the active tab was closed.
		$("#canvas").focus(); //simply regain Bespin focus
	}
	else if ((tabIndex == 0) && (tibanna.mine.paths.length == 0)){ //No more tabs left.
		$("#splash-area").css("display","block");
		$("#editor-area").css("display","none");
		tibanna.mine.active = "splash";
		tibanna.cloudcity.setContent(""); //reset Bespin data, just in case
	}
	else if (tabIndex == 0){ //Move to the tab on the right.
		tibanna.mine.active = tibanna.mine.paths[0];
		tibanna.bespinworks.setBespinEditor(tibanna.mine.active);

		var tabName = tibanna.util.esc("#"+tibanna.mine.active);
		$(tabName+":not(.file)").addClass("tab selected");
		
		$("#canvas").focus();
	}
	else{ //Move to the tab on the left.
		tibanna.mine.active = tibanna.mine.paths[tabIndex - 1];
		tibanna.bespinworks.setBespinEditor(tibanna.mine.active);
		
		var tabName = tibanna.util.esc("#"+tibanna.mine.active);
		$(tabName+":not(.file)").addClass("tab selected");
		
		$("#canvas").focus();
	}	
}

/* 
 * Function tibanna.ui.creatBubble(type, text);
 * Creates a small popup bubble in the lower right hand corner with the specified text. 
 */
tibanna.ui.createBubble = function(type, text){
	var bubblestring = "<div class='bubble "+type+"'>"
					 + "<div class='internals'>"+text+"</div>"
					 + "</div>";
  	$("#bubble-shelf").append(bubblestring);
  	$(".bubble").pulse(1500);
    setTimeout(function(){ $(".bubble:last").fadeOut(); $(".bubble:last").remove(); }, 5000);
}

/* 
 * Function tibanna.ui.createDialog(title, contents, callback);
 * Creates a modal dialog that the user must interact with.
 */
tibanna.ui.createDialog = function(title, contents, callback) {
		var dialogstring = "<div class='popup'>"
						 + "<div class='header'>"+title+""
						 + "<div class='close'></div>"
						 + "</div>"+contents+"</div>";
		$("#wrapper").append(dialogstring);
		$(".popup .confirm").click(callback);
		$(".popup").bind('keydown', 'return', callback);
}

/* 
 * Function tibanna.ui.toggleTools();
 * Show or hide the toolbox.
 */
tibanna.ui.toggleTools = function() {
	if($("#toolbox .internals").css("display") == "none") {$("#toolbox .internals").css("display", "block");} else {$("#toolbox .internals").css("display","none")}; tibanna.ui.collapseSize();
}

/* 
 * Function tibanna.ui.toggleBrowser();
 * Show or hide the file browser.
 */
tibanna.ui.toggleBrowser = function() {
	if($("#browser .internals").css("display") == "none") {$("#browser .internals").css("display", "block");} else {$("#browser .internals").css("display","none")}; tibanna.ui.collapseSize();
}

/* 
 * Function tibanna.ui.collapseSize();
 * Adjust the size based on the collapse of side panes (toolbox and browser).
 */
tibanna.ui.collapseSize = function() {
	var maxwidth = $(window).width();
	if($("#browser .internals").css("display") == "none") { browserwidth = 3; } 
	else { browserwidth = maxwidth * .15; }

	if($("#toolbox .internals").css("display") == "none") { toolboxwidth = 3; } 
	else { toolboxwidth = maxwidth * .17; }
	
	var editorwidth = maxwidth - toolboxwidth - browserwidth;
	$("#browser").animate({ width: browserwidth }, { queue:false, duration:500 } ); 
	$("#editor").animate({ width: editorwidth }, { queue:false, duration:500 } ); 
	$("#toolbox").animate({ width: toolboxwidth }, { queue:false, duration:500 } );
}

/* 
 * Function tibanna.ui.windowSize();
 * Adjust the size of the window.
 */
tibanna.ui.windowSize = function() {
	var height = $(window).height() - $("#goodbar").height() - 10 - $("#navigation").height() -  $("#footer").height();
	$("#stretchywrapper").css("height", height);
	$("#stretchywrapper").css("width", $(window).width());
	
	var maxwidth = $(window).width();
	if($("#browser .internals").css("display") == "none") { browserwidth = 3; } 
	else { browserwidth = maxwidth * .15; }

	if($("#toolbox .internals").css("display") == "none") { toolboxwidth = 3; } 
	else { toolboxwidth = maxwidth * .17; }
	
	var editorwidth = maxwidth - toolboxwidth - browserwidth;
	
	$("#browser .internals").css("max-height", $("#browser").height()-44);
	$("#browser").css("width", browserwidth);
	$("#editor").css("width", editorwidth);
	$("#toolbox").css("width", toolboxwidth);
	$("#editor-area").css("height", $("#editor").height()-27);
	$("#splash-area").css("height", $("#editor").height()-27);
	$("#preview-area").css("height", $("#editor").height()-27);	
}

/* 
 * Function tibanna.ui.toggleTab(tab);
 * Handle new tab selection.
 */
tibanna.ui.toggleTab = function(tab) {
	$(".tab").removeClass("selected"); 
	
	if($(tab).hasClass("splash")) {
		$(tab).addClass("selected"); 		
		$("#splash-area").css("display","block");
		$("#preview-area").css("display","none");	
		$("#editor-area").css("display", "none");
	}
	else if($(tab).hasClass("preview")) {
		$(tab).addClass("selected"); 		
		$("#preview-area").css("display","block");	
		$("#splash-area").css("display","none");
		$("#editor-area").css("display", "none");
	} else {
		$(tab).addClass("selected"); 
		$("#splash-area").css("display","none");
		$("#preview-area").css("display","none");	
		$("#editor-area").css("display", "block");
	}
}

/* 
 * Function tibanna.ui.selectNextTab();
 * Select the next valid tab from the current one (moving right).
 */
tibanna.ui.selectNextTab = function() {
	next = $(".tab.selected").next();
	current = (".tab.selected");

	if($(current).hasClass("preview"))  { // preview tab
		$(".tab").removeClass("selected"); 
		$("#splash-area").css("display","block"); 
		$("#preview-area").css("display","none");
		$("#editor-area").css("display","none");
		$(".splash").addClass("selected");			
	}
	else {
		if($(current).hasClass("splash")){ next = $(next).next(); }
		if($(next).size() == 0) {
			$(".tab").removeClass("selected"); 
			$("#splash-area").css("display","none"); 
			$("#preview-area").css("display","block");
			$("#editor-area").css("display","none");
			$(".preview").addClass("selected");
		}
		else {
			$(".tab").removeClass("selected"); 

			$("#preview-area").css("display","none");		
			$("#splash-area").css("display","none");
			$("#editor-area").css("display","block");
		
			tibanna.mine.active = $(next).attr("id");
			tibanna.bespinworks.setBespinEditor(tibanna.mine.active);

			var escaped_tabname = tibanna.util.esc("#"+tibanna.mine.active);
			$(escaped_tabname+":not(.file)").addClass("selected");
		
			$("#canvas").focus();
		}
	}
}

/* 
 * Function tibanna.ui.toggleCollapse();
 * Adjust the ui based on pane collapse (toolbox or browser).
 */
tibanna.ui.toggleCollapse = function() {
	if($(this).siblings(".internals").css("display") == "none") { $(this).siblings(".internals").css("display","block"); }
	else { $(this).siblings(".internals").css("display","none"); }
	if($(this).css("cursor") == "w-resize") { $(this).css("cursor","e-resize"); }
	else { $(this).css("cursor","w-resize"); }		
	
	tibanna.ui.collapseSize();
}

/* 
 * Function tibanna.ui.triggerSave();
 * Visually indicate a keyboard save.
 */
tibanna.ui.triggerSave = function() {
	$("#save-button").animate({ 
        backgroundColor: '#fff'
      }, 500 );
	$("#save-button").animate({ 
        backgroundColor: '#eee'
      }, 100 );
	tibanna.actions.saveFile();
	$(tibanna.util.esc("#"+tibanna.mine.active)+".tab .tab-close").removeClass("edited");	
}
