var Iframelogin;
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
Iframelogin = (function() {
  var close_delay, closed_handlers, container_id, loader_img_id, locale, login_handlers, logout_handlers, servicebase, serviceversion, socket, update_msg_id, worcbase;
  container_id = 'wms-iframelogin-container';
  loader_img_id = 'wms-iframelogin-loader_img';
  update_msg_id = 'wms-iframelogin-update_msg_id';
  close_delay = 2;
  locale = "en";
  socket = null;
  servicebase = null;
  serviceversion = null;
  worcbase = null;
  login_handlers = [];
  logout_handlers = [];
  closed_handlers = [];
  function Iframelogin(options) {
    if (options.servicebase != null) {
      servicebase = options.servicebase;
    }
    if (options.serviceversion != null) {
      serviceversion = options.serviceversion;
    }
    if (options.worcbase != null) {
      worcbase = options.worcbase;
    }
    locale = options.locale || "en";
    this.opacity = options.opacity || 0.6;
    if (options.on_login != null) {
      login_handlers.push(options.on_login);
    }
    if (options.on_logout != null) {
      logout_handlers.push(options.on_logout);
    }
    if (options.on_closed != null) {
      closed_handlers.push(options.on_closed);
    }
    if (servicebase == null) {
      servicebase = jQuery("body").attr("data-servicebase");
    }
    if (serviceversion == null) {
      serviceversion = jQuery("body").attr("data-serviceversion");
    }
    if (!worcbase) {
      worcbase = "http://www.windermere.com";
    }
    if (servicebase == null) {
      throw "Iframelogin: The [:servicebase] option must be set to the windermere services base url (Example: \"http://prod.windermere.com\")";
    }
    if (serviceversion == null) {
      throw "Iframelogin: The [:serviceversion] option must be set to the windermere services version (Example: \"v1\")";
    }
    Iframelogin.container();
    Iframelogin.loader_img(Iframelogin.service('auth')).hide();
    Iframelogin.update_msg().hide();
  }
  Iframelogin.prototype.open = function(open_location) {
    var colorbox_settings;
    if (open_location == null) {
      open_location = "login_path";
    }
    colorbox_settings = {
      inline: true,
      opacity: this.opacity,
      speed: 50,
      innerWidth: 300,
      innerHeight: 270,
      href: "#" + container_id,
      scrolling: false,
      fastIframe: false,
      onComplete: __bind(function() {
        var flv;
        flv = Iframelogin.flash_version().split(',');
        if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 8 && (parseInt(flv[0]) < 10 || (parseInt(flv[0]) === 10 && parseInt(flv[1]) < 3))) {
          Iframelogin.update_msg().show();
          return Iframelogin.loader_img().hide();
        } else {
          Iframelogin.update_msg().hide();
          Iframelogin.loader_img().show();
          return Iframelogin.socket().postMessage(open_location);
        }
      }, this),
      onCleanup: __bind(function() {
        Iframelogin.container().hide();
        jQuery.getJSON("" + (Iframelogin.service('auth')) + "/users/current?callback=?", __bind(function(response) {
          var on_closed, on_login, _i, _j, _len, _len2;
          for (_i = 0, _len = closed_handlers.length; _i < _len; _i++) {
            on_closed = closed_handlers[_i];
            on_closed(response);
          }
          if (response.success === true) {
            for (_j = 0, _len2 = login_handlers.length; _j < _len2; _j++) {
              on_login = login_handlers[_j];
              on_login(response);
            }
          }
          if (open_location === "logout_path") {
            return jQuery.getJSON("" + (Iframelogin.service('profile')) + "/logout?callback=?", function() {
              return jQuery.getJSON("" + (Iframelogin.service('listing')) + "/logout?callback=?", function() {
                return jQuery.getJSON("" + (Iframelogin.service('message')) + "/logout?callback=?", function() {
                  var body, on_logout, _k, _len3, _results;
                  body = jQuery("body");
                  body.append("<iframe width='0' height='0' frameborder='0' style='visibility:hidden' src='" + worcbase + "/simpleservice.cfm?endpoint=logout&http_host=" + worcbase + "'></iframe>");
                  _results = [];
                  for (_k = 0, _len3 = logout_handlers.length; _k < _len3; _k++) {
                    on_logout = logout_handlers[_k];
                    _results.push(on_logout(response));
                  }
                  return _results;
                });
              });
            });
          }
        }, this));
        Iframelogin.socket().destroy();
        return socket = null;
      }, this)
    };
    Iframelogin.container().show();
    return jQuery.colorbox(colorbox_settings);
  };
  Iframelogin.prototype.close = function() {
    return jQuery.colorbox.close();
  };
  Iframelogin.prototype.current_user = function(callback) {
    return jQuery.getJSON("" + (Iframelogin.service('auth')) + "/users/current.json?callback=?", __bind(function(response) {
      return callback(response);
    }, this));
  };
  Iframelogin.service = function(service) {
    return "" + servicebase + "/service/" + serviceversion + "/" + service;
  };
  Iframelogin.version = function() {
    return '1.1.20111212.0';
  };
  Iframelogin.container = function() {
    var container;
    container = jQuery("#" + container_id);
    if (!container.length) {
      container = jQuery("<div        id='" + container_id + "'         style='padding:  0 0;                margin:   0 0;               width:    300px;               height:   270px;                overflow: hidden;               display:  none;               background-color: #EDEDED' />");
      jQuery('body').append(container);
    }
    return container;
  };
  Iframelogin.loader_img = function() {
    var loader_img;
    loader_img = jQuery("#" + loader_img_id);
    if (!loader_img.length) {
      loader_img = jQuery("<img         id='" + loader_img_id + "'        src='" + (Iframelogin.service('auth')) + "/images/ajax-loader.gif' alt='Loading...'        style='position: relative; top: 127px; left: 86px;' />");
      Iframelogin.container().append(loader_img);
    }
    return loader_img;
  };
  Iframelogin.update_msg = function() {
    var update_msg;
    update_msg = jQuery("#" + update_msg_id);
    if (!update_msg.length) {
      update_msg = jQuery("<div         id='wms-iframelogin-update_msg'         style='padding: 10px 10px; font-family: Arial, Sans-Serif; line-height: 1.5; text-align: justified;' >          <h2>We're sorry...</h2>          In order to login to <b>myWindermere</b>, please either update your version of           <a href='http://get.adobe.com/flashplayer'><u>Adobe Flash</u></a> or           <a href='http://http://windows.microsoft.com/en-us/internet-explorer/products/ie/home'><u>Internet Explorer</u></a> browser.          <br/><br/>          <b>Restart your browser for updates to complete.</b>        </div>");
      Iframelogin.container().append(update_msg);
    }
    return update_msg;
  };
  Iframelogin.socket = function() {
    var settings;
    if (!(socket != null)) {
      settings = {
        swf: "" + (Iframelogin.service('auth')) + "/vendor/easyXDM/easyxdm.swf",
        remote: "" + (Iframelogin.service('auth')) + "/iframe?locale=" + locale,
        container: Iframelogin.container().get(0),
        props: {
          frameborder: '0',
          style: {
            background: '#ededed',
            padding: "0 0",
            margin: "0 0",
            height: "300px",
            width: "270px",
            border: "none",
            overflow: "hidden"
          }
        },
        onMessage: function(msg, origin) {
          var resize;
          msg = jQuery.parseJSON(msg);
          if (msg.loaded != null) {
            Iframelogin.loader_img().hide();
            Iframelogin.update_msg().hide();
          }
          if (msg.close != null) {
            setTimeout("jQuery.colorbox.close()", close_delay * 1000);
          }
          if (msg.cancel != null) {
            jQuery.colorbox.close();
          }
          if (msg.location != null) {
            window.open(msg.location);
          }
          if ((msg.height != null) && (msg.width != null)) {
            resize = {
              innerWidth: msg.width,
              innerHeight: msg.height
            };
            Iframelogin.container().height(resize.innerHeight).width(resize.innerWidth);
            Iframelogin.container().children("iframe:first").height(resize.innerHeight).width(resize.innerWidth);
            return jQuery.colorbox.resize(resize);
          }
        }
      };
      socket = new easyXDM.Socket(settings);
    }
    return socket;
  };
  Iframelogin.flash_version = function() {
    var axo;
    try {
      try {
        axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');
        try {
          axo.AllowScriptAccess = 'always';
        } catch (error) {
          return '6,0,0';
        }
      } catch (error) {

      }
      return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
    } catch (error) {

    }
    return '0,0,0';
  };
  return Iframelogin;
})();

