├── public
├── js
│ ├── graphic.js
│ ├── .DS_Store
│ ├── game.js
│ ├── viewporter.js
│ └── jquery.mobile-1.1.1.min.js
├── .DS_Store
├── css
│ ├── .DS_Store
│ ├── style.css
│ └── jquery.mobile-1.1.1.min.css
├── img
│ ├── .DS_Store
│ ├── ajax-loader.gif
│ ├── ajax-loader.png
│ ├── icons-18-black.png
│ ├── icons-18-white.png
│ ├── icons-36-black.png
│ ├── icons-36-white.png
│ └── table-images
│ │ ├── back.png
│ │ ├── left.png
│ │ ├── blurry.jpg
│ │ ├── header.jpg
│ │ ├── right.png
│ │ ├── botleft.png
│ │ ├── botright.png
│ │ ├── gradback.png
│ │ ├── gradhead.png
│ │ ├── gradhover.png
│ │ ├── pattern.gif
│ │ ├── pattern.png
│ │ ├── patternb.png
│ │ ├── pattern-head.png
│ │ └── patternb-head.png
└── viewporter.js
├── .DS_Store
├── .gitignore
├── README.md
├── ROADMAP.md
├── models
├── player.js
├── room.js
├── utility.js
├── table.js
├── stopwatch.js
└── game.js
├── views
└── index.ejs
└── server.js
/public/js/graphic.js:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/.DS_Store
--------------------------------------------------------------------------------
/public/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/.DS_Store
--------------------------------------------------------------------------------
/public/js/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/js/.DS_Store
--------------------------------------------------------------------------------
/public/css/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/css/.DS_Store
--------------------------------------------------------------------------------
/public/img/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/.DS_Store
--------------------------------------------------------------------------------
/public/img/ajax-loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/ajax-loader.gif
--------------------------------------------------------------------------------
/public/img/ajax-loader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/ajax-loader.png
--------------------------------------------------------------------------------
/public/img/icons-18-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/icons-18-black.png
--------------------------------------------------------------------------------
/public/img/icons-18-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/icons-18-white.png
--------------------------------------------------------------------------------
/public/img/icons-36-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/icons-36-black.png
--------------------------------------------------------------------------------
/public/img/icons-36-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/icons-36-white.png
--------------------------------------------------------------------------------
/public/img/table-images/back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/back.png
--------------------------------------------------------------------------------
/public/img/table-images/left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/left.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | lib-cov
2 | *.seed
3 | *.log
4 | *.csv
5 | *.dat
6 | *.out
7 | *.pid
8 | *.gz
9 |
10 | pids
11 | logs
12 | results
13 |
14 | node_modules
15 | npm-debug.log
--------------------------------------------------------------------------------
/public/img/table-images/blurry.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/blurry.jpg
--------------------------------------------------------------------------------
/public/img/table-images/header.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/header.jpg
--------------------------------------------------------------------------------
/public/img/table-images/right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/right.png
--------------------------------------------------------------------------------
/public/img/table-images/botleft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/botleft.png
--------------------------------------------------------------------------------
/public/img/table-images/botright.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/botright.png
--------------------------------------------------------------------------------
/public/img/table-images/gradback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/gradback.png
--------------------------------------------------------------------------------
/public/img/table-images/gradhead.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/gradhead.png
--------------------------------------------------------------------------------
/public/img/table-images/gradhover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/gradhover.png
--------------------------------------------------------------------------------
/public/img/table-images/pattern.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/pattern.gif
--------------------------------------------------------------------------------
/public/img/table-images/pattern.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/pattern.png
--------------------------------------------------------------------------------
/public/img/table-images/patternb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/patternb.png
--------------------------------------------------------------------------------
/public/img/table-images/pattern-head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/pattern-head.png
--------------------------------------------------------------------------------
/public/img/table-images/patternb-head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/emrahayanoglu/Node.js--Socket.io-and-Express-based-Multiplayer-Bingo-Game/HEAD/public/img/table-images/patternb-head.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Node.js, Socket.io and Express based Multiplayer Bingo Game
2 | ===========================================================
3 |
4 | Bingo game developing in Node.js using Socket.io and Express
--------------------------------------------------------------------------------
/ROADMAP.md:
--------------------------------------------------------------------------------
1 | Roadmap of Bingo
2 | ================
3 |
4 | 1. Messaging between Client and Server is like that:
5 | * connectToServer(username) - Client
6 | * newUserOnline(tables,user) - Server
7 | * connectToTable(tableID) - Client
8 | * userConnectedToTable(tables,user) - Server
9 | * gameStarted(tables) - Server
10 | * numberChosen(table,number) - Server
11 | * gameFinished(table,winner) - Server
12 | * gameRestarted(tables) - Server
13 | * userLeaveFromTable(user) - Client
14 | * userDisconnectedFromTable(tables,players) - Server
15 | * userDisconnectedFromGame(tables,players) - Server
16 | * sendChatMessage(message) - Client
17 | * userSendChatMessage(user.message) - Server
18 | * sendChatMessageToUser(message,user) - Client
19 | * userSentChatMessageToUser(message,user) - Server
20 | 2. Messages should be implemented
21 | 3. Client design should be completed
22 | 4. Client implementation should be started
23 |
--------------------------------------------------------------------------------
/models/player.js:
--------------------------------------------------------------------------------
1 | function Player(playerID){
2 | this.id = playerID;
3 | this.name = "";
4 | this.tableID = "";
5 | this.status = "available";
6 | this.card = [];
7 | this.cardInStraight = [];
8 | };
9 |
10 | Player.prototype.setName = function(name){
11 | this.name = name;
12 | };
13 |
14 | Player.prototype.getName = function(){
15 | return this.name;
16 | };
17 |
18 | Player.prototype.setTableID = function(tableID){
19 | this.tableID = tableID;
20 | };
21 |
22 | Player.prototype.getTableID = function(){
23 | return this.tableID;
24 | };
25 |
26 | Player.prototype.setCard = function(card){
27 | this.card = card;
28 | };
29 |
30 | Player.prototype.getCard = function(){
31 | return this.card;
32 | };
33 |
34 | Player.prototype.setStatus = function(status){
35 | this.status = status;
36 | };
37 |
38 | Player.prototype.isAvailable = function(){
39 | return this.status === "available";
40 | };
41 |
42 | Player.prototype.isInTable = function(){
43 | return this.status === "inTable";
44 | };
45 |
46 | Player.prototype.isPlaying = function(){
47 | return this.status === "playing";
48 | };
49 |
50 | module.exports = Player;
--------------------------------------------------------------------------------
/models/room.js:
--------------------------------------------------------------------------------
1 | Array.prototype.remove = function(from, to) {
2 | var rest = this.slice((to || from) + 1 || this.length);
3 | this.length = from < 0 ? this.length + from : from;
4 | return this.push.apply(this, rest);
5 | };
6 | function Room(name){
7 | this.players = [];
8 | this.tables = [];
9 | this.name = name;
10 | };
11 |
12 | Room.prototype.addPlayer = function(player) {
13 | this.players.push(player);
14 | };
15 |
16 | Room.prototype.removePlayer = function(player) {
17 | var playerIndex = -1;
18 | for(var i = 0; i < this.players.length; i++){
19 | if(this.players[i].id == player.id){
20 | playerIndex = i;
21 | break;
22 | }
23 | }
24 | this.players.remove(playerIndex);
25 | };
26 |
27 | Room.prototype.addTable = function(table) {
28 | this.tables.push(table);
29 | };
30 |
31 | Room.prototype.removeTable = function(table) {
32 | var tableIndex = -1;
33 | for(var i = 0; i < this.tables.length; i++){
34 | if(this.tables[i].id == table.id){
35 | tableIndex = i;
36 | break;
37 | }
38 | }
39 | this.tables.remove(tableIndex);
40 | };
41 |
42 | Room.prototype.getPlayer = function(playerId) {
43 | var player = null;
44 | for(var i = 0; i < this.players.length; i++){
45 | if(this.players[i].id == playerId){
46 | player = this.players[i];
47 | break;
48 | }
49 | }
50 | return player;
51 | };
52 |
53 | Room.prototype.getTable = function(tableId) {
54 | var table = null;
55 | for(var i = 0; i < this.tables.length; i++){
56 | if(this.tables[i].id == tableId){
57 | table = this.tables[i];
58 | break;
59 | }
60 | }
61 | return table;
62 | };
63 |
64 | Room.prototype.getTableMessage = function() {
65 | var tableMessageList = [];
66 | for (var i = 0; i < this.tables.length; i++) {
67 | tableMessageList.push(this.tables[i].createMessageObject());
68 | };
69 | return tableMessageList;
70 | };
71 |
72 | module.exports = Room;
--------------------------------------------------------------------------------
/models/utility.js:
--------------------------------------------------------------------------------
1 | Game = require('./game.js');
2 | Table = require('./table.js');
3 | var uuid = require('node-uuid');
4 |
5 | function Utility () {};
6 |
7 | Utility.prototype.sendEventToAllPlayers = function(event,message,io,players) {
8 | for(var i = 0; i < players.length; i++){
9 | io.sockets.socket(players[i].id).emit(event, message);
10 | }
11 | };
12 |
13 | Utility.prototype.sendEventToAllPlayersButPlayer = function(event,message,io,players,player) {
14 | for(var i = 0; i < players.length; i++){
15 | if(players[i].id != player.id){
16 | io.sockets.socket(players[i].id).emit(event, message);
17 | }
18 | }
19 | };
20 |
21 | Utility.prototype.sendEventToSpecificPlayer = function(event,message,io,player) {
22 | io.sockets.socket(player.id).emit(event,message);
23 | };
24 |
25 | Utility.prototype.sendEventToTable = function(event,message,io,table) {
26 | for(var i = 0; i < table.players.length; i++){
27 | io.sockets.socket(table.players[i].id).emit(event, message);
28 | }
29 | };
30 |
31 | Utility.prototype.sendEventToTableInPlay = function(event,message,io,table) {
32 | for (var i = 0; i < table.players.length; i++) {
33 | message.userId = table.players[i].id;
34 | message.userCard = table.players[i].card;
35 | message.userCardInStraight = table.players[i].cardInStraight;
36 | io.sockets.socket(table.players[i].id).emit(event, message);
37 | };
38 | };
39 |
40 | Utility.prototype.sendEventToAllFreePlayers = function(event,message,io,players) {
41 | for(var i = 0; i < players.length; i++){
42 | if(players[i].status === "available"){
43 | io.sockets.socket(players[i].id).emit(event, message);
44 | }
45 | }
46 | };
47 |
48 | Utility.prototype.sendEventToAllFreePlayersButPlayer = function(event,message,io,players,player) {
49 | for(var i = 0; i < players.length; i++){
50 | if(players[i].status === "available" && players[i].id != player.id){
51 | io.sockets.socket(players[i].id).emit(event, message);
52 | }
53 | }
54 | };
55 |
56 | Utility.prototype.sendEventToSelectedPlayers = function(event,message,io,players) {
57 | for(var i = 0; i < players.length; i++){
58 | io.sockets.socket(players[i].id).emit(event, message);
59 | }
60 | };
61 |
62 | Utility.prototype.createSampleTables = function(tableListSize) {
63 | var tableList = [];
64 | for(var i = 0; i < tableListSize; i++){
65 | var game = new Game();
66 | var table = new Table(uuid.v4());
67 | table.setName("jstanbul Room " + (i + 1));
68 | table.gameObj = game;
69 | table.state = "available";
70 | tableList.push(table);
71 | }
72 | return tableList;
73 | };
74 |
75 | module.exports = Utility;
--------------------------------------------------------------------------------
/models/table.js:
--------------------------------------------------------------------------------
1 | Game = require('./game.js');
2 |
3 |
4 | Array.prototype.remove = function(from, to) {
5 | var rest = this.slice((to || from) + 1 || this.length);
6 | this.length = from < 0 ? this.length + from : from;
7 | return this.push.apply(this, rest);
8 | };
9 |
10 | function Table(tableID){
11 | this.id = tableID;
12 | this.name = "";
13 | this.status = "available";
14 | this.players = [];
15 | this.playerLimit = 2;
16 | this.gameObj = null;
17 | };
18 |
19 | Table.prototype.setName = function(name){
20 | this.name = name;
21 | };
22 |
23 | Table.prototype.getName = function(){
24 | return this.name;
25 | };
26 |
27 | Table.prototype.setStatus = function(status){
28 | this.status = status;
29 | };
30 |
31 | Table.prototype.isAvailable = function(){
32 | return this.status === "available";
33 | };
34 |
35 | Table.prototype.isFull = function(){
36 | return this.status === "full";
37 | };
38 |
39 | Table.prototype.isPlaying = function(){
40 | return this.status === "playing";
41 | };
42 |
43 | Table.prototype.addPlayer = function(player) {
44 | //Check table state
45 | if(this.state == "available"){
46 | //Check this player is in table or not
47 | var found = false;
48 | for(var i = 0; i < this.players.length; i++){
49 | if(this.players[i].id == player.id){
50 | found = true;
51 | break;
52 | }
53 | }
54 | if(!found){
55 | this.players.push(player);
56 | if(this.players.length == this.playerLimit){
57 | this.status = "playing";
58 | //Change status of the each player
59 | this.gameObj = new Game();
60 | for(var i = 0; i < this.players.length; i++){
61 | this.players[i].status = "playing";
62 | this.gameObj.createPlayerCard(this.players[i]);
63 | }
64 | }
65 | return true;
66 | }
67 | }
68 | return false;
69 | };
70 |
71 | Table.prototype.removePlayer = function(player){
72 | var index = -1;
73 | for(var i = 0; i < this.players.length; i++){
74 | if(this.players[i].id === player.id){
75 | index = i;
76 | break;
77 | }
78 | }
79 | if(index != -1){
80 | this.players.remove(index);
81 | }
82 | };
83 |
84 | Table.prototype.isTableAvailable = function() {
85 | return (this.playerLimit > this.players.length);
86 | };
87 |
88 | Table.prototype.createMessageObject = function() {
89 | var table = this;
90 | var TableMessage = function(){
91 | this.id = table.id;
92 | this.name = table.name;
93 | this.status = table.status;
94 | this.players = table.players;
95 | this.playerLimit = table.playerLimit;
96 | };
97 |
98 | return new TableMessage();
99 | };
100 |
101 | module.exports = Table;
--------------------------------------------------------------------------------
/models/stopwatch.js:
--------------------------------------------------------------------------------
1 | var util = require('util'),
2 | events = require('events')
3 | _ = require('underscore');
4 |
5 | // ---------------------------------------------
6 | // Constructor
7 | // ---------------------------------------------
8 | function Stopwatch() {
9 | if(false === (this instanceof Stopwatch)) {
10 | return new Stopwatch();
11 | }
12 |
13 | this.hour = 3600000;
14 | this.minute = 60000;
15 | this.second = 1000;
16 | this.time = this.hour;
17 | this.interval = undefined;
18 |
19 | events.EventEmitter.call(this);
20 |
21 | // Use Underscore to bind all of our methods
22 | // to the proper context
23 | _.bindAll(this);
24 | };
25 |
26 | // ---------------------------------------------
27 | // Inherit from EventEmitter
28 | // ---------------------------------------------
29 | util.inherits(Stopwatch, events.EventEmitter);
30 |
31 | // ---------------------------------------------
32 | // Methods
33 | // ---------------------------------------------
34 | Stopwatch.prototype.start = function() {
35 | console.log('Starting Stopwatch!');
36 | // note the use of _.bindAll in the constructor
37 | // with bindAll we can pass one of our methods to
38 | // setInterval and have it called with the proper 'this' value
39 | this.interval = setInterval(this.onTick, this.second / 2);
40 | this.emit('start');
41 | };
42 |
43 | Stopwatch.prototype.stop = function() {
44 | console.log('Stopping Stopwatch!');
45 | if (this.interval) {
46 | clearInterval(this.interval);
47 | this.emit('stop');
48 | }
49 | };
50 |
51 | Stopwatch.prototype.reset = function() {
52 | console.log('Resetting Stopwatch!');
53 | this.time = this.hour;
54 | this.emit('reset');
55 | };
56 |
57 | Stopwatch.prototype.onTick = function() {
58 | var remainder = this.time,
59 | numHours,
60 | numMinutes,
61 | numSeconds,
62 | output = "";
63 |
64 | if (this.time === 0) {
65 | this.stop();
66 | return;
67 | }
68 |
69 | numHours = String(parseInt(remainder / this.hour, 10));
70 | remainder -= this.hour * numHours;
71 |
72 | numMinutes = String(parseInt(remainder / this.minute, 10));
73 | remainder -= this.minute * numMinutes;
74 |
75 | numSeconds = String(parseInt(remainder / this.second, 10));
76 |
77 | output = _.map([numHours, numMinutes, numSeconds], function(str) {
78 | if (str.length === 1) {
79 | str = "0" + str;
80 | }
81 | return str;
82 | }).join(":");
83 |
84 | this.emit('tick', output);
85 | this.time -= this.second / 2;
86 | };
87 |
88 | // ---------------------------------------------
89 | // Export
90 | // ---------------------------------------------
91 | module.exports = Stopwatch;
--------------------------------------------------------------------------------
/views/index.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Bingo Game
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
Bingo! Rooms
26 |
27 |
28 |
32 |
33 |
jstanbul.org
34 |
35 |
36 |
37 |
38 |
39 |
40 |
44 |
45 |
46 |
47 |
48 |
Chosen Number:
49 |
50 |
51 |
52 |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 |
63 |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 |
74 |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
jstanbul.org
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/public/js/game.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function(){
2 | $(".backToRoomPage").click(function(){
3 | socket.emit('userLeaveFromTable',{});
4 | isCardShown = false;
5 | for(var i = 0; i < 9; i++){
6 | for(var j = 0; j < 3; j++){
7 | var className = (j + 1) + "_row_" + (i + 1) + "_column";
8 | $("." + className).empty();
9 | }
10 | }
11 | $("#gameFinishedSpan").text("");
12 | });
13 | });
14 |
15 | var socket = io.connect('http://localhost:8080');
16 | var isCardShown = false;
17 |
18 | socket.on('userOnline', function (data) {
19 | socket.emit('connectToServer', { username : 'emrahayanoglu' });
20 | });
21 | socket.on('newUserOnline',function(data){
22 | //Write on the user log that a new user has come to room
23 | });
24 | socket.on('tableList',function(data){
25 | var html = "";
26 | for(var i = 0; i < data.tableList.length; i++){
27 | html += ""+ data.tableList[i].name +" "
28 | + data.tableList[i].players.length +"/"+ data.tableList[i].playerLimit +""
29 | }
30 | $('#roomList').empty();
31 | $('#roomList').append(html);
32 | $('#roomList').listview('refresh');
33 | $('.showGamePage').click(function(){
34 | var selectedTableId = $(this).attr('data-id');
35 | socket.emit('connectToTable', {tableID: selectedTableId});
36 | $.mobile.changePage("#gamePage");
37 | });
38 |
39 | $("#onlineUserCount").empty();
40 | $("#onlineUserCount").text("-- " + data.playerCount + " Online Users --");
41 | });
42 | socket.on('userConnectedToTable',function(data){
43 | //Write on the user log that a new user has come to table
44 | });
45 | socket.on('gameStarted',function(data){
46 | console.log("A new game is started");
47 | console.log(data);
48 | //Draw card and start playing
49 | });
50 | socket.on('numberChosen',function(data){
51 | console.log(data);
52 | //Draw chosen number and if number is on the card, then fill the chosen number on the card
53 | $("#chosenNumberSpan").text(data.chosenNumber);
54 | if(!isCardShown){
55 | for(var i = 0; i < data.userCard.length; i++){
56 | for(var j = 0; j < data.userCard[i].length; j++){
57 | var className = (j + 1) + "_row_" + (i + 1) + "_column";
58 | $("." + className).empty();
59 | $("." + className).append(data.userCard[i][j]);
60 | }
61 | }
62 | isCardShown = true;
63 | }
64 | else{
65 | for(var i = 0; i < data.userCard.length; i++){
66 | for(var j = 0; j < data.userCard[i].length; j++){
67 | var className = (j + 1) + "_row_" + (i + 1) + "_column";
68 | if(parseInt($("." + className).text()) == data.chosenNumber){
69 | $("." + className).empty();
70 | $("." + className).append("Secili " + data.userCard[i][j]);
71 | break;
72 | }
73 | }
74 | }
75 | }
76 | });
77 | socket.on('gameFinished',function(data){
78 | $("#gameFinishedSpan").text("Game is Finished");
79 | });
80 | socket.on('bingoWinner',function(data){
81 | $("#gameFinishedSpan").text("You are the Bingo Winner");
82 | });
83 | socket.on('gameRestarted',function(data){
84 | console.log(data);
85 | });
86 | socket.on('userDisconnectedFromTable',function(data){
87 | //Write on the user log that a user has disconnected from table
88 | });
89 | socket.on('playerDisconnectedFromTable',function(data){
90 | $.mobile.changePage("#roomPage");
91 | });
92 | socket.on('userDisconnectedFromGame',function(data){
93 | //Write on the user log that a user has disconnected
94 | });
95 | socket.on('userSendChatMessage',function(data){
96 | console.log(data);
97 | });
98 | socket.on('userSentChatMessageToUser',function(data){
99 | console.log(data);
100 | });
101 | socket.on('errorEvent',function(data){
102 |
103 | });
104 |
105 |
--------------------------------------------------------------------------------
/models/game.js:
--------------------------------------------------------------------------------
1 | r = require('mersenne');
2 | Stopwatch = require('./stopwatch.js');
3 |
4 | Array.prototype.remove = function(from, to) {
5 | var rest = this.slice((to || from) + 1 || this.length);
6 | this.length = from < 0 ? this.length + from : from;
7 | return this.push.apply(this, rest);
8 | };
9 |
10 | function Game(){
11 | this.numbers = [1,2,3,4,5,6,7,8,9,10
12 | ,11,12,13,14,15,16,17,18,19,20
13 | ,21,22,23,24,25,26,27,28,29,30
14 | ,31,32,33,34,35,36,37,38,39,40
15 | ,41,42,43,44,45,46,47,48,49,50
16 | ,51,52,53,54,55,56,57,58,59,60
17 | ,61,62,63,64,65,66,67,68,69,70
18 | ,71,72,73,74,75,76,77,78,79,80
19 | ,81,82,83,84,85,86,87,88,89,90];
20 | this.nonSelectedNumbers = [1,2,3,4,5,6,7,8,9,10
21 | ,11,12,13,14,15,16,17,18,19,20
22 | ,21,22,23,24,25,26,27,28,29,30
23 | ,31,32,33,34,35,36,37,38,39,40
24 | ,41,42,43,44,45,46,47,48,49,50
25 | ,51,52,53,54,55,56,57,58,59,60
26 | ,61,62,63,64,65,66,67,68,69,70
27 | ,71,72,73,74,75,76,77,78,79,80
28 | ,81,82,83,84,85,86,87,88,89,90];
29 | this.selectedNumbers = [];
30 | };
31 |
32 | Game.prototype.chooseNumber = function() {
33 | //Remove from nonSelectedNumbers and add to the selectedNumbers
34 | if(this.selectedNumbers.length < 89){
35 | var chosenNumberIndex = r.rand(this.nonSelectedNumbers.length - 1);
36 | var number = this.nonSelectedNumbers[chosenNumberIndex];
37 | this.nonSelectedNumbers.remove(chosenNumberIndex);
38 | this.selectedNumbers.push(number);
39 | return number;
40 | }
41 | else if(this.nonSelectedNumbers.length == 1){
42 | var chosenNumberIndex = 0;
43 | var number = this.nonSelectedNumbers[chosenNumberIndex];
44 | this.nonSelectedNumbers.remove(chosenNumberIndex);
45 | this.selectedNumbers.push(number);
46 | return number;
47 | }
48 | };
49 |
50 | Game.prototype.createPlayerCard = function(player){
51 | var newNumberArray = this.numbers.slice();
52 | var chosenNumberArray = [];
53 | //Choose 15 numbers from the numbers array
54 | var card = [[],[],[],[],[],[],[],[],[]];
55 | var cardNumberCount = 0;
56 | while(cardNumberCount < 15){
57 | var chosenNumberIndex = r.rand(89 - cardNumberCount);
58 | var chosenNumber = newNumberArray[chosenNumberIndex];
59 | newNumberArray.remove(chosenNumberIndex);
60 | if(chosenNumber == 90 && card[8].length < 3){
61 | card[8].push(chosenNumber);
62 | cardNumberCount++;
63 | chosenNumberArray.push(chosenNumber);
64 | }
65 | else if(card[parseInt(chosenNumber / 10)].length < 3){
66 | card[parseInt(chosenNumber / 10)].push(chosenNumber);
67 | cardNumberCount++;
68 | chosenNumberArray.push(chosenNumber);
69 | }
70 | }
71 | player.card = card;
72 | player.cardInStraight = chosenNumberArray;
73 | };
74 |
75 | Game.prototype.isPlayerWinsBingo = function (player) {
76 | var bingoArray = [];
77 | console.log("Player Card Length: " + player.cardInStraight.length);
78 | for (var i = 0; i < this.selectedNumbers.length; i++) {
79 | for(var j = 0; j < player.cardInStraight.length; j++){
80 | if(this.selectedNumbers[i] == player.cardInStraight[j]){
81 | bingoArray.push(true);
82 | }
83 | }
84 | }
85 | console.log(bingoArray);
86 | return bingoArray.length == 15;
87 | };
88 |
89 | Game.prototype.startGame = function(utility,io,table) {
90 | var stopwatch = new Stopwatch();
91 | var gameObject = this;
92 | stopwatch.on('tick', function(time) {
93 | var chosenNumber = gameObject.chooseNumber();
94 | utility.sendEventToTableInPlay('numberChosen',{chosenNumber: chosenNumber},io,table);
95 | var bingoWinners = gameObject.checkAnyPlayerWinsBingo(table);
96 | console.log(gameObject.selectedNumbers.length);
97 | console.log(gameObject.nonSelectedNumbers.length);
98 | if(bingoWinners.length > 0){
99 | //Whoorayyy at least one player wins the bingo
100 | utility.sendEventToTableInPlay('gameFinished',{message:"Game is finished"},io,table);
101 | utility.sendEventToSelectedPlayers('bingoWinner',{message:"You are the bingo winner!"},io,bingoWinners);
102 | stopwatch.stop();
103 | stopwatch.reset();
104 | table.status = "full";
105 | for(var i = 0; i < table.players.length; i++){
106 | table.players[i].status = "inTable";
107 | }
108 | //Ask players to play again or leave the room
109 | }
110 | });
111 | stopwatch.start();
112 | };
113 |
114 | Game.prototype.checkAnyPlayerWinsBingo = function(table) {
115 | var found = [];
116 | for(var i = 0; i < table.players.length; i++){
117 | if(this.isPlayerWinsBingo(table.players[i])){
118 | found.push(table.players[i]);
119 | }
120 | }
121 | return found;
122 | };
123 |
124 | module.exports = Game;
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | var express = require('express')
2 | var socket = require('socket.io');
3 | var Game = require('./models/game.js');
4 | var Player = require('./models/player.js');
5 | var Table = require('./models/table.js');
6 | var Utility = require('./models/utility.js');
7 | var Room = require('./models/room.js');
8 |
9 | var io = socket.listen(8080);
10 |
11 | var utility = new Utility();
12 |
13 | var room = new Room("Test Room");
14 | room.tables = utility.createSampleTables(10);
15 |
16 |
17 | //
18 | io.sockets.on('connection', function (socket) {
19 | socket.emit('userOnline');
20 | socket.on('connectToServer',function(data){
21 | //Add player to the room
22 | var player = new Player(socket.id);
23 | player.setName(data.username);
24 | player.status = "available";
25 | room.addPlayer(player);
26 | //Send Other Players that new player has connected
27 | utility.sendEventToAllPlayersButPlayer('newUserOnline',
28 | {message:"Player is online",username:data.username},io,room.players,player);
29 | utility.sendEventToAllPlayers('tableList',
30 | {tableList: room.getTableMessage(),playerCount:room.players.length},io,room.players);
31 | });
32 | socket.on('connectToTable',function(data){
33 | var player = room.getPlayer(socket.id);
34 | var table = room.getTable(data.tableID);
35 | if(table.isTableAvailable() && table.addPlayer(player)){
36 | player.tableID = table.id;
37 | player.status = 'inTable';
38 | utility.sendEventToTable('userConnectedToTable',
39 | {message:"Player is in Table"},io,table);
40 | utility.sendEventToAllPlayers('tableList',
41 | {tableList: room.getTableMessage(),playerCount:room.players.length},io,room.players);
42 | if(table.isPlaying()){
43 | //Now table starts playing
44 | utility.sendEventToTable('gameStarted',
45 | {tableList: room.getTableMessage()},io,table);
46 | table.gameObj.startGame(utility,io,table);
47 | }
48 | }
49 | else{
50 | socket.emit('errorEvent',{errorNo:100, message: "The table is full!!!"});
51 | }
52 | });
53 | socket.on('userLeaveFromTable',function(data){
54 | //Check if the user is in table
55 | var player = room.getPlayer(socket.id);
56 | if(player.tableID != ""){
57 | var table = room.getTable(player.tableID);
58 | table.removePlayer(player);
59 | utility.sendEventToTable('userDisconnectedFromTable',
60 | {username:player.name},io,table);
61 | utility.sendEventToAllFreePlayersButPlayer('userDisconnectedFromTable',{
62 | username:player.name},io,room.players,player);
63 | socket.emit('playerDisconnectedFromTable',
64 | {username:player.name});
65 | utility.sendEventToAllPlayers('tableList',
66 | {tableList: room.getTableMessage(),playerCount: room.players.length},io,room.players);
67 | }
68 | else{
69 | socket.emit('errorEvent',{errorNo:101, message: "You are not connected to table!!!"});
70 | }
71 | });
72 | socket.on('sendChatMessage',function(data){
73 | var player = room.getPlayer(socket.id);
74 | if(player.tableID == ""){
75 | //Send Message to the Available Players
76 | utility.sendEventToAllFreePlayers('userSendChatMessage',
77 | {username:player.name,message:data.message},io,room.players);
78 | }
79 | else
80 | {
81 | //Send Message to the same Table Players
82 | var table = room.getTable(player.tableID);
83 | utility.sendEventToTable('userSendChatMessage',
84 | {username:player.name},io,table);
85 | }
86 | });
87 | socket.on('sendChatMessageToUser',function(data){
88 | var player = room.getPlayer(socket.id);
89 | var toPlayer = room.getPlayer(data.playerID);
90 | utility.sendEventToSpecificPlayer('userSentChatMessageToUser',
91 | {username:player.name},io,toPlayer);
92 | });
93 | socket.on('disconnect', function(){
94 | //Check player status whether she is in table or game
95 | var player = room.getPlayer(socket.id);
96 | if(player.status != "available"){
97 | //Remove from table
98 | var table = room.getTable(player.tableID);
99 | table.removePlayer(player);
100 | }
101 | //Remove from room
102 | room.removePlayer(player);
103 | utility.sendEventToAllPlayersButPlayer('userDisconnectedFromGame',
104 | {message:"Player is disconnected",username:player.name},io,room.players,player);
105 | utility.sendEventToAllPlayers('tableList',
106 | {tableList: room.getTableMessage(),playerCount: room.players.length},io,room.players);
107 | });
108 | });
109 | //
110 |
111 | //
112 |
113 | var app = express.createServer();
114 |
115 | app.configure(function(){
116 | app.use(express.methodOverride());
117 | app.use(express.bodyParser());
118 | app.use(app.router);
119 | app.set('views', __dirname + '/views');
120 | app.set('view engine', 'ejs');
121 | app.use(express.static(__dirname + '/public'));
122 | });
123 |
124 | app.get('/', function(req, res){
125 | res.render('index', {
126 | message : 'De groeten'
127 | });
128 | });
129 |
130 | app.listen(3000);
131 |
132 | //
--------------------------------------------------------------------------------
/public/viewporter.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Viewporter v2.0
3 | * http://github.com/zynga/viewporter
4 | *
5 | * Copyright 2011, Zynga Inc.
6 | * Licensed under the MIT License.
7 | * https://raw.github.com/zynga/viewporter/master/MIT-LICENSE.txt
8 | */
9 | var viewporter;
10 | (function() {
11 |
12 | var _viewporter;
13 |
14 | // initialize viewporter object
15 | viewporter = {
16 |
17 | // options
18 | forceDetection: false,
19 |
20 | // set to true to prevent page scroll.
21 | preventPageScroll: false,
22 |
23 | // constants
24 | ACTIVE: (('ontouchstart' in window) || (/webos/i).test(navigator.userAgent)),
25 | READY: false,
26 |
27 | // methods
28 | isLandscape: function() {
29 | return window.orientation === 90 || window.orientation === -90;
30 | },
31 |
32 | ready: function(callback) {
33 | window.addEventListener('viewportready', callback, false);
34 | },
35 |
36 | change: function(callback) {
37 | window.addEventListener('viewportchange', callback, false);
38 | },
39 |
40 | refresh: function(){
41 | if (_viewporter){
42 | _viewporter.prepareVisualViewport();
43 | }
44 | }
45 | };
46 |
47 | // if we are on Desktop, no need to go further
48 | if (!viewporter.ACTIVE) {
49 | return;
50 | }
51 |
52 | // create private constructor with prototype..just looks cooler
53 | var _Viewporter = function() {
54 |
55 | var that = this;
56 |
57 | // Scroll away the header, but not in Chrome
58 | this.IS_ANDROID = /Android/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent);
59 |
60 | var _onReady = function() {
61 |
62 | // scroll the shit away and fix the viewport!
63 | that.prepareVisualViewport();
64 |
65 | // listen for orientation change
66 | var cachedOrientation = window.orientation;
67 | window.addEventListener('orientationchange', function() {
68 | if(window.orientation != cachedOrientation) {
69 | that.prepareVisualViewport();
70 | cachedOrientation = window.orientation;
71 | }
72 | }, false);
73 |
74 |
75 | // prevent page scroll if `preventPageScroll` option was set to `true`
76 | document.body.addEventListener('touchmove', function(event) {
77 | if (viewporter.preventPageScroll){
78 | event.preventDefault();
79 | }
80 | }, false);
81 |
82 | // reset page scroll if `preventPageScroll` option was set to `true`
83 | // this is used after showing the address bar on iOS
84 | document.body.addEventListener("touchstart", function() {
85 | if (viewporter.preventPageScroll) {
86 | that.prepareVisualViewport();
87 | }
88 | }, false);
89 |
90 | };
91 |
92 |
93 | // listen for document ready if not already loaded
94 | // then try to prepare the visual viewport and start firing custom events
95 | if (document.readyState === 'loading') {
96 | document.addEventListener('DOMContentLoaded', function() {
97 | _onReady();
98 | }, false);
99 | } else {
100 | _onReady();
101 | }
102 |
103 |
104 | };
105 |
106 | _Viewporter.prototype = {
107 |
108 | getProfile: function() {
109 |
110 | if(viewporter.forceDetection) {
111 | return null;
112 | }
113 |
114 | for(var searchTerm in viewporter.profiles) {
115 | if(new RegExp(searchTerm).test(navigator.userAgent)) {
116 | return viewporter.profiles[searchTerm];
117 | }
118 | }
119 | return null;
120 | },
121 |
122 | postProcess: function() {
123 |
124 | // let everyone know we're finally ready
125 | viewporter.READY = true;
126 |
127 | this.triggerWindowEvent(!this._firstUpdateExecuted ? 'viewportready' : 'viewportchange');
128 | this._firstUpdateExecuted = true;
129 |
130 | },
131 |
132 | prepareVisualViewport: function() {
133 |
134 | var that = this;
135 |
136 | // if we're running in webapp mode (iOS), there's nothing to scroll away
137 | if(navigator.standalone) {
138 | return this.postProcess();
139 | }
140 |
141 | // maximize the document element's height to be able to scroll away the url bar
142 | document.documentElement.style.minHeight = '5000px';
143 |
144 | var startHeight = window.innerHeight;
145 | var deviceProfile = this.getProfile();
146 | var orientation = viewporter.isLandscape() ? 'landscape' : 'portrait';
147 |
148 | // try scrolling immediately
149 | window.scrollTo(0, that.IS_ANDROID ? 1 : 0); // Android needs to scroll by at least 1px
150 |
151 | // start the checker loop
152 | var iterations = 40;
153 | var check = window.setInterval(function() {
154 |
155 | // retry scrolling
156 | window.scrollTo(0, that.IS_ANDROID ? 1 : 0); // Android needs to scroll by at least 1px
157 |
158 | function androidProfileCheck() {
159 | return deviceProfile ? window.innerHeight === deviceProfile[orientation] : false;
160 | }
161 | function iosInnerHeightCheck() {
162 | return window.innerHeight > startHeight;
163 | }
164 |
165 | iterations--;
166 |
167 | // check iterations first to make sure we never get stuck
168 | if ( (that.IS_ANDROID ? androidProfileCheck() : iosInnerHeightCheck()) || iterations < 0) {
169 |
170 | // set minimum height of content to new window height
171 | document.documentElement.style.minHeight = window.innerHeight + 'px';
172 |
173 | // set the right height for the body wrapper to allow bottom positioned elements
174 | document.getElementById('viewporter').style.position = 'relative';
175 | document.getElementById('viewporter').style.height = window.innerHeight + 'px';
176 |
177 | clearInterval(check);
178 |
179 | // fire events, get ready
180 | that.postProcess();
181 |
182 | }
183 |
184 | }, 10);
185 |
186 | },
187 |
188 | triggerWindowEvent: function(name) {
189 | var event = document.createEvent("Event");
190 | event.initEvent(name, false, false);
191 | window.dispatchEvent(event);
192 | }
193 |
194 | };
195 |
196 | // initialize
197 | _viewporter = new _Viewporter();
198 |
199 | })();
200 |
201 | viewporter.profiles = {
202 |
203 | // Motorola Xoom
204 | 'MZ601': {
205 | portrait: 696,
206 | landscape: 1176
207 | },
208 |
209 | // Samsung Galaxy S, S2 and Nexus S
210 | 'GT-I9000|GT-I9100|Nexus S': {
211 | portrait: 508,
212 | landscape: 295
213 | },
214 |
215 | // Samsung Galaxy Pad
216 | 'GT-P1000': {
217 | portrait: 657,
218 | landscape: 400
219 | },
220 |
221 | // HTC Desire & HTC Desire HD
222 | 'Desire_A8181|DesireHD_A9191': {
223 | portrait: 533,
224 | landscape: 320
225 | }
226 |
227 | }
228 |
--------------------------------------------------------------------------------
/public/js/viewporter.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Viewporter v2.0
3 | * http://github.com/zynga/viewporter
4 | *
5 | * Copyright 2011, Zynga Inc.
6 | * Licensed under the MIT License.
7 | * https://raw.github.com/zynga/viewporter/master/MIT-LICENSE.txt
8 | */
9 | var viewporter;
10 | (function() {
11 |
12 | var _viewporter;
13 |
14 | // initialize viewporter object
15 | viewporter = {
16 |
17 | // options
18 | forceDetection: false,
19 |
20 | // set to true to prevent page scroll.
21 | preventPageScroll: false,
22 |
23 | // constants
24 | ACTIVE: (('ontouchstart' in window) || (/webos/i).test(navigator.userAgent)),
25 | READY: false,
26 |
27 | // methods
28 | isLandscape: function() {
29 | return window.orientation === 90 || window.orientation === -90;
30 | },
31 |
32 | ready: function(callback) {
33 | window.addEventListener('viewportready', callback, false);
34 | },
35 |
36 | change: function(callback) {
37 | window.addEventListener('viewportchange', callback, false);
38 | },
39 |
40 | refresh: function(){
41 | if (_viewporter){
42 | _viewporter.prepareVisualViewport();
43 | }
44 | }
45 | };
46 |
47 | // if we are on Desktop, no need to go further
48 | if (!viewporter.ACTIVE) {
49 | return;
50 | }
51 |
52 | // create private constructor with prototype..just looks cooler
53 | var _Viewporter = function() {
54 |
55 | var that = this;
56 |
57 | // Scroll away the header, but not in Chrome
58 | this.IS_ANDROID = /Android/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent);
59 |
60 | var _onReady = function() {
61 |
62 | // scroll the shit away and fix the viewport!
63 | that.prepareVisualViewport();
64 |
65 | // listen for orientation change
66 | var cachedOrientation = window.orientation;
67 | window.addEventListener('orientationchange', function() {
68 | if(window.orientation != cachedOrientation) {
69 | that.prepareVisualViewport();
70 | cachedOrientation = window.orientation;
71 | }
72 | }, false);
73 |
74 |
75 | // prevent page scroll if `preventPageScroll` option was set to `true`
76 | document.body.addEventListener('touchmove', function(event) {
77 | if (viewporter.preventPageScroll){
78 | event.preventDefault();
79 | }
80 | }, false);
81 |
82 | // reset page scroll if `preventPageScroll` option was set to `true`
83 | // this is used after showing the address bar on iOS
84 | document.body.addEventListener("touchstart", function() {
85 | if (viewporter.preventPageScroll) {
86 | that.prepareVisualViewport();
87 | }
88 | }, false);
89 |
90 | };
91 |
92 |
93 | // listen for document ready if not already loaded
94 | // then try to prepare the visual viewport and start firing custom events
95 | if (document.readyState === 'loading') {
96 | document.addEventListener('DOMContentLoaded', function() {
97 | _onReady();
98 | }, false);
99 | } else {
100 | _onReady();
101 | }
102 |
103 |
104 | };
105 |
106 | _Viewporter.prototype = {
107 |
108 | getProfile: function() {
109 |
110 | if(viewporter.forceDetection) {
111 | return null;
112 | }
113 |
114 | for(var searchTerm in viewporter.profiles) {
115 | if(new RegExp(searchTerm).test(navigator.userAgent)) {
116 | return viewporter.profiles[searchTerm];
117 | }
118 | }
119 | return null;
120 | },
121 |
122 | postProcess: function() {
123 |
124 | // let everyone know we're finally ready
125 | viewporter.READY = true;
126 |
127 | this.triggerWindowEvent(!this._firstUpdateExecuted ? 'viewportready' : 'viewportchange');
128 | this._firstUpdateExecuted = true;
129 |
130 | },
131 |
132 | prepareVisualViewport: function() {
133 |
134 | var that = this;
135 |
136 | // if we're running in webapp mode (iOS), there's nothing to scroll away
137 | if(navigator.standalone) {
138 | return this.postProcess();
139 | }
140 |
141 | // maximize the document element's height to be able to scroll away the url bar
142 | document.documentElement.style.minHeight = '5000px';
143 |
144 | var startHeight = window.innerHeight;
145 | var deviceProfile = this.getProfile();
146 | var orientation = viewporter.isLandscape() ? 'landscape' : 'portrait';
147 |
148 | // try scrolling immediately
149 | window.scrollTo(0, that.IS_ANDROID ? 1 : 0); // Android needs to scroll by at least 1px
150 |
151 | // start the checker loop
152 | var iterations = 40;
153 | var check = window.setInterval(function() {
154 |
155 | // retry scrolling
156 | window.scrollTo(0, that.IS_ANDROID ? 1 : 0); // Android needs to scroll by at least 1px
157 |
158 | function androidProfileCheck() {
159 | return deviceProfile ? window.innerHeight === deviceProfile[orientation] : false;
160 | }
161 | function iosInnerHeightCheck() {
162 | return window.innerHeight > startHeight;
163 | }
164 |
165 | iterations--;
166 |
167 | // check iterations first to make sure we never get stuck
168 | if ( (that.IS_ANDROID ? androidProfileCheck() : iosInnerHeightCheck()) || iterations < 0) {
169 |
170 | // set minimum height of content to new window height
171 | document.documentElement.style.minHeight = window.innerHeight + 'px';
172 |
173 | // set the right height for the body wrapper to allow bottom positioned elements
174 | document.getElementById('viewporter').style.position = 'relative';
175 | document.getElementById('viewporter').style.height = window.innerHeight + 'px';
176 |
177 | clearInterval(check);
178 |
179 | // fire events, get ready
180 | that.postProcess();
181 |
182 | }
183 |
184 | }, 10);
185 |
186 | },
187 |
188 | triggerWindowEvent: function(name) {
189 | var event = document.createEvent("Event");
190 | event.initEvent(name, false, false);
191 | window.dispatchEvent(event);
192 | }
193 |
194 | };
195 |
196 | // initialize
197 | _viewporter = new _Viewporter();
198 |
199 | })();
200 |
201 | viewporter.profiles = {
202 |
203 | // Motorola Xoom
204 | 'MZ601': {
205 | portrait: 696,
206 | landscape: 1176
207 | },
208 |
209 | // Samsung Galaxy S, S2 and Nexus S
210 | 'GT-I9000|GT-I9100|Nexus S': {
211 | portrait: 508,
212 | landscape: 295
213 | },
214 |
215 | // Samsung Galaxy Pad
216 | 'GT-P1000': {
217 | portrait: 657,
218 | landscape: 400
219 | },
220 |
221 | // HTC Desire & HTC Desire HD
222 | 'Desire_A8181|DesireHD_A9191': {
223 | portrait: 533,
224 | landscape: 320
225 | }
226 |
227 | }
228 |
--------------------------------------------------------------------------------
/public/css/style.css:
--------------------------------------------------------------------------------
1 | /* ------------------
2 | styling for the tables
3 | ------------------ */
4 |
5 |
6 | body
7 | {
8 | line-height: 1.6em;
9 | }
10 |
11 | #hor-minimalist-a
12 | {
13 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
14 | font-size: 12px;
15 | background: #fff;
16 | margin: 45px;
17 | width: 480px;
18 | border-collapse: collapse;
19 | text-align: left;
20 | }
21 | #hor-minimalist-a th
22 | {
23 | font-size: 14px;
24 | font-weight: normal;
25 | color: #039;
26 | padding: 10px 8px;
27 | border-bottom: 2px solid #6678b1;
28 | }
29 | #hor-minimalist-a td
30 | {
31 | color: #669;
32 | padding: 9px 8px 0px 8px;
33 | }
34 | #hor-minimalist-a tbody tr:hover td
35 | {
36 | color: #009;
37 | }
38 |
39 |
40 | #hor-minimalist-b
41 | {
42 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
43 | font-size: 12px;
44 | background: #fff;
45 | margin: 45px;
46 | width: 480px;
47 | border-collapse: collapse;
48 | text-align: left;
49 | }
50 | #hor-minimalist-b th
51 | {
52 | font-size: 14px;
53 | font-weight: normal;
54 | color: #039;
55 | padding: 10px 8px;
56 | border-bottom: 2px solid #6678b1;
57 | }
58 | #hor-minimalist-b td
59 | {
60 | border-bottom: 1px solid #ccc;
61 | color: #669;
62 | padding: 6px 8px;
63 | }
64 | #hor-minimalist-b tbody tr:hover td
65 | {
66 | color: #009;
67 | }
68 |
69 |
70 | #ver-minimalist
71 | {
72 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
73 | font-size: 12px;
74 | margin: 45px;
75 | width: 480px;
76 | text-align: left;
77 | border-collapse: collapse;
78 | }
79 | #ver-minimalist th
80 | {
81 | padding: 8px 2px;
82 | font-weight: normal;
83 | font-size: 14px;
84 | border-bottom: 2px solid #6678b1;
85 | border-right: 30px solid #fff;
86 | border-left: 30px solid #fff;
87 | color: #039;
88 | }
89 | #ver-minimalist td
90 | {
91 | padding: 12px 2px 0px 2px;
92 | border-right: 30px solid #fff;
93 | border-left: 30px solid #fff;
94 | color: #669;
95 | }
96 |
97 |
98 | #box-table-a
99 | {
100 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
101 | font-size: 12px;
102 | margin: 45px;
103 | width: 480px;
104 | text-align: left;
105 | border-collapse: collapse;
106 | }
107 | #box-table-a th
108 | {
109 | font-size: 13px;
110 | font-weight: normal;
111 | padding: 8px;
112 | background: #b9c9fe;
113 | border-top: 4px solid #aabcfe;
114 | border-bottom: 1px solid #fff;
115 | color: #039;
116 | }
117 | #box-table-a td
118 | {
119 | padding: 8px;
120 | background: #e8edff;
121 | border-bottom: 1px solid #fff;
122 | color: #669;
123 | border-top: 1px solid transparent;
124 | }
125 | #box-table-a tr:hover td
126 | {
127 | background: #d0dafd;
128 | color: #339;
129 | }
130 |
131 |
132 | #box-table-b
133 | {
134 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
135 | font-size: 12px;
136 | margin: 45px;
137 | width: 480px;
138 | text-align: center;
139 | border-collapse: collapse;
140 | border-top: 7px solid #9baff1;
141 | border-bottom: 7px solid #9baff1;
142 | }
143 | #box-table-b th
144 | {
145 | font-size: 13px;
146 | font-weight: normal;
147 | padding: 8px;
148 | background: #e8edff;
149 | border-right: 1px solid #9baff1;
150 | border-left: 1px solid #9baff1;
151 | color: #039;
152 | }
153 | #box-table-b td
154 | {
155 | padding: 8px;
156 | background: #e8edff;
157 | border-right: 1px solid #aabcfe;
158 | border-left: 1px solid #aabcfe;
159 | color: #669;
160 | }
161 |
162 |
163 | #hor-zebra
164 | {
165 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
166 | font-size: 12px;
167 | margin: 45px;
168 | width: 480px;
169 | text-align: left;
170 | border-collapse: collapse;
171 | }
172 | #hor-zebra th
173 | {
174 | font-size: 14px;
175 | font-weight: normal;
176 | padding: 10px 8px;
177 | color: #039;
178 | }
179 | #hor-zebra td
180 | {
181 | padding: 8px;
182 | color: #669;
183 | }
184 | #hor-zebra .odd
185 | {
186 | background: #e8edff;
187 | }
188 |
189 |
190 | #ver-zebra
191 | {
192 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
193 | font-size: 12px;
194 | margin: 45px;
195 | width: 480px;
196 | text-align: left;
197 | border-collapse: collapse;
198 | }
199 | #ver-zebra th
200 | {
201 | font-size: 14px;
202 | font-weight: normal;
203 | padding: 12px 15px;
204 | border-right: 1px solid #fff;
205 | border-left: 1px solid #fff;
206 | color: #039;
207 | }
208 | #ver-zebra td
209 | {
210 | padding: 8px 15px;
211 | border-right: 1px solid #fff;
212 | border-left: 1px solid #fff;
213 | color: #669;
214 | }
215 | .vzebra-odd
216 | {
217 | background: #eff2ff;
218 | }
219 | .vzebra-even
220 | {
221 | background: #e8edff;
222 | }
223 | #ver-zebra #vzebra-adventure, #ver-zebra #vzebra-children
224 | {
225 | background: #d0dafd;
226 | border-bottom: 1px solid #c8d4fd;
227 | }
228 | #ver-zebra #vzebra-comedy, #ver-zebra #vzebra-action
229 | {
230 | background: #dce4ff;
231 | border-bottom: 1px solid #d6dfff;
232 | }
233 |
234 |
235 | #one-column-emphasis
236 | {
237 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
238 | font-size: 12px;
239 | margin: 45px;
240 | width: 480px;
241 | text-align: left;
242 | border-collapse: collapse;
243 | }
244 | #one-column-emphasis th
245 | {
246 | font-size: 14px;
247 | font-weight: normal;
248 | padding: 12px 15px;
249 | color: #039;
250 | }
251 | #one-column-emphasis td
252 | {
253 | padding: 10px 15px;
254 | color: #669;
255 | border-top: 1px solid #e8edff;
256 | }
257 | .oce-first
258 | {
259 | background: #d0dafd;
260 | border-right: 10px solid transparent;
261 | border-left: 10px solid transparent;
262 | }
263 | #one-column-emphasis tr:hover td
264 | {
265 | color: #339;
266 | background: #eff2ff;
267 | }
268 |
269 |
270 | #newspaper-a
271 | {
272 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
273 | font-size: 12px;
274 | margin: 45px;
275 | width: 480px;
276 | text-align: left;
277 | border-collapse: collapse;
278 | border: 1px solid #69c;
279 | }
280 | #newspaper-a th
281 | {
282 | padding: 12px 17px 12px 17px;
283 | font-weight: normal;
284 | font-size: 14px;
285 | color: #039;
286 | border-bottom: 1px dashed #69c;
287 | }
288 | #newspaper-a td
289 | {
290 | padding: 7px 17px 7px 17px;
291 | color: #669;
292 | }
293 | #newspaper-a tbody tr:hover td
294 | {
295 | color: #339;
296 | background: #d0dafd;
297 | }
298 |
299 |
300 | #newspaper-b
301 | {
302 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
303 | font-size: 12px;
304 | margin: 45px;
305 | width: 480px;
306 | text-align: left;
307 | border-collapse: collapse;
308 | border: 1px solid #69c;
309 | }
310 | #newspaper-b th
311 | {
312 | padding: 15px 10px 10px 10px;
313 | font-weight: normal;
314 | font-size: 14px;
315 | color: #039;
316 | }
317 | #newspaper-b tbody
318 | {
319 | background: #e8edff;
320 | }
321 | #newspaper-b td
322 | {
323 | padding: 10px;
324 | color: #669;
325 | border-top: 1px dashed #fff;
326 | }
327 | #newspaper-b tbody tr:hover td
328 | {
329 | color: #339;
330 | background: #d0dafd;
331 | }
332 |
333 |
334 | #newspaper-c
335 | {
336 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
337 | font-size: 12px;
338 | margin: 45px;
339 | width: 480px;
340 | text-align: left;
341 | border-collapse: collapse;
342 | border: 1px solid #6cf;
343 | }
344 | #newspaper-c th
345 | {
346 | padding: 20px;
347 | font-weight: normal;
348 | font-size: 13px;
349 | color: #039;
350 | text-transform: uppercase;
351 | border-right: 1px solid #0865c2;
352 | border-top: 1px solid #0865c2;
353 | border-left: 1px solid #0865c2;
354 | border-bottom: 1px solid #fff;
355 | }
356 | #newspaper-c td
357 | {
358 | padding: 10px 20px;
359 | color: #669;
360 | border-right: 1px dashed #6cf;
361 | }
362 |
363 |
364 | #rounded-corner
365 | {
366 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
367 | font-size: 12px;
368 | margin: 45px;
369 | width: 480px;
370 | text-align: left;
371 | border-collapse: collapse;
372 | }
373 | #rounded-corner thead th.rounded-company
374 | {
375 | background: #b9c9fe url('img/table-images/left.png') left -1px no-repeat;
376 | }
377 | #rounded-corner thead th.rounded-q4
378 | {
379 | background: #b9c9fe url('img/table-images/right.png') right -1px no-repeat;
380 | }
381 | #rounded-corner th
382 | {
383 | padding: 8px;
384 | font-weight: normal;
385 | font-size: 13px;
386 | color: #039;
387 | background: #b9c9fe;
388 | }
389 | #rounded-corner td
390 | {
391 | padding: 8px;
392 | background: #e8edff;
393 | border-top: 1px solid #fff;
394 | color: #669;
395 | }
396 | #rounded-corner tfoot td.rounded-foot-left
397 | {
398 | background: #e8edff url('img/table-images/botleft.png') left bottom no-repeat;
399 | }
400 | #rounded-corner tfoot td.rounded-foot-right
401 | {
402 | background: #e8edff url('img/table-images/botright.png') right bottom no-repeat;
403 | }
404 | #rounded-corner tbody tr:hover td
405 | {
406 | background: #d0dafd;
407 | }
408 |
409 |
410 | #background-image
411 | {
412 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
413 | font-size: 12px;
414 | margin: 45px;
415 | width: 480px;
416 | text-align: left;
417 | border-collapse: collapse;
418 | background: url('img/table-images/blurry.jpg') 330px 59px no-repeat;
419 | }
420 | #background-image th
421 | {
422 | padding: 12px;
423 | font-weight: normal;
424 | font-size: 14px;
425 | color: #339;
426 | }
427 | #background-image td
428 | {
429 | padding: 9px 12px;
430 | color: #669;
431 | border-top: 1px solid #fff;
432 | }
433 | #background-image tfoot td
434 | {
435 | font-size: 11px;
436 | }
437 | #background-image tbody td
438 | {
439 | background: url('img/table-images/back.png');
440 | }
441 | * html #background-image tbody td
442 | {
443 | /*
444 | ----------------------------
445 | PUT THIS ON IE6 ONLY STYLE
446 | AS THE RULE INVALIDATES
447 | YOUR STYLESHEET
448 | ----------------------------
449 | */
450 | filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/table-images/back.png',sizingMethod='crop');
451 | background: none;
452 | }
453 | #background-image tbody tr:hover td
454 | {
455 | color: #339;
456 | background: none;
457 | }
458 |
459 |
460 | #gradient-style
461 | {
462 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
463 | font-size: 12px;
464 | margin: 45px;
465 | width: 480px;
466 | text-align: left;
467 | border-collapse: collapse;
468 | }
469 | #gradient-style th
470 | {
471 | font-size: 13px;
472 | font-weight: normal;
473 | padding: 8px;
474 | background: #b9c9fe url('img/table-images/gradhead.png') repeat-x;
475 | border-top: 2px solid #d3ddff;
476 | border-bottom: 1px solid #fff;
477 | color: #039;
478 | }
479 | #gradient-style td
480 | {
481 | padding: 8px;
482 | border-bottom: 1px solid #fff;
483 | color: #669;
484 | border-top: 1px solid #fff;
485 | background: #e8edff url('img/table-images/gradback.png') repeat-x;
486 | }
487 | #gradient-style tfoot tr td
488 | {
489 | background: #e8edff;
490 | font-size: 12px;
491 | color: #99c;
492 | }
493 | #gradient-style tbody tr:hover td
494 | {
495 | background: #d0dafd url('img/table-images/gradhover.png') repeat-x;
496 | color: #339;
497 | }
498 |
499 |
500 | #pattern-style-a
501 | {
502 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
503 | font-size: 12px;
504 | margin: 45px;
505 | width: 480px;
506 | text-align: left;
507 | border-collapse: collapse;
508 | background: url('img/table-images/pattern.png');
509 | }
510 | #pattern-style-a thead tr
511 | {
512 | background: url('img/table-images/pattern-head.png');
513 | }
514 | #pattern-style-a th
515 | {
516 | font-size: 13px;
517 | font-weight: normal;
518 | padding: 8px;
519 | border-bottom: 1px solid #fff;
520 | color: #039;
521 | }
522 | #pattern-style-a td
523 | {
524 | padding: 8px;
525 | border-bottom: 1px solid #fff;
526 | color: #669;
527 | border-top: 1px solid transparent;
528 | }
529 | #pattern-style-a tbody tr:hover td
530 | {
531 | color: #339;
532 | background: #fff;
533 | }
534 |
535 |
536 | #pattern-style-b
537 | {
538 | font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
539 | font-size: 12px;
540 | margin: 45px;
541 | width: 480px;
542 | text-align: left;
543 | border-collapse: collapse;
544 | background: url('img/table-images/patternb.png');
545 | }
546 | #pattern-style-b thead tr
547 | {
548 | background: url('img/table-images/patternb-head.png');
549 | }
550 | #pattern-style-b th
551 | {
552 | font-size: 13px;
553 | font-weight: normal;
554 | padding: 8px;
555 | border-bottom: 1px solid #fff;
556 | color: #039;
557 | }
558 | #pattern-style-b td
559 | {
560 | padding: 8px;
561 | border-bottom: 1px solid #fff;
562 | color: #669;
563 | border-top: 1px solid transparent;
564 | }
565 | #pattern-style-b tbody tr:hover td
566 | {
567 | color: #339;
568 | background: #cdcdee;
569 | }
--------------------------------------------------------------------------------
/public/css/jquery.mobile-1.1.1.min.css:
--------------------------------------------------------------------------------
1 | /*! jQuery Mobile v1.1.1 1981b3f5ec22675ae47df8f0bdf9622e7780e90e jquerymobile.com | jquery.org/license */
2 | .ui-bar-a{border:1px solid #333;background:#111;color:#fff;font-weight:bold;text-shadow:0 -1px 1px #000;background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#111));background-image:-webkit-linear-gradient(#3c3c3c,#111);background-image:-moz-linear-gradient(#3c3c3c,#111);background-image:-ms-linear-gradient(#3c3c3c,#111);background-image:-o-linear-gradient(#3c3c3c,#111);background-image:linear-gradient(#3c3c3c,#111)}.ui-bar-a,.ui-bar-a input,.ui-bar-a select,.ui-bar-a textarea,.ui-bar-a button{font-family:Helvetica,Arial,sans-serif}.ui-bar-a .ui-link-inherit{color:#fff}.ui-bar-a a.ui-link{color:#7cc4e7;font-weight:bold}.ui-bar-a a.ui-link:visited{color:#2489ce}.ui-bar-a a.ui-link:hover{color:#2489ce}.ui-bar-a a.ui-link:active{color:#2489ce}.ui-body-a,.ui-overlay-a{border:1px solid #444;background:#222;color:#fff;text-shadow:0 1px 1px #111;font-weight:normal;background-image:-webkit-gradient(linear,left top,left bottom,from(#444),to(#222));background-image:-webkit-linear-gradient(#444,#222);background-image:-moz-linear-gradient(#444,#222);background-image:-ms-linear-gradient(#444,#222);background-image:-o-linear-gradient(#444,#222);background-image:linear-gradient(#444,#222)}.ui-overlay-a{background-image:none;border-width:0}.ui-body-a,.ui-body-a input,.ui-body-a select,.ui-body-a textarea,.ui-body-a button{font-family:Helvetica,Arial,sans-serif}.ui-body-a .ui-link-inherit{color:#fff}.ui-body-a .ui-link{color:#2489ce;font-weight:bold}.ui-body-a .ui-link:visited{color:#2489ce}.ui-body-a .ui-link:hover{color:#2489ce}.ui-body-a .ui-link:active{color:#2489ce}.ui-btn-up-a{border:1px solid #111;background:#333;font-weight:bold;color:#fff;text-shadow:0 1px 1px #111;background-image:-webkit-gradient(linear,left top,left bottom,from(#444),to(#2d2d2d));background-image:-webkit-linear-gradient(#444,#2d2d2d);background-image:-moz-linear-gradient(#444,#2d2d2d);background-image:-ms-linear-gradient(#444,#2d2d2d);background-image:-o-linear-gradient(#444,#2d2d2d);background-image:linear-gradient(#444,#2d2d2d)}.ui-btn-up-a:visited,.ui-btn-up-a a.ui-link-inherit{color:#fff}.ui-btn-hover-a{border:1px solid #000;background:#444;font-weight:bold;color:#fff;text-shadow:0 1px 1px #111;background-image:-webkit-gradient(linear,left top,left bottom,from(#555),to(#383838));background-image:-webkit-linear-gradient(#555,#383838);background-image:-moz-linear-gradient(#555,#383838);background-image:-ms-linear-gradient(#555,#383838);background-image:-o-linear-gradient(#555,#383838);background-image:linear-gradient(#555,#383838)}.ui-btn-hover-a:visited,.ui-btn-hover-a:hover,.ui-btn-hover-a a.ui-link-inherit{color:#fff}.ui-btn-down-a{border:1px solid #000;background:#222;font-weight:bold;color:#fff;text-shadow:0 1px 1px #111;background-image:-webkit-gradient(linear,left top,left bottom,from(#202020),to(#2c2c2c));background-image:-webkit-linear-gradient(#202020,#2c2c2c);background-image:-moz-linear-gradient(#202020,#2c2c2c);background-image:-ms-linear-gradient(#202020,#2c2c2c);background-image:-o-linear-gradient(#202020,#2c2c2c);background-image:linear-gradient(#202020,#2c2c2c)}.ui-btn-down-a:visited,.ui-btn-down-a:hover,.ui-btn-down-a a.ui-link-inherit{color:#fff}.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-b{border:1px solid #456f9a;background:#5e87b0;color:#fff;font-weight:bold;text-shadow:0 1px 1px #3e6790;background-image:-webkit-gradient(linear,left top,left bottom,from(#6facd5),to(#497bae));background-image:-webkit-linear-gradient(#6facd5,#497bae);background-image:-moz-linear-gradient(#6facd5,#497bae);background-image:-ms-linear-gradient(#6facd5,#497bae);background-image:-o-linear-gradient(#6facd5,#497bae);background-image:linear-gradient(#6facd5,#497bae)}.ui-bar-b,.ui-bar-b input,.ui-bar-b select,.ui-bar-b textarea,.ui-bar-b button{font-family:Helvetica,Arial,sans-serif}.ui-bar-b .ui-link-inherit{color:#fff}.ui-bar-b a.ui-link{color:#ddf0f8;font-weight:bold}.ui-bar-b a.ui-link:visited{color:#ddf0f8}.ui-bar-b a.ui-link:hover{color:#ddf0f8}.ui-bar-b a.ui-link:active{color:#ddf0f8}.ui-body-b,.ui-overlay-b{border:1px solid #999;background:#f3f3f3;color:#222;text-shadow:0 1px 0 #fff;font-weight:normal;background-image:-webkit-gradient(linear,left top,left bottom,from(#ddd),to(#ccc));background-image:-webkit-linear-gradient(#ddd,#ccc);background-image:-moz-linear-gradient(#ddd,#ccc);background-image:-ms-linear-gradient(#ddd,#ccc);background-image:-o-linear-gradient(#ddd,#ccc);background-image:linear-gradient(#ddd,#ccc)}.ui-overlay-b{background-image:none;border-width:0}.ui-body-b,.ui-body-b input,.ui-body-b select,.ui-body-b textarea,.ui-body-b button{font-family:Helvetica,Arial,sans-serif}.ui-body-b .ui-link-inherit{color:#333}.ui-body-b .ui-link{color:#2489ce;font-weight:bold}.ui-body-b .ui-link:visited{color:#2489ce}.ui-body-b .ui-link:hover{color:#2489ce}.ui-body-b .ui-link:active{color:#2489ce}.ui-btn-up-b{border:1px solid #044062;background:#396b9e;font-weight:bold;color:#fff;text-shadow:0 1px 1px #194b7e;background-image:-webkit-gradient(linear,left top,left bottom,from(#5f9cc5),to(#396b9e));background-image:-webkit-linear-gradient(#5f9cc5,#396b9e);background-image:-moz-linear-gradient(#5f9cc5,#396b9e);background-image:-ms-linear-gradient(#5f9cc5,#396b9e);background-image:-o-linear-gradient(#5f9cc5,#396b9e);background-image:linear-gradient(#5f9cc5,#396b9e)}.ui-btn-up-b:visited,.ui-btn-up-b a.ui-link-inherit{color:#fff}.ui-btn-hover-b{border:1px solid #00415e;background:#4b88b6;font-weight:bold;color:#fff;text-shadow:0 1px 1px #194b7e;background-image:-webkit-gradient(linear,left top,left bottom,from(#6facd5),to(#4272a4));background-image:-webkit-linear-gradient(#6facd5,#4272a4);background-image:-moz-linear-gradient(#6facd5,#4272a4);background-image:-ms-linear-gradient(#6facd5,#4272a4);background-image:-o-linear-gradient(#6facd5,#4272a4);background-image:linear-gradient(#6facd5,#4272a4)}.ui-btn-hover-b:visited,.ui-btn-hover-a:hover,.ui-btn-hover-b a.ui-link-inherit{color:#fff}.ui-btn-down-b{border:1px solid #225377;background:#4e89c5;font-weight:bold;color:#fff;text-shadow:0 1px 1px #194b7e;background-image:-webkit-gradient(linear,left top,left bottom,from(#295b8e),to(#3e79b5));background-image:-webkit-linear-gradient(#295b8e,#3e79b5);background-image:-moz-linear-gradient(#295b8e,#3e79b5);background-image:-ms-linear-gradient(#295b8e,#3e79b5);background-image:-o-linear-gradient(#295b8e,#3e79b5);background-image:linear-gradient(#295b8e,#3e79b5)}.ui-btn-down-b:visited,.ui-btn-down-b:hover,.ui-btn-down-b a.ui-link-inherit{color:#fff}.ui-btn-up-b,.ui-btn-hover-b,.ui-btn-down-b{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-c{border:1px solid #b3b3b3;background:#eee;color:#3e3e3e;font-weight:bold;text-shadow:0 1px 1px #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f0f0f0),to(#ddd));background-image:-webkit-linear-gradient(#f0f0f0,#ddd);background-image:-moz-linear-gradient(#f0f0f0,#ddd);background-image:-ms-linear-gradient(#f0f0f0,#ddd);background-image:-o-linear-gradient(#f0f0f0,#ddd);background-image:linear-gradient(#f0f0f0,#ddd)}.ui-bar-c .ui-link-inherit{color:#3e3e3e}.ui-bar-c a.ui-link{color:#7cc4e7;font-weight:bold}.ui-bar-c a.ui-link:visited{color:#2489ce}.ui-bar-c a.ui-link:hover{color:#2489ce}.ui-bar-c a.ui-link:active{color:#2489ce}.ui-bar-c,.ui-bar-c input,.ui-bar-c select,.ui-bar-c textarea,.ui-bar-c button{font-family:Helvetica,Arial,sans-serif}.ui-body-c,.ui-overlay-c{border:1px solid #aaa;color:#333;text-shadow:0 1px 0 #fff;background:#f9f9f9;background-image:-webkit-gradient(linear,left top,left bottom,from(#f9f9f9),to(#eee));background-image:-webkit-linear-gradient(#f9f9f9,#eee);background-image:-moz-linear-gradient(#f9f9f9,#eee);background-image:-ms-linear-gradient(#f9f9f9,#eee);background-image:-o-linear-gradient(#f9f9f9,#eee);background-image:linear-gradient(#f9f9f9,#eee)}.ui-overlay-c{background-image:none;border-width:0}.ui-body-c,.ui-body-c input,.ui-body-c select,.ui-body-c textarea,.ui-body-c button{font-family:Helvetica,Arial,sans-serif}.ui-body-c .ui-link-inherit{color:#333}.ui-body-c .ui-link{color:#2489ce;font-weight:bold}.ui-body-c .ui-link:visited{color:#2489ce}.ui-body-c .ui-link:hover{color:#2489ce}.ui-body-c .ui-link:active{color:#2489ce}.ui-btn-up-c{border:1px solid #ccc;background:#eee;font-weight:bold;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f1f1f1));background-image:-webkit-linear-gradient(#fff,#f1f1f1);background-image:-moz-linear-gradient(#fff,#f1f1f1);background-image:-ms-linear-gradient(#fff,#f1f1f1);background-image:-o-linear-gradient(#fff,#f1f1f1);background-image:linear-gradient(#fff,#f1f1f1)}.ui-btn-up-c:visited,.ui-btn-up-c a.ui-link-inherit{color:#2f3e46}.ui-btn-hover-c{border:1px solid #bbb;background:#dfdfdf;font-weight:bold;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f6f6f6),to(#e0e0e0));background-image:-webkit-linear-gradient(#f6f6f6,#e0e0e0);background-image:-moz-linear-gradient(#f6f6f6,#e0e0e0);background-image:-ms-linear-gradient(#f6f6f6,#e0e0e0);background-image:-o-linear-gradient(#f6f6f6,#e0e0e0);background-image:linear-gradient(#f6f6f6,#e0e0e0)}.ui-btn-hover-c:visited,.ui-btn-hover-c:hover,.ui-btn-hover-c a.ui-link-inherit{color:#2f3e46}.ui-btn-down-c{border:1px solid #bbb;background:#d6d6d6;font-weight:bold;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#d0d0d0),to(#dfdfdf));background-image:-webkit-linear-gradient(#d0d0d0,#dfdfdf);background-image:-moz-linear-gradient(#d0d0d0,#dfdfdf);background-image:-ms-linear-gradient(#d0d0d0,#dfdfdf);background-image:-o-linear-gradient(#d0d0d0,#dfdfdf);background-image:linear-gradient(#d0d0d0,#dfdfdf)}.ui-btn-down-c:visited,.ui-btn-down-c:hover,.ui-btn-down-c a.ui-link-inherit{color:#2f3e46}.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-d{border:1px solid #bbb;background:#bbb;color:#333;text-shadow:0 1px 0 #eee;background-image:-webkit-gradient(linear,left top,left bottom,from(#ddd),to(#bbb));background-image:-webkit-linear-gradient(#ddd,#bbb);background-image:-moz-linear-gradient(#ddd,#bbb);background-image:-ms-linear-gradient(#ddd,#bbb);background-image:-o-linear-gradient(#ddd,#bbb);background-image:linear-gradient(#ddd,#bbb)}.ui-bar-d,.ui-bar-d input,.ui-bar-d select,.ui-bar-d textarea,.ui-bar-d button{font-family:Helvetica,Arial,sans-serif}.ui-bar-d .ui-link-inherit{color:#333}.ui-bar-d a.ui-link{color:#2489ce;font-weight:bold}.ui-bar-d a.ui-link:visited{color:#2489ce}.ui-bar-d a.ui-link:hover{color:#2489ce}.ui-bar-d a.ui-link:active{color:#2489ce}.ui-body-d,.ui-overlay-d{border:1px solid #bbb;color:#333;text-shadow:0 1px 0 #fff;background:#fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#fff));background-image:-webkit-linear-gradient(#fff,#fff);background-image:-moz-linear-gradient(#fff,#fff);background-image:-ms-linear-gradient(#fff,#fff);background-image:-o-linear-gradient(#fff,#fff);background-image:linear-gradient(#fff,#fff)}.ui-overlay-d{background-image:none;border-width:0}.ui-body-d,.ui-body-d input,.ui-body-d select,.ui-body-d textarea,.ui-body-d button{font-family:Helvetica,Arial,sans-serif}.ui-body-d .ui-link-inherit{color:#333}.ui-body-d .ui-link{color:#2489ce;font-weight:bold}.ui-body-d .ui-link:visited{color:#2489ce}.ui-body-d .ui-link:hover{color:#2489ce}.ui-body-d .ui-link:active{color:#2489ce}.ui-btn-up-d{border:1px solid #bbb;background:#fff;font-weight:bold;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#f6f6f6));background-image:-webkit-linear-gradient(#fafafa,#f6f6f6);background-image:-moz-linear-gradient(#fafafa,#f6f6f6);background-image:-ms-linear-gradient(#fafafa,#f6f6f6);background-image:-o-linear-gradient(#fafafa,#f6f6f6);background-image:linear-gradient(#fafafa,#f6f6f6)}.ui-btn-up-d:visited,.ui-btn-up-d a.ui-link-inherit{color:#333}.ui-btn-hover-d{border:1px solid #aaa;background:#eee;font-weight:bold;color:#333;cursor:pointer;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#eee),to(#fff));background-image:-webkit-linear-gradient(#eee,#fff);background-image:-moz-linear-gradient(#eee,#fff);background-image:-ms-linear-gradient(#eee,#fff);background-image:-o-linear-gradient(#eee,#fff);background-image:linear-gradient(#eee,#fff)}.ui-btn-hover-d:visited,.ui-btn-hover-d:hover,.ui-btn-hover-d a.ui-link-inherit{color:#333}.ui-btn-down-d{border:1px solid #aaa;background:#eee;font-weight:bold;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#e5e5e5),to(#f2f2f2));background-image:-webkit-linear-gradient(#e5e5e5,#f2f2f2);background-image:-moz-linear-gradient(#e5e5e5,#f2f2f2);background-image:-ms-linear-gradient(#e5e5e5,#f2f2f2);background-image:-o-linear-gradient(#e5e5e5,#f2f2f2);background-image:linear-gradient(#e5e5e5,#f2f2f2)}.ui-btn-down-d:visited,.ui-btn-down-d:hover,.ui-btn-down-d a.ui-link-inherit{color:#333}.ui-btn-up-d,.ui-btn-hover-d,.ui-btn-down-d{font-family:Helvetica,Arial,sans-serif;text-decoration:none}.ui-bar-e{border:1px solid #f7c942;background:#fadb4e;color:#333;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fceda7),to(#fbef7e));background-image:-webkit-linear-gradient(#fceda7,#fbef7e);background-image:-moz-linear-gradient(#fceda7,#fbef7e);background-image:-ms-linear-gradient(#fceda7,#fbef7e);background-image:-o-linear-gradient(#fceda7,#fbef7e);background-image:linear-gradient(#fceda7,#fbef7e)}.ui-bar-e,.ui-bar-e input,.ui-bar-e select,.ui-bar-e textarea,.ui-bar-e button{font-family:Helvetica,Arial,sans-serif}.ui-bar-e .ui-link-inherit{color:#333}.ui-bar-e a.ui-link{color:#2489ce;font-weight:bold}.ui-bar-e a.ui-link:visited{color:#2489ce}.ui-bar-e a.ui-link:hover{color:#2489ce}.ui-bar-e a.ui-link:active{color:#2489ce}.ui-body-e,.ui-overlay-e{border:1px solid #f7c942;color:#222;text-shadow:0 1px 0 #fff;background:#fff9df;background-image:-webkit-gradient(linear,left top,left bottom,from(#fffadf),to(#fff3a5));background-image:-webkit-linear-gradient(#fffadf,#fff3a5);background-image:-moz-linear-gradient(#fffadf,#fff3a5);background-image:-ms-linear-gradient(#fffadf,#fff3a5);background-image:-o-linear-gradient(#fffadf,#fff3a5);background-image:linear-gradient(#fffadf,#fff3a5)}.ui-overlay-e{background-image:none;border-width:0}.ui-body-e,.ui-body-e input,.ui-body-e select,.ui-body-e textarea,.ui-body-e button{font-family:Helvetica,Arial,sans-serif}.ui-body-e .ui-link-inherit{color:#333}.ui-body-e .ui-link{color:#2489ce;font-weight:bold}.ui-body-e .ui-link:visited{color:#2489ce}.ui-body-e .ui-link:hover{color:#2489ce}.ui-body-e .ui-link:active{color:#2489ce}.ui-btn-up-e{border:1px solid #f4c63f;background:#fadb4e;font-weight:bold;color:#222;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#ffefaa),to(#ffe155));background-image:-webkit-linear-gradient(#ffefaa,#ffe155);background-image:-moz-linear-gradient(#ffefaa,#ffe155);background-image:-ms-linear-gradient(#ffefaa,#ffe155);background-image:-o-linear-gradient(#ffefaa,#ffe155);background-image:linear-gradient(#ffefaa,#ffe155)}.ui-btn-up-e:visited,.ui-btn-up-e a.ui-link-inherit{color:#222}.ui-btn-hover-e{border:1px solid #f2c43d;background:#fbe26f;font-weight:bold;color:#111;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff5ba),to(#fbdd52));background-image:-webkit-linear-gradient(#fff5ba,#fbdd52);background-image:-moz-linear-gradient(#fff5ba,#fbdd52);background-image:-ms-linear-gradient(#fff5ba,#fbdd52);background-image:-o-linear-gradient(#fff5ba,#fbdd52);background-image:linear-gradient(#fff5ba,#fbdd52)}.ui-btn-hover-e:visited,.ui-btn-hover-e:hover,.ui-btn-hover-e a.ui-link-inherit{color:#333}.ui-btn-down-e{border:1px solid #f2c43d;background:#fceda7;font-weight:bold;color:#111;text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left top,left bottom,from(#f8d94c),to(#fadb4e));background-image:-webkit-linear-gradient(#f8d94c,#fadb4e);background-image:-moz-linear-gradient(#f8d94c,#fadb4e);background-image:-ms-linear-gradient(#f8d94c,#fadb4e);background-image:-o-linear-gradient(#f8d94c,#fadb4e);background-image:linear-gradient(#f8d94c,#fadb4e)}.ui-btn-down-e:visited,.ui-btn-down-e:hover,.ui-btn-down-e a.ui-link-inherit{color:#333}.ui-btn-up-e,.ui-btn-hover-e,.ui-btn-down-e{font-family:Helvetica,Arial,sans-serif;text-decoration:none}a.ui-link-inherit{text-decoration:none!important}.ui-btn-active{border:1px solid #2373a5;background:#5393c5;font-weight:bold;color:#fff;cursor:pointer;text-shadow:0 1px 1px #3373a5;text-decoration:none;background-image:-webkit-gradient(linear,left top,left bottom,from(#5393c5),to(#6facd5));background-image:-webkit-linear-gradient(#5393c5,#6facd5);background-image:-moz-linear-gradient(#5393c5,#6facd5);background-image:-ms-linear-gradient(#5393c5,#6facd5);background-image:-o-linear-gradient(#5393c5,#6facd5);background-image:linear-gradient(#5393c5,#6facd5);font-family:Helvetica,Arial,sans-serif}.ui-btn-active:visited,.ui-btn-active:hover,.ui-btn-active a.ui-link-inherit{color:#fff}.ui-btn-inner{border-top:1px solid #fff;border-color:rgba(255,255,255,.3)}.ui-corner-tl{-moz-border-radius-topleft:.6em;-webkit-border-top-left-radius:.6em;border-top-left-radius:.6em}.ui-corner-tr{-moz-border-radius-topright:.6em;-webkit-border-top-right-radius:.6em;border-top-right-radius:.6em}.ui-corner-bl{-moz-border-radius-bottomleft:.6em;-webkit-border-bottom-left-radius:.6em;border-bottom-left-radius:.6em}.ui-corner-br{-moz-border-radius-bottomright:.6em;-webkit-border-bottom-right-radius:.6em;border-bottom-right-radius:.6em}.ui-corner-top{-moz-border-radius-topleft:.6em;-webkit-border-top-left-radius:.6em;border-top-left-radius:.6em;-moz-border-radius-topright:.6em;-webkit-border-top-right-radius:.6em;border-top-right-radius:.6em}.ui-corner-bottom{-moz-border-radius-bottomleft:.6em;-webkit-border-bottom-left-radius:.6em;border-bottom-left-radius:.6em;-moz-border-radius-bottomright:.6em;-webkit-border-bottom-right-radius:.6em;border-bottom-right-radius:.6em}.ui-corner-right{-moz-border-radius-topright:.6em;-webkit-border-top-right-radius:.6em;border-top-right-radius:.6em;-moz-border-radius-bottomright:.6em;-webkit-border-bottom-right-radius:.6em;border-bottom-right-radius:.6em}.ui-corner-left{-moz-border-radius-topleft:.6em;-webkit-border-top-left-radius:.6em;border-top-left-radius:.6em;-moz-border-radius-bottomleft:.6em;-webkit-border-bottom-left-radius:.6em;border-bottom-left-radius:.6em}.ui-corner-all{-moz-border-radius:.6em;-webkit-border-radius:.6em;border-radius:.6em}.ui-corner-none{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.ui-br{border-bottom:#828282;border-bottom:rgba(130,130,130,.3);border-bottom-width:1px;border-bottom-style:solid}.ui-disabled{opacity:.3}.ui-disabled,.ui-disabled a{cursor:default!important;pointer-events:none}.ui-disabled .ui-btn-text{-ms-filter:"alpha(opacity=30)";filter:alpha(opacity=30);zoom:1}.ui-icon,.ui-icon-searchfield:after{background:#666;background:rgba(0,0,0,.4);background-image:url(../img/icons-18-white.png);background-repeat:no-repeat;-moz-border-radius:9px;-webkit-border-radius:9px;border-radius:9px}.ui-icon-alt{background:#fff;background:rgba(255,255,255,.3);background-image:url(../img/icons-18-black.png);background-repeat:no-repeat}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-resolution:240dpi){.ui-icon-plus,.ui-icon-minus,.ui-icon-delete,.ui-icon-arrow-r,.ui-icon-arrow-l,.ui-icon-arrow-u,.ui-icon-arrow-d,.ui-icon-check,.ui-icon-gear,.ui-icon-refresh,.ui-icon-forward,.ui-icon-back,.ui-icon-grid,.ui-icon-star,.ui-icon-alert,.ui-icon-info,.ui-icon-home,.ui-icon-search,.ui-icon-searchfield:after,.ui-icon-checkbox-off,.ui-icon-checkbox-on,.ui-icon-radio-off,.ui-icon-radio-on{background-image:url(../img/icons-36-white.png);-moz-background-size:776px 18px;-o-background-size:776px 18px;-webkit-background-size:776px 18px;background-size:776px 18px}.ui-icon-alt{background-image:url(../img/icons-36-black.png)}}.ui-icon-plus{background-position:-0 50%}.ui-icon-minus{background-position:-36px 50%}.ui-icon-delete{background-position:-72px 50%}.ui-icon-arrow-r{background-position:-108px 50%}.ui-icon-arrow-l{background-position:-144px 50%}.ui-icon-arrow-u{background-position:-180px 50%}.ui-icon-arrow-d{background-position:-216px 50%}.ui-icon-check{background-position:-252px 50%}.ui-icon-gear{background-position:-288px 50%}.ui-icon-refresh{background-position:-324px 50%}.ui-icon-forward{background-position:-360px 50%}.ui-icon-back{background-position:-396px 50%}.ui-icon-grid{background-position:-432px 50%}.ui-icon-star{background-position:-468px 50%}.ui-icon-alert{background-position:-504px 50%}.ui-icon-info{background-position:-540px 50%}.ui-icon-home{background-position:-576px 50%}.ui-icon-search,.ui-icon-searchfield:after{background-position:-612px 50%}.ui-icon-checkbox-off{background-position:-684px 50%}.ui-icon-checkbox-on{background-position:-648px 50%}.ui-icon-radio-off{background-position:-756px 50%}.ui-icon-radio-on{background-position:-720px 50%}.ui-checkbox .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.ui-icon-checkbox-off,.ui-icon-radio-off{background-color:transparent}.ui-checkbox-on .ui-icon,.ui-radio-on .ui-icon{background-color:#4596ce}.ui-icon-loading{background:url(../img/ajax-loader.gif);background-size:46px 46px}.ui-btn-corner-tl{-moz-border-radius-topleft:1em;-webkit-border-top-left-radius:1em;border-top-left-radius:1em}.ui-btn-corner-tr{-moz-border-radius-topright:1em;-webkit-border-top-right-radius:1em;border-top-right-radius:1em}.ui-btn-corner-bl{-moz-border-radius-bottomleft:1em;-webkit-border-bottom-left-radius:1em;border-bottom-left-radius:1em}.ui-btn-corner-br{-moz-border-radius-bottomright:1em;-webkit-border-bottom-right-radius:1em;border-bottom-right-radius:1em}.ui-btn-corner-top{-moz-border-radius-topleft:1em;-webkit-border-top-left-radius:1em;border-top-left-radius:1em;-moz-border-radius-topright:1em;-webkit-border-top-right-radius:1em;border-top-right-radius:1em}.ui-btn-corner-bottom{-moz-border-radius-bottomleft:1em;-webkit-border-bottom-left-radius:1em;border-bottom-left-radius:1em;-moz-border-radius-bottomright:1em;-webkit-border-bottom-right-radius:1em;border-bottom-right-radius:1em}.ui-btn-corner-right{-moz-border-radius-topright:1em;-webkit-border-top-right-radius:1em;border-top-right-radius:1em;-moz-border-radius-bottomright:1em;-webkit-border-bottom-right-radius:1em;border-bottom-right-radius:1em}.ui-btn-corner-left{-moz-border-radius-topleft:1em;-webkit-border-top-left-radius:1em;border-top-left-radius:1em;-moz-border-radius-bottomleft:1em;-webkit-border-bottom-left-radius:1em;border-bottom-left-radius:1em}.ui-btn-corner-all{-moz-border-radius:1em;-webkit-border-radius:1em;border-radius:1em}.ui-corner-tl,.ui-corner-tr,.ui-corner-bl,.ui-corner-br,.ui-corner-top,.ui-corner-bottom,.ui-corner-right,.ui-corner-left,.ui-corner-all,.ui-btn-corner-tl,.ui-btn-corner-tr,.ui-btn-corner-bl,.ui-btn-corner-br,.ui-btn-corner-top,.ui-btn-corner-bottom,.ui-btn-corner-right,.ui-btn-corner-left,.ui-btn-corner-all{-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.ui-overlay{background:#666;opacity:.5;filter:Alpha(Opacity=50);position:absolute;width:100%;height:100%}.ui-overlay-shadow{-moz-box-shadow:0 0 12px rgba(0,0,0,.6);-webkit-box-shadow:0 0 12px rgba(0,0,0,.6);box-shadow:0 0 12px rgba(0,0,0,.6)}.ui-shadow{-moz-box-shadow:0 1px 4px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 4px rgba(0,0,0,.3);box-shadow:0 1px 4px rgba(0,0,0,.3)}.ui-bar-a .ui-shadow,.ui-bar-b .ui-shadow,.ui-bar-c .ui-shadow{-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.ui-shadow-inset{-moz-box-shadow:inset 0 1px 4px rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 4px rgba(0,0,0,.2);box-shadow:inset 0 1px 4px rgba(0,0,0,.2)}.ui-icon-shadow{-moz-box-shadow:0 1px 0 rgba(255,255,255,.4);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.4);box-shadow:0 1px 0 rgba(255,255,255,.4)}.ui-btn:focus,.ui-link-inherit:focus{outline:0}.ui-btn.ui-focus{z-index:1}.ui-focus,.ui-btn:focus{-moz-box-shadow:inset 0 0 3px #387bbe,0px 0 9px #387bbe;-webkit-box-shadow:inset 0 0 3px #387bbe,0px 0 9px #387bbe;box-shadow:inset 0 0 3px #387bbe,0px 0 9px #387bbe}.ui-input-text.ui-focus,.ui-input-search.ui-focus{-moz-box-shadow:0 0 12px #387bbe;-webkit-box-shadow:0 0 12px #387bbe;box-shadow:0 0 12px #387bbe}.ui-mobile-nosupport-boxshadow *{-moz-box-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui-mobile-nosupport-boxshadow .ui-focus,.ui-mobile-nosupport-boxshadow .ui-btn:focus,.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus{outline-width:1px;outline-style:auto}.ui-mobile,.ui-mobile body{height:99.9%}.ui-mobile fieldset,.ui-page{padding:0;margin:0}.ui-mobile a img,.ui-mobile fieldset{border-width:0}.ui-mobile-viewport{margin:0;overflow-x:visible;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}body.ui-mobile-viewport,div.ui-mobile-viewport{overflow-x:hidden}.ui-mobile [data-role=page],.ui-mobile [data-role=dialog],.ui-page{top:0;left:0;width:100%;min-height:100%;position:absolute;display:none;border:0}.ui-mobile .ui-page-active{display:block;overflow:visible}.ui-page{outline:0}@media screen and (orientation:portrait){.ui-mobile,.ui-mobile .ui-page{min-height:420px}}@media screen and (orientation:landscape){.ui-mobile,.ui-mobile .ui-page{min-height:300px}}.ui-loading .ui-loader{display:block}.ui-loader{display:none;z-index:9999999;position:fixed;top:50%;left:50%;border:0}.ui-loader-default{background:0;opacity:.18;width:46px;height:46px;margin-left:-23px;margin-top:-23px}.ui-loader-verbose{width:200px;opacity:.88;box-shadow:0 1px 1px -1px #fff;height:auto;margin-left:-110px;margin-top:-43px;padding:10px}.ui-loader-default h1{font-size:0;width:0;height:0;overflow:hidden}.ui-loader-verbose h1{font-size:16px;margin:0;text-align:center}.ui-loader .ui-icon{background-color:#000;display:block;margin:0;width:44px;height:44px;padding:1px;-webkit-border-radius:36px;-moz-border-radius:36px;border-radius:36px}.ui-loader-verbose .ui-icon{margin:0 auto 10px;opacity:.75}.ui-loader-textonly{padding:15px;margin-left:-115px}.ui-loader-textonly .ui-icon{display:none}.ui-loader-fakefix{position:absolute}.ui-mobile-rendering>*{visibility:hidden}.ui-bar,.ui-body{position:relative;padding:.4em 15px;overflow:hidden;display:block;clear:both}.ui-bar{font-size:16px;margin:0}.ui-bar h1,.ui-bar h2,.ui-bar h3,.ui-bar h4,.ui-bar h5,.ui-bar h6{margin:0;padding:0;font-size:16px;display:inline-block}.ui-header,.ui-footer{position:relative;border-left-width:0;border-right-width:0;zoom:1}.ui-header .ui-btn-left,.ui-header .ui-btn-right,.ui-footer .ui-btn-left,.ui-footer .ui-btn-right{position:absolute;top:3px}.ui-header .ui-btn-left,.ui-footer .ui-btn-left{left:5px}.ui-header .ui-btn-right,.ui-footer .ui-btn-right{right:5px}.ui-footer .ui-btn-icon-notext,.ui-header .ui-btn-icon-notext{top:6px}.ui-header .ui-title,.ui-footer .ui-title{min-height:1.1em;text-align:center;font-size:16px;display:block;margin:.6em 30% .8em;padding:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;outline:0!important}.ui-footer .ui-title{margin:.6em 15px .8em}.ui-content{border-width:0;overflow:visible;overflow-x:hidden;padding:15px}.ui-icon{width:18px;height:18px}.ui-nojs{position:absolute;left:-9999px}.ui-hide-label label.ui-input-text,.ui-hide-label label.ui-select,.ui-hide-label label.ui-slider,.ui-hide-label label.ui-submit,.ui-hide-label .ui-controlgroup-label,.ui-hidden-accessible{position:absolute!important;left:-9999px;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ui-mobile-viewport-transitioning,.ui-mobile-viewport-transitioning .ui-page{width:100%;height:100%;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.in{-webkit-animation-timing-function:ease-out;-webkit-animation-duration:350ms;-moz-animation-timing-function:ease-out;-moz-animation-duration:350ms}.out{-webkit-animation-timing-function:ease-in;-webkit-animation-duration:225ms;-moz-animation-timing-function:ease-in;-moz-animation-duration:225}@-webkit-keyframes fadein{from{opacity:0}to{opacity:1}}@-moz-keyframes fadein{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeout{from{opacity:1}to{opacity:0}}@-moz-keyframes fadeout{from{opacity:1}to{opacity:0}}.fade.out{opacity:0;-webkit-animation-duration:125ms;-webkit-animation-name:fadeout;-moz-animation-duration:125ms;-moz-animation-name:fadeout}.fade.in{opacity:1;-webkit-animation-duration:225ms;-webkit-animation-name:fadein;-moz-animation-duration:225ms;-moz-animation-name:fadein}.pop{-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%}.pop.in{-webkit-transform:scale(1);-moz-transform:scale(1);opacity:1;-webkit-animation-name:popin;-moz-animation-name:popin;-webkit-animation-duration:350ms;-moz-animation-duration:350ms}.pop.out{-webkit-animation-name:fadeout;-moz-animation-name:fadeout;opacity:0;-webkit-animation-duration:100ms;-moz-animation-duration:100ms}.pop.in.reverse{-webkit-animation-name:fadein;-moz-animation-name:fadein}.pop.out.reverse{-webkit-transform:scale(.8);-moz-transform:scale(.8);-webkit-animation-name:popout;-moz-animation-name:popout}@-webkit-keyframes popin{from{-webkit-transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);opacity:1}}@-moz-keyframes popin{from{-moz-transform:scale(.8);opacity:0}to{-moz-transform:scale(1);opacity:1}}@-webkit-keyframes popout{from{-webkit-transform:scale(1);opacity:1}to{-webkit-transform:scale(.8);opacity:0}}@-moz-keyframes popout{from{-moz-transform:scale(1);opacity:1}to{-moz-transform:scale(.8);opacity:0}}@-webkit-keyframes slideinfromright{from{-webkit-transform:translateX(100%)}to{-webkit-transform:translateX(0)}}@-moz-keyframes slideinfromright{from{-moz-transform:translateX(100%)}to{-moz-transform:translateX(0)}}@-webkit-keyframes slideinfromleft{from{-webkit-transform:translateX(-100%)}to{-webkit-transform:translateX(0)}}@-moz-keyframes slideinfromleft{from{-moz-transform:translateX(-100%)}to{-moz-transform:translateX(0)}}@-webkit-keyframes slideouttoleft{from{-webkit-transform:translateX(0)}to{-webkit-transform:translateX(-100%)}}@-moz-keyframes slideouttoleft{from{-moz-transform:translateX(0)}to{-moz-transform:translateX(-100%)}}@-webkit-keyframes slideouttoright{from{-webkit-transform:translateX(0)}to{-webkit-transform:translateX(100%)}}@-moz-keyframes slideouttoright{from{-moz-transform:translateX(0)}to{-moz-transform:translateX(100%)}}.slide.out,.slide.in{-webkit-animation-timing-function:ease-out;-webkit-animation-duration:350ms;-moz-animation-timing-function:ease-out;-moz-animation-duration:350ms}.slide.out{-webkit-transform:translateX(-100%);-webkit-animation-name:slideouttoleft;-moz-transform:translateX(-100%);-moz-animation-name:slideouttoleft}.slide.in{-webkit-transform:translateX(0);-webkit-animation-name:slideinfromright;-moz-transform:translateX(0);-moz-animation-name:slideinfromright}.slide.out.reverse{-webkit-transform:translateX(100%);-webkit-animation-name:slideouttoright;-moz-transform:translateX(100%);-moz-animation-name:slideouttoright}.slide.in.reverse{-webkit-transform:translateX(0);-webkit-animation-name:slideinfromleft;-moz-transform:translateX(0);-moz-animation-name:slideinfromleft}.slidefade.out{-webkit-transform:translateX(-100%);-webkit-animation-name:slideouttoleft;-moz-transform:translateX(-100%);-moz-animation-name:slideouttoleft;-webkit-animation-duration:225ms;-moz-animation-duration:225ms}.slidefade.in{-webkit-transform:translateX(0);-webkit-animation-name:fadein;-moz-transform:translateX(0);-moz-animation-name:fadein;-webkit-animation-duration:200ms;-moz-animation-duration:200ms}.slidefade.out.reverse{-webkit-transform:translateX(100%);-webkit-animation-name:slideouttoright;-moz-transform:translateX(100%);-moz-animation-name:slideouttoright;-webkit-animation-duration:200ms;-moz-animation-duration:200ms}.slidefade.in.reverse{-webkit-transform:translateX(0);-webkit-animation-name:fadein;-moz-transform:translateX(0);-moz-animation-name:fadein;-webkit-animation-duration:200ms;-moz-animation-duration:200ms}.slidedown.out{-webkit-animation-name:fadeout;-moz-animation-name:fadeout;-webkit-animation-duration:100ms;-moz-animation-duration:100ms}.slidedown.in{-webkit-transform:translateY(0);-webkit-animation-name:slideinfromtop;-moz-transform:translateY(0);-moz-animation-name:slideinfromtop;-webkit-animation-duration:250ms;-moz-animation-duration:250ms}.slidedown.in.reverse{-webkit-animation-name:fadein;-moz-animation-name:fadein;-webkit-animation-duration:150ms;-moz-animation-duration:150ms}.slidedown.out.reverse{-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-webkit-animation-name:slideouttotop;-moz-animation-name:slideouttotop;-webkit-animation-duration:200ms;-moz-animation-duration:200ms}@-webkit-keyframes slideinfromtop{from{-webkit-transform:translateY(-100%)}to{-webkit-transform:translateY(0)}}@-moz-keyframes slideinfromtop{from{-moz-transform:translateY(-100%)}to{-moz-transform:translateY(0)}}@-webkit-keyframes slideouttotop{from{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(-100%)}}@-moz-keyframes slideouttotop{from{-moz-transform:translateY(0)}to{-moz-transform:translateY(-100%)}}.slideup.out{-webkit-animation-name:fadeout;-moz-animation-name:fadeout;-webkit-animation-duration:100ms;-moz-animation-duration:100ms}.slideup.in{-webkit-transform:translateY(0);-webkit-animation-name:slideinfrombottom;-moz-transform:translateY(0);-moz-animation-name:slideinfrombottom;-webkit-animation-duration:250ms;-moz-animation-duration:250ms}.slideup.in.reverse{-webkit-animation-name:fadein;-moz-animation-name:fadein;-webkit-animation-duration:150ms;-moz-animation-duration:150ms}.slideup.out.reverse{-webkit-transform:translateY(100%);-moz-transform:translateY(100%);-webkit-animation-name:slideouttobottom;-moz-animation-name:slideouttobottom;-webkit-animation-duration:200ms;-moz-animation-duration:200ms}@-webkit-keyframes slideinfrombottom{from{-webkit-transform:translateY(100%)}to{-webkit-transform:translateY(0)}}@-moz-keyframes slideinfrombottom{from{-moz-transform:translateY(100%)}to{-moz-transform:translateY(0)}}@-webkit-keyframes slideouttobottom{from{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(100%)}}@-moz-keyframes slideouttobottom{from{-moz-transform:translateY(0)}to{-moz-transform:translateY(100%)}}.viewport-flip{-webkit-perspective:1000;-moz-perspective:1000;position:absolute}.flip{-webkit-backface-visibility:hidden;-webkit-transform:translateX(0);-moz-backface-visibility:hidden;-moz-transform:translateX(0)}.flip.out{-webkit-transform:rotateY(-90deg) scale(.9);-webkit-animation-name:flipouttoleft;-webkit-animation-duration:175ms;-moz-transform:rotateY(-90deg) scale(.9);-moz-animation-name:flipouttoleft;-moz-animation-duration:175ms}.flip.in{-webkit-animation-name:flipintoright;-webkit-animation-duration:225ms;-moz-animation-name:flipintoright;-moz-animation-duration:225ms}.flip.out.reverse{-webkit-transform:rotateY(90deg) scale(.9);-webkit-animation-name:flipouttoright;-moz-transform:rotateY(90deg) scale(.9);-moz-animation-name:flipouttoright}.flip.in.reverse{-webkit-animation-name:flipintoleft;-moz-animation-name:flipintoleft}@-webkit-keyframes flipouttoleft{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(-90deg) scale(.9)}}@-moz-keyframes flipouttoleft{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(-90deg) scale(.9)}}@-webkit-keyframes flipouttoright{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(90deg) scale(.9)}}@-moz-keyframes flipouttoright{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(90deg) scale(.9)}}@-webkit-keyframes flipintoleft{from{-webkit-transform:rotateY(-90deg) scale(.9)}to{-webkit-transform:rotateY(0)}}@-moz-keyframes flipintoleft{from{-moz-transform:rotateY(-90deg) scale(.9)}to{-moz-transform:rotateY(0)}}@-webkit-keyframes flipintoright{from{-webkit-transform:rotateY(90deg) scale(.9)}to{-webkit-transform:rotateY(0)}}@-moz-keyframes flipintoright{from{-moz-transform:rotateY(90deg) scale(.9)}to{-moz-transform:rotateY(0)}}.viewport-turn{-webkit-perspective:1000;-moz-perspective:1000;position:absolute}.turn{-webkit-backface-visibility:hidden;-webkit-transform:translateX(0);-webkit-transform-origin:0 0;-moz-backface-visibility:hidden;-moz-transform:translateX(0);-moz-transform-origin:0 0}.turn.out{-webkit-transform:rotateY(-90deg) scale(.9);-webkit-animation-name:flipouttoleft;-moz-transform:rotateY(-90deg) scale(.9);-moz-animation-name:flipouttoleft;-webkit-animation-duration:125ms;-moz-animation-duration:125ms}.turn.in{-webkit-animation-name:flipintoright;-moz-animation-name:flipintoright;-webkit-animation-duration:250ms;-moz-animation-duration:250ms}.turn.out.reverse{-webkit-transform:rotateY(90deg) scale(.9);-webkit-animation-name:flipouttoright;-moz-transform:rotateY(90deg) scale(.9);-moz-animation-name:flipouttoright}.turn.in.reverse{-webkit-animation-name:flipintoleft;-moz-animation-name:flipintoleft}@-webkit-keyframes flipouttoleft{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(-90deg) scale(.9)}}@-moz-keyframes flipouttoleft{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(-90deg) scale(.9)}}@-webkit-keyframes flipouttoright{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(90deg) scale(.9)}}@-moz-keyframes flipouttoright{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(90deg) scale(.9)}}@-webkit-keyframes flipintoleft{from{-webkit-transform:rotateY(-90deg) scale(.9)}to{-webkit-transform:rotateY(0)}}@-moz-keyframes flipintoleft{from{-moz-transform:rotateY(-90deg) scale(.9)}to{-moz-transform:rotateY(0)}}@-webkit-keyframes flipintoright{from{-webkit-transform:rotateY(90deg) scale(.9)}to{-webkit-transform:rotateY(0)}}@-moz-keyframes flipintoright{from{-moz-transform:rotateY(90deg) scale(.9)}to{-moz-transform:rotateY(0)}}.flow{-webkit-transform-origin:50% 30%;-moz-transform-origin:50% 30%;-webkit-box-shadow:0 0 20px rgba(0,0,0,.4);-moz-box-shadow:0 0 20px rgba(0,0,0,.4)}.ui-dialog.flow{-webkit-transform-origin:none;-moz-transform-origin:none;-webkit-box-shadow:none;-moz-box-shadow:none}.flow.out{-webkit-transform:translateX(-100%) scale(.7);-webkit-animation-name:flowouttoleft;-webkit-animation-timing-function:ease;-webkit-animation-duration:350ms;-moz-transform:translateX(-100%) scale(.7);-moz-animation-name:flowouttoleft;-moz-animation-timing-function:ease;-moz-animation-duration:350ms}.flow.in{-webkit-transform:translateX(0) scale(1);-webkit-animation-name:flowinfromright;-webkit-animation-timing-function:ease;-webkit-animation-duration:350ms;-moz-transform:translateX(0) scale(1);-moz-animation-name:flowinfromright;-moz-animation-timing-function:ease;-moz-animation-duration:350ms}.flow.out.reverse{-webkit-transform:translateX(100%);-webkit-animation-name:flowouttoright;-moz-transform:translateX(100%);-moz-animation-name:flowouttoright}.flow.in.reverse{-webkit-animation-name:flowinfromleft;-moz-animation-name:flowinfromleft}@-webkit-keyframes flowouttoleft{0%{-webkit-transform:translateX(0) scale(1)}60%,70%{-webkit-transform:translateX(0) scale(.7)}100%{-webkit-transform:translateX(-100%) scale(.7)}}@-moz-keyframes flowouttoleft{0%{-moz-transform:translateX(0) scale(1)}60%,70%{-moz-transform:translateX(0) scale(.7)}100%{-moz-transform:translateX(-100%) scale(.7)}}@-webkit-keyframes flowouttoright{0%{-webkit-transform:translateX(0) scale(1)}60%,70%{-webkit-transform:translateX(0) scale(.7)}100%{-webkit-transform:translateX(100%) scale(.7)}}@-moz-keyframes flowouttoright{0%{-moz-transform:translateX(0) scale(1)}60%,70%{-moz-transform:translateX(0) scale(.7)}100%{-moz-transform:translateX(100%) scale(.7)}}@-webkit-keyframes flowinfromleft{0%{-webkit-transform:translateX(-100%) scale(.7)}30%,40%{-webkit-transform:translateX(0) scale(.7)}100%{-webkit-transform:translateX(0) scale(1)}}@-moz-keyframes flowinfromleft{0%{-moz-transform:translateX(-100%) scale(.7)}30%,40%{-moz-transform:translateX(0) scale(.7)}100%{-moz-transform:translateX(0) scale(1)}}@-webkit-keyframes flowinfromright{0%{-webkit-transform:translateX(100%) scale(.7)}30%,40%{-webkit-transform:translateX(0) scale(.7)}100%{-webkit-transform:translateX(0) scale(1)}}@-moz-keyframes flowinfromright{0%{-moz-transform:translateX(100%) scale(.7)}30%,40%{-moz-transform:translateX(0) scale(.7)}100%{-moz-transform:translateX(0) scale(1)}}.ui-grid-a,.ui-grid-b,.ui-grid-c,.ui-grid-d{overflow:hidden}.ui-block-a,.ui-block-b,.ui-block-c,.ui-block-d,.ui-block-e{margin:0;padding:0;border:0;float:left;min-height:1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui-grid-solo .ui-block-a{display:block;float:none}.ui-grid-a .ui-block-a,.ui-grid-a .ui-block-b{width:49.95%}.ui-grid-a>:nth-child(n){width:50%;margin-right:-.5px}.ui-grid-a .ui-block-a{clear:left}.ui-grid-b .ui-block-a,.ui-grid-b .ui-block-b,.ui-grid-b .ui-block-c{width:33.25%}.ui-grid-b>:nth-child(n){width:33.333%;margin-right:-.5px}.ui-grid-b .ui-block-a{clear:left}.ui-grid-c .ui-block-a,.ui-grid-c .ui-block-b,.ui-grid-c .ui-block-c,.ui-grid-c .ui-block-d{width:24.925%}.ui-grid-c>:nth-child(n){width:25%;margin-right:-.5px}.ui-grid-c .ui-block-a{clear:left}.ui-grid-d .ui-block-a,.ui-grid-d .ui-block-b,.ui-grid-d .ui-block-c,.ui-grid-d .ui-block-d,.ui-grid-d .ui-block-e{width:19.925%}.ui-grid-d>:nth-child(n){width:20%}.ui-grid-d .ui-block-a{clear:left}.ui-header-fixed,.ui-footer-fixed{left:0;right:0;width:100%;position:fixed;z-index:1000}.ui-page-pre-in{opacity:0}.ui-header-fixed{top:0}.ui-footer-fixed{bottom:0}.ui-header-fullscreen,.ui-footer-fullscreen{opacity:.9}.ui-page-header-fixed{padding-top:2.6875em}.ui-page-footer-fixed{padding-bottom:2.6875em}.ui-page-header-fullscreen .ui-content,.ui-page-footer-fullscreen .ui-content{padding:0}.ui-fixed-hidden{position:absolute}.ui-page-header-fullscreen .ui-fixed-hidden,.ui-page-footer-fullscreen .ui-fixed-hidden{left:-99999em}.ui-header-fixed .ui-btn,.ui-footer-fixed .ui-btn{z-index:10}.ui-navbar{max-width:100%}.ui-navbar ul{list-style:none;margin:0;padding:0;position:relative;display:block;border:0;max-width:100%;overflow:hidden}.ui-navbar li .ui-btn{display:block;text-align:center;margin:0 -1px 0 0;border-right-width:0}.ui-navbar li .ui-btn-icon-right .ui-icon{right:6px}.ui-navbar li:last-child .ui-btn,.ui-navbar .ui-grid-duo .ui-block-b .ui-btn{margin-right:0;border-right-width:1px}.ui-header .ui-navbar li:last-child .ui-btn,.ui-footer .ui-navbar li:last-child .ui-btn,.ui-header .ui-navbar .ui-grid-duo .ui-block-b .ui-btn,.ui-footer .ui-navbar .ui-grid-duo .ui-block-b .ui-btn{margin-right:-1px;border-right-width:0}.ui-navbar .ui-grid-duo li.ui-block-a:last-child .ui-btn{margin-right:-1px;border-right-width:1px}.ui-header .ui-navbar li .ui-btn,.ui-footer .ui-navbar li .ui-btn{border-top-width:0;border-bottom-width:0}.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn,.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn{margin-right:-5px}.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn,.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn{margin-right:-4px}.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon,.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon{right:8px}.ui-navbar li .ui-btn .ui-btn-inner{padding-top:.7em;padding-bottom:.8em}.ui-navbar li .ui-btn-icon-top .ui-btn-inner{padding-top:30px}.ui-navbar li .ui-btn-icon-bottom .ui-btn-inner{padding-bottom:30px}.ui-btn{display:block;text-align:center;cursor:pointer;position:relative;margin:.5em 0;padding:0}.ui-btn.ui-mini{margin-top:.25em;margin-bottom:.25em}.ui-btn-left,.ui-btn-right,.ui-input-clear,.ui-btn-inline,.ui-grid-a .ui-btn,.ui-grid-b .ui-btn,.ui-grid-c .ui-btn,.ui-grid-d .ui-btn,.ui-grid-e .ui-btn,.ui-grid-solo .ui-btn{margin-right:5px;margin-left:5px}.ui-btn-inner{font-size:16px;padding:.6em 20px;min-width:.75em;display:block;position:relative;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;zoom:1}.ui-btn input,.ui-btn button{z-index:2}.ui-btn-left,.ui-btn-right,.ui-btn-inline{display:inline-block;vertical-align:middle}.ui-btn-block{display:block}.ui-header .ui-btn,.ui-footer .ui-btn{display:inline-block;margin:0}.ui-header .ui-btn-block,.ui-footer .ui-btn-block{display:block}.ui-header .ui-btn-inner,.ui-footer .ui-btn-inner,.ui-mini .ui-btn-inner{font-size:12.5px;padding:.55em 11px .5em}.ui-header .ui-fullsize .ui-btn-inner,.ui-footer .ui-fullsize .ui-btn-inner{font-size:16px;padding:.6em 25px}.ui-btn-icon-notext{width:24px;height:24px}.ui-btn-icon-notext .ui-btn-inner{padding:0;height:100%}.ui-btn-icon-notext .ui-btn-inner .ui-icon{margin:2px 1px 2px 3px;float:left}.ui-btn-text{position:relative;z-index:1;width:100%;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.ui-btn-icon-notext .ui-btn-text{position:absolute;left:-9999px}.ui-btn-icon-left .ui-btn-inner{padding-left:40px}.ui-btn-icon-right .ui-btn-inner{padding-right:40px}.ui-btn-icon-top .ui-btn-inner{padding-top:40px}.ui-btn-icon-bottom .ui-btn-inner{padding-bottom:40px}.ui-header .ui-btn-icon-left .ui-btn-inner,.ui-footer .ui-btn-icon-left .ui-btn-inner,.ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-mini .ui-btn-icon-left .ui-btn-inner{padding-left:30px}.ui-header .ui-btn-icon-right .ui-btn-inner,.ui-footer .ui-btn-icon-right .ui-btn-inner,.ui-mini.ui-btn-icon-right .ui-btn-inner,.ui-mini .ui-btn-icon-right .ui-btn-inner{padding-right:30px}.ui-header .ui-btn-icon-top .ui-btn-inner,.ui-footer .ui-btn-icon-top .ui-btn-inner{padding:30px 3px .5em 3px}.ui-mini.ui-btn-icon-top .ui-btn-inner,.ui-mini .ui-btn-icon-top .ui-btn-inner{padding-top:30px}.ui-header .ui-btn-icon-bottom .ui-btn-inner,.ui-footer .ui-btn-icon-bottom .ui-btn-inner{padding:.55em 3px 30px 3px}.ui-mini.ui-btn-icon-bottom .ui-btn-inner,.ui-mini .ui-btn-icon-bottom .ui-btn-inner{padding-bottom:30px}.ui-btn-icon-notext .ui-icon{display:block;z-index:0}.ui-btn-icon-left>.ui-btn-inner>.ui-icon,.ui-btn-icon-right>.ui-btn-inner>.ui-icon{position:absolute;top:50%;margin-top:-9px}.ui-btn-icon-top .ui-btn-inner .ui-icon,.ui-btn-icon-bottom .ui-btn-inner .ui-icon{position:absolute;left:50%;margin-left:-9px}.ui-btn-icon-left .ui-icon{left:10px}.ui-btn-icon-right .ui-icon{right:10px}.ui-btn-icon-top .ui-icon{top:10px}.ui-btn-icon-bottom .ui-icon{top:auto;bottom:10px}.ui-header .ui-btn-icon-left .ui-icon,.ui-footer .ui-btn-icon-left .ui-icon,.ui-mini.ui-btn-icon-left .ui-icon,.ui-mini .ui-btn-icon-left .ui-icon{left:5px}.ui-header .ui-btn-icon-right .ui-icon,.ui-footer .ui-btn-icon-right .ui-icon,.ui-mini.ui-btn-icon-right .ui-icon,.ui-mini .ui-btn-icon-right .ui-icon{right:5px}.ui-header .ui-btn-icon-top .ui-icon,.ui-footer .ui-btn-icon-top .ui-icon,.ui-mini.ui-btn-icon-top .ui-icon,.ui-mini .ui-btn-icon-top .ui-icon{top:5px}.ui-header .ui-btn-icon-bottom .ui-icon,.ui-footer .ui-btn-icon-bottom .ui-icon,.ui-mini.ui-btn-icon-bottom .ui-icon,.ui-mini .ui-btn-icon-bottom .ui-icon{bottom:5px}.ui-btn-hidden{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-appearance:none;opacity:.1;cursor:pointer;background:#fff;background:rgba(255,255,255,0);filter:Alpha(Opacity=0);font-size:1px;border:0;text-indent:-9999px}.ui-field-contain .ui-btn.ui-submit{margin:0}label.ui-submit{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em;display:block}@media all and (min-width:450px){.ui-field-contain label.ui-submit{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain .ui-btn.ui-submit{width:60%;display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui-hide-label .ui-btn.ui-submit{width:auto}}.ui-collapsible{margin:.5em 0}.ui-collapsible-heading{font-size:16px;display:block;margin:0 -8px;padding:0;border-width:0 0 1px 0;position:relative}.ui-collapsible-heading .ui-btn{text-align:left;margin:0}.ui-collapsible-heading .ui-btn-inner,.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner{padding-left:40px}.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner{padding-left:12px;padding-right:40px}.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner,.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner{padding-right:40px;text-align:center}.ui-collapsible-heading .ui-btn span.ui-btn{position:absolute;left:6px;top:50%;margin:-12px 0 0 0;width:20px;height:20px;padding:1px 0 1px 2px;text-indent:-9999px}.ui-collapsible-heading .ui-btn span.ui-btn .ui-btn-inner{padding:10px 0}.ui-collapsible-heading .ui-btn span.ui-btn .ui-icon{left:0;margin-top:-10px}.ui-collapsible-heading-status{position:absolute;top:-9999px;left:0}.ui-collapsible-content{display:block;margin:0 -8px;padding:10px 16px;border-top:0;background-image:none;font-weight:normal}.ui-collapsible-content-collapsed{display:none}.ui-collapsible-set{margin:.5em 0}.ui-collapsible-set .ui-collapsible{margin:-1px 0 0}.ui-controlgroup,fieldset.ui-controlgroup{padding:0;margin:.5em 0;zoom:1}.ui-controlgroup.ui-mini,fieldset.ui-controlgroup.ui-mini{margin:.25em 0}.ui-field-contain .ui-controlgroup,.ui-field-contain fieldset.ui-controlgroup{margin:0}.ui-bar .ui-controlgroup{margin:0 5px}.ui-controlgroup-label{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .4em}.ui-controlgroup-controls{display:block;width:100%}.ui-controlgroup li{list-style:none}.ui-controlgroup-vertical .ui-btn,.ui-controlgroup-vertical .ui-checkbox,.ui-controlgroup-vertical .ui-radio{margin:0;border-bottom-width:0}.ui-controlgroup-vertical .ui-controlgroup-last{border-bottom-width:1px}.ui-controlgroup-controls label.ui-select{position:absolute;left:-9999px}.ui-controlgroup .ui-btn-icon-notext{width:24px;height:24px}.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner .ui-icon{position:absolute;top:50%;right:50%;margin:-9px -9px 0 0}.ui-controlgroup-horizontal .ui-controlgroup-controls:before,.ui-controlgroup-horizontal .ui-controlgroup-controls:after{content:"";display:table}.ui-controlgroup-horizontal .ui-controlgroup-controls:after{clear:both}.ui-controlgroup-horizontal .ui-controlgroup-controls{zoom:1}.ui-controlgroup-horizontal .ui-btn-inner{text-align:center}.ui-controlgroup-horizontal .ui-btn,.ui-controlgroup-horizontal .ui-select,.ui-controlgroup-horizontal .ui-checkbox,.ui-controlgroup-horizontal .ui-radio{float:left;clear:none;margin:0 -1px 0 0}.ui-controlgroup-horizontal .ui-select .ui-btn,.ui-controlgroup-horizontal .ui-checkbox .ui-btn,.ui-controlgroup-horizontal .ui-radio .ui-btn,.ui-controlgroup-horizontal .ui-checkbox:last-child,.ui-controlgroup-horizontal .ui-radio:last-child{margin-right:0}.ui-controlgroup-horizontal .ui-controlgroup-last{margin-right:0}.ui-controlgroup .ui-checkbox label,.ui-controlgroup .ui-radio label{font-size:16px}@media all and (min-width:450px){.ui-field-contain .ui-controlgroup-label{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain .ui-controlgroup-controls{width:60%;display:inline-block}.ui-field-contain .ui-controlgroup .ui-select{width:100%;display:block}.ui-field-contain .ui-controlgroup-horizontal .ui-select{width:auto}.ui-hide-label .ui-controlgroup-controls{width:100%}}.ui-dialog{background:none!important}.ui-dialog-contain{width:92.5%;max-width:500px;margin:10% auto 15px auto;padding:0}.ui-dialog .ui-header{margin-top:15%;border:0;overflow:hidden}.ui-dialog .ui-header,.ui-dialog .ui-content,.ui-dialog .ui-footer{display:block;position:relative;width:auto}.ui-dialog .ui-header,.ui-dialog .ui-footer{z-index:10;padding:0}.ui-dialog .ui-footer{padding:0 15px}.ui-dialog .ui-content{padding:15px}.ui-dialog{margin-top:-15px}.ui-checkbox,.ui-radio{position:relative;clear:both;margin:0;z-index:1}.ui-checkbox .ui-btn,.ui-radio .ui-btn{margin:.5em 0;text-align:left;z-index:2}.ui-checkbox .ui-btn.ui-mini,.ui-radio .ui-btn.ui-mini{margin:.25em 0}.ui-controlgroup .ui-checkbox .ui-btn,.ui-controlgroup .ui-radio .ui-btn{margin:0}.ui-checkbox .ui-btn-inner,.ui-radio .ui-btn-inner{white-space:normal}.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner{padding-left:45px}.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner{padding-left:36px}.ui-checkbox .ui-btn-icon-right .ui-btn-inner,.ui-radio .ui-btn-icon-right .ui-btn-inner{padding-right:45px}.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner{padding-right:36px}.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner{padding-right:0;padding-left:0;text-align:center}.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner,.ui-radio .ui-btn-icon-bottom .ui-btn-inner{padding-right:0;padding-left:0;text-align:center}.ui-checkbox .ui-icon,.ui-radio .ui-icon{top:1.1em}.ui-checkbox .ui-btn-icon-left .ui-icon,.ui-radio .ui-btn-icon-left .ui-icon{left:15px}.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon,.ui-radio .ui-mini.ui-btn-icon-left .ui-icon{left:9px}.ui-checkbox .ui-btn-icon-right .ui-icon,.ui-radio .ui-btn-icon-right .ui-icon{right:15px}.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon,.ui-radio .ui-mini.ui-btn-icon-right .ui-icon{right:9px}.ui-checkbox .ui-btn-icon-top .ui-icon,.ui-radio .ui-btn-icon-top .ui-icon{top:10px}.ui-checkbox .ui-btn-icon-bottom .ui-icon,.ui-radio .ui-btn-icon-bottom .ui-icon{top:auto;bottom:10px}.ui-checkbox .ui-btn-icon-right .ui-icon,.ui-radio .ui-btn-icon-right .ui-icon{right:15px}.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon,.ui-radio .ui-mini.ui-btn-icon-right .ui-icon{right:9px}.ui-checkbox input,.ui-radio input{position:absolute;left:20px;top:50%;width:10px;height:10px;margin:-5px 0 0 0;outline:0!important;z-index:1}.ui-field-contain,fieldset.ui-field-contain{padding:.8em 0;margin:0;border-width:0 0 1px 0;overflow:visible}.ui-field-contain:last-child{border-bottom-width:0}.ui-field-contain{max-width:100%}@media all and (min-width:450px){.ui-field-contain,.ui-mobile fieldset.ui-field-contain{border-width:0;padding:0;margin:1em 0}}.ui-select{display:block;position:relative}.ui-select select{position:absolute;left:-9999px;top:-9999px}.ui-select .ui-btn{overflow:hidden;opacity:1}.ui-field-contain .ui-select .ui-btn{margin:0}.ui-select .ui-btn select{cursor:pointer;-webkit-appearance:none;left:0;top:0;width:100%;min-height:1.5em;min-height:100%;height:3em;max-height:100%;opacity:0;-ms-filter:"alpha(opacity=0)";filter:alpha(opacity=0);z-index:2}.ui-select .ui-disabled{opacity:.3}@-moz-document url-prefix(){.ui-select .ui-btn select{opacity:.0001}}.ui-select .ui-btn.ui-select-nativeonly{border-radius:0}.ui-select .ui-btn.ui-select-nativeonly select{opacity:1;text-indent:0}.ui-select .ui-btn-icon-right .ui-btn-inner,.ui-select .ui-li-has-count .ui-btn-inner{padding-right:45px}.ui-select .ui-mini.ui-btn-icon-right .ui-btn-inner{padding-right:32px}.ui-select .ui-btn-icon-right.ui-li-has-count .ui-btn-inner{padding-right:80px}.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-btn-inner{padding-right:67px}.ui-select .ui-btn-icon-right .ui-icon{right:15px}.ui-select .ui-mini.ui-btn-icon-right .ui-icon{right:7px}.ui-select .ui-btn-icon-right.ui-li-has-count .ui-li-count{right:45px}.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-li-count{right:32px}label.ui-select{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em;display:block}.ui-select .ui-btn-text,.ui-selectmenu .ui-btn-text{display:block;min-height:1em;overflow:hidden!important}.ui-select .ui-btn-text{text-overflow:ellipsis}.ui-selectmenu{position:absolute;padding:0;z-index:1100!important;width:80%;max-width:350px;padding:6px}.ui-selectmenu .ui-listview{margin:0}.ui-selectmenu .ui-btn.ui-li-divider{cursor:default}.ui-selectmenu-hidden{top:-99999px;left:-9999px}.ui-selectmenu-screen{position:absolute;top:0;left:0;width:100%;height:100%;z-index:99}.ui-screen-hidden,.ui-selectmenu-list .ui-li .ui-icon{display:none}.ui-selectmenu-list .ui-li .ui-icon{display:block}.ui-li.ui-selectmenu-placeholder{display:none}.ui-selectmenu .ui-header .ui-title{margin:.6em 46px .8em}@media all and (min-width:450px){.ui-field-contain label.ui-select{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain .ui-select{width:60%;display:inline-block}.ui-hide-label .ui-select{width:100%}}.ui-selectmenu .ui-header h1:after{content:'.';visibility:hidden}label.ui-input-text{font-size:16px;line-height:1.4;display:block;font-weight:normal;margin:0 0 .3em}input.ui-input-text,textarea.ui-input-text{background-image:none;padding:.4em;margin:.5em 0;line-height:1.4;font-size:16px;display:block;width:100%;outline:0}input.ui-input-text.ui-mini,textarea.ui-input-text.ui-mini{margin:.25em 0}.ui-field-contain input.ui-input-text,.ui-field-contain textarea.ui-input-text{margin:0}input.ui-input-text,textarea.ui-input-text,.ui-input-search{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}input.ui-input-text{-webkit-appearance:none}textarea.ui-input-text{height:50px;-webkit-transition:height 200ms linear;-moz-transition:height 200ms linear;-o-transition:height 200ms linear;transition:height 200ms linear}.ui-input-search{padding:0 30px;margin:.5em 0;background-image:none;position:relative}.ui-input-search.ui-mini{margin:.25em 0}.ui-field-contain .ui-input-search{margin:0}.ui-icon-searchfield:after{position:absolute;left:7px;top:50%;margin-top:-9px;content:"";width:18px;height:18px;opacity:.5}.ui-input-search input.ui-input-text{border:0;width:98%;padding:.4em 0;margin:0;display:block;background:transparent none;outline:0!important}.ui-input-search .ui-input-clear{position:absolute;right:0;top:50%;margin-top:-13px}.ui-mini .ui-input-clear{right:-3px}.ui-input-search .ui-input-clear-hidden{display:none}input.ui-mini,.ui-mini input,textarea.ui-mini{font-size:14px}textarea.ui-mini{height:45px}@media all and (min-width:450px){.ui-field-contain label.ui-input-text{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain input.ui-input-text,.ui-field-contain textarea.ui-input-text,.ui-field-contain .ui-input-search{width:60%;display:inline-block}.ui-hide-label input.ui-input-text,.ui-hide-label textarea.ui-input-text,.ui-hide-label .ui-input-search{width:100%}.ui-input-search input.ui-input-text{width:98%}}.ui-listview{margin:0;counter-reset:listnumbering}.ui-content .ui-listview{margin:-15px}.ui-content .ui-listview-inset{margin:1em 0}.ui-listview,.ui-li{list-style:none;padding:0}.ui-li,.ui-li.ui-field-contain{display:block;margin:0;position:relative;overflow:visible;text-align:left;border-width:0;border-top-width:1px}.ui-li .ui-btn-text a.ui-link-inherit{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-divider,.ui-li-static{padding:.5em 15px;font-size:14px;font-weight:bold}.ui-li-divider .ui-btn-text,.ui-li-static .ui-btn-text{font-size:16px}.ui-li-divider .ui-mini .ui-btn-text,.ui-li-static .ui-mini .ui-btn-text{font-size:inherit}.ui-li-divider{counter-reset:listnumbering}ol.ui-listview .ui-link-inherit:before,ol.ui-listview .ui-li-static:before,.ui-li-dec{font-size:.8em;display:inline-block;padding-right:.3em;font-weight:normal;counter-increment:listnumbering;content:counter(listnumbering) ". "}ol.ui-listview .ui-li-jsnumbering:before{content:""!important}.ui-listview-inset .ui-li{border-right-width:1px;border-left-width:1px}.ui-li:last-child,.ui-li.ui-field-contain:last-child{border-bottom-width:1px}.ui-li>.ui-btn-inner{display:block;position:relative;padding:0}.ui-li .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li{padding:.7em 15px;display:block}.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-thumb{min-height:60px;padding-left:100px}.ui-li-has-icon .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-icon{min-height:20px;padding-left:40px}.ui-li-has-count .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-count,.ui-li-divider.ui-li-has-count{padding-right:45px}.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-arrow{padding-right:40px}.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-arrow.ui-li-has-count{padding-right:75px}.ui-li-heading{font-size:16px;font-weight:bold;display:block;margin:.6em 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-desc{font-size:12px;font-weight:normal;display:block;margin:-.5em 0 .6em;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ui-li-thumb,.ui-listview .ui-li-icon{position:absolute;left:1px;top:0;max-height:80px;max-width:80px}.ui-listview .ui-li-icon{max-height:16px;max-width:16px;left:10px;top:.9em}.ui-li-thumb,.ui-listview .ui-li-icon,.ui-li-content{float:left;margin-right:10px}.ui-li-aside{float:right;width:50%;text-align:right;margin:.3em 0}@media all and (min-width:480px){.ui-li-aside{width:45%}}.ui-li-divider{cursor:default}.ui-li-has-alt .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-alt{padding-right:53px}.ui-li-has-alt.ui-li-has-count .ui-btn-inner a.ui-link-inherit,.ui-li-static.ui-li-has-alt.ui-li-has-count{padding-right:88px}.ui-li-has-count .ui-li-count{position:absolute;font-size:11px;font-weight:bold;padding:.2em .5em;top:50%;margin-top:-.9em;right:10px}.ui-li-has-count.ui-li-divider .ui-li-count,.ui-li-has-count .ui-link-inherit .ui-li-count{margin-top:-.95em}.ui-li-has-arrow.ui-li-has-count .ui-li-count{right:40px}.ui-li-has-alt.ui-li-has-count .ui-li-count{right:53px}.ui-li-link-alt{position:absolute;width:40px;height:100%;border-width:0;border-left-width:1px;top:0;right:0;margin:0;padding:0;z-index:2}.ui-li-link-alt .ui-btn{overflow:hidden;position:absolute;right:8px;top:50%;margin:-13px 0 0 0;border-bottom-width:1px;z-index:-1}.ui-li-link-alt .ui-btn-inner{padding:0;height:100%;position:absolute;width:100%;top:0;left:0}.ui-li-link-alt .ui-btn .ui-icon{right:50%;margin-right:-9px}.ui-li-link-alt .ui-btn-icon-notext .ui-btn-inner .ui-icon{position:absolute;top:50%;margin-top:-9px}.ui-listview * .ui-btn-inner>.ui-btn>.ui-btn-inner{border-top:0}.ui-listview-filter{border-width:0;overflow:hidden;margin:-15px -15px 15px -15px}.ui-listview-filter .ui-input-search{margin:5px;width:auto;display:block}.ui-listview-filter-inset{margin:-15px -5px -15px -5px;background:transparent}.ui-li.ui-screen-hidden{display:none}@media only screen and (min-device-width:768px) and (max-device-width:1024px){.ui-li .ui-btn-text{overflow:visible}}label.ui-slider{font-size:16px;line-height:1.4;font-weight:normal;margin:0 0 .3em;display:block}input.ui-slider-input,.ui-field-contain input.ui-slider-input{display:inline-block;width:50px;background-image:none;padding:.4em;margin:.5em 0;line-height:1.4;font-size:16px;outline:0}input.ui-slider-input.ui-mini,.ui-field-contain input.ui-slider-input.ui-mini{width:45px;margin:.25em 0;font-size:14px}.ui-field-contain input.ui-slider-input{margin:0}input.ui-slider-input,.ui-field-contain input.ui-slider-input{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;box-sizing:content-box}select.ui-slider-switch{display:none}div.ui-slider{position:relative;display:inline-block;overflow:visible;height:15px;padding:0;margin:0 2% 0 20px;top:4px;width:65%}div.ui-slider-mini{height:12px;margin-left:10px;top:2px}div.ui-slider-bg{border:0;height:100%;padding-right:8px}.ui-controlgroup a.ui-slider-handle,a.ui-slider-handle{position:absolute;z-index:1;top:50%;width:28px;height:28px;margin-top:-15px;margin-left:-15px;outline:0}a.ui-slider-handle .ui-btn-inner{padding:0;height:100%}div.ui-slider-mini a.ui-slider-handle{height:14px;width:14px;margin:-8px 0 0 -7px}div.ui-slider-mini a.ui-slider-handle .ui-btn-inner{height:30px;width:30px;padding:0;margin:-9px 0 0 -9px;border-top:0}@media all and (min-width:450px){.ui-field-contain label.ui-slider{vertical-align:top;display:inline-block;width:20%;margin:0 2% 0 0}.ui-field-contain div.ui-slider{width:43%}.ui-field-contain div.ui-slider-switch{width:5.5em}}div.ui-slider-switch{height:32px;margin-left:0;width:5.8em}a.ui-slider-handle-snapping{-webkit-transition:left 70ms linear;-moz-transition:left 70ms linear}div.ui-slider-switch .ui-slider-handle{margin-top:1px}.ui-slider-inneroffset{margin:0 16px;position:relative;z-index:1}div.ui-slider-switch.ui-slider-mini{width:5em;height:29px}div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset{margin:0 15px 0 14px}div.ui-slider-switch.ui-slider-mini .ui-slider-handle{width:25px;height:25px;margin:1px 0 0 -13px}div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner{height:30px;width:30px;padding:0;margin:0}span.ui-slider-label{position:absolute;text-align:center;width:100%;overflow:hidden;font-size:16px;top:0;line-height:2;min-height:100%;border-width:0;white-space:nowrap}.ui-slider-mini span.ui-slider-label{font-size:14px}span.ui-slider-label-a{z-index:1;left:0;text-indent:-1.5em}span.ui-slider-label-b{z-index:0;right:0;text-indent:1.5em}.ui-slider-inline{width:120px;display:inline-block}
--------------------------------------------------------------------------------
/public/js/jquery.mobile-1.1.1.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery Mobile v1.1.1 1981b3f5ec22675ae47df8f0bdf9622e7780e90e jquerymobile.com | jquery.org/license */
2 | (function(l,t,k){typeof define==="function"&&define.amd?define(["jquery"],function(E){k(E,l,t);return E.mobile}):k(l.jQuery,l,t)})(this,document,function(l,t,k,E){(function(a,c,b,d){function e(a){for(;a&&typeof a.originalEvent!=="undefined";)a=a.originalEvent;return a}function g(b){for(var e={},g,d;b;){g=a.data(b,s);for(d in g)if(g[d])e[d]=e.hasVirtualBinding=true;b=b.parentNode}return e}function f(){y&&(clearTimeout(y),y=0);y=setTimeout(function(){G=y=0;A.length=0;F=false;H=true},a.vmouse.resetTimerDuration)}
3 | function j(b,g,c){var f,h;if(!(h=c&&c[b])){if(c=!c)a:{for(c=g.target;c;){if((h=a.data(c,s))&&(!b||h[b]))break a;c=c.parentNode}c=null}h=c}if(h){f=g;var c=f.type,j,F;f=a.Event(f);f.type=b;h=f.originalEvent;j=a.event.props;c.search(/^(mouse|click)/)>-1&&(j=w);if(h)for(F=j.length;F;)b=j[--F],f[b]=h[b];if(c.search(/mouse(down|up)|click/)>-1&&!f.which)f.which=1;if(c.search(/^touch/)!==-1&&(b=e(h),c=b.touches,b=b.changedTouches,c=c&&c.length?c[0]:b&&b.length?b[0]:d))for(h=0,len=x.length;hh||Math.abs(c.pageY-C)>h;flags=g(b.target);z&&!d&&j("vmousecancel",b,flags);j("vmousemove",b,flags);f()}}function v(a){if(!H){H=true;var b=g(a.target),c;j("vmouseup",a,b);if(!z&&(c=j("vclick",a,b))&&c.isDefaultPrevented())c=e(a).changedTouches[0],A.push({touchID:G,x:c.clientX,y:c.clientY}),F=true;j("vmouseout",a,b);z=false;f()}}function n(b){var b=
6 | a.data(b,s),e;if(b)for(e in b)if(b[e])return true;return false}function k(){}function p(b){var e=b.substr(1);return{setup:function(){n(this)||a.data(this,s,{});a.data(this,s)[b]=true;l[b]=(l[b]||0)+1;l[b]===1&&J.bind(e,h);a(this).bind(e,k);if(M)l.touchstart=(l.touchstart||0)+1,l.touchstart===1&&J.bind("touchstart",q).bind("touchend",v).bind("touchmove",m).bind("scroll",o)},teardown:function(){--l[b];l[b]||J.unbind(e,h);M&&(--l.touchstart,l.touchstart||J.unbind("touchstart",q).unbind("touchmove",m).unbind("touchend",
7 | v).unbind("scroll",o));var g=a(this),c=a.data(this,s);c&&(c[b]=false);g.unbind(e,k);n(this)||g.removeData(s)}}}var s="virtualMouseBindings",u="virtualTouchID",c="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),x="clientX clientY pageX pageY screenX screenY".split(" "),w=a.event.props.concat(a.event.mouseHooks?a.event.mouseHooks.props:[]),l={},y=0,t=0,C=0,z=false,A=[],F=false,H=false,M="addEventListener"in b,J=a(b),N=1,G=0;a.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,
8 | resetTimerDuration:1500};for(var K=0;K7);a.fn[e]=function(a){return a?this.bind(e,a):this.trigger(e)};a.fn[e].delay=50;j[e]=a.extend(j[e],{setup:function(){if(q)return false;a(f.start)},teardown:function(){if(q)return false;a(f.stop)}});f=function(){function f(){var b=d(),g=s(n);if(b!==n)p(n=b,g),a(c).trigger(e);else if(g!==n)location.href=location.href.replace(/#.*/,"")+g;j=setTimeout(f,a.fn[e].delay)}var h={},j,n=d(),k=function(a){return a},p=
10 | k,s=k;h.start=function(){j||f()};h.stop=function(){j&&clearTimeout(j);j=b};a.browser.msie&&!q&&function(){var b,c;h.start=function(){if(!b)c=(c=a.fn[e].src)&&c+d(),b=a('').hide().one("load",function(){c||p(d());f()}).attr("src",c||"javascript:0").insertAfter("body")[0].contentWindow,g.onpropertychange=function(){try{if(event.propertyName==="title")b.document.title=g.title}catch(a){}}};h.stop=k;s=function(){return d(b.location.href)};p=function(c,d){var f=b.document,
11 | h=a.fn[e].domain;if(c!==d)f.title=g.title,f.open(),h&&f.write('