var visitorcontact_id = 3705;

if (!VisitorContact) {
  var VisitorContact = {}
}

if (!VisitorContact.Util) {
VisitorContact.Util = {
	assetHost: "http://visitorcontact.com",
  getAssetHost: function() {
    return this.assetHost
  },
  requireCss: function(path) {
	document.write('<style type="text/css" media="screen">@import url(\'' + this.getAssetHost() + '/stylesheets/' + path + '\');</style>')
  },
  requireJs: function(path) {
	document.write('<script type="text/javascript" src=\'' + this.getAssetHost() + '/javascripts/' + path  + '\'></script>')
  },
  render: function(template, params) {
    return template.replace(/\#{([^{}]*)}/g,
      function (a, b) {
          var r = params[b]
          return typeof r === 'string' || typeof r === 'number' ? r : a
      }
    )
  },
  toQueryString: function(params) {
	  var pairs = []
	  for (key in params) {
		  if (params[key] != null && params[key] != '') {
  		  pairs.push([key, params[key]].join('='))
      }
    }
    return pairs.join('&')
  }
}
}

VisitorContact.Page = {
  getDimensions: function() {
    var de = document.documentElement
    var width = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth
    var height = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight
    return {width: width, height: height}
  }
}

VisitorContact.Dialog = {
  show: function(id_or_html) {
    var element = document.getElementById(id_or_html)
    var html = (element == null) ? id_or_html : element.innerHTML

    this.Overlay.show()
    this.setContent(html)
    this.setPosition()
    VisitorContact.Element.addClassName(this.htmlElement(), 'dialog-open')
    this.element().style.display = 'block'
  },

  close: function() {
    this.element().style.display = 'none'
    VisitorContact.Element.removeClassName(this.htmlElement(), 'dialog-open')
    this.Overlay.hide()
    VisitorContact.onClose()
  },

  /****** Protected Methods ******/

  id: 'visitorcontact-dialog',
	css_template: "a#visitorcontact-dialog-close { background-image: url(#{background_image_url}); }",

  element: function() {
    if (!document.getElementById(this.id)){
      var dummy = document.createElement('div')
      dummy.innerHTML = '<div id="'+this.id+'" class="visitorcontact-component" style="display:none;">' +
        '<a href="#" onclick="VisitorContact.Dialog.close(); return false;" id="'+this.id+'-close"></a>' +
        '<div id="'+this.id+'-content"></div></div>'
      document.body.appendChild(dummy.firstChild)
    }
    return document.getElementById(this.id)
  },

  setContent: function(html) {
    this.element() // lazily created
    if (typeof(Prototype) != 'undefined') { // gracefully degredation in the absence of Prototype.js
      document.getElementById(this.id+"-content").innerHTML = html.stripScripts()
      setTimeout(function() {html.evalScripts()}, 100)
    } else {
      document.getElementById(this.id+"-content").innerHTML = html
    }
  },

  setPosition: function() {
    var dialogDimensions = VisitorContact.Element.getDimensions(this.element())
    var pageDimensions = VisitorContact.Page.getDimensions()

    var els = this.element().style
    els.width = 'auto'
    els.height = 'auto'
    els.left = ((pageDimensions.width - dialogDimensions.width)/2) + "px"
    els.top = ((pageDimensions.height - dialogDimensions.height)/2) + "px"
  },

  htmlElement: function() {
    return document.getElementsByTagName('html')[0]
  }
}

VisitorContact.Dialog.Overlay = {

  show: function() {
    this.element().style.display = 'block'
  },

  hide: function() {
    this.element().style.display = 'none'
  },

  /****** Protected Methods ******/

  id: 'visitorcontact-overlay',

  element: function() {
    if (!document.getElementById(this.id)){
      var dummy = document.createElement('div')
      dummy.innerHTML = '<div id="'+this.id+'" class="visitorcontact-component" onclick="VisitorContact.Dialog.close(); return false;" style="display:none;"></div>'
      document.body.appendChild(dummy.firstChild)
    }
    return document.getElementById(this.id)
  }
}

