var overFlag = Array();
var parent = Array();
var childItems = Array();

$(".anchor").hover(function(kmouse){
    showItem(kmouse, this, '');
}, function(){
    resNo = getNoFromHref(this);
    overFlag[resNo] = 2;
    removeItem(this);
});

var showItem = function(kmouse, target, child){
    resNo = getNoFromHref(target);
    if (resNo) {
        if ($("#res" + resNo).html() == null) return;
        $("body").append("<div class='preview' id='preview" + resNo + "'>" + $("#res" + resNo).html() + "</div>");
        tooltip = $("#preview" + resNo);
        
        border_top = $(window).scrollTop();   
        border_right = $(window).width();  
        left_pos = top_pos = 0;  
        offset = 20;
        if (child) offset = 5;
        
        if(border_right - (offset *2) >= tooltip.width() + kmouse.pageX){  
            left_pos = kmouse.pageX + offset;  
        }else{  
            left_pos = border_right - tooltip.width() - offset;  
        }
                   
        if(border_top + (offset *2) >= kmouse.pageY - tooltip.height()){  
            top_pos = border_top + offset;  
        }else{  
            top_pos = kmouse.pageY - tooltip.height() - offset;  
        }
                
        tooltip.css({left:left_pos, top:top_pos, position:'absolute'});
        tooltip.css({display:'block', visibility:'visible'});
        
        $("#preview" + resNo).bind("mouseover", function(){
            overFlag[resNo] = 1;
            tooltip.css({display:'block', visibility:'visible'});
        });
        $("#preview" + resNo).bind("mouseout", function(){
            overFlag[resNo] = 2;
            delete childItems[resNo];
            removeItem(this);
        });
        
        $("#preview" + resNo + " a.anchor").hover(function(kmouse){
            _resNo = getNoFromHref(this);
            parent[_resNo] = resNo;
            
            childItems[resNo] = _resNo;
            showItem(kmouse, this, true);
		}, function(){
		    _resNo = getNoFromHref(this);
		    overFlag[_resNo] = 2;
		    //delete childItems[parent[_resNo]];
		    //delete parent[_resNo]; 
		    removeItem(this);
		});
    }
}

var removeItem = function(target) {
    resNo = getNoFromHref(target);
    tim = setInterval( function(){
        if (!overFlag) {
            clearInterval(tim);
        } else {
	        for(var i in overFlag){
	            if (overFlag[i] == 2) {
	                if (overFlag[childItems[i]]!=1){
	                    delete overFlag[i];
	                    _removeItem(i);
	                }
	            }
	        }
	    }
    }, 1500);
}

var _removeItem = function(resNo){
    if (overFlag[resNo]!=1) {
        //$("#preview" + resNo).fadeOut(700);
        $("#preview" + resNo).remove();
    }
}

var getNoFromHref = function(target) {
    var resHref = target.href;
    var index = resHref.search(/#res[0-9]{1,4}/);
    
    if (index > -1) {
        return resHref.substr(index + 4);
    } else {
        return 0;
    }
}
