
// many of these objects & properties get overwriten when initialised
// they are listed here for documentation purposes

var eFC = {
	revision: 0,
	data: {
		sectors: [],
		$: {
			extractData: function () {
				var data = {}
				$(".efcData:not(.efcXlation) li[title]").each(function (i,n) {
					data[n.title] = $.string(n.innerHTML).strip().str
				})
				return $.extend(eFC.data, data)
			}
		}
	},
	staticHostName: "",
	support: {
		validation: {}
	},
	elementExtensions: {},

	// define package bundles here
	packages: {
		load: ["core"],
		core: [
			"/assets/js/lib/jquery.plugins/jquery.string.1.0-min.js",
			"/assets/js/lib/jquery.plugins/jquery.protify-0.2.js",
			"/assets/js/core/jquery.efc.js"
		],
		forms: [
			"/assets/js/support/validation.js"
		],
		homepage: ["/assets/js/pages/homepage.js"],
		advancedJobSearch: [
			"/assets/js/pages/advancedJobSearch.js",
			"/assets/js/lib/sessvars.js"
		],
		jobApplyDetails: ["/assets/js/pages/jobApplyDetails.js"],
		careerServices: ["/assets/js/pages/careerServices.js"],
		resumeResponse: ["/assets/js/pages/resumeResponse.js"],
		myEfcRegisterSignIn: [
			"/assets/js/pages/myEfcRegisterSignIn.js",
			"/assets/js/support/validation.js"
		],
		resume_form: ["/assets/js/pages/resume_form.js"],
		contactus: ["/assets/js/pages/contactus.js"],
		jobDetails: ["/assets/js/pages/jobDetails.js"],
		jobApplyLoginOrRegister: [
			"/assets/js/pages/jobApplyLoginOrRegister.js",
			"/assets/js/support/validation.js"
		],
		passwordChange: ["/assets/js/pages/passwordChange.js"],
		webstore: [
			"/assets/js/support/modal.js",
			"/assets/js/support/numbers.js",
			"/assets/js/lib/jquery.plugins/jquery.color.js",
			"/assets/js/lib/jquery.plugins/jquery.url.packed.js",
			"/assets/js/lib/jquery.plugins/jquery.autocomplete.js",
			"/assets/js/lib/jquery.plugins/jquery.scrollTo-min.js",
			"/assets/js/v2/webstore/webstore.js",
			"/assets/js/pages/webstore-buildbasket.js",
			"/assets/js/pages/webstore-qjp.js",
			"/assets/js/pages/webstore-payment.js",
			"/assets/js/pages/webstore-company.js",
			"/assets/js/pages/webstore-success.js"
		],
		richTextEditor: ["/assets/ckeditor/ckeditor.js"],
		passwordStrength: ["/assets/js/v2/passwordStrength.js"],
		resumeSearchEndeca: [
			"/assets/js/resumeSearchEndeca/resumeSearchResultsEndeca-1.0.js",
			"/assets/js/lib/jquery.plugins/jquery-ba-bbq.min.js",
			"/assets/js/lib/jquery.plugins/jquery.ui/jquery-ui-1.7.2.custom.min.js",
			"/assets/js/lib/jquery.plugins/jquery.ui/selectToUISlider.jQuery.js",
			"/assets/js/lib/jquery.plugins/jquery.autocomplete.js",
			"/assets/js/lib/jquery.plugins/jquery.scrollTo-min.js",
			"/assets/js/support/numbers.js",
			"/assets/js/resumeSearchEndeca/resumeAdvancedSearchEndeca.js",
			"/assets/js/support/string.js"			
		]
	},
	
	// xlations holds actual translations. xlations.$ hold translation methods
	xlations: {
		$: {
			extractXlations: function (){
				var xlations = {}
				$(".efcData.efcXlation li[title]").each(function (i, n) {
					xlations[n.title] = n.innerHTML
				})
				return $.extend(eFC.xlations, xlations)
			}
		}
	},

	// these properties manage eFC.onready queue
	readyFuncs: [],
	onready: function (F) { eFC.readyFuncs.push(F) },
	onreadyRun: function () { $.each(eFC.readyFuncs, function (i, func) { func.call(window) }) }

};

// xtract any translations & data this page may hold
eFC.onready(function () { eFC.xlations.$.extractXlations(); eFC.data.$.extractData() })

