var startdate = new Date();
var start = startdate.getTime();
var last = start;

var requestors = new Object();
var relpickers = [];
var bronson_uploaders = {};


var tinymce_plugs = "safari,spellchecker,inlinepopups,advlink";
var tinymce_buttons =[ "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,hr,undo,redo,|,link,unlink,|,blockquote,spellchecker",
"formatselect,fontsizeselect,forecolor,|,sub,sup,|,help,code",
""];

var admin_plugs = "media,pagebreak,preview,safari,spellchecker,template,inlinepopups,advlink";
var admin_buttons =[ "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,hr,undo,redo,|,link,unlink,|,image,media,pagebreak,blockquote,spellchecker",
"formatselect,fontsizeselect,forecolor,|,sub,sup,|,media,template,pagebreak,preview,help,code",
""];

var tinymce_default_config = {
	theme : 'advanced',
	plugins: tinymce_plugs,
	mode : 'exact',
	elements : '',
	dailog_type : 'modal',
	extended_valid_elements : "a[name|href|target|title|onclick]",
	theme_advanced_buttons1 : tinymce_buttons[0],
	theme_advanced_buttons2 : tinymce_buttons[1],
	theme_advanced_buttons3 : tinymce_buttons[2],
	theme_advanced_resizing : true,
	theme_advanced_resize_horizontal:"",
	theme_advanced_resizing_min_height : 350,
	theme_advanced_statusbar_location : "bottom",
	theme_advanced_toolbar_location: "top",
	theme_advanced_toolbar_align : "left",
	width: "600",
	height: "250",
	debug : false,
	plugin_preview_width : "600",
	plugin_preview_height : "600",
	relative_urls : false,
	convert_urls : false,
	file_browser_callback : 'mediaBrowser',
	init_instance_callback : 'setUnloader',
	template_cdate_classes : 'cdate creationdate',
	template_mdate_classes : 'mdate modifieddate',
	template_selected_content_classes : 'selcontet mceTmpl',
	template_cdate_format : "%m/%d/%Y : %H:%M:%S",
	template_mdate_format : "%m/%d/%Y : %H:%M:%S",
	template_popup_width : 600,
	template_popup_height: 400
};


var BRONSON_FRAMEWORK = function() {
	
	
	this.urlencode = function(clearString) {
		
	}
	
	this.doError = function(theErr) {
		
	}
	
	this.doSuccess = function(theNotification) {
		
	}
	
	this.getElementsByClassName = function(params) {
		
	}
	
	this.message = function(theMessage) {
		
	}
	
}



function initScript(src) {
	trace('initScript::' + src);
	var head= document.getElementsByTagName('head')[0];
	var script= document.createElement('script');
	script.type= 'text/javascript';
	script.src= src;
	head.appendChild(script);
	return true;
}

function URLEncode (clearString) {
  var output = '';
  var x = 0;
	if (typeof(clearString) == 'undefined') {
		return;
	}
	if (clearString) {

	} else {
		return clearString;
	}
  clearString = clearString.toString();
  var regex = /(^[a-zA-Z0-9_.]*)/;
  while (x < clearString.length) {
    var match = regex.exec(clearString.substr(x));
    if (match != null && match.length > 1 && match[1] != '') {
    	output += match[1];
      x += match[1].length;
    } else {
      if (clearString[x] == ' ')
        output += '+';
      else {
        var charCode = clearString.charCodeAt(x);
        var hexVal = charCode.toString(16);
        output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
      }
      x++;
    }
  }
  return output;
}




function doError(theErr) {
	var message = encodeURI(theErr);
}

function doSuccess(theNotification) {
	var elem = document.getElementById("notifications");
	if (elem) {
		elem.innerHTML = elem.innerHTML + "<li><font color='red'>" + theNotification + "</font></li>";
	}
}


function getElementsByClassName(className, pnode, tag) {
		
		trace('getElementsByClassName::' + className + '::' + pnode + '::' + tag);
		
		if (typeof(pnode) == 'undefined' || pnode == undefined) {
			pnode = document;
		}
		
		if (typeof(tag) == 'undefined' || tag == undefined) {
			tag = '*';
		}
		
        var retnode = [];
        var myclass = className;
        var elem = pnode.getElementsByTagName(tag);
        for (var i = 0; i < elem.length; i++) {
                if (elem[i].id == null || elem[i].id == '') {
                        continue;
                }
                var classes =elem[i].className.split(' ');
                for (var j = 0; j < classes.length; j++) {

                        if (classes[j] == className) {
                                retnode.push(elem[i].id);
                                continue;
                        }
                }
        }

		trace('getElementsByClassName::finished::' + className + '::' + pnode + '::' + tag);

        return retnode;
}


function message(theMessage) {
	var elem = document.getElementById("messages");
	if (elem) {
		elem.innerHTML = "<li><font color='red'>" + theErr + "</font></li>" + elem.innerHTML;
	}
	return 1;
}

function debug(theText) {
		var d = new Date();
		var s = d.getTime();
		var offset = s - last;
		last = s;
	
	trace( theText); // use the console log now I guess...
	return;
	var elem = document.getElementById("robbie_debug");
	if (elem) {
		elem.innerHTML = elem.innerHTML + "<li><strong>" + offset +  '</strong> : ' + theText + "</li>";
		// elem.innerHTML = "<li><strong>" + offset +  '</strong> : ' + theText + "</li>" + elem.innerHTML;
	}
}

function setInnerHtml(obj, src, err) {
	if(obj) {
		obj.innerHTML = src;
	} else {
		err = err + ":: could not get " + obj + " by name ::";
		debug (err);
		return 0;
	}
	return 1;
}


function formToArray(formid, err) {
	// take a given form, convert its params to array
	form = document.getElementById(formid);
	if (!form) {
		debug("form does not exist: " + formid);
		doError("form: " + formid + " does not exist");
		return 0;
	}
	debug("form exists" + formid);
	debug("fields: " + form.elements.length);
	var arr = new Array();
	var i;
	for (i = 0; i < form.elements.length; i++) {
		var typ = form.elements[i].type;
		if (typ == 'checkbox') {
			if (form.elements[i].checked) {
				arr[form.elements[i].name] = form.elements[i].value;
			}
		} else {
			arr[form.elements[i].name] = form.elements[i].value;
			// maybe it's an rte!?
			debug(form.elements[i].name + ":" + form.elements[i].value);
		}
	}
	debug ("finished formtoarray");
	return arr;
}

