// Copyright (c) 2006-2007, Powermand Inc. All Rights Reserved.

// JavaScript Toolkit Core Functions
var d = document;

function $TB() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}


function $$TB(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = d;
	if ( tag == null )
		tag = '*';
	var els = $TB(node).getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
	for (i2 = 0, j2 = 0; i2 < elsLen; i2++) {
		if ( pattern.test(els[i2].className) ) {
			classElements[j2] = els[i2];
			j2++;
		}
	}
	return classElements;
}
function insertAfter(parent, node, referenceNode){
					if(referenceNode.nextSibling!=null && parent!=null) 
						parent.insertBefore(node, referenceNode.nextSibling);
					else if(parent!=null && node!=null)
						parent.appendChild(node);
				}
function addClass(el,newClass){
			el=$TB(el);
			elClasses=el.className.split(' ');
			for(i=0;i<elClasses.length;i++)
				if(newClass==elClasses[i]) return;
			el.className=el.className+' '+newClass;
		}
function removeClass(el,rmvClass){
			el=$TB(el);
			var elClasses=el.className.split(' ');
			for(i=0;i<elClasses.length;i++)
				if(rmvClass!=elClasses[i]){
					elClasses[i]='';
				}
			el.className=elClasses.join(' ');
		}

function elementHasClass(e1,searchClass){
    var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
    return pattern.test(e1.className);
}
function isset(varname){return(typeof(window[varname])!='undefined');}

//Add ForEach Looping
if (!Array.prototype.forEach){
  Array.prototype.forEach = function(fun /*, thisp*/){
    var len = this.length;
    if (typeof fun != "function") alert('not a valid foreach function');
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)  if (i in this)fun.call(thisp, this[i], i, this);};
}		
		
function removeChildNodes(el){
	  while (el.childNodes[0]){
		el.removeChild(el.childNodes[0]);
	  }
	}		
		
/*subscribe / fire custom events*/
function Observer() {
    this.fns = [];
	this.subscribe=function(fn){this.fns.push(fn)}
	this.unsubscribe=function(fn){this.fns = this.fns.filter(function(el){if( el !== fn )return el})}
	this.fire=function(o, thisObj) {
        var scope = thisObj || window;
        this.fns.forEach(function(el){el.call(scope, o)});
    }
}
eventInit=new Observer();
 
/*Deprecated*/
function EventCache() {
	this.events= new Array();
	this.objs= new Array();
	this.add=function(newEvent,obj){//obj optional 
			this.events[this.events.length+1]=newEvent 
			if(obj==null)obj=-1;
			this.objs[this.objs.length+1]=obj			
	}; 
	this.execute=function(){
		for (i=0;i<this.events.length;i++){
		  if(this.objs[i]!=-1 && this.objs[i]!=null && this.events[i]!=null){
				eval('this.objs['+i+'].'+this.events[i])
		  }else eval(this.events[i]);
		}
	  }
	}
