/*
 * jQuery LiveTip Plugin v 0.1
 * 
 *
 * Copyright (c) 2009 Atarimarket
 *
 * Date: 2009-07-21
 * 
 */
//変数
jQuery.extend({
	_liveTipSelectorObject: [],
	_liveTipSelectorPriority: [],
	_liveTipSelectorInterval: [],
	_liveTipObject: [],
	_liveTipInterval: [],
	_liveTipCount: 0,
	_liveTipLog: 0,
	_liveTipStatus: "stop",
	_tipInterval: 3000,

	// 繰り返し吹き出しに追加
	addLiveTip: function(selector, options) {
		if (!options) options = {};
		if (!options.priority) options.priority = 0;
		if (!options.interval) options.interval = 0;

		$._liveTipSelectorObject.push(selector);
		$._liveTipSelectorPriority.push(options.priority);
		$._liveTipSelectorInterval.push(options.interval);
	},

	//モジュール実行
	loopTip: function(){
		$._liveTipCount = 0;
		$._liveTipLog = 0;
		$._liveTipStatus = "play";

		// ライブ機能対象オブジェクトの初期化
		var livePriority = [];
		for (var i = 0; i < $._liveTipSelectorObject.length; i++) {
			var obj = $($._liveTipSelectorObject[i]);
			var pri = $._liveTipSelectorPriority[i];
			var itv = $._liveTipSelectorInterval[i];
			$.each(obj, function() {
				// 各オプションの取得
				var priority = pri;
				if (!priority) priority = 0;
				var interval = itv;
				if (!interval) interval = $._tipInterval;

				// 挿入位置の検索
				var ins = 0;
				for (var j = livePriority.length - 1; j >= 0; j--) {
					if (priority <= livePriority[j]) {
						ins = j + 1;
						break;
					}
				}

				if (ins >= livePriority.length) {
					// 挿入位置が一番最後の場合、最後に追加する。
					$._liveTipObject.push($(this));
					$._liveTipInterval.push(interval);
					livePriority.push(priority);
				} else {
					$._liveTipObject.splice(ins, 0, $(this));
					$._liveTipInterval.splice(ins, 0, interval);
					livePriority.splice(ins, 0, priority);
				}
			});
		}

		if($._liveTipObject.length==0){
			//対象アイテムが無い場合
			$._liveTipStatus="stop";
		}

		// 吹き出しの表示
		$.nextTip();
	},
	
	//次の吹き出し表示を実行実行
	nextTip: function(){
		if($._liveTipLog>=$._liveTipObject.length){
			//永久ループ回避
			$._liveTipStatus="stop";
		}
		if($._liveTipStatus=="play"){
			var cnt = $._liveTipCount;
			$._liveTipCount = ($._liveTipCount<($._liveTipObject.length-1)) ? $._liveTipCount+1 : 0;
			$.doTip(cnt,$._liveTipObject.length);
		}else if($._liveTipStatus=="stop"){
			
		}
	},
	
	//吹き出し表示実行
	doTip: function(number,maximum){
		$._liveTipObject[number].showTip($._liveTipInterval[number],number,maximum);
	}
});

jQuery.fn.extend({
	//吹き出し型生成
	formatTip: function() {
		var obj=this.html();	
		var upper="<table id='tip_table' cellpadding='0' cellspacing='0' width='170'><tr><td id='tip_tl'></td><td id='tip_top'></td><td id='tip_tr'></td></tr><tr><td id='tip_body' colspan='3'>";
		var under="</td></tr><tr><td id='tip_bl'></td><td id='tip_bottom'></td><td id='tip_br'></td></tr></table>";
		this.html(upper+obj+under);
		return obj;
	},
	
	//吹き出し表示処理
	showTip: function(interval,number,maximum) {
		var obj= this;
		var tip= $('.tip',obj);
		var pos= obj.offset();
		var addTop=-(tip.outerHeight());
		var addLeft=(obj.outerWidth())-50;
		var i=number+1;
		//var random_i=(maximum-i)*Math.random();
		//var interval=3000;
		
		//var random_j=Math.random();
		var delay=7000;
		
		if($('.tip-inner',tip).is(':parent')){
			$._liveTipLog=0;
			//表示要素がある場合
			var src = tip.formatTip();
			tip.addClass('tip-positon');
			$('.tip-positon').css({'top':pos.top+addTop+20,'left':pos.left+addLeft,'zIndex':10001});
			tip.animate({'height':'show','top':pos.top+addTop,'left':pos.left+addLeft},750,'easeOutBack',function(){
				$(this).oneTime(interval, function() {
					obj.removeTip(src,delay);	
				});	
			});
		}else{
			//表示要素がない場合はスキップ
			$._liveTipLog++;
			$.nextTip();
		}
	},
	
	//吹き出しの削除処理
	removeTip: function(restore,delay) {
		var obj=this;
		var tip=  $('.tip',obj);
		tip.slideUp(400,function(){
			tip.removeAttr("style");
			tip.html(restore);
			tip.removeClass('tip-positon');
			$(this).oneTime(delay, function() {
				$.nextTip();
			});
			
		});
	}
	
});