// Culled from Prototype.js
VisitorContact.Element = {
  getDimensions: function(element) {
    var display = element.display
    if (display != 'none' && display != null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight}

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = element.style
    var originalVisibility = els.visibility
    var originalPosition = els.position
    var originalDisplay = els.display
    els.visibility = 'hidden'
    els.position = 'absolute'
    els.display = 'block'
    var originalWidth = element.clientWidth
    var originalHeight = element.clientHeight
    els.display = originalDisplay
    els.position = originalPosition
    els.visibility = originalVisibility
    return {width: originalWidth, height: originalHeight}
  },

  hasClassName: function(element, className) {
    var elementClassName = element.className
    return (elementClassName.length > 0 && (elementClassName == className ||
      new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)))
  },

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

  removeClassName: function(element, className) {
    element.className = element.className.replace(
      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ')
    return element
  }
}

VisitorContact.onClose = function() {}

// Load CSS and images
VisitorContact.Util.requireCss('dialog.css');
document.write('<style type="text/css">' + VisitorContact.Util.render(VisitorContact.Dialog.css_template, {background_image_url: VisitorContact.Util.getAssetHost()+'/images/close.png'}) + '</style>');

VisitorContact.Form = {
	content_template: '<iframe src="#{url}" frameborder="0" scrolling="no" allowtransparency="true" width="#{width}" height="#{height}" style="height: #{height}; width: #{width};"></iframe>',
	setup: function(options) {
    this.setupOptions(options || {})
	},
	show: function() {
	  VisitorContact.Dialog.show(VisitorContact.Util.render(this.content_template, this.options))
	},
  setupOptions: function(options) {
	  this.options = {
		  dialog: 'form',
		  width: '500px',
		  height: '390px',
		  lang: 'en',
		  params: {}
	  }
    for (attr in options) { this.options[attr] = options[attr] }
	  this.options.url = this.url()

    this.options.params.lang = this.options.lang
    this.options.params.referer = this.getReferer()
	  this.options.query = VisitorContact.Util.toQueryString(this.options.params)
  },
  getReferer: function() {
		var referer = window.location.href
	  if (referer.indexOf('?') != -1) { referer = referer.substring(0, referer.indexOf('?')) } // strip params
	  return referer
	},
  url: function() {
  	var url =  VisitorContact.Util.getAssetHost() + '/widget/'+visitorcontact_id
    return url
  }
}

VisitorContact.Tab = {
	id: "visitorcontact-feedback-tab",
	css_template: "a##{id} { #{alignment}: 0; background-repeat: no-repeat; background-color: #{background_color}; background-image: url(#{text_url}); border: outset 1px #{background_color}; border-#{alignment}: none; -moz-border-radius: 1em; -moz-border-radius-top#{alignment}: 0; -moz-border-radius-bottom#{alignment}: 0; -webkit-border-radius: 1em; -webkit-border-top-#{alignment}-radius: 0; -webkit-border-bottom-#{alignment}-radius: 0;}" +
     "a##{id}:hover { background-color: #{hover_color}; border: outset 1px #{hover_color}; border-#{alignment}: none; }" +
     "* html a##{id} { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='#{text_url}'); }" +
     "body a#visitorcontact-feedback-tab, body a#visitorcontact-feedback-tab:link { top: #{vertical_align} !important; }",

  show: function(options) {
    this.setupOptions(options || {})
    VisitorContact.Form.setup(options)
		VisitorContact.Util.requireCss('button.css')
    document.write('<a id="' + this.id + '" onclick="VisitorContact.Form.show(); return false;" href=""></a>')
	  document.write('<style type="text/css">' + VisitorContact.Util.render(this.css_template, this.options) + '</style>')
  },
  setupOptions: function(options) {
	  this.options = {
		  alignment: 'left',
          vertical_align: '45%',
		  background_color:'#f00',
		  text_color: 'white',
		  hover_color:'#06C',
		  lang: 'en'
	  }
    for (attr in options) { this.options[attr] = options[attr] }

	  this.options.text_url = VisitorContact.Util.getAssetHost() + '/images/contact_button.png'
	  this.options.id = this.id
  }
}

VisitorContact.Tab.show({
  alignment: 'right',
  vertical_align: '45%',
  background_color:'#999999',
  text_color: 'white',
  hover_color: '#666633',
  lang: 'en'
});