/**
 * @file		tools.js
 * @author 		JVST
 * @date		09/13/2011
 * @project		Pokemon Rumble Blast 
 */


/*
 * LANGUAGE 
 */
PLANG = {
	lang: '',
	news: [],
	currNews: 0,
	_xml: null,
	getLang: function(){
		var langCode = document.location.href;
		if(langCode.split('?lang=').length > 1){ langCode = langCode.split('?lang=')[1].split('&')[0];
		} else if(langCode.split('&lang=').length > 1){ langCode = langCode.split('&lang=')[1].split('&')[0];
		} else {
			if($.cookie("lang")!=null){ langCode = $.cookie("lang");
			} else { langCode = 'en_US'; }
		}
		langCode = langCode.split('#')[0];
		return langCode;
	},
	// Access no lang
	checkNoLang: function(){
		var noLang = false;
		var langCode = document.location.href;
		if(langCode.indexOf('?nolang=') > -1){ noLang = true; }
		return noLang;
	},
	// Load language
	loadLangFile: function(){
		//var lang = PLANG.getLang();
		this.lang = PLANG.getLang();
		var xmlurl = '';
		
		// If no lang direct access, english
		if(PLANG.checkNoLang()){ this.lang = "en_US"; }
		
		switch(this.lang) {
			case 'en_US': xmlurl = 'en_US.xml'; break;
			case 'en_UK': xmlurl = 'en_GB.xml'; break;
			case 'en_CA': xmlurl = 'en_CA.xml'; break;
			case 'en_AU': xmlurl = 'en_AU.xml'; break;
			case 'es_ES': xmlurl = 'es_ES.xml'; break;
			case 'fr_BE': xmlurl = 'fr_BE.xml'; break;
			case 'fr_CA': xmlurl = 'fr_CA.xml'; break;
			case 'fr_FR': xmlurl = 'fr_FR.xml'; break;
			case 'de_DE': xmlurl = 'de_DE.xml'; break;
			case 'be_NL': xmlurl = 'be_NL.xml'; break;
			case 'nl_NL': xmlurl = 'nl_NL.xml'; break;
			case 'be_FR': xmlurl = 'be_FR.xml'; break;
			case 'it_IT': xmlurl = 'it_IT.xml'; break;
			case 'pt_PT': xmlurl = 'pt_PT.xml'; break;
			case 'es_LA': xmlurl = 'es_LA.xml'; break;
			default		: xmlurl = 'en_US.xml'; break;
		}
		xmlurl = './xml/' + xmlurl;
		$.cookie("lang",this.lang);
		
		// If direct acces no lang, display panel choose language
		if(!PLANG.checkNoLang()){
			$.ajax({
				type: "GET", 
				url: xmlurl, 
				dataType: "xml",
				success: function(pXml){
					PLANG._xml = pXml;
					$(Pokemon.init);
				}
			});
		}
	},
	// Translate header
	_transHeader: function(){
		var preorderlink = '';
		// Meta tags
		var mt = $('meta[name=description]');
		mt.attr('content',$(this._xml).find("meta_description").text());
		document.title = $(this._xml).find("meta_title").text();
		// Logo
		$('#header #main_logo').attr('src',$(this._xml).find("logo").text());
		// Boxart
		if($(this._xml).find("boxart").length > 0) $('#header #img_boxart').attr('src', $(this._xml).find("boxart").text());
		// Meta 
		$(this._xml).find("metadata").each( function() {
			t = '<meta property="'+ $(this).attr('id') +'" content="'+$(this).text()+'"/>';
            mt = $(t).appendTo('head');
		});
		// Coins collector
		if( $(this._xml).find("coins_label_on_top").length > 0 && $(this._xml).find("coins_label_on_top").text() == 'true' ){
			$('div.header div.banner div.text.score').css('margin-top','25px');
			$('div.header div.banner div.text.scorelabel').css('margin-top','15px');
		}
		// Nav
		$(this._xml).find("gus").each( function() {
			if ($(this).attr('enabled') == '0') {
				$('#m1_wrap').hide();
				$('div#header').css('top','0px');
				$('.window').css("padding", "0");
			} else {
				var selectorTitle = '.gus ul li a';
				$(selectorTitle).css("background-image", "url(" + $(this).attr('path') + ")");
				$(this).find('button').each( 
					function(index){  
						$(selectorTitle).eq(index).attr('href', $(this).attr('href'));
						$(selectorTitle).eq(index).find('span').text($(this).attr('label'));
					}
				);
				$('#m1_wrap').show();
				$('div#header').css('top','48px');
			}
		});
		$(this._xml).find("preorder").each( function() {
			$(this).find('span').each( function(){ $($(this).attr('id')).html($(this).attr('text')); });
			preorderlink= $(this).find('link').text();
		});
		
		// If 4 lines in pre-order 
		if($('#header #text4').text().length > 0){ 
			$('div.header div.banner div.text.available pre').css('line-height','12px');
		}
			
		if($(this._xml).find("header_info_parents_fontsize")){
			$('#info_parents').css('font-size',$(this._xml).find("header_info_parents_fontsize").text());
		}
		
		// Info for parents roll-over / roll-out
		$('div.header div.infoforparents').mouseover(function(){ $(this).css('background-position', '-203px 0'); });
		$('div.header div.infoforparents').mouseout(function(){ $(this).css('background-position', '0 0'); });
		
		// if ES LA, no link on pre-order link
		if(PLANG.getLang() == 'en_US' || PLANG.getLang() == 'en_AU'){
			$('#boxart_link').attr('href', preorderlink);
			// Mouse Over
			$('div.header div.bannerLeft').mouseover(function(){ $(this).css('background-position', '-184px 0'); });
			// Mouse Out
			$('div.header div.bannerLeft').mouseout(function(){ $(this).css('background-position', '0 0'); });
		} else {
			$('#boxart_link').unbind('click');
			$('#boxart_link').removeAttr('href');
			$('#boxart_link').css('cursor', 'default');
			$('#boxart_link').removeClass('external');
		}
	},
	// Translate footer
	_transFooter: function(){
		$(PLANG._xml).find("menu").each( function(){ $(this).find('span').each( function(){ $($(this).attr('id')).html($(this).text()); }); });
		$(PLANG._xml).find("footer").each( function(){ $(this).find('span').each( function(){ $($(this).attr('id')).html($(this).text()); }); });
		$(PLANG._xml).find("footer").each( function(){ $(this).find('link').each( function(){ $($(this).attr('id')).attr('href', $(this).text()); }); });
		// Language flag
		$('.languages #language_flag').attr('src','images/flags/'+ this.lang +'.gif');
		// Menu
		$('#bottom_nav_items li.item').attr('style',$(PLANG._xml).find("menu_items_css").text());
		$('div.footer div.ticker').attr('style',$(PLANG._xml).find("legal_bar_css").text());
		// 
		if(PLANG.getLang() == 'es_LA'){
			$('#footer_legal').css({'width':'660px','margin-left':'100px'});
			$('#link_nintendo3ds .nintendo3ds').css('margin-left','50px');
			$('#link_nintendo .nintendo').css('margin-left','50px');
			$('#link_tpc .tpc').css('margin-left','50px');
		} else {
			// ESRB Logo
			$('.logos .esrb10').css('background','url("' + $(PLANG._xml).find("image_esrb").text() + '")');
		}
		
		// Main nav Roll over & Roll out effects
		$('#bottom_nav_items li a').mouseover(function(){ if($(this).parent().hasClass('on') == false){ $(this).addClass('main_nav_li_hover'); } });
		$('#bottom_nav_items li a').mouseout(function(){ if($(this).parent().hasClass('on') == false){ $(this).removeClass('main_nav_li_hover'); } });
		$('#bottom_nav_items li a').click(function(){ $(this).removeClass('main_nav_li_hover'); });
	},
	// Translate & set up Ticker
	_buildTicker: function(){
		// News titles
		_aTickerNews = [];
		var _iN = 0;
		var _sItem = "<ul class='list_ticker_elements' id='ticker_anim'>";
		$(PLANG._xml).find("news").each(function(){
			if($(this).attr('online') == 'true'){
				_sItem += "<li class='ticker_item' data-news-id='"+ $(this).attr('id') +"'><b>" + $(this).find('news_title').text() + '</b> ' + $(this).find('news_deck').text() + "</li>";
				_iN++;
			}
		});
		_sItem += "</ul>";
		$('#ticker').html(_sItem);
		// Set Ticker
		if(_iN > 1){
			$('#ticker_anim').list_ticker({ speed:5000, effect:'slide', run_once:false });
		}
		// Set News direct access
		$('.ticker_item').live(userX.clickEvt,function(){
			PLANG.currNews = $(this).attr('data-news-id');
			Hasher.setHash(Contents[Contents.length-1].id);
			// If current scene
			if(MainStage.currScene == Contents.length-1){
				Contents[Contents.length-1].subcontents[0].changeTab();
			}
		});
	},
	// Translate elements
	_transHiddenElts: function(){
		$(PLANG._xml).find("leaving").each( function(){ $(this).find('span').each( function(){ $($(this).attr('id')).html($(this).text()); }); });
	},
	// Translate scene
	transScene: function(pIdx){
		var _code = Contents[pIdx].id;
		$(PLANG._xml).find(_code).each(function(){
			$(this).find('subcontent').each(function(){
				$(this).find('span').each(function(){
					$($(this).attr('id')).html($(this).text());
				});
			});
		});
	},
	// Translate scene contents
	transReplaceScene: function(str,pIdx){
		var _code = Contents[pIdx].id;
		$(PLANG._xml).find(_code).each(function(){
			$(this).find('subcontent').each(function(){
				$(this).find('span').each(function(){ str = str.replace($(this).attr('id'),$(this).text()); });
			});
		});
		return str;
	},
	// Translate subcontent contents
	transReplaceSubcontent: function(str,pIdx,SCidx){
		var _code = Contents[pIdx].id;
		$(PLANG._xml).find(_code).each(function(){
			var _sCs = $(this).find('subcontent')[SCidx];
			$(_sCs).find('span').each(function(){
				if($(this).text() != ''){
					var regex = new RegExp($(this).attr('id'), "g");
					str = str.replace(regex,$(this).text()); 
				}
			});
		});
		return str;
	},
	// Video Translations
	getInstructions: function(){
		return $(this._xml).find('instructions').text();
	},
	getReplay: function(){
		return $(this._xml).find('replay').text();
	},
	getVideosMediaScene: function(){
		var _aV = [];
		$(PLANG._xml).find('videos_media_player').each(function(){
			$(this).find('video').each(function(){
				_aV.push( $(this).text() );
			});
		});
		return _aV;
	},
	getHomeVideo: function(){
		return $(this._xml).find('home_video').text();
	},
	buildNews: function(){
		var _aNews = [];
		$(PLANG._xml).find('news').each(function(){
			if($(this).attr('online') == 'true'){
				var _tmp = {id			: $(this).attr('id'),
							title		: $(this).find('news_title').text(),
							extra_css 	: $(this).find('extra_css_title').text(),
							description	: $(this).find('news_description').text(),
							deck 		: $(this).find('news_deck').text(),
							carousel	: [] };
				var _testTitle = $(this).find('news_title').text();
				var _carouselItems = [];
				$(this).find('item').each(function(){
					var _carousel = [];
					_carousel = { image	: $(this).find('image').text(), caption : $(this).find('caption').text() };
					_carouselItems.push( _carousel );
				});
				_tmp.carousel = _carouselItems;
				_aNews.push(_tmp);
			}
		});
		this.news = _aNews;
	},
	// Get news
	getNews: function(){
		return this.news;
	},
	// Get POPUPS
	transReplacePopupContent: function(str,pPart){
		$(this._xml).find(pPart).each(function(){
			$(this).find('span').each(function(){
				if($(this).text() != ''){
					var regex = new RegExp($(this).attr('id'), "g");
					str = str.replace(regex,$(this).text());
				} 
			});
		});
		return str;
	}
};



