(function() {
  // Localize jQuery variable
  var jQuery;

  /******** Load jQuery if not present *********/
  if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.4.2') {
    var script_tag = document.createElement('script');
    script_tag.setAttribute("type","text/javascript");
    script_tag.setAttribute("src",
        "https://guestlist.spreadable.com/javascripts/jquery-1.4.2.min.js");
    script_tag.onload = scriptLoadHandler;
    script_tag.onreadystatechange = function () { // Same thing but for IE
      if (this.readyState == 'complete' || this.readyState == 'loaded') {
        scriptLoadHandler();
      }
    };
    // Try to find the head, otherwise default to the documentElement
    (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
  } else {
    // The jQuery version on the window is the one we want to use
    jQuery = window.jQuery;
    main();
  }

  /******** Called once jQuery has loaded ******/
  function scriptLoadHandler() {
    // Restore jQuery and window.jQuery to their previous values and store the
    // new jQuery in our local jQuery variable
    jQuery = window.jQuery.noConflict(true);
    // Call our main function
    main();
  }

  /******** Our main function ********/
  function main() {
    jQuery(document).ready(function(jQuery) {
      //Append container div after js include if needed
      if(jQuery("#spreadable-guestlist-container").length==0)
        {
          var myScripts = jQuery("script");
          jQuery(myScripts).each(function(i, el){
            if(jQuery(el).attr("src") && jQuery(el).attr("src") == 'http://guestlist.app.spreadable.com/js')
              {
                jQuery(el).after('<div id="spreadable-guestlist-container"></div>');
              }
          });
        }
      else
        {
          var container_element = jQuery("#spreadable-guestlist-container");
        }
      var display_as_overlay = jQuery("script#spreadable-include").attr("rel");
      var script_uri = 'https://guestlist.spreadable.com/js';

      // For v2 customers with no rel attr in the script tag
      if(!display_as_overlay)
        {
          display_as_overlay = jQuery(container_element).attr("class");
        }

      // For v1 users with no rel or class attr
      if(!display_as_overlay)
        {
          jQuery('script').each(function(i,element) {
            if(element.innerHTML.match(/new Spreadable/)) {
              if (element.innerHTML.match(/embed/)) {
                display_as_overlay = "embedded";
              }
              else{
                display_as_overlay = "overlay";
              }
              jQuery("#spreadable-guestlist-container").addClass(display_as_overlay);
              container_element = jQuery("#spreadable-guestlist-container");
            }
          });
        }

      switch(display_as_overlay){
        case "embedded":
            var mode = "embedded";
          break;
        default:
            mode = "overlay";
          break;
      }

      var widget_content_url;

        widget_content_url = "https://guestlist.spreadable.com/sites/guestlist/overlay_view.js?mode=" + mode +"&callback=?";

      jQuery.ajax({
        url: widget_content_url,
        dataType: "jsonp",
        success: function(data) {
          var myCSS = '<style type="text/css" media="screen">' + data.css["css"] + '</style>';
          var myHTML = data.html["overlay"];
          var myButton = data.html["button"];

          jQuery("head").append(myCSS);
          jQuery(container_element).html(myHTML);
          jQuery(myButton).insertAfter(container_element);

          switch(mode){
            case "embedded":
                //remove border if embedded
                jQuery("#spreadable-guestlist-container #spreadable-guestlist").css("border", "0px");
              break;

            default:
                //if this is an overlay, move it to the top of the body for z-index issues
                var sprdContainer = jQuery("#spreadable-guestlist-container");
                jQuery("#spreadable-guestlist-container").remove();
                jQuery(sprdContainer).prependTo("body");
                jQuery("#spreadable-guestlist").hide();
              break;
          }

          if (display_as_overlay == "overlay"){
            jQuery("#spreadable_overlay_button_guestlist").show();
            jQuery("#spreadable_overlay_button_guestlist").click(function() {

            // ============
            // = H CENTER =
            // ============
              var page_width = jQuery(document).width();
              var overlay_width = jQuery("#spreadable-guestlist").width();
              var left = (page_width - overlay_width)/2;
              jQuery("#spreadable-guestlist").css('left',left + 'px');


            // ============
            // = V CENTER =
            // ============
              var window_height = jQuery(window).height();
              var window_top = jQuery(window).scrollTop();
              var overlay_height = jQuery("#spreadable-guestlist").height();

              // console.log("window_height:"+window_height+" window_top:"+window_top+" overlay_height:"+overlay_height);

              if(overlay_height > window_height) //if the overlay is taller than the window, just put it at the top of the page
                {
                  if(window_top > 0) //if the screen is small and the user has scrolled down, put overlay at top of screen, not top of document
                    {
                      jQuery("#spreadable-guestlist").css('top',window_top+'px');
                    }
                  else
                    {
                      jQuery("#spreadable-guestlist").css('top','0px');
                    }
                }
              else
                {
                  if(window_top > 0) //if the window is scrolled down, find the new center
                    {
                      var window_center = parseInt(window_top+(window_height)/2);
                      var half_overlay = parseInt(overlay_height)/2;
                      var new_top = parseInt(window_center-half_overlay);
                      jQuery("#spreadable-guestlist").css('top',new_top+'px');
                    }
                  else
                    {
                      window_center = parseInt(window_height)/2;
                      half_overlay = parseInt(overlay_height)/2;
                      new_top = parseInt(window_center-half_overlay);
                      jQuery("#spreadable-guestlist").css('top',new_top+'px');
                      // console.log("window_center:"+window_center+" half_overlay:"+half_overlay+" new_top:"+new_top);
                    }

                }


                jQuery(window).resize(function() {
                  page_width = jQuery(document).width();
                  page_height_new = jQuery(window).height();
                  top_pos = jQuery("#spreadable-guestlist").offset();
                  page_top = jQuery(window).scrollTop();
                  top_diff = parseInt(page_height_new-window_height);
                  overlay_width = jQuery("#spreadable-guestlist").width();
                  overlay_height = jQuery("#spreadable-guestlist").height();
                  left = (page_width - overlay_width)/2;
                  top = parseInt(page_top+top_diff);
                  jQuery("#spreadable-guestlist").css('left',left + 'px');
                  jQuery("#spreadable-guestlist").css('top',top + 'px');
                });

              jQuery("#spreadable-guestlist").show();

            });
            jQuery("#spreadable-close-guestlist").live('click',function() {
              jQuery("#spreadable-guestlist").hide();
            });
          } else {
            jQuery("#spreadable-guestlist").show();
            jQuery("#spreadable_overlay_button_guestlist").hide();
          }
        }
      });
      // ================
      // = FLASH KILLER =
      // ================
      // loop through every embed tag on the site
      var embeds = document.getElementsByTagName('embed');
      for(i=0; i<embeds.length; i++)  {
          embed = embeds[i];
          var new_embed;
          // everything but Firefox & Konqueror
          if(embed.outerHTML) {
              var html = embed.outerHTML;
              // replace an existing wmode parameter
              if(html.match(/wmode\s*=\s*('|")[a-zA-Z]+('|")/i))
                  new_embed = html.replace(/wmode\s*=\s*('|")window('|")/i,"wmode='transparent'");
              // add a new wmode parameter
              else
                  new_embed = html.replace(/<embed\s/i,"<embed wmode='transparent' ");
              // replace the old embed object with the fixed version
              embed.insertAdjacentHTML('beforeBegin',new_embed);
              embed.parentNode.removeChild(embed);
          } else {
              // cloneNode is buggy in some versions of Safari & Opera, but works fine in FF
              new_embed = embed.cloneNode(true);
              if(!new_embed.getAttribute('wmode') || new_embed.getAttribute('wmode').toLowerCase()=='window')
                  new_embed.setAttribute('wmode','transparent');
              embed.parentNode.replaceChild(new_embed,embed);
          }
      }
      // loop through every object tag on the site
      var objects = document.getElementsByTagName('object');
      for(i=0; i<objects.length; i++) {
          object = objects[i];
          var new_object;
          // object is an IE specific tag so we can use outerHTML here
          if(object.outerHTML) {
              var html = object.outerHTML;
              // replace an existing wmode parameter
              if(html.match(/<param\s+name\s*=\s*('|")wmode('|")\s+value\s*=\s*('|")[a-zA-Z]+('|")\s*\/?\>/i))
                  new_object = html.replace(/<param\s+name\s*=\s*('|")wmode('|")\s+value\s*=\s*('|")window('|")\s*\/?\>/i,"<param name='wmode' value='transparent' />");
              // add a new wmode parameter
              else
                  new_object = html.replace(/<\/object\>/i,"<param name='wmode' value='transparent' />\n</object>");
              // loop through each of the param tags
              var children = object.childNodes;
              for(j=0; j<children.length; j++) {
                  if(children[j].getAttribute('name') && children[j].getAttribute('name').match(/flashvars/i)) {
                      new_object = new_object.replace(/<param\s+name\s*=\s*('|")flashvars('|")\s+value\s*=\s*('|")[^'"]*('|")\s*\/?\>/i,"<param name='flashvars' value='"+children[j].getAttribute('value')+"' />");
                  }
              }
              // replace the old embed object with the fixed versiony
              object.insertAdjacentHTML('beforeBegin',new_object);
              object.parentNode.removeChild(object);
          }
      }
      // ====================
      // = END FLASH KILLER =
      // ====================
    });
  }

 window.sprdSendAjax = function(){

  var myFields = jQuery("input.spreadable-required");
  var myCount = 0;
  jQuery("input.spreadable-required").removeClass("spreadable-required-error");
  jQuery.each(myFields, function(i, el){
    if(jQuery(el).val() == "")
      {
        myCount++;
        jQuery(this).addClass("spreadable-required-error");
        alert("Please complete all required fields");
        jQuery(this).select();
        return false;
      }
  });

  if(myCount > 0){
    return false;
  }

  var thanks_html = jQuery('#spreadable-guestlist-thanks').html();
  form_html = jQuery('.spreadable-guestlist-c').html();

  jQuery.ajax({
    url: 'https://guestlist.spreadable.com/overlay/?' + jQuery("#overlay_form-guestlist").serialize(),
    dataType:"jsonp",
    success: function(data){
      var didsucceed = data.success;
      if(didsucceed == false)
        {
          alert(data.message);
          return false;
        }
      else
        {
          jQuery('.spreadable-guestlist-c').html(thanks_html);
        }
    }
  });

  return false;
}

function sprdSendMore(){
  jQuery('.spreadable-guestlist-c').hide().html(form_html).show();
}

})();

function Spreadable(options){};
