// Copyright (c) 2011 Basis Technology Corp.
			function formatVideoTitle(title, currentArray, currentIndex, currentOpts) {
			return '<div id="tip5-title" style="height:20px;"><span style="float:right;"><a href="#" onclick="parent.jQuery.fancybox.close();"><img src="/graphics/close-label.gif"></a></span></div>';
				}
				
            function jsGetValue(key) {
                var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
                for (var i = 0; i < hashes.length; i++) {
                    var keyThenVal = hashes[i].split('=');
                    if (key == keyThenVal[0]) {
                        return keyThenVal[1];
                    }
                }
                return null;
            }
            
var Helper = {
    preInit: function () {
        document.write = this.write;
        if (Analytics.available()) {
            Analytics.preInit();
        }
    },
    init: function () {
        this.hiddenSection = document.getElementById('hidden-section').getElementsByTagName('div')[0];
        if (this.hiddenSection) {
            this.writeContainer = this.hiddenSection.appendChild(document.createElement('div'));
        }
        if (Analytics.available()) {
            Analytics.init();
        }
        if (LanguageForm.available()) {
            LanguageForm.init();
        }
        if (RedirectForm.available()) {
            RedirectForm.init();
        }
        if (HoverNav.available()) {
            HoverNav.init();
        }
        if (Tabs.available()) {
            Tabs.init();
        }
        if (Maps.available()) {
            Maps.init();
        }
        if (Rotator.available()) {
            Rotator.init();
        }
        if (ManagedForms.available()) {
            ManagedForms.init();
        }
    },
    getElement: function (e) {
        var t;
        if (!e) {
            e = window.event;
        }
        if (e.target) {
            t = e.target;
        } else if (e.srcElement) {
            t = e.srcElement;
        }
        if (t.nodeType != 1) {
            t = t.parentNode;
        }
        return t;
    },
    XmlHttp: [function () {
        return new XMLHttpRequest();
    }, function () {
        return new ActiveXObject('Msxml2.XMLHTTP');
    }, function () {
        return new ActiveXObject('Msxml3.XMLHTTP');
    }, function () {
        return new ActiveXObject('Microsoft.XMLHTTP');
    }],
    sendRequest: function (url, callback, getData, postData, req) {
        if (!req) {
            req = Helper.createXmlHttpObject();
            if (!req) {
                return;
            }
        }
        var getString = '';
        var postString;
        if (getData) {
            for (var name in getData) {
                getString += encodeURIComponent(name.toString()) + '=' + encodeURIComponent(getData[name].toString()) + '&';
            }
            var index = url.indexOf('?');
            if (index < 0) {
                url += '?' + getString;
            }
            if (index > -1) {
                if (index == url.length - 1) {
                    url += getString;
                } else {
                    url += '&' + getString;
                }
            }
        }
        if (postData) {
            postString = '';
            for (var name in postData) {
                postString += encodeURIComponent(name.toString()) + '=' + encodeURIComponent(postData[name].toString()) + '&';
            }
        }
        var method = (postData) ? 'POST' : 'GET';
        req.open(method, url, true);
        if (postData) {
            req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        }
        req.onreadystatechange = function () {
            if (req.readyState != 4) {
                return;
            }
            if (req.status != 200 && req.status != 304) {
                return;
            }
            callback(req);
        };
        if (req.readyState == 4) {
            return;
        }
        req.send(postString);
    },
    createXmlHttpObject: function () {
        var xmlhttp = false;
        for (var i = 0; i < Helper.XmlHttp.length; i++) {
            try {
                xmlhttp = Helper.XmlHttp[i]();
            } catch (e) {
                continue;
            }
            break;
        }
        return xmlhttp;
    },
    createCookie: function (name, value, days, hours, minutes, seconds) {
        var expires;
        if (!days) {
            days = 0;
        }
        if (!hours) {
            hours = 0;
        }
        if (!minutes) {
            minutes = 0;
        }
        if (!seconds) {
            seconds = 0;
        }
        if (days || hours || minutes || seconds) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000) + (hours * 60 * 60 * 1000) + (minutes * 60 * 1000) + (seconds * 1000));
            expires = '; expires=' + date.toGMTString();
        } else {
            expires = '';
        }
        document.cookie = name + '=' + value + expires + '; path=/';
    },
    readCookie: function (name) {
        var nameEQ = name + '=';
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) {
            var 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;
    },
    eraseCookie: function (name) {
        Helper.createCookie(name, '', -1);
    },
    addLoad: function (func) {
        var oldload = window.onload;
        window.onload = function () {
            if (oldload) {
                oldload();
            }
            func();
        };
    },
    addUnload: function (func) {
        var oldunload = window.onunload;
        window.onunload = function () {
            if (oldunload) {
                oldunload();
            }
            func();
        };
    },
    addScript: function (options) {
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.async = !options.callback && !options.scriptText;
        if (options.scriptText) {
            script.text = options.scriptText;
        } else {
            script.src = options.location;
        }
        var scripts = document.getElementsByTagName('script');
        var prevScript = scripts[scripts.length - 1];
        prevScript.parentNode.insertBefore(script, prevScript);
        if (options.callback) {
            Helper.callbacks = Helper.callbacks || [];
            Helper.callbacks.push(options);
            Helper.waitSyncScript();
        }
    },
    waitSyncScript: function () {
        for (var i = Helper.callbacks.length - 1; i > -1; i--) {
            if (Helper.callbacks[i].callback()) {
                Helper.callbacks.splice(i, 1);
                i = Helper.callbacks.length - 1;
            }
        }
        if (Helper.callbacks.length > 0) {
            setTimeout(Helper.waitSyncScript, 50);
        }
    },
    write: function (text) {
        Helper.writeContent = Helper.writeContent || '';
        Helper.writeContent += text;
        if (Helper.writeContainer) {
            Helper.writeContainer.innerHTML += Helper.writeContent;
            Helper.writeContent = '';
            Helper.writeContainer = Helper.hiddenSection.appendChild(document.createElement('div'));
        }
    },
    scrollToElement: function (elm) {
        var x = 0;
        var y = 0;
        while (elm !== null) {
            x += elm.offsetLeft;
            y += elm.offsetTop;
            elm = elm.offsetParent;
        }
        window.scrollTo(x, y);
    },
    getClassRegex: function (className) {
        var regex = new RegExp('(^| )' + className + '( |$)');
        return regex;
    },
    hasClass: function (elm, className) {
        return (Helper.getClassRegex(className).exec(elm.className) != null);
    },
    toggleClass: function (elm, className) {
        if (Helper.getClassRegex(className).exec(elm.className) != null) {
            Helper.removeClass(elm, className);
        } else {
            Helper.addClass(elm, className);
        }
    },
    removeClass: function (elm, className) {
        var regex = Helper.getClassRegex(className);
        var match = regex.exec(elm.className);
        if (match != null) {
            elm.className = elm.className.replace(regex, (match.length > className.length + 1) ? ' ' : '');
        }
    },
    addClass: function (elm, className) {
        var regex = Helper.getClassRegex(className);
        var match = regex.exec(elm.className);
        if (match == null) {
            elm.className += ' ' + className;
        }
    }
};
var Analytics = {
    available: function () {
        return true;
    },
    preInit: function () {},
    init: function () {
        google_conversion_id = 1070015830;
        google_conversion_value = 0;
        google_conversion_language = 'en';
        google_conversion_format = '3';
        switch (Helper.pageId) {
        case 'thank-you':
            google_conversion_color = 'ffffff';
            google_conversion_label = 'JD9ACMjR8wEQ1sqc_gM';
            break;
        case 'entity-extraction-whitepaper-thank-you':
        case 'lucene-and-solr-whitepaper-thank-you':
        case 'name-resolution-thank-you':
        case 'kyc-whitepaper-thank-you':
        case 'e-discovery-whitepaper-thank-you':
        case 'osint-whitepaper-thank-you':
        case 'text-analytics-thank-you':
            google_conversion_color = '666666';
            google_conversion_label = 'lead';
            break;
        }
        if (google_conversion_label) {
            Helper.addScript({
                location: 'http://www.googleadservices.com/pagead/conversion.js'
            });
        }
    }
};
var _gaq;
var llactid;
var google_conversion_id;
var google_conversion_language;
var google_conversion_format;
var google_conversion_color;
var google_conversion_label;
var google_conversion_value;
var LanguageForm = {
    available: function () {
        this.form = document.getElementById('language-form');
        if (this.form) {
            return true;
        } else {
            return false;
        }
    },
    init: function () {
        this.select = document.getElementById('language-select');
        this.select.onchange = this.change;
        this.submit = document.getElementById('language-submit');
        this.submit.style.display = 'none';
    },
    change: function () {
        window.location = LanguageForm.select.getElementsByTagName('option')[LanguageForm.select.selectedIndex].value;
    }
};
var RedirectForm = {
    available: function () {
        this.form = document.getElementById('redirectform');
        if (this.form) {
            return true;
        } else {
            return false;
        }
    },
    init: function () {
        this.form.submit();
    }
};
var HoverNav = {
    available: function () {
        this.nav = document.getElementById('headernav');
        if (this.nav) {
            return true;
        } else {
            return false;
        }
    },
    init: function (e) {
        if (this === HoverNav) {
            Helper.addUnload(HoverNav.init);
        }
        HoverNav.headerItemClass = 'headeritem';
        HoverNav.headerItemHoverClass = 'hover';
        var items = HoverNav.nav.getElementsByTagName('li');
        for (var i = items.length - 1; i > -1; i--) {
            if (items[i].parentNode == HoverNav.nav) {
                items[i].onmouseover = HoverNav.display;
                items[i].onmouseout = HoverNav.hide;
                items[i].className = HoverNav.headerItemClass;
            }
        }
    },
    display: function (e) {
        var t = Helper.getElement(e);
        while (t.parentNode != HoverNav.nav && (t.nodeName.toLowerCase() != 'div' || t.className == 'dropdown')) {
            t = t.parentNode;
        }
        if (HoverNav.ignoreMouseEvent(e, t)) {
            return;
        }
        if (t.className == HoverNav.headerItemClass) {
            t.className = HoverNav.headerItemClass + ' ' + HoverNav.headerItemHoverClass;
        }
    },
    hide: function (e) {
        var t = Helper.getElement(e);
        while (t.parentNode != HoverNav.nav && (t.nodeName.toLowerCase() != 'div' || t.className == 'dropdown')) {
            t = t.parentNode;
        }
        if (HoverNav.ignoreMouseEvent(e, t)) {
            return;
        }
        if (t.className != HoverNav.headerItemClass) {
            t.className = HoverNav.headerItemClass;
        }
    },
    ignoreMouseEvent: function (e, t) {
        if (!e) {
            e = window.event;
        }
        var rt = (e.relatedTarget) ? e.relatedTarget : ((e.type == 'mouseover') ? e.fromElement : e.toElement);
        while (rt && rt != t && (rt.nodeName.toLowerCase() != 'div' || rt.className == 'dropdown')) {
            rt = rt.parentNode;
        }
        if (rt && rt == t) {
            return true;
        }
        return false;
    }
};
var Tabs = {
    available: function () {
        if (document.getElementById('tabbed-content-0')) {
            return true;
        } else {
            return false;
        }
    },
    init: function () {
        this.selectedClass = 'selected';
        this.tabs = [];
        var position = 0;
        var tabElement;
        while (tabElement = document.getElementById('tabbed-content-' + position)) {
            this.tabs[position] = new Tab(tabElement, position);
            position++;
        }
    },
    select: function (e) {
        var targ = Helper.getElement(e);
        while (targ.nodeName.toLowerCase() != 'a') {
            targ = targ.parentNode;
        }
        var tabSet = 0;
        var selectTab = 0;
        var found = false;
        for (var i = Tabs.tabs.length - 1; i > -1; i--) {
            for (var j = Tabs.tabs[i].tabLinks.length - 1; j > -1; j--) {
                if (Tabs.tabs[i].tabLinks[j].link == targ) {
                    tabSet = i;
                    selectTab = j;
                    found = true;
                    break;
                }
            }
            if (found) {
                break;
            }
        }
        for (var i = Tabs.tabs[tabSet].tabLinks.length - 1; i > -1; i--) {
            if (i == selectTab) {
                Helper.addClass(Tabs.tabs[tabSet].tabLinks[i].element, Tabs.selectedClass);
                Helper.addClass(Tabs.tabs[tabSet].tabLinks[i].tabBody.element, Tabs.selectedClass);
            } else {
                Helper.removeClass(Tabs.tabs[tabSet].tabLinks[i].element, Tabs.selectedClass);
                Helper.removeClass(Tabs.tabs[tabSet].tabLinks[i].tabBody.element, Tabs.selectedClass);
            }
        }
        return false;
    }
};
var Tab = function (element, position) {
    this.element = element;
    this.position = position;
    this.tabLinks = [];
    var count = 0;
    var items = this.element.getElementsByTagName('li');
    for (var i = items.length - 1; i > -1; i--) {
        if (items[i].id.length > 0) {
            this.tabLinks[count] = new TabLink(items[i], i);
            count++;
        }
    }
};
var TabLink = function (element, position) {
    this.element = element;
    this.link = this.element.getElementsByTagName('a')[0];
    this.link.onclick = Tabs.select;
    this.selected = Helper.hasClass(this.element, Tabs.selectedClass);
    this.tabBody = new TabBody(document.getElementById(this.element.id + '-content'), this.selected);
};
var TabBody = function (element, selected) {
    this.element = element;
    if (!selected) {
        Helper.removeClass(this.element, Tabs.selectedClass);
    } else {
        Helper.addClass(this.element, Tabs.selectedClass);
    }
};
var Maps = {
    available: function () {
        if (document.getElementById('map-0')) {
            return true;
        } else {
            return false;
        }
    },
    init: function () {
        var url = 'http://maps.google.com/maps/api/js?sensor=false&callback=Maps.loaded&language=site-lang';
        var siteLang = document.getElementsByTagName('html')[0].lang;
        url = url.replace('language=site-lang', 'language=' + siteLang);
        Helper.addScript({
            location: url
        });
    },
    loaded: function () {
        this.geocoder = new google.maps.Geocoder();
        this.maps = [];
        this.mapElements = [];
        var position = 0;
        var mapElement;
        while (mapElement = document.getElementById('map-' + position)) {
            this.maps[position] = new Map(mapElement, position);
            this.maps[position].activate();
            position++;
        }
    }
};
var Map = function (element, position) {
    this.map = element;
    this.position = position;
    this.staticMap = this.map.getElementsByTagName('img')[0];
    this.address = this.map.getElementsByTagName('address')[0].innerHTML;
    this.setLocation = function (results, status) {
        if (status == google.maps.GeocoderStatus.OK && results.length > 0) {
            var mapOptions = {
                zoom: 18,
                center: results[0].geometry.location,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            this.staticMap.style.display = 'none';
            this.dynamicMap = new google.maps.Map(this.map, mapOptions);
            var markerOptions = {
                map: this.dynamicMap,
                position: results[0].geometry.location
            };
            var marker = new google.maps.Marker(markerOptions);
        }
    };
    this.activate = function () {
        var geocodeOptions = {
            'address': this.address
        };
        var position = this.position;
        Maps.geocoder.geocode(geocodeOptions, function (results, status) {
            Maps.maps[position].setLocation(results, status);
        });
    };
};
var Rotator = {
    available: function () {
        this.displayContainer = document.getElementById('main-rotator');
        if (this.displayContainer) {
            return true;
        } else {
            return false;
        }
    },
    init: function () {
        var lists = this.displayContainer.getElementsByTagName('ul');
        var listElms = lists[0].getElementsByTagName('li');
        var imageElms = lists[1].getElementsByTagName('li');
        this.list = [];
        for (var i = listElms.length - 1; i > -1; i--) {
            this.list[i] = new RotatorItem(listElms[i], imageElms[i], i === 0, i);
        }
        this.position = 0;
        this.interval = window.setInterval('Rotator.next()', 20000);
    },
    manualJump: function (e) {
        window.clearInterval(Rotator.interval);
        if (isNaN(e)) {
            var targ = Helper.getElement(e);
            for (var i = Rotator.list.length - 1; i > -1; i--) {
                if (Rotator.list[i].indicatorAnchor == targ) {
                    Rotator.next(Rotator.list[i].position);
                    break;
                }
            }
        } else {
            Rotator.next(e);
        }
        Rotator.interval = window.setInterval('Rotator.next()', 20000);
        return false;
    },
    manualNext: function (e) {
        window.clearInterval(Rotator.interval);
        Rotator.next();
        Rotator.interval = window.setInterval('Rotator.next()', 20000);
    },
    manualPrev: function (e) {
        window.clearInterval(Rotator.interval);
        Rotator.prev();
        Rotator.interval = window.setInterval('Rotator.next()', 20000);
    },
    next: function (newPosition) {
        var prevPosition = this.position;
        if (!isNaN(newPosition)) {
            this.position = newPosition;
        } else {
            if (this.position == this.list.length - 1) {
                this.position = 0;
            } else {
                this.position += 1;
            }
        }
        this.list[prevPosition].setVisible(false);
        this.list[this.position].setVisible(true);
    },
    prev: function (newPosition) {
        var prevPosition = this.position;
        if (!isNaN(newPosition)) {
            this.position = newPosition;
        } else {
            if (this.position == 0) {
                this.position = this.list.length - 1;
            } else {
                this.position -= 1;
            }
        }
        this.list[prevPosition].setVisible(false);
        this.list[this.position].setVisible(true);
    }
};
var RotatorItem = function (image, indicator, visible, position) {
    this.maxOpacity = 0.99;
    this.minOpacity = 0;
    this.indicatorSelectedClass = 'selected';
    this.indicatorAnchor = indicator.getElementsByTagName('a')[0];
    this.indicatorAnchor.onclick = Rotator.manualJump;
    this.indicator = indicator;
    this.anchor = image;
    if (position < 1) {
        this.indicator.className = this.indicatorSelectedClass;
    }
    this.position = position;
    this.opacity = (visible) ? this.maxOpacity : this.minOpacity;
    this.anchor.style.display = (visible) ? 'block' : 'none';
    this.opacityIncrement = 0.05;
    this.opacityInterval = 50;
    this.setVisible = function (visible) {
        this.visible = visible;
        window.clearInterval(this.interval);
        this.interval = window.setInterval('Rotator.list[' + this.position + '].' + ((visible) ? 'increase' : 'decrease') + 'Visibility()', this.opacityInterval);
    };
    this.increaseVisibility = function () {
        if (!this.visible) {
            return;
        }
        if (this.indicator.className === '') {
            this.anchor.style.display = 'block';
            this.indicator.className = this.indicatorSelectedClass;
        }
        if (this.opacity < this.maxOpacity) {
            this.setOpacity(this.opacity + this.opacityIncrement);
        } else {
            window.clearInterval(this.interval);
        }
    };
    this.decreaseVisibility = function () {
        if (this.visible) {
            return;
        }
        if (this.indicator.className !== '') {
            this.indicator.className = '';
        }
        if (this.opacity == this.minOpacity) {
            this.anchor.style.display = 'none';
        }
        if (this.opacity > this.minOpacity) {
            this.setOpacity(this.opacity - this.opacityIncrement);
        } else {
            window.clearInterval(this.interval);
        }
    };
    this.setOpacity = function (value) {
        this.opacity = (value > this.maxOpacity) ? this.maxOpacity : value;
        this.opacity = (this.opacity < this.minOpacity) ? this.minOpacity : this.opacity;
        this.anchor.style.opacity = this.opacity;
        this.anchor.style.MozOpacity = this.opacity;
    };
    this.setOpacity(this.opacity);
};
var ManagedForms = {
    available: function () {
        this.formElements = [];
        var formCount = document.forms.length;
        for (var i = 0; i < formCount; i++) {
            var currentForm = document.forms[i];
            if (currentForm.className.match(/(^|\s)managed-form($|\s)/)) {
                this.formElements.push(currentForm);
            }
        }
        if (this.formElements.length > 0) {
            return true;
        } else {
            return false;
        }
    },
    init: function () {
        this.errorElement = document.getElementById('form-error');
        for (var i = this.formElements.length - 1; i > -1; i--) {
            this.formElements[i].onsubmit = this.validate;
            var currentForm = ManagedForms.forms[i];
            var currentElements = this.formElements[i].elements;
            for (var i = currentElements.length - 1; i > -1; i--) {
                var definition = currentForm[currentElements[i].name];
                if (typeof(definition) !== 'undefined') {
                    if (typeof(definition) === 'string') {
                        currentForm[definition].elements = currentForm[definition].elements || [];
                        currentForm[definition].elements.push(currentElements[i]);
                    } else {
                        definition.elements = definition.elements || [];
                        definition.elements.push(currentElements[i]);
                    }
                }
            }
        }
    },
    validate: function (e) {
        ManagedForms.errorElement.style.display = 'none';
        var elm = Helper.getElement(e);
        var pos;
        for (var i = ManagedForms.formElements.length - 1; i > -1; i--) {
            if (ManagedForms.formElements[i] == elm) {
                pos = i;
                break;
            }
        }
        var currentForm = ManagedForms.forms[pos];
        for (var i in currentForm) {
            if (typeof(currentForm[i]) !== 'string') {
                var currentElement = currentForm[i].elements[0];
                var type = currentElement.type;
                if (currentForm[i].required) {
                    if (type == 'radio' || type == 'checkbox') {
                        var checked = false;
                        for (var j = currentForm[i].elements.length - 1; j > -1; j--) {
                            if (currentForm[i].elements[j].checked) {
                                checked = true;
                                break;
                            }
                        }
                        if (!checked) {
                            ManagedForms.displayError(currentForm[i], 'requirement');
                            return false;
                        }
                    } else if (type == 'text' || currentElement.nodeName.toLowerCase() == 'textarea') {
                        if (currentElement.value === '') {
                            ManagedForms.displayError(currentForm[i], 'requirement');
                            return false;
                        }
                    } else if (currentElement.nodeName.toLowerCase() == 'select') {
                        if (currentElement.multiple) {
                            if (currentElement.selectedIndex < 0) {
                                ManagedForms.displayError(currentForm[i], 'requirement');
                                return false;
                            }
                        } else {
                            if (currentElement.selectedIndex <= 0) {
                                ManagedForms.displayError(currentForm[i], 'requirement');
                                return false;
                            }
                        }
                    }
                }
                if (currentForm[i].validationTypes.length > 0) {
                    for (var j = currentForm[i].validationTypes.length - 1; j > -1; j--) {
                        if (type == 'radio' || type == 'checkbox' || currentElement.nodeName.toLowerCase() == 'select') {
                            var checkedValue = '';
                            var loopElms = (currentElement.nodeName.toLowerCase() == 'select') ? currentForm[i].elements[0].options : currentForm[i].elements;
                            for (var j = loopElms.length - 1; j > -1; j--) {
                                if (loopElms[j].checked || loopElms[j].selected) {
                                    if (checkedValue !== '') {
                                        checkedValue += ',';
                                    }
                                    checkedValue += loopElms[j].value;
                                    break;
                                }
                            }
                            if (!checkedValue.match(currentForm[i].validationTypes[j]) && checkedValue !== '') {
                                ManagedForms.displayError(currentForm[i], 'validation');
                                return false;
                            }
                        } else if (type == 'text' || currentElement.nodeName.toLowerCase() == 'textarea') {
                            if (!currentElement.value.match(currentForm[i].validationTypes[j]) && currentElement.value !== '') {
                                ManagedForms.displayError(currentForm[i], 'validation');
                                return false;
                            }
                        }
                    }
                }
            }
        }
        return true;
    },
    displayError: function (formElement, type) {
        var message = '';
        if (formElement.errorMessage === '') {
            message += formElement.label;
            switch (type) {
            case 'requirement':
                message += ' required';
                break;
            case 'validation':
                message += ' invalid';
                break;
            default:
                message += ' invalid';
                break;
            }
        } else {
            message = formElement.errorMessage;
        }
        ManagedForms.errorElement.innerHTML = message;
        ManagedForms.errorElement.style.display = 'inline';
        Helper.scrollToElement(ManagedForms.errorElement);
    }
};
Helper.preInit();