function srcGet(url, parameters, err, method, identifier, callback) { // identifier is the idea here
	trace("srcGet" + url + "::" + JSON.stringify(parameters));
	
	//check if method was set, otherwise default to POST
	var method = (method == undefined) ? "POST" : 'GET';
	var asyn = false;
	if (identifier) {
		trace("async is true");
		asyn = true;
	}
	trace("async: " + asyn);

	// var params = "jsonObject="+arrayToParams(parameters);
	var params = arrayToParams(parameters);
	if (window.XMLHttpRequest && !window.ActiveXObject) { // make sure ie's 8 doesn't get here
		var requestor = new XMLHttpRequest();
		requestors[identifier] = new Object();
		requestors[identifier].requestor = requestor;
		requestors[identifier].response = null;
		requestors[identifier].completed = false;

		requestor.onreadystatechange = function () {
			if (requestor.readyState==4) {
				if (requestor.status==200) {
						trace("NON ie response status async good");
						// trace("returning: " + requestor.responseText);
						requestors[identifier].response = requestor.responseText;
						requestors[identifier].completed = true;
						
						if(callback !== undefined) {
							trace("=== using calback --");
							if(typeof(callback) == 'string') {
								trace("evaluating string callback" + callback);
								eval(callback);
							} else if(typeof(callback) == 'function') {
								trace("evaluating function callback");
								// callback(results);
								eval('callback();');
							} else {
								trace('formToService::UNKNOWN TYPE OF CALLBACK::' + typeof(callback));
							}
						}
						
    			} else {
    				trace("Problem retrieving data " + requestor.status);
    			}
  			}
		} // end readystate funciton 

		try { 
			requestor.open(method, url, asyn); // not async
			requestor.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			// requestor.setRequestHeader("Content-length", params.length);
			// requestor.setRequestHeader("Connection", "close");
			requestor.send(params);
		} catch (myerr)  {
			trace("could not open " + url + " " + myerr);
			return false;
		}
	} else if (window.ActiveXObject) {
		var requestor = new ActiveXObject("Microsoft.XMLHTTP");
		
		if (requestor) {
			requestor.onreadystatechange = function () {
				if (requestor.readyState==4) {
  					if (requestor.status==200) {
						trace("ie response status async good");
						// trace("returning: " + requestor.responseText);
						return requestor.responseText;
    					} else {
    						trace("Problem retrieving data " + requestor.status);
    					}
				}
			} // end readystate function 
			try { 
				requestor.open(method, url, false); // not async
				requestor.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				// requestor.setRequestHeader("Content-length", params.length);
				// requestor.setRequestHeader("Connection", "close");
				debug('sending request to ' + url);
				requestor.send(params);
			} catch (myerr) {
				trace("could not open " + url + " " + myerr);
				return;
			}
		} else {
			doError("Sorry, ajax not available");
		}
	}
	if (!requestor.responseText) {
		debug(url + " returned null");
		trace("asyn status for " + url + " : " + asyn);
	} else {
		debug("finished: " + url);
	}
	if (requestor.readyState == 4) { 
		// requestor.completed = true; // this happens in setDivUrlSrc, thanks
		return requestor.responseText; // just in case we finish that fast ... 
	} else {
		return;
	}
}

function setDivUrlSrc (url, obj, parameters, err, identifier) {
	trace("setDivUrlSrc url: " + url);
	if (obj.id) { 
		trace("setDivUrlSrc location: " + obj.id);
	} else {
		trace("setDivUrlSrc location: " + obj);
	}
	trace("setDivUrlSrc identifier: " + identifier);
	// I -may- be in progress, in which case, just how many times?
	if (requestors[identifier]) {
		if (requestors[identifier].setDivUrlSrc) {
			// I've already tried this
			trace("already tried setDivUrlSrc for " + identifier + " " + requestors[identifier].setDivUrlSrc + " times");
			requestors[identifier].setDivUrlSrc = requestors[identifier].setDivUrlSrc + 1;
		} else {
			trace("first try to set " + url);
			requestors[identifier].setDivUrlSrc = 1;
		}
	}
	if (!obj) {
		trace("nowhere to put it: " + obj);
		doError("no element" + obj);
		return 0;
	}
	if (obj.id) { 
		var objid = obj.id;
		debug(obj.id + " <b>is the id</b>");
	} else {
		// obj is a string
		var objid = obj;
		trace("probably re-getting object by name");
		obj = document.getElementById(objid);
		debug(obj.id + " <b>is the id</b>");
	}


	if (requestors[identifier]) {
		if (!requestors[identifier].requestor) {
			trace("identifier: " + identifier + " has no requestor");
			var newsrc = srcGet(url, parameters, err, null, identifier); // srcGet takes a METHOD as arg 4
		} else { 
			trace("already have a requestor in " + identifier);
			var stat = requestors[identifier].requestor.readyState;
			if (requestors[identifier].tries) {
				if (requestors[identifier].tries > 40) { // this is taking TOO LONG
					// start over?  tell the user?  What?!
					requestors[identifier] = null; // end it, forcing it to start over
					trace("tried to get " + identifier + " more than 20 times ");
					setDivUrlSrc(url, obj, parameters, err, identifier);
					return;
				} 
				requestors[identifier].tries = requestors[identifier].tries + 1;
				trace("tried " + url + " " + identifier + " " + requestors[identifier].tries + " times");
			} else {
				requestors[identifier].tries = 1;
			}
			if (stat == 4) {
				var newsrc = requestors[identifier].requestor.responseText;
				if (!setInnerHtml(obj, newsrc, err)) {
					trace("could not set inner html of " + obj.id);
					return false;
				} else {
					trace("set html of " + obj.id + " after " + requestors[identifier].tries);
					// requestors[identifier] = null; // getrid of it!
					requestors[identifier].completed = true;
					requestors[identifier].requestor = null; // just the requestor object
					return 1;
				}
			}  else {
				trace("already getting url  " + url + " "  + stat + " be patient");
			}
		} // end requestor test
	} else { 
		var newsrc = srcGet(url, parameters, err, null, identifier); // srcGet takes a METHOD as arg 4
	} 
	if (!newsrc) {
		trace("resetting: " + url + " " + objid);
		if (objid) { 
			trace("try " + url + " again in a second");
			var scrpt = function () {
				setDivUrlSrc(url, objid, parameters, err, identifier);
			}
			setTimeout(scrpt, 500);
		} else {
			trace("objid is null!?");
		}
	} else {
		if (!setInnerHtml(obj, newsrc, err)) { 
			trace("could not set the inner html even though I have source!");
			return false;
		} else { 
			trace("finished " + url + " for " + obj.id);
			requestors[identifier].requestor = null; // getrid of it!
			requestors[identifier].completed = true;
		} 
	}
	return;
}

