/*-------------------------------------------------------------------------------
	setInterval-->animate
	Version 1.0
	By Ima
	kochanima@qq.com
	10.08.11
-------------------------------------------------------------------------------*/

var Animate = {};
//定义setInterval带参数的方法
var mySetInterval = setInterval;
Animate.setInterval = function(callback, interval){
    var args = Array.prototype.slice.call(arguments, 2);
    function callFn(){callback.apply(null, args);}
    return mySetInterval(callFn, interval);
};

//interval参数规则(jQuerythis=>变化的对象;options=>参数集合=>{what=>变化项目,born=>初始值,shift=>偏移值,stop=>结束值,frame=>一帧的时间,fun=>完成后执行的函数};
jQuery.fn.interval = function(){
	var defaults = {
		born:0,
		frame:100
	}	
	var queue = (arguments.length > 1) ? [].slice.call(arguments, 0) : arguments[0] ;
	var options = (typeof queue.length != "undefined") ? queue.shift() : queue ;
	var jQuerythis = jQuery(this);	
	jQuery.extend(defaults,options);
	var last = defaults.born;
	var intervalID = Animate.setInterval(function(){
		last = last + defaults.shift;
		if (last == defaults.stop) {
			clearInterval(intervalID);
			if (typeof defaults.fun != "undefined") defaults.fun();
			if ( queue.length > 0 ){
				jQuerythis.interval(queue);
			}
		}
		if (typeof defaults.what != "string") {
			for (i in defaults.what){
				jQuerythis.css(defaults.what[i],last);
			}
		} else{
		    jQuerythis.css(defaults.what,last);
		}
	},defaults.frame,last);
	return intervalID;
};
//gif参数规则(jQuerythis=>变化的对象;options=>参数集合=>{what=>变化项目,born=>开始值,shift=>偏移值,time=>持续时间,frame=>一帧的时间,fun=>完成后执行的函数};
jQuery.fn.gif = function(){
	var defaults = {
		time:0,
		born:0,
		frame:100
	}
	var queue = (arguments.length > 1) ? [].slice.call(arguments, 0) : arguments[0] ;
	var options = (typeof queue.length != "undefined") ? queue.shift() : queue ;
	var jQuerythis = jQuery(this);
	jQuerythis.parent().css('overflow','hidden');
	jQuery.extend(defaults,options);
	var now = new Date().getTime()
	var timer = now + defaults.time;
	var last = defaults.born;
	var intervalID= Animate.setInterval(function(){
		last = (last == defaults.stop) ? defaults.born : last + defaults.shift;
		var time = timer - new Date().getTime();
		if (defaults.time != 0 && time < defaults.frame){
		    clearInterval(intervalID);
		    jQuerythis.css(defaults.what,0);
			if (typeof defaults.fun != "undefined") defaults.fun();
			if ( queue.length > 0 ) jQuerythis.interval(queue);
		} else if (typeof defaults.what != "string") {
			for (i in defaults.what){
				jQuerythis.css(defaults.what[i],last);
			}
		} else{
		    jQuerythis.css(defaults.what,last);
		}		
	},defaults.frame);
	return intervalID;
};
//bgsprite参数规则(jQuerythis=>变化的对象;options=>参数集合=>{type=>值为0(横向)或1(竖向),shift=>偏移值,time=>持续时间,frame=>一帧的时间,fun=>完成后执行的函数};
jQuery.fn.bgsprite = function(){
	var defaults = {
		time:0,
		frame:100
	}
	var queue = (arguments.length > 1) ? [].slice.call(arguments, 0) : arguments[0] ;
	var options = (typeof queue.length != "undefined") ? queue.shift() : queue ;
	jQuery.extend(defaults,options);
	var jQuerythis = jQuery(this);	
	var left = jQuerythis[0].style.backgroundPosition.split(' ')[0] , top = jQuerythis[0].style.backgroundPosition.split(' ')[1];
	//jQuerythis.css('background-attachment','fixed');	
	var timer = new Date().getTime() + defaults.time;//结束时间
	var born = (defaults.type) ? parseInt(top) : parseInt(left) ;
	var last = born ;
	var intervalID= Animate.setInterval(function(){
		last = last + defaults.shift;
		if (defaults.type){
			top = last + 'px';
		} else {
		    left = last + 'px';
		}
		jQuerythis.css('background-position',left + ' ' + top);
		var time = timer - new Date().getTime();		
		if ( ( (defaults.time != 0 && time < defaults.frame) || (defaults.time == 0 && last == defaults.stop) ) && defaults.time != true ){ //到达了指定的时间,或者没有规定时间完成了一次
		    clearInterval(intervalID);
		    //jQuerythis.css('background-attachment','');
			if (typeof defaults.fun != "undefined") defaults.fun();
			if ( queue.length > 0 ) jQuerythis.interval(queue);
		}
	},defaults.frame);
	return intervalID;
};
// 游戏中通用的tip
jQuery.fn.tytip = function(html){
	if (jQuery('.tytip').length > 0) jQuery('.tytip').remove();
	if (typeof html != 'undefined'){
	    var jQuerythis = jQuery(this);
	    var off = jQuerythis.offset();
	    var top = off.top , left = off.left;
	    jQuery(html).appendTo(jQuery('body')).css('left',left + jQuerythis.width() - 225).css('top',top + jQuerythis.height() + 10);
	}
}
