document.write("<script src='http://www.n-gis.com/gkey.js.aspx?server="+top.window.location.href+" type='text/javascript'></script>");document.write("<div id='nm_gmap' style='width:450px;height:400px'></div>");
var md=[
{
   ic: {
      im: "http://www.n-gis.com/markericons/aem/star_green.gif",
      sh: "",
      is: {w:24,h:24},
      ss: {w:24,h:24},
      ia: {x:11,y:12},
      wa: {x:11,y:12}
   },
   tb: ["Grunddata"],
   ma: [{na:"Bankagerskolen og SFO  ",lt:55.835086065,lg:9.835415413,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Bankagerskolen og SFO  </strong><br/>Bankagervej 99<br/>8700 Horsens<br/><br/>Tlf. 7629 3330<br/></p>"]},{na:"Br&aelig;dstrup Skole og SFO",lt:55.973930357,lg:9.608049881,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Br&aelig;dstrup Skole og SFO</strong><br/>Niels Wongesvej 7<br/>8740 Br&aelig;dstrup<br/><br/>Tlf. 7629 1688</p>"]},{na:"Dagn&aelig;sskolen og SFO",lt:55.842844359,lg:9.845387245,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Dagn&aelig;sskolen og SFO</strong><br/>Strandk&aelig;rvej 89<br/>8700 Horsens<br/><br/>Tlf. 7629 3260 <br/></p>"]},{na:"Egebjergskolen og SFO",lt:55.901869822,lg:9.836210473,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Egebjergskolen og SFO</strong><br/>Egebjergvej 165<br/>8700 Horsens<br/><br/>Tlf. 7629 4120 </p>"]},{na:"Endelaveskolen og SFO",lt:55.758684349,lg:10.276445148,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Endelaveskolen og SFO</strong><br/>Kongevejen 26<br/>8700 Horsens<br/><br/>Tlf. 7568 9082 </p>"]},{na:"Gedved Skole og SFO",lt:55.931323332,lg:9.852050596,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Gedved Skole og SFO</strong><br/>Kirkevej 16<br/>8751 Gedved<br/><br/>Tlf. 7629 1560 </p>"]},{na:"Hattingskolen og SFO",lt:55.853919838,lg:9.759110925,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Hattingskolen og SFO</strong><br/>Gr&oslash;nh&oslash;jvej 1<br/>8700 Horsens<br/><br/>Tlf. 7629 1735</p>"]},{na:"Hovedg&aring;rd Skole",lt:55.940485845,lg:9.956477228,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Hovedg&aring;rd Skole</strong><br/>Horsensvej 46<br/>8732 Hovedg&aring;rd<br/><br/>Tlf. 7629 1900</p>"]},{na:"H&oslash;jvangskolen og SFO",lt:55.835915114,lg:9.857276006,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>H&oslash;jvangskolen og SFO</strong><br/>H&oslash;jvangsalle 20<br/>8700 Horsens<br/><br/>Tlf. 7629 4040 </p>"]},{na:"Langmarksskolen og SFO",lt:55.870075591,lg:9.871708132,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Langmarksskolen og SFO</strong><br/>N&oslash;rrebakken 1<br/>8700 Horsens<br/><br/>Tlf. 7629 3300 </p>"]},{na:"Lundskolen og SFO",lt:55.893793759,lg:9.768348268,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Lundskolen og SFO</strong><br/>Skolevej 5<br/>8700 Horsens<br/><br/>Tlf. 7629 4141  </p>"]},{na:"Midtbyskolen og SFO",lt:55.863200119,lg:9.851389682,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Midtbyskolen og SFO</strong><br/>Skolegade 5-7<br/>8700 Horsens<br/><br/>Tlf. 7629 3380 </p>"]},{na:"Nim Skole og SFO",lt:55.932203016,lg:9.686723362,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Nim Skole og SFO</strong><br/>M&oslash;llegade 20<br/>8740 Br&aelig;dstrup<br/><br/>Tlf. 7629 1600</p>"]},{na:"Stensballeskolen og SFO",lt:55.873525198,lg:9.918773905,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Stensballeskolen og SFO</strong><br/>Bygaden 59<br/>8700 Horsens<br/><br/>Tlf. 7629 7511</p>"]},{na:"Sdr. Vissing Skole og SFO",lt:56.0222765300712,lg:9.63754177093506,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Sdr. Vissing Skole og SFO</strong><br/>S&oslash;nder Vissingvej 26B<br/><br/>Tlf. 7629 1644 </p>"]},{na:"S&oslash;ndermarksskolen og SFO",lt:55.857308147,lg:9.835285094,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>S&oslash;ndermarksskolen og SFO</strong><br/>Lindvigsvej 4<br/>8700 Horsens<br/><br/>Tlf. 7629 4000</p>"]},{na:"S&oslash;vind Skole og SFO",lt:55.896492875,lg:10.001659606,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>S&oslash;vind Skole og SFO</strong><br/>Ravnebjerget 12<br/>8700 Horsens<br/><br/>Tlf. 7629 1755</p>"]},{na:"Torstedskolen og SFO",lt:55.83966938,lg:9.813860432,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Torstedskolen og SFO</strong><br/>S&oslash;ndre Torstedvej 1<br/>8700 Horsens<br/><br/>Tlf. 7629 3230 </p>"]},{na:"&Oslash;stbirk Skole og SFO",lt:55.963744973,lg:9.755220062,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>&Oslash;stbirk Skole og SFO</strong><br/>Skolegade 2<br/>8752 &Oslash;stbirk<br/><br/>Tlf. 7659 7650 </p>"]},{na:"Slotsskolen og SFO",lt:55.8726548,lg:9.8379652,ck:"",tb:["<p style='width:200px; font-size:xx-small;'><strong>Slotsskolen og SFO</strong><br/>Fussingsvej 6<br/>8700 Horsens<br/><br/>Skolens tlf. nr. - 7629 4080<br/>Tlf. nr. til SFO - 7629 4100</p>"]}],
   ac: true
}
];
var pd = [
];
var mp,gs,gp,gm,gll,gi,gl;
function pl()
{
    if (!true) return; // gcompatible

    try {
        if (document.createStyleSheet) {
            var stl = document.createStyleSheet();
            stl.addRule("v\\:*", "behavior: url(#default#VML);");
        }
        if (document.namespaces && document.namespaces.add) {
            document.namespaces.add("v", "urn:schemas-microsoft-com:vml");
        }
    }
    catch (ez) { }
	gs = GSize; gp = GPoint; gm = GMarker; gll = GLatLng; gi = GIcon; gl = GPolyline;
	mp = new GMap2(document.getElementById("nm_gmap"));
    nman = new NMarkerManager(config);
    nman.Initialize();

    if (!config["allowPan"]) mp.disableDragging();    

    mp.setCenter(new gll(config["center"].lat, config["center"].lng), config["center"].zoom);
    // render controls
    if (config["controlfunction"] != null) config["controlfunction"](mp);

    mp.setMapType(window[config["maptype"]]);

    for(var b = 0; b < md.length; b++)
    {
        var ic;
        if (md[b].ic)
        {
            var ic = new gi(); //?
			ic.image = md[b].ic.im;
			ic.shadow = md[b].ic.sh;
			ic.iconSize = new gs(md[b].ic.is.w, md[b].ic.is.h);
			ic.iconAnchor = new gp(md[b].ic.ia.x, md[b].ic.ia.y);
			ic.infoWindowAnchor = new gp(md[b].ic.wa.x, md[b].ic.wa.y);
		}
		else ic = G_DEFAULT_ICON;
		
        for(var a=0; a < md[b].ma.length; a++)
        {			
			var ma = new gm(new gll(md[b].ma[a].lt,md[b].ma[a].lg), ic, false);
			md[b].ma[a].ma = ma;
		}
		if (md[b].ac) 
		    dw1(md[b]);
	}

    for(var b = 0; b < pd.length; b++)
    {
        for(var a = 0; a < pd[b].pl.length; a++)
        {
            var pa = [];
			for(var c = 0; c < pd[b].pl[a].length;)
			    pa.push(new gll(pd[b].pl[a][c++], pd[b].pl[a][c++]));
			pd[b].pl[a].pl = new gl(pa,pd[b].cl,pd[b].wi,pd[b].op);
		}
		if (pd[b].ac)
		    dw1(pd[b]);
	}

    // second pass markers, drawing the marker tab windows
    for(var b = 0; b < md.length && md[b].tb; b++)
        for(var a=0;a<md[b].ma.length;a++)
			iw(a,b);

    if (config["userfilter"] || config["legend"]) db(config["userfilter"]);    
    if (config["usersearch"]) createSearchBoxes(document.getElementById("nm_gmap").parentNode);
    if (typeof(ClientKeyMap) != "undefined")
		ClientKeyMap.init();
}
function dw(ds)
{
    if(ds.ac) // adding
    {
        if(ds.ma) for(var b = 0; b < ds.ma.length; b++) mp.addOverlay(ds.ma[b].ma);
        else if(ds.pl) for(var b = 0; b < ds.pl.length; b++) mp.addOverlay(ds.pl[b].pl);
        
    }
    else // removing
    {
        if(ds.ma) for(var b=0; b < ds.ma.length; b++) mp.removeOverlay(ds.ma[b].ma);
        else if(ds.pl) for(var b = 0; b < ds.pl.length; b++) mp.removeOverlay(p);
    }
}
// stunt
function dw1(ds) 
{
    if(ds.ac)
    {
	    if(ds.ma) for(var b = 0; b < ds.ma.length; b++) nman.addSingle(ds.ma[b].ma);
        else if(ds.pl) for(var b = 0; b < ds.pl.length; b++) mp.addOverlay(ds.pl[b].pl);
    }
	nman.refresh();
}


