diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d0187d0a..3c2cfd08 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -54,7 +54,7 @@ consider following this contribution guide! * [General GitHub documentation][2] * [GitHub pull request documentation][3] -[1]: https://github.com/TheSerapher/php-mmcfe-ng/issues "Issue" +[1]: https://github.com/TheSerapher/php-mpos/issues "Issue" [2]: http://help.github.com/ "GitHub documentation" [3]: http://help.github.com/send-pull-requests/ "GitHub pull request documentation" [4]: https://github.com/signup/free "GitHub account" diff --git a/POOLS.md b/POOLS.md index e13519a8..7fbd54c1 100644 --- a/POOLS.md +++ b/POOLS.md @@ -1,7 +1,7 @@ -Pools running mmcfe-ng -====================== +Pools running MPOS +================== -If you are not sure if you want to use `mmcfe-ng` on your own pool, +If you are not sure if you want to use `MPOS` on your own pool, maybe this list will push you over the edge of decision making. Some small and large pools are already running on it and have succesfully tested it on various coins. @@ -12,7 +12,7 @@ as of this writing and may have changed since then. ### vias79 -Vias is using mmcfe-ng with a small group of people to mine various coins. +Vias is using MPOS with a small group of people to mine various coins. They have succesfully mined blocks on each of those pools listed. All pools are running on Stratum only. @@ -32,9 +32,9 @@ All pools are running on Stratum only. ### WKNiGHT -WKNiGHT was an early adopter of `mmcfe-ng`. He has been around since a first stable release +WKNiGHT was an early adopter of `MPOS`. He has been around since a first stable release which only featured proportional payouts. He successfully moved to PPS since then and is -running more or less without any issues (related to `mmcfe-ng` that is ;-)). He is also running +running more or less without any issues (related to `MPOS` that is ;-)). He is also running the most powerful pool! | Pool URL | Coin | Avg. Hashrate | Avg. Active Workers | Notes | @@ -120,3 +120,15 @@ Small Time Miners are running various stratum only pools for different coins. | Pool URL | Coin | Avg. Hashrate | Avg. Active Workers | Notes | | -------- | ---- | ------------: | ------------------: | ----- | | https://www.mine-litecoin.com | Litecoin | 10Mhs | 75 workers | Custom Template, Prop | + +### CaptainAK + + +| Pool URL | Coin | Avg. Hashrate | Avg. Active Workers | Notes | +| -------- | ---- | ------------: | ------------------: | ----- | +| http://btb.pnwminer.com | Bitbar | 5-10 Mhs | 5 workers | PPLNS | +| http://dgc.pnwminer.com | DigitalCoin | 0 Mhs | 0 workers | PPLNS | +| http://btg.pnwminer.com | BitGem | .5-2 Mhs | 1 workers | PPLNS | +| http://ezc.pnwminer.com | EZCoin | 5-10Mhs | 2 workers | PPLNS | +| http://nbl.pnwminer.com | Nibble | 0 Mhs | 0 workers | PPLNS | +| http://mst.pnwminer.com | MasterCoin | 1-5 Mhs | 2 workers | PPLNS | diff --git a/README.md b/README.md index 6b355e80..51abc689 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,12 @@ Description =========== -mmcFE-ng is a web frontend for Pooled LTC Mining. A few pools using this interface are running at: +MPOS is a web based Mining Portal for various crypto currencies. A few pools using this interface are running at: * http://ltc.pool.grewe.ca * http://fst.pool.grewe.ca * http://nvc.pool.grewe.ca -The web frontend layout is based on mmcFE, the original work by Greedi: -https://github.com/Greedi/mmcFE - -After working a few days trying to learn to run my own pool and the -systems behind it I figured I'd look a bit deeper in the code to -understand how it works. While doing so I also migrated the existing -code over to my own framework so maintenance would be easier in the -future. - **NOTE**: This project is still under development and commits are happening on a daily basis. I do not recommend using this for a live setup as of yet. Wait for the later Release Candidate if you wish to run your pool with it. Testing pools are much appreciated though! @@ -27,14 +18,16 @@ I was hoping to keep this out of the README but apparently people remove or chan at the bottom of the page. For those of you finding my project and are willing to appreciate the work with some hard earned coins feel free to donate: +* BTC address: `1HuYK6WPU8o3yWCrAaADDZPRpL5QiXitfv` * LTC address: `Lge95QR2frp9y1wJufjUPCycVsg5gLJPW8` * FTC address: `6jDgGaUzMVyac5uqBhJCMiFMKCtH1LagTA` * NVC address: `4Guct6z7NVPVALHRAVn517TTmvqQve4WYr` * FST address: `g17CfFHqNqR5JnUjtG8RNBYh2WrhEirV67` -# Website Footer +Website Footer +============== -When you decide to use `mmcfe-ng` please be so kind and leave the footer intact. You are not the author of the software and should honor those that have worked on it. I don't mind changing the LTC donation address at the bottom, but keep in mind who really wrote this software and would deserve those ;-). +When you decide to use `MPOS` please be so kind and leave the footer intact. You are not the author of the software and should honor those that have worked on it. I don't mind changing the LTC donation address at the bottom, but keep in mind who really wrote this software and would deserve those ;-). Donors ====== @@ -47,8 +40,8 @@ These people have supported this project with a donation: * [ZC](https://github.com/zccopwrx) * Nutnut -Pools running mmcfe-ng -====================== +Pools running MPOS +================== You can find a list of active pools [here](POOLS.md). @@ -60,7 +53,7 @@ It should also work on any related distribution (RHEL, Debian). For support on how to get `litecoind` or `pushpoold` to work, please ask in the appropriate forums. -Be aware that `mmcfe-ng` is **only** for pooled mining. Solo Mining is not +Be aware that `MPOS` is **only** for pooled mining. Solo Mining is not supported. They will never match an upstream share, solo miners do not create any shares, only blocks. Expect weird behavior if trying to mix them. See #299 for full information. @@ -90,11 +83,10 @@ The following feature have been implemented so far: * PPS * PPLNS * Statistics are cached in Memcache by Cronjob for quick data access - * **NEW** Now supporting incremental round share updates! -* **SOON** New Theme - * **SOON** Live Dashboard - * **SOON** AJAX Support - * **SOON** Overhauled API +* **NEW** New Theme + * **NEW** Live Dashboard + * **NEW** AJAX Support + * **NEW** Overhauled API * Web User accounts * Re-Captcha protected registration form * Worker accounts @@ -104,7 +96,7 @@ The following feature have been implemented so far: * Minimal Block statistics * Pool donations * Pool fees -* Block Bonus Payouts **NEW** +* Block Bonus Payouts * Manual payout * Auto payout * Transaction list @@ -114,13 +106,13 @@ The following feature have been implemented so far: * Wallet information * User Transactions * News Posts - * Pool Settings **NEW** + * Pool Settings * Notification system * IDLE Workers * New blocks found in pool * Auto Payout * Manual Payout -* User-to-user Invitation System **NEW** +* User-to-user Invitation System * Support for various Scrypt based coins via config * MNC * LTC @@ -129,9 +121,28 @@ The following feature have been implemented so far: Installation ============ -Please take a look at the [Quick Start Guide](https://github.com/TheSerapher/php-mmcfe-ng/wiki/Quick-Start-Guide). This will give you -an idea how to setup `mmcfe-ng`. +Please take a look at the [Quick Start Guide](https://github.com/TheSerapher/php-mpos/wiki/Quick-Start-Guide). This will give you +an idea how to setup `MPOS`. +Customization +============= + +This project was meant to allow users to easily cusomize the system and templates. Hence no upstream framework was used to keep it as simple as possible. +If you are just using the system, there will be no need to adjust anything. Things will work out of the box! But if you plan on creating +your own theme, things are pretty easy: + +* Create a new theme folder in `public/templates/` +* Create a new site_assets folder in `public/site_assets` +* Create your own complete custom template or copy from an existing one +* Change your theme in the `Admin Panel` and point it to the newly created folder + +The good thing with this approach: You can keep the backend code updated! Since your new theme will never conflict with existing themes, a simple git pull will +keep your installation updated. You decide which new feature you'd like to integrate on your own theme. Bugfixes to the code will work out of the box! + +Other customizations are also possible but will require merging changes together. Usually users would not need to change the backend code unless they wish to work +on non-existing features in `MPOS`. For the vast majority, adjusting themes should be enough to highlight your pool from others. + +In all that, I humbly ask to keep the `MPOS` author reference and Github URL intact. Contributing ============ @@ -144,7 +155,7 @@ You can contribute to this project in different ways: Contact ======= -You can find me on Freenode.net, #mmcfe-ng. +You can find me on Freenode.net, #MPOS. License and Author ================== @@ -164,5 +175,5 @@ See the License for the specific language governing permissions and limitations under the License. - [1]: https://github.com/TheSerapher/php-mmcfe-ng/issues "Issue" + [1]: https://github.com/TheSerapher/php-mpos/issues "Issue" [2]: http://www.smarty.net/docs/en/ "Smarty" diff --git a/cronjobs/pplns_payout.php b/cronjobs/pplns_payout.php index a2fefa9f..f5d6f24c 100755 --- a/cronjobs/pplns_payout.php +++ b/cronjobs/pplns_payout.php @@ -46,7 +46,7 @@ foreach ($aAllBlocks as $iIndex => $aBlock) { // We support some dynamic share targets but fall back to our fixed value // Re-calculate after each run due to re-targets in this loop if ($config['pplns']['shares']['type'] == 'blockavg' && $block->getBlockCount() > 0) { - $pplns_target = round($block->getAvgBlockShares($config['pplns']['blockavg']['blockcount'])); + $pplns_target = round($block->getAvgBlockShares($aBlock['height'], $config['pplns']['blockavg']['blockcount'])); } else { $pplns_target = $config['pplns']['shares']['default']; } diff --git a/cronjobs/shared.inc.php b/cronjobs/shared.inc.php index f66be4f4..50692508 100644 --- a/cronjobs/shared.inc.php +++ b/cronjobs/shared.inc.php @@ -22,10 +22,13 @@ limitations under the License. // We need to find our include files so set this properly define("BASEPATH", "../public/"); - /***************************************************** * No need to change beyond this point * *****************************************************/ + +// Used in autoloading of API class, adding it to stop PHP warnings +$dStartTime = microtime(true); + // Our cron name $cron_name = basename($_SERVER['PHP_SELF'], '.php'); diff --git a/public/include/autoloader.inc.php b/public/include/autoloader.inc.php index 6cc0f33b..8950f103 100644 --- a/public/include/autoloader.inc.php +++ b/public/include/autoloader.inc.php @@ -19,7 +19,7 @@ if ($detect->isMobile() && $setting->getValue('website_mobile_theme')) { $setting->getValue('website_mobile_theme') ? $theme = $setting->getValue('website_mobile_theme') : $theme = 'mobile'; } else { // Use configured theme, fallback to default theme - $setting->getValue('website_theme') ? $theme = $setting->getValue('website_theme') : $theme = 'mmcFE'; + $setting->getValue('website_theme') ? $theme = $setting->getValue('website_theme') : $theme = 'mpos'; } define('THEME', $theme); @@ -27,7 +27,6 @@ define('THEME', $theme); require_once(INCLUDE_DIR . '/smarty.inc.php'); // Load everything else in proper order -require_once(CLASS_DIR . '/api.class.php'); require_once(CLASS_DIR . '/mail.class.php'); require_once(CLASS_DIR . '/tokentype.class.php'); require_once(CLASS_DIR . '/token.class.php'); @@ -49,6 +48,7 @@ require_once(CLASS_DIR . '/roundstats.class.php'); require_once(CLASS_DIR . '/transaction.class.php'); require_once(CLASS_DIR . '/notification.class.php'); require_once(CLASS_DIR . '/news.class.php'); +require_once(CLASS_DIR . '/api.class.php'); require_once(INCLUDE_DIR . '/lib/Michelf/Markdown.php'); require_once(INCLUDE_DIR . '/lib/scrypt.php'); diff --git a/public/include/classes/api.class.php b/public/include/classes/api.class.php index e1403ee5..26b2a95d 100644 --- a/public/include/classes/api.class.php +++ b/public/include/classes/api.class.php @@ -7,6 +7,11 @@ if (!defined('SECURITY')) die('Hacking attempt'); * Helper class for our API **/ class Api extends Base { + private $api_version = '1.0.0'; + + function setStartTime($dStartTime) { + $this->dStartTime = $dStartTime; + } function isActive($error=true) { if (!$this->setting->getValue('disable_api')) { return true; @@ -17,8 +22,45 @@ class Api extends Base { } } } + + /** + * Create API json object from input array + * @param data Array data to create JSON for + * @param force bool Enforce a JSON object + * @return string JSON object + **/ + function get_json($data, $force=false) { + return json_encode( + array( $_REQUEST['action'] => array( + 'version' => $this->api_version, + 'runtime' => (microtime(true) - $this->dStartTime) * 1000, + 'data' => $data + )), $force ? JSON_FORCE_OBJECT : 0 + ); + } + + /** + * Check user access level to the API call + **/ + function checkAccess($user_id, $get_id=NULL) { + if ( ! $this->user->isAdmin($user_id) && (!empty($get_id) && $get_id != $user_id)) { + // User is NOT admin and tries to access an ID that is not their own + header("HTTP/1.1 401 Unauthorized"); + die("Access denied"); + } else if ($this->user->isAdmin($user_id) && !empty($get_id)) { + // User is an admin and tries to fetch another users data + $id = $get_id; + // Is it a username or a user ID + ctype_digit($_REQUEST['id']) ? $id = $get_id : $id = $this->user->getUserId($get_id); + } else { + $id = $user_id; + } + return $id; + } } $api = new Api(); $api->setConfig($config); +$api->setUser($user); $api->setSetting($setting); +$api->setStartTime($dStartTime); diff --git a/public/include/classes/block.class.php b/public/include/classes/block.class.php index 3f88887d..027d06c5 100644 --- a/public/include/classes/block.class.php +++ b/public/include/classes/block.class.php @@ -109,9 +109,9 @@ class Block { * @param limit int Maximum blocks to check * @return data float Float value of average shares **/ - public function getAvgBlockShares($limit=1) { - $stmt = $this->mysqli->prepare("SELECT AVG(x.shares) AS average FROM (SELECT shares FROM $this->table ORDER BY height DESC LIMIT ?) AS x"); - if ($this->checkStmt($stmt) && $stmt->bind_param('i', $limit) && $stmt->execute() && $result = $stmt->get_result()) + public function getAvgBlockShares($height, $limit=1) { + $stmt = $this->mysqli->prepare("SELECT AVG(x.shares) AS average FROM (SELECT shares FROM $this->table WHERE height <= ? ORDER BY height DESC LIMIT ?) AS x"); + if ($this->checkStmt($stmt) && $stmt->bind_param('ii', $height, $limit) && $stmt->execute() && $result = $stmt->get_result()) return (float)$result->fetch_object()->average; return false; } diff --git a/public/include/classes/mail.class.php b/public/include/classes/mail.class.php index ca1342aa..ea00cef6 100644 --- a/public/include/classes/mail.class.php +++ b/public/include/classes/mail.class.php @@ -15,6 +15,49 @@ class Mail extends Base { return true; } + /** + * Mail form contact site admin + * @param senderName string senderName + * @param senderEmail string senderEmail + * @param senderSubject string senderSubject + * @param senderMessage string senderMessage + * @param email string config Email address + * @param subject string header subject + * @return bool + **/ + public function contactform($senderName, $senderEmail, $senderSubject, $senderMessage) { + $this->debug->append("STA " . __METHOD__, 4); + if (preg_match('/[^a-z_\.\!\?\-0-9\\s ]/i', $senderName)) { + $this->setErrorMessage('Username may only contain alphanumeric characters'); + return false; + } + if (empty($senderEmail) || !filter_var($senderEmail, FILTER_VALIDATE_EMAIL)) { + $this->setErrorMessage( 'Invalid e-mail address' ); + return false; + } + if (preg_match('/[^a-z_\.\!\?\-0-9\\s ]/i', $senderSubject)) { + $this->setErrorMessage('Subject may only contain alphanumeric characters'); + return false; + } + if (strlen(strip_tags($senderMessage)) < strlen($senderMessage)) { + $this->setErrorMessage('Your message may only contain alphanumeric characters'); + return false; + } + $aData['senderName'] = $senderName; + $aData['senderEmail'] = $senderEmail; + $aData['senderSubject'] = $senderSubject; + $aData['senderMessage'] = $senderMessage; + $aData['email'] = $this->setting->getValue('website_email'); + $aData['subject'] = 'Contact From'; + if ($this->sendMail('contactform/body', $aData)) { + return true; + } else { + $this->setErrorMessage( 'Unable to send email' ); + return false; + } + return false; + } + public function sendMail($template, $aData) { $this->smarty->assign('WEBSITENAME', $this->setting->getValue('website_name')); $this->smarty->assign('SUBJECT', $aData['subject']); diff --git a/public/include/classes/roundstats.class.php b/public/include/classes/roundstats.class.php index 8af22cbf..6b187973 100644 --- a/public/include/classes/roundstats.class.php +++ b/public/include/classes/roundstats.class.php @@ -102,12 +102,12 @@ class RoundStats { * @param height int Block Height * @return data array Block round transactions **/ - public function getAllRoundTransactions($iHeight=0) { + public function getAllRoundTransactions($iHeight=0, $admin) { $this->debug->append("STA " . __METHOD__, 4); $stmt = $this->mysqli->prepare(" SELECT t.id AS id, - a.username AS username, + IF(a.is_anonymous, IF( ? , a.username, 'anonymous'), a.username) AS username, t.type AS type, t.amount AS amount FROM $this->tableTrans AS t @@ -115,7 +115,7 @@ class RoundStats { LEFT JOIN $this->tableUsers AS a ON t.account_id = a.id WHERE b.height = ? ORDER BY id ASC"); - if ($this->checkStmt($stmt) && $stmt->bind_param('i', $iHeight) && $stmt->execute() && $result = $stmt->get_result()) + if ($this->checkStmt($stmt) && $stmt->bind_param('ii', $admin, $iHeight) && $stmt->execute() && $result = $stmt->get_result()) return $result->fetch_all(MYSQLI_ASSOC); $this->debug->append('Unable to fetch transactions'); return false; diff --git a/public/include/classes/statistics.class.php b/public/include/classes/statistics.class.php index bbf741ce..0950b632 100644 --- a/public/include/classes/statistics.class.php +++ b/public/include/classes/statistics.class.php @@ -99,25 +99,25 @@ class Statistics { * @param none * @return data object Return our hashrateas an object **/ - public function getCurrentHashrate() { + public function getCurrentHashrate($interval=600) { $this->debug->append("STA " . __METHOD__, 4); if ($this->getGetCache() && $data = $this->memcache->get(__FUNCTION__)) return $data; $stmt = $this->mysqli->prepare(" SELECT ( ( - SELECT IFNULL(ROUND(SUM(IF(difficulty=0, POW(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * 65536 / 600 / 1000), 0) AS hashrate + SELECT IFNULL(ROUND(SUM(IF(difficulty=0, POW(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * 65536 / ? / 1000), 0) AS hashrate FROM " . $this->share->getTableName() . " - WHERE time > DATE_SUB(now(), INTERVAL 600 SECOND) + WHERE time > DATE_SUB(now(), INTERVAL ? SECOND) ) + ( - SELECT IFNULL(ROUND(SUM(IF(difficulty=0, POW(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * 65536 / 600 / 1000), 0) AS hashrate + SELECT IFNULL(ROUND(SUM(IF(difficulty=0, POW(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * 65536 / ? / 1000), 0) AS hashrate FROM " . $this->share->getArchiveTableName() . " - WHERE time > DATE_SUB(now(), INTERVAL 600 SECOND) + WHERE time > DATE_SUB(now(), INTERVAL ? SECOND) ) ) AS hashrate FROM DUAL"); // Catchall - if ($this->checkStmt($stmt) && $stmt->execute() && $result = $stmt->get_result() ) return $this->memcache->setCache(__FUNCTION__, $result->fetch_object()->hashrate); + if ($this->checkStmt($stmt) && $stmt->bind_param('iiii', $interval, $interval, $interval, $interval) && $stmt->execute() && $result = $stmt->get_result() ) return $this->memcache->setCache(__FUNCTION__, $result->fetch_object()->hashrate); $this->debug->append("Failed to get hashrate: " . $this->mysqli->error); return false; } @@ -222,6 +222,8 @@ class Statistics { } else { $data['data'][$row['id']]['valid'] += $row['valid']; $data['data'][$row['id']]['invalid'] += $row['invalid']; + $data['data'][$row['id']]['donate_percent'] = $row['donate_percent']; + $data['data'][$row['id']]['is_anonymous'] = $row['is_anonymous']; } } $data['share_id'] = $this->share->getMaxShareId(); @@ -240,7 +242,7 @@ class Statistics { public function getUserShares($account_id) { $this->debug->append("STA " . __METHOD__, 4); // Dual-caching, try statistics cron first, then fallback to local, then fallbock to SQL - if ($data = $this->memcache->get(STATISTICS_ALL_USER_SHARES)) return $data['data'][$account_id]; + if ($data = $this->memcache->get(STATISTICS_ALL_USER_SHARES)) return @$data['data'][$account_id]; if ($data = $this->memcache->get(__FUNCTION__ . $account_id)) return $data; $stmt = $this->mysqli->prepare(" SELECT @@ -293,28 +295,28 @@ class Statistics { * @param account_id integer User ID * @return data integer Current Hashrate in khash/s **/ - public function getUserHashrate($account_id) { + public function getUserHashrate($account_id, $interval=600) { $this->debug->append("STA " . __METHOD__, 4); - if ($data = $this->memcache->get(__FUNCTION__ . $account_id)) return $data; + if ($this->getGetCache() && $data = $this->memcache->get(__FUNCTION__ . $account_id)) return $data; $stmt = $this->mysqli->prepare(" SELECT ( - SELECT IFNULL(ROUND(SUM(IF(difficulty=0, POW(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * 65536 / 600 / 1000), 0) AS hashrate + SELECT IFNULL(ROUND(SUM(IF(difficulty=0, POW(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * 65536 / ? / 1000), 0) AS hashrate FROM " . $this->share->getTableName() . " AS s, " . $this->user->getTableName() . " AS u WHERE u.username = SUBSTRING_INDEX( s.username, '.', 1 ) - AND s.time > DATE_SUB(now(), INTERVAL 600 SECOND) + AND s.time > DATE_SUB(now(), INTERVAL ? SECOND) AND u.id = ? ) + ( - SELECT IFNULL(ROUND(SUM(IF(difficulty=0, POW(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * 65536 / 600 / 1000), 0) AS hashrate + SELECT IFNULL(ROUND(SUM(IF(difficulty=0, POW(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * 65536 / ? / 1000), 0) AS hashrate FROM " . $this->share->getArchiveTableName() . " AS s, " . $this->user->getTableName() . " AS u WHERE u.username = SUBSTRING_INDEX( s.username, '.', 1 ) - AND s.time > DATE_SUB(now(), INTERVAL 600 SECOND) + AND s.time > DATE_SUB(now(), INTERVAL ? SECOND) AND u.id = ? ) AS hashrate FROM DUAL"); - if ($this->checkStmt($stmt) && $stmt->bind_param("ii", $account_id, $account_id) && $stmt->execute() && $result = $stmt->get_result() ) + if ($this->checkStmt($stmt) && $stmt->bind_param("iiiiii", $interval, $interval, $account_id, $interval, $interval, $account_id) && $stmt->execute() && $result = $stmt->get_result() ) return $this->memcache->setCache(__FUNCTION__ . $account_id, $result->fetch_object()->hashrate); // Catchall $this->debug->append("Failed to fetch hashrate: " . $this->mysqli->error); @@ -328,7 +330,7 @@ class Statistics { **/ public function getUserSharerate($account_id, $interval=600) { $this->debug->append("STA " . __METHOD__, 4); - if ($data = $this->memcache->get(__FUNCTION__ . $account_id)) return $data; + if ($this->getGetCache() && $data = $this->memcache->get(__FUNCTION__ . $account_id)) return $data; $stmt = $this->mysqli->prepare(" SELECT ( @@ -400,6 +402,8 @@ class Statistics { foreach ($data['data'] as $key => $aUser) { $data_new[$key]['shares'] = $aUser['valid']; $data_new[$key]['account'] = $aUser['username']; + $data_new[$key]['donate_percent'] = $aUser['donate_percent']; + $data_new[$key]['is_anonymous'] = $aUser['is_anonymous']; } return $data_new; } diff --git a/public/include/classes/transaction.class.php b/public/include/classes/transaction.class.php index b706f7e4..53d111e3 100644 --- a/public/include/classes/transaction.class.php +++ b/public/include/classes/transaction.class.php @@ -251,19 +251,19 @@ class Transaction extends Base { $this->debug->append("STA " . __METHOD__, 4); $stmt = $this->mysqli->prepare(" SELECT - ROUND(( + IFNULL(ROUND(( SUM( IF( ( t.type IN ('Credit','Bonus') AND b.confirmations >= ? ) OR t.type = 'Credit_PPS', t.amount, 0 ) ) - SUM( IF( t.type IN ('Debit_MP', 'Debit_AP'), t.amount, 0 ) ) - SUM( IF( ( t.type IN ('Donation','Fee') AND b.confirmations >= ? ) OR ( t.type IN ('Donation_PPS', 'Fee_PPS', 'TXFee') ), t.amount, 0 ) ) - ), 8) AS confirmed, - ROUND(( + ), 8), 0) AS confirmed, + IFNULL(ROUND(( SUM( IF( t.type IN ('Credit','Bonus') AND b.confirmations < ? AND b.confirmations >= 0, t.amount, 0 ) ) - SUM( IF( t.type IN ('Donation','Fee') AND b.confirmations < ? AND b.confirmations >= 0, t.amount, 0 ) ) - ), 8) AS unconfirmed, - ROUND(( + ), 8), 0) AS unconfirmed, + IFNULL(ROUND(( SUM( IF( t.type IN ('Credit','Bonus') AND b.confirmations = -1, t.amount, 0) ) - SUM( IF( t.type IN ('Donation','Fee') AND b.confirmations = -1, t.amount, 0) ) - ), 8) AS orphaned + ), 8), 0) AS orphaned FROM $this->table AS t LEFT JOIN " . $this->block->getTableName() . " AS b ON t.block_id = b.id diff --git a/public/include/classes/user.class.php b/public/include/classes/user.class.php index dc0c71b7..e01b24af 100644 --- a/public/include/classes/user.class.php +++ b/public/include/classes/user.class.php @@ -43,6 +43,9 @@ class User { public function getUserName($id) { return $this->getSingle($id, 'username', 'id'); } + public function getUserNameByEmail($email) { + return $this->getSingle($email, 'username', 'email', 's'); + } public function getUserId($username) { return $this->getSingle($username, 'id', 'username', 's'); } @@ -126,6 +129,13 @@ class User { $this->setErrorMessage("Invalid username or password."); return false; } + if (filter_var($username, FILTER_VALIDATE_EMAIL)) { + $this->debug->append("Username is an e-mail", 2); + if (!$username = $this->getUserNameByEmail($username)) { + $this->setErrorMessage("Invalid username or password."); + return false; + } + } if ($this->isLocked($this->getUserId($username))) { $this->setErrorMessage("Account is locked. Please contact site support."); return false; @@ -411,7 +421,7 @@ class User { * @param none * @return true **/ - public function logoutUser($redirect="index.php") { + public function logoutUser($from="") { $this->debug->append("STA " . __METHOD__, 4); // Unset all of the session variables $_SESSION = array(); @@ -424,8 +434,11 @@ class User { session_destroy(); // Enforce generation of a new Session ID and delete the old session_regenerate_id(true); - // Enforce a page reload - header("Location: $redirect"); + // Enforce a page reload and point towards login with referrer included, if supplied + $location = @$_SERVER['HTTPS'] ? 'https' . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'] : 'http' . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF']; + if (!empty($from)) $location .= '?page=login&to=' . urlencode($from); + // if (!headers_sent()) header('Location: ' . $location); + exit(''); } /** @@ -651,14 +664,14 @@ class User { * @param none * @return bool **/ - public function isAuthenticated() { + public function isAuthenticated($logout=true) { $this->debug->append("STA " . __METHOD__, 4); if (@$_SESSION['AUTHENTICATED'] == true && !$this->isLocked($_SESSION['USERDATA']['id']) && $this->getUserIp($_SESSION['USERDATA']['id']) == $_SERVER['REMOTE_ADDR'] ) return true; // Catchall - $this->logoutUser(); + if ($logout == true) $this->logoutUser($_SERVER['REQUEST_URI']); return false; } } diff --git a/public/include/config/admin_settings.inc.php b/public/include/config/admin_settings.inc.php index 80c22519..e85b9480 100644 --- a/public/include/config/admin_settings.inc.php +++ b/public/include/config/admin_settings.inc.php @@ -56,7 +56,7 @@ $aSettings['website'][] = array( $aSettings['website'][] = array( 'display' => 'Website theme', 'type' => 'select', 'options' => $aThemes, - 'default' => 'mmcFE', + 'default' => 'mpos', 'name' => 'website_theme', 'value' => $setting->getValue('website_theme'), 'tooltip' => 'The default theme used on your pool.' ); @@ -102,6 +102,20 @@ $aSettings['wallet'][] = array( 'name' => 'wallet_cold_coins', 'value' => $setting->getValue('wallet_cold_coins'), 'tooltip' => 'Amount of coins held in a pools cold wallet.' ); +$aSettings['statistics'][] = array( + 'display' => 'Ajax Refresh Interval', 'type' => 'select', + 'options' => array('5' => '5', '10' => '10', '15' => '15', '30' => '30', '60' => '60' ), + 'default' => 10, + 'name' => 'statistics_ajax_refresh_interval', 'value' => $setting->getValue('statistics_ajax_refresh_interval'), + 'tooltip' => 'How often to refresh data via ajax in seconds.' +); +$aSettings['statistics'][] = array( + 'display' => 'Ajax Data Interval', 'type' => 'select', + 'options' => array('60' => '1', '300' => '5', '600' => '10'), + 'default' => 300, + 'name' => 'statistics_ajax_data_interval', 'value' => $setting->getValue('statistics_ajax_data_interval'), + 'tooltip' => 'Time in minutes, interval for hashrate and sharerate calculations. Higher intervals allow for better accuracy at a higer server load.' +); $aSettings['statistics'][] = array( 'display' => 'Block Statistics Count', 'type' => 'text', 'size' => 25, @@ -151,6 +165,13 @@ $aSettings['acl'][] = array( 'name' => 'acl_round_statistics', 'value' => $setting->getValue('acl_round_statistics'), 'tooltip' => 'Make the round statistics page private (users only) or public.' ); +$aSettings['acl'][] = array( + 'display' => 'Round Transactions', 'type' => 'select', + 'options' => array( 0 => 'Admins', 1 => 'Public'), + 'default' => 0, + 'name' => 'acl_round_transactions', 'value' => $setting->getValue('acl_round_transactions'), + 'tooltip' => 'Display all transactions regardless of admin status.' +); $aSettings['system'][] = array( 'display' => 'Disable e-mail confirmations', 'type' => 'select', 'options' => array( 0 => 'No', 1 => 'Yes' ), @@ -200,6 +221,13 @@ $aSettings['system'][] = array( 'name' => 'disable_api', 'value' => $setting->getValue('disable_api'), 'tooltip' => 'Enable or Disable the pool wide API functions. See API reference on Github for details.' ); +$aSettings['system'][] = array( + 'display' => 'Disable Contactform', 'type' => 'select', + 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'default' => 0, + 'name' => 'disable_contactform', 'value' => $setting->getValue('disable_contactform'), + 'tooltip' => 'Enable or Disable Contactform. Users will not be able to use the contact form.' +); $aSettings['recaptcha'][] = array( 'display' => 'Enable re-Captcha', 'type' => 'select', 'options' => array( 0 => 'No', 1 => 'Yes' ), diff --git a/public/include/config/global.inc.dist.php b/public/include/config/global.inc.dist.php index f1cee025..941f57b0 100644 --- a/public/include/config/global.inc.dist.php +++ b/public/include/config/global.inc.dist.php @@ -23,7 +23,7 @@ define('SALT', 'PLEASEMAKEMESOMETHINGRANDOM'); /** * Database configuration * - * A MySQL database backend is required for mmcfe-ng. + * A MySQL database backend is required for MPOS. * Also ensure the database structure is imported! * The SQL file should be included in this project under the `sql` directory * @@ -32,18 +32,18 @@ define('SALT', 'PLEASEMAKEMESOMETHINGRANDOM'); * port = 3306 * user = 'someuser' * pass = 'somepass' - * name = 'mmcfe_ng' + * name = 'mpos' **/ $config['db']['host'] = 'localhost'; $config['db']['user'] = 'someuser'; $config['db']['pass'] = 'somepass'; $config['db']['port'] = 3306; -$config['db']['name'] = 'mmcfe_ng'; +$config['db']['name'] = 'mpos'; /** * Local wallet RPC configuration * - * mmcfe-ng uses the RPC backend to fetch transactions, blocks + * MPOS uses the RPC backend to fetch transactions, blocks * and various other things. They need to match your coind RPC * configuration. * @@ -62,9 +62,9 @@ $config['wallet']['password'] = 'testnet'; * API configuration to fetch prices for set currency * * Explanation: - * mmcfe-ng will try to fetch the current exchange rates + * MPOS will try to fetch the current exchange rates * from this API URL/target. Currently btc-e and coinchoose - * are supported in mmcfe-ng. If you want to remove the trade + * are supported in MPOS. If you want to remove the trade * header just set currency to an empty string. * * Default (btc-e.com): @@ -236,7 +236,7 @@ $config['pplns']['shares']['type'] = 'blockavg'; $config['pplns']['blockavg']['blockcount'] = 10; // Pool target difficulty as set in pushpoold configuration file -// Please also read this for stratum: https://github.com/TheSerapher/php-mmcfe-ng/wiki/FAQ +// Please also read this for stratum: https://github.com/TheSerapher/php-mpos/wiki/FAQ $config['difficulty'] = 20; @@ -315,7 +315,7 @@ $config['pps_target'] = 16; // do not change unless you know what it does * enabled : Disable (false) memcache for debugging or enable (true) it * host : Host IP or hostname * port : memcache port - * keyprefix : Must be changed for multiple mmcfe-ng instances on one host + * keyprefix : Must be changed for multiple MPOS instances on one host * expiration : Default expiration time in seconds of all cached keys. * Increase if caches expire too fast. * splay : Default randomizer for expiration times. @@ -325,14 +325,14 @@ $config['pps_target'] = 16; // do not change unless you know what it does * enabled = `true` * host = `localhost` * port = 11211 - * keyprefix = `mmcfe_ng_` + * keyprefix = `mpos_` * expiration = 90 * splay = 15 **/ $config['memcache']['enabled'] = true; $config['memcache']['host'] = 'localhost'; $config['memcache']['port'] = 11211; -$config['memcache']['keyprefix'] = 'mmcfe_ng_'; +$config['memcache']['keyprefix'] = 'mpos_'; $config['memcache']['expiration'] = 90; $config['memcache']['splay'] = 15; @@ -342,7 +342,7 @@ $config['memcache']['splay'] = 15; * * You can configure the cookie behaviour to secure your cookies more than the PHP defaults * - * For multiple installations of mmcfe-ng on the same domain you must change the cookie path. + * For multiple installations of MPOS on the same domain you must change the cookie path. * * Explanation: * duration: @@ -393,7 +393,7 @@ $config['cookie']['secure'] = false; * all data so rendering the page should not take too long anyway. * * You can test this out and enable (1) this setting but it's not guaranteed to - * work with mmcfe-ng. + * work with MPOS. * * Ensure that the folder `templates/cache` is writable by the webserver! * diff --git a/public/include/pages/account/notifications.inc.php b/public/include/pages/account/notifications.inc.php index a4b5aab0..a454fe12 100644 --- a/public/include/pages/account/notifications.inc.php +++ b/public/include/pages/account/notifications.inc.php @@ -5,7 +5,7 @@ if (!defined('SECURITY')) die('Hacking attempt'); if ($user->isAuthenticated()) { if ($setting->getValue('disable_notifications') == 1) { $_SESSION['POPUP'][] = array('CONTENT' => 'Notification system disabled by admin.', 'TYPE' => 'info'); - $smarty->assign('CONTENT', '../../global/empty.tpl'); + $smarty->assign('CONTENT', 'empty'); } else { if (@$_REQUEST['do'] == 'save') { if ($notification->updateSettings($_SESSION['USERDATA']['id'], $_REQUEST['data'])) { diff --git a/public/include/pages/account/reset_failed.inc.php b/public/include/pages/account/reset_failed.inc.php index 39541dc2..ef30938f 100644 --- a/public/include/pages/account/reset_failed.inc.php +++ b/public/include/pages/account/reset_failed.inc.php @@ -9,5 +9,5 @@ if ($user->isAuthenticated()) { header("Location: " . $_SERVER['HTTP_REFERER']); } // Somehow we still need to load this empty template -$smarty->assign("CONTENT", "../../global/empty.tpl"); +$smarty->assign("CONTENT", "empty"); ?> diff --git a/public/include/pages/api/getblockcount.inc.php b/public/include/pages/api/getblockcount.inc.php index 6764f436..978a7142 100644 --- a/public/include/pages/api/getblockcount.inc.php +++ b/public/include/pages/api/getblockcount.inc.php @@ -7,19 +7,16 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$id = $user->checkApiKey($_REQUEST['api_key']); +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); if ($bitcoin->can_connect() === true){ - if (!$iBlock = $memcache->get('iBlock')) { - $iBlock = $bitcoin->query('getblockcount'); - $memcache->set('iBlock', $iBlock); - } + $iBlock = $bitcoin->getblockcount(); } else { $iBlock = 0; } // Output JSON format -echo json_encode(array('getblockcount' => $iBlock)); +echo $api->get_json($iBlock); // Supress master template $supress_master = 1; diff --git a/public/include/pages/api/getblocksfound.inc.php b/public/include/pages/api/getblocksfound.inc.php index b238bdc3..f4770278 100644 --- a/public/include/pages/api/getblocksfound.inc.php +++ b/public/include/pages/api/getblocksfound.inc.php @@ -7,15 +7,13 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$id = $user->checkApiKey($_REQUEST['api_key']); +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); -// Set a sane limit, overwrite with URL parameter -$iLimit = 10; -if (@$_REQUEST['limit']) - $iLimit = $_REQUEST['limit']; +// Check how many blocks to fetch +$setting->getValue('statistics_block_count') ? $iLimit = $setting->getValue('statistics_block_count') : $iLimit = 20; // Output JSON format -echo json_encode(array('getblocksfound' => $statistics->getBlocksFound($iLimit))); +echo $api->get_json($statistics->getBlocksFound($iLimit)); // Supress master template $supress_master = 1; diff --git a/public/include/pages/api/getcurrentworkers.inc.php b/public/include/pages/api/getcurrentworkers.inc.php index 48864316..837b75ef 100644 --- a/public/include/pages/api/getcurrentworkers.inc.php +++ b/public/include/pages/api/getcurrentworkers.inc.php @@ -7,10 +7,10 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$id = $user->checkApiKey($_REQUEST['api_key']); +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); // Output JSON format -echo json_encode(array('getcurrentworkers' => $worker->getCountAllActiveWorkers())); +echo $api->get_json($worker->getCountAllActiveWorkers()); // Supress master template $supress_master = 1; diff --git a/public/include/pages/api/getdashboarddata.inc.php b/public/include/pages/api/getdashboarddata.inc.php new file mode 100644 index 00000000..9eac5d46 --- /dev/null +++ b/public/include/pages/api/getdashboarddata.inc.php @@ -0,0 +1,57 @@ +isActive(); + +// Check user token and access level permissions +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); + +// Fetch RPC information +if ($bitcoin->can_connect() === true) { + $dNetworkHashrate = $bitcoin->getnetworkhashps(); + $dDifficulty = $bitcoin->getdifficulty(); + $iBlock = $bitcoin->getblockcount(); +} else { + $dNetworkHashrate = 0; + $dDifficulty = 1; + $iBlock = 0; +} + +// Some settings +if ( ! $interval = $setting->getValue('statistics_ajax_data_interval')) $interval = 300; +if ( ! $dPoolHashrateModifier = $setting->getValue('statistics_pool_hashrate_modifier') ) $dPoolHashrateModifier = 1; +if ( ! $dPersonalHashrateModifier = $setting->getValue('statistics_personal_hashrate_modifier') ) $dPersonalHashrateModifier = 1; +if ( ! $dNetworkHashrateModifier = $setting->getValue('statistics_network_hashrate_modifier') ) $dNetworkHashrateModifier = 1; + +// Fetch raw data +$statistics->setGetCache(false); +$dPoolHashrate = $statistics->getCurrentHashrate($interval); +if ($dPoolHashrate > $dNetworkHashrate) $dNetworkHashrate = $dPoolHashrate; +$dPersonalHashrate = $statistics->getUserHashrate($user_id, $interval); +$dPersonalSharerate = $statistics->getUserSharerate($user_id, $interval); +$statistics->setGetCache(true); + +// Use caches for this one +$aUserRoundShares = $statistics->getUserShares($user_id); +$aRoundShares = $statistics->getRoundShares(); + +// Apply pool modifiers +$dPersonalHashrateAdjusted = $dPersonalHashrate * $dPersonalHashrateModifier; +$dPoolHashrateAdjusted = $dPoolHashrate * $dPoolHashrateModifier; +$dNetworkHashrateAdjusted = $dNetworkHashrate / 1000 * $dNetworkHashrateModifier; + +// Output JSON format +$data = array( + 'raw' => array( 'personal' => array( 'hashrate' => $dPersonalHashrate ), 'pool' => array( 'hashrate' => $dPoolHashrate ), 'network' => array( 'hashrate' => $dNetworkHashrate / 1000 ) ), + 'personal' => array ( 'hashrate' => $dPersonalHashrateAdjusted, 'sharerate' => $dPersonalSharerate, 'shares' => $aUserRoundShares, 'balance' => $transaction->getBalance($user_id)), + 'pool' => array( 'hashrate' => $dPoolHashrateAdjusted, 'shares' => $aRoundShares ), + 'network' => array( 'hashrate' => $dNetworkHashrateAdjusted, 'difficulty' => $dDifficulty, 'block' => $iBlock ), +); +echo $api->get_json($data); + +// Supress master template +$supress_master = 1; +?> diff --git a/public/include/pages/api/getdifficulty.inc.php b/public/include/pages/api/getdifficulty.inc.php index 54cc7ac9..95805548 100644 --- a/public/include/pages/api/getdifficulty.inc.php +++ b/public/include/pages/api/getdifficulty.inc.php @@ -7,17 +7,13 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$id = $user->checkApiKey($_REQUEST['api_key']); +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); // Fetch data from wallet -if ($bitcoin->can_connect() === true){ - $dDifficulty = $bitcoin->getdifficulty(); -} else { - $iDifficulty = 1; -} +$bitcoin->can_connect() === true ? $dDifficulty = $bitcoin->getdifficulty() : $iDifficulty = 1; // Output JSON format -echo json_encode(array('getdifficulty' => $dDifficulty)); +echo $api->get_json($dDifficulty); // Supress master template $supress_master = 1; diff --git a/public/include/pages/api/getestimatedtime.inc.php b/public/include/pages/api/getestimatedtime.inc.php index f06e28f3..91ed811d 100644 --- a/public/include/pages/api/getestimatedtime.inc.php +++ b/public/include/pages/api/getestimatedtime.inc.php @@ -7,13 +7,14 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$id = $user->checkApiKey($_REQUEST['api_key']); +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); // Estimated time to find the next block $iCurrentPoolHashrate = $statistics->getCurrentHashrate() * 1000; +$bitcoin->can_connect() === true ? $dEstimatedTime = $bitcoin->getestimatedtime($iCurrentPoolHashrate) : $dEstimatedTime = 0; // Output JSON format -echo json_encode(array('getestimatedtime' => $bitcoin->getestimatedtime($iCurrentPoolHashrate))); +echo $api->get_json($dEstimatedTime); // Supress master template $supress_master = 1; diff --git a/public/include/pages/api/gethourlyhashrates.inc.php b/public/include/pages/api/gethourlyhashrates.inc.php index 776df473..54112325 100644 --- a/public/include/pages/api/gethourlyhashrates.inc.php +++ b/public/include/pages/api/gethourlyhashrates.inc.php @@ -7,25 +7,15 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$user_id = $user->checkApiKey($_REQUEST['api_key']); - -if ( ! $user->isAdmin($user_id) && ($_REQUEST['id'] != $user_id && !empty($_REQUEST['id']))) { - // User is admin and tries to access an ID that is not their own - header("HTTP/1.1 401 Unauthorized"); - die("Access denied"); -} else if ($user->isAdmin($user_id)) { - // Is it a username or a user ID - ctype_digit($_REQUEST['id']) ? $id = $_REQUEST['id'] : $id = $user->getUserId($_REQUEST['id']); -} else { - // Not admin, only allow own user ID - $id = $user_id; -} +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); // Output JSON format -echo json_encode(array('gethourlyhashrates' => array( +$data = array( 'mine' => $statistics->getHourlyHashrateByAccount($id), 'pool' => $statistics->getHourlyHashrateByPool() -)), JSON_FORCE_OBJECT); +); + +echo $api->json($data); // Supress master template $supress_master = 1; diff --git a/public/include/pages/api/getpoolhashrate.inc.php b/public/include/pages/api/getpoolhashrate.inc.php index 5546d321..a5985d44 100644 --- a/public/include/pages/api/getpoolhashrate.inc.php +++ b/public/include/pages/api/getpoolhashrate.inc.php @@ -7,10 +7,17 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$id = $user->checkApiKey($_REQUEST['api_key']); +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); + +// Fetch settings +if ( ! $interval = $setting->getValue('statistics_ajax_data_interval')) $interval = 300; // Output JSON format -echo json_encode(array('getpoolhashrate' => $statistics->getCurrentHashrate())); +$statistics->setGetCache(false); +$dPoolHashrate = $statistics->getCurrentHashrate($interval); +$statistics->setGetCache(true); + +echo $api->get_json($dPoolHashrate); // Supress master template $supress_master = 1; diff --git a/public/include/pages/api/getpoolsharerate.inc.php b/public/include/pages/api/getpoolsharerate.inc.php index a87859f6..a55654be 100644 --- a/public/include/pages/api/getpoolsharerate.inc.php +++ b/public/include/pages/api/getpoolsharerate.inc.php @@ -7,7 +7,10 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$id = $user->checkApiKey($_REQUEST['api_key']); +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); + +// Fetch settings +if ( ! $interval = $setting->getValue('statistics_ajax_data_interval')) $interval = 300; // Output JSON format echo json_encode(array('getpoolsharerate' => $statistics->getCurrentShareRate())); diff --git a/public/include/pages/api/getpoolstatus.inc.php b/public/include/pages/api/getpoolstatus.inc.php index bd6375db..00aab39c 100644 --- a/public/include/pages/api/getpoolstatus.inc.php +++ b/public/include/pages/api/getpoolstatus.inc.php @@ -7,7 +7,7 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$user_id = $user->checkApiKey($_REQUEST['api_key']); +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); // Fetch last block information $aLastBlock = $block->getLast(); @@ -20,14 +20,19 @@ $aShares['valid'] > 0 ? $dEfficiency = round((100 - (100 / $aShares['valid'] * $ if ($bitcoin->can_connect() === true){ $dDifficulty = $bitcoin->getdifficulty(); $iBlock = $bitcoin->getblockcount(); + $dNetworkHashrate = $bitcoin->getnetworkhashps(); } else { $dDifficulty = 1; $iBlock = 0; + $dNetworkHashrate = 0; } // Estimated time to find the next block $iCurrentPoolHashrate = $statistics->getCurrentHashrate(); +// Avoid confusion, ensure our nethash isn't higher than poolhash +if ($iCurrentPoolHashrate > $dNetworkHashrate) $dNetworkHashrate = $iCurrentPoolHashrate; + // Time in seconds, not hours, using modifier in smarty to translate $iCurrentPoolHashrate > 0 ? $iEstTime = $dDifficulty * pow(2,32) / ($iCurrentPoolHashrate * 1000) : $iEstTime = 0; $iEstShares = (pow(2, 32 - $config['difficulty']) * $dDifficulty); @@ -41,20 +46,21 @@ if (!empty($aLastBlock)) { } // Output JSON format -echo json_encode( - array( - 'getpoolstatus' => array( - 'hashrate' => $iCurrentPoolHashrate, - 'efficiency' => $dEfficiency, - 'workers' => $worker->getCountAllActiveWorkers(), - 'currentnetworkblock' => $iBlock, - 'nextnetworkblock' => $iBlock + 1, - 'lastblock' => $aLastBlock['height'], - 'networkdiff' => $dDifficulty, - 'esttime' => $iEstTime, - 'estshares' => $iEstShares, - 'timesincelast' => $dTimeSinceLast, - ))); +$data = array( + 'hashrate' => $iCurrentPoolHashrate, + 'efficiency' => $dEfficiency, + 'workers' => $worker->getCountAllActiveWorkers(), + 'currentnetworkblock' => $iBlock, + 'nextnetworkblock' => $iBlock + 1, + 'lastblock' => $aLastBlock['height'], + 'networkdiff' => $dDifficulty, + 'esttime' => $iEstTime, + 'estshares' => $iEstShares, + 'timesincelast' => $dTimeSinceLast, + 'nethashrate' => $dNetworkHashrate +); + +echo $api->get_json($data); // Supress master template $supress_master = 1; diff --git a/public/include/pages/api/gettimesincelastblock.inc.php b/public/include/pages/api/gettimesincelastblock.inc.php index 14575364..c0de01f8 100644 --- a/public/include/pages/api/gettimesincelastblock.inc.php +++ b/public/include/pages/api/gettimesincelastblock.inc.php @@ -7,21 +7,17 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$id = $user->checkApiKey($_REQUEST['api_key']); +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); // Fetch our last block found $aBlocksFoundData = $statistics->getBlocksFound(1); // Time since last block $now = new DateTime( "now" ); -if (!empty($aBlocksFoundData)) { - $dTimeSinceLast = ($now->getTimestamp() - $aBlocksFoundData[0]['time']); -} else { - $dTimeSinceLast = 0; -} +! empty($aBlocksFoundData) ? $dTimeSinceLast = ($now->getTimestamp() - $aBlocksFoundData[0]['time']) : $dTimeSinceLast = 0; // Output JSON format -echo json_encode(array('gettimesincelastblock' => $dTimeSinceLast)); +echo $api->get_json($dTimeSinceLast); // Supress master template $supress_master = 1; diff --git a/public/include/pages/api/getuserbalance.inc.php b/public/include/pages/api/getuserbalance.inc.php index 76462c00..d91c6865 100644 --- a/public/include/pages/api/getuserbalance.inc.php +++ b/public/include/pages/api/getuserbalance.inc.php @@ -7,23 +7,10 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$user_id = $user->checkApiKey($_REQUEST['api_key']); - -echo $user_id; - -// We have to check if that user is admin too -if ( ! $user->isAdmin($user_id) && ($_REQUEST['id'] != $user_id && !empty($_REQUEST['id']))) { - header("HTTP/1.1 401 Unauthorized"); - die("Access denied"); -} else if ($user->isAdmin($user_id) && !empty($_REQUEST['id'])) { - $id = $_REQUEST['id']; - ctype_digit($_REQUEST['id']) ? $id = $_REQUEST['id'] : $id = $user->getUserId($_REQUEST['id']); -} else { - $id = $user_id; -} +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); // Output JSON format -echo json_encode(array('getuserbalance' => $transaction->getBalance($id))); +echo $api->get_json($transaction->getBalance($user_id)); // Supress master template $supress_master = 1; diff --git a/public/include/pages/api/getuserhashrate.inc.php b/public/include/pages/api/getuserhashrate.inc.php new file mode 100644 index 00000000..2edee628 --- /dev/null +++ b/public/include/pages/api/getuserhashrate.inc.php @@ -0,0 +1,25 @@ +isActive(); + +// Check user token +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); + +// Fetch some settings +if ( ! $interval = $setting->getValue('statistics_ajax_data_interval')) $interval = 300; + +// Gather un-cached data +$statistics->setGetCache(false); +$hashrate = $statistics->getUserHashrate($user_id, $interval); +$statistics->setGetCache(true); + +// Output JSON +echo $api->get_json($hashrate); + +// Supress master template +$supress_master = 1; +?> diff --git a/public/include/pages/api/getusersharerate.inc.php b/public/include/pages/api/getusersharerate.inc.php new file mode 100644 index 00000000..23a4562d --- /dev/null +++ b/public/include/pages/api/getusersharerate.inc.php @@ -0,0 +1,25 @@ +isActive(); + +// Check user token +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); + +// Fetch settings +if ( ! $interval = $setting->getValue('statistics_ajax_data_interval')) $interval = 300; + +// Gather un-cached data +$statistics->setGetCache(false); +$sharerate = $statistics->getUserSharerate($user_id, $interval); +$statistics->setGetCache(true); + +// Output JSON format +echo $api->get_json($sharerate); + +// Supress master template +$supress_master = 1; +?> diff --git a/public/include/pages/api/getuserstatus.inc.php b/public/include/pages/api/getuserstatus.inc.php index afdd59fc..8e0ef7ec 100644 --- a/public/include/pages/api/getuserstatus.inc.php +++ b/public/include/pages/api/getuserstatus.inc.php @@ -7,36 +7,16 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$user_id = $user->checkApiKey($_REQUEST['api_key']); - -/** - * This check will ensure the user can do the following: - * Admin: Check any user via request id - * Regular: Check your own status - * Other: Deny access via checkApiKey - **/ -if ( ! $user->isAdmin($user_id) && ($_REQUEST['id'] != $user_id && !empty($_REQUEST['id']))) { - // User is admin and tries to access an ID that is not their own - header("HTTP/1.1 401 Unauthorized"); - die("Access denied"); -} else if ($user->isAdmin($user_id)) { - // Admin, so allow any ID passed in request - $id = $_REQUEST['id']; - // Is it a username or a user ID - ctype_digit($_REQUEST['id']) ? $username = $user->getUserName($_REQUEST['id']) : $username = $_REQUEST['id']; - ctype_digit($_REQUEST['id']) ? $id = $_REQUEST['id'] : $id = $user->getUserId($_REQUEST['id']); -} else { - // Not admin, only allow own user ID - $id = $user_id; - $username = $user->getUserName($id); -} +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); // Output JSON format -echo json_encode(array('getuserstatus' => array( - 'username' => $username, - 'shares' => $statistics->getUserShares($id), - 'hashrate' => $statistics->getUserHashrate($id) -))); +$data = array( + 'username' => $user->getUsername($user_id), + 'shares' => $statistics->getUserShares($user_id), + 'hashrate' => $statistics->getUserHashrate($user_id), + 'sharerate' => $statistics->getUserSharerate($user_id) +); +echo $api->get_json($data); // Supress master template $supress_master = 1; diff --git a/public/include/pages/api/getuserworkers.inc.php b/public/include/pages/api/getuserworkers.inc.php index 06eb3411..a1f19605 100644 --- a/public/include/pages/api/getuserworkers.inc.php +++ b/public/include/pages/api/getuserworkers.inc.php @@ -7,21 +7,10 @@ if (!defined('SECURITY')) die('Hacking attempt'); $api->isActive(); // Check user token -$user_id = $user->checkApiKey($_REQUEST['api_key']); - -// We have to check if that user is admin too -if ( ! $user->isAdmin($user_id) && ($_REQUEST['id'] != $user_id && !empty($_REQUEST['id']))) { - header("HTTP/1.1 401 Unauthorized"); - die("Access denied"); -} else if ($user->isAdmin($user_id)) { - $id = $_REQUEST['id']; - ctype_digit($_REQUEST['id']) ? $id = $_REQUEST['id'] : $id = $user->getUserId($_REQUEST['id']); -} else { - $id = $user_id; -} +$user_id = $api->checkAccess($user->checkApiKey($_REQUEST['api_key']), @$_REQUEST['id']); // Output JSON format -echo json_encode(array('getuserworkers' => $worker->getWorkers($id))); +echo $api->get_json($worker->getWorkers($user_id)); // Supress master template $supress_master = 1; diff --git a/public/include/pages/api/public.inc.php b/public/include/pages/api/public.inc.php index e8be4181..f465d1a8 100644 --- a/public/include/pages/api/public.inc.php +++ b/public/include/pages/api/public.inc.php @@ -13,6 +13,7 @@ $aShares = $statistics->getRoundShares(); // RPC Calls $bitcoin->can_connect() === true ? $dNetworkHashrate = $bitcoin->getnetworkhashps() : $dNetworkHashrate = 0; +// Backwards compatible with the existing services echo json_encode( array( 'pool_name' => $setting->getValue('website_name'), diff --git a/public/include/pages/contactform.inc.php b/public/include/pages/contactform.inc.php new file mode 100644 index 00000000..e4f947c4 --- /dev/null +++ b/public/include/pages/contactform.inc.php @@ -0,0 +1,18 @@ +getValue('disable_contactform')) { + $_SESSION['POPUP'][] = array('CONTENT' => 'Contactform is currently disabled. Please try again later.', 'TYPE' => 'errormsg'); + $smarty->assign("CONTENT", "disabled.tpl"); +} else { + if ($setting->getValue('recaptcha_enabled')) { + require_once(INCLUDE_DIR . '/lib/recaptchalib.php'); + $smarty->assign("RECAPTCHA", recaptcha_get_html($setting->getValue('recaptcha_public_key'))); + } + + // Tempalte specifics + $smarty->assign("CONTENT", "default.tpl"); +} +?> diff --git a/public/include/pages/contactform/contactform.inc.php b/public/include/pages/contactform/contactform.inc.php new file mode 100644 index 00000000..fbfab779 --- /dev/null +++ b/public/include/pages/contactform/contactform.inc.php @@ -0,0 +1,51 @@ +getValue('recaptcha_enabled')) { + // Load re-captcha specific data + require_once(INCLUDE_DIR . '/lib/recaptchalib.php'); + $rsp = recaptcha_check_answer ( + $setting->getValue('recaptcha_private_key'), + $_SERVER["REMOTE_ADDR"], + $_POST["recaptcha_challenge_field"], + $_POST["recaptcha_response_field"] + ); +} + +if ($setting->getValue('disable_contactform')) { + $_SESSION['POPUP'][] = array('CONTENT' => 'Contactform is currently disabled. Please try again later.', 'TYPE' => 'errormsg'); +} else { + // Check if recaptcha is enabled, process form data if valid + if($setting->getValue('recaptcha_enabled') && $_POST["recaptcha_response_field"] && $_POST["recaptcha_response_field"]!=''){ + if ($rsp->is_valid) { + $smarty->assign("RECAPTCHA", recaptcha_get_html($setting->getValue('recaptcha_public_key'))); + if ($mail->contactform($_POST['senderName'], $_POST['senderEmail'], $_POST['senderSubject'], $_POST['senderMessage'])) { + $_SESSION['POPUP'][] = array('CONTENT' => 'Thanks for sending your message! We will get back to you shortly'); + } else { + $_SESSION['POPUP'][] = array('CONTENT' => 'There was a problem sending your message. Please try again.' . $user->getError(), 'TYPE' => 'errormsg'); + } + } else { + $smarty->assign("RECAPTCHA", recaptcha_get_html($setting->getValue('recaptcha_public_key'), $rsp->error)); + $_SESSION['POPUP'][] = array('CONTENT' => 'Invalid Captcha, please try again. (' . $rsp->error . ')', 'TYPE' => 'errormsg'); + } + // Empty captcha + } else if ($setting->getValue('recaptcha_enabled')) { + $smarty->assign("RECAPTCHA", recaptcha_get_html($setting->getValue('recaptcha_public_key'), $rsp->error)); + $_SESSION['POPUP'][] = array('CONTENT' => 'Empty Captcha, please try again.', 'TYPE' => 'errormsg'); + // Captcha disabled + } else { + if ($mail->contactform($_POST['senderName'], $_POST['senderEmail'], $_POST['senderSubject'], $_POST['senderMessage'])) { + $_SESSION['POPUP'][] = array('CONTENT' => 'Thanks for sending your message! We will get back to you shortly'); + } else { + $_SESSION['POPUP'][] = array('CONTENT' => 'There was a problem sending your message. Please try again. ' . $user->getError(), 'TYPE' => 'errormsg'); + } + } +} + +// Tempalte specifics +$smarty->assign("CONTENT", "default.tpl"); + +?> diff --git a/public/include/pages/dashboard.inc.php b/public/include/pages/dashboard.inc.php new file mode 100644 index 00000000..22a4edec --- /dev/null +++ b/public/include/pages/dashboard.inc.php @@ -0,0 +1,50 @@ +isAuthenticated()) { + if (! $interval = $setting->getValue('statistics_ajax_data_interval')) $interval = 300; + // Defaults to get rid of PHP Notice warnings + $dDifficulty = 1; + $aRoundShares = 1; + + // Only run these if the user is logged in + $aRoundShares = $statistics->getRoundShares(); + if ($bitcoin->can_connect() === true) { + $dDifficulty = $bitcoin->query('getdifficulty'); + if (is_array($dDifficulty) && array_key_exists('proof-of-work', $dDifficulty)) + $dDifficulty = $dDifficulty['proof-of-work']; + } + + // Always fetch this since we need for ministats header + $aRoundShares = $statistics->getRoundShares(); + if ($bitcoin->can_connect() === true) { + $dDifficulty = $bitcoin->query('getdifficulty'); + if (is_array($dDifficulty) && array_key_exists('proof-of-work', $dDifficulty)) + $dDifficulty = $dDifficulty['proof-of-work']; + try { $dNetworkHashrate = $bitcoin->query('getnetworkhashps') / 1000; } catch (Exception $e) { + // Maybe we are SHA + try { $dNetworkHashrate = $bitcoin->query('gethashespersec') / 1000; } catch (Exception $e) { + $dNetworkHashrate = 0; + } + $dNetworkHashrate = 0; + } + } else { + $dNetworkHashrate = 0; + } + + // Fetch some data + if (!$iCurrentActiveWorkers = $worker->getCountAllActiveWorkers()) $iCurrentActiveWorkers = 0; + $iCurrentPoolHashrate = $statistics->getCurrentHashrate(); + $iCurrentPoolShareRate = $statistics->getCurrentShareRate(); + + // Avoid confusion, ensure our nethash isn't higher than poolhash + if ($iCurrentPoolHashrate > $dNetworkHashrate) $dNetworkHashrate = $iCurrentPoolHashrate; + + // Make it available in Smarty + $smarty->assign('INTERVAL', $interval / 60); + $smarty->assign('CONTENT', 'default.tpl'); +} + +?> diff --git a/public/include/pages/login.inc.php b/public/include/pages/login.inc.php index c20826ba..0dcf6774 100644 --- a/public/include/pages/login.inc.php +++ b/public/include/pages/login.inc.php @@ -5,8 +5,11 @@ if (!defined('SECURITY')) die('Hacking attempt'); if ($setting->getValue('maintenance') && !$user->isAdmin($user->getUserId($_POST['username']))) { $_SESSION['POPUP'][] = array('CONTENT' => 'You are not allowed to login during maintenace.', 'TYPE' => 'info'); -} else if ($user->checkLogin($_POST['username'],$_POST['password']) ) { - header('Location: index.php?page=home'); +} else if ($user->checkLogin(@$_POST['username'], @$_POST['password']) ) { + empty($_POST['to']) ? $to = $_SERVER['PHP_SELF'] : $to = $_POST['to']; + $location = @$_SERVER['HTTPS'] === true ? 'https' : 'http' . '://' . $_SERVER['SERVER_NAME'] . $to; + if (!headers_sent()) header('Location: ' . $location); + exit(''); } else if (@$_POST['username'] && @$_POST['password']) { $_SESSION['POPUP'][] = array('CONTENT' => 'Unable to login: '. $user->getError(), 'TYPE' => 'errormsg'); } diff --git a/public/include/pages/logout.inc.php b/public/include/pages/logout.inc.php index 8622fd8e..6a537c1d 100644 --- a/public/include/pages/logout.inc.php +++ b/public/include/pages/logout.inc.php @@ -7,5 +7,5 @@ if (!defined('SECURITY')) // This probably (?) never fails $user->logoutUser(); $smarty->assign("CONTENT", "default.tpl"); -header('Location: index.php?page=home'); +// header('Location: index.php?page=home'); ?> diff --git a/public/include/pages/statistics/pool.inc.php b/public/include/pages/statistics/pool.inc.php index f6eeedfb..5416b984 100644 --- a/public/include/pages/statistics/pool.inc.php +++ b/public/include/pages/statistics/pool.inc.php @@ -65,9 +65,9 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { // Public / private page detection if ($setting->getValue('acl_pool_statistics')) { - $smarty->assign("CONTENT", "authenticated.tpl"); + $smarty->assign("CONTENT", "default.tpl"); } else if ($user->isAuthenticated() && ! $setting->getValue('acl_pool_statistics')) { - $smarty->assign("CONTENT", "authenticated.tpl"); + $smarty->assign("CONTENT", "default.tpl"); } else { $smarty->assign("CONTENT", "../default.tpl"); } diff --git a/public/include/pages/statistics/round.inc.php b/public/include/pages/statistics/round.inc.php index 869dbb72..4c37f749 100644 --- a/public/include/pages/statistics/round.inc.php +++ b/public/include/pages/statistics/round.inc.php @@ -19,13 +19,13 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { $iKey = $_REQUEST['height']; } } - $aDetailsForBlockHeight = $roundstats->getDetailsForBlockHeight($iKey, $user->isAdmin($_SESSION['USERDATA']['id'])); - $aRoundShareStats = $roundstats->getRoundStatsForAccounts($iKey, $user->isAdmin($_SESSION['USERDATA']['id'])); + $aDetailsForBlockHeight = $roundstats->getDetailsForBlockHeight($iKey, $user->isAdmin(@$_SESSION['USERDATA']['id'])); + $aRoundShareStats = $roundstats->getRoundStatsForAccounts($iKey, $user->isAdmin(@$_SESSION['USERDATA']['id'])); - if ($user->isAdmin($_SESSION['USERDATA']['id'])) { - $aUserRoundTransactions = $roundstats->getAllRoundTransactions($iKey); + if ($user->isAdmin(@$_SESSION['USERDATA']['id']) || $setting->getValue('acl_round_transactions')) { + $aUserRoundTransactions = $roundstats->getAllRoundTransactions($iKey, @$_SESSION['USERDATA']['id']); } else { - $aUserRoundTransactions = $roundstats->getUserRoundTransactions($iKey, $_SESSION['USERDATA']['id']); + $aUserRoundTransactions = $roundstats->getUserRoundTransactions($iKey, @$_SESSION['USERDATA']['id']); } // Propagate content our template @@ -38,7 +38,9 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { if ($setting->getValue('acl_round_statistics')) { $smarty->assign("CONTENT", "default.tpl"); -} else if ($user->isAuthenticated()) { +} else if ($user->isAuthenticated(false)) { $smarty->assign("CONTENT", "default.tpl"); +} else { + $smarty->assign("CONTENT", "empty"); } ?> diff --git a/public/include/smarty_globals.inc.php b/public/include/smarty_globals.inc.php index 8bc9549b..1cb7e21d 100644 --- a/public/include/smarty_globals.inc.php +++ b/public/include/smarty_globals.inc.php @@ -44,6 +44,9 @@ $iCurrentPoolShareRate = $statistics->getCurrentShareRate(); // Active workers if (!$iCurrentActiveWorkers = $worker->getCountAllActiveWorkers()) $iCurrentActiveWorkers = 0; +// Some settings to propagate to template +if (! $statistics_ajax_refresh_interval = $setting->getValue('statistics_ajax_refresh_interval')) $statistics_ajax_refresh_interval = 10; + // Small helper array $aHashunits = array( '1' => 'KH/s', '0.001' => 'MH/s', '0.000001' => 'GH/s' ); @@ -65,6 +68,7 @@ $aGlobal = array( 'accounts' => $config['accounts'], 'disable_invitations' => $setting->getValue('disable_invitations'), 'disable_notifications' => $setting->getValue('disable_notifications'), + 'statistics_ajax_refresh_interval' => $statistics_ajax_refresh_interval, 'price' => array( 'currency' => $config['price']['currency'] ), 'targetdiff' => $config['difficulty'], 'currency' => $config['currency'], @@ -136,10 +140,11 @@ if (@$_SESSION['USERDATA']['id']) { $aGlobal['userdata']['est_payout'] = 0; } case 'pplns': - if ($iAvgBlockShares = round($block->getAvgBlockShares($config['pplns']['blockavg']['blockcount']))) { - $aGlobal['pplns']['target'] = $iAvgBlockShares; - } else { - $aGlobal['pplns']['target'] = $config['pplns']['shares']['default']; + $aGlobal['pplns']['target'] = $config['pplns']['shares']['default']; + if ($aLastBlock = $block->getLast()) { + if ($iAvgBlockShares = round($block->getAvgBlockShares($aLastBlock['height'], $config['pplns']['blockavg']['blockcount']))) { + $aGlobal['pplns']['target'] = $iAvgBlockShares; + } } break; case 'pps': @@ -158,6 +163,9 @@ if ($setting->getValue('maintenance')) if ($motd = $setting->getValue('system_motd')) $_SESSION['POPUP'][] = array('CONTENT' => $motd, 'TYPE' => 'info'); +// So we can display additional info +$smarty->assign('DEBUG', DEBUG); + // Make it available in Smarty $smarty->assign('PATH', 'site_assets/' . THEME); $smarty->assign('GLOBAL', $aGlobal); diff --git a/public/index.php b/public/index.php index ac7c4154..f8ccb438 100644 --- a/public/index.php +++ b/public/index.php @@ -18,6 +18,9 @@ limitations under the License. */ +// Used for performance calculations +$dStartTime = microtime(true); + // This should be okay define("BASEPATH", "./"); @@ -76,15 +79,15 @@ $smarty->assign("PAGE", $page); $smarty->assign("ACTION", $action); // Now with all loaded and processed, setup some globals we need for smarty templates -require_once(INCLUDE_DIR . '/smarty_globals.inc.php'); +if ($page != 'api') require_once(INCLUDE_DIR . '/smarty_globals.inc.php'); // Load debug information into template $debug->append("Loading debug information into template", 4); $smarty->assign('DebuggerInfo', $debug->getDebugInfo()); +$smarty->assign('RUNTIME', (microtime(true) - $dStartTime) * 1000); // Display our page -if (!@$supress_master) - $smarty->display("master.tpl", $smarty_cache_key); +if (!@$supress_master) $smarty->display("master.tpl", $smarty_cache_key); // Unset any temporary values here unset($_SESSION['POPUP']); diff --git a/public/site_assets/mobile/js/justgage.1.0.1.min.js b/public/site_assets/mobile/js/justgage.1.0.1.min.js new file mode 100755 index 00000000..5e0e5346 --- /dev/null +++ b/public/site_assets/mobile/js/justgage.1.0.1.min.js @@ -0,0 +1,12 @@ +/** + * JustGage - a handy JavaScript plugin for generating and animating nice & clean dashboard gauges. + * Copyright (c) 2012 Bojan Djuricic - pindjur(at)gmail(dot)com | http://www.madcog.com + * Licensed under MIT. + * Date: 31/07/2012 + * @author Bojan Djuricic (@Toorshia) + * @version 1.0 + * + * http://www.justgage.com + */ + +JustGage=function(x){if(!x.id){alert("Missing id parameter for gauge!");return false}if(!document.getElementById(x.id)){alert('No element with id: "'+x.id+'" found!');return false}this.config={id:x.id,title:(x.title)?x.title:"Title",titleFontColor:(x.titleFontColor)?x.titleFontColor:"#999999",value:(x.value)?x.value:0,valueFontColor:(x.valueFontColor)?x.valueFontColor:"#010101",min:(x.min)?x.min:0,max:(x.max)?x.max:100,showMinMax:(x.showMinMax!=null)?x.showMinMax:true,gaugeWidthScale:(x.gaugeWidthScale)?x.gaugeWidthScale:1,gaugeColor:(x.gaugeColor)?x.gaugeColor:"#edebeb",label:(x.label)?x.label:"",showInnerShadow:(x.showInnerShadow!=null)?x.showInnerShadow:true,shadowOpacity:(x.shadowOpacity)?x.shadowOpacity:0.2,shadowSize:(x.shadowSize)?x.shadowSize:5,shadowVerticalOffset:(x.shadowVerticalOffset)?x.shadowVerticalOffset:3,levelColors:(x.levelColors)?x.levelColors:percentColors,levelColorsGradient:(x.levelColorsGradient!=null)?x.levelColorsGradient:true,labelFontColor:(x.labelFontColor)?x.labelFontColor:"#b3b3b3",startAnimationTime:(x.startAnimationTime)?x.startAnimationTime:700,startAnimationType:(x.startAnimationType)?x.startAnimationType:">",refreshAnimationTime:(x.refreshAnimationTime)?x.refreshAnimationTime:700,refreshAnimationType:(x.refreshAnimationType)?x.refreshAnimationType:">"};if(x.value>this.config.max){this.config.value=this.config.max}if(x.value1.25){c=1.25*q;l=q}else{c=d;l=d/1.25}var i=(d-c)/2;var g=(q-l)/2;var s=((l/8)>10)?(l/10):10;var n=i+c/2;var m=g+l/6.5;var k=((l/6.4)>16)?(l/6.4):16;var r=i+c/2;var p=g+l/1.4;var b=((l/16)>10)?(l/16):10;var f=i+c/2;var e=p+k/2+6;var j=((l/16)>10)?(l/16):10;var w=i+(c/10)+(c/6.666666666666667*this.config.gaugeWidthScale)/2;var v=g+l/1.126760563380282;var h=((l/16)>10)?(l/16):10;var u=i+c-(c/10)-(c/6.666666666666667*this.config.gaugeWidthScale)/2;var t=g+l/1.126760563380282;this.params={canvasW:d,canvasH:q,widgetW:c,widgetH:l,dx:i,dy:g,titleFontSize:s,titleX:n,titleY:m,valueFontSize:k,valueX:r,valueY:p,labelFontSize:b,labelX:f,labelY:e,minFontSize:j,minX:w,minY:v,maxFontSize:h,maxX:u,maxY:t};this.canvas.customAttributes.pki=function(K,L,N,E,O,F,D,y){var B=(1-(K-L)/(N-L))*Math.PI,G=E/2-E/10,J=G-E/6.666666666666667*y,C=E/2+F,A=O/1.25+D,H=E/2+F+G*Math.cos(B),P=O-(O-A)+D-G*Math.sin(B),M=E/2+F+J*Math.cos(B),z=O-(O-A)+D-J*Math.sin(B),I;I+="M"+(C-J)+","+A+" ";I+="L"+(C-G)+","+A+" ";I+="A"+G+","+G+" 0 0,1 "+H+","+P+" ";I+="L"+M+","+z+" ";I+="A"+J+","+J+" 0 0,0 "+(C-J)+","+A+" ";I+="z ";return{path:I}};this.gauge=this.canvas.path().attr({stroke:"none",fill:this.config.gaugeColor,pki:[this.config.max,this.config.min,this.config.max,this.params.widgetW,this.params.widgetH,this.params.dx,this.params.dy,this.config.gaugeWidthScale]});this.gauge.id=this.config.id+"-gauge";this.level=this.canvas.path().attr({stroke:"none",fill:getColorForPercentage((this.config.value-this.config.min)/(this.config.max-this.config.min),this.config.levelColors,this.config.levelColorsGradient),pki:[this.config.min,this.config.min,this.config.max,this.params.widgetW,this.params.widgetH,this.params.dx,this.params.dy,this.config.gaugeWidthScale]});this.level.id=this.config.id+"-level";this.txtTitle=this.canvas.text(this.params.titleX,this.params.titleY,this.config.title);this.txtTitle.attr({"font-size":this.params.titleFontSize,"font-weight":"bold","font-family":"Arial",fill:this.config.titleFontColor,"fill-opacity":"1"});this.txtTitle.id=this.config.id+"-txttitle";this.txtValue=this.canvas.text(this.params.valueX,this.params.valueY,this.originalValue);this.txtValue.attr({"font-size":this.params.valueFontSize,"font-weight":"bold","font-family":"Arial",fill:this.config.valueFontColor,"fill-opacity":"0"});this.txtValue.id=this.config.id+"-txtvalue";this.txtLabel=this.canvas.text(this.params.labelX,this.params.labelY,this.config.label);this.txtLabel.attr({"font-size":this.params.labelFontSize,"font-weight":"normal","font-family":"Arial",fill:this.config.labelFontColor,"fill-opacity":"0"});this.txtLabel.id=this.config.id+"-txtlabel";this.txtMin=this.canvas.text(this.params.minX,this.params.minY,this.config.min);this.txtMin.attr({"font-size":this.params.minFontSize,"font-weight":"normal","font-family":"Arial",fill:this.config.labelFontColor,"fill-opacity":(this.config.showMinMax==true)?"1":"0"});this.txtMin.id=this.config.id+"-txtmin";this.txtMax=this.canvas.text(this.params.maxX,this.params.maxY,this.config.max);this.txtMax.attr({"font-size":this.params.maxFontSize,"font-weight":"normal","font-family":"Arial",fill:this.config.labelFontColor,"fill-opacity":(this.config.showMinMax==true)?"1":"0"});this.txtMax.id=this.config.id+"-txtmax";var a=this.canvas.canvas.childNodes[1];var o="http://www.w3.org/2000/svg";if(ie<9){onCreateElementNsReady(function(){this.generateShadow()})}else{this.generateShadow(o,a)}this.level.animate({pki:[this.config.value,this.config.min,this.config.max,this.params.widgetW,this.params.widgetH,this.params.dx,this.params.dy,this.config.gaugeWidthScale]},this.config.startAnimationTime,this.config.startAnimationType);this.txtValue.animate({"fill-opacity":"1"},this.config.startAnimationTime,this.config.startAnimationType);this.txtLabel.animate({"fill-opacity":"1"},this.config.startAnimationTime,this.config.startAnimationType)};JustGage.prototype.refresh=function(b){originalVal=b;if(b>this.config.max){b=this.config.max}if(b",b[0]){}return a>4?a:c}()); \ No newline at end of file diff --git a/public/site_assets/mobile/js/raphael.2.1.0.min.js b/public/site_assets/mobile/js/raphael.2.1.0.min.js new file mode 100755 index 00000000..4153bba5 --- /dev/null +++ b/public/site_assets/mobile/js/raphael.2.1.0.min.js @@ -0,0 +1,10 @@ +// +--------------------------------------------------------------------+ \\ +// ฆ Rapha๋l 2.1.0 - JavaScript Vector Library ฆ \\ +// +--------------------------------------------------------------------ฆ \\ +// ฆ Copyright ฉ 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com) ฆ \\ +// ฆ Copyright ฉ 2008-2012 Sencha Labs (http://sencha.com) ฆ \\ +// +--------------------------------------------------------------------ฆ \\ +// ฆ Licensed under the MIT (http://raphaeljs.com/license.html) license.ฆ \\ +// +--------------------------------------------------------------------+ \\ + +(function(a){var b="0.3.4",c="hasOwnProperty",d=/[\.\/]/,e="*",f=function(){},g=function(a,b){return a-b},h,i,j={n:{}},k=function(a,b){var c=j,d=i,e=Array.prototype.slice.call(arguments,2),f=k.listeners(a),l=0,m=!1,n,o=[],p={},q=[],r=h,s=[];h=a,i=0;for(var t=0,u=f.length;tf*b.top){e=b.percents[y],p=b.percents[y-1]||0,t=t/b.top*(e-p),o=b.percents[y+1],j=b.anim[e];break}f&&d.attr(b.anim[b.percents[y]])}if(!!j){if(!k){for(var A in j)if(j[g](A))if(U[g](A)||d.paper.customAttributes[g](A)){u[A]=d.attr(A),u[A]==null&&(u[A]=T[A]),v[A]=j[A];switch(U[A]){case C:w[A]=(v[A]-u[A])/t;break;case"colour":u[A]=a.getRGB(u[A]);var B=a.getRGB(v[A]);w[A]={r:(B.r-u[A].r)/t,g:(B.g-u[A].g)/t,b:(B.b-u[A].b)/t};break;case"path":var D=bR(u[A],v[A]),E=D[1];u[A]=D[0],w[A]=[];for(y=0,z=u[A].length;yd)return d;while(cf?c=e:d=e,e=(d-c)/2+c}return e}function n(a,b){var c=o(a,b);return((l*c+k)*c+j)*c}function m(a){return((i*a+h)*a+g)*a}var g=3*b,h=3*(d-b)-g,i=1-g-h,j=3*c,k=3*(e-c)-j,l=1-j-k;return n(a,1/(200*f))}function cq(){return this.x+q+this.y+q+this.width+" ื "+this.height}function cp(){return this.x+q+this.y}function cb(a,b,c,d,e,f){a!=null?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function bH(b,c,d){b=a._path2curve(b),c=a._path2curve(c);var e,f,g,h,i,j,k,l,m,n,o=d?0:[];for(var p=0,q=b.length;p=0&&y<=1&&A>=0&&A<=1&&(d?n++:n.push({x:x.x,y:x.y,t1:y,t2:A}))}}return n}function bF(a,b){return bG(a,b,1)}function bE(a,b){return bG(a,b)}function bD(a,b,c,d,e,f,g,h){if(!(x(a,c)x(e,g)||x(b,d)x(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(!k)return;var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(n<+y(a,c).toFixed(2)||n>+x(a,c).toFixed(2)||n<+y(e,g).toFixed(2)||n>+x(e,g).toFixed(2)||o<+y(b,d).toFixed(2)||o>+x(b,d).toFixed(2)||o<+y(f,h).toFixed(2)||o>+x(f,h).toFixed(2))return;return{x:l,y:m}}}function bC(a,b,c,d,e,f,g,h,i){if(!(i<0||bB(a,b,c,d,e,f,g,h)n)k/=2,l+=(m1?1:i<0?0:i;var j=i/2,k=12,l=[-0.1252,.1252,-0.3678,.3678,-0.5873,.5873,-0.7699,.7699,-0.9041,.9041,-0.9816,.9816],m=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],n=0;for(var o=0;od;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function bx(){return this.hex}function bv(a,b,c){function d(){var e=Array.prototype.slice.call(arguments,0),f=e.join("?"),h=d.cache=d.cache||{},i=d.count=d.count||[];if(h[g](f)){bu(i,f);return c?c(h[f]):h[f]}i.length>=1e3&&delete h[i.shift()],i.push(f),h[f]=a[m](b,e);return c?c(h[f]):h[f]}return d}function bu(a,b){for(var c=0,d=a.length;c',bl=bk.firstChild,bl.style.behavior="url(#default#VML)";if(!bl||typeof bl.adj!="object")return a.type=p;bk=null}a.svg=!(a.vml=a.type=="VML"),a._Paper=j,a.fn=k=j.prototype=a.prototype,a._id=0,a._oid=0,a.is=function(a,b){b=v.call(b);if(b=="finite")return!M[g](+a);if(b=="array")return a instanceof Array;return b=="null"&&a===null||b==typeof a&&a!==null||b=="object"&&a===Object(a)||b=="array"&&Array.isArray&&Array.isArray(a)||H.call(a).slice(8,-1).toLowerCase()==b},a.angle=function(b,c,d,e,f,g){if(f==null){var h=b-d,i=c-e;if(!h&&!i)return 0;return(180+w.atan2(-i,-h)*180/B+360)%360}return a.angle(b,c,f,g)-a.angle(d,e,f,g)},a.rad=function(a){return a%360*B/180},a.deg=function(a){return a*180/B%360},a.snapTo=function(b,c,d){d=a.is(d,"finite")?d:10;if(a.is(b,E)){var e=b.length;while(e--)if(z(b[e]-c)<=d)return b[e]}else{b=+b;var f=c%b;if(fb-d)return c-f+b}return c};var bn=a.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=w.random()*16|0,c=a=="x"?b:b&3|8;return c.toString(16)});a.setWindow=function(b){eve("raphael.setWindow",a,h.win,b),h.win=b,h.doc=h.win.document,a._engine.initWin&&a._engine.initWin(h.win)};var bo=function(b){if(a.vml){var c=/^\s+|\s+$/g,d;try{var e=new ActiveXObject("htmlfile");e.write(""),e.close(),d=e.body}catch(f){d=createPopup().document.body}var g=d.createTextRange();bo=bv(function(a){try{d.style.color=r(a).replace(c,p);var b=g.queryCommandValue("ForeColor");b=(b&255)<<16|b&65280|(b&16711680)>>>16;return"#"+("000000"+b.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=h.doc.createElement("i");i.title="Rapha๋l Colour Picker",i.style.display="none",h.doc.body.appendChild(i),bo=bv(function(a){i.style.color=a;return h.doc.defaultView.getComputedStyle(i,p).getPropertyValue("color")})}return bo(b)},bp=function(){return"hsb("+[this.h,this.s,this.b]+")"},bq=function(){return"hsl("+[this.h,this.s,this.l]+")"},br=function(){return this.hex},bs=function(b,c,d){c==null&&a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b&&(d=b.b,c=b.g,b=b.r);if(c==null&&a.is(b,D)){var e=a.getRGB(b);b=e.r,c=e.g,d=e.b}if(b>1||c>1||d>1)b/=255,c/=255,d/=255;return[b,c,d]},bt=function(b,c,d,e){b*=255,c*=255,d*=255;var f={r:b,g:c,b:d,hex:a.rgb(b,c,d),toString:br};a.is(e,"finite")&&(f.opacity=e);return f};a.color=function(b){var c;a.is(b,"object")&&"h"in b&&"s"in b&&"b"in b?(c=a.hsb2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):a.is(b,"object")&&"h"in b&&"s"in b&&"l"in b?(c=a.hsl2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):(a.is(b,"string")&&(b=a.getRGB(b)),a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b?(c=a.rgb2hsl(b),b.h=c.h,b.s=c.s,b.l=c.l,c=a.rgb2hsb(b),b.v=c.b):(b={hex:"none"},b.r=b.g=b.b=b.h=b.s=b.v=b.l=-1)),b.toString=br;return b},a.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;a=a%360/60,i=c*b,h=i*(1-z(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return bt(e,f,g,d)},a.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h);if(a>1||b>1||c>1)a/=360,b/=100,c/=100;a*=360;var e,f,g,h,i;a=a%360/60,i=2*b*(c<.5?c:1-c),h=i*(1-z(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return bt(e,f,g,d)},a.rgb2hsb=function(a,b,c){c=bs(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;f=x(a,b,c),g=f-y(a,b,c),d=g==0?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=g==0?0:g/f;return{h:d,s:e,b:f,toString:bp}},a.rgb2hsl=function(a,b,c){c=bs(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;g=x(a,b,c),h=y(a,b,c),i=g-h,d=i==0?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=i==0?0:f<.5?i/(2*f):i/(2-2*f);return{h:d,s:e,l:f,toString:bq}},a._path2string=function(){return this.join(",").replace(Y,"$1")};var bw=a._preload=function(a,b){var c=h.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,h.doc.body.removeChild(this)},c.onerror=function(){h.doc.body.removeChild(this)},h.doc.body.appendChild(c),c.src=a};a.getRGB=bv(function(b){if(!b||!!((b=r(b)).indexOf("-")+1))return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bx};if(b=="none")return{r:-1,g:-1,b:-1,hex:"none",toString:bx};!X[g](b.toLowerCase().substring(0,2))&&b.charAt()!="#"&&(b=bo(b));var c,d,e,f,h,i,j,k=b.match(L);if(k){k[2]&&(f=R(k[2].substring(5),16),e=R(k[2].substring(3,5),16),d=R(k[2].substring(1,3),16)),k[3]&&(f=R((i=k[3].charAt(3))+i,16),e=R((i=k[3].charAt(2))+i,16),d=R((i=k[3].charAt(1))+i,16)),k[4]&&(j=k[4][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),k[1].toLowerCase().slice(0,4)=="rgba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100));if(k[5]){j=k[5][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="ฐ")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsb2rgb(d,e,f,h)}if(k[6]){j=k[6][s](W),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="ฐ")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsla"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsl2rgb(d,e,f,h)}k={r:d,g:e,b:f,toString:bx},k.hex="#"+(16777216|f|e<<8|d<<16).toString(16).slice(1),a.is(h,"finite")&&(k.opacity=h);return k}return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bx}},a),a.hsb=bv(function(b,c,d){return a.hsb2rgb(b,c,d).hex}),a.hsl=bv(function(b,c,d){return a.hsl2rgb(b,c,d).hex}),a.rgb=bv(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),a.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b}));return c.hex},a.getColor.reset=function(){delete this.start},a.parsePathString=function(b){if(!b)return null;var c=bz(b);if(c.arr)return bJ(c.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];a.is(b,E)&&a.is(b[0],E)&&(e=bJ(b)),e.length||r(b).replace(Z,function(a,b,c){var f=[],g=b.toLowerCase();c.replace(_,function(a,b){b&&f.push(+b)}),g=="m"&&f.length>2&&(e.push([b][n](f.splice(0,2))),g="l",b=b=="m"?"l":"L");if(g=="r")e.push([b][n](f));else while(f.length>=d[g]){e.push([b][n](f.splice(0,d[g])));if(!d[g])break}}),e.toString=a._path2string,c.arr=bJ(e);return e},a.parseTransformString=bv(function(b){if(!b)return null;var c={r:3,s:4,t:2,m:6},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=bJ(b)),d.length||r(b).replace($,function(a,b,c){var e=[],f=v.call(b);c.replace(_,function(a,b){b&&e.push(+b)}),d.push([b][n](e))}),d.toString=a._path2string;return d});var bz=function(a){var b=bz.ps=bz.ps||{};b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[g](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])});return b[a]};a.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=A(j,3),l=A(j,2),m=i*i,n=m*i,o=k*a+l*3*i*c+j*3*i*i*e+n*g,p=k*b+l*3*i*d+j*3*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,x=j*e+i*g,y=j*f+i*h,z=90-w.atan2(q-s,r-t)*180/B;(q>s||r=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},a.isBBoxIntersect=function(b,c){var d=a.isPointInsideBBox;return d(c,b.x,b.y)||d(c,b.x2,b.y)||d(c,b.x,b.y2)||d(c,b.x2,b.y2)||d(b,c.x,c.y)||d(b,c.x2,c.y)||d(b,c.x,c.y2)||d(b,c.x2,c.y2)||(b.xc.x||c.xb.x)&&(b.yc.y||c.yb.y)},a.pathIntersection=function(a,b){return bH(a,b)},a.pathIntersectionNumber=function(a,b){return bH(a,b,1)},a.isPointInsidePath=function(b,c,d){var e=a.pathBBox(b);return a.isPointInsideBBox(e,c,d)&&bH(b,[["M",c,d],["H",e.x2+10]],1)%2==1},a._removedFactory=function(a){return function(){eve("raphael.log",null,"Rapha๋l: you are calling to method “"+a+"” of removed object",a)}};var bI=a.pathBBox=function(a){var b=bz(a);if(b.bbox)return b.bbox;if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=bR(a);var c=0,d=0,e=[],f=[],g;for(var h=0,i=a.length;h1&&(v=w.sqrt(v),c=v*c,d=v*d);var x=c*c,y=d*d,A=(f==g?-1:1)*w.sqrt(z((x*y-x*u*u-y*t*t)/(x*u*u+y*t*t))),C=A*c*u/d+(a+h)/2,D=A*-d*t/c+(b+i)/2,E=w.asin(((b-D)/d).toFixed(9)),F=w.asin(((i-D)/d).toFixed(9));E=aF&&(E=E-B*2),!g&&F>E&&(F=F-B*2)}else E=j[0],F=j[1],C=j[2],D=j[3];var G=F-E;if(z(G)>k){var H=F,I=h,J=i;F=E+k*(g&&F>E?1:-1),h=C+c*w.cos(F),i=D+d*w.sin(F),m=bO(h,i,c,d,e,0,g,I,J,[F,H,C,D])}G=F-E;var K=w.cos(E),L=w.sin(E),M=w.cos(F),N=w.sin(F),O=w.tan(G/4),P=4/3*c*O,Q=4/3*d*O,R=[a,b],S=[a+P*L,b-Q*K],T=[h+P*N,i-Q*M],U=[h,i];S[0]=2*R[0]-S[0],S[1]=2*R[1]-S[1];if(j)return[S,T,U][n](m);m=[S,T,U][n](m).join()[s](",");var V=[];for(var W=0,X=m.length;W"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bP(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bP(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y)),i=f-2*d+b-(h-2*f+d),j=2*(d-b)-2*(f-d),k=b-d,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,z(l)>"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bP(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bP(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y));return{min:{x:y[m](0,p),y:y[m](0,o)},max:{x:x[m](0,p),y:x[m](0,o)}}}),bR=a._path2curve=bv(function(a,b){var c=!b&&bz(a);if(!b&&c.curve)return bJ(c.curve);var d=bL(a),e=b&&bL(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=function(a,b){var c,d;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null);switch(a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][n](bO[m](0,[b.x,b.y][n](a.slice(1))));break;case"S":c=b.x+(b.x-(b.bx||b.x)),d=b.y+(b.y-(b.by||b.y)),a=["C",c,d][n](a.slice(1));break;case"T":b.qx=b.x+(b.x-(b.qx||b.x)),b.qy=b.y+(b.y-(b.qy||b.y)),a=["C"][n](bN(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][n](bN(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][n](bM(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][n](bM(b.x,b.y,a[1],b.y));break;case"V":a=["C"][n](bM(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][n](bM(b.x,b.y,b.X,b.Y))}return a},i=function(a,b){if(a[b].length>7){a[b].shift();var c=a[b];while(c.length)a.splice(b++,0,["C"][n](c.splice(0,6)));a.splice(b,1),l=x(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&a[g][0]=="M"&&b[g][0]!="M"&&(b.splice(g,0,["M",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],l=x(d.length,e&&e.length||0))};for(var k=0,l=x(d.length,e&&e.length||0);ke){if(c&&!l.start){m=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),k+=["C"+m.start.x,m.start.y,m.m.x,m.m.y,m.x,m.y];if(f)return k;l.start=k,k=["M"+m.x,m.y+"C"+m.n.x,m.n.y,m.end.x,m.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!b&&!c){m=cs(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n);return{x:m.x,y:m.y,alpha:m.alpha}}}n+=j,g=+i[5],h=+i[6]}k+=i.shift()+i}l.end=k,m=b?n:c?l:a.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),m.alpha&&(m={x:m.x,y:m.y,alpha:m.alpha});return m}},cu=ct(1),cv=ct(),cw=ct(0,1);a.getTotalLength=cu,a.getPointAtLength=cv,a.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return cw(a,b).end;var d=cw(a,c,1);return b?cw(d,b).end:d},cl.getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return cu(this.attrs.path)}},cl.getPointAtLength=function(a){if(this.type=="path")return cv(this.attrs.path,a)},cl.getSubpath=function(b,c){if(this.type=="path")return a.getSubpath(this.attrs.path,b,c)};var cx=a.easing_formulas={linear:function(a){return a},"<":function(a){return A(a,1.7)},">":function(a){return A(a,.48)},"<>":function(a){var b=.48-a/1.04,c=w.sqrt(.1734+b*b),d=c-b,e=A(z(d),1/3)*(d<0?-1:1),f=-c-b,g=A(z(f),1/3)*(f<0?-1:1),h=e+g+.5;return(1-h)*3*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a=a-1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){if(a==!!a)return a;return A(2,-10*a)*w.sin((a-.075)*2*B/.3)+1},bounce:function(a){var b=7.5625,c=2.75,d;a<1/c?d=b*a*a:a<2/c?(a-=1.5/c,d=b*a*a+.75):a<2.5/c?(a-=2.25/c,d=b*a*a+.9375):(a-=2.625/c,d=b*a*a+.984375);return d}};cx.easeIn=cx["ease-in"]=cx["<"],cx.easeOut=cx["ease-out"]=cx[">"],cx.easeInOut=cx["ease-in-out"]=cx["<>"],cx["back-in"]=cx.backIn,cx["back-out"]=cx.backOut;var cy=[],cz=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,16)},cA=function(){var b=+(new Date),c=0;for(;c1&&!d.next){for(s in k)k[g](s)&&(r[s]=d.totalOrigin[s]);d.el.attr(r),cE(d.anim,d.el,d.anim.percents[0],null,d.totalOrigin,d.repeat-1)}d.next&&!d.stop&&cE(d.anim,d.el,d.next,null,d.totalOrigin,d.repeat)}}a.svg&&m&&m.paper&&m.paper.safari(),cy.length&&cz(cA)},cB=function(a){return a>255?255:a<0?0:a};cl.animateWith=function(b,c,d,e,f,g){var h=this;if(h.removed){g&&g.call(h);return h}var i=d instanceof cD?d:a.animation(d,e,f,g),j,k;cE(i,h,i.percents[0],null,h.attr());for(var l=0,m=cy.length;l.5)*2-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&n!=.5&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/);if(j=="linear"){var t=e.shift();t=-d(t);if(isNaN(t))return null;var u=[0,0,f.cos(a.rad(t)),f.sin(a.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=a._parseDots(e);if(!w)return null;k=k.replace(/[\(\)\s,\xb0#]/g,"_"),b.gradient&&k!=b.gradient.id&&(p.defs.removeChild(b.gradient),delete b.gradient);if(!b.gradient){s=q(j+"Gradient",{id:k}),b.gradient=s,q(s,j=="radial"?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:b.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;x1?G.opacity/100:G.opacity});case"stroke":G=a.getRGB(p),i.setAttribute(o,G.hex),o=="stroke"&&G[b]("opacity")&&q(i,{"stroke-opacity":G.opacity>1?G.opacity/100:G.opacity}),o=="stroke"&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":(d.type=="circle"||d.type=="ellipse"||c(p).charAt()!="r")&&r(d,p);break;case"opacity":k.gradient&&!k[b]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){H=a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),H&&(I=H.getElementsByTagName("stop"),q(I[I.length-1],{"stop-opacity":p}));break};default:o=="font-size"&&(p=e(p,10)+"px");var J=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[J]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if(d.type=="text"&&!!(f[b]("text")||f[b]("font")||f[b]("font-size")||f[b]("x")||f[b]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(a._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10;if(f[b]("text")){g.text=f.text;while(h.firstChild)h.removeChild(h.firstChild);var j=c(f.text).split("\n"),k=[],m;for(var n=0,o=j.length;n"));var $=X.getBoundingClientRect();t.W=m.w=($.right-$.left)/Y,t.H=m.h=($.bottom-$.top)/Y,t.X=m.x,t.Y=m.y+t.H/2,("x"in i||"y"in i)&&(t.path.v=a.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));var _=["x","y","text","font","font-family","font-weight","font-style","font-size"];for(var ba=0,bb=_.length;ba.25&&(c=e.sqrt(.25-i(b-.5,2))*((c>.5)*2-1)+.5),m=b+n+c);return o}),f=f.split(/\s*\-\s*/);if(l=="linear"){var p=f.shift();p=-d(p);if(isNaN(p))return null}var q=a._parseDots(f);if(!q)return null;b=b.shape||b.node;if(q.length){b.removeChild(g),g.on=!0,g.method="none",g.color=q[0].color,g.color2=q[q.length-1].color;var r=[];for(var s=0,t=q.length;s')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},a._engine.initWin(a._g.win),a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b.container,d=b.height,e,f=b.width,g=b.x,h=b.y;if(!c)throw new Error("VML container not found.");var i=new a._Paper,j=i.canvas=a._g.doc.createElement("div"),k=j.style;g=g||0,h=h||0,f=f||512,d=d||342,i.width=f,i.height=d,f==+f&&(f+="px"),d==+d&&(d+="px"),i.coordsize=u*1e3+n+u*1e3,i.coordorigin="0 0",i.span=a._g.doc.createElement("span"),i.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",j.appendChild(i.span),k.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",f,d),c==1?(a._g.doc.body.appendChild(j),k.left=g+"px",k.top=h+"px",k.position="absolute"):c.firstChild?c.insertBefore(j,c.firstChild):c.appendChild(j),i.renderfix=function(){};return i},a.prototype.clear=function(){a.eve("raphael.clear",this),this.canvas.innerHTML=o,this.span=a._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},a.prototype.remove=function(){a.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]=typeof this[b]=="function"?a._removedFactory(b):null;return!0};var G=a.st;for(var H in E)E[b](H)&&!G[b](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}(window.Raphael) \ No newline at end of file diff --git a/public/site_assets/mpos/css/animation.css b/public/site_assets/mpos/css/animation.css new file mode 100644 index 00000000..ac5a9562 --- /dev/null +++ b/public/site_assets/mpos/css/animation.css @@ -0,0 +1,85 @@ +/* + Animation example, for spinners +*/ +.animate-spin { + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + -webkit-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; + display: inline-block; +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-o-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} diff --git a/public/site_assets/mpos/css/custom.css b/public/site_assets/mpos/css/custom.css new file mode 100644 index 00000000..c679c7dc --- /dev/null +++ b/public/site_assets/mpos/css/custom.css @@ -0,0 +1,211 @@ +/* Custom stuff */ +span.confirmed { + display: inline-block; + width: 60px; + font-size: 10px; + background: #e6efc2; + color:#264409; + padding: 2px 4px; + border:1px solid #c6d880; + border-radius: 4px; +} +span.orphan { + display: inline-block; + width: 60px; + font-size: 10px; + background: #ff9473; + color:#264409; + padding: 2px 4px; + border:1px solid #ff6342; + border-radius: 4px; +} +span.unconfirmed { + display: inline-block; + width: 60px; + font-size: 10px; + background: #ffce9c; + color:#264409; + padding: 2px 4px; + border:1px solid #ffb573; + border-radius: 4px; +} +div.login_small { + float: right; + background: #E0E0E3; + background: linear-gradient(to bottom, rgb(255, 255, 255) 0%, rgb(241, 241, 241) 50%, rgb(225, 225, 225) 51%, rgb(246, 246, 246) 100%) repeat scroll 0% 0%; + border-radius: 5px 5px 5px 5px; + position: absolute; + padding: 5px; + top: 10px; + right: 10px; +} + +fieldset2 { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + background: #F6F6F6; + padding: 1% 0%; + margin: 10px 0; +} + +fieldset2 label { + display: block; + float: left; + height: 25px; + line-height: 25px; + text-shadow: 0 1px 0 #fff; + font-weight: bold; + padding-left: 10px; + text-transform: uppercase; +} +fieldset2 input[type=text], fieldset2 input[type=password] { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border: 1px solid #BBBBBB; + height: 20px; + color: #666666; + -webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; + -moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; + box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; + padding-left: 10px; + background-position: 10px 6px; + margin: 0; + display: block; + float: left; + margin: 0 10px; +} + +fieldset2 input[type=text]:focus, fieldset2 input[type=password]:focus, fieldset2 input[type=checkbox] { + outline: none; + border: 1px solid #77BACE; + -webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; + -moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; + box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +} + +/* Custom checkboxes */ +input[type=checkbox] { + position: absolute; + opacity: 0; +} + +input[type=checkbox] + label +{ + background: url('../images/icn_alert_error.png'); + height: 16px; + width: 16px; + display:inline-block; + padding: 0 0 0 0px; +} + +input[type=checkbox]:checked + label +{ + background: url('../images/icn_alert_success.png'); + height: 16px; + width: 16px; + display:inline-block; + padding: 0 0 0 0px; +} + +/* Debugger console toggle switch */ +span.toggle { + display:block; + width: 75px; + height: 100%; + margin: 0 auto; +} + +:root input[type="checkbox"] { + position: absolute; + opacity: 0; +} + +:root input[type="checkbox"].ios-switch + div { + display: inline-block; + vertical-align: middle; + width: 3em; height: 1em; + border: 1px solid rgba(0,0,0,.3); + border-radius: 999px; + margin: 0 .5em; + background: white; + background-image: linear-gradient(rgba(0,0,0,.1), transparent), + linear-gradient(90deg, hsl(210, 90%, 60%) 50%, transparent 50%); + background-size: 200% 100%; + background-position: 100% 0; + background-origin: border-box; + background-clip: border-box; + overflow: hidden; + transition-duration: .4s; + transition-property: padding, width, background-position, text-indent; + box-shadow: 0 .1em .1em rgba(0,0,0,.2) inset, + 0 .45em 0 .1em rgba(0,0,0,.05) inset; + font-size: 150%; +} + +:root input[type="checkbox"].ios-switch:checked + div { + padding-left: 2em; width: 1em; + background-position: 0 0; +} + +:root input[type="checkbox"].ios-switch + div:before { + content: 'On'; + float: left; + width: 1.65em; height: 1.65em; + margin: -.1em; + border: 1px solid rgba(0,0,0,.35); + border-radius: inherit; + background: white; + background-image: linear-gradient(rgba(0,0,0,.2), transparent); + box-shadow: 0 .1em .1em .1em hsla(0,0%,100%,.8) inset, + 0 0 .5em rgba(0,0,0,.3); + color: white; + text-shadow: 0 -1px 1px rgba(0,0,0,.3); + text-indent: -2.5em; +} + +:root input[type="checkbox"].ios-switch:active + div:before { + background-color: #eee; +} + +:root input[type="checkbox"].ios-switch:focus + div { + box-shadow: 0 .1em .1em rgba(0,0,0,.2) inset, + 0 .45em 0 .1em rgba(0,0,0,.05) inset, + 0 0 .4em 1px rgba(255,0,0,.5); +} + +:root input[type="checkbox"].ios-switch + div:before, +:root input[type="checkbox"].ios-switch + div:after { + font: bold 60%/1.9 sans-serif; + text-transform: uppercase; +} + +:root input[type="checkbox"].ios-switch + div:after { + content: 'Off'; + float: left; + text-indent: .5em; + color: rgba(0,0,0,.45); + text-shadow: none; + +} + +footer.footer { + clear: both; + text-align: center; + height: 60px; + margin-top: -60px; + position: relative; + padding: 4px 0px 0px 0px; + background:url("../images/header_bg.png") repeat-x scroll 0% 0% rgb(34, 34, 34); + font-size:11px; + width:100%; +} + +footer.footer p { + color:grey; + margin: 0px 0 0 0; + } +.DebuggerConsole { + z-index:500;position:absolute;display:none +} diff --git a/public/site_assets/mpos/css/fontello-codes.css b/public/site_assets/mpos/css/fontello-codes.css new file mode 100644 index 00000000..54918339 --- /dev/null +++ b/public/site_assets/mpos/css/fontello-codes.css @@ -0,0 +1,36 @@ + +.icon-money:before { content: '\e819'; } /* '๎ ™' */ +.icon-exchange:before { content: '\e81a'; } /* '๎ š' */ +.icon-wrench:before { content: '\e80f'; } /* '๎ ' */ +.icon-user:before { content: '\e804'; } /* '๎ „' */ +.icon-doc:before { content: '\e81b'; } /* '๎ ›' */ +.icon-trash:before { content: '\e812'; } /* '๎ ’' */ +.icon-torso:before { content: '\e805'; } /* '๎ …' */ +.icon-th-large:before { content: '\e808'; } /* '๎ ˆ' */ +.icon-star-empty:before { content: '\e821'; } /* '๎ ก' */ +.icon-desktop:before { content: '\e806'; } /* '๎ †' */ +.icon-cancel:before { content: '\e80a'; } /* '๎ Š' */ +.icon-record:before { content: '\e822'; } /* '๎ ข' */ +.icon-plus:before { content: '\e80c'; } /* '๎ Œ' */ +.icon-photo:before { content: '\e815'; } /* '๎ •' */ +.icon-pencil:before { content: '\e802'; } /* '๎ ‚' */ +.icon-ok:before { content: '\e80b'; } /* '๎ ‹' */ +.icon-off:before { content: '\e811'; } /* '๎ ‘' */ +.icon-indent-left:before { content: '\e80d'; } /* '๎ ' */ +.icon-forward:before { content: '\e81d'; } /* '๎ ' */ +.icon-fast-forward:before { content: '\e820'; } /* '๎  ' */ +.icon-fast-backward:before { content: '\e81f'; } /* '๎ Ÿ' */ +.icon-gauge:before { content: '\e803'; } /* '๎ ƒ' */ +.icon-backward:before { content: '\e81e'; } /* '๎ ž' */ +.icon-right-open:before { content: '\e800'; } /* '๎ €' */ +.icon-left-open:before { content: '\e801'; } /* '๎ ' */ +.icon-bell:before { content: '\e817'; } /* '๎ —' */ +.icon-barcode:before { content: '\e80e'; } /* '๎ Ž' */ +.icon-align-left:before { content: '\e807'; } /* '๎ ‡' */ +.icon-home:before { content: '\e813'; } /* '๎ “' */ +.icon-mail:before { content: '\e814'; } /* '๎ ”' */ +.icon-chart:before { content: '\e809'; } /* '๎ ‰' */ +.icon-cog:before { content: '\e810'; } /* '๎ ' */ +.icon-megaphone:before { content: '\e816'; } /* '๎ –' */ +.icon-login:before { content: '\e81c'; } /* '๎ œ' */ +.icon-dollar:before { content: '\e818'; } /* '๎ ˜' */ \ No newline at end of file diff --git a/public/site_assets/mpos/css/fontello-config.json b/public/site_assets/mpos/css/fontello-config.json new file mode 100644 index 00000000..b80a71a7 --- /dev/null +++ b/public/site_assets/mpos/css/fontello-config.json @@ -0,0 +1,218 @@ +{ + "name": "", + "css_prefix_text": "icon-", + "css_use_suffix": false, + "hinting": true, + "glyphs": [ + { + "uid": "026007bd17bfc67f3fe013199676f620", + "css": "dollar", + "code": 59416, + "src": "fontawesome" + }, + { + "uid": "a204f0fa972408eaae5a363c444991b2", + "css": "login", + "code": 59420, + "src": "entypo" + }, + { + "uid": "e07df3e5b9ae72836b7804f38f0644a9", + "css": "exchange", + "code": 59418, + "src": "iconic" + }, + { + "uid": "212ab54aac31030950fec3e2448ebee9", + "css": "money", + "code": 59417, + "src": "modernpics" + }, + { + "uid": "b6ef4443ecc502136135437837d9724b", + "css": "mail", + "code": 59412, + "src": "elusive" + }, + { + "uid": "8346e81b88fa3c57b42978f8b137a93a", + "css": "star-empty", + "code": 59425, + "src": "elusive" + }, + { + "uid": "2c576f7c6c3233c31abad0899fc9f4af", + "css": "user", + "code": 59396, + "src": "elusive" + }, + { + "uid": "6ad86a953a5a76086c5568366863bbca", + "css": "torso", + "code": 59397, + "src": "elusive" + }, + { + "uid": "745f28cc6b06e5d131f6d650377b6cf5", + "css": "photo", + "code": 59413, + "src": "elusive" + }, + { + "uid": "76f961b11f65300838a5a78856aca30f", + "css": "th-large", + "code": 59400, + "src": "elusive" + }, + { + "uid": "ce7452abce8b55ded1c393997a51e6b3", + "css": "ok", + "code": 59403, + "src": "elusive" + }, + { + "uid": "499b745a2e2485bdd059c3a53d048e5f", + "css": "cancel", + "code": 59402, + "src": "elusive" + }, + { + "uid": "55e2ff85b1c459c383f46da6e96014b0", + "css": "plus", + "code": 59404, + "src": "elusive" + }, + { + "uid": "829c06a0a3b73b02a6224f4bbb73d99c", + "css": "home", + "code": 59411, + "src": "elusive" + }, + { + "uid": "62b0580ee8edc3a3edfbf68a47c852d5", + "css": "pencil", + "code": 59394, + "src": "elusive" + }, + { + "uid": "f84e243b91683403debed23b950f7efb", + "css": "bell", + "code": 59415, + "src": "elusive" + }, + { + "uid": "3ab2abf6f936d3e53ee8c184cedaed82", + "css": "trash", + "code": 59410, + "src": "elusive" + }, + { + "uid": "6083c8aa5e3345476a24a28ac1afaa61", + "css": "cog", + "code": 59408, + "src": "elusive" + }, + { + "uid": "cde79a37774e5817bc68fff2464aee28", + "css": "wrench", + "code": 59407, + "src": "elusive" + }, + { + "uid": "c0a07aca383ff2a164a4d691fa46e35c", + "css": "left-open", + "code": 59393, + "src": "elusive" + }, + { + "uid": "dc4a03854ef986d64565143bea4241aa", + "css": "right-open", + "code": 59392, + "src": "elusive" + }, + { + "uid": "14cab076c708524c1031b29ffd1c188f", + "css": "record", + "code": 59426, + "src": "elusive" + }, + { + "uid": "a76bd0de8b24c94f7fe0e1f93c34e65f", + "css": "backward", + "code": 59422, + "src": "elusive" + }, + { + "uid": "c69425891f0b3ba4883e692a55e83bfd", + "css": "fast-backward", + "code": 59423, + "src": "elusive" + }, + { + "uid": "c03284ddefae90dfd5ae9f0ee03325a2", + "css": "fast-forward", + "code": 59424, + "src": "elusive" + }, + { + "uid": "86bf86dba2ca65051aa87794221fee1c", + "css": "forward", + "code": 59421, + "src": "elusive" + }, + { + "uid": "abe051e31ad705400cf6226b24b6e828", + "css": "desktop", + "code": 59398, + "src": "elusive" + }, + { + "uid": "3a3b33acd5fe66d84ff303baf9d8efa8", + "css": "align-left", + "code": 59399, + "src": "elusive" + }, + { + "uid": "2a6cc3252195b53ed77ad3bdd73391b3", + "css": "indent-left", + "code": 59405, + "src": "elusive" + }, + { + "uid": "c835a3a0692cca9dffde9a8a561da938", + "css": "off", + "code": 59409, + "src": "elusive" + }, + { + "uid": "b622423405bcc984de6553e2f23c9fb6", + "css": "barcode", + "code": 59406, + "src": "elusive" + }, + { + "uid": "08fcae555c22437a112411038ac28e16", + "css": "chart", + "code": 59401, + "src": "elusive" + }, + { + "uid": "d9ca3bd7577f1110305a2ca1841826cb", + "css": "megaphone", + "code": 59414, + "src": "elusive" + }, + { + "uid": "c053ebe321823b081483d332b06eee54", + "css": "gauge", + "code": 59395, + "src": "elusive" + }, + { + "uid": "f978da58836f23373882916f05fb70b4", + "css": "doc", + "code": 59419, + "src": "linecons" + } + ] +} \ No newline at end of file diff --git a/public/site_assets/mpos/css/fontello-embedded.css b/public/site_assets/mpos/css/fontello-embedded.css new file mode 100644 index 00000000..348d6dcd --- /dev/null +++ b/public/site_assets/mpos/css/fontello-embedded.css @@ -0,0 +1,89 @@ +@font-face { + font-family: 'fontello'; + src: url('../font/fontello.eot?6410230'); + src: url('../font/fontello.eot?6410230#iefix') format('embedded-opentype'), + url('../font/fontello.svg?6410230#fontello') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'fontello'; + src: url('data:application/octet-stream;base64,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') format('woff'), + url('data:application/octet-stream;base64,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') format('truetype'); +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'fontello'; + src: url('../font/fontello.svg?6410230#fontello') format('svg'); + } +} +*/ + + [class^="icon-"]:before, [class*=" icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: none; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} +.icon-money:before { content: '\e819'; } /* '๎ ™' */ +.icon-exchange:before { content: '\e81a'; } /* '๎ š' */ +.icon-wrench:before { content: '\e80f'; } /* '๎ ' */ +.icon-user:before { content: '\e804'; } /* '๎ „' */ +.icon-doc:before { content: '\e81b'; } /* '๎ ›' */ +.icon-trash:before { content: '\e812'; } /* '๎ ’' */ +.icon-torso:before { content: '\e805'; } /* '๎ …' */ +.icon-th-large:before { content: '\e808'; } /* '๎ ˆ' */ +.icon-star-empty:before { content: '\e821'; } /* '๎ ก' */ +.icon-desktop:before { content: '\e806'; } /* '๎ †' */ +.icon-cancel:before { content: '\e80a'; } /* '๎ Š' */ +.icon-record:before { content: '\e822'; } /* '๎ ข' */ +.icon-plus:before { content: '\e80c'; } /* '๎ Œ' */ +.icon-photo:before { content: '\e815'; } /* '๎ •' */ +.icon-pencil:before { content: '\e802'; } /* '๎ ‚' */ +.icon-ok:before { content: '\e80b'; } /* '๎ ‹' */ +.icon-off:before { content: '\e811'; } /* '๎ ‘' */ +.icon-indent-left:before { content: '\e80d'; } /* '๎ ' */ +.icon-forward:before { content: '\e81d'; } /* '๎ ' */ +.icon-fast-forward:before { content: '\e820'; } /* '๎  ' */ +.icon-fast-backward:before { content: '\e81f'; } /* '๎ Ÿ' */ +.icon-gauge:before { content: '\e803'; } /* '๎ ƒ' */ +.icon-backward:before { content: '\e81e'; } /* '๎ ž' */ +.icon-right-open:before { content: '\e800'; } /* '๎ €' */ +.icon-left-open:before { content: '\e801'; } /* '๎ ' */ +.icon-bell:before { content: '\e817'; } /* '๎ —' */ +.icon-barcode:before { content: '\e80e'; } /* '๎ Ž' */ +.icon-align-left:before { content: '\e807'; } /* '๎ ‡' */ +.icon-home:before { content: '\e813'; } /* '๎ “' */ +.icon-mail:before { content: '\e814'; } /* '๎ ”' */ +.icon-chart:before { content: '\e809'; } /* '๎ ‰' */ +.icon-cog:before { content: '\e810'; } /* '๎ ' */ +.icon-megaphone:before { content: '\e816'; } /* '๎ –' */ +.icon-login:before { content: '\e81c'; } /* '๎ œ' */ +.icon-dollar:before { content: '\e818'; } /* '๎ ˜' */ \ No newline at end of file diff --git a/public/site_assets/mpos/css/fontello-ie7-codes.css b/public/site_assets/mpos/css/fontello-ie7-codes.css new file mode 100644 index 00000000..ad19c592 --- /dev/null +++ b/public/site_assets/mpos/css/fontello-ie7-codes.css @@ -0,0 +1,36 @@ + +.icon-money { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-wrench { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-doc { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-torso { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-th-large { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-star-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-desktop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-record { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-photo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-indent-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-forward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-fast-forward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-fast-backward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-gauge { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-backward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-right-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-left-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-bell { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-barcode { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-align-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-chart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-megaphone { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-login { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-dollar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/public/site_assets/mpos/css/fontello-ie7.css b/public/site_assets/mpos/css/fontello-ie7.css new file mode 100644 index 00000000..b63b49f3 --- /dev/null +++ b/public/site_assets/mpos/css/fontello-ie7.css @@ -0,0 +1,47 @@ +[class^="icon-"], [class*=" icon-"] { + font-family: 'fontello'; + font-style: normal; + font-weight: normal; + + /* fix buttons height */ + line-height: 1em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ +} + +.icon-money { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-wrench { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-doc { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-torso { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-th-large { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-star-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-desktop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-record { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-photo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-indent-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-forward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-fast-forward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-fast-backward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-gauge { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-backward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-right-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-left-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-bell { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-barcode { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-align-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-chart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-megaphone { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-login { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-dollar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/public/site_assets/mpos/css/fontello.css b/public/site_assets/mpos/css/fontello.css new file mode 100644 index 00000000..0c5daaf0 --- /dev/null +++ b/public/site_assets/mpos/css/fontello.css @@ -0,0 +1,87 @@ +@font-face { + font-family: 'fontello'; + src: url('../font/fontello.eot?11596946'); + src: url('../font/fontello.eot?11596946#iefix') format('embedded-opentype'), + url('../font/fontello.woff?11596946') format('woff'), + url('../font/fontello.ttf?11596946') format('truetype'), + url('../font/fontello.svg?11596946#fontello') format('svg'); + font-weight: normal; + font-style: normal; +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'fontello'; + src: url('../font/fontello.svg?11596946#fontello') format('svg'); + } +} +*/ + + [class^="icon-"]:before, [class*=" icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: none; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} + +.icon-money:before { content: '\e819'; } /* '๎ ™' */ +.icon-exchange:before { content: '\e81a'; } /* '๎ š' */ +.icon-wrench:before { content: '\e80f'; } /* '๎ ' */ +.icon-user:before { content: '\e804'; } /* '๎ „' */ +.icon-doc:before { content: '\e81b'; } /* '๎ ›' */ +.icon-trash:before { content: '\e812'; } /* '๎ ’' */ +.icon-torso:before { content: '\e805'; } /* '๎ …' */ +.icon-th-large:before { content: '\e808'; } /* '๎ ˆ' */ +.icon-star-empty:before { content: '\e821'; } /* '๎ ก' */ +.icon-desktop:before { content: '\e806'; } /* '๎ †' */ +.icon-cancel:before { content: '\e80a'; } /* '๎ Š' */ +.icon-record:before { content: '\e822'; } /* '๎ ข' */ +.icon-plus:before { content: '\e80c'; } /* '๎ Œ' */ +.icon-photo:before { content: '\e815'; } /* '๎ •' */ +.icon-pencil:before { content: '\e802'; } /* '๎ ‚' */ +.icon-ok:before { content: '\e80b'; } /* '๎ ‹' */ +.icon-off:before { content: '\e811'; } /* '๎ ‘' */ +.icon-indent-left:before { content: '\e80d'; } /* '๎ ' */ +.icon-forward:before { content: '\e81d'; } /* '๎ ' */ +.icon-fast-forward:before { content: '\e820'; } /* '๎  ' */ +.icon-fast-backward:before { content: '\e81f'; } /* '๎ Ÿ' */ +.icon-gauge:before { content: '\e803'; } /* '๎ ƒ' */ +.icon-backward:before { content: '\e81e'; } /* '๎ ž' */ +.icon-right-open:before { content: '\e800'; } /* '๎ €' */ +.icon-left-open:before { content: '\e801'; } /* '๎ ' */ +.icon-bell:before { content: '\e817'; } /* '๎ —' */ +.icon-barcode:before { content: '\e80e'; } /* '๎ Ž' */ +.icon-align-left:before { content: '\e807'; } /* '๎ ‡' */ +.icon-home:before { content: '\e813'; } /* '๎ “' */ +.icon-mail:before { content: '\e814'; } /* '๎ ”' */ +.icon-chart:before { content: '\e809'; } /* '๎ ‰' */ +.icon-cog:before { content: '\e810'; } /* '๎ ' */ +.icon-megaphone:before { content: '\e816'; } /* '๎ –' */ +.icon-login:before { content: '\e81c'; } /* '๎ œ' */ +.icon-dollar:before { content: '\e818'; } /* '๎ ˜' */ \ No newline at end of file diff --git a/public/site_assets/mpos/css/ie.css b/public/site_assets/mpos/css/ie.css new file mode 100644 index 00000000..5c88cb9f --- /dev/null +++ b/public/site_assets/mpos/css/ie.css @@ -0,0 +1,43 @@ +.quick_search { +text-align: center; +padding: 14px 0 0px 0; +} + +.quick_search input[type=text] { +text-align: left; +height: 22px; +width: 88%; +color: #ccc; +padding-left: 2%; +padding-top: 5px; +background: #fff url(../images/icn_search.png) no-repeat; +background-position: 10px 6px; +} + +.toggleLink { +display: inline; +float: none; +margin-left: 2% +} + +html ul.tabs li.active, html ul.tabs li.active a:hover { +background: #ccc; +} + +input[type=submit].btn_post_message { +background: url(../images/post_message.png) no-repeat; +} + +fieldset input[type=text] { +margin-left: -10px; +} + + +fieldset select { +margin-left: -10px +} + +fieldset textarea { +margin-left: -10px; +} + diff --git a/public/site_assets/mpos/css/jquery.jqplot.min.css b/public/site_assets/mpos/css/jquery.jqplot.min.css new file mode 100644 index 00000000..0f84835b --- /dev/null +++ b/public/site_assets/mpos/css/jquery.jqplot.min.css @@ -0,0 +1 @@ +.jqplot-target{position:relative;color:#666;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-right:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom}.jqplot-yaxis-tick{right:0;top:15px;text-align:right}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px 1px 5px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-right:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-left:12px;margin-right:12px}table.jqplot-table-legend,table.jqplot-cursor-legend{background-color:rgba(255,255,255,0.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-left-width:6px;border-right-width:6px;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px}.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:rgb(20%,20%,20%)}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(90%,90%,90%,0.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(96%,96%,96%,0.3)} \ No newline at end of file diff --git a/public/site_assets/mpos/css/layout.css b/public/site_assets/mpos/css/layout.css new file mode 100644 index 00000000..34b365b9 --- /dev/null +++ b/public/site_assets/mpos/css/layout.css @@ -0,0 +1,839 @@ +/* Essentials */ + +html, div, map, dt, isindex, form, header, aside, section, section, article, footer { + display: block; +} + +html, body { +height: 100%; +margin: 0; +padding: 0; +font-family: "Helvetica Neue", Helvetica, Arial, Verdana, sans-serif; +background: #F8F8F8; +font-size: 12px; +} + +.clear { +clear: both; +} + +.spacer { +height: 20px; +} + +a:link, a:visited { +color: #77BACE; +text-decoration: none; +} + +a:hover { +text-decoration: underline; +} + + +/* Header */ + +header#header { +height: 55px; +width: 100%; +background: #222222 url(../images/header_bg.png) repeat-x; +} + +header#header h1.site_title, header#header h2.section_title { +float: left; +margin: 0; +font-size: 22px; +display: block; +width: 23%; +height: 55px; +font-weight: normal; +text-align: left; +text-indent: 1.8%; +line-height: 55px; +color: #fff; +text-shadow: 0 -1px 0 #000; +} + +header#header h1.site_title a { +color: #fff; +text-decoration: none; +} + +header#header h2.section_title { +text-align: left; +text-indent: 4.5%; +text-transform: uppercase; +width: 68%; +background: url(../images/header_shadow.png) no-repeat left top; +} + +.btn_view_site { +float: left; +width: 9%; +} + +.btn_view_site a { +display: block; +margin-top: 12px; +width: 91px; +height: 27px; +background: url(../images/btn_view_site.png) no-repeat; +text-align: center; +line-height: 29px; +color: #fff; +text-decoration: none; +text-shadow: 0 -1px 0 #000;} + +.btn_view_site a:hover { +background-position: 0 -27px; +} + +/* Secondary Header Bar */ + +section#secondary_bar { +height: 38px; +width: 100%; +background: #F1F1F4 url(../images/secondary_bar.png) repeat-x; +} + +section#secondary_bar .user { +float: left; +width: 12%; +height: 38px; +} + +.user p { +margin: 0; +padding: 0; +color: #666666; +font-weight: bold; +display: block; +float: left; +width: 85%; +height: 35px; +line-height: 35px; +text-indent: 25px; +text-shadow: 0 1px 0 #fff; +margin-left: 6%; +} + +.user a { +text-decoration: none; +color: #666666} + +.user a:hover { +color: #77BACE; +} + +.user a.logout_user { +float: left; +display: block; +width: 16px; +height: 35px; +text-indent: -5000px; +} + +/* Breadcrumbs */ + +section#secondary_bar .breadcrumbs_container { +float: left; +width: 77%; +background: url(../images/secondary_bar_shadow.png) no-repeat left top; +height: 38px; +} + +article.breadcrumbs { +float: left; +padding: 0 10px; +border: 1px solid #ccc; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +-webkit-box-shadow: 0 1px 0 #fff; +-moz-box-shadow: 0 1px 0 #fff; +box-shadow: 0 1px 0 #fff; +height: 23px; +margin: 4px 3%; +} + +.breadcrumbs a { +display: inline-block; +float: left; +height: 24px; +line-height: 23px; +} + +.breadcrumbs a.current, .breadcrumbs a.current:hover { +color: #9E9E9E; +font-weight: bold; +text-shadow: 0 1px 0 #fff; +text-decoration: none; +} + +.breadcrumbs a:link, .breadcrumbs a:visited { +color: #44474F; +text-decoration: none; +text-shadow: 0 1px 0 #fff; +font-weight: bold;} + +.breadcrumbs a:hover { +color: #222222; +} + +.breadcrumb_divider { +display: inline-block; +width: 12px; +height: 24px; +background: url(../images/breadcrumb_divider.png) no-repeat; +float: left; +margin: 0 5px; +} + +/* Sidebar */ + +aside#sidebar { +width: 12%; +background: #E0E0E3 url(../images/sidebar.png) repeat; +float: left; +min-height: 85%; +margin-top: -4px; +} + +#sidebar hr { +border: none; +outline: none; +background: url(../images/sidebar_divider.png) repeat-x; +display: block; +width: 100%; +height: 2px;} + + +/* Search */ + +.quick_search { +text-align: center; +padding: 14px 0 10px 0; +} + +.quick_search input[type=text] { +-webkit-border-radius: 20px; +-moz-border-radius: 20px; +border-radius: 20px; +border: 1px solid #bbb; +height: 26px; +width: 90%; +color: #ccc; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +text-indent: 30px; +background: #fff url(../images/icn_search.png) no-repeat; +background-position: 10px 6px; +} + +.quick_search input[type=text]:focus { +outline: none; +color: #666666; +border: 1px solid #77BACE; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +} + +/* Sidebar Menu */ + +#sidebar h3 { +color: #1F1F20; +text-transform: uppercase; +text-shadow: 0 1px 0 #fff; +font-size: 13px; +margin: 10px 0 10px 6%; +display: block; +float: left; +width: 90%; +} + +.toggleLink { +color: #999999; +font-size: 10px; +text-decoration: none; +display: block; +float: right; +margin-right: 2% +} + +#sidebar .toggleLink:hover { +color: #77BACE; +text-decoration: none; +} + +#sidebar ul { +clear: both; +margin: 0; padding: 0; +} + +#sidebar li { +list-style: none; +margin: 0 0 0 12%; padding: 0; +} + +#sidebar li a { +color: #666666; +padding-left: 12px; +text-decoration: none; +display: inline-block; +height: 17px; +line-height: 17px; +text-shadow: 0 1px 0 #fff; +margin: 2px 0; +} + +#sidebar li a:hover { +color: #444444; +} + +#sidebar p { +color: #666666; +padding-left: 6%; +text-shadow: 0 1px 0 #fff; +margin: 10px 0 0 0;} + +#sidebar a { +color: #666666; +text-decoration: none; +} + +#sidebar a:hover { +text-decoration: underline; +} + +#sidebar footer { +margin-top: 20%; +} + + +/* Main Content */ + + +section#main { +background: url("../images/sidebar_shadow.png") repeat-y scroll left top transparent; +float: left; +margin-top: -2px; +min-height: 85%; +width: 88%; +} + +#main h3 { +color: #1F1F20; +text-transform: uppercase; +text-shadow: 0 1px 0 #fff; +font-size: 13px; +margin: 8px 20px; +} + +/* Modules */ + +.module { +border: 1px solid #9BA0AF; +width: 100%; +margin: 20px 3% 0 3%; +margin-top: 20px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +background: #ffffff; +} + +#main .module header h3 { +display: block; +width: 60%; +float: left; +} + +.module header { +height: 38px; +width: 100%; +background: #F1F1F4 url(../images/secondary_bar.png) repeat-x; +-webkit-border-top-left-radius: 5px; -webkit-border-top-right-radius: 5px; +-moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px; +border-top-left-radius: 5px; border-top-right-radius: 5px; +} + +.module footer { +height: 32px; +width: 100%; +border-top: 1px solid #9CA1B0; +background: #F1F1F4 url(../images/module_footer_bg.png) repeat-x; +-webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-right-radius: 5px; +-moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomright: 5px; +-webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-right-radius: 5px; +} + +.module_content { +margin: 10px 20px; +color: #666;} + +/* Module Widths */ + +.width_full { +width: 95%; +margin: 20px 0px 10px 30px; +float: left; +} + +.width_half { +width: 46%; +margin: 20px 0px 10px 30px; +float: left; +} + +.width_quarter { +width: 26%; +margin: 20px 0px 10px 30px; +float: left; +} + +.width_3_quarter { +width: 66%; +margin: 20px 0px 10px 30px; +float: left; +} + +/* Stats Module */ + +.stats_graph { +width: 64%; +float: left; +} + +.stats_overview { +background: #F6F6F6; +border: 1px solid #ccc; +float: right; +width: 26%; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +} + +.overview_today, .overview_previous { +width: 50%; +float: left;} + +.stats_overview p { +margin: 0; padding: 0; +text-align: center; +text-transform: uppercase; +text-shadow: 0 1px 0 #fff; +} + +.stats_overview p.overview_day { +font-size: 12px; +font-weight: bold; +margin: 6px 0; +} + +.stats_overview p.overview_count { +font-size: 26px; +font-weight: bold; +color: #333333;} + +.stats_overview p.overview_type { +font-size: 10px; +color: #999999; +margin-bottom: 8px} + +/* Content Manager */ + +.tablesorter, .tablesorterpager { +width: 100%; +margin: -5px 0 0 0; +} + +.tablesorter td, .tablesorterpager td{ +margin: 0; +padding: 0; +border-bottom: 1px dotted #ccc; +} + +.tablesorter thead tr, .tablesorterpager thead tr { +height: 34px; +background: url(../images/table_sorter_header.png) repeat-x; +text-align: left; +text-indent: 10px; +cursor: pointer; +} + +.tablesorter td , .tablesorterpager td { +padding: 15px 10px; +} + +.tablesorter input[type=image], .tablesorterpager input[type=image] { +margin-right: 10px;} + +ul.tabs { + margin: 3px 10px 0 0; + padding: 0; + float: right; + list-style: none; + height: 24px; /*--Set height of tabs--*/ + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: 0 1px 0 #fff; + -moz-box-shadow: 0 1px 0 #fff; + box-shadow: 0 1px 0 #fff; + border: 1px solid #ccc; + font-weight: bold; + text-shadow: 0 1px 0 #fff; +} +ul.tabs li { + float: left; + margin: 0; + padding: 0; + line-height: 24px; +} +ul.tabs li a { + text-decoration: none; + color: #999; + display: block; + padding: 0 10px; + height: 24px; +} + +ul.tabs li a:hover { + color: #44474F; +} + +html ul.tabs li.active a { + color: #44474F; + } + +html ul.tabs li.active, html ul.tabs li.active a:hover { + background: #F1F2F4; + -webkit-box-shadow: inset 0 2px 3px #818181; + -moz-box-shadow: inset 0 2px 3px #818181; + box-shadow: inset 0 2px 3px #818181; +} + +html ul.tabs li:first-child, html ul.tabs li:first-child a { + -webkit-border-top-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; + -moz-border-radius-topleft: 5px; -moz-border-radius-bottomleft: 5px; + border-top-left-radius: 5px; border-bottom-left-radius: 5px; +} + +html ul.tabs li:last-child, html ul.tabs li:last-child a { + -webkit-border-top-right-radius: 5px; -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-topright: 5px; -moz-border-radius-bottomright: 5px; + border-top-right-radius: 5px; border-bottom-right-radius: 5px; +} + +#main .module header h3.tabs_involved { +display: block; +width: 60%; +float: left; +} + +/* Messages */ + +.message { +border-bottom: 1px dotted #cccccc; +} + +input[type=submit] { +background: #D0D1D4 url(../images/btn_submit.png) repeat-x; +border: 1px solid #A8A9A8; +-webkit-box-shadow: 0 1px 0 #fff; +-moz-box-shadow: 0 1px 0 #fff; +box-shadow: 0 1px 0 #fff; +font-weight: bold; +height: 22px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +padding: 0 10px; +color: #666; +text-shadow: 0 1px 0 #fff; +cursor: pointer; +} + +input[type=submit]:hover { +color: #333333; +} + +input[type=submit].alt_btn { +background: #D0D1D4 url(../images/btn_submit_2.png) repeat-x; +border: 1px solid#30B0C8; +-webkit-box-shadow: 0 1px 0 #fff; +-moz-box-shadow: 0 1px 0 #fff; +box-shadow: 0 1px 0 #fff; +font-weight: bold; +height: 22px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +padding: 0 10px; +color: #003E49; +text-shadow: 0 1px 0 #6CDCF9; +cursor: pointer; +} + +input[type=submit].alt_btn:hover { +color: #001217; +} + +input[type=submit].btn_post_message { +background: #D0D1D4 url(../images/post_message.png) no-repeat; +display: block; +width: 37px; +border: none; +height: 24px; +cursor: pointer; +text-indent: -5000px; +} + +input[type=submit].btn_post_message:hover { +background-position: 0 -24px; +} + +.post_message { +text-align: left; +padding: 5px 0; +} + +.post_message input[type=text] { +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +border: 1px solid #bbb; +height: 20px; +width: 70%; +color: #ccc; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +text-indent: 10px; +background-position: 10px 6px; +float: left; +margin: 0 3.5%; +} + +.post_message input[type=text]:focus { +outline: none; +border: 1px solid #77BACE; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +color: #666666; +} + +.post_message input[type=image] { +float: left; +} + +.message_list { +height: 250px; +overflow-x:hidden; +overflow-y: scroll; +} + +/* New/Edit Article Module */ + +fieldset { +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +background: #F6F6F6; +border: 1px solid #ccc; +padding: 1% 0%; +margin: 10px 0; +} + +fieldset label { +display: block; +float: left; +width: 200px; +height: 25px; +line-height: 25px; +text-shadow: 0 1px 0 #fff; +font-weight: bold; +padding-left: 10px; +margin: -5px 0 5px 0; +text-transform: uppercase; +} + +fieldset input[type=text], fieldset input[type=password] { +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +border: 1px solid #BBBBBB; +height: 20px; +color: #666666; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +padding-left: 10px; +background-position: 10px 6px; +margin: 0; +display: block; +float: left; +width: 92%; +margin: 0 10px; +} + +fieldset input[type=text]:focus, fieldset input[type=password]:focus, fieldset input[type=checkbox] { +outline: none; +border: 1px solid #77BACE; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +} + +fieldset select { +width: 96%; +margin: 0 10px; +border: 1px solid #bbb; +height: 20px; +color: #666666; +} + +fieldset textarea { +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +border: 1px solid #BBBBBB; +color: #666666; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff; +padding-left: 10px; +background-position: 10px 6px; +margin: 0 0.5%; +display: block; +float: left; +width: 92%; +margin: 0 10px; +} + +fieldset textarea:focus { +outline: none; +border: 1px solid #77BACE; +-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6; +} + +.submit_link { +float: right; +margin-right: 3%; +padding: 5px 0; +} + +.submit_link select { +width: 150px; +border: 1px solid #bbb; +height: 20px; +color: #666666; +} + +#main .module_content h1 { +color: #333333; +text-transform: none; +text-shadow: 0 1px 0 #fff; +font-size: 22px; +margin: 8px 0px; +} + +#main .module_content h2 { +color: #444444; +text-transform: none; +text-shadow: 0 1px 0 #fff; +font-size: 18px; +margin: 8px 0px; +} + +#main .module_content h3 { +color: #666666; +text-transform: uppercase; +text-shadow: 0 1px 0 #fff; +font-size: 13px; +margin: 8px 0px; +} + +#main .module_content h4 { +color: #666666; +text-transform: none; +text-shadow: 0 1px 0 #fff; +font-size: 13px; +margin: 8px 0px; +} + +#main .module_content li { +line-height: 150%; +} + +/* Alerts */ + +#main h4.info { +display: block; +width: 95%; +margin: 20px 3% 0 3%; +margin-top: 20px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +background: #B5E5EF url(../images/icn_alert_info.png) no-repeat; +background-position: 10px 10px; +border: 1px solid #77BACE; +color: #082B33; +padding: 10px 0; +text-indent: 40px; +font-size: 14px;} + +#main h4.warning { +display: block; +width: 95%; +margin: 20px 3% 0 3%; +margin-top: 20px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +background: #F5F3BA url(../images/icn_alert_warning.png) no-repeat; +background-position: 10px 10px; +border: 1px solid #C7A20D; +color: #796616; +padding: 10px 0; +text-indent: 40px; +font-size: 14px;} + +#main h4.errormsg { +display: block; +width: 95%; +margin: 20px 3% 0 3%; +margin-top: 20px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +background: #F3D9D9 url(../images/icn_alert_error.png) no-repeat; +background-position: 10px 10px; +border: 1px solid #D20009; +color: #7B040F; +padding: 10px 0; +text-indent: 40px; +font-size: 14px;} + +#main h4.success { +display: block; +width: 95%; +margin: 20px 3% 0 3%; +margin-top: 20px; +-webkit-border-radius: 5px; +-moz-border-radius: 5px; +border-radius: 5px; +background: #E2F6C5 url(../images/icn_alert_success.png) no-repeat; +background-position: 10px 10px; +border: 1px solid #79C20D; +color: #32510F; +padding: 10px 0; +text-indent: 40px; +font-size: 14px;} diff --git a/public/site_assets/mpos/css/visualize.css b/public/site_assets/mpos/css/visualize.css new file mode 100644 index 00000000..ee103825 --- /dev/null +++ b/public/site_assets/mpos/css/visualize.css @@ -0,0 +1,47 @@ +/*plugin styles*/ +.visualize { border: 1px solid #bbb; position: relative; background: #fbfbfb; margin: 20px auto 40px auto; z-index: 1; } +.visualize canvas { position: absolute; } +.visualize ul, .visualize ul li { margin: 0; padding: 0; background: none; } +.visualize-bar { border-top: 0; } + +/*table title, key elements*/ +.visualize .visualize-info { padding: 0 0 2px 8px; background: #fafafa; border: 1px solid #aaa; position: absolute; top: -15px; right: 10px; font-size: 11px; } +.visualize .visualize-title { display: block; color: #333; margin-bottom: 3px; } +.visualize ul.visualize-key { list-style: none; } +.visualize ul.visualize-key li { list-style: none; float: left; margin-right: 10px; padding-left: 10px; position: relative;} +.visualize ul.visualize-key .visualize-key-color { width: 6px; height: 6px; left: 0; position: absolute; top: 50%; margin-top: -3px; font-size: 6px; } +.visualize ul.visualize-key .visualize-key-label { color: #333; } + +/*pie labels*/ +.visualize-pie .visualize-labels { list-style: none; } +.visualize-pie .visualize-label-pos, .visualize-pie .visualize-label { position: absolute; margin: 0; padding:0; } +.visualize-pie .visualize-label { display: block; color: #fff; font-weight: bold; font-size: 1em; } +.visualize-pie-outside .visualize-label { color: #000; font-weight: normal; } + +/*line,bar, area labels*/ +.visualize-labels-x,.visualize-labels-y { position: absolute; left: 0; top: 0; list-style: none; } +.visualize-labels-x li, .visualize-labels-y li { position: absolute; bottom: 0; } +.visualize-labels-x li span.label, .visualize-labels-y li span.label { position: absolute; color: #555; } +.visualize-labels-x li span.line, .visualize-labels-y li span.line { position: absolute; border: 0 solid #ccc; } +.visualize-labels-x li { height: 100%; font-size: 10px; } +.visualize-labels-x li span.label { top: 100%; margin-top: 15px; left:-10; -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); } +.visualize-labels-x li span.line { border-left-width: 1px; height: 100%; display: block; } +.visualize-labels-x li span.line { border: 0;} /*hide vertical lines on area, line, bar*/ +.visualize-labels-y li { width: 100%; font-size: 11px; line-height: normal; } +.visualize-labels-y li span.label { right: 100%; margin-right: 5px; display: block; width: 100px; text-align: right; } +.visualize-labels-y li span.line { border-top-width: 1px; width: 100%; } +.visualize-bar .visualize-labels-x li span.label { width: 100%; text-align: center; } + +/*tooltips*/ +.visualize .chart_tooltip { + padding: 6px 7px; + background: #000; + background: url(../images/mbg.png) 0 0 repeat; + margin: 3px 4px 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + color: #ddd; + font-size: 10px; + line-height: normal; + } diff --git a/public/site_assets/mpos/font/fontello.eot b/public/site_assets/mpos/font/fontello.eot new file mode 100644 index 00000000..501ab4ed Binary files /dev/null and b/public/site_assets/mpos/font/fontello.eot differ diff --git a/public/site_assets/mpos/font/fontello.svg b/public/site_assets/mpos/font/fontello.svg new file mode 100644 index 00000000..ebac53ca --- /dev/null +++ b/public/site_assets/mpos/font/fontello.svg @@ -0,0 +1,46 @@ + + + +Copyright (C) 2012 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/site_assets/mpos/font/fontello.ttf b/public/site_assets/mpos/font/fontello.ttf new file mode 100644 index 00000000..cd50d417 Binary files /dev/null and b/public/site_assets/mpos/font/fontello.ttf differ diff --git a/public/site_assets/mpos/font/fontello.woff b/public/site_assets/mpos/font/fontello.woff new file mode 100644 index 00000000..104c2309 Binary files /dev/null and b/public/site_assets/mpos/font/fontello.woff differ diff --git a/public/site_assets/mpos/images/breadcrumb_divider.png b/public/site_assets/mpos/images/breadcrumb_divider.png new file mode 100644 index 00000000..af777f93 Binary files /dev/null and b/public/site_assets/mpos/images/breadcrumb_divider.png differ diff --git a/public/site_assets/mpos/images/btn_submit.png b/public/site_assets/mpos/images/btn_submit.png new file mode 100644 index 00000000..1266df50 Binary files /dev/null and b/public/site_assets/mpos/images/btn_submit.png differ diff --git a/public/site_assets/mpos/images/btn_submit_2.png b/public/site_assets/mpos/images/btn_submit_2.png new file mode 100644 index 00000000..3ca184b3 Binary files /dev/null and b/public/site_assets/mpos/images/btn_submit_2.png differ diff --git a/public/site_assets/mpos/images/btn_view_site.png b/public/site_assets/mpos/images/btn_view_site.png new file mode 100644 index 00000000..02ffad80 Binary files /dev/null and b/public/site_assets/mpos/images/btn_view_site.png differ diff --git a/public/site_assets/mpos/images/chartbg-vanilla.png b/public/site_assets/mpos/images/chartbg-vanilla.png new file mode 100644 index 00000000..d9a0617a Binary files /dev/null and b/public/site_assets/mpos/images/chartbg-vanilla.png differ diff --git a/public/site_assets/mpos/images/chartbg.png b/public/site_assets/mpos/images/chartbg.png new file mode 100644 index 00000000..bd711acc Binary files /dev/null and b/public/site_assets/mpos/images/chartbg.png differ diff --git a/public/site_assets/mpos/images/header_bg.png b/public/site_assets/mpos/images/header_bg.png new file mode 100644 index 00000000..5557df7d Binary files /dev/null and b/public/site_assets/mpos/images/header_bg.png differ diff --git a/public/site_assets/mpos/images/header_shadow.png b/public/site_assets/mpos/images/header_shadow.png new file mode 100644 index 00000000..a1b86452 Binary files /dev/null and b/public/site_assets/mpos/images/header_shadow.png differ diff --git a/public/site_assets/mpos/images/icn_alert_error.png b/public/site_assets/mpos/images/icn_alert_error.png new file mode 100644 index 00000000..00461c87 Binary files /dev/null and b/public/site_assets/mpos/images/icn_alert_error.png differ diff --git a/public/site_assets/mpos/images/icn_alert_info.png b/public/site_assets/mpos/images/icn_alert_info.png new file mode 100644 index 00000000..1be971d4 Binary files /dev/null and b/public/site_assets/mpos/images/icn_alert_info.png differ diff --git a/public/site_assets/mpos/images/icn_alert_success.png b/public/site_assets/mpos/images/icn_alert_success.png new file mode 100644 index 00000000..d72f09e9 Binary files /dev/null and b/public/site_assets/mpos/images/icn_alert_success.png differ diff --git a/public/site_assets/mpos/images/icn_alert_warning.png b/public/site_assets/mpos/images/icn_alert_warning.png new file mode 100644 index 00000000..53f545af Binary files /dev/null and b/public/site_assets/mpos/images/icn_alert_warning.png differ diff --git a/public/site_assets/mpos/images/module_footer_bg.png b/public/site_assets/mpos/images/module_footer_bg.png new file mode 100644 index 00000000..ace02f34 Binary files /dev/null and b/public/site_assets/mpos/images/module_footer_bg.png differ diff --git a/public/site_assets/mpos/images/post_message.png b/public/site_assets/mpos/images/post_message.png new file mode 100644 index 00000000..add54802 Binary files /dev/null and b/public/site_assets/mpos/images/post_message.png differ diff --git a/public/site_assets/mpos/images/questionmark.png b/public/site_assets/mpos/images/questionmark.png new file mode 100644 index 00000000..f3405a01 Binary files /dev/null and b/public/site_assets/mpos/images/questionmark.png differ diff --git a/public/site_assets/mpos/images/secondary_bar.png b/public/site_assets/mpos/images/secondary_bar.png new file mode 100644 index 00000000..42dbf1f3 Binary files /dev/null and b/public/site_assets/mpos/images/secondary_bar.png differ diff --git a/public/site_assets/mpos/images/secondary_bar_shadow.png b/public/site_assets/mpos/images/secondary_bar_shadow.png new file mode 100644 index 00000000..0f798dfd Binary files /dev/null and b/public/site_assets/mpos/images/secondary_bar_shadow.png differ diff --git a/public/site_assets/mpos/images/sidebar.png b/public/site_assets/mpos/images/sidebar.png new file mode 100644 index 00000000..7079be44 Binary files /dev/null and b/public/site_assets/mpos/images/sidebar.png differ diff --git a/public/site_assets/mpos/images/sidebar_divider.png b/public/site_assets/mpos/images/sidebar_divider.png new file mode 100644 index 00000000..e92be130 Binary files /dev/null and b/public/site_assets/mpos/images/sidebar_divider.png differ diff --git a/public/site_assets/mpos/images/sidebar_shadow.png b/public/site_assets/mpos/images/sidebar_shadow.png new file mode 100644 index 00000000..15226a8d Binary files /dev/null and b/public/site_assets/mpos/images/sidebar_shadow.png differ diff --git a/public/site_assets/mpos/images/table_sorter_header.png b/public/site_assets/mpos/images/table_sorter_header.png new file mode 100644 index 00000000..381778d3 Binary files /dev/null and b/public/site_assets/mpos/images/table_sorter_header.png differ diff --git a/public/site_assets/mpos/js/custom.js b/public/site_assets/mpos/js/custom.js new file mode 100644 index 00000000..8f7fa587 --- /dev/null +++ b/public/site_assets/mpos/js/custom.js @@ -0,0 +1,55 @@ +$(document).ready(function() { + $(".tablesorter").tablesorter(); + $(".tablesorterpager").tablesorter().tablesorterPager({positionFixed: false, container: $("#pager"), cssNext: ".icon-forward", cssPrev: ".icon-backward", cssFirst: ".icon-fast-backward", cssLast: ".icon-fast-forward"}); + $(".tab_content").hide(); //Hide all content + $("ul.tabs li:first").addClass("active").show(); //Activate first tab + $(".tab_content:first").show(); //Show first tab content + $("ul.tabs li").click(function() { + $("ul.tabs li").removeClass("active"); //Remove any "active" class + $(this).addClass("active"); //Add "active" class to selected tab + $(".tab_content").hide(); //Hide all tab content + var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to identify the active tab + content + $(activeTab).fadeIn(); //Fade in the active ID content + $(activeTab).find('.visualize').trigger('visualizeRefresh'); + return false; + }); + $('table.visualize').each(function () { + if ($(this).attr('rel')) { + var statsType = $(this).attr('rel'); + } else { + var statsType = 'area'; + } + + // hack to statically set width as something is broken with div width calculation - anni + var chart_width = $(document).width() - 500; + + if (statsType == 'line' || statsType == 'pie') { + $(this).hide().visualize({ + type: statsType, + // 'bar', 'area', 'pie', 'line' + width: chart_width, + height: '240px', + colors: ['#6fb9e8', '#ec8526', '#9dc453', '#ddd74c'], + lineDots: 'double', + interaction: true, + multiHover: 5, + tooltip: true, + tooltiphtml: function (data) { + var html = ''; + for (var i = 0; i < data.point.length; i++) { + html += '

