/*  Volksdata Widget Interface Library (VDWILIL)*/

var VDWIL;

if(VDWIL == undefined) {
  VDWIL = {};
}

if(!VDWIL.initialized) {

  VDWIL.gId = function(id) {
    return document.getElementById(id);
  };

  VDWIL.hasClassName = function(element, className) {
    var elementClassName = element.className;

    return (elementClassName.length > 0 && (elementClassName == className ||
      new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
  };

  VDWIL.addClassName = function(element, className) {
    if (!VDWIL.hasClassName(element, className))
      element.className += (element.className ? ' ' : '') + className;
    return element;
  };

  VDWIL.removeClassName = function(element, className) {
    var newClass = VDWIL.strip(element.className.replace(new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' '));
    element.className = newClass;
    return element;
  };

  VDWIL.strip = function(string) {
    return string.replace(/^\s+/, '').replace(/\s+$/, '');
  };

  VDWIL.add_css = function(css_content) {
    var head = document.getElementsByTagName('head')[0];
    var style = document.createElement('style');
    style.type = 'text/css';

    if(style.styleSheet) {
      style.styleSheet.cssText = css_content;
    } else {
      rules = document.createTextNode(css_content);
      style.appendChild(rules);
    }
    head.appendChild(style);
  }

  VDWIL.initialized = true;
}

VDWIL.widget = function(options) {
  this.widget_disabled = false;

  this.options = options;

  if(!this.options.display){
    this.options.display = "overlay";
  }

  this.base_url = this.local_base_url;
  this.asset_base_url = this.local_base_url;

  if(this.options.local_assets == true) {
    this.asset_base_url = this.base_url;
  }

  this.query = [];

  if(this.options.display){
    this.query.push("display=" + encodeURIComponent(this.options.display));
  }

  if(this.options.style){
    this.query.push("style=" + encodeURIComponent(this.options.style));
  }

  if(this.options.custom_css){
    this.query.push("custom_css=" + encodeURIComponent(this.options.custom_css));
  }

  this.query_string = "?" + this.query.join("&");

  this.feedback_url = this.base_url;

  this.options = options ? options : {};
  this.options.placement = this.options.placement ? this.options.placement : 'left';
  this.options.color = this.options.color ? this.options.color : '#222';

  if(this.options.display == 'overlay') {
    this.initial_iframe_url = this.empty_url();
    if(!this.options.width) {
      this.options.width = "780px";
    }
    if(!this.options.height)  { this.options.height = "100%"; }
    }
    else {
      this.initial_iframe_url = this.feedback_url;
      if(!this.options.width)   { this.options.width = "100%"; }
      if(!this.options.height)  { this.options.height = "500px"; }
    }
    if (this.widget_disabled){
      this.iframe_html = '<div id="widget_iframe" style="position:relative; top: 20px; margin:20px;background:orange;color:purple;font-size:72px; padding: 20px;">'+
                       'WIDGETS ARE UNAVAILABLE'+
                       '</div>';
    }
    else {
      this.iframe_html = '<iframe id="widget_iframe" allowTransparency="true" scrolling="no" frameborder="0" class="loading"' +
			' src="'    + this.initial_iframe_url + '"' +
			' width="'  + this.options.width + '"' +
			' height="'  + this.options.height + '"' +
			' style="width: '  + this.options.width + '; height: '  + this.options.height + ';"></iframe>';
    }

    this.tab_html = '<a href="#" id="widget_tab" class="widget_tab_'+this.options.placement+'" style="background-color:'+this.options.color+'">VolksData</a>';
    this.overlay_html = '<div id="widget_overlay" style="display:none">' +
                        '<div id="widget_container">' +
                          '<a href="#" id="widget_close"></a>' +
                          this.iframe_html +
                        '</div>' +
                        '<div id="widget_screen"></div>' +
                      '</div>';

  if(this.options.display == 'overlay') {

    raw_css = "#widget_overlay {\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  z-index: 1000000;\n  position: absolute; }\n\n#widget_screen {\n  top: 0;\n  left: 0;\n  z-index: 1;\n  width: 100%;\n  position: absolute;\n  background-color: #000;\n  opacity: 0.45;\n  -moz-opacity: 0.45;\n  filter: alpha(opacity=45); }\n\n#widget_container {\n  width: 680px;\n  height: 640px;\n  margin: 0 auto;\n  z-index: 2;\n  position: relative; }\n  #widget_container iframe {\n    width: 658px;\n    height: 100%;\n    margin: 20px;\n    background: transparent; }\n  #widget_container iframe.loading {\n    background: transparent url(https://s3.amazonaws.com/getsatisfaction.com/images/fb_loading.png) no-repeat; }\n\na#widget_tab {\n  top: 25%;\n  left: 0;\n  width: 42px;\n  height: 102px;\n  color: #FFF;\n  cursor: pointer;\n  text-indent: -100000px;\n  overflow: hidden;\n  position: fixed;\n  z-index: 100000;\n  margin-left: -7px;\n  background-image: url(http://volksdata.dev21.zephyrbits.net/images/volksdata_tab.png);\n  _position: absolute;\n  _background-image: url(https://s3.amazonaws.com/getsatisfaction.com/images/tab_ie6.png); }\n  a#widget_tab:hover {\n    margin-left: -4px; }\n\na.widget_tab_right {\n  right: 0 !important;\n  left: auto !important;\n  margin-right: 0 !important;\n  margin-left: auto !important;\n  width: 35px !important; }\n  a.widget_tab_right:hover {\n    width: 38px !important;\n    margin-right: 0 !important;\n    margin-left: auto !important; }\n\na.widget_tab_bottom {\n  top: auto!important;\n  bottom: 0 !important;\n  left: 20% !important;\n  height: 38px !important;\n  width: 102px !important;\n  background-position: 0 -102px !important;\n  margin-bottom: -7px !important;\n  margin-left: auto !important; }\n  a.widget_tab_bottom:hover {\n    margin-bottom: -4px !important;\n    margin-left: auto !important; }\n\na.widget_tab_hidden {\n  display: none !important; }\n\na#widget_close {\n  position: absolute;\n  cursor: pointer;\n  outline: none;\n  top: 0;\n  left: 0;\n  z-index: 4;\n  width: 42px;\n  height: 42px;\n  overflow: hidden;\n  background-image: url(http://volksdata.dev21.zephyrbits.net//images/widget-close.png);\n  _background: none;\n  _filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://volksdata.dev21.zephyrbits.net//images/widget-close.png', sizingMethod='crop'); }\n  a#widget_close:hover {\n    background-position: -42px 0; }\n\n.tab_on embed, .tab_on select, .tab_on object {\n  visibility: hidden; }\n";

	  replacer_regex = new RegExp(this.local_ssl_base_url, "g");
    translated_css = raw_css.replace(replacer_regex, this.asset_base_url);
    VDWIL.add_css(translated_css);

    if(this.options.container) {
      var container_el = VDWIL.gId(this.options.container);
      container_el.innerHTML = this.tab_html + this.overlay_html;
    } else {
      document.write(this.tab_html);
      document.write(this.overlay_html);
    }

    var feedback_obj = this;
    VDWIL.gId('widget_tab').onclick = function() { feedback_obj.show(); return false; }
    VDWIL.gId('widget_close').onclick = function() { feedback_obj.hide(); return false; }
    VDWIL.gId('widget_iframe').setAttribute("src", this.empty_url());

  } else {
    if(this.options.container) {
      var container_el = VDWIL.gId(this.options.container);
      container_el.innerHTML = this.iframe_html;
    } else {
      document.write(this.iframe_html);
    }
  }
};

VDWIL.widget.prototype = {

  local_base_url: "http://dev1.ganymede.volksdata.com",
  local_ssl_base_url: "https://dev1.ganymede.volksdata.com",

  asset_url: function(asset) {
    return this.asset_base_url + asset;
  },

  empty_url : function() {
    return this.asset_url("/images/transparent.gif");
  },

  set_position : function() {
    this.scroll_top = document.documentElement.scrollTop || document.body.scrollTop;
    this.scroll_height = document.documentElement.scrollHeight;
    this.client_height = window.innerHeight || document.documentElement.clientHeight;

    VDWIL.gId('widget_screen').style.height = this.scroll_height+"px";
    VDWIL.gId('widget_container').style.top = this.scroll_top+(this.client_height*0.1)+"px";
  },

  show : function() {
    VDWIL.gId('widget_iframe').setAttribute("src", this.feedback_url);
    if (VDWIL.gId('widget_iframe').addEventListener) {
      VDWIL.gId('widget_iframe').addEventListener("load", this.loaded, false);
    } else if (VDWIL.gId('widget_iframe').attachEvent) {
      VDWIL.gId('widget_iframe').attachEvent("onload", this.loaded);
    }
    this.set_position();

    VDWIL.addClassName(document.getElementsByTagName('html')[0], 'tab_on');
    VDWIL.gId('widget_overlay').style.display = "block";
  },

  hide : function() {
    if (VDWIL.gId('widget_iframe').addEventListener) {
      VDWIL.gId('widget_iframe').removeEventListener("load", this.loaded, false);
    } else if (VDWIL.gId('widget_iframe').attachEvent) {
      VDWIL.gId('widget_iframe').detachEvent("onload", this.loaded);
    }

    VDWIL.gId('widget_overlay').style.display = "none";
    VDWIL.gId('widget_iframe').setAttribute("src", this.empty_url());
    VDWIL.gId('widget_iframe').className = "loading";

    VDWIL.removeClassName(document.getElementsByTagName('html')[0], 'tab_on');
  },

  loaded : function() {
    VDWIL.gId('widget_iframe').className = "loaded";
  },
}

