
var JooS = {
Extend: function(destination, source) {
for (var i in source)
destination[i] = source[i];
return destination;
},
Clone: function() {
var F = new Function();
return function(Obj) {
F.prototype = Obj;
return new F();
};
}(),
Reflect: function(destination, methods) {
var c = this.Constructor();
c.__proto = new Function();
c.__proto.prototype = c.prototype = this.Extend(destination ? new destination.__proto : { }, methods);
c.__ancestors = new Function();
c.__ancestors.prototype = destination ? new destination.__ancestors : { };
c.__plugins = this.Extend([ ], destination ? destination.__plugins : { });
return c.prototype.constructor = c;
},
Virtual: function(destination, methods) {
for (var i in methods) {
methods[i].__parent = destination.__ancestors.prototype[i];
destination.__ancestors.prototype[i] = methods[i];
}
},
Constructor: function() {
return function() {
var p, i;
p = this.constructor.__ancestors.prototype;
for (i in p) {
this[i] = JooS.VirtualMethod__self();
this[i].__parent = JooS.VirtualMethod__parent;
this[i].__thisObj = this;
this[i].__realMethod = p[i];
}
this.__constructor.apply(this, arguments);
p = this.constructor.__plugins;
for (i in p)
p[i].call(this);
};
},
Plugin: function(destination, source) {
for (var i in source.prototype) {
if (i == "__initialize")
destination.__plugins.push(source.prototype[i])
else if (!destination.prototype[i] && i != "constructor")
destination.prototype[i] = source.prototype[i];
}
JooS.Extend(destination.__ancestors.prototype, source.__ancestors.prototype);
},
VirtualMethod__self: function() {
return function() {
return arguments.callee.__realMethod.apply(this, arguments);
};
},
VirtualMethod__parent: function() {
var old = this.__realMethod, Ret;
this.__realMethod = this.__realMethod.__parent;
Ret = this.__realMethod.apply(this.__thisObj, arguments);
this.__realMethod = old;
return Ret;
}
};
JooS.Browser = new function() {
var br = this, i, ua = navigator.userAgent, g, ver = function(s) {
br.version = (i = ua.indexOf(s)) >= 0 && parseFloat(ua.substr(i + s.length));
return br.version;
};
(  this.isSafari = false  ) || (  this.isOpera = false  ) || (  this.isIE = false  ) || (  this.isFF = false  ) || (  this.isNS = false  ) ||
(  this.version = this.Safari = this.isSafari = ver("Safari/") && (this.version > 500 ? 3 : (this.version > 400 ? 2 : 1))  ) ||
(  this.Opera = this.isOpera = (typeof window.opera != "undefined") && (ver("Opera/") || ver("Opera"))  ) ||
(  this.IE = this.isIE = ver("MSIE")  ) ||
(  this.Firefox = this.isFF = ver("Firefox/")  ) ||
(  this.version = this.isNS = (ver("Netscape6/") || ver("Netscape/")) && ver("Gecko/") && (this.version > 20020800 ? 7 : 5)  );
if (this.isNS)
this.Firefox = this.isFF = this.version = 2;
this.pngExt = (this.isIE && this.isIE < 5.5 ? "gif" : "png");
this.pngClass = (this.isIE && this.isIE < 7 ? "png_scale" : "");
};
JooS.Class = JooS.Reflect(null, {
__common: new Object(),
__destroy: function() {
this.__destructor.apply(this, arguments);
for (var i in this.constructor.__ancestors.prototype)
this[i] = null;
}
});
JooS.Virtual(JooS.Class, {
__constructor: function() {
},
__destructor: function() {
},
__initialize: function() {
}
});
JooS.Class.Plugin = JooS.Reflect(null);
JooS.Virtual(JooS.Class.Plugin, {
__initialize: function() {
}
});
JooS.Settings = JooS.Reflect(JooS.Class, {
getSettingsId: function() {
return "JooS";
}
});
JooS.Virtual(JooS.Settings, {
__constructor: function(Settings) {
this.__common[this.getSettingsId()] = this;
JooS.Extend(this, Settings);
}
});
var Closure = {
Value: function(value) {
return function() {
return value;
};
},
Function: function(Action, Context) {
return function() {
return Action.apply(Context || window, arguments);
}
}
};
JooS.Closure = Closure;
JooS.Extend(JooS, {
onLoad: function() {
for (var i=0; i<this.StartupActions.length; i++)
this.StartupActions[i]();
},
onLoad_IE: function(event) {
if (/loaded|complete/.test(document.readyState)) {
JooS.onLoad();
return true;
}
},
onLoad_Safari: function() {
var __timer = setInterval(function() {
if (JooS.onLoad_IE())
clearInterval(__timer);
}, 100);
},
StartupActions: [],
Startup: function(Action) {
if (!this.StartupActions.length) {
if (this.Browser.isFF)
document.addEventListener("DOMContentLoaded", Closure.Function(this.onLoad, this), false);
else if (typeof document.onreadystatechange != "undefined")
document.attachEvent("onreadystatechange", this.onLoad_IE);
else if (this.Browser.isSafari)
this.onLoad_Safari();
else
window.onload = Closure.Function(this.onLoad, this);
}
this.StartupActions.push(Action);
}
});
JooS.jQuery = function() {
var styleFloat = /*@cc_on!@*/false ? "styleFloat" : "cssFloat";
var chars = JooS.Browser.isSafari && JooS.Browser.isSafari < 2 ? "(?:[\\w*_-]|\\\\.)" : "(?:[\\w\u0128-\uFFFF*_-]|\\\\.)";
var quickChild = new RegExp("^>\\s*(" + chars + "+)");
var quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)");
var quickClass = new RegExp("^([#.]?)(" + chars + "*)");
return {
props: {
"for": "htmlFor",
"class": "className",
"float": styleFloat,
cssFloat: styleFloat,
styleFloat: styleFloat,
innerHTML: "innerHTML",
className: "className",
value: "value",
disabled: "disabled",
checked: "checked",
readonly: "readOnly",
selected: "selected",
maxlength: "maxLength",
selectedIndex: "selectedIndex",
defaultValue: "defaultValue",
tagName: "tagName",
nodeName: "nodeName"
},
trim: function( text ) {
return (text || "").replace( /^\s+|\s+$/g, "" );
},
merge: function( first, second ) {
if ( JooS.Browser.isIE ) {
for ( var i = 0; second[ i ]; i++ )
if ( second[ i ].nodeType != 8 )
first.push( second[ i ] );
} else
for ( var i = 0; second[ i ]; i++ )
first.push( second[ i ] );
return first;
},
isXMLDoc: function( elem ) {
return elem.documentElement && !elem.body ||
elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
},
nodeName: function( elem, name ) {
return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
},
parse: [
/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,
new RegExp("^([:.#]*)(" + chars + "+)")
],
find: function( t, context ) {
if ( typeof t != "string" )
return [ t ];
if ( context && context.nodeType != 1 && context.nodeType != 9)
return [ ];
context = context || document;
var ret = [context], done = [], last, nodeName;
while ( t && last != t ) {
var r = [];
last = t;
t = this.trim(t);
var foundToken = false;
var re = quickChild;
var m = re.exec(t);
if ( m ) {
nodeName = m[1].toUpperCase();
for ( var i = 0; ret[i]; i++ )
for ( var c = ret[i].firstChild; c; c = c.nextSibling )
if ( c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName) )
r.push( c );
ret = r;
t = t.replace( re, "" );
if ( t.indexOf(" ") == 0 ) continue;
foundToken = true;
}
if ( t && !foundToken ) {
if ( !t.indexOf(",") ) {
if ( context == ret[0] ) ret.shift();
done = this.merge( done, ret );
r = ret = [context];
t = " " + t.substr(1,t.length);
} else {
var re2 = quickID;
var m = re2.exec(t);
if ( m ) {
m = [ 0, m[2], m[3], m[1] ];
} else {
re2 = quickClass;
m = re2.exec(t);
}
m[2] = m[2].replace(/\\/g, "");
var elem = ret[ret.length-1];
if ( m[1] == "#" && elem && elem.getElementById && !this.isXMLDoc(elem) ) {
var oid = elem.getElementById(m[2]);
if ( (JooS.Browser.isIE||JooS.Browser.isOpera) && oid && typeof oid.id == "string" && oid.id != m[2] )
oid = jQuery('[@id="'+m[2]+'"]', elem)[0];
ret = r = oid && (!m[3] || this.nodeName(oid, m[3])) ? [oid] : [];
} else {
for ( var i = 0; ret[i]; i++ ) {
var tag = m[1] == "#" && m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2];
if ( tag == "*" && ret[i].nodeName.toLowerCase() == "object" )
tag = "param";
r = this.merge( r, ret[i].getElementsByTagName( tag ));
}
if ( m[1] == "." )
r = this.classFilter( r, m[2] );
if ( m[1] == "#" ) {
var tmp = [];
for ( var i = 0; r[i]; i++ )
if ( r[i].getAttribute("id") == m[2] ) {
tmp = [ r[i] ];
break;
}
r = tmp;
}
ret = r;
}
t = t.replace( re2, "" );
}
}
if ( t ) {
var val = this.filter(t,r);
ret = r = val.r;
t = this.trim(val.t);
}
}
if ( t )
ret = [];
if ( ret && context == ret[0] )
ret.shift();
done = this.merge( done, ret );
return done;
},
classFilter: function(r,m,not){
m = " " + m + " ";
var tmp = [];
for ( var i = 0; r[i]; i++ ) {
var pass = (" " + r[i].className + " ").indexOf( m ) >= 0;
if ( !not && pass || not && !pass )
tmp.push( r[i] );
}
return tmp;
},
filter: function(t,r,not) {
var last;
while ( t && t != last ) {
last = t;
var p = this.parse, m;
for ( var i = 0; p[i]; i++ ) {
m = p[i].exec( t );
if ( m ) {
t = t.substring( m[0].length );
m[2] = m[2].replace(/\\/g, "");
break;
}
}
if ( !m )
break;
if ( m[1] == "." )
r = this.classFilter(r, m[2], not);
else if ( m[1] == "[" ) {
var tmp = [], type = m[3];
for ( var i = 0, rl = r.length; i < rl; i++ ) {
var a = r[i], z = a[ this.props[m[2]] || m[2] ];
if ( (type == "" && !!z ||
type == "=" && z == m[5] ||
type == "!=" && z != m[5] ||
type == "^=" && z && !z.indexOf(m[5]) ||
type == "$=" && z.substr(z.length - m[5].length) == m[5] ||
(type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not )
tmp.push( a );
}
r = tmp;
}
}
return { r: r, t: t };
}
};
}();
JooS.cssQuery = function(rule, elem) {
elem = elem || document;
//  try{
var ret = elem.querySelectorAll ? elem.querySelectorAll(rule.toLowerCase()) : JooS.jQuery.find(rule, elem);
//  }
//  catch(e) {
//   alert(rule);
//  }
return ret;
};
JooS.DOMEvent = JooS.Reflect(null, {
launch: function(joosObj) {
var pfx = this.getEventEntryPrefix(), returnValue = false;
for (var i=1, cnt=joosObj.eventActions[this.type]; i<=cnt; i++)
returnValue = returnValue || joosObj[pfx + i](this);
if (!returnValue)
this.preventDefault();
},
screenX: function() {
return this.event.screenX;
},
screenY: function() {
return this.event.screenY;
},
button: function() {
return this.event.button;
},
wheelData: function() {
var Delta = 0;
if (this.event.wheelDelta)
Delta = this.event.wheelDelta/120;
else if (this.event.detail)
Delta = -this.event.detail/3;
return Delta;
},
getEventEntryPrefix: function(Name) {
return "__eventEntry_" + (Name || this.type) + "_";
},
__constructor: function(event) {
this.event = event || window.event;
this.type = this.event.type;
},
__destroy: function() {
}
});
if (window.attachEvent) {
JooS.Extend(JooS.DOMEvent.prototype, {
preventDefault: function() {
this.event.cancelBubble = true;
this.event.returnValue = false;
},
offsetX: function() {
return this.event.offsetX;
},
offsetY: function() {
return this.event.offsetY;
}
});
}
else {
JooS.Extend(JooS.DOMEvent.prototype, {
preventDefault: function() {
this.event.preventDefault();
},
offsetX: function() {
return this.event.layerX;
},
offsetY: function() {
return this.event.layerY;
}
});
}
JooS.Extend(JooS.DOMEvent, {
getEventName: function(Name) {
switch (Name) {
case "mousewheel":
if (!JooS.Browser.isOpera && !JooS.Browser.isSafari && window.addEventListener)
Name = "DOMMouseScroll";
break;
case "contextmenu":
if (JooS.Browser.isOpera)
Name = false;
break;
};
return Name;
},
getEventEntryPrefix: JooS.DOMEvent.prototype.getEventEntryPrefix
});
JooS.Element = JooS.Reflect(JooS.Class, {
getElementProperties: function() {
return new Object();
},
getElementStyles: function() {
return new Object();
},
getElement: function(TagName) {
if (!this.__htmlInit) {
if (!this.htmlElement)
this.htmlElement = document.createElement(TagName || this.TagName || "div");
JooS.Extend(this.htmlElement, this.getElementProperties());
JooS.Extend(this.htmlElement.style, this.getElementStyles());
this.__htmlInit = true;
}
return this.htmlElement;
},
appendChild: function(Element) {
this.getElement().appendChild(Element.getElement());
return this;
},
prependChild: function(Element) {
if (this.getElement().firstChild) {
this.getElement().insertBefore(Element.getElement(), this.getElement().firstChild);
return this;
}
else
return this.appendChild(Element);
},
removeChild: function(Element) {
this.getElement().removeChild(Element.getElement());
return this;
},
removeNode: function() {
if (this.htmlElement) {
var parentNode = this.htmlElement.parentNode;
if (parentNode)
parentNode.removeChild(this.htmlElement);
}
},
create__eventEntry: function() {
var joosObj = this;
this.__eventEntry = function(event) {
var evt = new JooS.DOMEvent(event);
evt.launch(joosObj);
}
},
attachEvent: function(Name, Func) {
if (!this.__eventEntry)
this.create__eventEntry();
if (Name = JooS.DOMEvent.getEventName(Name)) {
if (!this.eventActions[Name])
if (window.attachEvent)
this.getElement().attachEvent("on" + Name, this.__eventEntry);
else
this.getElement().addEventListener(Name, this.__eventEntry, false);
this.eventActions[Name] = this.eventActions[Name] ? this.eventActions[Name] + 1 : 1;
this[JooS.DOMEvent.getEventEntryPrefix(Name) + this.eventActions[Name]] = Func;
}
},
detachEvent: function(Name) {
if (Name = JooS.DOMEvent.getEventName(Name)) {
if (this.eventActions[Name]) {
if (window.attachEvent)
this.getElement().detachEvent("on" + Name, this.__eventEntry);
else
this.getElement().removeEventListener(Name, this.__eventEntry, false);
this.eventActions[Name] = null;
}
}
},
cssQuery: function(rule) {
return JooS.cssQuery(rule, this.getElement());
},
cssQueryStrict: function(rule) {
var tmpClassName = "strict_rule" + parseInt(Math.random()*1000), Ret;
this.addClassName(tmpClassName);
Ret = JooS.cssQuery("." + tmpClassName + " > " + rule, this.getElement().parentNode);
this.removeClassName(tmpClassName);
return Ret;
}
});
JooS.Virtual(JooS.Element, {
__constructor: function(Tag, Properties, Styles) {
this.eventActions = [];
if (Properties)
this.getElementProperties = Closure.Value(Properties);
if (Styles)
this.getElementStyles = Closure.Value(Styles);
if (!Tag || typeof Tag == "string") {
this.htmlElement = null;
this.TagName = Tag;
}
else {
this.htmlElement = Tag;
this.getElement();
}
},
__destructor: function() {
for (var i in this.eventActions)
this.detachEvent(i);
this.htmlElement = null;
}
});
JooS.WindowDOM = new JooS.Element(window);
JooS.DocumentDOM = new JooS.Element(document);
JooS.Startup(function() {
JooS.BodyDOM = new JooS.Element(JooS.cssQuery("body")[0]);
JooS.HeadDOM = new JooS.Element(JooS.cssQuery("head")[0]);
});
JooS.TextElement = JooS.Reflect(JooS.Class, {
getElement: function(nodeValue) {
if (!this.__htmlInit) {
if (!this.htmlElement)
this.htmlElement = document.createTextNode(nodeValue || this.nodeValue);
this.__htmlInit = true;
}
return this.htmlElement;
},
getNodeValue: function() {
return this.getElement().nodeValue;
},
setNodeValue: function(nodeValue) {
this.getElement().nodeValue = nodeValue;
},
removeNode: JooS.Element.prototype.removeNode
});
JooS.Virtual(JooS.TextElement, {
__constructor: function(nodeValue) {
if (!nodeValue || typeof nodeValue == "string")
this.nodeValue = nodeValue || "";
else
this.htmlElement = nodeValue;
}
});
JooS.JSLoader = JooS.Reflect(JooS.Element, {
getElementProperties: function() {
return {
src: this.source,
type: "text/javascript",
charset: "koi8-r"
};
},
attachCallback: function(callback) {
var Element = this.getElement();
if (JooS.Browser.IE) {
Element.onreadystatechange= function() {
var rs = this.readyState;
if ("loaded" === rs || "complete" === rs) {
callback();
this.onreadstatechange = null;
}
};
}
else {
Element.onload = function() {
Element.onload = null;
callback();
};
}
}
});
JooS.Virtual(JooS.JSLoader, {
__constructor: function(source, callback) {
this.source = source;
this.__constructor.__parent("script");
JooS.BodyDOM.appendChild(this);
if (callback)
this.attachCallback(callback);
},
__destructor: function() {
this.removeNode();
this.__destructor.__parent();
}
});
JooS.Extend(JooS.JSLoader, {
Scripts: [],
Start: function(source, id) {
id = id || Math.random();
this.Scripts[id] = new this(source);
return id;
},
Cleanup: function(id) {
if (this.Scripts[id]) {
this.Scripts[id].removeNode();
this.Scripts[id].__destroy();
delete this.Scripts[id];
}
}
});
JooS.CSSLoader = JooS.Reflect(JooS.Element, {
getElementProperties: function() {
return {
rel: "stylesheet",
type: "text/css",
href: this.href
};
}
});
JooS.Virtual(JooS.CSSLoader, {
__constructor: function(href) {
this.href = href;
this.__constructor.__parent("link");
JooS.HeadDOM.prependChild(this);
}
});
JooS.JSEval = JooS.Reflect(JooS.Element, {
useTextNode: function() {
return JooS.Browser.Safari || JooS.Browser.Opera;
},
getElementProperties: function() {
var Prop = {
type: "text/javascript",
language: "JavaScript"
};
if (!this.useTextNode())
Prop.text = this.EvalCode;
return Prop;
}
});
JooS.Virtual(JooS.JSEval, {
__constructor: function(EvalCode) {
this.EvalCode = EvalCode;
this.__constructor.__parent("script");
if (this.useTextNode())
this.appendChild(new JooS.TextElement(EvalCode));
JooS.BodyDOM.appendChild(this);
this.removeNode();
}
});
JooS.CSSInline = JooS.Reflect(JooS.Element, {
getElementProperties: function() {
return {
type: "text/css"
};
}
});
JooS.Virtual(JooS.CSSInline, {
__constructor: function(cssText) {
this.__constructor.__parent("style");
if (this.getElement().styleSheet)
this.getElement().styleSheet.cssText = cssText;
else
this.appendChild(new JooS.TextElement(cssText));
JooS.HeadDOM.prependChild(this);
}
});
JooS.Ajax = {
Send: function(Method, Url, Query, CallbackFunction, target, MarkerView) {
var req = new Subsys_JsHttpRequest_Js();
req.onreadystatechange = function() {
if (req.readyState == 4) {
CallbackFunction.call(req);
} else {
var TargetElement = document.getElementById(target) ? document.getElementById(target) : target;
if(TargetElement) {
var inHTML = "";
switch (req.readyState) {
case 0:
inHTML = "\u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043d";
break;
case 1:
inHTML =  "\u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0430...";
break;
case 2:
inHTML = "\u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043E";
break;
case 3:
inHTML = "\u0432 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0435...";
break;
case 4:
inHTML = "\u0433\u043E\u0442\u043E\u0432\u043E";
break;
default:
inHTML = "\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043E\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043d\u0438\u0435";
}
if(MarkerView) {
var src = "/img/" + MarkerView + ".gif";
var params = " width = \"38\" height=\"25\" class=\"loader\" align=\"center\" ";
} else {
var src = "/img/loader.gif";
var params = "";
}
TargetElement.innerHTML = "<img src=\"" + src + "\"" + params + "title=\"" + inHTML + "\" />";
}
}
};
req.open(Method, Url, true);
req.send(Query);
},
Get: function(Url, Query, cb, target, MarkerView) {
this.Send("GET", Url, Query, cb, target, MarkerView);
},
Post: function(Url, Query, cb, target) {
this.Send("POST", Url, Query, cb, target);
}
};
JooS.Cookie = {
CookieSplit : ".",
Read: function(Name) {
var nameEQ = Name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ')
c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0)
return c.substring(nameEQ.length,c.length);
}
return null;
},
Set: function(Name, Value, Days, Path) {
if (Days) {
var Expires = new Date();
Expires.setTime(Expires.getTime()+(Days*24*60*60*1000));
}
/* \u044F \u0445\u0437 \u043F\u043E\u0447\u0435\u043C\u0443, \u043d\u043E \u0441 Path \u0432 IE \u043A\u0443\u043A\u0438 \u043d\u0435 \u0441\u0442\u0430\u0432\u044F\u0442\u0441\u044F */
if(JooS.Browser.isIE)
Path = "";
document.cookie = Name + "=" + escape(Value) + ( Expires ? "; expires=" + Expires.toGMTString() : "" ) + ( Path ? "; path=" + Path : "" );
},
Delete: function(Name) {
if(this.Read(Name))
this.Set(Name, "", -1);
},
SetArr: function(Name, Value, Days, Path) {
var CookieStr = this.Read(Name);
var CookieArr = new Array();
if(CookieStr) {
CookieArr = CookieStr.split(this.CookieSplit);
for(i in CookieArr) {
if(CookieArr[i] == Value) {
CookieArr.splice(i, 1);
}
}
}
CookieArr.push(Value);
CookieStr = "";
CookieStr = CookieArr.join(this.CookieSplit);
this.Set(Name, CookieStr, Days, Path);
},
DeleteArr: function(Name, Value, Days, Path) {
var CookieStr = this.Read(Name);
var CookieArr = new Array();
if(CookieStr) {
CookieArr = CookieStr.split(this.CookieSplit);
for(i in CookieArr) {
if(CookieArr[i] == Value) {
CookieArr.splice(i, 1);
}
}
}
CookieStr = "";
CookieStr = CookieArr.join(this.CookieSplit);
this.Set(Name, CookieStr, Days, Path);
}
};
JooS.Extend(JooS.Element.prototype, {
getAttributes: function() {
var attrs = this.getElement().attributes, i, attr, ret = {};
for (i=0; i<attrs.length; i++) {
attr = attrs.item(i);
ret[attr.name] = attr.value;
}
return ret;
},
getAttribute: function(name) {
return this.getElement().getAttribute(name);
},
getStyle: function(prop, elem) {
var currentStyle = [];
elem = elem || this.getElement();
if (document.defaultView && document.defaultView.getComputedStyle)
currentStyle = document.defaultView.getComputedStyle(elem, null);
else if (elem.currentStyle)
currentStyle = elem.currentStyle;
return currentStyle[prop] || "";
},
addClassName: function (className, elem) {
elem = elem || this.getElement();
var currentClass = elem.className;
if (!new RegExp(("(^|\\s)" + className + "(\\s|$)"), "i").test(currentClass)) {
elem.className = currentClass + (currentClass ? " " : "") + className;
}
return this;
},
removeClassName: function (className, elem) {
elem = elem || this.getElement();
var classToRemove = new RegExp(("(^|\\s)" + className + "(\\s|$)"), "i");
elem.className = (elem.className).replace(classToRemove, function (match) {
var retVal = "";
if (new RegExp("^\\s+.*\\s+$").test(match)) {
retVal = match.replace(/(\s+).+/, "$1");
}
return retVal;
}).replace(/^\s+|\s+$/g, "");
return this;
},
replaceClassName: function (className, newClass, elem) {
elem = elem || this.getElement();
var classToRemove = new RegExp(("(^|\\s)" + className + "(\\s|$)"), "i");
elem.className = (elem.className || "").replace(classToRemove, function (match, p1, p2) {
var retVal = p1 + newClass + p2;
if (new RegExp("^\\s+.*\\s+$").test(match)) {
retVal = match.replace(/(\s+).+/, "$1");
}
return retVal;
}).replace(/^\s+|\s+$/g, "");
return this;
},
hasClassName: function (className) {
return new RegExp(("(^|\\s)" + className + "(\\s|$)"), "i").test(this.getElement().className);
},
setPos: function(left, top) {
this.htmlElement.style.left = parseInt(left) + "px";
this.htmlElement.style.top = parseInt(top) + "px";
},
getPos: function() {
return {
left: this.htmlElement.offsetLeft,
top: this.htmlElement.offsetTop
};
},
getScrollPos: function() {
return {
left: this.htmlElement.scrollLeft,
top: this.htmlElement.scrollTop
};
},
getPagePos: function(elem) {
var str = "";
var valueT = 0, valueL = 0, element = elem || this.getElement(), pos;
do {
valueL += parseInt(element.offsetLeft) || 0;
valueT += parseInt(element.offsetTop) || 0;
element = element.offsetParent;
if (element && !JooS.Browser.isOpera) {
pos = this.getStyle("position", element);
if (pos == "relative" || pos == "absolute") {
valueL += parseInt(this.getStyle("borderLeftWidth", element));
valueT += parseInt(this.getStyle("borderTopWidth", element));
}
}
} while (element);
return {
left: valueL,
top: valueT
};
},
setSize: function(width, height) {
this.getElement().style.width = width ? parseInt(width) + "px" : "";
this.getElement().style.height = height ? parseInt(height) + "px" : "";
},
getSize: function() {
var element = this.getElement();
if (element.style.display != 'none')
return {
width: element.offsetWidth,
height: element.offsetHeight
};
var els = element.style;
var originalVisibility = els.visibility;
var originalPosition = els.position;
els.visibility = 'hidden';
els.position = 'absolute';
els.display = '';
var originalWidth = element.clientWidth;
var originalHeight = element.clientHeight;
els.display = 'none';
els.position = originalPosition;
els.visibility = originalVisibility;
return {
width: parseInt(originalWidth),
height: parseInt(originalHeight)
};
},
setDisplay: function(display) {
this.getElement().style.display = display;
return this;
},
setVisibility: function(visibility) {
this.getElement().style.visibility = visibility;
return this;
},
setOpacity: JooS.Browser.isIE ? function(opacity) {
this.getElement().runtimeStyle.filter = "alpha(opacity="+opacity+")";
return this;
} :
function(opacity) {
this.getElement().style.opacity = opacity / 100;
return this;
},
getElementById: function(Id) {
var Element = document.getElementById(Id);
return Element || "";
},
inObject: function(event) {
var Pos = this.getPagePos();
var Size = this.getSize();
var dx, dy;
if(JooS.Browser.isIE) {
dx = event.event.offsetX;
dy = event.event.offsetY;
if( dx <= 0 || dx >= Size.width || dy <= 0 || dy >= Size.height ) {
return true;
}
} else {
dx = event.event.pageX;
dy = event.event.pageY;
if( dx <= Pos.left || dx >= Pos.left + Size.width || dy <= Pos.top || dy >= Pos.top + Size.height ) {
return true;
}
}
return false;
}
});
JooS.WindowDOM.getScrollSize = function() {
var width = 0, height = 0;
if ( typeof( window.innerWidth ) == 'number' ) {
width = window.innerWidth;
height = window.innerHeight;
}
else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
width = document.documentElement.clientWidth;
height = document.documentElement.clientHeight;
}
else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
width = document.body.clientWidth;
height = document.body.clientHeight;
}
else {
width = screen.width;
height = screen.height;
}
return {
width: parseInt(width),
height: parseInt(height)
}
}
JooS.Template = JooS.Reflect(JooS.Class, {
evaluate: function(object) {
var template = this.template;
if (object)
for (var i in object)
template = template.replace(new RegExp("(\\#\\{" + i + "\\})", "g"), object[i]);
return template;
}
});
JooS.Extend(JooS.Template, {
templates: [],
get: function(id) {
return this.templates[id] ? this.templates[id] : "";
},
set: function(id, str) {
this.templates[id] = str;
}
});
JooS.Virtual(JooS.Template, {
__constructor: function(id) {
if (!this.constructor.get(id)) {
var elem = JooS.cssQuery("#" + id)[0];
this.constructor.set(id, elem ? elem.innerHTML : "");
elem = null;
}
this.template = this.constructor.get(id);
}
});
JooS.Extend(JooS.DocumentDOM, {
DragAction_Start: function(dragObj, event) {
this.dragObj = dragObj;
this.dragStartX = event.screenX();
this.dragStartY = event.screenY();
this.attachEvent("mousemove", this.DragAction_Move);
this.attachEvent("mouseup", this.DragAction_Stop);
},
DragAction_Move: function(event) {
var dX = event.screenX() - this.dragStartX, dY = event.screenY() - this.dragStartY;
if (dX || dY)
this.dragObj.DragEvent_onMove(dX, dY);
},
DragAction_Stop: function() {
this.detachEvent("mouseup");
this.detachEvent("mousemove");
this.dragObj.DragEvent_onStop();
this.dragObj = null;
},
isDragging: function() {
return !!this.dragObj;
}
});
JooS.Drag = JooS.Reflect(JooS.Class.Plugin, {
DragAction_Start: function(event) {
if (!this.DragEvent_onStart(event))
JooS.DocumentDOM.DragAction_Start(this, event);
else
return true;
},
DragEvent_onStart: function(event) {
},
DragEvent_onMove: function(dX, dY) {
},
DragEvent_onStop: function() {
},
__initialize: function() {
this.attachEvent("mousedown", this.DragAction_Start);
}
});
Subsys_JsHttpRequest_Js = function() {
this._construct();
};
(function() {
var COUNT       = 0;
var PENDING     = {};
var CACHE       = {};
Subsys_JsHttpRequest_Js.dataReady = function(id, text, js) {
var undef;
var th = PENDING[id];
delete PENDING[id];
if (th) {
delete th._xmlReq;
if (th.caching) CACHE[th.hash] = [text, js];
th._dataReady(text, js);
} else if (typeof(th) != typeof(undef)) {
alert("ScriptLoader: unknown pending id: "+id);
}
};
Subsys_JsHttpRequest_Js.prototype = {
onreadystatechange: null,
readyState:         0,
responseText:       null,
responseXML:        null,
status:             200,
statusText:         "OK",
session_name:       "PHPSESSID",
responseJS:         null,
caching:            false,
_span:              null,
_id:                null,
_xmlReq:            null,
_openArg:           null,
_reqHeaders:        null,
dummy: function() {},
abort: function() {
if (this._xmlReq) return this._xmlReq.abort();
if (this._span) {
this.readyState = 0;
if (this.onreadystatechange) this.onreadystatechange();
this._cleanupScript();
}
},
open: function(method, url, asyncFlag, username, password) {
this._openArg = {
'method':    method,
'url':       url,
'asyncFlag': asyncFlag,
'username':  username,
'password':  password
};
this._id = null;
this._xmlReq = null;
this._reqHeaders = [];
return true;
},
send: function(content) {
var id = (new Date().getTime()) + "" + COUNT++;
var query = this._hash2query(content);
var url = this._openArg.url;
var sid = null; /* this._getSid(); */
var hash = this.hash = url + '?' + query;
if (this.caching && CACHE[hash]) {
var c = CACHE[hash];
this._dataReady(c[0], c[1]);
return false;
}
this._xmlReq = this._obtainXmlReq(id, url);
var hasSetHeader = this._xmlReq && (window.ActiveXObject || this._xmlReq.setRequestHeader);
var href, body;
if (this._xmlReq && hasSetHeader && (""+this._openArg.method).toUpperCase() == "POST") {
this._openArg.method = "POST";
href = url;
body = query;
} else {
this._openArg.method = "GET";
href = url + (url.indexOf('?')>=0? '&' : '?') + query;
body = null;
}
href = href + (href.indexOf('?')>=0? '&' : '?') + id;
PENDING[id] = this;
if (this._xmlReq) {
var a = this._openArg;
this._xmlReq.open(a.method, href+"-xml", a.asyncFlag, a.username, a.password);
if (hasSetHeader) {
for (var i=0; i<this._reqHeaders.length; i++)
this._xmlReq.setRequestHeader(this._reqHeaders[i][0], this._reqHeaders[i][1]);
this._xmlReq.setRequestHeader('Content-Type', 'application/octet-stream');
}
return this._xmlReq.send(body);
} else {
this._obtainScript(id, href);
return true;
}
},
getAllResponseHeaders: function() {
if (this._xmlReq) return this._xmlReq.getAllResponseHeaders();
return '';
},
getResponseHeader: function(label) {
if (this._xmlReq) return this._xmlReq.getResponseHeader(label);
return '';
},
setRequestHeader: function(label, value) {
this._reqHeaders[this._reqHeaders.length] = [label, value];
},
_construct: function() {},
_dataReady: function(text, js) { with (this) {
if (text !== null || js !== null) {
readyState = 4;
responseText = responseXML = text;
responseJS = js;
} else {
readyState = 0;
responseText = responseXML = responseJS = null;
}
if (onreadystatechange) onreadystatechange();
_cleanupScript();
}},
_obtainXmlReq: function(id, url) {
if (url.match(new RegExp('^[a-z]+://', 'i'))) return null;
var req = null;
if (window.XMLHttpRequest) {
try {
req = new XMLHttpRequest();
} catch(e) {}
} else if (window.ActiveXObject) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {}
if (!req) try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {}
}
if (req) {
var th = this;
req.onreadystatechange = function() {
var s = req.readyState;
if (s == 4) {
req.onreadystatechange = th.dummy;
var responseText = req.responseText;
try {
eval(responseText);
} catch (e) {
Subsys_JsHttpRequest_Js.dataReady(id, "JavaScript code generated by backend is invalid!\n"+responseText, null);
}
} else {
th.readyState = s;
if (th.onreadystatechange) th.onreadystatechange();
}
};
this._id = id;
}
return req;
},
_obtainScript: function(id, href) { with (document) {
var span = null;
span = body.appendChild(createElement("SPAN"));
span.style.display = 'none';
span.innerHTML = 'Text for stupid IE.<s'+'cript></' + 'script>';
setTimeout(function() {
var s = span.getElementsByTagName("script")[0];
s.type = 'text/javascript';
s.language = "JavaScript";
s.charset = "koi8-r";
s.src = href;
}, 10);
this._id = id;
this._span = span;
}},
_cleanupScript: function() {
var span = this._span;
if (span) {
this._span = null;
setTimeout(function() {
span.parentNode.removeChild(span);
}, 50);
}
return false;
},
_hash2query: function(content, prefix) {
if (prefix == null) prefix = "";
var query = [];
if (content instanceof Object) {
for (var k in content) {
var v = content[k];
if (v == null || ((v.constructor||{}).prototype||{})[k]) continue;
var curPrefix = prefix? prefix+'['+this.escape(k)+']' : this.escape(k);
if (v instanceof Object)
query[query.length] = this._hash2query(v, curPrefix);
else {
query[query.length] = curPrefix + "=" + this.escape(v);
}
}
} else {
query = [content];
}
return query.join('&');
},
_getSid: function() {
var m = document.location.search.match(new RegExp('[&?]'+this.session_name+'=([^&?]*)'));
var sid = null;
if (m) {
sid = m[1];
} else {
var m = document.cookie.match(new RegExp(s='(;|^)\\s*'+this.session_name+'=([^;]*)'));
if (m) sid = m[2];
}
return sid;
},
escape: function(s) {
return escape(s).replace(new RegExp('\\+','g'), '%2B');
}
}
})();
var Beatle = (function() {
var pageDispatchers = [], pageListeners = [];
var Event = JooS.Reflect(null, {
__common: JooS.Class.prototype.__common,
getData: function(data) {
return data;
},
__constructor: function() {
},
__destroy: function() {
}
});
var rootName = "http://inweb.nnov.ru";
var jsVer = "/jas/ver,1.1.js";
var cssVer = "/jas/ver,1.1.css";
var cssBr = "";
if(JooS.Browser.isFF)
cssBr = ";ff" + JooS.Browser.version + ".css";
if(JooS.Browser.isIE)
cssBr = ";ie" + JooS.Browser.version + ".css";
if(JooS.Browser.isOpera)
cssBr = ";opera" + JooS.Browser.version + ".css";
if(JooS.Browser.isSafari)
cssBr = ";safari" + JooS.Browser.version + ".css";
var pageObjects = [], foundObjects = {};
var componentCssClass = "js", componentCssRule = "." + componentCssClass;
var pageEvents = {};
var Beatle = {
componentAttribute: "component",
registerEvent: function(name, sourceGetData) {
var newEvent = JooS.Reflect(Event, sourceGetData? {
getData: sourceGetData
} : false);
pageEvents[name] = new newEvent();
},
registerDispatcher: function(name) {
this.DocumentDOM.Event_dispatcherConstruct(name);
},
registerClass: function(className) {
},
registerObject: function(Obj) {
return pageObjects.push(Obj)-1;
},
createObject: function(className, HTMLElement) {
if (this[className]) {
var extraData = null, poId, newObject;
if (HTMLElement.onclick) {
extraData = HTMLElement.onclick();
HTMLElement.onclick = null;
}
newObject = new Beatle[className](HTMLElement, extraData);
newObject.Component_setClassName(className);
poId = this.registerObject(newObject);
HTMLElement.setAttribute(this.componentAttribute, poId);
}
},
getObjectById: function(id) {
return pageObjects[id];
},
getObjectByElement: function(DOMElement) {
if(DOMElement.getAttribute) {
var id = DOMElement.getAttribute(this.componentAttribute);
return this.getObjectById(id);
}
},
unregisterObject: function(i, removeNode) {
if (pageObjects[i]) {
var htmlElement = pageObjects[i].htmlElement;
pageObjects[i].__destroy();
pageObjects[i] = null;
if (removeNode && htmlElement && htmlElement.parentNode)
htmlElement.parentNode.removeChild(htmlElement);
}
},
unregisterObjects: function() {
for (var i=0; i<pageObjects.length; i++)
this.unregisterObject(i);
},
loadComponents: function(DOMElement) {
var Behavior, i, j, className, requireClasses;
if (DOMElement instanceof JooS.Element)
Behavior = DOMElement.cssQuery(componentCssRule);
else {
Behavior = [];
var rootElement = new JooS.Element(DOMElement), tmpBehavior = rootElement.cssQuery(componentCssRule);
if (rootElement.hasClassName(componentCssClass)) {
Behavior.push(DOMElement);
for (i=0; i<tmpBehavior.length; i++)
Behavior.push(tmpBehavior[i]);
}
else
Behavior = tmpBehavior;
}
var foundObjectsHash = [];
for (i=0; i<Behavior.length; i++) {
className = Behavior[i].className.split(" ")[1];
if (Beatle[className])
Beatle.createObject(className, Behavior[i]);
else {
if (requireClasses = Behavior[i].getAttribute("requires")) {
requireClasses = requireClasses.split(",");
for (j=0; j<requireClasses.length; j++)
if (!Beatle[className] && !foundObjects[requireClasses[j]])
foundObjects[requireClasses[j]] = [];
}
if (!foundObjects[className])
foundObjects[className] = [];
foundObjectsHash.push({
className: className,
index: foundObjects[className].push(Behavior[i]) - 1
});
}
}
var jsStr = "", cssStr = "", jsFiles = [], jsLoading = 0;
var onload_Event = false; /*(!JooS.Browser.isFF && !JooS.Browser.isIE ? false : true);*/
var loadJsFiles = function() {
var i, Obj;
for (i=jsLoading; i<jsFiles.length; i++) {
jsLoading++;
if (onload_Event)
new JooS.JSLoader(jsFiles[i], loadJsFiles);
else
new JooS.JSLoader(jsFiles[i] + ";Beatle,onload.js");
return;
}
for (i=0; Obj = foundObjectsHash[i]; i++)
Beatle.createObject(Obj.className, foundObjects[Obj.className][Obj.index]);
foundObjects = { };
};
var appendClass = function(className) {
if (className) {
jsStr += ";Beatle," + className + ".js";
cssStr += ";Beatle," + className + ".css";
}
if (!className || jsStr.length > 150) {
new JooS.CSSLoader(rootName + cssVer + cssStr);
jsFiles.push(rootName + jsVer + jsStr);
cssStr = "";
jsStr = "";
}
};
for (var i in foundObjects) {
appendClass(i.replace(/_/g, ","));
}
if (jsStr)
appendClass();
if (!onload_Event)
this.DOMEvent_onLoadScript = loadJsFiles;
loadJsFiles();
},
unloadComponents: function(DOMElement, childNodesOnly) {
var Element, Behavior, i, rootElement;
Element = (DOMElement instanceof JooS.Element) ? DOMElement : new JooS.Element(DOMElement);
Behavior = Element.cssQuery(componentCssRule);
for (i=0; i<Behavior.length; i++)
this.unregisterObject(Behavior[i].getAttribute(this.componentAttribute));
if (!childNodesOnly) {
if (rootElement = this.getObjectByElement(Element.getElement())) {
this.unregisterObject(rootElement.getAttribute(this.componentAttribute));
}
}
}
};
/**
*
* extras.listener = [
*   { event: \u0438\u043C\u044F\u0421\u043E\u0431\u044B\u0442\u0438\u044F, dispatcher: \u0438\u043C\u044F\u0414\u0438\u0441\u043F\u0430\u0442\u0447\u0435\u0440\u0430 },
*   ...
*   { event: \u0438\u043C\u0444\u0421\u043E\u0431\u044B\u0442\u0438\u044F, dispatcher: \u0438\u043C\u044F\u0414\u0438\u0441\u043F\u0430\u0442\u0447\u0435\u0440\u0430 }
* ]
*
**/
var EventListener = JooS.Reflect(JooS.Class.Plugin, {
Event_listenerConstruct: function(events) {
if (!this.Event_listenerNum)
this.Event_listenerNum = [ ];
if (events && events.constructor == Array) {
for (var i=0; i<events.length; i++) {
var id = events[i].dispatcher || "$", name = events[i].event, eventName = "Listener_" + name, Num, l_Num;
if (id && this[eventName]) {
Num = pageDispatchersHash[id];
if (!pageListeners[Num])
pageListeners[Num] = { };
if (!pageListeners[Num][name])
pageListeners[Num][name] = [ ];
l_Num = pageListeners[Num][name].push(
JooS.Closure.Function(this[eventName], this)
) - 1;
this.Event_listenerNum.push({
dispatcher: Num,
name: name,
listener: l_Num
});
}
}
}
},
Event_listenerConstructDefaultSelf: function(eventsArray) {
this.Event_listenerConstruct(
getEventsArray(
eventsArray,
this.Event_dispatcherConstructDefault()
)
);
},
Event_listenerConstructDefaultParent: function(eventsArray, className) {
var parentObject = this.Component_getParentObject(className || false);
if (parentObject) {
this.Event_listenerConstruct(
getEventsArray(
eventsArray,
parentObject.Event_dispatcherConstructDefault()
)
);
}
},
Event_listenerDestruct: function(destructName) {
var Num, name, l_Num;
for (var i=0; i<this.Event_listenerNum.length; i++) {
Num = this.Event_listenerNum[i].dispatcher;
if (pageListeners[Num]) {
name = this.Event_listenerNum[i].name;
if (pageListeners[Num][name] && (!destructName || destructName == name)) {
l_Num = this.Event_listenerNum[i].listener;
if (typeof(pageListeners[Num][name][l_Num]) != "undefined")
pageListeners[Num][name][l_Num] = false;
}
}
}
if (!destructName)
this.Event_listenerNum = [ ];
}
});
var pageDispatchersHash = { };
var EventDispatcher = JooS.Reflect(JooS.Class.Plugin, {
Event_dispatcherDefaultId: false,
Event_dispatcherDefaultNum: false,
Event_dispatcherConstruct: function(id) {
if (!this.Event_dispatcherNum)
this.Event_dispatcherNum = [ ];
if (id && !pageDispatchersHash[id]) {
var Num = pageDispatchers.push(this) - 1;
pageDispatchersHash[id] = Num;
this.Event_dispatcherNum.push(Num);
}
return Num;
},
Event_dispatcherConstructDefault: function() {
if (!this.Event_dispatcherDefaultId) {
this.Event_dispatcherDefaultId = Math.random();
this.Event_dispatcherDefaultNum = this.Event_dispatcherConstruct(this.Event_dispatcherDefaultId);
}
return this.Event_dispatcherDefaultId;
},
Event_dispatcherDestruct: function() {
var i, id, Num;
for (i=0; i<this.Event_dispatcherNum.length; i++)  {
Num = this.Event_dispatcherNum[i];
id = pageDispatchers[Num];
delete pageDispatchersHash[id];
delete pageDispatchers[Num];
delete pageListeners[Num];
}
this.Event_dispatcherNum = [ ];
}
});
JooS.Virtual(EventDispatcher, {
dispatchEvent: function(Num, name, data) {
var l, i;
if (l = pageListeners[Num])
if (l = l[name])
for (i=0; i<l.length; i++)
if (l[i])
l[i](data);
}
});
/**
*
* extras.throws = [
*   { event: \u0438\u043C\u044F\u0421\u043E\u0431\u044B\u0442\u0438\u044F, dispatcher: \u0438\u043C\u044F\u0414\u0438\u0441\u043F\u0430\u0442\u0447\u0435\u0440\u0430 },
*   ...
*   { event: \u0438\u043C\u0444\u0421\u043E\u0431\u044B\u0442\u0438\u044F, dispatcher: \u0438\u043C\u044F\u0414\u0438\u0441\u043F\u0430\u0442\u0447\u0435\u0440\u0430 }
* ]
*
**/
var getEventsArray = function(simpleArray, id) {
var events = [], i;
for (i=0; i<simpleArray.length; i++)
events.push({
event: simpleArray[i],
dispatcher: id
});
return events;
};
Beatle.Class = JooS.Reflect(JooS.Element, {
Event_throwsConstruct: function(events) {
if (!this.Event_throwsDispatchers)
this.Event_throwsDispatchers = { };
var i;
if (events && events.constructor == Array) {
for (i=0; i<events.length; i++) {
if (events[i].dispatcherClass)
this.Event_throwsConstructDefaultParent([ events[i].event ], events[i].dispatcherClass);
else
this.Event_throwsDispatchers[events[i].event] = events[i].dispatcher;
}
}
},
Event_throwsConstructDefaultSelf: function(eventsArray) {
this.Event_throwsConstruct(
getEventsArray(
eventsArray,
this.Event_dispatcherConstructDefault()
)
);
},
Event_throwsConstructDefaultParent: function(eventsArray, className) {
var parentObject = this.Component_getParentObject(className || false);
if (parentObject) {
this.Event_throwsConstruct(
getEventsArray(
eventsArray,
parentObject.Event_dispatcherConstructDefault()
)
);
}
},
/**
*
* @param name String|Object { string name, string dispatcher }
*
**/
throwEvent: function(nameObj) {
var type = typeof(nameObj), name, dispatcherName, dispatcher, event;
if (type.toLowerCase() == "object" && nameObj.constructor == Array) {
name = nameObj.name;
if (typeof(nameObj.dispatcher) == "object" && dispatcher.dispatchEvent)
dispatcher = nameObj.dispatcher;
else
dispatcherName = nameObj.dispatcher;
}
else
name = nameObj;
if (event = pageEvents[name]) {
if (!dispatcher) {
var id = dispatcherName || this.Event_throwsDispatchers[name] || "$", Num = pageDispatchersHash[id];
if (typeof(Num) != "undefined")
dispatcher = pageDispatchers[Num];
}
else {
Num = dispatcher.Event_dispatcherDefaultNum;
if (typeof(Num) != "undefined")
dispatcher = null;
}
if (dispatcher) {
var i, args = [ ];
for (i=1; i<arguments.length; i++)
args.push(arguments[i]);
try {
dispatcher.dispatchEvent(
Num,
name,
event.getData.apply(event, args)
);
}
catch (notification) {
return notification;
};
}
}
},
Component_setClassName: function(className) {
this.Component_className = className;
},
Component_getClassName: function() {
return this.Component_className;
},
Component_getId: function(DOMElement) {
var Element = DOMElement || this.getElement();
return Element.getAttribute(Beatle.componentAttribute);
},
Component_clearBody: function(leaveChildNodes) {
Beatle.unloadComponents(this, true);
if (!leaveChildNodes)
this.getElement().innerHTML = "";
},
Component_Remove: function(leaveChildNodes, leaveDOMElement) {
this.Component_clearBody(leaveChildNodes);
Beatle.unregisterObject(
this.Component_getId(),
!leaveDOMElement
);
},
Component_getParentObject: function(className) {
var parentNode = this.getElement().parentNode, ret;
while (parentNode) {
ret = Beatle.getObjectByElement(parentNode);
if (ret && (!className || ret.Component_getClassName() == className) )
return ret;
parentNode = parentNode.parentNode;
}
return null;
}
});
JooS.Virtual(Beatle.Class, {
__constructor: function(DOMElement, extras) {
this.extraData = (extras && extras.data) || {};
this.__constructor.__parent(DOMElement);
this.Event_dispatcherConstruct(extras && extras.dispatcher);
this.Event_listenerConstruct(extras && extras.listener);
this.Event_throwsConstruct(extras && extras.throws);
},
__destructor: function() {
this.Event_listenerDestruct();
this.Event_dispatcherDestruct();
this.__destructor.__parent();
}
});
JooS.Plugin(Beatle.Class, EventDispatcher);
JooS.Plugin(Beatle.Class, EventListener);
Beatle.DocumentDOM = new Beatle.Class(document, {
dispatcher: "$"
});
JooS.Startup(function() {
Beatle.loadComponents(JooS.DocumentDOM);
});
JooS.WindowDOM.attachEvent("unload", function() {
Beatle.unregisterObjects();
});
return Beatle;
})();