Flasher = {
	flash: function(n){
		$('#overlay_power_flash').show().fadeOut(100);//animate({opacity: 0.5}, 100).fadeOut(300).css({'opacity': 1})
	}
}





/**
 * Roll-over wallpapers
 * Pokemon Rumble Blast website
 * 2011
 */
$.fn.rolloverWallpaper = function(){
	var lengthOfFade = 300; // ms
	return this.each(function(){
		$(this).animate({"opacity": 0}, 0);
		$(this).hover(function(){
			$(this).stop().animate({"opacity": .7});
		}, function(){
			$(this).stop().animate({"opacity": 0});
		});
	});
}





/**
* jQuery Cookie plugin
*
* Copyright (c) 2010 Klaus Hartl (stilbuero.de)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/
jQuery.cookie = function (key, value, options) {
    // key and at least value given, set cookie...
    if (arguments.length > 1 && String(value) !== "[object Object]") {
        options = jQuery.extend({}, options);
        if (value === null || value === undefined) {
            options.expires = -1;
        }
        if (typeof options.expires === 'number') {
            var days = options.expires, t = options.expires = new Date();
            t.setDate(t.getDate() + days);
        }
        value = String(value);
        return (document.cookie = [
            encodeURIComponent(key), '=',
            options.raw ? value : encodeURIComponent(value),
            options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
            options.path ? '; path=' + options.path : '',
            options.domain ? '; domain=' + options.domain : '',
            options.secure ? '; secure' : ''
        ].join(''));
    }
    // key and possibly options given, get cookie...
    options = value || {};
    var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
    return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
};





/*
* jquery-google-analytics plugin
*
* A jQuery plugin that makes it easier to implement Google Analytics tracking,
* including event and link tracking.
*
* Adds the following methods to jQuery:
*   - $.trackPage() - Adds Google Analytics tracking on the page from which
*     it's called.
*   - $.trackPageview() - Tracks a pageview using the given uri. Can be used for tracking Ajax requests: http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=55519
*   - $.trackEvent() - Tracks an event using the given parameters.
*   - $('a').track() - Adds event tracking to element(s).
*   - $.timePageLoad() - Measures the time it takes  an event using the given parameters.
*
* Features:
*   - Improves page load time by loading Google Analytics code without blocking.
*   - Easy and extensible event and link tracking plugin for jQuery and Google Analytics
*   - Automatic internal/external link detection. Default behavior is to skip
*     tracking of internal links.
*   - Enforces that tracking event handler is added to an element only once.
*   - Configurable: custom event tracking, skip internal links, metadata
*     extraction using callbacks.
*
* Copyright (c) 2008-09 Christian Hellsten
*
* Plugin homepage:
*   http://aktagon.com/projects/jquery/google-analytics/
*   http://github.com/christianhellsten/jquery-google-analytics/
*
* Examples:
*   http://aktagon.com/projects/jquery/google-analytics/examples/
*   http://code.google.com/apis/analytics/docs/eventTrackerGuide.html
*
* Repository:
*   git://github.com/christianhellsten/jquery-google-analytics.git
*
* Version 1.1.3
*
* Tested with:
*   - Mac: Firefox 3, Safari 3
*   - Linux: Firefox 3
*   - Windows: Firefox 3, Internet Explorer 6
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Credits:
*   - http://google.com/analytics
*   - http://lyncd.com: 
*       Idea for trackPage method came from this blog post: http://lyncd.com/2009/03/better-google-analytics-javascript/
*/
(function($) {

  var pageTracker;

  /**
   * Enables Google Analytics tracking on the page from which it's called. 
   *
   * Usage:
   *  <script type="text/javascript">
   *    $.trackPage('UA-xxx-xxx', options);
   *  </script>
   *
   * Parameters:
   *   account_id - Your Google Analytics account ID.
   *   options - An object containing one or more optional parameters:
   *     - onload - boolean - If false, the Google Analytics code is loaded
   *       when this method is called instead of on window.onload.
   *     - status_code - The HTTP status code of the current server response.
   *       If this is set to something other than 200 then the page is tracked
   *       as an error page. For more details: http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=86927
   *     - callback  - function to be executed after the Google Analytics code is laoded and initialized
   *
   */
  $.trackPage = function(account_id, options) {
    var host = (("https:" === document.location.protocol) ? "https://ssl." : "http://www.");
    var script;

    // Use default options, if necessary
    var settings = $.extend({}, {onload: true, status_code: 200}, options);
    var src  = host + 'google-analytics.com/ga.js';

    function init_analytics() {
      if (typeof _gat !== undefined) {
    	debug('Google Analytics loaded');
    	pageTracker = _gat._getTracker(account_id);
        if(settings.status_code === null || settings.status_code === 200) {
          pageTracker._trackPageview();
        } else {
          debug('Tracking error ' + settings.status_code);
          pageTracker._trackPageview("/" + settings.status_code + ".html?page=" + document.location.pathname + document.location.search + "&from=" + document.referrer);
        }
        if($.isFunction(settings.callback)){
          settings.callback();
        }
      }
      else { 
        throw "_gat is undefined"; // setInterval loading?
      }
    }

    load_script = function() {
      $.ajax({
        type: "GET",
        url: src,
        success: function() {        
          init_analytics(); 
        },
        dataType: "script",
        cache: true // We want the cached version
      });
    };
    
    // Enable tracking when called or on page load?
    if(settings.onload === true || settings.onload === null) {
      $(window).load(load_script);
    } else {
      load_script();
    }
  };

  /**
   * Tracks an event using the given parameters. 
   *
   * The trackEvent method takes four arguments:
   *
   *  category - required string used to group events
   *  action - required string used to define event type, eg. click, download
   *  label - optional label to attach to event, eg. buy
   *  value - optional numerical value to attach to event, eg. price
   *  skip_internal - optional boolean value. If true then internal links are not tracked.
   *
   */
  $.trackEvent = function(category, action, label, value) {
    if(typeof pageTracker === 'undefined') {
      debug('FATAL: pageTracker is not defined'); // blocked by whatever
    } else {
      pageTracker._trackEvent(category, action, label, value);
    }
  };

  /**
   * Tracks a pageview using the given uri.
   *
   */
  $.trackPageview = function(uri) {
    if(typeof pageTracker === 'undefined') {
      debug('FATAL: pageTracker is not defined');
    } else {
      pageTracker._trackPageview(uri);
    }
  };

  /**
   * Adds click tracking to elements. Usage:
   *
   *  $('a').track()
   *
   */
  $.fn.track = function(options) {
    /**
     * Checks whether a setting value is a string or a function.
     * 
     * If second parameter is a string: returns the value of the second parameter.
     * If the second parameter is a function: passes the element to the function and returns function's return value.
     */
    function evaluate(element, text_or_function) {
      if(typeof text_or_function === 'function') {
        text_or_function = text_or_function(element);
      }
      return text_or_function;
    }

    // Add event handler to all matching elements
    return this.each(function() {
      var element = $(this);

      // Prevent an element from being tracked multiple times.
      if (element.hasClass('tracked')) {
        return false;
      } else {
        element.addClass('tracked');
      } 

      // Use default options, if necessary
      var settings = $.extend({}, $.fn.track.defaults, options);

      // Merge custom options with defaults.
      var category = evaluate(element, settings.category);
      var action   = evaluate(element, settings.action);
      var label    = evaluate(element, settings.label);
      var value    = evaluate(element, settings.value);
      var event_name = evaluate(element, settings.event_name);
      
      var message = "category:'" + category + "' action:'" + action + "' label:'" + label + "' value:'" + value + "'";
      
      debug('Tracking ' + event_name + ' ' + message);

      // Bind the event to this element. 
      // TODO Use .live since jQuery 1.4 now supports it better.
      element.bind(event_name + '.track', function() {       
        // Should we skip internal links? REFACTOR
        var skip = settings.skip_internal && (element[0].hostname === location.hostname);
      
        if(!skip) {
          $.trackEvent(category, action, label, value);
          debug('Tracked ' + message);
        } else {
          debug('Skipped ' + message);
        }

        return true;
      });
    });
  };

  /**
   * Prints to Firebug console, if available. To enable:
   *   $.fn.track.defaults.debug = true;
   */
  function debug(message) {
    if ($.fn.track.defaults.debug && typeof console !== 'undefined' && typeof console.debug !== 'undefined') {
      //console.debug(message);
    }
  }

  /**
   * Default (overridable) settings.
   */
  $.fn.track.defaults = {
    category      : function(element) { return (element[0].hostname === location.hostname) ? 'internal':'external'; },
    action        : 'click',
    label         : function(element) { return element.attr('href'); },
    value         : null,
    skip_internal : true,
    event_name    : 'click',
    debug         : false
  };
}(jQuery));











