(function() {
  // Bail out if the script has already been loaded. It only needs to be loaded once.
  if (window.ChoiceTab) {
    return;
  }

  var ChoiceTab = {
    // public
    configure: function(hsh) {
      for (var property in hsh) {
        if (hsh.hasOwnProperty(property)) {
          ChoiceTab.config[property] = hsh[property];
        }
      }
    },
    
    // private
    config: { 
      format: "fixed"
    }
  };
  window.ChoiceTab = ChoiceTab;
  
  var script_name_regex = /choice_tab\.js(\?.*)?$/;

  function loadJS(url) {
    document.write('<script type="text/javascript" src="'+url+'"><\/script>');
  }
  
  function loadCSS(url) {
    document.write('<link rel="stylesheet" href="'+ url + '" type="text/css" />');
  }

  function findScriptLocation() {
    var scripts = document.getElementsByTagName("script");
    for(var i = 0, len = scripts.length; i < len; i++) {
      var s = scripts[i];
      if (s.src && s.src.match(script_name_regex)) {
        return s.src;
      }
    }
  }
  
  function parseParams(url) {
    var paramString = url.split("?")[1] || "";
    var result = {}, entries = paramString.split("&");
    for(var i = 0, len = entries.length; i < len; i++) {
      var parts = entries[i].split("=");
      result[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
    }
    return result;
  }

  var script_src = findScriptLocation();
  if (script_src) {
    var params = parseParams(script_src);
    ChoiceTab.configure(params);
    
    var path = script_src.replace(script_name_regex,'');

    ChoiceTab.configure({
      script_src: script_src,
      script_path: path,
      host: (path.match(/^(\w+:\/\/[^\/]+)?/)[1] || ''),
      protocol: (path.match(/^(\w+:\/\/)?/)[1] || 'http://')
    });
    
    ChoiceTab.jQueryFromChoiceTab = !(window.jQuery && window.jQuery.fn && window.jQuery.fn.jquery == "1.3.2");
    loadCSS(ChoiceTab.config.host + "/contact_preference_centers/" + ChoiceTab.config.id + "/stylesheets/chrome/" + ChoiceTab.config.format + ".css")
    if (ChoiceTab.jQueryFromChoiceTab) {
      loadJS(ChoiceTab.config.protocol + "ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js");
    }
    loadJS(ChoiceTab.config.host + "/contact_preference_centers/" + ChoiceTab.config.id + "/javascripts/chrome/"+ ChoiceTab.config.format + ".js");
  }
})();