$(function () {

	// strips out the query string that this script was called with
	var src = $.grep($("script"), function (el, i) { return el.src.match(/efcBase\.js\?r=[0-9]+/) })[0].src
	
	// get the current static hostname
	eFC.staticHostName = $("<a/>").attr("href", src)[0].host
	if (!eFC.staticHostName) eFC.staticHostName = document.location.host

	$.each(src.replace(/.+\?/,"").split("&"), function (i, pair) {
		// extract relevant info
	    if (pair.match(/^packages=/)) $.merge(eFC.packages.load, pair.replace(/^packages=/, "").split(","))
		if (pair.match(/^r=/)) eFC.revision = pair.replace(/^r=/, "")
		if (pair.match(/^opt=/)) eFC.useOptimised = true
	})

	if (!eFC.useOptimised) { // load seperated, expanded js
		// no we need to convert packages to files and load
		// [a] stores full file list, [b] stores unique file list, [c] stores normalised unique list
		var a = [], b = [], c = []
		
		$.each(eFC.packages.load, function(i, xpackage){
			if (eFC.packages[xpackage]) { // this is a valid package which has been defined
				$.merge(a, eFC.packages[xpackage])
			}
		})
		
		// now we've added all packages, lets make sure our list is unique
		$.each(a, function(i, filename){
			if ($.inArray(filename, b) < 0) {
				// we need it in b to see if it's unique
				b.push(filename)
				// push it into our normalised list with cachebuster revision
				c.push((filename.match(/^http\:/)) ? filename : document.location.protocol + "//" + eFC.staticHostName + filename + ((filename.indexOf("?") < 0) ? "?" : "&") + eFC.revision)
			}
		})
	} else {	// load concatenated, minified js
		c = $.map(eFC.packages.load, function (xpackage) {
			if (!xpackage.length) return null;
			return document.location.protocol + "//" + eFC.staticHostName + "/assets/js/packages/min/" + xpackage + ".js?" + eFC.revision
		});
	}

	// b now contains a deduped file list, lets laaaaaaaaaaazzy load
	if (c.length) eFC.xLazyLoader({
		js: c,
		load: eFC.onreadyRun
	})
			
})

/*
 * xLazyLoader 1.0 - Plugin for jQuery
 * 
 * Load js, css and  images
 *
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Depends:
 *   jquery.js
 *
 *  Copyright (c) 2008 Oleg Slobodskoi (jimdo.com)
 */

;(function($){

	eFC.xLazyLoader =  function ( method, options ) {
		if (typeof method == 'object') {
			options = method;
			method = 'load';
		};
		
		xLazyLoader[method]( options );
	};

	var xLazyLoader = new function ()
	{

		
		var head = document.getElementsByTagName("head")[0];
		
		
		this.load = function ( options )
		{
			//Defaults
			var d = {
				js: [],
				css: [],
				image: [],
				name: null,
				load: function(){}
			};
			$.extend(d, options);
			
			var self = this,
				ready = false,
				loaded = {
					js: [],
					css: [],
					image: []
				}
			;
			
			each('js', d.js);
			each('css', d.css);
			each('image', d.image);
			
			function each (type, urls)
			{
				if ( $.isArray(urls) && urls.length>0 )
					$.each( urls, function(i, url){
						load(type, url);
					});
				else if (typeof urls == 'string')
					load(type, urls);
			};

			function load (type, url)
			{
 				self[type](url, function() { 
					$.isArray(d[type]) ? loaded[type].push(url) : loaded[type] = url;
					d.js.length == loaded.js.length 
					&& d.css.length == loaded.css.length 
					&& d.image.length == loaded.image.length
					&& d.load.apply(loaded, []);
                    return;
				}, d.name ?'lazy-loaded-'+ d.name : 'lazy-loaded-'+new Date().getTime());
			};
			
		};
		
		this.js = function (src, callback, name)
		{
			if ($('script[src*="'+src+'"]').length>0) {
				callback();
				return;
			};

            var script = document.createElement('script');
            script.setAttribute("type","text/javascript");
            script.setAttribute("src", src);
            script.setAttribute('id', name);

			if ($.browser.msie)
				script.onreadystatechange = function ()	{
					 /loaded|complete/.test(script.readyState) && callback();
				}
			else
				//FF, Safari, Opera
				script.onload = callback;

			head.appendChild(script);
		};
		
		this.css = function (href, callback, name)
		{

			if ($('link[href*="'+href+'"]').length>0) {
				callback();
				return;
			};
			

			var link = $('<link rel="stylesheet" type="text/css" media="all" href="'+href+'" id="'+name+'"></link>')[0];

			if ($.browser.msie)
				link.onreadystatechange = function ()	{
                    /loaded|complete/.test(link.readyState) && callback();
				}
			else if ($.browser.opera)
				link.onload = callback;
			else
				//FF, Safari, Chrome
				(function(){
					try {
						link.sheet.cssRule;
					} catch(e){
						setTimeout(arguments.callee, 20);
						return;
					};
					callback();
				})();
			head.appendChild(link);
		};
		
		this.image = function (src, callback)
		{
			var img = new Image();
			img.onload = callback;
			img.src = src;
		};
	
		this.disable = function ( name )
		{	
			$('#lazy-loaded-'+name, head).attr('disabled', 'disabled');
		};

		this.enable = function ( name )
		{	
			$('#lazy-loaded-'+name, head).removeAttr('disabled');
		};
		
		
		this.destroy = function ( name )
		{
			$('#lazy-loaded-'+name, head).remove();	
		};
		

	};



})(jQuery);		