function setDivContent (url, divname) {
	trace("setDivUrlSrc url: " + url);
	trace("setDivUrlSrc id: " + divname);
	var newsrc = srcGet(url, '', err);
	if (!newsrc) {
		debug(url + " return nothing ");
		return 0;
	} else {
	 	debug(" got new source");
	}
	obj = document.getElementById(divname);
	if (obj) { 
	obj.innerHTML = newsrc;
	}
	return 1;
}

function processJsonObj (url, parameters, err) {
	debug("processJsonObj");
	var myjson = srcGet(url, parameters, err);
	if (myjson) {
		var obj = JSON.parse(myjson);	
		return obj;
	} else {
		return 0;
	}
}

function myMoveTo (obj, x, y) {
	if (!obj) {
		debug("could not get element: " + obj);
		return 0;
	}
	obj.style.top = x;
	obj.style.left = y;
	return 1;
}

function myClose(thename) {

	debug("Closing " + thename);
	obj = document.getElementById(thename);
	if (obj) {
		debug("found obj: " + thename);
		obj.innerHTML = '';
		obj.style.visibility = 'hidden';
		obj.style.display = 'none';
		try {
			document.body.removeChild(obj);
		} catch(err) {
			debug('failed to remove "' + thename + ' because it doesnot exist ' + err);
		}
		delete(obj);
	}
	debug("closed " + thename);
}

function toJSON(theArray) {
	if(theArray != "") {
		var postr = '';
		var key = '';
		var endstring;
		var jsonObj = new Object();
		jsonObj = "{";
		for(key in theArray) {
			jsonObj += '"'+String(postr + key)+'"'+":"+'"'+String(key)+'"'+",";
		}
		endstring = jsonObj.length-1;
		jsonObj = jsonObj.substr(0,endstring)
		jsonObj += "}";
	}
	return jsonObj;
}

function arrayToParams(theArray) {
        var postr = '';
        for (vars in theArray) {
                var myval = encodeURI (theArray[vars]);
                postr = postr + vars + '=' + myval + '&';
        }
        return postr;
}


function reOpen(name, theclass, url, theerr, parameters, identifier) {
	trace("reOpen " + name + " " + theclass + " " + url + " " + identifier);
	// check to see how it's going with IDENTIFIER
	// if it's finished, HOLLA BACK
	if (requestors[identifier]) {
		if (requestors[identifier].completed == true) {
			if (!finishLightbox(name, theclass, url, theerr, parameters)) {
				trace("could not finish the lightbox for " + name);
			}
		} else {
			// try again later ...
			var scrpt = function() {
				reOpen(name, theclass, url, theerr, parameters, identifier);
			}
            setTimeout(scrpt, 500);
		}
	} else {
		trace("no myOpen in progress for " + name);
	}
}

function makeDiv(elem) {	
	if(elem == undefined) {
		debug('------ makeDiv parent element is undefined -- using body -----');
		elem = document.body;
	} else {
		if(typeof (elem) == 'string') {
			debug("-------- makeDiv parent elem is a STRING:'" + elem + "' --- getting by id----");
			elem = document.getElementById(elem);
		}
	}
	
	if(elem == undefined) {
		trace('makeDiv::parentelem "' + elem + '" invalid');
		return false;
	}
	
	var newdiv=document.createElement("div");
	var newtext=document.createTextNode("");
	newdiv.innerHTML = '';
	newdiv.appendChild(newtext) //append text to new div
	elem.appendChild(newdiv);
	return newdiv;
}

function iframeModal(params) {
	doIframe(params.name, params.frame, params.divclass, params.iframeclass, params.url, params.width, params.height, params.theerr, params.parameters);
}

function doIframe(name, frame, divclass, iframeclass, url, width, height, theerr, parameters) {
	trace("doing iframe: " + name + " " + divclass + " :  " + frame + " " + iframeclass + " "  + url);
	if (!url) {
		trace("doIframe : missing url");
		return false;
	}
	if (!frame) {
		trace("doIframe: missing frame");
		return false;
	}
	if (!iframeclass) {
		trace("doIframe: missing iframeclass");
		return false;
	}
	if (!width) {
		trace("width is required for an iframe");
		return false;
	}
	if (!height) {
		trace("height is required");
		return false;
	}
	
	var newdiv = document.getElementById(name);
	if (!newdiv) {
		newdiv = makeDiv();
	}
	newdiv.id = name;
	if (divclass) { 
		newdiv.className = divclass;
		// maybe we're not changing the class name ...
	}
	trace("making iframe: " + frame);
	newdiv.innerHTML = "<iframe id='" + frame + "' class='" + iframeclass + "' src='" + url + "' width='" + width + "' + height='" + height + "'></iframe>";
	trace("made iframe");
	var newframe = document.getElementById(frame);
	if (!frame) {
		trace("unable to create iframe: " + frame + "... something very strange is going on - probably a conflicting id?");
		return false;
	} else {
		trace("made iframe!");
	}

}

function openModal(params) {
		
	myOpen(params.name, params.styleClass, params.url, params.err, params.formvars);
}

function myOpen(name, theclass, url, theerr, parameters) {
	debug("MyOpen " + name + " " + theclass + " " + url);
	var reqRandom = 't' + Math.floor(Math.random() * 100000) + 's' + Math.floor(Math.random() * 100000);
	requestors[reqRandom] = new Object();
	var newdiv = document.getElementById(name);
	if (!newdiv) { 
		newdiv = makeDiv();
	}

	newdiv.innerHTML = "<table width='100%' height='100%'><tr><td valign='middle' align='center'><center><table><tr><td><center><img src='/gfx/elements/loadercircles.gif'></center></td></tr></table></td></tr></table>";
	if (theclass) {  // no longer assuming we want to change the class name
		newdiv.className = theclass;
	} 
	newdiv.id = name;
	testdiv = document.getElementById(name);
	if (!testdiv) {
		theerr  = theerr + "::could not make node::" + name;
		debug(theerr);
		return 0;
	}
	if (!newdiv) {
		debug("could not make " + name);
		return 0;
	}
	var set = false;
	if (url) {
		if (!setDivUrlSrc(url, newdiv, parameters, theerr, reqRandom)) {
			reOpen(name, theclass, url, theerr, parameters, reqRandom);
		} else {
			set = true;
		}
	}
	debug("set source of div: '" + name + "' with css class '" + theclass + "'");
	if (set) {
		if (!finishLightbox(name, theclass, url, theerr, parameters)) {
			debug("could not finish the lightbox for " + name);
		} else {
			debug("could not finish the lightbox");
		}
	} else {
		debug("source was not set, do not finish the lightbox yet");
	}
} // end myOpen 

