var Tool = {
	isObject  	: function(param){ return (param && typeof param == 'object') || Tool.isFunction(param)  },
	isBoolean 	: function(param){ return typeof param == 'boolean'	},
	isArray	  	: function(param){ return Tool.isObject(param) && param.constructor == Array },
	isFunction	: function(param){ return typeof param == 'function' },
	isNull		: function(param){ return typeof param == 'object' && !param },
	isDefined 	: function(param){ return typeof param != 'undefined'; },
	isNumeric	: function(param){ return typeof param == 'number' && isFinite(param)},
	isString	: function(param){ return typeof param == 'string' },
	inArray		: function(ar,val){
		for(var i=0;i<arr.length;i++){
			if(arr[i] == val){
				return true;
				break;
			}
		}
		return false;
	},
	objectKeyExists	: function(obj,key){
		if(Tool.isArray(obj) || Tool.isObject(obj)){
			return Tool.isDefined(obj[key]);
		}
		else{
			throw ('Method objectKeyExists of object of type Tool requires an Array or Object as its first argument.');
		}
	},
	loadFile 	: function(filePath,fileType,onLoadRequire){
		var filePath = filePath || '';
		var fileType = Tool.isDefined(fileType)
			? Tool.isString(fileType)
				? (fileType.toLowerCase() == 'css' || fileType.toLowerCase() == 'js')
					? fileType
					: null
				: null
			: null
		
		if(null == fileType){
			throw ('loadFile method of Object of type Tool requires a fileType attribute of type string with a value of css or js in its object parameter'); 
		}
			
		var onloadRequire = (Tool.isDefined(onLoadRequire) && Tool.isBoolean(onLoadRequire) && 0==document.getElementsByTagName('head'));
		
		if(fileType == 'js'){
			if(onloadRequire) document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
			else{
				document.getElementsByTagName('head')[0].appendChild(Builder.node('script', {type : 'text/javascript', src : filePath}));
			}
		}
		else{
			if(onloadRequire) document.write('<link rel="stylesheet" type="text/css" media="screen" href="'+ filePath +'" />');
			else{
				document.getElementsByTagName('head')[0].appendChild(Builder.node('link', {
					rel  : 'stylesheet',
					type : 'text/css', 
					media: 'screen',
					href : filePath
				}));
			}
		}		
	}
}

