
LX_Browser=function(){try{var ua,s,i,tt,t,t2;this.isFirefox=false;this.version=null;ua=navigator.userAgent;s="Firefox";if((i=ua.indexOf(s))>=0)
{this.isNS=this.isFirefox=true;this.version=parseFloat(ua.substr(i+s.length+1));}
s="MSIE";if((i=ua.indexOf(s))>=0)
{this.isIE=true;this.version=parseFloat(ua.substr(i+s.length));}
this.interDoc=true;if(!this.isIE)
this.isNS=true;if(window.GeometryEditorPath)
this.systemBasePath=window.toolsBasePath;else
{tt=document.getElementsByTagName("script"),t;if(tt)
for(i=0;i<tt.length;i++)
{s=tt[i].src;t=s.indexOf("BaseTool.js");if(t!=-1)
{t2=s.substr(0,t)
if(s.charAt(0)=="/"||s.substr(0,7)=="http://")
this.systemBasePath=t2;else
{if(t2.substr(0,2)=="./")
t2=t2.substr(2);t=window.location.pathname;this.systemBasePath=t.substr(0,t.lastIndexOf("/"))+"/"+t2;}
break;}}
else
this.systemBasePath="/lx/";}
this.getWindowSize=function(){var w=0,h=0;if(typeof(window.innerWidth)=='number'){w=window.innerWidth;h=window.innerHeight;}else if(document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight)){w=document.documentElement.clientWidth;h=document.documentElement.clientHeight;}else if(document.body&&(document.body.clientWidth||document.body.clientHeight)){w=document.body.clientWidth;h=document.body.clientHeight;}
return{width:w,height:h};}}catch(e)
{alert("lxG Browser(): "+e.message+" "+e.name+" "+e.lineNumber+" "+e.fileName+" "+e.stack);}};var _lx_browser=new LX_Browser(),mainWin=window;function BaseTool(cfg)
{var a=this;if(!cfg||!cfg.instanceName){throw"No instanceName to create "+this.constructor;}
a.instanceName=cfg.instanceName;a.authoring=cfg.authoring;lxEM.instances[a.instanceName]=a;var c=this.constructor;if(!c.instances)
c.instances={};c.instances[a.instanceName]=a;a.dialogs={};a.iDialogs=[];a.wins=[null];a.nWins=1;a.dataURLLoading=false;a.dataURLTimeout=10000;a.created=false;}
var lxEM=BaseTool,lxEMP=lxEM.prototype;lxEM.instances={};lxEM.getInstance=function(n){return BaseTool.instances[n];};lxEM.randomString=function()
{var chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";var strlen=8;var t1,t2='';for(var i=0;i<strlen;i++)
{t1=Math.floor(Math.random()*chars.length);t2+=chars.substring(t1,t1+1);}
return t2;};lxEM.loadScripts=function(relativeTo,scripts,callback,scope){var scriptCount=0;function nonIELoadedCallback(){if(++scriptCount==scripts.length){scope?callback.call(scope):callback();}}
function ieCallback(){if(this.readyState=='complete'||this.readyState=='loaded'){nonIELoadedCallback();}};var i,script;for(i=0;i<scripts.length;i++){script=document.createElement('script');script.type='text/javascript';script.src=relativeTo+scripts[i];script.onreadystatechange=ieCallback;script.onload=nonIELoadedCallback;document.getElementsByTagName('head')[0].appendChild(script);}};lxEM.loadConstructor=function(name,callback,scope){if(!name){name="GeometryEditor";}
var levels,cname,script=document.createElement('script'),css;script.type='text/javascript';levels=name.split(".");cname=levels[levels.length-1];if(window[cname]){scope?callback.call(scope,name):callback(name);return;}
script.src=_lx_browser.systemBasePath+levels.join("/")+".js";levels.pop();css=document.createElement("link");css.rel="stylesheet";css.type="text/css";css.href=_lx_browser.systemBasePath+levels.join("/")+"/css/standard.css";if(css)
document.getElementsByTagName('head')[0].appendChild(css);script.onreadystatechange=function(){if(this.readyState=='complete'||this.readyState=='loaded'){constructorLoaded();}};script.onload=constructorLoaded;document.getElementsByTagName('head')[0].appendChild(script);function constructorLoaded(){if(!window[cname]){alert("Constructor not loaded");return;}
window[cname].toolBasePath=_lx_browser.systemBasePath+levels.join("/")+"/";scope?callback.call(scope,name):callback(name);}}
lxEMP.preOpenDlg=function(newDlgObj)
{var dlgObj=this.wins[this.nWins-1];this.wins[this.nWins++]=newDlgObj;if(dlgObj)
{dlgObj.extWin.disable();}
else
{win=window;if(this.disableMainWin)
this.disableMainWin(true);}};lxEMP.preCloseDlg=function(newDlgObj)
{var i,dlgObj;for(i=this.nWins-1;i>0;i--)
if(this.wins[i]==newDlgObj)
break;if(i==0)
return;this.nWins=i;dlgObj=this.wins[this.nWins-1];if(dlgObj)
{dlgObj.extWin.enable();}
else
{if(this.disableMainWin)
this.disableMainWin(false);}};lxEMP.newWM=function(name)
{var t=new LX_WM(this,name,this.iDialogs.length);this.iDialogs[this.iDialogs.length]=this.dialogs[name]=t;return t;};lxEMP.getDlgObj=function(i){return this.iDialogs[i];};lxEMP.formPureId=function(id){return this.instanceName+"___"+id;}
lxEMP.formId=function(id){return[" id='",this.formPureId(id),"' "].join("");};lxEMP.getElementById=function(id){return document.getElementById(this.formPureId(id));}
lxEMP.formHandler=function(){var t=[this.instanceName],s=BaseTool.randomString();for(var i=1;i<arguments.length;i++)
t.push(arguments[i]);BaseTool.handlers[s]=t;var k=[" ",arguments[0],"=\"BaseTool.handler('",s,"')\" "].join("");return k;};lxEMP.openDialog=function(dlgName,dlgURL){LXopenDialog(this,dlgName,dlgURL);};lxEMP.isThere=function(){return true;};lxEMP.addObjectChangeListener=function(){};lxEMP.getDescendents=function(){};lxEM.handlers={};lxEM.handler=function(s){var t=this.handlers[s];var ed=BaseTool.instances[t[0]],f=ed[t[1]],a=[];for(var i=2;i<t.length;i++){a.push(t[i]);}
if(f){f.apply(ed,a);}};lxEMP.createTool=function(cfg)
{this.__cfg=cfg;this.callback=cfg.callback;this.scope=cfg.scope;this.renderTo=cfg.renderTo;if(cfg.dom){this.createTool2(cfg);}
else{var that=this,divId=BaseTool.randomString();var f=function(){if(document.getElementById(divId)){cfg.renderTo=that.renderTo=divId;this.dom=cfg.dom=true;that.createTool2(cfg);}
else{setTimeout(f,20);}};setTimeout(f,20);return"<div id='"+divId+"'></div>";}};lxEMP.createTool2=function(cfg)
{if(cfg.url){this.dataSrcWay=1;this.url=cfg.url;this.retrieveData();}
else{this.dataSrcWay=0;this.initData=cfg.data;this.create(cfg);this.created=true;}}
lxEMP.updateTool=function(cfg)
{this.__cfg=cfg;this.callback=cfg.callback;this.scope=cfg.scope;if(!this.created)
{alert("Fail to call update() because create() or createHTML() was not called!");return;}
if(this.dataURLLoading)
{alert("Fail to call update() because data from last time is still loading!");return;}
if(cfg.url){this.dataSrcWay=1;this.url=cfg.url;this.retrieveData();}
else{this.dataSrcWay=0;this.initData=cfg.data;this.update(cfg);}};lxEMP.retrieveData=function()
{this.dataURLLoading=true;try{var script=document.createElement('script');script.type='text/javascript';script.src=this.url+"&instance="+this.instanceName+"&code="+lxEM.randomString()+"&fun=lxEM.postDataLoaded";document.getElementsByTagName('head')[0].appendChild(script);setTimeout("lxEM.postDataLoaded( '"+this.instanceName+"',null )",this.dataURLTimeout);}catch(e){alert("Invalid svg URL "+e.message+" "+e.name+" "+e.lineNumber+" "+e.fileName+" "+e.stack);this.dataURLLoading=false;return false;}};lxEMP.getData=function(){if(this.onGetData){this.onGetData();}
var fs=this.getJsonPropertyNames();fs.push('version','tool');this.version=this.constructor.version;this.tool=this.constructor.toolFullName;var t=JSON.stringify(this,fs);return t;};lxEMP.getInitData=function()
{return this.initData;};lxEMP.getURL=function()
{return this.url;};lxEM.postDataLoaded=function(instanceName,d)
{var em=lxEM.instances[instanceName];if(!em.dataURLLoading)
return;em.dataURLLoading=false;if(d==null)
{alert("GeometryEditor data URL: "+em.url+" retrieval timeout.");}
else
{em.initData=d;delete em.__cfg.url;em.__cfg.data=em.initData;if(em.created)
em.update(em.__cfg);else{em.create(em.__cfg);em.created=true;}}};lxEMP.onCreated=lxEMP.onUpdated=function(){var a=this;if(a.callback){a.callback.call(a.scope?a.scope:window,a);}}
lxEMP.addObjectChangeListener=function(ids,h)
{var i;this.objChgListener=h;this.objIds=[];if(!h)
return;for(i=0;i<ids.length;i++)
this.objIds.push(ids[i]);};LXgetEditorByDlg=function(dlgWin)
{var i,em,j,dlgObj,t;for(i in lxEM.instances){em=lxEM.instances[i];for(j in em.dialogs){t=document.getElementById(i+"___"+j);if(t&&t.contentWindow==dlgWin){dlgObj=em.dialogs[j];dlgObj.iframeEl=t;dlgObj.win=dlgWin;dlgObj.extWin.setSize(dlgWin.dlgWidth,dlgWin.dlgHeight);dlgObj.extWin.setTitle(dlgWin.document.title);return[em,dlgObj];}}}
return[null,null];};LXopenDialog=function(em,dlgName,dlgURL)
{var dlgObj;if(!em.dialogs[dlgName])
em.newWM(dlgName);dlgObj=em.dialogs[dlgName];var t1=em.instanceName+"___"+dlgName;if(em.nWins>1)
{dlgObj.dlgOpener=em.wins[em.nWins-1];dlgObj.openType=LX_WM.OPENBYDIALOG;}
else
dlgObj.openType=LX_WM.OPENBYMENU;em.preOpenDlg(dlgObj);dlgObj.extWin=new Ext.Window({title:' ',resizable:true,plain:true,layout:'fit',html:"<iframe width='100%' height='100%' frameborder='0' id='"+t1+"' src='"+em.constructor.toolBasePath+"dialogs/"+dlgURL+"'></iframe>",height:300,width:400});dlgObj.extWin.on("close",dlgObj.Cross,dlgObj);dlgObj.extWin.show();return dlgObj;};LX_WM=function(em,name,idx)
{this.em=em;this.dlgName=name;this.dlgIdx=idx;this.dlgOpener=null;this.extWin=null;this.win=null;this.openType=LX_WM.OPENBYMENU;this.openSubType=0;this.closeStatus=0;};LX_WM.OPENBYMENU=0;LX_WM.OPENBYDIALOG=1;LX_WM.prototype.onFinish=function()
{var t=true;if(this.win.onFinish)
t=this.win.onFinish();this.em.preCloseDlg(this);return t;};LX_WM.prototype.finish=function()
{this.onFinish();this.extWin.close();};LX_WM.prototype.notifyOpener=function()
{return true;};LX_WM.prototype.toReplaceSrc=function(dlgURL)
{this.iframeEl.src=this.em.constructor.toolBasePath+"dialogs/"+dlgURL;};LX_WM.prototype.onOK=function()
{if(this.win.onOK)
{if(this.win.onOK())
return this.notifyOpener(1);else
return false;}
return true;};LX_WM.prototype.OK=function()
{this.extWin.un("close",this.Cross,this);if(this.onOK())
{this.closeStatus=1;this.finish();}};LX_WM.prototype.onCancel=function()
{this.closeStatus=0;if(this.win.onCancel)
{if(this.win.onCancel())
return this.notifyOpener(2);else
return false;}
return true;};LX_WM.prototype.Cancel=function()
{this.extWin.un("close",this.Cross,this);this.onCancel();this.finish();};LX_WM.prototype.Cross=function()
{this.onCancel();this.finish();};LX_WM.prototype.onApply=function()
{if(this.win.onApply)
{if(this.win.onApply())
return this.notifyOpener(3);else
return false;}
return true;};LX_WM.prototype.Apply=function()
{this.onApply();};LX_WM.prototype.setSize=function(w,h)
{this.extWin.setSize(w,h);}
LX_WM.prototype.setTitle=function(t)
{this.extWin.setTitle(t);}