/*\r
* pettanR peta.common.js\r
- * version 0.5.39\r
+ * version 0.5.40\r
* \r
* author:\r
* itozyun\r
})(),\r
IS_DEBUG = Type.isBoolean( URL_PARAMS.debug ) ? URL_PARAMS.debug : IS_LOCAL === true;\r
return {\r
- version: '0.5.39',\r
+ version: '0.5.40',\r
URL_PARAMS: URL_PARAMS,\r
LOCAL: IS_LOCAL,\r
DEBUG: IS_DEBUG,\r
NAMESPACE_CLASSNAME = pettanr.CONST.NS_PETTANR_COMIC + '-',\r
PICTURE_PATH = pettanr.CONST.PANEL_PICTURE_PATH,\r
ELM_DETECT_WIDTH = ( function(){\r
- var ret = document.createElement( 'div');\r
+ var ret = document.createElement( 'div' );\r
ret.style.cssText = 'width: auto;height: 0;padding: 0;margin: 0;display: block;visibility: hidden;float: none;position: static;';\r
return ret;\r
})(),\r
};\r
\r
\r
- var ElementBuilderClass = function( elmTarget, noClassnameMode ){\r
- var RIMG_ARRAY = [],\r
- BALLOON_ARRAY = [];\r
- \r
- function buildComicElement(){\r
+ var ElementBuilder = function( elmTarget, noClassname ){\r
+ this.imageList = [];\r
+ this.balloonList = [];\r
+ this.elmTarget = elmTarget;\r
+ this.noClassname = noClassname;\r
+ };\r
+ ElementBuilder.prototype = {\r
+ build : function( json, zoom ){\r
+ this.clean();\r
\r
- };\r
- \r
- function buildPanelElement( json, zoom ){\r
- var _elmPanel = document.createElement( 'div' ),\r
- _style = {\r
+ // json is Comic ? Panel ?\r
+ var panels = json.children || json.stories,\r
+ i, l;\r
+ if( Type.isArray( panels ) === true ){\r
+ // comic\r
+ for( i = 0, l = panels.length; i<l; ++i ){\r
+ this.buildPanelElement( panels[ i ], zoom );\r
+ };\r
+ } else\r
+ if( json.elements ){\r
+ // panel\r
+ this.buildPanelElement( json, zoom );\r
+ } else {\r
+ // invalid json\r
+ };\r
+ },\r
+ buildComicElement : function(){\r
+ \r
+ },\r
+ buildPanelElement : function( json, zoom ){\r
+ var elmPanel = document.createElement( 'div' ),\r
+ style = {\r
'border-width': typeof json.border === 'number' ? json.border + 'px' : 0,\r
- width: json.width + 'px',\r
+ width: json.width + 'px',\r
height: json.height + 'px'\r
},\r
- _cssText = [],\r
- _comicElements = json.elements || ( json.panel ? json.panel.elements : [] ),\r
- _comicElement, _elmImg, _rImg, _rPic,\r
- _balloon, _elmBalloonWrap, _elmText, _text, _speechesAttributes, _key,\r
- i, l;\r
- elmTarget.appendChild( _elmPanel );\r
+ cssText = [],\r
+ elements = json.elements || ( json.panel ? json.panel.elements : [] ),\r
+ rPic,\r
+ p, i, l;\r
+ this.elmTarget.appendChild( elmPanel );\r
\r
- if( noClassnameMode === true ){\r
+ if( this.noClassname === true ){\r
\r
} else {\r
- _elmPanel.className = NAMESPACE_CLASSNAME + 'panel';\r
+ elmPanel.className = NAMESPACE_CLASSNAME + 'panel';\r
};\r
- for( _key in _style ){\r
- _cssText.push( _key + ':' + _style[ _key ] );\r
+ for( p in style ){\r
+ cssText.push( p + ':' + style[ p ] );\r
};\r
- _elmPanel.style.cssText = _cssText.join( ';' );\r
+ elmPanel.style.cssText = cssText.join( ';' );\r
\r
- for( i = 0, l = _comicElements.length; i<l; ++i ){\r
- _comicElement = _comicElements[ i ];\r
- _rPic = _comicElement.picture;\r
- if( _rPic ){\r
- _rImg = pettanr.image.createReversibleImage(\r
- [ PICTURE_PATH, _rPic.id, '.', _rPic.ext ].join( ''),\r
- _comicElement.width, _comicElement.height\r
- );\r
- _elmImg = _rImg.elm;\r
- _elmPanel.appendChild( _elmImg );\r
- _elmImg.className = NAMESPACE_CLASSNAME + 'image';\r
- _elmImg.style.cssText = [\r
- 'left:', _comicElement.x, 'px;',\r
- 'top:', _comicElement.y, 'px;',\r
- 'z-index:',_comicElement.z, ';'\r
- ].join( ''); \r
- if( _elmImg.tagName === 'img' ){\r
- _elmImg.width = Math.abs( _comicElement.width );\r
- _elmImg.height = Math.abs( _comicElement.height );\r
- } else {\r
- _elmImg.style.width = Math.abs( _comicElement.width ) + 'px';\r
- _elmImg.style.height = Math.abs( _comicElement.height ) + 'px';\r
- };\r
- \r
- RIMG_ARRAY.push( _rImg );\r
+ for( i = 0, l = elements.length; i < l; ++i ){\r
+ data = elements[ i ];\r
+ rPic = data.picture;\r
+ if( rPic ){\r
+ this.buildImage( elmPanel, data, rPic );\r
} else {\r
- _elmBalloonWrap = document.createElement( 'div' );\r
- _elmPanel.appendChild( _elmBalloonWrap );\r
- _elmBalloonWrap.className = NAMESPACE_CLASSNAME + 'balloon';\r
- _elmBalloonWrap.style.cssText = [\r
- 'width:', _comicElement.width, 'px;',\r
- 'height:', _comicElement.height, 'px;',\r
- 'left:', _comicElement.x, 'px;',\r
- 'top:', _comicElement.y, 'px;',\r
- 'z-index:', _comicElement.z, ';'\r
- ].join( '');\r
-\r
- _balloon = pettanr.balloon.createBalloon( _comicElement.width, _comicElement.height, _comicElement.tail );\r
- _elmBalloonWrap.appendChild( _balloon.elm );\r
- \r
- _elmText = document.createElement( 'p' );\r
- _elmBalloonWrap.appendChild( _elmText );\r
- \r
- _elmText.appendChild( document.createElement( 'span' ) );\r
- \r
- _text = '';\r
- _speechesAttributes = _comicElement.speeches_attributes;\r
- if( _speechesAttributes ){\r
- for( _key in _speechesAttributes ){\r
- _text += _speechesAttributes[ _key ] && _speechesAttributes[ _key ].content ? _speechesAttributes[ _key ].content : '';\r
- };\r
- };\r
- _elmText.firstChild.appendChild( document.createTextNode( _text ));\r
- BALLOON_ARRAY.push( _balloon );\r
+ this.buildBalloon( elmPanel, data );\r
};\r
};\r
- };\r
- \r
- function clean(){\r
- // clean elmTarget\r
- while( RIMG_ARRAY.length > 0 ){\r
- RIMG_ARRAY.shift().destroy();\r
- };\r
- while( BALLOON_ARRAY.length > 0 ){\r
- BALLOON_ARRAY.shift().destroy();\r
+ },\r
+ buildImage : function( elmPanel, data, rPic ){\r
+ var rImg = pettanr.image.createReversibleImage(\r
+ [ PICTURE_PATH, data.picture_id, '.', rPic.ext ].join( '' ),\r
+ data.width, data.height\r
+ ),\r
+ elmImg = rImg.elm;\r
+ elmPanel.appendChild( elmImg );\r
+ elmImg.className = NAMESPACE_CLASSNAME + 'image';\r
+ elmImg.style.cssText = [\r
+ 'left:', data.x, 'px;',\r
+ 'top:', data.y, 'px;',\r
+ 'z-index:', data.z, ';'\r
+ ].join( ''); \r
+ if( elmImg.tagName === 'img' ){\r
+ elmImg.width = Math.abs( data.width );\r
+ elmImg.height = Math.abs( data.height );\r
+ } else {\r
+ elmImg.style.width = Math.abs( data.width ) + 'px';\r
+ elmImg.style.height = Math.abs( data.height ) + 'px';\r
};\r
- Util.removeAllChildren( elmTarget ); \r
- };\r
- \r
- this.build = function( json, zoom ){\r
- clean();\r
\r
- // json is Comic ? Panel ?\r
- var stories = json.children || json.stories,\r
- i, l;\r
- if( Type.isArray( stories ) === true ){\r
- // comic\r
- for( i = 0, l = stories.length; i<l; ++i ){\r
- buildPanelElement( stories[ i ], zoom );\r
+ this.imageList.push( rImg ); \r
+ },\r
+ buildBalloon : function( elmPanel, data ){\r
+ var elmBalloonWrap = document.createElement( 'div' ),\r
+ elmText = document.createElement( 'p' ),\r
+ content = '',\r
+ speechesAttr = data.speeches_attributes,\r
+ balloon, p;\r
+ elmPanel.appendChild( elmBalloonWrap );\r
+ elmBalloonWrap.className = NAMESPACE_CLASSNAME + 'balloon';\r
+ elmBalloonWrap.style.cssText = [\r
+ 'width:', data.width, 'px;',\r
+ 'height:', data.height, 'px;',\r
+ 'left:', data.x, 'px;',\r
+ 'top:', data.y, 'px;',\r
+ 'z-index:', data.z, ';'\r
+ ].join( '');\r
+\r
+ balloon = pettanr.balloon.createBalloon( data.width, data.height, data.tail );\r
+ elmBalloonWrap.appendChild( balloon.elm );\r
+ \r
+ elmBalloonWrap.appendChild( elmText );\r
+ \r
+ elmText.appendChild( document.createElement( 'span' ) );\r
+ \r
+ if( speechesAttr ){\r
+ for( p in speechesAttr ){\r
+ content += speechesAttr[ p ] && speechesAttr[ p ].content ? speechesAttr[ p ].content : '';\r
};\r
- } else\r
- if( json.elements ){\r
- // panel\r
- buildPanelElement( json, zoom );\r
- } else {\r
- // invalid json\r
};\r
- };\r
- this.zoom = function(){\r
- \r
- };\r
- this.destroy = function(){\r
- clean();\r
- };\r
+ elmText.firstChild.appendChild( document.createTextNode( content ));\r
+ this.balloonList.push( balloon );\r
+ },\r
+ clean : function(){\r
+ // clean elmTarget\r
+ while( this.imageList.length > 0 ){\r
+ this.imageList.shift().destroy();\r
+ };\r
+ while( this.balloonList.length > 0 ){\r
+ this.balloonList.shift().destroy();\r
+ };\r
+ Util.removeAllChildren( this.elmTarget ); \r
+ },\r
+ zoom : function(){},\r
+ destroy : function(){\r
+ this.clean();\r
+ } \r
};\r
\r
- var BindWorkerClass = function( elmTarget, json, zoomSelfEnabled, noClassnameMode ){\r
- var builder = new ElementBuilderClass( elmTarget, noClassnameMode );\r
- var elmDetectW = ELM_DETECT_WIDTH.cloneNode( false );\r
- var resizer = null;\r
- \r
+ var BindWorker = function( elmTarget, json, zoomSelfEnabled, noClassname ){\r
+ this.builder = new ElementBuilder( elmTarget, noClassname );\r
+ this.elmDetectW = ELM_DETECT_WIDTH.cloneNode( false );\r
+ this._json = json;\r
+ this.noClassname = noClassname;\r
if( zoomSelfEnabled === true ){\r
- elmTarget.parentNode.insertBefore( elmDetectW, elmTarget );\r
- resizer = new ResizeAgentClass( onResize, elmDetectW );\r
+ elmTarget.parentNode.insertBefore( this.elmDetectW, elmTarget );\r
+ this.resizer = new ResizeAgentClass( onResize, this.elmDetectW );\r
};\r
function onResize(){\r
\r
};\r
- json && typeof json === 'object' && builder.build( json );\r
- \r
- this.init = function(){\r
+ json && typeof json === 'object' && this.builder.build( json );\r
+ };\r
+ BindWorker.prototype = {\r
+ init : function(){\r
\r
- };\r
- this.zoom = function(){\r
- builder.zoom();\r
- };\r
- this.json = function( _json ){\r
- json = _json;\r
- builder.build( _json );\r
- };\r
- this.targetElement = function(){\r
+ },\r
+ zoom : function(){\r
+ this.builder.zoom();\r
+ },\r
+ json : function( json ){\r
+ this._json = json;\r
+ this.builder.build( json, this.noClassname );\r
+ },\r
+ targetElement : function(){\r
\r
- };\r
- this.layout = function(){\r
+ },\r
+ layout : function(){\r
\r
- };\r
- this.destroy = function(){\r
- builder.destroy();\r
- elmTarget = json = builder = null;\r
- };\r
+ },\r
+ destroy : function(){\r
+ this.builder.destroy();\r
+ delete this.json;\r
+ delete this.builder;\r
+ } \r
};\r
- \r
return {\r
createBindWorker: function( elmTarget, opt_COMICJSONorPANELJSON, opt_zoomSelfEnabled, opt_noClassnameMode ){\r
- var ret = new BindWorkerClass( elmTarget, opt_COMICJSONorPANELJSON, !!opt_zoomSelfEnabled, !!opt_noClassnameMode);\r
+ var ret = new BindWorker( elmTarget, opt_COMICJSONorPANELJSON, !!opt_zoomSelfEnabled, !!opt_noClassnameMode );\r
BIND_WORKER_ARRAY.push( ret );\r
return ret;\r
},\r
/*
* pettanR system.js
- * version 0.5.39
+ * version 0.5.40
*
* gadgetOS
* author:
*
*/
var Class = ( function(){
- var CLASS_LIST = [],
- DEF_LIST = [],
- PRIVATE_LIST = [];
+ var CLASS_LIST = [],
+ DEF_LIST = [],
+ CONSTRUCTOR = 'Constructor';
function getClass( instance ){
- var list = CLASS_LIST,
- i = list.length,
+ var clist = CLASS_LIST,
+ dlist = DEF_LIST,
+ i = clist.length,
getIndex = Util.getIndex,
klass, def, live, pool;
for( ; i; ){
- klass = list[ --i ];
- def = getDef( klass );
- if( def.live && getIndex( def.live, instance ) !== -1 ) return klass;
+ klass = clist[ --i ];
+ //def = dlist[ i ];
+ //if( def.live && getIndex( def.live, instance ) !== -1 ) return klass;
if( def.pool && getIndex( def.pool, instance ) !== -1 ) return klass;
if( instance instanceof klass ) return klass;
};
- throw new Error( 'Class not found!' );
+ // throw new Error( 'Class not found!' );
};
- function getDef( klass ){
- var i = Util.getIndex( CLASS_LIST, klass );
+ function getClassDef( KlassOrInstance ){
+ var i = Util.getIndex( CLASS_LIST, KlassOrInstance );
+ if( i === -1 ) i = Util.getIndex( CLASS_LIST, getClass( KlassOrInstance ) );
if( i !== -1 ) return DEF_LIST[ i ];
};
/* over のプロパティを target にコピーする.ただし target の プロパティが優先, force で解除 */
function override( target, over, force ){
for( var p in over ){
+ if( p === CONSTRUCTOR ) continue;
if( force === true || typeof target[ p ] === 'undefined' ){
target[ p ] = over[ p ];
};
* var subClass = superClass.inherits( ... )
* http://d.hatena.ne.jp/m-hiyama/20051018/1129605002
*/
- function inherits( def, opt_pool, opt_abstract, opt_final, opt_super, opt_PrivateClass ){
- var Super = this,
- def = getDef( Super ),
+ function inherits( /* classSetting, opt_PrivateClass, props */ ){
+ var args = c( arguments ),
+ Super = this,
+ superDef = getClassDef( Super ),
+ classSetting = args[ 0 ],
+ opt_super,
+ opt_privateClass,
Traits, klass;
+ if( superDef.Final === true ) throw new Error( 'Class is final!' );
+ if( Type.isNumber( classSetting ) === true ){
+ opt_super = classSetting & Class.SUPER_ACCESS === 1;
+ args.shift();
+ };
+ opt_privateClass = getClass( args[ 0 ] );
+ opt_privateClass && args.shift();
abstractFlag = false;
Traits = new Super;
abstractFlag = true;
- klass = Class.create( override( Traits, def, true ), opt_pool, opt_abstract, opt_final, opt_PrivateClass );
- if( opt_super === true ){
- def.Super = Super.prototype;
- };
+ klass = Class.create( classSetting, opt_privateClass || superDef.privateClass, override( Traits, args[ 0 ], true ) );
+ if( opt_super === true ) getClassDef( klass ).Super = Super.prototype;
return klass;
};
/* Class.create で作られたクラスのインスタンスが共通で備えるメソッド */
- var basic = {
+ var ClassBase = {
kill : function(){
var instance = this,
- p, v,
+ p,
klass = getClass( instance ),
- def = getDef( klass ),
+ def = getClassDef( klass ),
privateData, i;
- Type.isFunction( o.onKill ) === true && o.onKill();
+ Type.isFunction( instance.onKill ) === true && instance.onKill();
for( p in instance ){
if( instance.hasOwnProperty && !instance.hasOwnProperty( p ) ) continue;
- v = instance[ p ];
delete instance[ p ];
};
if( def.pool ){
- klass.live.splice( Util.getIndex( klass.live, instance ), 1 );
- klass.pool.push( instance );
+ def.live.splice( Util.getIndex( def.live, instance ), 1 );
+ def.pool.push( instance );
};
if( def.privateClass ){
- privateData = instance.getPrivateData();
- privateData && privateData.kill();
+ privateData = klass.getPrivateData( instance );
+ if( privateData ){
+ privateData.kill();
+ i = Util.getIndex( def.dataList, privateData );
+ def.dataList.splice( i, 1 );
+ def.userList.splice( i, 1 );
+ };
};
- if( def.isPrivate === true ){
- i = Util.getIndex( def.dataList, instance );
- def.dataList.splice( i, 1 );
- def.userList.splice( i, 1 );
+ // myCallback の削除
+ // myCallback を受け取った API への通知
+ },
+ myCallback : function( callback ){
+ var def = getClassDef( this ),
+ iList = def.callbackInstanceList,
+ rList = def.callbackRegisterList,
+ i, clist, myCallback;
+ if( !iList ){
+ iList = def.callbackInstanceList = [];
+ rList = def.callbackRegisterList = [];
+ };
+ i = Util.getIndex( iList, this );
+ clist = rList[ i ];
+ if( index === -1 ){
+ index = iList.length;
+ cList = [];
+ iList.push( this );
+ rList.push( cList );
+ } else {
+ for( i = cList.length; i; ){
+ if( cList[ --i ].callback === callback ) return cList[ i ];
+ };
};
+ myCallback = new Callback( this, callback );
+ cList.push( myCallback );
+ return myCallback;
}
};
/* privateDataclass をもつクラスに追加されるメソッド */
function newPrivateData( instance /*, args */ ){
- var klass = getDef( getClass( instance ) ).privateClass,
- def = getDef( klass ),
- i = Util.getIndex( def.userList, instance ),
- args = c( arguments ),
+ var def = getClassDef( instance ),
+ privateClass = def.privateClass,
+ i = Util.getIndex( def.userList, instance ),
+ args = c( arguments ),
data;
- if( i === -1 ){
- throw new Error( 'Private already exist!' );
+ if( i !== -1 ){
+ throw new Error( 'PrivateData already exist!' );
};
privateFlag = false;
args.unshift();
- data = I.apply( klass, args );
+ data = I.apply( privateClass, args );
privateFlag = false;
def.dataList.push( data );
def.userList.push( instance );
return data;
};
function getPrivateData( instance ){
- var klass = getDef( getClass( instance ) ).privateClass,
- def = getDef( klass ),
- i = Util.getIndex( def.userList, instance );
- if( i !== -1 ) return def.userList[ i ];
+ var def = getClassDef( instance ),
+ i = Util.getIndex( def.userList, instance );
+ if( i !== -1 ) return def.dataList[ i ];
};
/*
privateFlag = true,
f = true,
c = Util.copyArray,
- a, dataUser;
+ a;
function I(){
var klass = this,
- def = getDef( klass ),
+ def = getClassDef( klass ),
instance;
- if( def.abstract === true ){
+ if( def.Abstract === true || abstractFlag === false ){
if( abstractFlag === true ){
throw new Error( 'AbstractClass!' );
};
instance = new klass();
f = true;
};
- if( def.Super ){
+ if( def.Super && !instance.Super ){
instance.Super = def.Super;
};
- instance.Constructor && instance.Constructor.apply( instance, c( arguments ) );
+ def[ CONSTRUCTOR ] && def[ CONSTRUCTOR ].apply( instance, c( arguments ) );
def.live && def.live.push( instance );
return instance;
};
return {
- create : function( def, opt_pool, opt_abstract, opt_final, opt_PrivateClass ){
- var klass = function(){
- a = arguments;
- if( f ) return I.apply( a.callee, c( a ) );
- },
- def = {},
- _def;
- klass.prototype = override( def, basic, false );
+ POOL_OBJECT : 1,
+ ABSTRACT : 2,
+ FINAL : 4,
+ SUPER_ACCESS : 8,
+ create : function( /* classSetting, opt_PrivateClass, props */ ){
+ var args = c( arguments ),
+ classSetting = args[ 0 ],
+ opt_pool, opt_abstract, opt_final,
+ privateDef,
+ props,
+ klass,
+ classDef = {};
+ if( Type.isNumber( classSetting ) === true ){
+ opt_pool = classSetting & Class.POOL_OBJECT === 1;
+ opt_abstract = classSetting & Class.ABSTRACT === 1;
+ opt_final = classSetting & Class.FINAL === 1;
+ args.shift();
+ };
if( opt_final === true && opt_abstract === true ){
throw new Error( 'final & Abstract!' );
+ };
+
+ privateDef = getClassDef( args[ 0 ] );
+ if( privateDef ){
+ if( privateDef.isPrivate !== true ){
+ throw new Error( 'PrivateClass not found! please, Class.createPrivateData().' );
+ } else
+ if( privateDef.Abstract === true ){
+ throw new Error( 'PrivateClass is Abstract!' );
+ } else {
+ classDef.privateClass = args[ 0 ];
+ klass.newPrivateData = newPrivateData;
+ klass.getPrivateData = getPrivateData;
+ args.shift();
+ };
+ };
+ props = args[ 0 ]
+ if( props === null || Type.isObject( props ) === false ){
+ throw new Error( 'No Class Def!' );
+ };
+
+ klass = function(){ a = arguments; if( f ) return I.apply( a.callee, c( a ) )};
+ klass.prototype = override( override( {}, props, true ), ClassBase, false );
+
+ if( Type.isFunction( props[ CONSTRUCTOR ] ) === true ){
+ classDef[ CONSTRUCTOR ] = props[ CONSTRUCTOR ];
};
if( opt_final !== true ){
klass.inherits = inherits;
+ } else {
+ def.Final = true;
};
if( opt_abstract === true ){
- def.abstract = true;
+ classDef.Abstract = true;
} else
if( opt_pool === true ){
- def.pool = [];
- def.live = [];
- };
- if( opt_PrivateClass ){
- _def = getDef( opt_PrivateClass );
- if( !_def || _def.isPrivate !== true ){
- throw new Error( 'PrivateClass not found! please, Class.createPrivateData().' );
- };
- def.privateClass = opt_PrivateClass;
- klass.newPrivateData = newPrivateData;
- klass.getPrivateData = getPrivateData;
+ classDef.pool = [];
+ classDef.live = [];
};
CLASS_LIST.push( klass );
- DEF_LIST.push( def );
+ DEF_LIST.push( classDef );
return klass;
},
- createPrivateData : function( def, opt_abstract, opt_final ){
- var klass = Class.create( def, true, opt_abstract, opt_final ),
- def = getDef( klass );
- def.isPrivate = true;
- def.userList = [];
- def.dataList = [];
+ createPrivateData : function( props, opt_abstract, opt_final ){
+ var klass = Class.create( props, true, opt_abstract, opt_final ),
+ classDef = getClassDef( klass );
+ classDef.isPrivate = true;
+ classDef.userList = [];
+ classDef.dataList = [];
return klass;
},
onShutdown : function(){
};
})();
+/**
+ * Callback 時に thisObject や args を指定したい場合に使用.
+ */
+var Callback = Class.create(
+ Class.POOL_OBJECT | Class.FINAL, {
+ Constructor : function( thisObject, callback, opt_args ){
+ if( Type.isFunction( callback ) === false ){
+ throw new Error( 'Not function!' );
+ };
+ this.callback = callback;
+ if( thisObject ) this.thisObject = thisObject;
+ if( Type.isArray( opt_args ) === true ){
+ this.args = opt_args;
+ } else
+ if( opt_args !== undefined ){
+ this.arg = opt_args;
+ };
+ },
+ fire : function( /* args */ ){
+ var thisObject = this.thisObject || window,
+ args = Util.copyArray( arguments );
+ if( 0 < args.length ){
+ if( this.args !== undefined ){
+ args.push.apply( args, this.args );
+ } else
+ if( this.arg !== undefined ){
+ args.push( this.arg );
+ };
+ this.callback.apply( thisObject, args );
+ } else {
+ if( this.args !== undefined ){
+ this.callback.apply( thisObject, this.args );
+ } else
+ if( this.arg !== undefined ){
+ this.callback.call( thisObject, this.arg );
+ } else {
+ this.callback.call( thisObject );
+ };
+ };
+ },
+ registerUser : function( user ){
+
+ },
+ onKill : function(){
+ }
+});
+
var TicketBase = function(){
this.kill = function(){
var t = this, v, p;