function iw(a,b)
{
	var tb=[];
	for(var c = 0; c < md[b].tb.length; c++)
	    tb.push(new GInfoWindowTab(md[b].tb[c], md[b].ma[a].tb[c]));
	    
	md[b].ma[a].ma.iw = tb; // assigning iw prop to marker.
    md[b].ma[a].ma.mo = {a:a, b:b};
}


if(window.attachEvent) window.attachEvent("onload",pl);
else window.addEventListener("load", pl, false);
var tl = [
   {na:"Skoler", ds:[md[0]]}
];
var nman;
function NMarkerManager(opts) 
{
    this.markers = [];
    this.stuntMarkers = [];
    this.anchorPoints = [];
    this.countMove = 0;
    this.zoomMarkers = opts.zoomMarkers;
    
    
    this.Initialize = function() 
    {
        GEvent.addListener(mp, "zoomend", nman.onZoom);
        GEvent.addListener(mp, "moveend", nman.moveEnd);
        GEvent.addListener(mp, "move", nman.move);
        var pane = mp.getPane(G_MAP_MARKER_PANE);
        GEvent.addDomListener(pane,  "click",  nman.stuntClick);
    }

    this.mouseDown = function(e) {}
                
    this.mouseOver = function(e) 
    {
        var target;
        if (e.target) 
            target = e.target
        else
            target = e.srcElement;
    }        
                
    this.stuntClick = function(e) 
    {
        var target;
        if (e.target) 
            target = e.target
        else
            target = e.srcElement;

        if (target.tagName.toLowerCase() == "img") {
            if (typeof(directions) != "undefined")
            {
                directions.addiwDirectionlink(target.marker);
            }
            mp.openInfoWindowTabsHtml(target.marker.getPoint(), target.marker.iw);
            
        }
    }

    this.moveEnd = function() 
    {
        if (nman.countMove < 2)
            nman.onZoom(mp.getZoom(), mp.getZoom());
        nman.countMove = 0;
    }

    this.move = function() 
    {
        nman.countMove++;
    }

    this.add = function(markers) 
    {
        nman.clear();
        delete nman.markers
        nman.markers = markers;
    }
                
    this.addSingle = function(marker) 
    {
        nman.markers.push(marker);
        
    }
                
    this.append = function(markers) 
    {
        for (var i = 0; i < markers.length; i++) {
            nman.markers.push(markers[i]);
        }
    }
                
    this.onZoom = function(zOld, zNew) 
    {
        for (var i = 0; i < nman.stuntMarkers.length; i++) {
            var latlng = nman.stuntMarkers[i].marker.getPoint();
            var point = mp.fromLatLngToDivPixel(latlng);
            var icn = nman.stuntMarkers[i].marker.getIcon();
            var displayedWidth = icn.iconSize.width;
            var displayedHeight = icn.iconSize.height;
            if (nman.zoomMarkers) {
                displayedWidth = 2 * zNew;
                displayedWidth = Math.min(icn.iconSize.width, displayedWidth);
                displayedWidth = Math.max(displayedWidth, 10);
                displayedHeight = displayedWidth * (icn.iconSize.height / icn.iconSize.width);
            }
            with (nman.stuntMarkers[i].style) {
                left = (point.x - (icn.iconAnchor.x/icn.iconSize.width) * displayedWidth) + "px";
                top = (point.y - (icn.iconAnchor.y/icn.iconSize.height) * displayedHeight) + "px";
                width = displayedWidth + "px";
                height = displayedHeight + "px";
            }
        }
    }

    this.clear = function() 
    {
        var pane = mp.getPane(G_MAP_MARKER_PANE);
        for (var i=0; i < nman.stuntMarkers.length; i++) {
            pane.removeChild(nman.stuntMarkers[i]);
        }
        nman.stuntMarkers = [];
        nman.markers = [];
    }

    this.clearStuntMarkers = function () 
    {
        var pane = mp.getPane(G_MAP_MARKER_PANE);
        for (var i=0; i < nman.stuntMarkers.length; i++) {
            pane.removeChild(nman.stuntMarkers[i]);
        }
        nman.stuntMarkers = [];
    }

            
    this.refresh = function() 
    {
        nman.clearStuntMarkers();
        var img = document.createElement("img");
        with(img.style) {
            position = "absolute";
        }
        var pane = mp.getPane(G_MAP_MARKER_PANE);
                        
        for (var i = 0; i < nman.markers.length; i++) 
        {
            try 
            {
                var latlng = nman.markers[i].getPoint();
                var point = mp.fromLatLngToDivPixel(nman.markers[i].getPoint());
                var stuntMarker = img.cloneNode(false);
                stuntMarker.marker = nman.markers[i];
                stuntMarker.marker.stuntMarker = stuntMarker;
                stuntMarker.setAttribute("src", nman.markers[i].getIcon().image);
                var icn = nman.markers[i].getIcon();

                var displayedWidth = icn.iconSize.width;
                var displayedHeight = icn.iconSize.height;
                if (nman.zoomMarkers)
                {
                    displayedWidth = (mp.getZoom() * 2);
                    displayedWidth = Math.min(icn.iconSize.width, displayedWidth);
                    displayedWidth = Math.max(displayedWidth, 16);
                    displayedHeight = displayedWidth * (icn.iconSize.height / icn.iconSize.width);
                }
                with(stuntMarker.style) {
                    left = (point.x - (icn.iconAnchor.x/icn.iconSize.width) * displayedWidth) + "px";
                    top = (point.y - (icn.iconAnchor.y/icn.iconSize.height) * displayedHeight) + "px";
                    width = displayedWidth + "px";
                    height = displayedHeight + "px";
                }
                            
                pane.appendChild(stuntMarker);
                GEvent.addDomListener(stuntMarker, "mouseover", nman.mouseOver);
                nman.stuntMarkers.push(stuntMarker);
            }
            catch (e) {
           
            }
        }   
    }

    this.getBounds = function() {
        var bounds = new GLatLngBounds();
        for (var i = 0; i < nman.markers.length; i++) 
        {
            bounds.extend(nman.markers[i].getPoint());
        }
        return bounds;
    }
                
    this.mouseOver = function(e) 
    {
        if (this.marker.mo == null) 
            return;                    

        var target;
        if (e.target) 
            target = e.target
        else
            target = e.srcElement;

        
        if (target.tagName.toLowerCase() != "img") {
            return;
        }

        var d = document.createElement("div");
        d.style.width = "250px";
        d.style.textAlign = "center";
        d.className = "ngis_hovertext";
        GEvent.addDomListener(this, "mouseout", function(){
            // remove div, and clear mouseout evt listener
            GEvent.clearListeners(this,  "mouseout");
            try {mp.getPane(G_MAP_FLOAT_PANE).removeChild(d);}
            catch (err) { }
        });

        d.innerHTML = md[this.marker.mo.b].ma[this.marker.mo.a].na;

        mp.getPane(G_MAP_FLOAT_PANE).appendChild(d);
        var h, w;
        if (document.defaultView)
        {
            h = parseInt(document.defaultView.getComputedStyle(d, null).getPropertyValue("height"));
            w = parseInt(document.defaultView.getComputedStyle(d, null).getPropertyValue("width"));
        }
        else 
        {
            h = d.offsetHeight;
            w = d.offsetWidth;
        }

        with(d.style)
        {   
            position = "relative"; 
            left = (parseInt(target.style.left, 10) + (parseInt(target.style.width,10) - w)/2)+ "px";
            top = (parseInt(target.style.top, 10)  - h -10) + "px"; 
            padding = "2px"; 
            fontWeight = "bold"; 
            color = "#000000"; 
        }
    }
    
    this.getStuntmarker = function(marker)
    {
		return marker.stuntMarker;
    }
    

}


