/**============================================================
* swfAnimationConverter.js
* version 0.1.1 
* http://mdlab.jp/app/sac/index.html
*
* MIT License
* COPYRIGHT(c) IMJ CORPORATION. ALL RIGHTS RESERVED. 
*
* http://mdlab.jp/
* http://www.imjp.co.jp/
* 
*==============================================================
*/

function SWFACObject(className,imagePath,propObj){
	
	//==============================================================
	/**
	* local vars
	*/
	var _className  = className;
	var _class = $("." + _className);
	var _imgsrc = imagePath;
	var _fps =propObj["fps"];
	//-------------------------------------------------------------
	var _w = propObj["w"];
	var _h = propObj["h"];
	var _totalFrame = propObj["total"];
	var _tdNum = propObj["td"];
	var _loop = propObj["loop"];
	var _currentFrame = 0;
	//-------------------------------------------------------------
	var _loadFlag = false;
	//-------------------------------------------------------------
	var _self = this;
	var _play = false;
	var _visible = true;
	var _animation;
	var _image;
	//-------------------------------------------------------------
	var onLoadCompleteCallback= function(){/*console.debug("[init]");*/};
	var onStartCallback		= function(){/*console.debug("[start]");*/};
	var onStopCallback		= function(){/*console.debug("[stop]");*/};
	var onEnterFrameCallback= function(){/*console.debug("[enterframe]" + _currentFrame);return _currentFrame*/};
	var onLoopCallback		= function(){/*console.debug("[loop]")*/};
	var onCompleteCallback  = function(){/*console.debug("[complete]");*/};
	
	//==============================================================
	/**
	 * setter / getter
	 */
	this.getTotalFrame	= function(){ return _totalFrame;}
	this.getCurrentFrame= function(){return _currentFrame+1};
	//-------------------------------------------------------------
	this.getWidth 		= function(){ return _w};
	this.getHeight 		= function(){ return _h};
	//-------------------------------------------------------------
	this.getLoop 		= function(){ return _loop}
	this.setLoop 		= function(bool){_loop = bool};
	//-------------------------------------------------------------
	this.getFps			= function(){ return _fps}
	this.setFps	= function(n){
		if(isNaN(n)) return false;
		var preState = _play;
		if(_play) stopAction();
		_fps = n;
		if(preState)_currentFrame++;_self.start();
		return true;
	}
	//-------------------------------------------------------------
	this.getVisible = function(){return _visible;}
	this.setVisible = function(bool){
		_visible = bool
		if(bool)$(_class).css({"visibility": "visible"});
		else $(_class).css({"visibility": "hidden"});
	}
	//-------------------------------------------------------------
	// callbacks
	this.setLoadCompleteCallback 	 = function(func){onLoadCompleteCallback 	 = func;};
	this.setStartCallback 	 = function(func){onStartCallback 	 = func;};
	this.setStopCallback = function(func){onStopCallback = func;};
	this.setEnterFrameCallback= function(func){onEnterFrameCallback = func;};
	this.setLoopCallback 	 = function(func){onLoopCallback 	 = func;};
	this.setCompleteCallback = function(func){onCompleteCallback = func;};
	
	
	//==============================================================
	/**
	 * init
	 */
	function _init(){
		$(_class).css({
			"background":"url("+_imgsrc+")",
			"background-position": (_w) +"px "+(_h) +"px",
			"width"	:_w,
			"height":_h
		});
		//image load start
		_image= new Image();
		_image.onload = function(){_loadFlag = true;onLoadCompleteCallback();}
		_image.src = _imgsrc;
		
	};

	//==============================================================
	/*
	 * start
	 */
	this.start = function(){
		if(_play) return;
		_play = true;
		_self.gotoAndPlay(_currentFrame+1);
	};
	
	//==============================================================
	/*
	 * stop
	 */
	this.stop = function (){
		stopAction();
		onStopCallback();
		
	};
	
	//==============================================================
	/*
	 * gotoAndPlay
	 */
	this.gotoAndPlay =function(n){
		if(isNaN(n)) return false;
		stopAction();
		_play=true;
		_currentFrame = ((n-1) < 0 || _totalFrame <=(n-1)) ? _currentFrame :(n-1)
		var interval = 1/_fps*1000;
		onStartCallback();
		onEnterFrame();
		_animation = setInterval(onEnterFrame, interval);
		return true;
	};
	
	//==============================================================
	/*
	 * gotoAndStop
	 */
	this.gotoAndStop = function(n){
		if(isNaN(n)) return false;
		_currentFrame = ((n-1) < 0 || _totalFrame <(n-1)) ? _currentFrame :(n-1)
		drawTrancelate();
		_self.stop();
		return true;
	};
	
	//-------------------------------------------------------------
	/**
	 * stopAction
	 */
	function stopAction(){
		_play = false;
		if(_animation != undefined ){
			clearInterval( _animation );
			_animation = undefined;
		}
	};
	
	//-------------------------------------------------------------
	/**
	 * onEnterFrame
	 */
	function onEnterFrame(){
		drawTrancelate();
		//isLoad
		if(!_loadFlag) return;
		onEnterFrameCallback();
		_currentFrame++;
		
		
		if(_currentFrame>=_totalFrame){
			if(!_loop) {
				_self.stop();
				onCompleteCallback();
			}else{
				onLoopCallback();
			};
			_currentFrame = 0;
		};
	};
	
	//-------------------------------------------------------------
	/**
	 * drawTrancelate
	 */
	function drawTrancelate(){
		var td 	= Math.floor(_currentFrame / _tdNum);
		var tr  = (_currentFrame - (td * _tdNum));
		var x 	= tr * _w;
		var y 	= td * _h;
		$(_class).css({"background-position": (-x) +"px "+(-y) +"px"});
	};
	
	
	//-------------------------------------------------------------
	
	_init();
	
	return this;
}