function finishLightbox(name, theclass, url, theerr, parameters) { 
	trace("finishing lightbox: " + url);
	var upname = 'bronson_uploader';	
	var uploaders = getElementsByClassName(upname, document.getElementById(name), 'div');
	if (uploaders) {
		for (var uploader in uploaders) {
			doUploader(uploaders[uploader]);
		}
	}


	var showRte = false;
	var showUploader = true;
	var showPicker = false;
	if (typeof(adminrights) == 'undefined') {
   		trace('adminrights is undefined');
	} else {
		trace('have admin rights');
		for (var right in adminrights) {
			if (url.indexOf(adminrights[right]) > 0) {
				trace("ADMIN right: " + right + ':' + adminrights[right]);
				showRte = true;
				showPicker = true;
			}
		}
	}

	var rtename = 'form_ta_rte';
	/// for non admin types don't show the edit-lightbox RTE's unless its a blog?
	if (url.indexOf('edit-lightbox')) { 
		trace("edit-lightbox");
		if (url.indexOf('blog') > 0) {
			trace("edit lightbox WITH rte");
			showRte = true;	
		}
		if (url.indexOf('photo') > 0 ) {
			trace("edit lightbox NO rte");
			showRte = false;
		}
	}
	
	if (showRte) { 
		var rtes = getElementsByClassName(rtename, document.getElementById(name), 'textarea');
		rtenodes = '';
		if (rtes) {
			for (var rte in rtes) {
				//doRte(rtes[rte]);
				rtenodes += rtenodes.length > 0 ? ", " : "";
				rtenodes += rtes[rte];
			}
			
			if(rtenodes.length > 0) {
					tinyMCE_GZ.init({
						themes : "advanced",
						plugins : tinymce_plugs, //defined at top of script
						languages : "en",
						disk_cache : true,
						//debug : true,
						entity_encoding : "raw"
					});
				try { 
					if (typeof(tinyMCE) == 'undefined') {
						trace("no tiny mce instance found :(");
						return false;
					}
				} catch (err) {
					trace("tiny mce is REALLY not defined!");
					return false;
				}
				conf = tinymce_default_config;
				conf.elements = rtenodes;
				tinyMCE.init(conf);
			}
			
		}
	}
	
	if (showPicker) { 
		initPickers(name); // just in case we just opened something with a picker in it
	}
	
	if(updateTitleBar) {
		updateTitleBar();
	}
	trace("finished initialization");
	return true;
}

function updateTitleBar() {
	trace("updateTitleBar");
}

function doRte(id) {
	trace('doRte');
	var rte = document.getElementById(id);
	var plugs = "media,pagebreak,preview,safari,spellchecker,template,inlinepopups,advlink,advimage";
	var buttons =[ "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,hr,undo,redo,|,link,unlink,|,image,media,pagebreak,blockquote,spellchecker",
	"formatselect,fontsizeselect,forecolor,|,sub,sup,|,media,template,pagebreak,preview,help,code",
	""];
	try { 
		if (typeof(tinyMCE) == 'undefined') {
			trace("no tiny mce instance found :(");
			return false;
		}
	} catch (err) {
		trace("tiny mce is REALLY not defined!");
		return false;
	}
	if (rte) {
		trace("doing rte in " + id);
		
		tinyMCE.init({
			theme : 'advanced',
			plugins: plugs,
			mode : 'exact',
			elements : id,
			dailog_type : 'modal',
			extended_valid_elements : "a[name|href|target|title|onclick]",
			theme_advanced_buttons1 : buttons[0],
			theme_advanced_buttons2 : buttons[1],
			theme_advanced_buttons3 : buttons[2],
			theme_advanced_resizing : true,
			theme_advanced_resize_horizontal:"",
			theme_advanced_resizing_min_height : 350,
			theme_advanced_statusbar_location : "bottom",
			theme_advanced_toolbar_location: "top",
			theme_advanced_toolbar_align : "left",
			width: "600",
			height: "250",
			debug : false,
			plugin_preview_width : "600",
			plugin_preview_height : "600",
			relative_urls : false,
			convert_urls : false,
			file_browser_callback : 'mediaBrowser',
			init_instance_callback : 'setUnloader',
			template_cdate_classes : 'cdate creationdate',
			template_mdate_classes : 'mdate modifieddate',
			template_selected_content_classes : 'selcontet mceTmpl',
			template_cdate_format : "%m/%d/%Y : %H:%M:%S",
			template_mdate_format : "%m/%d/%Y : %H:%M:%S",
			template_popup_width : 600,
			template_popup_height: 400
	
		});
	} else {
		trace("could not find: " + id);
		return; 
	}

}

function doUploader(id) {

	var uploader = document.getElementById(id);
	if (uploader) {
		var arr = id.split('_');
		var formname = arr[0];
		var fieldname = arr[2];
		// $property $formname $guid $utypes
		
		trace('doUploader::id::' + id);
		
		var info_id = formname + '_info_' + fieldname;
		
		trace('doUploader::info_id::' + info_id);
		
		var inf = document.getElementById(info_id);
		var info = inf.innerHTML.split(':|:');
		var uh = new upload_handler();
		var formname = info[1];
		var guid = info[2];
		var types = info[3];
		var fname = info[4];
		var ftype = info[5];
		uh.fieldname = fieldname;    
		uh.guid = guid;
		uh.types = types;
		uh.uploaderTarget = formname + '_upload_' + fieldname;
		uh.filename = fname;
		uh.formname = formname;
		uh.startusTarget = formname + '_progress_' + fieldname; 
		uh.maxsize = '200000';
		uh.filetype = ftype;
		uh.previewwidth = 100;
		uh.drawUploader(300,30, formname);
		
	} else {
		trace("did not find: " + id);
	}
}

