// JavaScript Document
var Abirawa = window.Abirawa || {};

Abirawa.gridTip = {
	
	//global
	hideDelay: 10000,
	
	//initialize globals
	panel: null,
	showing: false,
    onTip: false,
	timeout: null,

	showPanel: function(){
		//alert(':o');
		if (!Abirawa.gridTip.showing) {
			Abirawa.gridTip.panel.show();
            Abirawa.gridTip.showing = true;
		}
	},
	
	hidePanel: function(){
		if (Abirawa.gridTip.showing) {
			Abirawa.gridTip.panel.hide();
			Abirawa.gridTip.showing = false;
            Abirawa.gridTip.onTip = false;
		}
	},
	
	isListView: function() {
		if ($(".listView").length) {
			return true;
		} else {
			return false;
		}
	},
    
    trimSummary: function(obj) {
        var maxlength = 120;
        var delim = '&hellip;';
		var str = $(".summary",obj).text();

        if(str.length > maxlength){
            var regex = new RegExp('(.{'+maxlength+'}.*?)\\b');
            var matches = str.match(regex);
            trimmedStr = matches[0] + delim;
            return trimmedStr;
        } else {
            return str;
        }
    },
	
	/* 	clone the entity in the grid view 
		reduce summary length to fit
		@input: entity - DOM grid entity
	*/
	populateTip: function(entity){
		
        //var summary = Abirawa.gridTip.trimSummary(entity);
		//$('.entityActions', Abirawa.gridTip.panel)
			//.empty()
			//.append($('.entityActions li:not(.price)', entity).clone())
			//.append($('.entityActions li.price', entity).clone());
		$('.tipContent', Abirawa.gridTip.panel)
			.empty()
			.append('<img src="'+$('.id', entity).html()+'"/>')
		    .append('<p align="left" style="font-size:9px;">'+$('.title', entity).html()+'</p>');
			//.append('<img src="../images/banner_album.jpg"/>');
			//.append($('.entityType', entity).clone())
			//.append($('.rating', entity).clone())
			//.append($('.price', entity).clone())
			//.append($('.version', entity).clone())
			//.append($('.released', entity).clone())
			//.append($('h5', entity).clone())
			//.append('<p class="summary">'+ summary +'</p>');
			
	},

	/* 	position the tool tip
		@input: thumbPosition - JQuery pos object
	*/
	positionTip: function(thumb){

        var containerWidth = thumb.parents('.sectionContent').width();
        
        var tipWidth = parseInt(Abirawa.gridTip.panel.width() + 40); //tip width + padding
        var thumbWidth = thumb.width();
        //alert(thumbWidth);
        var tipYOffset = 35;
        var tipXOffset = thumbWidth;
        
	// adding and removing to reload the shadow in ie
        if(Abirawa.gridTip.panel.hasClass('tipLeft')){
            Abirawa.gridTip.panel.removeClass('tipLeft');
            Abirawa.gridTip.panel.addClass('tipLeft');
        } 
	 else {
            Abirawa.gridTip.panel.addClass('tipLeft');
            Abirawa.gridTip.panel.removeClass('tipLeft');
	}

    var thumbPosition = thumb.position();
	var tipY = thumbPosition.top - tipYOffset;
	var tipX = thumbPosition.left + tipXOffset;
		
        // check that the tip isn't going out of bounds
	if ((tipX + tipWidth) > containerWidth) {
         	tipXOffset = tipWidth;
            	Abirawa.gridTip.panel.removeClass('tipLeft');
            	Abirawa.gridTip.panel.addClass('tipLeft');
		tipX = thumbPosition.left - tipXOffset;
	} else {
            	Abirawa.gridTip.panel.addClass('tipLeft');
            	Abirawa.gridTip.panel.removeClass('tipLeft');
	}

	Abirawa.gridTip.panel.css({
            'top': tipY,
            'left': tipX
        });
	},
	
	onOver: function(){
		if (Abirawa.gridTip.isListView()) {
			return;
		}
		//alert(':o');
		clearTimeout(Abirawa.gridTip.timeout);
		var obj1 = $(this).parent();
		var obj2 = $(this).parents('td');
		//alert($(this).parents('tr').html());
		//clearTimeout(Abirawa.gridTip.timeout);
		//alert($(this).parent('li').html());
        Abirawa.gridTip.onTip = false;
		Abirawa.gridTip.populateTip($(this).parent());
		Abirawa.gridTip.positionTip($(this).parents('td'));
		Abirawa.gridTip.onTip = false;
		var func = function(obj){
			//alert($(obj).parent('li').html());
			clearTimeout(Abirawa.gridTip.timeout);
			//Abirawa.gridTip.onTip = false;
			Abirawa.gridTip.populateTip(obj1);
			Abirawa.gridTip.positionTip(obj2);
			Abirawa.gridTip.showPanel();
		}
		//Abirawa.gridTip.timeout = setTimeout(func, 1000);
		Abirawa.gridTip.showPanel();
	},	
	
	onOut: function(){
		if (Abirawa.gridTip.showing && !Abirawa.gridTip.onTip) {
            Abirawa.gridTip.timeout = setTimeout("Abirawa.gridTip.hidePanel()", 500);
        }
	},
	
	onPanelOver: function() {
		if (Abirawa.gridTip.isListView()) {
			return;
		}
        Abirawa.gridTip.onTip = true;
		clearTimeout(Abirawa.gridTip.timeout);
	},
	
	onPanelOut: function() {
        Abirawa.gridTip.timeout = setTimeout("Abirawa.gridTip.hidePanel()", Abirawa.gridTip.hideDelay);
	},
	
	init: function(){
		$("#gridViewContainer").append('<div id="hoverPanel"></div>');
		Abirawa.gridTip.panel = $("#hoverPanel");
		Abirawa.gridTip.panel.append('<div class="tipContent"/>'
                                    //+'<ul class="entityActions actionsSm"/>'
									+'<a id="popupClose" href="javascript:Abirawa.gridTip.hidePanel();">x</a>'
                                  //  +'<div class="tip-top-left"/>'
                                  //  +'<div class="tip-top-right"/>'
                                  //  +'<div class="tip-bottom-left"/>'
                                  //  +'<div class="tip-bottom-right"/>'
                                  //  +'<div class="tip-v"/>'
                                  //  +'<div class="tip-h"/>'
                                    +'<div class="tip-pointer"/>');

		var thumbNails = $(".row1a .thumb");
		thumbNails.hoverIntent(
            Abirawa.gridTip.onOver,
            Abirawa.gridTip.onOut
        );
		
		Abirawa.gridTip.panel.hover(
            Abirawa.gridTip.onPanelOver,
            Abirawa.gridTip.onPanelOut
        );
	}
}

$(document).ready(function(){
	Abirawa.gridTip.init();
});
