

    function add_banner() {

      window.jQuery('[id*=boostbox-banner]').each(function() {
        var elem = this;
        var tag = window.jQuery(elem).attr('id');
        var options = options_for_banner[tag];
        window.jQuery.get('http://www.boostbox.com.br/banner/show?' + options, function(data) {
          if (window.jQuery('#' + tag + ' #cv_custom_banner').length == 0) {
            window.jQuery(elem).append(data);
          }
        });
      });
    }

    
    if (typeof options_for_banner === 'undefined') {
        options_for_banner = {'boostbox-banner': '&namespace=infomoneynovo&subnamespace=home&new_id=AVPOnSHKzQfYbL49oZ3U&load_tag=boostbox-banner&mdasc=0&productscount=5&headername=INFOSHOPPING&pricecolor=E40000&tab1name=SHOPPING&tab1type=retargeting&tab2name=AUTO&tab2type=xml&tab2products=http://boostbox.s3.amazonaws.com/Auto_230516.xml'};
    } else {
      options_for_banner['boostbox-banner'] = '&namespace=infomoneynovo&subnamespace=home&new_id=AVPOnSHKzQfYbL49oZ3U&load_tag=boostbox-banner&mdasc=0&productscount=5&headername=INFOSHOPPING&pricecolor=E40000&tab1name=SHOPPING&tab1type=retargeting&tab2name=AUTO&tab2type=xml&tab2products=http://boostbox.s3.amazonaws.com/Auto_230516.xml';
    }

    function add_cross_domain_local_storage() {
      window.xdLocalStorage = window.xdLocalStorage || (function() {
        var MESSAGE_NAMESPACE = 'cross-domain-local-message';
        var options = {
          iframeId: 'cross-domain-iframe',
          iframeUrl: undefined,
          initCallback: function() {}
        };
        var requestId = -1;
        var iframe;
        var requests = {};
        var wasInit = false;
        var iframeReady = true;

        function applyCallback(data) {
          if (requests[data.id]) {
            requests[data.id](data);
            delete requests[data.id];
          }
        }

        function receiveMessage(event) {
          var data;
          try {
            data = JSON.parse(event.data);
          } catch (err) {
            //not our message, can ignore
          }
          if (data && data.namespace === MESSAGE_NAMESPACE) {
            if (data.id === 'iframe-ready') {
              iframeReady = true;
              options.initCallback();
            } else {
              applyCallback(data);
            }
          }
        }

        function buildMessage(action, key, value, callback) {
          requestId++;
          requests[requestId] = callback;
          var data = {
            namespace: MESSAGE_NAMESPACE,
            id: requestId,
            action: action,
            key: key,
            value: value
          };
          iframe.contentWindow.postMessage(JSON.stringify(data), '*');
        }

        function init(customOptions) {
          if (wasInit) {
            return;
          }
          wasInit = true;
          options = XdUtils.extend(customOptions, options);
          var temp = document.createElement('div');

          if (window.addEventListener) {
            window.addEventListener('message', receiveMessage, false);
          } else {
            window.attachEvent('onmessage', receiveMessage);
          }

          temp.innerHTML = '<iframe id="' + options.iframeId + '" src=' + options.iframeUrl + ' style="display: none;"></iframe>';
          document.body.appendChild(temp);
          iframe = document.getElementById(options.iframeId);
        }

        function isApiReady() {
          if (!wasInit) {
            return false;
          }
          if (!iframeReady) {
            return false;
          }
          return true;
        }

        return {
          //callback is optional for cases you use the api before window load.
          init: function(customOptions) {
            if (!customOptions.iframeUrl) {
              throw 'You must specify iframeUrl';
            }
            if (document.readyState === 'complete') {
              init(customOptions);
            } else {
              window.onload = function() {
                init(customOptions);
              };
            }
          },
          setItem: function(key, value, callback) {
            if (!isApiReady()) {
              return;
            }
            buildMessage('set', key, value, callback);
          },

          getItem: function(key, callback) {
            if (!isApiReady()) {
              return;
            }
            buildMessage('get', key, null, callback);
          },
          removeItem: function(key, callback) {
            if (!isApiReady()) {
              return;
            }
            buildMessage('remove', key, null, callback);
          },
          key: function(index, callback) {
            if (!isApiReady()) {
              return;
            }
            buildMessage('key', index, null, callback);
          },
          clear: function(callback) {
            if (!isApiReady()) {
              return;
            }
            buildMessage('clear', null, null, callback);
          }
        };
      })();
    }


    function get_host() {
      if (window.location.host == 'www.boostbox.com.br') {
        return window.location.host
      } else {
        return 'localhost:3000'
      }
    }

    function xd_utils() {
      window.XdUtils = window.XdUtils || (function() {

        function extend(object, defaultObject) {
          var result = defaultObject || {};
          var key;
          for (key in object) {
            if (object.hasOwnProperty(key)) {
              result[key] = object[key];
            }
          }
          return result;
        }

        //public interface
        return {
          extend: extend
        };
      })();
    }

    function random() {
      return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
    }

    function init_local_storage() {
      xd_utils();
      add_cross_domain_local_storage();
      xdLocalStorage.init({
        /* required */
        iframeUrl: 'http://www.boostbox.com.br/xd_local_storage',
        initCallback: function() {
          handle_key();
        }
      });
    }

    function render_banner(data) {
      var total = window.jQuery('[id*=boostbox-banner]').length;
      var i = 1;
      while (i <= total) {
        var the_id = '';
        if (i == 1) {
          the_id = 'boostbox-banner';
        } else {
          the_id = 'boostbox-banner-' + i;
        }

        var elem = window.jQuery('#' + the_id);

        load_banner(the_id, data);
        i++;
      }
    }

    function load_banner(the_id, data) {
      window.jQuery.ajax({
        url: 'http://www.boostbox.com.br/banner/new?localstorage_id=' + data.value + options_for_banner[the_id],
        async: true,
        cache: true,
        success: function(html) {
          window.jQuery('#' + the_id + ' #cv_custom_banner #UL_166').html(html);
          window.jQuery('#' + the_id + ' #cv_custom_banner span#is_it_loaded').attr('class', 'loaded');
        }
      });
    }

    function render_banner_no_key() {
      window.jQuery('[id*=boostbox-banner]').each(function() {
        elem = this;
        window.jQuery.ajax({
          url: 'http://www.boostbox.com.br/banner/new?' + get_params(this),
          async: true,
          cache: true,
          success: function(html) {
            window.jQuery(elem).find('#cv_custom_banner #UL_166').html(html);
            window.jQuery(elem).find('#cv_custom_banner span#is_it_loaded').attr('class', 'loaded');
          }
        });
      });
    }

    function get_params_for(elem) {
      result = window.jQuery(elem).find('#cv_custom_banner').attr('params').replace(/&amp;/g, '&');
      console.log(result);
      return result;
    }

    function get_params() {
      return window.jQuery('#cv_custom_banner').attr('params').replace(/&amp;/g, '&');
    }

    function handle_key() {
      xdLocalStorage.getItem('cv-collector-id', function(data) {
        render_banner(data);
      });
    }

    function does_key_exist(key) {
      return !!key
    }

    // function set_key() {
    //   key = random() + "-" + random();
    //   xdLocalStorage.setItem('cv-collector-id', key);
    // }


    var jQueryScriptOutputted = false;

    function initJQuery() {
      //if the jQuery object isn't available
      if (typeof(jQuery) == 'undefined') {

        if (!jQueryScriptOutputted) {
          //only output the script once..
          jQueryScriptOutputted = true;

          //output the script (load it from google api)
          document.write("<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>");
        }
        setTimeout('initJQuery()', 10);
      } else {
        window.jQuery(document).ready(function(){
          add_banner();
        });
      }
    }
    initJQuery();