/*
 * Debugger
 */
DB = {
	_enabled: !0,
	_pause: 0,
	_params: null,
	init: function(pParams){
		DB._params = pParams;
		DB._createDebugPanel();
		$('#debug_panel #debug_link_clear_action').click(function(){
			DB._clearTrace();
		});
		$('#debug_panel #debug_link_pause_action').click(function(){
			if($('#debug_panel #debug_link_pause_action').attr('data-action') == 'pause'){
				DB._pauseTrace();
				$('#debug_panel #debug_link_pause_action').attr('data-action','resume');
				$('#debug_panel #debug_link_pause_action').text('resume');
			} else {
				DB._resumeTrace();
				$('#debug_panel #debug_link_pause_action').attr('data-action','pause');
				$('#debug_panel #debug_link_pause_action').text('pause');
			}
		});
		$('#debug_panel #debug_link_hide_action').click(function(){
			if($('#debug_panel #debug_link_hide_action').attr('data-action') == 'hide'){
				DB._hideConsole();
			} else {
				DB._showConsole();
			}
		});
	},
	log: function(a){
		if(DB._enabled) console.log(a);
	},
	t: function(c){
		if(!DB._pause){
			$('#debug_panel #debug_trace').append('<br/>' + c);
			$('#debug_panel #debug_trace').scrollTop($("#debug_panel #debug_trace").prop("scrollHeight"));
		}
	},
	_hideConsole: function(){
		$('#debug_panel').css('left','-310px');
		$('#debug_panel #debug_link_hide_action').attr('data-action','show');
		$('#debug_panel #debug_link_hide_action').text('show');
	},
	_showConsole: function(){
		$('#debug_panel').css('left','0px');
		$('#debug_panel #debug_link_hide_action').attr('data-action','hide');
		$('#debug_panel #debug_link_hide_action').text('hide');
	},
	_clearTrace: function(){
		$('#debug_panel #debug_trace').html('<b>Debug<b>');
	},
	_pauseTrace: function(){
		DB._pause = 1;
	},
	_resumeTrace: function(){
		DB._pause = 0;
	},
	_createDebugPanel: function(){
		var panel = '<div id="debug_panel"><div id="debug_trace"><span><b>Debug<b></span></div>' +
					'<div id="debug_link_clear"><a href="javascript:;" id="debug_link_clear_action">Clear</a></div>' + 
					'<div id="debug_link_pause"><a href="javascript:;" id="debug_link_pause_action" data-action="pause">Pause</a></div>' + 
					'<div id="debug_link_hide"><a href="javascript:;" id="debug_link_hide_action" data-action="hide">Hide</a></div></div>';
		$('#container').before(panel);
		if(DB._params != undefined){
			if(DB._params.hided) DB._hideConsole();
		}
	}
};





