/*
CopyRight: C-take
License: MIT
http://shitake-crude-production.wikidot.com/time-move
*/

var TimeRugMove = {
	unit:"sec",
	time:0,
	url:"",
	span:50,
	inf:false,
	set:null,
	measure:null,
	run:null,
	start:null,
	setLoad:null,
	callback:null,
	state:{
		start:0,
		target:0,
		now:0,
		compute:false,
		setTime:null
	},
	unitState:{
		"msec":1,
		"sec":1000,
		"min":60000,
		"hour":3600000
	},
	unitLimit:{
		"msec":1000,
		"sec":60,
		"min":60,
		"hour":24
	},
	clear:null,
	pause:null,
	convert:null

};

TimeRugMove.set = function(){
	if(TimeRugMove.state.compute){
		return false;
	}

	if(!TimeRugMove.unitState[TimeRugMove.unit]){
		return false;
	}

	TimeRugMove.state.compute=true;
	TimeRugMove.state.start = (new Date()).getTime();
	if(TimeRugMove.state.target <= 0){
		TimeRugMove.state.target = TimeRugMove.time * TimeRugMove.unitState[TimeRugMove.unit];
		if(isNaN(TimeRugMove.state.target)){
		TimeRugMove.state.target = 0;
			return false;
		}
	}

return true;
}


TimeRugMove.measure = function measure(endFunc){
	var timePack = new Object();
	TimeRugMove.state.now = (new Date()).getTime();
	timePack.now = TimeRugMove.state.now 
	timePack.start = TimeRugMove.state.start;
	timePack.progress = timePack.now - timePack.start;
	timePack.limit = TimeRugMove.state.target;
	timePack.end = timePack.start+timePack.limit;
	timePack.rem = timePack.limit - timePack.progress;
 
	if(TimeRugMove.callback){
		TimeRugMove.callback(timePack);
	}
	var decide = timePack.rem;
	delete timePack;
	if(0 < decide || TimeRugMove.inf){
		TimeRugMove.state.setTime = setTimeout(function(){measure(endFunc);},TimeRugMove.span);
	}else{
		if(endFunc){
			endFunc();
		}
	}
};

TimeRugMove.start = function(func){
	if(!TimeRugMove.set()){
		return;
	}
	TimeRugMove.measure(func);	
}

TimeRugMove.run = function(){
	TimeRugMove.start(function(){
		if(window.parent == window){
			window.location.href =TimeRugMove.url;
		}else{
			window.parent.window.location.href=TimeRugMove.url;
		}
	});
}

TimeRugMove.convert = function(msec,unit,isRem){
	if(msec < 0)msec = 0;
	var simple = Math.floor(msec/TimeRugMove.unitState[unit]);
	if(isRem){
		simple %= TimeRugMove.unitLimit[unit];
	}
	return simple;
	
}

TimeRugMove.setLoad = function(str){
	if(!str)str = "run";
	if(typeof(TimeRugMove[str]) != "function")return;
	document.addEventListener('DOMContentLoaded',TimeRugMove[str],false);
}

TimeRugMove.pause = function(){
	if(!TimeRugMove.state.compute){
		return;
	}
	TimeRugMove.state.compute=false;
	TimeRugMove.state.target -= (TimeRugMove.state.now - TimeRugMove.state.start);
	window.clearTimeout(TimeRugMove.state.setTime);
}

TimeRugMove.clear = function(){
	if(!TimeRugMove.state.compute){
		return;
	}
	TimeRugMove.state.compute=false;
	TimeRugMove.state.target = 0;
	window.clearTimeout(TimeRugMove.state.setTime);
}


window.addEventListener("beforeunload",function(){
	delete TimeRugMove;
	if(TimeRugMove.state.setTime){
		window.clearTimeout(TimeRugMove.state.setTime);
	}
});
