/* OnlineOpinion v5.1.9 */
/* Released: 3/17/2011 */
/* Branch: hotfix/5.1.10 847a69130c56c01e93bfa377d72d2ffc9ee749ab */
/* Components: Full */
/* The following code is Copyright 1998-2011 Opinionlab, Inc.  All rights reserved. Unauthorized use is prohibited. This product and other products of OpinionLab, Inc. are protected by U.S. Patent No. 6606581, 6421724, 6785717 B1 and other patents pending. http://www.opinionlab.com */

var OOo = {
  Browser: (function(){
    var
      ua = navigator.userAgent,
      isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]',
      browser = {
        IE: !!window.attachEvent && !isOpera,
        Opera: isOpera,
        WebKit: ua.indexOf('AppleWebKit/') > -1,
        Chrome: ua.indexOf('Chrome') > -1,
        Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
        MobileSafari: /Apple.*Mobile.*Safari/.test(ua),
        PalmPre: ua.indexOf('Pre/') > -1,
        BlackBerry: ua.indexOf('BlackBerry') > -1,
        Fennec: ua.indexOf('Fennec') > -1,
        IEMobile: ua.indexOf('IEMobile') > -1,
        OperaMobile: ua.search(/Opera (?:Mobi|Mini)/) > -1
      },
      version = 0,
      regex,
      unknown = false;
    if (browser.IE) {
      regex = /msie.(\d\.\d+)/i;
      version = ua.match(regex)[1];
    }
    else if (browser.Gecko) {
      regex = /gecko.(\d+)/i;
      version = ua.match(regex)[1];
    }
    else if (browser.WebKit) {
      regex = /applewebkit\/(\d+)/i;
      version = ua.match(regex)[1];
    }
    else if (browser.Opera) {
      regex = /opera.(\d\.\d+)/i;
      version = ua.match(regex)[1];
    }
    else {
      unknown = true;
    }
    browser.isMobile = (browser.MobileSafari || browser.PalmPre || browser.BlackBerry || browser.Fennec || browser.IEMobile || browser.OperaMobile);
    browser.Version = parseFloat(version);
    browser.isModern = (!(unknown ||
      (browser.IE && browser.Version < 6) || // Pre IE 6.0
      (browser.Opera && browser.Version < 8 ) || // Pre 7.0 Opera
      (browser.Gecko == 'gecko' && browser.Version < 20041107)));
    return browser;
  })()
};

OOo.Cache = {};
OOo.instanceCount = 0;

if (!OnlineOpinion) var OnlineOpinion = OOo;


(function(){
  function $(id) { return document.getElementById(id); }


  function _extend(destination, source) {
    for (var property in source)
      destination[property] = source[property];
    return destination;
  }

	function _addEventListener(target,type,callback,captures) {
    if (target.addEventListener) target.addEventListener(type,callback,captures);
    else if (target.attachEvent) target.attachEvent('on'+type,callback);
	}

  function removeEventListener(target,type,callback,captures) {
    if (target.removeEventListener) target.removeEventListener(type, callback, captures);
    else if (target.detachEvent) target.detachEvent('on'+type,callback);
  };

  function _toQueryString(object) {
    var str_out = [];
    for (var prop in object)
      str_out.push(prop + '=' + (encodeURIComponent(object[prop]) || ''));
    return str_out.join('&');
  }

  function _getFormParams(opt) {
    var params = _toQueryString(opt.metrics);
    params += '&custom_var=' + opt.tealeafId + '|' + opt.clickTalePID + '/' + opt.clickTaleUID + '/' + opt.clickTaleSID;
    if (opt.legacyVariables) params += "|" + encodeURIComponent(opt.legacyVariables);
    if (opt.metrics.type == 'OnPage') params += '|iframe';
    if (opt.asm) params += '&asm=1';
    params += '&_'+"rev=2";
    if (opt.customVariables) params += '&customVars=' + encodeURIComponent(OOo.serialize(opt.customVariables));
    return params;
  }

  function _appendOOForm(opt, frameName) {
    var
      d = document,
      form = d.createElement('form'),
      input = d.createElement('input');

    form.style.display = 'none';
    form.method = 'post';
    form.target = frameName || 'OnlineOpinion';
    form.action = opt.onPageCard ? 'https://secure.opinionlab.com/ccc01/comment_card_json_4_0_b.asp?r=' + location.href : 'https://secure.opinionlab.com/ccc01/comment_card_d.asp';
    input.name = 'params';
    input.value = _getFormParams(opt);
    form.appendChild(input);
    d.body.appendChild(form);

    return form;
  }

  function _createMetrics() {
    return {
      width: screen.width,
      height: screen.height,
      referer: location.href,
      prev: document.referrer,
      time1: (new Date()).getTime(),
      time2: null,
      currentURL: location.href,
      ocodeVersion: '5.1.9'
    };
  }

  _extend(OOo, {
    extend: _extend,
    toQueryString: _toQueryString,
    addEventListener: _addEventListener,
    $: $,
    appendOOForm: _appendOOForm,
    removeEventListener: removeEventListener,
    createMetrics: _createMetrics
  });

})();