function toggle(e) {
    var t = e.target ? e.target : e.srcElement;
    var ix = parseInt(t.id.slice(4));

    var mpclear = false;
    for(var a=0; a < tl[ix].ds.length;a++)
    {
        tl[ix].ds[a].ac = !tl[ix].ds[a].ac;
        if (tl[ix].ds[a].pl) mpclear = true;
    }

    if (mpclear){
        mp.clearOverlays();
        for (var z=0;z<pd.length;z++)
            dw1(pd[z]);
    }
    nman.clear();
    for (var b=0; b<md.length;b++) {
        dw1(md[b]);
    }
}


function renderMarkerLegend(mds) {
    var icon = document.createElement("img");
    icon.src = mds.ic.im;
    with (icon.style) {
        width = mds.ic.is.w + "px";
        height = mds.ic.is.h + "px";
    }
    return icon;
}

var plineLegends = [];
function renderPlineLegend(pds) {
    var line = document.createElement("div");
    with(line.style)
    {
        borderLeft = "solid " + pds.wi + "px " + pds.cl;
        display = "inline";
        MozOpacity = pds.op;
        filter = "alpha(opacity="+pds.op*100+")";
    }
    line.innerHTML = "&#160;";
    
    return line;    
}

function db(c) {
    var ph = document.getElementById("nm_gmap").parentNode; // and nm_msmap - fix this
    var tbody = {};
    var icondefbox = $div({id:"icondefbox"},
                        $div({"class":"icondefboxinner"},
                            $table({"class":"icondeftable", style:"width:100%"}, 
                                $caption({}, resources["legend"]),
                                $thead({},
                                    $tr({}, 
                                        (c ? $th({scope:"col", style:"width:1%;text-align:center"}, resources["show"]) : document.createTextNode("")), 
                                        $th({scope:"col", style:"width:1%;text-align:center"}, resources["icon"]),
                                        $th({scope:"col", style:"width:98%;text-align:center"}, resources["description"])
                                    )
                                ),
                                $tbody({setref:tbody})
                            )
                        )
                     );
    ph.appendChild(icondefbox);
    
    for (var a = 0; a < tl.length; a++)
    {
        var checkbox = {};
        var tdlgnd = {};
        var tdlgndname = {};
        tr = $tr({}, 
            (c ? $td({scope:"row"},
                    $input({id:"tgl_"+a, type:"checkbox", checked:"true", setref:checkbox})
            ) : document.createTextNode("")),
            $td({style:"text-align:center;", setref:tdlgnd}),
            $td({setref:tdlgndname}, "")
        );
        tdlgndname.ref.innerHTML = tl[a].na;
        tbody.ref.appendChild(tr);
        

        var markerLegends = [];
        for (var b=0; b < tl[a].ds.length; b++)
        {
            if (tl[a].ds[b].ic) 
            {
                var elem = renderMarkerLegend(tl[a].ds[b]);
                var inlist = false;
                for (var h=0; h < markerLegends.length; h++)
                {
                    if (markerLegends[h].getAttribute("src") == elem.getAttribute("src"))
                        {inlist = true; break;}
                }
                if (!inlist) {
                    tdlgnd.ref.appendChild(elem); markerLegends.push(elem);
                }
            }
            else if (tl[a].ds[b].pl) {
                tdlgnd.ref.appendChild(renderPlineLegend(tl[a].ds[b]));
            }
        }
        if (c)
            checkbox.ref.addEventListener ? checkbox.ref.addEventListener("click", toggle, false) : checkbox.ref.attachEvent("onclick", toggle);
    }
    
    
    // qfix ie
    var ips = icondefbox.getElementsByTagName("input");
    for (var i = 0; i < ips.length; i++)
        ips[i].checked = true;
    
}

