/*
		Support Dynamic Tabs
*/

<!--

	function Tabset(tabset_id,params)
	{
		var container      = $('tabset_'+tabset_id);
		var tabs           = [];
		var selected_tab   = false;
		var disable_onblur = false;
		var content_window = false;
		var max_cols       = null;
		
		if (!params) params = {};
		
		var sort_tabs      = params.sort_tabs ? params.sort_tabs : false;
	
		this.selected_tab  = function()    { return selected_tab; }		
		this.get_tabset_id = function()    { return tabset_id;    }
		this.set_max_cols  = function(num) { max_cols = num;      }
		
		var get_ajax_extra_str = function() {
			str = '';
			if (max_cols !== null) {
				str += '&max_cols=' + max_cols;
			}
			return str;
		}
		
		// Set quiz tabset ????
		if (typeof(Quiz) != 'undefined') Quiz.tabset = this;
		
		var make_droppable = function(tab_id) {
			var full_tab_id = 'tabset_'+tabset_id+'_tab_'+tab_id;
			Droppables.add(full_tab_id,
										 {hoverclass:"drophover",accept:'tabcontent',
										 onDrop:function(element){TabContent.move_node(element,full_tab_id);}});
		}
		
		this.select_tab_by_id = function(tab_id) {
		  var full_tab_id = 'tabset_'+tabset_id+'_tab_'+tab_id;
			tabs.each(function(tab, index) {
				if (tab.id == full_tab_id) {
					select_tab(index);
					return true;
				}
			});
		}
		
		this.select_tab_by_index = function(tab_index) {
			select_tab(tab_index);
		}
		
		this.add_content = function() {
			TabContent.add_node(selected_tab.id);
		}
		
		this.new_temp_tab = function(_params) {
			var params = {
				name: 'New Tab',
				id: 'temp'
			}
			Object.extend(params,_params);
			var name = Builder.node('A',{href:'javascript:void(0);'},[params.name]);
			var tab  = Builder.node('LI',{id:'tabset_'+tabset_id+'_tab_'+params.id},[name]);
			Element.addClassName(tab, 'locked');
			Element.addClassName(tab, 'temp');			
			last_tab = tabs[tabs.length-1];
			last_tab.parentNode.insertBefore(tab,last_tab.nextSibling);
			get_tabs();
			select_tab(tabs.length-1);
		}
		
		this.new_tab = function() {			
			var query_str = 'action=tabs_new_tab&id_string=tabset_'+tabset_id;
			var remove_node = new Ajax.Request (
			 jsconfig.ajax,
			 {
				 method: 'post', 
				 parameters: query_str,
				 onComplete: function(response_obj) {		
					 var response = JSON.parse(response_obj.responseText);
						var name = Builder.node('A',{href:'javascript:void(0);'},['New Tab']);
						var tab  = Builder.node('LI',{id:'tabset_'+tabset_id+'_tab_'+response.id},[name]);
						last_tab = tabs[tabs.length-1];
						last_tab.parentNode.insertBefore(tab,last_tab.nextSibling);
						get_tabs();
						make_droppable(response.id);
						select_tab(tabs.length-1);
						tabs[tabs.length-1].onclick();
				 }
			 });			
		}
		
		var save_tab_order = function() {
			get_tabs();
			var ids = '';
			var tab_length = tabs.length;
			for (var i=0;i<tab_length;i++) {
				ids += tabs[i].id;
				if (i!=(tab_length-1)) ids += ',';
			}
			var query_str = 'action=tabs_save_tab_order&tabset_id=' + tabset_id + '&id_string=' + ids;
	    var save_order = new Ajax.Request (
			 jsconfig.ajax,
			 {
				 method: 'post', 
				 parameters: query_str,
				 onComplete: function(response_obj) {
						// show success?
				 }
			 });
		}
		
		var get_tabs = function() {
			tabs = container.getElementsByTagName('LI');
			tabs = $A(tabs);
			tabs = tabs.reject(function(tab,index) {
											 if (Element.hasClassName(tab, 'action')) return true;
											 return false;
			               });			
			tabs.each( function(tab, index){
										if (Element.hasClassName(tab, 'selected')) {
											if (!Element.hasClassName(tab, 'locked')) {
												tab.onclick = edit_tab;
											}
											selected_tab = tab;
										}							
										else {
											tab.onclick = select_tab;
										}										
										});
			if (sort_tabs == true) Sortable.create(container.id,{constraint:'horizontal',only:'tab',onUpdate:save_tab_order});
		}
		
		var select_tab = function(tab_index) {
			tabs.each( function(tab, index){
										Element.removeClassName(tab, 'selected');
										tab.onclick = select_tab;
									});
			var tab = tabs[tab_index] || this;
			Element.addClassName(tab, 'selected');
			if (!Element.hasClassName(tab, 'locked')) {
			  tab.onclick = edit_tab;
				if ($('tabset_' + tabset_id + '_addcontent')) Element.show('tabset_' + tabset_id + '_addcontent');
			}
			else {
				if ($('tabset_' + tabset_id + '_addcontent')) Element.hide('tabset_' + tabset_id + '_addcontent');
			}
			tab.firstChild.blur();
			show_tab_content(tab);
			selected_tab = tab;
			return false;
		}
		
		var show_tab_content = function(tab) {
			var isTemp = Element.hasClassName(tab, 'temp');
			if (selected_tab == tab && !isTemp && !Element.hasClassName(tab, 'locked')) {
				Element.remove(selected_tab.id+'_content');
			}
			else {
				visible_content = $(selected_tab.id+'_content');
				Element.hide(visible_content);				
				the_container = visible_content.parentNode;
				the_container.removeChild(visible_content);
				the_container.appendChild(visible_content);
			}
			if (!$(tab.id+'_content')) {
				TabContent.load_tab(tabset_id,tab,get_ajax_extra_str());
			}			
			else {
				if (isTemp)	TabContent.select_loaded_tab(tab);			
				Element.show(tab.id+'_content');
			}
		}
		
		var edit_tab = function() {
			var tab = this;
			var input = Builder.node('INPUT',{type:'text',
																				value:tab.firstChild.innerHTML
															          });
			var tab_link = tab.firstChild;			
			Element.hide(tab_link);
			var delete_me = Builder.node('A',{href:'javascript:void(0)',className:'delete_link'},['delete']);
					delete_me.onclick = function() {
						delete_tab(tab,input);
					}
			
			var form  = Builder.node('FORM',{},[input]);
			
			// edit columns
			var num_cols = Builder.node('A',{href:'javascript:void(0)',className:'delete_link'},['cols']);
			var url = jsconfig.ajax + '?action=tabs_edit_tab_properties&type=cols&id_string='+tab.id;
			form.appendChild(num_cols);
			var edit_cols = new Ajax.InPlaceCollectionEditor( num_cols, url, { 
																												 collection: ['1','2','3','4'],
																												 onComplete: function() { 
																													 Field.select(input);
																													 show_tab_content(tab);
																												 }
																											 } );
									
			if (!Element.hasClassName(tab, 'rename_only')) {
				form.appendChild(delete_me);
			}			
			
			form.onsubmit = function() {
				disable_onblur = false;
				input.blur();
				return false;
			}
			tab.appendChild(form);	
			Field.select(input);
			tab.onmouseover = function(){disable_onblur = true;}
			tab.onmouseout  = function(){disable_onblur = false;}
			tab.onclick = null;
			xAddEventListener(input,'blur',save_edit,false);
			return false;		
		}

		var delete_tab = function(tab,input) {
			if(confirm('Are you sure you want to remove this tab?')) {
				var query_str = 'action=tabs_remove_tab&id_string='+tab.id;
				var remove_tab = new Ajax.Request (
				 jsconfig.ajax,
				 {
					 method: 'post', 
					 parameters: query_str
				 });		
				Element.remove(tab);
				get_tabs();
				select_tab(0);
			}
			else {
				Field.select(input);
			}
			return false;
		}
			
		var save_edit = function(evt) {
			if (disable_onblur) return false;
			var e	    = new xEvent(evt);
			var input = e.target;
			var tab = input.parentNode.parentNode;
			var tab_link = tab.firstChild;
			if (input.value != tab_link.innerHTML) {
			  tab_link.innerHTML = '';
				var tab_text = document.createTextNode(input.value);
			  tab_link.appendChild(tab_text);
				var query_str = 'action=tabs_edit_tab_properties&id_string='+tab.id+'&name='+urlencode(input.value);
				var rename_tab = new Ajax.Request (
				 jsconfig.ajax,
				 {
					 method: 'POST', 
					 parameters: query_str,
					 onComplete: function(response_obj) {
						 var response = JSON.parse(response_obj.responseText);
						 var name = document.createTextNode(response.name);
						 tab_text.parentNode.replaceChild(name,tab_text);
					 }
				 });	
			}
		
			tab.removeChild(input.parentNode);
			tab.onclick = edit_tab;
			Element.show(tab_link);
			return false;
		}
		
		get_tabs();
	
	}

	var TabContent = 
	{			
	  new_node: function(content_obj) {
			var title_text = Builder.node('SPAN',{},[content_obj.title]);
			var edit_link  = Builder.node('A',{href:'javascript:void(0)',className:''},['edit']);
			var shrink     = Builder.node('A',{href:'javascript:void(0)',className:'indent5px link_box'},['-']);
			var delete_me  = Builder.node('A',{href:'javascript:void(0)',className:'indent5px link_box'},['x']);
			var controls   = Builder.node('SPAN',{className:'controls'});
			// if editable allow edit and delete
			if (content_obj.editable) commonjs.append_children(controls,[edit_link,shrink,delete_me]);
			// otherwise just show shrink
			else controls.appendChild(shrink);
			var title      = Builder.node('DIV',{className:'title'},[controls,title_text]);
			var content    = Builder.node('DIV',{className:'floatholder content'});
			Element.update(content,content_obj.content);
			content.appendChild(commonjs.ieScrollbarFix());
			var container  = Builder.node('DIV',{className:'tabcontent',id:'tab_'+content_obj.tab_id+'_c_'+content_obj.id},[title,content]);
			// if editable add behaviors for edit and delete
			if (content_obj.editable) {				
				edit_link.onclick = function() {			
					TabContent.edit_node(container,content_obj);
				}
				delete_me.onclick = function() {
					TabContent.delete_node(container.id);
				}
			}
			// add behavior for shrink/expand
			shrink.onclick = function(){ 
				if (Element.visible(content)) { this.innerHTML = '+'; new Element.hide(content); }
				else                          { this.innerHTML = '-'; new Element.show(content); }
			}
			return container;
		},
		
		add_node: function(tab_id) {
			var query_str = 'action=tabs_add_node&id_string='+tab_id+'&node_id=';
			var getNode = new Ajax.Request (
						 jsconfig.ajax,
						 {
							 method: 'post',
							 evalScripts: true,
							 parameters: query_str,
							 onComplete: function(response_obj) {
								var response = JSON.parse(response_obj.responseText);
								response.scripts.evalScripts();
							 }
						 });			
		},		
		
		load_tab: function(tabset_id,tab,extra) {
			
			var loading = commonjs.ajax_loading({container:'P',className:'center',message:' Loading Tab'});
			var tab_content = Builder.node('DIV',{id:tab.id+'_content'},[loading]);
			$('tabset_'+tabset_id+'_content').appendChild(tab_content);
			
			if (Element.hasClassName(tab, 'temp')) { return false; }			
			
			var query_str = 'action=tabs_load_content&id_string='+tab.id;
			if (extra) query_str += extra;

			var get_content = new Ajax.Updater (
						 tab_content,jsconfig.ajax,
						 {
							 method: 'post',
							 evalScripts: true,
							 parameters: query_str
						 });
			 
		},

		select_loaded_tab: function(tab) {
			
			if (Element.hasClassName(tab, 'temp')) { return false; }				
			
			var query_str = 'action=tabs_select_tab&id_string='+tab.id;

			var remember_selection = new Ajax.Request (
						 jsconfig.ajax,
						 {
							 method: 'post',
							 parameters: query_str
						 });
			
		},
		
		get_tab: function(node) {
			var tab_content = node.parentNode.parentNode.parentNode.parentNode.parentNode;
			var tab = tab_content.id
			alert(tab_container.id);
		},
		
		move_node: function(node,new_tab_id) {
			var query_str = 'action=tabs_move_node&id_string='+node.id+'_'+new_tab_id;
			var save_value = new Ajax.Request (
			 jsconfig.ajax,
			 {
				 method: 'post', 
				 parameters: query_str,
				 onComplete: function(response_obj) {
						// show success?
				 }
			 });
			if ($(new_tab_id + '_content')) Element.remove(new_tab_id + '_content'); // force reload
			Element.remove(node);
		},
		
		delete_node: function(node_id) {
			// if (!commonjs.word_confirm('Are you sure you wish to\nremove the selected content from this tab?\nPlease type the word "YES" to continue.','YES')) return false;
			if (!confirm('Are you sure you wish to\nremove the selected content from this tab?')) return false;
			var node = $(node_id);
			var query_str = 'action=tabs_delete_node&id_string='+node.id;
			var remove_node = new Ajax.Request (
			 jsconfig.ajax,
			 {
				 method: 'post', 
				 parameters: query_str,
				 onComplete: function(response_obj) {
						// show success?
				 }
			 });
			Element.remove(node);
		},
		
		edit_node: function(node,content_obj) {
			var textarea      = Builder.node('TEXTAREA',{className:'fillwindow'},[content_obj.source]);
			var edit_content  = Builder.node('DIV',{},[textarea]);
			var edit_title    = Builder.node('INPUT',{type:'text',className:'fillwindow',value:content_obj.title});
			var update_title  = function() {
						title_preview.innerHTML = '';
						title_preview.appendChild(document.createTextNode(edit_title.value));
					}
			var save     		  = Builder.node('BUTTON',{className:'indent5px'},['save']);
			    save.onclick = function() {
						var new_content_obj = content_obj;
						new_content_obj.source = textarea.value;
						new_content_obj.title  = edit_title.value;
						new_content_obj.content = content_copy.innerHTML;
						TabContent.save_node_changes(edit_box,new_content_obj);
					}
			var cancel   		  = Builder.node('BUTTON',{className:'indent5px'},['cancel']);
					cancel.onclick = function() {
						if (!confirm('Lose Changes?')) return false;
						edit_box.parentNode.replaceChild(node,edit_box);
					}
			var save_cancel   = Builder.node('DIV',{className:'center'},[cancel,save]);
			var title_preview = Builder.node('SPAN',{},[content_obj.title]);
			var title_copy    = Builder.node('DIV',{className:'title_preview'},[title_preview]);
			var content_copy  = Builder.node('DIV',{className:'floatholder content'});
			var preview_box   = Builder.node('DIV',{className:'white_back overflow-x-auto'},[title_copy,content_copy]);			
			var last_value    = content_obj.source;
			var show_preview  = function(executer) {
				var new_value = textarea.value;
				if (new_value != last_value) {
					TabContent.edit_node_preview(content_copy,new_value,content_obj.tabset_id);
				}
				last_value = new_value;
			}
			var preview       = new PeriodicalExecuter(show_preview,2);
			var edit_box      = Builder.node('DIV',{className:'padding bottom20px blue_back'},[edit_title,
																																		 commonjs.br(),
																																		 textarea,
																																		 commonjs.br(),
																																		 save_cancel,
																																		 commonjs.br(),
																																		 preview_box]);
			Element.update(content_copy,content_obj.content);
			content_copy.appendChild(commonjs.ieScrollbarFix());			
			node.parentNode.replaceChild(edit_box,node);
			textarea.style.height = '10em';
			Field.focus(textarea);
			xAddEventListener(edit_title,'keyup',update_title,false);					// change title onkeyup
		},
		
		edit_node_preview: function(element,source,tabset_id) {
			source = urlencode(source);
			var query_str = 'action=tabs_bbcode&tabset_id='+tabset_id+'&source='+source;
			var preview = new Ajax.Updater (
						 element,jsconfig.ajax,
						 {
							 method: 'post',
							 evalScripts: true,
							 parameters: query_str,
							 onComplete: function() { element.appendChild(commonjs.ieScrollbarFix()); }
						 });			
		},
		
		save_node_changes: function(edit_box,new_node_obj) {
			var data  = urlencode(new_node_obj.source);
			var title = urlencode(new_node_obj.title); 
			var loading = commonjs.ajax_loading({container:'DIV',
																					className:'center padding',
																					message:' Saving Content...'});
			edit_box.parentNode.replaceChild(loading,edit_box);			
			var query_str = 'action=tabs_update_content&id='+new_node_obj.id;
					query_str += '&tabset_id='+new_node_obj.tabset_id;
					query_str += '&tab_id='+new_node_obj.tab_id;					
					query_str += '&data='+data+'&title='+title;
			var update_node = new Ajax.Request (
			 jsconfig.ajax,
			 {
				 method: 'post', 
				 parameters: query_str,
				 onComplete: function(response_obj) {
						var response = JSON.parse(response_obj.responseText);
						var new_content = TabContent.new_node(response.node);
						Element.hide(new_content);
						loading.parentNode.replaceChild(new_content,loading);
						new Effect.Appear(new_content);
						response.scripts.evalScripts();
				 }
			 });		
		},
		
		save_order: function(container) {
			var query_str  = 'action=tabs_save_node_order&colname=' + $(container).id + '&';
			    query_str  += 'order='+Sortable.sequence($(container));
			var save_order = new Ajax.Request (
			 jsconfig.ajax,
			 {
				 method: 'post', 
				 parameters: query_str,
				 onComplete: function(response_obj) {
						// show success?
				 }
			 });
		}
	}
	
//--> 