diff --git a/dev/lib/impact/animation.js b/dev/lib/impact/animation.js
index d36f054..37f7bc7 100755
--- a/dev/lib/impact/animation.js
+++ b/dev/lib/impact/animation.js
@@ -5,7 +5,7 @@ ig.module(
'impact.timer',
'impact.image'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.AnimationSheet = ig.Class.extend({
width: 8,
@@ -17,7 +17,7 @@ ig.AnimationSheet = ig.Class.extend({
this.height = height;
this.image = new ig.Image( path );
- }
+ }
});
diff --git a/dev/lib/impact/background-map.js b/dev/lib/impact/background-map.js
index 9219798..619e371 100755
--- a/dev/lib/impact/background-map.js
+++ b/dev/lib/impact/background-map.js
@@ -5,7 +5,7 @@ ig.module(
'impact.map',
'impact.image'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.BackgroundMap = ig.Map.extend({
tiles: null,
@@ -73,7 +73,7 @@ ig.BackgroundMap = ig.Map.extend({
preRenderChunk: function( cx, cy, w, h ) {
- var tw = w / this.tilesize / ig.system.scale + 1;
+ var tw = w / this.tilesize / ig.system.scale + 1,
th = h / this.tilesize / ig.system.scale + 1;
var nx = (cx * this.chunkSize / ig.system.scale) % this.tilesize,
diff --git a/dev/lib/impact/collision-map.js b/dev/lib/impact/collision-map.js
index 71ff1ab..1142aa7 100755
--- a/dev/lib/impact/collision-map.js
+++ b/dev/lib/impact/collision-map.js
@@ -4,13 +4,22 @@ ig.module(
.requires(
'impact.map'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.CollisionMap = ig.Map.extend({
+ lastSlope: 1,
+ tiledef: null,
+
init: function( tilesize, data, tiledef ) {
this.parent( tilesize, data );
this.tiledef = tiledef || ig.CollisionMap.defaultTileDef;
+
+ for( var t in this.tiledef ) {
+ if( t|0 > this.lastSlope ) {
+ this.lastSlope = t|0;
+ }
+ }
},
@@ -78,24 +87,28 @@ ig.CollisionMap = ig.Map.extend({
for( var tileY = firstTileY; tileY < lastTileY; tileY++ ) {
if( prevTileX != -1 ) {
t = this.data[tileY][prevTileX];
- if( t > 1 && this._checkTileDef(res, t, x, y, rvx, rvy, width, height, prevTileX, tileY) ) {
+ if(
+ t > 1 && t <= this.lastSlope &&
+ this._checkTileDef(res, t, x, y, rvx, rvy, width, height, prevTileX, tileY)
+ ) {
break;
}
}
t = this.data[tileY][tileX];
if(
- t == 1 || // fully solid tile?
+ t == 1 || t > this.lastSlope || // fully solid tile?
(t > 1 && this._checkTileDef(res, t, x, y, rvx, rvy, width, height, tileX, tileY)) // slope?
) {
- if( t > 1 && res.collision.slope ) {
+ if( t > 1 && t <= this.lastSlope && res.collision.slope ) {
break;
}
// full tile collision!
res.collision.x = true;
res.tile.x = t;
- res.pos.x = tileX * this.tilesize - pxOffsetX + tileOffsetX;
+ x = res.pos.x = tileX * this.tilesize - pxOffsetX + tileOffsetX;
+ rvx = 0;
break;
}
}
@@ -121,17 +134,19 @@ ig.CollisionMap = ig.Map.extend({
for( var tileX = firstTileX; tileX < lastTileX; tileX++ ) {
if( prevTileY != -1 ) {
t = this.data[prevTileY][tileX];
- if( t > 1 && this._checkTileDef(res, t, x, y, rvx, rvy, width, height, tileX, prevTileY) ) {
+ if(
+ t > 1 && t <= this.lastSlope &&
+ this._checkTileDef(res, t, x, y, rvx, rvy, width, height, tileX, prevTileY) ) {
break;
}
}
t = this.data[tileY][tileX];
if(
- t == 1 || // fully solid tile?
+ t == 1 || t > this.lastSlope || // fully solid tile?
(t > 1 && this._checkTileDef(res, t, x, y, rvx, rvy, width, height, tileX, tileY)) // slope?
) {
- if( t > 1 && res.collision.slope ) {
+ if( t > 1 && t <= this.lastSlope && res.collision.slope ) {
break;
}
@@ -183,9 +198,10 @@ ig.CollisionMap = ig.Map.extend({
py = ny * proj;
// If we project further out than we moved in, then this is a full
- // tile collision
+ // tile collision for solid tiles.
+ // For non-solid tiles, make sure we were in front of the line.
if( px*px+py*py >= vx*vx+vy*vy ) {
- return true;
+ return solid || (lvx * (ty-vy) - lvy * (tx-vx) < 0.5);
}
res.pos.x = x + vx - px;
diff --git a/dev/lib/impact/debug/debug.js b/dev/lib/impact/debug/debug.js
index f660143..3e03eb4 100755
--- a/dev/lib/impact/debug/debug.js
+++ b/dev/lib/impact/debug/debug.js
@@ -6,7 +6,7 @@ ig.module(
'impact.debug.maps-panel',
'impact.debug.graph-panel'
)
-.defines(function(){
+.defines(function(){ "use strict";
/* Empty module to require all debug panels */
diff --git a/dev/lib/impact/debug/entities-panel.js b/dev/lib/impact/debug/entities-panel.js
index 7b25824..3209bef 100755
--- a/dev/lib/impact/debug/entities-panel.js
+++ b/dev/lib/impact/debug/entities-panel.js
@@ -5,7 +5,7 @@ ig.module(
'impact.debug.menu',
'impact.entity'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.Entity.inject({
diff --git a/dev/lib/impact/debug/graph-panel.js b/dev/lib/impact/debug/graph-panel.js
index 46f3794..12f1523 100755
--- a/dev/lib/impact/debug/graph-panel.js
+++ b/dev/lib/impact/debug/graph-panel.js
@@ -7,7 +7,7 @@ ig.module(
'impact.game',
'impact.image'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.Game.inject({
diff --git a/dev/lib/impact/debug/maps-panel.js b/dev/lib/impact/debug/maps-panel.js
index ff9c582..c261459 100755
--- a/dev/lib/impact/debug/maps-panel.js
+++ b/dev/lib/impact/debug/maps-panel.js
@@ -6,7 +6,7 @@ ig.module(
'impact.game',
'impact.background-map'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.Game.inject({
diff --git a/dev/lib/impact/debug/menu.js b/dev/lib/impact/debug/menu.js
index edef71a..cf827f6 100755
--- a/dev/lib/impact/debug/menu.js
+++ b/dev/lib/impact/debug/menu.js
@@ -5,7 +5,7 @@ ig.module(
'dom.ready',
'impact.system'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.System.inject({
@@ -59,9 +59,11 @@ ig.Debug = ig.Class.extend({
this.numberContainer.className ='ig_debug_stats';
this.panelMenu.appendChild( this.numberContainer );
- // Set ig.log() and ig.show()
- if( window.console && window.console.log ) {
- ig.log = window.console.log.bind(window.console);
+ // Set ig.log(), ig.assert() and ig.show()
+ if( window.console && window.console.log && window.console.assert ) {
+ // Can't use .bind() on native functions in IE9 :/
+ ig.log = console.log.bind ? console.log.bind(console) : console.log;
+ ig.assert = console.assert.bind ? console.assert.bind(console) : console.assert;
}
ig.show = this.showNumber.bind(this);
},
@@ -105,7 +107,7 @@ ig.Debug = ig.Class.extend({
menuItem.textContent = panel.label;
menuItem.addEventListener(
'click',
- (function(ev){ this.togglePanel(ev, panel); }).bind(this),
+ (function(ev){ this.togglePanel(panel); }).bind(this),
false
);
panel.menuItem = menuItem;
@@ -127,7 +129,12 @@ ig.Debug = ig.Class.extend({
},
- togglePanel: function( ev, panel ) {
+ showPanel: function( name ) {
+ this.togglePanel( this.panels[name] );
+ },
+
+
+ togglePanel: function( panel ) {
if( panel != this.activePanel && this.activePanel ) {
this.activePanel.toggle( false );
this.activePanel.menuItem.className = 'ig_debug_menu_item';
@@ -137,7 +144,7 @@ ig.Debug = ig.Class.extend({
var dsp = panel.container.style.display;
var active = (dsp != 'block');
panel.toggle( active );
- ev.target.className = 'ig_debug_menu_item' + (active ? ' active' : '');
+ panel.menuItem.className = 'ig_debug_menu_item' + (active ? ' active' : '');
if( active ) {
this.activePanel = panel;
diff --git a/dev/lib/impact/entity.js b/dev/lib/impact/entity.js
index a40cd18..3fa961c 100755
--- a/dev/lib/impact/entity.js
+++ b/dev/lib/impact/entity.js
@@ -5,7 +5,7 @@ ig.module(
'impact.animation',
'impact.impact'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.Entity = ig.Class.extend({
id: 0,
@@ -131,11 +131,8 @@ ig.Entity = ig.Class.extend({
if( this.bounciness > 0 ) {
var proj = this.vel.x * s.nx + this.vel.y * s.ny;
- this.vel.x -= s.nx * proj * 2;
- this.vel.y -= s.ny * proj * 2;
-
- this.vel.x *= this.bounciness;
- this.vel.y *= this.bounciness;
+ this.vel.x = (this.vel.x - s.nx * proj * 2) * this.bounciness;
+ this.vel.y = (this.vel.y - s.ny * proj * 2) * this.bounciness;
}
else {
var lengthSquared = s.x * s.x + s.y * s.y;
diff --git a/dev/lib/impact/font.js b/dev/lib/impact/font.js
index 2c3fcc1..eee24ed 100755
--- a/dev/lib/impact/font.js
+++ b/dev/lib/impact/font.js
@@ -4,29 +4,52 @@ ig.module(
.requires(
'impact.image'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.Font = ig.Image.extend({
widthMap: [],
indices: [],
firstChar: 32,
- height: 0,
+ alpha: 1,
+ letterSpacing: 1,
+ lineSpacing: 0,
onload: function( ev ) {
this._loadMetrics( this.data );
this.parent( ev );
},
+
+
+ widthForString: function( text ) {
+ // Multiline?
+ if( text.indexOf('\n') !== -1 ) {
+ var lines = text.split( '\n' );
+ var width = 0;
+ for( var i = 0; i < lines.length; i++ ) {
+ width = Math.max( width, this._widthForLine(lines[i]) );
+ }
+ return width;
+ }
+ else {
+ return this._widthForLine( text );
+ }
+ },
+
-
- widthForString: function( s ) {
+ _widthForLine: function( text ) {
var width = 0;
- for( var i = 0; i < s.length; i++ ) {
- width += this.widthMap[s.charCodeAt(i) - this.firstChar] + 1;
+ for( var i = 0; i < text.length; i++ ) {
+ width += this.widthMap[text.charCodeAt(i) - this.firstChar] + this.letterSpacing;
}
return width;
},
+
+
+ heightForString: function( text ) {
+ return text.split('\n').length * (this.height + this.lineSpacing);
+ },
draw: function( text, x, y, align ) {
@@ -36,27 +59,32 @@ ig.Font = ig.Image.extend({
// Multiline?
if( text.indexOf('\n') !== -1 ) {
- var lines = text.split( '\n' );
- for( i = 0; i < lines.length; i++ ) {
- this.draw( lines[i], x, y + i * this.height, align );
+ var lines = text.split( '\n' );
+ var lineHeight = this.height + this.lineSpacing;
+ for( var i = 0; i < lines.length; i++ ) {
+ this.draw( lines[i], x, y + i * lineHeight, align );
}
return;
}
if( align == ig.Font.ALIGN.RIGHT || align == ig.Font.ALIGN.CENTER ) {
- var width = 0;
- for( var i = 0; i < text.length; i++ ) {
- var c = text.charCodeAt(i);
- width += this.widthMap[c - this.firstChar] + 1;
- }
+ var width = this._widthForLine( text );
x -= align == ig.Font.ALIGN.CENTER ? width/2 : width;
}
-
+
+ if( this.alpha !== 1 ) {
+ ig.system.context.globalAlpha = this.alpha;
+ }
+
for( var i = 0; i < text.length; i++ ) {
var c = text.charCodeAt(i);
x += this._drawChar( c - this.firstChar, x, y );
}
+
+ if( this.alpha !== 1 ) {
+ ig.system.context.globalAlpha = 1;
+ }
ig.Image.drawCount += text.length;
},
@@ -80,7 +108,7 @@ ig.Font = ig.Image.extend({
charWidth, charHeight
);
- return this.widthMap[c] + 1;
+ return this.widthMap[c] + this.letterSpacing;
},
@@ -126,4 +154,4 @@ ig.Font.ALIGN = {
CENTER: 2
};
-});
\ No newline at end of file
+});
diff --git a/dev/lib/impact/game.js b/dev/lib/impact/game.js
index 110fada..770a5d0 100755
--- a/dev/lib/impact/game.js
+++ b/dev/lib/impact/game.js
@@ -7,7 +7,7 @@ ig.module(
'impact.collision-map',
'impact.background-map'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.Game = ig.Class.extend({
@@ -34,7 +34,7 @@ ig.Game = ig.Class.extend({
staticInstantiate: function() {
- this.sortBy = ig.Game.SORT.Z_INDEX;
+ this.sortBy = this.sortBy || ig.Game.SORT.Z_INDEX;
ig.game = this;
return null;
},
@@ -67,6 +67,7 @@ ig.Game = ig.Class.extend({
newMap.distance = ld.distance;
newMap.foreground = !!ld.foreground;
newMap.preRender = !!ld.preRender;
+ newMap.name = ld.name;
this.backgroundMaps.push( newMap );
}
}
@@ -83,6 +84,21 @@ ig.Game = ig.Class.extend({
},
+ getMapByName: function( name ) {
+ if( name == 'collision' ) {
+ return this.collisionMap;
+ }
+
+ for( var i = 0; i < this.backgroundMaps.length; i++ ) {
+ if( this.backgroundMaps[i].name == name ) {
+ return this.backgroundMaps[i];
+ }
+ }
+
+ return null;
+ },
+
+
getEntityByName: function( name ) {
return this.namedEntities[name];
},
@@ -143,6 +159,7 @@ ig.Game = ig.Class.extend({
// Also make sure this entity doesn't collide anymore and won't get
// updated or checked
ent._killed = true;
+ ent.type = ig.Entity.TYPE.NONE;
ent.checkAgainst = ig.Entity.TYPE.NONE;
ent.collides = ig.Entity.COLLIDES.NEVER;
this._deferredKill.push( ent );
@@ -203,8 +220,12 @@ ig.Game = ig.Class.extend({
ig.system.clear( this.clearColor );
}
- this._rscreen.x = Math.round(this.screen.x * ig.system.scale)/ig.system.scale;
- this._rscreen.y = Math.round(this.screen.y * ig.system.scale)/ig.system.scale;
+ // This is a bit of a circle jerk. Entities reference game._rscreen
+ // instead of game.screen when drawing themselfs in order to be
+ // "synchronized" to the rounded(?) screen position
+ this._rscreen.x = ig.system.getDrawPos(this.screen.x)/ig.system.scale;
+ this._rscreen.y = ig.system.getDrawPos(this.screen.y)/ig.system.scale;
+
var mapIndex;
for( mapIndex = 0; mapIndex < this.backgroundMaps.length; mapIndex++ ) {
@@ -297,8 +318,8 @@ ig.Game = ig.Class.extend({
ig.Game.SORT = {
Z_INDEX: function( a, b ){ return a.zIndex - b.zIndex; },
- POS_X: function( a, b ){ return a.pos.x - b.pos.x; },
- POS_Y: function( a, b ){ return a.pos.y - b.pos.y; }
+ POS_X: function( a, b ){ return (a.pos.x+a.size.x) - (b.pos.x+b.size.x); },
+ POS_Y: function( a, b ){ return (a.pos.y+a.size.y) - (b.pos.y+b.size.y); }
};
});
\ No newline at end of file
diff --git a/dev/lib/impact/image.js b/dev/lib/impact/image.js
index dce846f..64023a3 100755
--- a/dev/lib/impact/image.js
+++ b/dev/lib/impact/image.js
@@ -1,7 +1,7 @@
ig.module(
'impact.image'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.Image = ig.Class.extend({
data: null,
@@ -37,7 +37,7 @@ ig.Image = ig.Class.extend({
this.data = new Image();
this.data.onload = this.onload.bind(this);
this.data.onerror = this.onerror.bind(this);
- this.data.src = this.path + ig.nocache;
+ this.data.src = ig.prefix + this.path + ig.nocache;
}
else {
ig.addResource( this );
@@ -58,11 +58,11 @@ ig.Image = ig.Class.extend({
onload: function( event ) {
this.width = this.data.width;
this.height = this.data.height;
+ this.loaded = true;
if( ig.system.scale != 1 ) {
this.resize( ig.system.scale );
}
- this.loaded = true;
if( this.loadCallback ) {
this.loadCallback( this.path, true );
@@ -143,8 +143,8 @@ ig.Image = ig.Class.extend({
if( !this.loaded || tileWidth > this.width || tileHeight > this.height ) { return; }
var scale = ig.system.scale;
- var tileWidthScaled = tileWidth * scale;
- var tileHeightScaled = tileHeight * scale;
+ var tileWidthScaled = Math.floor(tileWidth * scale);
+ var tileHeightScaled = Math.floor(tileHeight * scale);
var scaleX = flipX ? -1 : 1;
var scaleY = flipY ? -1 : 1;
@@ -175,7 +175,7 @@ ig.Image = ig.Class.extend({
ig.Image.drawCount = 0;
ig.Image.cache = {};
ig.Image.reloadCache = function() {
- for( path in ig.Image.cache ) {
+ for( var path in ig.Image.cache ) {
ig.Image.cache[path].reload();
}
};
diff --git a/dev/lib/impact/impact.js b/dev/lib/impact/impact.js
index 81c4def..3cc9854 100755
--- a/dev/lib/impact/impact.js
+++ b/dev/lib/impact/impact.js
@@ -1,10 +1,11 @@
// -----------------------------------------------------------------------------
-// Impact Game Library 1.19
+// Impact Game Engine 1.20
// http://impactjs.com/
// -----------------------------------------------------------------------------
+(function(window){ "use strict";
// -----------------------------------------------------------------------------
// Native Object extensions
@@ -55,7 +56,7 @@ Array.prototype.random = function() {
return this[ Math.floor(Math.random() * this.length) ];
};
-Function.prototype.bind = function(bind) {
+Function.prototype.bind = Function.prototype.bind || function(bind) {
var self = this;
return function(){
var args = Array.prototype.slice.call(arguments);
@@ -68,12 +69,10 @@ Function.prototype.bind = function(bind) {
// -----------------------------------------------------------------------------
// ig Namespace
-(function(window){
-
window.ig = {
game: null,
debug: null,
- version: '1.19',
+ version: '1.20',
global: window,
modules: {},
resources: [],
@@ -81,6 +80,7 @@ window.ig = {
baked: false,
nocache: '',
ua: {},
+ prefix: (window.ImpactPrefix || ''),
lib: 'lib/',
_current: null,
@@ -176,7 +176,6 @@ window.ig = {
ig._current = {name: name, requires: [], loaded: false, body: null};
ig.modules[name] = ig._current;
ig._loadQueue.push(ig._current);
- ig._initDOMReady();
return ig;
},
@@ -188,10 +187,9 @@ window.ig = {
defines: function( body ) {
- name = ig._current.name;
ig._current.body = body;
ig._current = null;
- ig._execModules();
+ ig._initDOMReady();
},
@@ -209,6 +207,7 @@ window.ig = {
// Stubs for ig.Debug
log: function() {},
+ assert: function( condition, msg ) {},
show: function( name, number ) {},
mark: function( msg, color ) {},
@@ -217,7 +216,7 @@ window.ig = {
ig.modules[name] = {name: name, requires:[], loaded: false, body: null};
ig._waitForOnload++;
- var path = ig.lib + name.replace(/\./g, '/') + '.js' + ig.nocache;
+ var path = ig.prefix + ig.lib + name.replace(/\./g, '/') + '.js' + ig.nocache;
var script = ig.$new('script');
script.type = 'text/javascript';
script.src = path;
@@ -331,7 +330,10 @@ window.ig = {
_initDOMReady: function() {
- if( ig.modules['dom.ready'] ) { return; }
+ if( ig.modules['dom.ready'] ) {
+ ig._execModules();
+ return;
+ }
ig._boot();
@@ -349,6 +351,50 @@ window.ig = {
};
+// -----------------------------------------------------------------------------
+// Provide ig.setAnimation and ig.clearAnimation as a compatible way to use
+// requestAnimationFrame if available or setInterval otherwise
+
+// Find vendor prefix, if any
+var vendors = ['ms', 'moz', 'webkit', 'o'];
+for( var i = 0; i < vendors.length && !window.requestAnimationFrame; i++ ) {
+ window.requestAnimationFrame = window[vendors[i]+'RequestAnimationFrame'];
+}
+
+// Use requestAnimationFrame if available
+if( window.requestAnimationFrame ) {
+ var next = 1,
+ anims = {};
+
+ window.ig.setAnimation = function( callback, element ) {
+ var current = next++;
+ anims[current] = true;
+
+ var animate = function() {
+ if( !anims[current] ) { return; } // deleted?
+ window.requestAnimationFrame( animate, element );
+ callback();
+ };
+ window.requestAnimationFrame( animate, element );
+ return current;
+ };
+
+ window.ig.clearAnimation = function( id ) {
+ delete anims[id];
+ };
+}
+
+// [set/clear]Interval fallback
+else {
+ window.ig.setAnimation = function( callback, element ) {
+ return window.setInterval( callback, 1000/60 );
+ };
+ window.ig.clearAnimation = function( id ) {
+ window.clearInterval( id );
+ };
+}
+
+
// -----------------------------------------------------------------------------
// Class object based on John Resigs code; inspired by base2 and Prototype
// http://ejohn.org/blog/simple-javascript-inheritance/
@@ -436,7 +482,7 @@ window.ig.Class.extend = function(prop) {
Class.prototype = prototype;
Class.constructor = Class;
- Class.extend = arguments.callee;
+ Class.extend = window.ig.Class.extend;
Class.inject = inject;
return Class;
@@ -460,8 +506,8 @@ ig.module(
'impact.input',
'impact.sound'
)
-.defines(function(){
-
+.defines(function(){ "use strict";
+
ig.main = function( canvasId, gameClass, fps, width, height, scale, loaderClass ) {
ig.system = new ig.System( canvasId, fps, width, height, scale || 1 );
ig.input = new ig.Input();
diff --git a/dev/lib/impact/input.js b/dev/lib/impact/input.js
index 209ef50..e7819c8 100755
--- a/dev/lib/impact/input.js
+++ b/dev/lib/impact/input.js
@@ -1,7 +1,7 @@
ig.module(
'impact.input'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.KEY = {
'MOUSE1': -1,
@@ -116,7 +116,10 @@ ig.Input = ig.Class.extend({
initMouse: function() {
if( this.isUsingMouse ) { return; }
this.isUsingMouse = true;
- window.addEventListener('mousewheel', this.mousewheel.bind(this), false );
+ var mouseWheelBound = this.mousewheel.bind(this);
+ ig.system.canvas.addEventListener('mousewheel', mouseWheelBound, false );
+ ig.system.canvas.addEventListener('DOMMouseScroll', mouseWheelBound, false );
+
ig.system.canvas.addEventListener('contextmenu', this.contextmenu.bind(this), false );
ig.system.canvas.addEventListener('mousedown', this.keydown.bind(this), false );
ig.system.canvas.addEventListener('mouseup', this.keyup.bind(this), false );
@@ -143,13 +146,15 @@ ig.Input = ig.Class.extend({
mousewheel: function( event ) {
- var code = event.wheel > 0 ? ig.KEY.MWHEEL_UP : ig.KEY.MWHEEL_DOWN;
+ var delta = event.wheelDelta ? event.wheelDelta : (event.detail * -1);
+ var code = delta > 0 ? ig.KEY.MWHEEL_UP : ig.KEY.MWHEEL_DOWN;
var action = this.bindings[code];
if( action ) {
this.actions[action] = true;
this.presses[action] = true;
- event.stopPropagation();
this.delayedKeyup[action] = true;
+ event.stopPropagation();
+ event.preventDefault();
}
},
diff --git a/dev/lib/impact/loader.js b/dev/lib/impact/loader.js
index 5017cd6..b792ddd 100755
--- a/dev/lib/impact/loader.js
+++ b/dev/lib/impact/loader.js
@@ -6,7 +6,7 @@ ig.module(
'impact.font',
'impact.sound'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.Loader = ig.Class.extend({
resources: [],
diff --git a/dev/lib/impact/map.js b/dev/lib/impact/map.js
index 5cbfd84..4d59ebc 100755
--- a/dev/lib/impact/map.js
+++ b/dev/lib/impact/map.js
@@ -1,13 +1,14 @@
ig.module(
'impact.map'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.Map = ig.Class.extend({
tilesize: 8,
width: 1,
height: 1,
data: [[]],
+ name: null,
init: function( tilesize, data ) {
diff --git a/dev/lib/impact/sound.js b/dev/lib/impact/sound.js
index a3ac314..db46866 100755
--- a/dev/lib/impact/sound.js
+++ b/dev/lib/impact/sound.js
@@ -1,7 +1,7 @@
ig.module(
'impact.sound'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.SoundManager = ig.Class.extend({
clips: {},
@@ -29,7 +29,7 @@ ig.SoundManager = ig.Class.extend({
load: function( path, multiChannel, loadCallback ) {
// Path to the soundfile with the right extension (.ogg or .mp3)
- var realPath = path.match(/^(.*)\.[^\.]+$/)[1] + '.' + this.format.ext + ig.nocache;
+ var realPath = ig.prefix + path.replace(/[^\.]+$/, this.format.ext) + ig.nocache;
// Sound file already loaded?
if( this.clips[path] ) {
@@ -52,22 +52,19 @@ ig.SoundManager = ig.Class.extend({
// that the sound can be played without interuption, provided the
// download rate doesn't change.
// FIXME: Mobile Safari doesn't seem to dispatch this event at all?
- clip.addEventListener( 'canplaythrough', function(ev){
- this.removeEventListener('canplaythrough', arguments.callee, false);
+ clip.addEventListener( 'canplaythrough', function cb(ev){
+ clip.removeEventListener('canplaythrough', cb, false);
loadCallback( path, true, ev );
}, false );
- // FIXME: Sometimes Firefox aborts loading sounds for no reason(?),
- // tell the callback that everything went fine anyway
- // Haven't been able to determine when or why this happens :/
- // Update: Firefox4 doesn't have this problem anymore, but
- // now IE9 does :(
clip.addEventListener( 'error', function(ev){
- loadCallback( path, true, ev ); // should pass 'false'
+ loadCallback( path, false, ev );
}, false);
}
+ clip.preload = 'auto';
clip.load();
+
this.clips[path] = [clip];
if( multiChannel ) {
for( var i = 1; i < ig.Sound.channels; i++ ) {
diff --git a/dev/lib/impact/system.js b/dev/lib/impact/system.js
index 7c2ac2d..d654de2 100755
--- a/dev/lib/impact/system.js
+++ b/dev/lib/impact/system.js
@@ -5,7 +5,7 @@ ig.module(
'impact.timer',
'impact.image'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.System = ig.Class.extend({
fps: 30,
@@ -16,7 +16,7 @@ ig.System = ig.Class.extend({
scale: 1,
tick: 0,
- intervalId: 0,
+ animationId: 0,
newGameClass: null,
running: false,
@@ -25,8 +25,6 @@ ig.System = ig.Class.extend({
canvas: null,
context: null,
- smoothPositioning: true,
-
init: function( canvasId, fps, width, height, scale ) {
this.fps = fps;
@@ -34,6 +32,8 @@ ig.System = ig.Class.extend({
this.canvas = ig.$(canvasId);
this.resize( width, height, scale );
this.context = this.canvas.getContext('2d');
+
+ this.getDrawPos = ig.System.drawMode;
},
@@ -76,14 +76,14 @@ ig.System = ig.Class.extend({
stopRunLoop: function() {
- clearInterval( this.intervalId );
+ ig.clearAnimation( this.animationId );
this.running = false;
},
startRunLoop: function() {
this.stopRunLoop();
- this.intervalId = setInterval( this.run.bind(this), 1000 / this.fps );
+ this.animationId = ig.setAnimation( this.run.bind(this), this.canvas );
this.running = true;
},
@@ -108,9 +108,14 @@ ig.System = ig.Class.extend({
},
- getDrawPos: function( p ) {
- return this.smoothPositioning ? Math.round(p * this.scale) : Math.round(p) * this.scale;
- }
+ getDrawPos: null, // Set through constructor
});
+ig.System.DRAW = {
+ AUTHENTIC: function( p ) { return Math.round(p) * this.scale; },
+ SMOOTH: function( p ) { return Math.round(p * this.scale); },
+ SUBPIXEL: function( p ) { return p * this.scale; }
+};
+ig.System.drawMode = ig.System.DRAW.SMOOTH;
+
});
\ No newline at end of file
diff --git a/dev/lib/impact/timer.js b/dev/lib/impact/timer.js
index dc99315..7ff455c 100755
--- a/dev/lib/impact/timer.js
+++ b/dev/lib/impact/timer.js
@@ -1,12 +1,13 @@
ig.module(
'impact.timer'
)
-.defines(function(){
+.defines(function(){ "use strict";
ig.Timer = ig.Class.extend({
target: 0,
base: 0,
last: 0,
+ pausedAt: 0,
init: function( seconds ) {
this.base = ig.Timer.time;
@@ -19,23 +20,40 @@ ig.Timer = ig.Class.extend({
set: function( seconds ) {
this.target = seconds || 0;
this.base = ig.Timer.time;
+ this.pausedAt = 0;
},
reset: function() {
this.base = ig.Timer.time;
+ this.pausedAt = 0;
},
tick: function() {
var delta = ig.Timer.time - this.last;
this.last = ig.Timer.time;
- return delta;
+ return (this.pausedAt ? 0 : delta);
},
delta: function() {
- return ig.Timer.time - this.base - this.target;
+ return (this.pausedAt || ig.Timer.time) - this.base - this.target;
+ },
+
+
+ pause: function() {
+ if( !this.pausedAt ) {
+ this.pausedAt = ig.Timer.time;
+ }
+ },
+
+
+ unpause: function() {
+ if( this.pausedAt ) {
+ this.base += ig.Timer.time - this.pausedAt;
+ this.pausedAt = 0;
+ }
}
});
diff --git a/dev/lib/weltmeister/config.js b/dev/lib/weltmeister/config.js
index fd41aef..95beaef 100755
--- a/dev/lib/weltmeister/config.js
+++ b/dev/lib/weltmeister/config.js
@@ -1,7 +1,7 @@
ig.module(
'weltmeister.config'
)
-.defines(function(){
+.defines(function(){ "use strict";
wm.config = {
project: {
@@ -35,11 +35,17 @@ wm.config = {
'G': 'grid',
'C': 'clone',
'Z': 'undo',
- 'Y': 'redo'
+ 'Y': 'redo',
+ 'MWHEEL_UP': 'zoomin',
+ 'PLUS': 'zoomin',
+ 'MWHEEL_DOWN': 'zoomout',
+ 'MINUS': 'zoomout'
},
'view': {
- 'zoom': 2,
+ 'zoom': 1,
+ 'zoomMax': 4,
+ 'zoomMin': 0.125,
'grid': false
},
diff --git a/dev/lib/weltmeister/edit-entities.js b/dev/lib/weltmeister/edit-entities.js
index 648733c..32fd24e 100755
--- a/dev/lib/weltmeister/edit-entities.js
+++ b/dev/lib/weltmeister/edit-entities.js
@@ -2,19 +2,19 @@ ig.module(
'weltmeister.edit-entities'
)
.requires(
+ 'impact.game',
'impact.background-map',
'weltmeister.config',
'weltmeister.tile-select',
'weltmeister.entities'
)
-.defines(function(){
+.defines(function(){ "use strict";
wm.EditEntities = ig.Class.extend({
visible: true,
active: true,
div: null,
- currentTile: 0,
hotkey: -1,
ignoreLastClick: false,
name: 'entities',
@@ -57,6 +57,11 @@ wm.EditEntities = ig.Class.extend({
},
+ sort: function() {
+ this.entities.sort( ig.Game.SORT.Z_INDEX );
+ },
+
+
// -------------------------------------------------------------------------
@@ -79,15 +84,19 @@ wm.EditEntities = ig.Class.extend({
var entityName = className.replace(/^Entity/, '');
// ig.global[className] should be the actual class object
- if( className && ig.global[className] ) {
- var a = $( '
', {
- 'id': className,
- 'href': '#',
- 'html': entityName,
- 'mouseup': this.newEntityClick.bind(this)
- });
- this.menu.append( a );
- this.entityClasses[className] = m;
+ if( className && ig.global[className] ) {
+
+ // Ignore entities that have the _wmIgnore flag
+ if( !ig.global[className].prototype._wmIgnore ) {
+ var a = $( '', {
+ 'id': className,
+ 'href': '#',
+ 'html': entityName,
+ 'mouseup': this.newEntityClick.bind(this)
+ });
+ this.menu.append( a );
+ this.entityClasses[className] = m;
+ }
}
else {
unloadedClasses.push( modules[m] + ' (expected name: ' + className + ')' );
@@ -116,7 +125,7 @@ wm.EditEntities = ig.Class.extend({
var data = {type:type,x:ent.pos.x,y:ent.pos.y};
var hasSettings = false;
- for( p in ent._wmSettings ) {
+ for( var p in ent._wmSettings ) {
hasSettings = true;
}
if( hasSettings ) {
@@ -162,6 +171,8 @@ wm.EditEntities = ig.Class.extend({
}
else if( !entity ) {
$('#entitySettings').fadeOut(100);
+ $('#entityKey').blur();
+ $('#entityValue').blur();
}
this.selectedEntity = entity;
@@ -316,13 +327,14 @@ wm.EditEntities = ig.Class.extend({
newEntity._wmInEditor = true;
newEntity._wmClassName = className;
newEntity._wmSettings = {};
- for( s in settings ) {
+ for( var s in settings ) {
newEntity._wmSettings[s] = settings[s];
}
this.entities.push( newEntity );
if( settings.name ) {
this.namedEntities[settings.name] = newEntity;
}
+ this.sort();
return newEntity;
}
return null;
@@ -372,7 +384,7 @@ wm.EditEntities = ig.Class.extend({
loadEntitySettingsRecursive: function( settings, path ) {
path = path || "";
var html = "";
- for( key in settings ) {
+ for( var key in settings ) {
var value = settings[key];
if( typeof(value) == 'object' ) {
html += this.loadEntitySettingsRecursive( value, path + key + "." );
@@ -415,6 +427,8 @@ wm.EditEntities = ig.Class.extend({
ig.merge( this.selectedEntity, this.selectedEntity._wmSettings );
}
+ this.sort();
+
ig.game.setModified();
ig.game.draw();
diff --git a/dev/lib/weltmeister/edit-map.js b/dev/lib/weltmeister/edit-map.js
index 704c30b..af3b537 100755
--- a/dev/lib/weltmeister/edit-map.js
+++ b/dev/lib/weltmeister/edit-map.js
@@ -5,7 +5,7 @@ ig.module(
'impact.background-map',
'weltmeister.tile-select'
)
-.defines(function(){
+.defines(function(){ "use strict";
wm.EditMap = ig.BackgroundMap.extend({
name: '',
@@ -14,7 +14,6 @@ wm.EditMap = ig.BackgroundMap.extend({
linkWithCollision: false,
div: null,
- currentTile: 0,
brush: [[0]],
oldData: null,
hotkey: -1,
@@ -244,8 +243,10 @@ wm.EditMap = ig.BackgroundMap.extend({
// -------------------------------------------------------------------------
// Drawing
- draw: function() {
- if( this.visible ) {
+ draw: function() {
+ // For performance reasons, repeated background maps are not drawn
+ // when zoomed out
+ if( this.visible && !(wm.config.view.zoom < 1 && this.repeat) ) {
this.drawTiled();
}
@@ -275,7 +276,7 @@ wm.EditMap = ig.BackgroundMap.extend({
}
// Bounds
- if( this.active ) {
+ if( this.active ) {
ig.system.context.lineWidth = 1;
ig.system.context.strokeStyle = wm.config.colors.primary;
ig.system.context.strokeRect(
@@ -364,15 +365,19 @@ ig.AutoResizedImage = ig.Image.extend({
if( this.internalScale != 1 ) {
var scaled = ig.$new('canvas');
- scaled.width = this.width * ig.system.scale;
- scaled.height = this.height * ig.system.scale;
+ scaled.width = this.width;
+ scaled.height = this.height;
var scaledCtx = scaled.getContext('2d');
- scaledCtx.drawImage( this.data, 0, 0, this.data.width, this.data.height, 0, 0, scaled.width , scaled.height );
+ scaledCtx.drawImage( this.data, 0, 0, this.data.width, this.data.height, 0, 0, this.width , this.height );
this.data = scaled;
}
this.loaded = true;
+ if( ig.system.scale != 1 ) {
+ this.resize( ig.system.scale );
+ }
+
if( this.loadCallback ) {
this.loadCallback( this.path, true );
}
diff --git a/dev/lib/weltmeister/entities.js b/dev/lib/weltmeister/entities.js
index 8fbd83b..97e99b0 100755
--- a/dev/lib/weltmeister/entities.js
+++ b/dev/lib/weltmeister/entities.js
@@ -4,7 +4,7 @@ ig.module(
.requires(
'weltmeister.config'
)
-.defines(function(){
+.defines(function(){ "use strict";
// Load the list of entity files via AJAX PHP glob
var path = wm.config.api.glob + '?',
diff --git a/dev/lib/weltmeister/evented-input.js b/dev/lib/weltmeister/evented-input.js
index 03d390e..e453b86 100755
--- a/dev/lib/weltmeister/evented-input.js
+++ b/dev/lib/weltmeister/evented-input.js
@@ -4,7 +4,7 @@ ig.module(
.requires(
'impact.input'
)
-.defines(function(){
+.defines(function(){ "use strict";
wm.EventedInput = ig.Input.extend({
mousemoveCallback: null,
@@ -51,6 +51,20 @@ wm.EventedInput = ig.Input.extend({
},
+ mousewheel: function( event ) {
+ var delta = event.wheelDelta ? event.wheelDelta : (event.detail * -1);
+ var code = delta > 0 ? ig.KEY.MWHEEL_UP : ig.KEY.MWHEEL_DOWN;
+ var action = this.bindings[code];
+ if( action ) {
+ if( this.keyupCallback ) {
+ this.keyupCallback( action );
+ }
+ event.stopPropagation();
+ event.preventDefault();
+ }
+ },
+
+
mousemove: function( event ) {
this.parent( event );
if( this.mousemoveCallback ) {
diff --git a/dev/lib/weltmeister/jquery-1.4.2.min.js b/dev/lib/weltmeister/jquery-1.4.2.min.js
deleted file mode 100755
index bfeac8c..0000000
--- a/dev/lib/weltmeister/jquery-1.4.2.min.js
+++ /dev/null
@@ -1,405 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
-(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
-Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
-(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
-a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
-"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
-function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;ba";
-var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
-parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
-false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
-s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
-applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
-else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
-a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
-w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
-cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
-c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
-a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
-function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
-k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
-C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type=
-e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
-f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
-if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
-e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
-"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
-d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
-t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
-g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
-CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
-g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
-text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
-setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
-h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
-"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
-h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
-q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="";
-if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
-(function(){var g=s.createElement("div");g.innerHTML="";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
-function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
-{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
-"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
-d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
-a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
-1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"+d+">"},F={option:[1,""],legend:[1,""],thead:[1,""],tr:[2,""],td:[3,""],col:[2,""],area:[1,""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
-c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
-wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
-prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
-this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
-return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
-""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
-return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
-""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
-c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
-c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
-function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
-Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
-"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
-a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
-a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/
+
@@ -91,6 +91,8 @@
+ 1x
+