var io = {
	log:	function(msg){ },
	error:	function(msg){ }
};

var GBS = { VERSION: 8.2 };
GBS.util = { VERSION: 1.21 };
GBS.net = { VERSION: 0 };


GBS.ABS_URL = "/js/";
GBS.Selector = YAHOO.util.Selector;
GBS.Dom = YAHOO.util.Dom;
GBS.Event = YAHOO.util.Event;


GBS.lang = { VERSION: 1.0 };

GBS.lang.str_repeat = function(i, m) { 
    for (var o = []; m > 0; o[--m] = i); return(o.join(''));
}


GBS.lang.sprintf =  function() {
    var i = 0, f = arguments[i++], o = [], m, a, p;
    while (f) {
	if (m = /^[^\x25]+/.exec(f)) o.push(m[0]);
	else if (m = /^\x25{2}/.exec(f)) o.push('%');
	else if (m = /^\x25(\+)?(0|'[^$])?(-)?(\d+)?(\.\d+)?([b-fosuxX])/.exec(f)) {
if (!(a = arguments[i++])) throw("Too few arguments.");
if (/[^s]/.test(m[6]) && (typeof(a) != 'number'))
throw("Expecting number but found " + typeof(a));
switch (m[6]) {
case 'b': a = a.toString(2); break;
case 'c': a = String.fromCharCode(a); break;
case 'd': a = parseInt(a); break;
case 'e': a = m[5] ? a.toExponential(m[5].charAt(1)) : a.toExponential(); break;
case 'f': a = m[5] ? parseFloat(a).toFixed(m[5].charAt(1)) : parseFloat(a); break;
case 'o': a = a.toString(8); break;
case 's': a = ((a = String(a)) && m[5] ? a.substring(0, m[5].charAt(1)) : a); break;
case 'u': a = Math.abs(a); break;
case 'x': a = a.toString(16); break;
case 'X': a = a.toString(16).toUpperCase(); break;
}
a = (/[def]/.test(m[6]) && m[1] && a > 0 ? '+' + a : a);
p = m[4] ? GBS.lang.str_repeat(m[2] ? m[2] == '0' ? '0' : m[2].charAt(1) : ' ', m[5] ? m[4] - String(a).length : m[4]) : '';
o.push(m[3] ? a + p : p + a);
} else throw("Huh ?");
f = f.substring(m[0].length);
}
return(o.join(''));
}

GBS.lang.zero_padd = function(val, length){

var str = String(val);
while(str.length<length){
	str= '0' + str;
}
return str;
}
// This code was written by Tyler Akins and has been placed in the
// public domain.  It would be nice if you left this header intact.
// Base64 code from Tyler Akins -- http://rumkin.com

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

GBS.lang.encode64 = function(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   do {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);

      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
         enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
         enc4 = 64;
      }

      output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
         keyStr.charAt(enc3) + keyStr.charAt(enc4);
   } while (i < input.length);
   
   return output;
}

GBS.lang.decode64 = function(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
   input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

   do {
      enc1 = keyStr.indexOf(input.charAt(i++));
      enc2 = keyStr.indexOf(input.charAt(i++));
      enc3 = keyStr.indexOf(input.charAt(i++));
      enc4 = keyStr.indexOf(input.charAt(i++));

      chr1 = (enc1 << 2) | (enc2 >> 4);
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
      chr3 = ((enc3 & 3) << 6) | enc4;

      output = output + String.fromCharCode(chr1);

      if (enc3 != 64) {
         output = output + String.fromCharCode(chr2);
      }
      if (enc4 != 64) {
         output = output + String.fromCharCode(chr3);
      }
   } while (i < input.length);

   return output;
};


GBS.util.removeNode = function(node){
	node.parentNode.removeChild(node);	
}

GBS.util.cleanUrl = function(url){
	var href = window.location.href;
	var str = new String(url);
	if ((str.indexOf("?") != -1)) { // jump ref
		str = str.substr(0, (str.indexOf("?")));
	}
	if((str.indexOf(href) != -1)) { // jump ref
		str = str.substr(href.length);
	}
	return str;
}

GBS.util.getScript = function(src){
	src = GBS.util.cleanUrl(src);
	var head= document.getElementsByTagName('head')[0];
	var res = GBS.Selector.query("script", head);
	var found = [];
	var q_src = "";
	for(var n=0; n<res.length; n++){
		q_src = GBS.util.cleanUrl(res[n].src);	
		if(q_src == src) found.push(res[n]);
	}
	return found;
}

GBS.util.randomNumber = function(low, high){
	Math.floor(high*Math.random());
	return Math.floor(high*Math.random());
}

