//------------------------------------------
// Class: com.Schematic.Utils
// A collection of frequently used methods 
//------------------------------------------

if(typeof com == "undefined") var com = {}; 
if(typeof com.Schematic == "undefined") com.Schematic = {}; 

com.Schematic.Utils = function() {
	this.version = '0.1';
};

com.Schematic.Utils.prototype = {

	//------------------------------------------
	// Shortcut for getElementByID()
	//------------------------------------------
	$: function() {
		var elements = [];
		for (var i = 0; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == "string") {
				element = document.getElementById(element);
				if (arguments.length == 1 && element) return element;
				if(element) elements.push(element);
			}
		}
		if(elements.length) return elements;
		else return false;
	},

	//------------------------------------------
	// Cross browser addEvent
	//------------------------------------------
	addEvent: function( obj, type, fn ) {

		// Check for dom load events
		if(type == 'DOMContentLoaded') { DomLoaded.load(fn); return; }
			
		if (obj.addEventListener) {
			obj.addEventListener( type, fn, false );
		}
		else if (obj.attachEvent) {
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() { obj["e"+type+fn]( window.event ); };
			obj.attachEvent( "on"+type, obj[type+fn] );
		}
		else {
			obj["on"+type] = obj["e"+type+fn];
		}
	},
	
	preventDefault: function(e) {
		if(!e) e = window.event;
		if(e.preventDefault) {
			e.preventDefault(); 
		} else {
			e.returnValue = false;
		}
	},
	
	//------------------------------------------
	// add, check for, or remove a class to any element(s) or element ID(s)
	//------------------------------------------	
	addClass: function(el,newClass) {
		if(typeof el == "string" && typeof this.$(el) == "object") {
			el = this.$(el);
		} else if(typeof el != "object") return;
		if(el.length) {
			for(var i=0, len=el.length; i<len; i++) this.addClass(el[i],newClass)
		} else {
			if(!this.hasClass(el,newClass)) {
				if(el.className) el.className += " " + newClass;
				else el.className = newClass;
			}
		}
	},
	
	removeClass: function(el, remClass) {
		if(typeof el == "string" && typeof this.$(el) == "object") {
			el = this.$(el);
		} 
		if(el.length) {
			for(var i=0, len=el.length; i<len; i++) this.removeClass(el[i],remClass)
		} else {
			var regexp = new RegExp("(^|\\s)" + remClass + "(\\s|$)");
			el.className = el.className.replace(regexp, "$2");
		}
	},

	hasClass: function(el, chkClass) {
		if(typeof el == "string" && typeof this.$(el) == "object") {
			el = this.$(el);
		} else if(typeof el != "object") return;
		if(el.length) {
			for(var i=0, len=el.length; i<len; i++) this.hasClass(el[i],chkClass)
		} else {
			var regexp = new RegExp("(^|\\s)" + chkClass + "(\\s|$)");
			return regexp.test(el.className);
		}
	},
	
	//---------------------------------------------
	// Get elements by class name
	//---------------------------------------------	
	getClass: function(oElm, strTagName, strClassName) {
		var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
		var arrReturnElements = new Array();
		strClassName = strClassName.replace(/-/g, "\-");
		var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$)");
		var oElement;
		for(var i=0; i<arrElements.length; i++){
			oElement = arrElements[i];
			if(oRegExp.test(oElement.className)){
				arrReturnElements.push(oElement);
			}
		}
		return (arrReturnElements)
	},
	
	//---------------------------------------------
	// Takes an array elements and hides them
	//---------------------------------------------
	hide: function() {
		for (var i = 0; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == "string") {
				
				element = this.$(element);
				element.style.display = "none";
			} else {
			
				for(var x=0; x<element.length; x++) {
					if(element[x].className.indexOf("skipHide") != -1) continue;
					element[x].style.display = "none";
				}
			}
		}
		
	},
	
	//------------------------------------------
	// Crossbrowser target of the event
	//------------------------------------------	
	getEventTarget: function(event) {
		if (event.srcElement) {
			return event.srcElement;
		} else if (event.target) {
			return event.target;
		} else {
			return;
		}
	},
	
	//------------------------------------------
	// Removes extra white space on within elements.
	// Also fixes an issue with disapearing content in IE.
	//------------------------------------------	
	tidyWhiteSpace: function(el) {
		if (typeof el == 'string') el = this.$(el);
		if (el.length) {
			for(var i=0, len=el.length; i<len; i++) {
				el[i].innerHTML = el[i].innerHTML.replace("  "," ");
			}
		} else el.innerHTML = el.innerHTML.replace("  "," ");
	},
	
	//------------------------------------------
	// simple pop up of small size
	//------------------------------------------	
	
	popUp: function(url, target, params) {
		if(params) {
			var p = params;
		} else {
			var p = "width=370,height=400,scrollbars=yes,resizable=yes";
		}

		var newWin = window.open(url,target,p);
		newWin.focus();
		return false;
	}
};

// Add Array.push for ie 5
if(typeof new Array().push == "undefined") {
	Array.prototype.push = function (element) {
    	this[this.length] = element;
    	return this.length;
	};
}

// ----------------------------------------------
// Check if DOM available (http://www.cherny.com)
// ----------------------------------------------
var DomLoaded =
{
	onload: [],
	loaded: function()
	{
		if (arguments.callee.done) return;
		arguments.callee.done = true;
		for (i = 0;i < DomLoaded.onload.length;i++) DomLoaded.onload[i]();
	},
	load: function(fireThis)
	{
		this.onload.push(fireThis);
		if (document.addEventListener) 
			document.addEventListener("DOMContentLoaded", DomLoaded.loaded, null);
		if (/KHTML|WebKit/i.test(navigator.userAgent))
		{ 
			var _timer = setInterval(function()
			{
				if (/loaded|complete/.test(document.readyState))
				{
					clearInterval(_timer);
					delete _timer;
					DomLoaded.loaded();
				}
			}, 10);
		}

	   window.onload = DomLoaded.loaded;
	}
};

var S = new com.Schematic.Utils();

/**
 * Turn off background image caching for IE 
 */
/*@cc_on
document.execCommand("BackgroundImageCache", false ,true);
@*/
