function document2 () { this.elements = new Array (); this.props = new Array (); this.indexs = new Array (); this.getAvilibleID = function (fromNumber) { return typeof this.indexs [fromNumber] == 'undefined' ? fromNumber : this.getAvailableID (fromNumber + 1); }; this.createRandomID = function () { var eLength = this.elements.length - 1; return typeof this.indexs [eLength] == 'undefined' ? eLength : this.getAvailableID (eLength + 1); }; this.createElement = function (elementName, props) { if ( (typeof props != 'object') && (typeof props != 'undefined') ) props = { 'undefined_properties': props }; if (typeof props != 'object') props = new Array (); this.elements.push (elementName); if ( (!props['id']) || (typeof (this.indexs[props['id']]) != 'undefined') ) props['id'] = this.createRandomID (); var eLength = this.elements.length - 1; this.props[eLength] = props; this.indexs[props['id']] = eLength; return true; }; this.getElementById = function (elementID) { if (typeof this.indexs[elementID] != 'undefined') return { 'element': this.elements[this.indexs[elementID]], 'props': this.props[this.indexs[elementID]] }; else return null; }; } var a = new document2(); a.createElement ('test'); alert (a.getElementById (0)['element']);