function openAt(name, theclass, url, theerr, parameters, myX, myY) {
	var myDiv = myOpen(name, theclass, url, theerr, parameters);
	if (!myDiv) {
		doError("Could not open " + name);
		return 0;
	}
	moveTo(name, myX, myY);
	return 1;
}

function moveTo (divname, myX, myY) {
	var theDiv = document.getElementById(divname);
	if (!theDiv) {
		doError("could not move " + divname);
	}
	theDiv.style.position = 'absolute';
	theDiv.style.top = myY;
	theDiv.style.left = myX;
	theDiv.style.visibility = 'visible';
	// debug("moving " + divname + " to " + myX + " " + myY);
	return 1;
}

function moveAndSize (name, myX, myY, myWidth, myHeight) {
	var  theDiv = document.getElementbyId(name);
	if (!theDiv) {
		doError("could not get element by name: " + name);
		return 0;
	}
	theDiv.style.position = 'absolute';
	theDiv.style.top = myY;
	theDiv.style.left = myX;
	theDiv.style.width = myWidth;
	theDiv.style.height = myHeight;
	return 1;
}

function checkCR(evt) {
	var evt  = (evt) ? evt : ((event) ? event : null);
	var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
	if ((evt.keyCode == 13) && (node.type=="text")) {
		return false;
	}
 }

function handleKeystroke(e, formname) {
    var keyPressed;
    if (document.all)  {
        keyPressed = e.keyCode;
    } else { 
        keyPressed = e.which;
        debug('handleKeystroke: FF property: which');
    }

    //13 = ASCII code for Enter key
    if (keyPressed == 13)  {
        arrayToForm(formname);
    }  else {
		debug(keyPressed);
    }
	return false;
}

//preload images
function preload(imageArray) {
	var imgObj = new Image();
	for(var i=0;i<imageArray.length;i++) {
		imgObj.src = imageArray[i];
	}
}

//ajax image complete call
function setImageComplete(str,div,field){
	
	//set the image into a blank image holder on the main parent
	parent.document.getElementById( div ).src = str;
	
	//set the image value into a hidden field
	parent.document.getElementById( field ).value = str;
}


function validateForm(formname, errordiv) {
	// see what's wrong in the form and then say so in the error div
	var form = document.getElementById(formname);
	if (!form) {
		trace("no form on the page named: " + formname);
		return; 
	}
	if (errordiv) { 
		errordiv.innerHTML = '';
	}

	var errors = new Object();

	var requireds = getElementsByClassName('required', form);

	var errorcondition = 0;
    for (var req in requireds) {
		var name = requireds[req];
		var elem = document.getElementById(name);	
		var elem = form[name];
		var typ = elem.type;
		var val;
		if (typ == 'checkbox') {
			val = elem.checked;
		} else { 
			val = elem.value;
		}
		trace("checking required for: " + name + " " + typ + " " + val);
		
		if (!elem) {
			trace("could not find an element called: " + requireds[req]);
			return;
		} else {
			if (elem.type == 'text') { 
			elem.style.background = '#000000';
			elem.style.backgroundColor = '#000000';
			}
		}
		if (!val) {
			trace("'" + val + "' is empty for " + name);
			errorcondition = 1;
			errors[requireds[req]] = requireds[req] + " is required";
			continue;
		} else {
			trace( val + " is not empty for " + name);
		}

		if (name == 'email') {
			// as long as I'm here, check a regex
			trace("testing email");
			var re = /^\w[-.\w]*\@[-a-z0-9]+(\.[a-z0-9]+)*\.(com|net|org|edu|mil|info|biz|coop|aero|[a-z][a-z])$/;
			if (re.test(val)) {
				trace("valid email: " + val);
			} else {
				trace("invalid email");
				errorcondition = 1;
				errors[requireds[req]] = requireds[req] + " is invalid";
				continue;
			}

		}

	}

	var uniques = getElementsByClassName('unique', form);

	for (var uni in uniques) {
		trace("checking unique for: " + uniques[uni]);
		var typ = document.getElementById('type');
		var typval = typ.value;
		trace("checking against all " + typval);
		var name = uniques[uni];
		// var fld = document.getElementById(name);
		var fld = form.getElementById(name);
		if (fld) { 
			if (fld.type == 'text') { 
				fld.style.background = '#FFE';
				fld.style.backgroundColor = '#FFE';
			} 
		} else {
			trace("no " + name +  " in form: " + form.id);
		}
		var val = fld.value;
		trace("fld id: " + fld.id);
		trace("val: " + val);
		var uval = URLEncode(val);
		trace("uval: " + uval);
		var guid = form['guid'].value;
		if (fld.id == 'undefined' || fld.id == undefined) {
			trace("no field id for " + name + " in " + form.id);
		}
		if (uval == undefined || uval == 'undefined') {
			trace("no value found for " + name + " in " + form.id);
			errorcondition = 1;
			errors[uniques[uni]] = name + "'" + val +"' must be unique but is empty.";
			continue;
		}
		var serv = baseurl + "service?service=isunique&output_format=json&type=" + typval + "&field=" + name + "&value=" + uval + '&guid=' + guid;
		var js = srcGet(serv);
		try { 
			var res = JSON.parse(js);
			trace(js);
			trace("returned: " + res[name]);
			if (res[name]) {
				// it's unique
			} else {
				errorcondition = 1;
				errors[uniques[uni]] = name + "'" + val +"' is already taken.";
			}
		} catch (err) {
			trace("http error!");
			errorcondition = 1;
			errors[uniques[uni]] = name + "'" + val +"' is already taken.";
		}

	}

	var pwd = document.getElementById('password');
	if (pwd) {
		var conf = document.getElementById('password_confirm');
		if (!conf) {
			errorcondition = 1;
			handleError("your passwords do not match");
			return;
		}
		if (conf.value != pwd.value) {
			errorcondition = 1;
			handleError("Your passwords do not match");
			return;
		}
	}

	if (errorcondition) { 
			if (errordiv) {
				errordiv.innerHTML = '<font color="#CC0000">We could not process your form, elements below in RED are either already taken or empty but required (all fields are required).  Please try again.</font>';
			}
		for (var errs in errors)  {
			// do I light up the field?
			if (errordiv) {
				// errordiv.innerHTML = errordiv.innerHTML + '<li><font color="#CC0000">' + errors[errs] + "</font></li>\n";
				trace(errors[errs]);
			}
			trace("ligting up the field: " + errs);
			var elem = document.getElementById(errs);
			if (elem) { 
				elem.style.backgroundColor = '#FFE';
				elem.style.background = '#FFE';
			}  else {
				trace("could not find: " + errs);
			}
			if (errs == 'terms') { 
				var elem_er = errs + "_error";
				var erdiv = document.getElementById(elem_er);
				if (erdiv) {
					erdiv.innerHTML = '<font color="red">' + errs + ' is required </font>';
				} else {
					alert("Terms is Required!");
				}
			} 
		}
		return false;
	} else { 
		return true;
	}
	
}