(function(){
  function _serialize(_obj) {
    if (!_obj) return null;
    switch (typeof _obj) {
      case 'number':
      case 'boolean':
      case 'function':
        return _obj;
        break;

      case 'string':
        return '\'' + _obj + '\'';
        break;

      case 'object':
        var str;
        if (_obj.constructor === Array || typeof _obj.callee !== 'undefined') {
          str = '[';
          var i, len = _obj.length;
          for (i = 0; i < len-1; i++) { str += _serialize(_obj[i]) + ','; }
          str += _serialize(_obj[i]) + ']';
        }
        else {
          str = '{';
          var key;
          for (key in _obj) { str += key + ':' + _serialize(_obj[key]) + ','; }
          str = str.replace(/\,$/, '') + '}';
        }
        return str;
        break;

      default:
        return null;
     }
  }

  OOo.extend(OOo, {serialize: _serialize});
})();
(function(){
  function _checkTunnel(tunnel, cookieName) {
    var path = location.pathname, previousStep;
    if (path.search(tunnel[0]) != -1) {
      OOo.createCookie(cookieName, 0);
      return false;
    }
    else if (OOo.readCookie(cookieName)) {
      previousStep = parseInt(OOo.readCookie(cookieName));
      if (
        (path.search(tunnel[previousStep + 1]) != -1) &&
        (previousStep + 1 != tunnel.length - 1)
      ) {
        OOo.createCookie(cookieName, previousStep + 1);
        return false;
      }
      else if (path.search(tunnel[previousStep]) != -1) return false;
      else if (previousStep + 1 == tunnel.length - 1) return true;
      else {
        OOo.eraseCookie(cookieName);
        return false;
      }
    }
    else return false;
  }

  OOo.extend(OOo, {
    checkTunnel: _checkTunnel
  });
})();
(function(){



  function hex(num) {
    var str = "";
    for(var j = 7; j >= 0; j--)
      str += '0123456789abcdef'.charAt((num >> (j * 4)) & 0x0F);
    return str;
  }


  function str2blks_SHA1(str) {
    var
      nblk = ((str.length + 8) >> 6) + 1,
      blks = new Array(nblk * 16);
    for(var i = 0; i < nblk * 16; i++) blks[i] = 0;
    for(var i = 0; i < str.length; i++)
      blks[i >> 2] |= str.charCodeAt(i) << (24 - (i % 4) * 8);
    blks[i >> 2] |= 0x80 << (24 - (i % 4) * 8);
    blks[nblk * 16 - 1] = str.length * 8;
    return blks;
  }


  function safe_add(x, y) {
    var
      lsw = (x & 0xFFFF) + (y & 0xFFFF),
      msw = (x >> 16) + (y >> 16) + (lsw >> 16);
    return (msw << 16) | (lsw & 0xFFFF);
  }


  function rol(num, cnt) {
    return (num << cnt) | (num >>> (32 - cnt));
  }


  function ft(t, b, c, d) {
    if(t < 20) return (b & c) | ((~b) & d);
    if(t < 40) return b ^ c ^ d;
    if(t < 60) return (b & c) | (b & d) | (c & d);
    return b ^ c ^ d;
  }


  function kt(t) {
    return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
           (t < 60) ? -1894007588 : -899497514;
  }


  function calcSHA1(str) {
    var
      x = str2blks_SHA1(str),
      w = new Array(80),
      a =  1732584193,
      b = -271733879,
      c = -1732584194,
      d =  271733878,
      e = -1009589776,
      olda,
      oldb,
      oldc,
      oldd,
      olde,
      t;

    for(var i = 0; i < x.length; i += 16) {
      olda = a,
      oldb = b,
      oldc = c,
      oldd = d,
      olde = e;

      for(var j = 0; j < 80; j++) {
        if(j < 16) w[j] = x[i + j];
        else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
        t = safe_add(safe_add(rol(a, 5), ft(j, b, c, d)), safe_add(safe_add(e, w[j]), kt(j)));
        e = d;
        d = c;
        c = rol(b, 30);
        b = a;
        a = t;
      }

      a = safe_add(a, olda);
      b = safe_add(b, oldb);
      c = safe_add(c, oldc);
      d = safe_add(d, oldd);
      e = safe_add(e, olde);
    }
    return hex(a) + hex(b) + hex(c) + hex(d) + hex(e);
  }

  OOo.extend(OOo, {sha1: calcSHA1});

})();
(function(){
  function _checkAbandonment(abandonmentObject) {
    var
      cookieName = abandonmentObject.cookieName || 'oo_abandon',
      cookie = OOo.readCookie(cookieName),
      startPage = abandonmentObject.startPage,
      endPage = abandonmentObject.endPage,
      middle = abandonmentObject.middle;

    if (!cookie) {
      if (location.pathname.indexOf(startPage) != -1) OOo.createCookie(cookieName);
      return false;
    }
    else if (location.pathname.indexOf(endPage) != -1) {
      OOo.eraseCookie(cookieName);
      return false;
    }
    else if (location.pathname.search(middle) != -1) return false;
    else {
      OOo.eraseCookie(cookieName);
      return true;
    }
  }

  OOo.extend(OOo, {
    checkAbandonment: _checkAbandonment
  });
})();
(function(){
  function _checkThirdPartyCookies(cArray) {
    for (var i = cArray.length - 1; i >= 0; i--) {
      if (cArray[i].read) {
        if (!!(cookieValue = OOo.readCookie(cArray[i].name)) && cookieValue == cArray[i].value) return true;
        else if(typeof cArray[i].value == 'undefined' && !!OOo.readCookie(cArray[i].name)) return true;
      }
    }
    return false;
  }

  function _setThirdPartyCookies(cArray) {
    for (var i = cArray.length - 1; i >= 0; i--) {
      if (cArray[i].set) OOo.createCookie(cArray[i].name, cArray[i].value, cArray[i].expiration);
    }
  }

  OOo.extend(OOo, {
    checkThirdPartyCookies: _checkThirdPartyCookies,
    setThirdPartyCookies: _setThirdPartyCookies
  });
})();