/*
 * Coins Manager
 */
CoinsManager = {
	_coinSrc: "<div class='coin coin_click'></div>",
	_nbCoinsWon:0,
	init: function(){
		$('.coin_click').live(userX.clickEvt, function(evt){
			$(this).unbind('click');
			evt.preventDefault();
			evt.stopPropagation();
			// Increment number of coins won per scene / subcontent
			var cIdx = $(this).parent().attr('data-content');
			var nTotalCoins;
			DB.t('data-subcontent::'+$(this).parent().attr('data-subcontent'));
			var _content = ($(this).parent().attr('data-subcontent') == undefined || $(this).parent().attr('data-subcontent') == '') ? Contents[cIdx] : Contents[cIdx].subcontents[$(this).parent().attr('data-subcontent')];
			nWonCoins = $(this).parent().find('.coin').length;
			nTotalCoins = _content.coins;
			if( nWonCoins == nTotalCoins ){ _content.onFirstCoinWon(); }
			else if( nWonCoins == 1 ){ _content.onAllCoinsWon(); }
			CoinsManager.wonCoin();
			_content.coinsIdx++;
			CoinsManager._removeCoin(this);
			return false;
		});
	},
	getTotalCoinsWon: function(){
		return CoinsManager._nbCoinsWon;
	},
	// Has won a coin
	wonCoin: function(){
		CoinsManager._nbCoinsWon++;
		RewardsManager.checkRewardUnlocked( CoinsManager._nbCoinsWon );
	},
	// Add coins to a scene
	addCoins: function(containerIdx,subcontentIdx){
		var nC, 
			nCoinsAlreadyWon,
			nAlreadyDisplayed;
		if(subcontentIdx != undefined){
			nC = Contents[containerIdx].subcontents[subcontentIdx].coins; 
			nCoinsAlreadyWon = Contents[containerIdx].subcontents[subcontentIdx].coinsIdx;
			nAlreadyDisplayed = Contents[containerIdx].subcontents[subcontentIdx].coinsDisplayed;
		} else {
			nC = Contents[containerIdx].coins;
			nCoinsAlreadyWon = Contents[containerIdx].coinsIdx;
			nAlreadyDisplayed = Contents[containerIdx].coinsDisplayed;
		}
		
		if( nCoinsAlreadyWon >= nC || nAlreadyDisplayed ){ return false; }
		
		var cont = '#coins_container_'+containerIdx;
		if(subcontentIdx != undefined) $(cont).attr('data-subcontent',subcontentIdx);
		// ANIMATION
		for(iC=0;iC<nC;iC++){
			var newCoin = $(cont).append(CoinsManager._coinSrc);
		}
		newCoin.children(".coin").spinningCoin({maxSpins: 11});
		
		// Set coins displayed to true
		if(subcontentIdx != undefined) Contents[containerIdx].subcontents[subcontentIdx].coinsDisplayed = true;
		else Contents[containerIdx].coinsDisplayed = true;
	},
	//
	removeCoins: function(containerIdx,subcontentIdx){
		var cont = '#coins_container_'+containerIdx;
		$(cont).children().hide('fast');
		// 
		if(subcontentIdx != undefined) Contents[containerIdx].subcontents[subcontentIdx].coinsDisplayed = false;
		else Contents[containerIdx].coinsDisplayed = false;
	},
	// Check number of coins won
	hasWonEnoughCoins: function(pM){
		return (CoinsManager._nbCoinsWon > pM);
	},
	// Remove a coin (after click event)
	_removeCoin: function(elt){
		//$(elt).fadeOut('fast',function(){
			CoinsManager._updateCounter();
			$(elt).remove();
		//});
	},
	// Upcate coins won counter
	_updateCounter: function(){
		$('#txt_number_coins').text(CoinsManager.getTotalCoinsWon());
	}
}