function formToService(formname, err, callback) {
	trace("formToService::" + formname + "::" + callback);
	
	var formObj = document.getElementById(formname);
	if (!formObj) {
		trace("there is no form on the page named: " + formname);
		return;
	}
	
	if (!Validate(formObj, false)) {
		trace("form did not validate");
		return;
	}

	if (typeof(tinyMCE) != 'undefined') { 
		trace('mcetype: ' + typeof(tinyMCE));
		if (tinyMCE) { // just in case we've got rte's hanging around
			tinyMCE.triggerSave(false, false);
		}
	}
	
	if (!form) {
		doError("no form element pages to doFormSubmit");
		trace("No form element pased to doFormSubmit");
		return false;
	}
	
	trace("have form" + formObj);
	var formdata = formToArray(formname);
	if (formdata) { 
		trace("got form data");
	} else {
		trace("no form data!");
		return;
	}
	
	callback = '';
	service = '';
	if(formdata['callback']) {
		callback = formdata['callback'];
		formdata['callback'] = null;
	}
	
	if(formdata['service']) {
		service = formdata['service'];
	}
	
	if(formdata['output_format'] == undefined) {
		formdata['output_format'] = 'json';
	}
	
	var url = baseurl + 'services/' + service;

	var results = processJsonObj(url, formdata, err);
	
	if(results[service] == 1) {
		trace('formToService::GOOD RESULT');
		
		if(callback !== '') {
			if(typeof 'callback' == 'string') {
				eval(callback);
			} else if(typeof 'callback' == 'function') {
				callback(results);
			} else {
				trace('formToService::UNKNOWN TYPE OF CALLBACK::' + typeof 'callback');
			}
		}
		
	} else {
		trace('formToService::ERROR::' + JSON.stringify(results));
	}
	
	return;
}

function doFormSubmit(formname, divid, divclass, url, err ) {
	// formname = the name of the form
	// div id = where we put our return
	// class = the class of the return
	// url = where are we submitting to
	// err = the error string
	trace("doFormSubmit: submitting " + url + " " + formname);
	var errorDiv = document.getElementById('errors');
	/* if (!validateForm(formname, errorDiv)) {
		trace("form did not validate");
		return;
	} */
	// new -old- way
	var formObj = document.getElementById(formname);
	if (!formObj) {
		trace("there is no form on the page named: " + formname);
		return;
	}
	if (!Validate(formObj, false)) {
		trace("form did not validate");
		return;
	}

	if (typeof(tinyMCE) != 'undefined') { 
		trace('mcetype: ' + typeof(tinyMCE));
		if (tinyMCE) { // just in case we've got rte's hanging around
			tinyMCE.triggerSave(false, false);
		}
	} 

	form = document.getElementById(formname);
	if (!form) {
		doError("no form element pages to doFormSubmit");
		trace("No form element pased to doFormSubmit");
		return false;
	}
	trace("have form" + formname);
	var formdata = formToArray(formname);
	if (formdata) { 
		trace("got form data");
	} else {
		trace("no form data!");
		return;
	}
	
	
	trace("putting src into " + divid);
	debug("Url: " + url);
	var newdiv = myOpen(divid, divclass, url, err, formdata);
	if (newdiv) {
		trace("Put source into " + divid + " " + divclass);
	} 
	return false; 
}

function checktaken(theName, theValue, err) {
	// check to see if a name is available
	// username / password
	debug("checkAvailable" + theName + theValue);
	var url = baseurl + "/";
  	var formdata = '';
 	var url = baseurl + "/?output_type=json&service=checkunique&" + theName + "=" + theValue;

	var results = processJsonObj(url, formdata, err);
	for (vars in results) {
		debug(vars + ": " + results[vars]);
	} 
	if (results['available']) {
		debug(theName + " '" + theValue + " is available");
		return '';
	} else {
		debug(theName + " '" + theValue + " is NOT available");
		var re = theName + " : " + theValue + " is not available.";
		return re;
	}
}

function displayCheckTaken (theName, theValue, theDiv, theClass, err) {
	var errorMsg = checkTaken(theName, theValue, err);
	if (errorMsg) {
		doError(errorMsg);
	} else {
		return 1;
	}
}

function checkName(theName, theValue, err) {
	var results = '';
		
	for (vars in results) {
		debug(vars + ": " + results[vars]);
	} 
	if (theValue == '') {
		doError(theName + " '" + theValue + " has invalid characters");
	} else {
		doError(theName + " '" + theValue + " is Valid");
	}
	
}

function checkField(theName, theValue,theValue2, err) {
	var results = '';
	var filter=/^.+@.+\..{2,3}$/;
	
	// check taken
	
	// check password
	if (theName == 'password') {
		
		if (theValue == theValue2) {
			doError(theName + " '" + theValue + " passwords match");
		} else {
			doError(theName + " '" + theValue + " Password and Confirm Password do not MATCH");
		}
	}
	// check email
	if (theName == 'email') {
		if (filter.test(theValue)) {
		 doError(theName + " '" + theValue + " Email address is valid");
		    result=true
		}
		 else {
		    doError(theName + " '" + theValue + " Email address is not valid");
		    result=false
		}
	}
}

