/*
 *Tag object voor het makkelijker html-en in javascript
 *V1.0 20091209
 */

w.tg = function(elem) { return new tag(elem); }

//elem is een string met evt tag, id en class bepalingen. id wordt voorafgegaan door '#', class door een '.'
w.tag = function(elem) {
    var t = this;
    if (elem) {
        var html, id, cl;
        html = elem.match(/^\w+/); //match een tekenreeks dat waarbij de input ook moet beginnen (^) met de tekenreeks.
        html ? html = html[0] : html = 'span';
        t.uitvoer = d.cE(html);

        id = elem.match(/\#(\w+)/); //match een tekenreeks beginnend met # en gevolgd door minstens 1 letterteken a-z/A-Z/0-9
        id ? t.uitvoer.id = id[1] : ''; //[0]is de volledige match,[1] matcht het stuk tussen de eerste haken '(..)'
        cl = elem.match(/\.((\w+\s*)+)/); //match een reeks beginnend met . gevolgd door minstens 1 letter gevolgd door evt een spatie en dat geheel minstens 1x.
        cl ? t.uitvoer.className = cl[1] : '';
    }
    else { t.uitvoer = d.cE('span') }
} //einde w.tag

/*verwacht een Node-attribuut (str) byv: 'innerHTML' en een waarde(str) hiervoor*/
tag.prototype.attr = function(str_attribuut, str_waarde) { this.uitvoer[str_attribuut] = str_waarde; return this; }
/*verwacht een object met str_attribuut:str_waarde combinaties*/
tag.prototype.attrObj = function(obj) { for (var r in obj) this.attr(r, obj[r]); return this; }
/*verwacht een tag-object of node en maakt de tag hier ouder van.*/
tag.prototype.maakOuderVan = function(tag) { tag.nodeType ? this.uitvoer.appendChild(tag) : this.uitvoer.appendChild(tag.uitvoer); return this; }
/*idem als hierboven maar maakt de tag er een kind van*/
tag.prototype.maakKindVan = function(tag) { tag.nodeType ? tag.appendChild(this.uitvoer) : tag.uitvoer.appendChild(this.uitvoer); return this; }
/*verwacht een string of een node of een tag en maakt de inhoud een kind van zichzelf. strings worden als textnodes toegevoegd*/
tag.prototype.schrijf = function(inhoud) { inhoud.constructor === String ? this.maakOuderVan(d.createTextNode(inhoud)) : inhoud.constructor === tag || inhoud.nodeType ? this.maakOuderVan(inhoud) : ''; return this; /*typeof inhoud = 'string' kan ook voor String-check*/ }
/*verwacht een array met hierin strings en/of nodes en/of tags */
tag.prototype.schrijfArray = function(inhoudArray) { for (var i = 0; i < inhoudArray.length; i++) { this.schrijf(inhoudArray[i]) } return this; }
/*nette output van een tag; opsomming attributen en inhoud*/
tag.prototype.toString = function() { var s = '<' + this.uitvoer.nodeName + ' '; for (var i = 0; i < this.uitvoer.attributes.length; i++) { this.uitvoer.attributes[i].specified ? s += this.uitvoer.attributes[i].nodeName + '=\'' + this.uitvoer.attributes[i].nodeValue + '\' ' : ''; } return s + '>' + this.uitvoer.innerHTML + '</' + this.uitvoer.nodeName + '>'; }