PopupManager = {
	openPasswords: function(){
		if($(PLANG._xml).find("get_passwords_button_visible").text() == 'true'){
			var c,
				f,
				_nPwd = 0;
			var _sPwdsList = '';
			
			// Get passwords
			$(PLANG._xml).find('item_password').each(function(){
				if($(this).attr('online') == 'true'){
					var _nMargLeft = _nPwd * 400;
					_sPwdsList += '<li style="width:400px;height:280px;margin-left:'+ _nMargLeft +'px;">';
					_sPwdsList += '<img src="' + $(this).find('pwd_image').text() + '"/>';
					_sPwdsList += '<div class="desc">' + $(this).find('pwd_link').text() + '</div>';
					_sPwdsList += '</li>';
					_nPwd++;
				} 
			});
			
			c = '<div style="width:844px;height:344px;"><div class="pokecarousel default leftbackground" style="position:absolute;margin-top:32px;width:380px;height:250px;z-index:12.1;"><div class="top"><div class="left"></div><div class="center" style="width:363px;"></div><div class="right"></div></div>' + 
					'<div class="middle"><div class="left" style="height:244px;"></div><div class="center" style="width: 363px; height: 244px;"></div><div class="right" style="height: 244px;"></div></div>' + 
					'<div class="bottom"><div class="left"></div><div class="center" style="width: 363px;"></div><div class="right"></div></div></div>' + 
				"<div class='pokecarousel default leftcontent' style='position:absolute;margin-left:30px;margin-top:55px;width:340px;height:210px;z-index:12.2;'><h2>{TRANS_8_POPUP_PWDS_TITLE}</h2><div class='desc'>{TRANS_8_POPUP_PWDS_DESC}</div></div>"+
				'<div class="pokecarousel default rightbackground" style="position:absolute;margin-left:380px;margin-top:0px;width:450px;height:295px;z-index:12.1;"><div class="top"><div class="left"></div><div class="center" style="width: 434px;"></div><div class="right"></div></div>' +
					'<div class="middle"><div class="left" style="height:303px;"></div><div class="center" style="width: 434px; height:303px;"></div><div class="right" style="height:303px;"></div></div>' +
					'<div class="bottom"><div class="left"></div><div class="center" style="width: 434px;"></div><div class="right"></div></div></div>' + 
				'<div style="overflow:hidden;text-align:left;"><ul id="password_pop_1_0" class="pokecarousel default" style="position: absolute;overflow:hidden;margin-left:400px;margin-top:19px;width:400px;height:265px;z-index:12.2;">' + _sPwdsList +
				'</ul></div>' + 
				'<div class="pokecarousel default buttons" style="margin-left:800px;margin-top:100px;position:absolute;height:92px;z-index:12.3;"><div id="1_0_left_arrow_pwd_popup" class="buttonLeft"></div><div id="1_0_right_arrow_pwd_popup" class="buttonRight"></div></div></div>';
			f = PLANG.transReplacePopupContent(c, 'popup_passwords');
			$.fancybox(f, {
				'autoDimensions'	: true,
				'width'         	: 850,
				'height'        	: 350,
				'transitionIn'		: 'none',
				'transitionOut'		: 'none',
				'padding'			: 0,
				'onStart'			: function(){
					$('#fancybox-bg-e').css('background-image','none');
					$('#fancybox-bg-w').css('background-image','none');
					$('#fancybox-bg-sw').css('background-image','none');
					$('#fancybox-bg-n').css('background-image','none');
					$('#fancybox-bg-ne').css('background-image','none');
					$('#fancybox-bg-s').css('background-image','none');
					$('#fancybox-bg-se').css('background-image','none');
					$('#fancybox-close').css('right','30px');
					$('#fancybox-content').css('border','none');
					$('#fancybox-outer').css('background','none');
				},
				'onComplete'		: function(){
					$("#password_pop_1_0").pcarousel({leftArrow:'#1_0_left_arrow_pwd_popup', rightArrow:'#1_0_right_arrow_pwd_popup', scene:'fun-stuff', subscene:'popup_passwords'});
				}
			});
		}
	}	
}



