if(!window['pgp']) {
  window['pgp'] = {};
}

pgp.baseUrl    = "http://static.maxilead.fr/loader/";
pgp.o          = {"partner":"lefigaro","selector":"#comparateur-mv2"};
pgp.version    = "01";
pgp.builder    = function(node) {};

pgp.builder = function(node) {
  node
    .html('<a href="http://assurance-vie.lefigaro.fr/">'
	    + '<img src="' + pgp.baseUrl + '/images/lefigaro/banner.png" alt="lefigaro - comparateur assurance-vie" />'
	    + '</a>')
    .addClass('pgp_mini_form');
}
/**
 * Print debug message
 *
 * @param string message
 * @param integer level
 */
pgp.debug = function(message, level) {
  var funcs = ['log','debug','info','warn','error'];
  if(undefined == level) {
    level = 0;
  }
  else if(level < 0) {
    level = 0;
  }
  else if(level > 4) {
    level = 4;
  }
  
  if(window['console']) {
    console[funcs[level]](message);
  }
  else if(level > 2) {
    alert(message);
  }
}

/**
* Only returns true when the external script has been
* loaded in to the DOM.  It uses arguments.callee.caller
* to work out which function is the callback.
*
* @param url {String} URL of external script
* @param obj {String} The name of a function or variable
* within the external script to test for.
* @license: Creative Commons License -
* ShareAlike http://creativecommons.org/licenses/by-sa/3.0/
* @author Remy Sharp / leftlogic.com
*/
pgp.loadScript = function(url, obj, callback) {
  pgp.debug('Request for loading script '+url, 2);

  if(undefined == callback) {
    callback = function(){
      pgp.debug(obj+' loaded.', 2);
    };
  }
  
  if(!url.match(/^http(s)?:\/\//)) url = pgp.baseUrl+url;
  
  var s, ok, timer, timeout, doc = document;

  // if the object/function doesn't exist and we've not tried to load it
  // then pull it in and fire the calling function once complete
  var test = eval(obj);
  
  if ((typeof test == 'undefined') && !window['loading' + obj]) {
    window['loading' + obj] = true;

    if (!doc.getElementById('_' + obj)) {
      s = doc.createElement('script');
      s.src = url;
      s.id = '_' + obj;
      doc.getElementsByTagName('head')[0].appendChild(s);
    }

    timer = setInterval(function () {
      var ok = false;
      try {
        ok = (typeof eval(obj) != 'undefined');
      } catch (e) {}

      if (ok) {
        clearInterval(timer);
        clearTimeout(timeout);
        callback.call();
      }
    }, 200);

    // timeout function in case 404 or something wrong
    timeout = setTimeout(function() {
      pgp.debug('Cannot load script '+url, 4);
      clearInterval(timer);
    }, 20000);

    // we're loading in the script now, so we're currently waiting
    return true;
  }
  else if (typeof test == 'undefined') {
    // object not defined yet, so we're still waiting
    return true;
  }
  else {
    // it's already loaded
    callback.call();
    return false;
  }
};

/**
 * Main function, using jQuery
 *
 * @param object jQuery
 */
pgp.init = function($) {
  // private parameters
  var defaults = {
    selector: '#pgp',  // DOM node which content will be replaced
    partner: ''        // partenaire
  }

  var o = $.extend(defaults, pgp.o);
  var baseUrl = pgp.baseUrl;
  
  // private methods
  var loadScript = pgp.loadScript;
  var debug = pgp.debug;
  

  /**
   * Build form version1
   */
  var buildVersion1 = function() {
    // Hide placeholder
    var node = $(o.selector).hide();

    // Load stylesheets
    loadCss('css/'+o.partner+'.css?v='+pgp.version);

    // Build content
    if (undefined != pgp['builder']) {
      pgp.builder(node);
    }

    // Custom select
    Custom.init();

    // Show form
    //node.fadeIn(400);
    node.show();
  }

  /**
   * Load external CSS by inserting a new DOM node
   *
   * @param string URL
   * @param string title
   */
  var loadCss = function(url, title) {
    if(!url.match(/^http(s)?:\/\//)) url = baseUrl+url;

    debug('Loading CSS '+url, 2);
    var code = '<link rel="stylesheet" ';
    if(undefined != title) {
      code += 'title="'+title+'" ';
    }

    code += 'type="text/css" href="'+url+'" />';
    $('head').append(code);
  }
  
  /**
   * Main
   */
  var main = function() {
    // main code
    debug('Running init', 2);

    if(typeof $._$ != "undefined") {
      $.noConflict();
    }
    
    // build form
    buildVersion1();
  }
  
  main();
};

/* Determine base URL */
(function(){
  // Load jQuery
  //if(!window['jQuery'] || parseInt(jQuery.fn.jquery.replace(/[_\.]/g, '')) < 130) {
    if(window['jQuery']) {
      window.__jQuery = window.jQuery;
      // broken with IE7
      //delete window['jQuery'];
      window['jQuery'] = undefined;
    }
  
    // Remap $ to old jQuery
    if(window['$'] && window.$ == window.__jQuery) {
      window.$ = window.__jQuery;
    }

    // Load our package
    pgp.loadScript("js/package.js", "window.jQuery", function(){pgp.init(jQuery)});
  //}
  //else {
  //  pgp.init(jQuery);
  //}
})();

