/*
 * ElementBuilder
 * Version 0.1.0
 *
 * Copyright (C) 2005 Andy Smith
 */
 
ElementBuilder = {

    build: function () {
        var source = (arguments.length >= 1 ? arguments[0] : null);
	var doc    = (arguments.length >= 2 ? arguments[1] : document);
	
	if (!source) return null;
	if (!doc.createElement) return null;
	if (!doc.createTextNode) return null;
	
	if (source.elementBuilderBuild) {
	    return source.elementBuilderBuild(doc);
	} else {
	    return null;
	}
    },
    
    arrayBuild: function (doc) {
        if (this.length >= 1) {
	    var el = doc.createElement(this[0]);
	    for (var i = 1; i < this.length; i++) {
	        if (this[i].elementBuilderAppend) {
		    this[i].elementBuilderAppend(el, doc);
		}
	    }
	    return el;
	} else {
	    return null;
        }
    },
    
    stringBuild: function (doc) {
        return doc.createTextNode(this);
    },
    
    appendFromBuild: function (parent, doc) {
        if (this.elementBuilderBuild && parent.appendChild) {
	    parent.appendChild(this.elementBuilderBuild(doc));
	}
    },
    
    Attr: function () {
        var args = arguments;
	return {
	    elementBuilderAppend: function (parent, doc) {
	        for (var i = 0; i+1 < args.length; i += 2) {
		    parent.setAttribute(args[i], args[i+1]);
		}
	    }
	};
    },
    
    Event: function () {
        var args = arguments;
	return {
	    elementBuilderAppend: function (parent, doc) {
	        for (var i = 0; i+1 < args.length; i += 2) {
		    if (parent.addEventListener) {
		        parent.addEventListener(args[i], args[i+1], false);
		    } else if (parent.attachEvent) {
		        parent.attachEvent('on' + args[i], args[i+1]);
		    }
		}
	    }
	}
    }

};

Array.prototype.elementBuilderBuild = ElementBuilder.arrayBuild;
Array.prototype.elementBuilderAppend = ElementBuilder.appendFromBuild;

String.prototype.elementBuilderBuild = ElementBuilder.stringBuild;
String.prototype.elementBuilderAppend = ElementBuilder.appendFromBuild;