/*
 * Rewards Manager
 */
RewardsManager = {
	checkRewardUnlocked: function(nC){
		var t = -1,
			c,
			f;
		switch(nC){
			case 10:
				c = '<div class="popup_wallpaper"><div class="popupwrapper">' +
							'<div class="title"><h2>{TRANS_8_POPUP_TITLE}<br/>{TRANS_8_DESCRIPTION}</h2></div>' +
							'<div class="image"><img src="{TRANS_8_IMAGE}" alt=""></img></div>' +
							'<ul class="options">' +
								'<li><a href="{TRANS_8_IMAGE_LINK_SIZE_0}" target="_blank">1280x1024</a></li>' +
								'<li><a href="{TRANS_8_IMAGE_LINK_SIZE_1}" target="_blank">1024x768</a></li>' +
								'<li><a href="{TRANS_8_IMAGE_LINK_SIZE_2}" target="_blank">1440x900</a></li>' +
							'</ul></div></div>';
				f = PLANG.transReplacePopupContent(c, 'popup_congratulations_wallpaper');
				t = 0; 
				h = 355;
				w = 512;
				if(t!=-1) RewardsManager._loadRewardPopup(f,w,h);
				break;
			case 25: 
				c = '<div class="popup_wallpaper"><div class="popupwrapper">' +
					'<div class="title"><h2>{TRANS_8_POPUP_TITLE}<br/>{TRANS_8_DESCRIPTION}</h2></div>' +
					'<div class="image"><img src="{TRANS_8_IMAGE}" alt=""></img></div>' +
					'<ul class="options">' +
						'<li><a href="{TRANS_8_IMAGE_LINK_RUMBLE_MAC}" target="_blank">Mac</a></li>' +
						'<li><a href="{TRANS_8_IMAGE_LINK_RUMBLE_PC}" target="_blank">Pc</a></li>' +
					'</ul></div></div>';
				f = PLANG.transReplacePopupContent(c, 'popup_congratulations_screensaver');
				t = 1;
				h = 355;
				w = 512;
				if(t!=-1) RewardsManager._loadRewardPopup(f,w,h);
				break;
			case 45: 
				c = "<div style='width:844px;height:344px;'><div class='pokecarousel default leftbackground' style='position:absolute;margin-top:60px;width:380px;height:200px;z-index:12.1;'>"+
					"<div class='top'><div class='left'></div><div class='center' style='width:363px;'></div><div class='right'></div></div>"+
					"<div class='middle'><div class='left' style='height:210px;'></div><div class='center' style='width: 363px; height: 210px;'></div><div class='right' style='height: 210px;'></div></div>"+
					"<div class='bottom'><div class='left'></div><div class='center' style='width: 363px;'></div><div class='right'></div></div></div>"+
					"<div class='pokecarousel default leftcontent' style='float:left;margin-left:20px;margin-top:78px;width:340px;height:170px;z-index:12.2;'>"+
					"<h2 style='margin: 0px 0; padding: 0; font-family: LithoAntiqueDemiBold, Arial, sans-serif; font-size: 20px; font-weight: normal; color: #900;'>{TRANS_8_POPUP_TITLE}</h2><div class='desc' style='font-size:12px;'><strong>{TRANS_8_POPUP_TITLE_STEP1}</strong>{TRANS_8_POPUP_DESC_STEP1}<br/>"+
					"<strong>Step 2.</strong>{TRANS_8_POPUP_DESC_STEP2}<br/>"+
					"<strong>Step 3.</strong>{TRANS_8_POPUP_DESC_STEP3}</div></div>"+
					"<div class='pokecarousel default rightbackground' style='position: absolute;margin-left:380px;margin-top:0px;width:450px;height:340px;z-index:12.1;'>"+
					"<div class='top'><div class='left'></div><div class='center' style='width: 434px;'></div><div class='right'></div></div>"+
					"<div class='middle'><div class='left' style='height: 334px;'></div><div class='center' style='width: 434px; height: 334px;'></div><div class='right' style='height: 334px;'></div></div>"+
					"<div class='bottom'><div class='left'></div><div class='center' style='width: 434px;'></div><div class='right'></div></div>"+
					"</div>" +
					"<div id='toypokemon_1_0' class='pokecarousel-content' style='position: absolute;margin-left:400px;margin-top:6px;width:400px;z-index:12.2; text-align: center;'>"+
					"<div style='margin-bottom:8px;'><span style='margin: 4px 0; padding: 0; font-family: LithoAntiqueDemiBold, Arial, sans-serif; font-size: 20px; font-weight: normal; color: #900;'>{TRANS_8_POPUP_TITLE_CONGRATS}</span><br/>" +
					"<span style='{TRANS_8_EXTRA_CSS}color:#900;'>{TRANS_8_POPUP_SUBTITLE_CONGRATS}</span></div>"+
					"<img alt='' src='{TRANS_8_POPUP_PWD_IMAGE}'>"+
					"<h1 style='margin: 4px 0; padding: 0; font-family: LithoAntiqueDemiBold, Arial, sans-serif; font-size: 25px; font-weight: normal; color: #900;'>{TRANS_8_POPUP_PWD}</h1>"+
					"</div></div>";
				f = PLANG.transReplacePopupContent(c, 'popup_congratulations_password');
				t = 2; 
				h = 350;
				w = 850;
				// Track event
				PET.track({type:'event',category:PET.cat_coins, action:PLANG.lang+'|'+PET.act_wonAllCoins, label:PLANG.lang+'|'+PET.act_wonAllCoins});
				// Popup
				$.fancybox(f, {
					'autoDimensions'	: true,
					'width'         	: w,
					'height'        	: h,
					'transitionIn'		: 'none',
					'transitionOut'		: 'none',
					'hideOnOverlayClick': false,
					'onStart'			: function(){
						$('#fancybox-bg-nw').css('background-image','none');
						$('#fancybox-bg-e').css('background-image','none');
						$('#fancybox-bg-w').css('background-image','none');
						$('#fancybox-bg-sw').css('background-image','none');
						$('#fancybox-bg-n').css('background-image','none');
						$('#fancybox-bg-ne').css('background-image','none');
						$('#fancybox-bg-s').css('background-image','none');
						$('#fancybox-bg-se').css('background-image','none');
						$('#fancybox-close').css('right','30px');
						$('#fancybox-content').css('border','none');
						$('#fancybox-outer').css('background','none');
					},
					'onComplete'		: function(){
						//if(BrowserPokemon.isIE7()){
							$.fancybox.resize();
							$.fancybox.center();
						//}
					}
				});
				break;
		} 
	},
	_loadRewardPopup: function(sC,pW,pH){
		if(MainStage.currScene == 0){ $("#home_player")[0].stopVideo(); }
		$.fancybox(sC, {
				'autoDimensions'	: true,
				'width'         	: pW,
				'height'        	: pH,
				'transitionIn'		: 'none',
				'transitionOut'		: 'none',
				'hideOnOverlayClick': false,
				'onComplete'		: function(){
					//if(BrowserPokemon.isIE7()){
						$.fancybox.resize();
						$.fancybox.center();
					//}
				}
			}
		);
	}
}