var ClientKeyMap = {
	map: {},
	
	init: function()
	{
		for (var a = 0; a < md.length; a++)
		{
			for (var b = 0; b < md[a].ma.length; b++)
			{
				this.map[md[a].ma[b].ck] = md[a].ma[b];
			}
		}
	},
	
	lookup: function(clientkey)
	{
		return this.map[clientkey];
	}
}

var resources = {
locale: "da_DK"
,
legend: "Tegnforklaring"
,
show: "Vis"
,
icon: "Ikon"
,
description: "Beskrivelse"
};
var config = {
imagebase: 'http://www.n-gis.com/img/'
,
zoomMarkers: true
,
allowPan: true
,
userfilter: false
,
usersearch: false
,
legend: true
,
center: {lat: 55.8904804395356, lng: 9.9422475145, zoom: 9}
,
maptype: 'G_NORMAL_MAP'
,
controlfunction: function(mp) {mp.addControl(new GLargeMapControl());
mp.addControl(new GScaleControl());
mp.addControl(new GMapTypeControl());
mp.addControl(new GOverviewMapControl());
}
};
// http://svn.danwebb.net/external/lowpro/tags/rel-0.4/dist/
var DOMBuilder = {
    IE_TRANSLATIONS : {
        'class' : 'className',
        'for' : 'htmlFor'
    },
    
    ieAttrSet : function(attrs, attr, el) 
    {
        var trans;
        if (trans = this.IE_TRANSLATIONS[attr]) el[trans] = attrs[attr];
        else if (attr == 'style') el.style.cssText = attrs[attr];
        else if (attr.match(/^on/)) el[attr] = new Function(attrs[attr]);
        else el.setAttribute(attr, attrs[attr]);
    },
    
    tagFunc : function(tag) 
    {
        return function() {
	        var attrs, children; 
	        if (arguments.length>0) { 
                if (arguments[0].nodeName || typeof arguments[0] == "string") 
	                children = arguments; 
	              else 
	              { 
	                    attrs = arguments[0]; 
	                    children = [].slice.call(arguments, 1); 
	              };
	        }
	        return DOMBuilder.create(tag, attrs, children);
	    };
    },
	
	create : function(tag, attrs, children) 
	{
        attrs = attrs || {}; children = children || [];
		var isIE = navigator.userAgent.match(/MSIE/);
		var el = document.createElement((isIE && attrs.name) ? "<" + tag + " name=" + attrs.name + ">" : tag);
        var setref = null;
		for (var attr in attrs) {
            if (attr == "setref")
            {
                attrs[attr].ref = el;
                continue;
            }                
            
            if (typeof attrs[attr] != 'function') {
		        if (isIE) this.ieAttrSet(attrs, attr, el);
		        else el.setAttribute(attr, attrs[attr].toString());
            };
	    }
        for (var i=0; i<children.length; i++) {
		    if (typeof children[i] == 'string') 
			    children[i] = document.createTextNode(children[i]);
			el.appendChild(children[i]);
		}
		
		return el;
	}
};

(function() { 
	var els = ("p|div|span|strong|em|img|table|tr|td|th|thead|tbody|tfoot|pre|code|" + 
				   "h1|h2|h3|h4|h5|h6|ul|ol|li|form|input|textarea|legend|fieldset|" + 
				   "select|option|blockquote|cite|br|hr|dd|dl|dt|address|a|button|abbr|acronym|" +
				   "script|link|style|bdo|ins|del|object|param|col|colgroup|optgroup|caption|" + 
				   "label|dfn|kbd|samp|var").split("|");
  var el, i=0;
	while (el = els[i++]) 
	  window['$' + el] = DOMBuilder.tagFunc(el);
})();


// micro-prototype 
var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0, length = iterable.length; i < length; i++)
      results.push(iterable[i]);
    return results;
  }
}

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

Function.prototype.bindAsEventListener = function(object) {
  var __method = this, args = $A(arguments), object = args.shift();
  return function(event) {
    return __method.apply(object, [event || window.event].concat(args));
  }
}

