var XMLElement = Class.create({ initialize: function(document, namespace, localname, attrs){ this.element = Object.isFunction(document.createElementNS) && namespace ? // document.createElementNS(namespace, localname) : // document.createElement(localname); this.WriteAttributes(attrs); }, WriteAttribute: function(nam, val){ return XMLElement.WriteAttribute(this.element, nam, val); }, WriteAttributes: function(attrs){ return XMLElement.WriteAttributes(this.element, attrs); }, GetAttribute: function(nam){ return this.element.getAttribute(nam); }, RemoveAttribute: function(nam){ return this.element.removeAttribute(nam); }, GetElement: function(){ return this.element; }, AppendChild: function(element){ this.element.appendChild(element instanceof XMLElement ? element.GetElement() : element); }, AttachTo: function(element){ if (element && Object.isFunction(element.appendChild)) element.appendChild(this.element); }, Remove: function(){ if (this.element.parentNode) this.element.parentNode.removeChild(this.element); }, OwnerDocument: function(){ return this.element.ownerDocument; } }); XMLElement.WriteAttribute = function(element, nam, val){ element.setAttribute(nam, String(val)); }; XMLElement.WriteAttributes = function(element, attrs){ if (typeof attrs != "object") return; for (var nam in attrs) XMLElement.WriteAttribute(element, nam, attrs[nam]); }; XMLElement.HasClassName = function(element, classname){ if (!element) return false; return String(element.getAttribute("class")).split(" ").include(classname); } XMLElement.AddClassName = function(element, classname){ if (!element) return; var classnames = String(element.getAttribute("class") || "").split(" "); if (!classnames.include(classname)){ classnames.push(classname); element.setAttribute("class", classnames.join(" ")); } } XMLElement.RemoveClassName = function(element, classname){ if (!element) return; var classnames = String(element.getAttribute("class") || "").split(" "); if (classnames.include(classname)){ element.setAttribute("class", classnames.without(classname).join(" ")); } } XMLElement.Clear = function(element){ if (!element) return null; while (element.firstChild) element.removeChild(element.firstChild); return element; } XMLElement.DescendantOf = function(element, ancestor){ while (element.parentNode){ if (element.parentNode == ancestor) return true; element = element.parentNode; } return false; } XMLElement.DescendantOrSelf = function(element, ancestor){ return element == ancestor || XMLElement.DescendantOf(element, ancestor); } var XMLElementWrapper = Class.create(XMLElement, { initialize: function(element){ this.element = element; } }); XMLElement.FromDOMElement = function(element){ return element ? new XMLElementWrapper(element) : null; } var SVGElement = Class.create(XMLElement, { initialize: function($super, localname, attrs){ $super(document, SVGElement.xmlns, localname, attrs); } }); SVGElement.xmlns = "http://www.w3.org/2000/svg"; SVGElement.IsSupported = // document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") || // document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Shape", "1.0");