jQuery.fn.helpTitle = function(options){

	var options = jQuery.extend({
	    width: 200,
	    height: false,
        zindex: 1000000,
        title: false,
        clear: false,
        cookie_name: ""
	},options);
	
	//console.log($.cookie(options.cookie_name));
		
	if($.cookie(options.cookie_name)){
		
	}else{
	    $(this).each(function(){
	    	if(options.clear){
	    		$(this).unbind('mouseenter mouseleave');
	    	}else{
		        var obj = new Object();
		        obj.titleBlock;
		        obj.title = false;
		        obj.timeout;
		        obj.height;
		        obj.tag = this;
		        obj.width;
		        obj.text;
		
		        init(obj, this);
		        $(this).unbind('hover');
		        $(this).hover(function(e){
					var event = e;
		            obj.timeout = setTimeout(function(){
						hover(event, obj, obj.tag);
		            }, 2000);
		        }, function(e){
		            unhover(obj, this);
		        });
	    	}
	    });
	}




    function init(obj, tag){
        if(options.title){
            obj.text = options.title;
        }else{
            obj.text = $(tag).attr('title');
            obj.title = obj.text;
            $(tag).removeAttr('title');
        }
        if(options.height){
            obj.height = 'height: '+options.height+'px; ';
        }else{
            obj.height = '';
        }
        if(options.width){
            obj.width = 'width: '+options.width+'px; ';
        }else{
            obj.width = '';
        }
    }

    function baseState(obj, tag){
        if(typeof obj.titleBlock != 'undefined'){
            clearTimeout(obj.timeout);
            obj.titleBlock.stop();
            obj.titleBlock.remove();
        }
    }

    function hover(e, obj, tag){
        var text;
        
	    $.cookie(options.cookie_name, true, { expires: 365, path: "/" });
     
        baseState(obj, tag);

        obj.titleBlock = $('body').append('<div style="z-index: '+options.zindex+';'+obj.height+'" class="ht_window"><table cellpadding="0" cellspacing="0"><tr><td class="ht_leftTop"></td><td class="ht_top"></td><td class="ht_rightTop"></td></tr><tr><td class="ht_left"></td><td class="ht_center">'+obj.text+'</td><td class="ht_right"></td></tr><tr><td class="ht_leftBottom"></td><td class="ht_bottom"></td><td class="ht_rightBottom"></td></tr></table></div>').find('div.ht_window:last-child');
		obj.arrowBlock = $('body').append('<div style="z-index: '+options.zindex+1+';" class="ht_arrow" style=""></div>').find('div.ht_arrow:last-child');
		
		obj.height = obj.titleBlock.height();
        obj.width = obj.titleBlock.width();
        if(obj.width > options.width){
            obj.titleBlock.css('height', "");
            obj.titleBlock.css('width', options.width+'px');
        }
        obj.width = obj.titleBlock.width();
        obj.height = obj.titleBlock.height();
		
		var topArrow;
		var leftArrow;
		var topTitle;
		var leftTitle;
		var ox;
		var oy;
		
		//var pageX = e.pageX;
		//var pageY = e.pageY;
		
		var pageX = $(tag).offset().left+($(tag).width()/2);
		var pageY = $(tag).offset().top+($(tag).height()/2);
		
		// проверяем есть ли место справа
		if( $(window).width() < pageX+obj.arrowBlock.width()+obj.titleBlock.width()+5 ){
			// место справа есть
			leftArrow = pageX-5-obj.arrowBlock.width();
			leftTitle = leftArrow-obj.titleBlock.width()+8;
			ox = 'right';
		}else{
			// справа места нет
			leftArrow = pageX+5;
			leftTitle = leftArrow+obj.arrowBlock.width()-9;
			ox = 'left';
		}
		// проверяем есть ли место сверху
		if( pageY > obj.arrowBlock.height()+obj.titleBlock.height()+5 ){
			// сверху есть место
			topArrow = pageY-5-obj.arrowBlock.height();
			topTitle = topArrow-obj.titleBlock.height()+7;
			oy = 'bottom';
		}else{
			// сверху места нет
			topArrow = pageY+5;
			topTitle = topArrow+obj.arrowBlock.height()-8;
			oy = 'top';
		}
		
		if(ox == 'left' && oy == 'top'){
			obj.arrowBlock.css('background', 'url(/img/title_help/arrow_top_left.gif)');
			obj.titleBlock.find('.ht_leftTop').removeAttr('class');
		}
		if(ox == 'left' && oy == 'bottom'){
			obj.arrowBlock.css('background', 'url(/img/title_help/arrow_bottom_left.gif)');
			obj.titleBlock.find('.ht_leftBottom').removeAttr('class');
		}
		if(ox == 'right' && oy == 'top'){
			obj.arrowBlock.css('background', 'url(/img/title_help/arrow_top_right.gif)');
			obj.titleBlock.find('.ht_rightTop').removeAttr('class');
		}
		if(ox == 'right' && oy == 'bottom'){
			obj.arrowBlock.css('background', 'url(/img/title_help/arrow_bottom_right.gif)');
			obj.titleBlock.find('.ht_rightBottom').removeAttr('class');
		}
		
		
        obj.titleBlock.css('top', topTitle+'px').css('left', leftTitle+'px').css('display', 'block').css('overflow', 'hidden');
        obj.titleBlock.css('opacity', '0');
		
		obj.arrowBlock.css('top', topArrow+'px').css('left', leftArrow+'px').css('display', 'block').css('overflow', 'hidden');
		obj.arrowBlock.css('opacity', '0');

        obj.titleBlock.animate({opacity: 1}, 1000);
		obj.arrowBlock.animate({opacity: 1}, 1000);
    }

    function unhover(obj, tag){
        clearTimeout(obj.timeout);
        obj.timeout = setTimeout(hide, 3000);
        function hide(){
        		//console.log(typeof obj);
        	if(typeof obj.arrowBlock != "undefined"){
				obj.arrowBlock.animate({opacity: 0}, 1000, function(){
	                obj.arrowBlock.remove();
	            });
        	}
        	if(typeof obj.titleBlock != "undefined"){
	            obj.titleBlock.animate({opacity: 0}, 1000, function(){
	                obj.titleBlock.remove();
	                $(tag).unbind('mouseenter mouseleave');
	            });
        	}
        }
    }

	return this;
}
