/*
	domEl() function - painless DOM manipulation
	written by Pawel Knapik  //  pawel.saikko.com
*/
var domEl = function(e,c,a,p,x) {
 if (!c) c='';
    if(e||c) {
        c=(typeof c=='string'||(typeof c=='object'&&!c.length))?[c]:c;
        e=(!e&&c.length==1)?document.createTextNode(c[0]):e;
        var n = (typeof e=='string') ? document.createElement(e) : !(e&&e===c[0])?e.cloneNode(false):e.cloneNode(true);
        if(typeof e=='string' || e.nodeType!=3) {
            c[0]===e?c[0]='':'';
            for(var i=0,j=c.length;i<j;i++) {
                typeof c[i]=='string'? n.appendChild(document.createTextNode(c[i])) : n.appendChild(c[i].cloneNode(true));
            }
            if(a){
                 for (i in a) i=='class'?n.className=a[i]:n.setAttribute(i,a[i]);
                }
        }
    }
    if(!p) { return n; }
    p=(typeof p=='object'&&!p.length)?[p]:p;
    for(var k=(p.length-1);k>=0;k--) {
        if(x){while(p[k].firstChild)p[k].removeChild(p[k].firstChild);
            if(!e&&!c&&p[k].parentNode)p[k].parentNode.removeChild(p[k]);}
        if(n) p[k].appendChild(n.cloneNode(true));
    }
    return true;
}

/*
	getElementsByClass - algorithm by Dustin Diaz, shortened by Pawel Knapik
*/
function getElementsByClass(s,n,t) {
	var c=[], e=(n?n:document).getElementsByTagName(t?t:'*'),r=new RegExp("(^|\\s)"+s+"(\\s|$)");
	for (var i=0,j=e.length;i<j;i++) r.test(e[i].className)?c.push(e[i]):''; return c }
	
/*
	$() based on prototype.js dollar function idea, optimized by Pawel Knapik.
*/
function $(){var r=[],a=arguments;for(var i=0,j=a.length;i<j;i++){(typeof a[i]=='string')?(r.push(document.getElementById(a[i]))):(r.push(a[i]))}
return(r.length==1)?r[0]:r}



function getAncestorByTagName( node, tag ) {

    var ancestor = node.parentNode;
    if ( ancestor == null ) return null;
    if ( ancestor.nodeName == tag.toUpperCase() ) return ancestor;
    else return getAncestorByTagName(ancestor, tag);

} // end of 'getAncestorByTagName()'

function getPreviousSiblingByTagName( node, tag ) {

    var sibling = node.previousSibling;
    if ( sibling == null ) return null;
    if ( sibling.nodeName == tag.toUpperCase() ) return sibling;
    else return getPreviousSiblingByTagName(sibling, tag);

} // end of 'getPreviousSiblingByTagName()'


function getNextSiblingByTagName( node, tag ) {

    var sibling = node.nextSibling;
    if ( sibling == null ) return null;
    if ( sibling.nodeName == tag.toUpperCase() ) return sibling;
    else return getNextSiblingByTagName(sibling, tag);

} // end of 'getNextSiblingByTagName()'
