if(typeof(Eon)=="undefined")
{var Eon={Version:1.0,DOMEvent:new Object(),Type:new Object(),Object:new Object()}
Eon.Object.toString=function(object,writeWholeFunc,indent)
{var str="";var identStr="";if(!indent)
indent=0;for(var i=0;i<indent;i++)
identStr+="\t";if(identStr)
identStr+="> ";for(var name in object)
{str+=(str?"\n":"")+identStr+name+": ";try
{var type=typeof(object[name]);switch(typeof(object[name]))
{case"object":case"array":var objStr=Eon.Object.toString(object[name],writeWholeFunc,indent+1);str+="Object"+(objStr?"\n"+objStr:"");break;case"string":case"number":str+=object[name];break;case"function":var func=object[name].toString();if(!writeWholeFunc)
func=func.substr(0,func.indexOf("{"));str+=func;break;}}
catch(e)
{str+=e;}}
return str;}
Eon.Type.attributeToBoolean=function(element,attributeName)
{if(element.getAttribute(attributeName))
{var attribute=element.getAttribute(attributeName).toLowerCase();return(attribute=="1"||attribute=="yes"||attribute=="true");}
return false;}
Eon.Type.isDOMElement=function(element)
{return(element&&typeof(element)=="object"&&element.nodeType==1);}
Eon.Type.extendDOMElement=function(element)
{element2=(typeof(element)=="string"?document.getElementById(element):element);if(!Eon.Type.isDOMElement(element2))
throw"Given html element ("+element+") does not exist or is not an html element.";return $(element2);}
Eon.Mouse={x:0,y:0};Eon.Mouse.setMouseCoordinates=function(event)
{Eon.Mouse.x=event.pageX;Eon.Mouse.y=event.pageY;}
document.observe("mousemove",Eon.Mouse.setMouseCoordinates);Eon.Exception=function(type,message,url,lineNumber,charNumber,typeCode,stack)
{this.type=type;this.typeCode=typeCode;this.message=message;this.url=url;this.charNumber=parseInt(charNumber);this.lineNumber=parseInt(lineNumber);this.stack=stack;var trigger=Eon.Exception.caller;while(trigger==Eon.Exception.CreateFromString||trigger==Eon.Exception.CreateFromObject||trigger==Eon.Exception.Create)
trigger=trigger.caller;this.getTrigger=function(){return trigger;}
this.toString=function()
{return("Type: "+type+(typeCode?" ("+typeCode+")":"")+"\n"+
(url?url+" ":"")+
(lineNumber?"@"+lineNumber+" ":"")+
(charNumber?"("+charNumber+") ":"")+"\n"+message+
(stack?"\n"+stack:""));}}
Eon.Exception.CreateFromObject=function(jsEx)
{var type=(jsEx.name?jsEx.name:"UnknowType");var typeCode=jsEx.type;var message=(jsEx.message?jsEx.message:"Unknow exception");var url=(jsEx.fileName?jsEx.fileName:jsEx.sourceURL);var charNumber=(jsEx.expressionBeginOffset?jsEx.expressionBeginOffset+" ["+jsEx.expressionCaretOffset+"] "+jsEx.expressionEndOffset:null);var lineNumber=(jsEx.lineNumber?jsEx.lineNumber:(jsEx.number?jsEx.number:jsEx.line));var stack=(jsEx.stack?jsEx.stack:jsEx.stacktrace);return new Eon.Exception(type,message,url,lineNumber,charNumber,typeCode,stack);}
Eon.Exception.CreateFromString=function(strEx)
{return new Eon.Exception("UserException",strEx.toString());}
Eon.Exception.Create=function(ex)
{if((ex instanceof Eon.Exception))
return ex;if(typeof(ex)=="object")
return Eon.Exception.CreateFromObject(ex);if(ex==null)
ex="";return Eon.Exception.CreateFromString(ex);}
Eon.Exception.INVALID_ARG="InvalidArgument";Eon.Exception.INVALID_OBJ_CREATION="InvalidObjectCreation";Eon.DOMEvent.StopEventDefaultBehavior=function(event)
{event.preventDefault();event.returnValue=false;return false;}
Eon.Event=function(eventType)
{this.getType=function()
{return eventType;}
this.getTrigger=function()
{return null;}
this.getSender=function()
{return null;}}
Eon.ErrorEvent=function(eventType,message)
{Eon.Event.call(this,eventType);this.getMessage=function()
{return message;}}
Eon.ErrorEvent.prototype=new Eon.Event();Eon.ErrorEvent.constructor=Eon.ErrorEvent;Eon.MetaEvent=function(eventType,parameters)
{Eon.Event.call(this,eventType);this.getParameters=function()
{return parameters;}}
Eon.MetaEvent.prototype=new Eon.Event();Eon.MetaEvent.constructor=Eon.MetaEvent;Eon.EventSender=function()
{var p_callBacks=new Array();this.addEventMonitor=function(eventType,monitor){if(typeof(monitor)!="function")
throw new Eon.Exception(Eon.Exception.INVALID_ARG,"Parameter event in ErrorSender.addEventMonitor must be a function.","Eon.js");if(p_callBacks[eventType]==null)
p_callBacks[eventType]=new Array();p_callBacks[eventType].push(monitor);}
this.removeEventMonitor=function(eventType,monitor)
{var i=p_findMonitor(eventType,monitor);if(i!=-1)
{p_callBacks[eventType].splice(i,1);return true;}
return false;}
this.removeEventMonitors=function(eventType)
{p_callBacks[eventType]=null;}
this.removeAllMonitors=function()
{p_callBacks=new Array();}
this.isRegisteredEvent=function(eventType)
{return(p_callBacks[eventType]!=null&&p_callBacks[eventType].length>0);}
this.isRegisteredMonitor=function(eventType,monitor)
{return(p_findMonitor(eventType,monitor)!=-1);}
this.triggerEvent=function(event){if(!(event instanceof Eon.Event))
throw new Eon.Exception(Eon.Exception.INVALID_ARG,"Parameter event in ErrorSender.triggerEvent must be an Event.","Eon.js");p_this=this;if(event.getTrigger()==null)
event.getTrigger=function(){return p_this;};event.getSender=function(){return p_this;};var callbacks=p_callBacks[event.getType()];if(callbacks!=null){var len=callbacks.length;for(var i=0;i<len;i++)
callbacks[i](event);}}
function p_findMonitor(eventType,monitor)
{if(p_callBacks[eventType]!=null)
{for(var i=0;i<p_callBacks[eventType].length;i++)
if(p_callBacks[eventType][i]==monitor)
return i;}
return-1;}}}
