(function($) {
//jquery 拡張
//アニメーション開始。未実装 キーフレアニメは投入したい
$.fn.a2d = function() {
return this.each(function(i) {
$(this).css("-webkit-animation-play-state", str);
});
};
$.getBaseURL = function() {
var str = location.pathname;
var i = str.lastIndexOf('/');
return str.substring(0, i + 1);
};
$.getDirPath = function(str){
var i = str.lastIndexOf('/');
return str.substring(0, i + 1);
};
$.isHTTP = function(str) {
if (str.substring(0, 4) === "http") {
return true;
} else {
return false;
}
};
$.play_audio = function(audio_obj) {
audio_obj.play();
};
$.localFilePath = function(){
var path = "";
//Mac os Sierra 対応
if(process.execPath.indexOf("var/folders")!=-1){
path = process.env.HOME+"/_TyranoGameData";
}else{
path = $.getProcessPath();
}
return path;
};
$.getViewPort = function() {
var width, heiht;
if (self.innerHeight) {
// all except Explorer
width = self.innerWidth;
height = self.innerHeight;
} else if (document.documentElement && document.documentElement.clientHeight) {
// Explorer 6 Strict Mode
width = document.documentElement.clientWidth;
height = document.documentElement.clientHeight;
} else if (document.body) {
// other Explorers
width = document.body.clientWidth;
height = document.body.clientHeight;
}
return {
width : width,
height : height
};
};
$.escapeHTML = function(val, replace_str) {
val = val || "";
var t = $("
").text(val).html();
if (replace_str) {
if (t === "") {
t = replace_str;
}
}
return t;
};
$.br = function(txtVal) {
txtVal = txtVal.replace(/\r\n/g, "
");
txtVal = txtVal.replace(/(\n|\r)/g, "
");
return txtVal;
};
//現在時刻を取得
//現在の日
$.getNowDate = function() {
var nowdate = new Date();
var year = nowdate.getFullYear();
// 年
var mon = nowdate.getMonth() + 1;
// 月
var date = nowdate.getDate();
// 日
return year + "/" + mon + "/" + date;
};
//現在の時刻
$.getNowTime = function() {
var nowdate = new Date();
var h = nowdate.getHours();
var m = nowdate.getMinutes();
var s = nowdate.getSeconds();
return h + ":" + m + ":" + s;
};
$.convertSecToString = function(val) {
if (val == 0) {
return '-';
}
var day = Math.floor(val / (24 * 60 * 60));
var hour = Math.floor((val % (24 * 60 * 60) / (60 * 60)));
var minute = Math.floor(val % (24 * 60 * 60) % (60 * 60) / 60);
var second = Math.floor(val % (24 * 60 * 60) % (60 * 60) % 60);
var str = "";
if (day !== 0) {
str += day + "日";
}
if (hour !== 0) {
str += hour + "時間";
}
if (minute !== 0) {
str += minute + "分";
}
if (second !== 0) {
str += second + "秒";
}
return str;
};
$.secToMinute = function(val) {
if (val === 0) {
return "-";
}
var m = Math.floor(val / 60);
var s = Math.floor(val % 60);
var str = "";
if (m !== 0) {
str += m + "分";
}
str += s + "秒";
return str;
};
$.trim = function(str) {
if (str) {
} else {
return "";
}
return str.replace(/^\s+|\s+$/g, "");
};
$.rmspace = function(str) {
str = str.replace(/ /g, "");
str = str.replace(/ /g, "");
str = str.replace(/\r\n?/g, "");
return str;
};
$.replaceAll = function(text, searchString, replacement) {
return text.replace(new RegExp(searchString, "g"), replacement);
};
//指定した拡張子を付ける。拡張子がなければ
$.setExt = function(name, ext_str) {
var tmp = name.split(".");
if (tmp.length == 1) {
name = name + "." + ext_str;
}
return name;
};
//要素をクローンします
$.cloneObject = function(source) {
return $.extend(true, {}, source);
};
//透明度を適切な値に変更
$.convertOpacity = function(val) {
//255をマックスとして計算する
var p = val / 255;
return p;
};
//パスにfgimage bgimage image が含まれていた場合、それを適応する
$.convertStorage = function(path) {
};
$.convertColor = function(val) {
if (val.indexOf("0x") != -1) {
return val.replace("0x", "#");
}
return val;
};
$.convertBold = function(flag) {
if (flag == "true") {
return "bold";
}
return "";
};
$.convertItalic = function(flag) {
if (flag == "true") {
return "italic";
}
return "";
};
$.send = function(url, obj, call_back) {
//game.current_story_file = story_file;
$.ajax({
type : "POST",
url : url,
data : obj,
dataType : 'json',
complete : function() {
//通信終了時の処理
$.hideLoading();
},
success : function(data, status) {
$.hideLoading();
var data_obj = data;
if (call_back) {
call_back(data_obj);
}
}
});
};
$.loadText = function(file_path, callback) {
/*
var httpObj = jQuery.get(file_path + "?" + Math.floor(Math.random() * 1000000), null, function(obj) {
var order_str = "";
if (httpObj) {
if (httpObj.responseText) {
order_str = httpObj.responseText;
} else {
order_str = obj;
}
} else {
order_str = obj;
}
callback(order_str);
// createOrder
});
*/
$.ajax({
url: file_path + "?" + Math.floor(Math.random() * 1000000),
cache: false,
success: function(text){
order_str = text;
callback(order_str);
},
error:function(){
alert("file not found:"+file_path);
callback("");
}
});
};
//クッキーを取得
$.getCookie = function(key) {
var tmp = document.cookie + ";";
var index1 = tmp.indexOf(key, 0);
if (index1 != -1) {
tmp = tmp.substring(index1, tmp.length);
var index2 = tmp.indexOf("=", 0) + 1;
var index3 = tmp.indexOf(";", index2);
return tmp.substring(index2, index3);
}
return null;
};
$.isNull = function(str) {
if (str == null) {
return "";
} else {
}
return str;
};
$.dstop = function() {
console.log("dstop");
};
//ユーザ環境を取得
$.userenv = function () {
var userAgent = navigator.userAgent;
if (userAgent.match(/iphone|ipad|ipod/i)) {
return "iphone";
} else if (userAgent.match(/android/i)) {
return "android";
} else {
return "pc";
}
};
$.isTyranoPlayer = function(){
if(typeof _tyrano_player != "undefined"){
return true;
}else{
return false;
}
};
$.lang = function(key) {
if (tyrano_lang["word"][key]) {
return tyrano_lang["word"][key];
} else {
return "NOT_DEFINED";
}
};
$.novel = function(key) {
if (tyrano_lang["novel"][key]) {
return tyrano_lang["novel"][key];
} else {
return "NOT_DEFINED";
}
};
//ユーザのブラウザ情報を取得
$.getBrowser = function() {
var userAgent = window.navigator.userAgent.toLowerCase();
if (userAgent.indexOf('msie') >= 0 || userAgent.indexOf('trident') >= 0) {
return "msie";
}else if (userAgent.indexOf("edge") > -1) {
return "edge";
}else if (userAgent.indexOf("firefox") > -1) {
return "firefox";
} else if (userAgent.indexOf("opera") > -1) {
return "opera";
} else if (userAgent.indexOf("chrome") > -1) {
return "chrome";
} else if (userAgent.indexOf("safari") > -1) {
return "safari";
}else if (userAgent.indexOf("applewebkit") > -1) {
return "safari";
}else {
return "unknown";
}
};
$.isNWJS = function(){
//Electronならfalse
if($.isElectron()){
return false;
}
// Node.js で動作しているか
var isNode = (typeof process !== "undefined" && typeof require !== "undefined");
// ブラウザ上(非Node.js)で動作しているか
var isBrowser = !isNode
// node-webkitで動作しているか
var isNodeWebkit;
try {
isNodeWebkit = isNode ? (typeof require('nw.gui') !== "undefined") : false;
} catch(e) {
isNodeWebkit = false;
}
if (isNodeWebkit) {
// node-webkitで動作
return true;
} else if ( isNode) {
// Node.js上で動作している
return true;
} else {
// 通常のWebページとして動作している
return false;
}
},
$.isNeedClickAudio = function (){
//プレイヤーはクリックの必要なし
if($.isTyranoPlayer()){
return false;
}
//ブラウザやスマホアプリは必要
if($.isElectron() || $.isNWJS()){
return false;
}
return true;
}
$.isElectron = function(){
if(navigator.userAgent.indexOf("TyranoErectron")!=-1){
return true;
}else{
return false
}
},
//オブジェクトを引き継ぐ。
$.extendParam = function(pm,target){
var tmp = target;
for(key in target){
if(pm[key]){
if(pm[key]!=""){
target[key] = pm[key];
}
}
}
return target;
};
$.insertRule = function(css_str){
var sheet = (function() {
var style = document.createElement("style");
document.getElementsByTagName("head")[0].appendChild(style);
return style.sheet;
})();
sheet.insertRule(css_str,0);
},
$.swfName = function(str) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[str];
} else {
return document[str];
}
};
//古いトランス。
$.trans_old = function(method, j_obj, time, mode, callback) {
if (method == "crossfade" || mode == "show") {
if (time == 0) {
if (mode == "show") {
j_obj.show();
} else {
j_obj.hide();
}
if (callback) {
callback();
}
} else {
var ta = {};
if (mode == "show") {
ta = {
"opacity" : "show"
};
} else {
ta = {
"opacity" : "hide"
};
}
j_obj.animate(ta, {
duration : time,
easing : "linear",
complete : function() {
if (callback) {
callback();
}
}//end complerte
});
}
return false;
} else {
if (mode == "hide") {
j_obj.hide(method, time, function() {
if (callback)
callback();
});
} else if (mode == "show") {
j_obj.show(method, time, function() {
if (callback)
callback();
});
}
}
};
//コンバート v450rc5以前
var _map_conv_method = {
"corssfade":"fadeIn",
"explode":"zoomIn",
"slide":"slideInLeft",
"blind":"bounceIn",
"bounce":"bounceIn",
"clip":"flipInX",
"drop":"slideInLeft",
"fold":"fadeIn",
"puff":"fadeIn",
"scale":"zoomIn",
"shake":"fadeIn",
"size":"zoomIn"
}
$.trans = function(method, j_obj, time, mode, callback) {
if(method=="crossfade") {
method = "fadeIn";
}else if(_map_conv_method[method]){
method = _map_conv_method[method];
}
j_obj.css("animation-duration",parseInt(time)+"ms");
if (mode == "hide") {
j_obj.show();
method = $.replaceAll(method,"In","Out");
var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';
j_obj.addClass('animated ' + method).one(animationEnd, function() {
j_obj.off(animationEnd);
j_obj.css("animation-duration","");
$(this).remove();
if (callback) {
//callback();
}
});
} else if (mode == "show") {
j_obj.show();
var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';
j_obj.addClass('animated ' + method).one(animationEnd, function() {
j_obj.off(animationEnd);
j_obj.css("animation-duration","");
$(this).removeClass('animated ' + method);
if (callback) {
callback();
}
});
}
};
//要素から空白のオブジェクトを削除して返却する
$.minifyObject = function(obj) {
for (key in obj) {
if (obj[key] == null || obj[key] == "") {
delete obj[key];
}
}
return obj;
};
$.preloadImgCallback = function(j_menu,cb,that){
var img_storage = [];
j_menu.find("img").each(function() {
img_storage.push($(this).attr("src"));
});
//ロードが全て完了したら、ふわっと出す
var sum = 0;
for (var i = 0; i < img_storage.length; i++) {
that.kag.preload(img_storage[i], function() {
sum++;
if (img_storage.length == sum) {
cb();
}
});
}
if(img_storage.length==0){
cb();
}
};
$.setStorage = function(key, val ,type) {
if(type=="webstorage_compress"){
$.setStorageCompress(key,val);
}else if(type=="file"){
$.setStorageFile(key,val);
}else{
$.setStorageWeb(key,val);
}
};
//PC版のみ。実行フォルダを取得
$.getProcessPath = function(){
var path = process.execPath;
var tmp_index = 0;
var os = "linux";
if(path.indexOf(".app") !== -1){
os = "mac";
tmp_index = path.indexOf(".app");
}else if(path.indexOf(".exe") !== -1){
os = "win";
tmp_index = path.indexOf(".exe");
}
if(os == "linux"){
return process.cwd();
}
var tmp_path = path.substr(0,tmp_index);
var path_index=0;
if(os == "mac"){
path_index = tmp_path.lastIndexOf("/");
}else{
path_index = tmp_path.lastIndexOf("\\");
}
var out_path = path.substr(0,path_index);
return out_path;
};
$.getOS = function(){
if($.isNWJS()){
var path = process.execPath;
var tmp_index = path.indexOf(".app");
var os = "mac";
if(tmp_index == -1){
tmp_index = path.indexOf(".exe");
os="win";
}
return os;
}else{
return "";
}
};
$.getStorage = function(key,type) {
var gv = "null";
if(type=="webstorage_compress"){
gv = $.getStorageCompress(key);
}else if(type=="file"){
gv = $.getStorageFile(key);
}else{
gv = $.getStorageWeb(key);
}
return gv;
};
$.setStorageWeb = function(key, val) {
val = JSON.stringify(val);
//localStorage.setItem(key, LZString.compress(escape(val)));
localStorage.setItem(key, escape(val));
};
$.getStorageWeb = function(key) {
try {
var gv = "null";
if (localStorage.getItem(key)) {
//gv = unescape(LZString.decompress(localStorage.getItem(key)));
gv = unescape(localStorage.getItem(key));
}
if (gv == "null")
return null;
} catch(e) {
alert("この環境はセーブ機能を利用できません。ローカルで実行している場合などに発生します");
$.confirmSaveClear();
}
return gv;
};
$.playerHtmlPath = function(html){
if ("appJsInterface" in window) {
//Android
} else {
if(typeof TyranoPlayer == "function"){
//playerの場合HTMLを修正する必要がある
var result_html ="";
while(1){
var index = html.indexOf("file:///");
if(index==-1){
result_html += html;
break;
}else{
result_html += html.substring(0,index);
html = html.substring(index,html.length);
var replace_index = html.indexOf("/game/data");
tmp_html = html.substring(replace_index + "/game/data".length,html.length);
html = "./data"+tmp_html;
}
}
if(result_html !=""){
html = result_html;
}
}
}
return html;
};
$.confirmSaveClear = function(){
if(confirm('セーブデータが壊れている可能性があります。セーブデータを初期化しますか?')){
alert("初期化");
localStorage.clear();
}
};
$.setStorageCompress = function(key, val) {
val = JSON.stringify(val);
localStorage.setItem(key, LZString.compress(escape(val)));
//localStorage.setItem(key, escape(val));
};
$.getStorageCompress = function(key) {
try {
var gv = "null";
if (localStorage.getItem(key)) {
gv = unescape(LZString.decompress(localStorage.getItem(key)));
if (gv == "null") {
gv = unescape(localStorage.getItem(key));
}
}
if (gv == "null")
return null;
} catch(e) {
alert("この環境はセーブ機能を利用できません。ローカルで実行している場合などに発生します");
$.confirmSaveClear();
}
return gv;
};
$.setStorageFile = function(key, val) {
val = JSON.stringify(val);
var fs = require('fs');
var out_path = "";
//mac os Sierra 対応
if(process.execPath.indexOf("var/folders")!=-1){
out_path = process.env.HOME+"/_TyranoGameData";
if(!fs.existsSync(out_path)){
fs.mkdirSync(out_path);
}
}else{
out_path = $.getProcessPath();
}
fs.writeFileSync(out_path + "/" + key + ".sav", escape(val));
};
$.getStorageFile = function(key) {
try {
var gv = "null";
var fs = require('fs');
var out_path = "";
//Mac os Sierra 対応
if(process.execPath.indexOf("var/folders")!=-1){
out_path = process.env.HOME+"/_TyranoGameData";
if(!fs.existsSync(out_path)){
fs.mkdirSync(out_path);
}
}else{
out_path = $.getProcessPath();
}
if (fs.existsSync(out_path+"/" + key + ".sav")) {
var str = fs.readFileSync(out_path+"/" + key + ".sav");
gv = unescape(str);
} else {
//Fileが存在しない場合にローカルストレージから読み取る使用は破棄。
//gv = unescape(localStorage.getItem(key));
}
if (gv == "null")
return null;
} catch(e) {
alert("この環境はセーブ機能を利用できません。ローカルで実行している場合などに発生します");
$.confirmSaveClear();
}
return gv;
};
/*
$.setStorage = function(key,val){
val = JSON.stringify(val);
localStorage.setItem(key, LZString.compress(escape(val)));
//localStorage.setItem(key, escape(val));
};
$.getStorage = function(key){
try{
var gv = "null";
if(localStorage.getItem(key)){
gv = unescape(LZString.decompress(localStorage.getItem(key)));
if(gv=="null"){
gv = unescape(localStorage.getItem(key));
}
}
if(gv =="null") return null;
}catch(e){
alert("この環境はセーブ機能を利用できません。ローカルで実行している場合などに発生します");
}
return gv;
};
*/
$.alert = function(str,cb) {
$(".remodal_title").html(str);
$(".remodal").find(".remodal-cancel").hide();
$(".remodal").find(".remodal-confirm").show();
var inst = $('[data-remodal-id=modal]').remodal();
inst.open();
$(document).off('closed', '.remodal');
$(document).on('closed', '.remodal', function (e) {
if(typeof cb == "function"){
cb();
}
});
/*
if ($.userenv() != "pc") {
alert(str);
if(typeof cb == "function"){
cb();
}
}else{
alertify.alert(str,function(){;
if(typeof cb == "function"){
cb();
}
});
}
*/
};
$.inform =function(str,type){
alertify.log(str,type);
};
$.confirm = function (str,cb_ok,cb_cancel){
$(".remodal_title").html(str);
$(".remodal").find(".remodal-cancel").show();
$(".remodal").find(".remodal-confirm").show();
var inst = $('[data-remodal-id=modal]').remodal();
inst.open();
/////////OK /////////////
$(document).off('closed', '.remodal');
$(document).off('confirmation', '.remodal');
$(document).on('confirmation', '.remodal', function (e) {
$(document).off('confirmation', '.remodal');
$(document).off('cancellation', '.remodal');
if(typeof cb_ok == "function"){
cb_ok();
}
});
///////キャンセル//////////////
$(document).off('cancellation', '.remodal');
$(document).on('cancellation', '.remodal', function (e) {
$(document).off('confirmation', '.remodal');
$(document).off('cancellation', '.remodal');
if(typeof cb_cancel == "function"){
cb_cancel();
}
});
/*
if ($.userenv() != "pc") {
if(window.confirm(str)){
cb_ok();
}else{
cb_cancel();
}
}else{
alertify.confirm(str,function(e){
if (e) {
// user clicked "ok"
cb_ok();
} else {
// user clicked "cancel"
cb_cancel();
}
});
}
*/
};
//オブジェクトの個数をもってきます。1
$.countObj = function(obj) {
var num = 0;
for (key in obj ) {
num++;
}
return num;
};
//渡されたJqueryオブジェクトにクラスをセットします
$.setName = function(jobj, str) {
str = $.trim(str);
if (str == "")
return;
var array = str.split(",");
for (var i = 0; i < array.length; i++) {
jobj.addClass(array[i]);
}
};
//フラッシュのインストール判定
$.isFlashInstalled = function() {
if (navigator.plugins['Shockwave Flash']) {
return true;
}
try {
new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
return true;
} catch (e) {
return false;
}
};
/*スマホの場合は、タッチでクリックを置き換える*/
/*タッチ系、一応出来たけど、動作確認よくしなければならなk,問題なければR9にも適応*/
if ($.userenv() != "pc") {
$.event.tap = function(o) {
o.bind('touchstart', onTouchStart_);
function onTouchStart_(e) {
e.preventDefault();
o.data('event.tap.moved', false).one('touchmove', onTouchMove_).one('touchend', onTouchEnd_);
e.stopPropagation();
}
function onTouchMove_(e) {
//o.data('event.tap.moved', true);
e.stopPropagation();
}
function onTouchEnd_(e) {
if (!o.data('event.tap.moved')) {
o.unbind('touchmove', onTouchMove_);
o.trigger('click').click();
e.stopPropagation();
}
}
};
if ('ontouchend' in document) {
$.fn.tap = function(data, fn) {
//alert("tap!");
if (fn == null) {
fn = data;
data = null;
}
if (arguments.length > 0) {
this.bind('tap', data, fn);
$.event.tap(this);
} else {
this.trigger('tap');
}
return this;
};
if ($.attrFn) {
$.attrFn['tap'] = true;
}
//クリック上書き
$.fn.click = $.fn.tap;
} else {
//$.fn.tap = $.fn.click;
}
}
//////////////////////////////
$.error_message = function(str) {
alert(str);
};
//クッキー設定
$.setCookie = function(key, val) {
document.cookie = key + "=" + escape(val) + ";expires=Fri, 31-Dec-2030 23:59:59;path=/;";
}
})(jQuery);
jQuery.fn.outerHTML = function(s) {
if (s) {
this.before(s);
this.remove();
return this;
} else {
var dummy = jQuery("");
var elem = this.eq(0);
dummy.append(elem.clone());
return dummy.html();
}
};
// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];
jQuery.extend(jQuery.easing, {
def : 'easeOutQuad',
swing : function(x, t, b, c, d) {
//alert(jQuery.easing.default);
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
},
easeInQuad : function(x, t, b, c, d) {
return c * (t /= d) * t + b;
},
easeOutQuad : function(x, t, b, c, d) {
return -c * (t /= d) * (t - 2) + b;
},
easeInOutQuad : function(x, t, b, c, d) {
if ((t /= d / 2) < 1)
return c / 2 * t * t + b;
return -c / 2 * ((--t) * (t - 2) - 1) + b;
},
easeInCubic : function(x, t, b, c, d) {
return c * (t /= d) * t * t + b;
},
easeOutCubic : function(x, t, b, c, d) {
return c * (( t = t / d - 1) * t * t + 1) + b;
},
easeInOutCubic : function(x, t, b, c, d) {
if ((t /= d / 2) < 1)
return c / 2 * t * t * t + b;
return c / 2 * ((t -= 2) * t * t + 2) + b;
},
easeInQuart : function(x, t, b, c, d) {
return c * (t /= d) * t * t * t + b;
},
easeOutQuart : function(x, t, b, c, d) {
return -c * (( t = t / d - 1) * t * t * t - 1) + b;
},
easeInOutQuart : function(x, t, b, c, d) {
if ((t /= d / 2) < 1)
return c / 2 * t * t * t * t + b;
return -c / 2 * ((t -= 2) * t * t * t - 2) + b;
},
easeInQuint : function(x, t, b, c, d) {
return c * (t /= d) * t * t * t * t + b;
},
easeOutQuint : function(x, t, b, c, d) {
return c * (( t = t / d - 1) * t * t * t * t + 1) + b;
},
easeInOutQuint : function(x, t, b, c, d) {
if ((t /= d / 2) < 1)
return c / 2 * t * t * t * t * t + b;
return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;
},
easeInSine : function(x, t, b, c, d) {
return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;
},
easeOutSine : function(x, t, b, c, d) {
return c * Math.sin(t / d * (Math.PI / 2)) + b;
},
easeInOutSine : function(x, t, b, c, d) {
return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;
},
easeInExpo : function(x, t, b, c, d) {
return (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;
},
easeOutExpo : function(x, t, b, c, d) {
return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;
},
easeInOutExpo : function(x, t, b, c, d) {
if (t == 0)
return b;
if (t == d)
return b + c;
if ((t /= d / 2) < 1)
return c / 2 * Math.pow(2, 10 * (t - 1)) + b;
return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;
},
easeInCirc : function(x, t, b, c, d) {
return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;
},
easeOutCirc : function(x, t, b, c, d) {
return c * Math.sqrt(1 - ( t = t / d - 1) * t) + b;
},
easeInOutCirc : function(x, t, b, c, d) {
if ((t /= d / 2) < 1)
return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;
return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;
},
easeInElastic : function(x, t, b, c, d) {
var s = 1.70158;
var p = 0;
var a = c;
if (t == 0)
return b;
if ((t /= d) == 1)
return b + c;
if (!p)
p = d * .3;
if (a < Math.abs(c)) {
a = c;
var s = p / 4;
} else
var s = p / (2 * Math.PI) * Math.asin(c / a);
return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
},
easeOutElastic : function(x, t, b, c, d) {
var s = 1.70158;
var p = 0;
var a = c;
if (t == 0)
return b;
if ((t /= d) == 1)
return b + c;
if (!p)
p = d * .3;
if (a < Math.abs(c)) {
a = c;
var s = p / 4;
} else
var s = p / (2 * Math.PI) * Math.asin(c / a);
return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;
},
easeInOutElastic : function(x, t, b, c, d) {
var s = 1.70158;
var p = 0;
var a = c;
if (t == 0)
return b;
if ((t /= d / 2) == 2)
return b + c;
if (!p)
p = d * (.3 * 1.5);
if (a < Math.abs(c)) {
a = c;
var s = p / 4;
} else
var s = p / (2 * Math.PI) * Math.asin(c / a);
if (t < 1)
return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;
},
easeInBack : function(x, t, b, c, d, s) {
if (s == undefined)
s = 1.70158;
return c * (t /= d) * t * ((s + 1) * t - s) + b;
},
easeOutBack : function(x, t, b, c, d, s) {
if (s == undefined)
s = 1.70158;
return c * (( t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
},
easeInOutBack : function(x, t, b, c, d, s) {
if (s == undefined)
s = 1.70158;
if ((t /= d / 2) < 1)
return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;
return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;
},
easeInBounce : function(x, t, b, c, d) {
return c - jQuery.easing.easeOutBounce(x, d - t, 0, c, d) + b;
},
easeOutBounce : function(x, t, b, c, d) {
if ((t /= d) < (1 / 2.75)) {
return c * (7.5625 * t * t) + b;
} else if (t < (2 / 2.75)) {
return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
} else if (t < (2.5 / 2.75)) {
return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
} else {
return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
}
},
easeInOutBounce : function(x, t, b, c, d) {
if (t < d / 2)
return jQuery.easing.easeInBounce(x, t * 2, 0, c, d) * .5 + b;
return jQuery.easing.easeOutBounce(x, t * 2 - d, 0, c, d) * .5 + c * .5 + b;
}
});