(function($){
$.SplashPage = function(params) {
	var $config = mc.os.config;
	
	this.defaults = {
		countrylist: "",
		privacyLink: "http://www.mastercard.com/us/privacy.html",
		tosLink: "http://www.mastercard.com/us/termsofuse.html",
		careerLink: "http://www.mastercard.com/corporate/careers/",
		classActive: "active",
		classHover: "hover",
		classTransition: "transition",
		classWrapper: "selector",
		classSection: "region",
		classReset: "reset",
		classTrigger: "type",
		classBGCover: "bgCover",
		classMcBg: "mc-bg",
		classMaestroBg: "maestro-bg",
		classPermissionPrompt: "prompt",
		domCountryOptIn: "#rememberCountry",
		domCountryContainer: "#remember",
		domPermissionTrigger: ".countries a",
		resizeTimer: 750,
		bgTimer: 5000,
		bgTransition: 0,
		permissionTemplate: {
			module: {
				name: "permission", 
				id: "permissionCookie",
				type: "permissionBox", 
				size: "", 
				headingPosition: ""
			}
		}
	};

	this.settings = $.extend(true, {}, this.defaults, params);
	
	var self = this,
			settings = this.settings,
			$container = $("." + self.settings.classWrapper),
			$backgrounds = $("." + self.settings.classBGCover),
			$countryContainer = $(self.settings.domCountryContainer),
			$maestroBG = $("#" + self.settings.classMaestroBg),
			classSectionActive = self.settings.classSection + "_" + self.settings.classActive,
			classWrapperActive = self.settings.classWrapper + "_" + self.settings.classActive,
			$countryOptIn, $ResizeTimer, $bgTimer;
	
	//$container.css({opacity: 1});
	
	//start:private
	function init() {
		//class initialization
		_populateSplash();
		_resizer(true);
		_addCareers();
		if (settings.bgTransition) _bgSwitcher(true);
		if (swfobject.hasFlashPlayerVersion(mc.os.config.cookie.preferences.trackVersion) === false) $countryContainer.hide();
		_bindEvents();
	}
	
	

	function _bindEvents() {
		$config.window.bind("resize", function() {
			clearTimeout($ResizeTimer);
			_resizer(false);
		});
		
		$("." + settings.classTrigger).hover(
			function () {
				$(this).addClass(settings.classTrigger + "_" + settings.classHover);
			},
			function () {
				$(this).removeClass(settings.classTrigger + "_" + settings.classHover);
			}
		);
		
		$("." + settings.classTrigger).bind({
			click: function() {
				var $this = $(this),
					$parent = $this.parent();
				
				if (_isActiveSection($parent) === false) self.transition.hide($parent, $this);
			}
		});
		
		$(settings.domPermissionTrigger).bind({
			click: function(e) {
				e.preventDefault();
				self.permission($(this));
			}
		});
		
		$("." + settings.classReset).bind({
			click: function() {
				var $this = $(this),
					$parent = $this.parents("." + settings.classSection);
				
				self.transition.hide($parent, $this);
			}
		});
	}
	
	function _bgSwitcher(firstTime) {
		clearTimeout($bgTimer);
		if (!firstTime) $config.body.addClass(settings.classMaestroBg);
		$bgTimer = setTimeout(function() {
			$maestroBG.fadeToggle(1000, function() {
				if (!$("#" + settings.classMaestroBg + ":visible").exists()) {
					$config.body.removeClass(settings.classMaestroBg);
				}
			});
			
			_bgSwitcher();
		}, settings.bgTimer);
	}
	
	function _resizer(firstTime) {
		var timing = firstTime ? 0 : settings.resizeTimer;
		
		$ResizeTimer = 	setTimeout(function() {
			var contentHeight = $config.content.outerHeight();
			if ($config.window.height() - contentHeight > 0) $config.content.css({top: ($config.window.height() - contentHeight)/2});
			$config.content.css({display: "block"});
			
			$backgrounds.css({height: $config.window.height()});
			
		}, timing);

	}
	
	function _isActiveSection(section) {
		return section.hasClass(settings.classSection + "_" + settings.classActive);
	}
	
	function _rememberCountry(info) {
		$countryOptIn = $(self.settings.domCountryOptIn);
		var choice = $countryOptIn.get(0).checked === true ? info.destLocale : false;
		return choice;
	}
	
	
	
	function _setPermission(data) {

		var preferences = {};
			preferences.tId = data.track || 0;
			preferences.locale = data.country || false;
			var string1 = data.temp;
			var temp = new Array();
            temp = string1.split('|');
            preferences.tempLocale = temp[0]+"_"+temp[1];
            mc.os.updatePreferences(preferences);

		/*if (data.dest) {
			var delimeter = data.dest.indexOf("?") > 0 ? "&" : "?";
			var trackingInfo = data.track.toString() == "1" ? delimeter + $config.cookie.trackingOptIn.name + "=1" : delimeter + $config.cookie.trackingOptIn.name + "=0";
			
			window.location = data.dest + trackingInfo;
		}*/
	}
	
	function _addCareers() {
		var careerHTML = "<li><a href='"+settings.careerLink+"'>Careers</a></li>" ;
		$("#globalFooter .primary").append(careerHTML);
	}
	
	function _populateSplash() {
		var countrylist = settings.countrylist;
		var menubar;

		$.each(countrylist.regions, function(key,regions){
			
			var region = regions.region;
			region = region.toLowerCase();
			region = region.split(/\b/)[0];
			//console.log(region);
			
			
			
			menubar = "<ul>";

			$.each(regions.countries,function(key,countries){
				
				if (countries.href){
					var hrefVal="/"+countries.href+"/";
				}
				/*else {
					var hrefVal="//"+countries.rootURL+"/";
				}*/
								
				var langhtml = "";				
				if (countries.language){
					var langhtml = ": <span>"+countries.language+"</span>"
				}
				
				if (region == "africa") {
					if (key === 21 || key === 43 || key === 65 || key === 87) {
						menubar = menubar + "</ul><ul>";
					}
				} else if (region == "asia") {
					if (key === 19 || key === 37 || key === 50 || key === 69 || key === 86) {
						menubar = menubar + "</ul><ul>";
					}
				} else if (key === 15 || key === 30 || key === 45 || key === 60 || key === 75) {
					menubar = menubar + "</ul><ul>";
				}
				
				menubar = menubar + '<li><a class="prompt" rel="'+countries.locale+'" href="'+hrefVal+'">'+countries.country+langhtml+'</a></li>';
								
				
				
				
			});
			menubar = menubar + "</ul>";
			
			//$("option",localeChoice).sort(sortAlpha).appendTo(localeChoice);
			
			var localeSection = $("#"+region+" .countries");
			localeSection.html(menubar);
			
			
		});
		
		
		
		
		
		
	}
	
	//end:private
	
	//start:public
	this.transition = {
		hide: function(section, trigger) {
			$container.fadeOut("fast", 
				function() {
					if (_isActiveSection(section) === false) {
						section.addClass(classSectionActive);
						$container.addClass(classWrapperActive);
					} else {
						section.removeClass(classSectionActive);
						$container.removeClass(classWrapperActive);
					}
					
					self.transition.show();
			});
		},
		show: function() {
			self.permissionDie();
			$container.fadeIn("fast", 
				function() {
					if ($.browser.msie) {
						$container.removeAttr("style");
					}
				}
			);
		}
	};
	
	this.permission = function(trigger) {
		if (!trigger) return false;
		self.permissionDie();
		
		var countrylist = settings.countrylist;
		var privacyLink = settings.privacyLink;
		var tosLink = settings.tosLink;
			$.each(countrylist.regions, function(key,regions){

				var region = regions.region;
					$.each(regions.countries,function(key,countries){

						if (countries.locale == trigger.attr("rel") ){
							privacyLink = countries.privacy;
							tosLink = countries.tos;
						}

			});
		});
		
			var info = {
				destText: trigger.html(),
				destLink: trigger.attr("href"),
				destLocale: trigger.attr("rel").split("_").join("|") + "|" + trigger.attr("href"),
				privacyLink: privacyLink,
				tosLink: tosLink
			};
		//position = trigger.position();
	
		if(info.destLink.indexOf("mastercard") > -1){
			info.destLink = window.location.host.indexOf("stage") > -1 ? "http://stage." + info.destLink : "http://www." + info.destLink;
		} else {
			info.destLink = window.location.host.indexOf("stage") > -1 ? "http://www.stage.mastercard.com" + info.destLink : "http://www.mastercard.com" + info.destLink;
		}
		
		info.destLocale = info.destLocale + info.destLink;
		
		//if (trigger.hasClass(settings.classPermissionPrompt) && swfobject.hasFlashPlayerVersion(mc.os.config.cookie.preferences.trackVersion)) {
			
			var moduleData = $.extend({}, settings.permissionTemplate, info);
			var output = new $.Module(moduleData).output;
			var permissionBox = $(output),
				insertionPoint = trigger.parents(".countries"),
				dimensionReference = trigger.parents("ul");
			
			insertionPoint.append(permissionBox);
			var permissionContainer = $("#permissionCookie").hide();
			
			var cssDim = $.extend ({}, dimensionReference.position(), {height: insertionPoint.height() - parseInt(permissionContainer.css("paddingTop")) - parseInt(permissionContainer.css("paddingBottom"))});
			permissionContainer.css(cssDim).show();
			insertionPoint.find(".overlayBlock").css(insertionPoint.position()).width(insertionPoint.width());
			
			if (permissionBox.find("input.check").exists) new $.Input({container: permissionBox.find("input.check")});
			
			if ($config.ie6) {
				permissionBox.css({position: "absolute"});
			}
			
			/*permissionBox.find(".button").bind({
				click: function(e) {
					e.preventDefault();
					var $this = $(this),
						choice = 0;
					if ($this.attr("id") == "trackingYes") {
						choice = 1;
					}
					
					countryChoice = _rememberCountry(info);
					_setPermission({country: countryChoice, track: choice, dest: info.destLink, temp: info.destLocale});
				}
			});*/
			
			permissionBox.find(".close").bind({
				click: function(e) {
					e.preventDefault();
					self.permissionDie();

					var countrylist = settings.countrylist;
		var privacyLink = settings.privacyLink;
		var tosLink = settings.tosLink;
			$.each(countrylist.regions, function(key,regions){

				var region = regions.region;
					$.each(regions.countries,function(key,countries){

						if (countries.locale == trigger.attr("rel") ){
							privacyLink = countries.privacy;
							tosLink = countries.tos;
							//console.log(privacyLink+" || "+tosLink);
						}

			});
		});

		//console.log(settings.countrylist);
		//console.log(trigger);
		//console.log(trigger.attr("rel"));
		/*if ($config.locale) {
			$config.localeSelector.find("option[rel=" + $config.locale.language + "_" + $config.locale.country + "]").attr("selected", "true");
		}*/
				}
			});
		
		//} else {
		//	var countryChoice = _rememberCountry(info);
		//	_setPermission({country: countryChoice, track: 1, dest: info.destLink});
		//}
		
	};
	
	this.permissionDie = function() {
		if ($("#" + settings.permissionTemplate.module.id).exists()) $("#" + settings.permissionTemplate.module.id).remove();
	};
	//end:public
	
	//start:init
	init();
	//end:init
	
};

}(jQuery));




