
neo.ieVersion=function(){var ua=navigator.userAgent;var m=ua.match(/MSIE\s*(\d)/);if(!m)return 0;return parseInt(m[1]);}
neo.theIEVersion=neo.ieVersion();function initCanvas(el){if(neo.theIEVersion){G_vmlCanvasManager_.initElement(el);}}
neo.initCanvas=function(el){if(neo.theIEVersion){G_vmlCanvasManager_.initElement(el);}};var yUp=function(ctx,centerX,centerY,rotation){this.context=ctx;ctx.rotate(0);ctx.translate(0,0);ctx.save();this.stackDepth=1;this.centerX=centerX;this.centerY=centerY;var width=ctx.canvas.width;var height=ctx.canvas.height;this.width=width;this.height=height;this.setRotation(rotation,1);}
yUp.prototype.setFillStyle=function(fs){this.context.fillStyle=fs;}
yUp.prototype.createRadialGradient=function(){return this.context.createRadialGradient.apply(this.context,arguments);}
yUp.prototype.setRotation=function(rotation,noRestore){var ctx=this.context;if(!noRestore){while(this.restore()){};}
ctx.rotate(0);ctx.translate(0,0);ctx.save();this.stackDepth=1;var centerX=this.centerX;var centerY=this.centerY;var width=this.width;var height=this.height;if(centerX||centerY){var trx=centerX?width/2:0;var trny=centerY?height/2:0;ctx.translate(trx,trny);}
if(1&&rotation){ctx.rotate(rotation);}
this.save();}
yUp.prototype.save=function(){this.context.save();this.stackDepth++;neo.log("yUp","SAVE stack depth",this.stackDepth);}
yUp.prototype.restore=function(){var dpth=this.stackDepth;if(dpth>0){this.context.restore();this.stackDepth--;neo.log("yUp","RESTORE stack depth",this.stackDepth);return true;}else{neo.log("yUp","Attempt to restore but depth already 0");return false;}}
yUp.prototype.flipY=function(y){if(this.centerY)return-y;return this.height-y;}
yUp.prototype.fillRect=function(x,y,width,height){if(this.centerY){var fy=-y-height;}else{fy=this.height-y-height;}
var fx=x;this.context.fillRect(fx,fy,width,height);}
yUp.prototype.clearRect=function(x,y,width,height){if(this.centerY){var fy=-y-height;}else{fy=this.height-y-height;}
var fx=x;this.context.clearRect(fx,fy,width,height);}
yUp.prototype.arc=function(x,y,radius,startAngle,endAngle,antiClockwise){if(this.centerY){var fy=-y;}else{fy=this.height-y;}
this.context.arc(x,fy,radius,startAngle,endAngle,!antiClockwise);}
yUp.prototype.translate=function(x,y){this.context.translate(x,this.flipY(y));}
yUp.prototype.fillText=function(txt,x,y){this.context.fillText(txt,x,this.flipY(y));}
yUp.prototype.rotate=function(r){this.context.rotate(r);}
yUp.prototype.scale=function(x,y){if(!y)y=x;this.context.scale(x,y);}
yUp.prototype.beginPath=function(){this.context.beginPath();}
yUp.prototype.moveTo=function(x,y){this.context.moveTo(x,this.flipY(y));}
yUp.prototype.lineTo=function(x,y){this.context.lineTo(x,this.flipY(y));}
yUp.prototype.fill=function(){this.context.fill();}
yUp.prototype.clip=function(){this.context.clip();}
yUp.prototype.closePath=function(){this.context.closePath();}
neo.shape={};(function(){var lib=neo.shape;lib.Shape=function(){}
lib.Shape.prototype=new neo.Nit();lib.Rect=function(options){this.options=options;this.Class=lib.Rect;this.apply();};lib.Rect.prototype=new lib.Shape();lib.Rect.prototype.render=function(){var v=this.value;var s=v.scale;var x=v.x?v.x:0;var y=v.y?v.y:0;var fs=v.fillStyle;var ctx=v.drawC;if(s||fs){ctx.save();var ctxsaved=1;if(s)ctx.scale(s);if(fs)ctx.setFillStyle(fs);}
if(v.centered){1
var hwd=v.width/2;var hht=v.height/2;ctx.fillRect(x-hwd,y-hht,v.width,v.height);}else{ctx.fillRect(x,y,v.width,v.height);}
if(ctxsaved){ctx.restore();}}
lib.IsoTriangle=function(options){this.options=options;this.Class=lib.IsoTriangle;this.apply();};lib.IsoTriangle.prototype=new lib.Shape();lib.IsoTriangle.prototype.render=function(){var v=this.value;var s=v.scale;var u=v.baseOnTop;var ht=v.height;var wd=v.width;var ctx=v.drawC;var x=v.x?v.x:0;var y=v.y?v.y:0;var fs=v.fillStyle;if(s||fs){ctx.save();var ctxsaved=1;if(s)ctx.scale(s);if(fs)ctx.setFillStyle(fs);}
if(u){var hwd=wd/2;ctx.beginPath();ctx.moveTo(x-hwd,y+ht);ctx.lineTo(x,y);ctx.lineTo(x+hwd,y+ht);ctx.fill();ctx.closePath()}
if(ctxsaved)ctx.restore();}
lib.Circle=function(options){this.options=options;this.Class=lib.Circle;this.apply();};lib.Circle.prototype=new lib.Shape();lib.Circle.prototype.render=function(){var v=this.value;var s=v.scale;var icl=v.innerColor;var ocl=v.outerColor;var fs=v.fillStyle;var r=v.radius;var ctx=v.drawC;var clip=v.clip;var x=v.x?v.x:0;var y=v.y?v.y:0;if(icl||ocl||s||fs){ctx.save();var ctxsaved=1;if(s)ctx.scale(s);if(icl||ocl){var rg=ctx.context.createRadialGradient(0,0,0,0,0,r);rg.addColorStop(0,icl);rg.addColorStop(1,ocl);ctx.setFillStyle(rg);}else{ctx.setFillStyle(fs);}}
ctx.beginPath();ctx.arc(x,y,r,0,2*Math.PI,0);if(clip)ctx.clip();else ctx.fill();ctx.closePath()
if(ctxsaved){ctx.restore();}}
lib.FFButton=function(options){this.options=options;this.Class=lib.FFButton;this.apply();}
lib.FFButton.prototype.apply=function(options){var rs=neo.apply(this,options);var o=rs.options;var tr=o.triangle;var c=o.circle;var bty=o.bty;var tty=o.tty;var ot=o.oneTriangle;if(neo.defined(tr,c,bty,ot)){var v=rs.value;if(!ot)v.topTriangle=o.triangle.apply({y:tty});v.bottomTriangle=o.triangle.apply({y:bty});}
return rs;};lib.FFButton.prototype.render=function(){var v=this.value;var rt=v.rotation;var tt=v.topTriangle;var bt=v.bottomTriangle;var ot=v.oneTriangle;var c=v.circle;var ctx=v.drawC;bt.value.drawC=ctx;if(!ot)tt.value.drawC=ctx;c.value.drawC=ctx;ctx.save();if(rt)ctx.rotate(rt);if(v.scale)ctx.scale(v.scale);c.render();bt.render();if(!ot)tt.render();ctx.restore();}
lib.StopButton=function(options){this.options=options;this.Class=lib.StopButton;this.apply();};lib.StopButton.prototype=new lib.Shape();lib.StopButton.prototype.render=function(){var v=this.value;var sq=v.square;var c=v.circle;var ctx=v.drawC;if(v.scale){ctx.save();ctx.scale(v.scale);}
sq.value.drawC=ctx;c.value.drawC=ctx;c.render();sq.render();if(v.scale){ctx.restore();}}
lib.PlusSign=function(options){this.options=options;this.Class=lib.PlusSign;this.apply();};lib.PlusSign.prototype=new lib.Shape();lib.PlusSign.prototype.render=function(){var v=this.value;var sq=v.square;var stroke=v.stroke;var ctx=v.drawC;var twoStrokes=v.twoStrokes;ctx.save();if(v.scale)ctx.scale(v.scale);var sqv=sq.apply({drawC:ctx});var strokev=stroke.apply({drawC:ctx});if(twoStrokes){strokev.render();ctx.rotate(Math.PI/2);strokev.render();}else{ctx.scale(0.5,1);strokev.render();}
ctx.restore();}})();$n=neo;(function(){var lib=neo.shape;lib.VcrButtons=function(options){this.options=options;this.Class=lib.VcrButtons;this.apply();}
lib.VcrButtons.prototype.apply=function(options){var rs=neo.apply(this,options);var o=rs.options;var ffbut=o.ffbutton;var fbut=o.fbutton;var c=ffbut.options.circle;var sq=o.square;var sc=ffbut.options.scale;var stopBut=new $n.shape.StopButton({scale:sc,square:sq,circle:c});var v=rs.value;v.stopbutton=stopBut;var fBut=fbut.apply({scale:sc,circle:c,rotation:-Math.PI/2,oneTriangle:1});v.fbutton=fBut;var fbBut=ffbut.apply({rotation:Math.PI/2});v.fbbutton=fbBut;return rs;}
lib.VcrButtons.prototype.render=function(){var v=this.value;var ffbut=v.ffbutton;var fbbut=v.fbbutton;var fbut=v.fbutton;var sbut=v.stopbutton;var container=v.container;var r=ffbut.value.circle.value.radius;var butScale=ffbut.value.scale;var os=v.scale;var s=os?os:1;var sep=s*v.separation;var top=v.top?v.top:0;var left=v.left?v.left:0;function mkButtonCanvas(x,dim,name){var fname="vcr"+name;var canvas=document.createElement('canvas');canvas.setAttribute("width",dim);canvas.setAttribute("height",dim);canvas.id=fname;initCanvas(canvas);var canvasE=$(canvas);container.append(canvasE);canvasE.css("position","absolute");canvasE.css("left",x);canvasE.css("top",top);canvasE.css("z-index",300);return canvasE;}
var dim=butScale*s*r*2.1;var cx=left;var cnv=mkButtonCanvas(cx,dim,"fastback");var ctx=new yUp(cnv.context.getContext('2d'),1,1);if(os){ctx.save();ctx.scale(os);}
fbbut.value.drawC=ctx;fbbut.render();if(os)ctx.restore();cx=cx+sep;var cnv=mkButtonCanvas(cx,dim,"stop");var ctx=new yUp(cnv.context.getContext('2d'),1,1);if(os){ctx.save();ctx.scale(os);}
sbut.value.drawC=ctx;sbut.render();if(os)ctx.restore();var cnv=mkButtonCanvas(cx,dim,"forward");var ctx=new yUp(cnv.context.getContext('2d'),1,1);if(os){ctx.save();ctx.scale(os);}
fbut.value.drawC=ctx;fbut.render();if(os)ctx.restore();cx=cx+sep;var cnv=mkButtonCanvas(cx,dim,"fastforward");var ctx=new yUp(cnv.context.getContext('2d'),1,1);if(os){ctx.save();ctx.scale(os);}
ffbut.value.drawC=ctx;ffbut.render();if(os)ctx.restore();}})();$n=neo;neo.slider={};(function(){var lib=neo.slider;lib.Slider=function(options){this.options=options;this.Class=lib.Slider;this.runningAnimation=0;this.apply();};lib.Slider.prototype=new neo.shape.Shape();var Slider=lib.Slider;Slider.prototype.getContainer=function(root,tag){var e=neo.currentVersion(root,this,tag);var v=e.value;var c=v.container;if(c)return c;var p=v.parent;if(p){return p.value.rendered;}}
Slider.prototype.apply=function(options){var rs=neo.apply(this,options);var o=rs.options;var paddingBottom=o.paddingBottom;var includeYear=o.includeYear;var value=rs.value;var mark=o.mark;var smallMark=o.smallMark;var mv=mark.apply({x:0,y:paddingBottom,fillStyle:o.barColor});value.mark=mv;var smv=smallMark.apply({x:0,y:paddingBottom,fillStyle:o.barColor});value.smallMark=smv;var bar=o.bar;var barv=bar.apply({centered:0,x:0,y:paddingBottom,width:o.width,fillStyle:o.barColor});value.bar=barv;return rs;}
Slider.prototype.render=function(){if(this.rendered)return;this.rendered=true;var thisHere=this;var v=this.value;var foreground=this.foreground;var textColor=v.textColor;var barColor=v.barColor;var fontSize=v.fontSize;var includeYear=v.includeYear;var paddingTop=v.paddingTop;var paddingBottom=v.paddingBottom;var holderHeight=((v.height)+paddingTop+paddingBottom);var holderD='<div style="position:absolute;z-index:3;padding:0;left:0;top:0;width:'+(v.width)+'px;height:'+holderHeight+'px"></div>';var holder=$(holderD);holder.attr("draggable",false);var cntr=this.getContainer();var coff=cntr.offset();cntr.append(holder);var vcrb=v.vcrbuttons;var interactorD='<div id="interactor" style="z-index:200;cursor:pointer;position:absolute;left:'+(coff.left)+'px;top:'+(coff.top)+'px;width:'+(v.width)+';height:'+holderHeight+'"></div>';alert(interactorD);var interactor=$(interactorD);interactor.attr("draggable",false);var vcrContainer;function expandInteractor(){interactor.css({width:(v.width)+600,left:(coff.left)-100,height:300,top:coff.top-200});vcrContainer.css({top:200,left:100});}
function contractInteractor(){interactor.css({width:(v.width),left:(coff.left),height:holderHeight,top:coff.top});vcrContainer.css({top:0,left:0});}
$('body').append(interactor);var canvas=document.createElement('canvas');canvas.setAttribute("width",v.width);canvas.setAttribute("height",holderHeight);initCanvas(canvas);var canvasE=$(canvas);holder.append(canvasE);canvasE.css("position","absolute");canvasE.css("left",0);canvasE.css("top",0);canvasE.css("z-index",30);var vcrContainer=$('<div style="position:absolute;width:'+(v.width)+';height:'+holderHeight+';left:0;top:0;"/>');this.vcrContainer=vcrContainer;interactor.append(vcrContainer);if(vcrb){var vcrbi=vcrb.apply({container:vcrContainer,left:(v.width)/2-75,top:v.height+paddingTop+5});vcrbi.render();this.stopButton=$('#vcrstop');this.stopButton.mousedown(function(){thisHere.stopAnimation();return false;});this.forwardButton=$('#vcrforward');this.forwardButton.mousedown(function(){thisHere.startAnimation();return false;});var fastforwardButton=$('#vcrfastforward');fastforwardButton.mousedown(function(){thisHere.stopAnimation();thisHere.setValue(v.endYear);return false;});var fastbackButton=$('#vcrfastback');fastbackButton.mousedown(function(){thisHere.stopAnimation();thisHere.setValue(v.startYear);return false;});}
ctx=new yUp(canvas.getContext('2d'));var interval=v.subInterval;var mstartYear=Math.floor(v.startYear/interval)*interval;var mendYear=Math.floor(v.endYear/interval)*interval;var numMarks=(mendYear-mstartYear)/interval;var pxPerYear=(v.width)/(v.endYear-v.startYear);var mark=v.mark;var smallMark=v.smallMark;var mv=mark.apply({x:0,y:paddingBottom,drawC:ctx});var smv=smallMark.apply({x:0,y:paddingBottom,drawC:ctx});var bar=v.bar;bar.value.drawC=ctx;bar.render();var sliding=v.sliding;var scanvas=document.createElement('canvas');scanvas.setAttribute("width",sliding.value.width);scanvas.setAttribute("height",sliding.value.height);initCanvas(scanvas);var scanvasE=$(scanvas);holder.append(scanvasE);scanvasE.css("position","absolute");scanvasE.css("left",0);scanvasE.css("top",0);scanvasE.css("z-index",200);scanvasE.attr("draggable",false);var thisHere=this;var scanvas=scanvasE[0];function setValueFromMouseEvent(e){var ofs=cntr.offset();var cx=e.pageX-ofs.left;var yr=Math.floor((cx/(v.width))*(v.endYear-v.startYear)+v.startYear);thisHere.setValue(yr);}
function startDragging(e){$n.forDb={event:e};expandInteractor();setValueFromMouseEvent(e);$n.log('drag',e);interactor.mousemove(function(e){setValueFromMouseEvent(e);return false;});return false;}
function stopDragging(e){contractInteractor();interactor.unbind("mousemove");return false;}
if(1){interactor.mousedown(startDragging);interactor.bind("dragstart",startDragging);interactor.mouseup(stopDragging);interactor.mouseleave(stopDragging);}
var sctx=new yUp(scanvas.getContext('2d'),1);var slidingv=sliding.apply({x:0,y:0,drawC:sctx,fillStyle:barColor});slidingv.render();this.slidingShape=slidingv;this.slidingElement=scanvasE;var width=v.width;var cy=mstartYear;var bigInterval=v.interval;var mw=smv.options.width;var hmw=Math.floor(mw/2);while(cy<=v.endYear){var mx=(cy-v.startYear)*pxPerYear;if(cy%bigInterval==0){var m=mv;var txte=$('<div style="color:white;z-index:1;font-size:'+fontSize+';position:absolute;left:'+(mx-10)+'px;top:5px;">'+cy+'</div>');if(textColor)txte.css("color",textColor);vcrContainer.append(txte);txte.attr("draggable",false);}else{m=smv;}
m.options.x=mx-hmw;m.render();cy=cy+interval;}
if(includeYear){var cYearEl=$('<div style="font-size:'+fontSize+';position:absolute;left:'+((v.width/2)+80)+'px;top:'+(paddingTop+v.height+10)+'px;"></div>');if(textColor)cYearEl.css("color",textColor);vcrContainer.append(cYearEl);this.cYearEl=cYearEl;}
contractInteractor();}
Slider.prototype.setValue=function(tm,halos,noCallback){var v=this.value;if(tm>v.endYear)tm=v.endYear;if(tm<v.startYear)tm=v.startYear;$n.log("setValue",tm,halos);if(v.callback&&!noCallback){v.callback(tm,halos);}
var pxPerYear=(v.width)/(v.endYear-v.startYear);var se=this.slidingElement;if(!se)return;var ss=this.slidingShape;var wd=ss.options.width;var ps=(tm-v.startYear)*pxPerYear;var pd=this.options.paddingTop;se.css("left",ps-Math.floor(wd/2));se.css("top",pd);this.cTime=tm;if(this.cYearEl){this.cYearEl.html(neo.dateToUSformat(neo.timeToDate(tm)));}}
Slider.prototype.stopAnimation=function(){this.runningAnimation=0;this.stopButton.hide();this.forwardButton.show();}
Slider.prototype.startAnimation=function(){this.runningAnimation=1;this.forwardButton.hide();this.stopButton.show();if(this.cTime==this.options.endYear)this.setValue(this.options.startYear);this.animate();}
Slider.prototype.animate=function(){if(!this.runningAnimation)return;var increment=1;if(this.value.delay){var delay=this.value.delay;}else{delay=50;}
var etm=this.value.endYear;var stm=this.value.startYear;var tm=this.cTime;$n.log("slider",tm);if(tm>=etm){if(this.value.loopAnimation){$n.log("sliderLoop","LOOPING");tm=stm;}else{tm=etm;this.setValue(etm,1);this.stopAnimation();return;}}
this.setValue(tm+increment,1);var thisHere=this;setTimeout(function(){thisHere.animate();},delay);}})();neo.zoomer={};(function(){var lib=neo.zoomer;lib.Zoomer=function(options){this.options=options;this.Class=lib.Zoomer;neo.apply(this);};lib.Zoomer.prototype.apply=function(options){return neo.apply(this,options);}
var Zoomer=lib.Zoomer;Zoomer.prototype.render=function(){var v=this.value;var canvas=document.createElement('canvas');var vrt=v.vertical;var padding=v.padding;padding=40;v.padding=padding;canvas.setAttribute("width",v.width);canvas.setAttribute("height",v.height+2*padding);initCanvas(canvas);var canvasE=$(canvas);v.container.append(canvasE);canvasE.css("position","absolute");canvasE.css("left",0);canvasE.css("top",0);canvasE.css("z-index",30);var ctx=new yUp(canvas.getContext('2d'),1,1);var interval=v.subInterval;var numMarks=v.numMarks;var pxPerUnit=(v.height)/(v.upperBound-v.lowerBound);var mark=this.value.mark;var mv=mark.apply({x:0,y:0,drawC:ctx});var bar=this.value.bar;var width=v.width;var height=v.height;var pluss=v.plusSign;if(pluss){var plusv=pluss.apply({drawC:ctx,scale:0.5*width,twoStrokes:1});ctx.save();ctx.translate(0,height/2+plusv.value.scale/2);plusv.render();ctx.restore();var minusv=pluss.apply({drawC:ctx,scale:0.5*width,twoStrokes:0});ctx.save();ctx.translate(0,-(height/2+plusv.value.scale/2));minusv.render();ctx.restore();}
var barve=bar.apply({x:-1,y:-height/2,width:1,height:this.value.height,drawC:ctx});barve.render();var sliding=this.value.sliding;var opand=sliding.value;var scanvas=document.createElement('canvas');scanvas.setAttribute("width",opand.width);scanvas.setAttribute("height",opand.height);initCanvas(scanvas);var scanvasE=$(scanvas);v.container.append(scanvasE);scanvasE.css("position","absolute");scanvasE.css("left",0);scanvasE.css("top",0);scanvasE.css("background-color","green");scanvasE.css("z-index",200);var thisHere=this;var scanvas=scanvasE[0];function setValueFromMouseEvent(e){var ofs=v.container.offset();var cy=v.height+padding-(e.pageY-ofs.top);var vl=(cy/(v.height))*(v.upperBound-v.lowerBound)+v.lowerBound;thisHere.setValue(vl);}
v.container.mousedown(function(e){setValueFromMouseEvent(e);v.container.mousemove(function(e){setValueFromMouseEvent(e);});});v.container.mouseup(function(e){v.container.unbind("mousemove");});v.container.mouseleave(function(e){v.container.unbind("mousemove");});var sctx=new yUp(scanvas.getContext('2d'),1,1);var slidingve=sliding.apply({x:0,y:0,drawC:sctx});slidingve.render();this.slidingShape=slidingve;this.slidingElement=scanvasE;var width=v.width;var cy=v.lowerBound;var interval=(v.upperBound-v.lowerBound)/v.numMarks;while(cy<=v.upperBound){mv.value.y=-(v.height/2)+(cy-v.lowerBound)*pxPerUnit;mv.render();cy=cy+interval;}}
Zoomer.prototype.setValue=function(iv){var v=this.value;if(iv>v.upperBound)iv=v.upperBound;if(iv<v.lowerBound)iv=v.lowerBound;if(v.callback){v.callback(iv);}
var pxPerUnit=(v.height)/(v.upperBound-v.lowerBound);var se=this.slidingElement;if(!se)return;var ss=this.slidingShape;var swd=ss.value.width;var sht=ss.value.height;var ht=this.value.height;var wd=this.value.width;var ps=(v.upperBound-iv)*pxPerUnit;var pd=this.value.padding;se.css("left",Math.floor((wd-swd)/2));se.css("top",pd+ps-sht/2);}})();neo.dom={};(function(){var lib=neo.dom;lib.Element=function(options){this.options=options;this.Class=lib.Element;this.apply();};lib.Element.prototype=new neo.Nit();lib.Element.prototype.installOptions=function(root,tag){var e=neo.currentVersion(root,this,tag);var v=e.value;var r=v.rendered;var click=v.click;var hcss=v.hoverCss;if(v.css){var bcss=v.css;r.css(bcss);}
if(v.attributes){r.attr(v.attributes);}
if(click){var appClick=function(){click(this);};r.click(appClick);}
if(hcss){r.mouseover(function(){neo.log("domcss",hcss);r.children().css(hcss);});r.mouseleave(function(){r.children().css(bcss);});}}
lib.Element.prototype.getContainer=function(root,tag){var e=neo.currentVersion(root,this,tag);var v=e.value;var c=v.container;if(c)return c;var p=v.parent;if(p){return p.value.rendered;}}
lib.Element.prototype.render=function(root){var e=neo.currentVersion(root,this);var v=e.value;if(v.doNotRender)return null;var c=e.getContainer();var tag=v.tag;var el=$("<"+tag+"/>");e.value.rendered=el;e.installOptions();c.append(el);return el;}
lib.Element.prototype.select=function(){var r=this.value.rendered;r.css(this.options.selectedCss);}
lib.Element.prototype.deselect=function(){var r=this.value.rendered;r.css(this.options.css);}
lib.AtomicElement=function(options){this.options=options;this.Class=lib.AtomicElement;this.apply();};lib.AtomicElement.prototype=new lib.Element();lib.AtomicElement.prototype.render=function(root){var e=neo.currentVersion(root,this,tag);var v=e.value;if(v.doNotRender)return null;var c=e.getContainer();var tag=v.tag;if(tag=="img"){var src=v.src;}else{var cn=v.content;var g=v.htmlGen;var html=v.html;if(g){var h=g(cn);}else{if(html){h=html;}else{h=cn;}}}
var el=$("<"+tag+"/>");e.value.rendered=el;if(tag=="img"){el.attr("src",src);}
c.append(el);el.html(h);this.installOptions();return el;}
lib.Elements=function(options){this.options=options;this.Class=lib.Elements;this.apply();};lib.Elements.prototype=new lib.Element();lib.Elements.prototype.render=function(root,rtag){var e=neo.currentVersion(root,this,rtag);var v=e.value;var c=e.getContainer();var tag=v.tag;if(v.doNotRender)return null;if(tag=="body"){var el=$('body');}else{el=$("<"+tag+"/>");c.append(el);}
e.value.rendered=el;e.installOptions();var els=v.elements;if(!els){els=[];}
if(!$.isArray(els))neo.error("Expected elements to an array ",this);var ln=els.length;var newRoot=root;if(rtag){var ctag=rtag;}else{ctag=e._currentTag;}
if(e._repo){var newRoot=e;}else{newRoot=root;}
for(var i=0;i<ln;i++){var cel=els[i];var vcel=neo.currentVersion(newRoot,cel,ctag);vcel.value.parent=e;vcel.render(newRoot);}}
lib.List=function(options){this.options=options;this.Class=lib.List;neo.apply(this);};lib.List.prototype=new lib.Element();lib.List.prototype.elementClick=function(el){var els=this.elements;var ln=els.length;for(var i=0;i<ln;i++){var cel=els[i];if(cel!=el){cel.deselect();}}
var cb=this.value.selectCallback;if(cb)cb(el.value.content);el.select();}
lib.List.prototype.render=function(){var v=this.value;var c=this.getContainer();var css=v.css;var html=v.html;var div=$('<div/>');c.append(div);div.css(css);var tb=$('<table/>');div.append(tb);var elcs=v.elementContents;var elC=v.elementComponent;var ln=elcs.length;var els=[];this.elements=els;var thisHere=this;for(var i=0;i<ln;i++){var ce=elcs[i];var celC=elC.apply({content:ce,container:tb});(function(){var icel=celC;icel.value.click=function(){thisHere.elementClick(icel);};})();els.push(celC);celC.render();}}
lib.Assembly=function(options){this.options=options;this.Class=lib.Assembly;neo.apply(this);};lib.Assembly.prototype.apply=function(options){return neo.apply(this,options);}
lib.Assembly.prototype.render=function(){var v=this.value;var c=v.container;var css=v.css;var parts=v.parts;var partData=v.partData;var tag=v.tag;var root=$('<'+tag+'/>');c.append(root);root.css(css);var ln=parts.length
for(var i=0;i<ln;i++){var part=parts[i];var partd=partData[i];var partv=part.apply({container:root,content:partd});partv.render();}}
lib.loadImages=function(ims){var ln=ims.length;for(var i=0;i<ln;i++){var ci=ims[i];var imel=$('<img>');imel.attr("src",ci);}}
lib.Lightbox=function(container,rect){this.container=container;var xt=rect.extent;var cr=rect.corner;this.left=cr.x;this.top=cr.y;this.width=xt.x;this.height=xt.y;}
lib.Lightbox.prototype.setElementProperties=function(){var element=this.element;element.css({width:(this.width+"px"),height:(this.height+"px"),top:(this.top+"px"),left:(this.left+"px")});}
lib.Lightbox.prototype.dismiss=function(){this.element.hide();this.shade.hide();}
lib.Lightbox.prototype.pop=function(){this.setElementProperties();var wd=$(document).width();var ht=$(document).height();var b=$('body');var be=b[0];var stop=be.scrollTop;var bht=be.clientHeight;var bwd=be.clientWidth;var lwd=this.width;var lft=Math.max((bwd-lwd)/2,50);var eht=Math.max(bht-(this.top)-50,50);this.element.css({height:(eht+"px"),top:(stop+20)+"px",left:(lft+"px")});this.element.show();this.shade.css({width:(wd+"px"),height:(ht+"px"),top:"0px",left:"0px"});this.shade.show();}
lib.Lightbox.prototype.insertContent=function(url){var e=this.element;e.empty();this.addClose();var wd=this.width-25;var ifr=$('<iframe src="'+url+'" frameborder="0" style="width:'+wd+';height:100%"/>');e.append(ifr);}
lib.Lightbox.prototype.addClose=function(){var thisHere=this;this.close=$('<div style="padding:3px;cursor:pointer;background-color:red;font-weight:bold;border:thin solid white;font-size:12pt;color:white;float:right">X</div>');this.close.click(function(){thisHere.dismiss();});this.element.append(this.close);}
lib.Lightbox.prototype.render=function(){var thisHere=this;var element=$('<div class="lightbox"/>');var wd=$(document).width();var ht=$(document).height();var shades='<div style="position:absolute;top:0px;left:0px;width:'+wd+'px;height:'+ht+'px;z-index:1500;opacity:0.8;background-color:black;"/>';var shade=$(shades);this.element=element;this.shade=shade;this.setElementProperties();this.container.append(element);this.container.append(shade);this.dismiss();}})();