var undefined;

var tooltip = function (options) {

    var self = this;

    this.defaults = {
        tooltipClass: '.tooltip-me',
        tooltipWidth: 680,
        offSetX: 60,
        offSetY: 0
    };

    this.settings = $JQ().extend({}, this.defaults, options);

    function _init() {
        console.log("creating tool tips...");
        self.tooltipTriggers = $JQ.ASME.mainContentDiv.find(self.settings.tooltipClass)
        _buildToolTips();
        _setListeners();
    };

    function _buildToolTips() {
        self.tooltipTriggers.each(function () {
            var $this = $JQ(this);
            var trigger = this;
            var $toolTipContent = $this.find('.tooltip-content');
            if ($toolTipContent.length == 0) {
                $toolTipContent = $this.parent('.list-item').find('.tooltip-content');
            }


            var $div = document.createElement('div');
            $div = $JQ($div);

            var html = [
				'<div class="content">',
					'' + $toolTipContent.html() + '',
				'</div>',
				'<div class="arrow"></div>'
			];

            html = html.join('');

            $div.addClass('tooltip');
            $div.css('width', self.settings.tooltipWidth);
            $div.html(html);
            $div.appended = false;

            trigger.tooltip = $div;


            /* 
            NOTE: the ajax code will not be used, but leaving it in case it's needed in future releases
            this grabs the html from the link(these will all be same-domain), slices into the meat(body) of the data, converts that into a JQ object and finds the article headline and the first paragraph.
				
            then the tooltip div is constructed and attached to each anchor tag as an attribute
            */
            /*
            $JQ.ajax({
            url: this.href,
            success: function(data) {
            var start = data.indexOf('<body');
            var end = data.indexOf('</body>');
				
            data = data.slice(start,end);
            //console.log("the sliced data");
            //console.log(data);
				
            var $html = document.createElement('html');
            $html = $JQ($html);
            $html.html(data);
				
            var $contentDiv = $html.find('.middle-col');
            $contentDiv.find('.primary-image').remove();
				
            var text = $html.find('.middle-col p:first').text();
				
            if(text.length > 140)
            text = text.slice(0,140);
				
            text = text.concat('...');
				
            var title = '<h5>' + $html.find('h2').text() + '</h5>';
            var previewP = '<p>' + text + '</p>';
				
            var $div = document.createElement('div');
            $div = $JQ($div);
				
            var html = [
            '<div class="content">',
            '' + title + previewP + '',
            '</div>'
            ];
				
            html = html.join('');
				
            $div.addClass('tooltip');
            $div.css('width', self.settings.tooltipWidth);
            $div.html(html);
            $div.appended = false;
				
            trigger.tooltip = $div;  
            },
            error: function() {
            var $div = document.createElement('div');
            $div = $JQ($div);
				
            var html = [
            '<div class="content">',
            '<p>No preview available</p>',
            '</div>'
            ];
				
            html = html.join('');
				
            $div.addClass('tooltip');
            $div.css('width', self.settings.tooltipWidth);
            $div.html(html);
            $div.appended = false;
				
            trigger.tooltip = $div;		  
            }
            });*/

        });
    }

    function _setListeners() {
        /*
        when the tooltip trigger(a link) is mouseover, if the tooltip has not already been appended, it is appended to the body and positioned. If it hasalready been, it is just positioned.
        */
		
		self.tooltipTriggers.hover(function(e) {
			var $this = $JQ(this);
            var offset = $this.offset();
            var left = offset.left + self.settings.offSetX;
            var top = offset.top - (this.tooltip.height()) - self.settings.offSetY;
            timeout = '';
            if (!this.tooltip.appended) {
                console.log("does not exist yet");
                $JQ('body').append(this.tooltip);
                this.tooltip.appended = true;
                this.tooltip.css('left', left);
                this.tooltip.css('top', top);
            }
            else {
                console.log("it exists already");
                
                $this.tooltip = this.tooltip;
                timeout = setTimeout(function () {
                    $JQ('.tooltip').css('left', -9999);
                    $this.tooltip.css('left', left);
                    $this.tooltip.css('top', top);
                }, 500);
            }								
		}, function (e) {
			if (timeout != undefined)
                clearTimeout(timeout);
            this.tooltip.css('left', -9999);
		});

    }

    _init();

};
