// Surprise! IE doesn't have an indexOf Array method. D'oh!
// No matter, we'll add our own here if it doesn't exist already.
if (!Array.indexOf) {
  Array.prototype.indexOf = function(obj) {
    var i, length = this.length;
    for (i = 0; i < length; i++) {
      if (this[i] === obj) return i;
    };

    // If item does not exist in the array, return -1.
    return -1;
  };
};

// Stub out console.log, console.warn and console.error in case 
if (!window.console) {
  function noOp (string) { return; }

  var console = {
    log: noOp,
    warn: noOp,
    error: noOp
  };
};

var SHS = {
  // Default environment variables. Do not change these here.
  environment: "prod",
  domain: 'www.searshomeservices.com/shs',
  protocol: 'http://',

  // If jQuery already exists on the page, and it's greater than or equal to 1.4
  // then just use the existing one for our code. Otherwise, load up jQuery 1.4 
  // from our server.
  // Finally, return the newly loaded up version of jQuery.
  setJQuery: function(callback){
    if (SHS.$) {
      if (callback) { callback(); }
      return SHS.$;
      
    } else if (window.jQuery && window.jQuery.fn.jquery >= "1.4") {
      SHS.$ = window.jQuery14 = window.jQuery;
      loadJQPlugins();
      if (callback) { callback(); }
      
    } else {
      SHS.load('js', SHS.urlFor('/pes/standalone/jquery-1.4.2.min.js'), "jQuery14", function() {
        SHS.$ = window.jQuery14;
        loadJQPlugins();
      });
    };
    
    function loadJQPlugins () {
      SHS.load('js', SHS.urlFor('/pes/standalone/jquery-ui-1.8.custom.min.js'), 'jQuery14.ui', function() {
        SHS.load('js', SHS.urlFor('/pes/standalone/jquery.iframe.js'), 'jQuery14.fn.src', function() {
          SHS.load('js', SHS.urlFor('/pes/standalone/jquery.bgiframe.min.js'), 'jQuery14.fn.bgIframe', function() {
            if (callback){
              callback();
            }
            return SHS.$;
          });
        });
      });
    }
    return false;
  },

  urlFor: function(path){
    return this.protocol + this.domain + "/" + path.replace(/^\//, "");
  },

  init: function(callback){
    var self = this;
    this.setJQuery(function() {    	
      SHS.load('js', SHS.urlFor('/pes/standalone/shs.validations.js'), "SHS.Validations", function() {
        SHS.load('js', SHS.urlFor('/pes/standalone/shs.lightbox.js'),'SHS.LightBox',function(){
          SHS.load('js', SHS.urlFor('/pes/standalone/shs.storelocator.js'),'SHS.StoreLocator',function(){		
            SHS.load('js', SHS.urlFor('/pes/standalone/shs.scheduler.js'), "SHS.Scheduler", function() {
              SHS.load('js', SHS.urlFor('/pes/standalone/shs.automotive.js'), 'SHS.Automotive', function() {	
                SHS.load('js', SHS.urlFor('/pes/standalone/shs.report.js'), "SHS.Report", function() {
                  SHS.load('js', SHS.urlFor('/pes/standalone/shs.maps.js'), 'SHS.Maps', function() {
                    callback();
                    self.loaded = true;
                  });
                });
              });
            });
          });
        });
      });
    });
  }
};

SHS.Loader = function() {
  var head = document.getElementsByTagName('head')[0];

  function createCSS (url) {
    var s = document.createElement('link');
    s.setAttribute('rel', 'stylesheet');
    s.setAttribute('type', 'text/css');
    s.setAttribute('media', 'screen');
    s.setAttribute('href', url);
    return s;
  }

  function createJS (url) {
    var s = document.createElement('script');
    s.setAttribute('type', 'text/javascript');
    s.setAttribute('src', url);
    return s;
  }

  function setOnLoadFor (watch, callback) {
    var timer = setInterval(function() {
      if (watchExists(watch)) {
        clearInterval(timer);
        if (callback) callback();
      };
    }, 50);
  }

  function insertElement (element) {
    (head)? head.appendChild(element) : document.body.appendChild(element);
  }

  function load (type, url, watch, callback) {
    var element;

    if (type == 'css'){
      element = createCSS(url);
    } else if (type == 'js'){
      element = createJS(url);
    }

    if (!watchExists(watch) && element !== undefined) {
      if (callback) setOnLoadFor(watch, callback);
      insertElement(element);
    }
  }

  function watchExists (watch) {
    return eval("typeof " + watch) != 'undefined';
  }

  return { load: load };
}();

SHS.load = SHS.Loader.load;