OOo.extend(Function.prototype, (function(){
  if (typeof(Prototype) != "undefined") return;
  var slice = Array.prototype.slice;

  function _update(array, args) {
    var arrayLength = array.length, length = args.length;
    while (length--) array[arrayLength + length] = args[length];
    return array;
  }

  function _merge(array, args) {
    array = slice.call(array, 0);
    return _update(array, args);
  }

  function _bind(context) {
    if (arguments.length < 2 && typeof arguments[0] === "undefined") return this;
    var __method = this, args = slice.call(arguments, 1);
    return function() {
      var a = _merge(args, arguments);
      return __method.apply(context, a);
    };
  }

  return {
    bind: _bind
  };
})());

(function(){
  var domain = location.host.split('.').reverse();
  domain = '.' + domain[1] + '.' + domain[0];
  function _createCookie(name,value,seconds) {
    var date = '', expires = '';
    if (seconds) {
      date = new Date();
      date.setTime(date.getTime()+(seconds*1000));
      expires = "; expires="+date.toGMTString();
    }
    document.cookie = name+"="+value+expires+"; path=/; domain="+domain+";";
  }

  function _readCookie(name) {
    var nameEQ = name + "=", ca = document.cookie.split(';'), c;
    for(var i=0;i < ca.length;i++) {
      c = ca[i];
      while (c.charAt(0)==' ') c = c.substring(1,c.length);
      if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
  }

  function _eraseCookie(name) {
    _createCookie(name,"",-1);
  }

  OOo.extend(OOo, {
    createCookie: _createCookie,
    readCookie: _readCookie,
    eraseCookie: _eraseCookie
  });
})();
OOo.Ocode = function(options) {
  var browser = OOo.Browser;
  if (!browser.isModern || (options.disableMobile && browser.isMobile)) return;
  if (options.disableNoniOS && (navigator.userAgent.search('Android') != -1 || browser.PalmPre || browser.IEMobile || browser.OperaMobile || browser.Fennec)) return;
  OOo.instanceCount++;

  this.options = {
    tealeafCookieName: 'TLTSID'
  };

  OOo.extend(this.options, options);

  var opt = this.options, rewrite = opt.referrerRewrite;
  opt.metrics = OOo.createMetrics();

  this.frameName = opt.onPageCard ? 'OnlineOpinion' + OOo.instanceCount : 'OnlineOpinion';
  if (opt.cookie && this.matchUrl()) return;

  if (opt.thirdPartyCookies && OOo.checkThirdPartyCookies(opt.thirdPartyCookies)) return;

  if (opt.abandonment && !OOo.checkAbandonment(opt.abandonment)) return;

  if (opt.tunnel && !OOo.checkTunnel(opt.tunnel.path, opt.tunnel.cookieName)) return;

  if (opt.events && opt.events.onSingleClick) this.singProbability = Math.random() < 1 - opt.events.onSingleClick/100;

  opt.tealeafId = OOo.readCookie(opt.tealeafCookieName) || OOo.readCookie(opt.sessionCookieName);



  if (rewrite) opt.metrics.referer = rewrite.searchPattern ?
        window.location.href.replace(rewrite.searchPattern, rewrite.replacePattern) :
        rewrite.replacePattern;

  if (opt.events) {
    this.setupEvents();
    if (opt.events.disableLinks || opt.events.disableFormElements) this.setupDisableElements();
  }
  if (opt.floating) this.floating();
  else if (opt.bar) this.bar();
  else if (opt.tab) this.tab();
};

OOo.Ocode.prototype = {
  show: function() {
    var opt = this.options;
    if (this.interruptShow) return;
    if (!this.floatingLogo && opt.cookie && this.matchUrl()) return;
    if (!opt.floating && opt.events && this.singProbability) return;
    if (opt.events && opt.events.onSingleClick) this.singProbability = true;

    if (opt.cookie) this.tagUrl();

    if (opt.thirdPartyCookies) {
      if (OOo.checkThirdPartyCookies(opt.thirdPartyCookies)) return;
      OOo.setThirdPartyCookies(opt.thirdPartyCookies);
    }

    if (this.floatingLogo && opt.disappearOnClick) this.floatingLogo.style.display = 'none';

    if (typeof arguments[0] == 'string') opt.metrics.trigger = arguments[0];

    if (opt.clickTalePID && typeof ClickTale == 'function') {
      opt.clickTaleUID = ClickTaleGetUID();
      opt.clickTaleSID = ClickTaleGetSID();
    }

    if (opt.onPageCard) this.setupOnPageCC();
    else this.launchOOPopup();
  },
  tagUrl: function() {
    if (this.matchUrl()) return;

    var
      cookie = this.options.cookie,
      url = cookie.type == 'page' ? location.href : location.hostname,
      prevValue = OOo.readCookie(cookie.name || 'oo_r') || '';

    OOo.createCookie(cookie.name || 'oo_r', prevValue + OOo.sha1(url), cookie.expiration);
  },
  matchUrl: function() {
    var url = this.options.cookie.type == 'page' ? location.href : location.hostname,
      cookie_val = OOo.readCookie(this.options.cookie.name || 'oo_r');
    if (!cookie_val) return false;
    return cookie_val.search(OOo.sha1(url)) != -1;
  }
};

(function(){
  function _launchOOPopup() {
    var
      opt = this.options,
      popup_dimensions = opt.newWindowSize || [545,325],
      popup_coordinates = [
        parseInt((opt.metrics.height-popup_dimensions[1])/2),
        parseInt((opt.metrics.width-popup_dimensions[0])/2)
      ],
      opt = this.options,
      form, win;
    opt.metrics.time2 = (new Date()).getTime();
    opt.metrics.type = 'Popup';

    form = OOo.appendOOForm(opt);

    win = window.open(
      '',
      'OnlineOpinion',
      'location=no,status=no,width='+popup_dimensions[0]+',height='+popup_dimensions[1]+',top='+popup_coordinates[0]+',left='+popup_coordinates[1]
    );
    if (win) form.submit();
  }

  OOo.extend(OOo.Ocode.prototype, {
    launchOOPopup: _launchOOPopup
  });
})();
(function(){
  function _setupEvents() {
    var
      events = this.options.events,
      addEvent = [false, false],
      eventTypes = ['onExit', 'onEntry'],
      exitEvent = OOo.Browser.Opera ? 'unload' : 'beforeunload',
      eventType, interval;
    for (var j = eventTypes.length - 1; j >= 0; j--) {
      eventType = eventTypes[j];

      if (events[eventType] instanceof Array) {
        var eventObj = events[eventType], i = eventObj.length;
        while(i-- && !addEvent[j]) {
          if (window.location.href.search(eventObj[i].url) != -1 && Math.random() >= 1 - eventObj[i].p/100)
            addEvent[j] = true;
        }
      }
      else if (events[eventType] && Math.random() >= 1 - events[eventType]/100) addEvent[j] = true;
    }

    if (addEvent[0]) OOo.addEventListener(window, exitEvent, this.show.bind(this, 'onExit'), false);
    if (addEvent[1]) {
      if (events.delayEntry) {
        window.setTimeout(function(){
          this.show()
        }.bind(this, 'onEntry'), events.delayEntry * 1000);
      }
      else {
        this.show('onEntry');
      }
    }
  }

  function _setupDisableElements() {
    OOo.addEventListener(document.body, 'mousedown', _disableElements.bind(this));
    if (!this.options.events.disableFormElements) return;
    var forms = document.getElementsByTagName('form');
    for (var i = forms.length - 1; i >= 0; i--)
      OOo.addEventListener(forms[i], 'submit', _disableForms.bind(this));
  }

  function _disableElements(e) {
    var evt = e || window.event, tar = e.target || e.srcElement, events = this.options.events, parent = tar.parentNode, MAX_DEPTH = 5, depth = 0;
    while(parent && (tar.nodeName != 'A' || tar.nodeName != 'INPUT') && depth != MAX_DEPTH) {
      if (parent.nodeName == 'A') tar = parent;
      parent = parent.parentNode;
      depth++;
    }
    if (events.disableFormElements && tar.tagName == "INPUT" && (tar.type == 'submit' || tar.type == 'image')) this.interruptShow = true;
    if (tar.nodeName == 'A' && tar.href.substr(0,4) == 'http' && tar.href.search(events.disableLinks) != -1) this.interruptShow = true;
  }

  function _disableForms(e) {
    this.interruptShow = true;
  }

  OOo.extend(OOo.Ocode.prototype, {
    setupEvents: _setupEvents,
    setupDisableElements: _setupDisableElements
  });
})();

OOo.extend(OOo.Ocode.prototype,  {
  floating: function() {
    var
      d = document,
      wrapper = this.floatingLogo = document.createElement('div'),
      up = d.createElement('div'),
      floatingBg = d.createElement('div'),
      hover = d.createElement('div'),
      hoverText = d.createElement('span'),
      opt = this.options.floating, //options for rendering floating logo
      contentEl = OOo.$(opt.contentId),
      logoOffset = '10px',
      ie6 = false,
      wrapperId = opt.id;

    if (wrapperId) wrapper.id = wrapperId;
    wrapper.className = 'oo_feedback_float';
    floatingBg.className = 'oo_transparent';
    up.className = 'olUp';
    hover.className = 'olOver';

    up.tabIndex = 0;
    up.onkeyup = function(e) {
      var event = e || window.event;
      if (event.keyCode != 13) return;
      this.show();
    }.bind(this);

    up.innerHTML = opt.caption || 'Feedback';

    wrapper.appendChild(up);
    hoverText.innerHTML = opt.hoverCaption || 'Click here to<br>rate this page';
    hover.appendChild(hoverText);
    wrapper.appendChild(hover);

    wrapper.appendChild(floatingBg);

    if (OOo.Browser.IE && OOo.Browser.Version < 7) {
      wrapper.style.position = 'absolute';
      wrapper.style.bottom = '';
      OOo.addEventListener(window, 'scroll', _ieLogo, false);
      OOo.addEventListener(window, 'resize', _ieLogo, false);

      function _ieLogo(e) {
        wrapper.style.top = (d.documentElement.scrollTop + document.documentElement.clientHeight - wrapper.clientHeight) + 'px';
      };

      ie6 = true;
    }
    else if (OOo.Browser.MobileSafari) {
      var initialHeight = window.innerHeight, amount;
      wrapper.style.bottom = null;
      wrapper.style.top = (pageYOffset + window.innerHeight - 60)+'px';
      OOo.addEventListener(window, 'scroll', function(e){
        amount = pageYOffset - (initialHeight - window.innerHeight);
        wrapper.style.webkitTransform = 'translateY('+amount+'px)';
      }, false);
    }

    /*attach any special floating behavior to floating icon*/
    if (opt.position && opt.position.search(/Content/) && contentEl) {
      var
        spacer = this.spacer = d.createElement('div'),
        scrollEl = OOo.Browser.WebKit ? d.body : d.documentElement,
        adjustLogo;

      spacer.id = 'oo_feedback_fl_spacer';
      spacer.style.left = _getRightOfContent(contentEl) + 'px';
      d.body.appendChild(spacer);


      switch(opt.position) {
        case 'rightOfContent' :
          adjustLogo = function(e) {
            wrapper.style.left = (_getRightOfContent(contentEl) - scrollEl.scrollLeft) + 'px';
            if(ie6) adjustLogo = null;
          };
          break;
        case 'fixedPreserveContent' :
          adjustLogo = function(e) {
            var
              winWidth = OOo.Browser.IE ? d.body.clientWidth : window.innerWidth,
              scroll = !ie6 ? scrollEl.scrollLeft : 0;
            if (winWidth <= _getRightOfContent(contentEl) + wrapper.offsetWidth + parseInt(logoOffset))
              wrapper.style.left = (_getRightOfContent(contentEl) - scroll) + 'px';
            else {
              wrapper.style.left = '';
              wrapper.style.right = logoOffset;
            }
          };
          break;
        case 'fixedContentMax' :
          adjustLogo = function(e) {
            var winWidth = OOo.Browser.IE ? d.body.clientWidth : window.innerWidth;
            if (winWidth <= _getRightOfContent(contentEl) + wrapper.offsetWidth + parseInt(logoOffset)) {
              wrapper.style.left = '';
              wrapper.style.right = logoOffset;
              if (e && e.type == 'scroll' && ie6) wrapper.style.left = (d.documentElement.clientWidth + scrollEl.scrollLeft - 105) + 'px';
            }
            else {
              wrapper.style.left = (_getRightOfContent(contentEl) - scrollEl.scrollLeft) + 'px';
              wrapper.style.right = '';
            }
          };
          break;
      }
      adjustLogo();

      OOo.addEventListener(window, 'scroll', adjustLogo, false);
      OOo.addEventListener(window, 'resize', adjustLogo, false);

      function _adjustSpacer(e) {
        spacer.style.left = _getRightOfContent(contentEl) + 'px';
      };

      OOo.addEventListener(window, 'resize', _adjustSpacer, false);
    }
    else {
      wrapper.style.right = logoOffset;
    }

    OOo.addEventListener(wrapper, 'click', this.show.bind(this, 'Floating'), false);
    OOo.addEventListener(wrapper, 'touchstart', this.show.bind(this, 'Floating'), false);

    d.body.appendChild(wrapper);
    if (OOo.Browser.IE && OOo.Browser.Version < 7) {
      wrapper.style.top = (d.documentElement.clientHeight - wrapper.clientHeight) + 'px';
      floatingBg.style.height = wrapper.clientHeight + 'px';
    }

    function _getRightOfContent(el) {
      return el.offsetLeft + el.offsetWidth;
    };
  },

  removeFloatingLogo: function() {
    document.body.removeChild(this.floatingLogo);
    if (this.spacer) document.body.removeChild(this.spacer);
  }
});

OOo.extend(OOo.Ocode.prototype, {
  bar: function() {
    var
      d = document,
      wrapper = this.floatingLogo = d.createElement('div'),
      feedback = d.createElement('span');

    wrapper.id = 'oo_bar';
    feedback.innerHTML = this.options.bar.caption || 'Feedback';
    wrapper.appendChild(feedback);

    wrapper.tabIndex = 0;
    wrapper.onkeyup = function(e) {
      var event = e || window.event;
      if (event.keyCode != 13) return;
      this.show();
    }.bind(this);

    OOo.addEventListener(wrapper, 'click', this.show.bind(this, 'Bar'));
    document.body.className += document.body.className < 1 ? 'oo_bar' : ' oo_bar';
    document.body.appendChild(wrapper);

    if (OOo.Browser.IE) {
      var _adjustBar;
      if (d.compatMode == 'CSS1Compat') {
        _adjustBar = function(e) {
          if (e && e.type == 'resize') setTimeout(_adjustBar, 50);
          wrapper.style.top = (d.documentElement.scrollTop + document.documentElement.clientHeight - wrapper.clientHeight - 1) + 'px';
          wrapper.style.width = (Math.max(d.documentElement.clientWidth, d.body.offsetWidth)) + 'px';
        }
      }
      else {
        _adjustBar = function(e) {
          wrapper.style.top = (d.body.scrollTop + document.body.clientHeight - wrapper.clientHeight - 1) + 'px';
          wrapper.style.width = (Math.max(d.documentElement.clientWidth, d.body.offsetWidth) - 22) + 'px';
        }
      }
      wrapper.style.position = 'absolute';
      OOo.addEventListener(window, 'scroll', _adjustBar, false);
      OOo.addEventListener(window, 'resize', _adjustBar, false);

      _adjustBar();
    }
    else if (OOo.Browser.MobileSafari) {
      var initialHeight = window.innerHeight, amount;
      wrapper.style.bottom = null;
      wrapper.style.top = (pageYOffset + window.innerHeight - 22)+'px';
      OOo.addEventListener(window, 'scroll', function(e){
        amount = pageYOffset - (initialHeight - window.innerHeight);
        wrapper.style.webkitTransform = 'translateY('+amount+'px)';
      }, false);
    }

  }
});

OOo.extend(OOo.Ocode.prototype, {
  tab: function() {
    var
      d = document,
      wrapper = this.floatingLogo = d.createElement('div'),
      anchor = d.createElement('a'),
      span = d.createElement('span'),
      opt = this.options.tab;

    wrapper.id = 'oo_tab';
    wrapper.className = 'oo_tab_' + (opt.position || 'right');
    if (OOo.Browser.IE && OOo.Browser.Version < 7) {
      wrapper.style.position = 'absolute';
      if (opt.position == 'right') wrapper.className += ' oo_tab_ie_right';
    }
    else if (OOo.Browser.MobileSafari) {
      wrapper.style.top = (pageYOffset + window.innerHeight/2)+'px';
      OOo.addEventListener(window, 'scroll', function(e){
        wrapper.style.top = (pageYOffset + window.innerHeight/2)+'px';
      }, false);
    }
    anchor.href = "javascript:void(0)";
    anchor.title = opt.title || 'Feedback';

    wrapper.tabIndex = 0;
    wrapper.onkeyup = function(e) {
      var event = e || window.event;
      if (event.keyCode != 13) return;
      this.show();
    }.bind(this);

    anchor.appendChild(span);
    wrapper.appendChild(anchor);

    OOo.addEventListener(wrapper, 'click', this.show.bind(this, 'Tab'), false);

    d.body.appendChild(wrapper);
  }
});


OOo.extend(OOo.Ocode.prototype, {
  setupOnPageCC: function() {
    var
      d = document,
      overlay = OOo.Cache.overlay || d.createElement('div'),
      wrapper = this.wrapper = d.createElement('div'),
      close = d.createElement('a'),
      iwrapper = d.createElement('div'),
      iclose = d.createElement('span'),
      frameName = this.frameName,
      frame = d.createElement(OOo.Browser.IE && OOo.Browser.Version < 9 ? '<iframe name="'+frameName+'">' : 'iframe'),
      tempContainer = d.createDocumentFragment(),
      thisOpt = this.options,
      opt = thisOpt.onPageCard,
      ONPAGE_REQ = 'https://secure.opinionlab.com/ccc01/comment_card_json_4_0_b.asp',
      form,
      interval,
      boundFunction,
      repeatBreaker = false;

    thisOpt.metrics.type = 'OnPage';
    OOo.Cache.overlay = overlay;

    overlay.id = 'oo_overlay';
    overlay.style.display = 'block'; //may have been hidden by previous invocation of an onPageCard
    overlay.className = '';
    iwrapper.className = 'iwrapper';
    wrapper.className = 'oo_cc_wrapper';
    close.className = 'oo_cc_close';
    close.href = "javascript:void(0)";
    close.title = opt.closeTitle || "Close Feedback Card";
    wrapper.style.visibility = 'hidden'; //hide the frame till it's ready

    if (OOo.Browser.IE) {
      if (!window.XMLHttpRequest) {
        overlay.style.position = 'absolute';
        overlay.style.width = Math.max(d.documentElement.clientWidth, d.body.offsetWidth) + 'px';
        overlay.style.height = Math.max(d.documentElement.clientHeight, d.body.offsetHeight) + 'px';

        wrapper.style.position = 'absolute';
      }
      else {
        var
          bodyShadow = d.createElement("div"),
          topShadow = d.createElement("div"),
          bottomShadow = d.createElement("div"),
          shadows = d.createElement("div");

        shadows.className = "oo_shadows";
        bodyShadow.className = 'oo_body';
        topShadow.className = 'oo_top';
        bottomShadow.className = 'oo_bottom';
        shadows.appendChild(bodyShadow);
        shadows.appendChild(topShadow);
        shadows.appendChild(bottomShadow);
        iwrapper.appendChild(shadows);
      }
    }

    OOo.addEventListener(close, 'click', _destroyOnPageCC);
    if (opt.closeWithOverlay && !OOo.Browser.isMobile) {
      wrapper.appendChild(iclose);
      iclose.onclick = _destroyOnPageCC;
      overlay.onclick = _destroyOnPageCC;
    }

    frame.src = ONPAGE_REQ;
    frame.name = frameName;

    iwrapper.appendChild(close);
    iwrapper.appendChild(frame);
    wrapper.appendChild(iwrapper);
    tempContainer.appendChild(wrapper);
    tempContainer.appendChild(overlay);
    d.body.appendChild(tempContainer);

    boundFunction = _handleCrossFrameCommunication.bind(this);
    window.postMessage ? OOo.addEventListener(window, "message", boundFunction) : interval = setInterval(_handleCrossFrameCommunication.bind(this), 500);

    form = OOo.appendOOForm(thisOpt, frameName);
    thisOpt.metrics.time2 = (new Date()).getTime();
    form.submit();

    function _handleCrossFrameCommunication(e) {
      if ((e && e.origin != 'https://secure.opinionlab.com') || (!e && location.hash.substr(1,3) != 'OL=')) return;
      var message = e ? e.data : location.hash.slice(4), height = parseInt(message), d = document;
      if (!e) location.hash = '';
      if (height > 0) {
        if (repeatBreaker) return;
        repeatBreaker = true;
        var
          innerHeight = window.innerHeight || d.documentElement.clientHeight,
          frameHeight = height;

        if (frameHeight > innerHeight) {
          frameHeight = innerHeight - 40;
          frame.style.width = '555px';
        }

        frame.style.height = frameHeight + 'px';
        if (OOo.Browser.IE && OOo.Browser.Version < 7) iclose.style.height = wrapper.offsetHeight + 'px';
        wrapper.style.visibility = 'visible';
        overlay.className = "no_loading";
      }
      else if (message == 'submitted') _destroyOnPageCC();
    }

    function _destroyOnPageCC() {
      overlay.style.display = 'none';
      overlay.className = '';
      d.body.removeChild(wrapper);
      window.postMessage ? OOo.removeEventListener(window, 'message', boundFunction) : window.clearInterval(interval);
      repeatBreaker = false;
    }
  }
});

OOo.Invitation = function(options) {
  this.options = {
    tunnelCookie: 'oo_inv_tunnel',
    repromptTime: 604800,
    responseRate: 50,
    repromptCookie: 'oo_inv_reprompt',
    promptMarkup: 'oo_inv_prompt.html',
    promptStyles: 'oo_inverstitial_style.css',
    percentageCookie: 'oo_inv_percent',
    pagesHitCookie: 'oo_inv_hit',
    popupType: 'popunder',
    promptDelay: 0,
    neverShowAgainButton: false,
    loadPopupInBackground: false,
    tealeafCookieName: 'TLTSID'
  };
  this.popupShown = false;
  OOo.extend(this.options, options);

  var opt = this.options, pagesHit = parseInt(OOo.readCookie(opt.pagesHitCookie)) || 0;

  OOo.Invitation.friendlyDomains = opt.friendlyDomains || null;

  if (location.search.search('evs') != -1) {
    opt.loadPopupInBackground = true;
    this.launchPopup();
    OOo.createCookie(opt.repromptCookie, 1, opt.repromptTime == -1 ? 0 : opt.repromptTime);
  }
  setTimeout(function(){
    if (opt.area && location.href.search(opt.area) == -1 && window.oo_inv_monitor) {
      this.options.popupType = 'popup';
      this.launchPopup();
    }
  }.bind(this), 1000);

  if(OOo.readCookie(opt.repromptCookie)) return;

  if (opt.thirdPartyCookies && OOo.checkThirdPartyCookies(opt.thirdPartyCookies)) return;

  if (!OOo.readCookie(opt.percentageCookie)) {
    OOo.createCookie(
      opt.percentageCookie,
      (Math.random() > 1 - (opt.responseRate/100)) ? "1" : "0"
    );
  }
  if (typeof(opt.promptTrigger) != 'undefined') {
    if (opt.promptTrigger instanceof RegExp) {
      if (!window.location.href.match(opt.promptTrigger)) return;
    }
    else if (opt.promptTrigger instanceof Array) {
      if (!OOo.checkTunnel(opt.promptTrigger, opt.tunnelCookie)) return;
    }
  }
  pagesHit++;
  OOo.createCookie(opt.pagesHitCookie, pagesHit);
  if (opt.pagesHit && pagesHit < opt.pagesHit) return;
  OOo.eraseCookie(opt.tunnelCookie);
  if (OOo.readCookie(opt.percentageCookie)=='1'){
    window.setTimeout(function(){
      OOo.createCookie(opt.repromptCookie, 1, opt.repromptTime);
      this.getPrompt();
    }.bind(this), opt.promptDelay * 1000);
  }
};

OOo.Invitation.prototype = {
  getPrompt: function() {
    var
      xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"),
      thisObj = this,
      styles = document.createElement('link'),
      head;

    xmlhttp.onreadystatechange = function() {
      if (xmlhttp.readyState != 4) return;
      thisObj.showPrompt(xmlhttp.responseText);
    };
    xmlhttp.open("GET", this.options.pathToAssets + this.options.promptMarkup, true);
    xmlhttp.send(null);
  },

  showPrompt: function(markup) {
    var
      d = document,
      container = d.createElement('div'),
      overlay = OOo.Cache.overlay || d.createElement('div'),
      image,
      neverShowEl,
      opt = this.options;

    overlay.id = 'oo_overlay';
    container.id = 'oo_container';
    container.style.visibility = 'hidden';
    container.innerHTML = markup;
    container.appendChild(overlay);
    d.body.appendChild(container);

    if (opt.companyLogo) {
      image = new Image();
      image.src = opt.companyLogo;
      OOo.$('oo_company_logo').appendChild(image);
    }
    OOo.addEventListener(
      OOo.$('oo_launch_prompt'),
      'click',
      this.launchPopup.bind(this),
      false
    );

    if(opt.neverShowAgainButton) {
      neverShowEl = OOo.$('oo_never_show');
      neverShowEl.style.visibility = 'visible';
      OOo.addEventListener(
        neverShowEl,
        'click',
        this.killPrompt.bind(this),
        false
      );
    }

    if (OOo.Browser.IE && !window.XMLHttpRequest) {
      overlay.style.position = 'absolute';
      overlay.style.width = Math.max(document.documentElement.clientWidth, document.body.offsetWidth) + 'px';
      overlay.style.height =  Math.max(document.documentElement.clientHeight, document.body.offsetHeight) + 'px';
      container.style.position = 'absolute';
    }


    container.style.visibility = 'visible';
    overlay.className = 'no_loading';
  },

  launchPopup: function() {
    if (this.popupShown) return;
    this.popupShown = true;
    var
      opt = this.options,
      referrer = window.location.href,
      url = opt.popupType == 'popup' ? 'https://secure.opinionlab.com/ccc01/comment_card.asp?' : opt.pathToAssets + 'oo_inv_monitor.html?',
      urlParams,
      customVars = [],
      popupDimensions = opt.asm ? [555, 500] : [545, 200],
      popup,
      tealeafId = OOo.readCookie(opt.teleafId),
      metrics = OOo.createMetrics();

    popupDimensions = opt.newWindowSize || popupDimensions;
    if (opt.referrerRewrite) {
      metrics.referer = opt.referrerRewrite.searchPattern ?
        window.location.href.replace(opt.referrerRewrite.searchPattern, opt.referrerRewrite.replacePattern) :
        opt.referrerRewrite.replacePattern;
    }

    if (opt.thirdPartyCookies) OOo.setThirdPartyCookies(opt.thirdPartyCookies);

    urlParams = OOo.toQueryString(metrics) + '&type=Invitation';
    if (opt.customVariables) urlParams += '&customVars=' + encodeURIComponent(OOo.serialize(opt.customVariables));
    urlParams += '&custom_var=' + tealeafId;
    if (opt.clickTalePID && ClickTaleGetUID && ClickTaleGetSID) urlParams += '|' + [opt.clickTalePID, ClickTaleGetUID(), ClickTaleGetSID()].join('/');
    popup = window.open(url+urlParams,'OnlineOpinionInvitation','location=no,status=no,width='+popupDimensions[0]+',height='+popupDimensions[1]);

    if (!opt.loadPopupInBackground && OOo.$('oo_container')) OOo.Invitation.hidePrompt();

    if (opt.popupType == 'popunder') {
      if (!OOo.Browser.Chrome) {
        popup.blur();
        window.focus();
      }
      else {
        alert(opt.chromeMainWinPrompt || 'Please fill out the form behind this window when you are finished.');
        popup.window.prompt = opt.chromeSurveyPrompt;
      }
    }
    else if (window.oo_inv_monitor) {
      window.blur();
      popup.focus();
    }
  },

  killPrompt: function() {
    OOo.createCookie(this.options.repromptCookie, 1, 1825); // Don't show again for 5 years
    OOo.Invitation.hidePrompt();
  }
};

OOo.extend(OOo.Invitation, {
  hidePrompt: function() {
    OOo.$('oo_container').style.display='none';
  }
});






