diff --git a/.htaccess b/.htaccess
index 7582d23..35846ad 100644
--- a/.htaccess
+++ b/.htaccess
@@ -12,4 +12,10 @@ Options +FollowSymLinks -Multiviews
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteRule ^My_Messages$ view_all_messages.php [NC,L]
+ RewriteRule ^My_Orders$ view_all_my_orders_list.php [NC,L]
+ RewriteRule ^My_Transactions$ view_all_my_transactions.php [NC,L]
+ RewriteRule ^Recent_Transactions$ view_all_recent_transactions.php [NC,L]
+ RewriteRule ^traders$ view_all_traders_list.php [NC,L]
+
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
deleted file mode 100644
index e7bedf3..0000000
--- a/.idea/copyright/profiles_settings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/.idea/exchange.iml b/.idea/exchange.iml
deleted file mode 100644
index c956989..0000000
--- a/.idea/exchange.iml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 72abef0..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index 2afdc8f..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
deleted file mode 100644
index 9b751a3..0000000
--- a/.idea/workspace.xml
+++ /dev/null
@@ -1,404 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- DEFINITION_ORDER
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- project
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- project
-
-
- true
-
-
-
- DIRECTORY
-
- false
-
-
-
-
-
-
-
-
-
- 1505535005966
-
-
- 1505535005966
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/JS/load_more_my_messages.js b/JS/load_more_my_messages.js
new file mode 100644
index 0000000..f91ee29
--- /dev/null
+++ b/JS/load_more_my_messages.js
@@ -0,0 +1,97 @@
+/**
+ * Created by Abhishek Kumar Sinha on 9/27/2017.
+ */
+
+$(document).ready(function(){
+ var loading = false;
+
+ $total_records = getTotalMyMessages();
+
+ $records_per_page = 2;
+ $number_of_pages = Math.ceil($total_records / $records_per_page);
+ $current_page = 1;
+ $start=($current_page*$records_per_page)-$records_per_page;
+
+ loadMoreMyMessagesInitial();
+
+ $current_page = 2;
+
+ $(window).scroll(function() {
+ // console.log($(window).scrollTop() + window.innerHeight, $(document).height() - 35);
+ if($(window).scrollTop() + window.innerHeight > $(document).height()-5) {
+ $start = ($current_page*$records_per_page)-$records_per_page;
+ if($current_page <= $number_of_pages && loading == false) {
+ loadMoreMyMessages($start,$records_per_page);
+ $current_page++;
+ }
+ }
+ });
+
+
+});
+
+function getTotalMyMessages() {
+ $total_records = 0;
+ var job = 'total_my_messages';
+ $.ajax({
+ url: "ajax/MyMessagesTotal.php",
+ data: {job: job},
+ async: false,
+ type:"post",
+ success: function(data) {
+ $total_records = data;
+ },
+ error: function(xhr) {
+ $total_records = 0;
+ }
+ });
+ return $total_records;
+}
+
+function loadMoreMyMessagesInitial() {
+ loadMoreMyMessages($start,$records_per_page);
+}
+
+function loadMoreMyMessages($start,$records_per_page) {
+ var loading = true;
+ $.ajax({
+ url: "ajax/loadMoreMyMessages.php",
+ type:"post",
+ data: {req: 'loadMoreMyMessages', records_per_page: $records_per_page, start: $start},
+ beforeSend: function(){
+ $('.ajax-loader-span').html(" ");
+ },
+ complete: function() {
+ $('.ajax-loader-span').remove();
+ },
+ success: function(data) {
+ var IS_JSON = true;
+ try {
+ var d = jQuery.parseJSON(data);
+ }
+ catch(err) {
+ IS_JSON = false;
+ }
+ if(IS_JSON) {
+ var v = '0 message';
+ if(isArray(d.msg) && d.msg.length != 0) {
+ v = '';
+ var si = 0;
+ for (var k=0; k<= d.msg.length-1; k++) {
+ si = k+1;
+ v += '
';
+ v += ''+d.msg[k].order_id+' ';
+ v += ''+d.msg[k].messages+' ';
+ v += ''+my_date_format(d.msg[k].datetime)+' ';
+ v += ' ';
+ }
+ }
+ $("#myMessagesTable").append(v);
+ }
+ },
+ error: function(xhr) {
+ //console.log(xhr);
+ }
+ });
+ loading = false;
+}
\ No newline at end of file
diff --git a/JS/load_more_my_orders.js b/JS/load_more_my_orders.js
new file mode 100644
index 0000000..45cdea2
--- /dev/null
+++ b/JS/load_more_my_orders.js
@@ -0,0 +1,74 @@
+/**
+ * Created by Abhishek Kumar Sinha on 9/27/2017.
+ */
+
+$(document).ready(function(){
+ var loading = false;
+
+ $total_records = getTotalMyOrders();
+
+ $records_per_page = 2;
+ $number_of_pages = Math.ceil($total_records / $records_per_page);
+ $current_page = 1;
+ $start=($current_page*$records_per_page)-$records_per_page;
+
+ loadMoreMyOrdersInitial();
+
+ $current_page = 2;
+
+ $(window).scroll(function() {
+ if($(window).scrollTop() + window.innerHeight > $(document).height()-5) {
+ $start = ($current_page*$records_per_page)-$records_per_page;
+ if($current_page <= $number_of_pages && loading == false) {
+ loadMoreMyOrders($start,$records_per_page);
+ $current_page++;
+ }
+ }
+ });
+});
+
+function getTotalMyOrders() {
+ $total_records = 0;
+ var job = 'total_my_orders';
+ $.ajax({
+ url: "ajax/MyOrdersTotal.php",
+ data: {job: job},
+ async: false,
+ type:"post",
+ success: function(data) {
+ $total_records = data;
+ },
+ error: function(xhr) {
+ $total_records = 0;
+ }
+ });
+ return $total_records;
+}
+
+function loadMoreMyOrdersInitial() {
+ loadMoreMyOrders($start,$records_per_page);
+}
+
+function loadMoreMyOrders($start,$records_per_page) {
+ var loading = true;
+ $.ajax({
+ url: "ajax/loadMoreMyOrders.php",
+ type:"post",
+ data: {req: 'loadMoreMyOrders', records_per_page: $records_per_page, start: $start},
+ beforeSend: function(){
+ $('.ajax-loader-span').html(" ");
+ },
+ complete: function() {
+ $('.ajax-loader-span').remove();
+ },
+ success: function(data) {
+ if ($.trim(data) != '' || $.trim(data) != undefined) {
+ $('#view_all_orders_tb').append(data);
+ }
+ },
+ error: function(xhr) {
+ //console.log(xhr);
+ }
+ });
+ loading = false;
+}
\ No newline at end of file
diff --git a/JS/load_more_my_transactions.js b/JS/load_more_my_transactions.js
new file mode 100644
index 0000000..d863282
--- /dev/null
+++ b/JS/load_more_my_transactions.js
@@ -0,0 +1,96 @@
+/**
+ * Created by Abhishek Kumar Sinha on 9/27/2017.
+ */
+
+$(document).ready(function(){
+ var loading = false;
+
+ $total_records = getTotalMyTransactions();
+
+ $records_per_page = 2;
+ $number_of_pages = Math.ceil($total_records / $records_per_page);
+ $current_page = 1;
+ $start=($current_page*$records_per_page)-$records_per_page;
+
+ loadMoreMyTransactionsInitial();
+
+ $current_page = 2;
+
+ $(window).scroll(function() {
+ if($(window).scrollTop() + window.innerHeight > $(document).height()-5) {
+ $start = ($current_page*$records_per_page)-$records_per_page;
+ if($current_page <= $number_of_pages && loading == false) {
+ loadMoreMyTransactions($start,$records_per_page);
+ $current_page++;
+ }
+ }
+ });
+});
+
+function getTotalMyTransactions() {
+ $total_records = 0;
+ var job = 'total_my_transactions';
+ $.ajax({
+ url: "ajax/MyTransactionsTotal.php",
+ data: {job: job},
+ async: false,
+ type:"post",
+ success: function(data) {
+ $total_records = data;
+ },
+ error: function(xhr) {
+ $total_records = 0;
+ }
+ });
+ return $total_records;
+}
+
+function loadMoreMyTransactionsInitial() {
+ loadMoreMyTransactions($start,$records_per_page);
+}
+
+function loadMoreMyTransactions($start,$records_per_page) {
+ var loading = true;
+ $.ajax({
+ url: "ajax/loadMoreMyTransactions.php",
+ type:"post",
+ data: {req: 'loadMoreMyTransactions', records_per_page: $records_per_page, start: $start},
+ beforeSend: function(){
+ $('.ajax-loader-span').html(" ");
+ },
+ complete: function() {
+ $('.ajax-loader-span').remove();
+ },
+ success: function(data) {
+ var IS_JSON = true;
+ try {
+ var d = jQuery.parseJSON(data);
+ }
+ catch(err) {
+ IS_JSON = false;
+ }
+ if(IS_JSON) {
+ var v = '0 transactions';
+ if(isArray(d.trade_list) && d.trade_list.length != 0) {
+ v = '';
+ for (var k=0; k<= d.trade_list.length-1; k++) {
+ v += '';
+ v += '';
+ v += ''+d.trade_list[k].SELLER+' ';
+ v += ''+d.trade_list[k].BUYER+' ';
+ v += '$ '+d.trade_list[k].TRADE_PRICE+' ';
+ v += ''+d.trade_list[k].TRADED_QTY+' ';
+ v += '$ '+(d.trade_list[k].TRADED_QTY * d.trade_list[k].TRADE_PRICE).toFixed(5)+' ';
+ v += ''+my_date_format(d.trade_list[k].InsertDate)+' ';
+ v += ' ';
+ }
+ }
+ $("#myTransactionsTable").append(v);
+ }
+ },
+ error: function(xhr) {
+ //console.log(xhr);
+ }
+ });
+ loading = false;
+}
\ No newline at end of file
diff --git a/JS/load_more_recent_transactions.js b/JS/load_more_recent_transactions.js
new file mode 100644
index 0000000..189a07f
--- /dev/null
+++ b/JS/load_more_recent_transactions.js
@@ -0,0 +1,99 @@
+/**
+ * Created by Abhishek Kumar Sinha on 9/27/2017.
+ */
+
+$(document).ready(function(){
+ var loading = false;
+
+ $total_records = getTotalRecentTransactions();
+
+ $records_per_page = 2;
+ $number_of_pages = Math.ceil($total_records / $records_per_page);
+ $current_page = 1;
+ $start=($current_page*$records_per_page)-$records_per_page;
+
+ loadMoreRecentTransactionsInitial();
+
+ $current_page = 2;
+
+ $(window).scroll(function() {
+ if($(window).scrollTop() + window.innerHeight > $(document).height()-5) {
+ $start = ($current_page*$records_per_page)-$records_per_page;
+ console.log($current_page, $number_of_pages);
+ if($current_page <= $number_of_pages && loading == false) {
+ console.log('hello');
+ loadMoreRecentTransactions($start,$records_per_page);
+ $current_page++;
+ }
+ }
+ });
+});
+
+function getTotalRecentTransactions() {
+ $total_records = 0;
+ var job = 'total_recent_transactions';
+ $.ajax({
+ url: "ajax/recentTransactionsTotal.php",
+ data: {job: job},
+ async: false,
+ type:"post",
+ success: function(data) {
+ $total_records = data;
+ },
+ error: function(xhr) {
+ $total_records = 0;
+ }
+ });
+ return $total_records;
+}
+
+function loadMoreRecentTransactionsInitial() {
+ loadMoreRecentTransactions($start,$records_per_page);
+}
+
+function loadMoreRecentTransactions($start,$records_per_page) {
+ var loading = true;
+ $.ajax({
+ url: "ajax/loadMoreRecentTransactions.php",
+ type:"post",
+ data: {req: 'loadMoreRecentTransactions', records_per_page: $records_per_page, start: $start},
+ beforeSend: function(){
+ $('.ajax-loader-span').html(" ");
+ },
+ complete: function() {
+ $('.ajax-loader-span').remove();
+ },
+ success: function(data) {
+ console.log(data);
+ var IS_JSON = true;
+ try {
+ var d = jQuery.parseJSON(data);
+ }
+ catch(err) {
+ IS_JSON = false;
+ }
+ if(IS_JSON) {
+ var v = '0 transactions';
+ if(isArray(d.trade_list) && d.trade_list.length != 0) {
+ v = '';
+ for (var k=0; k<= d.trade_list.length-1; k++) {
+ v += '';
+ v += '';
+ v += ''+d.trade_list[k].SELLER+' ';
+ v += ''+d.trade_list[k].BUYER+' ';
+ v += '$ '+d.trade_list[k].TRADE_PRICE+' ';
+ v += ''+d.trade_list[k].TRADED_QTY+' ';
+ v += '$ '+(d.trade_list[k].TRADED_QTY * d.trade_list[k].TRADE_PRICE).toFixed(5)+' ';
+ v += ''+my_date_format(d.trade_list[k].InsertDate)+' ';
+ v += ' ';
+ }
+ }
+ $("#myTransactionsTable").append(v);
+ }
+ },
+ error: function(xhr) {
+ //console.log(xhr);
+ }
+ });
+ loading = false;
+}
\ No newline at end of file
diff --git a/JS/main.js b/JS/main.js
index 2c62d34..24743cf 100644
--- a/JS/main.js
+++ b/JS/main.js
@@ -3,20 +3,30 @@ $(document).ready(function() {
market_order();
refresh_tables();
tradeList();
+ tradersList();
checkLoginStatusJS();
+ //MyOrders();
+ MyTransactions();
+ load_messages();
});
-/* function to open a link with class popup in new window */
-/*$(document).on('click', 'a.popup', function () {
- newwindow=window.open($(this).attr('href'),'','height=300,width=600');
- if (window.focus) {newwindow.focus()}
- return false;
-});*/
-
-function displayError(msg) {
+function displayNotice(msg, _type) {
var v = ''+msg+' ';
- //$('#MsgModel').find('h4#myModalLabelMsg').addClass('text-warning').text('Warning!');
- $('#MsgModel').find('ul.msg-ul').removeClass('text-success').addClass('text-danger').html(v);
+
+ switch (_type) {
+ case 'success':
+ $('#MsgModel').find('ul.msg-ul').removeClass('text-danger text-warning').addClass('text-info').html(v);
+ break;
+ case 'failure':
+ $('#MsgModel').find('ul.msg-ul').removeClass('text-info text-warning').addClass('text-danger').html(v);
+ break;
+ case 'warning':
+ $('#MsgModel').find('ul.msg-ul').removeClass('text-danger text-info').addClass('text-warning').html(v);
+ break;
+ default:
+ $('#MsgModel').find('ul.msg-ul').removeClass('text-danger text-warning').addClass('text-info').html(v);
+ }
+
$('#MsgModel').modal('toggle');
}
@@ -25,18 +35,27 @@ function buy() {
$('.process').on('click', function() {
var btn = $(this);
var id = btn.attr('id');
- var item_qty = btn.parent().find('input[type=text]').first().val();
- var item_price = btn.parent().find('input[type=text]').last().val();
+ var item_qty = null;
+ var item_price = null;
+
+ if($.trim(id)=="buy_btn") {
+ item_qty = $('#buy_btc').val();
+ item_price = $('#buy_btc_price').val();
+ } else if($.trim(id)=="sell_btn") {
+ item_qty = $('#sell_btc').val();
+ item_price = $('#sell_btc_price').val();
+ } else {
+ return false;
+ }
if(item_qty !== '' && item_qty !== undefined && item_qty !== null) {
if(item_price !== '' && item_price !== undefined && item_price !== null) {
placeOrder(id, item_qty, item_price);
} else {
- //alert('Please insert a price.');
- displayError('Please insert some price.');
+ displayNotice('Please insert some price.', "warning");
}
} else {
- displayError('Please insert some quantity.');
+ displayNotice('Please insert some quantity.', "warning");
}
});
}
@@ -52,8 +71,8 @@ function placeOrder(id, item_qty, item_price) {
method: 'post',
url: 'ajax/pending_orders.php',
data: { subject:subject, btn_id:btn_id, qty:qty, price:price },
- error: function() {
- console.log("An error occurred.");
+ error: function(xhr, status, error) {
+ console.log(xhr.responseText);
},
success: function(data) {
@@ -66,21 +85,29 @@ function placeOrder(id, item_qty, item_price) {
}
if(IS_JSON) {
+ //console.log(d);
if(d.error == true) {
$msg = d.msg;
- displayError($msg);
+ displayNotice($msg, "failure");
} else if(d.order != null && d.order.error == true && d.order.message != null) {
- displayError(d.order.message);
+ displayNotice(d.order.message, "failure");
} else if(d.user == '') {
- displayError('There was a problem in identifying the user.');
+ displayNotice('There was a problem in identifying the user.', "failure");
} else {
$('#empty_msg').hide();
+ var trade = "";
+ if($.trim(btn_id)=="buy_btn") {
+ trade = "buy";
+ } else if ($.trim(btn_id)=="sell_btn") {
+ trade = "sell";
+ }
+ displayNotice('You entered a '+trade+' order for '+qty+' token at $ '+price+'.', "success");
run_OrderMatcingAlgorithm();
+ MyOrders();
}
} else {
- displayError('Something went wrong. Please contact the administrator.');
+ displayNotice('Something went wrong. Please contact the administrator.', "failure");
}
-
}
});
@@ -90,6 +117,10 @@ function myTimeoutFunction()
{
run_OrderMatcingAlgorithm();
tradeList();
+ tradersList();
+ MyOrders();
+ MyTransactions();
+ load_messages();
setTimeout(myTimeoutFunction, 3000);
}
@@ -104,10 +135,34 @@ function run_OrderMatcingAlgorithm() {
success: function(data) {
//console.log(data);
}
- }).error(function() {
- console.log('error')
+ }).error(function(xhr, status, error) {
+ console.log(xhr.responseText);
}).success(function(data) {
load_fresh_table_data();
+
+ var IS_JSON = true;
+ try {
+ var d = jQuery.parseJSON(data);
+ }
+ catch(err) {
+ IS_JSON = false;
+ }
+
+ if(IS_JSON) {
+ //console.log(d);
+ if (d.error == false && d.msg=="userLoggedIn") {
+ if (isArray(d.order) && d.order.length != 0) {
+ for (var k = 0; k <= d.order.length - 1; k++) {
+ $.notify({
+ title: "Congrats!: ",
+ message: d.order[k]
+ },{
+ type: 'success'
+ });
+ }
+ }
+ }
+ }
});
}
@@ -119,8 +174,8 @@ function get_my_balance() {
success: function(data) {
// console.log(data);
}
- }).error(function() {
- console.log('error')
+ }).error(function(xhr, status, error) {
+ console.log(xhr.responseText);
}).success(function(data) {
var IS_JSON = true;
try {
@@ -151,8 +206,8 @@ function load_fresh_table_data() {
method:'post',
url:'ajax/refresh_table.php',
data: { task : 'refresh'}
- }).error(function() {
- console.log('error')
+ }).error(function(xhr, status, error) {
+ console.log(xhr.responseText);
}).success(function(data) {
if(data !== '') {
var d = jQuery.parseJSON(data);
@@ -163,9 +218,9 @@ function load_fresh_table_data() {
for (var j=0; j<=d.buys.length-1 ; j++) {
t += '';
t += '';
- t += ' ₹ '+d.buys[j].Price+' ';
+ t += ' $ '+d.buys[j].Price+' ';
t += ''+d.buys[j].Quantity+' ';
- t += ' ₹ '+d.buys[j].TOTAL_COST+' ';
+ t += ' $ '+d.buys[j].TOTAL_COST+' ';
t += ' ';
}
}
@@ -176,9 +231,9 @@ function load_fresh_table_data() {
for (var k=0; k<=d.sells.length-1 ; k++) {
v += '';
v += '';
- v += ' ₹ '+d.sells[k].Price+' ';
+ v += ' $ '+d.sells[k].Price+' ';
v += ''+d.sells[k].Quantity+' ';
- v += ' ₹ '+d.sells[k].TOTAL_COST+' ';
+ v += ' $ '+d.sells[k].TOTAL_COST+' ';
v += ' ';
}
}
@@ -189,16 +244,14 @@ function load_fresh_table_data() {
}
/**Market Order JS*/
-
function market_order() {
$('.market_submit_btn').on('click', function() {
var market_order_qty = $('#market_order').val();
- var btn = $(this);
- var market_order_type = btn.attr('id');
+ var market_order_type = $("input[name='marketOrder']:checked").val();
- if(market_order_qty == '' || market_order_qty < 1) {
- displayError('Please specify valid quantity!');
+ if(market_order_qty == '' || market_order_qty <= 0 || market_order_qty == undefined) {
+ displayNotice('Please specify valid quantity!', "warning");
return;
}
if (market_order_type == 'market_buy_btn' || market_order_type == 'market_sell_btn') {
@@ -209,8 +262,8 @@ function market_order() {
success: function(data) {
//console.log(data);
}
- }).error(function () {
- console.log('Error');
+ }).error(function(xhr, status, error) {
+ console.log(xhr.responseText);
}).success(function (data) {
var IS_JSON = true;
try {
@@ -222,19 +275,16 @@ function market_order() {
if(IS_JSON) {
if(d.error == true) {
- displayError('Oops! Something went wrong. Your order was cancelled. Please enter a valid quantity.');
- console.log(d.msg);
+ displayNotice('Oops! Something went wrong. Your order was cancelled. Please enter a valid quantity.', "failure");
} else{
var v = '';
if(isArray(d.order) && d.order.length != 0) {
if(d.order[0] == 'empty_buy_list') {
v += 'No buy orders available currently.';
- //$('#MsgModel').find('h4#myModalLabelMsg').addClass('text-warning').text('Oops!');
$('#MsgModel').find('ul.msg-ul').removeClass('text-success').addClass('text-danger').html(v);
$('#MsgModel').modal('toggle');
} else if(d.order[0] == 'empty_sell_list') {
v += 'No sell orders available currently.';
- //$('#MsgModel').find('h4#myModalLabelMsg').addClass('text-warning').text('Oops!');
$('#MsgModel').find('ul.msg-ul').removeClass('text-success').addClass('text-danger').html(v);
$('#MsgModel').modal('toggle');
} else {
@@ -242,12 +292,12 @@ function market_order() {
for (var k=0; k<= d.order.length-1; k++) {
v += ''+d.order[k]+' ';
}
- //$('#MsgModel').find('h4#myModalLabelMsg').addClass('text-success').text('Congrats!');
$('#MsgModel').find('ul.msg-ul').removeClass('text-danger').addClass('text-info').html(v);
$('#MsgModel').modal('toggle');
}
}
load_fresh_table_data();
+ MyOrders();
}
}
});
@@ -269,8 +319,8 @@ function tradeList() {
method:'post',
url:'ajax/tradeList.php',
data: { task : 'loadTradeList'}
- }).error(function() {
- console.log('error')
+ }).error(function(xhr, status, error) {
+ console.log(xhr.responseText);
}).success(function(data) {
var IS_JSON = true;
@@ -289,16 +339,57 @@ function tradeList() {
v += '';
v += ''+d.trade_list[k].SELLER+' ';
v += ''+d.trade_list[k].BUYER+' ';
- v += ' ₹ '+d.trade_list[k].TRADE_PRICE+' ';
+ v += '$ '+d.trade_list[k].TRADE_PRICE+' ';
+ v += ''+d.trade_list[k].TRADED_QTY+' ';
+ v += '$ '+(d.trade_list[k].TRADED_QTY * d.trade_list[k].TRADE_PRICE).toFixed(5)+' ';
v += ''+my_date_format(d.trade_list[k].InsertDate)+' ';
v += ' ';
}
+ } else {
+ v += 'No transactions.
';
}
$('#trade-list').html(v);
}
});
}
+/*My Transactions*/
+function MyTransactions() {
+ $.ajax({
+ method:'post',
+ url:'ajax/myTransactions.php',
+ data: { task : 'myTransactions'}
+ }).error(function(xhr, status, error) {
+ console.log(xhr.responseText);
+ }).success(function(data) {
+
+ var IS_JSON = true;
+ try {
+ var d = jQuery.parseJSON(data);
+ }
+ catch(err) {
+ IS_JSON = false;
+ }
+
+ if(IS_JSON) {
+ var v = '';
+ if(isArray(d.trade_list) && d.trade_list.length != 0) {
+ for (var k=0; k<= d.trade_list.length-1; k++) {
+ v += '';
+ v += '';
+ v += ''+d.trade_list[k].SELLER+' ';
+ v += ''+d.trade_list[k].BUYER+' ';
+ v += '$ '+d.trade_list[k].TRADE_PRICE+' ';
+ v += ''+d.trade_list[k].TRADED_QTY+' ';
+ v += '$ '+(d.trade_list[k].TRADED_QTY * d.trade_list[k].TRADE_PRICE).toFixed(5)+' ';
+ v += ''+my_date_format(d.trade_list[k].InsertDate)+' ';
+ v += ' ';
+ }
+ }
+ $('#my-transactions-list').html(v);
+ }
+ });
+}
function checkLoginStatusJS() {
@@ -314,4 +405,131 @@ var my_date_format = function(input){
var date = d.getDate() + " " + month[d.getMonth()] + ", " + d.getFullYear();
var time = d.toLocaleTimeString().toLowerCase().replace(/([\d]+:[\d]+):[\d]+(\s\w+)/g, "$1$2");
return (date + " " + time);
-};
\ No newline at end of file
+};
+
+/*Rename market button name depending on radio btn*/
+$(document).on("change", ".market_radio", function () {
+ var btn_id = $(this).attr('id');
+ var btn_name = "Trade Instantly";
+ if($.trim(btn_id)=="buy") {
+ btn_name = "Buy Instantly";
+ } else if($.trim(btn_id)=="sell") {
+ btn_name = "Sell Instantly";
+ }
+ $("#market_order_btn").prop("value",btn_name);
+});
+
+/*Traders List*/
+function tradersList() {
+ $.ajax({
+ method:'post',
+ url:'ajax/tradersList.php',
+ data: { task : 'loadTradersList'}
+ }).error(function(xhr, status, error) {
+ console.log(xhr.responseText);
+ }).success(function(data) {
+
+ var IS_JSON = true;
+ try {
+ var d = jQuery.parseJSON(data);
+ }
+ catch(err) {
+ IS_JSON = false;
+ }
+
+ if(IS_JSON) {
+ var v = '';
+ if(isArray(d.traders_list) && d.traders_list.length != 0) {
+ for (var k=0; k<= d.traders_list.length-1; k++) {
+ v += '';
+ v += '';
+ v += ''+d.traders_list[k].Name+' ';
+ v += ''+d.traders_list[k].BTC+' ';
+ v += ' $ '+d.traders_list[k].CASH+' ';
+ v += ' ';
+ }
+ }
+ $('#traders-list').html(v);
+ }
+ });
+}
+
+/*My Orders*/
+function MyOrders() {
+ $.ajax({
+ method:'post',
+ url:'ajax/myOrders.php',
+ data: { task : 'loadMyOrdersList'}
+ }).error(function(xhr, status, error) {
+ console.log(xhr.responseText);
+ }).success(function(data) {
+ if ($.trim(data) != '' && $.trim(data) != undefined && $.trim(data) != null) {
+ $('#myOrdersTable').html(data);
+ }
+ });
+}
+
+/*Delete Orders*/
+$(document).on('click', '.del_order', function (e) {
+ e.preventDefault();
+ var id = $(this).attr("id");
+
+ $.ajax({
+ method:'post',
+ url:'ajax/delOrder.php',
+ data: { task : 'delOrder', id:id}
+ }).error(function(xhr, status, error) {
+ console.log(error);
+ }).success(function(data) {
+ //console.log(data);
+ if ($.trim(data) != '' && $.trim(data) != undefined && $.trim(data) != null) {
+ $.notify({
+ title: "Order Deleted!: ",
+ message: "You deleted the order successfully."
+ },{
+ type: 'success'
+ });
+ } else {
+ displayNotice("The order could not be deleted. Try again later.", "failure");
+ }
+ });
+});
+
+/*Messages*/
+function load_messages() {
+ $.ajax({
+ method:'post',
+ url:'ajax/myMessages.php',
+ data: { task : 'loadMyMessagesList'}
+ }).error(function(xhr, status, error) {
+ console.log(error);
+ }).success(function(data) {
+ if ($.trim(data) != '' && $.trim(data) != undefined && $.trim(data) != null) {
+ var IS_JSON = true;
+ try {
+ var d = jQuery.parseJSON(data);
+ }
+ catch(err) {
+ IS_JSON = false;
+ }
+
+ if (IS_JSON) {
+ var v = '0 message';
+ if(isArray(d.msg) && d.msg.length != 0) {
+ v = '';
+ var si = 0;
+ for (var k=0; k<= d.msg.length-1; k++) {
+ si = k+1;
+ v += '';
+ v += ''+si+' ';
+ v += ''+d.msg[k].order_id+' ';
+ v += ''+d.msg[k].messages+' ';
+ v += ''+my_date_format(d.msg[k].datetime)+' ';
+ v += ' ';
+ }
+ }
+ $('#user_msg').html(v);
+ }
+ }
+ });
+}
diff --git a/JS/notify.js b/JS/notify.js
new file mode 100644
index 0000000..49bba54
--- /dev/null
+++ b/JS/notify.js
@@ -0,0 +1,4 @@
+/**
+ * Created by Abhishek Kumar Sinha on 7/29/2017.
+ */
+!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t("object"==typeof exports?require("jquery"):jQuery)}(function(t){function s(s){var e=!1;return t('[data-notify="container"]').each(function(i,n){var a=t(n),o=a.find('[data-notify="title"]').text().trim(),r=a.find('[data-notify="message"]').html().trim(),l=o===t(""+s.settings.content.title+"
").html().trim(),d=r===t(""+s.settings.content.message+"
").html().trim(),g=a.hasClass("alert-"+s.settings.type);return l&&d&&g&&(e=!0),!e}),e}function e(e,n,a){var o={content:{message:"object"==typeof n?n.message:n,title:n.title?n.title:"",icon:n.icon?n.icon:"",url:n.url?n.url:"#",target:n.target?n.target:"-"}};a=t.extend(!0,{},o,a),this.settings=t.extend(!0,{},i,a),this._defaults=i,"-"===this.settings.content.target&&(this.settings.content.target=this.settings.url_target),this.animations={start:"webkitAnimationStart oanimationstart MSAnimationStart animationstart",end:"webkitAnimationEnd oanimationend MSAnimationEnd animationend"},"number"==typeof this.settings.offset&&(this.settings.offset={x:this.settings.offset,y:this.settings.offset}),(this.settings.allow_duplicates||!this.settings.allow_duplicates&&!s(this))&&this.init()}var i={element:"body",position:null,type:"info",allow_dismiss:!0,allow_duplicates:!0,newest_on_top:!1,showProgressbar:!1,placement:{from:"top",align:"right"},offset:20,spacing:10,z_index:1031,delay:5e3,timer:1e3,url_target:"_blank",mouse_over:null,animate:{enter:"animated fadeInDown",exit:"animated fadeOutUp"},onShow:null,onShown:null,onClose:null,onClosed:null,icon_type:"class",template:''};String.format=function(){for(var t=arguments[0],s=1;s .progress-bar').removeClass("progress-bar-"+t.settings.type),t.settings.type=i[n],this.$ele.addClass("alert-"+i[n]).find('[data-notify="progressbar"] > .progress-bar').addClass("progress-bar-"+i[n]);break;case"icon":var a=this.$ele.find('[data-notify="icon"]');"class"===t.settings.icon_type.toLowerCase()?a.removeClass(t.settings.content.icon).addClass(i[n]):(a.is("img")||a.find("img"),a.attr("src",i[n]));break;case"progress":var o=t.settings.delay-t.settings.delay*(i[n]/100);this.$ele.data("notify-delay",o),this.$ele.find('[data-notify="progressbar"] > div').attr("aria-valuenow",i[n]).css("width",i[n]+"%");break;case"url":this.$ele.find('[data-notify="url"]').attr("href",i[n]);break;case"target":this.$ele.find('[data-notify="url"]').attr("target",i[n]);break;default:this.$ele.find('[data-notify="'+n+'"]').html(i[n])}var r=this.$ele.outerHeight()+parseInt(t.settings.spacing)+parseInt(t.settings.offset.y);t.reposition(r)},close:function(){t.close()}}},buildNotify:function(){var s=this.settings.content;this.$ele=t(String.format(this.settings.template,this.settings.type,s.title,s.message,s.url,s.target)),this.$ele.attr("data-notify-position",this.settings.placement.from+"-"+this.settings.placement.align),this.settings.allow_dismiss||this.$ele.find('[data-notify="dismiss"]').css("display","none"),(this.settings.delay<=0&&!this.settings.showProgressbar||!this.settings.showProgressbar)&&this.$ele.find('[data-notify="progressbar"]').remove()},setIcon:function(){"class"===this.settings.icon_type.toLowerCase()?this.$ele.find('[data-notify="icon"]').addClass(this.settings.content.icon):this.$ele.find('[data-notify="icon"]').is("img")?this.$ele.find('[data-notify="icon"]').attr("src",this.settings.content.icon):this.$ele.find('[data-notify="icon"]').append(' ')},styleDismiss:function(){this.$ele.find('[data-notify="dismiss"]').css({position:"absolute",right:"10px",top:"5px",zIndex:this.settings.z_index+2})},styleURL:function(){this.$ele.find('[data-notify="url"]').css({backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)",height:"100%",left:0,position:"absolute",top:0,width:"100%",zIndex:this.settings.z_index+1})},placement:function(){var s=this,e=this.settings.offset.y,i={display:"inline-block",margin:"0px auto",position:this.settings.position?this.settings.position:"body"===this.settings.element?"fixed":"absolute",transition:"all .5s ease-in-out",zIndex:this.settings.z_index},n=!1,a=this.settings;switch(t('[data-notify-position="'+this.settings.placement.from+"-"+this.settings.placement.align+'"]:not([data-closing="true"])').each(function(){e=Math.max(e,parseInt(t(this).css(a.placement.from))+parseInt(t(this).outerHeight())+parseInt(a.spacing))}),this.settings.newest_on_top===!0&&(e=this.settings.offset.y),i[this.settings.placement.from]=e+"px",this.settings.placement.align){case"left":case"right":i[this.settings.placement.align]=this.settings.offset.x+"px";break;case"center":i.left=0,i.right=0}this.$ele.css(i).addClass(this.settings.animate.enter),t.each(Array("webkit-","moz-","o-","ms-",""),function(t,e){s.$ele[0].style[e+"AnimationIterationCount"]=1}),t(this.settings.element).append(this.$ele),this.settings.newest_on_top===!0&&(e=parseInt(e)+parseInt(this.settings.spacing)+this.$ele.outerHeight(),this.reposition(e)),t.isFunction(s.settings.onShow)&&s.settings.onShow.call(this.$ele),this.$ele.one(this.animations.start,function(){n=!0}).one(this.animations.end,function(){s.$ele.removeClass(s.settings.animate.enter),t.isFunction(s.settings.onShown)&&s.settings.onShown.call(this)}),setTimeout(function(){n||t.isFunction(s.settings.onShown)&&s.settings.onShown.call(this)},600)},bind:function(){var s=this;if(this.$ele.find('[data-notify="dismiss"]').on("click",function(){s.close()}),this.$ele.mouseover(function(){t(this).data("data-hover","true")}).mouseout(function(){t(this).data("data-hover","false")}),this.$ele.data("data-hover","false"),this.settings.delay>0){s.$ele.data("notify-delay",s.settings.delay);var e=setInterval(function(){var t=parseInt(s.$ele.data("notify-delay"))-s.settings.timer;if("false"===s.$ele.data("data-hover")&&"pause"===s.settings.mouse_over||"pause"!=s.settings.mouse_over){var i=(s.settings.delay-t)/s.settings.delay*100;s.$ele.data("notify-delay",t),s.$ele.find('[data-notify="progressbar"] > div').attr("aria-valuenow",i).css("width",i+"%")}t<=-s.settings.timer&&(clearInterval(e),s.close())},s.settings.timer)}},close:function(){var s=this,e=parseInt(this.$ele.css(this.settings.placement.from)),i=!1;this.$ele.attr("data-closing","true").addClass(this.settings.animate.exit),s.reposition(e),t.isFunction(s.settings.onClose)&&s.settings.onClose.call(this.$ele),this.$ele.one(this.animations.start,function(){i=!0}).one(this.animations.end,function(){t(this).remove(),t.isFunction(s.settings.onClosed)&&s.settings.onClosed.call(this)}),setTimeout(function(){i||(s.$ele.remove(),s.settings.onClosed&&s.settings.onClosed(s.$ele))},600)},reposition:function(s){var e=this,i='[data-notify-position="'+this.settings.placement.from+"-"+this.settings.placement.align+'"]:not([data-closing="true"])',n=this.$ele.nextAll(i);this.settings.newest_on_top===!0&&(n=this.$ele.prevAll(i)),n.each(function(){t(this).css(e.settings.placement.from,s),s=parseInt(s)+parseInt(e.settings.spacing)+t(this).outerHeight()})}}),t.notify=function(t,s){var i=new e(this,t,s);return i.notify},t.notifyDefaults=function(s){return i=t.extend(!0,{},i,s)},t.notifyClose=function(s){"warning"===s&&(s="danger"),"undefined"==typeof s||"all"===s?t("[data-notify]").find('[data-notify="dismiss"]').trigger("click"):"success"===s||"info"===s||"warning"===s||"danger"===s?t(".alert-"+s+"[data-notify]").find('[data-notify="dismiss"]').trigger("click"):s?t(s+"[data-notify]").find('[data-notify="dismiss"]').trigger("click"):t('[data-notify-position="'+s+'"]').find('[data-notify="dismiss"]').trigger("click")},t.notifyCloseExcept=function(s){"warning"===s&&(s="danger"),"success"===s||"info"===s||"warning"===s||"danger"===s?t("[data-notify]").not(".alert-"+s).find('[data-notify="dismiss"]').trigger("click"):t("[data-notify]").not(s).find('[data-notify="dismiss"]').trigger("click")}});
\ No newline at end of file
diff --git a/README.md b/README.md
index b75830e..ff74117 100644
--- a/README.md
+++ b/README.md
@@ -1,16 +1,44 @@
+# License
+
+Copyright (c) 2017-2018 GitHub Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
# flo-exchange
-This is an order matching algorithm website code inspired by "Bitcoin Exchange Project"
-by David Veksler (http://automagical.rationalmind.net/2013/10/16/bitcoin-order-matching-algorithm/).
-
-The algorithm, however, may not exactly work same as David's as it was modified a little to meet Ranchi Mall's
-Florincoin Exchange project.
+This is a code for setting up an online exchange or trading platform.
The script contains basic functionalities of buying, selling and market order of, in fact, any article that can be traded online
(Florincoin tokens in our case). The system also contains a basic Facebook authentication system to store users basic information.
-It is currently a singe page website with basic display of users, transactions and other important features that an exchange site
-is expected to have.
+The website has basic display of users, transactions and other important features that an exchange site
+is supposed to have.
+# Getting started
+To get started all you need to do is configure tow files:
+ 1. config.php
+ - You can find this file in includes folder. Provide correct details of
+ DB_HOST i.e Database host (normally 127.0.0.1),
+ DB_NAME i.e Database name,
+ DB_USER i.e Database user,
+ DB_PASS i.e Database password
+ 2. fbconfig.php
+ You need to setup a Facebook app on developer.facebook.com
+ Then provide app_id, app_secret and correct $loginUrl in fbconfig.php file
+
+
+Once you have done this you are all set to go.
diff --git a/acc_deact.php b/acc_deact.php
new file mode 100644
index 0000000..ed704fb
--- /dev/null
+++ b/acc_deact.php
@@ -0,0 +1,15 @@
+
+ check_user($_SESSION['user_id']);
+ if(!$is_activated) { ?>
+
+
+
+
Your account is not active. Please contact admin.
+
+
+
+
+
diff --git a/ajax/MyMessagesTotal.php b/ajax/MyMessagesTotal.php
new file mode 100644
index 0000000..a774c03
--- /dev/null
+++ b/ajax/MyMessagesTotal.php
@@ -0,0 +1,26 @@
+check_user($user_id);
+
+ if($validate_user == "" || empty($validate_user)) {
+ return false;
+ }
+ echo $total_my_orders = (int) $OrderClass->total_my_messages();
+ }
+
+ }
diff --git a/ajax/MyOrdersTotal.php b/ajax/MyOrdersTotal.php
new file mode 100644
index 0000000..1ae803b
--- /dev/null
+++ b/ajax/MyOrdersTotal.php
@@ -0,0 +1,27 @@
+check_user($user_id);
+
+ if($validate_user == "" || empty($validate_user)) {
+ return false;
+ }
+ echo $total_my_orders = (int) $OrderClass->total_my_orders();
+ }
+
+}
\ No newline at end of file
diff --git a/ajax/MyTransactionsTotal.php b/ajax/MyTransactionsTotal.php
new file mode 100644
index 0000000..d72b8aa
--- /dev/null
+++ b/ajax/MyTransactionsTotal.php
@@ -0,0 +1,22 @@
+total_my_transactions();
+ }
+
+ }
diff --git a/ajax/OrderMatcingAlgorithmAjax.php b/ajax/OrderMatcingAlgorithmAjax.php
index 2483dfa..e6414fa 100644
--- a/ajax/OrderMatcingAlgorithmAjax.php
+++ b/ajax/OrderMatcingAlgorithmAjax.php
@@ -6,16 +6,46 @@
* Time: 11:13 AM
*/
-require_once '../includes/autoload.php';
+require_once '../includes/imp_files.php';
if (isset($_POST['task']) && trim($_POST['task'])=='run_OrderMatcingAlgorithm') {
- if (class_exists('Orders')) {
+ if (isset($OrderClass, $UserClass)) {
- $order_matching = new Orders();
- $refresh_orders = $order_matching->OrderMatchingService();
+ $refresh_orders = $OrderClass->OrderMatchingService();
+
+ /*If user is logged in user send him messages, if any*/
+ if (checkLoginStatus()) {
+
+ $std = new stdClass();
+ $std->user = null;
+ $std->order = null;
+ $std->error = false;
+ $std->msg = null;
+
+ if (isset($user_id)) {
+
+ $validate_user = $UserClass->check_user($user_id);
+
+ if($validate_user == "" || empty($validate_user)) {
+ $std->error = true;
+ $std->msg = "No such user exist. Please login again.";
+ echo json_encode($std);
+ return false;
+ }
+
+ $std->user = $validate_user;
+ $std->order = $refresh_orders;
+ $std->error = false;
+ $std->msg = "userLoggedIn";
+
+ echo json_encode($std);
+
+ } else {
+ return false;
+ }
+ }
}
-
} else {
return false;
}
\ No newline at end of file
diff --git a/ajax/delOrder.php b/ajax/delOrder.php
new file mode 100644
index 0000000..d412a75
--- /dev/null
+++ b/ajax/delOrder.php
@@ -0,0 +1,35 @@
+check_user($user_id);
+
+ if($validate_user == "" || empty($validate_user)) {
+ return false;
+ }
+
+ $del_order = $OrderClass->del_order($del_id);
+
+ if ($del_order) {
+ print_r($del_order);
+ //return true;
+ }
+ }
+ return false;
+}
\ No newline at end of file
diff --git a/ajax/get_my_balance.php b/ajax/get_my_balance.php
index bb073b2..105a4ef 100644
--- a/ajax/get_my_balance.php
+++ b/ajax/get_my_balance.php
@@ -6,15 +6,11 @@
* Time: 8:36 PM
*/
-require_once '../includes/autoload.php';
+require_once '../includes/imp_files.php';
-if (!isset($_SESSION['user_id'])) {
+if (!checkLoginStatus()) {
return false;
-} else {
- $user_id = $_SESSION['user_id'];
- $user_name = $_SESSION['user_name'];
}
-
if (isset($_POST['task']) && trim($_POST['task'])=='get_my_balance') {
$std = new stdClass();
@@ -24,14 +20,14 @@ if (isset($_POST['task']) && trim($_POST['task'])=='get_my_balance') {
$std->message = array();
$std->error = true;
- if (class_exists('Users') && class_exists('Orders')) {
+ if (isset($OrderClass, $UserClass, $user_id)) {
- $customer = new Users();
- $validate_user = $customer->check_user($user_id);
+ $UserClass = new Users();
+ $validate_user = $UserClass->check_user($user_id);
- $validate_balance = new Orders();
- $cash_balance = $validate_balance->check_customer_balance($assetType = 'traditional', $user_id)->Balance;
- $bit_balance = $validate_balance->check_customer_balance($assetType = 'btc', $user_id)->Balance;
+ $OrderClass = new Orders();
+ $cash_balance = $OrderClass->check_customer_balance($assetType = 'traditional', $user_id)->Balance;
+ $bit_balance = $OrderClass->check_customer_balance($assetType = 'btc', $user_id)->Balance;
$std->users = $validate_user;
$std->cash = $cash_balance;
diff --git a/ajax/loadMoreMyMessages.php b/ajax/loadMoreMyMessages.php
new file mode 100644
index 0000000..1e29374
--- /dev/null
+++ b/ajax/loadMoreMyMessages.php
@@ -0,0 +1,42 @@
+check_user($user_id);
+
+ if($validate_user == "" || empty($validate_user)) {
+ return false;
+ }
+
+ $std = new stdClass();
+ $std->msg = array();
+ $std->error = true;
+
+ if (isset($_POST['records_per_page'], $_POST['start'])) {
+
+ $start = (int) $_POST['start'];
+ $records = (int) $_POST['records_per_page'];
+
+ $megs = $UserClass->list_messages_by_userId($user_id, $start, $records);
+
+ if (is_array($megs) && !empty($megs)) {
+ $std->msg = $megs;
+ $std->error = false;
+ }
+ }
+ echo json_encode($std);
+ }
+}
\ No newline at end of file
diff --git a/ajax/loadMoreMyOrders.php b/ajax/loadMoreMyOrders.php
new file mode 100644
index 0000000..40cc87a
--- /dev/null
+++ b/ajax/loadMoreMyOrders.php
@@ -0,0 +1,88 @@
+check_user($user_id);
+
+ if($validate_user == "" || empty($validate_user)) {
+ return false;
+ }
+
+ if (isset($_POST['records_per_page'], $_POST['start'])) {
+
+ $start = (int) $_POST['start'];
+ $records = (int) $_POST['records_per_page'];
+
+ $iter = "";
+ if (isset($OrderClass, $user_id)) {
+
+ $myOrders = $OrderClass->UserOrdersList($user_id, $start, $records);
+
+ if (is_array($myOrders) && !empty($myOrders)) {
+
+ foreach($myOrders as $myOrder):
+
+ switch ($myOrder->OrderStatusId) {
+ case '0':
+ $status = 'Cancelled';
+ break;
+ case '1':
+ $status = 'Successful';
+ break;
+ case '2':
+ $status = 'Pending';
+ break;
+ case '3':
+ $status = 'Pending';
+ break;
+ default:
+ $status = 'Pending';
+ }
+
+ if($myOrder->OrderStatusId == '1') {
+ $status = 'Successful';
+ } else if ($myOrder->OrderStatusId == '2') {
+ $status = 'Pending';
+ } else if ($myOrder->OrderStatusId == '3'){
+ $status = 'Pending';
+ }
+
+ if($myOrder->OrderTypeId == '1') {
+ $OrderType = 'Sell';
+ } elseif($myOrder->OrderTypeId == '0') {
+ $OrderType = 'Buy';
+ }
+
+ $iter .= "";
+ $iter .= "$myOrder->OfferAssetTypeId ";
+ $iter .= "$myOrder->WantAssetTypeId ";
+ $iter .= "$myOrder->Price ";
+ $iter .= "$myOrder->Quantity ";
+ $iter .= "$status ";
+ $iter .= "".date('d M, Y h:i:sa', strtotime($myOrder->InsertDate))." ";
+ $iter .= "";
+ if (trim($status) == 'Pending') {
+ $iter .= "Cancel ";
+ }
+ $iter .= "";
+ $iter .= " ";
+ endforeach;
+ }
+ }
+ echo $iter;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ajax/loadMoreMyTransactions.php b/ajax/loadMoreMyTransactions.php
new file mode 100644
index 0000000..6eb5e39
--- /dev/null
+++ b/ajax/loadMoreMyTransactions.php
@@ -0,0 +1,42 @@
+check_user($user_id);
+
+ if($validate_user == "" || empty($validate_user)) {
+ return false;
+ }
+
+ $std = new stdClass();
+ $std->msg = array();
+ $std->error = true;
+
+ if (isset($_POST['records_per_page'], $_POST['start'])) {
+
+ $start = (int) $_POST['start'];
+ $records = (int) $_POST['records_per_page'];
+
+ $megs = $UserClass->displayUserTransaction($user_id, $start, $records);
+
+ if (is_array($megs) && !empty($megs)) {
+ $std->trade_list = $megs;
+ $std->error = false;
+ }
+ }
+ echo json_encode($std);
+ }
+}
\ No newline at end of file
diff --git a/ajax/loadMoreRecentTransactions.php b/ajax/loadMoreRecentTransactions.php
new file mode 100644
index 0000000..581e137
--- /dev/null
+++ b/ajax/loadMoreRecentTransactions.php
@@ -0,0 +1,33 @@
+msg = array();
+ $std->error = true;
+
+ if (isset($_POST['records_per_page'], $_POST['start'])) {
+
+ $start = (int) $_POST['start'];
+ $records = (int) $_POST['records_per_page'];
+
+ $megs = $OrderClass->last_transaction_list($start, $records);
+
+ if (is_array($megs) && !empty($megs)) {
+ $std->trade_list = $megs;
+ $std->error = false;
+ }
+ }
+ echo json_encode($std);
+ }
+}
\ No newline at end of file
diff --git a/ajax/market_order-ajax.php b/ajax/market_order-ajax.php
index 7278876..830156d 100644
--- a/ajax/market_order-ajax.php
+++ b/ajax/market_order-ajax.php
@@ -6,13 +6,10 @@
* Time: 7:10 PM
*/
-require_once '../includes/autoload.php';
+require_once '../includes/imp_files.php';
-if (!isset($_SESSION['user_id'])) {
+if (!checkLoginStatus()) {
return false;
-} else {
- $user_id = $_SESSION['user_id'];
- $user_name = $_SESSION['user_name'];
}
if(isset($_POST['job']) && $_POST['job'] == 'market_order') {
@@ -23,10 +20,9 @@ if(isset($_POST['job']) && $_POST['job'] == 'market_order') {
$std->error = false;
$std->msg = null;
- if(class_exists('Orders') && class_exists('Users')) {
+ if (isset($OrderClass, $UserClass, $user_id)) {
- $customer = new Users();
- $validate_user = $customer->check_user($user_id);
+ $validate_user = $UserClass->check_user($user_id);
if($validate_user == "" || empty($validate_user)) {
$std->error = true;
@@ -42,10 +38,10 @@ if(isset($_POST['job']) && $_POST['job'] == 'market_order') {
$std->user = $validate_user;
if(isset($_POST['qty'], $_POST['type'])) {
- $qty = (float)$_POST['qty'];
+ $qty = two_decimal_digit($_POST['qty']);
$order_type = $_POST['type'];
- if($qty > 0) {
+ if($qty >= 0.01) {
if(is_string($order_type)) {
if(trim($order_type) == 'market_buy_btn' || trim($order_type) == 'market_sell_btn') {
@@ -60,8 +56,7 @@ if(isset($_POST['job']) && $_POST['job'] == 'market_order') {
return false;
}
- $Orders = new Orders();
- $run_market_order = $Orders->market_order($order_type, $qty);
+ $run_market_order = $OrderClass->market_order($order_type, abs($qty));
$std->user = $validate_user;
$std->order = $run_market_order;
diff --git a/ajax/myMessages.php b/ajax/myMessages.php
new file mode 100644
index 0000000..a091735
--- /dev/null
+++ b/ajax/myMessages.php
@@ -0,0 +1,32 @@
+msg = null;
+ $std->error = true;
+
+ $my_messages = $UserClass->list_messages_by_userId($user_id, 0, 10);
+
+ if (is_array($my_messages) && !empty($my_messages)) {
+ $std->msg = $my_messages;
+ $std->error = false;
+ }
+
+ echo json_encode($std);
+
+ }
+}
\ No newline at end of file
diff --git a/ajax/myOrders.php b/ajax/myOrders.php
new file mode 100644
index 0000000..27fa46e
--- /dev/null
+++ b/ajax/myOrders.php
@@ -0,0 +1,78 @@
+UserOrdersList($user_id, 0, 10);
+
+ if (is_array($myOrders) && !empty($myOrders)) {
+
+ foreach($myOrders as $myOrder):
+
+ switch ($myOrder->OrderStatusId) {
+ case '0':
+ $status = 'Cancelled';
+ break;
+ case '1':
+ $status = 'Successful';
+ break;
+ case '2':
+ $status = 'Pending';
+ break;
+ case '3':
+ $status = 'Pending';
+ break;
+ default:
+ $status = 'Pending';
+ }
+
+ if($myOrder->OrderStatusId == '1') {
+ $status = 'Successful';
+ } else if ($myOrder->OrderStatusId == '2') {
+ $status = 'Pending';
+ } else if ($myOrder->OrderStatusId == '3'){
+ $status = 'Pending';
+ } else if($myOrder->OrderStatusId == '0') {
+ $status = 'Cancelled';
+ }
+
+ if($myOrder->OrderTypeId == '1') {
+ $OrderType = 'Sell';
+ } elseif($myOrder->OrderTypeId == '0') {
+ $OrderType = 'Buy';
+ }
+
+ $iter .= "";
+ $iter .= "$myOrder->OfferAssetTypeId ";
+ $iter .= "$myOrder->WantAssetTypeId ";
+ $iter .= "$myOrder->Price ";
+ $iter .= "$myOrder->Quantity ";
+ $iter .= "$status ";
+ $iter .= "".date('d M, Y h:i:sa', strtotime($myOrder->InsertDate))." ";
+ $iter .= "";
+ if(trim($status) == 'Pending') {
+ $iter .= "Cancel ";
+ }
+ $iter .= " ";
+ $iter .= " ";
+ endforeach;
+ }
+ }
+ echo $iter;
+} else {
+ return false;
+}
\ No newline at end of file
diff --git a/ajax/myTransactions.php b/ajax/myTransactions.php
new file mode 100644
index 0000000..324f577
--- /dev/null
+++ b/ajax/myTransactions.php
@@ -0,0 +1,33 @@
+trade_list = array();
+ $std->error = true;
+
+ if (isset($UserClass, $user_id)) {
+
+ $tradeList = $UserClass->displayUserTransaction($user_id, 0, 10);
+
+ $std->trade_list = $tradeList;
+ $std->error = false;
+
+ }
+ echo json_encode($std);
+
+} else {
+ return false;
+}
\ No newline at end of file
diff --git a/ajax/pending_orders.php b/ajax/pending_orders.php
index 62d522d..71e097d 100644
--- a/ajax/pending_orders.php
+++ b/ajax/pending_orders.php
@@ -6,43 +6,45 @@
* Time: 1:55 PM
*/
-require_once '../includes/autoload.php';
+require_once '../includes/imp_files.php';
-if (!isset($_SESSION['user_id'])) {
+if (!checkLoginStatus()) {
return false;
-} else {
- $user_id = $_SESSION['user_id'];
- $user_name = $_SESSION['user_name'];
}
if (isset($_POST['subject']) && trim($_POST['subject'])=='placeOrder') {
if (isset($_POST['btn_id'], $_POST['qty'], $_POST['price'])) {
- $btn_id = $_POST['btn_id'];
- $qty = (float) $_POST['qty'];
- $item_price = (float) $_POST['price'];
+ $btn_id = trim($_POST['btn_id']);
+ $qty = two_decimal_digit($_POST['qty']);
+ $item_price = two_decimal_digit($_POST['price']);
$orderStatusId = 2; // 0 -> cancelled; 1 -> complete; 2 -> pending
- if($btn_id == 'buy_btn') {
- $orderTypeId = 0; // It is a buy
- $OfferAssetTypeId= 'INR';
- $WantAssetTypeId = 'FLO';
- } else if($btn_id == 'sell_btn') {
- $orderTypeId = 1; // It is a sell
- $OfferAssetTypeId = 'FLO';
- $WantAssetTypeId = 'INR';
- }
-
$std = new stdClass();
$std->user = null;
$std->order = null;
$std->error = false;
$std->msg = null;
- if ($qty == 0 || $item_price == 0) {
+ if($btn_id == 'buy_btn') {
+ $orderTypeId = 0; // It is a buy
+ $OfferAssetTypeId= 'USD';
+ $WantAssetTypeId = 'RTM';
+ } else if($btn_id == 'sell_btn') {
+ $orderTypeId = 1; // It is a sell
+ $OfferAssetTypeId = 'RTM';
+ $WantAssetTypeId = 'USD';
+ } else {
$std->error = true;
- $std->msg = 'Please insert valid quantity and price.';
+ $std->msg = "Invalid button id.";
+ echo json_encode($std);
+ return false;
+ }
+
+ if ($qty < 0.01 || $item_price < 0.01) {
+ $std->error = true;
+ $std->msg = 'Please insert valid quantity and price. Minimum trade price is 1 cent.';
echo json_encode($std);
return false;
}
@@ -50,10 +52,9 @@ if (isset($_POST['subject']) && trim($_POST['subject'])=='placeOrder') {
$validate_user = "";
$place_order = "";
- if (class_exists('Users') && class_exists('Orders')) {
+ if (isset($OrderClass, $UserClass, $user_id)) {
- $customer = new Users();
- $validate_user = $customer->check_user($user_id);
+ $validate_user = $UserClass->check_user($user_id);
if($validate_user == "" || empty($validate_user)) {
$std->error = true;
@@ -62,8 +63,7 @@ if (isset($_POST['subject']) && trim($_POST['subject'])=='placeOrder') {
return false;
}
- $initial_orders = new Orders();
- $place_order = $initial_orders->insert_pending_order($orderTypeId, $qty, $item_price, $orderStatusId, $OfferAssetTypeId, $WantAssetTypeId);
+ $place_order = $OrderClass->insert_pending_order($orderTypeId, abs($qty), abs($item_price), $orderStatusId, $OfferAssetTypeId, $WantAssetTypeId);
} else {
$std->error = true;
diff --git a/ajax/recentTransactionsTotal.php b/ajax/recentTransactionsTotal.php
new file mode 100644
index 0000000..d689081
--- /dev/null
+++ b/ajax/recentTransactionsTotal.php
@@ -0,0 +1,17 @@
+total_recent_transactions();
+ }
+
+}
diff --git a/ajax/refresh_table.php b/ajax/refresh_table.php
index 050486e..5fdbe60 100644
--- a/ajax/refresh_table.php
+++ b/ajax/refresh_table.php
@@ -6,7 +6,7 @@
* Time: 6:22 PM
*/
-require_once '../includes/autoload.php';
+require_once '../includes/imp_files.php';
if (isset($_POST['task']) && trim($_POST['task'])=='refresh') {
@@ -16,11 +16,10 @@ if (isset($_POST['task']) && trim($_POST['task'])=='refresh') {
$std->message = array();
$std->error = true;
- if (class_exists('Orders')) {
+ if (isset($OrderClass, $UserClass)) {
- $refresh_orders = new Orders();
- $buy_list = $refresh_orders->get_top_buy_sell_list($top_table='active_buy_list', $asc_desc='DESC'); // buy
- $sell_list = $refresh_orders->get_top_buy_sell_list($top_table='active_selling_list', $asc_desc='ASC'); // sell
+ $buy_list = $OrderClass->get_top_buy_sell_list($top_table='active_buy_list', $asc_desc='DESC'); // buy
+ $sell_list = $OrderClass->get_top_buy_sell_list($top_table='active_selling_list', $asc_desc='ASC'); // sell
$std->buys = $buy_list;
$std->sells = $sell_list;
diff --git a/ajax/tradeList.php b/ajax/tradeList.php
index 0c5a3d9..68adb52 100644
--- a/ajax/tradeList.php
+++ b/ajax/tradeList.php
@@ -6,7 +6,7 @@
* Time: 8:38 PM
*/
-require_once '../includes/autoload.php';
+require_once '../includes/imp_files.php';
if (isset($_POST['task']) && trim($_POST['task'])=='loadTradeList') {
@@ -14,10 +14,9 @@ if (isset($_POST['task']) && trim($_POST['task'])=='loadTradeList') {
$std->trade_list = array();
$std->error = true;
- if (class_exists('Orders')) {
+ if (isset($OrderClass, $UserClass)) {
- $OrderClass = new Orders();
- $tradeList = $OrderClass->last_transaction_list();
+ $tradeList = $OrderClass->last_transaction_list(0,10);
$std->trade_list = $tradeList;
$std->error = false;
diff --git a/ajax/tradersList.php b/ajax/tradersList.php
new file mode 100644
index 0000000..34e92f1
--- /dev/null
+++ b/ajax/tradersList.php
@@ -0,0 +1,29 @@
+traders_list = array();
+ $std->error = true;
+
+ if (isset($OrderClass)) {
+
+ $tradersList = $OrderClass->UserBalanceList();
+ if (is_array($tradersList) && !empty($tradersList)) {
+ $std->traders_list = $tradersList;
+ $std->error = false;
+ }
+ }
+ echo json_encode($std);
+
+} else {
+ return false;
+}
\ No newline at end of file
diff --git a/classes/Orders.php b/classes/Orders.php
index 673cea0..97456be 100644
--- a/classes/Orders.php
+++ b/classes/Orders.php
@@ -5,10 +5,11 @@
* Date: 17-Oct-16
* Time: 9:22 AM
*/
+require_once "Users.php";
-class Orders {
+class Orders extends Users {
- private $db_connection = null;
+ protected $db_connection = null;
private $errors = array();
private $orders_table = "orderbook";
private $customers_table = "customer";
@@ -16,6 +17,7 @@ class Orders {
private $top_sell_table = "active_selling_list";
private $customer_balance_table = "assetbalance";
private $transaction_table = "transaction";
+ private $bal_history = "bal_history";
private $customerId = 0;
private $orderTypeId = 0;
private $quantity = 0;
@@ -26,22 +28,6 @@ class Orders {
private $customer_balance = null; // Don't make it 0
private $customer_frozen_balance = null; // Don't make it 0
- protected function databaseConnection()
- {
- // if connection already exists
- if ($this->db_connection != null) {
- return true;
- } else {
- try {
- $this->db_connection = new PDO('mysql:host='. DB_HOST .';dbname='. DB_NAME . ';charset=utf8', DB_USER, DB_PASS);
- return true;
- } catch (PDOException $e) {
- $this->errors[] = MESSAGE_DATABASE_ERROR . $e->getMessage();
- }
- }
- return false;
- }
-
private function insert_order_in_active_table($top_table, $orderId, $price, $quantity) {
if ($this->databaseConnection()) {
@@ -53,16 +39,8 @@ class Orders {
$query->bindParam("user_id", $_SESSION['user_id']);
if ($query->execute()) {
- $query = $this->db_connection->prepare("UPDATE $this->orders_table
- SET `OrderStatusId`='1',`UpdateDate`=NOW()
- WHERE `OrderId`=:order_id AND `CustomerId`= :customer_id
- LIMIT 1");
- $query->bindParam("order_id", $orderId);
- $query->bindParam("customer_id", $_SESSION['user_id']);
-
- if ($query->execute()) {
- return true;
- }
+ $this->updateOrderStatus($orderId, 3);
+ return true;
}
return false;
}
@@ -88,8 +66,22 @@ class Orders {
return false;
}
+ public function record_bal_history($user_id, $balance, $type) {
+ if ($this->databaseConnection()) {
+ $query = $this->db_connection->prepare("INSERT INTO $this->bal_history (`id`, `user_id`, `balance`, `AssetType`, `datetime`)
+ VALUES ('', :uid, :bal, :asset_type, NOW())");
+ $query->bindParam('uid', $user_id);
+ $query->bindParam('bal', $balance);
+ $query->bindParam('asset_type', $type);
- public function update_user_balance($assetType, $balance=null, $user_id) {
+ if ($query->execute()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public function update_user_balance($assetType, $balance=null, $user_id) {
if ($this->databaseConnection()) {
@@ -102,17 +94,18 @@ class Orders {
$sql .= " AND `AssetTypeId`= :asset_type ";
$sql .= "LIMIT 1";
- $query = $this->db_connection->prepare($sql);
+ $query = $this->db_connection->prepare($sql);
- if ($balance != null) {
- $query->bindParam("balance", $balance);
+ if ($balance != null) {
+ $query->bindParam("balance", $balance);
+ }
+ $query->bindParam("user_id", $user_id);
+ $query->bindParam("asset_type", $assetType);
+ if ($query->execute()) {
+ $this->record_bal_history($user_id, $balance, $assetType);
+ return true;
+ }
}
- $query->bindParam("user_id", $user_id);
- $query->bindParam("asset_type", $assetType);
- if ($query->execute()) {
- return true;
- }
- }
return false;
}
return false;
@@ -122,11 +115,13 @@ class Orders {
if ($this->databaseConnection()) {
+ $messages = null;
+
$this->customerId = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : 0;
$this->orderTypeId = $orderTypeId; // 0-> buy; 1 -> sell;
$this->quantity = $qty;
$this->price = $price;
- $this->orderStatusId = $orderStatusId; // 0 -> cancelled; 1 -> complete; 2 -> pending
+ $this->orderStatusId = $orderStatusId; // 0 -> cancelled; 1 -> complete; 2 -> pending; 3 ->order active
$std = new stdClass();
$std->insertedrowid = null;
@@ -140,10 +135,13 @@ class Orders {
// check user balance
$assetType = null;
+ $total_trade_val = null;
if ($this->orderTypeId == 0) {
$assetType = 'traditional';
+ $total_trade_val = $this->quantity * $this->price;
} else if ($this->orderTypeId == 1) {
$assetType = 'btc';
+ $total_trade_val = $this->quantity;
}
$customer_bal = (float)$this->check_customer_balance($assetType, $this->customerId)->Balance;
@@ -151,24 +149,28 @@ class Orders {
$this->customer_balance = $customer_bal;
if ($this->customer_balance == '' || $this->customer_balance == null || !is_float($this->customer_balance)) {
- $std->message = "0 balance: Your account balance is nill.";
+ $messages = "0 balance: Your account balance is nill.";
+ $std->message = $messages;
+ $this->storeMessages($order_id=null, $this->customerId, $messages);
return $std;
}
- $total_trade_val = $this->quantity * $this->price;
+
if ($total_trade_val > $this->customer_balance) {
- $std->message = "Insufficient balance: You have insufficient balance to continue this trade. Please recharge your wallet or lower the quantity.";
+ $messages = "Insufficient balance: You have insufficient balance to continue this trade. Please recharge your wallet or lower the quantity.";
+ $std->message = $messages;
+ $this->storeMessages($order_id=null, $this->customerId, $messages);
return $std;
}
$query = $this->db_connection->prepare("INSERT INTO $this->orders_table (`OrderId`, `CustomerId`, `OrderTypeId`, `OfferAssetTypeId`, `WantAssetTypeId`, `Quantity`, `Price`, `OrderStatusId`, `UpdateDate`, `InsertDate`, `SaveDate`)
- VALUES ('', " . $this->customerId . ", :a, :e, :f, :b, :c, :d, NULL, Now(), NULL)
- ");
+ VALUES ('', " . $this->customerId . ", :a, :e, :f, :b, :c, :d, NULL, Now(), NULL)");
+
$query->bindParam(':a', $this->orderTypeId, PDO::PARAM_STR);
$query->bindParam(':e', $OfferAssetTypeId, PDO::PARAM_STR);
$query->bindParam(':f', $WantAssetTypeId, PDO::PARAM_STR);
$query->bindParam(':b', $this->quantity, PDO::PARAM_STR);
$query->bindParam(':c', $this->price, PDO::PARAM_STR);
- $query->bindParam(':d', $this->orderStatusId, PDO::PARAM_STR);
+ $query->bindParam(':d', $this->orderStatusId);
if ($query->execute()) {
@@ -186,10 +188,15 @@ class Orders {
$top_table = $this->top_sell_table;
}
+ $trade_type = ($this->orderTypeId==1) ? "sell" : "buy";
+ $messages = "You entered a $trade_type order for $qty token at $ $price per token for $ ".$qty*$price;
+
+ $this->storeMessages($insertedrowid, $this->customerId, $messages);
+
// Change the order status to active and insert in active table in DB
$insert_in_active_table = $this->insert_order_in_active_table($top_table, $insertedrowid, $this->price, $this->quantity);
- $this->orderStatusId = 1;
+ $this->orderStatusId = 3; // order activated
$std = new stdClass();
$std->insertedrowid = $insertedrowid;
@@ -201,6 +208,7 @@ class Orders {
$std->insert_date = date('Y-m-d H:i:s');
$std->error = false;
$std->message = "Order moved to active table.";
+
return $std;
}
return null;
@@ -280,12 +288,12 @@ class Orders {
if ($this->databaseConnection()) {
$query = $this->db_connection->query("
- SELECT $this->top_sell_table.price, $this->top_sell_table.Quantity, $this->top_sell_table.orderId, (SELECT `CustomerId` FROM $this->top_buy_table ORDER BY price DESC LIMIT 1) AS BUYER_ID, $this->top_sell_table.CustomerId AS SELLER_ID
+ SELECT $this->top_sell_table.orderId, $this->top_sell_table.price, $this->top_sell_table.Quantity, $this->top_sell_table.orderId, (SELECT `CustomerId` FROM $this->top_buy_table ORDER BY price DESC LIMIT 1) AS BUYER_ID, $this->top_sell_table.CustomerId AS SELLER_ID
FROM $this->top_sell_table, $this->orders_table
WHERE (
($this->top_sell_table.price <= (SELECT `price` FROM `$this->top_buy_table` ORDER BY price DESC LIMIT 1))
AND ($this->orders_table.OrderId = $this->top_sell_table.orderId)
- AND ($this->orders_table.OrderStatusId = '1')
+ AND ($this->orders_table.OrderStatusId = '3')
AND ($this->orders_table.OrderTypeId= '1') )
ORDER BY $this->top_sell_table.price ASC
");
@@ -315,10 +323,24 @@ class Orders {
return false;
}
+ private function updateOrderStatus($orderId=null, $status=null) {
+ if ($this->databaseConnection()) {
+ $query = $this->db_connection->prepare("UPDATE `orderbook` SET `OrderStatusId`= '$status' WHERE `OrderId` = :id LIMIT 1");
+ $query->bindParam("id", $orderId);
+ if ($query->execute()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public function OrderMatchingService() {
if ($this->databaseConnection()) {
+ $message = array();
+ $trade_qty = 0;
+
$this->demanded_qty = ($this->get_highest_demand() != false) ? $this->get_highest_demand()->Quantity : 0;
$buy_order_id = ($this->get_highest_demand() != false) ? $this->get_highest_demand()->OrderId : 0;
$buy_amount = ($this->get_highest_demand() != false) ? $this->get_highest_demand()->Price : 0;
@@ -333,11 +355,11 @@ class Orders {
if(is_array($supply_available) && !empty($supply_available) ) {
- //for($i=0; $i<=count($supply_available); $i++) {
foreach ($supply_available as $available) {
if ($this->demanded_qty > 0) {
$supply_available = $this->OrderMatchingQuery();
+ $seller_order_id = (int)$available->orderId;
$available->Quantity = (float)$available->Quantity;
$seller_id = $available->SELLER_ID;
$seller_balance_btc = $this->check_customer_balance($assetType = 'btc', $seller_id)->Balance;
@@ -347,26 +369,44 @@ class Orders {
$buyer_balance_btc = $this->check_customer_balance($assetType = 'btc', $buyer_id)->Balance;
$buyer_balance_cash = $this->check_customer_balance($assetType = 'traditional', $buyer_id)->Balance;
- $cost_of_total_supply = $available->Quantity * $available->price; // traditional or cash
-
- $new_seller_balance_cash = $seller_balance_cash + $cost_of_total_supply; // traditional or cash
- $new_seller_balance_btc = $seller_balance_btc - $available->Quantity; // deduct the btc sold
-
- $new_buyer_balance_btc = $buyer_balance_btc + $available->Quantity; // btc
- $new_buyer_balance_cash = $buyer_balance_cash - $cost_of_total_supply; // traditional or cash
-
if ($this->demanded_qty > $available->Quantity) {
- // subtract the debit access (customers balance of $ or BTC)
- $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_balance_btc, $user_id = $buyer_id);
+ $trade_qty = (float) $available->Quantity;
- // increment the credit asset (customers balance of $ or BTC)
- $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_balance_cash, $user_id = $seller_id);
+ $cost_of_total_supply = $available->Quantity * $available->price; // traditional or cash
+ $cost_of_total_supply = (float) $cost_of_total_supply;
- // record the commission in the commission account
- // decrease respective balances
- $this->update_user_balance($assetType = 'btc', $balance = $new_seller_balance_btc, $user_id = $seller_id);
- $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_balance_cash, $user_id = $buyer_id);
+ if ($buyer_balance_cash < $cost_of_total_supply) {
+ /*Record the message*/
+ //$this->storeMessages($buy_order_id, $buyer_id, $msg="Transaction failed: You have insufficient cash balance.");
+ $message[] = "Transaction failed: You have insufficient cash balance.";
+ break;
+ }
+ if (($seller_balance_btc == 0) || ($seller_balance_btc < $available->Quantity)) {
+ /*Record the message*/
+ //$this->storeMessages($seller_order_id, $seller_id, $msg="Transaction failed: You had insufficient RMT balance");
+ $message[] = "Transaction failed: You had insufficient RMT balance";
+ break;
+ }
+
+ if ($buyer_id != $seller_id) {
+ $new_seller_balance_cash = $seller_balance_cash + $cost_of_total_supply; // traditional or cash
+ $new_seller_balance_btc = $seller_balance_btc - $available->Quantity; // deduct the btc sold
+
+ $new_buyer_balance_btc = $buyer_balance_btc + $available->Quantity; // btc
+ $new_buyer_balance_cash = $buyer_balance_cash - $cost_of_total_supply; // traditional or cash
+
+ // subtract the debit access (customers balance of $ or BTC)
+ $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_balance_btc, $user_id = $buyer_id);
+
+ // increment the credit asset (customers balance of $ or BTC)
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_balance_cash, $user_id = $seller_id);
+
+ // record the commission in the commission account
+ // decrease respective balances
+ $this->update_user_balance($assetType = 'btc', $balance = $new_seller_balance_btc, $user_id = $seller_id);
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_balance_cash, $user_id = $buyer_id);
+ }
$this->demanded_qty = $this->demanded_qty - $available->Quantity;
@@ -375,83 +415,185 @@ class Orders {
// Delete the row from Sell list
$this->delete_order($this->top_sell_table, $available->orderId);
- // save changes
+
+ // Mark this order status 1 i.e transaction successful
+ $this->updateOrderStatus($available->orderId, $status='1');
+
+ // Record messages
+ $buyer_msg = "Transaction successful: You bought $available->Quantity RMT for $ $cost_of_total_supply at the rate of $ $available->price per token.";
+ $seller_msg = "Transaction successful: You sold $available->Quantity RMT for $ $cost_of_total_supply at the rate of $ $available->price per token.";
+ $this->storeMessages($buy_order_id, $buyer_id, $msg=$buyer_msg);
+ $this->storeMessages($seller_order_id, $seller_id, $msg=$seller_msg);
+
+ if(isset($_SESSION['user_id'])) {
+ $logged_in_user = (int) $_SESSION['user_id'];
+ if ($this->check_user($logged_in_user) != false) {
+ if ($logged_in_user == $buyer_id) {
+ $message[] = $buyer_msg;
+ } else if($logged_in_user == $seller_id) {
+ $message[] = $seller_msg;
+ }
+ }
+ }
$available->Quantity = 0;
} elseif ($this->demanded_qty == $available->Quantity) {
- // subtract the debit access (customers balance of $ or BTC)
- $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_balance_btc, $user_id = $buyer_id);
+ $trade_qty = (float) $available->Quantity;
- // increment the credit asset (customers balance of $ or BTC)
- $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_balance_cash, $user_id = $seller_id);
+ $cost_of_total_supply = $available->Quantity * $available->price; // traditional or cash
+ $cost_of_total_supply = (float) $cost_of_total_supply;
- // record the commission in the commission account
- // decrease respective balances
- $this->update_user_balance($assetType = 'btc', $balance = $new_seller_balance_btc, $user_id = $seller_id);
- $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_balance_cash, $user_id = $buyer_id);
+ if ($buyer_balance_cash < $cost_of_total_supply) {
+ /*Record the message*/
+ //$this->storeMessages($buy_order_id, $buyer_id, $msg="Transaction failed: You had insufficient cash balance.");
+ break;
+ }
+ if (($seller_balance_btc == 0) || ($seller_balance_btc < $available->Quantity)) {
+ /*Record the message*/
+ //$this->storeMessages($seller_order_id, $seller_id, $msg="Transaction failed: You had insufficient RMT balance.");
+ break;
+ }
+
+ if ($buyer_id != $seller_id) {
+ $new_seller_balance_cash = $seller_balance_cash + $cost_of_total_supply; // traditional or cash
+ $new_seller_balance_btc = $seller_balance_btc - $available->Quantity; // deduct the btc sold
+
+ $new_buyer_balance_btc = $buyer_balance_btc + $available->Quantity; // btc
+ $new_buyer_balance_cash = $buyer_balance_cash - $cost_of_total_supply; // traditional or cash
+
+ // subtract the debit access (customers balance of $ or BTC)
+ $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_balance_btc, $user_id = $buyer_id);
+
+ // increment the credit asset (customers balance of $ or BTC)
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_balance_cash, $user_id = $seller_id);
+
+ // record the commission in the commission account
+ // decrease respective balances
+ $this->update_user_balance($assetType = 'btc', $balance = $new_seller_balance_btc, $user_id = $seller_id);
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_balance_cash, $user_id = $buyer_id);
+ }
// Delete the row from Sell list And Buy list
$this->delete_order($this->top_sell_table, $available->orderId);
$this->delete_order($this->top_buy_table, $buy_order_id);
+ // Mark trades of buyer & seller 1 i.e 'successful'
+ $this->updateOrderStatus($available->orderId, $status='1');
+ $this->updateOrderStatus($buy_order_id, $status='1');
+
+ // Record messages
+ $buyer_msg = "Transaction successful: You bought $available->Quantity RMT for $ $cost_of_total_supply at the rate of $ $available->price per token.";
+ $seller_msg = "Transaction successful: You sold $available->Quantity RMT for $ $cost_of_total_supply at the rate of $ $available->price per token.";
+ $this->storeMessages($buy_order_id, $buyer_id, $msg=$buyer_msg);
+ $this->storeMessages($seller_order_id, $seller_id, $msg=$seller_msg);
+
+ if(isset($_SESSION['user_id'])) {
+ $logged_in_user = (int) $_SESSION['user_id'];
+ if ($this->check_user($logged_in_user) != false) {
+ if ($logged_in_user == $buyer_id) {
+ $message[] = $buyer_msg;
+ } else if($logged_in_user == $seller_id) {
+ $message[] = $seller_msg;
+ }
+ }
+ }
+
// save changes
$this->demanded_qty = 0;
$available->Quantity = 0;
} elseif ($this->demanded_qty < $available->Quantity) {
+ $trade_qty = (float) $this->demanded_qty;
+
$cost_of_total_supply = $this->demanded_qty * $available->price; // traditional or cash
- $new_seller_balance_cash = $seller_balance_cash + $cost_of_total_supply; // traditional or cash
- $new_seller_balance_btc = $seller_balance_btc - $this->demanded_qty; // deduct the btc sold
+ $cost_of_total_supply = (float) $cost_of_total_supply;
- $new_buyer_balance_btc = $buyer_balance_btc + $this->demanded_qty; // btc
- $new_buyer_balance_cash = $buyer_balance_cash - $cost_of_total_supply; // traditional or cash
+ if ($buyer_balance_cash < $cost_of_total_supply) {
+ /*Record the message*/
+ //$this->storeMessages($buy_order_id, $buyer_id, $msg="Transaction failed: You had insufficient cash balance.");
+ break;
+ }
+ if (($seller_balance_btc == 0) || ($seller_balance_btc < $this->demanded_qty)) {
+ /*Record the message*/
+ //$this->storeMessages($seller_order_id, $seller_id, $msg="Transaction failed: You had insufficient RMT balance.");
+ break;
+ }
- $availableQuantity = $available->Quantity - $this->demanded_qty;
- // subtract the debit access (customers balance of $ or BTC)
- $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_balance_btc, $user_id = $buyer_id);
+ if ($buyer_id != $seller_id) {
+ $new_seller_balance_cash = $seller_balance_cash + $cost_of_total_supply; // traditional or cash
+ $new_seller_balance_btc = $seller_balance_btc - $this->demanded_qty; // deduct the btc sold
- // increment the credit asset (customers balance of $ or BTC)
- $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_balance_cash, $user_id = $seller_id);
+ $new_buyer_balance_btc = $buyer_balance_btc + $this->demanded_qty; // btc
+ $new_buyer_balance_cash = $buyer_balance_cash - $cost_of_total_supply; // traditional or cash
- // record the commission in the commission account
- // decrease respective balances
- $this->update_user_balance($assetType = 'btc', $balance = $new_seller_balance_btc, $user_id = $seller_id);
- $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_balance_cash, $user_id = $buyer_id);
+ // subtract the debit access (customers balance of $ or BTC)
+ $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_balance_btc, $user_id = $buyer_id);
+
+ // increment the credit asset (customers balance of $ or BTC)
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_balance_cash, $user_id = $seller_id);
+
+ // record the commission in the commission account
+ // decrease respective balances
+ $this->update_user_balance($assetType = 'btc', $balance = $new_seller_balance_btc, $user_id = $seller_id);
+
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_balance_cash, $user_id = $buyer_id);
+
+ }
// update the quantity field for $availableQuantity
+ $availableQuantity = $available->Quantity - $this->demanded_qty;
$this->update_quantity($top_table = $this->top_sell_table, $availableQuantity, $available->orderId);
// Delete the row from Buy list
$this->delete_order($this->top_buy_table, $buy_order_id);
+ // Mark this order status 1 i.e transaction successful
+ $this->updateOrderStatus($buy_order_id, $status='1');
+
+ // Record messages
+ $buyer_msg = "Transaction successful: You bought $this->demanded_qty RMT for $ $cost_of_total_supply at the rate of $ $available->price per token.";
+ $seller_msg = "Transaction successful: You sold $this->demanded_qty RMT for $ $cost_of_total_supply at the rate of $ $available->price per token.";
+ $this->storeMessages($buy_order_id, $buyer_id, $msg=$buyer_msg);
+ $this->storeMessages($seller_order_id, $seller_id, $msg=$seller_msg);
+
+ if(isset($_SESSION['user_id'])) {
+ $logged_in_user = (int) $_SESSION['user_id'];
+ if ($this->check_user($logged_in_user) != false) {
+ if ($logged_in_user == $buyer_id) {
+ $message[] = $buyer_msg;
+ } else if($logged_in_user == $seller_id) {
+ $message[] = $seller_msg;
+ }
+ }
+ }
+
// save changes
$this->demanded_qty = 0;
-
}
// Record the transaction
- $this->record_transaction($buyer_id,$buy_order_id, $buy_amount, $buy_commission='0', $seller_id, $available->orderId, $available->price, $sell_commission = '0');
+ $this->record_transaction($buyer_id,$buy_order_id, $buy_amount, $buy_commission='0', $seller_id, $available->orderId, $available->price, $sell_commission = '0', $trade_qty);
} else {
return false;
}
$this->OrderMatchingQuery();
}
- return true;
+ return $message;
}
return false;
}
return false;
}
- private function record_transaction($buyer, $buy_order_id, $buy_amount, $buy_commission, $seller, $sell_order_id, $sell_amount, $sell_commission) {
+ private function record_transaction($buyer, $buy_order_id, $buy_amount, $buy_commission, $seller, $sell_order_id, $sell_amount, $sell_commission, $trade_qty) {
if ($this->databaseConnection()) {
$query = $this->db_connection->prepare("
- INSERT INTO $this->transaction_table(`TransactionId`, `a_buyer`, `A_OrderId`, `A_Amount`, `A_Commission`, `b_seller`, `B_OrderId`, `B_Amount`, `B_Commission`, `UpdateDate`, `InsertDate`, `SaveDate`)
- VALUES ('', :buyer,:buy_order_id, :buy_amount, :buy_commission, :seller, :sell_order_id, :sell_amount, :sell_commission, NULL, NOW(), NOW())
+ INSERT INTO $this->transaction_table(`TransactionId`, `a_buyer`, `A_OrderId`, `A_Amount`, `A_Commission`, `b_seller`, `B_OrderId`, `B_Amount`, `B_Commission`, `qty_traded`, `UpdateDate`, `InsertDate`, `SaveDate`)
+ VALUES ('', :buyer,:buy_order_id, :buy_amount, :buy_commission, :seller, :sell_order_id, :sell_amount, :sell_commission, :trade_qty, NULL, NOW(), NOW())
");
$query->bindParam("buyer", $buyer);
$query->bindParam("buy_order_id", $buy_order_id);
@@ -461,6 +603,7 @@ class Orders {
$query->bindParam("sell_order_id", $sell_order_id);
$query->bindParam("sell_amount", $sell_amount);
$query->bindParam("sell_commission", $sell_commission);
+ $query->bindParam("trade_qty", $trade_qty);
if($query->execute()) {
return true;
}
@@ -499,19 +642,6 @@ class Orders {
return false;
}
- private function UpdateOrderStatus($order_id) {
- if ($this->databaseConnection()) {
- $query = $this->db_connection->prepare("
- UPDATE `orderbook` SET `OrderStatusId`= '1' WHERE `OrderId`= :id LIMIT 1
- ");
- $query->bindParam(':id', $order_id);
- if ($query->execute()) {
- return true;
- }
- }
- return false;
- }
-
private function insert_market_order($customerId, $orderTypeId, $OfferAssetTypeId=null, $WantAssetTypeId=null, $qty, $price) {
if ($this->databaseConnection()) {
@@ -527,6 +657,11 @@ class Orders {
if ($query->execute()) {
$insertedrowid = $this->db_connection->lastInsertId();
+
+ $trade_type = ($orderTypeId=='1') ? "sell" : "buy";
+ $messages = "You entered an instant $trade_type order for $qty token at $ $price per token for $ ".$qty*$price;
+ $this->storeMessages($insertedrowid, $customerId, $messages);
+
return (int) $insertedrowid;
}
return false;
@@ -534,13 +669,20 @@ class Orders {
return false;
}
+
+ /**
+ * Buy Sell Instantly
+ * @param $order_type
+ * @param $qty
+ * @return array|bool
+ */
public function market_order($order_type, $qty) {
if ($this->databaseConnection()) {
$message = array();
- // Check if it is a buy or sell
+ // Check if it is a buy or sell
if ($order_type == 'buy') {
if(is_float($qty) || is_int($qty)) {
@@ -549,21 +691,28 @@ class Orders {
$sell_list = $this->get_top_buy_sell_list($top_table='active_selling_list', $asc_desc='ASC');
if (!empty($sell_list)) {
- foreach ($sell_list as $available) {
+ /*Code to find the last iteration of loop. Required to print shortage of token supply.*/
+ end($sell_list);
+ $last_iter = key($sell_list);
+
+ foreach ($sell_list as $key=>$available) {
+
+ $trade_qty = 0;
+ $sell_order_id = (int)$available->OrderId;
$available->Quantity = (float)$available->Quantity;
if ($available->Quantity <= 0 || $qty <= 0) {
if (isset($message)) {
if ($available->Quantity <= 0) {
- $message[] = "The available asset is nill.";
+ $message[] = "Oops! There's shortage of the availability of tokens.";
} else if($qty <= 0) {
//$message[] = "The demanded asset is nill.";
}
- return $message;
} else {
exit;
}
+ return $message;
}
$seller_id = $available->customerId;
@@ -576,14 +725,17 @@ class Orders {
switch ($qty) {
case ($qty > $available->Quantity):
+ $trade_qty = (float)$available->Quantity;
$cost_of_total_supply = $available->Quantity * $available->Price; // traditional or cash
if ($buyer_cash_balance < $cost_of_total_supply) {
$message[] = "Transaction failed: You have insufficient cash balance.";
+ $this->storeMessages($buy_order_id=null, $buyer_id, $msg="Transaction failed: You had insufficient cash balance.");
return $message;
}
- if ($seller_bit_balance == 0) {
- $message[] = "Transaction failed: The seller has insufficient FLO balance";
+ if (($seller_bit_balance == 0) || ($seller_bit_balance < $available->Quantity)) {
+ $message[] = "Transaction failed: The seller has insufficient token balance.";
+ $this->storeMessages($sell_order_id, $seller_id, $msg="Transaction failed: The seller has insufficient token balance.");
return $message;
}
@@ -592,7 +744,7 @@ class Orders {
$new_buyer_bit_balance = $buyer_bit_balance + $available->Quantity; // traditional or cash
$new_buyer_cash_balance = $buyer_cash_balance - $cost_of_total_supply; // traditional
- $insert_market_order = $this->insert_market_order($_SESSION['user_id'], $orderTypeId='0', $OfferAssetTypeId='INR', $WantAssetTypeId='FLO', $available->Quantity, $available->Price);
+ $insert_market_order = $this->insert_market_order($_SESSION['user_id'], $orderTypeId='0', $OfferAssetTypeId='USD', $WantAssetTypeId='RMT', $available->Quantity, $available->Price);
$buy_order_id = 0;
if($insert_market_order == false) {
@@ -603,43 +755,53 @@ class Orders {
return false;
}
- // increment the bits of buyer
- $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_bit_balance, $user_id = $buyer_id);
+ if ($buyer_id != $seller_id) {
+ // increment the bits of buyer
+ $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_bit_balance, $user_id = $buyer_id);
- // deduct cash of buyer
- $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_cash_balance, $user_id = $buyer_id);
+ // deduct cash of buyer
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_cash_balance, $user_id = $buyer_id);
- // increase the cash of seller
- $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_cash_balance, $user_id = $seller_id);
+ // increase the cash of seller
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_cash_balance, $user_id = $seller_id);
- // deduct bits of seller
- $this->update_user_balance($assetType = 'btc', $balance = $new_seller_bit_balance, $user_id = $seller_id);
+ // deduct bits of seller
+ $this->update_user_balance($assetType = 'btc', $balance = $new_seller_bit_balance, $user_id = $seller_id);
+ }
// Record the transaction
- $this->record_transaction($buyer_id, $buy_order_id, $available->Price, $buy_commission='0', $seller_id, $available->OrderId, $available->Price, $sell_commission = '0');
+ $this->record_transaction($buyer_id, $buy_order_id, $available->Price, $buy_commission='0', $seller_id, $available->OrderId, $available->Price, $sell_commission = '0', $trade_qty);
// Delete the row from Sell list
$this->delete_order($this->top_sell_table, $available->OrderId);
// Update Order Status in Orderbook
- $this->UpdateOrderStatus($buy_order_id);
+ $this->UpdateOrderStatus($available->OrderId, '1');
- $message[] = "You bought $available->Quantity coins for $cost_of_total_supply.";
+ $message[] = "Instant Transaction Successful: You bought $available->Quantity RMT at $ $available->Price per token for $ $cost_of_total_supply.";
+
+ // Record message in DB
+ $this->storeMessages($buy_order_id, $buyer_id, $msg="Instant Transaction Successful: You bought $available->Quantity RMT at $ $available->Price per token for $ $cost_of_total_supply.");
+ $this->storeMessages($sell_order_id, $seller_id, $msg="Transaction Successful: You sold $available->Quantity RMT at $ $available->Price per token for $ $cost_of_total_supply.");
$qty = $qty - $available->Quantity;
+ $available->Quantity = 0;
// save changes
break;
case ($qty == $available->Quantity):
+ $trade_qty = (float)$available->Quantity;
$cost_of_total_supply = $available->Quantity * $available->Price; // traditional or cash
if ($buyer_cash_balance < $cost_of_total_supply) {
- $message[] = "Transaction failed: You have insufficient cash balance.";
+ $message[] = "Instant Transaction failed: You have insufficient cash balance.";
+ $this->storeMessages($buy_order_id=null, $buyer_id, $msg="Transaction failed: You had insufficient cash balance.");
return $message;
}
- if ($seller_bit_balance == 0) {
- $message[] = "Transaction failed: The seller has insufficient FLO balance";
+ if (($seller_bit_balance == 0) || ($seller_bit_balance < $available->Quantity)) {
+ $message[] = "Instant Transaction failed: The seller has insufficient token balance.";
+ $this->storeMessages($sell_order_id, $seller_id, $msg="Transaction failed: The seller has insufficient token balance.");
return $message;
}
@@ -648,7 +810,7 @@ class Orders {
$new_buyer_cash_balance = $buyer_cash_balance - $cost_of_total_supply; // traditional
$new_buyer_bit_balance = $buyer_bit_balance + $available->Quantity; // traditional or cash
- $insert_market_order = $this->insert_market_order($_SESSION['user_id'], $orderTypeId='0', $OfferAssetTypeId='INR', $WantAssetTypeId='FLO', $available->Quantity, $available->Price);
+ $insert_market_order = $this->insert_market_order($_SESSION['user_id'], $orderTypeId='0', $OfferAssetTypeId='USD', $WantAssetTypeId='RMT', $available->Quantity, $available->Price);
$buy_order_id = 0;
if($insert_market_order == false) {
@@ -659,42 +821,53 @@ class Orders {
return false;
}
- // increment the bits of buyer
- $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_bit_balance, $user_id = $buyer_id);
+ if ($buyer_id != $seller_id) {
+ // increment the bits of buyer
+ $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_bit_balance, $user_id = $buyer_id);
- // deduct cash of buyer
- $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_cash_balance, $user_id = $buyer_id);
+ // deduct cash of buyer
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_cash_balance, $user_id = $buyer_id);
- // increase the cash of seller
- $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_cash_balance, $user_id = $seller_id);
+ // increase the cash of seller
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_cash_balance, $user_id = $seller_id);
- // deduct bits of seller
- $this->update_user_balance($assetType = 'btc', $balance = $new_seller_bit_balance, $user_id = $seller_id);
+ // deduct bits of seller
+ $this->update_user_balance($assetType = 'btc', $balance = $new_seller_bit_balance, $user_id = $seller_id);
+ }
- $message[] = "You bought $qty coins for $cost_of_total_supply.";
+ $message[] = "Instant Transaction Successful: You bought $qty tokens at $ $available->Price per token for $ $cost_of_total_supply.";
+
+ // Record message in DB
+ $this->storeMessages($buy_order_id, $buyer_id, $msg="Instant Transaction Successful: You bought $available->Quantity RMT at $ $available->Price per token for $ $cost_of_total_supply.");
+ $this->storeMessages($sell_order_id, $seller_id, $msg="Transaction Successful: You sold $available->Quantity RMT at $ $available->Price per token for $ $cost_of_total_supply.");
$qty = $qty - $available->Quantity; // should be equal to 0
+ $available->Quantity = 0;
// Record the transaction
- $this->record_transaction($buyer_id, $buy_order_id, $available->Price, $buy_commission='0', $seller_id, $available->OrderId, $available->Price, $sell_commission = '0');
+ $this->record_transaction($buyer_id, $buy_order_id, $available->Price, $buy_commission='0', $seller_id, $available->OrderId, $available->Price, $sell_commission = '0', $trade_qty);
// Delete the row from Sell list
$this->delete_order($this->top_sell_table, $available->OrderId);
// Update Order Status in Orderbook
- $this->UpdateOrderStatus($buy_order_id);
+ $this->UpdateOrderStatus($buy_order_id, '1');
+ $this->UpdateOrderStatus($available->OrderId, '1');
break;
case ($qty < $available->Quantity):
+ $trade_qty = (float) $qty;
$cost_of_total_supply = $qty * $available->Price; // traditional or cash
if ($buyer_cash_balance < $cost_of_total_supply) {
- $message[] = "Transaction failed: You have insufficient cash balance.";
+ $message[] = "Instant Transaction failed: You have insufficient cash balance.";
+ $this->storeMessages($buy_order_id=null, $buyer_id, $msg="Transaction failed: You had insufficient cash balance.");
return $message;
}
- if ($seller_bit_balance == 0) {
- $message[] = "Transaction failed: The seller has insufficient FLO balance";
+ if (($seller_bit_balance == 0) || ($seller_bit_balance < $qty)) {
+ $message[] = "Instant Transaction failed: The seller has insufficient token balance.";
+ $this->storeMessages($sell_order_id, $seller_id, $msg="Transaction failed: The seller has insufficient token balance.");
return $message;
}
@@ -703,7 +876,7 @@ class Orders {
$new_buyer_cash_balance = $buyer_cash_balance - $cost_of_total_supply; // traditional
$new_buyer_bit_balance = $buyer_bit_balance + $qty; // traditional or cash
- $insert_market_order = $this->insert_market_order($_SESSION['user_id'], $orderTypeId='0', $OfferAssetTypeId='INR', $WantAssetTypeId='FLO', $qty, $available->Price);
+ $insert_market_order = $this->insert_market_order($_SESSION['user_id'], $orderTypeId='0', $OfferAssetTypeId='USD', $WantAssetTypeId='RMT', $qty, $available->Price);
$buy_order_id = 0;
if($insert_market_order == false) {
@@ -714,20 +887,22 @@ class Orders {
return false;
}
- // increment the bits of buyer
- $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_bit_balance, $user_id = $buyer_id);
+ if ($buyer_id != $seller_id) {
+ // increment the bits of buyer
+ $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_bit_balance, $user_id = $buyer_id);
- // deduct cash of buyer
- $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_cash_balance, $user_id = $buyer_id);
+ // deduct cash of buyer
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_cash_balance, $user_id = $buyer_id);
- // increase the cash of seller
- $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_cash_balance, $user_id = $seller_id);
+ // increase the cash of seller
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_cash_balance, $user_id = $seller_id);
- // deduct bits of seller
- $this->update_user_balance($assetType = 'btc', $balance = $new_seller_bit_balance, $user_id = $seller_id);
+ // deduct bits of seller
+ $this->update_user_balance($assetType = 'btc', $balance = $new_seller_bit_balance, $user_id = $seller_id);
+ }
// Record the transaction
- $this->record_transaction($buyer_id, $buy_order_id, $available->Price, $buy_commission='0', $seller_id, $available->OrderId, $available->Price, $sell_commission = '0');
+ $this->record_transaction($buyer_id, $buy_order_id, $available->Price, $buy_commission='0', $seller_id, $available->OrderId, $available->Price, $sell_commission = '0', $trade_qty);
$available->Quantity = $available->Quantity - $qty;
@@ -735,15 +910,24 @@ class Orders {
$this->update_quantity($top_table = $this->top_sell_table, $available->Quantity, $available->OrderId);
// Update Order Status in Orderbook
- $this->UpdateOrderStatus($buy_order_id);
+ $this->UpdateOrderStatus($buy_order_id, '1');
- $message[] = "You bought $qty coins for $cost_of_total_supply.";
+ $message[] = "Instant Transaction Successful: You bought $qty tokens at $ $available->Price per token for $ $cost_of_total_supply.";
+
+ // Record message in DB
+ $this->storeMessages($buy_order_id, $buyer_id, $msg="Instant Transaction Successful: You bought $qty RMT at $ $available->Price per token for $ $cost_of_total_supply.");
+ $this->storeMessages($sell_order_id, $seller_id, $msg="Transaction Successful: You sold $qty RMT at $ $available->Price per token for $ $cost_of_total_supply.");
// update the quantity field for demand
$qty = 0;
break;
}
+ if (($available->Quantity <= 0) && ($qty > 0) && ($key === $last_iter)) {
+ /*The supply of token is 0. Stop further transaction. */
+ $message[] = "Instant Transaction failure: There's no token left to be sold any more. $qty tokens could not be sold.";
+ $this->storeMessages($buy_order_id=null, $buyer_id, $msg="There's no token left to be sold any more. $qty tokens could not be sold.");
+ }
}
return $message;
} else {
@@ -762,12 +946,14 @@ class Orders {
if (!empty($buy_list)) {
foreach ($buy_list as $available) {
+ $trade_qty = 0;
+ $buy_order_id = (int) $available->OrderId;
$available->Quantity = (float)$available->Quantity;
if ($available->Quantity <= 0 || $qty <= 0) {
if (isset($message)) {
if ($available->Quantity <= 0) {
- $message[] = "The available asset is nill.";
+ $message[] = "Instant Transaction Failure: The available asset is nill.";
} else if($qty <= 0) {
//$message[] = "The demanded asset is nill.";
}
@@ -787,14 +973,19 @@ class Orders {
switch ($qty) {
case ($qty > $available->Quantity):
+ $trade_qty = (float) $available->Quantity;
$cost_of_total_supply = $available->Quantity * $available->Price; // traditional or cash
if ($buyer_cash_balance < $cost_of_total_supply) {
- $message[] = "Transaction failed: The buyer has insufficient cash balance.";
+ $message[] = "Instant Transaction failed: The buyer has insufficient cash balance.";
+ $this->storeMessages($buy_order_id, $buyer_id, $msg="Your order no $buy_order_id was unprocessed due to insufficient balance.");
+ $this->storeMessages($sell_order_id=null, $seller_id, $msg="A transaction was unprocessed due to insufficient balance of buyer with id $buyer_id.");
return $message;
}
- if ($seller_bit_balance == 0) {
- $message[] = "Transaction failed: You have insufficient FLO balance.";
+ if (($seller_bit_balance == 0) || ($seller_bit_balance < $available->Quantity)) {
+ $message[] = "Instant Transaction failed: You have insufficient token balance.";
+ $this->storeMessages($buy_order_id, $buyer_id, $msg="Your order no $buy_order_id was unprocessed due to insufficient token balance of seller with id $seller_id.");
+ $this->storeMessages($sell_order_id=null, $seller_id, $msg="Transaction failed: You have insufficient token balance.");
return $message;
}
@@ -803,7 +994,7 @@ class Orders {
$new_buyer_cash_balance = $buyer_cash_balance - $cost_of_total_supply; // traditional
$new_buyer_bit_balance = $buyer_bit_balance + $available->Quantity; // btc
- $insert_market_order = $this->insert_market_order($_SESSION['user_id'], $orderTypeId='1', $OfferAssetTypeId='FLO', $WantAssetTypeId='INR', $available->Quantity, $available->Price);
+ $insert_market_order = $this->insert_market_order($_SESSION['user_id'], $orderTypeId='1', $OfferAssetTypeId='RMT', $WantAssetTypeId='USD', $available->Quantity, $available->Price);
$sell_order_id = 0;
if($insert_market_order == false) {
@@ -814,42 +1005,51 @@ class Orders {
return false;
}
- // increment the bits of buyer
- $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_bit_balance, $user_id = $buyer_id);
+ if ($buyer_id != $seller_id) {
+ // increment the bits of buyer
+ $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_bit_balance, $user_id = $buyer_id);
- // deduct cash of buyer
- $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_cash_balance, $user_id = $buyer_id);
+ // deduct cash of buyer
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_cash_balance, $user_id = $buyer_id);
- // increase the cash of seller
- $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_cash_balance, $user_id = $seller_id);
+ // increase the cash of seller
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_cash_balance, $user_id = $seller_id);
- // deduct bits of seller
- $this->update_user_balance($assetType = 'btc', $balance = $new_seller_bit_balance, $user_id = $seller_id);
+ // deduct bits of seller
+ $this->update_user_balance($assetType = 'btc', $balance = $new_seller_bit_balance, $user_id = $seller_id);
+ }
// Delete the row from buy list
$this->delete_order($this->top_buy_table, $available->OrderId);
// Update Order Status in Orderbook
- $this->UpdateOrderStatus($sell_order_id);
+ $this->UpdateOrderStatus($available->OrderId, '1');
// Record the transaction
- $this->record_transaction($buyer_id, $available->OrderId, $available->Price, $buy_commission='0', $seller_id, $sell_order_id, $available->Price, $sell_commission = '0');
+ $this->record_transaction($buyer_id, $available->OrderId, $available->Price, $buy_commission='0', $seller_id, $sell_order_id, $available->Price, $sell_commission = '0', $trade_qty);
- $message[] = "You sold $available->Quantity coins for $cost_of_total_supply.";
+ $message[] = "Instant Transaction Successful: You sold $available->Quantity tokens for $ $cost_of_total_supply.";
+ $this->storeMessages($sell_order_id, $seller_id, $msg="Instant Transaction Successful: You sold $available->Quantity RMT for $ $cost_of_total_supply.");
+ $this->storeMessages($buy_order_id, $buyer_id, $msg="Transaction Successful: You bought $available->Quantity RMT for $ $cost_of_total_supply.");
$qty = $qty - $available->Quantity;
break;
case ($qty == $available->Quantity):
+ $trade_qty = (float) $available->Quantity;
$cost_of_total_supply = $available->Quantity * $available->Price; // traditional or cash
if ($buyer_cash_balance < $cost_of_total_supply) {
- $message[] = "Transaction failed: The buyer has insufficient cash balance.";
+ $message[] = "Instant Transaction failed: The buyer has insufficient cash balance.";
+ $this->storeMessages($buy_order_id, $buyer_id, $msg="Your order no $buy_order_id was unprocessed due to insufficient balance.");
+ $this->storeMessages($sell_order_id=null, $seller_id, $msg="A transaction was unprocessed due to insufficient balance of buyer with id $buyer_id.");
return $message;
}
- if ($seller_bit_balance == 0) {
- $message[] = "Transaction failed: You have insufficient FLO balance.";
+ if (($seller_bit_balance == 0) || ($seller_bit_balance < $available->Quantity)) {
+ $message[] = "Instant Transaction failed: You have insufficient token balance.";
+ $this->storeMessages($buy_order_id, $buyer_id, $msg="Your order no $buy_order_id was unprocessed due to insufficient token balance of seller with id $seller_id.");
+ $this->storeMessages($sell_order_id=null, $seller_id, $msg="Transaction failed: You have insufficient token balance.");
return $message;
}
@@ -858,7 +1058,7 @@ class Orders {
$new_buyer_cash_balance = $buyer_cash_balance - $cost_of_total_supply; // traditional
$new_buyer_bit_balance = $buyer_bit_balance + $available->Quantity; // traditional or cash
- $insert_market_order = $this->insert_market_order($_SESSION['user_id'], $orderTypeId='1', $OfferAssetTypeId='FLO', $WantAssetTypeId='INR', $available->Quantity, $available->Price);
+ $insert_market_order = $this->insert_market_order($_SESSION['user_id'], $orderTypeId='1', $OfferAssetTypeId='RMT', $WantAssetTypeId='USD', $available->Quantity, $available->Price);
$sell_order_id = 0;
if($insert_market_order == false) {
@@ -869,27 +1069,32 @@ class Orders {
return false;
}
- // increment the bits of buyer
- $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_bit_balance, $user_id = $buyer_id);
+ if ($buyer_id != $seller_id) {
+ // increment the bits of buyer
+ $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_bit_balance, $user_id = $buyer_id);
- // deduct cash of buyer
- $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_cash_balance, $user_id = $buyer_id);
+ // deduct cash of buyer
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_cash_balance, $user_id = $buyer_id);
- // subtract the cash of seller
- $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_cash_balance, $user_id = $seller_id);
+ // subtract the cash of seller
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_cash_balance, $user_id = $seller_id);
- // deduct bits of seller
- $this->update_user_balance($assetType = 'btc', $balance = $new_seller_bit_balance, $user_id = $seller_id);
+ // deduct bits of seller
+ $this->update_user_balance($assetType = 'btc', $balance = $new_seller_bit_balance, $user_id = $seller_id);
+ }
- $message[] = "You sold $qty coins for $cost_of_total_supply.";
+ $message[] = "Instant Transaction Successful: You sold $qty tokens for $ $cost_of_total_supply.";
+ $this->storeMessages($sell_order_id, $seller_id, $msg="Instant Transaction Successful: You sold $available->Quantity RMT for $ $cost_of_total_supply.");
+ $this->storeMessages($buy_order_id, $buyer_id, $msg="Transaction Successful: You bought $available->Quantity RMT for $ $cost_of_total_supply.");
$qty = $qty - $available->Quantity;
// Update Order Status in Orderbook
- $this->UpdateOrderStatus($sell_order_id);
+ $this->UpdateOrderStatus($sell_order_id, '1');
+ $this->UpdateOrderStatus($available->OrderId, '1');
// Record the transaction
- $this->record_transaction($buyer_id, $available->OrderId, $available->Price, $buy_commission='0', $seller_id, $sell_order_id, $available->Price, $sell_commission = '0');
+ $this->record_transaction($buyer_id, $available->OrderId, $available->Price, $buy_commission='0', $seller_id, $sell_order_id, $available->Price, $sell_commission = '0', $trade_qty);
// Delete the row from buy list
$this->delete_order($this->top_buy_table, $available->OrderId);
@@ -897,15 +1102,20 @@ class Orders {
break;
case ($qty < $available->Quantity):
+ $trade_qty = (float) $qty;
$available->Quantity = $available->Quantity - $qty;
$cost_of_total_supply = $qty * $available->Price; // traditional or cash
if ($buyer_cash_balance < $cost_of_total_supply) {
- $message[] = "Transaction failed: The buyer has insufficient cash balance.";
+ $message[] = "Instant Transaction failed: The buyer has insufficient cash balance.";
+ $this->storeMessages($buy_order_id, $buyer_id, $msg="Your order no $buy_order_id was unprocessed due to insufficient balance.");
+ $this->storeMessages($sell_order_id=null, $seller_id, $msg="A transaction was unprocessed due to insufficient balance of buyer with id $buyer_id.");
return $message;
}
- if ($seller_bit_balance == 0) {
- $message[] = "Transaction failed: You have insufficient FLO balance.";
+ if (($seller_bit_balance == 0) || ($seller_bit_balance < $qty)) {
+ $message[] = "Instant Transaction failed: You have insufficient token balance.";
+ $this->storeMessages($buy_order_id, $buyer_id, $msg="Your order no $buy_order_id was unprocessed due to insufficient token balance of seller with id $seller_id.");
+ $this->storeMessages($sell_order_id=null, $seller_id, $msg="Transaction failed: You have insufficient token balance.");
return $message;
}
@@ -914,7 +1124,7 @@ class Orders {
$new_buyer_cash_balance = $buyer_cash_balance - $cost_of_total_supply; // traditional
$new_buyer_bit_balance = $buyer_bit_balance + $qty; // traditional or cash
- $insert_market_order = $this->insert_market_order($_SESSION['user_id'], $orderTypeId='1', $OfferAssetTypeId='FLO', $WantAssetTypeId='INR', $qty, $available->Price);
+ $insert_market_order = $this->insert_market_order($_SESSION['user_id'], $orderTypeId='1', $OfferAssetTypeId='RMT', $WantAssetTypeId='USD', $qty, $available->Price);
$sell_order_id = 0;
if($insert_market_order == false) {
@@ -925,28 +1135,32 @@ class Orders {
return false;
}
- // increment the bits of buyer
- $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_bit_balance, $user_id = $buyer_id);
+ if ($buyer_id != $seller_id) {
+ // increment the bits of buyer
+ $this->update_user_balance($assetType = 'btc', $balance = $new_buyer_bit_balance, $user_id = $buyer_id);
- // deduct cash of buyer
- $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_cash_balance, $user_id = $buyer_id);
+ // deduct cash of buyer
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_buyer_cash_balance, $user_id = $buyer_id);
- // subtract the cash of seller
- $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_cash_balance, $user_id = $seller_id);
+ // subtract the cash of seller
+ $this->update_user_balance($assetType = 'traditional', $balance = $new_seller_cash_balance, $user_id = $seller_id);
- // deduct bits of seller
- $this->update_user_balance($assetType = 'btc', $balance = $new_seller_bit_balance, $user_id = $seller_id);
+ // deduct bits of seller
+ $this->update_user_balance($assetType = 'btc', $balance = $new_seller_bit_balance, $user_id = $seller_id);
+ }
// Record the transaction
- $this->record_transaction($buyer_id, $available->OrderId, $available->Price, $buy_commission='0', $seller_id, $sell_order_id, $available->Price, $sell_commission = '0');
+ $this->record_transaction($buyer_id, $available->OrderId, $available->Price, $buy_commission='0', $seller_id, $sell_order_id, $available->Price, $sell_commission = '0', $trade_qty);
// update the quantity field for supply
$this->update_quantity($top_table = $this->top_buy_table, $available->Quantity, $available->OrderId);
// Update Order Status in Orderbook
- $this->UpdateOrderStatus($sell_order_id);
+ $this->UpdateOrderStatus($sell_order_id, '1');
- $message[] = "You sold $qty coins for $cost_of_total_supply.";
+ $message[] = "Instant Transaction Successful: You sold $qty tokens for $ $cost_of_total_supply.";
+ $this->storeMessages($sell_order_id, $seller_id, $msg="Instant Transaction Successful: You sold $qty RMT for $ $cost_of_total_supply.");
+ $this->storeMessages($buy_order_id, $buyer_id, $msg="Transaction Successful: You bought $qty RMT for $ $cost_of_total_supply.");
// update the quantity field for demand
$qty = 0;
@@ -966,16 +1180,17 @@ class Orders {
return false;
}
- public function last_transaction_list() {
+ public function last_transaction_list($start=0, $limit = 10) {
if ($this->databaseConnection()) {
$list = array();
+
$query = $this->db_connection->query("
- SELECT TransactionId AS T_ID, a_buyer AS BUYER_ID, b_seller AS SELLER_ID, (SELECT customer.Name FROM customer WHERE customer.CustomerId=BUYER_ID) AS BUYER, (SELECT customer.Name FROM customer WHERE customer.CustomerId=SELLER_ID) AS SELLER, B_AMOUNT AS TRADE_PRICE, transaction.InsertDate
+ SELECT TransactionId AS T_ID, a_buyer AS BUYER_ID, b_seller AS SELLER_ID, (SELECT customer.Name FROM customer WHERE customer.CustomerId=BUYER_ID) AS BUYER, (SELECT customer.Name FROM customer WHERE customer.CustomerId=SELLER_ID) AS SELLER, B_AMOUNT AS TRADE_PRICE, transaction.InsertDate, transaction.qty_traded AS TRADED_QTY
FROM transaction, customer
GROUP BY T_ID
ORDER BY T_ID DESC
- LIMIT 50
+ LIMIT $start, $limit
");
if ($query->rowCount() > 0) {
@@ -989,12 +1204,26 @@ class Orders {
return false;
}
- public function UserBalanceList() {
+ public function UserBalanceList($is_active=null) {
if ($this->databaseConnection()) {
$list = array();
+
+ $extraQuerry = "";
+
+ if ($is_active != null) {
+ $extraQuerry = "WHERE customer.is_active = 0 OR customer.is_active = 1";
+ } else {
+ $extraQuerry = "WHERE customer.is_active = 1";
+ }
+
$query = $this->db_connection->query("
- SELECT customer.CustomerId AS UID, customer.Name, (SELECT assetbalance.Balance FROM assetbalance WHERE assetbalance.AssetTypeId='btc' AND assetbalance.CustomerId=UID) AS BTC, (SELECT assetbalance.Balance FROM assetbalance WHERE assetbalance.AssetTypeId='traditional' AND assetbalance.CustomerId=UID) AS CASH FROM customer, assetbalance GROUP BY UID ORDER BY MAX(BTC) DESC
+ SELECT customer.CustomerId AS UID, customer.Name, customer.is_active,
+ (SELECT assetbalance.Balance FROM assetbalance WHERE assetbalance.AssetTypeId='btc' AND assetbalance.CustomerId=UID) AS BTC,
+ (SELECT assetbalance.Balance FROM assetbalance WHERE assetbalance.AssetTypeId='traditional' AND assetbalance.CustomerId=UID) AS CASH
+ FROM customer, assetbalance
+ $extraQuerry
+ GROUP BY UID ORDER BY MAX(BTC) DESC
");
if ($query->rowCount() > 0) {
@@ -1024,7 +1253,7 @@ class Orders {
return false;
}
- public function UserOrdersList($user_id) {
+ public function UserOrdersList($user_id, $start=0, $limit=10) {
if ($this->databaseConnection()) {
$list = array();
@@ -1033,6 +1262,7 @@ class Orders {
FROM `orderbook`
WHERE `CustomerId`=:u_id
ORDER BY InsertDate DESC
+ LIMIT $start, $limit
");
$query->bindParam('u_id', $user_id);
if ($query->execute()) {
@@ -1047,5 +1277,192 @@ class Orders {
}
return false;
}
+
+ public function del_order($order_id) {
+ if ($this->databaseConnection()) {
+
+ $user_id = 0;
+ if (!isset($_SESSION['user_id'])) {
+ return false;
+ }
+ $user_id = (int) $_SESSION['user_id'];
+ $is_owner = $this->isUserOrderOwner($order_id, $user_id);
+
+ if (!$is_owner) {
+ return false;
+ }
+
+ $query = $this->db_connection->prepare("
+ DELETE FROM `active_buy_list` WHERE `orderId`=:id AND customerId = :cus_id;
+ DELETE FROM `active_selling_list` WHERE `orderId`=:id AND customerId = :cus_id
+ ");
+
+ $query->bindParam('id', $order_id);
+ $query->bindParam('cus_id', $user_id);
+
+ $query->execute();
+ unset($query); // Unset the query
+
+ $q = $this->db_connection->prepare("
+ UPDATE `orderbook` SET `OrderStatusId`= 0
+ WHERE `OrderId` = :ord
+ AND CustomerId = :cust_id
+ ");
+ $q->bindParam('ord', $order_id);
+ $q->bindParam('cust_id', $user_id);
+
+ $q->execute();
+ unset($q);
+
+ $query2 = $this->db_connection->prepare("
+ SELECT * FROM `active_buy_list` WHERE `orderId`=:o_id;
+ SELECT * FROM `active_selling_list` WHERE `orderId`=:o_id
+ ");
+ $query2->bindParam('o_id', $order_id);
+
+ if ($query2->execute()) {
+ if ($query2->rowCount() == 0) {
+ return true; // This means row was actually deleted
+ }
+ }
+
+ }
+ return false;
+ }
+
+ private function storeMessages($order_id=null, $user_id=null, $msg=null) {
+ if($this->databaseConnection()) {
+
+ $username = (string) trim($this->check_user($user_id)->Username);
+
+ $query = $this->db_connection->prepare("
+ INSERT INTO `messages`(`id`, `order_id`, `username_key`, `username`, `messages`, `datetime`)
+ VALUES ('', :order_id, :user_id, :username, :msg, NOW())
+ ");
+ $query->bindParam("order_id", $order_id);
+ $query->bindParam("user_id", $user_id);
+ $query->bindParam("username", $username);
+ $query->bindParam("msg", $msg);
+
+ if ($query->execute()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /********************************
+ *********Load More**********
+ **********************************/
+
+ /*Messages Load More*/
+ function total_my_messages() {
+ if ($this->databaseConnection()) {
+ $my_total_messages = 0;
+ if (isset($_SESSION['user_id'])) {
+ $user_id = (int) $_SESSION['user_id'];
+ } else {
+ return $my_total_messages;
+ }
+ $query = $this->db_connection->prepare("
+ SELECT COUNT(*) AS MY_TOTAL_MESSAGES
+ FROM `messages`
+ WHERE `username_key`=:u_id
+ ");
+ $query->bindParam('u_id', $user_id);
+ if ($query->execute()) {
+ $fetch = $query->fetchObject();
+ $my_total_messages = (int) $fetch->MY_TOTAL_MESSAGES;
+ }
+ return $my_total_messages;
+ }
+ return false;
+ }
+
+ public function total_my_orders()
+ {
+ if ($this->databaseConnection()) {
+ $my_total_orders = 0;
+ if (isset($_SESSION['user_id'])) {
+ $user_id = (int)$_SESSION['user_id'];
+ } else {
+ return $my_total_orders;
+ }
+ $query = $this->db_connection->prepare("
+ SELECT COUNT(*) AS MY_TOTAL_ORDERS
+ FROM `orderbook`
+ WHERE `CustomerId`=:u_id
+ ");
+ $query->bindParam('u_id', $user_id);
+ if ($query->execute()) {
+ $fetch = $query->fetchObject();
+ $my_total_orders = (int)$fetch->MY_TOTAL_ORDERS;
+ }
+ return $my_total_orders;
+ }
+ return false;
+ }
+
+ public function total_my_transactions()
+ {
+ if ($this->databaseConnection()) {
+ $my_total_orders = 0;
+ if (isset($_SESSION['user_id'])) {
+ $user_id = (int)$_SESSION['user_id'];
+ } else {
+ return $my_total_orders;
+ }
+ $query = $this->db_connection->prepare("
+ SELECT COUNT(*) AS MY_TOTAL_ORDERS
+ FROM `transaction`
+ WHERE `a_buyer`= :u_id OR `b_seller`= :u_id
+ ");
+ $query->bindParam('u_id', $user_id);
+ if ($query->execute()) {
+ $fetch = $query->fetchObject();
+ $my_total_orders = (int)$fetch->MY_TOTAL_ORDERS;
+ }
+ return $my_total_orders;
+ }
+ return false;
+ }
+
+ public function total_recent_transactions()
+ {
+ if ($this->databaseConnection()) {
+ $total_orders = 0;
+
+ $query = $this->db_connection->prepare("
+ SELECT COUNT(*) AS TOTAL_ORDERS
+ FROM `transaction`
+ ");
+ if ($query->execute()) {
+ $fetch = $query->fetchObject();
+ $total_orders = (int)$fetch->TOTAL_ORDERS;
+ }
+ return $total_orders;
+ }
+ return false;
+ }
+
+ private function isUserOrderOwner($order_id=0, $user_id=0) {
+ if ($this->databaseConnection()) {
+ $query = $this->db_connection->prepare("
+ SELECT `OrderId` FROM `orderbook`
+ WHERE `OrderId`=:o_id
+ AND `CustomerId`=:c_id
+ LIMIT 1
+ ");
+ $query->bindParam('o_id', $order_id);
+ $query->bindParam('c_id', $user_id);
+ if ($query->execute()) {
+ if ($query->rowCount()==1) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
}
diff --git a/classes/Users.php b/classes/Users.php
index fba9b21..083415f 100644
--- a/classes/Users.php
+++ b/classes/Users.php
@@ -16,7 +16,7 @@ class Users {
private $user_name = null;
private $email = null;
private $name = null;
- private $mob = null;
+ private $is_active = null;
private $user_is_logged_in = false;
private $errors = array();
@@ -85,13 +85,13 @@ class Users {
} else {
- $this->user_name = $_SESSION['FIRSTNAME'].time();
- $this->name = $_SESSION['FULLNAME'];
- $this->email = $_SESSION['EMAIL'];
+ $this->user_name = $_SESSION['first_name'].time();
+ $this->name = $_SESSION['full_name'];
+ $this->email = $_SESSION['email'];
$query = $this->db_connection->prepare("
- INSERT INTO $this->customers_table (`CustomerId`, `fb_id`, `Username`, `Email`, `Name`, `UpdateDate`, `InsertDate`, `SaveDate`, `Mobile`)
- VALUES ('',:fb_id,:Username,:Email,:Name,NULL,NOW(),NULL,NULL)
+ INSERT INTO $this->customers_table (`CustomerId`, `fb_id`, `Username`, `Email`, `Name`, `UpdateDate`, `InsertDate`, `SaveDate`, `is_active`)
+ VALUES ('',:fb_id,:Username,:Email,:Name,NULL,NOW(),NULL,0)
");
$query->bindValue(':fb_id', $fb_id, PDO::PARAM_INT);
@@ -107,7 +107,7 @@ class Users {
$crypto = $this->insert_balance($_SESSION['user_id'], $AssetTypeId, $Balance, $FrozenBalance);
$AssetTypeId = 'traditional';
- $Balance = 1000.00;
+ $Balance = 100.00;
$FrozenBalance = 0.00;
$cash = $this->insert_balance($_SESSION['user_id'], $AssetTypeId, $Balance, $FrozenBalance);
@@ -128,12 +128,12 @@ class Users {
if ($this->databaseConnection()) {
- $query = $this->db_connection->prepare("SELECT * FROM $this->customers_table WHERE customerId = :customerId LIMIT 1");
+ $query = $this->db_connection->prepare("SELECT * FROM $this->customers_table WHERE customerId = :customerId AND is_active = 1 LIMIT 1");
$query->bindParam('customerId', $customerId);
if ($query->execute()) {
$row_count = $query->rowCount();
- if ($row_count > 0) {
+ if ($row_count == 1) {
return $user_details = $query->fetchObject();
}
return false;
@@ -144,16 +144,17 @@ class Users {
return false;
}
- public function displayUserTransaction($user_id) {
+ public function displayUserTransaction($user_id, $start=0, $limit=10) {
if ($this->databaseConnection()) {
$transactions = array();
+
$query = $this->db_connection->prepare("
- SELECT TransactionId AS T_ID, a_buyer AS BUYER_ID, b_seller AS SELLER_ID, (SELECT customer.Name FROM customer WHERE customer.CustomerId=BUYER_ID) AS BUYER, (SELECT customer.Name FROM customer WHERE customer.CustomerId=SELLER_ID) AS SELLER, B_AMOUNT AS TRADE_PRICE, transaction.InsertDate
+ SELECT TransactionId AS T_ID, a_buyer AS BUYER_ID, b_seller AS SELLER_ID, (SELECT customer.Name FROM customer WHERE customer.CustomerId=BUYER_ID) AS BUYER, (SELECT customer.Name FROM customer WHERE customer.CustomerId=SELLER_ID) AS SELLER, B_AMOUNT AS TRADE_PRICE, transaction.InsertDate, transaction.qty_traded AS TRADED_QTY
FROM transaction, customer
WHERE `a_buyer`= :u_id OR `b_seller`= :u_id
GROUP BY T_ID
ORDER BY T_ID DESC
- LIMIT 50
+ LIMIT $start, $limit
");
$query->bindParam('u_id', $user_id);
if ($query->execute()) {
@@ -169,5 +170,49 @@ class Users {
return false;
}
+ public function list_messages_by_userId($user_id, $start=0, $limit=10) {
+ if ($this->databaseConnection()) {
+ $messages = array();
+
+ $query = $this->db_connection->prepare("
+ SELECT * FROM `messages` WHERE `username_key`= :uk
+ ORDER BY order_id DESC
+ LIMIT $start, $limit
+ ");
+ $query->bindParam("uk", $user_id);
+ if ($query->execute()) {
+ $rowCount = $query->rowCount();
+ if ($rowCount > 0) {
+ while ($tr = $query->fetchObject()) {
+ $messages[] = $tr;
+ }
+ }
+ }
+ return $messages;
+ }
+ return false;
+ }
+
+ public function actions_user($u_id, $act=1) {
+ if ($this->databaseConnection()) {
+ if (!empty($u_id)) {
+
+ $act = (int) $act;
+ $u_id = (int) $u_id;
+
+ $query = $this->db_connection->prepare("
+ UPDATE `customer` SET `is_active`= $act
+ WHERE CustomerId = :u_id
+ LIMIT 1
+ ");
+ $query->bindParam('u_id', $u_id);
+
+ if ($query->execute()) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
}
\ No newline at end of file
diff --git a/config/config.php b/config/config.php
deleted file mode 100644
index 6784133..0000000
--- a/config/config.php
+++ /dev/null
@@ -1,17 +0,0 @@
-getMessage();
-}
\ No newline at end of file
diff --git a/css/bootstrap.css b/css/bootstrap.css
new file mode 100644
index 0000000..ed3905e
--- /dev/null
+++ b/css/bootstrap.css
@@ -0,0 +1,6 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
+/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/css/custom.css b/css/custom.css
new file mode 100644
index 0000000..93aaf37
--- /dev/null
+++ b/css/custom.css
@@ -0,0 +1,456 @@
+h2 {
+ font-weight: bold;
+ font-size: 20px;
+ color: #383838;
+ letter-spacing: -0.23px;
+}
+h4 {
+ font-weight: bold;
+ font-size: 18px;
+ color: #4D80CF;
+ letter-spacing: -0.7px;
+}
+ul {
+ list-style-type: none;
+}
+ul.msg-ul li {
+ font-size: x-large;
+}
+.text--default {
+ font-family: "Open Sans";
+ font-weight: 300;
+ font-size: 14px;
+ color: #383838;
+ letter-spacing: -0.06px;
+}
+.text--bold {
+ font-weight: 700 !important;
+}
+.text--tiny {
+ font-size: 9px;
+ color: #D2D2D2;
+ letter-spacing: -0.23px;
+}
+.text--uppercase {
+ font-size: 14px;
+ text-transform: uppercase;
+ color: #FFFFFF;
+ letter-spacing: 0.2px;
+}
+hr {
+ width: 70%;
+ border-top: 1px solid #F8F8F8;
+}
+.logo {
+ width: 220px;
+ height: 25px;
+ cursor: pointer;
+ background: url('../images/logo.svg');
+ background-repeat: no-repeat;
+ display: block;
+ -webkit-transition: all 200ms ease-out;
+ -moz-transition: all 200ms ease-out;
+ -ms-transition: all 200ms ease-out;
+ -o-transition: all 200ms ease-out;
+ transition: all 200ms ease-out;
+}
+.logo:hover {
+ transform: scale(1.1);
+}
+.lazy-form label {
+ opacity: .6 !important;
+ -webkit-transition: all 200ms ease-out;
+ -moz-transition: all 200ms ease-out;
+ -ms-transition: all 200ms ease-out;
+ -o-transition: all 200ms ease-out;
+ transition: all 200ms ease-out;
+}
+.lazy-form:hover label {
+ opacity: 1 !important;
+}
+input[type=text] {
+ background: #FAFAFA;
+ border: 1px solid #F4F4F4;
+ border-radius: 3px;
+ display: block;
+ width: 100%;
+ padding: 10px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+label {
+ display: block;
+ font-weight: 100;
+ color: #383838;
+ letter-spacing: -0.03px;
+}
+.radio-group {
+ text-align: center;
+}
+.radio-group label {
+ font-size: 12px;
+ font-weight: bold;
+ display: inline;
+ margin-right: 20px;
+ cursor: pointer;
+}
+table {
+ color: #5D5A5A !important;
+}
+table thead {
+ background: #5C99F6;
+ color: white;
+ font-weight: normal !important;
+ height: 50px;
+ vertical-align: center !important;
+}
+table thead th {
+ padding: 15px !important;
+ text-align: left;
+}
+table td {
+ height: 50px;
+ vertical-align: center !important;
+ font-weight: bold;
+ padding: 10px 15px !important;
+ border-top: 0px solid #fff !important;
+}
+table.sell td {
+ font-weight: bold;
+ background: #EEFFEE !important;
+ padding: 10px;
+}
+table.buy td {
+ font-weight: bold;
+ background: #FFF3F3 !important;
+ padding: 10px;
+}
+.btn--primary-2 {
+ background: #F4A606 !important;
+ box-shadow: 0 4px 0 0 #CC8A00 !important;
+}
+.btn--primary-1 {
+ background: #5C9AF7 !important;
+ box-shadow: 0 4px 0 0 #4987E4 !important;
+}
+.btn--primary-3 {
+ background: #46CDAB !important;
+ box-shadow: 0 4px 0 0 #29A586 !important;
+}
+.btn-white {
+ color: white;
+}
+.btn-white:hover {
+ color: white;
+}
+.btn {
+ box-shadow: 0 4px 0 0 ;
+ border-radius: 5px;
+ height: 45px;
+ width: 100%;
+ display: block;
+ font-weight: bold;
+ padding-top: 10px;
+}
+.btn.btn--facebook {
+ background: #FFFFFF;
+ box-shadow: 5px 5px 0 0 #3b5998;
+ font-size: 16px;
+ font-weight: bold;
+ color: #3b5998;
+ letter-spacing: -0.3px;
+ border-radius: 0px;
+ width: 360px;
+ display: inline-block;
+ padding-top: 9px;
+}
+.btn.btn--facebook-2 {
+ display: block;
+ background: #3b5998;
+ font-size: 16px;
+ font-weight: bold;
+ color: #FFFFFF;
+ letter-spacing: -0.3px;
+ border-radius: 0px;
+ width: 320px;
+ margin: 0 auto;
+}
+
+.btn.btn--facebook-2 a {
+ color: #FFFFFF;
+}
+.modal-content {
+ border-radius: 2px !important;
+}
+.modal-header {
+ padding: 15px;
+ border-bottom: 0px solid #e5e5e5;
+}
+.modal-footer {
+ padding: 15px;
+ text-align: right;
+ border-top: 0px solid #e5e5e5;
+}
+.radius--0 {
+ border-radius: 0px;
+}
+.mmt--15 {
+ margin-top: -15px !important;
+}
+.mt--1 {
+ margin-top: 10px !important;
+}
+.mt--2 {
+ margin-top: 20px !important;
+}
+.mt--3 {
+ margin-top: 30px !important;
+}
+.mt--4 {
+ margin-top: 40px !important;
+}
+.mt--5 {
+ margin-top: 50px !important;
+}
+.mt--6 {
+ margin-top: 60px !important;
+}
+.mt--7 {
+ margin-top: 70px !important;
+}
+.mt--8 {
+ margin-top: 80px !important;
+}
+.mt--9 {
+ margin-top: 90px !important;
+}
+.mt--10 {
+ margin-top: 100px !important;
+}
+.mb--1 {
+ margin-bottom: 10px !important;
+}
+.mb--2 {
+ margin-bottom: 20px !important;
+}
+.mb--3 {
+ margin-bottom: 30px !important;
+}
+.mb--4 {
+ margin-bottom: 40px !important;
+}
+.mb--5 {
+ margin-bottom: 50px !important;
+}
+.mb--6 {
+ margin-bottom: 60px !important;
+}
+.mb--7 {
+ margin-bottom: 70px !important;
+}
+.mb--8 {
+ margin-bottom: 80px !important;
+}
+.mb--9 {
+ margin-bottom: 90px !important;
+}
+.mb--10 {
+ margin-bottom: 100px !important;
+}
+.m--1 {
+ margin: 10px !important;
+}
+.m--2 {
+ margin: 20px !important;
+}
+.m--3 {
+ margin: 30px !important;
+}
+.m--4 {
+ margin: 40px !important;
+}
+.m--5 {
+ margin: 50px !important;
+}
+.m--6 {
+ margin: 60px !important;
+}
+.m--7 {
+ margin: 70px !important;
+}
+.m--8 {
+ margin: 80px !important;
+}
+.m--9 {
+ margin: 90px !important;
+}
+.m--10 {
+ margin: 100px !important;
+}
+.pt--1 {
+ padding-top: 10px !important;
+}
+.pt--2 {
+ padding-top: 20px !important;
+}
+.pt--3 {
+ padding-top: 30px !important;
+}
+.pt--4 {
+ padding-top: 40px !important;
+}
+.pt--5 {
+ padding-top: 50px !important;
+}
+.pt--6 {
+ padding-top: 60px !important;
+}
+.pt--7 {
+ padding-top: 70px !important;
+}
+.pt--8 {
+ padding-top: 80px !important;
+}
+.pt--9 {
+ padding-top: 90px !important;
+}
+.pt--10 {
+ padding-top: 100px !important;
+}
+.pb--1 {
+ padding-bottom: 10px !important;
+}
+.pb--2 {
+ padding-bottom: 20px !important;
+}
+.pb--3 {
+ padding-bottom: 30px !important;
+}
+.pb--4 {
+ padding-bottom: 40px !important;
+}
+.pb--5 {
+ padding-bottom: 50px !important;
+}
+.pb--6 {
+ padding-bottom: 60px !important;
+}
+.pb--7 {
+ padding-bottom: 70px !important;
+}
+.pb--8 {
+ padding-bottom: 80px !important;
+}
+.pb--9 {
+ padding-bottom: 90px !important;
+}
+.pb--10 {
+ padding-bottom: 100px !important;
+}
+.p--1 {
+ padding: 10px !important;
+}
+.p--2 {
+ padding: 20px !important;
+}
+.p--3 {
+ padding: 30px !important;
+}
+.p--4 {
+ padding: 40px !important;
+}
+.p--5 {
+ padding: 50px !important;
+}
+.p--6 {
+ padding: 60px !important;
+}
+.p--7 {
+ padding: 70px !important;
+}
+.p--8 {
+ padding: 80px !important;
+}
+.p--9 {
+ padding: 90px !important;
+}
+.p--10 {
+ padding: 100px !important;
+}
+.background--primary {
+ background: #5C99F6;
+ color: #ffffff !important;
+}
+.background--primary-1 {
+ background: #5C9AF7;
+ color: #ffffff !important;
+}
+.background--primary-2 {
+ background: #F4A606;
+ color: #ffffff !important;
+}
+.background--primary-3 {
+ background: #46CDAB;
+ color: #ffffff !important;
+}
+.background--primary-4 {
+ background: #5C9AF7;
+ color: #ffffff !important;
+}
+.background-white {
+ background: #FCFCFC !important;
+}
+.background-white-1 {
+ background: #F9F9F9 !important;
+}
+.box {
+ background: #FFFFFF;
+ box-shadow: 0 2px 10px 0 #E5E5E5;
+ overflow: hidden;
+ display: block;
+ -webkit-transition: all 200ms ease-out;
+ -moz-transition: all 200ms ease-out;
+ -ms-transition: all 200ms ease-out;
+ -o-transition: all 200ms ease-out;
+ transition: all 200ms ease-out;
+}
+.box:hover {
+ box-shadow: 0 2px 50px 0 #E5E5E5;
+}
+@media screen and (max-width: 768px) {
+ .container-fluid {
+ padding: 0px;
+ }
+ .container {
+ padding: 0px;
+ }
+ .btn.btn--facebook {
+ /* Rectangle 16: */
+ background: #FFFFFF;
+ box-shadow: 5px 5px 0 0 #3b5998 ;
+ font-size: 12px;
+ padding-top: 12px;
+ font-weight: bold;
+ color: #3b5998;
+ letter-spacing: -0.3px;
+ border-radius: 0px;
+ width: 100%;
+ display: block;
+ }
+ .logo {
+ margin: 0 auto;
+ }
+ .mt--1-m {
+ margin-top: 20px;
+ }
+ .text--center--mobile {
+ text-align: center;
+ font-size: 18px;
+ }
+ .text--center--mobile h6 {
+ font-size: 18px;
+ }
+ label {
+ font-size: 12px;
+ }
+}
diff --git a/css/mate.css b/css/mate.css
new file mode 100644
index 0000000..1e79e03
--- /dev/null
+++ b/css/mate.css
@@ -0,0 +1,1579 @@
+@charset "UTF-8";
+
+/*!
+ * animate.css -http://daneden.me/animate
+ * Version - 3.5.2
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
+ *
+ * Copyright (c) 2017 Daniel Eden
+ */
+
+.animated {
+ animation-duration: 1s;
+ animation-fill-mode: both;
+}
+
+.animated.infinite {
+ animation-iteration-count: infinite;
+}
+
+.animated.hinge {
+ animation-duration: 2s;
+}
+
+.animated.flipOutX,
+.animated.flipOutY,
+.animated.bounceIn,
+.animated.bounceOut {
+ animation-duration: .75s;
+}
+
+@keyframes bounce {
+ from, 20%, 53%, 80%, to {
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+ transform: translate3d(0,0,0);
+ }
+
+ 40%, 43% {
+ animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+ transform: translate3d(0, -30px, 0);
+ }
+
+ 70% {
+ animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+ transform: translate3d(0, -15px, 0);
+ }
+
+ 90% {
+ transform: translate3d(0,-4px,0);
+ }
+}
+
+.bounce {
+ animation-name: bounce;
+ transform-origin: center bottom;
+}
+
+@keyframes flash {
+ from, 50%, to {
+ opacity: 1;
+ }
+
+ 25%, 75% {
+ opacity: 0;
+ }
+}
+
+.flash {
+ animation-name: flash;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@keyframes pulse {
+ from {
+ transform: scale3d(1, 1, 1);
+ }
+
+ 50% {
+ transform: scale3d(1.05, 1.05, 1.05);
+ }
+
+ to {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.pulse {
+ animation-name: pulse;
+}
+
+@keyframes rubberBand {
+ from {
+ transform: scale3d(1, 1, 1);
+ }
+
+ 30% {
+ transform: scale3d(1.25, 0.75, 1);
+ }
+
+ 40% {
+ transform: scale3d(0.75, 1.25, 1);
+ }
+
+ 50% {
+ transform: scale3d(1.15, 0.85, 1);
+ }
+
+ 65% {
+ transform: scale3d(.95, 1.05, 1);
+ }
+
+ 75% {
+ transform: scale3d(1.05, .95, 1);
+ }
+
+ to {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.rubberBand {
+ animation-name: rubberBand;
+}
+
+@keyframes shake {
+ from, to {
+ transform: translate3d(0, 0, 0);
+ }
+
+ 10%, 30%, 50%, 70%, 90% {
+ transform: translate3d(-10px, 0, 0);
+ }
+
+ 20%, 40%, 60%, 80% {
+ transform: translate3d(10px, 0, 0);
+ }
+}
+
+.shake {
+ animation-name: shake;
+}
+
+@keyframes headShake {
+ 0% {
+ transform: translateX(0);
+ }
+
+ 6.5% {
+ transform: translateX(-6px) rotateY(-9deg);
+ }
+
+ 18.5% {
+ transform: translateX(5px) rotateY(7deg);
+ }
+
+ 31.5% {
+ transform: translateX(-3px) rotateY(-5deg);
+ }
+
+ 43.5% {
+ transform: translateX(2px) rotateY(3deg);
+ }
+
+ 50% {
+ transform: translateX(0);
+ }
+}
+
+.headShake {
+ animation-timing-function: ease-in-out;
+ animation-name: headShake;
+}
+
+@keyframes swing {
+ 20% {
+ transform: rotate3d(0, 0, 1, 15deg);
+ }
+
+ 40% {
+ transform: rotate3d(0, 0, 1, -10deg);
+ }
+
+ 60% {
+ transform: rotate3d(0, 0, 1, 5deg);
+ }
+
+ 80% {
+ transform: rotate3d(0, 0, 1, -5deg);
+ }
+
+ to {
+ transform: rotate3d(0, 0, 1, 0deg);
+ }
+}
+
+.swing {
+ transform-origin: top center;
+ animation-name: swing;
+}
+
+@keyframes tada {
+ from {
+ transform: scale3d(1, 1, 1);
+ }
+
+ 10%, 20% {
+ transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 30%, 50%, 70%, 90% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 40%, 60%, 80% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ to {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.tada {
+ animation-name: tada;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@keyframes wobble {
+ from {
+ transform: none;
+ }
+
+ 15% {
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+ }
+
+ 30% {
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 45% {
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 60% {
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+ }
+
+ 75% {
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+ }
+
+ to {
+ transform: none;
+ }
+}
+
+.wobble {
+ animation-name: wobble;
+}
+
+@keyframes jello {
+ from, 11.1%, to {
+ transform: none;
+ }
+
+ 22.2% {
+ transform: skewX(-12.5deg) skewY(-12.5deg);
+ }
+
+ 33.3% {
+ transform: skewX(6.25deg) skewY(6.25deg);
+ }
+
+ 44.4% {
+ transform: skewX(-3.125deg) skewY(-3.125deg);
+ }
+
+ 55.5% {
+ transform: skewX(1.5625deg) skewY(1.5625deg);
+ }
+
+ 66.6% {
+ transform: skewX(-0.78125deg) skewY(-0.78125deg);
+ }
+
+ 77.7% {
+ transform: skewX(0.390625deg) skewY(0.390625deg);
+ }
+
+ 88.8% {
+ transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+ }
+}
+
+.jello {
+ animation-name: jello;
+ transform-origin: center;
+}
+
+@keyframes bounceIn {
+ from, 20%, 40%, 60%, 80%, to {
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+ }
+
+ 0% {
+ opacity: 0;
+ transform: scale3d(.3, .3, .3);
+ }
+
+ 20% {
+ transform: scale3d(1.1, 1.1, 1.1);
+ }
+
+ 40% {
+ transform: scale3d(.9, .9, .9);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(1.03, 1.03, 1.03);
+ }
+
+ 80% {
+ transform: scale3d(.97, .97, .97);
+ }
+
+ to {
+ opacity: 1;
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.bounceIn {
+ animation-name: bounceIn;
+}
+
+@keyframes bounceInDown {
+ from, 60%, 75%, 90%, to {
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+ }
+
+ 0% {
+ opacity: 0;
+ transform: translate3d(0, -3000px, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: translate3d(0, 25px, 0);
+ }
+
+ 75% {
+ transform: translate3d(0, -10px, 0);
+ }
+
+ 90% {
+ transform: translate3d(0, 5px, 0);
+ }
+
+ to {
+ transform: none;
+ }
+}
+
+.bounceInDown {
+ animation-name: bounceInDown;
+}
+
+@keyframes bounceInLeft {
+ from, 60%, 75%, 90%, to {
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+ }
+
+ 0% {
+ opacity: 0;
+ transform: translate3d(-3000px, 0, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: translate3d(25px, 0, 0);
+ }
+
+ 75% {
+ transform: translate3d(-10px, 0, 0);
+ }
+
+ 90% {
+ transform: translate3d(5px, 0, 0);
+ }
+
+ to {
+ transform: none;
+ }
+}
+
+.bounceInLeft {
+ animation-name: bounceInLeft;
+}
+
+@keyframes bounceInRight {
+ from, 60%, 75%, 90%, to {
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+ }
+
+ from {
+ opacity: 0;
+ transform: translate3d(3000px, 0, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: translate3d(-25px, 0, 0);
+ }
+
+ 75% {
+ transform: translate3d(10px, 0, 0);
+ }
+
+ 90% {
+ transform: translate3d(-5px, 0, 0);
+ }
+
+ to {
+ transform: none;
+ }
+}
+
+.bounceInRight {
+ animation-name: bounceInRight;
+}
+
+@keyframes bounceInUp {
+ from, 60%, 75%, 90%, to {
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+ }
+
+ from {
+ opacity: 0;
+ transform: translate3d(0, 3000px, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: translate3d(0, -20px, 0);
+ }
+
+ 75% {
+ transform: translate3d(0, 10px, 0);
+ }
+
+ 90% {
+ transform: translate3d(0, -5px, 0);
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.bounceInUp {
+ animation-name: bounceInUp;
+}
+
+@keyframes bounceOut {
+ 20% {
+ transform: scale3d(.9, .9, .9);
+ }
+
+ 50%, 55% {
+ opacity: 1;
+ transform: scale3d(1.1, 1.1, 1.1);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale3d(.3, .3, .3);
+ }
+}
+
+.bounceOut {
+ animation-name: bounceOut;
+}
+
+@keyframes bounceOutDown {
+ 20% {
+ transform: translate3d(0, 10px, 0);
+ }
+
+ 40%, 45% {
+ opacity: 1;
+ transform: translate3d(0, -20px, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, 2000px, 0);
+ }
+}
+
+.bounceOutDown {
+ animation-name: bounceOutDown;
+}
+
+@keyframes bounceOutLeft {
+ 20% {
+ opacity: 1;
+ transform: translate3d(20px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(-2000px, 0, 0);
+ }
+}
+
+.bounceOutLeft {
+ animation-name: bounceOutLeft;
+}
+
+@keyframes bounceOutRight {
+ 20% {
+ opacity: 1;
+ transform: translate3d(-20px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(2000px, 0, 0);
+ }
+}
+
+.bounceOutRight {
+ animation-name: bounceOutRight;
+}
+
+@keyframes bounceOutUp {
+ 20% {
+ transform: translate3d(0, -10px, 0);
+ }
+
+ 40%, 45% {
+ opacity: 1;
+ transform: translate3d(0, 20px, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, -2000px, 0);
+ }
+}
+
+.bounceOutUp {
+ animation-name: bounceOutUp;
+}
+
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+.fadeIn {
+ animation-name: fadeIn;
+}
+
+@keyframes fadeInDown {
+ from {
+ opacity: 0;
+ transform: translate3d(0, -100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInDown {
+ animation-name: fadeInDown;
+}
+
+@keyframes fadeInDownBig {
+ from {
+ opacity: 0;
+ transform: translate3d(0, -2000px, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInDownBig {
+ animation-name: fadeInDownBig;
+}
+
+@keyframes fadeInLeft {
+ from {
+ opacity: 0;
+ transform: translate3d(-100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInLeft {
+ animation-name: fadeInLeft;
+}
+
+@keyframes fadeInLeftBig {
+ from {
+ opacity: 0;
+ transform: translate3d(-2000px, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInLeftBig {
+ animation-name: fadeInLeftBig;
+}
+
+@keyframes fadeInRight {
+ from {
+ opacity: 0;
+ transform: translate3d(100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInRight {
+ animation-name: fadeInRight;
+}
+
+@keyframes fadeInRightBig {
+ from {
+ opacity: 0;
+ transform: translate3d(2000px, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInRightBig {
+ animation-name: fadeInRightBig;
+}
+
+@keyframes fadeInUp {
+ from {
+ opacity: 0;
+ transform: translate3d(0, 100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInUp {
+ animation-name: fadeInUp;
+}
+
+@keyframes fadeInUpBig {
+ from {
+ opacity: 0;
+ transform: translate3d(0, 2000px, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInUpBig {
+ animation-name: fadeInUpBig;
+}
+
+@keyframes fadeOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+.fadeOut {
+ animation-name: fadeOut;
+}
+
+@keyframes fadeOutDown {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+.fadeOutDown {
+ animation-name: fadeOutDown;
+}
+
+@keyframes fadeOutDownBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, 2000px, 0);
+ }
+}
+
+.fadeOutDownBig {
+ animation-name: fadeOutDownBig;
+}
+
+@keyframes fadeOutLeft {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+.fadeOutLeft {
+ animation-name: fadeOutLeft;
+}
+
+@keyframes fadeOutLeftBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(-2000px, 0, 0);
+ }
+}
+
+.fadeOutLeftBig {
+ animation-name: fadeOutLeftBig;
+}
+
+@keyframes fadeOutRight {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+.fadeOutRight {
+ animation-name: fadeOutRight;
+}
+
+@keyframes fadeOutRightBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(2000px, 0, 0);
+ }
+}
+
+.fadeOutRightBig {
+ animation-name: fadeOutRightBig;
+}
+
+@keyframes fadeOutUp {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+.fadeOutUp {
+ animation-name: fadeOutUp;
+}
+
+@keyframes fadeOutUpBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, -2000px, 0);
+ }
+}
+
+.fadeOutUpBig {
+ animation-name: fadeOutUpBig;
+}
+
+@keyframes flip {
+ from {
+ transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+ animation-timing-function: ease-out;
+ }
+
+ 40% {
+ transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+ animation-timing-function: ease-out;
+ }
+
+ 50% {
+ transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+ animation-timing-function: ease-in;
+ }
+
+ 80% {
+ transform: perspective(400px) scale3d(.95, .95, .95);
+ animation-timing-function: ease-in;
+ }
+
+ to {
+ transform: perspective(400px);
+ animation-timing-function: ease-in;
+ }
+}
+
+.animated.flip {
+ -webkit-backface-visibility: visible;
+ backface-visibility: visible;
+ animation-name: flip;
+}
+
+@keyframes flipInX {
+ from {
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ animation-timing-function: ease-in;
+ opacity: 0;
+ }
+
+ 40% {
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ animation-timing-function: ease-in;
+ }
+
+ 60% {
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ opacity: 1;
+ }
+
+ 80% {
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+ }
+
+ to {
+ transform: perspective(400px);
+ }
+}
+
+.flipInX {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ animation-name: flipInX;
+}
+
+@keyframes flipInY {
+ from {
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ animation-timing-function: ease-in;
+ opacity: 0;
+ }
+
+ 40% {
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ animation-timing-function: ease-in;
+ }
+
+ 60% {
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ opacity: 1;
+ }
+
+ 80% {
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+ }
+
+ to {
+ transform: perspective(400px);
+ }
+}
+
+.flipInY {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ animation-name: flipInY;
+}
+
+@keyframes flipOutX {
+ from {
+ transform: perspective(400px);
+ }
+
+ 30% {
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ opacity: 1;
+ }
+
+ to {
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ opacity: 0;
+ }
+}
+
+.flipOutX {
+ animation-name: flipOutX;
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+}
+
+@keyframes flipOutY {
+ from {
+ transform: perspective(400px);
+ }
+
+ 30% {
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ opacity: 1;
+ }
+
+ to {
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ opacity: 0;
+ }
+}
+
+.flipOutY {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ animation-name: flipOutY;
+}
+
+@keyframes lightSpeedIn {
+ from {
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
+ opacity: 0;
+ }
+
+ 60% {
+ transform: skewX(20deg);
+ opacity: 1;
+ }
+
+ 80% {
+ transform: skewX(-5deg);
+ opacity: 1;
+ }
+
+ to {
+ transform: none;
+ opacity: 1;
+ }
+}
+
+.lightSpeedIn {
+ animation-name: lightSpeedIn;
+ animation-timing-function: ease-out;
+}
+
+@keyframes lightSpeedOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0;
+ }
+}
+
+.lightSpeedOut {
+ animation-name: lightSpeedOut;
+ animation-timing-function: ease-in;
+}
+
+@keyframes rotateIn {
+ from {
+ transform-origin: center;
+ transform: rotate3d(0, 0, 1, -200deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: center;
+ transform: none;
+ opacity: 1;
+ }
+}
+
+.rotateIn {
+ animation-name: rotateIn;
+}
+
+@keyframes rotateInDownLeft {
+ from {
+ transform-origin: left bottom;
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: left bottom;
+ transform: none;
+ opacity: 1;
+ }
+}
+
+.rotateInDownLeft {
+ animation-name: rotateInDownLeft;
+}
+
+@keyframes rotateInDownRight {
+ from {
+ transform-origin: right bottom;
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: right bottom;
+ transform: none;
+ opacity: 1;
+ }
+}
+
+.rotateInDownRight {
+ animation-name: rotateInDownRight;
+}
+
+@keyframes rotateInUpLeft {
+ from {
+ transform-origin: left bottom;
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: left bottom;
+ transform: none;
+ opacity: 1;
+ }
+}
+
+.rotateInUpLeft {
+ animation-name: rotateInUpLeft;
+}
+
+@keyframes rotateInUpRight {
+ from {
+ transform-origin: right bottom;
+ transform: rotate3d(0, 0, 1, -90deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: right bottom;
+ transform: none;
+ opacity: 1;
+ }
+}
+
+.rotateInUpRight {
+ animation-name: rotateInUpRight;
+}
+
+@keyframes rotateOut {
+ from {
+ transform-origin: center;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: center;
+ transform: rotate3d(0, 0, 1, 200deg);
+ opacity: 0;
+ }
+}
+
+.rotateOut {
+ animation-name: rotateOut;
+}
+
+@keyframes rotateOutDownLeft {
+ from {
+ transform-origin: left bottom;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: left bottom;
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutDownLeft {
+ animation-name: rotateOutDownLeft;
+}
+
+@keyframes rotateOutDownRight {
+ from {
+ transform-origin: right bottom;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: right bottom;
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutDownRight {
+ animation-name: rotateOutDownRight;
+}
+
+@keyframes rotateOutUpLeft {
+ from {
+ transform-origin: left bottom;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: left bottom;
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutUpLeft {
+ animation-name: rotateOutUpLeft;
+}
+
+@keyframes rotateOutUpRight {
+ from {
+ transform-origin: right bottom;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: right bottom;
+ transform: rotate3d(0, 0, 1, 90deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutUpRight {
+ animation-name: rotateOutUpRight;
+}
+
+@keyframes hinge {
+ 0% {
+ transform-origin: top left;
+ animation-timing-function: ease-in-out;
+ }
+
+ 20%, 60% {
+ transform: rotate3d(0, 0, 1, 80deg);
+ transform-origin: top left;
+ animation-timing-function: ease-in-out;
+ }
+
+ 40%, 80% {
+ transform: rotate3d(0, 0, 1, 60deg);
+ transform-origin: top left;
+ animation-timing-function: ease-in-out;
+ opacity: 1;
+ }
+
+ to {
+ transform: translate3d(0, 700px, 0);
+ opacity: 0;
+ }
+}
+
+.hinge {
+ animation-name: hinge;
+}
+
+@keyframes jackInTheBox {
+ from {
+ opacity: 0;
+ transform: scale(0.1) rotate(30deg);
+ transform-origin: center bottom;
+ }
+
+ 50% {
+ transform: rotate(-10deg);
+ }
+
+ 70% {
+ transform: rotate(3deg);
+ }
+
+ to {
+ opacity: 1;
+ transform: scale(1);
+ }
+}
+
+.jackInTheBox {
+ animation-name: jackInTheBox;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@keyframes rollIn {
+ from {
+ opacity: 0;
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.rollIn {
+ animation-name: rollIn;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@keyframes rollOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+ }
+}
+
+.rollOut {
+ animation-name: rollOut;
+}
+
+@keyframes zoomIn {
+ from {
+ opacity: 0;
+ transform: scale3d(.3, .3, .3);
+ }
+
+ 50% {
+ opacity: 1;
+ }
+}
+
+.zoomIn {
+ animation-name: zoomIn;
+}
+
+@keyframes zoomInDown {
+ from {
+ opacity: 0;
+ transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+ }
+}
+
+.zoomInDown {
+ animation-name: zoomInDown;
+}
+
+@keyframes zoomInLeft {
+ from {
+ opacity: 0;
+ transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+ }
+}
+
+.zoomInLeft {
+ animation-name: zoomInLeft;
+}
+
+@keyframes zoomInRight {
+ from {
+ opacity: 0;
+ transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+ }
+}
+
+.zoomInRight {
+ animation-name: zoomInRight;
+}
+
+@keyframes zoomInUp {
+ from {
+ opacity: 0;
+ transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+ }
+}
+
+.zoomInUp {
+ animation-name: zoomInUp;
+}
+
+@keyframes zoomOut {
+ from {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0;
+ transform: scale3d(.3, .3, .3);
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+.zoomOut {
+ animation-name: zoomOut;
+}
+
+@keyframes zoomOutDown {
+ 40% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+ transform-origin: center bottom;
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+ }
+}
+
+.zoomOutDown {
+ animation-name: zoomOutDown;
+}
+
+@keyframes zoomOutLeft {
+ 40% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale(.1) translate3d(-2000px, 0, 0);
+ transform-origin: left center;
+ }
+}
+
+.zoomOutLeft {
+ animation-name: zoomOutLeft;
+}
+
+@keyframes zoomOutRight {
+ 40% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale(.1) translate3d(2000px, 0, 0);
+ transform-origin: right center;
+ }
+}
+
+.zoomOutRight {
+ animation-name: zoomOutRight;
+}
+
+@keyframes zoomOutUp {
+ 40% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+ transform-origin: center bottom;
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+ }
+}
+
+.zoomOutUp {
+ animation-name: zoomOutUp;
+}
+
+@keyframes slideInDown {
+ from {
+ transform: translate3d(0, -100%, 0);
+ visibility: visible;
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInDown {
+ animation-name: slideInDown;
+}
+
+@keyframes slideInLeft {
+ from {
+ transform: translate3d(-100%, 0, 0);
+ visibility: visible;
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInLeft {
+ animation-name: slideInLeft;
+}
+
+@keyframes slideInRight {
+ from {
+ transform: translate3d(100%, 0, 0);
+ visibility: visible;
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInRight {
+ animation-name: slideInRight;
+}
+
+@keyframes slideInUp {
+ from {
+ transform: translate3d(0, 100%, 0);
+ visibility: visible;
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInUp {
+ animation-name: slideInUp;
+}
+
+@keyframes slideOutDown {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+.slideOutDown {
+ animation-name: slideOutDown;
+}
+
+@keyframes slideOutLeft {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+.slideOutLeft {
+ animation-name: slideOutLeft;
+}
+
+@keyframes slideOutRight {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+.slideOutRight {
+ animation-name: slideOutRight;
+}
+
+@keyframes slideOutUp {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+.slideOutUp {
+ animation-name: slideOutUp;
+}
diff --git a/fbconfig.php b/fbconfig.php
index f34eb59..612f98f 100644
--- a/fbconfig.php
+++ b/fbconfig.php
@@ -4,8 +4,8 @@ if(!session_id()) {
}
require_once 'vendor/autoload.php';
$fb = new Facebook\Facebook([
- 'app_id' => 'xxxxx',
- 'app_secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
+ 'app_id' => 'xxxxxxxxxxxxxxxxx',
+ 'app_secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'default_graph_version' => 'v2.8',
]);
$helper = $fb->getRedirectLoginHelper();
@@ -74,14 +74,14 @@ if (isset($accessToken)) {
//$gender = isset($profile['gender']) ? $profile['gender'] : null;
$fb_id = isset($profile['id']) ? $profile['id'] : null;
- $_SESSION['FIRSTNAME'] = $first_name;
- $_SESSION['FULLNAME'] = $name;
- $_SESSION['EMAIL'] = $email;
- $_SESSION['FBID'] = $fb_id;
+ $_SESSION['first_name'] = $first_name;
+ $_SESSION['full_name'] = $name;
+ $_SESSION['email'] = $email;
+ $_SESSION['fb_id'] = $fb_id;
// Now you can redirect to another page and use the access token from $_SESSION['facebook_access_token']
} else {
// replace your website URL same as added in the developers.facebook.com/apps e.g. if you used http instead of https and you used non-www version or www version of your website then you must add the same here
- $loginUrl = $helper->getLoginUrl('http://ranchimall.net/exchange/fbconfig.php', $permissions);
+ $loginUrl = $helper->getLoginUrl('http://something.com/fbconfig.php', $permissions);
}
\ No newline at end of file
diff --git a/footer.php b/footer.php
index 1f08845..e29db16 100644
--- a/footer.php
+++ b/footer.php
@@ -1,37 +1,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
Sign in to buy or sell Florincoins!
-
-
+
+
+
@@ -50,4 +35,7 @@
-
\ No newline at end of file
+
+
+