var DynaOverlayWin = null;
var Dynalicious = {
	Version: '.8',
	
	Globals: {	'domain':'www.oakleesguide.com',
				'htmlDir':'',
				'dynaDir':'/libs/dynalicious/',
				'libsDir':'/libs/',
				'flashDir':'/flash/',
				'ajaxDir':'/ajax/'
	},
		
	Libs: [ 	{'name':'DynaMenu','loadCSS':true,'reqLibs':[]},
				{'name':'DynaViewer','loadCSS':true,'reqLibs':[]},
				{'name':'DynaFlash','loadCSS':true,'reqLibs':[]},
				{'name':'DynaTabs','loadCSS':false,'reqLibs':[]},
				{'name':'DynaLogin','loadCSS':true,'reqLibs':[]},
				{'name':'DynaShow','loadCSS':true,'reqLibs':[]},
				{'name':'DynaForm','loadCSS':true,'reqLibs':[]},
				{'name':'DynaLink','loadCSS':true,'reqLibs':[]},
				{'name':'DynaCal','loadCSS':true,'reqLibs':[{'name':'scal','loadCSS':true}]},
				{'name':'DynaTimeline','loadCSS':true,'reqLibs':[]}
	],
	
	LoadedLibs: [],
	
	DynaObjs:[],
	
	init: function() {
		if (typeof Prototype == 'undefined') {
			throw ('Dynalicious requires the Protototype Javascript Framework.');
		} else {
			Dynalicious.scan();
			Dynalicious.load();
		}
	},
	
	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);
		
		// 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 tmp = filePath.split('.');
  		var fileExt = tmp[tmp.length - 1];		
  		switch(fileExt) {
  		case 'js' :
  			var jsEl = new Element('script',{'type':'text/javascript','src':filePath});
  			Dynalicious.appendHead(jsEl);
  			break;
  		case 'css' :
			try {
				var cssEl = new Element('link',{'rel':'stylesheet','href':filePath,'type':'text/css','media':'all'});
				var h = document.getElementsByTagName("head").item(0);
				h.insert({'top':cssEl});
			} catch (ex) {
				document.createStyleSheet(filePath,0);
			}
  			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) {
		var DynaEls = [];
		Dynalicious.DynaObjs.clear();
		DynaEls = (el) ? el.select('.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
			var killTimer = 0;
			new PeriodicalExecuter(function(pe) {				
				if ( (typeof window[DynaObj.name] != 'undefined') || killTimer > 200) { new window[DynaObj.name](DynaObj.el);pe.stop(); }
				killTimer++;
			},.1);
		});
	},
	
	reload: function(el) {
		Dynalicious.scan(el);
		Dynalicious.load();
	},
	
	getURLParams: function() {
		var get_params = {};
		var locPath = window.location.href; // [host|pathname|port|href|search|assign|reload|hash|hostname|protocol|replace]
		var paramsIndex = locPath.indexOf('?');
		if (paramsIndex > -1) {
			var urlParams = locPath.substr(paramsIndex + 1);
			get_params = urlParams.toQueryParams();
		}
		return get_params;
	},
	
	appendBody: function(el) {
		var b = document.getElementsByTagName("body").item(0);
		b.appendChild(el);
	},
	
	appendHead: function(el) {
		var h = document.getElementsByTagName("head").item(0);
		h.appendChild(el);
	},
	
	openOverlayWin: function() {
		Dynalicious.closeOverlayWin();
		Windows.maxZIndex = 99999;
		var data = $A(arguments); // content, params
		var content = data[0] + '<a href="javascript:Dynalicious.closeOverlayWin();" class="close popUpWinClose">close<\/a>';
		var params = (typeof data[1] == 'object') ? data[1] : {};
		DynaOverlayWin = new Window({id:params.id || 'DynaOverlayWin',show:true,className:params.className || 'popUpWin',destroyOnClose:true,width:params.w || 420,height:params.h || 300,minimizable: false,maximizable: false,closable: false,resizable: false,draggable: false,showEffectOptions: {duration:.5}});
		DynaOverlayWin.showCenter(true);
		return $('DynaOverlayWin_content').insert({'top':content});
	},
	
	closeOverlayWin: function() {
		if (DynaOverlayWin != null) {
			DynaOverlayWin.close();
			DynaOverlayWin = null;
		}
	},
	
	parseParams: function(dynaObj) {
		var self = dynaObj;
		var paramsStr = dynaObj.el.readAttribute('DynaParams');
		dynaObj.params = (paramsStr != null && paramsStr != '') ? $H(paramsStr.evalJSON()) : null;
		if (dynaObj.params != null) {
			dynaObj.params.each(function(pair) {
				dynaObj[pair.key] = pair.value;
			});
		}
	},
	
	loadTheme: function(dynaObj) {
		if (Dynalicious.getDynaLib(dynaObj.el).loadCSS && (typeof dynaObj.theme != 'undefined' && dynaObj.theme != null) ) {
			var themePath = Dynalicious.Globals.htmlDir + Dynalicious.Globals.dynaDir + dynaObj.name + '/themes/' + dynaObj.theme + '/' + dynaObj.theme + '.css';
			Dynalicious.loadFile(themePath);
			dynaObj.el.addClassName(dynaObj.theme);
		}
	},
	
	getElIndex: function(el,selector) {
		var elIndex = 0;
		var preEl = el.previous(selector);
		while (preEl != 'undefined' && preEl != null) {
			elIndex++;
			preEl = preEl.previous(selector);
		}
		return elIndex;
	}
}
addEvent(window, 'DOMContentLoaded', function() { Dynalicious.init(); });