function checkRequired(nameArray, formname) {
	if (!formname) {
		debug("formname is required");
		return false;
	}
	debug("check required for " + formname);
	var theform = document.getElementById(formname);
	if (!theform) {
		debug(formname + " form does not exist");
		return false;
	}

	var errors = new Array();
	var errorcond = false;
	for(var i=0;i<nameArray.length;i++) {
		debug("check required: " + nameArray[i]);
		// var eleme = theform.nameArray[i];
		var eleme = eval("theform."+nameArray[i]);
		if (!eleme.value) {
			if (!eleme.checked) {
				errors.push(nameArray[i] + " is required");
				errorcond = true;
			}
		}
	}

	if (errorcond) {
			var errstr = '';
		for (var j=0; j < errors.length; j++) {
			var merr = "<li>" + encodeURI(errors[j]) + "</li>";
			errstr = errstr + merr;
		}

		doError(errstr);

		return false;
	} else {
		debug("required all fine!");
		return true;
	}
}

function minimize(divid) {
	trace("minimizing: " + divid);
	var di = document.getElementById(divid);
	di.style.className = 'minimized';
	di.style.position = 'absolute';
	di.style.left = '-100px';
	di.style.top = '-100px';
	di.style.width = '10px';
	di.style.height = '10px';
}

function replaceBody(url, removeables) {
	// replace the entire body of the document?
	// no only replace all the divs that are in the passed array
}

function ismaxlength(obj){
	var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : "";
	
	if (obj.getAttribute && obj.value.length>mlength) {
		obj.value=obj.value.substring(0,mlength)
	}
}

function delrel(type, guid, pguid, ptype, purl, relation){
	debug("delrel: '" + type +  "' '" + guid + "' '" + pguid +  "' '" + ptype + "' '" + purl);
	var divname = 'edit_form_' + type;
	var tdiv = document.getElementById(divname);
	if (!relation) {
		debug("You must specify a relationship");
	}
	if (!tdiv) {
		debug("couldn' tfind form field picker: " + divname);
		return false;
	}

	var r = rand(10000);
	myOpen(divname, divname, baseurl + ptype + "/" + purl + '/picker?relation=' + relation + '&ctype=' + type + '&action=delchild&cguid=' + guid + '&cb=' + r);
} 

function addrel( type, guid, pguid, ptype, purl, relation) {
	debug("add: '" + type +  "' '" + guid + "' '" + pguid +  "' '" + ptype + "' '" + purl);
	if (!relation) {
		debug("You must specify a relationship");
	}
	var divname = 'edit_form_' + type;
	var tdiv = document.getElementById(divname);
	if (!tdiv) {
		debug("couldn' tfind form field picker: " + divname);
		return false;
	}
	var r = rand(10000);

	myOpen(divname, divname, baseurl + ptype + "/" + purl + '/picker?relation=' + relation + '&ctype=' + type + '&action=addchild&cguid=' + guid + '&cb=' + r );
}

function updateSearch (formname, fieldname, val) {
	var form = document.getElementById(formname);
	if (form) { 
		eval('form.' + fieldname + '.value = val');
		form.submit();
	} else {
		debug("form does not exist");
	}

}

function selectAdminType() {

	var elem = document.getElementById('admintype');
	var type = elem.value;
	myOpen('bronson_admin_content', 'bronson_admin_content', baseurl + type + '/list');
}

function getTemplate(type) { 
	var tmp = srcGet(baseurl + '?service=gettemplate&type=' + type + '&output_format=json');
	debug(tmp);
	var obj = JSON.parse(tmp);
	
	if (obj) { 
		return obj; // return tmp as an object
	} else {
		return;
	}
}

function getChildren(type, guid, childtype, relation) {
	var obj = srcGet(baseurl + "?service=getrelations&rel_status=public&rel_type=" + childtype + "&rel_relation=" + relation + "&type=" + type + "&guid=" + guid + "&output_format=json" + '&rel_generation=children');
	var nobj = JSON.parse(obj);
	
	if (nobj) { 
		return nobj;
	} else {
		return;
	}
}

function trace(arg) {
	var dbgr = document.getElementById('robbie_debug');
	var d = new Date();
	var s = d.getTime();
	var offset = s - last;
	last = s;

	if (!dbgr) {
		
	} else {
		dbgr.innerHTML = dbgr.innerHTML + "<br/><li><font color='#cc0000'>" + arg + "</font></li>\n";
	}
	if (typeof(console) != 'undefined') { 
		if (top.document.location.href.indexOf('bronson_debug') > 0 || top.document.location.href.indexOf('robbie') > 0 ) { 
			console.log( offset + ': ' + arg);
		} 
	} 
}

function initPicker(generation, relation, type, key, min, max, guid, parent_type) {
	// first I need the data for the node's template
	var template_id = key + '_node';
	trace("initializing " + key);
	var tdiv = document.getElementById(template_id);
	if (!tdiv) {
		trace(' template id: ' + template_id + " was not found");
		return; 
	}
	trace("have tdiv");
	var tsrc = tdiv.innerHTML;
	if (tsrc) { 
		trace("'" + tsrc + "'");
		var template = JSON.parse(tsrc);
		// var template = eval(tsrc);
	} else {
		trace("no template!");
		var template = {};
	} 
	// var template = getTemplate(type);
	if (!template) { 
		trace("could not get template");
	}

	template.objtype = type;

	var children_id = key + '_rels';
	var cdiv = document.getElementById(children_id);
	if (!cdiv) {
		trace(children_id + " was not found");
		return; 
	}
	var csource = cdiv.innerHTML;
	trace("have children: '" + csource + "'");
	var children = {};
	if (csource) { 
		try { 
		children = JSON.parse(cdiv.innerHTML);
		} catch (err) { 
			trace("could not parse children as json!" + err);
			children = {};  
		}
	} else { 
		children = {};  
	}
	var admin_id = key + "_ads";
	var adiv = document.getElementById(admin_id);
	if (!adiv) {
		trace('admin id' + admin_id + " was not found");
		return; 
	}
	trace("have adiv");
	var asource = adiv.innerHTML;
		var admin = {};
	if (asource) { 
		try { 
		admin = JSON.parse(adiv.innerHTML);
		} catch (err) {
			trace("could not get adminables as json!" + err);
		}
	}

	var g_id = key + "_guid";
	var gdiv = document.getElementById(g_id);
	if (!gdiv) {
		trace(gdiv + " was not found");
		return;
	}
	var guid = gdiv.innerHTML;
	if (guid)  { 
		trace("have guid");
	} else {
		trace("NO guid");
	}
	if (!template || !children || !parent_type) {
		trace("could not initPicker no parenttype or no children or no template is available");
		return;
	}
	var tgt = key + '_relpicker';

	if (!relpickers) {
		trace("relpicker is not initialized");
		return;
	}

	var tgtdiv = document.getElementById(tgt);
	if (!tgtdiv) {
		trace(tgtdiv + " does not exist");
		return;
	}
	trace("pushing init picker");
	relpickers.push(new relationselector( {
		targetelem : tgt,
		idx: relpickers.length - 1,
		property: key,
		guid: guid,
		type: parent_type,
		minimum: min,
		maximum: max,
		generation: generation,
		relation: relation,
		related: children,
		node : template
	} ));
	trace("initing picker");
	relpickers[relpickers.length-1].init();

	trace("finished init picker");

}


