/**
 * @author keithfoster
 */
function addEvent(element, event, xFunction) {
	if(element.constructor == Array) {
		for(i=0; i<element.length; i++) {
			return addListener(element[i], event, xFunction);
		}
	} else {
		return addListener(element, event, xFunction);
	}
	
	function addListener(element, event, xFunction) {
		if(element.addEventListener) {
			element.addEventListener(event, xFunction, false);
			return true;
		} else if (element.attachEvent) {
			return element.attachEvent("on"+event, xFunction);
		} else {
			return false;
		}
	}
}

var LazyLoad = (function(){
	var scriptsLoaded = new Array;
	
	/**
	 * Array of source files to load
	 * @param {Object} files
	 */
	function getFiles(files) {
		var scripts = files;
		var scriptElement = document.createElement('script'), scriptTag = null;
		for(var i=0, script=null; n=scripts.length, i<n, script=scripts[i]; i++) {
			scriptTag = scriptElement.cloneNode(false);
			if(script.indexOf('http')!=-1) {
				if(script.indexOf('google') != -1) {
					scriptTag.src = script;
				} else {
					scriptTag.src = (script.indexOf('.js')==-1) ? script+'.js' : script;
				}					 
			} else if(script.indexOf('/wp-content/') != -1) {
				scriptTag.src = script+'.js';
			} else {
				scriptTag.src = '/wp-content/themes/fb/m/js/'+script+'.js';
			}
			scriptsLoaded[script] = false;
			scriptLoadEvent(script);
			document.body.appendChild(scriptTag);
		}
	}
	
	function scriptLoadEvent (script) {
		var obj = false;
		switch(script) {
			case 'jquery':
				obj = (typeof(jQuery)!='undefined') ? true : null;
				break;
			case 'jquery.uploadify':
				obj = (typeof(jQuery)!='undefined') ? true : false;
				break;
			case 'global-min':
			case 'SiteController.class':
				obj = (typeof(site)!='undefined' && typeof(site.SiteController)!='undefined') ? true : false;
				break;
			case 'Marquee.class':
				obj = (typeof(site)!='undefined' && typeof(site.Marquee)!='undefined') ? true : false;
				break;
			case 'ModalWindow.class':
				obj = (typeof(site)!='undefined' && typeof(site.ModalWindow)!='undefined') ? true : false;
				break;
			case 'MediaPopup.class':
				obj = (typeof(site)!='undefined' && typeof(site.MediaPopup)!='undefined') ? true : false;
				break;
			case 'CaseStudiesList.class':
				obj = (typeof(site)!='undefined' && typeof(site.CaseStudyList)!='undefined') ? true : false;
				break;
			case 'CaseStudySearchProcessor.class':
				obj = (typeof(site)!='undefined' && typeof(site.CaseStudyList)!='undefined') ? true : false;
				break;
			case 'RangeSlider.class':
				obj = (typeof(site)!='undefined' && typeof(site.RangeSlider)!='undefined') ? true : false;
				break;
			case 'ModelView.class':
				obj = (typeof(Model)!='undefined') ? true : false;
				break;
			case 'EmailPage.class':
				obj = (typeof(site)!='undefined' && typeof(site.EmailPage)!='undefined') ? true : false;
				break;
			case 'DownloadPdf.class':
				obj = (typeof(site)!='undefined' && typeof(site.DownloadPdf)!='undefined') ? true : false;
				break;
			case 'FormValidation.class':
				obj = (typeof(site)!='undefined' && typeof(site.FormValidator)!='undefined') ? true : false;
				break;
			case 'json':
				obj = (typeof(JSON)!='undefined') ? true : false;
				break;
			case 'Pager':
				obj = (typeof(site)!='undefined' && typeof(site.Pager)!='undefined') ? true : false;
				break;
			case 'swfobject':
				obj = (typeof(swfobject)!='undefined') ? true : false;
				break;
			case 'http://www.google-analytics.com/ga.js':
                obj = (typeof(_gat)!='undefined') ? true : false;
                break;
			case 'GoogleMap.class':
				obj = (typeof(site)!='undefined' && typeof(site.GoogleMap)!='undefined') ? true : false;
				break;
		}
		if(!obj) {
			setTimeout(function() {
				scriptLoadEvent(script);
			}, 100)
		} else {
			scriptsLoaded[script] = true;
		}
		
	}
	
	function allScriptsLoaded(){
		var allLoaded = true;
		for(var script in scriptsLoaded) {
			if(!scriptsLoaded[script]){
				allLoaded = false;
				break;
			}
		}
		return allLoaded;		
	}
	
	
	
	/**
	 * String of inline scripts
	 * @param {Object} inline
	 */
	function filesLoaded() {
		if(!allScriptsLoaded()){
			setTimeout(filesLoaded, 100);
			return;
		}
		getInlineJS();
	}
	
	return function(files, inline) {
		
		this.filesLoaded = false;		
		getFiles(files);		
		filesLoaded();
						
	}
})();