' + data.point[i].value + ' ' + data.point[i].yLabels[0] + '

'; + } + return html; + } + }); + } else { + $(this).hide().visualize({ + // 'bar', 'area', 'pie', 'line' + width: chart_width, + type: statsType, + height: '240px', + colors: ['#6fb9e8', '#ec8526', '#9dc453', '#ddd74c'] + }); + } + }); +}); diff --git a/public/site_assets/mpos/js/excanvas.js b/public/site_assets/mpos/js/excanvas.js new file mode 100644 index 00000000..3cf5d274 --- /dev/null +++ b/public/site_assets/mpos/js/excanvas.js @@ -0,0 +1,36 @@ +// Copyright 2006 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +document.createElement("canvas").getContext||(function(){var s=Math,j=s.round,F=s.sin,G=s.cos,V=s.abs,W=s.sqrt,k=10,v=k/2;function X(){return this.context_||(this.context_=new H(this))}var L=Array.prototype.slice;function Y(b,a){var c=L.call(arguments,2);return function(){return b.apply(a,c.concat(L.call(arguments)))}}var M={init:function(b){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var a=b||document;a.createElement("canvas");a.attachEvent("onreadystatechange",Y(this.init_,this,a))}},init_:function(b){b.namespaces.g_vml_|| +b.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML");b.namespaces.g_o_||b.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML");if(!b.styleSheets.ex_canvas_){var a=b.createStyleSheet();a.owningElement.id="ex_canvas_";a.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}g_o_\\:*{behavior:url(#default#VML)}"}var c=b.getElementsByTagName("canvas"),d=0;for(;d','","");this.element_.insertAdjacentHTML("BeforeEnd",t.join(""))};i.stroke=function(b){var a=[],c=P(b?this.fillStyle:this.strokeStyle),d=c.color,f=c.alpha*this.globalAlpha;a.push("g.x)g.x=e.x;if(h.y==null||e.yg.y)g.y=e.y}}a.push(' ">');if(b)if(typeof this.fillStyle=="object"){var m=this.fillStyle,r=0,n={x:0,y:0},o=0,q=1;if(m.type_=="gradient"){var t=m.x1_/this.arcScaleX_,E=m.y1_/this.arcScaleY_,p=this.getCoords_(m.x0_/this.arcScaleX_,m.y0_/this.arcScaleY_), +z=this.getCoords_(t,E);r=Math.atan2(z.x-p.x,z.y-p.y)*180/Math.PI;if(r<0)r+=360;if(r<1.0E-6)r=0}else{var p=this.getCoords_(m.x0_,m.y0_),w=g.x-h.x,x=g.y-h.y;n={x:(p.x-h.x)/w,y:(p.y-h.y)/x};w/=this.arcScaleX_*k;x/=this.arcScaleY_*k;var R=s.max(w,x);o=2*m.r0_/R;q=2*m.r1_/R-o}var u=m.colors_;u.sort(function(ba,ca){return ba.offset-ca.offset});var J=u.length,da=u[0].color,ea=u[J-1].color,fa=u[0].alpha*this.globalAlpha,ga=u[J-1].alpha*this.globalAlpha,S=[],l=0;for(;l')}else a.push('');else{var K=this.lineScale_*this.lineWidth;if(K<1)f*=K;a.push("')}a.push("");this.element_.insertAdjacentHTML("beforeEnd",a.join(""))};i.fill=function(){this.stroke(true)};i.closePath=function(){this.currentPath_.push({type:"close"})};i.getCoords_=function(b,a){var c=this.m_;return{x:k*(b*c[0][0]+a*c[1][0]+c[2][0])-v,y:k*(b*c[0][1]+a*c[1][1]+c[2][1])-v}};i.save=function(){var b={};O(this,b);this.aStack_.push(b);this.mStack_.push(this.m_);this.m_=y(I(),this.m_)};i.restore=function(){O(this.aStack_.pop(), +this);this.m_=this.mStack_.pop()};function ha(b){var a=0;for(;a<3;a++){var c=0;for(;c<2;c++)if(!isFinite(b[a][c])||isNaN(b[a][c]))return false}return true}function A(b,a,c){if(!!ha(a)){b.m_=a;if(c)b.lineScale_=W(V(a[0][0]*a[1][1]-a[0][1]*a[1][0]))}}i.translate=function(b,a){A(this,y([[1,0,0],[0,1,0],[b,a,1]],this.m_),false)};i.rotate=function(b){var a=G(b),c=F(b);A(this,y([[a,c,0],[-c,a,0],[0,0,1]],this.m_),false)};i.scale=function(b,a){this.arcScaleX_*=b;this.arcScaleY_*=a;A(this,y([[b,0,0],[0,a, +0],[0,0,1]],this.m_),true)};i.transform=function(b,a,c,d,f,h){A(this,y([[b,a,0],[c,d,0],[f,h,1]],this.m_),true)};i.setTransform=function(b,a,c,d,f,h){A(this,[[b,a,0],[c,d,0],[f,h,1]],true)};i.clip=function(){};i.arcTo=function(){};i.createPattern=function(){return new U};function D(b){this.type_=b;this.r1_=this.y1_=this.x1_=this.r0_=this.y0_=this.x0_=0;this.colors_=[]}D.prototype.addColorStop=function(b,a){a=P(a);this.colors_.push({offset:b,color:a.color,alpha:a.alpha})};function U(){}G_vmlCanvasManager= +M;CanvasRenderingContext2D=H;CanvasGradient=D;CanvasPattern=U})(); + diff --git a/public/site_assets/mpos/js/hideshow.js b/public/site_assets/mpos/js/hideshow.js new file mode 100644 index 00000000..aee6950f --- /dev/null +++ b/public/site_assets/mpos/js/hideshow.js @@ -0,0 +1,39 @@ +// Andy Langton's show/hide/mini-accordion @ http://andylangton.co.uk/jquery-show-hide + +// this tells jquery to run the function below once the DOM is ready +$(document).ready(function() { + +// choose text for the show/hide link - can contain HTML (e.g. an image) +var showText='Show'; +var hideText='Hide'; + +// initialise the visibility check +var is_visible = false; + +// append show/hide links to the element directly preceding the element with a class of "toggle" +$('.toggle').prev().append(' '+hideText+''); + +// hide all of the elements with a class of 'toggle' +$('.toggle').show(); + +// capture clicks on the toggle links +$('a.toggleLink').click(function() { + +// switch visibility +is_visible = !is_visible; + +// change the link text depending on whether the element is shown or hidden +if ($(this).text()==showText) { +$(this).text(hideText); +$(this).parent().next('.toggle').slideDown('slow'); +} +else { +$(this).text(showText); +$(this).parent().next('.toggle').slideUp('slow'); +} + +// return false so any link destination is not followed +return false; + +}); +}); \ No newline at end of file diff --git a/public/site_assets/mpos/js/jquery-2.0.3.min.js b/public/site_assets/mpos/js/jquery-2.0.3.min.js new file mode 100644 index 00000000..2be209dd --- /dev/null +++ b/public/site_assets/mpos/js/jquery-2.0.3.min.js @@ -0,0 +1,6 @@ +/*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery-2.0.3.min.map +*/ +(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return f.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,p,f,h,d,g,m,y,v="sizzle"+-new Date,b=e.document,w=0,T=0,C=st(),k=st(),N=st(),E=!1,S=function(e,t){return e===t?(E=!0,0):0},j=typeof undefined,D=1<<31,A={}.hasOwnProperty,L=[],q=L.pop,H=L.push,O=L.push,F=L.slice,P=L.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",W="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",$=W.replace("w","w#"),B="\\["+M+"*("+W+")"+M+"*(?:([*^$|!~]?=)"+M+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+$+")|)|)"+M+"*\\]",I=":("+W+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+B.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=RegExp("^"+M+"*,"+M+"*"),X=RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=RegExp(M+"*[+~]"),Y=RegExp("="+M+"*([^\\]'\"]*)"+M+"*\\]","g"),V=RegExp(I),G=RegExp("^"+$+"$"),J={ID:RegExp("^#("+W+")"),CLASS:RegExp("^\\.("+W+")"),TAG:RegExp("^("+W.replace("w","w*")+")"),ATTR:RegExp("^"+B),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:RegExp("^(?:"+R+")$","i"),needsContext:RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Q=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/^(?:input|select|textarea|button)$/i,et=/^h\d$/i,tt=/'|\\/g,nt=RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),rt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{O.apply(L=F.call(b.childNodes),b.childNodes),L[b.childNodes.length].nodeType}catch(it){O={apply:L.length?function(e,t){H.apply(e,F.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function ot(e,t,r,i){var o,s,a,u,l,f,g,m,x,w;if((t?t.ownerDocument||t:b)!==p&&c(t),t=t||p,r=r||[],!e||"string"!=typeof e)return r;if(1!==(u=t.nodeType)&&9!==u)return[];if(h&&!i){if(o=K.exec(e))if(a=o[1]){if(9===u){if(s=t.getElementById(a),!s||!s.parentNode)return r;if(s.id===a)return r.push(s),r}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(a))&&y(t,s)&&s.id===a)return r.push(s),r}else{if(o[2])return O.apply(r,t.getElementsByTagName(e)),r;if((a=o[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&(!d||!d.test(e))){if(m=g=v,x=t,w=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(g=t.getAttribute("id"))?m=g.replace(tt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",l=f.length;while(l--)f[l]=m+mt(f[l]);x=U.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return O.apply(r,x.querySelectorAll(w)),r}catch(T){}finally{g||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,r,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>i.cacheLength&&delete t[e.shift()],t[n]=r}return t}function at(e){return e[v]=!0,e}function ut(e){var t=p.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function lt(e,t){var n=e.split("|"),r=e.length;while(r--)i.attrHandle[n[r]]=t}function ct(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return at(function(t){return t=+t,at(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}s=ot.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},n=ot.support={},c=ot.setDocument=function(e){var t=e?e.ownerDocument||e:b,r=t.defaultView;return t!==p&&9===t.nodeType&&t.documentElement?(p=t,f=t.documentElement,h=!s(t),r&&r.attachEvent&&r!==r.top&&r.attachEvent("onbeforeunload",function(){c()}),n.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ut(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),n.getById=ut(function(e){return f.appendChild(e).id=v,!t.getElementsByName||!t.getElementsByName(v).length}),n.getById?(i.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){return e.getAttribute("id")===t}}):(delete i.find.ID,i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=n.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&h?t.getElementsByClassName(e):undefined},g=[],d=[],(n.qsa=Q.test(t.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ut(function(e){var n=t.createElement("input");n.setAttribute("type","hidden"),e.appendChild(n).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")})),(n.matchesSelector=Q.test(m=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&ut(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",I)}),d=d.length&&RegExp(d.join("|")),g=g.length&&RegExp(g.join("|")),y=Q.test(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,r){if(e===r)return E=!0,0;var i=r.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(r);return i?1&i||!n.sortDetached&&r.compareDocumentPosition(e)===i?e===t||y(b,e)?-1:r===t||y(b,r)?1:l?P.call(l,e)-P.call(l,r):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],u=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:l?P.call(l,e)-P.call(l,n):0;if(o===s)return ct(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)u.unshift(r);while(a[i]===u[i])i++;return i?ct(a[i],u[i]):a[i]===b?-1:u[i]===b?1:0},t):p},ot.matches=function(e,t){return ot(e,null,null,t)},ot.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Y,"='$1']"),!(!n.matchesSelector||!h||g&&g.test(t)||d&&d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return ot(t,p,null,[e]).length>0},ot.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},ot.attr=function(e,t){(e.ownerDocument||e)!==p&&c(e);var r=i.attrHandle[t.toLowerCase()],o=r&&A.call(i.attrHandle,t.toLowerCase())?r(e,t,!h):undefined;return o===undefined?n.attributes||!h?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null:o},ot.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ot.uniqueSort=function(e){var t,r=[],i=0,o=0;if(E=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),E){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return e},o=ot.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=ot.selectors={cacheLength:50,createPseudo:at,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(nt,rt),e[3]=(e[4]||e[5]||"").replace(nt,rt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ot.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ot.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return J.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&V.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(nt,rt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ot.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,y=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){p=t;while(p=p[g])if(a?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[v]||(m[v]={}),l=c[e]||[],h=l[0]===w&&l[1],f=l[0]===w&&l[2],p=h&&m.childNodes[h];while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[w,h,f];break}}else if(x&&(l=(t[v]||(t[v]={}))[e])&&l[0]===w)f=l[1];else while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if((a?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(x&&((p[v]||(p[v]={}))[e]=[w,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ot.error("unsupported pseudo: "+e);return r[v]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?at(function(e,n){var i,o=r(e,t),s=o.length;while(s--)i=P.call(e,o[s]),e[i]=!(n[i]=o[s])}):function(e){return r(e,0,n)}):r}},pseudos:{not:at(function(e){var t=[],n=[],r=a(e.replace(z,"$1"));return r[v]?at(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:at(function(e){return function(t){return ot(e,t).length>0}}),contains:at(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:at(function(e){return G.test(e||"")||ot.error("unsupported lang: "+e),e=e.replace(nt,rt).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return et.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},i.pseudos.nth=i.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=ft(t);function dt(){}dt.prototype=i.filters=i.pseudos,i.setFilters=new dt;function gt(e,t){var n,r,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=i.preFilter;while(a){(!n||(r=_.exec(a)))&&(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=X.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(z," ")}),a=a.slice(n.length));for(s in i.filter)!(r=J[s].exec(a))||l[s]&&!(r=l[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ot.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,n){var i=t.dir,o=n&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var u,l,c,p=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[v]||(t[v]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,a)||r,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[v]&&(r=bt(r)),i&&!i[v]&&(i=bt(i,o)),at(function(o,s,a,u){var l,c,p,f=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,f,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(p=l[c])&&(y[h[c]]=!(m[h[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?P.call(o,p):f[c])>-1&&(o[l]=!(s[l]=p))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):O.apply(s,y)})}function wt(e){var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,c=yt(function(e){return e===t},a,!0),p=yt(function(e){return P.call(t,e)>-1},a,!0),f=[function(e,n,r){return!s&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>l;l++)if(n=i.relative[e[l].type])f=[yt(vt(f),n)];else{if(n=i.filter[e[l].type].apply(null,e[l].matches),n[v]){for(r=++l;o>r;r++)if(i.relative[e[r].type])break;return bt(l>1&&vt(f),l>1&&mt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&wt(e.slice(l,r)),o>r&&wt(e=e.slice(r)),o>r&&mt(e))}f.push(n)}return vt(f)}function Tt(e,t){var n=0,o=t.length>0,s=e.length>0,a=function(a,l,c,f,h){var d,g,m,y=[],v=0,x="0",b=a&&[],T=null!=h,C=u,k=a||s&&i.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(u=l!==p&&l,r=n);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,c)){f.push(d);break}T&&(w=N,r=++n)}o&&((d=!m&&d)&&v--,a&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,c);if(a){if(v>0)while(x--)b[x]||y[x]||(y[x]=q.call(f));y=xt(y)}O.apply(f,y),T&&!a&&y.length>0&&v+t.length>1&&ot.uniqueSort(f)}return T&&(w=N,u=C),b};return o?at(a):a}a=ot.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[v]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ot(e,t[r],n);return n}function kt(e,t,r,o){var s,u,l,c,p,f=gt(e);if(!o&&1===f.length){if(u=f[0]=f[0].slice(0),u.length>2&&"ID"===(l=u[0]).type&&n.getById&&9===t.nodeType&&h&&i.relative[u[1].type]){if(t=(i.find.ID(l.matches[0].replace(nt,rt),t)||[])[0],!t)return r;e=e.slice(u.shift().value.length)}s=J.needsContext.test(e)?0:u.length;while(s--){if(l=u[s],i.relative[c=l.type])break;if((p=i.find[c])&&(o=p(l.matches[0].replace(nt,rt),U.test(u[0].type)&&t.parentNode||t))){if(u.splice(s,1),e=o.length&&mt(u),!e)return O.apply(r,o),r;break}}}return a(e,f)(o,t,!h,r,U.test(e)),r}n.sortStable=v.split("").sort(S).join("")===v,n.detectDuplicates=E,c(),n.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(p.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||lt("type|href|height|width",function(e,t,n){return n?undefined:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||lt("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?undefined:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||lt(R,function(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}),x.find=ot,x.expr=ot.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ot.uniqueSort,x.text=ot.getText,x.isXMLDoc=ot.isXML,x.contains=ot.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(p){for(t=e.memory&&p,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(p[0],p[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!a||n&&!u||(t=t||[],t=[e,t.slice?t.slice():t],r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))x.extend(this.cache[i],t);else for(r in t)o[r]=t[r];return o},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){var r;return t===undefined||t&&"string"==typeof t&&n===undefined?(r=this.get(e,t),r!==undefined?r:this.get(e,x.camelCase(t))):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i,o=this.key(e),s=this.cache[o];if(t===undefined)this.cache[o]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):(i=x.camelCase(t),t in s?r=[t,i]:(r=i,r=r in s?[r]:r.match(w)||[])),n=r.length;while(n--)delete s[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.slice(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t) +};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,p,f,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(f=x.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=x.event.special[d]||{},p=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,f.setup&&f.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),f.add&&(f.add.call(e,p),p.handler.guid||(p.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,p):h.push(p),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,p,f,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){p=x.event.special[h]||{},h=(r?p.delegateType:p.bindType)||h,f=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;while(o--)c=f[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,p.remove&&p.remove.call(e,c));s&&!f.length&&(p.teardown&&p.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,p,f,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),f=x.event.special[d]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!x.isWindow(r)){for(l=f.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:f.bindType||d,p=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),p&&p.apply(a,n),p=c&&a[c],p&&x.acceptData(a)&&p.apply&&p.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,s=e,a=this.fixHooks[i];a||(this.fixHooks[i]=a=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new x.Event(s),t=r.length;while(t--)n=r[t],e[n]=s[n];return e.target||(e.target=o),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,s):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=/^(?:parents|prev(?:Until|All))/,Q=x.expr.match.needsContext,K={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(et(this,e||[],!0))},filter:function(e){return this.pushStack(et(this,e||[],!1))},is:function(e){return!!et(this,"string"==typeof e&&Q.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],s=Q.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function Z(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return Z(e,"nextSibling")},prev:function(e){return Z(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return e.contentDocument||x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(K[e]||x.unique(i),J.test(e)&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function et(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,nt=/<([\w:]+)/,rt=/<|&#?\w+;/,it=/<(?:script|style|link)/i,ot=/^(?:checkbox|radio)$/i,st=/checked\s*(?:[^=]|=\s*.checked.)/i,at=/^$|\/(?:java|ecma)script/i,ut=/^true\/(.*)/,lt=/^\s*\s*$/g,ct={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ct.optgroup=ct.option,ct.tbody=ct.tfoot=ct.colgroup=ct.caption=ct.thead,ct.th=ct.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(mt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&dt(mt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(mt(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!it.test(e)&&!ct[(nt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(tt,"<$1>");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(mt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=f.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,p=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||"string"!=typeof d||x.support.checkClone)&&st.test(d))return this.each(function(r){var i=p.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(mt(r,"script"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,mt(a,"script"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,ht),l=0;s>l;l++)a=o[l],at.test(a.type||"")&&!q.access(a,"globalEval")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(lt,"")))}return this}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=mt(a),o=mt(e),r=0,i=o.length;i>r;r++)yt(o[r],s[r]);if(t)if(n)for(o=o||mt(e),s=s||mt(a),r=0,i=o.length;i>r;r++)gt(o[r],s[r]);else gt(e,a);return s=mt(a,"script"),s.length>0&&dt(s,!u&&mt(e,"script")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,p=e.length,f=t.createDocumentFragment(),h=[];for(;p>c;c++)if(i=e[c],i||0===i)if("object"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(rt.test(i)){o=o||f.appendChild(t.createElement("div")),s=(nt.exec(i)||["",""])[1].toLowerCase(),a=ct[s]||ct._default,o.innerHTML=a[1]+i.replace(tt,"<$1>")+a[2],l=a[0];while(l--)o=o.lastChild;x.merge(h,o.childNodes),o=f.firstChild,o.textContent=""}else h.push(t.createTextNode(i));f.textContent="",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=mt(f.appendChild(i),"script"),u&&dt(o),n)){l=0;while(i=o[l++])at.test(i.type||"")&&n.push(i)}return f},cleanData:function(e){var t,n,r,i,o,s,a=x.event.special,u=0;for(;(n=e[u])!==undefined;u++){if(F.accepts(n)&&(o=n[q.expando],o&&(t=q.cache[o]))){if(r=Object.keys(t.events||{}),r.length)for(s=0;(i=r[s])!==undefined;s++)a[i]?x.event.remove(n,i):x.removeEvent(n,i,t.handle);q.cache[o]&&delete q.cache[o]}delete L.cache[n[L.expando]]}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}});function pt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ft(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ht(e){var t=ut.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function dt(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],"globalEval",!t||q.get(t[r],"globalEval"))}function gt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=q.set(t,o),l=o.events)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function mt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function yt(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ot.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var vt,xt,bt=/^(none|table(?!-c[ea]).+)/,wt=/^margin/,Tt=RegExp("^("+b+")(.*)$","i"),Ct=RegExp("^("+b+")(?!px)[a-z%]+$","i"),kt=RegExp("^([+-])=("+b+")","i"),Nt={BODY:"block"},Et={position:"absolute",visibility:"hidden",display:"block"},St={letterSpacing:0,fontWeight:400},jt=["Top","Right","Bottom","Left"],Dt=["Webkit","O","Moz","ms"];function At(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Dt.length;while(i--)if(t=Dt[i]+n,t in e)return t;return r}function Lt(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function qt(t){return e.getComputedStyle(t,null)}function Ht(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&Lt(r)&&(o[s]=q.access(r,"olddisplay",Rt(r.nodeName)))):o[s]||(i=Lt(r),(n&&"none"!==n||!i)&&q.set(r,"olddisplay",i?n:x.css(r,"display"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=qt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return Ht(this,!0)},hide:function(){return Ht(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Lt(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=vt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=At(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,"string"===o&&(i=kt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o="number"),null==n||"number"===o&&isNaN(n)||("number"!==o||x.cssNumber[a]||(n+="px"),x.support.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=At(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=vt(e,t,r)),"normal"===i&&t in St&&(i=St[t]),""===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),vt=function(e,t,n){var r,i,o,s=n||qt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(""!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Ct.test(a)&&wt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ot(e,t,n){var r=Tt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function Ft(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;for(;4>o;o+=2)"margin"===n&&(s+=x.css(e,n+jt[o],!0,i)),r?("content"===n&&(s-=x.css(e,"padding"+jt[o],!0,i)),"margin"!==n&&(s-=x.css(e,"border"+jt[o]+"Width",!0,i))):(s+=x.css(e,"padding"+jt[o],!0,i),"padding"!==n&&(s+=x.css(e,"border"+jt[o]+"Width",!0,i)));return s}function Pt(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=qt(e),s=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=vt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Ct.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ft(e,t,n||(s?"border":"content"),r,o)+"px"}function Rt(e){var t=o,n=Nt[e];return n||(n=Mt(e,t),"none"!==n&&n||(xt=(xt||x("