function nl2br (str, is_xhtml) {
	var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
	return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag);
}

function lbxUi() {

	var LBXUI = this;

	var version = '1.0.0.9';

	this.shortKey = false;
	var shortKeyCode = 'foobar';
	var shortKeySymbol = 'Ctrl';

	var undefined;

	//var sselected = false;

	this.foo = function () {
		alert('foo');
		return true;
	};

	this.lilObject = function (vars) {
		return new lilObject(vars);
	}

	this.isLoaded = function (obj,callback) {
		return new isLoaded(obj,callback);
	}

	this.prompt = function (vars) {
		return new pprompt(vars);
	}

	this.alert = function (vars) {
		return new aalert(vars);
	}

	this.confirm = function (vars) {
		return new cconfirm(vars);
	}

	this.select = function (vars) {
		return new sselect(vars);
	}

	this.panel = function (vars) {
		return new panel(vars);
	}

	jQuery(document).keydown(function (e) {

		if((shortKeyCode === 'foobar') && ((e.which === 17) || (e.which === 224) || (e.which === 91))) {

			shortKeyCode = e.which;

			if(shortKeyCode !== 17) {
				shortKeySymbol = '&#8984;';
			}

			LBXUI.shortKey = true;

		} else if(e.which === shortKeyCode) {
			LBXUI.shortKey = true;
		}
	}).keyup(function (e) {

		if(e.which === shortKeyCode) {
			LBXUI.shortKey = false;
		}

	});
/*
	jQuery('img[data-lbxobjid="116951"]').click(function(){
		alert('width = '+jQuery(window).width()+' - height = '+jQuery(window).height());
	});*/

	jQuery('input[data-format]').live('keyup change',function() {

		var format = jQuery.parseJSON(jQuery(this).attr('data-format'));
		if(format.typ == 'num') {
			if(jQuery(this).val().search(/^[0-9]{1,}$/) === -1) {
				jQuery(this).val(jQuery(this).val().replace(/[^0-9]/g,''));
			}
			if(format.lng && jQuery(this).val().length > format.lng) {
				jQuery(this).val(jQuery(this).val().substr(0,format.lng));
			}
		} else if(format.typ == 'dec') {
			if(jQuery(this).val().search(/[^0-9\.]/g) !== -1) {
				jQuery(this).val(jQuery(this).val().replace(/[^0-9\.]/g,''));
			}
			if((jQuery(this).val().search(/^[0-9]{1,}[\.]{1}[^0-9]{1,}$/g) === -1) && (jQuery(this).val().search(/^[0-9]{1,}$/g) === -1)) {
				var sides = jQuery(this).val().split('.',2);
//alert(sides);
				if(format.lng && sides[0].length > format.lng) {
					sides[0] = sides[0].substr(0,format.lng);
				}
				if(format.dcd && sides[1].length > format.dcd) {
					sides[1] = sides[1].substr(0,format.dcd);
				}
				jQuery(this).val(sides[0]+'.'+sides[1]);
			}
			if(jQuery(this).val().search(/^[0-9]{1,}$/g) !== -1) {
				if(format.lng && jQuery(this).val().length > format.lng) {
					jQuery(this).val(jQuery(this).val().substr(0,format.lng));
				}
			}
		}

	});

	jQuery('input[data-format]').live('change',function() {

		var format = jQuery.parseJSON(jQuery(this).attr('data-format'));
		if((format.typ == 'num') || (format.typ == 'dec')) {
			if(format.min && jQuery(this).val() < format.min) {
				jQuery(this).val(format.min);
			}
			if(format.max && jQuery(this).val() > format.max) {
				jQuery(this).val(format.max);
			}
		}
		if(format.typ == 'dec') {
			if(jQuery(this).val().search(/\.$/g) !== -1) {
				jQuery(this).val(jQuery(this).val().replace(/\./g,''));
			}
		}
	});

	jQuery('input[data-name],textarea[data-name],select[data-name]').live('change',function() {

		jQuery(this).attr('name',jQuery(this).attr('data-name'));

	});




	jQuery('*[data-lbxObjId]').each(function() {

		if(jQuery(this).data('LBXUIlilObject') === undefined) {
			var obj = LBXUI.lilObject({"JQO":jQuery(this)});
		}

	});

	jQuery('*[data-lbxObjId]').live('mouseenter',function() {

		if(jQuery(this).data('LBXUIlilObject') === undefined) {
			var obj = LBXUI.lilObject({"JQO":jQuery(this)});
		}

	});




/*	jQuery('*[data-lbxUiToolTip]').live('mouseenter',function(e){
		
		//var tmr = setTimeOut(
		
		jQuery(this).removeAttr('title');
		
		var tip = decodeURIComponent(jQuery(this).attr('data-lbxUiToolTip'));
		var cl = 'lbxUiToolTip';
		if(tip.indexOf('<img') === 0) {
			cl = 'lbxUiToolTipImage';
		}
		
		var toolTip = jQuery('<div/>',{"class":cl,"html":tip});
		jQuery('body').children('*.lbxUiToolTip').remove();
		jQuery('body').append(toolTip);

		if((jQuery(window).width()/2) < e.pageX) {
			toolTip.css({"left":(e.pageX-40-toolTip.width())+'px'});
		} else {
			toolTip.css({"left":(e.pageX+40)+'px'});
		}
		if((jQuery(window).height()/2) < e.pageY) {
			toolTip.css({"top":(e.pageY-40-toolTip.height())+'px'});
		} else {
			toolTip.css({"top":(e.pageY+40)+'px'});
		}

		toolTip.show('fast');
//console.log(jQuery(this).attr('data-lbxUiToolTip'));
		jQuery(this).mouseleave(function(){
			toolTip.hide('fast',function(){
				toolTip.remove();
			});
		});
	});*/

	jQuery('*[data-lbxUiToolTip]').live('mouseenter',function(e){
		
		var tmr = false;
		var tmmr = false;
		var targ = jQuery(this);
		
		targ.removeAttr('title');
		
		var tip = decodeURIComponent(targ.attr('data-lbxUiToolTip'));
		var toolTip;

		if(tip.indexOf('$') === 0) {
			if(tip === '$content') {
				tip = targ.html();
			} else if(tip === '$self') {
				//tip = targ.html();
			}
		}

		var cl = 'lbxUiToolTip';
		if(tip.indexOf('<img') === 0) {
			cl = 'lbxUiToolTipImage';
		}

		var ldbl;
		var ldd = 0;
		if(targ.data('ttLdd')) {
			ldd = targ.data('ttLdd');
		}
		jQuery('body').children('*.lbxUiToolTip,*.lbxUiToolTipImage').remove();

if(!tmr) {
		tmr = setTimeout(function(){

			
			var crsr = targ.css('cursor');
			targ.css('cursor','progress');
			
			toolTip = jQuery('<div/>',{"class":cl,"html":tip});
			toolTip.hide('fast');

			ldbl = toolTip.find('img');
			var t = 20;
			if(ldd === ldbl.length) {
				t = 1;
			}
if(!tmmr) {
			tmmr = setInterval(function(){

				if(ldd >= ldbl.length) {
					clearInterval(tmmr);

					targ.css('cursor',crsr);
					targ.data('ttLdd',ldd);

					jQuery('body').append(toolTip);

					if((jQuery(window).width()/2) < e.pageX) {
						toolTip.css({"left":(e.pageX-40-toolTip.width())+'px'});
					} else {
						toolTip.css({"left":(e.pageX+40)+'px'});
					}
					if((jQuery(window).height()/2) < e.pageY) {
						toolTip.css({"top":(e.pageY-40-toolTip.height())+'px'});
					} else {
						toolTip.css({"top":(e.pageY+40)+'px'});
					}

					toolTip.show(0);
					tmmr = false;
					tmr = false;
				} else {
					ldbl.each(function(){
						if(this.complete) {
							ldd++;
						}
					});
				}
			
			},t);
}

		},150);
}
//console.log(jQuery(this).attr('data-lbxUiToolTip'));
		jQuery(this).mouseleave(function(){
			clearTimeout(tmr);
			tmr = false;
			clearInterval(tmmr);
			tmmr = false;
			if(toolTip !== undefined) {
				toolTip.hide('fast',function(){
					toolTip.remove();
				});
			}
		});
	});

/*	function isLoaded(obj,callback) {
		
		var ISLOADED = this;

		var loadables;

		if(obj.attr('tagName') === 'IMG') {
			loadables = obj;
		} else {
			loadables = obj.find('img');//,iframe');
		}

		var t = loadables.length;
		var ldd = [];
		var cnt=0;
		while(cnt !== t) {
			cnt=0;
			loadables.each(function(){
				if(typeof this.naturalHeight != undefined && this.naturalHeight > 0) {
					ldd[cnt] = 'f';
					cnt++
					//alert(this.naturalHeight+' - '+jQuery(this).height());
				} else if(this.complete) {
					ldd[cnt] = 'f';
					cnt++
				}
			});
		}
		while(ldd.length !== t) {
			if(ldd.length === t) {
				callback();
			}
		}
	};*/

	function pprompt(vars) {

		var PROMPT = this;

		this.JQO = false;

		if(vars.message !== undefined) {

			jQuery('body').children('div[class^=lbxUi]').hide('fast',function(){
				jQuery(this).remove();
			});

			var cancel = "Cancel";
			var ok = "OK";
			var type = "text";
			if(vars.cancel !== undefined) {
				cancel = vars.cancel;
			}
			if(vars.ok !== undefined) {
				ok = vars.ok;
			}
			if(vars.type !== undefined) {
				type = vars.type;
			}

			this.JQO = jQuery('<div/>',{
				"class":"lbxUiPrompt",
				"html":'<input type="'+type+'" /><div>'+vars.message+'</div><div class="lbxUiButtonRow" ><div class="lbxUiCancelButton lbxUiTextButton" >'+cancel+'</div><div class="lbxUiOkButton lbxUiTextButton" >'+ok+'</div></div>'
			});

			var INPUT = this.JQO.children('input');
			if(vars.value !== undefined) {
				INPUT.val(vars.value);
			}
			this.CANCEL = this.JQO.children().children('div.lbxUiCancelButton');

			this.VALUE = INPUT.val();
			this.OK = this.JQO.children().children('div.lbxUiOkButton');

			this.OK.click(function(){
				PROMPT.VALUE = INPUT.val();
				PROMPT.JQO.hide('fast',function(){
					PROMPT.JQO.remove();
				});
			});
			this.CANCEL.click(function(){
				PROMPT.JQO.hide('fast',function(){
					PROMPT.JQO.remove();
				});
			});

			jQuery(document).keypress(function(e){
				if(e.which === 13) {
					PROMPT.OK.click();
				}
			});

			this.JQO.appendTo('body').hide();

			if(vars.position === undefined) {

				var w = this.JQO.width();
				var h = this.JQO.height();

				if(window.innerWidth) {
					vars.position = [
						(((window.innerWidth/2)-(w/2))+window.pageXOffset),
						(((window.innerHeight/2)-(h/2))+window.pageYOffset)
					];
				} else if(document.documentElement) {
					vars.position = [
						(((document.documentElement.clientWidth/2)-(w/2))+document.documentElement.scrollLeft),
						(((document.documentElement.clientHeight/2)-(h/2))+document.documentElement.scrollTop)
					];
				} else if(document.body.scrollTop) {
					vars.position = [
						(((document.body.clientWidth/2)-(w/2))+document.body.scrollLeft),
						(((document.body.clientHeight/2)-(h/2))+document.body.scrollTop)
					];
				}
			}

			if(0+vars.position[0] < 0) {
				vars.position[0] = 20;
			} else if(0+vars.position[1] < 0) {
				vars.position[1] = 20;
			}

			this.JQO.css({"left":vars.position[0]+'px',"top":vars.position[1]+'px'})
			.show('fast',function(){
				INPUT.focus().select();
			});

		}
	}

	function aalert(vars) {

		var ALERT = this;

		this.JQO = false;

		if(vars.message !== undefined) {

			jQuery('body').children('div[class^=lbxUi]').hide('fast',function(){
				jQuery(this).remove();
			});

			var ok = "OK";
			if(vars.ok !== undefined) {
				ok = vars.ok;
			}

			this.JQO = jQuery('<div/>',{
				"class":"lbxUiAlert",
				"html":'<div>'+vars.message+'</div><div class="lbxUiButtonRow" ><div class="lbxUiOkButton lbxUiTextButton" >'+ok+'</div></div>'
			});

			this.OK = this.JQO.children().children('div.lbxUiOkButton');

			this.VALUE = false;

			this.OK.mousedown(function(){
				ALERT.VALUE = true;
			});
			this.OK.click(function(){
				ALERT.JQO.hide('fast',function(){
					ALERT.JQO.remove();
				});
			});

			jQuery(document).keypress(function(e){
				if(e.which === 13) {
					ALERT.OK.click();
				}
			});

			this.JQO.appendTo('body').hide();

			if(vars.position === undefined) {

				var w = this.JQO.width();
				var h = this.JQO.height();

				if(window.innerWidth) {
					vars.position = [
						(((window.innerWidth/2)-(w/2))+window.pageXOffset),
						(((window.innerHeight/2)-(h/2))+window.pageYOffset)
					];
				} else if(document.documentElement) {
					vars.position = [
						(((document.documentElement.clientWidth/2)-(w/2))+document.documentElement.scrollLeft),
						(((document.documentElement.clientHeight/2)-(h/2))+document.documentElement.scrollTop)
					];
				} else if(document.body.scrollTop) {
					vars.position = [
						(((document.body.clientWidth/2)-(w/2))+document.body.scrollLeft),
						(((document.body.clientHeight/2)-(h/2))+document.body.scrollTop)
					];
				}

			}

			if(0+vars.position[0] < 0) {
				vars.position[0] = 20;
			} else if(0+vars.position[1] < 0) {
				vars.position[1] = 20;
			}

			this.JQO.css({"left":vars.position[0]+'px',"top":vars.position[1]+'px'})
			.show('fast',function(){
				jQuery(document).focus();
			});
		}
	}

	function cconfirm(vars) {

		var CONFIRM = this;

		this.JQO = false;

		if(vars.message !== undefined) {

			jQuery('body').children('div[class^=lbxUi]').hide('fast',function(){
				jQuery(this).remove();
			});

			var cancel = "Cancel";
			var ok = "OK";
			if(vars.cancel !== undefined) {
				cancel = vars.cancel;
			}
			if(vars.ok !== undefined) {
				ok = vars.ok;
			}

			this.JQO = jQuery('<div/>',{
				"class":"lbxUiConfirm",
				"html":'<div>'+vars.message+'</div><div class="lbxUiButtonRow" ><div class="lbxUiCancelButton lbxUiTextButton" >'+cancel+'</div><div class="lbxUiOkButton lbxUiTextButton" >'+ok+'</div></div>'
			});

			this.CANCEL = this.JQO.children().children('div.lbxUiCancelButton');

			this.OK = this.JQO.children().children('div.lbxUiOkButton');

			this.VALUE = false;
			this.OK.mousedown(function(){
				CONFIRM.VALUE = true;
			});
			this.OK.click(function(){
				CONFIRM.JQO.hide('fast',function(){
					CONFIRM.JQO.remove();
				});
			});

			this.CANCEL.click(function(){
				CONFIRM.JQO.hide('fast',function(){
					CONFIRM.JQO.remove();
				});
			});

			jQuery(document).keypress(function(e){
				if(e.which === 13) {
					CONFIRM.OK.click();
				}
			});

			this.JQO.appendTo('body').hide();

			if(vars.position === undefined) {

				var w = this.JQO.width();
				var h = this.JQO.height();

				if(window.innerWidth) {
					vars.position = [
						(((window.innerWidth/2)-(w/2))+window.pageXOffset),
						(((window.innerHeight/2)-(h/2))+window.pageYOffset)
					];
				} else if(document.documentElement) {
					vars.position = [
						(((document.documentElement.clientWidth/2)-(w/2))+document.documentElement.scrollLeft),
						(((document.documentElement.clientHeight/2)-(h/2))+document.documentElement.scrollTop)
					];
				} else if(document.body.scrollTop) {
					vars.position = [
						(((document.body.clientWidth/2)-(w/2))+document.body.scrollLeft),
						(((document.body.clientHeight/2)-(h/2))+document.body.scrollTop)
					];
				}
			}

			if(0+vars.position[0] < 0) {
				vars.position[0] = 20;
			} else if(0+vars.position[1] < 0) {
				vars.position[1] = 20;
			}

			this.JQO.css({"left":vars.position[0]+'px',"top":vars.position[1]+'px'})
			.show('fast',function(){
				jQuery(document).focus();
			});

		}
	}

	function sselect(vars) {

		var SELECT = this;

		this.JQO = false;

		if((vars.message !== undefined) && (vars.data !== undefined)) {

			jQuery('body').children('div[class^=lbxUi]').hide('fast',function(){
				jQuery(this).remove();
			});

			var cancel = "Cancel";
			var ok = "OK";
			if(vars.cancel !== undefined) {
				cancel = vars.cancel;
			}
			if(vars.ok !== undefined) {
				ok = vars.ok;
			}

			var slcted;
			if(vars.selected !== undefined) {
				slcted = vars.selected;
			}

			var sel = '<select>';
			var s;
			for(i in vars.data) {
				s = '';
				if(slcted === vars.data[i]) {
					s = ' selected="1"';
				}
				sel = sel+'<option'+s+' value="'+vars.data[i]+'" >'+vars.data[i]+'</option>';
			}
			sel = sel+'</select>';

			this.JQO = jQuery('<div/>',{
				"class":"lbxUiPrompt",
				"html":'<div>'+vars.message+'</div>'+sel+'<div class="lbxUiButtonRow" ><div class="lbxUiCancelButton lbxUiTextButton" >'+cancel+'</div><div class="lbxUiOkButton lbxUiTextButton" >'+ok+'</div></div>'
			});

			var INPUT = this.JQO.children('select');

			this.CANCEL = this.JQO.children().children('div.lbxUiCancelButton');

			this.VALUE = INPUT.val();
			this.OK = this.JQO.children().children('div.lbxUiOkButton');

			this.OK.click(function(){
				SELECT.VALUE = INPUT.val();
				SELECT.JQO.hide('fast',function(){
					SELECT.JQO.remove();
				});
			});
			this.CANCEL.click(function(){
				SELECT.JQO.hide('fast',function(){
					SELECT.JQO.remove();
				});
			});

			jQuery(document).keypress(function(e){
				if(e.which === 13) {
					SELECT.OK.click();
				}
			});

			this.JQO.appendTo('body').hide();

			if(vars.position === undefined) {

				var w = this.JQO.width();
				var h = this.JQO.height();

				if(window.innerWidth) {
					vars.position = [
						(((window.innerWidth/2)-(w/2))+window.pageXOffset),
						(((window.innerHeight/2)-(h/2))+window.pageYOffset)
					];
				} else if(document.documentElement) {
					vars.position = [
						(((document.documentElement.clientWidth/2)-(w/2))+document.documentElement.scrollLeft),
						(((document.documentElement.clientHeight/2)-(h/2))+document.documentElement.scrollTop)
					];
				} else if(document.body.scrollTop) {
					vars.position = [
						(((document.body.clientWidth/2)-(w/2))+document.body.scrollLeft),
						(((document.body.clientHeight/2)-(h/2))+document.body.scrollTop)
					];
				}
			}

			if(0+vars.position[0] < 0) {
				vars.position[0] = 20;
			} else if(0+vars.position[1] < 0) {
				vars.position[1] = 20;
			}

			this.JQO.css({"left":vars.position[0]+'px',"top":vars.position[1]+'px'})
			.show('fast',function(){
				//INPUT.focus().select();
			});

		}

	}

	function panel(vars) {

		var PANEL = this;

		this.JQO = false;

		if(vars.source !== undefined) {

			jQuery('body').children('div[class^=lbxUi]').hide('fast',function(){
				jQuery(this).remove();
			});

			if(vars.position === undefined) {
				if(window.innerWidth) {
					vars.position = [
						window.pageXOffset,
						window.pageYOffset
					];
				} else if(document.documentElement) {
					vars.position = [
					document.documentElement.scrollLeft,
					document.documentElement.scrollTop
					];
				} else if(document.body.scrollTop) {
					vars.position = [
						document.body.scrollLeft,
						document.body.scrollTop
					];
				}
			}

			var bodyOverflow = jQuery('body').css('overflow');

			var ttype = "page";
			if(vars.type !== undefined) {
				ttype = vars.type;
			}

			this.JQO = jQuery('<div/>',{
				"class":"lbxUiPanel"
			})
			.fadeTo(0,0)
			.css({"left":vars.position[0]+'px',"top":vars.position[1]+'px'});

			if(ttype === 'page') {
				var inner = jQuery('<div/>',{
					"class":"inner",
					"html":'<iframe frameBorder="0" src="'+vars.source+'" ></iframe>'
				}).appendTo(PANEL.JQO);
			} else if(ttype === 'image') {
				var inner = jQuery('<div/>',{
					"class":"inner",
					"html":'<img src="'+vars.source+'" />'
				}).appendTo(PANEL.JQO);
			}
			
			inner.css('overflow','hidden');

			//this.OK = this.JQO;

			this.OK = jQuery('<div/>',{
				"class":'lbxUiButton lbxUiPanelCloser'
			}).appendTo(inner);

			//this.OK = this.JQO.children().children('div.lbxUiOkButton');

			this.JQO.click(function(){
				PANEL.OK.click();
			});

			this.OK.click(function(){
				PANEL.JQO.hide('fast',function(){
					PANEL.JQO.remove();
					//jQuery('body').css('overflow','auto');
				});
				return false;
			});

			/*jQuery(document).keypress(function(e){
				if(e.which === 13) {
					PANEL.OK.click();
				}
			});*/

			this.JQO.appendTo('body');
			
			var content = this.JQO.children().children('*:first');

			content.bind('adjust',function(){
				
				var cont = jQuery(this);

				var w;
				var h;

				if(cont.attr('tagName') === 'IFRAME') {
					var doc = cont.attr('contentDocument');
					var win = cont.attr('contentWindow');

					jQuery(doc.body).css({'margin':'0px','padding':'0px'});
					cont.css({'margin':'0px','padding':'0px'});

					var cW = jQuery(doc).width();
					var cH = jQuery(doc).height();

					if(cH < (jQuery(window).height()-100)) {
					} else {
						cH = (jQuery(window).height()-100);
						cW = cW+(win.innerWidth-doc.body.clientWidth);
					}
					if(cW < (jQuery(window).width()-100)) {
					} else {
						cW = (jQuery(window).width()-100);
					}

					w = cW;
					h = cH;

					cont.css({
						"width":cW+'px',
						"height":cH+'px',
						"border":"none"
					});
					
				} else {
					w = cont.width();
					h = cont.height();
				}

				var l = (jQuery('body').outerWidth()-w-40)/2;
				var t = (jQuery('body').outerHeight()-h-40)/2;

				PANEL.JQO.children('div.inner').css({
					'width':w+'px',
					'height':h+'px',
					'left':l+'px',
					'top':t+'px'
				});
				PANEL.JQO.fadeTo('fast',1,function(){
					inner.css('overflow','visible');
					//jQuery('body').css('overflow','hidden');
				});

			});

			content.load(function(){
				content.trigger('adjust');
			});

			var adj = setInterval(function(){content.trigger('adjust');},1000);
		}
	}

//Ping
if(top === self) {
	var reminder = false;
	var signer = false;
	var body = jQuery('body');
	var ping = setInterval(function() {

		$.get("/?lbxGetPing",function(data){
			if((data === 'Ping') && (reminder === false) && body.hasClass('user')) {

				reminder = LBXUI.confirm({'message':"Your Inactive Session Time Out has expired. You can change this setting from the User Preferences page.<br/><br/>If you are away from your computer for any length of time, for security reasons, please Sign Out of your littleblox appliction.<br/><br/>You will automatically be Signed Out in another 5 minutes if you do not respond.",'cancel':"Sign Out now.",'ok':"Keep me Signed In."});

				reminder.CANCEL.click(function(){
					window.location = '/?lbxSignOut=true';
				});
				reminder.OK.click(function(){
					clearTimeout(t);
					$.get("/?lbxGetFoo");
					reminder = false;
				});

				var t = setTimeout(function(){
					$.post('/?lbxGetFoo',"lbxSignOut=true",function (data) {
						if(data === 'Foo') {
							reminder.OK.click();
							signer = false;
						}
					});
				},300000);

			} else if((data === 'pING') && (signer === false) && body.hasClass('user')) {

				signer = LBXUI.prompt({'type':"password",'message':"You have or have been Signed Out.<br/><br/>Enter your password to Sign In again.",'ok':"Sign In"});

				reminder = false;

				signer.OK.click(function(){
					$.post('/?lbxGetPing',"lbxSignIn[password]="+signer.VALUE,function (data) {
						if((data === 'ping') || (data === 'Ping')) {
							$.get("/?lbxGetFoo");
							var a = LBXUI.alert({'message':"You are now signed in"});
							a.OK.click(function(){
								signer = false;
							});
						} else {
							var a = LBXUI.alert({'message':"Login failed"});
							a.OK.click(function(){
								signer = false;
							});
						}
					});
					signer = false;
				});

				signer.CANCEL.click(function(){
					signer = false;
				});
			} else if((data === 'ping') && (reminder !== false) && body.hasClass('user')) {
				reminder.OK.click();
			} else if((data === 'ping') && (signer !== false) && body.hasClass('user')) {
				signer.CANCEL.click();
			} else if((data === 'ping') && (!body.hasClass('user'))) {
				window.location = window.location;
			}
		});
	},25000);
}

	function lilObject(vars) {

		if(!vars.JQO) {
			return false;
		}

		if(vars.JQO.data('LBXUIlilObject')) {
			return false;
		}

		var LILOBJECT = this;
		var refire = false;
		var sselected = false;

		this.JQO = vars.JQO;
		var id = this.JQO.attr('data-lbxObjId');
		this.minimisable = false;
		
		if(this.JQO.css('display') != 'inline' && (this.JQO.css('position') == 'relative' || this.JQO.css('position') == 'absolute' || this.JQO.css('position') == 'fixed')) {
			this.userControl = this.JQO.children('div.lbxUiUserControl');
			if(this.userControl.length !== 1) {
				this.userControl = jQuery('<div/>',{
					"class":'lbxUiUserControl'
				}).appendTo(this.JQO);
			}
		} else {
			this.userControl = false;
		}

		this.rreload = function (vars) {

			if(vars === undefined) {
				vars = {};
			}

			var template = '';
			if(LILOBJECT.JQO.attr('data-lbxObjTemplate')) {
				template = '&lbxObjTemplate='+LILOBJECT.JQO.attr('data-lbxObjTemplate');
			}
			var theId = id;
			if(vars.substitute !== undefined) {
				theId = vars.substitute;
			}
//alert(theId);
			var post = "f=b";
			var pargs = this.JQO.children('input[type="hidden"][name^="args"]');
			if(vars.post !== undefined) {
				post = vars.post;
			} else if(pargs.length > 0) {
				post = pargs.serialize();
			}

			if(vars.button !== undefined) {
				vars.button.hide('fast');
			}

			/*jQuery.post('/?lbxRefresh='+theId+template,post,function(data) {
				if(data.length > 0) {
					var par = LILOBJECT.JQO.parent();
					var id = LILOBJECT.JQO.attr('data-lbxObjId');
					LILOBJECT.JQO.hide(2000,function(){

						var n = jQuery(data);
						n.hide(0,function(){

							LILOBJECT.JQO.replaceWith(n);
						
							var obj = LBXUI.lilObject({"JQO":n,"minimisable":LILOBJECT.minimisable});

							if(vars.callback !== undefined) {
	//alert(vars.callback);
								vars.callback();
							}
							n.show(2000);
						});
					});
				} else {
					LILOBJECT.JQO.hide(2000,function(){
						LILOBJECT.JQO.remove();
					});
				}
			});*/

			var a = LBXUI.alert({'message':"Please wait a moment"});

			jQuery.post('/?lbxRefresh='+theId+template,post,function(data) {


				if(data.length > 0) {

					if(data.match(/^[0-9]{4}(;[[0-9]{1,})?$/) != null) {
						if(data == 1001) {
							//reload whole window
							window.location = window.location;
							return false;
						} else if(data.match(/^[0-9]{4};[[0-9]{1,}$/) != null) {
							data = data.split(';');
							if(data[0] == '1002') {
								//reload nth object up ([1002;2] will reload the parent object, [1002;1] will reload this object)

							}
						}
					}

					var par = LILOBJECT.JQO.parent();
					var id = LILOBJECT.JQO.attr('data-lbxObjId');
					//LILOBJECT.JQO.hide(2000,function(){
						
						var n = jQuery(data);
						//n.hide(0,function(){
							
							LILOBJECT.JQO.replaceWith(n);
							
							var obj = LBXUI.lilObject({"JQO":n,"minimisable":LILOBJECT.minimisable});
							
							if(vars.callback !== undefined) {
								//alert(vars.callback);
								vars.callback();
							}
							//n.show(2000);
						//});
					//});
				} else {
					LILOBJECT.JQO.hide(2000,function(){
						LILOBJECT.JQO.remove();
					});
				}
				a.OK.click();
			});
		}

		this.ddelete = function (vars) {

			c = LBXUI.confirm({
				"message":'Are you sure you want to Delete this Object?',
				"ok":"Yes Delete"
			});

			c.OK.click(function(){

				var q = '';

				q = q+'lbxNewDelete[]='+id;

				$.post("/?lbxGetFoo",q,function (data) {
					if(data === 'Foo') {
						LILOBJECT.JQO.remove();
					}
				},"text");

			});

		}

		this.createProp = function (vars) {

				var pn = LBXUI.prompt({
					"message":"Enter a name for your new property",
					"value":"new property"
				});

				pn.OK.click(function(){

					var pv = LBXUI.prompt({
						"message":"Enter a value to set your new property to",
						"value":"foo"
					});

					pv.OK.click(function(){

						var ttype = 'property';

						$.post("/?lbxGetFoo","lbxSetProperty["+id+"]=" +pn.VALUE.replace(/ /g,'_')+"&value="+pv.VALUE ,function (data) {
							if(data === 'Foo') {
								LILOBJECT.rreload();
							}
						},"text");

					});

				});
		}

		this.maximise = function (vars) {

			var ne = LILOBJECT.JQO.next();
			if(ne.attr('data-lbxObjId') === LILOBJECT.JQO.attr('data-lbxObjId')) {
				vars.button.hide('fast');
				LILOBJECT.JQO.hide('slow',function(){
					ne.show(1000);
					vars.button.show('fast');
				});
			} else {

				var template = '';
				var post = '';
				if(LILOBJECT.JQO.attr('data-lbxMaximisable')) {
					var d = jQuery.parseJSON(LILOBJECT.JQO.attr('data-lbxMaximisable'));
					if(d.template !== undefined) {
						template = '&template='+d.template;
					}
					if(d.post instanceof Object) {
						post = jQuery.param(d.post);
					}
				}
				vars.button.hide('fast');
				jQuery.post('/?lbxRefresh='+LILOBJECT.JQO.attr('data-lbxObjId')+template,post,function(data) {
					var id = LILOBJECT.JQO.attr('data-lbxObjId');
					LILOBJECT.JQO.after(data);
					var ne = LILOBJECT.JQO.next('*[data-lbxObjId="'+id+'"]');
					ne.hide();
					var obj = LBXUI.lilObject({"JQO":ne,"minimisable":true});
					LILOBJECT.JQO.toggle('slow',function(){
						ne.show(1000);
						vars.button.show('fast');
					});

				});

			}

		}

		this.minimise = function (vars) {
			vars.button.hide('fast');
			var pr = LILOBJECT.JQO.prev();
			if(pr.attr('data-lbxObjId') === LILOBJECT.JQO.attr('data-lbxObjId')) {
				LILOBJECT.JQO.hide(1000,function(){
					pr.show('slow');
					vars.button.show('fast');
				});
			}

		}

		this.wip = function (vars) {
			vars.button.hide('fast');
			var a = LBXUI.alert({
				"message":"This feature or Widget is a Work In Progress,<br/>it is not in anyway feature complete,<br/>and it is not necessarily representative of the finished product."
			});

			a.OK.click(function(){
				vars.button.show('fast');
			});
		}

		this.sselect = function (vars) {
			if(LILOBJECT.JQO.hasClass('lbxUiSelected')) {
				LILOBJECT.JQO.removeClass('lbxUiSelected');
			} else {
				sselected = $('*.lbxUiSelected');
				selectedSiblings = LILOBJECT.JQO.siblings('*.lbxUiSelected');
				sselected.removeClass('lbxUiSelected');
				selectedSiblings.addClass('lbxUiSelected');
				LILOBJECT.JQO.addClass('lbxUiSelected');
			}
			sselected = $('*.lbxUiSelected');

			if(sselected.length > 0) {

				if(sselected.length === 1) {

				}

			}

		}


		var richTimers = {"bold":false,"italic":false,"underline":false};

		this.executeRichControl = function (vars) {

			var doc;

			if(vars.control === undefined) {
				return false;
			}

			if(!richTimers[vars.control]) {
				richTimers[vars.control] = setInterval(function() {
					if(vars.button === undefined) {
						clearInterval(richTimers[vars.control]);
						richTimers[vars.control] = false;
						return false;
					}
					if(vars.target.attr('contentDocument') === null) {
						return false;
					}
					if(vars.target.attr('contentDocument').queryCommandState(vars.control) === true) {
						vars.button.css('background-color','#bbb');
					} else {
						vars.button.css('background-color','transparent');
					}
					doc = vars.target.attr('contentDocument');
					if(vars.receiver !== undefined) {
						if(vars.receiver.attr('value') !== doc.body.innerHTML.trim()) {
							vars.receiver.attr('value',doc.body.innerHTML.trim());
							vars.receiver.change();
						}
					}
				},500);
			}

			vars.target.attr('contentDocument').execCommand("useCSS",false,null);
			if(vars.target.attr('contentDocument').queryCommandEnabled(vars.control) === true) {
				vars.target.attr('contentDocument').execCommand(vars.control,false,null);
			} else {
				vars.target.attr('contentDocument').execCommand(vars.control,true,null);
			}
		}



		if(this.userControl) {
			this.userControl.hide();

			this.JQO.mouseover(function(e){
				if(LILOBJECT.userControl.children().length > 0) {
					LILOBJECT.userControl.show();
				}
			});
			this.JQO.mouseleave(function(e){
				LILOBJECT.userControl.hide();
			});
		}

		if(this.JQO.hasClass('lbxSelectable')) {

			this.JQO
			.click(function(e){
				if(e.target === this) {
					LILOBJECT.sselect();
				}

			});

		}
		
		if(this.JQO.hasClass('lbxUiDeletable')) {

			var deleter = this.JQO.children('.lbxUiDeleteButton');
			if(deleter.length === 0) {
				if(this.userControl) {
					deleter = jQuery('<div/>',{
						"class":"lbxUiButton lbxUiDeleteButton",
						"css":{"background-image": "url(/.images/icon-shadowless/slash.png)"}
					}).appendTo(this.userControl);
				}
			} else {
				deleter.css('cursor','pointer');
			}
			deleter.attr("data-lbxUiToolTip","Delete this "+this.JQO.attr('data-lbxObjClass'))
			.click(function(e){
				LILOBJECT.ddelete({"button":jQuery(this),"e":e});
			});
		}

		if(this.JQO.hasClass('lbxForm')) {
			var f = this.JQO;

			var submits = f.find('input[type="submit"], input[type="image"], button[type="submit"]' ).not(f.find('*.lbxForm,form').find('input[type="submit"], input[type="image"], button[type="submit"]'));

			/*var inpts = f.find('input[name],textarea[name],select[name]')
			.not(f.find('*.lbxFormStop,form').find('*'))
			.not(f.find('input[type="submit"], input[type="image"], button[type="submit"]'));*/

			submits.click(function(){
				var sub = jQuery(this);
				var inpts = f.find('input[name][name^="_"] ,textarea[name][name^="_"] ,select[name][name^="_"] ')
				.not(f.find('*.lbxFormStop,form').find('*'))
				.not(f.find('input[type="submit"], input[type="image"], button[type="submit"]'));

				if(sub.attr('name')) {
					inpts = inpts.add('<input type="hidden" name="'+sub.attr('name')+'" value="'+sub.val()+'" />');
				}
				if(f.attr('data-lbxKey')) {
					inpts = inpts.add('<input type="hidden" name="lbxKey" value="'+f.attr('data-lbxKey')+'" />');
				}
				var p = inpts.serialize();
//alert(p);
				if(sub.hasClass('deleter')) {
					var c =  LBXUI.confirm({
						"message":"Are you sure you want to Delete this Object."
					});

					c.OK.click(function(){
						LILOBJECT.rreload({'post':p});
						sub.fadeTo(500,0.1);
						return false;
					});

				} else {
					LILOBJECT.rreload({'post':p});
					sub.fadeTo(500,0.1);
					return false;
				}
			});

			f.find('input.changeInclude,textarea.changeInclude,select.changeInclude')
			.each(function() {

				if(jQuery(this).attr('name')) {
					jQuery(this).attr('data-name',jQuery(this).attr('name'));
					jQuery(this).removeAttr('name');
				}

			})
			.change(function() {

				if(jQuery(this).attr('data-name')) {
					jQuery(this).attr('name',jQuery(this).attr('data-name'));
					if(jQuery(this).attr('type') == 'checkbox') {
						var sibs = f.find('input.changeInclude[checked=true][data-name="'+jQuery(this).attr('data-name')+'"]');
						sibs.each(function(){
							if(jQuery(this).attr('data-name')) {
								jQuery(this).attr('name',jQuery(this).attr('data-name'));
							}
						});
					}
				}

			});

			f.find('input.changeSubmit,textarea.changeSubmit,select.changeSubmit')
			.not(f.find('*.lbxForm').find('input,textarea,select'))
			.change(function() {

				if(jQuery(this).attr('data-name')) {
					jQuery(this).attr('name',jQuery(this).attr('data-name'));
				}
				var inpts = f.find('input[name][name^="_"] ,textarea[name][name^="_"] ,select[name][name^="_"] ')
				.not(f.find('*.lbxFormStop,form').find('*'))
				.not(f.find('input[type="submit"], input[type="image"], button[type="submit"]'));

				if(f.attr('data-lbxKey')) {
					inpts = inpts.add('<input type="hidden" name="lbxKey" value="'+f.attr('data-lbxKey')+'" />');
				}
				
				var p = inpts.serialize();
//alert(p);
				LILOBJECT.rreload({'post':p});
				return false;

			});

			f.find('div.checkboxes')
			.not(f.find('*.lbxForm').find('div.checkboxes'))
			.each(function() {
				var ci = jQuery(this);
				var chks = ci.find('input[type="checkbox"]')
				.not(ci.find('*.lbxForm,form').find('input[type="checkbox"]'));

				if(ci.hasClass('forward')) {
					chks.change(function() {
						if(this.checked) {
							chks.filter('input[data-parent="'+this.id+'"]').each(function(){
								this.checked = true;
							});
						} else if(!this.checked) {
							chks.filter('input[data-parent="'+this.id+'"]').each(function(){
								this.checked = false;
							});
						}
					});
				}/* else if(ci.hasClass('backward')) {
					chks.change(function() {
						var t = jQuery(this);
						var p = ci.find('input[id="'+t.attr('data-parent')+'"]');
						var sibs = ci.find('input[data-parent="'+t.attr('data-parent')+'"][checked]');
						if(this.checked) {
							p.attr('checked',true);
						} else if(!this.checked && sibs.length == 0) {
							p.attr('checked',false);
						}
						
					});
				}*/

			});

if(jQuery.browser.mozilla) {
//if(false) {

			f.find('textarea.richText').each(function(){
	
				var textArea = jQuery(this);
				textArea.css('display','none');

				textArea.parent().removeClass('textarea').addClass('iframe');
				//textArea.parent().addClass('iframe');
				var editor = jQuery('<iframe/>',{
					'frameborder':0
				}).prependTo(textArea.parent());
	
				var richControl = jQuery('<div/>',{
					"class":"richControl"
				}).prependTo(textArea.parent());

				var bold = jQuery('<div/>',{
					"class":"boldButton button"
				}).appendTo(richControl);

				var italic = jQuery('<div/>',{
					"class":"italicButton button"
				}).appendTo(richControl);

				var underline = jQuery('<div/>',{
					"class":"underlineButton button"
				}).appendTo(richControl);

				bold.click(function(){
					LILOBJECT.executeRichControl({"control":"bold","button":jQuery(this),"target":editor,"receiver":textArea});
					editor.focus();
				});

				italic.click(function(){
					LILOBJECT.executeRichControl({"control":"italic","button":jQuery(this),"target":editor});
					editor.focus();
				});

				underline.click(function(){
					LILOBJECT.executeRichControl({"control":"underline","button":jQuery(this),"target":editor});
					editor.focus();
				});

				richControl.append('<div class="lbxClear" ></div>');
		
				editor.load(function () {

					var tht = jQuery(this);
					var doc = tht.attr('contentDocument');

					var v = nl2br(textArea.val().trim());

					doc.body.innerHTML = v;
				
					doc.designMode = "on";
					doc.execCommand("useCSS",false,null);
					//	doc.execCommand("styleWithCSS",true,null);

					doc.body.style.background = "#ffffff";
					doc.body.style.fontSize = "12px";
					doc.body.style.fontFamily = "sans-serif";

					bold.click();bold.click();
					italic.click();italic.click();
					underline.click();underline.click();

				});
			
			//editor.attr('src','/?lbxGetFoo');
			
			});
}
		}

		if(this.JQO.hasClass('lbxAlertable')) {
			if(this.userControl) {
				var lbxAlertData = this.JQO.attr('data-lbxAlertable');
				lbxAlertData = jQuery.parseJSON(lbxAlertData);
				if(lbxAlertData instanceof Object) {

					var alerter = jQuery('<div/>',{
						"class":"lbxUiButton",
						"css":{"background-image": "url(/.images/icon-shadowless/exclamation.png)"}
					})
					.appendTo(this.userControl)
					.attr("data-lbxUiToolTip",lbxAlertData.toolTip)
					.click(function(e){

						alerter.hide('fast',function(){
							alerter.show('fast');
						});
						var a = LBXUI.alert({
							"message":lbxAlertData.message
						});

						//a.OK.click(function(){
						//});

					});

				}
			}
		}
/*
		if(this.JQO.hasClass('lbxZoomable')) {

			if(this.JQO.attr('href')) {

				this.JQO
				.attr("data-lbxUiToolTip",'Click to Zoom')
				.click(function(e){

					var a = LBXUI.panel({
						"type":'image',
						"source":jQuery(this).attr('href')
					});

					return false;

					//a.OK.click(function(){
					//});

				});

			}

		}*/

		if(this.JQO.hasClass('lbxPanelable')) {

			if(this.JQO.attr('href')) {

				this.JQO
				.click(function(e){

					var a = LBXUI.panel({
						"type":'page',
						"source":jQuery(this).attr('href')
					});

					return false;

					//a.OK.click(function(){
					//});

				});

			}

		}

		if(this.JQO.hasClass('lbxMaximisable')) {

			var maximiser = this.JQO.find('*.lbxMaximiser[data-lbxLocalParent="'+id+'"]');
			if(maximiser.length > 0) {
				maximiser.click(function(e){
					LILOBJECT.maximise({"button":jQuery(this),"e":e});
				}).css('cursor','pointer');
			}

			if(this.userControl) {
				var theMaximiser = jQuery('<div/>',{
					"class":"lbxUiButton",
					"css":{"background-image": "url(/.images/icon-shadowless/arrow-out.png)"}
				})
				.appendTo(this.userControl)
				.attr("data-lbxUiToolTip","Maximise this item")
				.click(function(e){
					LILOBJECT.maximise({"button":jQuery(this),"e":e});
				});
			}
		}

		if(vars.minimisable && this.JQO.hasClass('lbxMinimisable')) {

			var minimiser = this.JQO.find('*.lbxMinimiser[data-lbxLocalParent="'+id+'"]');
			if(minimiser.length === 1) {
				minimiser.click(function(e){
					LILOBJECT.minimise({"button":jQuery(this),"e":e});
				});
			} else if(this.userControl) {
				minimiser = jQuery('<div/>',{
					"class":"lbxUiButton",
					"css":{"background-image": "url(/.images/icon-shadowless/arrow-in.png)"}
				})
				.appendTo(this.userControl)
				.attr("data-lbxUiToolTip","Minimise this item")
				.click(function(e){
					LILOBJECT.minimise({"button":jQuery(this),"e":e});
				});
			}

			this.minimisable = true;
		}

		if(this.JQO.hasClass('lbxBrowsable')) {

			var w;
			var brwser = this.JQO.children('.lbxBrowsableButton');
			if(brwser.length === 0) {
				if(this.userControl) {
					brwser = jQuery('<div/>',{
						"class":"lbxUiButton",
						"css":{"background-image": "url(/.images/icon-shadowless/block.png)"}
					}).appendTo(this.userControl);
				}
			}
			if(brwser.length === 1) {
				brwser.attr("data-lbxUiToolTip","Browse this "+this.JQO.attr('data-lbxObjClass'))
				.click(function(e){

					brwser.hide('fast',function(){
						brwser.show('fast');
					});

					w = window.open('/lbx/wrapper?object=~&template=lilBrowse&headers=1&selector='+id,
						"lilBrowse",
						"width=800px, height=600px, scrollbars, location=no"
					);
					w.focus();

				});
			}
		}

		if(this.JQO.hasClass('lbxEditable') && this.JQO.attr('data-lbxObjClass') && this.JQO.attr('data-lbxObjTemplate')) {
			var cls = this.JQO.attr('data-lbxObjClass');
			var tmplt = this.JQO.attr('data-lbxObjTemplate');
			
			var post = "f=b";
			var pargs = this.JQO.children('input[type="hidden"][name^="args"]');
			if(vars.post !== undefined) {
				post = vars.post;
			} else if(pargs.length > 0) {
				post='';
				pargs.each(function(){
					var arg = jQuery(this);
					post = post+'&'+arg.attr('name')+'='+arg.attr('value');
				});
				//post = pargs.serialize();
			}

			this.JQO.click(function(e){
				if(LBXUI.shortKey) {
					LBXUI.shortKey = false;

					var p = LBXUI.panel({
						"source":'/lbx/wrapper?template='+tmplt+'Edit&object='+id+'&'+post
					});

					p.OK.click(function(){
						LILOBJECT.rreload();
					});

					/*var w = window.open('/lbx/wrapper?template='+cls+'_edit&object='+id,
						"lbxEdit",
						"width=800px, height=600px, resizable, location=no"
					);
					w.focus();
					var t = setInterval(function(){
						if(w.closed) {
							LILOBJECT.rreload();
							clearInterval(t);
						}
					},5000);*/
				}
			});
			/*if(this.JQO.hasClass('lbxEditableButton')) {
				var edter =this.JQO;
			} else {*/
				var edter = this.JQO.children('.lbxEditableButton');
			//}
			if(edter.length === 0) {
				if(this.userControl) {
					edter = jQuery('<div/>',{
					"class":"lbxUiButton",
					"css":{"background-image": "url(/.images/icon-shadowless/pencil.png)"}
					}).appendTo(this.userControl);
				}
			}
			if(edter.length === 1) {
				edter.attr("data-lbxUiToolTip","Edit this "+cls)
				.click(function(e){

					edter.hide('fast',function(){
						edter.show('fast');
					});

					LBXUI.shortKey = true;
					LILOBJECT.JQO.click();
				});
			}
		}

		if(this.JQO.hasClass('lbxConfigurable')) {


				var cnfgrer = this.JQO.children('.lbxConfigurableButton');
				if(cnfgrer.length === 0) {
					cnfgrer = jQuery('<div/>',{
					"class":"lbxUiButton",
					"css":{"background-image": "url(/.images/icon-shadowless/block.png)"}
					}).appendTo(this.userControl);
				}
				if(!cnfgrer.attr("data-lbxUiToolTip")) {
					cnfgrer.attr("data-lbxUiToolTip","Configure this "+this.JQO.attr('data-lbxObjClass'));
				}
				cnfgrer.click(function(e){

					cnfgrer.hide('fast',function(){
						cnfgrer.show('fast');
					});

					var w = window.open('/lbx/wrapper?object=~&template=lilConfigure&selector='+id,
						"lilConfigure",
						"width=600px, height=500px, resizable, scrollbars, location=no"
					);
					w.focus();

				});

		}

		if(this.JQO.hasClass('lilConfigure')) {

			if(this.JQO.hasClass('free')) {

				var propAdder = this.JQO.children('.lbxPropAdderButton');
				if(propAdder.length === 0) {
					propAdder = jQuery('<div/>',{
					"class":"lbxUiButton lbxPropAdderButton",
					"css":{"background-image": "url(/.images/icon-shadowless/arrow-circle-315.png)"}
					}).appendTo(this.userControl);
				}
				if(!propAdder.attr("data-lbxUiToolTip")) {
					propAdder.attr("data-lbxUiToolTip","Add a new property to this object");
				}
				propAdder.click(function(e){

					propAdder.hide('fast',function(){
						LILOBJECT.createProp();
						propAdder.show('fast');
					});

				});

			}

				var refresher = this.JQO.children('.lbxRefreshableButton');
				if(refresher.length === 0) {
					refresher = jQuery('<div/>',{
					"class":"lbxUiButton lbxRefreshableButton",
					"css":{"background-image": "url(/.images/icon-shadowless/arrow-circle-315.png)"}
					}).appendTo(this.userControl);
				}
				if(!refresher.attr("data-lbxUiToolTip")) {
					refresher.attr("data-lbxUiToolTip","Reload this object");
				}
				refresher.click(function(e){

					refresher.hide('fast',function(){
						LILOBJECT.rreload();
						refresher.show('fast');
					});

				});

		}

		if(this.JQO.hasClass('lbxSlideShow')) {
			var ss = LILOBJECT.JQO;

			ss.css({'text-align':'center','position':'relative'});
			ss.children('*').not('div.controls');

			if(ss.attr('data-lbxSlideShow')) {
				var d = ss.attr('data-lbxSlideShow');
				d = jQuery.parseJSON(d);
				
				var clock;
				var mode = 'play';
				var direction = 'forward';
				var interval = 10000;
				if(d.interval !== undefined) {
					interval = d.interval*1;
				}
				var next = 1;
				var previous = d.slides.length-1;
				var cache = [ss.children('*').first()];

				if(d) {
					ss.attr('data-current',0);

					ss.bind('cache',function(){
						if(d.slides.length > 1) {
							var template = '';
							var post = {};
							if(cache[next] === undefined) {
								template = '';
								post = {};
								if(d.args !== undefined) {
									if(d.args[d.slides[next].id] !== undefined) {
										post = d.args[d.slides[next].id];
									} else if(d.args[d.slides[next].clss] !== undefined) {
										post = d.args[d.slides[next].clss];
									} else if(d.args['*'] !== undefined) {
										post = d.args['*'];
									}
									post = jQuery.param({
										'args':post
									});
								}
								if(d.templates !== undefined) {
									if(d.templates[d.slides[next].id] !== undefined) {
										template = '&template='+d.templates[d.slides[next].id];
									} else if(d.templates[d.slides[next].clss] !== undefined) {
										template = '&template='+d.templates[d.slides[next].clss];
									} else if(d.templates['*'] !== undefined) {
										template = '&template='+d.templates['*'];
									}
								}
								jQuery.post('/?lbxRender='+d.slides[next].id+template, post, function(data) {
									cache[next] = jQuery(data);
								});
							}
							if(cache[previous] === undefined) {
								template = '';
								post = {};
								if(d.args !== undefined) {
									if(d.args[d.slides[previous].id] !== undefined) {
										post = d.args[d.slides[previous].id];
									} else if(d.args[d.slides[previous].clss] !== undefined) {
										post = d.args[d.slides[previous].clss];
									} else if(d.args['*'] !== undefined) {
										post = d.args['*'];
									}
									post = jQuery.param({
										'args':post
									});
								}
								if(d.templates !== undefined) {
									if(d.templates[d.slides[previous].id] !== undefined) {
										template = '&template='+d.templates[d.slides[previous].id];
									} else if(d.templates[d.slides[previous].clss] !== undefined) {
										template = '&template='+d.templates[d.slides[previous].clss];
									} else if(d.templates['*'] !== undefined) {
										template = '&template='+d.templates['*'];
									}
								}
								jQuery.post('/?lbxRender='+d.slides[previous].id+template, post, function(data) {
									cache[previous] = jQuery(data);
								});
							}
						}
					});

					ss.bind('step',function(){
						var step;
						if(d.slides.length > 1) {
							if(direction === 'forward') {
								step = next;
							} else if(direction === 'backward') {
								step = previous;
							}
							ss.attr('data-current',step);
							if(cache[ss.attr('data-current')] !== undefined) {
								//LBXUI.isLoaded(cache[ss.attr('data-current')],function(){
									cache[ss.attr('data-current')].css('display','inline-block');
									if((ss.attr('data-current')*1) < d.slides.length-1) {
										next = ss.attr('data-current')*1+1;
									} else {
										next = 0;
									}
									if(ss.attr('data-current')*1 != 0) {
										previous = ss.attr('data-current')*1-1;
									} else {
										previous = d.slides.length-1;
									}
									ss.trigger('cache');
									ss.css('min-height',ss.height()+'px');
									ss.children().not('*.controls').fadeTo(500,0,function(){
										ss.children().not('*.controls').remove();
										cache[ss.attr('data-current')]
										.fadeTo(0,0);
										ss.append(cache[ss.attr('data-current')]);
										cache[ss.attr('data-current')].fadeTo(500,1);
									});
								//});
							}
						}
					});

					ss.bind('playPause',function(){
						if(d.slides.length > 1) {
							if(mode === 'pause') {
								mode = 'play';
							} else if(mode === 'play') {
								mode = 'pause';
							}
						}
					});

					ss.bind('forwardBackward',function(){
						if(d.slides.length > 1) {
							if(direction === 'forward') {
								direction = 'backward';
							} else if(direction === 'backward') {
								direction = 'forward';
							}
						}
					});

					if(d.slides.length > 1) {

						var controls = jQuery('<div/>',{
							'class':'controls',
							'css':{
								'position':'absolute',
								'line-height':'2em',
								'width':'100%',
								'top':'0px',
								'padding':'0.5em 0px',
								'font-size':'15px',
								'font-weight':'bold'
							}
						})
						.appendTo(ss);

						var nextButton = jQuery('<div/>',{
							'class':'nextButton control',
							'html':'<span style="vertical-aling:middle" >&gt;|</span>',
							'css':{
								'position':'absolute',
								'background-color':'rgba(255,255,255,0.6)',
								'border':'3px solid #cccccc',
								'-moz-border-radius':'4px',
								'border-radius':'4px',
								'width':'3em',
								'right':'0.5em',
								'cursor':'pointer'
							}
						})
						.appendTo(controls);

						var previousButton = jQuery('<div/>',{
							'class':'previousButton control',
							'html':'<span style="vertical-aling:middle" >|&lt;</span>',
							'css':{
								'position':'absolute',
								'background-color':'rgba(255,255,255,0.6)',
								'border':'3px solid #cccccc',
								'-moz-border-radius':'4px',
								'border-radius':'4px',
								'width':'3em',
								'left':'0.5em',
								'cursor':'pointer'
							}
						})
						.appendTo(controls);

						var playForwardButton = jQuery('<div/>',{
							'class':'playForwardButton control',
							'html':'<span style="vertical-aling:middle" >||</span>',
							'css':{
								'position':'absolute',
								'background-color':'rgba(255,255,255,0.6)',
								'border':'3px solid #cccccc',
								'-moz-border-radius':'4px',
								'border-radius':'4px',
								'width':'3em',
								'right':'4.5em',
								'cursor':'pointer'
							}
						})
						.appendTo(controls)
						var playForwardSpan = playForwardButton.children('span');

						var playBackwardButton = jQuery('<div/>',{
							'class':'playBackwardButton control',
							'html':'<span style="vertical-aling:middle" >&lt;</span>',
							'css':{
								'position':'absolute',
								'background-color':'rgba(255,255,255,0.6)',
								'border':'3px solid #cccccc',
								'-moz-border-radius':'4px',
								'border-radius':'4px',
								'width':'3em',
								'left':'4.5em',
								'cursor':'pointer'
							}
						})
						.appendTo(controls);
						var playBackwardSpan = playBackwardButton.children('span');

						playForwardButton.click(function(){
							if(mode == 'pause') {
								direction = 'forward';
								mode = 'play';
								playForwardSpan.html('||');
							} else if(mode == 'play') {
								if(direction == 'forward') {
									mode = 'pause';
									playForwardSpan.html('&gt;');
								} else {
									direction = 'forward';
									playForwardSpan.html('||');
									playBackwardSpan.html('&lt;');
								}
							}
							return false;
						});

						playBackwardButton.click(function(){
							var span = jQuery(this).children('span');
							if(mode == 'pause') {
								direction = 'backward';
								mode = 'play';
								playBackwardSpan.html('||');
							} else if(mode == 'play') {
								if(direction == 'backward') {
									mode = 'pause';
									playBackwardSpan.html('&lt;');
								} else {
									direction = 'backward';
									playBackwardSpan.html('||');
									playForwardSpan.html('&gt;');
								}
							}
							return false;
						});

						nextButton.click(function(){
							mode = 'pause';
							direction = 'forward';
							ss.trigger('step');
							playForwardSpan.html('&gt;');
							playBackwardSpan.html('&lt;');
							return false;
						});

						previousButton.click(function(){
							mode = 'pause';
							direction = 'backward';
							ss.trigger('step');
							playForwardSpan.html('&gt;');
							playBackwardSpan.html('&lt;');
							return false;
						});

						controls.fadeOut(150);
						ss.hover(function(){
							controls.fadeIn(150);
						},function(){
							controls.fadeOut(150);
						});
					}
					ss.trigger('cache');

					clock = setInterval(function(){
						if(mode === 'play') {
							ss.trigger('step');
						}
					},interval);

				}
			}
		}

		if(this.JQO.hasClass('lbxImage')) {
			var imgg = LILOBJECT.JQO;
			//alert('image');
			if(imgg.attr('data-lbxImage')) {
				var d = imgg.attr('data-lbxImage');
				d = jQuery.parseJSON(d);

				if((d.pan !== undefined) && (d.pan !== 'false')) {

					refire = true;

					if(d.pan === 'fit') {
						d.pan = '--w'+(jQuery(window).width()-100)+'--H'+(jQuery(window).height()-100);
					}
					
					var lp = (imgg.css('padding-left').replace('px','')*1)+(imgg.css('margin-left').replace('px','')*1)+(imgg.css('border-left-width').replace('px','')*1);
					var tp = (imgg.css('padding-top').replace('px','')*1)+(imgg.css('margin-top').replace('px','')*1)+(imgg.css('border-top-width').replace('px','')*1);
					var p = imgg.position();
					var w = imgg.width();
					var h = imgg.height();
					var os = imgg.offset();
					var osl = os.left+(imgg.css('padding-left').replace('px','')*1)+(imgg.css('border-left-width').replace('px','')*1);
					var ost = os.top+(imgg.css('padding-top').replace('px','')*1)+(imgg.css('border-top-width').replace('px','')*1);

					var overPan = jQuery('<div/>').css({
						'width':w,
						'height':h,
						'background-position':'center center',
						'background-repeat':'no-repeat',
						'position':'absolute',
						'display':'none',
						'color':'#ffffff',
						'z-index':'1000',
						'top':(p.top+tp)+'px',
						'left':(p.left+lp)+'px'
					}).fadeOut(0).appendTo(LILOBJECT.JQO.parent());

					var overImage = false;

					var tmr = false;
					var ld;
					var td;
					imgg.mouseenter(function(){

						lp = (imgg.css('padding-left').replace('px','')*1)+(imgg.css('margin-left').replace('px','')*1)+(imgg.css('border-left-width').replace('px','')*1);
						tp = (imgg.css('padding-top').replace('px','')*1)+(imgg.css('margin-top').replace('px','')*1)+(imgg.css('border-top-width').replace('px','')*1);
						p = imgg.position();
						os = imgg.offset();
						osl = os.left+(imgg.css('padding-left').replace('px','')*1)+(imgg.css('border-left-width').replace('px','')*1);
						ost = os.top+(imgg.css('padding-top').replace('px','')*1)+(imgg.css('border-top-width').replace('px','')*1);

						if(tmr === false) {
							tmr = setInterval(function(){
								if(overImage.complete) {
									clearInterval(tmr);
									tmr = true;
									ld = overImage.width - w;
									td = overImage.height - h;
									overPan.css({
										'top':(p.top+tp)+'px',
										'left':(p.left+lp)+'px'
									});
									overPan.fadeIn(500,function(){
										imgg.css('cursor','auto');
									});
								} else if(overImage === false) {
									overImage = new Image();
									overImage.src = d.path.replace(/\.(jpg|jpeg|png|gif)$/i,d.pan+".$1");
									imgg.css('cursor','progress');
									overPan.css('background-image','url('+d.path.replace(/\.(jpg|jpeg|png|gif)$/i,d.pan+".$1")+')');
								}
							},200);
						}
					});

					var ll;
					var tt;
					overPan.mousemove(function(e){
						if(overImage.complete) {
							clearInterval(tmr);
							tmr = true;
							ll = Math.round(ld*((e.pageX-osl)/w));
							tt = Math.round(td*((e.pageY-ost)/h));
							overPan.css('background-position','-'+ll+'px -'+tt+'px');
						}
					}).mouseout(function(){
						clearInterval(tmr);
						tmr = true;
						if(overImage.complete) {
							overPan.fadeOut(500,function(){
								tmr = false;
							});
						}
					});

				}
				if((d.zoom !== undefined) && (d.zoom !== 'false')) {
					var t;
					if(overPan) {
						t = overPan;
					} else {
						t = this.JQO;
					}
					if(d.zoom === 'fit') {
						d.zoom = '--w'+(jQuery(window).width()-100)+'--H'+(jQuery(window).height()-100);
					}
					t.click(function(e){

						var a = LBXUI.panel({
							"type":'image',
							"source":d.path.replace(/\.(jpg|jpeg|png|gif)$/i,d.zoom+".$1")
						});

						return false;

						//a.OK.click(function(){
						//});

					}).css('cursor','pointer');
				}
			}
		}

		if(this.JQO.hasClass('lbxSplash')) {
			var splashClass = this.JQO.attr('data-lbxSplashClass');
			var splashTemplate = this.JQO.attr('data-lbxSplashTemplate');
			var post = 'f=b';
			var controller = LILOBJECT.JQO.children('div.ss_controller');
			var controllers = controller.children('a').children('*.control');
			LILOBJECT.JQO.data('splashLock',false);

			var prv = jQuery('<span/>',{
				'html':"&lt;",
				'class':"previous"
			}).prependTo(controller).click(function(){
				controller.children('a:has(*.active)').prev('a').children('*.control').click();
			}).attr('data-lbxUiToolTip',"Previous");

			var nxt = jQuery('<span/>',{
				'html':"&gt;",
				'class':"next"
			}).appendTo(controller).click(function(){
				controller.children('a:has(*.active)').next('a').children('*.control').click();
			}).attr('data-lbxUiToolTip',"Next");

			controllers.each(function(){
				var ctrl = jQuery(this);
				if(!ctrl.data('w')) {
					ctrl.data('w',ctrl.width());
					ctrl.data('h',ctrl.height());
				}
				//var w = ctrl.data('w');
				//var h = ctrl.data('h');
			}).click(function(){
				var splashId = jQuery(this).attr('data-lbxSplashId');
				var ctrl = jQuery(this);
				var parH = LILOBJECT.JQO.height();
				var nw = LILOBJECT.JQO.children('*[data-lbxObjId="'+splashId+'"]');
				if(nw.length === 1) {
					if(nw.css('display') === 'none') {
						if(LILOBJECT.JQO.data('splashLock') === false) {
							LILOBJECT.JQO.data('splashLock',splashId);
							controllers.fadeTo(250,0.5).css('cursor','wait');
							LILOBJECT.JQO.css('min-height',parH);
							nw.siblings('*[data-lbxobjtemplate="'+nw.attr('data-lbxObjTemplate')+'"]').not(':hidden').slideUp(250,function() {
								var imgs;
								if(nw.get(0).tagName.stringToLower === 'img') {
									imgs = nw;
								} else {
									imgs = nw.find('img');
								}
								if(imgs.length > 0) {
									var t = imgs.length;
									var c = 0;
									var cw = 0;
									while(c !== t) {
										cw++;
										imgs.each(function() {
											if(this.complete) {
												c++;
											}
										});
										if((c === t) || (cw > 100)) {
											c = t;
						nw.delay(1000).slideDown(1000,function(){
							controllers.fadeTo(250,1).css('cursor','pointer').removeClass('active');
							LILOBJECT.JQO.animate({'min-height':0},750,function(){
								ctrl.addClass('active');
								LILOBJECT.JQO.data('splashLock',false);
							});
						});
										}
									}
								} else {
						nw.delay(1000).slideDown(1000,function(){
							controllers.fadeTo(250,1).css('cursor','pointer').removeClass('active');
							LILOBJECT.JQO.animate({'min-height':0},750,function(){
								ctrl.addClass('active');
								LILOBJECT.JQO.data('splashLock',false);
							});
						});
								}
							});
						}
					} else {
						LILOBJECT.JQO.data('splashLock',false);
					}
				} else {
					controllers.fadeTo(250,0.5).css('cursor','wait');
					jQuery.post('/?lbxRefresh='+splashId+'&template='+splashTemplate,post,function(data) {
						var nww = jQuery(data);
						nww.css('display','none');
						ctrl.parent().parent().after(nww);
						if(LILOBJECT.JQO.data('splashLock') === false) {
							ctrl.click();
						}
					});
				}
				jQuery('body').click();
				return false;
			}).css('cursor','pointer')/*.mouseenter(function(){
				var ctrl = jQuery(this);

				ctrl.mouseleave(function(){
					if(ctrl.data('w')) {
						var w = ctrl.data('w');
						var h = ctrl.data('h');
						//ctrl.animate({'width':w-(w*0.5)},100);
						ctrl.animate({'width':w,'height':h},250);
					}
				});

				if(ctrl.data('w')) {
					var w = ctrl.data('w');
					var h = ctrl.data('h');
					ctrl.animate({'width':w+(w*0.3),'height':h+(h*0.3)},250);
				}
			})*/;
		}
		if(this.userControl) {
			if(this.userControl.children().length === 0) {
				this.userControl.hide();
			}
		}

		this.JQO.data('LBXUIlilObject',LILOBJECT);
		if(refire) {
			this.JQO.mouseenter();
		}

	}

}

var LbxUi;

$(document).ready(function () {

	LbxUi = new lbxUi();

});