function initPickers(name) {
	// get all the pickers on the page and initializat them
	var cname = 'inputpicker';
	var pickers = getElementsByClassName(cname, document.getElementById(name), 'div');

	for (var pick in pickers) {
		// get the property name
		trace("found picker: " + pick + ":" + pickers[pick]);
		var picker = pickers[pick]; 
		if (!picker) {
			trace("no picker: " + picker);
			continue;
		}
		var id_class = picker.split('_');		 // get the property name
		var property = id_class[1];
		var key = id_class[0] + '_' + id_class[1];
		if (!property) {
			trace("no property exists");
			continue;
		}

		// function initPicker(generation, relation, type, key, min, max, guid, parent_type) {
		var gen_id = key + '_generation';
		var genguid = document.getElementById(gen_id);
		if (genguid) {
			var generation = genguid.innerHTML;
		} else {
			var generation = 'children';
		}

		var rel_id = key + '_relation';
		var reldiv = document.getElementById(rel_id);
		if (reldiv) {
			var relation = reldiv.innerHTML;
		} else {
			trace("no relation div: " + rel_id);
			return;
		}

		var type_id = key + "_type";
		var typediv = document.getElementById(type_id);
		if (typediv) {
			var type = typediv.innerHTML;
		} else {
			trace("no type div at: " + type_id);
			return; 
		}

		if (!type) {
			trace("no type at " + type_id);
			return; 
		}

		var min_id = key + "_min";
		var mindiv = document.getElementById(min_id);
		if (mindiv) {
			var min = mindiv.innerHTML;
		}

		var max_id = key + "_max";
		var maxdiv = document.getElementById(max_id);
		if (maxdiv) {
			var max = maxdiv.innerHTML;
		}

		var g_id = key + "_guid";
	    	var gdiv = document.getElementById(g_id);
    		if (!gdiv) {
        		trace(gdiv + " was not found");
        		return;
    		}
    		var guid = gdiv.innerHTML;
    		if (guid)  {
        		trace("have guid: " + guid);
    		} else {
        		trace("NO guid");
				//return;
    		}
		var p_type = key + "_parent_type";
		var pdiv = document.getElementById(p_type);
		if (!pdiv) { 
			trace("no parent type! at " + p_type + " for " + key);
			return; 	
		}
		var parent_type = pdiv.innerHTML;
		if (!parent_type) {
			trace("no parent_type in " + pdiv.id);
			return; 
		}
		if (parent_type && type) { 
			trace("initializing picker: generation: " + generation + " relation: " + relation + " type: " + type + " key: " + key + " max: " + max + " guid: " + guid + " parent_type: " + parent_type);
			initPicker(generation, relation, type, key, min, max, guid, parent_type);
		}  else {
			trace("no guid, parent_type or type for " + key);
		}
		
	}

}

function duplicateObject(url, type, smallheader) {
	if (!type) {
		alert("You must provide a type to duplicate something.");
		return false;
	}
	if (!url) {
		alert("You must provide a url to duplicate something.");
		return false;
	}
	var small = '';
	if (smallheader) {
		small = '1';
	}
	
	trace("duplicating a " + type + " named " + url + " ");
	var ur = baseurl + type + '/' + url + '/edit?service=duplicate&type=' + type + '&url=' + url + '&smallheader=' + small;
	trace("url: " + ur);
	document.location.href = ur;
}


function checkEditable(type, brurl, siteuser) {


	var ur = baseurl + "?service=geteditable&siteuser=" + siteuser + "&type=" + type + "&output_format=json&url=" + brurl;
	trace("checkEditable url: " + ur);

// function srcGet(url, parameters, err, method, identifier, callback) {

	srcGet(ur, null, err, 'GET', 'checkEditableIdentifier', showEditable);

} 

function showEditable() { 
	trace("showEditable got response: " + requestors['checkEditableIdentifier'].response);
	var res;
	try { 
		res = JSON.parse(requestors['checkEditableIdentifier'].response);
	} catch (e) {
		trace("could not parse response as json: ");
		trace(requestors['checkEditableIdentifier'].response);
		trace("---------------");
		return false;
	}
	
	
	for (var s in res) {
		trace('check editable:  ' + s + ": " + res[s]);
	}
	if (res.geteditable == 1) {
		return true;
	}

	return false;
}

function doCssSelect(element) {
	debug("------ doCssSelect -----");
	if (!element) {
		debug("--- element not passed -- can not do css Select ---");
		return;
	}
	if (!element.value) {
		debug("--- no value, can not get a default value ---");
		return;
	}
	if (!cssDefaults) {
		debug("--- no cssDefaults, can not get a default value ---");
		return;
	}
	var name = element.name;
	var form;
	for (form in  document.forms) {
		if (form[element.name]) {
			break;
		}
	}
	if (!form) {
		debug("---- no form available, can not do css select ---");
		return;
	}
	if (!form.val) {
		debug("--- nowhere to put the css value ---" );
		return;
	}
	try { 
		form.val.value = cssDefaults[element.value];
	} catch (e) {
		debug("---- could not set the form value ----");
		return;
	}

	debug('------ succesffully finished doCssSelect ----');
}

function getEditLink(tp, url, ltext) {
	
	if(ltext == undefined) {
		ltext = 'EDIT THIS';
	}
	
	trace('getEditLink::' + tp +'::'+url+'::'+ltext);
	
	if(adminrights == undefined) {
		return;
	}
	if(JQuery.inArray(tp, adminrights)) {
		trace('getEditLink::ADDING::' + tp +'::'+url+'::'+ltext);
		editlinks.push({
			tp : tp,
			url : url,
			ltext : ltext
		});
	}
}


/**
initScript('/js/bronson_rtm.js');
*/

var editlinks = [];
/**
Turn on edit links
*/

