var Dynalicious = {
	Version: '.6',
	
	REQUIRED_PROTOTYPE: '1.6',
	
	Globals: {	'domain':'krdev.littelfuse.com',
				'htmlDir':'',
				'dynaDir':'libs/dynalicious/',
				'libsDir':'libs/',
				'flashDir':'media/Flash/',
				'ajaxDir':'ajax/Dynalicious/'
	},
	
	Libs: [ 	{'name':'DynaMenu','loadCSS':true,'reqLibs':[]},
				{'name':'DynaViewer','loadCSS':true,'reqLibs':[]},
				{'name':'DynaFlash','loadCSS':true,'reqLibs':[]},
				{'name':'DynaTabs','loadCSS':true,'reqLibs':[]},
				{'name':'DynaLogin','loadCSS':true,'reqLibs':[]},
				{'name':'DynaShow','loadCSS':true,'reqLibs':[]},
				{'name':'DynaForm','loadCSS':true,'reqLibs':[]},
				{'name':'DynaLink','loadCSS':false,'reqLibs':[]},
				{'name':'DynaCal','loadCSS':false,'reqLibs':[{'name':'scal','loadCSS':true}]},
				{'name':'DynaTimeline','loadCSS':true,'reqLibs':[]}
	],
	
	LoadedLibs: [],
	
	DynaEls:[],
	DynaObjs:[],
	
	init: function() {
		function convertVersionString(versionString) {
			var r = versionString.split('.');
			return parseInt(r[0])*100000 + parseInt(r[1])*1000 + parseInt(r[2]);
		}
 
		if ((typeof Prototype == 'undefined') || 
			(typeof Element == 'undefined') || 
			(typeof Element.Methods == 'undefined') || 
			(convertVersionString(Prototype.Version) < convertVersionString(Dynalicious.REQUIRED_PROTOTYPE))) {
				throw("Dynalicious requires the Prototype JavaScript framework >= " + Dynalicious.REQUIRED_PROTOTYPE);
		} else {
			Dynalicious.scan();
		}
	},
	
	require: function(Lib) {
		var libSRC,cssSRC;
		var dynaPath = Dynalicious.Globals.htmlDir + Dynalicious.Globals.dynaDir;
		var libsPath = Dynalicious.Globals.htmlDir + Dynalicious.Globals.libsDir;
		
		libSRC = dynaPath + Lib.name + '/' + Lib.name + '.js';
		Dynalicious.loadFile(libSRC);
		Dynalicious.LoadedLibs.push(Lib.name);
		
		if (Lib.loadCSS) {
			cssSRC = dynaPath + Lib.name + '/' + Lib.name + '.css';
			Dynalicious.loadFile(cssSRC);
		}
		
		// load any extra required libs/styles
		if (Lib.reqLibs.length > 0) {
			Lib.reqLibs.each (function(reqLib) {
				if (Dynalicious.LoadedLibs.indexOf(reqLib.name) < 0) {
					libSRC = libsPath + reqLib.name + '/' + reqLib.name + '.js';
					Dynalicious.loadFile(libSRC);
					Dynalicious.LoadedLibs.push(reqLib.name);
					if (reqLib.loadCSS) {
						cssSRC = libsPath + reqLib.name + '/' + reqLib.name + '.css';
						Dynalicious.loadFile(cssSRC);
					}
				}
			});
		}
  	},
  	
  	loadFile: function(filePath) {
  		var fileExt = filePath.substr(filePath.indexOf('.') + 1);
  		var hed = document.getElementsByTagName('head')[0];
		
  		switch(fileExt) {
  		case 'js' :
  			var js = new Element('script',{'type':'text/javascript','src':filePath});
  			$(hed).insert({'bottom':js});
  			break;
  		case 'css' :
  			var css = new Element('link',{'rel':'stylesheet','href':filePath,'type':'text/css','media':'all'});
  			// load css after meta tags in the head of the doc
  			var meta = hed.getElementsBySelector('meta');
			$(meta[meta.length-1]).insert({'after':css});
  			break;
  		}
  	},
  	
	getDynaLib: function(el) {
		var dynaLib = null;
		Dynalicious.Libs.each(function(Lib) {
			if (el.hasClassName(Lib.name)) {
				dynaLib = Lib;
				throw $break;
			}
		});
		return dynaLib;
	},
	
	scan: function(el) {
		Dynalicious.DynaEls.clear();
		Dynalicious.DynaObjs.clear();
		
		Dynalicious.DynaEls = (el) ? el.select('.Dynalicious') : $$('.Dynalicious');
		Dynalicious.DynaEls.each(function(DynaEl) {
			var dynaLib = Dynalicious.getDynaLib(DynaEl);
			//load required library - if not already loaded
			if (dynaLib != null && Dynalicious.LoadedLibs.indexOf(dynaLib.name) < 0) {
				Dynalicious.require(dynaLib);
			}
			Dynalicious.DynaObjs.push({'name':dynaLib.name,'el':DynaEl});
		});
	},
	
	load: function() {
		Dynalicious.DynaObjs.each(function(DynaObj) {
			// loop until library is available/loaded
			new PeriodicalExecuter(function(pe) { if (typeof eval('new ' + DynaObj.name + '(DynaObj.el)') == 'object') { pe.stop(); } },.1);
		});
	},
	
	reload: function(el) {
		Dynalicious.scan(el);
		Dynalicious.load();
	},
	
	getURLParams: function() {
		//alert(Object.keys(window.location)); //host,pathname,port,href,search,assign,reload,hash,hostname,protocol,replace
		//alert(window.location.href);
		var get_params = {};
		var locPath = window.location.href;
		var paramsIndex = locPath.indexOf('?');
		if (paramsIndex > -1) {
			var urlParams = locPath.substr(paramsIndex + 1);
			get_params = urlParams.toQueryParams();
		}
		return get_params;
	}
}

addEvent(window, 'DOMContentLoaded', function() { Dynalicious.init(); });
addEvent(window,'load',function() { Dynalicious.load(); });