/*
 * Hasher
 */
Hasher = {
	getHash: function(){
		return window.location.hash.substr(1).split("/");
	},
	getMainContent: function(){
		return window.location.hash.substr(1).split("/").shift();
	},
	getSubContent: function(){
		var _aH = window.location.hash.substr(1).split("/");
		if(_aH[1] != undefined){
			return _aH[1];
		} else {
			return "";
		}
	},
	setHash: function(h){
		window.location.hash = h;
	}
};


/**
 * jQuery Generic Plugin Module
 * Version 0.1
 * Copyright (c) 2011 Cyntax Technologies - http://cyntaxtech.com
 * Licensed under the Cyntax Open Technology License
 *     http://code.cyntax.com/licenses/cyntax-open-technology
 */
(function( $ ) {
	$.jQueryPlugin = function( name ) {
		$.fn[name] = function( options ) {
			var args = Array.prototype.slice.call( arguments , 1 );
			if( this.length ) {
				return this.each( function() {
					var instance = $.data( this , name ) || $.data( this , name , new cyntax.plugins[name]( this , options )._init() );
					if( typeof options === "string" ){
						options = options.replace( /^_/ , "" );
						if( instance[options] ) {
							instance[options].apply( instance , args );
						}
					}
				});
			}
		};
	};
})( jQuery );

