/**
 * @author Scott Clarke, Sean White
 */
document.write('<script type="text/javascript" src="/js/DOM.js"></script>');
document.write('<script type="text/javascript" src="/js/jsonClass.js"></script>');

var common = {
	
	scriptRoot : "/js",
	version: 0.1,
	loadedLibs: [],
	showDebug : false,

	include : function(requiredScript) {
		if(inArray(common.loadedLibs,requiredScript) < 0) {
		    document.write('<script type="text/javascript" src="'+ common.scriptRoot + '/' + requiredScript + '.js"></script>');
			common.loadedLibs.push(requiredScript);
		}
	},
	
	includeScripts : function(scriptsArray) {
		var arrayLen = scriptsArray.length;
		for(i=0;i < arrayLen; i=i+1) {
			common.include(scriptsArray[i]);
		}
	}
}

function $(ele) {
	return (typeof ele == "string") ? document.getElementById(ele) : ele;
}

//var $F = Form.Element.getValue;


var Try = {
  these: function() {
    var returnValue;

    for (var i = 0; i < arguments.length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) {}
    }

    return returnValue;
  }
}

function inArray(arrayList,findString) {
	var al=arrayList.length;
    for (var i = 0; i < al; i++)
      if (arrayList[i] == findString) return i;
    return -1;
}


//someone else's code 
function copyObject(myObj)
{
	if(typeof(myObj) != 'object') return myObj;
	if(myObj == null) return myObj;

	var myNewObj = new Object();
	
	for(var i in myObj) {
		myNewObj[i] = myObj[i];
	}
	
	return myNewObj;
}

function copyByInheritance(object) {
	function dummyConstructor(){};
	dummyConstructor.prototype = object;
	return new dummyConstructor();
}

function isArray(a) {
return isObject(a) && a.constructor === Array;
}
function isBoolean(a) {
return typeof a === 'boolean';
}
function isEmpty(o) {
	var i, v;
	if (isObject(o)) {
		for (i in o) {
		v = o[i];
		if (isUndefined(v) && isFunction(v)) {
			return false;
		}
	}
}
return true;
}
function isFunction(a) {
return typeof a === 'function';
}
function isNull(a) {
return typeof a === 'object' && !a;
}
function isNumber(a) {
return typeof a === 'number' && isFinite(a);
}
function isObject(a) {
return (a && typeof a === 'object') || isFunction(a);
}
function isString(a) {
return typeof a === 'string';
}
function isUndefined(a) {
return typeof a === 'undefined';
} 

function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

//event handlers

// Turn selected element on
var doTracking = false;
function trackMouse(evt) {
	var coords = [{x:0,y:0}];
	if(doTracking) {
		evt = (evt) ? evt : event;
			
		if (evt.pageX) {
			coords.x = evt.pageX;
			coords.y = evt.pageY;
		} else if (evt.offsetX || evt.offsetY) {
			coords.x = evt.offsetX;
			coords.y = evt.offsetY;
		} else if (evt.clientX) {
			coords.x = evt.clientX;
			coords.y = evt.clientY;
		}
		debug.append("X:" + coords.x + " Y:" + coords.y);
	}
	return coords;
	
}

function $ev(evt) {
	if(window.event) {// IE event object 
		evt = window.event;
		//give it some w3c extensions.
		evt.preventDefault = new Function("event.returnValue=false;");
		evt.target=evt.srcElement;
		evt.layerX = evt.x;
		evt.layerY = evt.y;
		evt.charCode = evt.keyCode;
		//if(evt.type.toLowerCase()=="mousewheel") evt.type="DOMMouseScroll";
		if(!isNaN(evt.wheelDelta)) {
			evt.wheelDirection = evt.wheelDelta/120;
		}
	}
	else { //w3c DOM event
		//give it some IE extensions.
		evt.x=evt.layerX;
		evt.y=evt.layerY;
		evt.srcElement=evt.target;
		
		if (evt.type.toLowerCase()=="dommousescroll") {
            /** In Mozilla, sign of delta is different than in IE.
             * Also, delta is multiple of 3.
             */
            evt.wheelDirection = -evt.detail/3;
		}
	}
	return evt;
}

function $attachEv(targEle, eventType, handler) {
	if(targEle.attachEvent) {
		if(eventType.toLowerCase()=="dommousescroll") eventType="mousewheel";
		targEle.attachEvent("on" + eventType, handler);
	}
	else if (targEle.addEventListener) {
		if(eventType=="mousewheel") eventType="DOMMouseScroll";
		targEle.addEventListener(eventType, handler, false);
	}
}

/*
document.onmousedown = new Function ("doTracking=true");
document.onmousemove = trackMouse;
document.onmouseup = new Function ("doTracking=false");

*/