// This condition avoids the redefinition of the object
if (typeof trapezeShare == 'undefined') { 
    trapezeShare = new Object();
    
    var userAgent = navigator.userAgent.toLowerCase();
    
    trapezeShare = {
        isReady: false, // Is true when the DOM is already loaded, false otherwise
        readyBound: false, // Is true when the bindReady is applyed, false otherwise
    
        browser: {
            version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
            safari: /webkit/.test(userAgent),
            opera: /opera/.test(userAgent),
            msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
            mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
        },
    
        getElementsByClass: function(searchClass, domNode, tagName) {
            if (domNode == null) domNode = document;
            if (tagName == null) tagName = '*';
            var el = new Array();
            var tags = domNode.getElementsByTagName(tagName);
            var tcl = " "+searchClass+" ";
            for(i=0,j=0; i<tags.length; i++) {
                var test = " " + tags[i].className + " ";
                if (test.indexOf(tcl) != -1)
                    el[j++] = tags[i];
            }
            return el;
        },
    
        registerEventHandler: function(node, event, handler) {
            if (typeof node.addEventListener == "function")
                node.addEventListener(event, handler, false);
            else
                node.attachEvent("on" + event, handler);
        },
    
        unregisterEventHandler: function(node, event, handler) {
              if (typeof node.removeEventListener == "function")
                node.removeEventListener(event, handler, false);
              else
                node.detachEvent("on" + event, handler);
        },
    
        normaliseEvent: function(event) {
          if (!event.stopPropagation) {
            event.stopPropagation = function() {this.cancelBubble = true;};
            event.preventDefault = function() {this.returnValue = false;};
          }
          if (!event.stop) {
            event.stop = function() {
              this.stopPropagation();
              this.preventDefault();
            };
          }
    
          if (event.srcElement && !event.target)
            event.target = event.srcElement;
          if ((event.toElement || event.fromElement) && !event.relatedTarget)
            event.relatedTarget = event.toElement || event.fromElement;
          if (event.clientX != undefined && event.pageX == undefined) {
            event.pageX = event.clientX + document.body.scrollLeft;
            event.pageY = event.clientY + document.body.scrollTop;
          }
          if (event.type == "keypress") {
            if (event.charCode === 0 || event.charCode == undefined)
              event.character = String.fromCharCode(event.keyCode);
            else
              event.character = String.fromCharCode(event.charCode);
          }
          return event;
        },
    
        addHandler: function(node, type, handler) {
          function wrapHandler(event) {
            handler(trapezeShare.normaliseEvent(event || window.event));
          }
          trapezeShare.registerEventHandler(node, type, wrapHandler);
          return {node: node, type: type, handler: wrapHandler};
        },
    
        removeHandler: function(object) {
          trapezeShare.unregisterEventHandler(object.node, object.type, object.handler);
        },
    
        bindReady: function(){
            if ( this.readyBound ) return;
            this.readyBound = true;
    
            // Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
            if ( document.addEventListener && !this.browser.opera)
                // Use the handy event callback
                document.addEventListener("DOMContentLoaded", this.ready, false);
    
            // If IE is used and is not in a frame
            // Continually check to see if the document is ready
            if ( this.browser.msie && window == top ) (function(){
                if (this.isReady) return;
                try {
                    // If IE is used, use the trick by Diego Perini
                    // http://javascript.nwbox.com/IEContentLoaded/
                    document.documentElement.doScroll("left");
                } catch( error ) {
                    setTimeout( arguments.callee, 0 );
                    return;
                }
                // and execute any waiting functions
                trapezeShare.ready();
            })();
    
            if ( this.browser.opera )
                document.addEventListener( "DOMContentLoaded", function () {
                    if (this.isReady) return; // TODO this.isReady??
                    for (var i = 0; i < document.styleSheets.length; i++)
                        if (document.styleSheets[i].disabled) {
                            setTimeout( arguments.callee, 0 );
                            return;
                        }
                    // and execute any waiting functions
                    this.ready();
                }, false);
    
            if ( this.browser.safari ) {
                var numStyles;
                (function(){
                    if (this.isReady) return;
                    if ( document.readyState != "loaded" && document.readyState != "complete" ) {
                        setTimeout( arguments.callee, 0 );
                        return;
                    }
                    if ( numStyles === undefined ){
                        num_style_tags = document.getElementsByTagName('style').length;
                        num_linkcss_tags = 0;
                        link_tags = document.getElementsByTagName('link');
                        for (i=0; i<link_tags.length; i++){
                            if (link_tags[i].getAttribute('rel') == 'stylesheet') num_linkcss_tags++;
                        }
                        numStyles = num_style_tags + num_linkcss_tags;    
                    }
                    if ( document.styleSheets.length != numStyles ) {
                        setTimeout( arguments.callee, 0 );
                        return;
                    }
                    // and execute any waiting functions
                    this.ready();
                })();
            }
    
        },
    
    
        // Get the left and top positions of an object related to the visible area of the browser
        get_position: function(obj) {
            var sumLeft = sumTop = 0;
            
            //Verify if the browser suports offsetParent
            if (obj.offsetParent) {
                do {
                    //alert('obj: ' + obj + ' | inside again');
                    sumLeft += obj.offsetLeft;
                    sumTop += obj.offsetTop;
                    //alert('obj: ' + obj + ' | inside after');
                } while (obj = obj.offsetParent); // the igual (=) operator is used insted of the compare (==) operator so it keeps looping until it finds no Parent
                var p_obj = new Object();
                p_obj.left = sumLeft;
                p_obj.top = sumTop;
                //alert('obj_left: ' + p_obj.left + ' | obj_top: ' + p_obj.top);
                return p_obj;
            }
        },
        
        hideAllShared: function() {
            // hide the Social Boxes
            var social_sites = trapezeShare.getElementsByClass('ts-social-sites', null, 'div');
            for (var i=0; i < social_sites.length; i++)
                if (social_sites[i].style.display != "none") {
                     social_sites[i].style.display = "none";
                     
                     //Hack for ie
                     if (document.all) {
                        frame_mask = social_sites[i].parentNode.getElementsByTagName('iframe')[0];
                        if (frame_mask != 'undefined') frame_mask.style.display = social_sites[i].style.display;
                     }
                }
            // hide the Email Boxes
            var email_forms = trapezeShare.getElementsByClass('te-email-share', null, 'div');
            for (var j=0; j < email_forms.length; j++)
                if (email_forms[j].style.display != "none") {
                    email_forms[j].style.display = "none";

                     //Hack for ie
                     if (document.all) {
                        frame_mask = email_forms[j].parentNode.getElementsByTagName('iframe')[0];
                        if (frame_mask != 'undefined') frame_mask.style.display = email_forms[j].style.display;
                     }

                }
        },
  
        ready: function() {
            // Make sure that the DOM is not already loaded
            if ( !this.isReady ) {
                // Remember that the DOM is ready
                this.isReady = true;

                // Call social-share if it's defined
                if ((typeof trapezeShare.socialShare != 'undefined')) trapezeShare.socialShare.ready();
                // Call email-share if it's defined
                if ((typeof trapezeShare.emailShare != 'undefined')) trapezeShare.emailShare.ready();                
            }
        }
    
    }
    
    trapezeShare.bindReady();
}