var cyntax = {
	plugins : {}
};

/**
 * jQuery Timer Plugin
 * Project page - http://code.cyntaxtech.com/plugins/jquery-timer
 * Version 0.1
 * Copyright (c) 2011 Cyntax Technologies - http://cyntaxtech.com
 * dependencies: jquery.plugin.js
 * Licensed under the Cyntax Open Technology License
 *     http://code.cyntax.com/licenses/cyntax-open-technology
 * ------------------------------------
 * For details, please visit:
 * http://code.cyntaxtech.com/plugins/jquery-timer
 */
(function( $ ){
	cyntax.plugins.timer = function( ele , options ){
		this.$this = $( ele );
		this.options = $.extend( {} , this.defaults , options );
		this.timer_info = {id:null, index:null, state:0};
	};
	cyntax.plugins.timer.prototype = {
		defaults : { 
			delay: 1000,      // delay in milliseconds (optional)
			repeat: false,    // true to repeat the timer continuously, or a number for repeating this number of times (optional)
			autostart: true,	// timer starts as soon as it is created, set false to start manually
			callback: null,   // callback (optional)
			url: '',          // url to load content from (optional)
			post: ''          // post data (optional)
		},
		_init : function(){
			if (this.options.autostart) {
				this.timer_info.state = 1;
				this.timer_info.id = setTimeout( $.proxy( this._timer_fn, this ) , this.options.delay);
			}
			return this;
		},
		_timer_fn : function() {
				if (typeof this.options.callback == "function")
					$.proxy( this.options.callback, this.$this ).call(this, ++this.timer_info.index);
				else if (typeof this.options.url == "string") {
					ajax_options = {
						url: this.options.url,
						context: this,
						type: (typeof this.options.post == "string" && typeof this.options.post != "" == "" ? "POST": "GET"),
						success: function(data, textStatus, jqXHR) {
							this.$this.html(data);
						}
					};
					if (typeof this.options.post == "string" && typeof this.options.post != "")
						ajax_options.data = this.options.post;
					console.log(this.options.url);
					console.log(ajax_options);
					$.ajax(ajax_options);
				}
				if ( this.options.repeat && this.timer_info.state == 1 &&
					(typeof this.options.repeat == "boolean" || parseInt(this.options.repeat) > this.timer_info.index) )
					this.timer_info.id = setTimeout( $.proxy( this._timer_fn, this ) , this.options.delay );
				else
					this.timer_id = null;
		},
		start : function() {
			if (this.timer_info.state == 0) {
				this.timer_info.index = 0;
				this.timer_info.state = 1;
				this.timer_id = setTimeout( $.proxy( this._timer_fn, this ) , this.options.delay);
			}
		},
		
		stop : function(){
			if ( this.timer_info.state == 1 && this.timer_info.id ) {
				clearTimeout(this.timer_info.id);
				this.timer_id = null;
			}
			this.timer_info.state = 0;
		},
		
		pause : function() {
			if ( this.timer_info.state == 1 && this.timer_info.id )
				clearTimeout(this.timer_info.id);
			this.timer_info.state = 0;
		},
		
		resume : function() {
			this.timer_info.state = 1;
			this.timer_id = setTimeout( $.proxy( this._timer_fn, this ) , this.options.delay);
		}
	};

	$.jQueryPlugin( "timer" );
	
})( jQuery );



/*
Spinning Coin plugin
*/
$.fn.spinningCoin = function(params){
	
	var defaultParams = {
		maxSpins: 0
	};
	
	var settings = $.extend({}, defaultParams, params);
	
	var o = $(this);
	
	var fps = 20;
	
	var currentBP = 0;
	
	var numberOfFrames = 8;
	var widthOfFrames = 70;
		
	return this.each(function(){
		var currentSpin = 0;
		
		if(o.data("interval")){
			clearInterval(o.data("interval"));
		}
		
		var interval = setInterval(function(){
			var bp = currentBP + widthOfFrames;
			if(bp > numberOfFrames * widthOfFrames){
				bp = 0;
			}
			currentBP = bp;
			
			//o.css({"background-position": -currentBP + "px 0px"});
			o.css({"background-position": -currentBP + "px 0px"});
			
			if(settings.maxSpins != 0 && !(currentSpin++ < settings.maxSpins * numberOfFrames)){
				clearInterval(interval);
			}
		}, 1000/fps);
		
		o.data("interval", interval);
	});
}