GBS.util.getSelectedOptionValue = function(id){
	var sel = GBS.Dom.get(id);
	return sel.options[sel.selectedIndex].value;
}
GBS.util.getInputValue = function(id){
	var inp = GBS.Dom.get(id);
	return inp.value;
}

GBS.util.createScript = function(src, cb){	
	var script = document.createElement("script");
	script.className = "file";
	script.setAttribute("type","text/javascript");
	script.setAttribute("src",src + '?' + GBS.util.randomNumber(0, 9999));
	document.getElementsByTagName('head')[0].appendChild(script);
	script.onload = function(){
		io.log("loaded script: " + src);
		try{
			if(typeof(cb.success)=="function"){
				cb.success(script);
			}
		} catch(err){ }
	}	
}
GBS.util.setCookie = function(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	} else expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

GBS.util.readCookie = function (name) { 
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	if (ca.length == 0) {
		ca = document.cookie.split(';');
	}
	for (var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}


GBS.util.loadScript = function(src, cb, _reload){
	try {
		io.log("loading script: " + src);
		var found = GBS.util.getScript(src);
		if(found.length>0){
			io.log("ALREADY LOADED");
			io.log(found);
			if(true){ //confirm(src + "\n\nScript Already Loaded, reload?")){
				for(var n=0; n<found.length; n++){
					GBS.util.removeNode(found[n]);
				}
				GBS.util.createScript(src, cb);
			}
		} else {
			GBS.util.createScript(src, cb);
		}
	} catch(err){
		io.error(err);	
	}
}

GBS.require  = function(lib, version){

	io.log("REQUIRE: " + lib + " >=" + version);
	GBS.util.loadScript(GBS.ABS_URL + "gbs." + lib + ".js", { success: function(scr){ 
		io.log("Loaded: " + lib + " v" + GBS[lib].VERSION); 
	}});
	
}

GBS.reload = function(){
	GBS.net.loadScript("js/gbs.js");
}

GBS.init = function(){
	io.log("LOADING GBS v" + GBS.VERSION + "...");
	GBS.require("net", 1.0);
	GBS.require("ui", 1.0);
}
GBS.modules = {};

GBS.loadModule = function(symbol){

	try {
		GBS.loginWindow.cancel();
	} catch(er){
		//alert("cant");
	}

	try {
		if(GBS.modules[symbol] !=undefined){
			if(typeof(GBS.modules[symbol].init) == "function"){
				io.log("JACKED IN ALREADY");
			GBS.modules[symbol].init();
					return;
			}
		}
	} catch(err){
	
	}
	
	GBS.net.loadScript("modules/" + symbol + "/boot.js", {
					   success: function(){
						
						 
					  },
					  failure: function() {
						  
					  }
					   });

	
	
	//GBS.util.loadContent('modules/' + symbol + '/main.php', '#application');
}
GBS.start = function(){
	
	GBS.loginWindow = GBS.ui.form('login.php?');
}
GBS.logout = function(){

	this.Dom.get('application').innerHTML = '';
	
	this.start();
	
}
GBS.init();


GBS.util.sendCMD= function(url, obj){
// if the content of this url evaluates to true or thurthy

	var cb = {
                success: function(response, obj){
			
			//alert('running');
		//	console.log(response);
			//console.log(obj);
                        //alert('parsing response: ' + response);
			GBS.util.parseResponse(response);
	        },
                failure: function(d){
                        //io.log(d);
		},
                argument: {
                        obj: obj
                }
        };
        var c = YAHOO.util.Connect.asyncRequest('POST', url, cb);

}

GBS.refreshRecordSet = function(uid){

	var selector = "#" + uid + " .tbd";
	//console.log(selector);

        var n = YAHOO.util.Selector.query(selector);
        //console.log(n);

	if(n.length>0){
		GBS.util.loadContent("data/sortablerecordset.php?id=" + uid + "", selector);
	} else {
		GBS.util.error("Can not locate selector: [" + selector + "] for recordset refresh");
	}
}
GBS.filterRecordSet = function(uid, q, field){
	
	var selector = "#" + uid + " .tbd";
	//console.log(selector);
	
	var n = YAHOO.util.Selector.query(selector);
	//console.log(n);
	
	if(n.length>0){
		GBS.util.loadContent("data/sortablerecordset.php?id=" + uid + "&q=" + q + "&f=" + field, selector);
	}
}

GBS.filterRecordSetByCategory = function(uid, id){
	
	var selector = "#" + uid + " .tbd";
	//console.log(selector);
	
	var n = YAHOO.util.Selector.query(selector);
	//console.log(n);
	
	if(n.length>0){
		GBS.util.loadContent("data/sortablerecordset.php?id=" + uid + "&category_id=" + id, selector);
	}
}

GBS.sortRecordSet = function(uid, field){
	var selector = "#" + uid + " .tbd";
	//console.log(selector);
	
	var n = YAHOO.util.Selector.query(selector);
	//console.log(n);
	
	if(n.length>0){
		GBS.util.loadContent("data/sortablerecordset.php?id=" + uid + "&field=" + field, selector);
	}
}

GBS.setLoading = function(node){
		
	//var d = YAHOO.util.Dom.getDimentions(targets[n]);
	node.innerHTML = '<div><img src=images/loading.gif /></div>';

}
GBS.util.loadSorterObj = function(obj){
	GBS.util.loadSorter(obj.url, obj.targetNode, obj.callback);
}
GBS.util.loadSorter = function(url, targetNode, callback){

	GBS.util.loadContent(url, targetNode, function(d){
		MEDIA.DragList.init('.draglist'); 
	});

}
GBS.util.loadContentObj = function(obj){
	GBS.util.loadContent(obj.url, obj.targetNode, obj.callback);
}

GBS.util.setContentObj = function(obj){
  //selector, text, callback){
  GBS.util.setContent(obj.selector, obj.text, obj.callback);

}
GBS.util.setContent = function(selector, text, callback){
//console.log(selector);
//console.log(text);


	var targets = YAHOO.util.Selector.query(selector);
	
//console.log(targets);
	if(targets.length){
                for(var n=0; n<targets.length; n++){
			var t = targets[n];
        
			t.innerHTML = text;
	
			GBS.util.activateWidgets(t);

try {
			  if(typeof(callback.success)=="function"){
			    callback.success.call();
			  }
} catch(err){}
		}
	}
}

GBS.util.asyncGet = function(url, callback, callbackArgs){

if(callback==undefined){
  var callback = {};
}
  var cb =  {
     argument: {
       url: url,
       callback: callback,
       callbackArgs: callbackArgs
     }
  };
  if(typeof(callback.success)=="function"){
    cb.success = callback.success;
  } else {
    cb.success = function(response, args){
       io.log('success');
       io.log(response);
       io.log(args);
    }
  }
  if(typeof(callback.success)=="function"){
    cb.failure = callback.failure;
  } else {
    cb.failure = function(response, args){
       io.log('failure');
       io.log(response);
       io.log(args);
    }
  }

  YAHOO.util.Connect.asyncRequest("post", url, cb);

}

GBS.util.loadContent = function(url, selector, callback){
 
 
	var targets = YAHOO.util.Selector.query(selector);
	if(targets.length){
		for(var n=0; n<targets.length; n++){		
			GBS.setLoading(targets[n]);
		}
	}
 
 //console.log("loading: "+url+ " into selector: " + selector);
  YAHOO.util.Connect.asyncRequest("post", url, { 
    success: GBS.util.parseResponse,
    failure: function(d){ 
      
    },
    argument: {
	  url: url,
      selector: selector,
	  callback: callback
	}
  });
}
GBS.util.runCMD = function(o){
  
 // alert("Running command: " + o);
  
  try {
   var cmd = o.cmd;
   var data = o.data;
   var f = eval(cmd);
   f(data);
  } catch(err){ 
  
  	
  //console.log(err); 
  
  }
}


GBS.util.parseResponse = function(response){
 var type = YAHOO.lang.trim(response.getResponseHeader['Content-Type']);
 
  switch(type){
   case("text/json"):
     var o = YAHOO.lang.JSON.parse(response.responseText);
     
	 //ƒ"d"alert("ok");
	 
	 if(o.cmd!=undefined && o.data!=undefined) {
       GBS.util.runCMD(o);
     } else {
		alert("ERROR RUNNING COMMAND"); 
	 }
     return;
   break;
   default:
   
   		//alert("Default content type: ["+ type +"]");
   
//   break;
case("text/html; charset=UTF-8"):
   case("text/html"):
   
	//response.argument.selector;
		GBS.util.parseContent(response);
	 	//GBS.ui.redraw();
	 
	/* var targets = YAHOO.util.Selector.query(response.argument.selector);
     for(var n=0;n<targets.length; n++){
       //GBS.util.parseContent
	   targets[n].innerHTML = response.responseText;
     	GBS.util.activateWidgets(targets[n]);
	 	GBS.util.parseContent(
	 }
	 */
	 
   break;
  }

  try {
   if(typeof(response.argument.callback.success)=="function")
    response.argument.callback.success();
  } catch(err){ }
}

GBS.util.alert = function(msg){
	GBS.util.msg({ title: msg} );
}
GBS.util.msg = function(obj){

	var d = GBS.ui.makeDialog(null, 'alert');
	
	if(obj.title==undefined) obj.title = 'Msg:';
	d.setHeader(obj.title);
	if(obj.text!=undefined) d.setBody(obj.text);
	
	d.render(document.body);
	d.show();
	d.center();
	setTimeout(function(){
		d.cancel(d);
	}, 2000);
}


GBS.submitForm = function(evt, obj){ 
	
	if(obj.submitting!=undefined){
		//alert('double submit');
		return;
	} else {
		//alert('submitting');
		obj.submitting = true;
	}	
	//console.log(evt);
	//console.log(obj);

	//return;
		
	YAHOO.util.Event.stopEvent(evt);
	
	var postData = YAHOO.util.Connect.setForm(obj);
	var url = obj.action;
	if(obj.action.length<0){
		GBS.util.alert('ERROR: no action attribute set on Form');
		return;
	}

	var cb = {
		success: function(response, obj){
		
			response.argument.form.submitting = undefined;
			GBS.util.parseResponse(response);
		},
		failure: function(d){
			//io.log(d);
		},
		argument: {
			form: obj
		}
	};
	var c = YAHOO.util.Connect.asyncRequest('POST', url, cb);
	//io.log(c);
};


GBS.util.handleRichTextEditorFormSubmit = function(e, form, args){
	
	//alert("RTE SUBMIT");
	
	// cancel the event
	YAHOO.util.Event.stopEvent(e);
	
	var myEditor = this.editor;
	myEditor.saveHTML();
		
	setTimeout(function(){
		GBS.submitForm(e, form);
	}, 200);
	
	
}


GBS.util.registerRichTextEditorsInForm = function(form){
	
	io.log("checking form for rtes" + form);
	var submitButtons = YAHOO.util.Selector.query('.submit-button', form);
	for(var x=0; x<submitButtons.length; x++){
		//alert("sd");
		submitButtons[x].type = 'button';	
	}
	
	
	var rte = YAHOO.util.Selector.query('.rich-text-editor', form);
	
	var n = 0;	
	if(rte.length){
		
		
		try {
			var pp = rte[n].parentNode;
			var h = '250px';
			if(dom.hasClass(pp, "inherit-editor-height")){
				
				h = pp.style.height;
				pp.style.height = '';
				dom.removeClass(pp, "inherit-editor-height")
			}
			var myConfig = {
				markup: 'xhtml',
				height: h,
				width: rte[n].parentNode.style.width,
				dompath: false,
				animate: false,
				focusAtStart: true,
				collapse: true,
				draggable: false,
				toolbar: {
					titlebar: '',
					buttons: [
						{ group: 'textstyle', label: 'Font Style',
							buttons: [
								{ type: 'push', label: 'Bold', value: 'bold' },
								{ type: 'push', label: 'Italic', value: 'italic' },
								{ type: 'separator' }
							]
								
						},
						
					{ type: 'separator' },
					{ group: 'alignment', label: 'Alignment',
						buttons: [
							{ type: 'push', label: 'Align Left CTRL + SHIFT + [', value: 'justifyleft' },
							{ type: 'push', label: 'Align Center CTRL + SHIFT + |', value: 'justifycenter' },
							{ type: 'push', label: 'Align Right CTRL + SHIFT + ]', value: 'justifyright' },
							{ type: 'push', label: 'Justify', value: 'justifyfull' }
						]
					},
					{ type: 'separator' },
					{ group: 'parastyle', label: 'Paragraph Style',
						buttons: [
						{ type: 'select', label: 'Normal', value: 'heading', disabled: true,
							menu: [
								{ text: 'Normal', value: 'none', checked: true },
								{ text: 'Header 1', value: 'h1' },
								{ text: 'Header 2', value: 'h2' },
								{ text: 'Header 3', value: 'h3' },
								{ text: 'Header 4', value: 'h4' },
								{ text: 'Header 5', value: 'h5' },
								{ text: 'Header 6', value: 'h6' }
							]
						}
						]
					},
					{ type: 'separator' },
    { group: 'indentlist', label: 'Indenting and Lists',
        buttons: [
            { type: 'push', label: 'Indent', value: 'indent', disabled: true },
            { type: 'push', label: 'Outdent', value: 'outdent', disabled: true },
            { type: 'push', label: 'Create an Unordered List', value: 'insertunorderedlist' },
            { type: 'push', label: 'Create an Ordered List', value: 'insertorderedlist' }
        ]
    },
		{ type: 'separator' },

					{ group: 'insertitem', label: 'Advanced',
						buttons: [
							{ type: 'push', label: 'HTML Link CTRL + SHIFT + L', value: 'createlink', disabled: true },
							{ type: 'push', label: 'Insert Image', value: 'insertimage' }
						]
					}
					]
				}
			};
			var state = 'off';
			var myEditor = new YAHOO.widget.Editor(rte[n].id, myConfig);
			myEditor.on('toolbarLoaded', function() {
				
				var state = 'off';
			
				var codeConfig = {
					type: 'push', label: 'Edit HTML Code', value: 'editcode'
				};
				YAHOO.log('Create the (editcode) Button', 'info', 'example');
				this.toolbar.addButtonToGroup(codeConfig, 'insertitem');
				
				this.toolbar.on('editcodeClick', function() {
					var ta = this.get('element'),
						
						
						iframe = this.get('iframe').get('element');
		
					if (state == 'on') {
						state = 'off';
						this.toolbar.set('disabled', false);
						YAHOO.log('Show the Editor', 'info', 'example');
						YAHOO.log('Inject the HTML from the textarea into the editor', 'info', 'example');
						this.setEditorHTML(ta.value);
						if (!this.browser.ie) {
							this._setDesignMode('on');
						}
		
						Dom.removeClass(iframe, 'editor-hidden');
						
						iframe.style.position = '';
						Dom.addClass(ta, 'editor-hidden');
						this.show();
						this._focusWindow();
					} else {
						state = 'on';
						YAHOO.log('Show the Code Editor', 'info', 'example');
						this.cleanHTML();
						YAHOO.log('Save the Editors HTML', 'info', 'example');
						Dom.addClass(iframe, 'editor-hidden');
						Dom.removeClass(ta, 'editor-hidden');
						
						iframe.style.position = '';
						
						this.toolbar.set('disabled', true);
						this.toolbar.getButtonByValue('editcode').set('disabled', false);
						this.toolbar.selectButton('editcode');
						this.dompath.innerHTML = 'Editing HTML Code';
						this.hide();
					}
					return false;
				}, this, true);
		
				this.on('cleanHTML', function(ev) {
					YAHOO.log('cleanHTML callback fired..', 'info', 'example');
					this.get('element').value = ev.html;
				}, this, true);
				
				this.on('afterRender', function() {
					var wrapper = this.get('editor_wrapper');
					wrapper.appendChild(this.get('element'));
					this.setStyle('width', '100%');
					this.setStyle('height', '100%');
					this.setStyle('visibility', '');
					this.setStyle('top', '');
					this.setStyle('left', '');
					this.setStyle('position', '');
					this.addClass('editor-hidden');
				}, this, true);
				
				
			}, myEditor, true);
		   
			myEditor._defaultToolbar.buttonType = 'advanced'; 
			
			myEditor.render(); 
			
			//dom.removeClass(pp, 'inherit-editor-height');
			io.log(myEditor);
			
			//myEditor.show();
		
		} catch(err){
			//alert("XXX");
			//console.log(err);
			
			//alert('s');
			//YAHOO.util.Event.addListener(form, 'submit', GBS.submitForm, form);
			
			
		}
		//alert("rich");
		var handler = GBS.util.handleRichTextEditorFormSubmit;
		var args = { editor:myEditor };
		
		YAHOO.util.Event.removeListener(form, "submit");
		//YAHOO.util.Event.addListener(form, "submit", handler, form);
		YAHOO.util.Event.addListener(form, 'submit', GBS.util.handleRichTextEditorFormSubmit, form, args);
		
		//alert("REGISTARED RTE");
		
	} else {
		var handler = GBS.submitForm;
		var args = {};
		YAHOO.util.Event.addListener(form, 'submit', GBS.submitForm, form, args);
		
	}

	var submitButtons = YAHOO.util.Selector.query('.submit-button', form);
	YAHOO.util.Event.addListener(submitButtons, 'click', handler, form, args);

	
	
	
	
}
GBS.util.activateWidgets = function(targetNode){
/*
	if(false) { // convert all href attributes of a elements
		var links = YAHOO.util.Selector('a', targets[n]);
		io.log('found ' + links.length + " links");
		for(var nn=0; nn<links.length; nn++){
			var url = links[nn].href;
			links[nn].href = '#';
			YAHOO.util.Event.addListener(links[nn], 'click', function(evt, d){ 
				io.log('loading: ' + d.url + ' to:' + d.node);
				EDITOR.util.loadContent(d.url, d.node);
			}, {url: url,node: '#'+targets[n].id});
		}
	}
*/

	var processedForms = false;
	var tabSets = YAHOO.util.Selector.query('.yui-navset', targetNode);
	
	if(tabSets.length>0){
		
		for(var n=0; n<tabSets.length; n++){
			
			var x = new YAHOO.widget.TabView(tabSets[n].id); 
			
			var tabNode = null;
			var len = x._configs.tabs.value.length;
			for(var l=0; l<len; l++){
				
				tabNode = x.getTab(l).get("contentEl");
				
				var forms = YAHOO.util.Selector.query('form', tabNode);
				if(forms.length>0){
					for(var fx=0;fx<forms.length; fx++){
						if(forms[fx].name=='dlgForm'){
							//io.log('Registering form for POST');
							GBS.util.registerRichTextEditorsInForm(forms[fx]);
						}
						
					}
					processedForms = true;
				} else {
					//alert('no forms in this data');	
				}
			}
		}// end PROCESSING TAB SETS
	}// END TABSETS CONDITIONAL
	
	
	
	
	if( processedForms == false){
		
		var forms = YAHOO.util.Selector.query('form', targetNode);
		if(forms.length>0){
			for(var fx=0;fx<forms.length; fx++){
				if(forms[fx].name=='dlgForm'){
					//io.log('Registering form for POST');
					GBS.util.registerRichTextEditorsInForm(forms[fx]);
				}
			}
			processedForms = true;
		} else {
			//alert('no forms in this data');	
		}
	} else {
			
	}// END PROCESS FORMS

GBS.util.initDragLists(targetNode);

	//alert('now going to check for yui widgets');
	// date selectors


		
	var dateSelectors = YAHOO.util.Selector.query('.date-selector', targetNode);
	if(dateSelectors.length){
		//alert("found " + dateSelectors.length + " dateselectors");

		for(var n=0; n<dateSelectors.length; n++){

			//alert("date selector " + n);
			
			dateSelectors[n].obj = {};
			var obj ={};
			obj.ds = dateSelectors[n];

			GBS.util.registerDateSelector(obj);
			

			obj.wrapperNode = document.createElement('div');
			obj.node = document.createElement('div');

			obj.wrapperNode.style.display = 'inline';
//			obj.node.style.display = 'inline';
			
			obj.buttonGroup = document.createElement('span');
			obj.buttonGroup.className = 'button-group';
			obj.toggleButton = document.createElement('button');
			obj.toggleButton.type='button';
			obj.toggleButton.innerHTML = '...';

			


			YAHOO.util.Event.addListener(obj.toggleButton, "click", function(evt, obj, arg){

				//console.log(evt);
				//console.log(obj);
				//console.log(this);

				if(dom.hasClass(obj.node, 'hidden')){
					dom.removeClass(obj.node, 'hidden');
				} else {
					dom.addClass(obj.node, 'hidden');
				}

			}, obj, obj);
			
			obj.buttonGroup.appendChild(obj.toggleButton);
			obj.wrapperNode.appendChild(obj.buttonGroup);
			obj.wrapperNode.appendChild(obj.node);
			obj.node.style.position='absolute';		
			
	
			YAHOO.util.Dom.insertAfter(obj.wrapperNode, dateSelectors[n]);
			//dom.addClass(dateSelectors[n], "hidden");
			// start off with the calendar hidden
			dom.addClass(obj.node, "hidden");

			obj.c = new YAHOO.widget.Calendar("date-selector-" + n, obj.node, {PAGES:1});

			obj.c.render();
			obj.c.textField = dateSelectors[n];
			obj.c.selectEvent.subscribe(function(type,args,arg) {
			
				console.log(arg);
				
				var dates = args[0];
				var date = dates[0];
				var year = date[0], month = date[1], day = date[2];
	    			arg.c.textField.value = GBS.lang.zero_padd(year, 4) +"-"+ GBS.lang.zero_padd(month, 2) + "-" + GBS.lang.zero_padd(day, 2);
				dom.addClass(arg.node, 'hidden');
			}, obj, true); 
		}
	}
}

GBS.util._dateSelectors = [];
GBS.util.registerDateSelector = function(obj){
  GBS.util._dateSelectors[GBS.util._dateSelectors.length] = obj;
}

GBS.util.parseContent = function(response){
// responsetext from a request needs to have it's content parsed and widgets activated

	var selector = YAHOO.util.Selector.query;
	var dom = YAHOO.util.Dom;
	
	try {
	
		var targets = YAHOO.util.Selector.query(response.argument.selector);
		//alert("we got: " + targets.length + " targets");
		if(targets.length>0){
			
			for(var n=0; n<targets.length; n++){
				
				var targetNode = targets[n];
				if(!targetNode.id){
					targetNode.id = YAHOO.util.Dom.generateId();	
					//alert("patched hole on loaded content div");
				}
				
				dom.removeClass(targetNode, 'loading');
				dom.setStyle(targetNode, 'opacity', 0); 
				targetNode.innerHTML = response.responseText;
				
				var a = new YAHOO.util.Anim(YAHOO.util.Dom.get(targetNode), { opacity: { from: 0, to: 1} }, .5, YAHOO.util.Easing.eaaseIn);
				setTimeout(function(){
									a.animate()
									}, 500);
				
				// add the correct refresh to any content
				var rbs = YAHOO.util.Selector.query('.refresh-button', targetNode);
				
				YAHOO.util.Event.addListener(rbs, 'click', function(evt, response){ 
					//alert(response.argument.url + " ... " + targetNode.id);
					GBS.util.loadContent(response.argument.url, response.argument.selector);
					//io.log('refreshing: ' + d.url + ' to:' + d.node);
				}, response)
				
				var freedrag = YAHOO.util.Selector.query('.free-drag', targetNode)
				

				if(freedrag.length>0){
					for(var n=0; n<freedrag.length; n++){
						//console.log('we have a freedrag item' + freedrag[0]);	
						fd = new GBS.ui.freedrag.Instance(freedrag[n].id);
					}
				}
				
				try {
					var leftThumbs = YAHOO.util.Selector.query('#left-col-thumb', targetNode);
					if(leftThumbs.length){
						
						var leftThumb = leftThumbs[0];
						
						var t = new YAHOO.util.DD('left-col-thumb');
						t.onDrag = function(){ 
							GBS.Dom.get('left-col').style.width=( GBS.Dom.getXY('left-col-thumb')[0]+7) +'px';
						}
						t.on("endDragEvent", function(evt) {
						
							//var lc = GBS.Dom.get('left-col');
							//var r = GBS.Dom.getRegion('left-col');
							//var leftThumbXY = GBS.Dom.getXY('left-col-thumb');
						});
						t.setYConstraint(0,0);
						//t.setXConstraint(-300,300);
					}
				} catch(err){
					//alert(err);
				}
				
				GBS.util.activateWidgets(targetNode);
				
				if(response.argument.callback!=undefined){
					//io.log('cutom callback for loading');
					switch(typeof(response.argument.callback)){
						case("function"):	response.argument.callback();
						break;
						default:			io.log('unsupported callback type: '+ typeof(response.argument.callback));
					}
				}
			}
		} else {
			try {
				io.error('we have no targets for the content ' + response.argument.url);
			} catch(err){
				io.error(err);	
			}
		}
		
		GBS.triggerUpdateUI();
		
	} catch(err){
		io.error(err);
	}

				 
};

GBS.updateForm = function(data){
	
	//io.log("UPDATING FORM");
	
	var fields =  YAHOO.util.Selector.query('#site-detail input');
	
	var msg = fields.length + " inputs found<br />";
	
	var field = "_";

	for(var n=0; n<fields.length; n++){
		
		field = fields[n];
		if(data[field.name]!=undefined){
			
			switch(field.type){
				default:
				case("text"):
				case("TEXT"):
				
					field.value = data[field.name];
				break;
				case("radio"):
				case("RADIO"):
				
					if(field.value==data[field.name]) {
						//alert(field.name + " " + field.value + "--" + data[field.name]);
						field.checked = true;
					} else field.checked = false;
				
				break;
				
			}
			
		} else {
		}
	}
	
	var textareas =  YAHOO.util.Selector.query('#site-detail textarea');
	
	for(var n=0; n<textareas.length; n++){
		
		field = textareas[n];
		if(data[field.name]!=undefined){
			field.value = data[field.name];
		} else {
		}
	}
	
	var id_fields =  YAHOO.util.Selector.query('#site-detail .id_field');
	for(var n=0; n<id_fields.length; n++){
		id_fields[n].value = data['id'];
	}
	var uploaders =  YAHOO.util.Selector.query('#site-detail .media_uploader');
	for(var n=0; n<uploaders.length; n++){
		uploaders[n].style.display = 'block';
	}
	return;
}

GBS.triggerUpdateUI = function(){
	
	
}

GBS.util.formObj = function(obj){

	GBS.util.form(obj.url, obj.args, obj.callback);	
	
}
GBS.util.form = function(url, args, callback){
	
	
	GBS.ui.form(url, args, callback);
}

		 GBS.util.loadHTMLObj = function(obj){
		     //GBS.util.alert(obj.targetNode);
		     try {
			 var objs = YAHOO.util.Selector.query(obj.targetNode);
			 if(objs.length){
			     
			     for(var n=0; n<objs.length; n++){
			     objs[n].innerHTML = obj.html;
			     }
			     //GBS.util.alert('updated ' + n + ' nodes');

			 } else {
			     GBS.util.alert('no nodes found for selector: [' + obj.targetNode + ']');	 
			 }
		     } catch(err){
			 GBS.util.error(err);
		     }
		 }
GBS.util.upload = function(){

	var swfu;
	
	var d = GBS.util.form('data/upload.php', {}, function(d){
														GBS.util.alert('SUCCESS');
							    
														  });
	
	
	var x = {
						  success: function(d){
							  
							  GBS.util.alert('SUCCESS');
							  
							  
							  
							  
							  var settings = {
								flash_url : "lib/swfupload/swfupload.swf",
								upload_url: "upload.php",
								file_post_name: 'packageFile',
								file_size_limit : "200 MB",
								file_types : "*.*",
								file_types_description : "Select a SCORM zip archive",
								file_upload_limit: 400,
								file_queue_limit: 0,
								custom_settings : {
									progressTarget : "fsUploadProgress",
									cancelButtonId : "btnCancel"
								},
								debug: false,
						
								// Button Settings
								button_image_url : "uploadButton.png",
								button_placeholder_id : "spanButtonPlaceholder",
								button_width: 150,
								button_height: 22
							};
						
							swfu = new SWFUpload(settings);
							
						  },
						  failure: function(d){
						  
						  GBS.util.alert('FAILURE');
						  }
						  };
						  
		
	return swfu;
	
}

		 
		 GBS.util.initDragLists = function(node, selector) {
		     
		     // selector shoudl be the class of the lists defaults to draglist
		     if(selector==undefined) selector = '.draglist';
		     
		     //console.log("INITED");
		     var lists = YAHOO.util.Selector.query(selector, node);
		     //console.log(lists);
		     
		     for(var n=0; n<lists.length; n++){
			 var cols = 1;
			 var lis = YAHOO.util.Selector.query("li", lists[n]);
			 //console.log(lis);
			 var num_rows = lis.length;
			 //console.log(lis);
			 
			 var i,j;
			 for (i=1;i<cols+1;i=i+1) {
			     new YAHOO.util.DDTarget(lis[i]);
			 }
			 
			 for (i=1;i<cols+1;i=i+1) {
			     for (j=0;j<num_rows;j=j+1) {
				 //console.log(lis[j]);
				 new MEDIA.DDList(lis[j]);
			     }
			 }
		     }
		     //Event.on("showButton", "click", this.showOrder);
		     //Event.on("switchButton", "click", this.switchStyles);
		 }
		 
	

var lastChecked = false;
var lastCheckAction = true;
function processClick(e, obj){
	
	allChecked = false;
	//console.log(obj);
	//$('clickActions').style.display = 'block';
	
	
	if(e.shiftKey){
	
		if(lastChecked && lastChecked!=obj){
			//alert('ckecking'+ lastChecked + "-" + obj);
			
			//alert(obj.id.replace(/listing/, ''));	
			//alert(lastChecked.id + 'shift click');	
			checkItems(lastChecked, obj);
		}
	}	
	lastChecked = obj;
	lastCheckAction = obj.checked;
}

var allChecked = false;
function checkAll(selector){

	//console.log(selector);

	var checks = YAHOO.util.Selector.query(selector + " input");
	//console.log(checks);
	lastCheckAction = true;
	//alert(checks.length);
	//alert(checks[(checks.length-3)].id);
	//checkItems(checks[0],checks[checks.length-2]);
	for(var n=0; n<checks.length; n++){
	
		if(!allChecked)checks[n].checked = true;
		else checks[n].checked = false;
	}
	if(allChecked){
		allChecked = false;
	} else {
		allChecked = true;	
	}
}

function checkItems(start, end){
	//var checks = $('listingTable').getElementsByTagName('input');
	var checks = YAHOO.util.Selector.query("input");
	
	var active = false;
	
	
	var startNum = parseInt(start.id.replace(/listing/, ''));
	var endNum = parseInt(end.id.replace(/listing/, ''));
	//alert(startNum +'-'+ endNum);
	var done = false;
	
	if(endNum>startNum){
		for(var x=0; x<checks.length; x++){
			//console.log(x);
			if(!done&&checks[x]==start) active = true;
			if(checks[x]==end) {
				active = false;
				done=true;
			}
			if(active) checks[x].checked = lastCheckAction;
			if(done) return;
		}
		
	} else {
		//alert('backwards');
		for(var x=checks.length-1; x>=0; x--){
			
			if(!done&&checks[x]==start) active = true;
			if(checks[x]==end) {
				active = false;
				done = true;
			}
			if(active) checks[x].checked = lastCheckAction;
			if(done) return;
		}
	}
}



try {
	EDITOR.util = GBS.util;	
} catch(err){
	
}

