unbxd_recommendation - Version 1.0.7

Version Notes

supports all the unbxd recommendor widgets

Download this release

Release Info

Developer ananthesh
Extension unbxd_recommendation
Version 1.0.7
Comparing to
See all releases


Code changes from version 1.0.6 to 1.0.7

Files changed (250) hide show
  1. app/code/local/Unbxd/Datafeeder/Block/Edit.php +0 -12
  2. app/code/local/Unbxd/Datafeeder/Block/Index.php +0 -76
  3. app/code/local/Unbxd/Datafeeder/Helper/.DS_Store +0 -0
  4. app/code/local/Unbxd/Datafeeder/Helper/Analyticshelper.php +0 -105
  5. app/code/local/Unbxd/Datafeeder/Helper/Data.php +0 -12
  6. app/code/local/Unbxd/Datafeeder/Helper/UnbxdIndexingHelper.php +0 -682
  7. app/code/local/Unbxd/Datafeeder/Helper/UnbxdTaxonomyHelper.php +0 -318
  8. app/code/local/Unbxd/Datafeeder/Model/Attribute.php +0 -22
  9. app/code/local/Unbxd/Datafeeder/Model/Conf.php +0 -12
  10. app/code/local/Unbxd/Datafeeder/Model/Facet.php +0 -14
  11. app/code/local/Unbxd/Datafeeder/Model/Feed/Feedcreator.php +0 -321
  12. app/code/local/Unbxd/Datafeeder/Model/Feed/Feedmanager.php +0 -159
  13. app/code/local/Unbxd/Datafeeder/Model/Feed/Jsonbuilder/Jsonbuilder.php +0 -9
  14. app/code/local/Unbxd/Datafeeder/Model/Feed/Jsonbuilder/Schemabuilder.php +0 -51
  15. app/code/local/Unbxd/Datafeeder/Model/Field.php +0 -11
  16. app/code/local/Unbxd/Datafeeder/Model/Mysql4/Conf.php +0 -47
  17. app/code/local/Unbxd/Datafeeder/Model/Mysql4/Conf/Collection.php +0 -16
  18. app/code/local/Unbxd/Datafeeder/Model/Mysql4/Field.php +0 -192
  19. app/code/local/Unbxd/Datafeeder/Model/Mysql4/Field/Collection.php +0 -16
  20. app/code/local/Unbxd/Datafeeder/Model/Mysql4/Resource/Attribute.php +0 -22
  21. app/code/local/Unbxd/Datafeeder/Model/Mysql4/Upgrade.php +0 -37
  22. app/code/local/Unbxd/Datafeeder/controllers/ConfigController.php +0 -80
  23. app/code/local/Unbxd/Datafeeder/controllers/FieldController.php +0 -52
  24. app/code/local/Unbxd/Datafeeder/controllers/IndexController.php +0 -61
  25. app/code/local/Unbxd/Datafeeder/etc/adminhtml.xml +0 -16
  26. app/code/local/Unbxd/Datafeeder/etc/config.xml +0 -119
  27. app/code/local/Unbxd/Datafeeder/scripts/Cron.php +0 -25
  28. app/code/local/Unbxd/Datafeeder/scripts/abstract.php +0 -218
  29. app/code/local/Unbxd/Datafeeder/sql/datafeeder_setup/mysql4-install-1.0.5.php +0 -39
  30. app/code/local/Unbxd/Datafeeder/sql/datafeeder_setup/mysql4-upgrade-0.1.0-1.0.5.php +0 -39
  31. app/code/local/Unbxd/{Datafeeder → Recommendation}/.DS_Store +0 -0
  32. app/code/local/Unbxd/Recommendation/Block/Admin.php +13 -0
  33. app/code/local/Unbxd/Recommendation/Block/Tracker.php +0 -0
  34. app/code/local/Unbxd/Recommendation/Helper/Confighelper.php +333 -0
  35. app/code/local/Unbxd/Recommendation/Helper/Data.php +23 -0
  36. app/code/local/Unbxd/Recommendation/Helper/Feedhelper.php +224 -0
  37. app/code/local/Unbxd/Recommendation/Model/Api/Request.php +211 -0
  38. app/code/local/Unbxd/Recommendation/Model/Api/Response.php +163 -0
  39. app/code/local/Unbxd/Recommendation/Model/Api/Task.php +82 -0
  40. app/code/local/Unbxd/Recommendation/Model/Api/Task/Analyticsimpression.php +49 -0
  41. app/code/local/Unbxd/Recommendation/Model/Api/Task/Feeddetails.php +70 -0
  42. app/code/local/Unbxd/Recommendation/Model/Api/Task/Trackcart.php +45 -0
  43. app/code/local/Unbxd/Recommendation/Model/Api/Task/Trackorder.php +45 -0
  44. app/code/local/Unbxd/Recommendation/Model/Api/Task/Triggerfeedupload.php +40 -0
  45. app/code/local/Unbxd/Recommendation/Model/Api/Task/Updatefeaturefields.php +78 -0
  46. app/code/local/Unbxd/Recommendation/Model/Api/Task/Validatekeys.php +72 -0
  47. app/code/local/Unbxd/Recommendation/Model/Api/Task/Widget.php +231 -0
  48. app/code/local/Unbxd/Recommendation/Model/Config.php +28 -0
  49. app/code/local/Unbxd/Recommendation/Model/Feed/Feedcreator.php +290 -0
  50. app/code/local/Unbxd/Recommendation/Model/Feed/Feedmanager.php +158 -0
  51. app/code/local/Unbxd/{Datafeeder → Recommendation}/Model/Feed/Filemanager.php +30 -28
  52. app/code/local/Unbxd/Recommendation/Model/Feed/Jsonbuilder/Jsonbuilder.php +9 -0
  53. app/code/local/Unbxd/{Datafeeder → Recommendation}/Model/Feed/Jsonbuilder/Productbuilder.php +61 -52
  54. app/code/local/Unbxd/Recommendation/Model/Feed/Jsonbuilder/Schemabuilder.php +29 -0
  55. app/code/local/Unbxd/{Datafeeder → Recommendation}/Model/Feed/Jsonbuilder/Taxonomybuilder.php +2 -2
  56. app/code/local/Unbxd/Recommendation/Model/Field.php +135 -0
  57. app/code/local/Unbxd/Recommendation/Model/Observer.php +108 -0
  58. app/code/local/Unbxd/{Datafeeder/Model/Mysql4 → Recommendation/Model/Resource}/Attribute.php +1 -1
  59. app/code/local/Unbxd/Recommendation/Model/Resource/Config.php +90 -0
  60. app/code/local/Unbxd/Recommendation/Model/Resource/Config/Collection.php +20 -0
  61. app/code/local/Unbxd/Recommendation/Model/Resource/Field.php +108 -0
  62. app/code/local/Unbxd/Recommendation/Model/Resource/Field/Collection.php +65 -0
  63. app/code/local/Unbxd/Recommendation/Model/Resource/Product/Collection.php +16 -0
  64. app/code/local/Unbxd/Recommendation/controllers/AdminController.php +20 -0
  65. app/code/local/Unbxd/Recommendation/controllers/ConfigController.php +321 -0
  66. app/code/local/Unbxd/Recommendation/controllers/WidgetController.php +20 -0
  67. app/code/local/Unbxd/Recommendation/etc/adminhtml.xml +9 -0
  68. app/code/local/Unbxd/Recommendation/etc/config.xml +109 -0
  69. app/code/local/Unbxd/Recommendation/sql/unbxd_recommendation_setup/mysql4-install-1.0.0.php +42 -0
  70. app/design/adminhtml/base/default/template/datafeeder/conf.phtml +0 -439
  71. app/design/adminhtml/default/default/layout/unbxd/recommendation.xml +15 -0
  72. app/design/adminhtml/default/default/template/unbxd/recommendation.phtml +154 -0
  73. app/design/frontend/base/default/layout/unbxd/recommendation.xml +33 -0
  74. app/design/frontend/base/default/template/unbxd/tracker.phtml +32 -0
  75. app/design/frontend/base/default/template/unbxd/tracking/cart.phtml +1 -0
  76. app/design/frontend/base/default/template/unbxd/tracking/category.phtml +14 -0
  77. app/design/frontend/base/default/template/unbxd/tracking/order.phtml +1 -0
  78. app/design/frontend/base/default/template/unbxd/tracking/product.phtml +21 -0
  79. app/etc/modules/Unbxd_Datafeeder.xml +0 -8
  80. app/etc/modules/Unbxd_Recommendation.xml +8 -0
  81. js/unbxd/app.js +4 -0
  82. js/unbxd/embed.js +176 -0
  83. js/unbxd/jquery.js +4 -0
  84. js/unbxd/unbxdAnalytics.js +843 -0
  85. package.xml +4 -4
  86. shell/UnbxdFeed.php +0 -25
  87. skin/adminhtml/default/default/unbxd/css/app.css +7773 -0
  88. skin/adminhtml/default/default/unbxd/css/bootstrap-them.css +2 -0
  89. skin/adminhtml/default/default/unbxd/css/bootstrap.css +38 -0
  90. skin/adminhtml/default/default/unbxd/css/chosen.css +429 -0
  91. skin/adminhtml/default/default/unbxd/css/unbxd-magento.css +632 -0
  92. skin/adminhtml/default/default/unbxd/img/Custom-platform.png +0 -0
  93. skin/adminhtml/default/default/unbxd/img/DONE.png +0 -0
  94. skin/adminhtml/default/default/unbxd/img/HEXAGON-Only.png +0 -0
  95. skin/adminhtml/default/default/unbxd/img/Magento-small.png +0 -0
  96. skin/adminhtml/default/default/unbxd/img/Magento.png +0 -0
  97. skin/adminhtml/default/default/unbxd/img/X-popup-hover.png +0 -0
  98. skin/adminhtml/default/default/unbxd/img/X-popup.png +0 -0
  99. skin/adminhtml/default/default/unbxd/img/X-pricing.png +0 -0
  100. skin/adminhtml/default/default/unbxd/img/add-actv.png +0 -0
  101. skin/adminhtml/default/default/unbxd/img/add-icon.png +0 -0
  102. skin/adminhtml/default/default/unbxd/img/add-inactv.png +0 -0
  103. skin/adminhtml/default/default/unbxd/img/add-raw-hover.png +0 -0
  104. skin/adminhtml/default/default/unbxd/img/add-raw.png +0 -0
  105. skin/adminhtml/default/default/unbxd/img/add.png +0 -0
  106. skin/adminhtml/default/default/unbxd/img/arrow-2.png +0 -0
  107. skin/adminhtml/default/default/unbxd/img/arrow-calendar-down.png +0 -0
  108. skin/adminhtml/default/default/unbxd/img/arrow-calendar-down1.png +0 -0
  109. skin/adminhtml/default/default/unbxd/img/arrow-down-disabled.jpg +0 -0
  110. skin/adminhtml/default/default/unbxd/img/arrow-down-enabled.jpg +0 -0
  111. skin/adminhtml/default/default/unbxd/img/arrow-down-white.jpg +0 -0
  112. skin/adminhtml/default/default/unbxd/img/arrow-down-white1.jpg +0 -0
  113. skin/adminhtml/default/default/unbxd/img/arrow-down-white2.jpg +0 -0
  114. skin/adminhtml/default/default/unbxd/img/arrow-down.png +0 -0
  115. skin/adminhtml/default/default/unbxd/img/arrow-gray.png +0 -0
  116. skin/adminhtml/default/default/unbxd/img/arrow-left-white.jpg +0 -0
  117. skin/adminhtml/default/default/unbxd/img/arrow-left.jpg +0 -0
  118. skin/adminhtml/default/default/unbxd/img/arrow-mail-developer).png +0 -0
  119. skin/adminhtml/default/default/unbxd/img/arrow-right-blue.png +0 -0
  120. skin/adminhtml/default/default/unbxd/img/arrow-right-gray.jpg +0 -0
  121. skin/adminhtml/default/default/unbxd/img/arrow-right-white.jpg +0 -0
  122. skin/adminhtml/default/default/unbxd/img/arrow-right.jpg +0 -0
  123. skin/adminhtml/default/default/unbxd/img/arrow-up-black.png +0 -0
  124. skin/adminhtml/default/default/unbxd/img/arrow-up-disabled.jpg +0 -0
  125. skin/adminhtml/default/default/unbxd/img/arrow-up-enabled.jpg +0 -0
  126. skin/adminhtml/default/default/unbxd/img/arrow-up-red.png +0 -0
  127. skin/adminhtml/default/default/unbxd/img/arrow-up-white.jpg +0 -0
  128. skin/adminhtml/default/default/unbxd/img/arrow-up-white1.jpg +0 -0
  129. skin/adminhtml/default/default/unbxd/img/arrow-up.png +0 -0
  130. skin/adminhtml/default/default/unbxd/img/arrow-white.png +0 -0
  131. skin/adminhtml/default/default/unbxd/img/arrow.png +0 -0
  132. skin/adminhtml/default/default/unbxd/img/authenticated.png +0 -0
  133. skin/adminhtml/default/default/unbxd/img/back.png +0 -0
  134. skin/adminhtml/default/default/unbxd/img/bg.jpg +0 -0
  135. skin/adminhtml/default/default/unbxd/img/big-arrow-gray.jpg +0 -0
  136. skin/adminhtml/default/default/unbxd/img/bigcommerce.png +0 -0
  137. skin/adminhtml/default/default/unbxd/img/black-right-small.jpg +0 -0
  138. skin/adminhtml/default/default/unbxd/img/black-right-thick.jpg +0 -0
  139. skin/adminhtml/default/default/unbxd/img/btn-arrow-top.png +0 -0
  140. skin/adminhtml/default/default/unbxd/img/btn-arrow.png +0 -0
  141. skin/adminhtml/default/default/unbxd/img/button-arrow-blue.png +0 -0
  142. skin/adminhtml/default/default/unbxd/img/button-arrow-grey.png +0 -0
  143. skin/adminhtml/default/default/unbxd/img/button-arrow-red.png +0 -0
  144. skin/adminhtml/default/default/unbxd/img/cancel.png +0 -0
  145. skin/adminhtml/default/default/unbxd/img/card-image.jpg +0 -0
  146. skin/adminhtml/default/default/unbxd/img/card-image1.jpg +0 -0
  147. skin/adminhtml/default/default/unbxd/img/card-image2.jpg +0 -0
  148. skin/adminhtml/default/default/unbxd/img/card-image3.jpg +0 -0
  149. skin/adminhtml/default/default/unbxd/img/checkmark.png +0 -0
  150. skin/adminhtml/default/default/unbxd/img/chosen-sprite.png +0 -0
  151. skin/adminhtml/default/default/unbxd/img/close-analytics.png +0 -0
  152. skin/adminhtml/default/default/unbxd/img/close.png +0 -0
  153. skin/adminhtml/default/default/unbxd/img/color-pic.png +0 -0
  154. skin/adminhtml/default/default/unbxd/img/congrats.png +0 -0
  155. skin/adminhtml/default/default/unbxd/img/copy-black.png +0 -0
  156. skin/adminhtml/default/default/unbxd/img/copy-white.png +0 -0
  157. skin/adminhtml/default/default/unbxd/img/cros.png +0 -0
  158. skin/adminhtml/default/default/unbxd/img/cross-2.png +0 -0
  159. skin/adminhtml/default/default/unbxd/img/cvv-number.jpg +0 -0
  160. skin/adminhtml/default/default/unbxd/img/delete-raw-hover.png +0 -0
  161. skin/adminhtml/default/default/unbxd/img/delete-raw.png +0 -0
  162. skin/adminhtml/default/default/unbxd/img/delete-red.png +0 -0
  163. skin/adminhtml/default/default/unbxd/img/delete.png +0 -0
  164. skin/adminhtml/default/default/unbxd/img/detect.png +0 -0
  165. skin/adminhtml/default/default/unbxd/img/down-arrow.png +0 -0
  166. skin/adminhtml/default/default/unbxd/img/down-black.png +0 -0
  167. skin/adminhtml/default/default/unbxd/img/down-gray.png +0 -0
  168. skin/adminhtml/default/default/unbxd/img/dropdown-arrow.png +0 -0
  169. skin/adminhtml/default/default/unbxd/img/edit-magento.png +0 -0
  170. skin/adminhtml/default/default/unbxd/img/edit.png +0 -0
  171. skin/adminhtml/default/default/unbxd/img/eye-hover.png +0 -0
  172. skin/adminhtml/default/default/unbxd/img/eye.png +0 -0
  173. skin/adminhtml/default/default/unbxd/img/favicon.png +0 -0
  174. skin/adminhtml/default/default/unbxd/img/fill.png +0 -0
  175. skin/adminhtml/default/default/unbxd/img/group-arrow.png +0 -0
  176. skin/adminhtml/default/default/unbxd/img/help.png +0 -0
  177. skin/adminhtml/default/default/unbxd/img/icon-analytics.png +0 -0
  178. skin/adminhtml/default/default/unbxd/img/icon-info.png +0 -0
  179. skin/adminhtml/default/default/unbxd/img/icon-widget.png +0 -0
  180. skin/adminhtml/default/default/unbxd/img/install.png +0 -0
  181. skin/adminhtml/default/default/unbxd/img/integration-gray.png +0 -0
  182. skin/adminhtml/default/default/unbxd/img/introduction-gray.png +0 -0
  183. skin/adminhtml/default/default/unbxd/img/left-black.png +0 -0
  184. skin/adminhtml/default/default/unbxd/img/left-gray.png +0 -0
  185. skin/adminhtml/default/default/unbxd/img/level-arrow-active.png +0 -0
  186. skin/adminhtml/default/default/unbxd/img/level-arrow.png +0 -0
  187. skin/adminhtml/default/default/unbxd/img/link-arrow.png +0 -0
  188. skin/adminhtml/default/default/unbxd/img/loader-16x16.gif +0 -0
  189. skin/adminhtml/default/default/unbxd/img/loader-24x24.gif +0 -0
  190. skin/adminhtml/default/default/unbxd/img/loader-32x32.gif +0 -0
  191. skin/adminhtml/default/default/unbxd/img/loader.gif +0 -0
  192. skin/adminhtml/default/default/unbxd/img/loader_black.gif +0 -0
  193. skin/adminhtml/default/default/unbxd/img/lock-image.jpg +0 -0
  194. skin/adminhtml/default/default/unbxd/img/logo-unbxd.png +0 -0
  195. skin/adminhtml/default/default/unbxd/img/logo.png +0 -0
  196. skin/adminhtml/default/default/unbxd/img/mail-new.png +0 -0
  197. skin/adminhtml/default/default/unbxd/img/mail.png +0 -0
  198. skin/adminhtml/default/default/unbxd/img/minus.jpg +0 -0
  199. skin/adminhtml/default/default/unbxd/img/nav-highlight-arrow.png +0 -0
  200. skin/adminhtml/default/default/unbxd/img/not-detected.png +0 -0
  201. skin/adminhtml/default/default/unbxd/img/oops.png +0 -0
  202. skin/adminhtml/default/default/unbxd/img/or.png +0 -0
  203. skin/adminhtml/default/default/unbxd/img/other-gray.png +0 -0
  204. skin/adminhtml/default/default/unbxd/img/overview-gray.png +0 -0
  205. skin/adminhtml/default/default/unbxd/img/plus.jpg +0 -0
  206. skin/adminhtml/default/default/unbxd/img/question-mark2.jpg +0 -0
  207. skin/adminhtml/default/default/unbxd/img/red-cross.png +0 -0
  208. skin/adminhtml/default/default/unbxd/img/red-loading.gif +0 -0
  209. skin/adminhtml/default/default/unbxd/img/remove.png +0 -0
  210. skin/adminhtml/default/default/unbxd/img/right-black.png +0 -0
  211. skin/adminhtml/default/default/unbxd/img/right-gray.png +0 -0
  212. skin/adminhtml/default/default/unbxd/img/save.png +0 -0
  213. skin/adminhtml/default/default/unbxd/img/search.png +0 -0
  214. skin/adminhtml/default/default/unbxd/img/settings.png +0 -0
  215. skin/adminhtml/default/default/unbxd/img/shopify.png +0 -0
  216. skin/adminhtml/default/default/unbxd/img/site-dropdownarrow-down.png +0 -0
  217. skin/adminhtml/default/default/unbxd/img/site-dropdownarrow-up.png +0 -0
  218. skin/adminhtml/default/default/unbxd/img/slider-bg.png +0 -0
  219. skin/adminhtml/default/default/unbxd/img/slider-button.png +0 -0
  220. skin/adminhtml/default/default/unbxd/img/sort-arrow-blue-down.png +0 -0
  221. skin/adminhtml/default/default/unbxd/img/sort-arrow-blue-up.png +0 -0
  222. skin/adminhtml/default/default/unbxd/img/sort-arrow-grey-down.png +0 -0
  223. skin/adminhtml/default/default/unbxd/img/sort-arrow-grey-up.png +0 -0
  224. skin/adminhtml/default/default/unbxd/img/spree.png +0 -0
  225. skin/adminhtml/default/default/unbxd/img/start-gray.png +0 -0
  226. skin/adminhtml/default/default/unbxd/img/step-arrow.png +0 -0
  227. skin/adminhtml/default/default/unbxd/img/success.png +0 -0
  228. skin/adminhtml/default/default/unbxd/img/tick-analytics.png +0 -0
  229. skin/adminhtml/default/default/unbxd/img/tick-green.png +0 -0
  230. skin/adminhtml/default/default/unbxd/img/tick-pricing.png +0 -0
  231. skin/adminhtml/default/default/unbxd/img/tick.png +0 -0
  232. skin/adminhtml/default/default/unbxd/img/tooltip-left-arrow.jpg +0 -0
  233. skin/adminhtml/default/default/unbxd/img/tooltip.png +0 -0
  234. skin/adminhtml/default/default/unbxd/img/up-arrow.png +0 -0
  235. skin/adminhtml/default/default/unbxd/img/up-black.png +0 -0
  236. skin/adminhtml/default/default/unbxd/img/up-gray.png +0 -0
  237. skin/adminhtml/default/default/unbxd/img/user.png +0 -0
  238. skin/adminhtml/default/default/unbxd/img/warning.png +0 -0
  239. skin/adminhtml/default/default/unbxd/img/x-widget.png +0 -0
  240. skin/adminhtml/default/default/unbxd/img/x.png +0 -0
  241. skin/adminhtml/default/default/unbxd/js/app.js +780 -0
  242. skin/adminhtml/default/default/unbxd/js/lib/bootstrap-tooltip.js +1 -0
  243. skin/adminhtml/default/default/unbxd/js/lib/chosen.js +2 -0
  244. skin/adminhtml/default/default/unbxd/js/lib/ractive-chosen.js +117 -0
  245. skin/adminhtml/default/default/unbxd/js/lib/ractive.js +15 -0
  246. skin/adminhtml/default/default/unbxd/templates/analytics.html +148 -0
  247. skin/adminhtml/default/default/unbxd/templates/catalog.html +297 -0
  248. skin/adminhtml/default/default/unbxd/templates/credentails.html +89 -0
  249. skin/adminhtml/default/default/unbxd/templates/custom.html +31 -0
  250. skin/adminhtml/default/default/unbxd/templates/widgets.html +302 -0
app/code/local/Unbxd/Datafeeder/Block/Edit.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
-
4
- class Unbxd_Datafeeder_Block_Edit extends Mage_Core_Block_Template
5
- {
6
-
7
- public function getCollection()
8
- {
9
- return Mage::getModel('datafeeder/field')->getCollection();
10
- }
11
- }
12
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Block/Index.php DELETED
@@ -1,76 +0,0 @@
1
- <?php
2
-
3
-
4
- class Unbxd_Datafeeder_Block_Index extends Mage_Adminhtml_Block_Template
5
- {
6
- public function getFullindexFormAction()
7
- {
8
-
9
- return Mage::getUrl('*/*/fullindex', array('_secure' => Mage::app()->getFrontController()->getRequest()->isSecure()));
10
- }
11
-
12
- public function getTaxonomyUploadFormAction(){
13
- return Mage::getUrl('*/*/taxonomyindex', array('_secure' => Mage::app()->getFrontController()->getRequest()->isSecure()));
14
- }
15
-
16
- public function getSaveApiUrl(){
17
- return Mage::getUrl('*/*/saveapi', array('_secure' => Mage::app()->getFrontController()->getRequest()->isSecure()));
18
- }
19
-
20
- public function getSaveFieldUrl()
21
- {
22
- return Mage::getUrl('*/field/save', array('_secure' => Mage::app()->getFrontController()->getRequest()->isSecure()));
23
- }
24
-
25
- public function saveFeedConf(){
26
- return Mage::getUrl('*/*/savefeedconf', array('_secure' => Mage::app()->getFrontController()->getRequest()->isSecure()));
27
- }
28
-
29
- public function checkApiKeyExists()
30
- {
31
- if(Mage::getResourceSingleton("datafeeder/conf")->getValue("apiKey")=="empty"){
32
- return false;
33
- }
34
- else{
35
- return true;
36
- }
37
- }
38
-
39
- public function getApiKey(){
40
- return Mage::getResourceSingleton("datafeeder/conf")->getValue("apiKey");
41
- }
42
-
43
- public function getFields($site)
44
- {
45
-
46
- return Mage::getResourceSingleton('datafeeder/field')->getFields($site);
47
- }
48
-
49
- public function getIncrementalIndexFormAction()
50
- {
51
- return Mage::getUrl('*/*/incrementalindex', array('_secure' => Mage::app()->getFrontController()->getRequest()->isSecure()));
52
- }
53
-
54
- public function getProgressUrl()
55
- {
56
-
57
- return Mage::getUrl('datafeeder/config/progress', array('_secure' =>Mage::app()->getFrontController()->getRequest()->isSecure()));
58
- }
59
-
60
- public function getFeedConf()
61
- {
62
-
63
- return Mage::getUrl('datafeeder/config/getfeedconf', array('_secure' =>Mage::app()->getFrontController()->getRequest()->isSecure()));
64
- }
65
-
66
- public function getResetAction(){
67
- return Mage::getUrl('datafeeder/config/reset', array('_secure' => Mage::app()->getFrontController()->getRequest()->isSecure()));
68
- }
69
-
70
- public function getEditUrl()
71
- {
72
- return Mage::getUrl('*/field/config', array('_secure' => Mage::app()->getFrontController()->getRequest()->isSecure()));
73
- }
74
- }
75
-
76
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Helper/.DS_Store DELETED
Binary file
app/code/local/Unbxd/Datafeeder/Helper/Analyticshelper.php DELETED
@@ -1,105 +0,0 @@
1
- <?php
2
- class Unbxd_Datafeeder_Helper_Analyticshelper extends Mage_Core_Helper_Abstract{
3
-
4
- /**
5
- * Returns unbxd script tag
6
- *;
7
- * @return String
8
- **/
9
- public function getAnalyticsScriptTag() {
10
- $siteName = Mage::getResourceSingleton("datafeeder/conf")->getValue(Mage::app()->getWebsite()->getName() . "/siteName");
11
- if(is_null($siteName) || $siteName == "" ) {
12
- Mage::throwException("Unbxd site key is not set");
13
- }
14
- $scriptDiv = '<script type="text/javascript">';
15
- $scriptDiv = $scriptDiv.'var UnbxdSiteName="'.$siteName.'";';
16
- $scriptDiv = $scriptDiv.'var s=document.createElement("script");';
17
- $scriptDiv = $scriptDiv.'s.src="//unbxd.s3.amazonaws.com/unbxdAnalytics.js";';
18
- $scriptDiv = $scriptDiv.'s.type="text/javascript";';
19
- $scriptDiv = $scriptDiv.'s.async=true;';
20
- $scriptDiv = $scriptDiv.'document.getElementsByTagName("head").item(0).appendChild(s);';
21
- $scriptDiv = $scriptDiv.'var s=document.createElement("script");';
22
- $scriptDiv = $scriptDiv."</script>";
23
- return $scriptDiv;
24
- }
25
-
26
- /**
27
- * Returns unbxd search box attributes
28
- *
29
- * @return String
30
- **/
31
- public function getSearchBoxAttribute() {
32
- return 'unbxdattr="sq"';
33
- }
34
-
35
- /**
36
- * Returns unbxd search box button attributes
37
- *
38
- * @return String
39
- **/
40
- public function getSearchBoxButtonAttribute() {
41
- return 'unbxdattr="sq_bt"';
42
- }
43
-
44
- /**
45
- * Returns unbxd navigation meta tag
46
- *
47
- * @return String
48
- **/
49
- public function getNavigationTag() {
50
- return '<meta name="unbxd:type" content="category">';
51
- }
52
-
53
- /**
54
- * Returns unbxd product click attributes
55
- *
56
- * @return String
57
- **/
58
- public function getProductClickAttributes($product, $rank) {
59
- if (!$product instanceof Mage_Catalog_Model_Product ) {
60
- Mage::throwException("$product parameter to getProductClickAttributes method should be of type Mage_Catalog_Model_Product");
61
- }
62
- if (!$rank || $rank < 1 ) {
63
- Mage::throwException("$rank parameter to getProductClickAttributes method should be greater than 0");
64
- }
65
- return 'unbxdattr="product" unbxdparam_sku="'.$product->getData('entity_id').'" unbxdparam_prank="'.$rank.'"';
66
- }
67
-
68
- /**
69
- * Returns unbxd add to cart attributes
70
- *
71
- * @return String
72
- **/
73
- public function getAddToCartAttributes($product) {
74
- if (!$product instanceof Mage_Catalog_Model_Product ) {
75
- Mage::throwException("$product parameter to getProductClickAttributes method should be of type Mage_Catalog_Model_Product");
76
- }
77
- return 'unbxdattr="AddToCart" unbxdparam_sku="'.$product->getData('entity_id').'"';
78
- }
79
-
80
- /**
81
- * Returns unbxd order attributes
82
- *
83
- * @return String
84
- **/
85
- public function getOrderAttributes($product) {
86
- if (!$product instanceof Mage_Catalog_Model_Product ) {
87
- Mage::throwException("$product parameter to getProductClickAttributes method should be of type Mage_Catalog_Model_Product");
88
- }
89
- return 'unbxdattr="order" unbxdparam_sku="'.$product->getData('entity_id').'"';
90
- }
91
-
92
- /**
93
- * Checks whether request is a navigation
94
- *
95
- * @param Mage_Catalog_Model_Resource_Eav_Attribute $attribute
96
- * @return bool
97
- */
98
- public function isNavigation() {
99
- if(Mage::app()->getRequest()->getControllerName() == "category") {
100
- return true;
101
- }
102
- return false;
103
- }
104
- }
105
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Helper/Data.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Helper_Data extends Mage_Core_Helper_Abstract
4
- {
5
-
6
- public function getsetaddressparams()
7
- {
8
- $params=$this->_getRequest()->getParams();
9
- return $params;
10
- }
11
-
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Helper/UnbxdIndexingHelper.php DELETED
@@ -1,682 +0,0 @@
1
- <?php
2
- /*
3
- * Created on 14-May-2013
4
- *
5
- * @author antz(ananthesh@unbxd.com)
6
- */
7
-
8
- class Unbxd_Datafeeder_Helper_UnbxdIndexingHelper {
9
- // This is like to act as a temporary cache, which holds the fieldName to fieldType information
10
- // so that just to avoid multiple database reads, and make it faster
11
- var $fieldType = array();
12
- // This is the name of the logFile which it is writing in to//
13
- var $logFile;
14
- // This is also act like a temporary cache, which holds the category id to category information,
15
- // so that just to avoid multiple database reads, and make it faster
16
- var $categoryMap = array();
17
- // size to fetch how much products should it pick in batches
18
- var $PAGE_SIZE = 500;
19
- // the file to write to..
20
- var $file;
21
- // fields to be selected to push to unbxd
22
- var $fields;
23
- // Feed unlock interval
24
- //LOCK_TIMEOUT = 60 * 30;
25
-
26
- public function __construct(){
27
- $this->logFile = Mage::getBaseDir('log').DS.'generic.log';
28
- $this->file = Mage::getBaseDir('tmp').DS.'unbxdFeed.xml';
29
- $this-log("calling setfeilds method");
30
- $this->fields = array();
31
- $this-> setFieldType();
32
- }
33
-
34
- public function setFields($site) {
35
- $this->fields = Mage::getResourceSingleton('datafeeder/field')->getEnabledFields($site);
36
- $this-log("inside setfeilds method");
37
- $this->fields[] = 'entity_id';
38
- $this->log("fields are " .json_encode($this->fields));
39
- }
40
-
41
- /**
42
- * Function to create a file
43
- */
44
- private function createXmlFile(){
45
- try{
46
- $f=fopen($this->file,'w');
47
-
48
- fclose($f);
49
- if(!file_exists($this->file)) {
50
- $this->log("UNBXD_MODULE:Couldn't create the file");
51
- return false;
52
- }
53
- $this->log("UNBXD_MODULE: created the file");
54
- return true;
55
- } catch (Exception $ex) {
56
- $this->log("UNBXD_MODULE:Error while creating the file");
57
- $this->log($ex->getMessage());
58
- return false;
59
- }
60
- }
61
-
62
- /**
63
- * Function to append the contents to the file
64
- */
65
- private function appendTofile($content){
66
- try{
67
-
68
- if(file_put_contents($this->file, $content, FILE_APPEND)) {
69
- return true;
70
- } else {
71
- return false;
72
- }
73
- } catch(Exception $ex) {
74
- $this->log("UNBXD_MODULE:Error while appending the contents to feed file");
75
- $this->log($ex->getMessage());
76
- return false;
77
- }
78
- }
79
-
80
-
81
- /**
82
- * Function to create a file
83
- */
84
- private function createLogFile(){
85
- try {
86
- $f=fopen($this->logFile,'w');
87
- fclose($f);
88
- return true;
89
- } catch (Exception $ex) {
90
- error_log("UNBXD_MODULE:Error while creating the file");
91
- error_log($ex->getMessage());
92
- return false;
93
- }
94
- }
95
-
96
- /**
97
- * Function to appened the contents to the file
98
- */
99
- public function log($content){
100
- try{
101
- $resp = file_put_contents($this->logFile, date('Y-m-d H:i:s').$content."\n", FILE_APPEND);
102
- if($resp){
103
- return true;
104
- } else {
105
- error_log("UNBXD_MODULE:Error while appending the contents to log file");
106
- return false;
107
- }
108
- return true;
109
- }catch(Exception $ex) {
110
- error_log("UNBXD_MODULE:Error while appending the contents to log file");
111
- Mage::throwException($ex->getMessage());
112
- return false;
113
- }
114
- }
115
-
116
- /**
117
- * Function to delete the file
118
- */
119
- private function deleteFile(){
120
- unlink($this->file);
121
- }
122
-
123
- /**
124
- * function to get the file name
125
- */
126
- private function getFile(){
127
- return $this->file;
128
- }
129
-
130
- /**
131
- * Write Header contents to the file
132
- *
133
- */
134
- private function writeXmlHeaderContents($operation){
135
- $headerContent="<feed>"."<taxonomyname>".$this->tax.
136
- "</taxonomyname><username>unbxd</username>".
137
- "<feedname>feed</feedname>".
138
- "<entry>"."<data>" .
139
- "<unbxdActionType>".$operation.
140
- "</unbxdActionType>"."<products>";
141
-
142
- return $this->appendTofile($headerContent);
143
-
144
- }
145
-
146
- /**
147
- * function to append the xml footer contents to the file
148
- *
149
- */
150
- private function writeXmlFooterContents(){
151
- $footerContent="</products></data></entry></feed>";
152
- return $this->appendTofile($footerContent);
153
- }
154
-
155
- /**
156
- * function to append the product contents to the file
157
- */
158
- private function writeXmlProductContents($fromdate,$todate,$site,$operation,$ids){
159
-
160
-
161
- $collection=$this->getCatalogCollection($fromdate,$todate,$site,$operation,$ids);
162
- // get total size
163
- //set the time limit to infinite
164
- set_time_limit(0);
165
- $pageNum = 0;
166
- $this->log('started writing products');
167
-
168
- while(true){
169
- $collection->clear();
170
- $collection->getSelect()->limit($this->PAGE_SIZE, ($pageNum++) * $this->PAGE_SIZE);
171
- $collection->load();
172
- echo "<pre>";print_r($collection);echo "</pre>";
173
- if(count($collection) == 0){
174
- if($pageNum == 1){
175
- $this->log("No products found");
176
- return false;
177
- }
178
- break;
179
- }
180
- $content=$this->getCollectionInXML($collection, $operation);
181
- $status=$this->appendTofile($content);
182
- if(!$status){
183
- return false;
184
- }
185
- $this->log('Added '.($pageNum) * $pageSize.' products');
186
- }
187
-
188
- $this->log('Added all products');
189
- return true;
190
- }
191
-
192
- /**
193
- ** This method iterates over the collection and builds the xml for product object
194
- **
195
- **/
196
- private function getCollectionInXML($collection, $operation){
197
-
198
- $content='';
199
- $count=0;
200
- foreach($collection as $product){
201
- $count++;
202
- $content=$content.'<product>';
203
- $content=$content.$this->getProductInXML($product, $operation);
204
- $content=$content.'</product>';
205
- }
206
-
207
- return $content;
208
- }
209
-
210
- /**
211
- ** This method builds xml string, given the product object
212
- **
213
- **/
214
- private function getProductInXML($product, $operation){
215
- $content='';
216
- if($operation != "add"){
217
- return $this->getAttributesInXML('uniqueId',$product->getData('entity_id'));
218
- }
219
-
220
- foreach($product->getData('') as $columnHeader=>$columndata){
221
-
222
- if(!in_array($columnHeader, $this->fields)) {
223
- continue;
224
- }
225
- if(is_null($columndata)|| !isset($columndata) || $columndata==""){
226
- continue;
227
- }
228
- if($columnHeader=="entity_id"){
229
- $content=$content. $this->getAttributesInXML('uniqueId',$columndata);
230
- }
231
- if($columnHeader=="name"){
232
- $content=$content. $this->getAttributesInXML('productname',$columndata);
233
- }
234
- if($columnHeader=="small_image"){
235
- $content=$content. $this->getAttributesInXML('image_url',$columndata);
236
- }
237
-
238
- if($columnHeader=="entity_id"){
239
- $content=$content. $this->getAttributesInXML('uniqueId',$columndata);
240
- }
241
- if($columnHeader == "visibility") {
242
- $content = $content.$this->getAttributesInXML('unbxdVisibility', $columndata);
243
- }
244
- if($columnHeader=="url_path"){
245
- $content=$content. $this->getAttributesInXML('url', Mage::getUrl('').$columndata);
246
- $content=$content. $this->getAttributesInXML('url_path', Mage::getUrl('').$columndata);
247
- } else if( $this->isMultiSelect($columnHeader) && $columnHeader != "status"){
248
- $data = explode(",", $columndata);
249
- $attributeModel = Mage::getResourceSingleton("datafeeder/attribute");
250
- foreach( $data as $eachdata){
251
- $attributeValue = $attributeModel ->getAttributeValue($columnHeader, trim($eachdata), $product);
252
- $value = $value .$this->getAttributesInXML($columnHeader,$attributeModel ->getAttributeValue($columnHeader, trim($eachdata), $product));
253
- if(isset($this->filterable[$columnHeader]) && ($this->filterable[$columnHeader] == 1) && isset($attributeValue) && $attributeValue != ""){
254
- $value = $value.$this->getAttributesInXML($columnHeader."_id", trim($eachdata));
255
- }
256
- }
257
- } else if($columnHeader == "created_at" ||$columnHeader == "updated_at") {
258
- $tokens = explode(" ",$columndata);
259
- $columndata =$tokens[0].'T'.$tokens[1].'Z';
260
- $value =$this->getAttributesInXML($columnHeader,$columndata);
261
- } else if($columnHeader == "category_id"){
262
- if(!isset($columndata)){
263
- continue;
264
- }
265
- $categoryIds = explode(",",$columndata);
266
- foreach($categoryIds as $categoryId){
267
- $value = $value.$this->getAttributesInXML($columnHeader, trim($categoryId));
268
- $value = $value.$this->getAttributesInXML("unbxdTaxonomyId",trim($categoryId));
269
- $value = $value.$this->getAttributesInXML("category",$this->getCategoryName(trim($categoryId)));
270
- }
271
-
272
- } else if (is_array($columndata)){
273
- $value = $this->getArrayAttributesInXML($columnHeader,$columndata);
274
- } else if ($columndata instanceof Varien_Object){
275
- $value = $this->getArrayAttributesInXML($columnHeader,$columndata->getData());
276
- } else if ( !isset($value) || $value == ""){
277
- $value =$this->getAttributesInXML($columnHeader, $columndata);
278
- }
279
- $content = $content.$value;
280
- $value = "";
281
- }
282
-
283
- $content=$content.$this->getCategoryAttribute($product);
284
- $content=$content.$this->getAttributesInXML('store','default');
285
- return $content;
286
- }
287
-
288
- /*
289
- * function to check whether the field is a multiSelect/select or not,
290
- * This is optimized method, where it doesn't make a database call to get fieldType
291
- * where it fetches from the local variable, which holds the information of field to fieldType mapping
292
- */
293
- public function isMultiSelect($attributeName = ""){
294
- if($this->getFieldType($attributeName) == "select" || $this->getFieldType($attributeName) == "multiselect" || $attributeName == "categoryIds"){
295
- return true;
296
- }
297
- return false;
298
- }
299
-
300
-
301
- public function isImage($attributeName = "") {
302
- if($this->getFieldType($attributeName) == "media_image") {
303
- return true;
304
- }
305
- return false;
306
- }
307
-
308
- /**
309
- * function to get Category from the category id,
310
- * This checks it present in the global array 'categoryMap', if it is not there fetches from db
311
- * So that once it gets one category, it doesn't make db call again for the same category
312
- */
313
- public function getCategory($category_id = ""){
314
- if(!isset($this->categoryMap[$category_id])){
315
- $category = Mage::getModel('catalog/category')->load($category_id);
316
- $this->categoryMap[$category_id] = $category;
317
- return $this->categoryMap[$category_id];
318
- }
319
- return $this->categoryMap[$category_id];
320
- }
321
-
322
- /**
323
- * Method to get stock attribute in xml given the product
324
- */
325
- private function getStockAttribute($product){
326
- $model = Mage::getModel('catalog/product');
327
- $_product = $model->load($product->getId());
328
- $stocklevel = Mage::getModel('cataloginventory/stock_item')
329
- ->loadByProduct($product)->getQty();
330
-
331
- $content=$this->getAttributesInXML("stock",$stocklevel);
332
-
333
- if($stocklevel > 0){
334
- $content=$content.$this->getAttributesInXML("Instock","1");
335
- }
336
- else{
337
- $content=$content.$this->getAttributesInXML("Instock","0");
338
- }
339
- return $content;
340
- }
341
-
342
- /**
343
- * method to get category content in xml given the product object
344
- */
345
- private function getCategoryAttribute($product){
346
- $cats = $product->getCategoryIds();
347
- $categoryId=array();
348
- $category=array();
349
- $content = "";
350
- foreach ($cats as $category_id) {
351
-
352
- $_cat = $this->getCategory($category_id);
353
- $categoryId[]=$category_id;
354
- $category[]=$_cat->getName();
355
- }
356
-
357
- $content=$content.$this->getArrayAttributesInXML("categoryIds",$categoryId);
358
- $content=$content.$this->getArrayAttributesInXML("unbxdTaxonomyId",$categoryId);
359
- $content=$content.$this->getArrayAttributesInXML("category",$category);
360
- return $content;
361
- }
362
-
363
- /**
364
- * method to get the xml content given the fieldname and array
365
- */
366
- private function getArrayAttributesInXML($columnHeader,$columndata){
367
- $content='';
368
-
369
- foreach($columndata as $element){
370
- $content=$content.$this->getAttributesInXML($columnHeader,$element);
371
- }
372
-
373
- return $content;
374
- }
375
-
376
- /**
377
- * method to get the xml content given the fieldname and value
378
- */
379
- private function getAttributesInXML($columnHeader,$columndata){
380
-
381
- $columnHeader=$this->_escapeXMLHeader($columnHeader);
382
- $content = $this->_escapeXMLValue($columndata);
383
- $content = iconv("ISO-8859-1", "UTF-8", $content);
384
- if($content != '' && $columnHeader != ''){
385
- return '<'.$columnHeader.'>'.$content.'</'.$columnHeader.'>';
386
- }else{
387
- return '';
388
- }
389
- }
390
-
391
- /**
392
- * method to escape the xml header contents
393
- */
394
- private function _escapeXMLHeader($columnHeader){
395
- if(is_numeric(substr($columnHeader,0,1))){
396
- $columnHeader ='_'.$columnHeader;
397
- }
398
- return str_replace(' ','_',$columnHeader);
399
- }
400
-
401
- /**
402
- * method to escape the xml contents
403
- */
404
- private function _escapeXMLValue($str){
405
- $encryptedString = "";
406
- $strlen = strlen( $str );
407
- for( $i = 0; $i <= $strlen; $i++ ) {
408
- $char = substr( $str, $i, 1 );
409
- if(ord($char) == 11){
410
- continue;
411
- }
412
- if((ord($char) < 32) && (ord($char) > 0) && (ord($char) != 9) && (ord($char) != 10) && (ord($char) != 13)){
413
- $controlCharacter = true;
414
- } else {
415
- $controlCharacter = false;
416
- }
417
- $unicodeButNotAscii = (ord($char) > 126) ? true: false;
418
- if ( ($char == "<") || ($char == "&") || ($char == ">") || ($char == '"') || ($char == "'")) {
419
- $characterWithSpecialMeaningInXML =true;
420
- } else {
421
- $characterWithSpecialMeaningInXML =false;
422
- }
423
- if ($controlCharacter || $characterWithSpecialMeaningInXML || $unicodeButNotAscii) {
424
- $encryptedString = $encryptedString . "&#" . (ord($char)) . ";" ;
425
- } else {
426
- $encryptedString = $encryptedString.$char;
427
- }
428
- }
429
- return $encryptedString;
430
- }
431
-
432
- /**
433
- * method to get the catalog collection
434
- *
435
- */
436
- private function getCatalogCollection($fromdate,$todate,$site,$operation,$ids) {
437
- try{
438
- if ($operation == "add") {
439
- // select all the attributes
440
- $website =Mage::getModel("core/website")->setName($site);
441
- $visiblityCondition = array('in' => array(4));
442
-
443
- $collection = Mage::getResourceModel('catalog/product_collection')
444
- ->addWebsiteFilter($this->validateSite($site))
445
- ->addAttributeToFilter('status',1)
446
- ->joinField("qty", "cataloginventory_stock_item", 'qty', 'product_id=entity_id', null, 'left')
447
- ->addAttributeToSelect('*')
448
- ->addAttributeToFilter('visibility',$visiblityCondition);
449
-
450
- if(sizeof($ids) > 0){
451
- $condition = array('in' => $ids);
452
- $collection=$collection->addAttributeToFilter('entity_id',$condition);
453
- }
454
- } else {
455
- $collection = Mage::getResourceModel('catalog/product_collection');
456
- if(sizeof($ids) > 0) {
457
- $condition = array('in' => $ids);
458
- $collection = $collection->addAttributeToFilter('entity_id',$condition)->addAttributeToSelect('entity_id');
459
- }
460
- }
461
-
462
- $this->log($collection->getSelect());
463
- return $collection;
464
- } catch(Exception $e) {
465
- $this->log($e->getMessage());
466
- }
467
- }
468
-
469
- /**
470
- * method to get all the attributes
471
- **/
472
- public function getAttributes(){
473
- return Mage::getSingleton('eav/config')
474
- ->getEntityType(Mage_Catalog_Model_Product::ENTITY)->getAttributeCollection();
475
- }
476
-
477
- /**
478
- * method to get field type of the field
479
- **/
480
- private function getFieldType($attributeName){
481
- if(array_key_exists( $attributeName, $this->fieldType)){
482
- return $this->fieldType[$attributeName];
483
- } else {
484
- return "text";
485
- }
486
- }
487
-
488
- /**
489
- * method to set field type to the global object
490
- **/
491
- private function setFieldType(){
492
- $attributes = $this->getAttributes();
493
- foreach($attributes as $attribute){
494
- $this->filterable[$attribute->getAttributeCode()] = $attribute->getData('is_filterable');
495
- $this->fieldType[$attribute->getAttributeCode()] = $attribute-> getFrontendInput();
496
- }
497
- }
498
-
499
- /**
500
- * method to get the zend date condition
501
- */
502
- private function getDateCondition($fromdate,$todate){
503
- return array('from'=>$fromdate,'to'=>$todate,'date'=>true,);
504
- }
505
-
506
- /**
507
- * method to create the feed
508
- **/
509
- public function createFeed($fromdate,$todate,$site,$operation,$ids){
510
- if($this->createXmlFile()){
511
- $this->log("started writing header");
512
- if(!$this->writeXmlHeaderContents($operation)){
513
- return false;
514
- }
515
- $this->log('Added header contents');
516
- try{
517
- if(!$this->writeXmlProductContents($fromdate,$todate,$site,$operation,$ids)){
518
- return false;
519
- }
520
- }catch(Exception $e){
521
- $this->log($e->getMessage());
522
- $this->log($e->getTraceAsString());
523
- return false;
524
- }
525
- $this->log('Added products');
526
-
527
- if(!$this->writeXmlFooterContents()){
528
- return false;
529
- }
530
- } else {
531
- return false;
532
- }
533
- return true;
534
- }
535
-
536
- /**
537
- * method to initiate task after index
538
- **/
539
- private function _afterIndex(){
540
- $this->deleteFile();
541
- }
542
-
543
- /**
544
- * method to validate whether the site exists or not
545
- **/
546
- public function validateSite($site){
547
- $sites=Mage::app()->getWebsites();
548
- if( !isset($site) || $site == "") {
549
- return false;
550
- }
551
- foreach( $sites as $eachSite){
552
- if(strcasecmp ( $eachSite->getName(), $site ) == 0 ){
553
- return $eachSite->getWebsiteId();
554
- }
555
- }
556
- return -1;
557
- }
558
-
559
- /**
560
- * method to set the feedName, log, apikey based on site Name
561
- **/
562
- public function setUnbxdConf($site)
563
- {
564
- $this->key = Mage::getResourceSingleton("datafeeder/conf")->getValue("apiKey");
565
- $this->feedName = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/feed");
566
- $this->tax = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/tax");
567
- $this->logFile = Mage::getBaseDir('log').DS.substr($site,0,strrpos($site, ".")-1).'unbxdDataFeeder.log';
568
- $this->file = Mage::getBaseDir('tmp').DS.substr($site,0,strrpos($site, ".")-1).'unbxdFeed.xml';
569
- if (!$this->log("Feed uploading started")) {
570
- error_log("No permission to write to " + Mage::getBaseDir('log'));
571
- return false;
572
- }
573
- if(!isset($this->key) || $this->key == "" || $this->key == "empty"){
574
- $this->log("api key not set");
575
- return false;
576
- }
577
- if(!isset($this->feedName) || $this->feedName == "" || $this->feedName == "empty"){
578
- $this->log("Feed Name not set");
579
- return false;
580
- }
581
- $this->setFields($site);
582
- return true;
583
- }
584
-
585
- /**
586
- * method to initiate feed uploading to the unbxd servers
587
- **/
588
- public function indexUnbxdFeed($fromdate,$site,$operation = "add", $ids=array()){
589
-
590
- $this->log('unbxd Datafeeder initiated');
591
- // validatest the site
592
- if($this->validateSite($site) == -1){
593
- $this->log("Invalid site Name".$site);
594
- return;
595
- }
596
- // set the basic
597
- if(! $this->setUnbxdConf($site)){
598
- return;
599
- }
600
- $todate =date('Y-m-d H:i:s');
601
-
602
- // check the lock, that if already indexing is happening
603
- if($this->checkSiteLock($site)){
604
- $this->log('site '. $site.' has been locked');
605
- $action=$site.'/status';
606
- // lock the feed
607
- Mage::getResourceSingleton("datafeeder/conf")->updateAction($action,'1');
608
- // create the feed
609
-
610
- $status=$this->createFeed($fromdate,$todate,$site,$operation,$ids);
611
- $this->log('unbxd Datafeeder finished creating file');
612
-
613
- if($status){
614
- try{
615
- // if successful push it to unbxd servers
616
- $status=$this->pushFeed($site);
617
- }catch(Exception $e){
618
- $this->log($e->getMessage());
619
-
620
- }
621
- if($status){
622
- Mage::getResourceSingleton("datafeeder/conf")->updateAction('Lastindex',$todate);
623
- }
624
- }
625
- // unlock the feed once everything is completed
626
- Mage::getResourceSingleton("datafeeder/conf")->updateAction($action,'0');
627
- $this->log('site '. $site.' has been unlocked');
628
- } else {
629
- $this->log('Feed Uploading failed because site has been locked');
630
- }
631
- }
632
-
633
-
634
- /**
635
- * method to push the feed to the Unbxd server
636
- **/
637
- public function pushFeed($site){
638
- $fields=array('file'=>'@'.$this->file.';filename=unbxdFeedRenamed.xml');
639
- $header = array('Content-Type: multipart/form-data');
640
-
641
- $url="feed.unbxdapi.com/upload/".$this->key."/".$this->feedName;
642
- //clear the feed
643
- $clearFeedUrl = "http://feed.unbxdapi.com/clearfeed.do?key=".$this->key."&feedName=".$this->feedName;
644
- file_get_contents($clearFeedUrl);
645
- $this->log('cleared the feed');
646
-
647
-
648
- $ch = curl_init();
649
- curl_setopt($ch, CURLOPT_URL,$url);
650
- curl_setopt($ch, CURLOPT_POST,true);
651
- curl_setopt($ch, CURLOPT_POSTFIELDS,$fields);
652
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
653
- try{
654
- $this->log('pushing the feed');
655
- // push the feed to the server
656
- $response = curl_exec ($ch);
657
- }catch(Exception $Ex){
658
- $this->log($Ex->getMessage());
659
- return false;
660
- }
661
- $this->log($response);
662
- curl_close($ch);
663
- return true;
664
- }
665
-
666
- /**
667
- * method to check the status of the uploading
668
- **/
669
- public function checkSiteLock($site)
670
- {
671
- $value = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/status");
672
- if($value == '0' || $value == 'empty'){
673
- $this->log("true");
674
- return true;
675
- }else{
676
- $this->log("false". $value);
677
- return false;
678
- }
679
- }
680
- }
681
- ?>
682
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Helper/UnbxdTaxonomyHelper.php DELETED
@@ -1,318 +0,0 @@
1
- <?php
2
- class Unbxd_Datafeeder_Helper_UnbxdTaxonomyHelper{
3
-
4
- var $file='unbxdTaxonomy.xml';
5
-
6
-
7
- public function __construct(){
8
- $this->file = Mage::getBaseDir('tmp').DS.'unbxdTaxonomy.xml';
9
- }
10
- /**
11
- * Function to create a file
12
- */
13
- private function createXmlFile(){
14
- try{
15
- $f=fopen($this->file,'w');
16
- fclose($f);
17
- return true;
18
- } catch (Exception $Ex)
19
- {
20
- error_log("UNBXD_MODULE:Error while creating the file");
21
- error_log($Ex->getMessage());
22
- return false;
23
- }
24
- }
25
-
26
- /**
27
- * Function to appened the contents to the file
28
- */
29
- private function appendTofile($content){
30
- try{
31
-
32
- file_put_contents($this->file, $content, FILE_APPEND);
33
- return true;
34
- }catch(Exception $Ex){
35
- error_log("UNBXD_MODULE:Error while appending the contents to file");
36
- error_log($Ex->getMessage());
37
- return false;
38
- }
39
- }
40
-
41
- private function log($content){
42
- try{
43
- file_put_contents($this->logFile, date('Y-m-d H:i:s').$content."\n", FILE_APPEND);
44
- return true;
45
- }catch(Exception $Ex){
46
- error_log("UNBXD_MODULE:Error while appending the contents to file");
47
- Mage::throwException($Ex->getMessage());
48
- return false;
49
- }
50
- }
51
-
52
- /**
53
- * Function to delete the file
54
- */
55
- private function deleteFile(){
56
- unlink($this->file);
57
- }
58
-
59
- private function writeXMLHeaderContents(){
60
- $content="<feed>
61
- <username>unbxd</username>
62
- <taxonomyname>tax</taxonomyname>";
63
- return $this->appendTofile($content);
64
- }
65
-
66
-
67
- private function writeXMLFooterContents(){
68
- $content="</feed>";
69
- return $this->appendTofile($content);
70
- }
71
-
72
-
73
-
74
- private function writeXMLProductsContents($site){
75
- $stores= $this->getStores($site);
76
- foreach( $stores as $store){
77
- $categories=$this->getStoreCategories($store);
78
- $content='';
79
- $count=0;
80
- $content=$content.'<category>';
81
- $content=$content.$this->getAttributesInXML("name",$site);
82
- $content=$content.$this->getAttributesInXML("parents","-1");
83
- $content=$content.$this->getAttributesInXML("id",1);
84
- $content=$content.$this->getAttributesInXML("url","unbxd");
85
- $content=$content.'</category>';
86
- foreach($categories as $category){
87
- if( $category->getName()== "" ){
88
- continue;
89
- }
90
- $content =$content.$this->getCategoryContent($category);
91
- $category_obj = Mage::getModel('catalog/category')->load($category->getId());
92
- $childrens = $category_obj->getAllChildren(true);
93
- $childrenCategories = Mage::getModel('catalog/category')->getCollection()->addIdFilter($childrens)->addAttributeToSelect('*')->load();
94
-
95
- foreach($childrenCategories as $childCategory){
96
- $content=$content.$this->getCategoryContent($childCategory);
97
- }
98
- }
99
- }
100
- return $this->appendTofile($content);
101
- }
102
-
103
- private function getCategoryContent($category){
104
- $content='';
105
- $content=$content.'<category>';
106
- $content=$content.$this->getAttributesInXML("name",$category->getName());
107
- $content=$content.$this->getAttributesInXML("parents",$category->getParentId());
108
- $content=$content.$this->getAttributesInXML("id",$category->getId());
109
- $content=$content.$this->getAttributesInXML("url","unbxd");
110
- $content=$content.'</category>';
111
- $content=$content."\n";
112
- return $content;
113
- }
114
-
115
-
116
-
117
- private function getAllCategories($site){
118
- $collection = Mage::getModel('catalog/category')->getCollection()
119
- ->setStoreId($this->getStores($site))
120
- ->addAttributeToSelect('name')
121
- ->addAttributeToSelect('id');
122
-
123
- return $collection->load();
124
-
125
- }
126
-
127
- private function getStores($site){
128
- $sites=Mage::app()->getWebsites();
129
- foreach( $sites as $eachSite){
130
- if(strcasecmp ( $eachSite->getName(), $site ) == 0 ){
131
- return $eachSite->getStores();
132
- }
133
- }
134
- }
135
-
136
-
137
-
138
- private function getAttributesInXML($columnHeader,$columndata){
139
-
140
- $columnHeader=$this->_escapeXMLHeader($columnHeader);
141
- $content=$this->_escapeXMLValue($columndata);
142
- return '<'.$columnHeader.'>'.$content.'</'.$columnHeader.'>';
143
- }
144
-
145
- private function _escapeXMLHeader($columnHeader){
146
-
147
- return str_replace(' ','_',$columnHeader);
148
- }
149
-
150
- private function _escapeXMLValue($columndata){
151
-
152
- return strtr($columndata,array(
153
- "<" => "&lt;",
154
- ">" => "&gt;",
155
- '"' => "&quot;",
156
- "'" => "&apos;",
157
- "&" => "&amp;",
158
- ));
159
- }
160
-
161
-
162
- public function createFeed($site){
163
- $this->log('creating xml file');
164
- if($this->createXmlFile()){
165
- if(!$this->writeXmlHeaderContents()){
166
- return false;
167
- }
168
- $this->log('writing header');
169
- if(!$this->writeXMLProductsContents($site)){
170
- return false;
171
- }
172
- $this->log('writing content');
173
- if(!$this->writeXmlFooterContents()){
174
- return false;
175
- }
176
- $this->log('writing footer');
177
- } else {
178
- return false;
179
- }
180
- return true;
181
- }
182
-
183
- public function validateSite($site){
184
- $sites=Mage::app()->getWebsites();
185
- if( !isset($site) || $site == "") {
186
- return false;
187
- }
188
- foreach( $sites as $eachSite){
189
- if(strcasecmp ( $eachSite->getName(), $site ) == 0 ){
190
- return $eachSite->getWebsiteId();
191
- }
192
- }
193
- return -1;
194
- }
195
-
196
- public function getStoreCategories($store, $sorted=false, $asCollection=false, $toLoad=true)
197
- {
198
- $parent = $store->getRootCategoryId();
199
-
200
- /**
201
- * Check if parent node of the store still exists
202
- */
203
- $category = Mage::getModel('catalog/category');
204
- /* @var $category Mage_Catalog_Model_Category */
205
- if (!$category->checkId($parent)) {
206
- if ($asCollection) {
207
- return new Varien_Data_Collection();
208
- }
209
- return array();
210
- }
211
-
212
- $recursionLevel = max(0, (int) Mage::app()->getStore()->getConfig('catalog/navigation/max_depth'));
213
- $tree = Mage::getResourceModel('catalog/category_tree');
214
- /* @var $tree Mage_Catalog_Model_Resource_Category_Tree */
215
- $nodes = $tree->loadNode($parent)
216
- ->loadChildren($recursionLevel)
217
- ->getChildren();
218
-
219
- $tree->addCollectionData(null, $sorted, $parent, $toLoad, false);
220
- if ($asCollection) {
221
- return $tree->getCollection();
222
- }
223
- return $nodes;
224
- }
225
-
226
- public function setUnbxdConf($site){
227
-
228
- $this->key = Mage::getResourceSingleton("datafeeder/conf")->getValue("apiKey");
229
- $this->feedName = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/feed");
230
- $this->tax = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/tax");
231
- $this->logFile = Mage::getBaseDir('log').DS.substr($site,0,strrpos($site, ".")-1).'unbxdDataFeeder.log';
232
- $this->file = Mage::getBaseDir('tmp').DS.substr($site,0,strrpos($site, ".")-1).'unbxdTaxonomyFeed.xml';
233
- if(!isset($this->key) || $this->key == "" || $this->key == "empty"){
234
- $this->log("api key not set");
235
- return false;
236
- }
237
- if(!isset($this->feedName) || $this->feedName == "" || $this->feedName == "empty"){
238
- $this->log("Feed Name not set");
239
- return false;
240
- }
241
- return true;
242
- }
243
-
244
- public function indexUnbxdFeed($site){
245
-
246
- $this->log('unbxd Datafeeder initiated');
247
- if($this->validateSite($site) == -1){
248
- $this->log("Invalid site Name".$site);
249
- return;
250
- }
251
- if(! $this->setUnbxdConf($site)){
252
- return;
253
- }
254
- if(true){
255
- $action='taxonomyStatus';
256
- $this->updateAction($action,'1');
257
- $status=$this->createFeed($site);
258
-
259
- if($status){
260
- $status=$this->pushFeed();
261
- }
262
- $action='taxonomyStatus';
263
- $this->updateAction($action,'0');
264
-
265
- }
266
- }
267
-
268
-
269
- public function pushFeed(){
270
-
271
- $fields=array('file'=>'@'.$this->file.";filename=unbxdFeedRenamed.xml");
272
- $url="http://feed.unbxdapi.com/taxonomy/upload/".$this->key."/".$this->tax;
273
-
274
-
275
- $ch = curl_init();
276
- curl_setopt($ch, CURLOPT_URL,$url);
277
- curl_setopt($ch,CURLOPT_POST,true);
278
- curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
279
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
280
- try{
281
- $response = curl_exec($ch);
282
- }catch(Exception $Ex){
283
- error_log($Ex->getMessage());
284
- return false;
285
- }
286
- $this->log($response);
287
- return true;
288
-
289
- }
290
-
291
- public function checkStatus()
292
- {
293
- $action='taxonomyStatus';
294
- $collection=Mage::getModel('datafeeder/conf')->getCollection()
295
- ->addFieldToFilter('action',$action);
296
-
297
- $count=0;
298
- foreach($collection as $coll){
299
- $count++;
300
- $value=$coll->getvalue();
301
- }
302
- if($count==0){
303
- $collection=Mage::getModel('datafeeder/conf')
304
- ->setAction($action)->setValue("0")->save();
305
- $value="0";
306
- }
307
- if($value=='0'){
308
- return true;
309
- } else {
310
- return false;
311
- }
312
- }
313
-
314
- public function updateAction($action,$value){
315
- Mage::getResourceSingleton("datafeeder/conf")->updateAction($action, $value);
316
- }
317
- }
318
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Attribute.php DELETED
@@ -1,22 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Attribute{
4
-
5
- $attributeMap = array();
6
- public function getAttributeValue($attributeCode, $label, $product){
7
- if(!isset($this->attributeMap[$label])){
8
- if(!($product instanceof Mage_Catalog_Model_Product)){
9
- return null;
10
- }
11
- $options = $product->getAttribute($attributeCode)
12
- ->getSource()->getAllOptions();
13
- foreach($options as $option){
14
- $this->attributeMap[$option["label"]] = $option["value"];
15
- }
16
- }
17
- return array_key_exists($value, $this->attributeMap)?$this->attributeMap[$value]:NULL;
18
- }
19
-
20
- }
21
-
22
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Conf.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Conf extends Mage_Core_Model_Abstract {
4
-
5
-
6
- protected function _construct()
7
- {
8
- $this->_init('datafeeder/conf');
9
- }
10
- }
11
-
12
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Facet.php DELETED
@@ -1,14 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Facet extends Mage_Core_Model_Abstract {
4
-
5
-
6
- protected function _construct()
7
- {
8
- $this->_init('datafeeder/facet');
9
- }
10
-
11
-
12
- }
13
-
14
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Feed/Feedcreator.php DELETED
@@ -1,321 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Feed_Feedcreator {
4
-
5
- var $fileName;
6
-
7
- var $fields;
8
-
9
- const STATUS = 'status';
10
- const DATA_TYPE = 'data_type';
11
- const AUTOSUGGEST = 'autosuggest';
12
-
13
-
14
- const PAGE_SIZE = 500;
15
- public function __construct(){
16
- }
17
-
18
- public function init($site, $fileName) {
19
- Mage::getSingleton('unbxd_datafeeder/feed_filemanager')->setLog(str_replace(' ', '_',$site)."_Datafeeder.log");
20
- $this->setFields($site);
21
- $this->fileName = $fileName;
22
- }
23
-
24
-
25
- /**
26
- * method to create the feed
27
- **/
28
- public function createFeed($fileName, $fromdate,$todate,$site,$operation,$ids){
29
- $this->init($site, $fileName);
30
- if($this->createFile()){
31
- $this->log("started writing header");
32
-
33
- if(!$this->writeFeedContent($fromdate,$todate,$site,$operation,$ids)){
34
- return false;
35
- }
36
-
37
- } else {
38
- return false;
39
- }
40
- return true;
41
- }
42
-
43
- private function writeFeedContent($fromdate,$todate,$site,$operation,$ids) {
44
- if(!$this->appendTofile('{"feed":')) {
45
- $this->log("Error writing feed tag");
46
- return false;
47
- }
48
-
49
- if(!$this->writeCatalogContent($fromdate,$todate,$site,$operation,$ids)) {
50
- $this->log("Error writing catalog tag");
51
- return false;
52
- }
53
-
54
- if(!$this->appendTofile("}")) {
55
- $this->log("Error writing closing feed tag");
56
- return false;
57
- }
58
-
59
- return true;
60
- }
61
-
62
- private function writeCatalogContent($fromdate,$todate,$site,$operation,$ids) {
63
- if(!$this->appendTofile('{"catalog":{')) {
64
- $this->log("Error writing closing catalog tag");
65
- return false;
66
- }
67
- if(!$this->writeSchemaContent()) {
68
- return false;
69
- }
70
-
71
- if(!$this->appendTofile(",")) {
72
- $this->log("Error while adding comma in catalog");
73
- return false;
74
- }
75
-
76
- if(!$this->writeProductsContent($fromdate,$todate,$site,$operation,$ids)) {
77
- return false;
78
- }
79
-
80
-
81
- if(!$this->appendTofile("}")) {
82
- $this->log("Error writing closing catalog tag");
83
- return false;
84
- }
85
-
86
- if(!$this->writeTaxonomyContents($site)) {
87
- return false;
88
- }
89
-
90
- if(!$this->appendTofile("}")) {
91
- $this->log("Error writing closing feed tag");
92
- return false;
93
- }
94
-
95
-
96
- return true;
97
- }
98
-
99
- private function writeSchemaContent() {
100
- return $this->appendTofile('"schema":'.Mage::getSingleton('unbxd_datafeeder/feed_jsonbuilder_schemabuilder')->getSchema($this->fields));
101
- }
102
-
103
- private function writeProductsContent($fromdate,$todate,$site,$operation,$ids) {
104
-
105
- $collection=$this->getCatalogCollection($fromdate,$todate,$site,$operation,$ids);
106
- // get total size
107
- //set the time limit to infinite
108
- ignore_user_abort(true);
109
- set_time_limit(0);
110
- $pageNum = 0;
111
- $this->log('started writing products');
112
-
113
- if(!$this->appendTofile('"'. $operation . '":{ "items":[')) {
114
- $this->log("Error while adding items tag");
115
- return false;
116
- }
117
-
118
- $firstLoop = true;
119
-
120
- while(true){
121
- $collection->clear();
122
- $collection->getSelect()->limit(self::PAGE_SIZE, ($pageNum++) * self::PAGE_SIZE);
123
- $collection->load();
124
- if(count($collection) == 0){
125
- if($pageNum == 1){
126
- $this->log("No products found");
127
- return false;
128
- }
129
- break;
130
- }
131
-
132
- if(!$firstLoop) {
133
- if(!$this->appendTofile( ',')) {
134
- $this->log("Error while addings items separator");
135
- return false;
136
- }
137
- }
138
- $content=Mage::getSingleton('unbxd_datafeeder/feed_jsonbuilder_productbuilder')->getProducts($collection, $this->fields);
139
- $status=$this->appendTofile($content);
140
- if(!$status){
141
- $this->log("Error while addings items");
142
- return false;
143
- }
144
- $this->log('Added '.($pageNum) * self::PAGE_SIZE.' products');
145
- $firstLoop = false;
146
- }
147
-
148
- if(!$this->appendTofile("]}")) {
149
- $this->log("Error writing closing items tag");
150
- return false;
151
- }
152
-
153
-
154
- $this->log('Added all products');
155
- return true;
156
- }
157
-
158
- private function writeTaxonomyContents($site){
159
-
160
- $collection=$this->getTaxonomyMappingCollection();
161
- // get total size
162
- //set the time limit to infinite
163
- ignore_user_abort(true);
164
- set_time_limit(0);
165
- $pageNum = 0;
166
- $this->log('started writing taxonomy tree');
167
-
168
- if(!$this->appendTofile(',"'. 'taxonomy' . '":{ "tree":[')) {
169
- $this->log("Error while adding tree tag");
170
- return false;
171
- }
172
-
173
- $content=Mage::getSingleton('unbxd_datafeeder/feed_jsonbuilder_taxonomybuilder')->createTaxonomyFeed($site);
174
- $status=$this->appendTofile($content);
175
-
176
- if(!$status){
177
- $this->log("Error while addings taxonomy");
178
- return false;
179
- }
180
-
181
- if(!$this->appendTofile("]")) {
182
- $this->log("Error writing closing tree tag");
183
- return false;
184
- }
185
-
186
- if(!$this->appendTofile(',"mapping":[')) {
187
- $this->log("Error writing opening mapping tag");
188
- return false;
189
- }
190
-
191
- $content=Mage::getSingleton('unbxd_datafeeder/feed_jsonbuilder_taxonomybuilder')->createMappingFeed($collection);
192
- $status=$this->appendTofile($content);
193
-
194
- if(!$status){
195
- $this->log("Error while addings taxonomy");
196
- return false;
197
- }
198
-
199
- if(!$this->appendTofile(']}')) {
200
- $this->log("Error writing closing mapping tag");
201
- return false;
202
- }
203
-
204
-
205
-
206
-
207
-
208
-
209
- $this->log('Added all categories');
210
- return true;
211
- }
212
-
213
-
214
-
215
-
216
- private function setFields($site) {
217
- $this->fields = Mage::getResourceSingleton('datafeeder/field')->getFieldMapping($site, true);
218
- $this->log("fields are set" );
219
- $this->fields["type_id"] = array(self::STATUS => 1,
220
- self::DATA_TYPE => "longText",
221
- self::AUTOSUGGEST => 0 );
222
- $this->fields["entity_id"] = array(self::STATUS => 1,
223
- self::DATA_TYPE => "text",
224
- self::AUTOSUGGEST => 0 );
225
- $this->fields["categoryIds"] = array(self::STATUS => 1,
226
- self::DATA_TYPE => "text",
227
- self::AUTOSUGGEST => 0 );
228
- $this->fields["qty"] = array(self::STATUS => 1,
229
- self::DATA_TYPE => "number",
230
- self::AUTOSUGGEST => 0 );
231
-
232
- $this->fields = array_merge($this->fields, Mage::getResourceSingleton("datafeeder/field")->getFeaturedFields());
233
- }
234
-
235
- /**
236
- * method to get the catalog collection
237
- *
238
- */
239
- public function getCatalogCollection($fromdate,$todate,$site,$operation,$ids) {
240
- try{
241
- if ($operation == "add") {
242
- // select all the attributes
243
- $website =Mage::getModel("core/website")->setName($site);
244
- $visiblityCondition = array('in' => array(4));
245
-
246
- $collection = Mage::getResourceModel('catalog/product_collection')
247
- ->addWebsiteFilter($this->validateSite($site))
248
- ->addAttributeToFilter('status',1)
249
- ->joinField("qty", "cataloginventory_stock_item", 'qty', 'product_id=entity_id', null, 'left')
250
- ->addAttributeToSelect('*')
251
- ->addAttributeToFilter('visibility',$visiblityCondition);
252
-
253
- if(sizeof($ids) > 0){
254
- $condition = array('in' => $ids);
255
- $collection=$collection->addAttributeToFilter('entity_id',$condition);
256
- }
257
- } else {
258
- $collection = Mage::getResourceModel('catalog/product_collection');
259
- if(sizeof($ids) > 0) {
260
- $condition = array('in' => $ids);
261
- $collection= $collection->addAttributeToFilter('entity_id',$condition)->addAttributeToSelect('entity_id');
262
- }
263
- }
264
-
265
- $this->log($collection->getSelect());
266
- return $collection;
267
- } catch(Exception $e) {
268
- $this->log($e->getMessage());
269
- }
270
- }
271
-
272
- /**
273
- * Function to initialize to feed creation process
274
- */
275
- private function createFile(){
276
- return Mage::getSingleton('unbxd_datafeeder/feed_filemanager')->createFile($this->fileName);
277
- }
278
-
279
- private function appendTofile($data){
280
- return Mage::getSingleton('unbxd_datafeeder/feed_filemanager')->appendTofile($this->fileName, $data);
281
- }
282
-
283
- public function log($message) {
284
- Mage::getSingleton('unbxd_datafeeder/feed_filemanager')->log($message);
285
- }
286
-
287
- /**
288
- * method to validate whether the site exists or not
289
- **/
290
- public function validateSite($site){
291
- $sites=Mage::app()->getWebsites();
292
- if( !isset($site) || $site == "") {
293
- return false;
294
- }
295
- foreach( $sites as $eachSite){
296
- if(strcasecmp ( $eachSite->getName(), $site ) == 0 ){
297
- return $eachSite->getWebsiteId();
298
- }
299
- }
300
- return -1;
301
- }
302
-
303
- public function getTaxonomyMappingCollection() {
304
- try{
305
- $adapter = Mage::getSingleton('core/resource')->getConnection('core_read');
306
- $_productCategoryTable = method_exists($_reader, 'getTableName')?$adapter->getTable('catalog_category_product'):'catalog_category_product';
307
- $_productTable = method_exists($_reader, 'getTableName')?$this->getTable('catalog_product_entity'):'catalog_category_product';
308
-
309
- return $adapter->query("select catalog_category_product_index.product_id as entity_id,GROUP_CONCAT(catalog_category_product_index.category_id SEPARATOR ',') as category_id FROM catalog_category_product_index
310
- join catalog_product_entity where catalog_category_product_index.product_id = catalog_product_entity.entity_id
311
- group by catalog_category_product_index.product_id");
312
- }
313
- catch(Exception $e) {
314
- $this->log($e->getMessage());
315
- }
316
-
317
-
318
- }
319
-
320
- }
321
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Feed/Feedmanager.php DELETED
@@ -1,159 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Feed_Feedmanager {
4
-
5
-
6
- /**
7
- * method to push the feed to the Unbxd server
8
- **/
9
- public function pushFeed($site){
10
- $fields=array('file'=>'@'.$this->fileName.';filename=unbxdFeedRenamed.json');
11
- $header = array('Content-Type: multipart/form-data');
12
-
13
- $url="http://feed.unbxdapi.com/upload/v2/".$this->key."/".$this->siteName."?fullimport=true";
14
-
15
- $ch = curl_init();
16
- curl_setopt($ch, CURLOPT_URL,$url);
17
- curl_setopt($ch, CURLOPT_POST,true);
18
- curl_setopt($ch, CURLOPT_POSTFIELDS,$fields);
19
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
20
- try{
21
- $this->log('pushing the feed to '.$url);
22
- // push the feed to the server
23
- $response = $this->exec($ch);
24
- }catch(Exception $Ex){
25
- $this->log($Ex->getMessage());
26
- return false;
27
- }
28
- $this->log(json_encode($response));
29
- curl_close($ch);
30
- return true;
31
- }
32
-
33
- public function exec($ch)
34
- {
35
- $response = curl_exec($ch);
36
- $error = curl_error($ch);
37
- $result = array( 'header' => '',
38
- 'body' => '',
39
- 'curl_error' => '',
40
- 'http_code' => '',
41
- 'last_url' => '');
42
- if ( $error != "" )
43
- {
44
- $result['curl_error'] = $error;
45
- return $result;
46
- }
47
-
48
- $header_size = curl_getinfo($ch,CURLINFO_HEADER_SIZE);
49
- $result['header'] = substr($response, 0, $header_size);
50
- $result['body'] = substr( $response, $header_size );
51
- $result['http_code'] = curl_getinfo($ch,CURLINFO_HTTP_CODE);
52
- $result['last_url'] = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);
53
- return $result;
54
- }
55
-
56
- /**
57
- * method to set the feedName, log, apikey based on site Name
58
- **/
59
- public function init($site)
60
- {
61
- $this->fileName = Mage::getBaseDir('tmp').DS.str_replace(' ', '_',$site). "_Feed.json";
62
- $this->key = Mage::getResourceSingleton("datafeeder/conf")->getValue("apiKey");
63
- $this->siteName = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/siteName");
64
- if(!isset($this->key) || $this->key == "" || $this->key == "empty"){
65
- $this->log("api key not set");
66
- return false;
67
- }
68
- if(!isset($this->siteName) || $this->siteName == "" || $this->siteName == "empty"){
69
- $this->log("site Name not set");
70
- return false;
71
- }
72
- return true;
73
- }
74
-
75
- /**
76
- * method to validate whether the site exists or not
77
- **/
78
- public function validateSite($site){
79
- $sites=Mage::app()->getWebsites();
80
- if( !isset($site) || $site == "") {
81
- return false;
82
- }
83
- foreach( $sites as $eachSite){
84
- if(strcasecmp ( $eachSite->getName(), $site ) == 0 ){
85
- return $eachSite->getWebsiteId();
86
- }
87
- }
88
- return -1;
89
- }
90
-
91
- /**
92
- * method to initiate feed uploading to the unbxd servers
93
- **/
94
- public function process($fromdate,$site,$operation = "add", $ids=array()){
95
-
96
- $this->log('unbxd Datafeeder initiated');
97
- // validatest the site
98
- if($this->validateSite($site) == -1){
99
- $this->log("Invalid site Name".$site);
100
- return;
101
- }
102
- // set the basic
103
- if(! $this->init($site)){
104
- return;
105
- }
106
- $todate =date('Y-m-d H:i:s');
107
-
108
- // check the lock, that if already indexing is happening
109
- if($this->checkSiteLock($site)){
110
- $this->log('site '. $site.' has been locked');
111
- $action=$site.'/status';
112
- // lock the feed
113
- Mage::getResourceSingleton("datafeeder/conf")->updateAction($action,'1');
114
- // create the feed
115
-
116
- $status=Mage::getSingleton('unbxd_datafeeder/feed_feedcreator')
117
- ->createFeed($this->fileName, $fromdate,$todate,$site,$operation,$ids);
118
- $this->log('unbxd Datafeeder finished creating file');
119
-
120
- if($status){
121
- try{
122
- // if successful push it to unbxd servers
123
- $status=$this->pushFeed($site);
124
- }catch(Exception $e){
125
- $this->log($e->getMessage());
126
-
127
- }
128
- if($status){
129
- Mage::getResourceSingleton("datafeeder/conf")->updateAction('Lastindex',$todate);
130
- }
131
- }
132
- // unlock the feed once everything is completed
133
- Mage::getResourceSingleton("datafeeder/conf")->updateAction($action,'0');
134
- $this->log('site '. $site.' has been unlocked');
135
- } else {
136
- $this->log('Feed Uploading failed because site has been locked');
137
- }
138
- }
139
-
140
- /**
141
- * method to check the status of the uploading
142
- **/
143
- public function checkSiteLock($site)
144
- {
145
- $value = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/status");
146
- if($value == '0' || $value == 'empty'){
147
- $this->log("true");
148
- return true;
149
- }else{
150
- $this->log("false". $value);
151
- return false;
152
- }
153
- }
154
-
155
- public function log($message) {
156
- Mage::getSingleton('unbxd_datafeeder/feed_filemanager')->log($message);
157
- }
158
- }
159
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Feed/Jsonbuilder/Jsonbuilder.php DELETED
@@ -1,9 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Jsonbuilder {
4
-
5
-
6
-
7
- }
8
-
9
- ?>
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Feed/Jsonbuilder/Schemabuilder.php DELETED
@@ -1,51 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Schemabuilder extends Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Jsonbuilder {
4
-
5
-
6
- const SCHEMA = 'schema';
7
- const FIELD_NAME = "fieldName";
8
- const DATA_TYPE = "dataType";
9
- const MULTIVALUED = "multiValued";
10
- const AUTOSUGGEST = "autoSuggest";
11
- const TRUE = "true";
12
- const FALSE = "false";
13
-
14
- const FIELD_STATUS = 'status';
15
- const FIELD_DATA_TYPE = 'data_type';
16
- const FIELD_AUTOSUGGEST = 'autosuggest';
17
-
18
- public function getSchema($fields) {
19
- $jsonString = "";
20
- $fieldList = array();
21
- $featuredFields = Mage::getResourceSingleton("datafeeder/field")->getFeaturedFields();
22
- $conflictedFeatureFields = Mage::getResourceSingleton("datafeeder/field")->getConflictedFeatureFieldLust();
23
- foreach($fields as $fieldName=>$values ) {
24
- if((array_key_exists(self::FIELD_STATUS, $values) && $values[self::FIELD_STATUS] == 1)
25
- || !array_key_exists($fieldName, $featuredFields)) {
26
- $origFieldName = $fieldName;
27
- if($fieldName[0] == "_") {
28
- $origFieldName = (in_array(substr($fieldName, 1, strlen($fieldName)), $conflictedFeatureFields))
29
- ? substr($fieldName, 1, strlen($fieldName))
30
- : $fieldName;
31
- }
32
- $fieldList[] = array(self::FIELD_NAME => $fieldName,
33
- self::DATA_TYPE => $values[self::FIELD_DATA_TYPE],
34
- self::MULTIVALUED => ($this->endsWith($fieldName, "Associated")?self::TRUE:(Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper')
35
- ->isMultiSelect($origFieldName)?
36
- self::TRUE:self::FALSE)),
37
- self::AUTOSUGGEST => ($values[self::FIELD_AUTOSUGGEST] == 1?
38
- self::TRUE: self::FALSE));
39
- }
40
- }
41
- return json_encode($fieldList);
42
- }
43
-
44
-
45
- function endsWith($haystack, $needle)
46
- {
47
- return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
48
- }
49
- }
50
-
51
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Field.php DELETED
@@ -1,11 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Field extends Mage_Core_Model_Abstract {
4
-
5
- protected function _construct()
6
- {
7
- $this->_init('datafeeder/field');
8
- }
9
- }
10
-
11
- ?>
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Mysql4/Conf.php DELETED
@@ -1,47 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Mysql4_Conf extends Mage_Core_Model_Mysql4_Abstract
4
- {
5
- protected function _construct()
6
- {
7
- $this->_init('datafeeder/conf', 'uconfig_id');
8
- }
9
-
10
- public function getValue($action)
11
- {
12
- $collection=Mage::getModel('datafeeder/conf')->getCollection()
13
- ->addFieldToFilter('action',$action);
14
-
15
- $count=0;
16
- foreach($collection as $coll){
17
- $count++;
18
- $value=$coll->getvalue();
19
- }
20
- if($count==0){
21
- $collection=Mage::getModel('datafeeder/conf')
22
- ->setAction($action)->setValue("empty")->save();
23
- $value="empty";
24
- }
25
- return $value;
26
- }
27
-
28
- public function updateAction($action,$value)
29
- {
30
- if (!isset($value) || $value == "") {
31
- return;
32
- }
33
- $collection=Mage::getModel('datafeeder/conf')->getCollection()
34
- ->addFieldToFilter('action',$action);
35
-
36
- $count=0;
37
- foreach($collection as $coll){
38
- $count++;
39
- Mage::getModel('datafeeder/conf')->load($coll->getId())->setValue($value)->save();
40
- }
41
- if($count==0){
42
- $collection=Mage::getModel('datafeeder/conf')
43
- ->setAction($action)->setValue($value)->save();
44
- }
45
- }
46
- }
47
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Mysql4/Conf/Collection.php DELETED
@@ -1,16 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Mysql4_Conf_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
4
- {
5
-
6
- public function _construct()
7
- {
8
- $this->_init('datafeeder/conf');
9
- }
10
-
11
- }
12
-
13
-
14
-
15
-
16
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Mysql4/Field.php DELETED
@@ -1,192 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Mysql4_Field extends Mage_Core_Model_Mysql4_Abstract
4
- {
5
-
6
- const STATUS = 'status';
7
- const DATA_TYPE = 'data_type';
8
- const SITE = 'site';
9
- const FIELD_NAME = "name";
10
- const TABLE_NAME = 'unbxd_field';
11
- const AUTOSUGGEST = 'autosuggest';
12
- const MULTIVALUED = 'multiValued';
13
- const IMAGE_HEIGHT = "image_height";
14
- const IMAGE_WIDTH = "image_width";
15
- const GENERATE_IMAGE = "generate_image";
16
-
17
- protected function _construct()
18
- {
19
- $this->_init('datafeeder/field', 'field_id');
20
- }
21
-
22
- /*
23
- * Method to get Unbxd Fields Configuration as Mapping give the site
24
- */
25
- public function getFieldMapping($site, $enabledFields = false) {
26
- $results = Mage::getModel('datafeeder/field')->getCollection()->addFieldToFilter(self::SITE, $site);
27
- $fieldMapping = array();
28
- $_reader = Mage::getSingleton('core/resource')->getConnection('core_read');
29
- if(method_exists($_reader, 'getTableName')) {
30
- $table = $_reader->getTableName(self::TABLE_NAME);
31
- } else {
32
- $table = self::TABLE_NAME;
33
- }
34
- $select = $_reader->select();
35
- $select->from($table);
36
- $filterCond = self::SITE . " = '" . $site . "'";
37
- if($enabledFields) {
38
- $filterCond = $filterCond . " AND " . self::STATUS ."='1'";
39
- }
40
-
41
- $select->where($filterCond);
42
- $results = $_reader->fetchAll($select);
43
-
44
- foreach($results as $eachResult) {
45
- $fieldMapping[$eachResult[self::FIELD_NAME]] = array(self::STATUS => $eachResult[self::STATUS],
46
- self::DATA_TYPE => $eachResult[self::DATA_TYPE],
47
- self::AUTOSUGGEST => $eachResult[self::AUTOSUGGEST],
48
- self::IMAGE_HEIGHT =>$eachResult[self::IMAGE_HEIGHT],
49
- self::IMAGE_WIDTH => $eachResult[self::IMAGE_WIDTH],
50
- self::GENERATE_IMAGE =>$eachResult[self::GENERATE_IMAGE]
51
- );
52
- }
53
- return $fieldMapping;
54
- }
55
-
56
- /**
57
- * Returns the fields as an array of field Name to value
58
- **/
59
- public function getFields($site) {
60
- $fieldMapping = $this->getFieldMapping($site);
61
- $deltaUpdate = array();
62
- $attributes = Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper')->getAttributes();
63
- $escapedFields = $this->getConflictedFeatureFieldLust();
64
- foreach($attributes as $attribute){
65
- $fieldName = $attribute->getAttributeCode();
66
-
67
- if (in_array($fieldName, $escapedFields)) {
68
- $fieldName = "_".$fieldName;
69
- }
70
- if (!array_key_exists($fieldName, $fieldMapping)) {
71
- $deltaUpdate[$fieldName] = array(self::STATUS => 1, self::DATA_TYPE => 'longText');
72
- $fieldMapping[$fieldName] = array(self::STATUS => 1,
73
- self::DATA_TYPE => 'longText',
74
- self::AUTOSUGGEST => 1,
75
- self::IMAGE_HEIGHT => 0,
76
- self::IMAGE_WIDTH =>0,
77
- self::GENERATE_IMAGE =>0);
78
- }
79
- if(!array_key_exists($fieldName."Associated", $fieldMapping)) {
80
- $deltaUpdate[$fieldName."Associated"] = array(self::STATUS => 0, self::DATA_TYPE => 'longText');
81
- $fieldMapping[$fieldName."Associated"] = array(self::STATUS => 0,
82
- self::DATA_TYPE => 'longText',
83
- self::AUTOSUGGEST => 1,
84
- self::IMAGE_HEIGHT => 0,
85
- self::IMAGE_WIDTH =>0,
86
- self::GENERATE_IMAGE =>0);
87
- }
88
- }
89
- if(sizeof($deltaUpdate) > 0) {
90
- $this->saveField($deltaUpdate, $site);
91
- }
92
- return $fieldMapping;
93
- }
94
-
95
- /*
96
- * update fields
97
- */
98
- public function updateFields($fieldMapping, $site) {
99
- $write = Mage::getSingleton('core/resource')->getConnection('core_write');
100
- if(method_exists($write, 'getTableName')) {
101
- $table = $write->getTableName(self::TABLE_NAME);
102
- } else {
103
- $table = self::TABLE_NAME;
104
- }
105
- foreach($fieldMapping as $fieldName=>$values) {
106
- $values = json_decode($values, true);
107
- if (!isset($values[self::STATUS]) || !isset($values[self::DATA_TYPE]) ||
108
- !($values[self::STATUS] == 0 || $values[self::STATUS] == 1)) {
109
- throw new Exception("Invalid data with field " . $fieldName);
110
- }
111
- $updateQuery = 'UPDATE `'. $table .'` set '.
112
- self::STATUS ." = '".$values[self::STATUS]."' , ".
113
- self::DATA_TYPE." = '". $values[self::DATA_TYPE]."' , ".
114
- self::AUTOSUGGEST." = '". $values[self::AUTOSUGGEST]."' , ".
115
- self::IMAGE_HEIGHT." = '". (is_int($values[self::IMAGE_HEIGHT])?$values[self::IMAGE_HEIGHT]:0) ."' , ".
116
- self::IMAGE_WIDTH ." = '". (is_int($values[self::IMAGE_WIDTH])?$values[self::IMAGE_WIDTH]:0)."' , ".
117
- self::GENERATE_IMAGE." = '".$values[self::GENERATE_IMAGE]."' ".
118
- ' where '.self::SITE . "='". $site . "' AND " . self::FIELD_NAME . "='".$fieldName."'";
119
- $write->query($updateQuery);
120
- }
121
- }
122
-
123
- /*
124
- * method to save the fieldMapping information
125
- */
126
- public function saveField($fieldMapping, $site) {
127
- $write = Mage::getSingleton('core/resource')->getConnection('core_write');
128
- $insertingRequestArray = array();
129
- foreach($fieldMapping as $field=>$value) {
130
- $insertingRequest = array();
131
- $insertingRequest[self::FIELD_NAME] = $field;
132
- $insertingRequest[self::STATUS] = $value[self::STATUS];
133
- $insertingRequest[self::SITE] = $site;
134
- $insertingRequest[self::DATA_TYPE] = $value[self::DATA_TYPE];
135
- $insertingRequest[self::AUTOSUGGEST] = $value[self::AUTOSUGGEST];
136
- $insertingRequest[self::IMAGE_HEIGHT] = $value[self::IMAGE_HEIGHT];
137
- $insertingRequest[self::IMAGE_WIDTH] = $value[self::IMAGE_WIDTH];
138
- $insertingRequest[self::GENERATE_IMAGE] = $value[self::GENERATE_IMAGE];
139
- $insertingRequestArray[] = $insertingRequest;
140
- }
141
- if(method_exists($write, 'getTableName')) {
142
- $table = $write->getTableName(self::TABLE_NAME);
143
- } else {
144
- $table = self::TABLE_NAME;
145
- }
146
-
147
- $write->insertMultiple($table, $insertingRequestArray);
148
- }
149
-
150
- /*
151
- * method to get the featured fields
152
- */
153
- public function getFeaturedFields() {
154
- $featuredFields = array();
155
- $featuredFields["uniqueId"]=$this->getField("text", "false", "false");
156
- $featuredFields["sellingPrice"]=$this->getField("decimal", "false", "false");
157
- $featuredFields["discount"]=$this->getField("decimal", "false", "false");
158
- $featuredFields["rating"]=$this->getField("decimal", "false", "false");
159
- $featuredFields["brandId"]=$this->getField("text", "false", "false");
160
- $featuredFields["catlevel1Name"]=$this->getField("text", "false", "false");
161
- $featuredFields["catlevel2Name"]=$this->getField("text", "false", "false");
162
- $featuredFields["catlevel3Name"]=$this->getField("text", "false", "false");
163
- $featuredFields["catlevel4Name"]=$this->getField("text", "false", "false");
164
- $featuredFields["category"]=$this->getField("text", "true", "true");
165
- $featuredFields["subCategory"]=$this->getField("text", "true", "true");
166
- $featuredFields["color"]=$this->getField("text", "true", "false");
167
- $featuredFields["size"]=$this->getField("text", "true", "false");
168
- $featuredFields["availability"]=$this->getField("bool", "false", "false");
169
- $featuredFields["description"]=$this->getField("longText", "false", "false");
170
- $featuredFields["imageUrl"]=$this->getField("link", "true", "false");
171
- $featuredFields["productUrl"]=$this->getField("link", "false", "false");
172
- $featuredFields["brand"]=$this->getField("text", "false", "true");
173
- $featuredFields["price"]=$this->getField("decimal", "false", "false");
174
- $featuredFields["title"]=$this->getField("text", "false", "true");
175
- $featuredFields["gender"]=$this->getField("text", "false", "false");
176
- $featuredFields["unbxdVisibility"]=$this->getField("text", "false", "false");
177
- return $featuredFields;
178
- }
179
-
180
- public function getField($dataType, $multiValued, $autosuggest) {
181
- return array( self::DATA_TYPE => $dataType,
182
- self::MULTIVALUED => ($multiValued=="true")?1:0,
183
- self::AUTOSUGGEST => ($autosuggest=="true")?1:0 );
184
-
185
- }
186
-
187
-
188
- public function getConflictedFeatureFieldLust() {
189
- return array('gender');
190
- }
191
- }
192
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Mysql4/Field/Collection.php DELETED
@@ -1,16 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Mysql4_Field_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
4
- {
5
-
6
- public function _construct()
7
- {
8
- $this->_init('datafeeder/field');
9
- }
10
-
11
- }
12
-
13
-
14
-
15
-
16
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Mysql4/Resource/Attribute.php DELETED
@@ -1,22 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_Model_Resource_Attribute{
4
-
5
- $attributeMap = array();
6
- public function getAttributeValue($attributeCode, $label, $product){
7
- if(!isset($this->attributeMap[$label])){
8
- if(!($product instanceof Mage_Catalog_Model_Product)){
9
- return null;
10
- }
11
- $options = $product->getAttribute($attributeCode)
12
- ->getSource()->getAllOptions();
13
- foreach($options as $option){
14
- $this->attributeMap[$option["label"]] = $option["value"];
15
- }
16
- }
17
- return $this->attributeMap[$label];
18
- }
19
-
20
- }
21
-
22
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/Model/Mysql4/Upgrade.php DELETED
@@ -1,37 +0,0 @@
1
- <?php
2
- class Unbxd_Datafeeder_Model_Mysql4_Upgrade {
3
-
4
- public function upgrade010To105() {
5
- $write = Mage::getSingleton('core/resource')->getConnection('core_write');
6
- $unbxdFieldTable = $write->getTableName('unbxd_field');
7
- $unbxdConfTable = $write->getTableName('unbxd_datafeeder_conf');
8
- $write->query("
9
- DROP TABLE IF EXISTS `{$unbxdFieldTable}`;
10
-
11
- CREATE TABLE `{$unbxdFieldTable}` (
12
- `field_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
13
- `name` varchar(100) NOT NULL DEFAULT '',
14
- `status` int(1) NOT NULL DEFAULT '1',
15
- `site` varchar(100) NOT NULL DEFAULT '',
16
- `data_type` varchar(20) NOT NULL DEFAULT 'longText',
17
- `autosuggest` int(1) NOT NULL DEFAULT '0',
18
- `image_height` int(5) NOT NULL DEFAULT '0',
19
- `image_width` int(5) NOT NULL DEFAULT '0',
20
- `generate_image` int(1) NOT NULL DEFAULT '0',
21
- PRIMARY KEY (`field_id`)
22
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
23
-
24
- DROP TABLE IF EXISTS `{$unbxdConfTable}`;
25
-
26
- CREATE TABLE `{$unbxdConfTable}` (
27
- `uconfig_id` int(10) unsigned NOT NULL auto_increment,
28
- `action` varchar(255) NOT NULL default '',
29
- `value` varchar(255),
30
- PRIMARY KEY (`uconfig_id`)
31
-
32
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
33
- ");
34
- }
35
-
36
- }
37
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/controllers/ConfigController.php DELETED
@@ -1,80 +0,0 @@
1
- <?php
2
- class Unbxd_Datafeeder_ConfigController extends Mage_Core_Controller_Front_Action
3
- {
4
-
5
- public function indexAction(){
6
- $fromdate="1970-01-01 00:00:00";
7
- $site=$this->getRequest()->getParam("site");
8
- Mage::getSingleton('unbxd_datafeeder/feed_feedmanager')->process($fromdate,$site);
9
- echo "Done";
10
- }
11
-
12
- /**
13
- * gets all the stores
14
- */
15
- public function getAllstoreAction(){
16
-
17
- $allStores = Mage::app()->getStores();
18
-
19
- foreach ($allStores as $_eachStoreId => $val)
20
- {
21
- $_storeCode = Mage::app()->getStore($_eachStoreId)->getCode();
22
- $_storeName = Mage::app()->getStore($_eachStoreId)->getName();
23
- $_storeId = Mage::app()->getStore($_eachStoreId)->getId();
24
- echo $_storeId."<br/>";
25
- echo $_storeCode."<br/>";
26
- echo $_storeName."<br/>";
27
- }
28
- $allsites=Mage::app()->getWebsites();
29
- foreach($allsites as $site){
30
- echo $site->getName();
31
- }
32
- }
33
-
34
- /**
35
- * resets the lock if the feed has been locked
36
- **/
37
- public function resetAction(){
38
- $site=$this->getRequest()->getParam("site");
39
- Mage::getResourceSingleton("datafeeder/conf")->updateAction($site.'/status','0');
40
- $this->getResponse()->setBody("success");
41
- $this->getResponse()->setHttpResponseCode(200);
42
- }
43
-
44
- public function getstoreviewAction(){
45
-
46
- echo gettype(Mage::getModel('datafeeder/field'));
47
- $collection= Mage::getModel("datafeeder/field")->getCollection();
48
- foreach($collection as $coll){
49
- echo $coll->getName();
50
- }
51
- }
52
-
53
- public function progressAction()
54
- {
55
- $site = $this->getRequest()->getParam("site");
56
- $status = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/status");
57
- if($status == 'empty'){
58
- $status = '0';
59
- }
60
- echo '{"status":"'.$status.'"}';
61
- }
62
-
63
- public function getfeedconfAction(){
64
- $site = $this->getRequest()->getParam("site");
65
- if(isset($site) && $site != ""){
66
- $response = array();
67
- $response["feed"] = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/feed");
68
- $response["tax"] = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/tax");
69
- $response["siteName"] = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/siteName");
70
- echo json_encode($response);
71
- }
72
- }
73
-
74
- public function upgradedbAction() {
75
- Mage::getResourceSingleton("datafeeder/upgrade")->upgrade010To105();
76
- echo json_encode( array('success' => 'true' ));
77
- }
78
- }
79
- ?>
80
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/controllers/FieldController.php DELETED
@@ -1,52 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_FieldController extends Mage_Core_Controller_Front_Action
4
- {
5
-
6
- const FIELD_MODEL = 'datafeeder/field';
7
-
8
- public function configAction() {
9
- $site=$this->getRequest()->getParam("site");
10
- if(!isset($site)){
11
- echo '{"failed": "no site sent"}';
12
- return;
13
- }
14
- $fields = Mage::getResourceSingleton(self::FIELD_MODEL)->getFields($site);
15
- foreach ($fields as $field => $value) {
16
- if (Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper')->isImage($field)) {
17
-
18
- $value["is_image"] = "true";
19
- $fields[$field] = $value;
20
- }
21
- }
22
- echo json_encode($fields);
23
- }
24
-
25
- public function saveAction()
26
- {
27
- $params=$this->getRequest()->getParams();
28
- if(!isset($params) || count($params) == 0) {
29
- echo json_encode(array("success"=>"false", "message"=>"No Fields Passed"));
30
- return;
31
- }
32
- $singleProductData = json_decode(reset($params), true);
33
- if(!isset($singleProductData)) {
34
- echo json_encode(array("success"=>"false", "message"=>"Improper Data format"));
35
- return;
36
- }
37
- $site = $singleProductData["site_name"];
38
- if (!isset($site)) {
39
- echo json_encode(array("success"=>"false", "message"=>"site needed"));
40
- return;
41
- }
42
- try {
43
- $fields = Mage::getResourceSingleton(self::FIELD_MODEL)->updateFields($params,$site);
44
- } catch(Exception $ex) {
45
- error_log($ex->getMessage());
46
- echo json_encode(array("success"=>"false", "message" => $ex));
47
- return;
48
- }
49
- echo json_encode(array("success"=>"true"));
50
- }
51
- }
52
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/controllers/IndexController.php DELETED
@@ -1,61 +0,0 @@
1
- <?php
2
-
3
- class Unbxd_Datafeeder_IndexController extends Mage_Adminhtml_Controller_Action {
4
-
5
- protected function _getSession()
6
- {
7
- return Mage::getSingleton('catalog/session');
8
- }
9
-
10
- public function saveapiAction()
11
- {
12
- Mage::getResourceSingleton("datafeeder/conf")->updateAction("apiKey", $this->getRequest()->getparam("apikey"));
13
- $this->loadLayout();
14
- $this->_addContent($this->getLayout()->createBlock('unbxd_datafeeder/index')->setTemplate('datafeeder/conf.phtml'));
15
- $this->renderLayout();
16
- }
17
-
18
- public function savefeedconfAction(){
19
- Mage::getResourceSingleton("datafeeder/conf")->updateAction($this->getRequest()->getparam("site")."/feed", $this->getRequest()->getparam("feedName"));
20
- Mage::getResourceSingleton("datafeeder/conf")->updateAction($this->getRequest()->getparam("site")."/tax", $this->getRequest()->getparam("feedName"));
21
- Mage::getResourceSingleton("datafeeder/conf")->updateAction($this->getRequest()->getparam("site")."/siteName", $this->getRequest()->getparam("siteName"));
22
-
23
- $this->loadLayout();
24
- $this->_addContent($this->getLayout()->createBlock('unbxd_datafeeder/index')->setTemplate('datafeeder/conf.phtml'));
25
- $this->renderLayout();
26
- }
27
-
28
- public function indexAction()
29
- {
30
- $this->loadLayout();
31
- $this->_addContent($this->getLayout()->createBlock('unbxd_datafeeder/index')->setTemplate('datafeeder/conf.phtml'));
32
- $this->renderLayout();
33
- }
34
-
35
- public function fullindexAction(){
36
- $_helper=Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper');
37
- $fromdate="1970-01-01 00:00:00";
38
- $site=$this->getRequest()->getPost("site");
39
- //$_helper->indexUnbxdFeed($fromdate,$site);
40
- Mage::getSingleton('unbxd_datafeeder/feed_feedmanager')->process($fromdate,$site);
41
- echo "Done";
42
- }
43
-
44
- public function taxonomyindexAction(){
45
- $_helper=Mage::helper('unbxd_datafeeder/UnbxdTaxonomyHelper');
46
- $site=$this->getRequest()->getPost("site");
47
- $_helper->indexUnbxdFeed($site);
48
- }
49
-
50
- public function incrementalindexAction()
51
- {
52
- $_helper=Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper');
53
- $fromdate=Mage::getResourceSingleton("datafeeder/conf")->getValue("Lastindex");
54
- if(is_null($fromdate)){
55
- $fromdate="1970-01-01 00:00:00";
56
- }
57
- $site=$this->getRequest()->getPost("site");
58
- $_helper->indexUnbxdFeed($fromdate,$site);
59
- echo "Done";
60
- }
61
- } ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/etc/adminhtml.xml DELETED
@@ -1,16 +0,0 @@
1
- <?xml version="1.0"?>
2
- <config>
3
- <menu>
4
- <unbxd_datafeeder translate="title" module="unbxd_datafeeder">
5
- <title>Unbxd</title>
6
- <sort_order>30</sort_order>
7
- <children>
8
- <upload translate="title" module="unbxd_datafeeder">
9
- <title>Upload Configuration</title>
10
- <sort_order>11</sort_order>
11
- <action>datafeeder/index/index</action>
12
- </upload>
13
- </children>
14
- </unbxd_datafeeder>
15
- </menu>
16
- </config>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/etc/config.xml DELETED
@@ -1,119 +0,0 @@
1
- <?xml version="1.0"?>
2
- <config>
3
- <modules>
4
- <Unbxd_Datafeeder>
5
- <version>1.0.5</version>
6
- </Unbxd_Datafeeder>
7
- </modules>
8
- <frontend>
9
- <routers>
10
- <datafeeder>
11
- <use>standard</use>
12
- <args>
13
- <module>Unbxd_Datafeeder</module>
14
- <frontName>datafeeder</frontName>
15
- </args>
16
- </datafeeder>
17
- </routers>
18
- </frontend>
19
- <global>
20
- <models>
21
- <unbxd_datafeeder>
22
- <class>Unbxd_Datafeeder_Model</class>
23
- <resourceModel>unbxd_datafeeder_resource</resourceModel>
24
- </unbxd_datafeeder>
25
- <unbxd_datafeeder_resource>
26
- <class>Unbxd_Datafeeder_Model_Resource</class>
27
- </unbxd_datafeeder_resource>
28
- </models>
29
- <blocks>
30
- <unbxd_datafeeder>
31
- <class>Unbxd_Datafeeder_Block</class>
32
- </unbxd_datafeeder>
33
- </blocks>
34
- </global>
35
- <global>
36
- <helpers>
37
- <unbxd_datafeeder>
38
- <class>Unbxd_Datafeeder_Helper</class>
39
- </unbxd_datafeeder>
40
- </helpers>
41
- </global>
42
- <admin>
43
- <routers>
44
- <unbxd_router>
45
- <use>admin</use>
46
- <args>
47
- <module>Unbxd_Datafeeder</module>
48
- <frontName>datafeeder</frontName>
49
- </args>
50
- </unbxd_router>
51
- </routers>
52
- </admin>
53
- <adminhtml>
54
- <!-- The <layout> updates allow us to define our block layouts in a separate file so are aren't messin' with the Magento layout files. -->
55
- <layout>
56
- <updates>
57
- <unbxd_datafeeder>
58
- <file>unbxd_datafeeder.xml</file>
59
- </unbxd_datafeeder>
60
- </updates>
61
- </layout>
62
- <!-- The <acl> section is for access control. Here we define the pieces where access can be controlled within a role. -->
63
- <acl>
64
- <resources>
65
- <admin>
66
- <children>
67
- <unbxd_datafeeder>
68
- <title>Unbxd Menu Item</title>
69
- <children>
70
- <example translate="title" module="unbxd_datafeeder">
71
- <title>Example Menu Item</title>
72
- </example>
73
- </children>
74
- </unbxd_datafeeder>
75
- </children>
76
- </admin>
77
- </resources>
78
- </acl>
79
- </adminhtml>
80
- <global>
81
- <models>
82
- <datafeeder>
83
- <class>Unbxd_Datafeeder_Model</class>
84
- <resourceModel>datafeeder_mysql4</resourceModel>
85
- </datafeeder>
86
- <datafeeder_mysql4>
87
- <class>Unbxd_Datafeeder_Model_Mysql4</class>
88
- <entities>
89
- <conf>
90
- <table>unbxd_datafeeder_conf</table>
91
- </conf>
92
- <field>
93
- <table>unbxd_field</table>
94
- </field>
95
- </entities>
96
- </datafeeder_mysql4>
97
- </models>
98
- <resources>
99
- <datafeeder_setup>
100
- <setup>
101
- <module>Unbxd_Datafeeder</module>
102
- </setup>
103
- <connection>
104
- <use>core_setup</use>
105
- </connection>
106
- </datafeeder_setup>
107
- <datafeeder_write>
108
- <connection>
109
- <use>core_write</use>
110
- </connection>
111
- </datafeeder_write>
112
- <datafeeder_read>
113
- <connection>
114
- <use>core_read</use>
115
- </connection>
116
- </datafeeder_read>
117
- </resources>
118
- </global>
119
- </config>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/scripts/Cron.php DELETED
@@ -1,25 +0,0 @@
1
- <?php
2
- require_once 'abstract.php';
3
-
4
- class Unbxd_Datafeeder_Scripts_Cron extends Mage_Shell_Abstract
5
- {
6
-
7
- public function _getIndexer()
8
- {
9
- return Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper');
10
- }
11
-
12
- public function run(){
13
- $_helper = _getIndexer();
14
- $fromdate="1970-01-01 00:00:00";
15
- $site='Main Site';
16
-
17
- $_helper->indexUnbxdFeed($fromdate,$site);
18
- }
19
-
20
- }
21
-
22
-
23
- $shell = new Unbxd_Datafeeder_Scripts_Cron();
24
- $shell->run();
25
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/scripts/abstract.php DELETED
@@ -1,218 +0,0 @@
1
- <?php
2
- /**
3
- * Magento
4
- *
5
- * NOTICE OF LICENSE
6
- *
7
- * This source file is subject to the Open Software License (OSL 3.0)
8
- * that is bundled with this package in the file LICENSE.txt.
9
- * It is also available through the world-wide-web at this URL:
10
- * http://opensource.org/licenses/osl-3.0.php
11
- * If you did not receive a copy of the license and are unable to
12
- * obtain it through the world-wide-web, please send an email
13
- * to license@magentocommerce.com so we can send you a copy immediately.
14
- *
15
- * DISCLAIMER
16
- *
17
- * Do not edit or add to this file if you wish to upgrade Magento to newer
18
- * versions in the future. If you wish to customize Magento for your
19
- * needs please refer to http://www.magentocommerce.com for more information.
20
- *
21
- * @category Mage
22
- * @package Mage_Shell
23
- * @copyright Copyright (c) 2009 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
24
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
- */
26
-
27
- /**
28
- * Shell scripts abstract class
29
- *
30
- * @category Mage
31
- * @package Mage_Shell
32
- * @author Magento Core Team <core@magentocommerce.com>
33
- */
34
- abstract class Mage_Shell_Abstract
35
- {
36
- /**
37
- * Is include Mage and initialize application
38
- *
39
- * @var bool
40
- */
41
- protected $_includeMage = true;
42
-
43
- /**
44
- * Magento Root path
45
- *
46
- * @var string
47
- */
48
- protected $_rootPath;
49
-
50
- /**
51
- * Initialize application with code (store, website code)
52
- *
53
- * @var string
54
- */
55
- protected $_appCode = 'admin';
56
-
57
- /**
58
- * Initialize application code type (store, website, store_group)
59
- *
60
- * @var string
61
- */
62
- protected $_appType = 'store';
63
-
64
- /**
65
- * Input arguments
66
- *
67
- * @var array
68
- */
69
- protected $_args = array();
70
-
71
- /**
72
- * Initialize application and parse input parameters
73
- *
74
- */
75
- public function __construct()
76
- {
77
- if ($this->_includeMage) {
78
- require_once $this->_getRootPath() . 'app' . DIRECTORY_SEPARATOR . 'Mage.php';
79
- Mage::app($this->_appCode, $this->_appType);
80
- }
81
-
82
- $this->_applyPhpVariables();
83
- $this->_parseArgs();
84
- $this->_construct();
85
- $this->_validate();
86
- $this->_showHelp();
87
- }
88
-
89
- /**
90
- * Get Magento Root path (with last directory separator)
91
- *
92
- * @return string
93
- */
94
- protected function _getRootPath()
95
- {
96
- if (is_null($this->_rootPath)) {
97
- $this->_rootPath = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR;
98
- }
99
- return $this->_rootPath;
100
- }
101
-
102
- /**
103
- * Parse .htaccess file and apply php settings to shell script
104
- *
105
- */
106
- protected function _applyPhpVariables()
107
- {
108
- $htaccess = $this->_getRootPath() . '.htaccess';
109
- if (file_exists($htaccess)) {
110
- // parse htaccess file
111
- $data = file_get_contents($htaccess);
112
- $matches = array();
113
- preg_match_all('#^\s+?php_value\s+([a-z_]+)\s+(.+)$#siUm', $data, $matches, PREG_SET_ORDER);
114
- if ($matches) {
115
- foreach ($matches as $match) {
116
- @ini_set($match[1], str_replace("\r", '', $match[2]));
117
- }
118
- }
119
- preg_match_all('#^\s+?php_flag\s+([a-z_]+)\s+(.+)$#siUm', $data, $matches, PREG_SET_ORDER);
120
- if ($matches) {
121
- foreach ($matches as $match) {
122
- @ini_set($match[1], str_replace("\r", '', $match[2]));
123
- }
124
- }
125
- }
126
- }
127
-
128
- /**
129
- * Parse input arguments
130
- *
131
- * @return Mage_Shell_Abstract
132
- */
133
- protected function _parseArgs()
134
- {
135
- $current = null;
136
- foreach ($_SERVER['argv'] as $arg) {
137
- $match = array();
138
- if (preg_match('#^--([\w\d_-]{1,})$#', $arg, $match) || preg_match('#^-([\w\d_]{1,})$#', $arg, $match)) {
139
- $current = $match[1];
140
- $this->_args[$current] = true;
141
- } else {
142
- if ($current) {
143
- $this->_args[$current] = $arg;
144
- } else if (preg_match('#^([\w\d_]{1,})$#', $arg, $match)) {
145
- $this->_args[$match[1]] = true;
146
- }
147
- }
148
- }
149
- return $this;
150
- }
151
-
152
- /**
153
- * Additional initialize instruction
154
- *
155
- * @return Mage_Shell_Abstract
156
- */
157
- protected function _construct()
158
- {
159
- return $this;
160
- }
161
-
162
- /**
163
- * Validate arguments
164
- *
165
- */
166
- protected function _validate()
167
- {
168
- if (isset($_SERVER['REQUEST_METHOD'])) {
169
- die('This script cannot be run from Browser. This is the shell script.');
170
- }
171
- }
172
-
173
- /**
174
- * Run script
175
- *
176
- */
177
- abstract public function run();
178
-
179
- /**
180
- * Check is show usage help
181
- *
182
- */
183
- protected function _showHelp()
184
- {
185
- if (isset($this->_args['h']) || isset($this->_args['help'])) {
186
- die($this->usageHelp());
187
- }
188
- }
189
-
190
- /**
191
- * Retrieve Usage Help Message
192
- *
193
- */
194
- public function usageHelp()
195
- {
196
- return <<<USAGE
197
- Usage: php -f script.php -- [options]
198
-
199
- -h Short alias for help
200
- help This help
201
- USAGE;
202
- }
203
-
204
- /**
205
- * Retrieve argument value by name or false
206
- *
207
- * @param string $name the argument name
208
- * @return mixed
209
- */
210
- public function getArg($name)
211
- {
212
- if (isset($this->_args[$name])) {
213
- return $this->_args[$name];
214
- }
215
- return false;
216
- }
217
- }
218
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/sql/datafeeder_setup/mysql4-install-1.0.5.php DELETED
@@ -1,39 +0,0 @@
1
- <?php
2
-
3
-
4
- $installer = $this;
5
- /* @var $installer Mage_Core_Model_Resource_Setup */
6
-
7
- $installer->startSetup();
8
-
9
- $installer->run("
10
-
11
- DROP TABLE IF EXISTS `{$installer->getTable('unbxd_field')}`;
12
-
13
- CREATE TABLE `{$installer->getTable('unbxd_field')}` (
14
- `field_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
15
- `name` varchar(100) NOT NULL DEFAULT '',
16
- `status` int(1) NOT NULL DEFAULT '1',
17
- `site` varchar(100) NOT NULL DEFAULT '',
18
- `data_type` varchar(20) NOT NULL DEFAULT 'longText',
19
- `autosuggest` int(1) NOT NULL DEFAULT '0',
20
- `image_height` int(5) NOT NULL DEFAULT '0',
21
- `image_width` int(5) NOT NULL DEFAULT '0',
22
- `generate_image` int(1) NOT NULL DEFAULT '0',
23
- PRIMARY KEY (`field_id`)
24
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
25
-
26
- DROP TABLE IF EXISTS `{$installer->getTable('unbxd_datafeeder_conf')}`;
27
-
28
- CREATE TABLE `{$installer->getTable('unbxd_datafeeder_conf')}` (
29
- `uconfig_id` int(10) unsigned NOT NULL auto_increment,
30
- `action` varchar(255) NOT NULL default '',
31
- `value` varchar(255),
32
- PRIMARY KEY (`uconfig_id`)
33
-
34
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
35
-
36
- ");
37
- $installer->endSetup();
38
-
39
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/sql/datafeeder_setup/mysql4-upgrade-0.1.0-1.0.5.php DELETED
@@ -1,39 +0,0 @@
1
- <?php
2
-
3
-
4
- $installer = $this;
5
- /* @var $installer Mage_Core_Model_Resource_Setup */
6
-
7
- $installer->startSetup();
8
-
9
- $installer->run("
10
-
11
- DROP TABLE IF EXISTS `{$installer->getTable('unbxd_field')}`;
12
-
13
- CREATE TABLE `{$installer->getTable('unbxd_field')}` (
14
- `field_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
15
- `name` varchar(100) NOT NULL DEFAULT '',
16
- `status` int(1) NOT NULL DEFAULT '1',
17
- `site` varchar(100) NOT NULL DEFAULT '',
18
- `data_type` varchar(20) NOT NULL DEFAULT 'longText',
19
- `autosuggest` int(1) NOT NULL DEFAULT '0',
20
- `image_height` int(5) NOT NULL DEFAULT '0',
21
- `image_width` int(5) NOT NULL DEFAULT '0',
22
- `generate_image` int(1) NOT NULL DEFAULT '0',
23
- PRIMARY KEY (`field_id`)
24
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
25
-
26
- DROP TABLE IF EXISTS `{$installer->getTable('unbxd_datafeeder_conf')}`;
27
-
28
- CREATE TABLE `{$installer->getTable('unbxd_datafeeder_conf')}` (
29
- `uconfig_id` int(10) unsigned NOT NULL auto_increment,
30
- `action` varchar(255) NOT NULL default '',
31
- `value` varchar(255),
32
- PRIMARY KEY (`uconfig_id`)
33
-
34
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
35
-
36
- ");
37
- $installer->endSetup();
38
-
39
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/{Datafeeder → Recommendation}/.DS_Store RENAMED
File without changes
app/code/local/Unbxd/Recommendation/Block/Admin.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ class Unbxd_Recommendation_Block_Admin extends Mage_Adminhtml_Block_Template {
9
+
10
+
11
+ }
12
+
13
+ ?>
app/code/local/Unbxd/Recommendation/Block/Tracker.php ADDED
File without changes
app/code/local/Unbxd/Recommendation/Helper/Confighelper.php ADDED
@@ -0,0 +1,333 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ class Unbxd_Recommendation_Helper_Confighelper extends Unbxd_Recommendation_Helper_Data {
9
+
10
+ const SITE_KEY = "site_key";
11
+
12
+ const API_KEY = "api_key";
13
+
14
+ const SECRET_KEY = "secret_key";
15
+
16
+ const USERNAME = "username";
17
+
18
+ const NEED_FEATURE_FIELD_UPDATION = "need_feature_field_updation";
19
+
20
+ const IS_CRON_ENABLED = "cron_enabled";
21
+
22
+
23
+ /**
24
+ * All possible data type values supported unbxd
25
+ * @var array
26
+ */
27
+ public static $data_types = array("text", "longText", "link", "decimal", "number", "datetime");
28
+
29
+ public function validateAndSaveKeys($website, $requestBody){
30
+ $errors = $this->validateKeyParams($requestBody);
31
+ if(sizeof($errors) > 0) {
32
+ return $errors;
33
+ }
34
+ $requestParams = json_decode($requestBody, true);
35
+ if(!$requestParams) {
36
+ $errors['message'] = 'Invalid Request';
37
+ return $errors;
38
+ }
39
+ $response = Mage::getModel("unbxd_recommendation/api_task_validatekeys")
40
+ ->setData(Unbxd_Recommendation_Model_Api_Task_Validatekeys::SECRET_KEY, $requestParams[self::SECRET_KEY])
41
+ ->setData(Unbxd_Recommendation_Model_Api_Task_Validatekeys::SITE_KEY, $requestParams[self::SITE_KEY])
42
+ ->prepare($website)
43
+ ->process();
44
+ if(!$response->isSuccess()) {
45
+ return $response->getErrors();
46
+ }
47
+
48
+ Mage::getResourceModel('unbxd_recommendation/config')
49
+ ->setValue($website->getWebsiteId(), self::SECRET_KEY, $requestParams[self::SECRET_KEY]);
50
+ Mage::getResourceModel('unbxd_recommendation/config')
51
+ ->setValue($website->getWebsiteId(), self::SITE_KEY, $requestParams[self::SITE_KEY]);
52
+ $response = $response->getResponse();
53
+ Mage::getResourceModel('unbxd_recommendation/config')
54
+ ->setValue($website->getWebsiteId(),
55
+ self::API_KEY, $response[Unbxd_Recommendation_Model_Api_Task_Validatekeys::API_KEY]);
56
+ Mage::getResourceModel('unbxd_recommendation/config')
57
+ ->setValue($website->getWebsiteId(),
58
+ self::USERNAME, $response[Unbxd_Recommendation_Model_Api_Task_Validatekeys::USERNAME]);
59
+ return $errors;
60
+ }
61
+
62
+ public function validateKeyParams($requestBody) {
63
+ $errors = array();
64
+ $requestParams = json_decode($requestBody, true);
65
+ if(!$requestParams) {
66
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::ERR, 'Invalid request witj requestBody' . $requestBody);
67
+ $errors['message'] = 'Invalid Request';
68
+ return $errors;
69
+ }
70
+ if(!array_key_exists(self::SECRET_KEY,$requestParams)){
71
+ $errors[self::SECRET_KEY] = "Has Empty Data";
72
+ }
73
+ if(!array_key_exists(self::SITE_KEY, $requestParams)) {
74
+ $errors[self::SITE_KEY] = "Has Empty Data";
75
+ }
76
+ return $errors;
77
+ }
78
+
79
+ public function getFeatureFields() {
80
+ return Unbxd_Recommendation_Model_Field::$feature_fields;
81
+ }
82
+
83
+ public function getAllAttributes() {
84
+ $attributes = Mage::getSingleton('eav/config')
85
+ ->getEntityType(Mage_Catalog_Model_Product::ENTITY)->getAttributeCollection();
86
+ $fields = array();
87
+ foreach($attributes as $attribute) {
88
+ $fields[] = $attribute->getName();
89
+ }
90
+ $fields[] = "final_price";
91
+ return $fields;
92
+ }
93
+
94
+ private function getFieldMapping($fields) {
95
+ $fieldMapping = array();
96
+ foreach($fields as $field) {
97
+ $fieldMapping[$field->getFieldName()] = $field;
98
+ }
99
+ return $fieldMapping;
100
+ }
101
+
102
+ /**
103
+ * @param $fields
104
+ * @return array
105
+ */
106
+ private function validate($fields) {
107
+ $errors = array();
108
+ foreach($fields as $field) {
109
+ if(!array_key_exists(Unbxd_Recommendation_Model_Field::field_name, $field)) {
110
+ $errors[Unbxd_Recommendation_Model_Field::field_name] = "Not Present for all the fields";
111
+ } else if (is_null($field[Unbxd_Recommendation_Model_Field::field_name]) ||
112
+ $field[Unbxd_Recommendation_Model_Field::field_name] =="") {
113
+ $errors[Unbxd_Recommendation_Model_Field::field_name] = "field Name is empty for some fields";
114
+ }
115
+ if (!array_key_exists(Unbxd_Recommendation_Model_Field::datatype, $field)) {
116
+ $errors[Unbxd_Recommendation_Model_Field::datatype] = "Not Present for all the fields";
117
+ } else if (!in_array($field[Unbxd_Recommendation_Model_Field::datatype], Unbxd_Recommendation_Model_Field::$data_types)){
118
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::ERR, 'Invalid feature field '.
119
+ $field[Unbxd_Recommendation_Model_Field::datatype]);
120
+ $errors[Unbxd_Recommendation_Model_Field::datatype] = "Invalid datatype specified";
121
+ }
122
+
123
+ if (array_key_exists(Unbxd_Recommendation_Model_Field::featured_field, $field)) {
124
+ if(!array_key_exists($field[Unbxd_Recommendation_Model_Field::featured_field],
125
+ Mage::getModel('unbxd_recommendation/field')->getFeaturedFields())) {
126
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::ERR, 'Invalid feature field '.
127
+ $field[Unbxd_Recommendation_Model_Field::featured_field]);
128
+ $errors[Unbxd_Recommendation_Model_Field::featured_field] = "Invalid feature field specified";
129
+ }
130
+ }
131
+ }
132
+ return $errors;
133
+ }
134
+
135
+ public function deleteFields($fields, $website) {
136
+ $errors = $this->validate($fields);
137
+ if(sizeof($errors) != 0) {
138
+ return $errors;
139
+ }
140
+ $collection = $this->buildFieldCollection($fields, $website);
141
+ return Mage::getModel("unbxd_recommendation/field")->saveFields($collection);
142
+ }
143
+
144
+ /**
145
+ * @param $fields
146
+ * @param $website
147
+ * @return array
148
+ */
149
+ public function saveFields($fields, $website) {
150
+ $errors = $this->validate($fields);
151
+ if(sizeof($errors) != 0) {
152
+ return $errors;
153
+ }
154
+ $collection = $this->buildFieldCollectionToAdd($fields, $website);
155
+ $response = Mage::getModel("unbxd_recommendation/field")->saveFields($collection);
156
+ if(!is_array($response) && $response === true) {
157
+ $this->triggerUpdateFeatureField($website);
158
+ }
159
+ }
160
+
161
+
162
+ public function triggerUpdateFeatureField(Mage_Core_Model_Website $website) {
163
+ Mage::getResourceModel('unbxd_recommendation/config')
164
+ ->setValue($website->getWebsiteId(), self::NEED_FEATURE_FIELD_UPDATION, 1);
165
+ $this->triggerFeedUpload($website);
166
+ }
167
+
168
+ /**
169
+ * Method to trigger feed upload
170
+ * @param Mage_Core_Model_Website $website
171
+ * @return void
172
+ */
173
+ public function triggerFeedUpload(Mage_Core_Model_Website $website) {
174
+ Mage::getModel('unbxd_recommendation/api_task_triggerfeedupload')
175
+ ->prepare($website)
176
+ ->process();
177
+ }
178
+
179
+ private function getFeatureFieldToFieldMapping($fields) {
180
+ $featureFieldToFieldMapping = array();
181
+ foreach($fields as $field) {
182
+ if($field instanceof Unbxd_Recommendation_Model_Field &&
183
+ $field->hasData(Unbxd_Recommendation_Model_Field::featured_field) &&
184
+ !is_null($field->getData(Unbxd_Recommendation_Model_Field::featured_field))) {
185
+ $featureFieldToFieldMapping[$field[Unbxd_Recommendation_Model_Field::featured_field]] = $field;
186
+ }
187
+ }
188
+ return $featureFieldToFieldMapping;
189
+ }
190
+
191
+ private function buildFieldCollection($fields, $website) {
192
+ $collection = array();
193
+ $fieldMapping = $this->getFieldMapping($this->getFields($fields, $website));
194
+ foreach($fields as $field) {
195
+ if (!array_key_exists(Unbxd_Recommendation_Model_Field::field_name, $field)) {
196
+ continue;
197
+ }
198
+ if(array_key_exists($field[Unbxd_Recommendation_Model_Field::field_name], $fieldMapping)) {
199
+ $collection[]["delete"] = $fieldMapping[$field[Unbxd_Recommendation_Model_Field::field_name]];
200
+ }
201
+ }
202
+ return $collection;
203
+ }
204
+
205
+ private function buildFieldCollectionToAdd($fields, $website) {
206
+ $collection = array();
207
+ $fieldMapping = $this->getFieldMapping($this->getFields($fields, $website));
208
+ $featureFieldToFieldMapping = $this->getFeatureFieldToFieldMapping($fieldMapping);
209
+
210
+ foreach($fields as $field) {
211
+ if(!array_key_exists(Unbxd_Recommendation_Model_Field::field_name, $field)) {
212
+ continue;
213
+ }
214
+ /*
215
+ All possible test cases
216
+ 1) if field name is present and it was a feature field
217
+ 1.a) if request feature field is equal to selected feature field, dont do anything
218
+ 1.b) if request feature field is not equal to selected feature field, dont do anything
219
+ 1.c) if request field is not a feature field,
220
+ remove the field name entry from the feature field row, save as different row.
221
+
222
+ 2) if field name is present and it was not a feature field
223
+ 2.a) if request field is a feature field,
224
+ remove the field name entry as a normal field and save as feature field
225
+ 2.b) if request field is not a feature field,
226
+ update the existing field
227
+
228
+ 3) if field name not present,
229
+ save as a new field
230
+ */
231
+
232
+ // case 1
233
+ if(array_key_exists($field[Unbxd_Recommendation_Model_Field::field_name], $fieldMapping ) &&
234
+ $fieldMapping[$field[Unbxd_Recommendation_Model_Field::field_name]]->hasData(Unbxd_Recommendation_Model_Field::featured_field) &&
235
+ !is_null($fieldMapping[$field[Unbxd_Recommendation_Model_Field::field_name]]->getData(Unbxd_Recommendation_Model_Field::featured_field))) {
236
+ //case 1 a)
237
+ if (array_key_exists(Unbxd_Recommendation_Model_Field::featured_field, $field) &&
238
+ $field[Unbxd_Recommendation_Model_Field::featured_field] ==
239
+ $fieldMapping[$field[Unbxd_Recommendation_Model_Field::field_name]][Unbxd_Recommendation_Model_Field::featured_field]) {
240
+ continue;
241
+ }
242
+ // case 1 b)
243
+ else if (array_key_exists(Unbxd_Recommendation_Model_Field::featured_field, $field)) {
244
+ $collection[]["delete"] = $featureFieldToFieldMapping[$field[Unbxd_Recommendation_Model_Field::featured_field]];
245
+ $collection[]["delete"] = $fieldMapping[$field[Unbxd_Recommendation_Model_Field::field_name]];
246
+ $fieldModel = Mage::getModel("unbxd_recommendation/field");
247
+ $fieldModel->setFeaturedField($field[Unbxd_Recommendation_Model_Field::featured_field]);
248
+ }
249
+
250
+ //case 1 c)
251
+ else {
252
+ $collection[]["delete"] = $fieldMapping[$field[Unbxd_Recommendation_Model_Field::field_name]];
253
+ $fieldModel = Mage::getModel("unbxd_recommendation/field");
254
+
255
+ }
256
+ } else if(array_key_exists($field[Unbxd_Recommendation_Model_Field::field_name], $fieldMapping)) {
257
+ //case 2 a)
258
+ if (array_key_exists(Unbxd_Recommendation_Model_Field::featured_field, $field)) {
259
+ $collection[]["delete"] = $fieldMapping[$field[Unbxd_Recommendation_Model_Field::field_name]];
260
+ $fieldModel = Mage::getModel("unbxd_recommendation/field");
261
+ $fieldModel->setFeaturedField($field[Unbxd_Recommendation_Model_Field::featured_field]);
262
+ }
263
+ // case 2 b)
264
+ else {
265
+ $fieldModel = $fieldMapping[$field[Unbxd_Recommendation_Model_Field::field_name]];
266
+ }
267
+ } else {
268
+ $fieldModel = Mage::getModel("unbxd_recommendation/field");
269
+ if (array_key_exists(Unbxd_Recommendation_Model_Field::featured_field, $field)) {
270
+ $fieldModel->setFeaturedField($field[Unbxd_Recommendation_Model_Field::featured_field]);
271
+ }
272
+
273
+ }
274
+ $fieldModel->setFieldName($field[Unbxd_Recommendation_Model_Field::field_name]);
275
+ $fieldModel->setDatatype($field[Unbxd_Recommendation_Model_Field::datatype]);
276
+ $fieldModel->setAutosuggest(0);
277
+ $fieldModel->setWebsiteId($website->getWebsiteId());
278
+ $fieldModel->setDisplayed(1);
279
+ $collection[]["add"] = $fieldModel;
280
+ }
281
+ return $collection;
282
+ }
283
+
284
+ /**
285
+ * Method to getFields, if
286
+ *
287
+ * @param $fields
288
+ * @return mixed
289
+ */
290
+ private function getFields($fields, $website) {
291
+ $inField = array();
292
+ foreach($fields as $field) {
293
+ $inField[] = "'" .$field[Unbxd_Recommendation_Model_Field::field_name]. "'";
294
+ }
295
+ $collection = Mage::getResourceModel("unbxd_recommendation/field_collection");
296
+
297
+ $collection->getSelect()->where('(' . Unbxd_Recommendation_Model_Field::field_name . ' in ('. implode(",", $inField). ')'. " OR ".
298
+ Unbxd_Recommendation_Model_Field::featured_field. " IS NOT NULL) AND ".
299
+ Unbxd_Recommendation_Model_Field::website_id . " = " . $website->getWebsiteId());
300
+ return $collection->load();
301
+ }
302
+
303
+
304
+ /**
305
+ * Method to update feature fields to unbxd
306
+ *
307
+ * @return bool| array
308
+ */
309
+ public function updateFeatureFields(Mage_Core_Model_Website $website) {
310
+ $response = Mage::getModel("unbxd_recommendation/api_task_updatefeaturefields")
311
+ ->prepare($website)
312
+ ->process();
313
+ if(! $response->isSuccess()) {
314
+ Mage::log(Zend_Log::ERR,
315
+ "Update feature fields failed because of theses errors ".json_encode($response->getErrors()));
316
+ return $response->getErrors();
317
+ }
318
+ return true;
319
+ }
320
+
321
+ public function getNumberOfDocsInUnbxd(Mage_Core_Model_Website $website) {
322
+ $response = Mage::getModel('unbxd_recommendation/api_task_feeddetails')
323
+ ->prepare($website)
324
+ ->process();
325
+ if($response->isSuccess()) {
326
+ $response = $response->getResponse();
327
+ $feedInfo = $response[Unbxd_Recommendation_Model_Api_Task_Feeddetails::FEEDINFO];
328
+ return $feedInfo[Unbxd_Recommendation_Model_Api_Task_Feeddetails::NUMDOCS];
329
+ }
330
+ return 0;
331
+ }
332
+ }
333
+ ?>
app/code/local/Unbxd/Recommendation/Helper/Data.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ class Unbxd_Recommendation_Helper_Data extends Mage_Core_Helper_Abstract {
9
+
10
+ const LOG_FILE = "unbxd_recommendation.log";
11
+
12
+ /**
13
+ * Method to log
14
+ *
15
+ * @param int $level
16
+ * @param string $message
17
+ */
18
+ public function log($level, $message) {
19
+ Mage::log($message, $level, static::LOG_FILE, true);
20
+ }
21
+
22
+ }
23
+ ?>
app/code/local/Unbxd/Recommendation/Helper/Feedhelper.php ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Recommendation_Helper_Feedhelper extends Unbxd_Recommendation_Helper_Data {
4
+
5
+ var $categoryMap;
6
+
7
+ var $catlevel1List;
8
+
9
+ var $attributeToTypeMap;
10
+
11
+ var $_rootCategoryIds = array();
12
+
13
+ protected function array_match($needle, $haystack) {
14
+ if(!is_array($needle)) {
15
+ return in_array($needle, $haystack);
16
+ }
17
+
18
+ foreach($needle as $eachNeedle) {
19
+ if(in_array($eachNeedle, $haystack)) {
20
+ return true;
21
+ }
22
+ }
23
+ return false;
24
+ }
25
+ /**
26
+ * function to get Category from the category id,
27
+ * This checks it present in the global array 'categoryMap', if it is not there fetches from db
28
+ * So that once it gets one category, it doesn't make db call again for the same category
29
+ */
30
+ public function getCategory($category_id = ""){
31
+ if(!isset($this->categoryMap[$category_id])){
32
+ $category = Mage::getModel('catalog/category')->load($category_id);
33
+ $this->categoryMap[$category_id] = $category;
34
+ $parentCategories = $category->getParentCategories();
35
+ foreach($parentCategories as $parentCategory) {
36
+ $this->categoryMap[$parentCategory->getId()] = $parentCategory;
37
+ }
38
+ return $this->categoryMap[$category_id];
39
+ }
40
+ return $this->categoryMap[$category_id];
41
+ }
42
+
43
+ public function getRootCategoryIds(Mage_Core_Model_Website $website) {
44
+ if(!array_key_exists($website->getWebsiteId(), $this->_rootCategoryIds)) {
45
+ foreach($website->getStores() as $store) {
46
+ $this->_rootCategoryIds[$website->getWebsiteId()][] = $store->getRootCategoryId();
47
+ }
48
+ }
49
+ return $this->_rootCategoryIds[$website->getWebsiteId()];
50
+ }
51
+
52
+ public function getCatLevel1(Mage_Core_Model_Website $website, $category_ids) {
53
+ if(!is_array($category_ids)) {
54
+ return array();
55
+ }
56
+ $rootCategories = $this->getRootCategoryIds($website);
57
+ $catlevel1 = array();
58
+ foreach($category_ids as $category_id) {
59
+ $category = $this->getCategory($category_id);
60
+ $parentIds = $category->getParentIds();
61
+ if(!is_null($category) &&
62
+ in_array($category->getId(), $rootCategories)) {
63
+ $catlevel1 = $catlevel1 + array($category->getId() => $category->getName());
64
+ } else if ($category instanceof Mage_Catalog_Model_Category &&
65
+ is_array($parentIds) &&
66
+ (sizeof($parentIds) >0)) {
67
+ $catlevel1 = $catlevel1 + $this->getCatLevel1($website, $parentIds);
68
+ }
69
+ }
70
+ return $catlevel1;
71
+ }
72
+
73
+ public function getCatLevel2(Mage_Core_Model_Website $website, $category_ids, $catlevel1Categories = null) {
74
+ if(is_null($catlevel1Categories)) {
75
+ $catlevel1Categories = $this->getCatLevel1($website, $category_ids);
76
+ }
77
+ $catlevel1Ids = array_keys($catlevel1Categories);
78
+ $catlevel1 = array();
79
+ foreach($category_ids as $category_id) {
80
+ $category = $this->getCategory($category_id);
81
+ $parentIds = $category->getParentIds();
82
+
83
+ if(!is_null($category) &&
84
+ $this->array_match($category->getParentId(), $catlevel1Ids)) {
85
+ $catlevel1 = $catlevel1 + array($category->getId() => $category->getName());
86
+ } else if ($category instanceof Mage_Catalog_Model_Category && is_array($parentIds) &&
87
+ (sizeof($parentIds) >0)) {
88
+ $catlevel1 = $catlevel1 + $this->getCatLevel2($website, $parentIds, $catlevel1Categories);
89
+ }
90
+ }
91
+ return $catlevel1;
92
+ }
93
+
94
+ public function getCatLevel3(Mage_Core_Model_Website $website, $category_ids, $catlevel2Categories = null) {
95
+ if(is_null($catlevel2Categories)) {
96
+ $catlevel2Categories = $this->getCatLevel1($website, $category_ids);
97
+ }
98
+ $catlevel2Ids = array_keys($catlevel2Categories);
99
+ $catlevel1 = array();
100
+ foreach($category_ids as $category_id) {
101
+ $category = $this->getCategory($category_id);
102
+ $parentIds = $category->getParentIds();
103
+
104
+ if(!is_null($category) &&
105
+ $this->array_match($category->getParentId(), $catlevel2Ids)) {
106
+ $catlevel1 = $catlevel1 + array($category->getId() => $category->getName());
107
+ } else if ($category instanceof Mage_Catalog_Model_Category &&
108
+ is_array($parentIds) &&
109
+ (sizeof($parentIds) >0)) {
110
+ $catlevel1 = $catlevel1 + $this->getCatLevel2($website, $parentIds, $catlevel2Categories);
111
+ }
112
+ }
113
+ return $catlevel1;
114
+ }
115
+
116
+
117
+ /**
118
+ * method to get all the attributes
119
+ **/
120
+ public function getAttributeMapping(){
121
+ if(isset($this->attributeToTypeMap)){
122
+ return $this->attributeToTypeMap;
123
+ } else {
124
+ $attributes = Mage::getSingleton('eav/config')
125
+ ->getEntityType(Mage_Catalog_Model_Product::ENTITY)->getAttributeCollection();
126
+ foreach($attributes as $attribute){
127
+ $this->attributeToTypeMap[$attribute->getAttributeCode()] = $attribute-> getFrontendInput();
128
+ }
129
+ return $this->attributeToTypeMap;
130
+ }
131
+ }
132
+
133
+ /**
134
+ * method to get field type of the field
135
+ **/
136
+ protected function getFieldType($attributeName){
137
+ $fieldMap = $this->getAttributeMapping();
138
+ if(array_key_exists( $attributeName, $fieldMap)){
139
+ return $fieldMap[$attributeName];
140
+ } else {
141
+ return "text";
142
+ }
143
+ }
144
+
145
+ /*
146
+ * function to check whether the field is a multiSelect/select or not,
147
+ * This is optimized method, where it doesn't make a database call to get fieldType
148
+ * where it fetches from the local variable, which holds the information of field to fieldType mapping
149
+ */
150
+ public function isMultiSelect($attributeName = ""){
151
+ if($attributeName == "status" || $attributeName == "visibility" ){
152
+ return false;
153
+ }
154
+ if($this->getFieldType($attributeName) == "select" ||
155
+ $this->getFieldType($attributeName) == "multiselect" ||
156
+ $attributeName == Unbxd_Recommendation_Model_Resource_Field::CATEGORY_IDS_NAME ||
157
+ $attributeName == Unbxd_Recommendation_Model_Resource_Field::CAT_LEVEL_1_NAME ||
158
+ $attributeName == Unbxd_Recommendation_Model_Resource_Field::CAT_LEVEL_2_NAME ||
159
+ $attributeName == Unbxd_Recommendation_Model_Resource_Field::CAT_LEVEL_3_NAME){
160
+ return true;
161
+ }
162
+ return false;
163
+ }
164
+
165
+ public function isImage($attributeName = "") {
166
+ if($this->getFieldType($attributeName) == "media_image") {
167
+ return true;
168
+ }
169
+ return false;
170
+ }
171
+
172
+ /**
173
+ * Get all root categories used by all stores.
174
+ * Note that root categories defined but not used, are not included.
175
+ *
176
+ * @return Mage_Catalog_Model_Category[]
177
+ */
178
+ public function getAllRootCategories()
179
+ {
180
+ $categories = array();
181
+
182
+ /** @var $stores Mage_Core_Model_Store[] */
183
+ $stores = Mage::app()->getStores();
184
+
185
+ foreach ($stores as $store) {
186
+ $id = $store->getRootCategoryId();
187
+ if (!isset($categories[$id])) {
188
+ $categories[$id] = Mage::getModel('catalog/category')->load($id);
189
+ }
190
+ }
191
+
192
+ return $categories;
193
+ }
194
+
195
+ public function getUniqueId($product) {
196
+ $type= null;
197
+ if($product->hasData('type_id')) {
198
+ $type = $product->getData('type_id');
199
+ }
200
+
201
+ switch($type){
202
+ case 'configurable':
203
+ $productId = $product->getData('entity_id');
204
+ break;
205
+ case 'grouped':
206
+ $productId = $product->getData('entity_id');
207
+ break;
208
+ case 'bundle':
209
+ $productId = $product->getData('entity_id');
210
+ break;
211
+ case 'simple':
212
+ if ($product->getParentItem() != null) {
213
+ $productId = $product->getParentItem()->getProductId();
214
+ } else {
215
+ $productId = $product->getData('entity_id');
216
+ }
217
+ break;
218
+ default:
219
+ $productId = $product->getData('entity_id');
220
+ }
221
+ return $productId;
222
+ }
223
+
224
+ }
app/code/local/Unbxd/Recommendation/Model/Api/Request.php ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class to make the request to the Unbxd api
5
+ *
6
+ * @category Unbxd
7
+ * @package Unbxd_Recommendation
8
+ * @author Unbxd Software Pvt. Ltd
9
+ */
10
+ class Unbxd_Recommendation_Model_Api_Request extends Varien_Object {
11
+
12
+ /**
13
+ * end url where the request is firing
14
+ * @var
15
+ */
16
+ protected $url = "";
17
+
18
+ /**
19
+ * http method
20
+ * @var
21
+ */
22
+ protected $method = Zend_Http_Client::GET;
23
+
24
+ /*
25
+ * Boolean to check whether the data should be sent as raw data or not
26
+ */
27
+ protected $rawData = false;
28
+
29
+ /**
30
+ * http response type
31
+ * @var
32
+ */
33
+ protected $response = "";
34
+
35
+ /**
36
+ * headers needed to sent
37
+ * @var
38
+ */
39
+ protected $headers = array();
40
+
41
+ protected $jsonResponse = true;
42
+
43
+ /**
44
+ * Connection timeout to the api calls made to unbxd
45
+ */
46
+ protected $timeout = 30;
47
+
48
+ public function isJsonResponse() {
49
+ return $this->jsonResponse;
50
+ }
51
+
52
+ public function setJsonResponse($value) {
53
+ if(is_bool($value) && $value == false) {
54
+ $this->jsonResponse = false;
55
+ }
56
+ return $this;
57
+ }
58
+
59
+ public function getHeaders() {
60
+ return $this->headers;
61
+ }
62
+
63
+ public function setHeaders(array $headers) {
64
+ $this->headers = $headers;
65
+ return $this;
66
+ }
67
+
68
+ public function getTimeout() {
69
+ return $this->timeout;
70
+ }
71
+
72
+ public function setTimeout($timeout) {
73
+ if(is_int($timeout) && $timeout >= 0) {
74
+ $this->timeout = $timeout;
75
+ }
76
+ return $this;
77
+ }
78
+
79
+ public function setHeader(string $header,string $value) {
80
+ $this->headers[$header] = $value;
81
+ return $this;
82
+ }
83
+
84
+ /**
85
+ * Method to get the url
86
+ *
87
+ * @return mixed
88
+ */
89
+ protected function getUrl() {
90
+ return $this->url;
91
+ }
92
+
93
+ /**
94
+ * setter method to set url variable
95
+ *
96
+ * @param $url
97
+ * @return $this
98
+ */
99
+ public function setUrl($url) {
100
+ $this->url = $url;
101
+ return $this;
102
+ }
103
+
104
+ /**
105
+ * Method to get the method
106
+ *
107
+ * @return mixed
108
+ */
109
+ protected function getMethod() {
110
+ return $this->method;
111
+ }
112
+
113
+ /**
114
+ * setter method to set method variable
115
+ *
116
+ * @param $method
117
+ * @return void
118
+ */
119
+ public function setMethod($method) {
120
+ $this->method = $method;
121
+ return $this;
122
+ }
123
+
124
+ /**
125
+ * Method to check whether parameters to be sent as raw parameter
126
+ *
127
+ * @return bool
128
+ */
129
+ protected function isRawData() {
130
+ return $this->rawData;
131
+ }
132
+
133
+ /**
134
+ * setter method to set rawdata variable
135
+ *
136
+ * @param bool $rawData
137
+ * @return $this
138
+ */
139
+ public function setRawData($rawData= true) {
140
+ $this->rawData = $rawData;
141
+ return $this;
142
+ }
143
+
144
+
145
+ /**
146
+ * return Zend Rest Client
147
+ *
148
+ * @return Zend_Http_Client
149
+ */
150
+ protected function getRestClient(){
151
+
152
+ $request = new Zend_Http_Client();
153
+ $request->setUri($this->getUrl())
154
+ ->setHeaders(array("Accept" => "application/json") + $this->getHeaders())
155
+ ->setMethod($this->getMethod())
156
+ ->setConfig(
157
+ array(
158
+ 'timeout' => $this->getTimeout()
159
+ )
160
+ );
161
+ if($this->isRawData()) {
162
+ $params = json_encode($this->getData());
163
+ $request->setRawData($params, 'application/json');
164
+ } else if($this->getMethod() == Zend_Http_Client::GET) {
165
+ $request->setParameterGet($this->getData());
166
+ } else {
167
+ $request->setParameterPost($this->getData());
168
+ }
169
+ return $request;
170
+ }
171
+
172
+
173
+ /**
174
+ * Method which will make the api call
175
+ *
176
+ * @return false|Unbxd_Recommendation_Model_Api_Response
177
+ */
178
+ public function execute(){
179
+ try {
180
+ $request = $this->getRestClient();
181
+ $raw_response = $request->request();
182
+ } catch (Zend_Http_Client_Exception $e) {
183
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::ERR,
184
+ sprintf($this->getUrl() ." failed because HTTP error: %s", $e->getMessage()));
185
+ return Mage::getModel('unbxd_recommendation/api_response')
186
+ ->setErrorMessage(Unbxd_Recommendation_Model_Api_Response::SERVER_ERR);
187
+ }
188
+ return Mage::getModel("unbxd_recommendation/api_response")
189
+ ->setJsonResponse($this->isJsonResponse())
190
+ ->setResponse($raw_response, $this->getUrl());
191
+ }
192
+
193
+ /**
194
+ * Method to return string
195
+ *
196
+ * @return string
197
+ */
198
+ public function __toString() {
199
+
200
+ $parameters = $this->getData();
201
+ if (count($parameters) > 0) {
202
+ $parameters_as_string = json_encode($parameters);
203
+ }
204
+ return "Request to url " . $this->getUrl() . " with method " . $this->getMethod()
205
+ . (count($parameters) > 0?(" with parameters " . $parameters_as_string):"");
206
+ }
207
+
208
+
209
+ }
210
+
211
+ ?>
app/code/local/Unbxd/Recommendation/Model/Api/Response.php ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ class Unbxd_Recommendation_Model_Api_Response extends Varien_Object {
9
+
10
+ const SERVER_ERR = 'Unable to reach unbxd server, Please contact support';
11
+
12
+ const SERVER_RESPONSE_ERR = 'Invalid response from Unbxd, Please contact support';
13
+
14
+ /**
15
+ * Variable to maintain the response successful or not
16
+ * @var
17
+ */
18
+ protected $success;
19
+
20
+ /**
21
+ * Variable to maintain the response successful or not
22
+ * @var
23
+ */
24
+ protected $errors = array();
25
+
26
+ protected $jsonResponse = true;
27
+
28
+ /**
29
+ * Variable to store the response from the api
30
+ * @var
31
+ */
32
+ protected $response;
33
+
34
+ public function isJsonResponse() {
35
+ return $this->jsonResponse;
36
+ }
37
+
38
+ public function setJsonResponse($value) {
39
+ if(is_bool($value) && $value == false) {
40
+ $this->jsonResponse = false;
41
+ }
42
+ return $this;
43
+ }
44
+
45
+ public function _construct() {
46
+ $this->success = false;
47
+ $this->message = "Empty response";
48
+ $this->response = array();
49
+ }
50
+
51
+ public function setSuccess($success) {
52
+ if(is_bool($success)) {
53
+ $this->success = $success;
54
+ }
55
+ return $this;
56
+ }
57
+
58
+ /**
59
+ * Method to check exact error message
60
+ *
61
+ * @return bool
62
+ */
63
+ public function isSuccess() {
64
+ return $this->success;
65
+ }
66
+
67
+ public function setErrors($errors = array()) {
68
+ $this->errors = $errors;
69
+ return $this;
70
+ }
71
+
72
+ public function getErrors() {
73
+ return $this->errors;
74
+ }
75
+
76
+ public function setErrorMessage($message) {
77
+ $this->errors['message'] = $message;
78
+ return $this;
79
+ }
80
+
81
+ public function setError(string $key, string $value) {
82
+ $this->errors[$key] = $value;
83
+ return $this;
84
+ }
85
+
86
+ /**
87
+ * Method to get Message
88
+ *
89
+ * @return string
90
+ */
91
+ public function getMessage() {
92
+ if(array_key_exists('message', $this->errors)) {
93
+ return $this->errors['message'];
94
+ }
95
+ return null;
96
+ }
97
+
98
+ /**
99
+ * Method to set the message
100
+ *
101
+ * @param $message
102
+ * @return $this
103
+ */
104
+ public function setMessage($message) {
105
+ $this->errors['message'] = $message;
106
+ return $this;
107
+ }
108
+
109
+ /**
110
+ * Method to return the response
111
+ *
112
+ * @return array
113
+ */
114
+ public function getResponse() {
115
+ return $this->response;
116
+ }
117
+
118
+ /**
119
+ * Method to set the response
120
+ *
121
+ * @param Zend_Http_Response $response
122
+ * @param $url
123
+ * @return $this
124
+ */
125
+ public function setResponse(Zend_Http_Response $response, $url) {
126
+ if($response->isSuccessful()) {
127
+ $this->success = true;
128
+ $this->setMessage("success");
129
+ $body = $response->getBody();
130
+ if(!$this->isJsonResponse()) {
131
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::DEBUG, "response from the " . $url . " is successful");
132
+ $this->setData("body", $body);
133
+ return $this;
134
+ }
135
+ $this->response = json_decode($body, true);
136
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::DEBUG, "response from the " . $url . " is " . $body);
137
+ if($this->response == false || !is_array($this->response) || sizeof($this->response) == 0) {
138
+ $this->success = false;
139
+ $this->setMessage("Invalid Authorization credentials");
140
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::ERR, $url . " api failed cos ". $this->getMessage());
141
+ return $this;
142
+ }
143
+ } else {
144
+
145
+ $this->success = false;
146
+ switch ($response->getStatus()) {
147
+ case 500:
148
+ $message = "Unbxd API server error, Please contact support \n" . $response->getBody();
149
+ $this->setMessage("Unbxd API server error, Please contact support \n");
150
+ break;
151
+ default:
152
+ $message = "Unbxd Unexpected error, Please contact support";
153
+ $this->setMessage($message);
154
+ }
155
+ Mage::helper('unbxd_recommendation')
156
+ ->log(Zend_Log::ERR, $url . " api failed cos ". $response->getStatus() . ":" . $message);
157
+ }
158
+ return $this;
159
+ }
160
+
161
+
162
+ }
163
+ ?>
app/code/local/Unbxd/Recommendation/Model/Api/Task.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ abstract class Unbxd_Recommendation_Model_Api_Task extends Varien_Object {
9
+
10
+ const PLATFORM_API_BASE_URL = "http://accounts.unbxdapi.com/admin/";
11
+
12
+ const RECOMMENDATION_SETTINGS_URL = "http://starwreck.unbxdapi.com/";
13
+
14
+ const TRACKER_URL = "http://tracker.unbxdapi.com/";
15
+
16
+ const RECOMMENDATION_API = "https://apac-recommendations.unbxdapi.com/";
17
+
18
+ const TIMEOUT = 30;
19
+
20
+ static $url = "";
21
+
22
+ const method = Zend_Http_Client::GET;
23
+
24
+ protected $preparationSuccessful;
25
+
26
+ protected $errors;
27
+
28
+ protected $headers = array();
29
+
30
+ protected $isRawData = false;
31
+
32
+ const jsonResponse = true;
33
+
34
+ public function __construct() {
35
+ $this->preparationSuccessful = false;
36
+ $this->errors = array();
37
+ }
38
+
39
+ /**
40
+ * Method to check whether parameters to be sent as raw parameter
41
+ *
42
+ * @return bool
43
+ */
44
+ protected function isRawData() {
45
+ return $this->isRawData;
46
+ }
47
+
48
+ abstract public function prepare(Mage_Core_Model_Website $website);
49
+
50
+ abstract protected function postProcess(Unbxd_Recommendation_Model_Api_Response $response);
51
+
52
+ /**
53
+ * Method which will make the api call
54
+ *
55
+ * @return false|Unbxd_Recommendation_Model_Api_Response
56
+ */
57
+ public function process() {
58
+ if(!$this->preparationSuccessful) {
59
+ Mage::helper("unbxd_recommendation")
60
+ ->log(Zend_Log::ERR,
61
+ sizeof($this->errors == 0)?"prepare method not called":json_encode($this->errors));
62
+ return Mage::getModel("unbxd_recommendation/api_response")
63
+ ->setErrors(sizeof($this->errors) == 0?array("message" => "prepare method not called"):$this->errors);
64
+ }
65
+ $request = Mage::getModel("unbxd_recommendation/api_request")
66
+ ->setUrl(static::$url)
67
+ ->setMethod(static::method)
68
+ ->setHeaders($this->headers)
69
+ ->setTimeout(static::TIMEOUT)
70
+ ->setJsonResponse(static::jsonResponse);
71
+ if($this->isRawData()) {
72
+ $request->setRawData(true);
73
+ }
74
+ if($this->getData()) {
75
+ $request->addData($this->getData());
76
+ }
77
+
78
+ return $this->postProcess($request->execute());
79
+ }
80
+
81
+ }
82
+ ?>
app/code/local/Unbxd/Recommendation/Model/Api/Task/Analyticsimpression.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ class Unbxd_Recommendation_Model_Api_Task_Analyticsimpression extends Unbxd_Recommendation_Model_Api_Task
9
+ {
10
+
11
+ const method = Zend_Http_Client::GET;
12
+
13
+ public function prepare(Mage_Core_Model_Website $website) {
14
+ $this->preparationSuccessful = true;
15
+ $this->prepareUrl($website);
16
+ $this->prepareHeaders($website);
17
+ return $this;
18
+ }
19
+
20
+ protected function prepareUrl($website) {
21
+ $siteKey = Mage::getResourceModel("unbxd_recommendation/config")
22
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::SITE_KEY);
23
+ if(is_null($siteKey)) {
24
+ $this->preparationSuccessful = false;
25
+ $this->errors["message"] = "Site key not set";
26
+ return;
27
+ }
28
+
29
+ static::$url = static::RECOMMENDATION_SETTINGS_URL . "dashboard/analytics/integrationDetails/" . $siteKey;
30
+ }
31
+
32
+ protected function prepareHeaders($website) {
33
+ $username = Mage::getResourceModel("unbxd_recommendation/config")
34
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::USERNAME);
35
+ if(is_null($username)) {
36
+ $this->preparationSuccessful = false;
37
+ $this->errors["message"] = "Secret key not set";
38
+ return;
39
+ }
40
+
41
+ $this->headers["authorization"] = "Basic " . base64_encode($username . ':$uauth');
42
+ }
43
+
44
+ protected function postProcess(Unbxd_Recommendation_Model_Api_Response $response) {
45
+ return $response;
46
+ }
47
+
48
+ }
49
+ ?>
app/code/local/Unbxd/Recommendation/Model/Api/Task/Feeddetails.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ class Unbxd_Recommendation_Model_Api_Task_Feeddetails extends Unbxd_Recommendation_Model_Api_Task {
9
+
10
+ const method = Zend_Http_Client::GET;
11
+
12
+ const STATUS = 'status';
13
+
14
+ const MESSAGE = 'message';
15
+
16
+ const FEEDINFO = 'feedInfo';
17
+
18
+ const NUMDOCS = 'numDocs';
19
+
20
+ public function prepare(Mage_Core_Model_Website $website) {
21
+ $this->preparationSuccessful = true;
22
+ $this->prepareUrl($website);
23
+ $this->prepareHeaders($website);
24
+ return $this;
25
+ }
26
+
27
+ protected function prepareUrl(Mage_Core_Model_Website $website) {
28
+ $siteKey = Mage::getResourceModel("unbxd_recommendation/config")
29
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::SITE_KEY);
30
+ if(is_null($siteKey)) {
31
+ $this->preparationSuccessful = false;
32
+ $this->errors["message"] = "Site key not set";
33
+ return;
34
+ }
35
+
36
+ static::$url = self::PLATFORM_API_BASE_URL . $siteKey . "/feed-info";
37
+ }
38
+
39
+ protected function prepareHeaders(Mage_Core_Model_Website $website) {
40
+ $apiKey = Mage::getResourceModel("unbxd_recommendation/config")
41
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::API_KEY);
42
+ $secretKey = Mage::getResourceModel("unbxd_recommendation/config")
43
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::SECRET_KEY);
44
+ if(is_null($secretKey) || is_null($apiKey)) {
45
+ $this->preparationSuccessful = false;
46
+ $this->errors["message"] = "Site key not set";
47
+ return;
48
+ }
49
+ $this->headers["Authorization"] = base64_encode($apiKey.":" .$secretKey);
50
+ }
51
+
52
+ protected function postProcess(Unbxd_Recommendation_Model_Api_Response $response) {
53
+ if(!$response->isSuccess()) {
54
+ return $response;
55
+ }
56
+ $responseObj = $response->getResponse();
57
+ if(!array_key_exists(self::STATUS, $responseObj) || !array_key_exists(self::FEEDINFO, $responseObj)) {
58
+ $response->setSuccess(false);
59
+ $response->setMessage('Invalid response from unbxd');
60
+ return $response;
61
+ }
62
+ if($responseObj[self::STATUS] != 200 || !array_key_exists(self::NUMDOCS, $responseObj[self::FEEDINFO])) {
63
+ $response->setSuccess(false);
64
+ $response->setMessage("status code :" .$responseObj[self::STATUS].",".
65
+ (array_key_exists(self::MESSAGE, $responseObj)?$responseObj[self::MESSAGE]:""));
66
+ return $response;
67
+ }
68
+ return $response;
69
+ }
70
+ }
app/code/local/Unbxd/Recommendation/Model/Api/Task/Trackcart.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ class Unbxd_Recommendation_Model_Api_Task_Trackcart extends Unbxd_Recommendation_Model_Api_Task {
9
+
10
+ const method = Zend_Http_Client::POST;
11
+
12
+ const jsonResponse = false;
13
+
14
+ const TIMEOUT = 5;
15
+
16
+ public function prepare(Mage_Core_Model_Website $website) {
17
+ $this->prepareUrl($website);
18
+ $this->isRawData = true;
19
+ return $this;
20
+ }
21
+
22
+ protected function prepareUrl(Mage_Core_Model_Website $website)
23
+ {
24
+ $siteKey = Mage::getResourceModel("unbxd_recommendation/config")
25
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::SITE_KEY);
26
+ if (is_null($siteKey)) {
27
+ $this->errors["message"] = "Site key not set";
28
+ return;
29
+ }
30
+
31
+ $uid = array_key_exists('unbxd_userId', $_COOKIE) ? $_COOKIE['unbxd_userId'] : null;
32
+ if (!isset($uid) || is_null($uid)) {
33
+ $this->errors["message"] = "UID Missing";
34
+ return;
35
+ }
36
+
37
+ static::$url = static::TRACKER_URL . "v1.0/$siteKey/track/cart/$uid";
38
+ $this->preparationSuccessful = true;
39
+ }
40
+
41
+ protected function postProcess(Unbxd_Recommendation_Model_Api_Response $response) {
42
+ return $response;
43
+ }
44
+ }
45
+ ?>
app/code/local/Unbxd/Recommendation/Model/Api/Task/Trackorder.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ class Unbxd_Recommendation_Model_Api_Task_Trackorder extends Unbxd_Recommendation_Model_Api_Task {
9
+
10
+ const method = Zend_Http_Client::POST;
11
+
12
+ const jsonResponse = false;
13
+
14
+ const TIMEOUT = 5;
15
+
16
+ public function prepare(Mage_Core_Model_Website $website) {
17
+ $this->prepareUrl($website);
18
+ $this->isRawData = true;
19
+ return $this;
20
+ }
21
+
22
+ protected function prepareUrl(Mage_Core_Model_Website $website)
23
+ {
24
+ $siteKey = Mage::getResourceModel("unbxd_recommendation/config")
25
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::SITE_KEY);
26
+ if (is_null($siteKey)) {
27
+ $this->errors["message"] = "Site key not set";
28
+ return;
29
+ }
30
+
31
+ $uid = array_key_exists('unbxd_userId', $_COOKIE) ? $_COOKIE['unbxd_userId'] : null;
32
+ if (!isset($uid) || is_null($uid)) {
33
+ $this->errors["message"] = "UID Missing";
34
+ return;
35
+ }
36
+
37
+ static::$url = static::TRACKER_URL . "v1.0/$siteKey/track/order/$uid";
38
+ $this->preparationSuccessful = true;
39
+ }
40
+
41
+ protected function postProcess(Unbxd_Recommendation_Model_Api_Response $response) {
42
+ return $response;
43
+ }
44
+ }
45
+ ?>
app/code/local/Unbxd/Recommendation/Model/Api/Task/Triggerfeedupload.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * class to validate the secret key and site key with unbxd
5
+ *
6
+ * @category Unbxd
7
+ * @package Unbxd_Recommendation
8
+ * @author Unbxd Software Pvt. Ltd
9
+ */
10
+ class Unbxd_Recommendation_Model_Api_Task_Triggerfeedupload extends Unbxd_Recommendation_Model_Api_Task {
11
+
12
+ const method = Zend_Http_Client::POST;
13
+
14
+ const TIMEOUT = 5;
15
+
16
+ public function prepare(Mage_Core_Model_Website $website) {
17
+ $this->preparationSuccessful = true;
18
+ $this->prepareUrl();
19
+ $this->prepareParams($website);
20
+ return $this;
21
+ }
22
+
23
+ protected function prepareUrl() {
24
+ static::$url = Mage::getBaseUrl()."unbxd/config/productsync";
25
+ return $this;
26
+ }
27
+
28
+ protected function prepareParams(Mage_Core_Model_Website $website) {
29
+ $this->setData("site", $website->getName());
30
+ return $this;
31
+ }
32
+
33
+ protected function postProcess(Unbxd_Recommendation_Model_Api_Response $response) {
34
+ $response->setSuccess(true);
35
+ $response->setErrors(array());
36
+ return $response;
37
+ }
38
+ }
39
+
40
+ ?>
app/code/local/Unbxd/Recommendation/Model/Api/Task/Updatefeaturefields.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ class Unbxd_Recommendation_Model_Api_Task_Updatefeaturefields extends Unbxd_Recommendation_Model_Api_Task {
9
+
10
+ const method = Zend_Http_Client::POST;
11
+
12
+ const STATUS = 'status';
13
+
14
+ const MESSAGE = 'message';
15
+
16
+ public function prepare(Mage_Core_Model_Website $website) {
17
+ $this->preparationSuccessful = true;
18
+ $this->prepareUrl($website);
19
+ $this->prepareHeaders($website);
20
+ $this->prepareData($website);
21
+ $this->isRawData = true;
22
+ return $this;
23
+ }
24
+
25
+ protected function prepareUrl(Mage_Core_Model_Website $website) {
26
+ $siteKey = Mage::getResourceModel("unbxd_recommendation/config")
27
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::SITE_KEY);
28
+ if(is_null($siteKey)) {
29
+ $this->preparationSuccessful = false;
30
+ $this->errors["message"] = "Site key not set";
31
+ return;
32
+ }
33
+
34
+ static::$url = self::PLATFORM_API_BASE_URL . $siteKey . "/field-mapping";
35
+ }
36
+
37
+ protected function prepareHeaders(Mage_Core_Model_Website $website) {
38
+ $apiKey = Mage::getResourceModel("unbxd_recommendation/config")
39
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::API_KEY);
40
+ $secretKey = Mage::getResourceModel("unbxd_recommendation/config")
41
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::SECRET_KEY);
42
+ if(is_null($secretKey) || is_null($apiKey)) {
43
+ $this->preparationSuccessful = false;
44
+ $this->errors["message"] = "Site key not set";
45
+ return;
46
+ }
47
+ $this->headers["Authorization"] = base64_encode($apiKey.":" .$secretKey);
48
+ }
49
+
50
+ protected function prepareData($website) {
51
+ $featureFields = Mage::getResourceModel("unbxd_recommendation/field_collection")->getFeatureFields($website);
52
+ $featureFieldMap = array();
53
+ foreach($featureFields as $field) {
54
+ $featureFieldMap[$field[Unbxd_Recommendation_Model_Field::featured_field]] =
55
+ $field[Unbxd_Recommendation_Model_Field::field_name];
56
+ }
57
+ $this->setData("fieldMapping", $featureFieldMap);
58
+ }
59
+
60
+ protected function postProcess(Unbxd_Recommendation_Model_Api_Response $response) {
61
+ if(!$response->isSuccess()) {
62
+ return $response;
63
+ }
64
+ $responseObj = $response->getResponse();
65
+ if(!array_key_exists(self::STATUS, $responseObj)) {
66
+ $response->setSuccess(false);
67
+ $response->setMessage('Invalid response from unbxd');
68
+ return $response;
69
+ }
70
+ if($responseObj[self::STATUS] != 200) {
71
+ $response->setSuccess(false);
72
+ $response->setMessage("status code :" .$responseObj[self::STATUS].",".
73
+ (array_key_exists(self::MESSAGE, $responseObj)?$responseObj[self::MESSAGE]:""));
74
+ return $response;
75
+ }
76
+ return $response;
77
+ }
78
+ }
app/code/local/Unbxd/Recommendation/Model/Api/Task/Validatekeys.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * class to validate the secret key and site key with unbxd
5
+ *
6
+ * @category Unbxd
7
+ * @package Unbxd_Recommendation
8
+ * @author Unbxd Software Pvt. Ltd
9
+ */
10
+ class Unbxd_Recommendation_Model_Api_Task_Validatekeys extends Unbxd_Recommendation_Model_Api_Task {
11
+
12
+ const method = Zend_Http_Client::POST;
13
+
14
+ const SECRET_KEY = "secretKey";
15
+
16
+ const SITE_KEY = "siteKey";
17
+
18
+ const API_KEY = 'apiKey';
19
+
20
+ const USERNAME = 'username';
21
+
22
+ public function prepare(Mage_Core_Model_Website $website) {
23
+ $this->prepareUrl();
24
+ $this->prepareHeaders($website);
25
+ $this->prepareParams();
26
+ return $this;
27
+ }
28
+
29
+ protected function prepareUrl() {
30
+ static::$url = self::RECOMMENDATION_SETTINGS_URL . "dashboard/authenticateMagento";
31
+ return $this;
32
+ }
33
+
34
+ protected function prepareHeaders() {
35
+ return $this;
36
+ }
37
+
38
+ protected function prepareParams() {
39
+ $params = $this->getData();
40
+ if(!array_key_exists(static::SECRET_KEY, $params)) {
41
+ $this->preparationSuccessful = false;
42
+ $this->errors[Unbxd_Recommendation_Helper_Confighelper::SECRET_KEY] = "secret key expected";
43
+ }
44
+ if(!array_key_exists(static::SITE_KEY, $params)) {
45
+ $this->preparationSuccessful = false;
46
+ $this->errors[Unbxd_Recommendation_Helper_Confighelper::SITE_KEY] = "site key expected";
47
+ }
48
+ if(sizeof($this->getData()) > 2) {
49
+ $this->preparationSuccessful = false;
50
+ $this->errors["message"] = "Extra Parameters Present";
51
+ }
52
+ if(sizeof($this->errors) == 0) {
53
+ $this->preparationSuccessful = true;
54
+ }
55
+ $this->isRawData = true;
56
+ return $this;
57
+ }
58
+
59
+ protected function postProcess(Unbxd_Recommendation_Model_Api_Response $response) {
60
+ if(!$response->isSuccess()) {
61
+ return $response;
62
+ }
63
+ $responseObj = $response->getResponse();
64
+ if(!array_key_exists(self::API_KEY, $responseObj) || !array_key_exists(self::USERNAME, $responseObj)) {
65
+ $response->setSuccess(false);
66
+ $response->setMessage('Invalid Combination, Please Refer Docs');
67
+ }
68
+ return $response;
69
+ }
70
+ }
71
+
72
+ ?>
app/code/local/Unbxd/Recommendation/Model/Api/Task/Widget.php ADDED
@@ -0,0 +1,231 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Created by IntelliJ IDEA.
4
+ * User: anantheshadiga
5
+ * Date: 10/21/14
6
+ * Time: 1:01 AM
7
+ */
8
+
9
+ class Unbxd_Recommendation_Model_Api_Task_Widget extends Unbxd_Recommendation_Model_Api_Task {
10
+
11
+ const WIDGET_TYPE = 'widgetType';
12
+
13
+ const jsonResponse = false;
14
+
15
+ public static $WIDGET_TYPES = array('recommend' => 'unbxd_recommended_for_you',
16
+ 'recently-viewed' =>'unbxd_recently_viewed',
17
+ 'more-like-these' => 'unbxd_more_like_these',
18
+ 'also-bought' =>'unbxd_also_bought',
19
+ 'also-viewed' => 'unbxd_also_viewed',
20
+ 'top-sellers' => 'unbxd_top_sellers',
21
+ 'category-top-sellers' => 'unbxd_category_top_sellers',
22
+ 'brand-top-sellers' => 'unbxd_brand_top_sellers',
23
+ 'cart-recommend' => 'unbxd_cart_recommendations');
24
+
25
+ public function prepare(Mage_Core_Model_Website $website) {
26
+ $this->preparationSuccessful = true;
27
+ $widgetType = $this->getWidgetType();
28
+ if(is_null($widgetType)) {
29
+ return $this;
30
+ }
31
+ $this->prepareUrl($website, $widgetType);
32
+ $this->prepareParams();
33
+ return $this;
34
+ }
35
+
36
+ protected function prepareParams() {
37
+ $this->setData('ip',
38
+ isset($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER['REMOTE_ADDR'])
39
+ ->setData('format', 'html');
40
+ }
41
+
42
+ protected function getWidgetType() {
43
+ $params = $this->getData();
44
+ if(!array_key_exists(static::WIDGET_TYPE, $params) ||
45
+ !array_key_exists($params[static::WIDGET_TYPE], static::$WIDGET_TYPES) ) {
46
+ $this->preparationSuccessful = false;
47
+ $this->errors["message"] = "Invalid widget type";
48
+ return null;
49
+ }
50
+ return $params[static::WIDGET_TYPE];
51
+ }
52
+
53
+ protected function prepareUrl(Mage_Core_Model_Website $website, $widget)
54
+ {
55
+ $params = $this->getData();
56
+ $siteKey = Mage::getResourceModel("unbxd_recommendation/config")
57
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::SITE_KEY);
58
+ $apiKey = Mage::getResourceModel("unbxd_recommendation/config")
59
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::API_KEY);
60
+ if (is_null($siteKey)) {
61
+ $this->preparationSuccessful = false;
62
+ $this->errors["message"] = "Site key not set";
63
+ return;
64
+ }
65
+
66
+ $pk = $this->getPrimaryToken();
67
+
68
+ if ($pk != '') {
69
+ static::$url = static::RECOMMENDATION_API . "v1.0/$apiKey/$siteKey/$widget/$pk";
70
+ return;
71
+ } else if($params[static::WIDGET_TYPE] == 'top-sellers' || $params[static::WIDGET_TYPE] == 'recommend') {
72
+ static::$url = static::RECOMMENDATION_API . "v1.0/$apiKey/$siteKey/$widget";
73
+ return;
74
+ } else {
75
+ $this->preparationSuccessful = false;
76
+ $this->errors["message"] = "Primary token missing for the specified widget";
77
+ return;
78
+ }
79
+ }
80
+
81
+ protected function getPrimaryToken() {
82
+ $params = $this->getData();
83
+
84
+ if($params[static::WIDGET_TYPE] == 'recently-viewed' || $params[static::WIDGET_TYPE] == 'recommend' ||
85
+ $params[static::WIDGET_TYPE] == 'cart-recommend') {
86
+ if(array_key_exists('uid', $params)) {
87
+ return $params['uid'];
88
+ } else {
89
+ return '';
90
+ }
91
+ }
92
+
93
+ if($params[static::WIDGET_TYPE] == 'also-viewed' || $params[static::WIDGET_TYPE] == 'also-bought' ||
94
+ $params[static::WIDGET_TYPE] == 'more-like-these' || $params[static::WIDGET_TYPE] == 'pdp-top-sellers') {
95
+ if(array_key_exists('uid', $params)) {
96
+ return $params['pid'];
97
+ } else {
98
+ return '';
99
+ }
100
+ }
101
+
102
+ if($params[static::WIDGET_TYPE] == 'category-top-sellers') {
103
+ if(array_key_exists('category', $params)) {
104
+ return $params['category'];
105
+ } else {
106
+ return '';
107
+ }
108
+ }
109
+
110
+ if($params[static::WIDGET_TYPE] == 'brand-top-sellers') {
111
+ if(array_key_exists('brand', $params)) {
112
+ return $params['brand'];
113
+ } else {
114
+ return '';
115
+ }
116
+ }
117
+ }
118
+
119
+ protected function postProcess(Unbxd_Recommendation_Model_Api_Response $response)
120
+ {
121
+ $body = $response->getBody();
122
+ if(is_null($body) || $body == '') {
123
+ return $response;
124
+ }
125
+ $body = $this->trimBody($body);
126
+ $body = $this->parseBody($body);
127
+ $body = $this->prepareResponse($body);
128
+ $response->setData('body', $body);
129
+ return $response;
130
+ }
131
+
132
+ protected function prepareResponse($body)
133
+ {
134
+ return $body;
135
+ }
136
+
137
+ private function getJavascriptNode($body) {
138
+ $startpos = strpos($body, '<script');
139
+ $endpos = strrpos($body, "</script>");
140
+ if($startpos != false && $endpos != false) {
141
+ return substr($body, $startpos, $endpos + strlen("</script>"));
142
+ }
143
+ return "";
144
+ }
145
+
146
+ protected function parseBody($body)
147
+ {
148
+ $prefix = '<html><body>';
149
+ $postfix = '</body></html>';
150
+ $dom = new DOMDocument;
151
+
152
+ $strippedJs = $this->getJavascriptNode($body);
153
+ $body = str_replace($strippedJs, "", $body);
154
+ @$dom->loadHTML($prefix.$body. $postfix, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
155
+
156
+ $xpath = new DOMXPath($dom);
157
+ $classname = 'unbxd-field-image_link';
158
+ $nodes = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
159
+ if(!isset($nodes)) {
160
+ return $body;
161
+ }
162
+ $images = $this->getOrigImages($nodes);
163
+ $images = $this->getFullImages($images);
164
+ $this->setImages($images, $xpath);
165
+ $body = $dom->saveHTML();
166
+ $pos = strrpos($body, $postfix);
167
+ if($pos != false) {
168
+ $body = substr_replace($body, '', $pos, strlen($postfix));
169
+ }
170
+ $pos = strpos($body, $prefix);
171
+ if($pos !== false ) {
172
+ $body = substr_replace($body, '', $pos, strlen($prefix));
173
+ }
174
+ return $body.$strippedJs;
175
+ }
176
+
177
+ protected function setImages($images,DOMXPath $xpath) {
178
+ foreach($images as $origImagePath => $modifiedImagePath) {
179
+ $imageNode = $xpath->query('//img[@src="' . $origImagePath . '"]');
180
+ if($imageNode instanceof DOMNodeList && $imageNode->length > 0) {
181
+ for($index = 0;$index < $imageNode->length; $index++) {
182
+ $imageNode->item($index)->setAttribute('src', $modifiedImagePath);
183
+ }
184
+ }
185
+ }
186
+ }
187
+
188
+ protected function getOrigImages(DOMNodeList $nodes) {
189
+ $images = array();
190
+ foreach ($nodes as $node) {
191
+ $img = $node->getElementsByTagName('img');
192
+ if ($img instanceof DOMNodeList && $img->length > 0) {
193
+ if ($img->item(0)->hasAttribute('src')) {
194
+ $src = $img->item(0)->getAttribute('src');
195
+ $images[] = $src;
196
+ }
197
+ }
198
+ }
199
+ return $images;
200
+ }
201
+
202
+ protected function getFullImages($images) {
203
+ $website = Mage::app()->getWebsite();
204
+ $imageField = Mage::getResourceModel("unbxd_recommendation/field")
205
+ ->getFieldByFeatureField($website->getWebsiteId(), 'imageUrl');
206
+ $fullImages = array();
207
+
208
+ foreach($images as $img) {
209
+ $product = Mage::getModel('catalog/product')
210
+ ->setData($imageField, $img);
211
+ $fullImages[$img] = (string)Mage::helper('catalog/image')->init($product, $imageField)
212
+ ->resize(400, 500);
213
+ }
214
+ return $fullImages;
215
+ }
216
+
217
+ protected function trimBody($body) {
218
+ $endPart = '").text();$(\'#' . static::$WIDGET_TYPES[$this->getData(static::WIDGET_TYPE)] . '\').html(decoded); })(jQuery);';
219
+ $startPart = '(function($){var decoded = $(\'<div/>\').html("';
220
+ $pos = strrpos($body, $endPart);
221
+ if($pos != false) {
222
+ $body = substr_replace($body, '', $pos, strlen($endPart));
223
+ }
224
+ $pos = strpos($body, $startPart);
225
+ if($pos !== false ) {
226
+ $body = substr_replace($body, '', $pos, strlen($startPart));
227
+ }
228
+ $body = trim(html_entity_decode($body, ENT_QUOTES));
229
+ return $body;
230
+ }
231
+ }
app/code/local/Unbxd/Recommendation/Model/Config.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * This class maintains all the configuration w.r.t Unbxd with site basis
5
+ *
6
+ * @category Unbxd
7
+ * @package Unbxd_Recommendation
8
+ * @author Unbxd Software Pvt. Ltd
9
+ */
10
+ class Unbxd_Recommendation_Model_Config extends Mage_Core_Model_Abstract {
11
+
12
+ const key = "key";
13
+
14
+ const value = 'value';
15
+
16
+ const website_id = 'website_id';
17
+
18
+ /**
19
+ *
20
+ * @return void
21
+ */
22
+ protected function _construct()
23
+ {
24
+ $this->_init('unbxd_recommendation/config');
25
+ }
26
+ }
27
+
28
+ ?>
app/code/local/Unbxd/Recommendation/Model/Feed/Feedcreator.php ADDED
@@ -0,0 +1,290 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Recommendation_Model_Feed_Feedcreator {
4
+
5
+ var $fileName;
6
+
7
+ var $fields;
8
+ var $taxonomyFlag;
9
+ const PAGE_SIZE = 500;
10
+
11
+ public function init(Mage_Core_Model_Website $website, $fileName) {
12
+ $this->setFields($website);
13
+ $this->fileName = $fileName;
14
+ }
15
+
16
+
17
+ /**
18
+ * method to create the feed
19
+ **/
20
+ public function createFeed($fileName, $fromdate, $todate, Mage_Core_Model_Website $website, $operation, $ids){
21
+ $this->init($website, $fileName);
22
+ if($this->createFile()){
23
+ $this->log("started writing header");
24
+
25
+ if(!$this->writeFeedContent($fromdate,$todate,$website,$operation,$ids)){
26
+ return false;
27
+ }
28
+
29
+ } else {
30
+ return false;
31
+ }
32
+ return true;
33
+ }
34
+
35
+ private function writeFeedContent($fromdate,$todate,Mage_Core_Model_Website $website,$operation,$ids) {
36
+ if(!$this->appendTofile('{"feed":')) {
37
+ $this->log("Error writing feed tag");
38
+ return false;
39
+ }
40
+
41
+ if(!$this->writeCatalogContent($fromdate,$todate,$website,$operation,$ids)) {
42
+ $this->log("Error writing catalog tag");
43
+ return false;
44
+ }
45
+
46
+ if(!$this->appendTofile("}")) {
47
+ $this->log("Error writing closing feed tag");
48
+ return false;
49
+ }
50
+
51
+ return true;
52
+ }
53
+
54
+ private function writeCatalogContent($fromdate,$todate,Mage_Core_Model_Website $website,$operation,$ids) {
55
+ if(!$this->appendTofile('{"catalog":{')) {
56
+ $this->log("Error writing closing catalog tag");
57
+ return false;
58
+ }
59
+ if(!$this->writeSchemaContent()) {
60
+ return false;
61
+ }
62
+
63
+ if(!$this->appendTofile(",")) {
64
+ $this->log("Error while adding comma in catalog");
65
+ return false;
66
+ }
67
+
68
+ if(!$this->writeProductsContent($fromdate,$todate,$website,$operation,$ids)) {
69
+ return false;
70
+ }
71
+
72
+
73
+ if(!$this->appendTofile("}")) {
74
+ $this->log("Error writing closing catalog tag");
75
+ return false;
76
+ }
77
+ /*
78
+ if(!$this->writeTaxonomyContents($site)) {
79
+ return false;
80
+ }*/
81
+
82
+ if(!$this->appendTofile("}")) {
83
+ $this->log("Error writing closing feed tag");
84
+ return false;
85
+ }
86
+
87
+
88
+ return true;
89
+ }
90
+
91
+ private function writeSchemaContent() {
92
+ return $this->appendTofile('"schema":'.
93
+ Mage::getSingleton('unbxd_recommendation/feed_jsonbuilder_schemabuilder')->getSchema($this->fields));
94
+ }
95
+
96
+ private function writeProductsContent($fromdate,$todate,Mage_Core_Model_Website $website,$operation,$ids) {
97
+
98
+ $collection=$this->getCatalogCollection($fromdate,$todate,$website,$operation,$ids);
99
+ // get total size
100
+ //set the time limit to infinite
101
+ ignore_user_abort(true);
102
+ set_time_limit(0);
103
+ $pageNum = 0;
104
+ $this->log('started writing products');
105
+
106
+ if(!$this->appendTofile('"'. $operation . '":{ "items":[')) {
107
+ $this->log("Error while adding items tag");
108
+ return false;
109
+ }
110
+
111
+ $firstLoop = true;
112
+
113
+ while(true){
114
+ $collection->clear();
115
+ $collection->getSelect()->limit(self::PAGE_SIZE, ($pageNum++) * self::PAGE_SIZE);
116
+ $collection->load();
117
+ if(count($collection) == 0){
118
+ if($pageNum == 1){
119
+ $this->log("No products found");
120
+ return false;
121
+ }
122
+ break;
123
+ }
124
+
125
+ if(!$firstLoop) {
126
+ if(!$this->appendTofile( ',')) {
127
+ $this->log("Error while addings items separator");
128
+ return false;
129
+ }
130
+ }
131
+ $content = Mage::getSingleton('unbxd_recommendation/feed_jsonbuilder_productbuilder')
132
+ ->getProducts($website, $collection, $this->fields);
133
+ $status=$this->appendTofile($content);
134
+ if(!$status){
135
+ $this->log("Error while addings items");
136
+ return false;
137
+ }
138
+ $this->log('Added '.($pageNum) * self::PAGE_SIZE.' products');
139
+ $firstLoop = false;
140
+ }
141
+
142
+ if(!$this->appendTofile("]}")) {
143
+ $this->log("Error writing closing items tag");
144
+ return false;
145
+ }
146
+
147
+
148
+ $this->log('Added all products');
149
+ return true;
150
+ }
151
+
152
+ private function writeTaxonomyContents($site){
153
+
154
+ $collection=$this->getTaxonomyMappingCollection();
155
+ // get total size
156
+ //set the time limit to infinite
157
+ ignore_user_abort(true);
158
+ set_time_limit(0);
159
+ $pageNum = 0;
160
+ $this->log('started writing taxonomy tree');
161
+
162
+ if(!$this->appendTofile(',"'. 'taxonomy' . '":{ "tree":[')) {
163
+ $this->log("Error while adding tree tag");
164
+ return false;
165
+ }
166
+
167
+ $content=Mage::getSingleton('unbxd_recommendation/feed_jsonbuilder_taxonomybuilder')->createTaxonomyFeed($site);
168
+ $status=$this->appendTofile($content);
169
+
170
+ if(!$status){
171
+ $this->log("Error while addings taxonomy");
172
+ return false;
173
+ }
174
+
175
+ if(!$this->appendTofile("]")) {
176
+ $this->log("Error writing closing tree tag");
177
+ return false;
178
+ }
179
+
180
+ if(!$this->appendTofile(',"mapping":[')) {
181
+ $this->log("Error writing opening mapping tag");
182
+ return false;
183
+ }
184
+
185
+ $content=Mage::getSingleton('unbxd_recommendation/feed_jsonbuilder_taxonomybuilder')->createMappingFeed($collection);
186
+ $status=$this->appendTofile($content);
187
+
188
+ if(!$status){
189
+ $this->log("Error while addings taxonomy");
190
+ return false;
191
+ }
192
+
193
+ if(!$this->appendTofile(']}')) {
194
+ $this->log("Error writing closing mapping tag");
195
+ return false;
196
+ }
197
+ $this->log('Added all categories');
198
+ return true;
199
+ }
200
+
201
+
202
+
203
+
204
+ private function setFields(Mage_Core_Model_Website $website) {
205
+ $fields = Mage::getResourceModel("unbxd_recommendation/field_collection")->getFields($website);
206
+ $featureFields = Mage::getModel('unbxd_recommendation/field')->getFeaturedFields();
207
+ foreach($fields as $eachfield) {
208
+ if(array_key_exists($eachfield->getFieldName(), $featureFields)) {
209
+ $this->fields[$eachfield->getFieldName()] = $featureFields[$eachfield->getFieldName()];
210
+ continue;
211
+ }
212
+ if(!is_null($eachfield->getFeaturedField()) &&
213
+ array_key_exists($eachfield->getFeaturedField(), $featureFields)) {
214
+ $this->fields[$eachfield->getFieldName()] = $featureFields[$eachfield->getFeaturedField()];
215
+ continue;
216
+ }
217
+ $field = array();
218
+ $field[Unbxd_Recommendation_Model_Field::status] = 1;
219
+ $field[Unbxd_Recommendation_Model_Field::datatype] = $eachfield->getDatatype();
220
+ $field[Unbxd_Recommendation_Model_Field::autosuggest] = $eachfield->getAutosuggest();
221
+ $field[Unbxd_Recommendation_Model_Field::multivalued] = Mage::helper('unbxd_recommendation/feedhelper')
222
+ ->isMultiSelect($eachfield->getFieldName());
223
+ $this->fields[$eachfield->getFieldName()] = $field;
224
+ }
225
+ $this->fields["entity_id"] = Mage::getModel('unbxd_recommendation/field')->getField('longText', "true", "true");
226
+
227
+ }
228
+
229
+ /**
230
+ * method to get the catalog collection
231
+ *
232
+ */
233
+ public function getCatalogCollection($fromdate,$todate,Mage_Core_Model_Website $website,$operation,$ids) {
234
+ if ($operation == "add") {
235
+ $_catalogInventoryTable = Mage::getSingleton("core/resource")->getTableName("cataloginventory_stock_item");
236
+ $collection = Mage::getResourceModel('unbxd_recommendation/product_collection')
237
+ ->addWebsiteFilter($website->getWebsiteId())
238
+ ->joinField("qty", $_catalogInventoryTable, 'qty', 'product_id=entity_id', null, 'left')
239
+ ->addAttributeToSelect('*')
240
+ ->addPriceData(Mage_Customer_Model_Group::NOT_LOGGED_IN_ID, $website->getWebsiteId());
241
+
242
+ Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
243
+ Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);
244
+
245
+ if(sizeof($ids) > 0){
246
+ $condition = array('in' => $ids);
247
+ $collection=$collection->addAttributeToFilter('entity_id',$condition);
248
+ }
249
+ } else {
250
+ $collection = Mage::getResourceModel('catalog/product_collection');
251
+ if(sizeof($ids) > 0) {
252
+ $condition = array('in' => $ids);
253
+ $collection= $collection->addAttributeToFilter('entity_id',$condition)->addAttributeToSelect('entity_id');
254
+ }
255
+ }
256
+
257
+ $this->log((string)$collection->getSelect());
258
+ return $collection;
259
+ }
260
+
261
+ /**
262
+ * Function to initialize to feed creation process
263
+ */
264
+ protected function createFile(){
265
+ return Mage::getSingleton('unbxd_recommendation/feed_filemanager')->createFile($this->fileName);
266
+ }
267
+
268
+ protected function appendTofile($data){
269
+ return Mage::getSingleton('unbxd_recommendation/feed_filemanager')->appendTofile($this->fileName, $data);
270
+ }
271
+
272
+ protected function log($message) {
273
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::DEBUG, $message);
274
+ }
275
+
276
+ public function getTaxonomyMappingCollection() {
277
+ try{
278
+ $adapter = Mage::getSingleton('core/resource')->getConnection('core_read');
279
+ return $adapter->query("select catalog_category_product_index.product_id as entity_id,GROUP_CONCAT(catalog_category_product_index.category_id SEPARATOR ',') as category_id FROM catalog_category_product_index
280
+ join catalog_product_entity where catalog_category_product_index.product_id = catalog_product_entity.entity_id
281
+ group by catalog_category_product_index.product_id");
282
+ } catch(Exception $e) {
283
+ $this->log($e->getMessage());
284
+ }
285
+
286
+
287
+ }
288
+
289
+ }
290
+ ?>
app/code/local/Unbxd/Recommendation/Model/Feed/Feedmanager.php ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Recommendation_Model_Feed_Feedmanager {
4
+
5
+ //Delete the file after uploading the feed
6
+ var $deleteIncrementalFeed = true;
7
+
8
+ var $fileName = "unbxdFeed.json";
9
+
10
+ var $key;
11
+
12
+ var $siteName;
13
+
14
+ const LAST_UPLOAD_TIME = 'lastUpload';
15
+
16
+ /**
17
+ * method to push the feed to the Unbxd server
18
+ **/
19
+ public function pushFeed($fullimport=true){
20
+ $fields=array('file'=>'@'.$this->fileName.';filename='.'unbxdFeed.json');
21
+ $header = array('Content-Type: multipart/form-data');
22
+
23
+ $url="http://feed.unbxdapi.com/upload/v2/".$this->key."/".$this->siteName. ($fullimport?"?fullimport=true":"");
24
+
25
+ $ch = curl_init();
26
+ curl_setopt($ch, CURLOPT_URL,$url);
27
+ curl_setopt($ch, CURLOPT_POST,true);
28
+ curl_setopt($ch, CURLOPT_POSTFIELDS,$fields);
29
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
30
+ try{
31
+ $this->log('pushing the feed to '.$url);
32
+ // push the feed to the server
33
+ $response = $this->exec($ch);
34
+ $this->log(json_encode($response));
35
+ $responseMessage = json_decode($response['body'], true);
36
+ $this->log($responseMessage);
37
+ if($responseMessage["statusCode"] != 200) {
38
+ throw new Exception('Unexpected response from unbxd server');
39
+ }
40
+ }catch(Exception $ex){
41
+ $this->log("Error while uploading the feed because of " . $ex->getMessage());
42
+ return false;
43
+ }
44
+ curl_close($ch);
45
+ return true;
46
+ }
47
+
48
+ public function exec($ch)
49
+ {
50
+ $response = curl_exec($ch);
51
+ $error = curl_error($ch);
52
+ $result = array( 'header' => '',
53
+ 'body' => '',
54
+ 'curl_error' => '',
55
+ 'http_code' => '',
56
+ 'last_url' => '');
57
+ if ( $error != "" ) {
58
+ $result['curl_error'] = $error;
59
+ return $result;
60
+ }
61
+
62
+ $header_size = curl_getinfo($ch,CURLINFO_HEADER_SIZE);
63
+ //$result['header'] = substr($response, 0, $header_size);
64
+ $result['body'] = $response;
65
+ $result['http_code'] = curl_getinfo($ch,CURLINFO_HTTP_CODE);
66
+ $result['last_url'] = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);
67
+ return $result;
68
+ }
69
+
70
+ /**
71
+ * method to set the feedName, log, apikey based on site Name
72
+ **/
73
+ public function init(Mage_Core_Model_Website $website)
74
+ {
75
+ $this->fileName = Mage::getBaseDir('tmp').DS.str_replace(' ', '_', $website->getName()). "_Feed.json";
76
+ $this->key = Mage::getResourceModel("unbxd_recommendation/config")
77
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::SECRET_KEY);
78
+ $this->siteName = Mage::getResourceModel("unbxd_recommendation/config")
79
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::SITE_KEY);
80
+ if(is_null($this->siteName) || is_null($this->key)) {
81
+ $message = 'Authorization failed, keys not set';
82
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::ERR, $message);
83
+ return array('success' => false, 'message' => $message);
84
+ }
85
+ return true;
86
+ }
87
+
88
+ /**
89
+ * method to update feature field if required
90
+ *
91
+ * @param Mage_Core_Model_Website $website
92
+ * @return void
93
+ */
94
+ private function updateFeatureFields(Mage_Core_Model_Website $website) {
95
+ $needFeatureFieldUpdation = Mage::getResourceModel("unbxd_recommendation/config")
96
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::NEED_FEATURE_FIELD_UPDATION);
97
+ if(is_null($needFeatureFieldUpdation) || $needFeatureFieldUpdation == "1") {
98
+ $response = Mage::helper('unbxd_recommendation/confighelper')->updateFeatureFields($website);
99
+ if(!is_array($response)) {
100
+ Mage::getResourceModel("unbxd_recommendation/config")
101
+ ->setValue($website->getWebsiteId(),
102
+ Unbxd_Recommendation_Helper_Confighelper::NEED_FEATURE_FIELD_UPDATION, 0);
103
+ } else {
104
+ $this->log("error while updating the feature fields");
105
+ }
106
+ }
107
+ }
108
+
109
+ /**
110
+ * method to initiate feed uploading to the unbxd servers
111
+ **/
112
+ public function process($fromdate, Mage_Core_Model_Website $website, $operation = "add", $ids=array()){
113
+
114
+ $this->log('Feed Uploading request recieved');
115
+ $response = $this->init($website);
116
+ if(is_array($response)){
117
+ return $response;
118
+ }
119
+ $currentDate = date('Y-m-d H:i:s');
120
+
121
+ // check the lock, that if already indexing is happening
122
+ if(!Mage::getResourceModel("unbxd_recommendation/config")->isLock($website->getWebsiteId())) {
123
+
124
+ $this->log('site '. $website->getName() .' is acquiring feed lock');
125
+ Mage::getResourceModel('unbxd_recommendation/config')->lockSite($website->getWebsiteId());
126
+
127
+ // create the feed
128
+ $status=Mage::getSingleton('unbxd_recommendation/feed_feedcreator')
129
+ ->createFeed($this->fileName, $fromdate, $currentDate, $website, $operation, $ids);
130
+ $this->log('unbxd Datafeeder finished creating file');
131
+
132
+ if($status){
133
+ $status=$this->pushFeed();
134
+ if($status){
135
+ Mage::getResourceSingleton("unbxd_recommendation/config")
136
+ ->setValue($website->getWebsiteId(), self::LAST_UPLOAD_TIME, $currentDate);
137
+ }
138
+ }
139
+
140
+ // unlock the feed once everything is completed
141
+ Mage::getResourceModel('unbxd_recommendation/config')->unLockSite($website->getWebsiteId());
142
+ $this->updateFeatureFields($website);
143
+ $this->log('site ' . $website->getName() .' has been unlocked');
144
+ if($status) {
145
+ return array('success' => true, 'message' => 'File uploaded successfully');
146
+ }
147
+ return array('success' => false, 'message' => 'Unexpected error, please contact support');
148
+ } else {
149
+ $this->log('Feed Uploading failed because site has been locked');
150
+ return array('success' => false, 'message' => 'Feed is already being processed');
151
+ }
152
+ }
153
+
154
+ public function log($message) {
155
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::DEBUG, $message);
156
+ }
157
+ }
158
+ ?>
app/code/local/Unbxd/{Datafeeder → Recommendation}/Model/Feed/Filemanager.php RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class Unbxd_Datafeeder_Model_Feed_Filemanager {
4
 
5
 
6
  var $logFileName;
@@ -13,10 +13,11 @@ class Unbxd_Datafeeder_Model_Feed_Filemanager {
13
  $this->logFileName = Mage::getBaseDir('log').DS.$logFileName;
14
  }
15
 
16
- /**
17
- * Function to create a file
18
- */
19
- public function createFile($file){
 
20
  try{
21
  $f=fopen($file,'w');
22
 
@@ -33,11 +34,13 @@ class Unbxd_Datafeeder_Model_Feed_Filemanager {
33
  return false;
34
  }
35
  }
36
-
37
- /**
38
- * Function to append the contents to the file
39
- */
40
- public function appendTofile($fileName, $content){
 
 
41
  try {
42
  if(file_put_contents($fileName, $content, FILE_APPEND)) {
43
  return true;
@@ -51,24 +54,23 @@ class Unbxd_Datafeeder_Model_Feed_Filemanager {
51
  }
52
  }
53
 
54
- /**
55
- * Function to appened the contents to the file
56
- */
57
- public function log($content){
58
- try{
59
- $resp = file_put_contents($this->logFileName, date('Y-m-d H:i:s').$content."\n", FILE_APPEND);
60
- if($resp){
61
- return true;
62
- } else {
63
- error_log("UNBXD_MODULE:Error while appending the contents to log file");
64
- return false;
65
- }
66
- return true;
67
- }catch(Exception $ex) {
68
- error_log("UNBXD_MODULE:Error while appending the contents to log file");
69
- Mage::throwException($ex->getMessage());
70
- return false;
71
- }
72
  }
73
  }
74
  ?>
1
  <?php
2
 
3
+ class Unbxd_Recommendation_Model_Feed_Filemanager {
4
 
5
 
6
  var $logFileName;
13
  $this->logFileName = Mage::getBaseDir('log').DS.$logFileName;
14
  }
15
 
16
+ /**
17
+ * @param $file
18
+ * @return bool
19
+ */
20
+ public function createFile($file){
21
  try{
22
  $f=fopen($file,'w');
23
 
34
  return false;
35
  }
36
  }
37
+
38
+ /**
39
+ * @param $fileName
40
+ * @param $content
41
+ * @return bool
42
+ */
43
+ public function appendTofile($fileName, $content){
44
  try {
45
  if(file_put_contents($fileName, $content, FILE_APPEND)) {
46
  return true;
54
  }
55
  }
56
 
57
+ /**
58
+ * method to log
59
+ * @param $content
60
+ * @return void
61
+ */
62
+ public function log($content){
63
+ Mage::log(Zend_Log::DEBUG, $content);
64
+ }
65
+
66
+
67
+ /**
68
+ * method to delete the file
69
+ * @param $file
70
+ * @return void
71
+ */
72
+ public function deleteFile($file){
73
+ unlink($file);
 
74
  }
75
  }
76
  ?>
app/code/local/Unbxd/Recommendation/Model/Feed/Jsonbuilder/Jsonbuilder.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Recommendation_Model_Feed_Jsonbuilder_Jsonbuilder {
4
+
5
+
6
+
7
+ }
8
+
9
+ ?>
app/code/local/Unbxd/{Datafeeder → Recommendation}/Model/Feed/Jsonbuilder/Productbuilder.php RENAMED
@@ -1,9 +1,8 @@
1
  <?php
2
 
3
- class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Jsonbuilder {
 
4
 
5
- const DATA_TYPE = "data_type";
6
- const MULTIVALUED = "multiValued";
7
  const NUMBER = "number";
8
  const DECIMAL = "decimal";
9
  const DATE = "date";
@@ -14,7 +13,7 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
14
  /*
15
  * method to get the products in json
16
  */
17
- public function getProducts($collection, $fields) {
18
  $content='';
19
  $firstLoop = true;
20
  foreach($collection as $product) {
@@ -22,7 +21,7 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
22
  $content = $content . ",";
23
  }
24
 
25
- $productArray = $this->getProduct($product, $fields);
26
  $productArray = $this->postProcessProduct($productArray, $fields, false);
27
  $content=$content.json_encode($productArray);
28
 
@@ -36,8 +35,7 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
36
  /*
37
  * method to get the product in json
38
  */
39
- public function getProduct($product, $fields, $childProduct = false) {
40
-
41
  $productArray =array();
42
 
43
  foreach($product->getData('') as $columnHeader=>$columndata){
@@ -48,20 +46,19 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
48
  }
49
 
50
  if($columnHeader=="entity_id"){
51
- $productArray['uniqueId'] = $columndata;
52
- }
53
-
54
- if($columnHeader=="url_path"){
55
  // handling the url
56
  $productArray[$unbxdFieldName] = Mage::getUrl('').$columndata;
57
- } else if (Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper')->isImage($columnHeader)) {
58
- // handling tthe images
59
- $attributeValue = $this->getImage($columnHeader, $unbxdFieldName, $product, $fields);
60
- if(!is_null($attributeValue)) {
61
- $productArray[$unbxdFieldName] = $attributeValue;
62
- }
63
-
64
- } else if( Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper')->isMultiSelect($columnHeader)){
65
  // handling the array/ multiselect attribute
66
  $attributeValue = $this->getMultiSelectAttribute($columnHeader, $product);
67
  if(!is_null($attributeValue)) {
@@ -73,12 +70,14 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
73
  }
74
  }
75
  if(!$childProduct) {
 
76
  // adding the childProduct
77
- $productArray = $this->addChildrens($product, $fields, $productArray);
78
 
79
- $category = $this->getCategoryAttribute($product);
80
  // adding the category
81
  $productArray = $category + $productArray;
 
82
  }
83
  return $productArray;
84
  }
@@ -86,14 +85,13 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
86
  /**
87
  * method to get category content in xml given the product object
88
  */
89
- private function getCategoryAttribute($product){
90
  $cats = $product->getCategoryIds();
91
  $categoryIds = array();
92
  $category = array();
93
  $categoryData = array();
94
- $index = 0;
95
  foreach ($cats as $categoryId) {
96
- $_cat = Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper')->getCategory($categoryId);
97
  if($_cat == null) {
98
  continue;
99
  }
@@ -101,14 +99,28 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
101
  if($categoryName == null || $categoryName == "") {
102
  continue;
103
  }
104
- if($index++ < 4) {
105
- $categoryData['catlevel' . $index . 'Name'] = $categoryName;
106
- }
107
  $categoryIds[] = (string)$categoryId;
108
  $category[] = $categoryName;
109
- }
110
- $categoryData['categoryIds'] = $categoryIds;
111
- $categoryData['category'] = $category;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  return $categoryData;
113
  }
114
 
@@ -119,9 +131,9 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
119
  $data = explode(",", $product->getData($fieldName));
120
  $valueAsAnArray = array();
121
  foreach($data as $eachdata){
122
- $attributeValue = Mage::getResourceSingleton("datafeeder/attribute")
123
  ->getAttributeValue($fieldName, trim($eachdata), $product);
124
- if(!is_null($attributeValue) && $attributeValue != "" && attributeValue != "Use Config") {
125
  $valueAsAnArray[] = $attributeValue;
126
  }
127
  }
@@ -136,7 +148,8 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
136
  */
137
  private function getImage($fieldName, $unbxdFieldName, $product, $fields) {
138
 
139
- if($fields[$unbxdFieldName][self::GENERATE_IMAGE] == "1") {
 
140
  Mage::getDesign()->setArea('frontend');
141
  try {
142
  return (string)Mage::helper('catalog/image')->init($product, $fieldName)
@@ -158,14 +171,15 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
158
  } else {
159
  $unbxdFieldName = $columnHeader;
160
  }
161
- return $this->renameConflictedFeatureFields($unbxdFieldName);
 
162
  }
163
 
164
  /*
165
  * Renaming the conflicted unbxd feature fields eg: gender to _gender
166
  */
167
  private function renameConflictedFeatureFields($unbxdFieldName) {
168
- if (in_array($unbxdFieldName, Mage::getResourceSingleton('datafeeder/field')->getConflictedFeatureFieldLust())) {
169
  return "_" . $unbxdFieldName;
170
  }
171
  return $unbxdFieldName;
@@ -175,21 +189,15 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
175
  * gives the children in form of array
176
  */
177
  public function addChildrens($product, $fields, $productArray) {
 
178
  $type = $product->getData('type_id');
179
  if ($type == "configurable" || $type == "grouped" ) {
180
  $associatedProducts = array();
181
- if ($product->getTypeId() == 'grouped') {
182
- $childrens = $product->getTypeInstance(true)->getAssociatedProducts($product);
183
- } else{
184
- $conf = Mage::getModel('catalog/product_type_configurable')->setProduct($product);
185
- $childrens = $conf->getUsedProductCollection()
186
- ->addAttributeToSelect('*')
187
- ->addFilterByRequiredOptions();
188
- }
189
  $conf = Mage::getModel('catalog/product_type_configurable')->setProduct($product);
190
  $childrens = $conf->getUsedProductCollection()
191
  ->addAttributeToSelect('*')
192
- ->addFilterByRequiredOptions();
 
193
  foreach ($childrens as $children)
194
  {
195
  $childProduct = $this->getProduct($children, $fields, true);
@@ -284,11 +292,11 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
284
  * returns the data type value
285
  */
286
  private function convertDataTypeByValue($data_type, $value) {
287
- if($data_type[self::DATA_TYPE] == self::DECIMAL) {
288
  return $this->getFloatValues($value);
289
- } else if ($data_type[self::DATA_TYPE] == self::NUMBER) {
290
  return $this->getNumberValues($value);
291
- } else if ($data_type[self::DATA_TYPE] == self::DATE) {
292
  return $this->getDateValues($value);
293
  }
294
  return $value;
@@ -299,11 +307,12 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
299
  */
300
  public function convertMultivalued($product, $fields = null) {
301
  foreach($product as $field=>$value) {
302
- if(is_null($fields) ||
303
  (($field != "associatedProducts") &&
304
- (array_key_exists(self::MULTIVALUED,$fields[$field]) &&
305
- $fields[$field][self::MULTIVALUED]) &&
306
- !is_array($value))) {
 
307
  $valueAsAnArray = array();
308
  $valueAsAnArray[] = $value;
309
  $product[$field] = $valueAsAnArray;
@@ -313,4 +322,4 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Dataf
313
  }
314
  }
315
 
316
- ?>
1
  <?php
2
 
3
+ class Unbxd_Recommendation_Model_Feed_Jsonbuilder_Productbuilder extends
4
+ Unbxd_Recommendation_Model_Feed_Jsonbuilder_Jsonbuilder {
5
 
 
 
6
  const NUMBER = "number";
7
  const DECIMAL = "decimal";
8
  const DATE = "date";
13
  /*
14
  * method to get the products in json
15
  */
16
+ public function getProducts($website, $collection, $fields) {
17
  $content='';
18
  $firstLoop = true;
19
  foreach($collection as $product) {
21
  $content = $content . ",";
22
  }
23
 
24
+ $productArray = $this->getProduct($website, $product, $fields);
25
  $productArray = $this->postProcessProduct($productArray, $fields, false);
26
  $content=$content.json_encode($productArray);
27
 
35
  /*
36
  * method to get the product in json
37
  */
38
+ public function getProduct($website, $product, $fields, $childProduct = false) {
 
39
  $productArray =array();
40
 
41
  foreach($product->getData('') as $columnHeader=>$columndata){
46
  }
47
 
48
  if($columnHeader=="entity_id"){
49
+ $uniqueIdField = 'uniqueId'.(($childProduct)?'Associated':'');
50
+ $productArray[$uniqueIdField] = $columndata;
51
+ }else if($columnHeader=="url_path"){
 
52
  // handling the url
53
  $productArray[$unbxdFieldName] = Mage::getUrl('').$columndata;
54
+ } else if (Mage::helper('unbxd_recommendation/feedhelper')->isImage($columnHeader)) {
55
+ // handling tthe images
56
+ $attributeValue = $this->getImage($columnHeader, $unbxdFieldName, $product, $fields);
57
+ if(!is_null($attributeValue)) {
58
+ $productArray[$unbxdFieldName] = $attributeValue;
59
+ }
60
+
61
+ } else if( $fields[$unbxdFieldName][Unbxd_Recommendation_Model_Field::multivalued]){
62
  // handling the array/ multiselect attribute
63
  $attributeValue = $this->getMultiSelectAttribute($columnHeader, $product);
64
  if(!is_null($attributeValue)) {
70
  }
71
  }
72
  if(!$childProduct) {
73
+
74
  // adding the childProduct
75
+ //$productArray = $this->addChildrens($product, $fields, $productArray);
76
 
77
+ $category = $this->getCategoryAttribute($website, $product);
78
  // adding the category
79
  $productArray = $category + $productArray;
80
+
81
  }
82
  return $productArray;
83
  }
85
  /**
86
  * method to get category content in xml given the product object
87
  */
88
+ private function getCategoryAttribute($website, $product){
89
  $cats = $product->getCategoryIds();
90
  $categoryIds = array();
91
  $category = array();
92
  $categoryData = array();
 
93
  foreach ($cats as $categoryId) {
94
+ $_cat = Mage::helper('unbxd_recommendation/feedhelper')->getCategory($categoryId);
95
  if($_cat == null) {
96
  continue;
97
  }
99
  if($categoryName == null || $categoryName == "") {
100
  continue;
101
  }
 
 
 
102
  $categoryIds[] = (string)$categoryId;
103
  $category[] = $categoryName;
104
+ }
105
+
106
+ $level1Categories = Mage::helper('unbxd_recommendation/feedhelper')
107
+ ->getCatLevel1($website, $categoryIds);
108
+ $level2Categories = Mage::helper('unbxd_recommendation/feedhelper')
109
+ ->getCatLevel2($website, $categoryIds, $level1Categories);
110
+ $level3Categories = Mage::helper('unbxd_recommendation/feedhelper')
111
+ ->getCatLevel3($website, $categoryIds, $level2Categories);
112
+ if(array_values($level1Categories) > 0) {
113
+ $categoryData[Unbxd_Recommendation_Model_Resource_Field::CAT_LEVEL_1_NAME] = array_values($level1Categories);
114
+ }
115
+ if(array_values($level2Categories)) {
116
+ $categoryData[Unbxd_Recommendation_Model_Resource_Field::CAT_LEVEL_2_NAME] = array_values($level2Categories);
117
+ }
118
+ if(array_values($level3Categories)) {
119
+ $categoryData[Unbxd_Recommendation_Model_Resource_Field::CAT_LEVEL_3_NAME] = array_values($level3Categories);
120
+ }
121
+
122
+ $categoryData[Unbxd_Recommendation_Model_Resource_Field::CATEGORY_IDS_NAME] = $categoryIds;
123
+ $categoryData[Unbxd_Recommendation_Model_Resource_Field::CATEGORY_NAME] = $category;
124
  return $categoryData;
125
  }
126
 
131
  $data = explode(",", $product->getData($fieldName));
132
  $valueAsAnArray = array();
133
  foreach($data as $eachdata){
134
+ $attributeValue = Mage::getResourceSingleton("unbxd_recommendation/attribute")
135
  ->getAttributeValue($fieldName, trim($eachdata), $product);
136
+ if(!is_null($attributeValue) && $attributeValue != "" && $attributeValue != "Use Config") {
137
  $valueAsAnArray[] = $attributeValue;
138
  }
139
  }
148
  */
149
  private function getImage($fieldName, $unbxdFieldName, $product, $fields) {
150
 
151
+ if(array_key_exists(self::GENERATE_IMAGE, $fields) &&
152
+ $fields[$unbxdFieldName][self::GENERATE_IMAGE] == "1") {
153
  Mage::getDesign()->setArea('frontend');
154
  try {
155
  return (string)Mage::helper('catalog/image')->init($product, $fieldName)
171
  } else {
172
  $unbxdFieldName = $columnHeader;
173
  }
174
+ return $unbxdFieldName;
175
+ //return $this->renameConflictedFeatureFields($unbxdFieldName);
176
  }
177
 
178
  /*
179
  * Renaming the conflicted unbxd feature fields eg: gender to _gender
180
  */
181
  private function renameConflictedFeatureFields($unbxdFieldName) {
182
+ if (in_array($unbxdFieldName, Mage::getResourceSingleton('unbxd_recommendation/field')->getConflictedFeatureFieldLust())) {
183
  return "_" . $unbxdFieldName;
184
  }
185
  return $unbxdFieldName;
189
  * gives the children in form of array
190
  */
191
  public function addChildrens($product, $fields, $productArray) {
192
+
193
  $type = $product->getData('type_id');
194
  if ($type == "configurable" || $type == "grouped" ) {
195
  $associatedProducts = array();
 
 
 
 
 
 
 
 
196
  $conf = Mage::getModel('catalog/product_type_configurable')->setProduct($product);
197
  $childrens = $conf->getUsedProductCollection()
198
  ->addAttributeToSelect('*')
199
+ ->addFilterByRequiredOptions()
200
+ ->joinField("qtyAssociated", "cataloginventory_stock_item", 'qty', 'product_id=entity_id', null, 'left');
201
  foreach ($childrens as $children)
202
  {
203
  $childProduct = $this->getProduct($children, $fields, true);
292
  * returns the data type value
293
  */
294
  private function convertDataTypeByValue($data_type, $value) {
295
+ if($data_type[Unbxd_Recommendation_Model_Field::datatype] == self::DECIMAL) {
296
  return $this->getFloatValues($value);
297
+ } else if ($data_type[Unbxd_Recommendation_Model_Field::datatype] == self::NUMBER) {
298
  return $this->getNumberValues($value);
299
+ } else if ($data_type[Unbxd_Recommendation_Model_Field::datatype] == self::DATE) {
300
  return $this->getDateValues($value);
301
  }
302
  return $value;
307
  */
308
  public function convertMultivalued($product, $fields = null) {
309
  foreach($product as $field=>$value) {
310
+ if((is_null($fields) ||
311
  (($field != "associatedProducts") &&
312
+ array_key_exists(Unbxd_Recommendation_Model_Field::multivalued,$fields[$field]) &&
313
+ $fields[$field][Unbxd_Recommendation_Model_Field::multivalued])) &&
314
+ !is_array($value)) {
315
+
316
  $valueAsAnArray = array();
317
  $valueAsAnArray[] = $value;
318
  $product[$field] = $valueAsAnArray;
322
  }
323
  }
324
 
325
+ ?>
app/code/local/Unbxd/Recommendation/Model/Feed/Jsonbuilder/Schemabuilder.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Recommendation_Model_Feed_Jsonbuilder_Schemabuilder extends Unbxd_Recommendation_Model_Feed_Jsonbuilder_Jsonbuilder {
4
+
5
+
6
+ const FIELD_NAME = "fieldName";
7
+ const DATA_TYPE = "dataType";
8
+ const MULTIVALUED = "multiValued";
9
+ const AUTOSUGGEST = "autoSuggest";
10
+ const TRUE = "true";
11
+ const FALSE = "false";
12
+
13
+ public function getSchema($fields) {
14
+ $fieldList = array();
15
+ foreach($fields as $fieldName=>$values ) {
16
+ $fieldList[] = array(self::FIELD_NAME => $fieldName,
17
+ self::DATA_TYPE => $values[Unbxd_Recommendation_Model_Field::datatype],
18
+ self::MULTIVALUED =>
19
+ (array_key_exists(Unbxd_Recommendation_Model_Field::multivalued, $values)
20
+ && $values[Unbxd_Recommendation_Model_Field::multivalued])?
21
+ self::TRUE:self::FALSE,
22
+ self::AUTOSUGGEST => ($values[Unbxd_Recommendation_Model_Field::autosuggest] == 1?self::TRUE: self::FALSE));
23
+
24
+ }
25
+ return json_encode($fieldList);
26
+ }
27
+ }
28
+
29
+ ?>
app/code/local/Unbxd/{Datafeeder → Recommendation}/Model/Feed/Jsonbuilder/Taxonomybuilder.php RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Taxonomybuilder extends Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Jsonbuilder {
4
 
5
  var $file='unbxdTaxonomy.xml';
6
 
@@ -153,7 +153,7 @@ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Taxonomybuilder extends Unbxd_Data
153
 
154
  $content=array();
155
  $content["uniqueId"]= (string)$mapping['entity_id'];
156
- $content["unbxdNodeId"] = explode(",", $mapping['category_id']);
157
  return json_encode($content).',';
158
  }
159
 
1
  <?php
2
 
3
+ class Unbxd_Recommendation_Model_Feed_Jsonbuilder_Taxonomybuilder extends Unbxd_Recommendation_Model_Feed_Jsonbuilder_Jsonbuilder {
4
 
5
  var $file='unbxdTaxonomy.xml';
6
 
153
 
154
  $content=array();
155
  $content["uniqueId"]= (string)$mapping['entity_id'];
156
+ $content["nodeId"] = explode(",", $mapping['category_id']);
157
  return json_encode($content).',';
158
  }
159
 
app/code/local/Unbxd/Recommendation/Model/Field.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * This class maintains the config of the fields that are needed by unbxd
5
+ *
6
+ * @category Unbxd
7
+ * @package Unbxd_Recommendation
8
+ * @author Unbxd Software Pvt. Ltd
9
+ */
10
+ class Unbxd_Recommendation_Model_Field extends Mage_Core_Model_Abstract {
11
+
12
+ /**
13
+ * field name column in db
14
+ */
15
+ const field_name = "field_name";
16
+
17
+ /**
18
+ * datatype column name in db
19
+ */
20
+ const datatype = "datatype";
21
+
22
+ /**
23
+ * autosuggest column name in db
24
+ */
25
+ const autosuggest = "autosuggest";
26
+
27
+ /**
28
+ * featured_field column name in db
29
+ */
30
+ const featured_field = "featured_field";
31
+
32
+ /**
33
+ * displayable column name in db
34
+ */
35
+ const dislayable = "displayed";
36
+
37
+ const multivalued = 'multivalued';
38
+
39
+ /**
40
+ * website id column name in db
41
+ */
42
+ const website_id = "website_id";
43
+
44
+ const status = 'status';
45
+
46
+ /**
47
+ * All possible data type values supported unbxd
48
+ * @var array
49
+ */
50
+ public static $data_types = array("text", "longText", "link", "decimal", "number", "datetime");
51
+
52
+ public static $displayableFeatureFields = array('title', 'price',
53
+ 'brand', 'color', 'size', 'imageUrl', 'productUrl');
54
+
55
+ public static $featurefields = array();
56
+
57
+ /**
58
+ *
59
+ * @return void
60
+ */
61
+ protected function _construct()
62
+ {
63
+ $this->_init('unbxd_recommendation/field');
64
+ Unbxd_Recommendation_Model_Field::$featurefields = $this->getFeaturedFields();
65
+
66
+ }
67
+
68
+
69
+ /**
70
+ * Save fields
71
+ *
72
+ * @return void
73
+ */
74
+ public function saveFields($collection) {
75
+ $this->_getResource()->beginTransaction();
76
+ try {
77
+ foreach ($collection as $data) {
78
+ if(sizeof($data) > 0) {
79
+ if(array_key_exists("add", $data)) {
80
+ $data["add"]->save();
81
+ } else if (array_key_exists("delete", $data)) {
82
+ $data["delete"]->delete();
83
+ }
84
+ }
85
+ }
86
+
87
+ $this->_getResource()->commit();
88
+ } catch(Exception $e) {
89
+ $this->_getResource()->rollBack();
90
+ Mage::helper("unbxd_recommendation")->log(Zend_Log::ERR, "Saving fields failed because " . $e->getMessage());
91
+ return array('OTHERS' => $e->getMessage());
92
+ }
93
+ return true;
94
+
95
+ }
96
+
97
+ /*
98
+ * method to get the featured fields
99
+ */
100
+ public function getFeaturedFields() {
101
+ $featuredFields = array();
102
+ $featuredFields["uniqueId"]=$this->getField("text", "false", "false");
103
+ $featuredFields["sellingPrice"]=$this->getField("decimal", "false", "false");
104
+ $featuredFields["discount"]=$this->getField("decimal", "false", "false");
105
+ $featuredFields["rating"]=$this->getField("decimal", "false", "false");
106
+ $featuredFields["brandId"]=$this->getField("text", "false", "false");
107
+ $featuredFields["catlevel1Name"]=$this->getField("text", "false", "false");
108
+ $featuredFields["catlevel2Name"]=$this->getField("text", "false", "false");
109
+ $featuredFields["catlevel3Name"]=$this->getField("text", "false", "false");
110
+ $featuredFields["catlevel4Name"]=$this->getField("text", "false", "false");
111
+ $featuredFields["category"]=$this->getField("text", "true", "true");
112
+ $featuredFields["subCategory"]=$this->getField("text", "true", "true");
113
+ $featuredFields["color"]=$this->getField("text", "true", "false");
114
+ $featuredFields["size"]=$this->getField("text", "true", "false");
115
+ $featuredFields["availability"]=$this->getField("bool", "false", "false");
116
+ $featuredFields["description"]=$this->getField("longText", "false", "false");
117
+ $featuredFields["imageUrl"]=$this->getField("link", "true", "false");
118
+ $featuredFields["productUrl"]=$this->getField("link", "false", "false");
119
+ $featuredFields["brand"]=$this->getField("text", "false", "true");
120
+ $featuredFields["price"]=$this->getField("decimal", "false", "false");
121
+ $featuredFields["title"]=$this->getField("text", "false", "true");
122
+ $featuredFields["gender"]=$this->getField("text", "false", "false");
123
+ $featuredFields["unbxdVisibility"]=$this->getField("text", "false", "false");
124
+ return $featuredFields;
125
+ }
126
+
127
+ public function getField($dataType, $multiValued, $autosuggest) {
128
+ return array( self::status => 1, self::datatype => $dataType,
129
+ self::multivalued => ($multiValued=="true")?1:0,
130
+ self::autosuggest => ($autosuggest=="true")?1:0 );
131
+
132
+ }
133
+ }
134
+
135
+ ?>
app/code/local/Unbxd/Recommendation/Model/Observer.php ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ class Unbxd_Recommendation_Model_Observer {
9
+
10
+ /**
11
+ * Observer method to track the add to cart
12
+ * @return $this
13
+ */
14
+ public function trackAddToCart(Varien_Event_Observer $observer) {
15
+ $product = $observer->getEvent()->getProduct();
16
+ if(!$product instanceof Mage_Catalog_Model_Product) {
17
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::ERR, 'CART_TRACKER:product is not a valid type');
18
+ }
19
+ $response = Mage::getModel('unbxd_recommendation/api_task_trackcart')
20
+ ->setData('data', array('pid' => Mage::helper('unbxd_recommendation/feedhelper')->getUniqueId($product),'visit_type' => 'repeat'))
21
+ ->setData('ip', isset($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER['REMOTE_ADDR'])
22
+ ->setData('agent', $_SERVER['HTTP_USER_AGENT'])
23
+ ->prepare(Mage::app()->getWebsite())
24
+ ->process();
25
+ $errors = $response->getErrors();
26
+ if(sizeof($errors) > 0) {
27
+ Mage::helper('unbxd_recommendation')
28
+ ->log(Zend_Log::ERR, 'CART_TRACKER:request failed because ' .json_encode($errors));
29
+ }
30
+ return $this;
31
+ }
32
+
33
+ /**
34
+ * Observer method to track orders
35
+ * @return $this
36
+ */
37
+ public function trackOrder(Varien_Event_Observer $observer) {
38
+ $payment = $observer->getEvent()->getPayment();
39
+ if(!$payment instanceof Mage_Sales_Model_Order_Payment) {
40
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::ERR, 'ORDER_TRACKER:payment is not a valid type');
41
+ }
42
+ $items = $payment->getOrder()->getItemsCollection();
43
+
44
+ foreach($items as $item) {
45
+ if($item instanceof Mage_Sales_Model_Order) {
46
+ Mage::helper('unbxd_recommendation')
47
+ ->log(Zend_Log::ERR, 'ORDER_TRACKER:request failed because item is of instancetype ' . get_class($item));
48
+ continue;
49
+ }
50
+ $type = $item->getProductType();
51
+
52
+ switch($type){
53
+ case 'configurable':
54
+ if ($item->getHasChildren()) {
55
+ $productId = $item->getProductId();
56
+ }elseif($item->getParentItem() != null) {
57
+ $productId = $item->getParentItem()->getProductId();
58
+ }
59
+ break;
60
+ case 'grouped':
61
+ $values=$item->getProductOptionByCode('info_buyRequest');
62
+ $parentId = $values['super_product_config']['product_id'];
63
+ $productId = $parentId;
64
+ break;
65
+ case 'bundle':
66
+ $productId = $item->getProductId();
67
+ break;
68
+ case 'simple':
69
+ if ($item->getParentItem() != null) {
70
+ $productId = $item->getParentItem()->getProductId();
71
+ } else {
72
+ $productId = $item->getProductId();
73
+ }
74
+ break;
75
+ default:
76
+ $productId = $item->getProductId();
77
+ }
78
+ $response = Mage::getModel('unbxd_recommendation/api_task_trackorder')
79
+ ->setData('data',
80
+ array('visit_type' => 'repeat', 'pid' => $productId,
81
+ 'qty' => $item->getQtyOrdered(), 'price' => $item->getPriceInclTax()))
82
+ ->setData('ip', isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'])
83
+ ->setData('agent', $_SERVER['HTTP_USER_AGENT'])
84
+ ->prepare(Mage::app()->getWebsite())
85
+ ->process();
86
+ if ($response->isSuccess() && is_array($response->getErrors()) && sizeof($response->getErrors()) > 0) {
87
+ Mage::helper('unbxd_recommendation')
88
+ ->log(Zend_Log::ERR, 'ORDER_TRACKER:request failed because ' . json_encode($response->getErrors()));
89
+ }
90
+ }
91
+ return $this;
92
+ }
93
+
94
+
95
+ public function syncProduct()
96
+ {
97
+ $websiteCollection = Mage::getModel('core/website')->getCollection()->load();
98
+
99
+ foreach ($websiteCollection as $website) {
100
+ Mage::getResourceModel('unbxd_recommendation/config')
101
+ ->setValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::IS_CRON_ENABLED, 1);
102
+ $fromdate = "1970-01-01 00:00:01";
103
+ Mage::getSingleton('unbxd_recommendation/feed_feedmanager')->process($fromdate, $website);
104
+ }
105
+ return $this;
106
+ }
107
+ }
108
+ ?>
app/code/local/Unbxd/{Datafeeder/Model/Mysql4 → Recommendation/Model/Resource}/Attribute.php RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class Unbxd_Datafeeder_Model_Mysql4_Attribute {
4
 
5
  protected $attributeMap = array();
6
  public function getAttributeValue($attributeCode, $value, $product){
1
  <?php
2
 
3
+ class Unbxd_Recommendation_Model_Resource_Attribute {
4
 
5
  protected $attributeMap = array();
6
  public function getAttributeValue($attributeCode, $value, $product){
app/code/local/Unbxd/Recommendation/Model/Resource/Config.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ class Unbxd_Recommendation_Model_Resource_Config extends Mage_Core_Model_Mysql4_Abstract
9
+ {
10
+
11
+ /**
12
+ * Unbxd Config table Name
13
+ *
14
+ * @var string
15
+ */
16
+ protected $_unbxdConfigTable;
17
+
18
+ /**
19
+ * @return void
20
+ */
21
+ protected function _construct()
22
+ {
23
+ $this->_init('unbxd_recommendation/config', 'id');
24
+ $this->_unbxdConfigTable = $this->getTable('unbxd_recommendation/config');
25
+ }
26
+
27
+ /**
28
+ * @param $website_id
29
+ * @param $key
30
+ * @return null|string
31
+ */
32
+ public function getValue($website_id, $key)
33
+ {
34
+ $adapter = $this->_getReadAdapter();
35
+
36
+ $select = $adapter->select()
37
+ ->from($this->_unbxdConfigTable, 'value')
38
+ ->where('`'.Unbxd_Recommendation_Model_Config::website_id.'` = ?', (int)$website_id)
39
+ ->where('`'.Unbxd_Recommendation_Model_Config::key.'` = ?', $key);
40
+
41
+ $result = $adapter->fetchOne($select);
42
+ if($result == false) {
43
+ return null;
44
+ }
45
+ return $result;
46
+ }
47
+
48
+ /**
49
+ * @param int $website_id
50
+ * @param string $key
51
+ * @param string $value
52
+ * @return void
53
+ */
54
+ public function setValue($website_id, $key, $value)
55
+ {
56
+ if (!isset($value) || $value == "" || !isset($key) || $key == "") {
57
+ return;
58
+ }
59
+
60
+ $config = Mage::getModel('unbxd_recommendation/config')->getCollection()
61
+ ->addFieldToFilter('`'.Unbxd_Recommendation_Model_Config::key.'`', $key)
62
+ ->addFieldToFilter('`'.Unbxd_Recommendation_Model_Config::website_id.'`', (int)$website_id)
63
+ ->getFirstItem();
64
+
65
+ $config->setWebsiteId($website_id)
66
+ ->setKey($key)
67
+ ->setValue($value)
68
+ ->save();
69
+ }
70
+
71
+ public function lockSite($website_id) {
72
+ $this->setValue($website_id, 'feed_lock', '1');
73
+ $this->setValue($website_id, 'feed_lock_time', date('Y-m-d H:i:s'));
74
+ }
75
+
76
+
77
+ public function unLockSite($website_id) {
78
+ $this->setValue($website_id, 'feed_lock', '0');
79
+ }
80
+
81
+ public function isLock($website_id) {
82
+ $feedLock = $this->getValue($website_id, 'feed_lock');
83
+ if(is_null($feedLock) || $feedLock == 0){
84
+ return false;
85
+ }
86
+ return true;
87
+ }
88
+ }
89
+
90
+ ?>
app/code/local/Unbxd/Recommendation/Model/Resource/Config/Collection.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd {
7
+ */
8
+ class Unbxd_Recommendation_Model_Resource_Config_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
9
+ {
10
+ /**
11
+ */
12
+ public function _construct()
13
+ {
14
+ $this->_init('unbxd_recommendation/config');
15
+ }
16
+
17
+
18
+ }
19
+
20
+ ?>
app/code/local/Unbxd/Recommendation/Model/Resource/Field.php ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd
7
+ */
8
+ class Unbxd_Recommendation_Model_Resource_Field extends Mage_Core_Model_Mysql4_Abstract
9
+ {
10
+
11
+ const CAT_LEVEL_1_NAME = "catLevel1";
12
+
13
+ const CAT_LEVEL_2_NAME = "catLevel2";
14
+
15
+ const CAT_LEVEL_3_NAME = "catLevel3";
16
+
17
+ const CATEGORY_IDS_NAME = "categoryIds";
18
+
19
+ const CATEGORY_NAME = "category";
20
+ /**
21
+ * Unbxd Field Config table Name
22
+ *
23
+ * @var string
24
+ */
25
+ protected $_unbxdFieldTable;
26
+
27
+ /**
28
+ * @return void
29
+ */
30
+ protected function _construct()
31
+ {
32
+ $this->_init('unbxd_recommendation/field', 'id');
33
+ $this->_unbxdFieldTable = $this->getTable('unbxd_recommendation/field');
34
+ }
35
+
36
+ public function getTableName() {
37
+ return $this->_unbxdFieldTable;
38
+ }
39
+
40
+ public function getFieldByFeatureField($websiteId, $featureField){
41
+ $adapter = $this->_getReadAdapter();
42
+
43
+ $select = $adapter->select()
44
+ ->from($this->_unbxdFieldTable, Unbxd_Recommendation_Model_Field::field_name)
45
+ ->where('`'.Unbxd_Recommendation_Model_Field::website_id.'` = ?', (int)$websiteId)
46
+ ->where('`'.Unbxd_Recommendation_Model_Field::featured_field.'` = ?', $featureField);
47
+
48
+ $result = $adapter->fetchOne($select);
49
+ if($result == false) {
50
+ return null;
51
+ }
52
+ return $result;
53
+ }
54
+
55
+ public function getDisplayableFields(Mage_Core_Model_Website $website) {
56
+ $fields = $this->getDisplayableFieldCollection($website);
57
+ if(count($fields) == 0) {
58
+ return $this->setDefaultFields($website)
59
+ ->getDisplayableFieldCollection($website);
60
+ }
61
+ return $fields;
62
+ }
63
+
64
+ protected function getDisplayableFieldCollection(Mage_Core_Model_Website $website) {
65
+ return Mage::getModel("unbxd_recommendation/field")
66
+ ->getCollection()
67
+ ->addFieldsDisplayFilter()
68
+ ->addWebsiteFilter($website)
69
+ ->load();
70
+ }
71
+
72
+ public function setDefaultFields(Mage_Core_Model_Website $website) {
73
+ $_writer = $this->_getWriteAdapter();
74
+ $_writer->query($this->getDefaultFieldInsertStatement($website));
75
+ return $this;
76
+ }
77
+
78
+ public function getDefaultFieldInsertStatement(Mage_Core_Model_Website $website) {
79
+ $websiteId = $website->getWebsiteId();
80
+ if(is_null($websiteId)) {
81
+ return "";
82
+ }
83
+ $fieldTable = Mage::getResourceModel('unbxd_recommendation/field')->getTableName();
84
+ return "
85
+ INSERT INTO `{$fieldTable}` (`website_id`, `field_name`, `datatype`, `autosuggest`, `featured_field`, `multivalued`, `displayed`)
86
+ VALUES
87
+ ({$websiteId}, 'name', 'text', 1, 'title', 0, 1),
88
+ ({$websiteId}, 'final_price', 'decimal', 0, 'price', 0, 1),
89
+ ({$websiteId}, 'price', 'decimal', 0, NULL, 0, 1),
90
+ ({$websiteId}, 'brand', 'text', 0, 'brand', 0, 1),
91
+ ({$websiteId}, 'color', 'text', 0, 'color', 1, 1),
92
+ ({$websiteId}, 'size', 'text', 0, 'size', 1, 1),
93
+ ({$websiteId}, 'image', 'link', 0, 'imageUrl', 1, 1),
94
+ ({$websiteId}, 'url_path', 'link', 0, 'productUrl', 0, 1),
95
+ ({$websiteId}, '".self::CAT_LEVEL_1_NAME. "', 'text', 0, NULL, 1, 0),
96
+ ({$websiteId}, '".self::CAT_LEVEL_2_NAME. "', 'text', 0, NULL, 1, 0),
97
+ ({$websiteId}, '".self::CAT_LEVEL_3_NAME. "', 'text', 0, NULL, 1, 0),
98
+ ({$websiteId}, 'status', 'number', 0, NULL, 0, 0),
99
+ ({$websiteId}, 'visibility', 'number', 0, NULL, 0, 0),
100
+ ({$websiteId}, 'qty', 'number', 0, NULL, 0, 0),
101
+ ({$websiteId}, '".self::CATEGORY_IDS_NAME. "', 'longText', 0, NULL, {$websiteId}, 0),
102
+ ({$websiteId}, '".self::CATEGORY_NAME. "', 'text', 0, 'category', 1, 0),
103
+ ({$websiteId}, 'uniqueId', 'longText', 0, NULL, 0, 0),
104
+ ({$websiteId}, 'entity_id', 'longText', 0, NULL, 0, 0);";
105
+ }
106
+ }
107
+
108
+ ?>
app/code/local/Unbxd/Recommendation/Model/Resource/Field/Collection.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd {
7
+ */
8
+ class Unbxd_Recommendation_Model_Resource_Field_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
9
+ {
10
+ /**
11
+ */
12
+ public function _construct()
13
+ {
14
+ $this->_init('unbxd_recommendation/field');
15
+ }
16
+
17
+ /**
18
+ * Method to add fields to display filter
19
+ *
20
+ * @return void
21
+ */
22
+ public function addFieldsDisplayFilter() {
23
+ $this->addFieldToFilter(Unbxd_Recommendation_Model_Field::dislayable,1);
24
+ return $this;
25
+ }
26
+
27
+ public function addWebsiteFilter(Mage_Core_Model_Website $website) {
28
+ $this->addFieldToFilter(Unbxd_Recommendation_Model_Field::website_id, $website->getWebsiteId());
29
+ return $this;
30
+ }
31
+
32
+ /**
33
+ * Method to get field collection as array
34
+ *
35
+ * @return array
36
+ */
37
+ public function __asArray() {
38
+ $fields = array();
39
+ foreach($this->_items as $item) {
40
+ $field = array();
41
+ $field[Unbxd_Recommendation_Model_Field::field_name] = $item->getFieldName();
42
+ $field[Unbxd_Recommendation_Model_Field::datatype] = $item->getDatatype();
43
+ $field[Unbxd_Recommendation_Model_Field::autosuggest] = $item->getAutosuggest();
44
+ $featureField = $item->getFeaturedField();
45
+ if(isset($featureField)) {
46
+ $field[Unbxd_Recommendation_Model_Field::featured_field] = $featureField;
47
+ }
48
+ $fields[] = $field;
49
+ }
50
+ return $fields;
51
+ }
52
+
53
+ public function getFeatureFields(Mage_Core_Model_Website $website) {
54
+ $this->getSelect()->where(Unbxd_Recommendation_Model_Field::featured_field. " IS NOT NULL AND ".
55
+ Unbxd_Recommendation_Model_Field::website_id . " = " . $website->getWebsiteId());
56
+ return $this->load();
57
+ }
58
+
59
+ public function getFields(Mage_Core_Model_Website $website) {
60
+ $this->getSelect()->where(Unbxd_Recommendation_Model_Field::website_id . " = " . $website->getWebsiteId());
61
+ return $this->load();
62
+ }
63
+ }
64
+
65
+ ?>
app/code/local/Unbxd/Recommendation/Model/Resource/Product/Collection.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Recommendation_Model_Resource_Product_Collection extends Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection{
4
+
5
+ protected function _construct()
6
+ {
7
+ parent::_construct();
8
+ }
9
+
10
+ public function isEnabledFlat()
11
+ {
12
+ return false;
13
+ }
14
+ }
15
+
16
+ ?>
app/code/local/Unbxd/Recommendation/controllers/AdminController.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Unbxd
5
+ * @package Unbxd_Recommendation
6
+ * @author Unbxd Software Pvt. Ltd {
7
+ */
8
+ class Unbxd_Recommendation_AdminController extends Mage_Adminhtml_Controller_Action {
9
+
10
+ /**
11
+ * @return void
12
+ */
13
+ public function editAction(){
14
+ //echo json_encode($this->getLayout()->getUpdate()->getHandles());
15
+ $this->loadLayout();
16
+ $this->renderLayout();
17
+ }
18
+ }
19
+
20
+ ?>
app/code/local/Unbxd/Recommendation/controllers/ConfigController.php ADDED
@@ -0,0 +1,321 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * controller that provides all the config
5
+ * @category Unbxd
6
+ * @package Unbxd_Recommendation
7
+ * @author Unbxd Software Pvt. Ltd
8
+ */
9
+ class Unbxd_Recommendation_ConfigController extends Mage_Core_Controller_Front_Action {
10
+
11
+ /**
12
+ * @return Unbxd_Recommendation_Helper_Confighelper
13
+ */
14
+ protected function helper() {
15
+ return Mage::helper("unbxd_recommendation/confighelper");
16
+ }
17
+
18
+ protected function getRawBody($request) {
19
+ $requestBody = json_decode($request->getRawBody(), true);
20
+ if(0 != strpos($request->getHeader('Content-Type'), 'application/json') || $requestBody === false) {
21
+ $this->getResponse()->clearHeaders()->setHeader('Content-type', 'application/json', true);
22
+ $this->getResponse()->setBody(json_encode(array('success' => false,
23
+ 'errors' => array('message' => 'Invalid Request'))));
24
+ return null;
25
+ }
26
+ return $requestBody;
27
+ }
28
+
29
+
30
+ protected function getFields($request) {
31
+ $requestBody = $this->getRawBody($request);
32
+ if(is_null($requestBody)) {
33
+ return null;
34
+ }
35
+ if(!array_key_exists("fields", $requestBody)) {
36
+ $this->getResponse()->clearHeaders()->setHeader('Content-type', 'application/json', true);
37
+ $this->getResponse()->setBody(json_encode(array('success' => false,
38
+ 'errors' => array('message' => 'Invalid Request'))));
39
+ return null;
40
+ }
41
+ return $requestBody["fields"];
42
+ }
43
+
44
+ /**
45
+ * @param $websiteName
46
+ * @return mixed
47
+ */
48
+ protected function getWebsiteByName($websiteName)
49
+ {
50
+ return Mage::getResourceModel('core/website_collection')
51
+ ->addFieldToFilter('name', $websiteName)
52
+ ->getFirstItem();
53
+ }
54
+
55
+ protected function prepare() {
56
+ $this->getResponse()->clearHeaders()->setHeader('Content-type', 'application/json', true);
57
+ if(array_key_exists("site", $_REQUEST)) {
58
+ $website = $this->getWebsiteByName($_GET["site"]);
59
+ }
60
+
61
+ if(!isset($website) || !$website->hasData("website_id")) {
62
+ Mage::helper('unbxd_recommendation')->log(Zend_Log::DEBUG,'api failed because of invalid website');
63
+ $this->getResponse()->setBody(json_encode(array('success' => false, 'errors' => array('Invalid site'))));
64
+ return null;
65
+ }
66
+ return $website;
67
+ }
68
+
69
+ public function editAction(){
70
+ $this->loadLayout();
71
+ $this->renderLayout();
72
+ }
73
+
74
+ /**
75
+ * api to return the sites
76
+ * @return void
77
+ */
78
+ public function siteAction()
79
+ {
80
+ $websites = Mage::app()->getWebsites();
81
+ $sites = array();
82
+ foreach ($websites as $website) {
83
+ $sites[] = array('name' => $website->getName(),
84
+ 'id' => $website->getId(),
85
+ 'numDocs' => $this->helper()->getNumberOfDocsInUnbxd($website));
86
+ }
87
+ $response = array('sites' => $sites);
88
+ $this->getResponse()->clearHeaders()->setHeader('Content-type', 'application/json', true);
89
+ $this->getResponse()->setBody(json_encode($response));
90
+ }
91
+
92
+ public function fieldsAction() {
93
+ $request = $this->getRequest();
94
+ if(array_key_exists("site", $_REQUEST)) {
95
+ $website = $this->getWebsiteByName($_GET["site"]);
96
+ }
97
+ if(!isset($website) || !$website->hasData("website_id")) {
98
+ $this->getResponse()->clearHeaders()->setHeader('Content-type', 'application/json', true);
99
+ $this->getResponse()->setBody(json_encode(array('success' => false,
100
+ 'errors' => array('message' => 'Invalid site'))));
101
+ return;
102
+ }
103
+ if($_SERVER['REQUEST_METHOD'] == Zend_Http_Client::GET) {
104
+ $mappedFields = Mage::getResourceModel('unbxd_recommendation/field')->getDisplayableFields($website)
105
+ ->__asArray();
106
+ $featureFields = Unbxd_Recommendation_Model_Field::$displayableFeatureFields;
107
+ foreach($mappedFields as $fields) {
108
+ if(array_key_exists(Unbxd_Recommendation_Model_Field::featured_field, $fields) &&
109
+ in_array($fields[Unbxd_Recommendation_Model_Field::featured_field], $featureFields)) {
110
+ unset($featureFields[array_search($fields[Unbxd_Recommendation_Model_Field::featured_field],
111
+ $featureFields)]);
112
+ }
113
+ }
114
+
115
+ foreach($featureFields as $field) {
116
+ $mappedFields[] = array(Unbxd_Recommendation_Model_Field::featured_field => $field,
117
+ Unbxd_Recommendation_Model_Field::datatype => 'text',
118
+ Unbxd_Recommendation_Model_Field::autosuggest => 1);
119
+ }
120
+
121
+ $fields = Mage::helper("unbxd_recommendation/confighelper")->getAllAttributes();
122
+ $this->getResponse()->clearHeaders()->setHeader('Content-type', 'application/json', true);
123
+ $this->getResponse()->setBody(json_encode(array('success' => true,
124
+ 'mappedFields' => $mappedFields, 'fields' => $fields,
125
+ 'datatype' => Unbxd_Recommendation_Model_Field::$data_types)));
126
+ } else if($_SERVER['REQUEST_METHOD'] == Zend_Http_Client::POST) {
127
+
128
+ //request for adding fields
129
+ $response = $this->helper()->saveFields($this->getFields($request), $website);
130
+ if(is_array($response)) {
131
+ $this->getResponse()->clearHeaders()->setHeader('Content-type', 'application/json', true);
132
+ $this->getResponse()->setBody(json_encode(array('success' => false, 'errors' => $response)));
133
+ return;
134
+ }
135
+ $this->getResponse()->clearHeaders()->setHeader('Content-type', 'application/json', true);
136
+ $this->getResponse()->setBody(json_encode(array('success' => true)));
137
+ return;
138
+ } else if($_SERVER['REQUEST_METHOD'] == Zend_Http_Client::PUT) {
139
+
140
+ // request for deleting fields
141
+ $response = $this->helper()->deleteFields($this->getFields($request), $website);
142
+ if(is_array($response)) {
143
+ $this->getResponse()->clearHeaders()->setHeader('Content-type', 'application/json', true);
144
+ $this->getResponse()->setBody(json_encode(array('success' => false, 'errors' => $response)));
145
+ return;
146
+ }
147
+ $this->getResponse()->clearHeaders()->setHeader('Content-type', 'application/json', true);
148
+ $this->getResponse()->setBody(json_encode(array('success' => true)));
149
+ return;
150
+ } else {
151
+ $this->getResponse()->clearHeaders()->setHeader('Content-type', 'application/json', true);
152
+ $this->getResponse()->setBody(json_encode(array('success' => false,
153
+ 'errors' => array('message' => 'Invalid method'))));
154
+ }
155
+ }
156
+
157
+ /**
158
+ * Api to update dimension mapping
159
+ *
160
+ * @return void
161
+ */
162
+ public function analyticsimpressionAction() {
163
+ $website = $this->prepare();
164
+ if(is_null($website)){
165
+ return;
166
+ }
167
+ if($_SERVER['REQUEST_METHOD'] == Zend_Http_Client::GET) {
168
+
169
+ $response = Mage::getModel("unbxd_recommendation/api_task_analyticsimpression")
170
+ ->prepare($website)
171
+ ->process();
172
+ if(!$response->isSuccess()) {
173
+ $this->getResponse()->setBody(json_encode(array('success' => false, 'errors' => $response->getErrors())));
174
+ return;
175
+ }
176
+ $this->getResponse()->setBody(json_encode(array('success' => true) + $response->getResponse()));
177
+ } else {
178
+ $this->getResponse()->setBody(json_encode(array('success' => false, 'errors' => array('Invalid method'))));
179
+ }
180
+
181
+ }
182
+
183
+ public function keysAction() {
184
+ $request = $this->getRequest();
185
+ $website = $this->prepare();
186
+ if(is_null($website)) {
187
+ return;
188
+ }
189
+
190
+ if($_SERVER['REQUEST_METHOD'] == Zend_Http_Client::GET) {
191
+ $secretKey =Mage::getResourceModel("unbxd_recommendation/config")
192
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::SECRET_KEY);
193
+ $siteKey =Mage::getResourceModel("unbxd_recommendation/config")
194
+ ->getValue($website->getWebsiteId(), Unbxd_Recommendation_Helper_Confighelper::SITE_KEY);
195
+ $errors = array();
196
+ if(is_null($secretKey)) {
197
+ $errors[Unbxd_Recommendation_Helper_Confighelper::SECRET_KEY] = "secret key not set";
198
+ }
199
+ if(is_null($siteKey)) {
200
+ $errors[Unbxd_Recommendation_Helper_Confighelper::SITE_KEY] = "site key not set";
201
+ }
202
+ if(sizeof($errors) > 0) {
203
+ Mage::helper('unbxd_recommendation')
204
+ ->log(Zend_Log::DEBUG,'save keys api failed because ' . json_encode($errors));
205
+ $this->getResponse()->setBody(json_encode(array('success' => false, 'errors' => $errors)));
206
+ return;
207
+ }
208
+ $this->getResponse()->setBody(json_encode(array('success' => true,
209
+ Unbxd_Recommendation_Helper_Confighelper::SECRET_KEY => $secretKey,
210
+ Unbxd_Recommendation_Helper_Confighelper::SITE_KEY => $siteKey)));
211
+ return;
212
+ } else if($_SERVER['REQUEST_METHOD'] == Zend_Http_Client::POST) {
213
+ $requestBody = $request->getRawBody();
214
+ $errors = $this->helper()->validateAndSaveKeys($website, $requestBody);
215
+ if(sizeof($errors)>0) {
216
+ Mage::helper('unbxd_recommendation')
217
+ ->log(Zend_Log::DEBUG, 'save keys api failed because of ' . json_encode($errors));
218
+ $this->getResponse()->setBody(json_encode(array('success' => false,
219
+ 'errors' => $errors)));
220
+ return;
221
+ }
222
+ $this->getResponse()->setBody(json_encode(array('success' => true)));
223
+ } else {
224
+ Mage::helper('unbxd_recommendation')
225
+ ->log(Zend_Log::DEBUG, 'keys api failed because of invalid method');
226
+ $this->getResponse()->setBody(json_encode(array('success' => false,
227
+ 'errors' => array('message' => 'Invalid method'))));
228
+ return;
229
+ }
230
+ }
231
+
232
+
233
+ public function dimensionmapAction()
234
+ {
235
+ $website = $this->prepare();
236
+ if (is_null($website)) {
237
+ return;
238
+ }
239
+ if ($_SERVER['REQUEST_METHOD'] == Zend_Http_Client::POST) {
240
+ $response = $this->helper()->updateFeatureFields($website);
241
+ if(is_array($response)) {
242
+ $this->getResponse()->setBody(json_encode(array('success' => false, $response)));
243
+ return;
244
+ }
245
+ $this->getResponse()->setBody(json_encode(array('success' => true)));
246
+ return;
247
+ } else {
248
+ Mage::helper('unbxd_recommendation')
249
+ ->log(Zend_Log::DEBUG, 'keys api failed because of invalid method');
250
+ $this->getResponse()->setBody(json_encode(array('success' => false,
251
+ 'errors' => array('message' => 'Invalid method'))));
252
+
253
+ }
254
+ }
255
+
256
+ public function downloadAction() {
257
+ $filepath = Mage::getBaseDir('log').DS.Unbxd_Recommendation_Helper_Data::LOG_FILE;
258
+
259
+ if (! is_file ( $filepath ) || ! is_readable ( $filepath )) {
260
+ throw new Exception ( );
261
+ }
262
+ $this->getResponse ()
263
+ ->setHttpResponseCode ( 200 )
264
+ ->setHeader ( 'Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true )
265
+ ->setHeader ( 'Pragma', 'public', true )
266
+ ->setHeader ( 'Content-type', 'application/force-download' )
267
+ ->setHeader ( 'Content-Length', filesize($filepath) )
268
+ ->setHeader ('Content-Disposition', 'attachment' . '; filename=' . basename($filepath) );
269
+ $this->getResponse ()->clearBody ();
270
+ $this->getResponse ()->sendHeaders ();
271
+ readfile ( $filepath );
272
+ return;
273
+ }
274
+
275
+ public function feeddetailsAction() {
276
+ $website = $this->prepare();
277
+ if (is_null($website)) {
278
+ return;
279
+ }
280
+
281
+ $this->getResponse()
282
+ ->setBody(json_encode(array('success' => true,
283
+ 'numDocs' => $this->helper()->getNumberOfDocsInUnbxd($website))));
284
+ return;
285
+ }
286
+
287
+ public function productsyncAction(){
288
+ $website = $this->prepare();
289
+ if (is_null($website)) {
290
+ return;
291
+ }
292
+ $fromdate="1970-01-01 00:00:01";
293
+
294
+ $response = Mage::getSingleton('unbxd_recommendation/feed_feedmanager')->process($fromdate,$website);
295
+ $this->getResponse()->setBody(json_encode($response));
296
+ return;
297
+ }
298
+
299
+
300
+ public function unlockfeedAction() {
301
+ $website = $this->prepare();
302
+ if (is_null($website)) {
303
+ return;
304
+ }
305
+ Mage::getResourceModel('unbxd_recommendation/config')->unLockSite($website);
306
+ $this->getResponse()->setBody(json_encode(array('success' => true)));
307
+ }
308
+
309
+ public function cronAction() {
310
+ $website = $this->prepare();
311
+ if (is_null($website)) {
312
+ return;
313
+ }
314
+ $isCronEnabled = Mage::getResourceSingleton('unbxd_recommendation/config')->getValue($website->getWebsiteId(),
315
+ Unbxd_Recommendation_Helper_Confighelper::IS_CRON_ENABLED);
316
+ if(is_null($isCronEnabled)) {
317
+ $this->getResponse()->setBody(json_encode(array('success' => true, 'cron_enabled' => false)));
318
+ }
319
+ $this->getResponse()->setBody(json_encode(array('success' => true, 'cron_enabled' => true)));
320
+ }
321
+ }
app/code/local/Unbxd/Recommendation/controllers/WidgetController.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Recommendation_WidgetController extends Mage_Core_Controller_Front_Action {
4
+
5
+ public function indexAction() {
6
+ $website = Mage::app()->getWebsite();
7
+ $this->getResponse()->clearHeaders()->setHeader('Content-Type', 'text/javascript');
8
+ $response = Mage::getModel("unbxd_recommendation/api_task_widget")
9
+ ->setData($_GET)
10
+ ->prepare($website)
11
+ ->process();
12
+ if(!$response->isSuccess()) {
13
+ $this->getResponse()->setBody('unbxdRecommendationError = ' .
14
+ json_encode(array('success' => false, 'errors' => $response->getErrors())));
15
+ return;
16
+ }
17
+ $this->getResponse()->setBody($response->getBody());
18
+ return;
19
+ }
20
+ }
app/code/local/Unbxd/Recommendation/etc/adminhtml.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <menu>
4
+ <unbxd_recommendation translate="title" module="unbxd_recommendation">
5
+ <title>Unbxd</title>
6
+ <action>unbxd/admin/edit</action>
7
+ </unbxd_recommendation>
8
+ </menu>
9
+ </config>
app/code/local/Unbxd/Recommendation/etc/config.xml ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <modules>
3
+ <Unbxd_Recommendation>
4
+ <version>1.0.7</version>
5
+ </Unbxd_Recommendation>
6
+ </modules>
7
+ <admin>
8
+ <routers>
9
+ <unbxd_recommendation_router>
10
+ <use>admin</use>
11
+ <args>
12
+ <module>Unbxd_Recommendation</module>
13
+ <frontName>unbxd</frontName>
14
+ </args>
15
+ </unbxd_recommendation_router>
16
+ </routers>
17
+ </admin>
18
+ <frontend>
19
+ <layout>
20
+ <updates>
21
+ <unbxd_recommendation>
22
+ <file>unbxd/recommendation.xml</file>
23
+ </unbxd_recommendation>
24
+ </updates>
25
+ </layout>
26
+ <routers>
27
+ <unbxd_recommendation>
28
+ <use>standard</use>
29
+ <args>
30
+ <module>Unbxd_Recommendation</module>
31
+ <frontName>unbxd</frontName>
32
+ </args>
33
+ </unbxd_recommendation>
34
+ </routers>
35
+ </frontend>
36
+ <global>
37
+ <resources>
38
+ <unbxd_recommendation_setup>
39
+ <setup>
40
+ <module>Unbxd_Recommendation</module>
41
+ </setup>
42
+ </unbxd_recommendation_setup>
43
+ </resources>
44
+ <helpers>
45
+ <unbxd_recommendation>
46
+ <class>Unbxd_Recommendation_Helper</class>
47
+ </unbxd_recommendation>
48
+ </helpers>
49
+ <models>
50
+ <unbxd_recommendation>
51
+ <class>Unbxd_Recommendation_Model</class>
52
+ <resourceModel>unbxd_recommendation_resource</resourceModel>
53
+ </unbxd_recommendation>
54
+ <unbxd_recommendation_resource>
55
+ <class>Unbxd_Recommendation_Model_Resource</class>
56
+ <entities>
57
+ <config>
58
+ <table>unbxd_recommendation_conf</table>
59
+ </config>
60
+ <field>
61
+ <table>unbxd_field_conf</table>
62
+ </field>
63
+ </entities>
64
+ </unbxd_recommendation_resource>
65
+ </models>
66
+ <blocks>
67
+ <unbxd_recommendation>
68
+ <class>Unbxd_Recommendation_Block</class>
69
+ </unbxd_recommendation>
70
+ </blocks>
71
+ <events>
72
+ <checkout_cart_add_product_complete>
73
+ <observers>
74
+ <unbxd_recommendation_cart_tracker>
75
+ <type>singleton</type>
76
+ <class>unbxd_recommendation/observer</class>
77
+ <method>trackAddToCart</method>
78
+ </unbxd_recommendation_cart_tracker>
79
+ </observers>
80
+ </checkout_cart_add_product_complete>
81
+ <sales_order_payment_place_end>
82
+ <observers>
83
+ <unbxd_recommendation_order_tracker>
84
+ <type>singleton</type>
85
+ <class>unbxd_recommendation/observer</class>
86
+ <method>trackOrder</method>
87
+ </unbxd_recommendation_order_tracker>
88
+ </observers>
89
+ </sales_order_payment_place_end>
90
+ </events>
91
+ </global>
92
+ <adminhtml>
93
+ <layout>
94
+ <updates>
95
+ <unbxd_recommendation>
96
+ <file>unbxd/recommendation.xml</file>
97
+ </unbxd_recommendation>
98
+ </updates>
99
+ </layout>
100
+ </adminhtml>
101
+ <crontab>
102
+ <jobs>
103
+ <unbxd_recommendation_cron>
104
+ <schedule><cron_expr>0 */1 * * *</cron_expr></schedule>
105
+ <run><model>unbxd_recommendation/observer::syncProduct</model></run>
106
+ </unbxd_recommendation_cron>
107
+ </jobs>
108
+ </crontab>
109
+ </config>
app/code/local/Unbxd/Recommendation/sql/unbxd_recommendation_setup/mysql4-install-1.0.0.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ $installer = $this;
5
+ /* @var $installer Mage_Core_Model_Resource_Setup */
6
+
7
+ $installer->startSetup();
8
+
9
+ $configTable = $installer->getTable('unbxd_recommendation_conf');
10
+ $fieldTable = $installer->getTable('unbxd_field_conf');
11
+
12
+ $installer->run("
13
+ DROP TABLE IF EXISTS `{$fieldTable}`;
14
+
15
+ CREATE TABLE `{$fieldTable}` (
16
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
17
+ `website_id` tinyint(5) unsigned NOT NULL,
18
+ `field_name` varchar(100) NOT NULL DEFAULT '',
19
+ `datatype` varchar(20) NOT NULL DEFAULT '',
20
+ `autosuggest` tinyint(1) NOT NULL DEFAULT '0',
21
+ `featured_field` varchar(100) DEFAULT NULL,
22
+ `multivalued` tinyint(1) NOT NULL DEFAULT '0',
23
+ `displayed` tinyint(1) NOT NULL DEFAULT '1',
24
+ PRIMARY KEY (`id`)
25
+ ) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=latin1;
26
+
27
+ DROP TABLE IF EXISTS `{$configTable}`;
28
+ CREATE TABLE `{$configTable}` (
29
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
30
+ `website_id` smallint(5) unsigned NOT NULL,
31
+ `key` varchar(50) NOT NULL DEFAULT '',
32
+ `value` varchar(50) DEFAULT NULL,
33
+ PRIMARY KEY (`id`)
34
+ ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1;
35
+ ");
36
+
37
+ $websiteCollection = Mage::getModel('core/website')->getCollection()->load();
38
+ foreach($websiteCollection as $website) {
39
+ $installer->run(Mage::getResourceSingleton('unbxd_recommendation/field')->getDefaultFieldInsertStatement($website));
40
+ }
41
+ $installer->endSetup();
42
+ ?>
app/design/adminhtml/base/default/template/datafeeder/conf.phtml DELETED
@@ -1,439 +0,0 @@
1
- <script src="//code.jquery.com/jquery-1.8.0.min.js"></script>
2
- <script src="//malsup.github.com/jquery.form.js"></script>
3
- <style type="text/css">
4
- td
5
- {
6
- margin-left:100cm;
7
- padding:10px;
8
- vertical-align:left;
9
- }
10
- .datafeeder-form input[type="text"] {
11
- width: 300px;
12
- }
13
-
14
- .fieldRowSelected {
15
- background-color: #45b5c1;
16
- }
17
-
18
- .text_td {
19
- padding-top: 6px;
20
- width: 117px;
21
- }
22
-
23
- .plus {
24
- background:url('http://unbxd.com/img/CircledPlus.png') no-repeat;
25
- height: 24px;
26
- width: 24px;
27
- }
28
-
29
- .minus {
30
- background:url('http://unbxd.com/img/CircledMinus.png') no-repeat;
31
- height: 24px;
32
- width: 24px;
33
- }
34
-
35
- .hidden_image_textBox {
36
- display: none;
37
- }
38
-
39
- .form-list td.value select {
40
- width: 110px;
41
- }
42
-
43
- #field-list td {
44
- width: 120px;
45
- }
46
-
47
- </style>
48
- <script type="text/javascript">
49
- var $jq = jQuery.noConflict();
50
- </script>
51
- <frameset cols="50%,50%">
52
- <frame name="actual_frame">
53
- <div class="datafeeder-form" onload="allset()">
54
- <form action="<?php echo $this->getSaveApiUrl();?>" method="POST" >
55
-
56
- <span><b>Unbxd API Key: </b><span>
57
- <input type="text" name="apikey" style="margin-left: 10px;" value="<?php echo $this->getApiKey(); ?>">
58
- <input type="submit" style="margin-left: 10px;" value="SAVE"/>
59
- </form>
60
- <form action="<?php echo $this->saveFeedConf();?>" method="POST" >
61
- <p class="switcher">
62
- <label for="store_switcher"><b>Choose Store View: </b><label>
63
-
64
- <select id="site" class="site" name="site" onload="newajaxcall('<?php echo $this->getFeedConf(); ?>')" onchange="newajaxcall('<?php echo $this->getFeedConf();?>')">
65
- <?php $allsites=Mage::app()->getWebsites();?>
66
- <?php foreach ($allsites as $site):?>
67
- <option value="<?php echo $site->getName()?>"><?php echo $site->getName()?></option>
68
- <?php endforeach;?>
69
- </select>
70
- </p>
71
-
72
-
73
- <table class="form-list" onload="allset()" id="form-list1" name="form-list" cellspacing="0" style="background:none repeat scroll 0 0 #FAFAFA;border=1px solid #D6D6D6;width: 100%;" width="5000px">
74
- <div class="datafeeder-form" width="parent" style="background:none repeat scroll 0 0 #6F8992;padding:5px 10px; color: white;">
75
- FEED CONFIGURATION
76
- </div>
77
- <tr>
78
- <td class="label">
79
- <b>Unbxd Site Key: </b>
80
- </td>
81
- <td class="value">
82
- <input type="text" id="siteName" name="siteName" value="" disabled/>
83
- </td>
84
- </tr>
85
- </tr>
86
- <tr>
87
- <td class="label">
88
- </td>
89
- <td class="value">
90
- <input type="button" name="editButton" value="EDIT"/> <input style="margin-left: 10px;" type="submit" value="SAVE"/>
91
- </td>
92
- </tr>
93
- </table>
94
-
95
- <input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />
96
- </form>
97
- <script type="text/javascript">
98
-
99
- $jq('[name=editButton]').click(function(evt){
100
- $jq('[name="feedName"]').attr('disabled', false);
101
- $jq('[name="siteName"]').attr('disabled', false);
102
- });
103
-
104
- function progressbar()
105
- {
106
- $jq.ajax({
107
- //async:false,
108
- url: "<?php echo $this->getProgressUrl(); ?>",
109
- type:"POST",
110
- dataType:"json",
111
- data:{"form_key":"<?php echo Mage::getSingleton('core/session')->getFormKey()?>",
112
- "site": $jq('[name=site]').val()
113
- },
114
- success: function(data) {
115
- document.getElementById("ProgressBar").innerHTML="";
116
- if(data.status=="0"){
117
- document.getElementById("ProgressBar").innerHTML="<b>Status: Indexed</b>";
118
- document.getElementById("fullupload").disabled=false;
119
- }else if(data.status=="1"){
120
- document.getElementById("ProgressBar").innerHTML="<b>Status: Indexing</b>";
121
- document.getElementById("fullupload").disabled=true;
122
- }
123
- }
124
- });
125
-
126
- }
127
-
128
- function callSetInterval()
129
- {
130
- setInterval(progressbar,20000);
131
- }
132
-
133
- function newajaxcall(ajaxurl){
134
- $jq.ajax({
135
-
136
- url: ajaxurl,
137
- timeout:30000,
138
- type:"POST",
139
- dataType: "json",
140
- data:{"form_key":"<?php echo Mage::getSingleton('core/session')->getFormKey()?>",
141
- "site":$jq('[name=site]').val(),
142
- },
143
-
144
- success: function(data) {
145
-
146
- if(data.feed !== "empty") $jq('[name=feedName]').val(data.feed); else $jq('[name=feedName]').val("");
147
- if(data.siteName !== "empty") $jq('[name=siteName]').val(data.siteName); else $jq('[name=siteName]').val("");
148
- },
149
-
150
- fail: function(XMLHttpRequest, textStatus, errorThrown) {
151
- }
152
- });
153
- }
154
-
155
- newajaxcall("<?php echo $this->getFeedConf();?>");
156
-
157
- function makeajaxcall(ajaxurl){
158
-
159
- $jq.ajax({
160
-
161
- url: ajaxurl,
162
- timeout:100000,
163
- type:"POST",
164
- data:{"form_key":"<?php echo Mage::getSingleton('core/session')->getFormKey()?>",
165
- "site": $jq('[name=site]').val()
166
- },
167
-
168
- complete: function(xhr, statusText){
169
- },
170
-
171
- done: function(data) {
172
- console.log(data);
173
- },
174
-
175
- fail: function(XMLHttpRequest, textStatus, errorThrown) {
176
- }
177
- });
178
- }
179
-
180
- $jq('#config_edit_form').ready(function(){
181
- createTable('<?php echo $this->getEditUrl();?>');
182
- });
183
-
184
- function saveFieldConf()
185
- {
186
- site = $jq('[name=site]').val();
187
- fields = {}
188
- $jq("#field-list").find("tr").each( function() {
189
- var field = {};
190
- if ($jq(this).find(".label").text() != "") {
191
- field["status"] = ($jq(this).find('[name=status]').find(":selected").text() == "Enabled") ? 1 :0;
192
- field["autosuggest"] = ($jq(this).find('[name=autosuggest]').find(":selected").text() == "Enabled") ? 1 :0;
193
- field["data_type"] = $jq(this).find('[name=dataType]').find(":selected").text();
194
- field["site_name"] = $jq('[name=site]').val();
195
- field["generate_image"] = $jq(this).find('[id=generate_image]').is(':checked')?1:0;
196
- element = this.querySelector('#image_height');
197
- if(element) {
198
- field["image_height"] = parseInt(element.value);
199
- }
200
- element = this.querySelector('#image_width') ;
201
- if (element) {
202
- field["image_width"] = parseInt(element.value);
203
- }
204
- fields[$jq(this).find(".label").text()] = JSON.stringify(field);
205
-
206
- childProductField = {};
207
- if (this.className == "fieldRowSelected"){
208
- childProductField["status"] = field["status"];
209
- } else {
210
- childProductField["status"] = 0;
211
- }
212
- childProductField["autosuggest"] = field["autosuggest"];
213
- childProductField["data_type"] = field["data_type"];
214
- childProductField["site_name"] = field["site_name"];
215
- childProductField["generate_image"] = field["generate_image"];
216
- childProductField["image_width"] = field["image_width"];
217
- childProductField["image_height"] = field["image_height"];
218
- fields[$jq(this).find(".label").text() + "Associated"] = JSON.stringify(childProductField);
219
-
220
- }
221
- });
222
- $jq.ajax({
223
- url: "<?php echo $this->getSaveFieldUrl();?>",
224
- timeout:30000,
225
- type:"POST",
226
- dataType: "json",
227
- data:fields
228
- }).done( function(data) {
229
- createTable('<?php echo $this->getEditUrl();?>');
230
- });
231
-
232
- }
233
-
234
- function createTable(ajaxurl)
235
- {
236
- site= $jq("#site").val();
237
- $jq.ajax({
238
- url: ajaxurl,
239
- type:"POST",
240
- data:{"site":site},
241
- }).done( function(data) {
242
- jarray = $jq.parseJSON(data);
243
- tableHtml="<tbody>";
244
- $jq("#field-list").find("tr").remove();
245
- tableHtml += addFieldConfTableHeader();
246
- $jq.each(jarray, function(key, value) {
247
- childExists = false;
248
- if ((key + "Associated") in jarray && jarray[key + "Associated"]["status"] == "1") {
249
- childExists = true
250
- }
251
- if( key.substr(-10) != "Associated" ) {
252
- tableHtml += constructRow(key, value, childExists);
253
- }
254
- });
255
- tableHtml+="</tbody>";
256
- $jq('#field-list').append(tableHtml)
257
- });
258
- }
259
-
260
- function addFieldConfTableHeader() {
261
- return "<tr>" +
262
- "<th>Field Name</th>" +
263
- "<th>Status</th>" +
264
- "<th>Data Type</th>" +
265
- "<th>Autosuggest</th>" +
266
- "<th>Add to configurable product</th>" +
267
- "<th>Image configuration</th>" +
268
- '<td class="scope-label"></td>' +
269
- "</tr>";
270
- }
271
-
272
- function constructRow(key, value, childExists) {
273
- tableString = "";
274
- tableString += '<tr ' + (childExists?'class="fieldRowSelected"':"") + '>';
275
- tableString += '<td class="label" name="fieldName"><div class="text_td">'+key+"</div></td>";
276
- tableString += constructBooleanSelect("status", value);
277
- tableString += constructDataType(key, value);
278
- tableString += constructBooleanSelect("autosuggest", value);
279
- tableString += constructAddToConfigurableFieldList(childExists);
280
- tableString += constructImageConf(key, value);
281
- tableString +='</tr>';
282
- return tableString;
283
- }
284
-
285
- function constructImageConf(key, value) {
286
- if(!("is_image" in value) || value["is_image"] != "true") {
287
- return "";
288
- }
289
- tableString = "";
290
- tableString += '<td><input type="button" value="EDIT" onclick="editImageConf(this)"/>'
291
- tableString += '<div class="hidden_image_textBox">';
292
- image_generation_enabled = (value["generate_image"] == 1)? true : false;
293
- tableString += '<input id="generate_image" onchange="toggleTextBox(this)" type="checkbox" ' + ((image_generation_enabled)?'checked':'')+'/>';
294
- tableString += '<input id="image_height" type="text" value="' + value["image_height"]+ '" '+ (image_generation_enabled? '':'disabled')+'"/>';
295
- tableString += '<input id="image_width" type="text" value="' + value["image_width"]+ '" '+ (image_generation_enabled? '':'disabled')+'"/>';
296
- tableString += '<input value = "update" type="button" onclick="hideDiv(this);"/>';
297
- tableString += '</div>';
298
- tableString += '</td>';
299
- return tableString;
300
- }
301
-
302
- function toggleTextBox(element) {
303
- active = element.checked ? false: true;
304
- element.parentElement.children[1].disabled = active;
305
- element.parentElement.children[2].disabled = active;
306
- }
307
-
308
- function hideDiv(element) {
309
- element.parentElement.parentElement.children[1].className = "hidden_image_textBox";
310
- element.parentElement.parentElement.children[0].className = "";
311
- }
312
-
313
- function editImageConf(element) {
314
- element.parentElement.children[1].className = "";
315
- element.className = "hidden_image_textBox";
316
- }
317
-
318
- function getRowSelected(element) {
319
- if(element.parentElement.parentElement.className == "fieldRowSelected") {
320
- element.parentElement.parentElement.className = "";
321
- element.children[0].className = "plus";
322
- return;
323
- }
324
- if($jq.find(".fieldRowSelected").length > 10) {
325
- alert("Cant select more than 10 fields");
326
- return;
327
- }
328
- element.children[0].className = "minus";
329
- element.parentElement.parentElement.addClassName("fieldRowSelected");
330
- }
331
-
332
- function constructAddToConfigurableFieldList(childExists) {
333
- tableString = '<td><a href="javascript:void(0)" onclick="getRowSelected(this)" title="Add this field in configurable/grouped product">';
334
- tableString += '<div ';
335
- if(!childExists) {
336
- tableString += 'class="plus"';
337
- } else {
338
- tableString += 'class="minus"';
339
- }
340
- tableString += "/></a></td>";
341
- return tableString;
342
- }
343
-
344
- function constructBooleanSelect(key, value) {
345
- tableString = '<td class="value"><div class="text_td"><select name=' + key + '>'+"<option";
346
- if(value[key]=="0"){
347
- tableString +=' selected="selected"';
348
- }
349
- tableString+=' value="0">Disabled</option><option';
350
- if(value[key]!="0"){
351
- tableString +=' selected="selected"';
352
- }
353
- tableString +=' value="1">Enabled</option></select></div></td>';
354
- return tableString;
355
- }
356
-
357
- function constructDataTypeOption(data_type, compare_data_type) {
358
- tableString = "<option";
359
-
360
- if(data_type == compare_data_type){
361
- tableString +=' selected="selected"';
362
- }
363
- tableString+=' value="' + compare_data_type + '">' + compare_data_type + '</option>';
364
- return tableString;
365
- }
366
-
367
- function constructDataType(key, value) {
368
- tableString = '<td class="value"><div class="text_td"><select name="dataType">';
369
- tableString += constructDataTypeOption(value["data_type"], "text");
370
- tableString += constructDataTypeOption(value["data_type"], "longText");
371
- tableString += constructDataTypeOption(value["data_type"], "link");
372
- tableString += constructDataTypeOption(value["data_type"], "decimal");
373
- tableString += constructDataTypeOption(value["data_type"], "number");
374
- tableString += constructDataTypeOption(value["data_type"], "date");
375
- //tableString += constructDataTypeOption(value["data_type"], "bool");
376
-
377
- tableString +='</select></div></td>';
378
- return tableString;
379
- }
380
-
381
- setInterval(progressbar,10000);
382
- </script>
383
-
384
-
385
- <table class="form-list" width="parent" id="form-list2" name="form-list" cellspacing="0" style="background:none repeat scroll 0 0 #FAFAFA;border=1px solid #D6D6D6;width: 100%;">
386
- <div class="datafeeder-form" width="parent" style="background:none repeat scroll 0 0 #6F8992;padding:5px 10px;color: white;">
387
- <div class="refreshDiv" style="float: right;"><span id="ProgressBar"></span><input type="button" id="refresh" onclick="progressbar()" value="REFRESH" style="margin-left: 10px;vertical-align: top;"></div>
388
- <b>UPLOAD &amp; INDEX (manual)</b>
389
- </div>
390
-
391
- <tr>
392
- <td class="label"><b>PRODUCT FEED UPLOAD: </b></td>
393
- <td class="value"><input type="button" id="fullupload" onclick="makeajaxcall('<?php echo $this->getFullIndexFormAction(); ?>')" value="START"/></td>
394
-
395
- </tr>
396
-
397
- </table>
398
-
399
- <input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>"/>
400
- </div>
401
- </frame>
402
- <frame name="login_frame"></frame>
403
- </frameset>
404
-
405
- <div class="editconfig">
406
- <div class="content-header">
407
- <table cellspacing="0">
408
- <tr>
409
- <td>
410
- <h3 <?php if($this->getHeaderCss()): ?>
411
- class="<?php echo $this->getHeaderCss()?>" <?php endif; ?>>
412
- <?php echo Mage::helper('adminhtml')->__("FIELD CONFIGURATION") ?>
413
- </h3>
414
- </td>
415
- <td class="form-buttons">
416
- <input type="button" style='background:url("images/btn_bg.gif") repeat-x scroll 0 100% #FFAC47;border-color:#ED6502 #A04300 #A04300 #ED6502;border-style:solid;border-width:1px;color:#FFFFFF;font:bold 12px arial,helvetica,sans-serif;text-align:center !important;white-space:nowrap;padding: 3px;' onclick="saveFieldConf()" value="SAVE"/>
417
- </td>
418
- </tr>
419
- </table>
420
- </div>
421
- <div class="unbxd_edit_config" style="background:none repeat scroll 0 0 #FAFAFA;border:1px solid #D6D6D6">
422
-
423
- <form action="<?php echo $this->getSaveFieldUrl() ?>" method="post"
424
- id="config_edit_form" onload="createTable('<?php echo $this->getEditUrl();?>')">
425
- <input name="site_name" id= "site_name" type="hidden" />
426
- <!--<center>-->
427
- <p class="switcher">
428
- <label for="store_switcher"><b> Field Configuration </b><label>
429
- </p>
430
-
431
- <table class="form-list" id="field-list" name="form-list" cellspacing="0" style="color: #2F2F2F;
432
- font: 12px/1.5em Arial,Helvetica,sans-serif; margin-left: 1%;">
433
- </table>
434
-
435
- <input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />
436
-
437
- </form>
438
- </div>
439
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/design/adminhtml/default/default/layout/unbxd/recommendation.xml ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <unbxd_recommendation_router_admin_edit>
4
+ <reference name="head">
5
+ <action method="addJs"><name>unbxd/app.js</name></action>
6
+ <action method="addCss"><name>unbxd/css/app.css</name></action>
7
+ </reference>
8
+ <reference name="menu">
9
+ <action method="setActive"><menupath>unbxd_recommendation</menupath></action>
10
+ </reference>
11
+ <reference name="content">
12
+ <block type="unbxd_recommendation/admin" name="unbxd.conf" template="unbxd/recommendation.phtml" />
13
+ </reference>
14
+ </unbxd_recommendation_router_admin_edit>
15
+ </layout>
app/design/adminhtml/default/default/template/unbxd/recommendation.phtml ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $skinUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN) . "/adminhtml/default/default/"; ?>
2
+ <input type="hidden" id="skinUrl" value="<?php echo $skinUrl; ?>" >
3
+
4
+ <script>
5
+ try{
6
+ window._unbxdSkinurl = "<?php echo $skinUrl; ?>"
7
+ window._unbxdBaseurl = "<?php echo $this->getBaseUrl(); ?>"
8
+ }catch(e){
9
+ console.warn(e);
10
+ }
11
+
12
+ </script>
13
+
14
+ <link rel="stylesheet" href= "<?php echo $skinUrl; ?>unbxd/css/bootstrap.css">
15
+ <link rel="stylesheet" href= "<?php echo $skinUrl; ?>unbxd/css/bootstrap-them.css">
16
+ <link rel="stylesheet" href= "<?php echo $skinUrl; ?>unbxd/css/chosen.css">
17
+ <link rel="stylesheet" href= "<?php echo $skinUrl; ?>unbxd/css/app.css">
18
+ <link rel="stylesheet" href= "<?php echo $skinUrl; ?>unbxd/css/unbxd-magento.css">
19
+
20
+
21
+ <div id="container">
22
+ </div>
23
+
24
+ <script id='template' type='text/ractive'>
25
+ <div class="container">
26
+
27
+ <div class="magent0-left-nav">
28
+ <div class="middle-nav-magento-dropdown height-100 unbxd-top-strip">
29
+ <div class="middle-nav-text mar-btm-10 pad-btm-0" style="padding-top: 10px;">
30
+ Choose Website
31
+ </div>
32
+
33
+ <div class="middle-nav-dropdown">
34
+ <div class="btn-group width-100" >
35
+ <select decorator='chosen:site' on-change="pdn" value={{site}} name="unbxd-site" id="selectSites">
36
+ {{#sites}}
37
+ <option value="{{name}}">{{name}}</option>
38
+ {{/sites}}
39
+ </select>
40
+ </div>
41
+ </div>
42
+ </div>
43
+
44
+ <div class="middle-nav-magento">
45
+ <ul class="magento-nav">
46
+ <li on-click='showCredentials' class="clickable-btn
47
+ {{#if _unbxdObject.activeStep.one}} magento-active{{/if}}">
48
+ <a>Credentials</a>
49
+ </li>
50
+
51
+ <li on-click='showCatalog' class="clickable-btn
52
+ {{#if _unbxdObject.activeStep.two}} magento-active{{/if}}">
53
+ <a>Catalog</a>
54
+ </li>
55
+
56
+ <li on-click='showAnalytics' class="clickable-btn
57
+ {{#if _unbxdObject.activeStep.three}} magento-active{{/if}}">
58
+ <a>Analytics</a>
59
+ </li>
60
+
61
+ <li on-click='showWidgets' class="clickable-btn
62
+ {{#if _unbxdObject.activeStep.four}} magento-active{{/if}}" >
63
+ <a>Widgets</a>
64
+ </li>
65
+ </ul>
66
+ </div>
67
+
68
+ </div>
69
+
70
+
71
+
72
+
73
+
74
+ <div class="inner-container-magento row mar-0 top-185 pad-top-32 unbxd-top-strip">
75
+ <div class="col-md-60 magento-row-tabs border-left-color pad-0 background-dark-grey unbxd-border ">
76
+ <ul class="magento-conf-tabs">
77
+ <li on-click='showCredentials'>
78
+ <a class="magento-conf-tabs-enabled
79
+ {{#if _unbxdObject.activeStep.one}}magento-head-active{{/if}} width-25 clickable-btn">
80
+ <div class="magento-number" style="">
81
+ 1
82
+ </div>
83
+ <div class="magento-number-text">
84
+ Authenticate App
85
+ </div> </a>
86
+ </li>
87
+ <li on-click='showCatalog'>
88
+ <a class="magento-conf-tabs-enabled width-25 clickable-btn
89
+ {{#if _unbxdObject.activeStep.two}}magento-head-active{{/if}}">
90
+ <div class="magento-number">
91
+ 2
92
+ </div>
93
+ <div class="magento-number-text">
94
+ Catalog Configuration
95
+ </div> </a>
96
+ </li>
97
+ <li on-click='showAnalytics'>
98
+ <a class="magento-conf-tabs-enabled width-25 clickable-btn
99
+ {{#if _unbxdObject.activeStep.three}}magento-head-active{{/if}}">
100
+ <div class="magento-number">
101
+ 3
102
+ </div>
103
+ <div class="magento-number-text">
104
+ Analytics integration
105
+ </div> </a>
106
+ </li>
107
+ <li on-click='showWidgets'>
108
+ <a class="magento-conf-tabs-enabled width-25 clickable-btn
109
+ {{#if _unbxdObject.activeStep.four}}magento-head-active{{/if}}" style="background-image:none;">
110
+ <div class="magento-number">
111
+ 4
112
+ </div>
113
+ <div class="magento-number-text width-188">
114
+ Install Recommendation Widget
115
+ </div> </a>
116
+ </li>
117
+ </ul>
118
+ </div>
119
+ </div>
120
+
121
+ <div id="innerContainr" class="inner-container-magento pad-btm-100 pad-top-20">
122
+ </div>
123
+ </div>
124
+ </script>
125
+
126
+ <script id='tab1Template' type='text/ractive'>
127
+ </script>
128
+
129
+ <script id='tab2Template' type='text/ractive'>
130
+ </script>
131
+
132
+ <script id='tab3Template' type='text/ractive'>
133
+ </script>
134
+
135
+ <script id='tab4Template' type='text/ractive'>
136
+ </script>
137
+
138
+ <script id='rowTemplate' type='text/ractive'>
139
+ </script>
140
+
141
+
142
+ <script src= "<?php echo Mage::getBaseUrl('js') ?>unbxd/jquery.js"></script>
143
+ <script src="<?php echo $skinUrl; ?>unbxd/js/lib/chosen.js"></script>
144
+ <script type="<?php echo $skinUrl; ?>text/javascript">
145
+ jQuery.noConflict();
146
+ </script>
147
+ <script src="<?php echo $skinUrl; ?>unbxd/js/lib/ractive.js"></script>
148
+ <script src="<?php echo $skinUrl; ?>unbxd/js/lib/ractive-chosen.js"></script>
149
+ <script src="<?php echo $skinUrl; ?>unbxd/js/lib/bootstrap-tooltip.js"></script>
150
+
151
+ <script src="<?php echo $skinUrl; ?>unbxd/js/app.js"></script>
152
+
153
+
154
+
app/design/frontend/base/default/layout/unbxd/recommendation.xml ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <!-- ON ALL PAGES -->
4
+ <default>
5
+ <reference name="before_body_end">
6
+ <block name="unbxd.`.tracking" template="unbxd/tracker.phtml" after="-" type="core/template"/>
7
+ </reference>
8
+ </default>
9
+ <!-- CATEGORY PAGE -->
10
+ <catalog_category_default>
11
+ <reference name="before_body_end">
12
+ <block name="unbxd.analytics.categorytracking" template="unbxd/tracking/category.phtml" type="core/template"/>
13
+ </reference>
14
+ </catalog_category_default>
15
+ <!-- PRODUCT PAGE -->
16
+ <catalog_product_view>
17
+ <reference name="before_body_end">
18
+ <block name="unbxd.analytics.producttracking" template="unbxd/tracking/product.phtml" after="-" type="core/template"/>
19
+ </reference>
20
+ </catalog_product_view>
21
+ <!-- ORDER PAGE -->
22
+ <checkout_onepage_success>
23
+ <reference name="before_body_end">
24
+ <block name="unbxd.analytics.ordertracking" template="unbxd/tracking/order.phtml" type="core/template"/>
25
+ </reference>
26
+ </checkout_onepage_success>
27
+ <!-- ADDTOCART PAGE -->
28
+ <checkout_cart_index>
29
+ <reference name="before_body_end">
30
+ <block name="unbxd.analytics.ordertracking" template="unbxd/tracking/cart.phtml" type="core/template"/>
31
+ </reference>
32
+ </checkout_cart_index>
33
+ </layout>
app/design/frontend/base/default/template/unbxd/tracker.phtml ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <input type="hidden" id="jQueryBaseUrl" value="<?php echo Mage::getBaseUrl('js') ?>unbxd/jquery.js"/>
2
+ <script type="text/javascript">
3
+ /* * * CONFIGURATION * * */
4
+ var UnbxdSiteName = "<?php echo Mage::getResourceModel('unbxd_recommendation/config')
5
+ ->getValue(Mage::app()->getWebsite()->getId(), Unbxd_Recommendation_Helper_Confighelper::SITE_KEY) ?>";
6
+ var UnbxdApiKey = "<?php echo Mage::getResourceModel('unbxd_recommendation/config')
7
+ ->getValue(Mage::app()->getWebsite()->getId(), Unbxd_Recommendation_Helper_Confighelper::API_KEY) ?>";
8
+
9
+ if(typeof UnbxdWidgetsConf == 'undefined' || UnbxdWidgetsConf == null) {
10
+ var UnbxdWidgetsConf = {
11
+ currency: "<?php echo Mage::app()->getStore()->getCurrentCurrencyCode(); ?>"
12
+ };
13
+ }
14
+ /* * * DON'T EDIT BELOW THIS LINE * * */
15
+ (function() {
16
+ var ubx = document.createElement('script');
17
+ ubx.type = 'text/javascript'; ubx.async = true;
18
+ ubx.src = '//unbxd.s3.amazonaws.com/unbxdAnalytics.js';
19
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ubx);
20
+ })();
21
+
22
+ (function() {
23
+ var ubx = document.createElement('script');
24
+ ubx.type = 'text/javascript'; ubx.async = true;
25
+ ubx.src = '<?php echo Mage::getBaseUrl('js') ?>unbxd/embed.js';
26
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ubx);
27
+ })();
28
+
29
+ function getBaseUrl() {
30
+ return "<?php echo Mage::getBaseUrl(); ?>";
31
+ }
32
+ </script>
app/design/frontend/base/default/template/unbxd/tracking/cart.phtml ADDED
@@ -0,0 +1 @@
 
1
+ <!-- UNBXD CART TRACKING -->
app/design/frontend/base/default/template/unbxd/tracking/category.phtml ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!-- UNBXD CATEGORY PAGE -->
2
+ <script type="text/javascript">
3
+ <?php $category = $this->getData('current_category');
4
+ if (isset($category)) { ?>
5
+ category = "<?php echo $category->getName(); ?>";
6
+ <?php } ?>
7
+ var UnbxdWidgetsConf = {
8
+ currency : "<?php echo Mage::app()->getStore()->getCurrentCurrencyCode(); ?>"
9
+ <?php if (isset($category)) { ?>
10
+ ,pid:"<?php echo $category->getName(); ?>"
11
+ <?php } ?>
12
+
13
+ };
14
+ </script>
app/design/frontend/base/default/template/unbxd/tracking/order.phtml ADDED
@@ -0,0 +1 @@
 
1
+ <!-- UNBXD ORDER TRACKING -->
app/design/frontend/base/default/template/unbxd/tracking/product.phtml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript">
2
+ <?php $product = Mage::registry('current_product'); ?>
3
+ var UnbxdWidgetsConf = {
4
+ currency : "<?php echo Mage::app()->getStore()->getCurrentCurrencyCode(); ?>"
5
+ <?php if (isset($product)) { ?>
6
+ ,pid:"<?php echo Mage::helper('unbxd_recommendation/feedhelper')->getUniqueId($product); ?>"
7
+ <?php } ?>
8
+
9
+ };
10
+ <?php if (isset($product)) { ?>
11
+ pid = "<?php echo Mage::helper('unbxd_recommendation/feedhelper')->getUniqueId($product); ?>";
12
+ <?php } ?>
13
+ function triggerUnbxd() {
14
+ Unbxd.track("click", {"pid":pid, rank: "", box_type: ""});
15
+ }
16
+ if (window.addEventListener) {
17
+ window.addEventListener('load', triggerUnbxd, false);
18
+ } else {
19
+ window.attachEvent('onload', triggerUnbxd);
20
+ }
21
+ </script>
app/etc/modules/Unbxd_Datafeeder.xml DELETED
@@ -1,8 +0,0 @@
1
- <config>
2
- <modules>
3
- <Unbxd_Datafeeder>
4
- <active>true</active>
5
- <codePool>local</codePool>
6
- </Unbxd_Datafeeder>
7
- </modules>
8
- </config>
 
 
 
 
 
 
 
 
app/etc/modules/Unbxd_Recommendation.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <modules>
3
+ <Unbxd_Recommendation>
4
+ <active>true</active>
5
+ <codePool>local</codePool>
6
+ </Unbxd_Recommendation>
7
+ </modules>
8
+ </config>
js/unbxd/app.js ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ /**
2
+ UNBXD SCRIPT ADDED
3
+
4
+ **/
js/unbxd/embed.js ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var loadScript = function(library, url, callback){
2
+ if( typeof window[library] !== "undefined"){
3
+ callback(window[library]);
4
+ return false;
5
+ }
6
+
7
+ var script = document.createElement("script")
8
+ script.type = "text/javascript";
9
+
10
+ if (script.readyState){ //IE
11
+ script.onreadystatechange = function(){
12
+ if (script.readyState == "loaded" ||
13
+ script.readyState == "complete"){
14
+ script.onreadystatechange = null;
15
+ callback(window[library]);
16
+ }
17
+ };
18
+ } else { //Others
19
+ script.onload = function(){
20
+ callback(window[library]);
21
+ };
22
+ }
23
+
24
+ script.src = url;
25
+ document.getElementsByTagName("head")[0].appendChild(script);
26
+ };
27
+
28
+ if (typeof Unbxd === "undefined")
29
+ window.Unbxd = {};
30
+ var widgetRendrer = function ($) {
31
+ jQuery.noConflict();
32
+ var key = function () {
33
+ if (typeof UnbxdKey != "undefined" && UnbxdKey != "") {
34
+ return UnbxdKey
35
+ }
36
+ if (typeof UnbxdSiteName != "undefined" && UnbxdSiteName != "") {
37
+ return UnbxdSiteName
38
+ }
39
+ return false
40
+ };
41
+
42
+ function decode(s) {
43
+ return decodeURIComponent(s.replace(/\+/g, " "))
44
+ }
45
+
46
+ function decodeAndParse(s) {
47
+ if (s.indexOf('"') === 0) {
48
+ s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, "\\")
49
+ }
50
+ s = decode(s);
51
+ return s
52
+ }
53
+
54
+ var readCookie = function (key) {
55
+ var cookies = document.cookie.split("; ");
56
+ var result = key ? undefined : {};
57
+ for (var i = 0, l = cookies.length; i < l; i++) {
58
+ var parts = cookies[i].split("=");
59
+ var name = decode(parts.shift());
60
+ var cookie = parts.join("=");
61
+ if (key && key === name) {
62
+ try {
63
+ result = decodeAndParse(cookie);
64
+ break
65
+ } catch (e) {
66
+ }
67
+ }
68
+ }
69
+ return result
70
+ };
71
+ var widgetsLoaded = false;
72
+ var render = function () {
73
+ if (key() == false)
74
+ return;
75
+ var uid = readCookie("unbxd.userId");
76
+ var unbxd_recommender_url = "//apac-recommendations.unbxdapi.com/";
77
+ if (window.UnbxdMode && window.UnbxdMode == "local") {
78
+ var unbxd_recommender_url = "/"
79
+ }
80
+ var appendCurrency = function (path) {
81
+ if (typeof UnbxdWidgetsConf != "undefined" && UnbxdWidgetsConf.currency) {
82
+ path = path + "&currency=" + UnbxdWidgetsConf.currency
83
+ }
84
+ return path
85
+ };
86
+ var appendUid = function (path) {
87
+ if (uid && uid != "") {
88
+ path = path + "&uid=" + uid
89
+ }
90
+ return path
91
+ };
92
+ var getWidth = function () {
93
+ if (typeof window.innerWidth == "number") {
94
+ return window.innerWidth
95
+ } else if (document.documentElement && document.documentElement.clientWidth) {
96
+ return document.documentElement.clientWidth
97
+ }
98
+ return screen.width
99
+ };
100
+ var load = function (id, path) {
101
+ path = appendCurrency(path);
102
+ path = appendUid(path);
103
+ path = path + "&screenWidth=" + getWidth();
104
+ urlpath = getBaseUrl() + 'unbxd/widget' + path;
105
+ $.ajax({
106
+ async:true,
107
+ url: urlpath,
108
+ type: "GET",
109
+ dataType: "html",
110
+ success: function(data) {
111
+ $(id).html(data);
112
+ },
113
+ error: function (xhr, status) {
114
+ }
115
+ });
116
+ };
117
+ var tryToRender = function (id, url) {
118
+ if (typeof jQuery != "undefined" && jQuery(id).length > 0) {
119
+ load(id, url);
120
+ widgetsLoaded = true
121
+ } else {
122
+ setTimeout(function () {
123
+ tryToRender(id, url)
124
+ }, 100)
125
+ }
126
+ };
127
+ if (uid && uid != "") {
128
+ tryToRender("#unbxd_recently_viewed", "?widgetType=recently-viewed&uid=" + uid + "&cont=unbxd_recently_viewed");
129
+ tryToRender("#unbxd_recommended_for_you", "?widgetType=recommend&uid=" + uid + "&cont=unbxd_recommended_for_you");
130
+ tryToRender("#unbxd_cart_recommendations", "?widgetType=cart-recommend&uid" + uid + "&cont=unbxd_cart_recommendations")
131
+ } else {
132
+ tryToRender("#unbxd_recommended_for_you", "?widgetType=recommend&cont=unbxd_recommended_for_you")
133
+ }
134
+ if (typeof UnbxdWidgetsConf != "undefined" && UnbxdWidgetsConf.pid) {
135
+ var pid = UnbxdWidgetsConf.pid;
136
+ tryToRender("#unbxd_also_viewed", "?widgetType=also-viewed&pid=" + pid + "&cont=unbxd_also_viewed");
137
+ tryToRender("#unbxd_also_bought", "?widgetType=also-bought&pid=" + pid + "&cont=unbxd_also_bought");
138
+ tryToRender("#unbxd_more_like_these", "?widgetType=more-like-these&pid=" + pid + "&cont=unbxd_more_like_these");
139
+ tryToRender("#unbxd_pdp_top_sellers", "?widgetType=pdp-top-sellers&pid=" + pid + "&cont=unbxd_pdp_top_sellers")
140
+ }
141
+ tryToRender("#unbxd_top_sellers", "?widgetType=top-sellers&cont=unbxd_top_sellers");
142
+ if (typeof UnbxdWidgetsConf != "undefined" && UnbxdWidgetsConf.category) {
143
+ var category = UnbxdWidgetsConf.category;
144
+ tryToRender("#unbxd_category_top_sellers", "?widgetType=category-top-sellers&category=" + category + "&cont=unbxd_category_top_sellers")
145
+ }
146
+ if (typeof UnbxdWidgetsConf != "undefined" && UnbxdWidgetsConf.brand) {
147
+ var brand = UnbxdWidgetsConf.brand;
148
+ tryToRender("#unbxd_brand_top_sellers", "?widgetType=brand-top-sellers&brand=" + brand + "&cont=unbxd_brand_top_sellers")
149
+ }
150
+ };
151
+ render();
152
+ Unbxd.refreshWidgets = function () {
153
+ if (!widgetsLoaded)
154
+ return;
155
+ render()
156
+ };
157
+ setInterval(function () {
158
+ if (Unbxd.gatherImpressions != undefined && Unbxd.bootState == 4)
159
+ Unbxd.gatherImpressions()
160
+ }, 1e3)
161
+ };
162
+
163
+ function unbxdOnLoad() {
164
+ jQueryBaseUrlElement = document.getElementById('jQueryBaseUrl');
165
+ if(jQueryBaseUrlElement != null) {
166
+ jQueryBaseUrl = jQueryBaseUrlElement.value;
167
+ } else{
168
+ jQueryBaseUrl = "//code.jquery.com/jquery-1.8.0.min.js";
169
+ }
170
+ loadScript('jQuery', jQueryBaseUrl, widgetRendrer)
171
+ }
172
+ if (window.addEventListener) {
173
+ window.addEventListener('load', unbxdOnLoad, false);
174
+ } else {
175
+ window.attachEvent('onload', unbxdOnLoad);
176
+ }
js/unbxd/jquery.js ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ /*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
2
+ !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f
3
+ }}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},W=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a>",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=$.test(e)?this.mouseHooks:Z.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||z),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},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(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||z,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==db()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===db()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=z.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===L&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&(a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault())?bb:cb):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:cb,isPropagationStopped:cb,isImmediatePropagationStopped:cb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=bb,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=bb,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submitBubbles||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?b.form:void 0;c&&!n._data(c,"submitBubbles")&&(n.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),n._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.changeBubbles||(n.event.special.change={setup:function(){return Y.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),n.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),n.event.simulate("change",this,a,!0)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;Y.test(b.nodeName)&&!n._data(b,"changeBubbles")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a,!0)}),n._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!Y.test(this.nodeName)}}),l.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=cb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return n().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=cb),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});function eb(a){var b=fb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var fb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gb=/ jQuery\d+="(?:null|\d+)"/g,hb=new RegExp("<(?:"+fb+")[\\s/>]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/<tbody/i,mb=/<|&#?\w+;/,nb=/<(?:script|style|link)/i,ob=/checked\s*(?:[^=]|=\s*.checked.)/i,pb=/^$|\/(?:java|ecma)script/i,qb=/^true\/(.*)/,rb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,sb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1></$2>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?"<table>"!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Db[0].contentWindow||Db[0].contentDocument).document,b.write(),b.close(),c=Fb(a,b),Db.detach()),Eb[a]=c),c}!function(){var a,b,c=z.createElement("div"),d="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],a.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(a.style.opacity),l.cssFloat=!!a.style.cssFloat,c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===c.style.backgroundClip,a=c=null,l.shrinkWrapBlocks=function(){var a,c,e,f;if(null==b){if(a=z.getElementsByTagName("body")[0],!a)return;f="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",c=z.createElement("div"),e=z.createElement("div"),a.appendChild(c).appendChild(e),b=!1,typeof e.style.zoom!==L&&(e.style.cssText=d+";width:1px;padding:1px;zoom:1",e.innerHTML="<div></div>",e.firstChild.style.width="5px",b=3!==e.offsetWidth),a.removeChild(c),a=c=e=null}return b}}();var Hb=/^margin/,Ib=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Jb,Kb,Lb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Jb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),Ib.test(g)&&Hb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):z.documentElement.currentStyle&&(Jb=function(a){return a.currentStyle},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ib.test(g)&&!Lb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Mb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h=z.createElement("div"),i="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",j="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";h.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",b=h.getElementsByTagName("a")[0],b.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(b.style.opacity),l.cssFloat=!!b.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,b=h=null,n.extend(l,{reliableHiddenOffsets:function(){if(null!=c)return c;var a,b,d,e=z.createElement("div"),f=z.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=z.createElement("div"),a.style.cssText=i,f.appendChild(a).appendChild(e),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",d=0===b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",c=d&&0===b[0].offsetHeight,f.removeChild(a),e=f=null,c},boxSizing:function(){return null==d&&k(),d},boxSizingReliable:function(){return null==e&&k(),e},pixelPosition:function(){return null==f&&k(),f},reliableMarginRight:function(){var b,c,d,e;if(null==g&&a.getComputedStyle){if(b=z.getElementsByTagName("body")[0],!b)return;c=z.createElement("div"),d=z.createElement("div"),c.style.cssText=i,b.appendChild(c).appendChild(d),e=d.appendChild(z.createElement("div")),e.style.cssText=d.style.cssText=j,e.style.marginRight=e.style.width="0",d.style.width="1px",g=!parseFloat((a.getComputedStyle(e,null)||{}).marginRight),b.removeChild(c)}return g}});function k(){var b,c,h=z.getElementsByTagName("body")[0];h&&(b=z.createElement("div"),c=z.createElement("div"),b.style.cssText=i,h.appendChild(b).appendChild(c),c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",n.swap(h,null!=h.style.zoom?{zoom:1}:{},function(){d=4===c.offsetWidth}),e=!0,f=!1,g=!0,a.getComputedStyle&&(f="1%"!==(a.getComputedStyle(c,null)||{}).top,e="4px"===(a.getComputedStyle(c,null)||{width:"4px"}).width),h.removeChild(b),c=h=null)}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Nb=/alpha\([^)]*\)/i,Ob=/opacity\s*=\s*([^)]*)/,Pb=/^(none|table(?!-c[ea]).+)/,Qb=new RegExp("^("+T+")(.*)$","i"),Rb=new RegExp("^([+-])=("+T+")","i"),Sb={position:"absolute",visibility:"hidden",display:"block"},Tb={letterSpacing:0,fontWeight:400},Ub=["Webkit","O","Moz","ms"];function Vb(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ub.length;while(e--)if(b=Ub[e]+c,b in a)return b;return d}function Wb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",Gb(d.nodeName)))):f[g]||(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Xb(a,b,c){var d=Qb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Yb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Zb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Jb(a),g=l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Kb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ib.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Yb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Kb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=Vb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Rb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]="",i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Vb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Kb(a,b,d)),"normal"===f&&b in Tb&&(f=Tb[b]),""===c||c?(e=parseFloat(f),c===!0||n.isNumeric(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Pb.test(n.css(a,"display"))?n.swap(a,Sb,function(){return Zb(a,b,d)}):Zb(a,b,d):void 0},set:function(a,c,d){var e=d&&Jb(a);return Xb(a,c,d?Yb(a,b,d,l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Ob.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Nb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Nb.test(f)?f.replace(Nb,e):f+" "+e)}}),n.cssHooks.marginRight=Mb(l.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},Kb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Hb.test(a)||(n.cssHooks[a+b].set=Xb)}),n.fn.extend({css:function(a,b){return W(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Jb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)
4
+ },a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),_b=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ac||(ac=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(ac),ac=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e=z.createElement("div");e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});
js/unbxd/unbxdAnalytics.js ADDED
@@ -0,0 +1,843 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ if(typeof(Unbxd) === 'undefined')
2
+ window.Unbxd = {};
3
+
4
+ Unbxd.version = "2.8.22.1";
5
+
6
+ // set UnbxdMode to manage tracker_url
7
+ Unbxd.local = typeof UnbxdMode !== 'undefined' && UnbxdMode == 'local'
8
+
9
+ // Setting tracker URL
10
+ Unbxd.tracker_url = Unbxd.local === true ? '/v2/1p.jpg' : '//tracker.unbxdapi.com/v2/1p.jpg';
11
+
12
+ // Initialize an empty config object
13
+ Unbxd.conf = Unbxd.conf || {};
14
+
15
+ /**
16
+ * Cookies
17
+ */
18
+ Unbxd.cookies = {
19
+ uid : "userId",
20
+ visitor : "visit",
21
+ pending : "pen", // Pending
22
+ debug : "debug", // enables Debugging
23
+ disabled : "disabled" // A/B
24
+ };
25
+
26
+ Unbxd.extend = function(){
27
+ for(var i=1; i<arguments.length; i++)
28
+ for(var key in arguments[i])
29
+ if(arguments[i].hasOwnProperty(key))
30
+ arguments[0][key] = arguments[i][key];
31
+ return arguments[0];
32
+ }
33
+
34
+ ; // Do not remove
35
+ (function (u) {
36
+ var pluses = /\+/g;
37
+
38
+ function decode(s) {
39
+ if (config.raw) {
40
+ return s;
41
+ }
42
+ return decodeURIComponent(s.replace(pluses, ' '));
43
+ }
44
+
45
+ function decodeAndParse(s) {
46
+ if (s.indexOf('"') === 0) {
47
+ // This is a quoted cookie as according to RFC2068, unescape...
48
+ s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
49
+ }
50
+
51
+ s = decode(s);
52
+
53
+ try {
54
+ return config.json ? JSON.parse(s) : s;
55
+ } catch(e) {}
56
+ }
57
+
58
+ var config = u.cookie = function (key, value, options) {
59
+
60
+ // Write
61
+ if (value !== undefined) {
62
+ options = Unbxd.extend({}, config.defaults, options);
63
+
64
+ if (typeof options.expires === 'number') {
65
+ var days = options.expires, t = options.expires = new Date();
66
+ t.setDate(t.getDate() + days);
67
+ }
68
+
69
+ value = config.json ? JSON.stringify(value) : String(value);
70
+
71
+ return (document.cookie = [
72
+ config.raw ? key : encodeURIComponent(key),
73
+ '=',
74
+ config.raw ? value : encodeURIComponent(value),
75
+ options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
76
+ options.path ? '; path=' + options.path : '',
77
+ options.domain ? '; domain=' + options.domain : '',
78
+ options.secure ? '; secure' : ''
79
+ ].join(''));
80
+ }
81
+
82
+ // Read
83
+ var cookies = document.cookie.split('; ');
84
+ var result = key ? undefined : {};
85
+ for (var i = 0, l = cookies.length; i < l; i++) {
86
+ var parts = cookies[i].split('=');
87
+ var name = decode(parts.shift());
88
+ var cookie = parts.join('=');
89
+
90
+ if (key && key === name) {
91
+ try{
92
+ result = decodeAndParse(cookie);
93
+ break;
94
+ }catch(e){}
95
+ }
96
+
97
+ if (!key) {
98
+ try{
99
+ result[name] = decodeAndParse(cookie);
100
+ }catch(e){}
101
+ }
102
+ }
103
+
104
+ return result;
105
+ };
106
+
107
+ config.defaults = {};
108
+
109
+ u.deleteCookie = function (key, options) {
110
+ if (u.cookie(key) !== undefined) {
111
+ // Must not alter options, thus extending a fresh object...
112
+ u.cookie(key, '', Unbxd.extend({}, options, { expires: -1 }));
113
+ return true;
114
+ }
115
+ return false;
116
+ };
117
+
118
+ })(Unbxd);
119
+
120
+ Unbxd.key = function(){
121
+ if(typeof(UnbxdKey) != 'undefined' && UnbxdKey != ""){
122
+ return UnbxdKey;
123
+ }
124
+
125
+ if(typeof(UnbxdSiteName) != 'undefined' && UnbxdSiteName != ""){
126
+ return UnbxdSiteName;
127
+ }
128
+
129
+ return false;
130
+ }
131
+
132
+ Unbxd.setCookie = function(name, value, expires){
133
+ try{
134
+ var params = {path : '/'};
135
+ if(expires){
136
+ params.expires = expires;
137
+ }
138
+
139
+ // Explicitly set domain for cookies
140
+ var domain = Unbxd.getRootDomain(document.URL);
141
+ if(domain != undefined){
142
+ params.domain = domain;
143
+ }
144
+
145
+ return this.cookie('unbxd.' + name, value, params);
146
+ }catch(e){
147
+ Unbxd.log(e);
148
+ }
149
+ }
150
+
151
+ Unbxd.readCookie = function(name){
152
+ try{
153
+ return this.cookie('unbxd.' + name, undefined, { path: '/'});
154
+ }catch(e){
155
+ // Unbxd.log(e);
156
+ }
157
+
158
+ return undefined;
159
+ }
160
+
161
+ Unbxd.removeCookie = function(name){
162
+ var domain = Unbxd.getRootDomain(document.URL);
163
+ this.deleteCookie('unbxd.' + name, {path : '/', domain : domain});
164
+ this.deleteCookie('unbxd.' + name, {path : '/', domain : 'www' + domain});
165
+ }
166
+
167
+ Unbxd.getCookiesStartsWith = function(prefix){
168
+ try{
169
+ var cookies = this.cookie();
170
+ var keys = _.keys(cookies);
171
+
172
+ keys = _.filter(keys, function(key){
173
+ return key.indexOf('unbxd.' + prefix) == 0;
174
+ });
175
+
176
+ var filtered = {};
177
+ _.each(keys, function(key){
178
+ filtered[key] = cookies[key];
179
+ });
180
+
181
+ return filtered;
182
+ }catch(e){
183
+ Unbxd.log(e);
184
+ }
185
+
186
+ return {};
187
+ }
188
+
189
+ Unbxd.setCookieIfNotSet = function(name, value, expires){
190
+ var v = Unbxd.readCookie(name);
191
+ if(_.isUndefined(v) || v == ''){
192
+ Unbxd.log("Cookie : " + name + " not found. Will set to : " + value);
193
+ Unbxd.setCookie(name, value, expires);
194
+ return true;
195
+ }
196
+
197
+ return false;
198
+ }
199
+
200
+ Unbxd.log = function(str){
201
+ if(Unbxd.readCookie(Unbxd.cookies.debug) === '1'){
202
+ console.log("Unbxd : " + str);
203
+
204
+ if(window.jQuery)
205
+ jQuery('#ubx-console').append("<div style='padding:2px;'>" + str + "</div>");
206
+ }
207
+ }
208
+
209
+ Unbxd.getPathName = function(url){
210
+ if(url == undefined) return null;
211
+
212
+ var a = document.createElement('a'); // Create a dummy <a> element
213
+ a.href = url; // Assign link, let the browser parse it
214
+ return a.pathname;
215
+ }
216
+
217
+ Unbxd.getHostName = function(url){
218
+ if(url == undefined) return null;
219
+
220
+ var a = document.createElement('a'); // Create a dummy <a> element
221
+ a.href = url; // Assign link, let the browser parse it
222
+ return a.hostname;
223
+ }
224
+
225
+ Unbxd.getRootDomain = function(url){
226
+ var hostname = Unbxd.getHostName(url);
227
+ try{
228
+ var checkIP = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
229
+ if(checkIP.test(hostname)){
230
+ return hostname;
231
+ }
232
+
233
+ var parts = hostname.split('.').reverse();
234
+ if(parts.length > 1){
235
+ var domain = '.' + parts[1] + '.' + parts[0];
236
+
237
+ if(parts.length > 2){ // Handling SLDs
238
+ var slds = [".co.uk", ".co.in", ".com.au", ".com.my", ".co.nz"]; // :( This will need to be updated from time to time.
239
+ if(slds.indexOf(domain) != -1){
240
+ domain = '.' + parts[2] + domain;
241
+ }
242
+ }
243
+
244
+ return domain;
245
+ }
246
+ }catch(e){}
247
+ }
248
+
249
+ Unbxd.getParameterByName = function(name) {
250
+ name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
251
+ var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
252
+ results = regex.exec(location.search);
253
+ return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
254
+ }
255
+
256
+ Unbxd.getPendingBeacons = function(){
257
+ return Unbxd.getCookiesStartsWith(Unbxd.cookies.pending);
258
+ }
259
+
260
+ Unbxd.fire = function(action, beacon, success){
261
+ var key = Unbxd.key();
262
+ if(key == false) return;
263
+
264
+ var uid = Unbxd.readCookie(Unbxd.cookies.uid);
265
+
266
+ try{
267
+ var url = Unbxd.tracker_url
268
+ + '?data=' + encodeURIComponent(beacon)
269
+ + '&UnbxdKey=' + key
270
+ + '&action=' + action
271
+ + '&uid=' + uid
272
+ + '&t=' + (new Date().getTime()) + "|" + Math.random();
273
+
274
+ var img = new Image();
275
+ img.src = url;
276
+
277
+ Unbxd.log("Beaconing --> Action : " + action + ", uid : " + uid + ", " + beacon);
278
+ }catch(e){
279
+ Unbxd.log(e);
280
+ }
281
+ }
282
+
283
+ Unbxd.beaconCount = 0;
284
+ Unbxd.send = function(){
285
+ if(Unbxd.beaconCount >= 100){
286
+ Unbxd.log("Too many beacons. Something might be wrong")
287
+ return;
288
+ }
289
+
290
+ Unbxd.beaconCount++;
291
+
292
+ // Get oldest pending beacon;
293
+ var pendingBeacons = Unbxd.getPendingBeacons();
294
+
295
+ if(_.size(pendingBeacons) > 0){
296
+ var oldest = _.min(_.keys(pendingBeacons), function(key){
297
+ return key.substr(key.lastIndexOf('.') + 1);
298
+ });
299
+
300
+ var tokens = oldest.split(".");
301
+
302
+ if(tokens.length < 4){
303
+ // Fatal. Do something!
304
+ // Will try to delete the cookie.
305
+ Unbxd.removeCookie(oldest.substr(oldest.indexOf('.') + 1));
306
+ }else{
307
+ var action = tokens[2];
308
+ var time = tokens[3];
309
+
310
+ var beacon = pendingBeacons[oldest];
311
+
312
+ try{
313
+ Unbxd.removeCookie(Unbxd.cookies.pending + "." + action + "." + time);
314
+ Unbxd.fire(action, beacon);
315
+ if(_.size(pendingBeacons) > 1){
316
+ Unbxd.send();
317
+ }
318
+
319
+ // Unbxd.fire(action, beacon, function(){
320
+ // // Remove the cookie if image is loaded
321
+ // Unbxd.removeCookie(Unbxd.cookies.pending + "." + action + "." + time);
322
+ // });
323
+
324
+ // setTimeout(function(){
325
+ // Unbxd.removeCookie(Unbxd.cookies.pending + "." + action + "." + time);
326
+ // }, 500); // Delete anyway after 1 sec
327
+
328
+ // if(_.size(pendingBeacons) > 1){
329
+ // setTimeout(Unbxd.send, 1000); // Send others after 1.5 sec
330
+ // }
331
+ }catch(e){
332
+ Unbxd.log(e);
333
+ }
334
+ }
335
+ }
336
+ }
337
+
338
+ Unbxd.push = function(action, options, immediate){
339
+ if(Unbxd.key() == false){
340
+ Unbxd.log("Key not found. Abort");
341
+ return;
342
+ }
343
+
344
+ if(Unbxd.conf && Unbxd.conf.off != undefined && Unbxd.conf.off == true){
345
+ Unbxd.log("Tracking is off. Abort");
346
+ return;
347
+ }
348
+
349
+ options = options || {};
350
+ options["url"] = document.URL;
351
+ options["referrer"] = document.referrer;
352
+ options['visit_type'] = Unbxd.readCookie(Unbxd.cookies.visitor);
353
+ options['ver'] = Unbxd.version
354
+
355
+ // If A/B test is on, push the disabled field
356
+ var disabled = Unbxd.readCookie(Unbxd.cookies.disabled);
357
+ if(!_.isUndefined(disabled) && disabled !== ''){
358
+ var tokens = disabled.split('-');
359
+ if(tokens.length == 2){
360
+ options['disabled'] = tokens[0];
361
+ }
362
+ }
363
+
364
+ // Override immediate behavior
365
+ if(Unbxd.conf && Unbxd.conf.immediate && Unbxd.conf.immediate[action] != undefined){
366
+ immediate = Unbxd.conf.immediate[action];
367
+ }
368
+
369
+ if(immediate){
370
+ Unbxd.fire(action, JSON.u_stringify(options));
371
+ }else{
372
+ var cookieName = Unbxd.cookies.pending + "." + action + "." + new Date().getTime();
373
+ Unbxd.setCookie(cookieName, JSON.u_stringify(options));
374
+ Unbxd.log("Pending cookie : " + cookieName);
375
+
376
+ setTimeout(Unbxd.send, 10000); // Send anyway after 10 secs
377
+ }
378
+ }
379
+
380
+ Unbxd.ab = function(){
381
+ // If only a certain percentage of users have to be shown Unbxd results.
382
+ if(!_.isUndefined(Unbxd.conf)
383
+ && !_.isUndefined(Unbxd.conf.disabled)
384
+ && !_.isUndefined(Unbxd.conf.disabled.percentage)
385
+ && !_.isUndefined(Unbxd.conf.disabled.version)){
386
+ var date = new Date();
387
+
388
+ var percentageDisabled = Unbxd.conf.disabled.percentage;
389
+ var version = Unbxd.conf.disabled.version;
390
+
391
+ var deleteDisabledCookie = true;
392
+
393
+ // If the version of setting is newer than what cookie says, delete the visitor and disabled cookie
394
+ var disabled = Unbxd.readCookie(Unbxd.cookies.disabled);
395
+ if(!_.isUndefined(disabled) && disabled !== ''){
396
+ var tokens = disabled.split('-');
397
+ if(tokens.length == 2){
398
+ oldVersion = tokens[1];
399
+
400
+ if(version == oldVersion){
401
+ deleteDisabledCookie = false;
402
+ }
403
+ }
404
+ }
405
+
406
+ if(deleteDisabledCookie){
407
+ Unbxd.removeCookie(Unbxd.cookies.disabled);
408
+ }
409
+
410
+ // Figure out is the user has to be disabled
411
+ var rand = Math.floor((Math.random() * 100) + 1);
412
+ Unbxd.log("Random number : " + rand);
413
+ if(rand <= percentageDisabled){
414
+ // Disable
415
+ Unbxd.setCookieIfNotSet(Unbxd.cookies.disabled, "1-" + version, new Date(date.getFullYear() + 10, 1, 1));
416
+ }else{
417
+ Unbxd.setCookieIfNotSet(Unbxd.cookies.disabled, "0-" + version, new Date(date.getFullYear() + 10, 1, 1));
418
+ }
419
+ }else{
420
+ var disabled = Unbxd.readCookie(Unbxd.cookies.disabled);
421
+ if(!_.isUndefined(disabled) && disabled !== ''){
422
+ // Will reach here if there were A/B tests running before but not now.
423
+ Unbxd.removeCookie(Unbxd.cookies.disabled);
424
+ }
425
+ }
426
+ }
427
+
428
+ /**
429
+ * Sets a user id
430
+ */
431
+ Unbxd.user = function(){
432
+ var visitType = undefined;
433
+
434
+ var date = new Date();
435
+ var uid = 'uid-' + date.getTime() + "-" + Math.floor(Math.random() * 100000);
436
+ if(Unbxd.setCookieIfNotSet(Unbxd.cookies.uid, uid, new Date(date.getFullYear() + 10, 1, 1))){
437
+ visitType = 'first_time';
438
+ }else{
439
+ visitType = 'repeat';
440
+ }
441
+
442
+ Unbxd.ab(); // Do whatever to be done when running ab test
443
+
444
+ var now = date.getTime();
445
+ var expire = new Date(now + 30 * 60000); // 30 mins
446
+ if(Unbxd.setCookieIfNotSet(Unbxd.cookies.visitor, visitType, expire)){
447
+ Unbxd.push("visitor", {});
448
+ Unbxd.log("Pushed Visitor Event");
449
+ }
450
+ }
451
+
452
+ Unbxd.init = function(){
453
+ Unbxd.log("Initializing...");
454
+
455
+ Unbxd.user(); // Initialize uid
456
+
457
+ Unbxd.send(); // Dispatch pending beacons
458
+ // setInterval(Unbxd.send, 3 * 1000); // Start a timer interval to send beacons periodically
459
+
460
+ // Injecting UnbxdKey in dom
461
+ // jQuery('body').append("<div style='display:none;' id='unbxd-site-name'>" + Unbxd.key() + "</div>");
462
+ }
463
+
464
+ // <meta name="unbxd:type" content="category">
465
+ // Requires jQuery
466
+ if(Unbxd.resolveCategory == undefined){
467
+ Unbxd.resolveCategory = function(){
468
+ var content = jQuery("meta[name='unbxd:type']").attr('content');
469
+ if(content != undefined && (content == "landing" || content == "category")){
470
+ return Unbxd.getPathName(document.URL);
471
+ }
472
+
473
+ return false;
474
+ }
475
+ }
476
+
477
+ // Requires jQuery
478
+ Unbxd.gatherImpressions = function(){
479
+ var boxElems = jQuery('[unbxdAttr="product"]');
480
+ _.each(boxElems, function(elem){
481
+ var boxType = jQuery(elem).attr("unbxdParam_boxtype");
482
+
483
+ identifier = jQuery(elem).attr("unbxdParam_source_pid")
484
+ || jQuery(elem).attr("unbxdParam_category")
485
+ || jQuery(elem).attr("unbxdParam_brand");
486
+
487
+ Unbxd.addImpression(boxType, identifier);
488
+ });
489
+
490
+ boxElems = jQuery('[data-unbxdAttr="product"]');
491
+ _.each(boxElems, function(elem){
492
+ var boxType = jQuery(elem).attr("data-unbxdParam_boxtype");
493
+
494
+ identifier = jQuery(elem).attr("data-unbxdParam_source_pid")
495
+ || jQuery(elem).attr("data-unbxdParam_category")
496
+ || jQuery(elem).attr("data-unbxdParam_brand");
497
+
498
+ Unbxd.addImpression(boxType, identifier);
499
+ });
500
+ }
501
+
502
+ /*
503
+ * APIs
504
+ */
505
+ Unbxd.track = function(type, params){
506
+ if(type == 'search'){
507
+ Unbxd.addSearch(params.query,params.autosuggestParams);
508
+ }else if(type == 'browse'){
509
+ Unbxd.addBrowse(params.category);
510
+ }else if(type == 'widgetImpression'){
511
+ Unbxd.addImpression(params.boxType, params.identifier);
512
+ }else if(type == 'click'){
513
+ Unbxd.addClick(params.pid, params.prank, params.boxType);
514
+ }else if(type == 'addToCart'){
515
+ Unbxd.addCart(params.pid);
516
+ }else if(type == 'order'){
517
+ Unbxd.addOrder(params.pid, params.qty, params.price);
518
+ }else if(type == 'map_token'){
519
+ Unbxd.mapToken(params.token);
520
+ }
521
+ }
522
+ // ===================================
523
+
524
+ /*
525
+ * Register a new search query.
526
+ */
527
+ Unbxd.addSearch = function(query, autosuggest_data){
528
+ if(autosuggest_data != undefined){
529
+ Unbxd.push("search", {query : query, autosuggest_data : autosuggest_data});
530
+ Unbxd.log("Pushed Autosuggest Hit");
531
+ }
532
+ else{
533
+ Unbxd.push("search", {query: query});
534
+ }
535
+ Unbxd.log("Pushed Search Hit for query : " + query);
536
+ }
537
+
538
+ /*
539
+ * Register a new browse query.
540
+ */
541
+ Unbxd.addBrowse = function(path){
542
+ Unbxd.push("browse", {query : path}, true);
543
+ Unbxd.log("Pushed Browse Hit");
544
+ }
545
+
546
+ /*
547
+ * Register a new product click. if query or queryType is null. it will go as anon click
548
+ */
549
+ Unbxd.addClick = function(pid, prank, boxType){
550
+ Unbxd.push("click", {pid : pid, pr : prank, box_type : boxType});
551
+ Unbxd.log("Pushed Click");
552
+ }
553
+
554
+ /*
555
+ * Register a new product cart. if query or queryType is null. it will go as anon cart
556
+ */
557
+ Unbxd.addCart = function(pid){
558
+ Unbxd.push("cart", {pid : pid});
559
+ Unbxd.log("Pushed Add to Cart");
560
+ }
561
+
562
+ /*
563
+ * Register a new order. if query or queryType is null. it will go as anon order
564
+ */
565
+ Unbxd.addOrder = function(pid, qty, price){
566
+ var ordersStr = Unbxd.readCookie('orders') || "";
567
+ try{
568
+ var orders = ordersStr.split(',');
569
+ if(orders != null && orders.length > 0 && _.indexOf(orders, pid) != -1){
570
+ return;
571
+ }
572
+ }catch (e){}
573
+
574
+ ordersStr = ordersStr + "," + pid;
575
+ Unbxd.setCookie('orders', ordersStr);
576
+
577
+ Unbxd.push("order", {pid : pid, qty : qty, price : price}, true);
578
+ Unbxd.log("Pushed Order");
579
+ }
580
+
581
+ /*
582
+ * Maps a token with the uid
583
+ */
584
+ Unbxd.mapToken = function(token){
585
+ Unbxd.push("user_external_token", {external_token : token}, true);
586
+ Unbxd.log("Mapped uid with : " + token);
587
+ }
588
+
589
+ /*
590
+ * Register a Recommender Box Impression
591
+ */
592
+ Unbxd.addImpression = function(boxType, identifier){
593
+ Unbxd.boxes = Unbxd.boxes || [];
594
+
595
+ if(boxType && Unbxd.boxes.indexOf(boxType) == -1){
596
+ Unbxd.boxes.push(boxType);
597
+ Unbxd.log("Found box : " + boxType);
598
+
599
+ var path = Unbxd.getPathName(document.URL);
600
+ Unbxd.push("impression", {box_type : boxType, path : path, identifier : identifier}, true);
601
+ Unbxd.log("Pushed recommender impression");
602
+ }
603
+ }
604
+
605
+ ; // The Trailing semicolon is necessary. And there is a prize if you guess why :D
606
+ (new function(){
607
+ // Prototype bug.
608
+ var _array_tojson = Array.prototype.toJSON;
609
+ JSON.u_stringify = function(value) {
610
+ try{
611
+ if(typeof Prototype !== 'undefined' && parseFloat(Prototype.Version.substr(0,3)) < 1.7 && typeof _array_tojson !== 'undefined'){
612
+ delete Array.prototype.toJSON;
613
+ var r = JSON.stringify(value);
614
+ Array.prototype.toJSON = _array_tojson;
615
+ return r;
616
+ }
617
+ }catch(ex){}
618
+
619
+ return JSON.stringify(value);
620
+ };
621
+
622
+ var debugInfo = function(){
623
+ if(window.jQuery){
624
+ var category = Unbxd.resolveCategory();
625
+
626
+ var searchBox = jQuery('[unbxdAttr="sq"]').size() || jQuery('[data-unbxdAttr="sq"]').size() == 1;
627
+ var searchBtn = jQuery('[unbxdAttr="sq_bt"]').size() || jQuery('[data-unbxdAttr="sq_bt"]').size() == 1;
628
+ var categoryPage = category != undefined && category != false;
629
+ var products = jQuery('[unbxdAttr="product"]').size() || jQuery('[data-unbxdAttr="product"]').size();
630
+ var addToCarts = jQuery('[unbxdAttr="AddToCart"]').size() || jQuery('[data-unbxdAttr="AddToCart"]').size();
631
+ var orders = jQuery('[unbxdAttr="order"]').size() || jQuery('[data-unbxdAttr="order"]').size();
632
+
633
+ var key = Unbxd.key();
634
+ if(key == false) return;
635
+
636
+ jQuery('body')
637
+ .append(
638
+ "<div id='ubx-debug' style='position:fixed; right:0; top:10px; max-width:300px; background-color:rgba(69, 181, 193, 1); padding : 10px; z-index:99999999; color:#fff; font-size:13px;'>"
639
+ + "Unbxd Info : <a href='#' id='ubx-close'>Close</a>"
640
+ + "<ul style='padding:0 0 0 10px; margin:5px;'>"
641
+ + "<li>Site name : " + key + "</li>"
642
+ + "<li>Search Box present : " + searchBox + "</li>"
643
+ + "<li>Search Btn present : " + searchBtn + "</li>"
644
+ + "<li>Category Page : " + categoryPage + "</li>"
645
+ + "<li>Products : " + products + "</li>"
646
+ + "<li>Add To Cart buttons : " + addToCarts + "</li>"
647
+ + "<li>Orders : " + orders + "</li>"
648
+ + "</ul>"
649
+ + "<hr>"
650
+ + "<div id='ubx-console'></div>"
651
+ + "</div>");
652
+
653
+ jQuery('#ubx-close').click(function(){
654
+ jQuery('#ubx-debug').hide();
655
+ })
656
+ }
657
+ }
658
+
659
+ // Requires jQuery
660
+ var attachListener = function(selector, event, fn){
661
+ if(window.jQuery){
662
+ if(jQuery(document).delegate){
663
+ jQuery(document).delegate(selector, event, fn);
664
+ }else{
665
+ jQuery(selector).live(event, fn);
666
+ }
667
+ }
668
+ }
669
+
670
+ // Requires jQuery
671
+ var attachListeners = function(){
672
+ /**
673
+ * Event listeners. They are delegates put on document object.
674
+ */
675
+
676
+ // EventListener for Search Query tracking
677
+ attachListener('[unbxdAttr="sq"]', "keydown", function(event) {
678
+ if (event.which == 13) { // Enter key
679
+ query = jQuery(this).val();
680
+ Unbxd.addSearch(query);
681
+ }
682
+ });
683
+
684
+ attachListener('[data-unbxdAttr="sq"]', "keydown", function(event) {
685
+ if (event.which == 13) { // Enter key
686
+ query = jQuery(this).val();
687
+ Unbxd.addSearch(query);
688
+ }
689
+ });
690
+
691
+ // Event Listener for Search Query (pressing search button)
692
+ attachListener('[unbxdAttr="sq_bt"]', "mouseup", function() {
693
+ query = jQuery('[unbxdAttr="sq"]').val();
694
+ Unbxd.addSearch(query);
695
+ });
696
+
697
+ attachListener('[data-unbxdAttr="sq_bt"]', "mouseup", function() {
698
+ query = jQuery('[data-unbxdAttr="sq"]').val();
699
+ Unbxd.addSearch(query);
700
+ });
701
+
702
+ // Event Listener for Search Query (pressing search button)
703
+ // <a href='' unbxdAttr="sq_link" unbxdParam_q="Sale">Sale</a>
704
+ attachListener('[unbxdAttr="sq_link"]', "mouseup", function() {
705
+ query = jQuery(this).attr('unbxdParam_q');
706
+ Unbxd.addSearch(query);
707
+
708
+ e.stopPropagation();
709
+ });
710
+
711
+ attachListener('[data-unbxdAttr="sq_link"]', "mouseup", function() {
712
+ query = jQuery(this).attr('data-unbxdParam_q');
713
+ Unbxd.addSearch(query);
714
+
715
+ e.stopPropagation();
716
+ });
717
+
718
+
719
+ // Event Listener for Browse Hits
720
+ var category = Unbxd.resolveCategory();
721
+ if(category != undefined && category != false){
722
+ Unbxd.addBrowse(category);
723
+ }
724
+
725
+ attachListener('[unbxdAttr="product"]', "mouseup", function() {
726
+ var boxType = jQuery(this).attr("unbxdParam_boxtype");
727
+ var pr = jQuery(this).attr("unbxdParam_pRank");
728
+ var pid = jQuery(this).attr("unbxdParam_sku") || jQuery(this).attr("unbxdParam_pid");
729
+
730
+ Unbxd.addClick(pid, pr, boxType);
731
+ });
732
+
733
+ attachListener('[data-unbxdAttr="product"]', "mouseup", function() {
734
+ var boxType = jQuery(this).attr("data-unbxdParam_boxtype");
735
+ var pr = jQuery(this).attr("data-unbxdParam_pRank");
736
+ var pid = jQuery(this).attr("data-unbxdParam_sku") || jQuery(this).attr("data-unbxdParam_pid");
737
+
738
+ Unbxd.addClick(pid, pr, boxType);
739
+ });
740
+
741
+ // EventListener for Add to Cart Metric
742
+ attachListener('[unbxdAttr="AddToCart"]', "mouseup", function() {
743
+ var pid = jQuery(this).attr("unbxdParam_sku") || jQuery(this).attr("unbxdParam_pid");
744
+ Unbxd.addCart(pid);
745
+ });
746
+
747
+ attachListener('[data-unbxdAttr="AddToCart"]', "mouseup", function() {
748
+ var pid = jQuery(this).attr("data-unbxdParam_sku") || jQuery(this).attr("data-unbxdParam_pid");
749
+ Unbxd.addCart(pid);
750
+ });
751
+
752
+ var orderElems = jQuery('[unbxdAttr="order"]');
753
+ _.each(orderElems, function(elem){
754
+ var pid = jQuery(elem).attr("unbxdParam_sku") || jQuery(elem).attr("unbxdParam_pid");
755
+ Unbxd.addOrder(pid);
756
+ });
757
+
758
+ var orderElems = jQuery('[data-unbxdAttr="order"]');
759
+ _.each(orderElems, function(elem){
760
+ var pid = jQuery(elem).attr("data-unbxdParam_sku") || jQuery(elem).attr("data-unbxdParam_pid");
761
+ var qty = jQuery(elem).attr("data-unbxdParam_qty") || jQuery(elem).attr("data-unbxdParam_qty");
762
+ var price = jQuery(elem).attr("data-unbxdParam_price") || jQuery(elem).attr("data-unbxdParam_price");
763
+ Unbxd.addOrder(pid, qty, price);
764
+ });
765
+ }
766
+
767
+ // Requires jQuery
768
+ var init = function(){
769
+ if(Unbxd.readCookie('info') === '1'){
770
+ debugInfo(); // Requires jQuery
771
+ }
772
+
773
+ Unbxd.bootState = 3; //
774
+
775
+ attachListeners(); // Requires jQuery
776
+
777
+ Unbxd.bootState = 4; // Listeners attached. Complete
778
+
779
+ Unbxd.gatherImpressions(); // Requires jQuery
780
+
781
+ setInterval(function(){
782
+ Unbxd.gatherImpressions(); // Requires jQuery
783
+ }, 1000);
784
+ }
785
+
786
+ // ========================================================
787
+ // Start booting
788
+
789
+ if(Unbxd.bootState){
790
+ Unbxd.log("Already initialized");
791
+ return;
792
+ }
793
+
794
+ Unbxd.bootState = 1; // Just inside init
795
+
796
+ /**
797
+ * Init.
798
+ */
799
+ Unbxd.init();
800
+
801
+ Unbxd.bootState = 2; // Cookies initialized
802
+
803
+ // ===========================================================
804
+ // Do Stuff which requires jQuery
805
+
806
+ var fn = function(){
807
+ if(typeof(jQuery) != 'undefined'){
808
+ init();
809
+ }else{
810
+ setTimeout(function(){
811
+ fn();
812
+ }, 100);
813
+ }
814
+ }
815
+
816
+ fn();
817
+
818
+ // ============================================================
819
+ // Do stuff which required full page load
820
+
821
+ var runPostLoad = function(){
822
+ Unbxd.log("Running post load");
823
+
824
+ // Post load hooks. Some functionalities depend on this. Don't move.
825
+ try{
826
+ if(Unbxd.postLoad != undefined && typeof(Unbxd.postLoad) == 'function'){
827
+ Unbxd.postLoad();
828
+ }
829
+ }catch(e){
830
+ Unbxd.log(e);
831
+ }
832
+ }
833
+
834
+ if(document && document.readyState && document.readyState === "complete"){
835
+ runPostLoad();
836
+ }else if (window.addEventListener) {
837
+ window.addEventListener('load', runPostLoad, false); // modern browsers
838
+ } else if (window.attachEvent) {
839
+ window.attachEvent("onload", runPostLoad); // older versions of IE
840
+ } else {
841
+ // What the heck. We won't support it. Abort.
842
+ }
843
+ });
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>unbxd_recommendation</name>
4
- <version>1.0.6</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
@@ -10,9 +10,9 @@
10
  <description>helps integrating the unbxd recommender widgets</description>
11
  <notes>supports all the unbxd recommendor widgets</notes>
12
  <authors><author><name>ananthesh</name><user>ananthesh</user><email>ananthesh@unbxd.com</email></author></authors>
13
- <date>2014-08-28</date>
14
- <time>07:45:09</time>
15
- <contents><target name="magelocal"><dir name="Unbxd"><dir name="Datafeeder"><dir name="Block"><file name="Edit.php" hash="6cc7e0396c298656c2529d2651bc0ae1"/><file name="Index.php" hash="9114009eae54970145fbb849cfc22dfd"/></dir><dir name="Helper"><file name="Analyticshelper.php" hash="9c841be95363d1e100e9a00c7d95f7d6"/><file name="Data.php" hash="cc32188ca72c365a3177b8439188f4b0"/><file name="UnbxdIndexingHelper.php" hash="e4299a181161ba65d80bf579aaea0502"/><file name="UnbxdTaxonomyHelper.php" hash="9c16f370fa44807d8524c549c1ddb017"/><file name=".DS_Store" hash="801d9a1a1f478b210726cfc656cec74f"/></dir><dir name="Model"><file name="Attribute.php" hash="9b7e4dea003568ffb016b60f20b35e74"/><file name="Conf.php" hash="b9a9627d779f473b7ab1696fd44a877b"/><file name="Facet.php" hash="a778acee165d1ff0162be6664f4ecf1a"/><dir name="Feed"><file name="Feedcreator.php" hash="675028dc51d02e4be956336bdbc89113"/><file name="Feedmanager.php" hash="c21018ecd585098fcca1ae360a6c2b85"/><file name="Filemanager.php" hash="5200abf7349679edec7e617619c8d8b3"/><dir name="Jsonbuilder"><file name="Jsonbuilder.php" hash="77635e52b5ec7c39dae78094efed566e"/><file name="Productbuilder.php" hash="38bb898b6fcc2e97a6d74b3bf9edce41"/><file name="Schemabuilder.php" hash="240d31fc4a3829d075d0ed83daf2ddae"/><file name="Taxonomybuilder.php" hash="75463b9c001b443f7d64470d5347ea59"/></dir></dir><file name="Field.php" hash="4206919e3762907aba7d38b39733deba"/><dir name="Mysql4"><file name="Attribute.php" hash="7ec9732a1399db03dec0b6002d1aeb58"/><dir name="Conf"><file name="Collection.php" hash="fa30f58432618d2822ce0e3fe1483efe"/></dir><file name="Conf.php" hash="ad03b89d6bd43893f171fb08e142fbc0"/><dir name="Field"><file name="Collection.php" hash="5c9a40a3f2df168531c1af18be63bf16"/></dir><file name="Field.php" hash="61c8a1a5aa7b763925896b4f74bf4a56"/><dir name="Resource"><file name="Attribute.php" hash="9353baa4f14eeb342de93d20c566bfee"/></dir><file name="Upgrade.php" hash="e3e259f32cdcf58d2dca2a21d6262767"/></dir></dir><dir name="controllers"><file name="ConfigController.php" hash="e9b049ba4913e4733a251035f9654beb"/><file name="FieldController.php" hash="0c93a9c339d718179641c0a47cccaa6c"/><file name="IndexController.php" hash="90a2150b94caa81fd598d01f3e0c124b"/></dir><dir name="etc"><file name="adminhtml.xml" hash="243eca656901fd022f8119a3ad46b569"/><file name="config.xml" hash="7c26ae17786870ee2536d68f8d9d868c"/></dir><dir name="scripts"><file name="Cron.php" hash="087a021cf47794f337e4ce0130b2d3b7"/><file name="abstract.php" hash="757e66bc99da02c274a0d9723923329e"/></dir><dir name="sql"><dir name="datafeeder_setup"><file name="mysql4-install-1.0.5.php" hash="27ecb984b7419e2fc58433db370fe43d"/><file name="mysql4-upgrade-0.1.0-1.0.5.php" hash="27ecb984b7419e2fc58433db370fe43d"/></dir></dir><file name=".DS_Store" hash="b4a356bd7741138b66aa79afcc4abd2f"/></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="template"><dir name="datafeeder"><file name="conf.phtml" hash="87911c34bc9c06f617d83e8d70b4c81d"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="shell"><file name="UnbxdFeed.php" hash="2b70f51b04c4b62b4a51aca0efae7050"/></dir></target><target name="mageetc"><dir name="modules"><file name="Unbxd_Datafeeder.xml" hash="73f1469ef7c4f5c4eef05900302239de"/></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
18
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>unbxd_recommendation</name>
4
+ <version>1.0.7</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
10
  <description>helps integrating the unbxd recommender widgets</description>
11
  <notes>supports all the unbxd recommendor widgets</notes>
12
  <authors><author><name>ananthesh</name><user>ananthesh</user><email>ananthesh@unbxd.com</email></author></authors>
13
+ <date>2014-11-06</date>
14
+ <time>15:47:17</time>
15
+ <contents><target name="magelocal"><dir name="Unbxd"><dir name="Recommendation"><dir name="Block"><file name="Admin.php" hash="82a902698e1b090d0e532905ed7f2d37"/><file name="Tracker.php" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir><dir name="Helper"><file name="Confighelper.php" hash="8fc5f4943a0ae3cf92c30ccff9131bea"/><file name="Data.php" hash="74562d257ec4ef3add0fbd90ea51e671"/><file name="Feedhelper.php" hash="736949fd5e82d9c181108d3294603d4b"/></dir><dir name="Model"><dir name="Api"><file name="Request.php" hash="98c92b643e28e750a8bb2e6a384733de"/><file name="Response.php" hash="448a7f48496babd313e4ac147405fea1"/><dir name="Task"><file name="Analyticsimpression.php" hash="cc65a5549dba4f6a0cc1b52d9a273b18"/><file name="Feeddetails.php" hash="60bc2c9f743d5ee9c3b5dce4dd8e2e0a"/><file name="Trackcart.php" hash="4e4ba196f66cbbd17abc7415ac312f7e"/><file name="Trackorder.php" hash="ba8204eb82fea24cc0b5e27cd5ab7936"/><file name="Triggerfeedupload.php" hash="4e1c645ae51d655be2ac7b1ad90b5fa6"/><file name="Updatefeaturefields.php" hash="112ce06194a30f53515846dc7c219ac0"/><file name="Validatekeys.php" hash="b4b0c1a945a9ec1d0adc534a7d2bc08f"/><file name="Widget.php" hash="8f8ee05f4b27fd0de948eb414035b4f2"/></dir><file name="Task.php" hash="5a40150a6d7c4f4e3945974d5eb8b691"/></dir><file name="Config.php" hash="67a0fda09eb4ae9b9ba3c421eae46efc"/><dir name="Feed"><file name="Feedcreator.php" hash="c0cdbd942675ccd31a7173b5b51568d2"/><file name="Feedmanager.php" hash="7f563965eef1d8b6a5a5cec93f103a5a"/><file name="Filemanager.php" hash="9e3602428c8783c68f9bb951f52120ba"/><dir name="Jsonbuilder"><file name="Jsonbuilder.php" hash="31f422f3cf18f057e887c9f1812538a2"/><file name="Productbuilder.php" hash="d373cdff9efa694c98454cd88f8f6d7b"/><file name="Schemabuilder.php" hash="b41389c9ffa08063d5559f05d2367238"/><file name="Taxonomybuilder.php" hash="f4829a5902d7320901efa33d0dfc9e81"/></dir></dir><file name="Field.php" hash="6e9ef8fb0e4c89a3a44973de7805871b"/><file name="Observer.php" hash="555eb4f0344b72f2b2edd0cf977f9828"/><dir name="Resource"><file name="Attribute.php" hash="bdd6026954b734430903f3fdb2a2f1e6"/><dir name="Config"><file name="Collection.php" hash="f50c88e3f7c10137ea9da5fc890218b5"/></dir><file name="Config.php" hash="8a08f5c9b2345f9e6899419a47aeec9f"/><dir name="Field"><file name="Collection.php" hash="455d7a3e8fce1741c189c86ed5fc5e22"/></dir><file name="Field.php" hash="45380eaee3fc0b58682e63e30b999bad"/><dir name="Product"><file name="Collection.php" hash="9342cdbbc6688599aa9565ae6aa7ff5c"/></dir></dir></dir><dir name="controllers"><file name="AdminController.php" hash="1cbbc9a381f011ebc1d6b6a964e2e512"/><file name="ConfigController.php" hash="fd632d0b4b49b5f55f633d951bf2b9fb"/><file name="WidgetController.php" hash="71a19ec8e356ccf168a4a6815488a5fa"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c4456170bcc97114fa990f3a15098664"/><file name="config.xml" hash="864d625de068c7cebac382e82cefe797"/></dir><dir name="sql"><dir name="unbxd_recommendation_setup"><file name="mysql4-install-1.0.0.php" hash="cb254747c65f9bd3b3f4f845477f9a80"/></dir></dir><file name=".DS_Store" hash="b4a356bd7741138b66aa79afcc4abd2f"/></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="unbxd"><file name="recommendation.xml" hash="64e40cea662a3e3808b413ca40563986"/></dir></dir><dir name="template"><dir name="unbxd"><file name="recommendation.phtml" hash="262a89cfe78e4db8f27f3c7b5782687d"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="unbxd"><file name="tracker.phtml" hash="5e41b4b1d2fac582a6e98faf457aeab8"/><dir name="tracking"><file name="cart.phtml" hash="1602ccd541917fdaa539b88b59e16933"/><file name="category.phtml" hash="75048c587d627190a7931291e22a3e1e"/><file name="order.phtml" hash="3ddc154f41138d5f924bc415f8feeb9b"/><file name="product.phtml" hash="b6402e1b0c1a4364973bc46200833e1e"/></dir></dir></dir><dir name="layout"><dir name="unbxd"><file name="recommendation.xml" hash="06b48cd7fc293c2d288261d2f292d962"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="skin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="unbxd"><dir name="css"><file name="app.css" hash="84ac28ec71a90f34a2fde5d1a3e373ba"/><file name="bootstrap-them.css" hash="df854606e8bfb38abe58305c389301ae"/><file name="bootstrap.css" hash="94f1c7a5b57273668034b7f90451fe53"/><file name="chosen.css" hash="786546be71e5fbff141d883ea7bf88a9"/><file name="unbxd-magento.css" hash="1128713c4ab944a6cbf2f05b39b875ff"/></dir><dir name="img"><file name="Custom-platform.png" hash="d053db68b99519a2b0303624ab647f16"/><file name="DONE.png" hash="470356a4749d5fde1b86d9c0eeb9c806"/><file name="HEXAGON-Only.png" hash="f070ca957f922446f715555d94192298"/><file name="Magento-small.png" hash="0b80c21a5daa1669317095843590aa10"/><file name="Magento.png" hash="23b3159d445fe3fe5de7ea4a6d7f0271"/><file name="X-popup-hover.png" hash="41022fc34b63fc668477bcb991652577"/><file name="X-popup.png" hash="301b49b195fd8e9106eef93805182c11"/><file name="X-pricing.png" hash="ab7c15dacab6b4e13e19d9614741e9ef"/><file name="add-actv.png" hash="51bfeb67fce50aef4fe79ccea4e0d840"/><file name="add-icon.png" hash="46dea9858757fa584de457bfc421269f"/><file name="add-inactv.png" hash="164d79389bcd58d9d606871307d16e7e"/><file name="add-raw-hover.png" hash="591316d60847c12340d66cea0eb2ee97"/><file name="add-raw.png" hash="1fcdb060d898a7807bb37c796a772993"/><file name="add.png" hash="d9b313fc9225b87513b5ba9a3db28ccb"/><file name="arrow-2.png" hash="627be933821070bb0514ba331739cbdb"/><file name="arrow-calendar-down.png" hash="15a5f0cba1424dbc6d7f2069dca59a2a"/><file name="arrow-calendar-down1.png" hash="ed6aac9b4e114418f639ce874e75ed19"/><file name="arrow-down-disabled.jpg" hash="5b62a642490f264b58771e38e687eb19"/><file name="arrow-down-enabled.jpg" hash="4a0b2fafe44c58dd390d5eb0473c365e"/><file name="arrow-down-white.jpg" hash="edd441fe8c391969859dc72e5e95e83c"/><file name="arrow-down-white1.jpg" hash="6b7c7662f141a30635d408dad048dd54"/><file name="arrow-down-white2.jpg" hash="bd948050a2d7b0b6dfd7e349734df63b"/><file name="arrow-down.png" hash="379a11ee447d83e850a03581928acae8"/><file name="arrow-gray.png" hash="6e345006dfc2b0f1e52b8266c21bcbbc"/><file name="arrow-left-white.jpg" hash="36a0b2d5784c980a54edb3b874bc47c7"/><file name="arrow-left.jpg" hash="e22a795292c8bf95e62c86d7f5c3a149"/><file name="arrow-mail-developer).png" hash="a96ecd000175538c0dd0914395cf203d"/><file name="arrow-right-blue.png" hash="4ef79b5fc672c2a285b0c2ba5504f1e4"/><file name="arrow-right-gray.jpg" hash="5ac0235afe90023e26126134f151a2bd"/><file name="arrow-right-white.jpg" hash="9916e44542fbaa7a9e9b69f3551d321f"/><file name="arrow-right.jpg" hash="c2ad8f3435733f35a46fd8fdf29a9323"/><file name="arrow-up-black.png" hash="1e5a76b450fd32c3577078829d38ac58"/><file name="arrow-up-disabled.jpg" hash="6659a79f97099b525bd1b0713b99ad8b"/><file name="arrow-up-enabled.jpg" hash="4074eee100e01429ea4defed741b2ac2"/><file name="arrow-up-red.png" hash="84b29f0c6964c69ed6e78501123bfccf"/><file name="arrow-up-white.jpg" hash="38d5ec238c32cb7124fb6bc31ffe126e"/><file name="arrow-up-white1.jpg" hash="3221729d064ae198dff6effcc62e6a5e"/><file name="arrow-up.png" hash="6c54432350ad68d3345eb151d7534ae2"/><file name="arrow-white.png" hash="4b4e57f5b8d2b678df89b5a2dc85bba3"/><file name="arrow.png" hash="4b4e57f5b8d2b678df89b5a2dc85bba3"/><file name="authenticated.png" hash="78140247146f512d014be386a116a699"/><file name="back.png" hash="32b2ff86ee7ba8a1f19270a121f00205"/><file name="bg.jpg" hash="4a2f6fda25f44f7009e9a22ccf90e330"/><file name="big-arrow-gray.jpg" hash="745194d74525c2fd3238475c55a47cbc"/><file name="bigcommerce.png" hash="2a2599c562ec94be2545ab335131c71a"/><file name="black-right-small.jpg" hash="25253ab5ae165f13a1827ccd387d7b2f"/><file name="black-right-thick.jpg" hash="ae89e8e2c9d39ab8970782a829edeaeb"/><file name="btn-arrow-top.png" hash="42b3a9ffa2eccd2cfc9da9c33975f64c"/><file name="btn-arrow.png" hash="8cc68b6207307260a75bcc9331447c5e"/><file name="button-arrow-blue.png" hash="1e8d1741ecef49e021f35460fe16c76b"/><file name="button-arrow-grey.png" hash="76cd7acb80bf814c6605aa3f88c2c19b"/><file name="button-arrow-red.png" hash="03092367ac79745b0d7b2f9b707c802b"/><file name="cancel.png" hash="dd81fdd1129b4ef172d4c434d6156d87"/><file name="card-image.jpg" hash="bd1f292965163bbcc869a48bbe806deb"/><file name="card-image1.jpg" hash="95ccedbe1e8d01685f2527b08230b4a7"/><file name="card-image2.jpg" hash="963c39821d0cb5b1f0dfb691e12eefb5"/><file name="card-image3.jpg" hash="961e69aeecd5ab5d17743c5d3e4764cf"/><file name="checkmark.png" hash="4a0de13372944f21034dee674f92b7d1"/><file name="chosen-sprite.png" hash="25b9acb1b504c95c6b95c33986b7317e"/><file name="close-analytics.png" hash="0ca667d6de9a98999e37811861e6768e"/><file name="close.png" hash="daa5df0af5c219e136505132e18f5242"/><file name="color-pic.png" hash="470ec0178867dac04fcbce638c14a4cf"/><file name="congrats.png" hash="ec3d2e0a2bf1d012e56583e89513664d"/><file name="copy-black.png" hash="3f2b73b7287849ba2d341f194be7cd44"/><file name="copy-white.png" hash="208f74184462db7f5861d4c48dd300da"/><file name="cros.png" hash="bbf540cf6fe3d7fba4fab37b4d0b22c9"/><file name="cross-2.png" hash="1dfc504ed86c82bd86de8c74a09c906f"/><file name="cvv-number.jpg" hash="0ada16245fd0cb05a3967461eba12a28"/><file name="delete-raw-hover.png" hash="e3df4faf0450feaa2aed503dbf6759df"/><file name="delete-raw.png" hash="09806aed8283ae6168ecfdcec8237881"/><file name="delete-red.png" hash="c070eaad8207d3fe4e839b0f63deb68c"/><file name="delete.png" hash="b45f9d0e4d1fd160dbaa6ec41559f369"/><file name="detect.png" hash="9b6980d0bbd7ea6bded8ad05be4db7dd"/><file name="down-arrow.png" hash="3d1e707e03353aa01ac7f66610214c6b"/><file name="down-black.png" hash="80236500f0e70d2312b12a0d15e5fa81"/><file name="down-gray.png" hash="160e694e54afdc73edf828e4f02f5945"/><file name="dropdown-arrow.png" hash="4450401ccb623ec2a0ccae215e8b2a63"/><file name="edit-magento.png" hash="043c35fcd4396838a0db85d8d93aed04"/><file name="edit.png" hash="043c35fcd4396838a0db85d8d93aed04"/><file name="eye-hover.png" hash="cf7047c5218c147959a7afc282c01568"/><file name="eye.png" hash="b7a4815cce6e051a785f417f0ecb3427"/><file name="favicon.png" hash="402ca129cd67c7601ea429310c6aa2f5"/><file name="fill.png" hash="4bb20f0886094d62ac0c741edcc03742"/><file name="group-arrow.png" hash="89eba421d4e2a3f83e47e00f26e80888"/><file name="help.png" hash="94b200dfffcdb8ded1429791c2d22b8c"/><file name="icon-analytics.png" hash="4e62393fa4013bdc4e134b469dcd280b"/><file name="icon-info.png" hash="52c2f72d690d0f979afcb5a712b34c3c"/><file name="icon-widget.png" hash="8d6ed9abd86d3095993b4ca773bfdbc3"/><file name="install.png" hash="b284e88eb06554283ef98d6f50836e46"/><file name="integration-gray.png" hash="0fc90ad557b62f693098d862d5599085"/><file name="introduction-gray.png" hash="092fce8aa83ab7bcdb9b7a7a62b4a7d6"/><file name="left-black.png" hash="24b87ee6bf514b8666b12d7d9297eb4e"/><file name="left-gray.png" hash="e53e0389cd719dd5aed2ad6017d32b0e"/><file name="level-arrow-active.png" hash="56bbbf4701324c79e111a36abc235092"/><file name="level-arrow.png" hash="5861fea9a80e3c4fcc14210569d7effa"/><file name="link-arrow.png" hash="21354972164f512795bf1f54c6a71f3f"/><file name="loader-16x16.gif" hash="778e6b9e73274330dae0dab8104948a0"/><file name="loader-24x24.gif" hash="e403534956d055d636b3a5fa813b82b7"/><file name="loader-32x32.gif" hash="009c5064d779a3c67a202f299bd5d301"/><file name="loader.gif" hash="fd1345456c4a685afb42b67c25354ca2"/><file name="loader_black.gif" hash="5bfd8de3193a5fc2e5b472f57df1408f"/><file name="lock-image.jpg" hash="e80f8aa765e8ea121b056e188651629b"/><file name="logo-unbxd.png" hash="0b6c4b8887f8d57577023d8ddc1fa951"/><file name="logo.png" hash="27fa979ee65c84aefd15ffd6cc973e4d"/><file name="mail-new.png" hash="831e8c8c1eba8f4733d1d1e44a8c6549"/><file name="mail.png" hash="1cf907fd4c5d98230c7c2b89d6ff235f"/><file name="minus.jpg" hash="bdddd9b0d971d461a7e472b5bf38bfce"/><file name="nav-highlight-arrow.png" hash="64f6ae56f54568594d04df5c80ce069c"/><file name="not-detected.png" hash="59d0c0115b4b9f192eb4a77f22ce1609"/><file name="oops.png" hash="0735ac87c8e81325be4dc901ba354937"/><file name="or.png" hash="64c351e685fdb8339b7c7857ff14f56d"/><file name="other-gray.png" hash="646b84e4629dfadf3163bc9cd1aa83de"/><file name="overview-gray.png" hash="498e242cdd5b738d088d7ed4ae6c8e3e"/><file name="plus.jpg" hash="a8b80b4d5eee0ad842ce22ee7ea4c752"/><file name="question-mark2.jpg" hash="de9555459f3b9c93482c4a6061fea66b"/><file name="red-cross.png" hash="4213a8ee001ae75166d270be44b199a0"/><file name="red-loading.gif" hash="e644579431a4666564d92ec62c7c74e2"/><file name="remove.png" hash="401b59fb5aed9c68e5f1b3e47fe6ea60"/><file name="right-black.png" hash="fce5a7892866ef65e91fb006b1959c21"/><file name="right-gray.png" hash="b09daca9ca3c40451de0d62fbadd3cf6"/><file name="save.png" hash="fd61c5589c9fabe20a988121822ef81a"/><file name="search.png" hash="71829ed3818c8832469c46d1f9203be0"/><file name="settings.png" hash="9dd7ca159584c09c41717c578f8aa1f6"/><file name="shopify.png" hash="93d8d9c1dd93680819fd642f9136b07c"/><file name="site-dropdownarrow-down.png" hash="c4c89958d88c58785c15e11c83bf0c4a"/><file name="site-dropdownarrow-up.png" hash="f52281c034fdc67f339efeab9127ddfc"/><file name="slider-bg.png" hash="242bb276022f24fc7ac71b181dd34e36"/><file name="slider-button.png" hash="4d17b9bd17415f9df5ccfafefcd32a24"/><file name="sort-arrow-blue-down.png" hash="1fd1bfd16d5f3a9c15017248a7d7f0e0"/><file name="sort-arrow-blue-up.png" hash="24eee605bc0fc9432b7b499633a6c7bc"/><file name="sort-arrow-grey-down.png" hash="b64554cc698560bb38bb43a7a6480dd3"/><file name="sort-arrow-grey-up.png" hash="d14911ddaef0a4de79b1a4a54efbf68b"/><file name="spree.png" hash="119dbad2cfa857a786d746158b9f36f0"/><file name="start-gray.png" hash="fe86f1b188d5b3f0f375421aa5435939"/><file name="step-arrow.png" hash="167c9a25eda4cd9bb4d88762883ba47d"/><file name="success.png" hash="4a8d69083fc4447d9c4ae9bdcc6560ce"/><file name="tick-analytics.png" hash="da1c588c876b2ea12bede76ef17ca1ff"/><file name="tick-green.png" hash="5108aa311b8e64e8f69642a53e4d3506"/><file name="tick-pricing.png" hash="42b0c3bb2c8e270833b0856360722124"/><file name="tick.png" hash="a5bb66f590af2746711bfdefe3b37d7a"/><file name="tooltip-left-arrow.jpg" hash="90143af415043466956e264b5e9a5910"/><file name="tooltip.png" hash="39a75f32b4b78b07033635f14a182124"/><file name="up-arrow.png" hash="f3d15dec451c405decfbc6d3a3fa7696"/><file name="up-black.png" hash="e77b8b75ecf6e5e63eed7fbb84c265a3"/><file name="up-gray.png" hash="0c721f2f05c729e07bd22a0a90f51ab0"/><file name="user.png" hash="ad7be0166b1484d9ff9e1d2708c83a71"/><file name="warning.png" hash="43e8ab0f26ce3ecf8ecdd162a8c8f366"/><file name="x-widget.png" hash="f000d6861e99a51e5ea2fdf68e0e0910"/><file name="x.png" hash="c517855b1803534e2bcecc9ed50808a9"/></dir><dir name="js"><file name="app.js" hash="1c3471987e5be5ace7123f78f8b03a1a"/><dir name="lib"><file name="bootstrap-tooltip.js" hash="304bf569ee1a25e8fae5532d90661662"/><file name="chosen.js" hash="4fabe14fb10d99c4b432db5ce9847c06"/><file name="ractive-chosen.js" hash="837381e6e428a7fa2b9f8f67c974d195"/><file name="ractive.js" hash="4887bb0d23f93ca78c46d2a7420cd360"/></dir></dir><dir name="templates"><file name="analytics.html" hash="da19669a14ed437b0c58432be8038d48"/><file name="catalog.html" hash="f28db907a27cd4d74a03b889db52630e"/><file name="credentails.html" hash="0d76fa9f2f9968899e060ec4302eee93"/><file name="custom.html" hash="4a4154b74c4ebbfde132857684c92e60"/><file name="widgets.html" hash="561c36872e61002383d5e0b066a75045"/></dir></dir></dir></dir></dir></dir><dir name="js"><dir name="unbxd"><file name="app.js" hash="5790870aa32c641bbad8d064fd41b610"/><file name="embed.js" hash="86c5eb1f59040a9e26bf34eb721c466c"/><file name="jquery.js" hash="52d16e147b5346147d0f3269cd4d0f80"/><file name="unbxdAnalytics.js" hash="98738dccf6a9e9378e79ca6931d9d3c1"/></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Unbxd_Recommendation.xml" hash="8ea2aaae2654aa0caf10fa3b326fcdb0"/></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
18
  </package>
shell/UnbxdFeed.php DELETED
@@ -1,25 +0,0 @@
1
- <?php
2
- require_once 'abstract.php';
3
-
4
- class Unbxd_Datafeeder_Scripts_UnbxdFeed extends Mage_Shell_Abstract
5
- {
6
-
7
- public function _getIndexer()
8
- {
9
- return Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper');
10
- }
11
-
12
- public function run(){
13
- $_helper = $this->_getIndexer();
14
- $fromdate="1970-01-01 00:00:00";
15
- $site='Main Website';
16
-
17
- $_helper->indexUnbxdFeed($fromdate,$site);
18
- }
19
-
20
- }
21
-
22
-
23
- $shell = new Unbxd_Datafeeder_Scripts_UnbxdFeed();
24
- $shell->run();
25
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
skin/adminhtml/default/default/unbxd/css/app.css ADDED
@@ -0,0 +1,7773 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Grid containing columns of 20px each*/
2
+ .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-xs-13, .col-xs-14, .col-xs-15, .col-xs-16, .col-xs-17, .col-xs-18, .col-xs-19, .col-xs-20, .col-xs-21, .col-xs-22, .col-xs-23, .col-xs-24, .col-xs-25, .col-xs-26, .col-xs-27, .col-xs-28, .col-xs-29, .col-xs-30, .col-xs-31, .col-xs-32, .col-xs-33, .col-xs-34, .col-xs-35, .col-xs-36, .col-xs-37, .col-xs-38, .col-xs-39, .col-xs-40, .col-xs-41, .col-xs-42, .col-xs-43, .col-xs-44, .col-xs-45, .col-xs-46, .col-xs-47, .col-xs-48, .col-xs-49, .col-xs-50, .col-xs-51, .col-xs-52, .col-xs-53, .col-xs-54, .col-xs-55, .col-xs-56, .col-xs-57, .col-xs-58, .col-xs-59, .col-xs-60, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-13, .col-sm-14, .col-sm-15, .col-sm-16, .col-sm-17, .col-sm-18, .col-sm-19, .col-sm-20, .col-sm-21, .col-sm-22, .col-sm-23, .col-sm-24, .col-sm-25, .col-sm-26, .col-sm-27, .col-sm-28, .col-sm-29, .col-sm-30, .col-sm-31, .col-sm-32, .col-sm-33, .col-sm-34, .col-sm-35, .col-sm-36, .col-sm-37, .col-sm-38, .col-sm-39, .col-sm-40, .col-sm-41, .col-sm-42, .col-sm-43, .col-sm-44, .col-sm-45, .col-sm-46, .col-sm-47, .col-sm-48, .col-sm-49, .col-sm-50, .col-sm-51, .col-sm-52, .col-sm-53, .col-sm-54, .col-sm-55, .col-sm-56, .col-sm-57, .col-sm-58, .col-sm-59, .col-sm-60, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md-13, .col-md-14, .col-md-15, .col-md-16, .col-md-17, .col-md-18, .col-md-19, .col-md-20, .col-md-21, .col-md-22, .col-md-23, .col-md-24, .col-md-25, .col-md-26, .col-md-27, .col-md-28, .col-md-29, .col-md-30, .col-md-31, .col-md-32, .col-md-33, .col-md-34, .col-md-35, .col-md-36, .col-md-37, .col-md-38, .col-md-39, .col-md-40, .col-md-41, .col-md-42, .col-md-43, .col-md-44, .col-md-45, .col-md-46, .col-md-47, .col-md-48, .col-md-49, .col-md-50, .col-md-51, .col-md-52, .col-md-53, .col-md-54, .col-md-55, .col-md-56, .col-md-57, .col-md-58, .col-md-59, .col-md-60, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-13, .col-lg-14, .col-lg-15, .col-lg-16, .col-lg-17, .col-lg-18, .col-lg-19, .col-lg-20, .col-lg-21, .col-lg-22, .col-lg-23, .col-lg-24, .col-lg-25, .col-lg-26, .col-lg-27, .col-lg-28, .col-lg-29, .col-lg-30, .col-lg-31, .col-lg-32, .col-lg-33, .col-lg-34, .col-lg-35, .col-lg-36, .col-lg-37, .col-lg-38, .col-lg-39, .col-lg-40, .col-lg-41, .col-lg-42, .col-lg-43, .col-lg-44, .col-lg-45, .col-lg-46, .col-lg-47, .col-lg-48, .col-lg-49, .col-lg-50, .col-lg-51, .col-lg-52, .col-lg-53, .col-lg-54, .col-lg-55, .col-lg-56, .col-lg-57, .col-lg-58, .col-lg-59, .col-lg-60 {
3
+ position: relative;
4
+ min-height: 1px;
5
+ padding-right: 15px;
6
+ padding-left: 15px;
7
+ }
8
+ .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-xs-13, .col-xs-14, .col-xs-15, .col-xs-16, .col-xs-17, .col-xs-18, .col-xs-19, .col-xs-20, .col-xs-21, .col-xs-22, .col-xs-23, .col-xs-24, .col-xs-25, .col-xs-26, .col-xs-27, .col-xs-28, .col-xs-29, .col-xs-30, .col-xs-31, .col-xs-32, .col-xs-33, .col-xs-34, .col-xs-35, .col-xs-36, .col-xs-37, .col-xs-38, .col-xs-39, .col-xs-40, .col-xs-41, .col-xs-42, .col-xs-43, .col-xs-44, .col-xs-45, .col-xs-46, .col-xs-47, .col-xs-48, .col-xs-49, .col-xs-50, .col-xs-51, .col-xs-52, .col-xs-53, .col-xs-54, .col-xs-55, .col-xs-56, .col-xs-57, .col-xs-58, .col-xs-59 {
9
+ float: left;
10
+ }
11
+ .col-xs-1 {
12
+ width: 1.666666666666667%;
13
+ }
14
+ .col-xs-2 {
15
+ width: 3.333333333333333%;
16
+ }
17
+ .col-xs-3 {
18
+ width: 5%;
19
+ }
20
+ .col-xs-4 {
21
+ width: 6.666666666666667%;
22
+ }
23
+ .col-xs-5 {
24
+ width: 8.333333333333333%;
25
+ }
26
+ .col-xs-6 {
27
+ width: 10%;
28
+ }
29
+ .col-xs-7 {
30
+ width: 11.66666666666667%;
31
+ }
32
+ .col-xs-8 {
33
+ width: 13.33333333333333%;
34
+ }
35
+ .col-xs-9 {
36
+ width: 15%;
37
+ }
38
+ .col-xs-10 {
39
+ width: 16.66666666666667%;
40
+ }
41
+ .col-xs-11 {
42
+ width: 18.33333333333333%;
43
+ }
44
+ .col-xs-12 {
45
+ width: 20%;
46
+ }
47
+ .col-xs-13 {
48
+ width: 21.66666666666667%;
49
+ }
50
+ .col-xs-14 {
51
+ width: 23.33333333333333%;
52
+ }
53
+ .col-xs-15 {
54
+ width: 25%;
55
+ }
56
+ .col-xs-16 {
57
+ width: 26.66666666666667%;
58
+ }
59
+ .col-xs-17 {
60
+ width: 28.33333333333333%;
61
+ }
62
+ .col-xs-18 {
63
+ width: 30%;
64
+ }
65
+ .col-xs-19 {
66
+ width: 31.66666666666667%;
67
+ }
68
+ .col-xs-20 {
69
+ width: 33.33333333333333%;
70
+ }
71
+ .col-xs-21 {
72
+ width: 35%;
73
+ }
74
+ .col-xs-22 {
75
+ width: 36.66666666666667%;
76
+ }
77
+ .col-xs-23 {
78
+ width: 38.33333333333333%;
79
+ }
80
+ .col-xs-24 {
81
+ width: 40%;
82
+ }
83
+ .col-xs-25 {
84
+ width: 41.66666666666667%;
85
+ }
86
+ .col-xs-26 {
87
+ width: 43.33333333333333%;
88
+ }
89
+ .col-xs-27 {
90
+ width: 45%;
91
+ }
92
+ .col-xs-28 {
93
+ width: 46.66666666666667%;
94
+ }
95
+ .col-xs-29 {
96
+ width: 48.33333333333333%;
97
+ }
98
+ .col-xs-30 {
99
+ width: 50%;
100
+ }
101
+ .col-xs-31 {
102
+ width: 51.66666666666667%;
103
+ }
104
+ .col-xs-32 {
105
+ width: 53.33333333333333%;
106
+ }
107
+ .col-xs-33 {
108
+ width: 55%;
109
+ }
110
+ .col-xs-34 {
111
+ width: 56.66666666666667%;
112
+ }
113
+ .col-xs-35 {
114
+ width: 58.33333333333333%;
115
+ }
116
+ .col-xs-36 {
117
+ width: 60%;
118
+ }
119
+ .col-xs-37 {
120
+ width: 61.66666666666667%;
121
+ }
122
+ .col-xs-38 {
123
+ width: 63.33333333333333%;
124
+ }
125
+ .col-xs-39 {
126
+ width: 65%;
127
+ }
128
+ .col-xs-40 {
129
+ width: 66.66666666666667%;
130
+ }
131
+ .col-xs-41 {
132
+ width: 68.33333333333333%;
133
+ }
134
+ .col-xs-42 {
135
+ width: 70%;
136
+ }
137
+ .col-xs-43 {
138
+ width: 71.66666666666667%;
139
+ }
140
+ .col-xs-44 {
141
+ width: 73.33333333333333%;
142
+ }
143
+ .col-xs-45 {
144
+ width: 75%;
145
+ }
146
+ .col-xs-46 {
147
+ width: 76.66666666666667%;
148
+ }
149
+ .col-xs-47 {
150
+ width: 78.33333333333333%;
151
+ }
152
+ .col-xs-48 {
153
+ width: 80%;
154
+ }
155
+ .col-xs-49 {
156
+ width: 81.66666666666667%;
157
+ }
158
+ .col-xs-50 {
159
+ width: 83.33333333333333%;
160
+ }
161
+ .col-xs-51 {
162
+ width: 85%;
163
+ }
164
+ .col-xs-52 {
165
+ width: 86.66666666666667%;
166
+ }
167
+ .col-xs-53 {
168
+ width: 88.33333333333333%;
169
+ }
170
+ .col-xs-54 {
171
+ width: 90%;
172
+ }
173
+ .col-xs-55 {
174
+ width: 91.66666666666667%;
175
+ }
176
+ .col-xs-56 {
177
+ width: 93.33333333333333%;
178
+ }
179
+ .col-xs-57 {
180
+ width: 95%;
181
+ }
182
+ .col-xs-58 {
183
+ width: 96.66666666666667%;
184
+ }
185
+ .col-xs-59 {
186
+ width: 98.33333333333333%;
187
+ }
188
+ .col-xs-60 {
189
+ width: 100%;
190
+ }
191
+ /*common mobile*/
192
+ .blue-link {
193
+ font-size: 14px;
194
+ font-weight: bold;
195
+ }
196
+ .txt-center {
197
+ text-align: center;
198
+ }
199
+ .fixed-width-340 {
200
+ width: 340px !important;
201
+ float: none;
202
+ margin: 0px auto;
203
+ }
204
+ .fixed-width-520 {
205
+ margin: 0px auto;
206
+ float: none;
207
+ }
208
+ .fixed-width-580 {
209
+ margin: 0px auto;
210
+ float: none;
211
+ }
212
+ .fixed-width-680 {
213
+ float: none;
214
+ margin: 0px auto;
215
+ }
216
+ label.label-radio, label.label-checkbox {
217
+ display: inline-block;
218
+ cursor: pointer;
219
+ position: relative;
220
+ padding-left: 30px;
221
+ font-size: 14px;
222
+ font-family: Helvetica, Arial, sans-serif;
223
+ color: #1a1c1c;
224
+ }
225
+ label.label-radio.inactive, label.label-checkbox.inactive {
226
+ cursor: default;
227
+ }
228
+ input[type="radio"], input[type="checkbox"] {
229
+ display: none;
230
+ }
231
+ label.label-radio:before, label.label-checkbox:before {
232
+ content: "";
233
+ display: inline-block;
234
+ width: 17px;
235
+ height: 17px;
236
+ margin-right: 10px;
237
+ position: absolute;
238
+ left: 0;
239
+ bottom: 1px;
240
+ background-color: #fff;
241
+ border: 1px solid #d2cdcd;
242
+ top: 1px;
243
+ }
244
+ .radio-outer label.label-radio:before {
245
+ border-radius: 10px;
246
+ }
247
+ input[type=radio]:checked + label.label-radio:before {
248
+ content: "\2022";
249
+ color: #45b5c1;
250
+ font-size: 40px;
251
+ text-align: center;
252
+ vertical-align: middle;
253
+ line-height: 16px;
254
+ }
255
+ .checkbox-outer label.label-checkbox:before {
256
+ border-radius: 3px;
257
+ }
258
+ input[type=checkbox]:checked + label.label-checkbox:before {
259
+ background: url('../img/tick.png') no-repeat 25%;
260
+ /* content: "\2713";
261
+ font-size: 15px;
262
+ color: #45b5c1;
263
+ text-align: center;
264
+ line-height: 15px; */
265
+ }
266
+ label
267
+ {
268
+ margin-bottom:0px ;
269
+ }
270
+ .label-checkbox-blue {
271
+ font-weight: normal;
272
+ color: #1496a6 !important;
273
+ font-size: 13px !important;
274
+ font-weight: bold;
275
+ padding-left: 24px !important;
276
+ padding-top: 1px;
277
+ margin-bottom:0px !important;
278
+ }
279
+
280
+ .txt-cntr {
281
+ text-align: center;
282
+ }
283
+ .txt-rgt {
284
+ text-align: right;
285
+ }
286
+ .login-label-12 {
287
+ text-align: left;
288
+ width: 340px;
289
+ font-size: 12px;
290
+ font-weight: bold;
291
+ margin-bottom: 10px;
292
+ color: #515555;
293
+ }
294
+ .input-label {
295
+ float: left;
296
+ width: 340px;
297
+ border-top: 1px solid #bbb;
298
+ border-top-left-radius: 4px;
299
+ border-top-right-radius: 4px;
300
+ }
301
+
302
+ .input-inner {
303
+ width: 340px;
304
+ height: 40px;
305
+ border: 1px solid #e4dddd;
306
+ border-radius: 4px;
307
+ background-color: #fcfcfc;
308
+ padding-left: 10px;
309
+ font-size: 16px;
310
+ color: #1a1c1c;
311
+ }
312
+ .eye-icon {
313
+ background: #fcfcfc url('../img/eye-hover.png') no-repeat 97%;
314
+ cursor: pointer;
315
+ }
316
+ .eye-icon:hover {
317
+ background-image: url('../img/eye.png');
318
+ }
319
+ .login-label-new {
320
+ text-align: left;
321
+ width: 320px;
322
+ font-size: 13px;
323
+ font-weight: bold;
324
+ margin-bottom: 10px;
325
+ color: #515555;
326
+ }
327
+ .login-label-gray {
328
+ text-align: left;
329
+ width: 320px;
330
+ font-size: 13px;
331
+ font-weight: bold;
332
+ margin-bottom: 10px;
333
+ color: #abb4b4;
334
+ }
335
+ .login-text {
336
+ width: 320px;
337
+ font-size: 18px;
338
+ color: #1a1c1c;
339
+ }
340
+ .input-label-1 {
341
+
342
+ width: 75px;
343
+ border-top: 1px solid #cecece;
344
+ border-top-left-radius: 4px;
345
+ border-top-right-radius: 4px;
346
+ }
347
+
348
+ .input-inner-1 {
349
+ width: 75px;
350
+ height: 40px;
351
+ border: 1px solid #ece7e7;
352
+ border-radius: 4px;
353
+ background-color: #fdfdfd;
354
+ font-size: 16px;
355
+ color: #1a1c1c;
356
+ }
357
+ .input-inner-new {
358
+ width: 320px;
359
+ height: 40px;
360
+ border: 1px solid #dde2e4;
361
+ border-radius: 4px;
362
+ background-color: #fcfcfc;
363
+ padding-left: 10px;
364
+ font-size: 16px;
365
+ color: #1a1c1c;
366
+ }
367
+ .font-18 {
368
+ font-size: 18px !important;
369
+ }
370
+ .font-25 {
371
+ font-size: 25px !important;
372
+ }
373
+ .back-white {
374
+ background-color: #fff !important;
375
+ }
376
+ .back-black {
377
+ background-color: #1a1c1c !important;
378
+ }
379
+ .full-width {
380
+ width: 100%;
381
+ }
382
+ .fixed-width-700 {
383
+ margin: 0px auto;
384
+ float: none;
385
+ }
386
+ .fixed-width-730 {
387
+ margin: 0px auto;
388
+ float: none;
389
+ }
390
+ .fixed-width-800 {
391
+ margin: 0px auto;
392
+ float: none;
393
+ }
394
+ .fixed-width-940 {
395
+ margin: 0px auto;
396
+ float: none;
397
+ }
398
+ .fixed-width-980 {
399
+ margin: 0px auto;
400
+ float: none;
401
+ }
402
+ .fixed-width-1080 {
403
+ margin: 0px auto;
404
+ float: none;
405
+ }
406
+ .fixed-width-1140 {
407
+ margin: 0px auto;
408
+ float: none;
409
+ }
410
+ .mar-0 {
411
+ margin: 0;
412
+ }
413
+ .pad-0 {
414
+ padding: 0;
415
+ }
416
+ .pad-top-5 {
417
+ padding-top: 5px;
418
+ }
419
+ .pad-top-9 {
420
+ padding-top: 9px;
421
+ }
422
+ .pad-top-10 {
423
+ padding-top: 10px;
424
+ }
425
+ .pad-top-20 {
426
+ padding-top: 20px !important;
427
+ }
428
+ .pad-top-40 {
429
+ padding-top: 40px;
430
+ }
431
+ .pad-top-60 {
432
+ padding-top: 60px;
433
+ }
434
+ .pad-top-70 {
435
+ padding-top: 70px;
436
+ }
437
+ .pad-top-80 {
438
+ padding-top: 80px;
439
+ }
440
+ .pad-top-90 {
441
+ padding-top: 90px;
442
+ }
443
+ .pad-rgt-0 {
444
+ padding-right: 0px !important;
445
+ }
446
+ .pad-rgt-7 {
447
+ padding-right: 7px;
448
+ }
449
+ .pad-rgt-20 {
450
+ padding-right: 20px !important;
451
+ }
452
+ .pad-rgt-40 {
453
+ padding-right: 40px !important;
454
+ }
455
+ .pad-rgt-60 {
456
+ padding-right: 60px !important;
457
+ }
458
+ .pad-btm-8 {
459
+ padding-bottom: 8px;
460
+ }
461
+ .pad-btm-10 {
462
+ padding-bottom: 10px;
463
+ }
464
+ .pad-btm-20 {
465
+ padding-bottom: 20px;
466
+ }
467
+ .pad-btm-40 {
468
+ padding-bottom: 40px;
469
+ }
470
+ .pad-lft-0 {
471
+ padding-left: 0px;
472
+ }
473
+ .pad-lft-20 {
474
+ padding-left: 20px;
475
+ }
476
+ .pad-btm-30 {
477
+ padding-bottom: 30px;
478
+ }
479
+ .mar-0 {
480
+ margin: 0;
481
+ }
482
+ .mar-top-5 {
483
+ margin-top: 5px;
484
+ }
485
+ .mar-top-6 {
486
+ margin-top: 6px;
487
+ }
488
+ .mar-top-10 {
489
+ margin-top: 10px;
490
+ }
491
+ .mar-top-25 {
492
+ margin-top: 25px;
493
+ }
494
+ .mar-top-28 {
495
+ margin-top: 28px;
496
+ }
497
+ .mar-top-40 {
498
+ margin-top: 40px;
499
+ }
500
+ .mar-top-60 {
501
+ margin-top: 60px;
502
+ }
503
+ .mar-rgt-0
504
+ {
505
+ margin-right:0px !important;
506
+ }
507
+ .mar-rgt-5 {
508
+ margin-right: 5px;
509
+ }
510
+ .mar-rgt-8 {
511
+ margin-right: 8px;
512
+ }
513
+ .mar-rgt-10 {
514
+ margin-right: 10px;
515
+ }
516
+ .mar-rgt-15 {
517
+ margin-right: 15px;
518
+ }
519
+ .mar-rgt-20 {
520
+ margin-right: 20px;
521
+ }
522
+ .mar-rgt-40 {
523
+ margin-right: 40px;
524
+ }
525
+ .mar-rgt-52 {
526
+ margin-right: 52px;
527
+ }
528
+ .mar-rgt-60 {
529
+ margin-right: 60px;
530
+ }
531
+ .mar-btm-10 {
532
+ margin-bottom: 10px;
533
+ }
534
+ .mar-btm-15 {
535
+ margin-bottom: 15px;
536
+ }
537
+ .mar-btm-20 {
538
+ margin-bottom: 20px;
539
+ }
540
+ .mar-btm-27 {
541
+ margin-bottom: 27px;
542
+ }
543
+ .mar-btm-30 {
544
+ margin-bottom: 30px !important;
545
+ }
546
+ .mar-btm-33 {
547
+ margin-bottom: 33px;
548
+ }
549
+ .mar-btm-40 {
550
+ margin-bottom: 40px;
551
+ }
552
+ .mar-btm-50 {
553
+ margin-bottom: 50px;
554
+ }
555
+ .mar-btm-60 {
556
+ margin-bottom: 60px;
557
+ }
558
+ .mar-btm-70 {
559
+ margin-bottom: 70px !important;
560
+ }
561
+ .mar-btm-80 {
562
+ margin-bottom: 80px;
563
+ }
564
+ .mar-btm-90 {
565
+ margin-bottom: 90px;
566
+ }
567
+ .mar-btm-200 {
568
+ margin-bottom: 200px;
569
+ }
570
+ .mar-lft-10
571
+ {
572
+ margin-left:10px;
573
+ }
574
+ .mar-lft-30 {
575
+ margin-left: 30px;
576
+ }
577
+ .mar-lft-85 {
578
+ margin-left: 85px;
579
+ }
580
+ .width-70 {
581
+ width: 70px !important;
582
+ }
583
+ .width-75 {
584
+ width: 75px !important;
585
+ }
586
+ .width-80 {
587
+ width: 80px !important;
588
+ }
589
+ .width-90 {
590
+ width: 90px !important;
591
+ }
592
+ .width-95 {
593
+ width: 95px !important;
594
+ }
595
+ .width-105 {
596
+ width: 105px !important;
597
+ }
598
+ .width-110 {
599
+ width: 110px !important;
600
+ }
601
+ .width-120 {
602
+ width: 120px !important;
603
+ }
604
+ .width-125 {
605
+ width: 125px !important;
606
+ }
607
+ .width-140 {
608
+ width: 140px !important;
609
+ }
610
+
611
+ .width-150 {
612
+ width: 150px !important;
613
+ }
614
+ .width-155 {
615
+ width: 155px !important;
616
+ }
617
+ .width-155 {
618
+ width: 155px !important;
619
+ }
620
+ .width-160 {
621
+ width: 160px !important;
622
+ }
623
+ .width-170 {
624
+ width: 170px !important;
625
+ }
626
+ .width-180 {
627
+ width: 180px !important;
628
+ }
629
+ .width-185 {
630
+ width: 185px !important;
631
+ }
632
+ .width-190 {
633
+ width: 190px !important;
634
+ }
635
+ .width-195 {
636
+ width: 195px !important;
637
+ }
638
+ .width-200 {
639
+ width: 200px !important;
640
+ }
641
+ .width-205 {
642
+ width: 205px !important;
643
+ }
644
+ .width-210 {
645
+ width: 210px !important;
646
+ }
647
+ .width-220 {
648
+ width: 220px !important;
649
+ }
650
+ .width-230 {
651
+ width: 230px !important;
652
+ }
653
+ .width-240 {
654
+ width: 240px !important;
655
+ }
656
+
657
+ .width-250 {
658
+ width: 250px !important;
659
+ }
660
+ .width-260 {
661
+ width: 260px !important;
662
+ }
663
+ .width-280 {
664
+ width: 280px !important;
665
+ }
666
+ .width-310 {
667
+ width: 310px !important;
668
+ }
669
+ .width-320 {
670
+ width: 320px !important;
671
+ }
672
+ .width-342 {
673
+ width: 342px !important;
674
+ }
675
+ .width-355 {
676
+ width: 355px !important;
677
+ }
678
+
679
+ .width-360 {
680
+ width: 360px !important;
681
+ }
682
+
683
+ .width-410 {
684
+ width: 410px !important;
685
+ }
686
+ .width-680 {
687
+ width: 680px !important;
688
+ }
689
+ .brd-btm-gray {
690
+ border-bottom: 1px solid #dfe2e9;
691
+ }
692
+ .brd-btm-gray1 {
693
+ border-bottom: 1px solid #f1f4f4;
694
+ }
695
+
696
+ .brd-btm-gray2 {
697
+ border-bottom: 1px solid #e6ebeb;
698
+ }
699
+ .brd-btm-gray3 {
700
+ border-bottom: 1px solid #f3f6f6;
701
+ }
702
+ .brd-btm-gray4 {
703
+ border-bottom: 1px solid #d9dede;
704
+ }
705
+
706
+ .brd-btm-gray5 {
707
+ border-bottom: 1px solid #eff0f4;
708
+ }
709
+ a {
710
+ text-decoration: none !important;
711
+ }
712
+ a:hover {
713
+ color: #1a1c1c !important;
714
+ }
715
+ .main-container {
716
+ width: 900px;
717
+ font-family: "Helvetica Neue", Helvetica, Arial, Sans-Serif;
718
+ float: left;
719
+ }
720
+ .inner-container {
721
+ padding: 8px 40px 40px 40px;
722
+ }
723
+ .button-blue {
724
+
725
+ border-top: 3px solid #4fc1cb;
726
+ border-bottom: 3px solid #36a4b2;
727
+ background: #45b5c1 url('../img/button-arrow-blue.png') no-repeat 84%;
728
+ -webkit-border-radius: 5px;
729
+ -moz-border-radius: 5px;
730
+ border-radius: 5px;
731
+ color: #ffffff !important;
732
+ font-size: 18px;
733
+ text-decoration: none;
734
+ vertical-align: middle;
735
+ height: 40px;
736
+ border-right: none;
737
+ border-left: none;
738
+ font-weight: medium;
739
+ text-align: center;
740
+ display: table-cell;
741
+ cursor: pointer;
742
+ }
743
+ .button-blue:hover {
744
+ border-top: 3px solid #68c3cc;
745
+ border-bottom: 3px solid #50b1bc;
746
+ background: #54bbc6 url('../img/button-arrow-blue.png') no-repeat 84%;
747
+ }
748
+ .button-blue:active {
749
+ border-top: 3px solid #359dab;
750
+ background: #42adb9 url('../img/button-arrow-blue.png') no-repeat 84%;
751
+ border-bottom: none;
752
+ }
753
+ .button-gray {
754
+ padding-top: 3px;
755
+ background-color: #babfbf;
756
+ -webkit-border-radius: 2px;
757
+ -moz-border-radius: 2px;
758
+ border-radius: 2px;
759
+ color: #fff !important;
760
+ font-size: 13px;
761
+ height: 25px;
762
+ text-decoration: none;
763
+ vertical-align: middle;
764
+ font-weight: bold;
765
+ border-right: none;
766
+ border-left: none;
767
+ text-align: center;
768
+ float: none;
769
+ }
770
+ .button-gray-arrow {
771
+ padding-top: 3px;
772
+ background: #babfbf url('../img/arrow-left-white.jpg') no-repeat 12%;
773
+ -webkit-border-radius: 2px;
774
+ -moz-border-radius: 2px;
775
+ border-radius: 2px;
776
+ color: #fff !important;
777
+ font-size: 13px;
778
+ height: 25px;
779
+ text-decoration: none;
780
+ vertical-align: middle;
781
+ font-weight: bold;
782
+ border-right: none;
783
+ border-left: none;
784
+ text-align: center;
785
+ float: none;
786
+ }
787
+ .button-gray1 {
788
+ padding-top: 3px;
789
+ background-color: #dfe6e6;
790
+ -webkit-border-radius: 2px;
791
+ -moz-border-radius: 2px;
792
+ border-radius: 2px;
793
+ color: #fff !important;
794
+ font-size: 13px;
795
+ height: 25px;
796
+ text-decoration: none;
797
+ vertical-align: middle;
798
+ font-weight: bold;
799
+ border-right: none;
800
+ border-left: none;
801
+ text-align: center;
802
+ float: none;
803
+ }
804
+ .button-white {
805
+ background: #fff;
806
+ -webkit-border-radius: 2px;
807
+ -moz-border-radius: 2px;
808
+ border-radius: 2px;
809
+ color: #818181 !important;
810
+ text-decoration: none;
811
+ border-right: none;
812
+ border-left: none;
813
+ font-size: 12px;
814
+ text-align: center;
815
+ padding-top: 2px;
816
+ height: 20px;
817
+ width: 84px;
818
+ cursor: pointer;
819
+ float: right;
820
+ border: 1px solid #e1e2e7;
821
+ }
822
+ .button-blue1 {
823
+ border-top: 3px solid #5bbec8;
824
+ border-bottom: 3px solid #41aab6;
825
+ background: #45b5c1;
826
+ -webkit-border-radius: 2px;
827
+ -moz-border-radius: 2px;
828
+ border-radius: 2px;
829
+ color: #ffffff !important;
830
+ font-size: 14px;
831
+ text-decoration: none;
832
+ vertical-align: middle;
833
+ border-right: none;
834
+ border-left: none;
835
+ text-align: center;
836
+ float: none;
837
+ height: 40px;
838
+ padding-top: 6px;
839
+ font-weight: bold;
840
+ cursor: pointer;
841
+ }
842
+ .button-blue1:hover {
843
+
844
+ border-top: 3px solid #68c3cc;
845
+ border-bottom: 3px solid #50b1bc;
846
+ background: #54bbc6;
847
+ }
848
+ .button-blue1:active {
849
+ vertical-align: middle;
850
+ border-top: 2px solid #359dab;
851
+ background: #42adb9;
852
+ border-bottom: none;
853
+ }
854
+ .button-red {
855
+ border-top: 3px solid #c12625;
856
+ border-bottom: 3px solid #851110;
857
+ background: #ac1d1c url('../img/button-arrow-red.png') no-repeat 93%;
858
+ -webkit-border-radius: 5px;
859
+ -moz-border-radius: 5px;
860
+ border-radius: 5px;
861
+ color: #ffffff !important;
862
+ font-size: 14px;
863
+ font-weight: bold;
864
+ padding-top: 6px;
865
+ text-decoration: none;
866
+ vertical-align: middle;
867
+ border-right: none;
868
+ border-left: none;
869
+ text-align: center;
870
+ float: none;
871
+ height: 40px;
872
+ display: table-cell;
873
+ }
874
+ .button-red:hover {
875
+ height: 40px;
876
+ border-top: 3px solid #ba3131;
877
+ border-bottom: 3px solid #a42928;
878
+ background: #b32f2e url('../img/button-arrow-red.png') no-repeat 93%;
879
+ display: table-cell;
880
+ }
881
+ .button-red:active {
882
+ height: 40px;
883
+ border-top: 2px solid #941615;
884
+ background: #a51c1b url('../img/button-arrow-red.png') no-repeat 93%;
885
+ border-bottom: none;
886
+ vertical-align: middle;
887
+ display: table-cell;
888
+ padding-top: 8px;
889
+ }
890
+
891
+ .button-blue-flat {
892
+
893
+ background: #45b5c1 url('../img/arrow-right-white.jpg') no-repeat 90%;
894
+ -webkit-border-radius: 3px;
895
+ -moz-border-radius: 3px;
896
+ border-radius: 3px;
897
+ color: #ffffff !important;
898
+ font-size: 14px;
899
+ text-decoration: none;
900
+ vertical-align: middle;
901
+ border-right: none;
902
+ border-left: none;
903
+ text-align: center;
904
+ float: none;
905
+ height: 35px;
906
+ padding-top: 7px;
907
+ font-weight: bold;
908
+ cursor: pointer;
909
+ }
910
+ .button-blue-arrow {
911
+
912
+ border-top: 3px solid #4fc1cb;
913
+ border-bottom: 3px solid #36a4b2;
914
+ background: #45b5c1 url('../img/arrow-right-white.jpg') no-repeat 92%;
915
+ -webkit-border-radius: 5px;
916
+ -moz-border-radius: 5px;
917
+ border-radius: 5px;
918
+ color: #ffffff !important;
919
+ font-size: 14px;
920
+ text-decoration: none;
921
+ vertical-align: middle;
922
+ height: 40px;
923
+ border-right: none;
924
+ border-left: none;
925
+ font-weight: bold;
926
+ text-align: center;
927
+ display: table-cell;
928
+ cursor: pointer;
929
+ padding-top: 6px;
930
+ }
931
+ .button-blue-arrow:hover {
932
+ border-top: 3px solid #68c3cc;
933
+ border-bottom: 3px solid #50b1bc;
934
+ background: #54bbc6 url('../img/arrow-right-white.jpg') no-repeat 92%;
935
+ }
936
+ .button-blue-arrow:active {
937
+ border-top: 3px solid #359dab;
938
+ background: #42adb9 url('../img/arrow-right-white.jpg') no-repeat 92%;
939
+ border-bottom: none;
940
+ padding-top: 8px;
941
+ }
942
+ .button-red-flat {
943
+
944
+ background-color: #ba181f;
945
+ -webkit-border-radius: 3px;
946
+ -moz-border-radius: 3px;
947
+ border-radius: 3px;
948
+ color: #e6ebeb !important;
949
+ font-size: 16px;
950
+ text-decoration: none;
951
+ vertical-align: middle;
952
+ border-right: none;
953
+ border-left: none;
954
+ text-align: center;
955
+ float: none;
956
+ height: 40px;
957
+ padding-top: 9px;
958
+ cursor: pointer;
959
+ }
960
+ .button-black {
961
+
962
+ border-top: 3px solid #353737;
963
+ border-bottom: 3px solid #101111;
964
+ background: #282b2b url('../img/button-arrow-grey.png') no-repeat 93%;
965
+ -webkit-border-radius: 5px;
966
+ -moz-border-radius: 5px;
967
+ border-radius: 5px;
968
+ padding-top: 7px;
969
+ color: #e6ebeb !important;
970
+ font-size: 16px;
971
+ text-decoration: none;
972
+ vertical-align: middle;
973
+ border-right: none;
974
+ border-left: none;
975
+ text-align: center;
976
+ float: none;
977
+ height: 40px;
978
+ display: table-cell;
979
+ }
980
+ .button-black:hover {
981
+
982
+ border-top: 3px solid #454747;
983
+ border-bottom: 3px solid #2d2f2f;
984
+ background: #393c3c url('../img/button-arrow-grey.png') no-repeat 93%;
985
+ display: table-cell;
986
+ height: 40px;
987
+ }
988
+ .button-black:active {
989
+ vertical-align: middle;
990
+ border-top: 2px solid #181a1a;
991
+ background: #2c3030 url('../img/button-arrow-grey.png') no-repeat 93%;
992
+ border-bottom: none;
993
+ height: 40px;
994
+ padding-top: 9px;
995
+ display: table-cell;
996
+ }
997
+ .button-black-160 {
998
+ width: 160px !important;
999
+ background: #282b2b url('../img/button-arrow-grey.png') no-repeat 85%;
1000
+ }
1001
+ .button-black-160:hover {
1002
+
1003
+ background: #393c3c url('../img/button-arrow-grey.png') no-repeat 85%;
1004
+ }
1005
+ .button-black-160:active {
1006
+
1007
+ background: #2c3030 url('../img/button-arrow-grey.png') no-repeat 85%;
1008
+ }
1009
+ .button-black-190 {
1010
+ padding-top: 0px;
1011
+ width: 190px !important;
1012
+ background: #282b2b url('../img/button-arrow-grey.png') no-repeat 90%;
1013
+ }
1014
+ .button-black-190:hover {
1015
+ padding-top: 0px;
1016
+ background: #393c3c url('../img/button-arrow-grey.png') no-repeat 90%;
1017
+ }
1018
+ .button-black-190:active {
1019
+ padding-top: 1px;
1020
+ background: #2c3030 url('../img/button-arrow-grey.png') no-repeat 90%;
1021
+ }
1022
+ .no-image {
1023
+ background-image: none !important;
1024
+ }
1025
+ /* dropdown mobile */
1026
+ .display-date {
1027
+ font-size: 13px;
1028
+ color: #6e7272;
1029
+ }
1030
+ .dropdown-toggle {
1031
+ text-align: left;
1032
+ width: 125px;
1033
+ height: 32px;
1034
+ font-weight: medium;
1035
+ font-size: 14px;
1036
+ color: #fff;
1037
+ border: none;
1038
+ padding-left: 15px;
1039
+ border-top: 3px solid #babfbf;
1040
+ background-color: #babfbf;
1041
+ border-bottom: 3px solid #babfbf;
1042
+ border-radius: 4px;
1043
+ padding-top: 4px;
1044
+ }
1045
+ .dropdown-menu {
1046
+ width: 125px !important;
1047
+ border: none;
1048
+ position: absolute;
1049
+ top: 100%;
1050
+ left: 0;
1051
+ z-index: 1000;
1052
+ display: none;
1053
+ float: left;
1054
+ padding: 0;
1055
+ margin: 0;
1056
+ font-size: 16px;
1057
+ list-style: none;
1058
+ border-radius: 0px;
1059
+ -webkit-box-shadow: none;
1060
+ box-shadow: none;
1061
+ color: #1a1c1c;
1062
+ font-weight: medium;
1063
+ background-color: transparent !important;
1064
+ }
1065
+ .dropdown-menu > li > a {
1066
+ border-top: 1px solid #e0e0e0;
1067
+ background-color: #efefef;
1068
+ padding-top: 8px;
1069
+ text-align: left;
1070
+ width: 125px;
1071
+ height: 40px;
1072
+ }
1073
+ .dropdown-menu > li:last-child > a {
1074
+ border-bottom: 3px solid #eaeaea;
1075
+ border-bottom-left-radius: 5px;
1076
+ border-bottom-right-radius: 5px;
1077
+ }
1078
+ .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
1079
+ color: #1a1c1c;
1080
+ text-decoration: none;
1081
+ background-color: #f9f9f9;
1082
+ background-image: none;
1083
+ }
1084
+
1085
+ .btn-group.open .dropdown-toggle {
1086
+ -webkit-box-shadow: none;
1087
+ box-shadow: none;
1088
+ width: 125px;
1089
+ border-bottom: none;
1090
+ border-bottom-left-radius: 0px;
1091
+ border-bottom-right-radius: 0px;
1092
+ }
1093
+ .btn-group {
1094
+ width: 125px !important;
1095
+ }
1096
+ .open > .dropdown-menu {
1097
+ display: block;
1098
+ }
1099
+
1100
+ .caret {
1101
+ float: right;
1102
+ margin-top: 6px;
1103
+ width: 8px;
1104
+ margin-right: 10px;
1105
+ border-top: 8px solid #fff;
1106
+ border-right: 7px solid transparent;
1107
+ border-bottom: 0 dotted;
1108
+ border-left: 7px solid transparent;
1109
+ cursor: pointer;
1110
+ }
1111
+ .dropdown-toggle-billing {
1112
+ text-align: left;
1113
+ width: 180px;
1114
+ height: 40px;
1115
+ font-weight: medium;
1116
+ font-size: 16px;
1117
+ color: #1a1c1c;
1118
+ border: none;
1119
+ padding-left: 15px;
1120
+ border-radius: 3px;
1121
+ background-color: #fcfcfc;
1122
+ border: 1px solid #dde2e4;
1123
+ padding-top: 8px;
1124
+ }
1125
+ .dropdown-menu-billing {
1126
+ width: 180px !important;
1127
+ border: none;
1128
+ position: absolute;
1129
+ top: 100%;
1130
+ left: 0;
1131
+ z-index: 1000;
1132
+ display: none;
1133
+ float: left;
1134
+ padding: 0;
1135
+ margin: 0;
1136
+ font-size: 16px;
1137
+ list-style: none;
1138
+ border-radius: 0px;
1139
+ -webkit-box-shadow: none;
1140
+ box-shadow: none;
1141
+ color: #1a1c1c;
1142
+ font-weight: medium;
1143
+ background-color: transparent !important;
1144
+ }
1145
+ .dropdown-menu-billing > li > a {
1146
+ border-top: 1px solid #dde2e4;
1147
+ background-color: #fcfcfc;
1148
+ padding-top: 8px;
1149
+ text-align: left;
1150
+ width: 180px;
1151
+ border-left: 1px solid #dde2e4;
1152
+ border-right: 1px solid #dde2e4;
1153
+ height: 40px;
1154
+ }
1155
+ .dropdown-menu-billing > li:last-child > a {
1156
+ border-bottom: 1px solid #dde2e4;
1157
+ border-bottom-left-radius: 3px;
1158
+ border-bottom-right-radius: 3px;
1159
+ }
1160
+
1161
+ .dropdown-menu-billing > li > a:hover, .dropdown-menu-billing > li > a:focus {
1162
+ color: #1a1c1c;
1163
+ text-decoration: none;
1164
+ background-color: #fcfcfc;
1165
+ background-image: none;
1166
+ }
1167
+
1168
+ .btn-group.open .dropdown-toggle-billing {
1169
+ -webkit-box-shadow: none;
1170
+ box-shadow: none;
1171
+ width: 180px;
1172
+ border-bottom: none;
1173
+ border-bottom-left-radius: 0px;
1174
+ border-bottom-right-radius: 0px;
1175
+ }
1176
+ .btn-group-billing {
1177
+ width: 180px !important;
1178
+ }
1179
+ .open > .dropdown-menu-billing {
1180
+ display: block;
1181
+ }
1182
+
1183
+ .caret-billing {
1184
+ float: right;
1185
+ margin-top: 6px;
1186
+ width: 8px;
1187
+ margin-right: 10px;
1188
+ border-top: 8px solid #000;
1189
+ border-right: 7px solid transparent;
1190
+ border-bottom: 0 dotted;
1191
+ border-left: 7px solid transparent;
1192
+ cursor: pointer;
1193
+ }
1194
+ .dropdown-toggle-widget {
1195
+ text-align: left;
1196
+ width: 140px;
1197
+ height: 40px;
1198
+ font-weight: medium;
1199
+ font-size: 16px;
1200
+ color: #1a1c1c;
1201
+ border: none;
1202
+ padding-left: 15px;
1203
+ border-radius: 3px;
1204
+ background-color: #fdfdfd;
1205
+ border: 1px solid #ece7e7;
1206
+ padding-top: 8px;
1207
+ }
1208
+ .dropdown-menu-widget {
1209
+ width: 140px !important;
1210
+ border: none;
1211
+ position: absolute;
1212
+ top: 100%;
1213
+ left: 0;
1214
+ z-index: 1000;
1215
+ display: none;
1216
+ float: left;
1217
+ padding: 0;
1218
+ margin: 0;
1219
+ font-size: 16px;
1220
+ list-style: none;
1221
+ border-radius: 0px;
1222
+ -webkit-box-shadow: none;
1223
+ box-shadow: none;
1224
+ color: #1a1c1c;
1225
+ height: 40px;
1226
+ font-weight: medium;
1227
+ background-color: transparent !important;
1228
+ margin-top: -1px;
1229
+ }
1230
+ .dropdown-menu-widget > li > a {
1231
+ border-top: 1px solid #dde2e4;
1232
+ background-color: #fcfcfc;
1233
+ padding-top: 8px;
1234
+ text-align: left;
1235
+ width: 140px;
1236
+ border-left: 1px solid #dde2e4;
1237
+ border-right: 1px solid #dde2e4;
1238
+ height: 40px;
1239
+ }
1240
+ .dropdown-menu-widget > li:last-child > a {
1241
+ border-bottom: 1px solid #dde2e4;
1242
+ border-bottom-left-radius: 3px;
1243
+ border-bottom-right-radius: 3px;
1244
+ }
1245
+
1246
+ .dropdown-menu-widget > li > a:hover, .dropdown-menu-widget > li > a:focus {
1247
+ color: #1a1c1c;
1248
+ text-decoration: none;
1249
+ background-color: #fcfcfc;
1250
+ background-image: none;
1251
+ }
1252
+
1253
+ .btn-group.open .dropdown-toggle-widget {
1254
+ -webkit-box-shadow: none;
1255
+ box-shadow: none;
1256
+ width: 140px;
1257
+ border-bottom: none;
1258
+ border-bottom-left-radius: 0px;
1259
+ border-bottom-right-radius: 0px;
1260
+ height: 39px;
1261
+ }
1262
+ .btn-group-widget {
1263
+ width: 180px !important;
1264
+ }
1265
+ .open > .dropdown-menu-widget {
1266
+ display: block;
1267
+ }
1268
+
1269
+ .caret-widget {
1270
+ /*float:right;
1271
+ margin-top: 6px;
1272
+ width:8px;
1273
+ margin-right:10px;
1274
+ border-top: 8px solid #000;
1275
+ border-right: 7px solid transparent;
1276
+ border-bottom: 0 dotted;
1277
+ border-left: 7px solid transparent;
1278
+ cursor : pointer;
1279
+ background-color: #efefef
1280
+ */
1281
+ float: right;
1282
+ width: 40px;
1283
+ height: 39px;
1284
+ background-color: #efefef;
1285
+ margin-top: -8px;
1286
+ border-top-right-radius: 3px;
1287
+ border-bottom-right-radius: 3px;
1288
+ background: #efefef url('../img/arrow-calendar-down1.png') no-repeat 50%;
1289
+ border-bottom: 1px solid #ece7e7;
1290
+ }
1291
+ .btn-group.open .caret-widget {
1292
+ border-bottom-right-radius: 0px;
1293
+ }
1294
+ /* .caret-billing
1295
+ {
1296
+ border-top: 8px solid #000;
1297
+ }
1298
+ .dropdown-billing
1299
+ {
1300
+ height: 40px;
1301
+ background-color: #fcfcfc;
1302
+ border:none;
1303
+ border: 1px solid #dde2e4;
1304
+ font-size: 16px;
1305
+ color: #1a1c1c;
1306
+ padding-top:8px;
1307
+ }
1308
+ */
1309
+ /*report mobile */
1310
+
1311
+ .sub-widget-head {
1312
+ font-size: 13px;
1313
+ color: #7c7c7c;
1314
+ margin-top: 15px;
1315
+ margin-left: 40px;
1316
+ }
1317
+
1318
+ .widget-head {
1319
+ font-size: 18px;
1320
+ font-weight: bold;
1321
+ }
1322
+ .middle-nav-new {
1323
+ border-right: 1px solid #d1d5df;
1324
+ background-color: #f3f4f7;
1325
+ }
1326
+ .blank-div {
1327
+ width: 100%;
1328
+ float: left;
1329
+ height: 60px;
1330
+ border-bottom: 1px solid #d1d5df;
1331
+ }
1332
+ .middle-nav-disabled {
1333
+ width: 100%;
1334
+ float: left;
1335
+ height: 40px;
1336
+ color: #141515;
1337
+ border-bottom: 1px solid #d1d5df;
1338
+ font-weight: bold;
1339
+ padding: 10px 0px 0px 20px;
1340
+ background: #dce0e7 url('../img/plus.jpg') no-repeat 90%;
1341
+ font-size: 12px;
1342
+ }
1343
+ .middle-nav-enabled {
1344
+ width: 180px;
1345
+ float: left;
1346
+ height: auto;
1347
+ background-color: #fff;
1348
+ border-right: 1px solid #fff;
1349
+ border-bottom: 1px solid #d1d5df;
1350
+ font-weight: bold;
1351
+ font-size: 12px;
1352
+ padding: 5px 0px 5px 8px;
1353
+ }
1354
+ ul.sub-widgets {
1355
+
1356
+ margin: 0;
1357
+ padding: 0;
1358
+ list-style-type: none;
1359
+ margin: 0px;
1360
+ font-size: 13px;
1361
+ }
1362
+ ul.sub-widgets li {
1363
+
1364
+ padding: 10px 0px 10px 12px;
1365
+ font-weight: normal;
1366
+ color: #0d0e0e;
1367
+ font-size: 13px;
1368
+ }
1369
+ ul.sub-widgets li:first-child {
1370
+
1371
+ padding: 10px 0px 10px 12px;
1372
+ font-weight: normal;
1373
+ color: #6e7272;
1374
+ font-size: 12px;
1375
+ color: #babfbf;
1376
+ font-weight: bold;
1377
+ background: url('../img/minus.jpg') no-repeat 90%;
1378
+ }
1379
+ /*li.active {
1380
+ background-color: #0d0e0e;
1381
+ padding: 6px 12px !important;
1382
+ color: #f3f4f7 !important;
1383
+ margin: 2px 0px;
1384
+ width: 160px;
1385
+ background: url('../img/nav-highlight-arrow.png') no-repeat;
1386
+ }*/
1387
+ .outer-widget {
1388
+ padding: 0px 40px 60px 40px;
1389
+ }
1390
+ .table-widget {
1391
+ margin-top: 15px;
1392
+ margin-bottom: 0px;
1393
+ }
1394
+ table.table-widget {
1395
+ border-collapse: separate;
1396
+ border-spacing: 0px 5px;
1397
+ }
1398
+ .table-widget tbody > tr {
1399
+ background-color: #ecf1f2;
1400
+ height: 36px;
1401
+ }
1402
+ .table-widget tbody > tr > th {
1403
+ font-size: 11px;
1404
+ border-top: 1px solid #dfe2e9 !important;
1405
+ border-bottom: 1px solid #fff !important;
1406
+ background-color: #fff;
1407
+ padding-top: 4px;
1408
+ padding-bottom: 0px;
1409
+ font-weight: bold;
1410
+ text-align: right;
1411
+ }
1412
+ .table-widget tbody > tr > th {
1413
+ width: 120px;
1414
+ }
1415
+
1416
+ .table-widget tbody > tr > th:first-child {
1417
+ width: 41px !important;
1418
+ }
1419
+ .table-widget tbody > tr > th:nth-child(2) {
1420
+ width: 200px;
1421
+ }
1422
+ .table-widget tbody > tr > th:nth-child(3) {
1423
+ width: 100px;
1424
+ }
1425
+ .table-widget tbody > tr > th:nth-child(4) {
1426
+ width: 160px;
1427
+ padding-top: 19px;
1428
+ }
1429
+ .table-widget tbody > tr > th:nth-child(5) {
1430
+ width: 140px;
1431
+ }
1432
+ .table-widget tbody > tr > th:nth-child(6) {
1433
+ width: 140px;
1434
+ padding-top: 19px;
1435
+ }
1436
+ .table-widget tbody > tr > th:nth-child(7) {
1437
+ width: 100px;
1438
+ padding-top: 19px;
1439
+ }
1440
+ .table-widget tbody > tr > th:nth-child(8) {
1441
+ width: 120px;
1442
+ }
1443
+ .table-widget tbody > tr > th:last-child {
1444
+ width: 140px !important;
1445
+ text-align: left;
1446
+ }
1447
+
1448
+ .table-widget tbody > tr > td {
1449
+ border-top: none !important
1450
+ font-size: 14px;
1451
+ padding-top: 8px;
1452
+ padding-bottom: 8px;
1453
+ border-top: 1px solid #fff;
1454
+ border-bottom: 1px solid #fff;
1455
+ text-align: right;
1456
+ color: #4f5555;
1457
+ }
1458
+ .table-widget tbody > tr:nth-child(2), .table-widget.sub-widget tbody > tr:first-child {
1459
+ background-color: #1a1c1c;
1460
+ }
1461
+ .table-widget tbody > tr:nth-child(2)> td, .table-widget.sub-widget tbody > tr:first-child > td {
1462
+ color: #c9cfdb !important;
1463
+ }
1464
+ .table-widget tbody > tr > td:first-child {
1465
+ border-top-left-radius: 5px;
1466
+ border-bottom-left-radius: 5px;
1467
+ }
1468
+ .table-widget tbody > tr > td:nth-child(2) {
1469
+ text-align: left;
1470
+ padding-left: 20px;
1471
+ }
1472
+ .table-widget tbody > tr > td:last-child {
1473
+ border-top-right-radius: 5px;
1474
+ border-bottom-right-radius: 5px;
1475
+ text-align: right;
1476
+ }
1477
+ .outer-sub-widget {
1478
+ position: absolute;
1479
+ right: 40px;
1480
+ left: 80px;
1481
+ }
1482
+ .sub-widget {
1483
+ margin-top: 0px;
1484
+ }
1485
+ .table-widget.sub-widget tbody > tr {
1486
+ background-color: #f7f1f1;
1487
+ height: 36px;
1488
+ padding-top: 8px;
1489
+ font-size: 14px;
1490
+ }
1491
+ .table-widget.sub-widget tbody > tr > td {
1492
+ color: #4f5555 !important;
1493
+ }
1494
+
1495
+ .table-widget.sub-widget tbody > tr > td:first-child {
1496
+ width: 40px !important;
1497
+ }
1498
+ #popup-click, .popup-click {
1499
+ border-top-left-radius: 5px;
1500
+ border-bottom-left-radius: 5px;
1501
+ background: #c9cfdb url('../img/arrow-down-white.jpg') no-repeat 50%;
1502
+ width: 40px !important;
1503
+ cursor: pointer;
1504
+ float: left;
1505
+ width: 40px;
1506
+ height: 36px;
1507
+ }
1508
+ .table-widget.sub-widget tbody > tr > td:nth-child(2) {
1509
+ width: 160px;
1510
+ }
1511
+ .table-widget.sub-widget tbody > tr > td:nth-child(3) {
1512
+ width: 70px;
1513
+ }
1514
+ .table-widget.sub-widget tbody > tr > td:nth-child(4) {
1515
+ width: 145px;
1516
+ }
1517
+ .table-widget.sub-widget tbody > tr > td:nth-child(5) {
1518
+ width: 130px;
1519
+ }
1520
+ .table-widget.sub-widget tbody > tr > td:nth-child(6) {
1521
+ width: 130px;
1522
+ }
1523
+ .table-widget.sub-widget tbody > tr > td:nth-child(7) {
1524
+ width: 95px;
1525
+ }
1526
+ .table-widget.sub-widget tbody > tr > td:nth-child(8) {
1527
+ width: 120px;
1528
+ }
1529
+ .table-widget tbody > tr > th:last-child {
1530
+ width: 140px !important;
1531
+ text-align: left;
1532
+ }
1533
+
1534
+ .image-down-disabled {
1535
+ background: url('../img/sort-arrow-blue-down.png') no-repeat;
1536
+ width: 10px;
1537
+ height: 12px;
1538
+ float: right;
1539
+ margin-top: 2px;
1540
+ cursor: pointer;
1541
+ margin-left: 7px;
1542
+ }
1543
+ .image-up-disabled {
1544
+ background: url('../img/sort-arrow-blue-up.png') no-repeat;
1545
+ width: 10px;
1546
+ height: 12px;
1547
+ float: right;
1548
+ margin-top: 2px;
1549
+ cursor: pointer;
1550
+ }
1551
+ .image-down-enabled {
1552
+ background: url('../img/sort-arrow-grey-down.png') no-repeat;
1553
+ width: 10px;
1554
+ height: 12px;
1555
+ float: right;
1556
+ cursor: pointer;
1557
+ margin-left: 7px;
1558
+ margin-top: 2px;
1559
+ }
1560
+ .image-up-enabled {
1561
+ background: url('../img/sort-arrow-grey-up.png') no-repeat;
1562
+ width: 10px;
1563
+ height: 12px;
1564
+ float: right;
1565
+ cursor: pointer;
1566
+ margin-top: 2px;
1567
+ }
1568
+ /* tooltip starts*/
1569
+ #popUpText {
1570
+ display: none;
1571
+ position: relative;
1572
+ float: left;
1573
+ width: 240px;
1574
+ z-index: 999 !important;
1575
+ }
1576
+ .arrow {
1577
+ float: left;
1578
+ width: 40px;
1579
+ width: 40px;
1580
+ height: 36px;
1581
+ border-top-left-radius: 5px;
1582
+ border-bottom-left-radius: 5px;
1583
+ background: #222424 url('../img/arrow-up-white1.jpg') no-repeat 50%;
1584
+ }
1585
+ .list {
1586
+ height: 200px;
1587
+ float: left;
1588
+ background-color: #181919;
1589
+ }
1590
+ ul.category-list {
1591
+ width: 200px;
1592
+ list-style-type: none;
1593
+ padding: 0;
1594
+ margin: 0;
1595
+ height: 200px;
1596
+ z-index: 999;
1597
+ }
1598
+ ul.category-list li {
1599
+ color: #b3b3b3;
1600
+ font-size: 14px;
1601
+ border-bottom: 1px solid #232424;
1602
+ text-align: left;
1603
+ }
1604
+ ul.category-list li:first-child {
1605
+ color: #656565;
1606
+ font-size: 12px;
1607
+ padding: 15px 0px 15px 20px;
1608
+ border-bottom: none;
1609
+ }
1610
+ ul.category-list li:last-child {
1611
+
1612
+ }
1613
+ /* tooltip ends*/
1614
+ .tooltip-toggle {
1615
+ padding: 12px 0px 12px 20px;
1616
+ width: 200px;
1617
+ border: none;
1618
+ cursor: pointer;
1619
+ text-align: left;
1620
+ }
1621
+ .tooltip-toggle:hover {
1622
+ background-color: #232424;
1623
+ /* background: #232424 url('../img/arrow-right-gray.jpg') no-repeat 90%;*/
1624
+ }
1625
+ /*.tooltip-toggle:hover~ul.tooltip-menu
1626
+ {
1627
+ display: block !important;
1628
+
1629
+ }*/
1630
+ .btn-group.open .tooltip-toggle {
1631
+ -webkit-box-shadow: none;
1632
+ box-shadow: none;
1633
+ border-bottom: none;
1634
+ border-bottom-left-radius: 0px;
1635
+ border-bottom-right-radius: 0px;
1636
+ border-bottom: none;
1637
+ cursor: pointer;
1638
+ background: #232424 url('../img/arrow-right-gray.jpg') no-repeat 90%;
1639
+ }
1640
+
1641
+ .tooltip-menu {
1642
+ width: 160px !important;
1643
+ border: none;
1644
+ position: absolute;
1645
+ top: -1%;
1646
+ left: 200px;
1647
+ z-index: 1000;
1648
+ display: none;
1649
+ float: left;
1650
+ padding: 0;
1651
+ margin: 0;
1652
+ height: 125px;
1653
+ font-size: 14px;
1654
+ list-style: none;
1655
+ border-radius: 0px;
1656
+ -webkit-box-shadow: none;
1657
+ box-shadow: none;
1658
+ border-top: none;
1659
+ background-color: #232424;
1660
+ font-family: proxima-nova, Arial, sans-serif;
1661
+ font-weight: 400;
1662
+ font-style: normal;
1663
+ color: #fff !important;
1664
+ padding-top: 10px;
1665
+ display: none;
1666
+ }
1667
+ ul.tooltip-menu li {
1668
+ padding: 0px 0px 10px 15px !important;
1669
+ border-bottom: none;
1670
+ }
1671
+ ul.tooltip-menu > li > a {
1672
+ text-align: left;
1673
+ display: table-cell;
1674
+ vertical-align: middle;
1675
+ font-size: 14px;
1676
+ color: #b3b3b3 !important;
1677
+ text-decoration: none !important;
1678
+ }
1679
+ ul.tooltip-menu > li > a:hover {
1680
+
1681
+ color: #3b3c3c !important;
1682
+ }
1683
+
1684
+ .open > .tooltip-menu {
1685
+ display: block;
1686
+ }
1687
+
1688
+ /* common keyword list mobile ends*/
1689
+ /* payment mobile*/
1690
+ .error-main-block {
1691
+ border: 1px solid #ffa9a9;
1692
+ background-color: #ffecec;
1693
+ border-radius: 5px;
1694
+ padding: 30px 60px 35px 40px;
1695
+ }
1696
+ .error-main-head {
1697
+ font-size: 24px;
1698
+ margin-bottom: 10px;
1699
+ }
1700
+ .error-main-text {
1701
+ font-size: 15px;
1702
+ color: #4a4a4a;
1703
+ }
1704
+ .input-vat {
1705
+ width: 190px !important;
1706
+ height: 38px;
1707
+ background-color: #fcfcfc;
1708
+ padding-left: 10px;
1709
+ font-size: 14px;
1710
+ color: #1a1c1c;
1711
+ border: none;
1712
+ }
1713
+ .vat-number-text {
1714
+ font-size: 14px;
1715
+ font-weight: bold;
1716
+ margin-bottom: 10px;
1717
+ }
1718
+ .vat-subblock1 {
1719
+ width: 40px !important;
1720
+ font-size: 14px;
1721
+ font-weight: bold;
1722
+ background-color: #efefef;
1723
+ height: 38px;
1724
+ text-align: center;
1725
+ padding-top: 8px;
1726
+ border-top-left-radius: 5px;
1727
+ border-bottom-left-radius: 5px;
1728
+ }
1729
+ .vat-subblock2 {
1730
+ width: 190px !important;
1731
+ text-align: left;
1732
+ }
1733
+ .vat-subblock3 {
1734
+ width: 88px !important;
1735
+ }
1736
+ .button-vat {
1737
+
1738
+ color: #ffffff !important;
1739
+ font-size: 14px;
1740
+ text-decoration: none;
1741
+ height: 38px;
1742
+ background-color: #45b5c1;
1743
+ border-right: none;
1744
+ border-left: none;
1745
+ text-align: center;
1746
+ font-weight: bold;
1747
+ cursor: pointer;
1748
+ border-top-right-radius: 4px;
1749
+ border-bottom-right-radius: 4px;
1750
+ padding-top: 8px;
1751
+ }
1752
+ .vat-number-block {
1753
+ width: 320px !important;
1754
+ border: 1px solid #dde2e4;
1755
+ height: 40px;
1756
+ border-radius: 5px;
1757
+ margin-bottom: 30px;
1758
+ }
1759
+ .plan-block-payment {
1760
+ padding: 20px 0px 20px 40px;
1761
+ background-color: #1a1c1c;
1762
+ margin-bottom: 45px;
1763
+ }
1764
+ .plan-block-row1 {
1765
+ font-size: 18px;
1766
+ font-weight: bold;
1767
+ color: #f2f2f2;
1768
+ }
1769
+ .plan-block-row2 {
1770
+ font-size: 15px;
1771
+ color: #8b8b8b;
1772
+ }
1773
+ .order-block {
1774
+ padding: 30px 40px 20px 40px;
1775
+ background-color: #f2f2f2;
1776
+ margin-bottom: 65px;
1777
+ }
1778
+ .order-block-head {
1779
+ font-size: 24px;
1780
+ margin-bottom: 10px;
1781
+ }
1782
+ .order-block-row1 {
1783
+ padding-bottom: 8px;
1784
+ font-size: 15px;
1785
+ border-bottom: 1px solid #dfdfdf;
1786
+ margin-bottom: 8px;
1787
+ }
1788
+ .order-block-row2 {
1789
+ padding-bottom: 8px;
1790
+ font-size: 15px;
1791
+ border-bottom: 1px solid #dfdfdf;
1792
+ margin-bottom: 13px;
1793
+ }
1794
+ .order-block-row3 {
1795
+ font-size: 15px;
1796
+ font-weight: bold;
1797
+ }
1798
+ .card-info-head {
1799
+ font-size: 18px;
1800
+ font-weight: bold;
1801
+ border-top: 1px solid #c0c1c1;
1802
+ padding-top: 25px;
1803
+ margin-bottom: 40px;
1804
+ }
1805
+ .ship-info-head {
1806
+ font-size: 18px;
1807
+ font-weight: bold;
1808
+ border-top: 1px solid #c0c1c1;
1809
+ margin-bottom: 30px;
1810
+ padding-top: 25px;
1811
+ }
1812
+ .card-image {
1813
+ background: url('../img/card-image.jpg') no-repeat;
1814
+ width: 34px !important;
1815
+ height: 23px;
1816
+ margin-top: 36px;
1817
+ }
1818
+ .card-image1 {
1819
+ background: url('../img/card-image1.jpg') no-repeat;
1820
+ width: 34px !important;
1821
+ height: 23px;
1822
+ margin-top: 36px;
1823
+ }
1824
+ .card-image2 {
1825
+ background: url('../img/card-image2.jpg') no-repeat;
1826
+ width: 34px !important;
1827
+ height: 23px;
1828
+ margin-top: 35px;
1829
+ margin-right: 1px;
1830
+ }
1831
+ .card-image3 {
1832
+ background: url('../img/card-image3.jpg') no-repeat;
1833
+ width: 34px !important;
1834
+ height: 23px;
1835
+ margin-top: 35px;
1836
+ }
1837
+ .cvv-image {
1838
+ background: url('../img/cvv-number.jpg') no-repeat;
1839
+ width: 32px !important;
1840
+ height: 23px;
1841
+ margin-top: 36px;
1842
+ margin-right: 5px;
1843
+ }
1844
+ .cvv-text {
1845
+ font-size: 12px;
1846
+ font-weight: bold;
1847
+ color: #808080;
1848
+ margin-top: 43px;
1849
+ }
1850
+ .terms-text {
1851
+ color: #4a4a4a;
1852
+ font-size: 15px;
1853
+ border-top: 1px solid #c0c1c1;
1854
+ padding-top: 25px;
1855
+ }
1856
+ .sol-text {
1857
+ font-size: 24px;
1858
+ font-weight: bold;
1859
+ }
1860
+ .policy-text {
1861
+ font-size: 18px;
1862
+ font-weight: bold;
1863
+ }
1864
+ .billing-text {
1865
+ font-size: 18px;
1866
+ font-weight: bold;
1867
+ }
1868
+ .email-text {
1869
+ font-size: 14px;
1870
+ font-weight: bold;
1871
+ }
1872
+ .phone-text {
1873
+ font-size: 14px;
1874
+ font-weight: bold;
1875
+ }
1876
+ .lock-img {
1877
+ background: url('../img/lock-image.jpg') no-repeat;
1878
+ width: 58px !important;
1879
+ height: 73px;
1880
+ float: none;
1881
+ margin: 0px auto;
1882
+ }
1883
+ /* login1 mobile*/
1884
+ .success-text {
1885
+ font-size: 15px;
1886
+ color: #666666;
1887
+ }
1888
+ .reset-password-sucess-container {
1889
+ padding: 175px 0px;
1890
+ }
1891
+ .login-again-link {
1892
+ font-size: 14px;
1893
+ margin-right: 40px;
1894
+ }
1895
+ .login-container {
1896
+ padding: 40px 0px 55px 0px;
1897
+ }
1898
+ .reset-password-container {
1899
+ padding: 40px 0px 75px 0px;
1900
+ }
1901
+ .password-container {
1902
+ padding: 40px 0px 60px 0px;
1903
+ }
1904
+ .login-head {
1905
+ font-size: 25px;
1906
+ margin-bottom: 45px;
1907
+ }
1908
+ .password-head {
1909
+ font-size: 25px;
1910
+ margin-bottom: 80px;
1911
+ }
1912
+ .reset-password-head {
1913
+ font-size: 25px;
1914
+ margin-bottom: 70px;
1915
+ }
1916
+ .forgot-link {
1917
+ font-size: 13px;
1918
+ }
1919
+ .login-footer {
1920
+ background-color: #f3f6f6;
1921
+ padding: 20px 0px;
1922
+ }
1923
+ .new-user {
1924
+ font-size: 14px;
1925
+ color: #4f5555;
1926
+ }
1927
+ .signup-link {
1928
+ font-size: 14px;
1929
+ }
1930
+ /*popup mobile*/
1931
+ .big-arrow-gray {
1932
+ margin-top: -5px !important;
1933
+ margin-left: 5px;
1934
+ margin-right: 5px;
1935
+ }
1936
+ .trend-head {
1937
+ font-weight: bold;
1938
+ font-size: 14px;
1939
+ margin-top: 20px;
1940
+ padding-left: 40px;
1941
+ }
1942
+ .popup-container {
1943
+ padding: 20px 40px 40px 40px;
1944
+ }
1945
+
1946
+ .dropdown-top-label {
1947
+ font-size: 14px;
1948
+ font-weight: normal;
1949
+ padding-left: 0px !important;
1950
+ }
1951
+
1952
+ .sub-popup {
1953
+ margin-top: -5px;
1954
+ }
1955
+ .table-popup {
1956
+ margin-top: 0px;
1957
+ margin-bottom: 0;
1958
+ }
1959
+ table.table-popup {
1960
+ border-collapse: separate;
1961
+ border-spacing: 0px 5px;
1962
+ }
1963
+ .table-popup tbody > tr {
1964
+ background-color: #ecf1f2;
1965
+ height: 36px;
1966
+ }
1967
+ .table-popup tbody > tr > th {
1968
+ font-size: 11px;
1969
+ border-top: none !important;
1970
+ border-bottom: 1px solid #fff !important;
1971
+ background-color: #fff;
1972
+ padding-top: 0px;
1973
+ padding-bottom: 0px;
1974
+ font-weight: bold;
1975
+ text-align: right;
1976
+ }
1977
+ .table-popup.sub-popup tbody > tr > th {
1978
+ border-top: none !important;
1979
+ }
1980
+
1981
+ .table-popup tbody > tr > th:first-child {
1982
+ width: 220px !important;
1983
+ }
1984
+ .table-popup tbody > tr > th:nth-child(2) {
1985
+ width: 130px;
1986
+ }
1987
+ .table-popup tbody > tr > th:nth-child(3) {
1988
+ width: 180px;
1989
+ padding-top: 19px;
1990
+ }
1991
+ .table-popup tbody > tr > th:nth-child(4) {
1992
+ width: 140px;
1993
+ padding-top: 4px;
1994
+ }
1995
+ .table-popup tbody > tr > th:nth-child(5) {
1996
+ width: 170px;
1997
+ padding-top: 19px;
1998
+ }
1999
+ .table-popup tbody > tr > th:last-child {
2000
+ width: 220px;
2001
+ padding-top: 19px;
2002
+ text-align: center;
2003
+ }
2004
+ .table-popup tbody > tr > td {
2005
+ border-top: none !important
2006
+ font-size: 14px;
2007
+ padding-top: 7px;
2008
+ padding-bottom: 0px;
2009
+ border-top: 1px solid #fff;
2010
+ border-bottom: 1px solid #fff;
2011
+ text-align: right;
2012
+ color: #4f5555;
2013
+ }
2014
+ .table-popup tbody > tr > td:first-child {
2015
+ border-top-left-radius: 5px;
2016
+ border-bottom-left-radius: 5px;
2017
+ text-align: left;
2018
+ padding-left: 20px;
2019
+ }
2020
+ .table-widget tbody > tr > td:nth-child(2) {
2021
+ text-align: left;
2022
+ padding-left: 20px;
2023
+ }
2024
+ .table-popup tbody > tr > td:last-child {
2025
+ border-top-right-radius: 5px;
2026
+ border-bottom-right-radius: 5px;
2027
+ text-align: center;
2028
+ }
2029
+ .table-popup tbody > tr:nth-child(2), .table-widget.sub-widget tbody > tr:first-child {
2030
+ background-color: #1a1c1c;
2031
+ }
2032
+ .table-popup tbody > tr:nth-child(2)> td, .table-widget.sub-widget tbody > tr:first-child > td {
2033
+ color: #c9cfdb !important;
2034
+ }
2035
+ /* pricing recommender mobile */
2036
+ .block-scroll
2037
+ {
2038
+ width:100%;
2039
+ float:left;
2040
+ bottom:0;
2041
+ }
2042
+ .outer-scroll
2043
+ {
2044
+
2045
+ width: 60px;
2046
+ height: 60px;
2047
+ border-radius: 3px;
2048
+ background-color: #1a1c1b;
2049
+ padding:20px;
2050
+ margin-right:40px;
2051
+ margin-bottom: 40px;
2052
+ display: none;
2053
+ cursor:pointer !important;
2054
+ position: fixed;
2055
+ bottom: 20px;
2056
+ right: 20px;
2057
+ z-index:190;
2058
+ }
2059
+ .button-red-demo {
2060
+ border-top: 3px solid #c12625;
2061
+ border-bottom: 3px solid #851110;
2062
+ background: #ac1d1c url('../img/button-arrow-red.png') no-repeat 92%;
2063
+ -webkit-border-radius: 5px;
2064
+ -moz-border-radius: 5px;
2065
+ border-radius: 5px;
2066
+ color: #ffffff !important;
2067
+ font-size: 16px;
2068
+ font-weight: bold;
2069
+ padding-top: 3px;
2070
+ text-decoration: none;
2071
+ vertical-align: middle;
2072
+ border-right: none;
2073
+ border-left: none;
2074
+ text-align: center;
2075
+ float: none;
2076
+ height: 50px;
2077
+ display: table-cell;
2078
+ }
2079
+ .button-red-demo:hover {
2080
+
2081
+ border-top: 3px solid #ba3131;
2082
+ border-bottom: 3px solid #a42928;
2083
+ background: #b32f2e url('../img/button-arrow-red.png') no-repeat 92%;
2084
+ display: table-cell;
2085
+ }
2086
+ .button-red-demo:active {
2087
+
2088
+ border-top: 2px solid #941615;
2089
+ background: #a51c1b url('../img/button-arrow-red.png') no-repeat 92%;
2090
+ border-bottom: none;
2091
+ vertical-align: middle;
2092
+ display: table-cell;
2093
+ padding-top: 4px;
2094
+ }
2095
+
2096
+ .header-pricing {
2097
+ padding: 60px 0px 40px 0px;
2098
+ font-family: proxima-nova,Arial, sans-serif;
2099
+ }
2100
+ .top-header-pricing {
2101
+ font-weight: 300;
2102
+ font-size:40px;
2103
+ color: #dde5e6;
2104
+ margin-bottom: 20px;
2105
+ }
2106
+ .center-pricing-bottom
2107
+ {
2108
+ font-family: proxima-nova,Arial, sans-serif;
2109
+ }
2110
+ .top-center-pricing
2111
+ {
2112
+ font-size: 24px;
2113
+ font-weight: 400;
2114
+ margin-bottom: 10px;
2115
+ }
2116
+ .middle-center-pricing
2117
+ {
2118
+ font-size: 16px;
2119
+ font-weight: 600;
2120
+ color: #7f8585;
2121
+ margin-bottom: 30px;
2122
+ }
2123
+ .bottom-header-pricing {
2124
+ font-weight: 400;
2125
+ font-size:16px;
2126
+ color: #768484;
2127
+ }
2128
+ .container-pricing
2129
+ {
2130
+ padding: 60px 0px;
2131
+ font-family: proxima-nova,Arial, sans-serif;
2132
+ }
2133
+ .center-pricing-top
2134
+ {
2135
+ border-top-left-radius: 5px;
2136
+ border-top-right-radius: 5px;
2137
+ border: 1px solid #dee5e7;
2138
+ background-color: #fff;
2139
+ }
2140
+ .center-pricing-buttons
2141
+ {
2142
+ border-bottom-left-radius: 5px;
2143
+ border-bottom-right-radius: 5px;
2144
+ border: 1px solid #dee5e7;
2145
+ background-color: #fff;
2146
+ border-top: none;
2147
+ margin-bottom: 40px;
2148
+ }
2149
+ .block1-pricing
2150
+ {
2151
+ background-color: #fff;
2152
+ border-top-left-radius: 5px;
2153
+ border-bottom-left-radius: 5px;
2154
+ font-weight: 700;
2155
+ font-size:14px;
2156
+ padding:0;
2157
+ }
2158
+ .empty-div-60
2159
+ {
2160
+ height: 60px;
2161
+ }
2162
+ .empty-div-pricing
2163
+ {
2164
+ height: 120px;
2165
+ }
2166
+ .list-unstyled.terms-pricing
2167
+ {
2168
+ padding: 0;
2169
+ text-align: left;
2170
+ margin-bottom:0px;
2171
+ }
2172
+ .li-pricing
2173
+ {
2174
+
2175
+ height: 40px;
2176
+ text-align: left;
2177
+ padding:0;
2178
+ }
2179
+ .li-pricing:nth-child(odd)
2180
+ {
2181
+ background-color:#f3f5f6;
2182
+ }
2183
+ .li-pricing.block2:nth-child(odd)
2184
+ {
2185
+ background-color:#e8eeef;
2186
+ }
2187
+ .li-pricing.block3:nth-child(odd)
2188
+ {
2189
+ background-color:#e0e8e9;
2190
+ }
2191
+ .li-pricing.block4:nth-child(odd)
2192
+ {
2193
+ background-color:#dbe3e4;
2194
+ }
2195
+ .li-pricing.block5:nth-child(odd)
2196
+ {
2197
+ background-color:#d7e0e1;
2198
+ }
2199
+ .vertical-align
2200
+ {
2201
+
2202
+ padding:0;
2203
+ padding-left: 20px;
2204
+ }
2205
+ .li-inside
2206
+ {
2207
+ display:table-cell;vertical-align:middle;height:40px;
2208
+ font-weight:bold;
2209
+ }
2210
+ .block2-pricing
2211
+ {
2212
+
2213
+ padding: 20px 0px 0px 0px;
2214
+ text-align: center;
2215
+ background-color: #f2f6f6;
2216
+ font-family: "Helvetica Neue", Helvetica, Arial, Sans-Serif;
2217
+ font-size: 13px;
2218
+ }
2219
+ .block3-pricing
2220
+ {
2221
+ padding: 20px 0px 0px 0px;
2222
+ text-align: center;
2223
+ background-color: #e8eeef;
2224
+ }
2225
+ .lbl-black
2226
+ {
2227
+ background-color:#1a1c1c;
2228
+ font-size: 15px;
2229
+ width:120px;
2230
+ color: white;
2231
+ padding: 2px 0px 2px 0px;
2232
+ margin:0px auto;
2233
+ text-align: center;
2234
+ float: none !important;
2235
+ font-family: "Helvetica Neue", Helvetica, Arial, Sans-Serif;
2236
+ margin-bottom:20px;
2237
+ }
2238
+ .lbl-blue
2239
+ {
2240
+ background-color:#45b5c1;
2241
+ font-size: 15px;
2242
+ width:120px;
2243
+ color: white;
2244
+ padding: 2px 0px 2px 0px;
2245
+ margin:0px auto;
2246
+ text-align: center;
2247
+ float: none !important;
2248
+ font-family: "Helvetica Neue", Helvetica, Arial, Sans-Serif;
2249
+ margin-bottom:20px;
2250
+ }
2251
+ .lbl-red
2252
+ {
2253
+ background-color:#ac1d1c;
2254
+ font-size: 15px;
2255
+ color: white;
2256
+ width:120px;
2257
+ padding: 2px 0px 2px 0px;
2258
+ margin:0px auto;
2259
+ text-align: center;
2260
+ float: none !important;
2261
+ font-family: "Helvetica Neue", Helvetica, Arial, Sans-Serif;
2262
+ margin-bottom:20px;
2263
+ }
2264
+ .price-text
2265
+ {
2266
+ font-weight: 700;
2267
+ font-size: 20px;
2268
+ margin-bottom:27px;
2269
+ }
2270
+ .block4-pricing
2271
+ {
2272
+ padding: 20px 0px 0px 0px;
2273
+ text-align: center;
2274
+ background-color: #e2e8e9;
2275
+ }
2276
+ .block5-pricing
2277
+ {
2278
+ padding: 20px 0px 0px 0px;
2279
+ text-align: center;
2280
+ background-color: #dde4e5;
2281
+ }
2282
+ .price-link
2283
+ {
2284
+ font-size: 16px;
2285
+ font-weight: 700;
2286
+
2287
+ }
2288
+ .pricing-button
2289
+ {
2290
+ border-radius: 2px;
2291
+ font-size:13px;
2292
+ font-weight: bold;
2293
+ padding-top: 0px !important;
2294
+ margin:0px auto;
2295
+ float: none !important;
2296
+ width:120px !important;
2297
+ }
2298
+ .block2-button
2299
+ {
2300
+
2301
+ padding: 10px 0px 10px 10px;
2302
+ text-align: center;
2303
+ background-color: #f2f6f6;
2304
+
2305
+ }
2306
+ /* My dashboard*/
2307
+ .block1-dashboard
2308
+ {
2309
+
2310
+ }
2311
+ .block2-dashboard
2312
+ {
2313
+ border: 1px solid #e8ecec;
2314
+ background-color: #fcfcfc;
2315
+ padding: 30px 40px 40px 40px;
2316
+ border-radius:3px;
2317
+ }
2318
+ .block1-top
2319
+ {
2320
+ font-size:18px;
2321
+ font-weight:bold;
2322
+ color: #fff;
2323
+ padding: 30px 0px 30px 40px;
2324
+ background-color: #1a1c1c;
2325
+ border-top-left-radius: 3px;
2326
+ border-top-right-radius: 3px;
2327
+ }
2328
+ .block2-top
2329
+ {
2330
+ font-size:24px;
2331
+ font-weight:bold;
2332
+ border-top-left-radius: 3px;
2333
+ border-top-right-radius: 3px;
2334
+ margin-bottom:25px;
2335
+ }
2336
+ .block1-middle
2337
+ {
2338
+ color: #4f5555;
2339
+ margin-bottom: 20px;
2340
+ }
2341
+ .block2-middle
2342
+ {
2343
+ color: #4f5555;
2344
+ font-size: 14px;
2345
+ margin-bottom: 20px;
2346
+ }
2347
+ .block1-cont
2348
+ {
2349
+ font-size:14px;
2350
+ padding: 30px 40px 40px 40px;
2351
+ background-color: #eff3f3;
2352
+ border-bottom-left-radius: 3px;
2353
+ border-bottom-right-radius: 3px;
2354
+ border: 1px solid #e0e6e6;
2355
+ border-top: none;
2356
+ }
2357
+ .block1-button-red
2358
+ {
2359
+ width:240px !important;
2360
+ padding-top:0px;
2361
+ }
2362
+ .block1-button-red:active
2363
+ {
2364
+ padding-top:1px;
2365
+ }
2366
+ .block1-button-blue
2367
+ {
2368
+ width:240px !important;
2369
+ padding-top:0px;
2370
+ font-size:14px;
2371
+ font-weight:bold;
2372
+ }
2373
+ .block1-button-red:active
2374
+ {
2375
+ padding-top:1px;
2376
+ }
2377
+ .block2-button-black
2378
+ {
2379
+ width:240px !important;
2380
+ padding-top:0px;
2381
+ font-size:14px;
2382
+ font-weight:bold;
2383
+ }
2384
+ .block2-button-black:active
2385
+ {
2386
+ padding-top:1px;
2387
+ }
2388
+ /* new dashborad common*/
2389
+
2390
+ .mar-rgt-30
2391
+ {
2392
+ margin-right: 30px;
2393
+ }
2394
+ .navbar
2395
+ {
2396
+ background-image: none;
2397
+ box-shadow: none;
2398
+ }
2399
+ .navbar-inverse
2400
+ {
2401
+ background-image: none;
2402
+ border-color: #fff;
2403
+ }
2404
+
2405
+ .navbar-dashboard
2406
+ {
2407
+ background-color: #fff;
2408
+ padding: 13px 75px 13px 25px;
2409
+ font-family: proxima-nova,Arial, sans-serif;
2410
+ }
2411
+ .nav-dashboard>li>a
2412
+ {
2413
+ padding: 0px 30px 0px 0px !important;
2414
+ }
2415
+ .dashboard-nav-img
2416
+ {
2417
+ padding:0px;
2418
+ padding-top: 2px;
2419
+ }
2420
+ .dashboard-dropdown {
2421
+ text-align: left;
2422
+ width: 230px;
2423
+ height: 40px;
2424
+ font-weight: 400;
2425
+ font-size: 16px;
2426
+ color: #4d4d4d;
2427
+ border: none;
2428
+ padding-left: 15px;
2429
+ border-radius: 3px;
2430
+ background-color: #fff;
2431
+ border: 1px solid #dedede;
2432
+ padding-top: 8px;
2433
+ font-weight: 600;
2434
+ }
2435
+
2436
+ .dashboard-menu-dropdown {
2437
+ width: 230px !important;
2438
+ border: none;
2439
+ position: absolute;
2440
+ top: 100%;
2441
+ left: 0;
2442
+ z-index: 1000;
2443
+ display: none;
2444
+ float: left;
2445
+ padding: 0;
2446
+ margin: 0;
2447
+ font-size: 16px;
2448
+ list-style: none;
2449
+ border-radius: 0px;
2450
+ -webkit-box-shadow: none;
2451
+ box-shadow: none;
2452
+ font-weight: medium;
2453
+ background-color: transparent !important;
2454
+ font-weight: 600;
2455
+ color: #464646;
2456
+ }
2457
+ .dashboard-menu-dropdown > li > a {
2458
+ border-top: 1px solid #dedede;
2459
+ background-color: #fff;
2460
+ padding-top: 8px;
2461
+ text-align: left;
2462
+ width: 230px;
2463
+ border-left: 1px solid #dedede;
2464
+ border-right: 1px solid #dedede;
2465
+ height: 40px;
2466
+ font-size:16px;
2467
+ font-weight: 600;
2468
+ color: #464646;
2469
+ }
2470
+ .dashboard-menu-dropdown > li:last-child > a {
2471
+ border-bottom: 1px solid #dedede;
2472
+ padding: 3px 5px;
2473
+ border-bottom-left-radius: 3px;
2474
+ border-bottom-right-radius: 3px;
2475
+ height: 42px;
2476
+ color: #fff;
2477
+ text-align: center;
2478
+ }
2479
+
2480
+ .btn-group.open .dashboard-dropdown {
2481
+ -webkit-box-shadow: none;
2482
+ box-shadow: none;
2483
+ width: 230px;
2484
+ border-bottom: none;
2485
+ border-bottom-left-radius: 0px;
2486
+ border-bottom-right-radius: 0px;
2487
+ }
2488
+ .btn-group.open .dashboard-user {
2489
+ -webkit-box-shadow: none;
2490
+ box-shadow: none;
2491
+ width: 125px !important;
2492
+ border-bottom: none;
2493
+ border-bottom-left-radius: 0px;
2494
+ border-bottom-right-radius: 0px;
2495
+ }
2496
+ .open > .dashboard-menu-dropdown {
2497
+ display: block;
2498
+ }
2499
+ .dropdown-user
2500
+ {
2501
+ background: url('../img/user.png') no-repeat 1%;
2502
+ padding-left: 33px;
2503
+ width:125px;
2504
+ border:none;
2505
+ padding-top:11px;
2506
+ }
2507
+ .dashboard-menu-user
2508
+ {
2509
+ font-weight: 400 !important;
2510
+ width:140px !important;
2511
+ top: 134%;
2512
+ }
2513
+ .dashboard-menu-user>li>a
2514
+ {
2515
+ font-weight: 400 !important;
2516
+ width:140px !important;
2517
+ padding-left: 12px !important;
2518
+
2519
+ }
2520
+ .dashboard-menu-user>li:last-child>a
2521
+ {
2522
+ height:40px;
2523
+ padding-left: 12px;
2524
+ text-align: left !important;
2525
+ color: #464646 !important;
2526
+ padding-top: 8px !important;
2527
+
2528
+ }
2529
+ .help-img
2530
+ {
2531
+ background: url('../img/help.png') no-repeat 1%;
2532
+ width: 23px;
2533
+ height: 23px;
2534
+ float: left;
2535
+ margin-right: 13px;
2536
+ }
2537
+ .help-text
2538
+ {
2539
+ margin-top:3px;
2540
+ float:left;
2541
+ }
2542
+ .dashboard-help
2543
+ {
2544
+ margin-top: 10px;
2545
+ font-size: 16px;
2546
+ font-weight: 600;
2547
+ color: #4d4d4d !important;
2548
+
2549
+
2550
+ }
2551
+
2552
+ .caret-dashboard {
2553
+ float: right;
2554
+ margin-top: 7px;
2555
+ width: 6px;
2556
+ margin-right: 10px;
2557
+ border-top: 8px solid #45b5c1;
2558
+ border-right: 5px solid transparent;
2559
+ border-bottom: 0 dotted;
2560
+ border-left: 5px solid transparent;
2561
+ cursor: pointer;
2562
+ }
2563
+ .caret-user{
2564
+ float: right;
2565
+ margin-top: 7px;
2566
+ width: 6px;
2567
+ margin-right: 0px;
2568
+ border-top: 8px solid #45b5c1;
2569
+ border-right: 5px solid transparent;
2570
+ border-bottom: 0 dotted;
2571
+ border-left: 5px solid transparent;
2572
+ cursor: pointer;
2573
+ }
2574
+ .dashboard-button-blue
2575
+ {
2576
+ height: 34px;
2577
+ padding-top: 8px;
2578
+ background: #45b5c1 url('../img/add-icon.png') no-repeat 92%;
2579
+ }
2580
+
2581
+ /* new dashboard*/
2582
+ .dashboard-new-hor-tabs
2583
+ {
2584
+ /*border-top: 1px solid #ddd;
2585
+ border-bottom: 1px solid #ddd;
2586
+ height:60px;
2587
+ background-color: #f3f6f6;*/
2588
+ padding-left: 25px;
2589
+ height: 52px;
2590
+ background-color: #3c3f40;
2591
+ margin-bottom: 50px;
2592
+ }
2593
+
2594
+ ul.hor-tabs-inner {
2595
+ margin: 0;
2596
+ padding: 0;
2597
+ list-style-type: none;
2598
+
2599
+ }
2600
+ ul.hor-tabs-inner li {
2601
+
2602
+ font-size: 16px;
2603
+ display:inline;
2604
+
2605
+ }
2606
+ ul.hor-tabs-inner li a {
2607
+
2608
+ color: #ffffff;
2609
+ width: 170px;
2610
+ }
2611
+ ul.hor-tabs-inner li a.hor-tabs-inner-disabled {
2612
+ padding: 15px 0px;
2613
+ float: left;
2614
+ text-align: center;
2615
+ color: #fff !important;
2616
+ }
2617
+ ul.hor-tabs-inner li a.hor-tabs-inner-enabled {
2618
+ margin-top:7px;
2619
+ color: #3c3f40;
2620
+ background-color: #fff;
2621
+ padding: 11px 0px;
2622
+ float: left;
2623
+ border-top-left-radius: 5px;
2624
+ border-top-right-radius: 5px;
2625
+ border-left: 1px solid #ddd;
2626
+ border-right: 1px solid #ddd;
2627
+ border-bottom:1px solid #fff;
2628
+ text-align: center;
2629
+ }
2630
+ /*
2631
+ .feed-table-head
2632
+ {
2633
+ font-size: 18px;
2634
+ margin-top: 20px;
2635
+ margin-bottom: 15px;
2636
+ padding-left: 110px;
2637
+ }*/
2638
+ .pad-70
2639
+ {
2640
+ padding: 0px 70px;
2641
+ }
2642
+ .mar-btm-10
2643
+ {
2644
+ margin-bottom: 10px;
2645
+ }
2646
+ .mar-btm-30
2647
+ {
2648
+ margin-bottom: 30px;
2649
+ }
2650
+ .mar-btm-50
2651
+ {
2652
+ margin-bottom: 50px;
2653
+ }
2654
+
2655
+ .cat-head
2656
+ {
2657
+ color: #4e5356;
2658
+ font-size: 18px;
2659
+ font-weight: 600;
2660
+ }
2661
+ .in-grp-merchandise
2662
+ {
2663
+ width:300px;
2664
+ }
2665
+ .input-merchandise {
2666
+ border-radius: 0px;
2667
+ box-shadow: none;
2668
+ transition: none;
2669
+ border: 1px solid #d4d4d4;
2670
+ height: 40px;
2671
+ width: 260px !important;
2672
+ font-size: 16px;
2673
+ font-weight: 400;
2674
+ border-right:0;
2675
+ }
2676
+ .btn-merchandise {
2677
+ text-shadow: none;
2678
+ box-shadow: none;
2679
+ border: 1px solid #d4d4d4;
2680
+ background-image: none;
2681
+ height: 40px;
2682
+ width: 40px;
2683
+ border-radius: 0px;
2684
+ padding-left: 7px;
2685
+ padding-top:8px;
2686
+ border-left:0;
2687
+ }
2688
+
2689
+ .table-feed
2690
+ {
2691
+ border: 1px solid #d9dede;
2692
+ }
2693
+ .table-feed>thead>tr>th {
2694
+ height: 55px;
2695
+ font-size: 16px;
2696
+ background-color: #f3f6f6;
2697
+ border-bottom: 1px solid #d9dede;
2698
+ color: #4e5356;
2699
+ padding-bottom:17px;
2700
+ padding-left: 20px;
2701
+ font-weight: normal;
2702
+ }
2703
+ .table-feed>tbody>tr>td {
2704
+ border-bottom: 1px solid #d9dede !important;
2705
+ color: #4e5356;
2706
+ font-size: 15px;
2707
+ font-weight: 400;
2708
+ height: 55px !important;
2709
+ padding-left: 20px;
2710
+ padding-top:18px;
2711
+ }
2712
+ .table-feed>tbody>tr>td:first-child
2713
+ {
2714
+ text-align: center;
2715
+ padding-left:0px;
2716
+ }
2717
+ .cat-label
2718
+ {
2719
+ color: #3c3f40;
2720
+ font-weight: 400;
2721
+ border:1px solid #d9dede;
2722
+ border-radius: 3px;
2723
+ width:auto;
2724
+ padding: 3px 15px;
2725
+ margin-left:13px;
2726
+ margin-right:13px;
2727
+ }
2728
+ .edit-img
2729
+ {
2730
+ background: url("/magento/unbxd-imgs/edit.png") no-repeat;
2731
+ width:13px;
2732
+ height: 13px;
2733
+ float: left;
2734
+ margin-top:2px;
2735
+ margin-right: 5px;
2736
+ }
2737
+ .delete-img
2738
+ {
2739
+ background: url("/magento/unbxd-imgs/delete-red.png") no-repeat;
2740
+ width:11px;
2741
+ height: 15px;
2742
+ float: left;
2743
+ margin-top:2px;
2744
+ margin-right: 5px;
2745
+ }
2746
+ .arrow-right
2747
+ {
2748
+ margin-top:-3px;
2749
+ }
2750
+ .cat-rule-block
2751
+ {
2752
+ border: 1px solid #d9dede;
2753
+ background-color: #f3f6f6;
2754
+ padding: 45px 0px 30px 0px;
2755
+ text-align: center;
2756
+ }
2757
+ .cat-rule-head
2758
+ {
2759
+ color: #5c656a;
2760
+ font-size: 16px;
2761
+ font-weight: 400;
2762
+ }
2763
+ .success-color
2764
+ {
2765
+ color: #16b967 !important;
2766
+ }
2767
+ .fail-color
2768
+ {
2769
+ color: #fb5858 !important;
2770
+ }
2771
+ .width-470
2772
+ {
2773
+ width:470px !important;
2774
+ }
2775
+ .mar-top-15
2776
+ {
2777
+ margin-top:15px;
2778
+ }
2779
+ .button-gray-small {
2780
+ padding-top: 3px;
2781
+ background-color: #babfbf;
2782
+ -webkit-border-radius: 2px;
2783
+ -moz-border-radius: 2px;
2784
+ border-radius: 2px;
2785
+ height: 40px;
2786
+ text-decoration: none;
2787
+ vertical-align: middle;
2788
+ font-weight: bold;
2789
+ border-right: none;
2790
+ border-left: none;
2791
+ float: none;
2792
+ }
2793
+ .merchandise-dropdown
2794
+ {
2795
+ color: #4d4d4d;
2796
+ font-size:16px;
2797
+ font-weight:600;
2798
+ padding-left:12px;
2799
+ border:1px solid #ece7e7;
2800
+ background-color: #fff;
2801
+ }
2802
+ .merchandise-menu-dropdown > li > a {
2803
+ background-color: #fff;
2804
+ padding-top: 8px;
2805
+ text-align: left;
2806
+ border-left: 1px solid #ece7e7;
2807
+ border-right: 1px solid #ece7e7;
2808
+ height: 40px;
2809
+ font-size:16px;
2810
+ font-weight: 600;
2811
+ border-top:none;
2812
+ }
2813
+ .merchandise-menu-dropdown > li:first-child > a
2814
+ {
2815
+ border-top:1px solid #ece7e7;
2816
+ }
2817
+ .merchandise-menu-dropdown > li:last-child > a {
2818
+ border-bottom: 1px solid #ece7e7;
2819
+ border-bottom-left-radius: 3px;
2820
+ border-bottom-right-radius: 3px;
2821
+ }
2822
+ .merchandise-menu-dropdown > li > a:hover, .merchandise-menu-dropdown > li > a:focus {
2823
+ border-top:1px solid #ece7e7;
2824
+ border-bottom: 1px solid #ece7e7;
2825
+ background-color: #fff;
2826
+ }
2827
+
2828
+ .caret-merchandise {
2829
+
2830
+ border-top: 8px solid #b0b6b9;
2831
+ margin-top:8px;
2832
+ }
2833
+ .button-black-merchandise {
2834
+ width:170px;
2835
+ background: #282b2b url('../img/add-icon.png') no-repeat 89%;
2836
+ -webkit-border-radius: 3px;
2837
+ -moz-border-radius: 3px;
2838
+ border-radius: 3px;
2839
+ padding-top: 3px;
2840
+ color: #fff !important;
2841
+ font-size: 16px;
2842
+ font-weight:600;
2843
+ text-decoration: none;
2844
+ vertical-align: middle;
2845
+ border-right: none;
2846
+ border-left: none;
2847
+ text-align: center;
2848
+ float: none;
2849
+ height: 40px;
2850
+ display: table-cell;
2851
+ }
2852
+ .button-black-merchandise:hover {
2853
+
2854
+
2855
+ background: #393c3c url('../img/add-icon.png') no-repeat 89%;
2856
+ display: table-cell;
2857
+ height: 40px;
2858
+ }
2859
+ .button-black-merchandise:active {
2860
+
2861
+ background: #2c3030 url('../img/add-icon.png') no-repeat 89% 60%;
2862
+ border-bottom: none;
2863
+ height: 40px;
2864
+ padding-top: 5px;
2865
+ display: table-cell;
2866
+ }
2867
+ /* widget configuration mobile*/
2868
+ .blank-div-widget {
2869
+ width: 100%;
2870
+ float: left;
2871
+ height: 80px;
2872
+ }
2873
+ .widget-list-head {
2874
+ float: left;
2875
+ width: 100%;
2876
+ font-size: 12px;
2877
+ font-weight: bold;
2878
+ padding-left: 20px;
2879
+ margin-bottom: 24px;
2880
+ }
2881
+ ul.widget-conf {
2882
+
2883
+ margin: 0;
2884
+ padding: 0;
2885
+ list-style-type: none;
2886
+ margin: 0px;
2887
+ font-size: 13px;
2888
+ margin-top: 14px;
2889
+ }
2890
+ ul.widget-conf li {
2891
+
2892
+ font-size: 13px;
2893
+ }
2894
+ ul.widget-conf li a {
2895
+
2896
+ color: #1a1c1c;
2897
+ }
2898
+ ul.widget-conf li a.widget-conf-disabled {
2899
+ padding: 12px 0px 12px 20px;
2900
+ width: 100%;
2901
+ float: left;
2902
+ }
2903
+ ul.widget-conf li a.widget-conf-enabled {
2904
+ background-color: #fff;
2905
+ padding: 12px 0px 12px 20px;
2906
+ width: 180px;
2907
+ float: left;
2908
+ border-top: 1px solid #d1d5df;
2909
+ border-bottom: 1px solid #d1d5df;
2910
+ border-right: 1px solid #fff;
2911
+ }
2912
+ .tooltip-widget {
2913
+ padding: 15px;
2914
+ color: #4f5555;
2915
+ font-size: 13px;
2916
+ background-color: #f0f5f6;
2917
+ }
2918
+ .question-mark {
2919
+ background: url('../img/question-mark2.jpg') no-repeat;
2920
+ width: 21px !important;
2921
+ height: 21px;
2922
+ border: 1px solid transparent !important;
2923
+ background-color: transparent;
2924
+ -webkit-box-shadow: none !important;
2925
+ border-style: none;
2926
+ }
2927
+ .tooltip-left-arrow {
2928
+ background: url('../img/tooltip-left-arrow.jpg') no-repeat;
2929
+ width: 7px !important;
2930
+ height: 11px;
2931
+ border: 1px solid transparent !important;
2932
+ background-color: transparent;
2933
+ -webkit-box-shadow: none !important;
2934
+ border-style: none;
2935
+ }
2936
+ .widget-conf-cont {
2937
+ width: 880px !important;
2938
+ float: none;
2939
+ margin: 0px auto;
2940
+ margin-top: 70px;
2941
+ border: 1px solid #d9e0e0;
2942
+
2943
+ }
2944
+ .widget-row1 {
2945
+ background-color: #f3f6f6;
2946
+ padding: 30px 40px;
2947
+ }
2948
+ .widget-row2 {
2949
+
2950
+ padding: 20px 80px 20px 40px;
2951
+ }
2952
+ .widget-row1-head {
2953
+ font-size: 24px;
2954
+ }
2955
+ .widget-row1-text, .widget-row2-text {
2956
+ font-size: 14px;
2957
+ color: #4f5555;
2958
+ }
2959
+ .link-blue {
2960
+
2961
+ padding-top: 19px;
2962
+ float: right;
2963
+ color: #1496a6;
2964
+ width: 135px;
2965
+ }
2966
+ .link-blue:hover {
2967
+ color: #1496a6 !important;
2968
+ }
2969
+ .widget-arrow-new {
2970
+ background: url('../img/arrow.png') 50%;
2971
+ width: 5px;
2972
+ height: 9px;
2973
+ border: 0;
2974
+ cursor: pointer;
2975
+ background-repeat: no-repeat;
2976
+ margin-top: 6px;
2977
+ float: right;
2978
+ margin-left: 5px;
2979
+ }
2980
+ .widget-row2-head {
2981
+ font-size: 14px;
2982
+ font-weight: bold;
2983
+ }
2984
+ /* error 404 mobile*/
2985
+ .error-img
2986
+ {
2987
+ background: url('../img/oops.png') no-repeat;
2988
+ height:71px;
2989
+ width:250px !important;
2990
+ }
2991
+ .error-border-top
2992
+ {
2993
+ border-top:1px solid #d7d8dc;
2994
+ width:420px !important;
2995
+ margin-bottom: 10px;
2996
+ }
2997
+ .error-text
2998
+ {
2999
+ font-size: 18px;
3000
+ color: #afb2b9;
3001
+ margin-bottom: 30px;
3002
+ }
3003
+ .button-error
3004
+ {
3005
+ height: 45px;
3006
+ width:200px;
3007
+ font-size:16px;
3008
+ background-image: none;
3009
+ }
3010
+ .button-error:hover{
3011
+ background-image: none;
3012
+ }
3013
+ .button-error:active{
3014
+ background-image: none;
3015
+ }
3016
+ /* widget configuration mobile with tabs */
3017
+ .widget-row-button
3018
+ {
3019
+ padding:20px 0px 20px 0px;
3020
+ background-color: #f3f6f6;
3021
+ }
3022
+
3023
+ .button-red-normal
3024
+ {
3025
+
3026
+ background: #ac1d1c url('../img/arrow-white-top-button.png') no-repeat 93%;
3027
+ font-family: proxima-nova, Arial, sans-serif !important;
3028
+ font-weight: 600; font-size: 16px;font-style: normal;
3029
+ -webkit-border-radius: 5px;
3030
+ -moz-border-radius: 5px;
3031
+ border-radius: 5px;
3032
+ color: #ffffff;
3033
+ text-decoration: none;
3034
+ vertical-align: middle;
3035
+ border-right: none;
3036
+ border-left: none;
3037
+ text-align: center;
3038
+ float: none;
3039
+ height: 55px;
3040
+ padding: 18px 0px;
3041
+ }
3042
+ .button-red-normal:hover{
3043
+ background: #b32f2e url('../img/arrow-white-top-button.png') no-repeat 93%;
3044
+ }
3045
+ .button-red-normal:active{
3046
+ background: #a51c1b url('../img/arrow-white-top-button.png') no-repeat 93%;
3047
+ }
3048
+ .width-205-tab
3049
+ {
3050
+ width: 205px !important;
3051
+ margin:0px auto;
3052
+
3053
+ }
3054
+ pre{
3055
+ font-family: "Helvetica Neue", Helvetica, Arial, Sans-Serif !important;
3056
+ font-size:14px !important;
3057
+ border:none !important;
3058
+ margin-bottom:0px !important;
3059
+ }
3060
+ .template-row1
3061
+ {
3062
+ margin-bottom: 40px;
3063
+ font-size: 14px;
3064
+ color: #4f5555;
3065
+ }
3066
+ .template-row2, .install-row-4
3067
+ {
3068
+ font-size: 14px;
3069
+ }
3070
+ .install-row1, .install-row3
3071
+ {
3072
+ font-size: 14px;
3073
+ margin-bottom: 20px;
3074
+ }
3075
+ .install-row4
3076
+ {
3077
+ margin-bottom:20px;
3078
+ }
3079
+ .install-row2, .install-row5
3080
+ {
3081
+ font-size: 14px;
3082
+ margin-bottom: 20px;
3083
+ color: #4f5555;
3084
+ background-color: #f3f6f6;
3085
+ border-radius: 5px;
3086
+ border: 1px solid #e3e3e3;
3087
+ margin-bottom:20px;
3088
+ }
3089
+ .brd-btm-gray5
3090
+ {
3091
+ border-bottom: 1px solid #d9e0e0;
3092
+ }
3093
+ .widget-row2-template
3094
+ {
3095
+ padding: 60px 60px 80px 60px;
3096
+ }
3097
+ .widget-row2-install
3098
+ {
3099
+ padding: 60px;
3100
+ }
3101
+ .button-blue-tab {
3102
+
3103
+ border-top: 3px solid #4fc1cb;
3104
+ border-bottom: 3px solid #36a4b2;
3105
+ background: #45b5c1;
3106
+ font-size: 14px;
3107
+ border-radius: 2px;
3108
+ color: #ffffff;
3109
+ text-decoration: none;
3110
+ vertical-align: middle;
3111
+ border-right: none;
3112
+ border-left: none;
3113
+ text-align: center;
3114
+ float: none;
3115
+ padding-top:8px;
3116
+ height: 40px;
3117
+ }
3118
+ .button-blue-tab:hover {
3119
+ background-color: #54bbc6;
3120
+ border-top: 3px solid #68c3cc;
3121
+ border-bottom: 3px solid #50b1bc;
3122
+ }
3123
+ .button-blue-tab:active {
3124
+ background-color: #42adb9;
3125
+ border-top: 3px solid #359dab;
3126
+ }
3127
+ .widget-row1-wborder {
3128
+ background-color: #f3f6f6;
3129
+ padding: 30px 40px;
3130
+ border-bottom: 1px solid #dfe2e9;
3131
+ }
3132
+ .widget-row2-new {
3133
+
3134
+ padding: 20px 0px 0px 40px;
3135
+ text-align: center;
3136
+ }
3137
+ .widget-row-tabs
3138
+ {
3139
+ float:left;
3140
+ width:100%;
3141
+ border-bottom: 1px solid #dfe2e9;
3142
+ height:49px;
3143
+ background-color: #f3f6f6;
3144
+
3145
+ }
3146
+ ul.widget-conf-tabs {
3147
+ margin: 0;
3148
+ padding: 0;
3149
+ list-style-type: none;
3150
+
3151
+ }
3152
+ ul.widget-conf-tabs li {
3153
+
3154
+ font-size: 16px;
3155
+ font-weight: bold;
3156
+ display:inline;
3157
+ }
3158
+ ul.widget-conf-tabs li a {
3159
+
3160
+ color: #1a1c1c;
3161
+
3162
+ }
3163
+ ul.widget-conf-tabs li a.widget-conf-tabs-disabled {
3164
+ padding: 13px 0px;
3165
+ width: 250px;
3166
+ float: left;
3167
+ background-color: #f3f6f6;
3168
+ text-align: center;
3169
+ border-right: 1px solid #dfe2e9;
3170
+ }
3171
+ ul.widget-conf-tabs li a.widget-conf-tabs-enabled {
3172
+ background-color: #fff;
3173
+ padding: 8px 0px 14px 0px;
3174
+ width: 150px;
3175
+ float: left;
3176
+ border-top: 5px solid #000;
3177
+ border-top-right-radius: 3px;
3178
+ border-right: 1px solid #dfe2e9;
3179
+ border-bottom:1px solid #fff;
3180
+ text-align: center;
3181
+ }
3182
+ /* signed up mobile*/
3183
+ .signup-block
3184
+ {
3185
+ font-family: "Helvetica Neue", Helvetica, Arial, Sans-Serif !important;
3186
+
3187
+
3188
+ }
3189
+ .tick-signup
3190
+ {
3191
+ background: url('../img/DONE.png') no-repeat;
3192
+ height:33px;
3193
+ width:33px !important;
3194
+ margin-top:5px;
3195
+ }
3196
+ .signup-head
3197
+ {
3198
+ margin-bottom:10px;
3199
+ font-size: 30px;
3200
+ padding-left:10px;
3201
+ }
3202
+ .signup-subhead
3203
+ {
3204
+ font-size:24px;
3205
+ margin-bottom:20px;
3206
+ }
3207
+ .signup-text
3208
+ {
3209
+ font-size: 14px;
3210
+ margin-bottom: 35px;
3211
+ color: #4f5555;
3212
+ }
3213
+ .signup-text1
3214
+ {
3215
+ font-size: 16px;
3216
+ margin-bottom: 20px;
3217
+ color: #1a1c1c;
3218
+ }
3219
+ .signup-text2
3220
+ {
3221
+ font-size: 14px;
3222
+ margin-bottom: 30px;
3223
+ color: #666666;
3224
+ }
3225
+ .signup-row-tabs
3226
+ {
3227
+ margin-bottom: 30px;
3228
+ }
3229
+ ul.signup-inner-tabs {
3230
+ margin: 0;
3231
+ padding: 0;
3232
+ list-style-type: none;
3233
+
3234
+
3235
+ }
3236
+ ul.signup-inner-tabs li {
3237
+
3238
+ font-size: 14px;
3239
+ display:inline;
3240
+ }
3241
+ ul.signup-inner-tabs li a {
3242
+
3243
+ color: #1a1c1c;
3244
+
3245
+ }
3246
+ ul.signup-inner-tabs li a.signup-disabled {
3247
+ padding: 5px 0px 2px 15px;
3248
+ float: left;
3249
+ color: #7a7f7f !important;
3250
+ }
3251
+ ul.signup-inner-tabs li a.signup-enabled {
3252
+ padding: 5px 15px 2px 5px;
3253
+ color: #4d5252;
3254
+ width: 139px;
3255
+ float: left;
3256
+ border-right: 1px solid #745a7c;
3257
+ }
3258
+ .signup-tab-head
3259
+ {
3260
+ margin-top:30px;
3261
+ font-size:16px;
3262
+ margin-bottom:25px;
3263
+ }
3264
+
3265
+ .signup-tab-text
3266
+ {
3267
+ font-size:14px;
3268
+ color: #4d5252;
3269
+ margin-bottom:30px;
3270
+ }
3271
+ /* dashboard widget conf mobile*/
3272
+ #header1{width:2000px;border:1px solid black; height:30px;}
3273
+
3274
+ #right1{border:1px solid red;position:absolute;right:0;}
3275
+ .background-border-block-row
3276
+ {
3277
+ margin-bottom: 10px;
3278
+ }
3279
+
3280
+ .matrix-arrows, .horizontal-arrows
3281
+ {
3282
+
3283
+ width:72px !important;
3284
+ float:right;
3285
+ }
3286
+ .left-gray
3287
+ {
3288
+ background: url('../img/left-gray.png') no-repeat;
3289
+ height:16px;
3290
+ width:16px !important;
3291
+ float:left;
3292
+ margin-right:40px;
3293
+ }
3294
+ .right-black
3295
+ {
3296
+ background: url('../img/right-black.png') no-repeat;
3297
+ height:16px;
3298
+ width:16px !important;
3299
+ float:left;
3300
+ }
3301
+ .up-gray
3302
+ {
3303
+ background: url('../img/up-gray.png') no-repeat;
3304
+ height:16px;
3305
+ width:16px !important;
3306
+ float:left;
3307
+ }
3308
+ .down-black
3309
+ {
3310
+ background: url('../img/down-black.png') no-repeat;
3311
+ height:16px;
3312
+ width:16px !important;
3313
+ float:left;
3314
+ }
3315
+ .picker-blue-block
3316
+ {
3317
+ background: #45b5c1 url('../img/color-pic.png') no-repeat 50%;
3318
+ height:39px;
3319
+ margin-right:12px;
3320
+ width:40px !important;
3321
+ }
3322
+ .picker-gray-block
3323
+ {
3324
+ background: #848484 url('../img/color-pic.png') no-repeat 50%;
3325
+ height:39px;
3326
+ margin-right:12px;
3327
+ width:40px !important;
3328
+ }
3329
+ .picker-red-block
3330
+ {
3331
+ background: #e27171 url('../img/color-pic.png') no-repeat 50%;
3332
+ height:39px;
3333
+ margin-right:12px;
3334
+ width:40px !important;
3335
+ }
3336
+ .picker-green-block
3337
+ {
3338
+ background: #2eae7f url('../img/color-pic.png') no-repeat 50%;
3339
+ height:39px;
3340
+ margin-right:12px;
3341
+ width:40px !important;
3342
+ }
3343
+ .add-block
3344
+ {
3345
+ background: #b0b6b9 url('../img/add.png') no-repeat 50%;
3346
+ height:39px;
3347
+ width:40px !important;
3348
+ }
3349
+ .cross-block
3350
+ {
3351
+ background: url('../img/delete.png') no-repeat;
3352
+ width:20px;
3353
+ height:20px;
3354
+ }
3355
+ .font-normal
3356
+ {
3357
+ font-weight: normal !important;
3358
+ color: #4f5555 !important;
3359
+ }
3360
+ .check-background-block
3361
+ {
3362
+ padding-left:23px !important;
3363
+ }
3364
+ input.input-layout::-webkit-input-placeholder { color:#4f5555; font-size:14px;}
3365
+ .layout-block
3366
+ {
3367
+ font-family: "Helvetica Neue", Helvetica, Arial, Sans-Serif !important;
3368
+
3369
+ }
3370
+ .layout-head
3371
+ {
3372
+ font-size: 18px;
3373
+ color:#1a1c1c;
3374
+ margin-bottom: 20px;
3375
+ }
3376
+ .layout-cont
3377
+ {
3378
+ border:1px solid #d9e3e3
3379
+ }
3380
+ .layout-cont-head
3381
+ {
3382
+ background-color: #f3f6f6;
3383
+ font-size:18px;
3384
+ color: #1a1c1c;
3385
+ padding: 10px 0px 10px 15px;
3386
+ }
3387
+ .content-layout-block
3388
+ {
3389
+ padding: 20px 30px 10px 30px;
3390
+
3391
+ }
3392
+ .background-border-block
3393
+ {
3394
+ padding: 20px 0px 20px 30px;
3395
+ }
3396
+ .header-block
3397
+ {
3398
+ padding: 20px 30px 20px 30px;
3399
+ }
3400
+ .description-block
3401
+ {
3402
+ padding: 20px 30px 10px 30px;
3403
+
3404
+ }
3405
+ .description-strip
3406
+ {
3407
+ border:1px solid #cddcdc;
3408
+ padding: 8px 5px 8px 12px;
3409
+ background-color: #fafbfb;
3410
+ margin-bottom:5px;
3411
+ }
3412
+ .button-strip
3413
+ {
3414
+
3415
+ background-color:#2eae7f;
3416
+ color: #ffffff !important;
3417
+ font-size: 18px;
3418
+ text-decoration: none;
3419
+ vertical-align: middle;
3420
+ height: 50px;
3421
+ border-right: none;
3422
+ border-left: none;
3423
+ font-weight: medium;
3424
+ text-align: center;
3425
+ cursor: pointer;
3426
+ padding-top:12px;
3427
+ }
3428
+ .description-label
3429
+ {
3430
+ font-size: 14px;
3431
+ color: #4f5555;
3432
+ }
3433
+ .content-layout-block-row
3434
+ {
3435
+ margin-bottom: 10px;
3436
+ }
3437
+ .content-layout-block-row1
3438
+ {
3439
+ margin-bottom: 15px;
3440
+ }
3441
+ .description-block-row
3442
+ {
3443
+ margin-bottom: 20px;
3444
+ }
3445
+ .content-layout-label
3446
+ {
3447
+ padding-top: 8px;
3448
+ font-size: 14px;
3449
+ color: #4f5555;
3450
+ }
3451
+ .layout-dropdown
3452
+ {
3453
+ color: #4f5555;
3454
+ font-size:14px;
3455
+ padding-left:10px;
3456
+ }
3457
+ .layout-menu-dropdown > li > a {
3458
+ border-top: 1px solid #dde2e4;
3459
+ background-color: #fcfcfc;
3460
+ padding-top: 8px;
3461
+ text-align: left;
3462
+ width: 230px;
3463
+ border-left: 1px solid #dde2e4;
3464
+ border-right: 1px solid #dde2e4;
3465
+ height: 40px;
3466
+ font-size:14px;
3467
+ }
3468
+ .layout-menu-dropdown > li:last-child > a {
3469
+ border-bottom: 1px solid #dde2e4;
3470
+ border-bottom-left-radius: 3px;
3471
+ border-bottom-right-radius: 3px;
3472
+ }
3473
+ .caret-layout {
3474
+ float: right;
3475
+ margin-top: 8px;
3476
+ width: 6px;
3477
+ margin-right: 10px;
3478
+ border-top: 8px solid #b0b6b9;
3479
+ border-right: 5px solid transparent;
3480
+ border-bottom: 0 dotted;
3481
+ border-left: 5px solid transparent;
3482
+ cursor: pointer;
3483
+ }
3484
+ .description-dropdown
3485
+ {
3486
+ color: #4f5555;
3487
+ font-size:14px;
3488
+ padding-left:10px;
3489
+ height:auto;
3490
+ padding-top:0px;
3491
+ width:70px;
3492
+ border: none;
3493
+ background-color: transparent;
3494
+ }
3495
+ .description-menu-dropdown
3496
+ {
3497
+ margin-top:9px;
3498
+ }
3499
+ .description-menu-dropdown > li > a {
3500
+
3501
+ border-top: none;
3502
+ background-color: #fcfcfc;
3503
+ padding-top: 3px;
3504
+ text-align: left;
3505
+ width: 230px;
3506
+ border-left: 1px solid #dde2e4;
3507
+ border-right: 1px solid #dde2e4;
3508
+ height: auto;
3509
+ font-size:14px;
3510
+ }
3511
+ .description-menu-dropdown > li:last-child > a {
3512
+ border-bottom: 1px solid #dde2e4;
3513
+ border-bottom-left-radius: 3px;
3514
+ border-bottom-right-radius: 3px;
3515
+ }
3516
+ .width-70
3517
+ {
3518
+ width:70px !important;
3519
+ }
3520
+ .width-71
3521
+ {
3522
+ width:71px !important;
3523
+ }
3524
+ .widget-text
3525
+ {
3526
+ padding-top:8px;
3527
+ font-size: 14px;
3528
+ color: #4f5555;
3529
+ }
3530
+ .matrix-outer-block
3531
+ {
3532
+ margin-top: 240px;
3533
+ border: 1px solid #dae4e4;
3534
+ padding: 18px 0px 0px 0px;
3535
+ margin-left: 80px;
3536
+ border-radius: 5px;
3537
+ }
3538
+ .matrix-block
3539
+ {
3540
+ height: 526px;
3541
+ overflow: auto;
3542
+ white-space: nowrap;
3543
+ padding: 0px 20px 20px 20px;
3544
+
3545
+ }
3546
+ .horizontal-outer-block
3547
+ {
3548
+ margin-top:240px;
3549
+ margin-left: 80px;
3550
+ border: 1px solid #dae4e4;
3551
+ padding: 18px 20px 0px 20px;
3552
+ height: 283px;
3553
+ border-radius: 5px;
3554
+ }
3555
+ .horizontal-block
3556
+ {
3557
+ overflow: auto;
3558
+ overflow-y:hidden;
3559
+ white-space: nowrap;
3560
+ padding-bottom:15px;
3561
+
3562
+ }
3563
+ .horizontal-outer-block1
3564
+ {
3565
+ margin-top:240px;
3566
+ margin-left: 80px;
3567
+ border: 1px solid #dae4e4;
3568
+ padding: 18px 20px 0px 20px;
3569
+ border-radius: 5px;
3570
+ }
3571
+ .horizontal-block1
3572
+ {
3573
+ height: 526px;
3574
+ overflow: auto;
3575
+ white-space: nowrap;
3576
+ padding-bottom:15px;
3577
+
3578
+ }
3579
+ .vertical-block
3580
+ {
3581
+ margin-top:240px;
3582
+ margin-left: 80px;
3583
+ border: 1px solid #dae4e4;
3584
+ padding: 18px 20px 20px 20px;
3585
+ height:800px;
3586
+ overflow: auto;
3587
+ overflow-x:hidden;
3588
+ white-space: nowrap;
3589
+ border-radius: 5px;
3590
+ }
3591
+ .matrix-row-head
3592
+ {
3593
+ padding: 0px 35px 0px 35px;
3594
+ }
3595
+ .matrix-row-head, .horizontal-row-head, .vertical-row-head
3596
+ {
3597
+ margin-bottom: 10px;
3598
+
3599
+ }
3600
+ .matrix-main-head, .horizontal-main-head, .vertical-main-head
3601
+ {
3602
+ font-weight: bold;
3603
+ font-size: 14px;
3604
+ }
3605
+ .matrix-sub-head, .horizontal-sub-head, .vertical-sub-head
3606
+ {
3607
+ font-size: 10px;
3608
+ color: #949494;
3609
+ margin-top:2px;
3610
+ }
3611
+
3612
+
3613
+ .matrix-row-content , .vertical-row-content
3614
+ {
3615
+ margin-bottom:20px;
3616
+ }
3617
+
3618
+ .matrix-row-block, .horizontal-row-block
3619
+ {
3620
+ width:135px !important;
3621
+ height: auto;
3622
+ margin-right: 20px;
3623
+ display: inline-block;
3624
+
3625
+ }
3626
+ .vertical-row-block
3627
+ {
3628
+ width:135px !important;
3629
+ height: auto;
3630
+ margin-right: 20px;
3631
+ display: block;
3632
+
3633
+ }
3634
+ .matrix-row-image, .horizontal-row-image, .vertical-row-image
3635
+ {
3636
+ width:135px !important;
3637
+ height:135px;
3638
+ background-color: #ecf0f0;
3639
+ float: left;
3640
+ margin-bottom: 10px;
3641
+ }
3642
+ .matrix-text, .horizontal-text, .vertical-text
3643
+ {
3644
+ width:135px;
3645
+ float:left;
3646
+ color: #989898;
3647
+ font-size: 12px;
3648
+ margin-bottom:7px;
3649
+ }
3650
+ .matrix-price, .horizontal-price, .vertical-price
3651
+ {
3652
+ width:135px;
3653
+ float:left;
3654
+ font-size: 12px;
3655
+ font-weight: bold;
3656
+ border-top:1px solid #ebebeb;
3657
+ border-bottom: 1px solid #ebebeb;
3658
+ padding-top:4px;
3659
+ padding-bottom: 4px;
3660
+ }
3661
+ /* popup filter mobile */
3662
+ .buttons-row {
3663
+ padding: 25px;
3664
+ background-color: #f9f9f9;
3665
+ }
3666
+ .cancel-link {
3667
+ font-weight: bold;
3668
+ font-size: 13px;
3669
+ border-bottom: 1px solid #000;
3670
+ width: 94px !important;
3671
+ margin-top: 10px;
3672
+ margin-right: 30px;
3673
+ }
3674
+ .remove-txt {
3675
+ margin-top: 15px;
3676
+ font-size: 12px;
3677
+ font-weight: bold;
3678
+ }
3679
+ .filter-head {
3680
+ font-weight: bold;
3681
+ font-size: 25px;
3682
+ padding: 15px 0px 14px 40px;
3683
+ }
3684
+ .chosen-container {
3685
+ font-family: "Helvetica Neue", Helvetica, Arial, Sans-Serif !important;
3686
+ position: relative;
3687
+ display: inline-block;
3688
+ vertical-align: middle;
3689
+ font-size: 16px;
3690
+ zoom: 1;
3691
+ *display: inline;
3692
+ -webkit-user-select: none;
3693
+ -moz-user-select: none;
3694
+ user-select: none;
3695
+ font-weight: medium;
3696
+ color: #1a1c1c;
3697
+ border-top: 1px solid #cecece;
3698
+ border-top-left-radius: 5px;
3699
+ border-top-right-radius: 5px;
3700
+ min-height: 40px !important;
3701
+ width: 360px !important;
3702
+ }
3703
+ .chosen-container .chosen-drop {
3704
+ position: absolute;
3705
+ top: 100%;
3706
+ left: -9999px;
3707
+ z-index: 1010;
3708
+ -webkit-box-sizing: border-box;
3709
+ -moz-box-sizing: border-box;
3710
+ box-sizing: border-box;
3711
+ width: 100%;
3712
+ border: 1px solid #ece7e7;
3713
+ border-top: 0;
3714
+ background: #fdfdfd;
3715
+ box-shadow: none;
3716
+ }
3717
+ .chosen-container.chosen-with-drop .chosen-drop {
3718
+ left: 0;
3719
+ }
3720
+ .chosen-container a {
3721
+ cursor: pointer;
3722
+ height: 40px !important;
3723
+ }
3724
+ .chosen-container-single .chosen-single {
3725
+ position: relative;
3726
+ display: block;
3727
+ overflow: hidden;
3728
+ padding: 8px 0 8px 15px;
3729
+ border: 1px solid #ece7e7;
3730
+ border-radius: 5px;
3731
+ background: none;
3732
+ box-shadow: none;
3733
+ background-color: #fdfdfd;
3734
+ background-clip: padding-box;
3735
+ color: #1a1c1c;
3736
+ text-decoration: none;
3737
+ white-space: nowrap;
3738
+ vertical-align: middle !important;
3739
+ }
3740
+ .chosen-container-single .chosen-default {
3741
+ color: #1a1c1c;
3742
+ }
3743
+ .chosen-container-single .chosen-single abbr:hover {
3744
+ background-position: -42px -10px;
3745
+ }
3746
+ .chosen-container-single.chosen-disabled .chosen-single abbr:hover {
3747
+ background-position: -42px -10px;
3748
+ }
3749
+ .chosen-container-single .chosen-single div {
3750
+ position: absolute;
3751
+ top: 0;
3752
+ right: 0;
3753
+ display: block;
3754
+ width: 40px;
3755
+ height: 100%;
3756
+ }
3757
+ .chosen-container-single .chosen-single div b {
3758
+ display: block;
3759
+ width: 100%;
3760
+ height: 100%;
3761
+ /*background: url('../img/chosen-sprite.png') no-repeat 15px 15px; */
3762
+ background-color: #efefef;
3763
+ background: #efefef url('../img/down-arrow.png') no-repeat 50%;
3764
+ }
3765
+ .chosen-container-single .chosen-search {
3766
+ position: relative;
3767
+ z-index: 1010;
3768
+ margin: 0;
3769
+ white-space: nowrap;
3770
+ font-size: 16px;
3771
+ padding-left: 10px;
3772
+ height: 40px !important;
3773
+ vertical-align: middle;
3774
+ display: table-cell;
3775
+ border-bottom: 1px solid #ece7e7;
3776
+ width: 360px;
3777
+ }
3778
+ .chosen-container-single .chosen-search input[type="text"] {
3779
+ -webkit-box-sizing: border-box;
3780
+ -moz-box-sizing: border-box;
3781
+ box-sizing: border-box;
3782
+ margin: 1px 0;
3783
+ padding: 4px 20px 4px 5px;
3784
+ width: 100%;
3785
+ height: auto;
3786
+ outline: 0;
3787
+ border: none;
3788
+ font-size: 16px;
3789
+ font-family: Helvetica !important;
3790
+ border-radius: 0;
3791
+ background: none;
3792
+ box-shadow: none;
3793
+ background: #fdfdfd;
3794
+ }
3795
+ .chosen-container-single .chosen-drop {
3796
+ margin-top: -1px;
3797
+ border-radius: 0 0 4px 4px;
3798
+ background-clip: padding-box;
3799
+ border-top: 1px solid #ece7e7;
3800
+ }
3801
+ .chosen-container-single.chosen-container-single-nosearch .chosen-search {
3802
+ position: absolute;
3803
+ left: -9999px;
3804
+ }
3805
+
3806
+ .chosen-container .chosen-results {
3807
+ position: relative;
3808
+ overflow-x: hidden;
3809
+ overflow-y: auto;
3810
+ margin: 0;
3811
+ padding: 0;
3812
+ max-height: 240px;
3813
+ -webkit-overflow-scrolling: touch;
3814
+ }
3815
+ .chosen-container .chosen-results li {
3816
+ display: none;
3817
+ margin: 0;
3818
+ padding: 11px 0px 11px 15px;
3819
+ list-style: none;
3820
+ vertcal-align: middle;
3821
+ border-top: 1px solid #ece7e7;
3822
+ }
3823
+ .chosen-container .chosen-results li:first-child {
3824
+ display: none;
3825
+ margin: 0;
3826
+ padding: 11px 0px 11px 15px;
3827
+ list-style: none;
3828
+ vertcal-align: middle;
3829
+ border-top: none;
3830
+ }
3831
+ .chosen-container .chosen-results li.active-result {
3832
+ display: list-item;
3833
+ cursor: pointer;
3834
+ }
3835
+ .chosen-container .chosen-results li.disabled-result {
3836
+ display: list-item;
3837
+ color: #ccc;
3838
+ cursor: default;
3839
+ }
3840
+ .chosen-container .chosen-results li.highlighted {
3841
+ background-color: #fff;
3842
+ color: #1a1c1c;
3843
+ background-image: none;
3844
+ }
3845
+ .chosen-container .chosen-results li.no-results {
3846
+ display: list-item;
3847
+ background: #f4f4f4;
3848
+ }
3849
+ .chosen-container .chosen-results li.group-result {
3850
+ display: list-item;
3851
+ font-weight: medium;
3852
+ cursor: default;
3853
+ }
3854
+ .chosen-container .chosen-results li.group-option {
3855
+ padding-left: 15px;
3856
+ }
3857
+ .chosen-container .chosen-results li em {
3858
+ font-style: normal;
3859
+ text-decoration: underline;
3860
+ }
3861
+
3862
+ .chosen-container-multi .chosen-choices {
3863
+ position: relative;
3864
+ overflow: hidden;
3865
+ -webkit-box-sizing: border-box;
3866
+ -moz-box-sizing: border-box;
3867
+ box-sizing: border-box;
3868
+ margin: 0;
3869
+ padding: 0;
3870
+ width: 100%;
3871
+ max-height: auto !important;
3872
+ height: 1%;
3873
+ border: 1px solid #ece7e7;
3874
+ background-color: #fdfdfd;
3875
+ background-image: none;
3876
+ border-radius: 5px;
3877
+ cursor: text;
3878
+ }
3879
+ .chosen-container-multi .chosen-choices li {
3880
+ float: left;
3881
+ list-style: none;
3882
+ }
3883
+ .chosen-container-multi .chosen-choices li.search-field {
3884
+ margin: 0;
3885
+ padding: 0;
3886
+ white-space: nowrap;
3887
+ }
3888
+ .chosen-container-multi .chosen-choices li.search-field input[type="text"] {
3889
+ margin: 1px 0;
3890
+ padding: 5px;
3891
+ height: 40px;
3892
+ outline: 0;
3893
+ border: 0 !important;
3894
+ background: transparent !important;
3895
+ box-shadow: none;
3896
+ color: #666;
3897
+ font-size: 16px;
3898
+ font-family: Helvetica !important;
3899
+ line-height: normal;
3900
+ border-radius: 0;
3901
+ }
3902
+ .chosen-container-multi .chosen-choices li.search-field .default {
3903
+ color: #999;
3904
+ }
3905
+ .chosen-container-multi .chosen-choices li.search-choice {
3906
+ position: relative;
3907
+ margin: 8px 0 3px 5px;
3908
+ padding: 7px 25px 5px 15px;
3909
+ border: none;
3910
+ border-radius: 3px;
3911
+ color: #8e8e8e;
3912
+ line-height: 13px;
3913
+ cursor: default;
3914
+ background: #eeeff0 url('../img/x.png') no-repeat 90%;
3915
+ font-size: 12px;
3916
+ }
3917
+ .chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
3918
+ position: absolute;
3919
+ top: 4px;
3920
+ right: 3px;
3921
+ display: block;
3922
+ width: 12px;
3923
+ height: 12px;
3924
+ background: url('img/chosen-sprite.png') -42px 1px no-repeat;
3925
+ font-size: 16px;
3926
+ }
3927
+ .chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
3928
+ background-position: -42px -10px;
3929
+ }
3930
+ .chosen-container-multi .chosen-choices li.search-choice-disabled {
3931
+ padding-right: 5px;
3932
+ border: 1px solid #ece7e7;
3933
+ background-color: #fdfdfd;
3934
+ color: #1a1c1c;
3935
+ background-image: none;
3936
+ }
3937
+ .chosen-container-multi .chosen-choices li.search-choice-focus {
3938
+ background: #d4d4d4;
3939
+ }
3940
+ .chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
3941
+ background-position: -42px -10px;
3942
+ }
3943
+ .chosen-container-multi .chosen-results {
3944
+ margin: 0;
3945
+ padding: 0;
3946
+ }
3947
+ .chosen-container-multi .chosen-drop .result-selected {
3948
+ display: list-item;
3949
+ color: #ccc;
3950
+ cursor: default;
3951
+ }
3952
+ .chosen-container-active .chosen-single {
3953
+ border: 1px solid #ece7e7;
3954
+ }
3955
+ .chosen-container-active.chosen-with-drop .chosen-single {
3956
+ border: 1px solid #ece7e7;
3957
+ -moz-border-radius-bottomright: 0;
3958
+ border-bottom-right-radius: 0;
3959
+ -moz-border-radius-bottomleft: 0;
3960
+ border-bottom-left-radius: 0;
3961
+ background-image: none;
3962
+ box-shadow: none;
3963
+ }
3964
+ .chosen-container-active.chosen-with-drop .chosen-single div {
3965
+ border-left: none;
3966
+ background: transparent;
3967
+ }
3968
+ .chosen-container-active.chosen-with-drop .chosen-single div b {
3969
+ background-position: -18px 2px;
3970
+ background: #efefef url('../img/down-arrow.png') no-repeat 50%;
3971
+ }
3972
+ .chosen-container-active .chosen-choices {
3973
+ box-shadow: none;
3974
+ border: 1px solid #e4dddd;
3975
+ }
3976
+
3977
+ .chosen-container-active .chosen-choices li.search-field input[type="text"] {
3978
+
3979
+ }
3980
+ .chosen-disabled {
3981
+ cursor: default;
3982
+ }
3983
+ .chosen-disabled .chosen-single {
3984
+ cursor: default;
3985
+ }
3986
+ .chosen-disabled .chosen-choices .search-choice .search-choice-close {
3987
+ cursor: default;
3988
+ }
3989
+ .chosen-rtl {
3990
+ text-align: right;
3991
+ }
3992
+ .chosen-rtl .chosen-single {
3993
+ overflow: visible;
3994
+ padding: 0 8px 0 0;
3995
+ }
3996
+ .chosen-rtl .chosen-single span {
3997
+ margin-right: 0;
3998
+ margin-left: 26px;
3999
+ direction: rtl;
4000
+ }
4001
+ .chosen-rtl .chosen-single-with-deselect span {
4002
+ margin-left: 38px;
4003
+ }
4004
+ .chosen-rtl .chosen-single div {
4005
+ right: auto;
4006
+ left: 3px;
4007
+ }
4008
+ .chosen-rtl .chosen-single abbr {
4009
+ right: auto;
4010
+ left: 26px;
4011
+ }
4012
+ .chosen-rtl .chosen-choices li {
4013
+ float: right;
4014
+ }
4015
+ .chosen-rtl .chosen-choices li.search-field input[type="text"] {
4016
+ direction: rtl;
4017
+ }
4018
+ .chosen-rtl .chosen-choices li.search-choice {
4019
+ margin: 3px 5px 3px 0;
4020
+ padding: 3px 5px 3px 19px;
4021
+ }
4022
+ .chosen-rtl .chosen-choices li.search-choice .search-choice-close {
4023
+ right: auto;
4024
+ left: 4px;
4025
+ }
4026
+ .chosen-rtl.chosen-container-single-nosearch .chosen-search, .chosen-rtl .chosen-drop {
4027
+ left: 9999px;
4028
+ }
4029
+ .chosen-rtl.chosen-container-single .chosen-results {
4030
+ margin: 0 0 4px 4px;
4031
+ padding: 0 4px 0 0;
4032
+ }
4033
+ .chosen-rtl .chosen-results li.group-option {
4034
+ padding-right: 15px;
4035
+ padding-left: 0;
4036
+ }
4037
+ .chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
4038
+ border-right: none;
4039
+ }
4040
+ .chosen-rtl .chosen-search input[type="text"] {
4041
+ padding: 4px 5px 4px 20px;
4042
+ background: white url('img/chosen-sprite.png') no-repeat -30px -20px;
4043
+ background: url('img/chosen-sprite.png') no-repeat -30px -20px;
4044
+ background: url('img/chosen-sprite.png') no-repeat -30px -20px;
4045
+ background: url('img/chosen-sprite.png') no-repeat -30px -20px;
4046
+ background: url('img/chosen-sprite.png') no-repeat -30px -20px;
4047
+ background: url('img/chosen-sprite.png') no-repeat -30px -20px;
4048
+ direction: rtl;
4049
+ }
4050
+ .fliter-row-cont {
4051
+ width: 780px !important;
4052
+ margin: 20px auto;
4053
+ float: none;
4054
+ }
4055
+ .buttons-row-inner {
4056
+ width: 300px !important;
4057
+ margin: 0px auto;
4058
+ float: none;
4059
+ }
4060
+ /* account profile1 mobile*/
4061
+ .top-button-row {
4062
+ position: absolute;
4063
+ left: 120px;
4064
+ right: 0;
4065
+ border-bottom: 1px solid #d4dddd;
4066
+ top: 62px;
4067
+ }
4068
+ .middle-nav-account {
4069
+ border-right: 1px solid #dfe2e9;
4070
+ }
4071
+ ul.block-account {
4072
+ display: block;
4073
+ float: left;
4074
+ list-style-type: none;
4075
+ padding: 0;
4076
+ margin: 0;
4077
+ }
4078
+ ul.block-account li {
4079
+ display: block;
4080
+ float: left;
4081
+ }
4082
+ ul.block-account li a {
4083
+ display: block;
4084
+ float: left;
4085
+ color: #1a1c1c;
4086
+ padding-left: 20px;
4087
+ padding-top: 60px;
4088
+ text-decoration: underline !important;
4089
+ font-size: 12px;
4090
+ font-weight: bold;
4091
+ }
4092
+
4093
+ ul.block-account li ul.account-list {
4094
+ display: block;
4095
+ float: left;
4096
+ list-style-type: none;
4097
+ margin: 20px 0px 10px 0px;
4098
+ padding: 0;
4099
+ color: #1a1c1c;
4100
+ float: left;
4101
+ }
4102
+ ul.block-account li ul.account-list li a {
4103
+ display: block;
4104
+ float: left;
4105
+ color: #1a1c1c;
4106
+ padding: 9px 0px 9px 20px;
4107
+ width: 180px;
4108
+ float: left;
4109
+ font-size: 13px;
4110
+ font-weight: normal;
4111
+ text-decoration: none !important;
4112
+ }
4113
+ ul.block-account li ul.account-list li a.account-list-active {
4114
+ border-top: 1px solid #dfe2e9;
4115
+ border-bottom: 1px solid #dfe2e9;
4116
+ border-right: 1px solid #fff;
4117
+ width: 180px;
4118
+ background: url('../img/black-right-small.jpg') no-repeat 95%;
4119
+ }
4120
+ .account-head {
4121
+ font-size: 24px;
4122
+ font-weight: bold;
4123
+ }
4124
+ .contact-head {
4125
+ font-size: 18px;
4126
+ font-weight: bold;
4127
+ padding-bottom: 30px;
4128
+ }
4129
+ .plan-block {
4130
+ border: 1px solid #1a1a1c;
4131
+ border-radius: 3px;
4132
+ padding: 30px 40px;
4133
+ background-color: #f7f7f7;
4134
+ }
4135
+ .plan-head {
4136
+ font-size: 18px;
4137
+ font-weight: bold;
4138
+ margin-bottom: 20px;
4139
+ }
4140
+ .plan-sub-head {
4141
+ font-size: 18px;
4142
+ margin-bottom: 10px;
4143
+ }
4144
+ .plan-text {
4145
+ font-size: 14px;
4146
+ }
4147
+ .password-text {
4148
+ margin-bottom: 15px;
4149
+ font-size: 15px;
4150
+ }
4151
+ .table-billing, .table-payments {
4152
+ margin-top: 30px;
4153
+ margin-bottom: 0px;
4154
+ }
4155
+ .table-billing tbody > tr, .table-payments tbody > tr {
4156
+
4157
+ height: 40px;
4158
+ }
4159
+ .table-billing tbody > tr:nth-child(even), .table-payments tbody > tr:nth-child(even) {
4160
+ background-color: #f3f6f6;
4161
+ }
4162
+ .table-billing tbody > tr > th, .table-payments tbody > tr > th {
4163
+ font-size: 12px;
4164
+ border-top: none !important;
4165
+ border-bottom: 1px solid #fff !important;
4166
+ background-color: #fff;
4167
+ font-weight: bold;
4168
+ padding-bottom: 0px;
4169
+ }
4170
+ .table-billing tbody > tr > td, .table-payments tbody > tr > td {
4171
+ font-size: 14px;
4172
+ color: #4f5555;
4173
+ border: none !important;
4174
+ }
4175
+ .table-billing tbody > tr > td:first-child, .table-payments tbody > tr > td:first-child {
4176
+ color: #d9d9d9;
4177
+ padding-left: 20px;
4178
+ }
4179
+
4180
+ .table-payments tbody > tr > th:first-child {
4181
+ width: 50px !important;
4182
+ }
4183
+ .table-payments tbody > tr > th:nth-child(2) {
4184
+ width: 190px !important;
4185
+ }
4186
+ .table-payments tbody > tr > th:nth-child(3) {
4187
+ width: 190px !important;
4188
+ }
4189
+ .table-payments tbody > tr > th:last-child {
4190
+ width: 140px !important;
4191
+ }
4192
+
4193
+ /*magento dashboard*/
4194
+ .mar-top-8
4195
+ {
4196
+ margin-top:8px;
4197
+ }
4198
+ .inner-container-magento
4199
+ {
4200
+ position: absolute;left:240px;right:0;padding:0px;
4201
+ background-color:#f3f6f6;font-family: proxima-nova, Arial, sans-serif !important;
4202
+ top:140px;
4203
+
4204
+ }
4205
+ .button-black-magento
4206
+ {
4207
+ border: 1px solid #000;
4208
+ height:40px;
4209
+ border-radius:3px;
4210
+ background: #3b3e40 url('../img/btn-arrow.png') no-repeat 94%;
4211
+ text-align: center;
4212
+ color: #fdfdfd !important;
4213
+ font-size:16px;
4214
+ font-weight:600;
4215
+ padding-top:9px;
4216
+ }
4217
+ .button-black-magento:hover
4218
+ {
4219
+ background: #292d30 url('../img/btn-arrow.png') no-repeat 94%;
4220
+ -moz-box-shadow:inset 0px 1px 1px 0px #6d6d6d;
4221
+ -webkit-box-shadow:inset 0px 1px 1px 0px #6d6d6d;
4222
+ box-shadow:inset 0px 1px 1px 0px #6d6d6d;
4223
+
4224
+ }
4225
+ .button-black-magento:active
4226
+ {
4227
+ padding-top:10px;
4228
+ background: #292d30 url('../img/btn-arrow.png') no-repeat 94% 55%;
4229
+ -moz-box-shadow:inset 0px 1px 1px 0px #6d6d6d;
4230
+ -webkit-box-shadow:inset 0px 1px 1px 0px #6d6d6d;
4231
+ box-shadow:inset 0px 1px 1px 0px #6d6d6d;
4232
+
4233
+ }
4234
+ .button-black-magento1
4235
+ {
4236
+ border: 1px solid #000;
4237
+ height:40px;
4238
+ border-radius:3px;
4239
+ background: #3b3e40 url('../img/btn-arrow-top.png') no-repeat 97%;
4240
+ text-align: center;
4241
+ color: #fdfdfd !important;
4242
+ font-size:16px;
4243
+ font-weight:600;
4244
+ padding-top:9px;
4245
+ }
4246
+ .button-black-magento1:hover
4247
+ {
4248
+ background: #292d30 url('../img/btn-arrow-top.png') no-repeat 97%;
4249
+ -moz-box-shadow:inset 0px 1px 1px 0px #6d6d6d;
4250
+ -webkit-box-shadow:inset 0px 1px 1px 0px #6d6d6d;
4251
+ box-shadow:inset 0px 1px 1px 0px #6d6d6d;
4252
+
4253
+ }
4254
+ .button-black-magento1:active
4255
+ {
4256
+ padding-top:10px;
4257
+ background: #292d30 url('../img/btn-arrow-top.png') no-repeat 97% 55%;
4258
+ -moz-box-shadow:inset 0px 1px 1px 0px #6d6d6d;
4259
+ -webkit-box-shadow:inset 0px 1px 1px 0px #6d6d6d;
4260
+ box-shadow:inset 0px 1px 1px 0px #6d6d6d;
4261
+
4262
+ }
4263
+ .magento-block
4264
+ {
4265
+ padding:50px;
4266
+ }
4267
+
4268
+ .brd-btm-none
4269
+ {
4270
+ border-bottom:0px;
4271
+ }
4272
+ .magento-inner-block
4273
+ {
4274
+ border: 1px solid #cddbde;
4275
+ padding:40px 50px 30px 50px;
4276
+ background-color: #fff;
4277
+ }
4278
+ .magento-head
4279
+ {
4280
+ color:#4e5356;
4281
+ font-size:30px;
4282
+ font-weight:400;
4283
+ }
4284
+ .magento-subhead
4285
+ {
4286
+ color:#596670;
4287
+ font-size:24px;
4288
+ font-weight:400;
4289
+ }
4290
+ .font-16
4291
+ {
4292
+ font-size:16px !important;
4293
+ }
4294
+ .font-24
4295
+ {
4296
+ font-size:24px !important;
4297
+ }
4298
+ .magento-text
4299
+ {
4300
+ color:#929494;
4301
+ font-size:18px;
4302
+ font-weight:400;
4303
+ }
4304
+ .text1
4305
+ {
4306
+ color:#4e5356;
4307
+
4308
+ }
4309
+ .text2
4310
+ {
4311
+ color: #929ca1;
4312
+ }
4313
+ .table-magento
4314
+ {
4315
+ border: 1px solid #dee2e4;
4316
+ border-collapse:separate;
4317
+ border-radius: 5px;
4318
+
4319
+ }
4320
+ .table-magento>thead>tr>th {
4321
+ font-size: 18px;
4322
+ background-color: #3c3f40;
4323
+ border-right: 1px solid #fff;
4324
+ color: #fff;
4325
+ font-weight: 400;
4326
+ border-bottom:none;
4327
+ padding: 15px 0px 8px 20px;
4328
+
4329
+ }
4330
+
4331
+ .table-magento>tbody>tr>td {
4332
+
4333
+ border-right: 1px solid #dee2e4 !important;
4334
+ color: #5c656a;
4335
+ font-size: 16px;
4336
+ font-weight: 400;
4337
+ height: 50px !important;
4338
+ padding: 15px 0px 15px 23px;
4339
+ vertical-align: middle;
4340
+ }
4341
+ .table-magento.table-magento1>tbody>tr>td {
4342
+
4343
+ border-right: 1px solid #dee2e4 !important;
4344
+ color: #5c656a;
4345
+ font-size: 16px;
4346
+ font-weight: 400;
4347
+ height: 50px !important;
4348
+ padding: 15px 100px 15px 23px;
4349
+ vertical-align: middle;
4350
+ }
4351
+ .table-magento.table-magento1>tbody>tr>td:last-child
4352
+ {
4353
+ height: 50px !important;
4354
+ padding: 0px 12px 0px 10px !important;
4355
+ }
4356
+ .table-magento>thead>tr>th:first-child
4357
+ {
4358
+ border-radius:5px 0px 0px 0px;
4359
+ }
4360
+ .table-magento>thead>tr>th:last-child
4361
+ {
4362
+ border-radius:0px 5px 0px 0px;
4363
+ border-right:none;
4364
+ }
4365
+ .table-magento>tbody>tr:last-child td:first-child
4366
+ {
4367
+ border-radius: 0px 0px 0px 5px;
4368
+ }
4369
+ .table-magento>tbody>tr:last-child td:last-child
4370
+ {
4371
+ border-radius: 0px 0px 5px 0px;
4372
+
4373
+ }
4374
+ .table-magento>tbody>tr td:last-child
4375
+ {
4376
+ border-right:none !important;
4377
+ }
4378
+ .table-event-track
4379
+ {
4380
+ border: 1px solid #dee2e4;
4381
+ border-collapse:separate;
4382
+ border-radius: 5px;
4383
+ background-color: #fff;
4384
+
4385
+ }
4386
+ .table-event-track>tbody>tr>td {
4387
+
4388
+ border-right: 1px solid #dee2e4 !important;
4389
+ color: #5c656a;
4390
+ font-size: 14px;
4391
+ font-weight: 600;
4392
+ height: 44px !important;
4393
+ padding-left: 23px;
4394
+ vertical-align: middle;
4395
+ }
4396
+ .table-event-track>tbody>tr:first-child td
4397
+ {
4398
+ border-top:none;
4399
+ }
4400
+ .table-event-track>tbody>tr td:last-child
4401
+ {
4402
+ border-right:none !important;
4403
+ padding-left:55px;
4404
+
4405
+ }
4406
+ .mar-btm-7
4407
+ {
4408
+ margin-bottom:7px;
4409
+ }
4410
+ .pad-rgt-140
4411
+ {
4412
+ padding-right: 140px !important;
4413
+ }
4414
+ .pad-rgt-200
4415
+ {
4416
+ padding-right: 200px !important;
4417
+ }
4418
+ .pad-rgt-400
4419
+ {
4420
+ padding-right: 400px !important;
4421
+ }
4422
+ .pad-rgt-430
4423
+ {
4424
+ padding-right: 430px !important;
4425
+ }
4426
+ .color-blue
4427
+ {
4428
+ color: #45b5c1;
4429
+ }
4430
+ .script-block
4431
+ {
4432
+ border: 1px solid #d4dede;
4433
+ border-radius: 4px;
4434
+ padding: 25px 0px 25px 25px;;
4435
+ font-family: Menlo,Monaco,"Andale Mono","Courier New",monospace;
4436
+ font-size: 14px;
4437
+ width:100%;
4438
+ float:left;
4439
+ background-color: #fff !important;
4440
+ width:800px;
4441
+ }
4442
+ .prettyprint-dashboard
4443
+ {
4444
+ padding:0px !important;
4445
+ margin:0px !important;
4446
+ background:#fff;
4447
+ font-family: Menlo,Monaco,"Andale Mono","Courier New",monospace !important;
4448
+ color: #5c656a;
4449
+ }
4450
+ pre .tag
4451
+ {
4452
+ color: #888 !important;
4453
+ }
4454
+ pre .pun
4455
+ {
4456
+ color: #ed3743 !important;
4457
+ }
4458
+ pre .atn
4459
+ {
4460
+ color: #000 !important;
4461
+ }
4462
+ pre .blue
4463
+ {
4464
+ color: #20c9c9 !important;
4465
+ }
4466
+ pre .green
4467
+ {
4468
+ color: #22bf52 !important;
4469
+ }
4470
+ pre .red
4471
+ {
4472
+ color: #d75f70 !important;
4473
+ }
4474
+ .magento-landing-block
4475
+ {
4476
+ background-color: #676f73;
4477
+ padding: 20px 0px 20px 50px;
4478
+ font-size: 14px;
4479
+ }
4480
+ .magento-label
4481
+ {
4482
+ color: #fff;
4483
+ font-weight:600;
4484
+ font-size: 18px;
4485
+ }
4486
+ .magento-input
4487
+ {
4488
+ width: 340px !important;
4489
+ height: 40px;
4490
+ border-radius: 3px;
4491
+ background-color: #fcfcfc;
4492
+ padding-left: 14px;
4493
+ font-size: 16px;
4494
+ color: #1a1c1c;
4495
+ border:1px solid #cbcbcb;
4496
+
4497
+ }
4498
+ .middle-nav-magento-dropdown {
4499
+
4500
+ position:absolute; left:0px; width:240px;
4501
+ font-family: proxima-nova, Arial, sans-serif !important;
4502
+ top:160px;
4503
+ }
4504
+ .middle-nav-text
4505
+ {
4506
+ padding-left:5px;
4507
+ color: #3c3f40;
4508
+ font-size: 16px;
4509
+ font-weight:400;
4510
+ }
4511
+ .middle-nav-dropdown
4512
+ {
4513
+ padding-left: 3px;
4514
+ }
4515
+ .middle-nav-magento {
4516
+ background-color: #3c3f40;
4517
+ position:absolute; left:0px; width:240px;height:920px;
4518
+ font-family: proxima-nova, Arial, sans-serif !important;
4519
+ top:255px;
4520
+ }
4521
+ ul.magento-nav {
4522
+ display: block;
4523
+ float: left;
4524
+ list-style-type: none;
4525
+ padding: 0;
4526
+ margin: 0;
4527
+ }
4528
+ ul.magento-nav li {
4529
+ display: block;
4530
+ float: left;
4531
+ width:100%;
4532
+ }
4533
+ ul.magento-nav li a {
4534
+ display: block;
4535
+ float: left;
4536
+ color: #fff !important;
4537
+ padding: 20px 0px 20px 30px;
4538
+ font-size: 16px;
4539
+ font-weight: 400;
4540
+ width:100%;
4541
+ border-bottom:1px solid #4e5253;
4542
+ background: url('../img/arrow-white.png') no-repeat 90%;
4543
+ }
4544
+ ul.magento-nav li a.magento-active
4545
+ {
4546
+
4547
+ border-top:1px solid #4e5253;
4548
+ border-bottom:1px solid #4e5253;
4549
+ background: #45b5c1 url('../img/arrow-white.png') no-repeat 90%;
4550
+ }
4551
+ .magento-tooltip
4552
+ {
4553
+ background: url('../img/tooltip.png') no-repeat 95%;
4554
+ }
4555
+ .track-success
4556
+ {
4557
+ background: url('../img/detect.png') no-repeat 5%;
4558
+ }
4559
+ .track-unsuccess
4560
+ {
4561
+ background: url('../img/not-detected.png') no-repeat 5%;
4562
+ }
4563
+ input.magento-input::-webkit-input-placeholder { color: #b8bcc0;}
4564
+ input[type="text"]:focus
4565
+ {
4566
+ outline:none;
4567
+ border:1px solid #cbcbcb;
4568
+ }
4569
+ input[type="email"]:focus
4570
+ {
4571
+ outline:none;
4572
+ }
4573
+ input[type="password"]:focus
4574
+ {
4575
+ outline:none;
4576
+ }
4577
+ input[type="tel"]:focus
4578
+ {
4579
+ outline:none;
4580
+ }
4581
+ .label-checkbox-magento {
4582
+ font-family: proxima-nova, Arial, sans-serif !important;
4583
+ font-weight: 600;
4584
+ color: #5c656a !important;
4585
+ font-size: 16px !important;
4586
+ padding-left: 37px !important;
4587
+ }
4588
+ .magento-text-disabled
4589
+ {
4590
+ color: #b3babd !important;
4591
+ }
4592
+ .dropdown-toggle-magento {
4593
+ text-align: left;
4594
+ width: 280px;
4595
+ font-weight: 400;
4596
+ font-size: 16px;
4597
+ color: #5c656a;
4598
+ border: none;
4599
+ padding-left: 35px;
4600
+ /*padding-left: 15px;
4601
+ border-radius: 3px;
4602
+ background-color: #fcfcfc;
4603
+ border: 1px solid #dde2e4;
4604
+ */
4605
+ }
4606
+ .dropdown-menu-magento{
4607
+ width: 280px !important;
4608
+ border: none;
4609
+ position: absolute;
4610
+ top: 100%;
4611
+ left: 0;
4612
+ z-index: 1000;
4613
+ display: none;
4614
+ float: left;
4615
+ padding: 0;
4616
+ margin: 0;
4617
+ font-size: 16px;
4618
+ list-style: none;
4619
+ border-radius: 0px;
4620
+ -webkit-box-shadow: none;
4621
+ box-shadow: none;
4622
+ color: #5c656a;
4623
+ font-weight: 600;
4624
+ background-color: transparent !important;
4625
+ }
4626
+ .dropdown-menu-magento > li:first-child > a
4627
+ {
4628
+ border-top: 1px solid #ece7e7;
4629
+ }
4630
+ .dropdown-menu-magento > li > a {
4631
+ border-top:none;
4632
+ background-color: #f3f6f6;
4633
+ text-align: left;
4634
+ width: 280px;
4635
+ border-left: 1px solid #d0d3d5;
4636
+ border-right: 1px solid #d0d3d5;
4637
+ font-size: 16px;
4638
+ font-weight: 400;
4639
+ color: #5c656a !important;
4640
+ padding:14px 0px 14px 35px !important;
4641
+ height:auto !important;
4642
+ }
4643
+ .dropdown-menu-magento > li:last-child > a {
4644
+ border-bottom: 1px solid #d0d3d5;
4645
+ border-bottom-left-radius: 3px;
4646
+ border-bottom-right-radius: 3px;
4647
+ padding:15px 0px 15px 35px !important;
4648
+ }
4649
+
4650
+ .dropdown-menu-magento > li > a:hover, .dropdown-menu-magento > li > a:focus {
4651
+ color: #5c656a !important;
4652
+ text-decoration: none;
4653
+ background-color: #f3f6f6;
4654
+ background-image: none;
4655
+ }
4656
+
4657
+ .btn-group.open .dropdown-toggle-magento {
4658
+ -webkit-box-shadow: none;
4659
+ box-shadow: none;
4660
+ width: 280px;
4661
+ border-bottom: none;
4662
+ border-radius: 5px 5px 0px 0px;
4663
+ border:1px solid #cecece;
4664
+ height: 40px;
4665
+ border-bottom: none;
4666
+ background-color: #f3f6f6;
4667
+ padding-top:10px;
4668
+ height:40px;
4669
+
4670
+ }
4671
+
4672
+ .open > .dropdown-menu-magento {
4673
+ display: block;
4674
+ }
4675
+
4676
+ .caret-magento {
4677
+ float: right;
4678
+ margin-top: 6px;
4679
+ width: 8px;
4680
+ margin-right: 10px;
4681
+ border-top: 8px solid #b0b6b9;
4682
+ border-right: 7px solid transparent;
4683
+ border-bottom: 0 dotted;
4684
+ border-left: 7px solid transparent;
4685
+ cursor: pointer;
4686
+ }
4687
+
4688
+
4689
+ .dropdown-toggle-nav-magento {
4690
+ text-align: left;
4691
+ width: 280px;
4692
+ font-weight: 400;
4693
+ font-size: 16px;
4694
+ color: #5c656a;
4695
+ border: none;
4696
+ padding-top:10px;
4697
+ height:42px;
4698
+ padding-left:10px;
4699
+ border-radius: 3px;
4700
+ background-color: #fff !important;
4701
+ border: 1px solid #dde2e4;
4702
+
4703
+ }
4704
+ .dropdown-menu-nav-magento{
4705
+ width: 280px !important;
4706
+ border: none;
4707
+ position: absolute;
4708
+ top: 100%;
4709
+ left: 0;
4710
+ z-index: 1000;
4711
+ display: none;
4712
+ float: left;
4713
+ padding: 0;
4714
+ margin: 0;
4715
+ font-size: 16px;
4716
+ list-style: none;
4717
+ border-radius: 0px;
4718
+ -webkit-box-shadow: none;
4719
+ box-shadow: none;
4720
+ color: #5c656a;
4721
+ font-weight: 600;
4722
+ background-color: transparent !important;
4723
+ }
4724
+ .dropdown-menu-nav-magento > li:first-child > a
4725
+ {
4726
+ border-top: 1px solid #ece7e7;
4727
+ }
4728
+ .dropdown-menu-nav-magento > li > a {
4729
+ border-top:none;
4730
+ background-color: #f3f6f6;
4731
+ text-align: left;
4732
+ width: 280px;
4733
+ border-left: 1px solid #d0d3d5;
4734
+ border-right: 1px solid #d0d3d5;
4735
+ font-size: 16px;
4736
+ font-weight: 400;
4737
+ color: #5c656a !important;
4738
+ padding:14px 0px 14px 10px !important;
4739
+ height:auto !important;
4740
+ }
4741
+ .dropdown-menu-nav-magento > li:last-child > a {
4742
+ border-bottom: 1px solid #d0d3d5;
4743
+ border-bottom-left-radius: 3px;
4744
+ border-bottom-right-radius: 3px;
4745
+ padding:15px 0px 15px 10px !important;
4746
+ }
4747
+
4748
+ .dropdown-menu-nav-magento > li > a:hover, .dropdown-menu-nav-magento > li > a:focus {
4749
+ color: #5c656a !important;
4750
+ text-decoration: none;
4751
+ background-color: #f3f6f6;
4752
+ background-image: none;
4753
+ }
4754
+
4755
+ .btn-group.open .dropdown-toggle-nav-magento {
4756
+ -webkit-box-shadow: none;
4757
+ box-shadow: none;
4758
+ width: 280px;
4759
+ border-bottom: none;
4760
+ border-radius: 5px 5px 0px 0px;
4761
+ border:1px solid #cecece;
4762
+ height: 40px;
4763
+ border-bottom: none;
4764
+ background-color: #fff;
4765
+
4766
+
4767
+ }
4768
+
4769
+ .open > .dropdown-menu-nav-magento {
4770
+ display: block;
4771
+ }
4772
+
4773
+ .caret-nav-magento {
4774
+ float: right;
4775
+ margin-top: 6px;
4776
+ width: 8px;
4777
+ margin-right: 10px;
4778
+ border-top: 8px solid #b0b6b9;
4779
+ border-right: 7px solid transparent;
4780
+ border-bottom: 0 dotted;
4781
+ border-left: 7px solid transparent;
4782
+ cursor: pointer;
4783
+ }
4784
+ .magento-analytics-block
4785
+ {
4786
+ border:1px solid #45b5c1;
4787
+ border-radius:5px;
4788
+ padding:20px 0px 10px 0px;
4789
+ background-color: #f3f6f6;
4790
+ }
4791
+ .magento-analytics-block1
4792
+ {
4793
+ border:1px solid #fe6a56;
4794
+ }
4795
+ .magento-analytics-head
4796
+ {
4797
+ color: #3c3f40;
4798
+ font-size:18px;
4799
+ font-weight:400;
4800
+ text-align: center;
4801
+ }
4802
+ .magento-analytics-tick
4803
+ {
4804
+ width:47px !important;
4805
+ height:47px;
4806
+ border-radius:50%;
4807
+ background:#45b5c1 url('../img/tick-analytics.png') no-repeat 50%;
4808
+ margin:0px auto;
4809
+ float:none;
4810
+ }
4811
+ .magento-analytics-cross
4812
+ {
4813
+ background:#fe6a56 url('../img/red-loading.png') no-repeat 50%;
4814
+ }
4815
+ .magento-analytics-text
4816
+ {
4817
+ color: #5c656a;
4818
+ font-size:16px;
4819
+ font-weight:400;
4820
+ text-align: center;
4821
+ }
4822
+
4823
+ /* modified dashboard changes */
4824
+ .back-gray
4825
+ {
4826
+ background-color: #f3f6f6 !important;
4827
+ }
4828
+ .main-section
4829
+ {
4830
+ font-family: proxima-nova, Arial, sans-serif;
4831
+ }
4832
+ .mar-top-50
4833
+ {
4834
+ margin-top:50px !important;
4835
+ }
4836
+ .navbar-dashboard
4837
+ {
4838
+ border-bottom: 3px solid #45b5c1;
4839
+ }
4840
+ .dashboard-inner-block
4841
+ {
4842
+ border: 1px solid #cddbde;
4843
+ padding:35px 0px 35px 40px;
4844
+ background-color: #fff;
4845
+ border-radius: 5px 5px 0px 0px;
4846
+ }
4847
+ .d-inner-block-padding{
4848
+ padding-left: 40px;
4849
+ padding-right: 40px;
4850
+ }
4851
+ .brd-btm-radius
4852
+ {
4853
+ border-bottom-left-radius: 5px;
4854
+ border-bottom-right-radius: 5px;
4855
+ }
4856
+ .dashboard-head
4857
+ {
4858
+ color:#4e5356;
4859
+ font-size:24px;
4860
+ font-weight:400;
4861
+ }
4862
+
4863
+ .dashboard-head-bold
4864
+ {
4865
+ color:#4e5356;
4866
+ font-size:24px;
4867
+ font-weight:600;
4868
+ }
4869
+ .color-gray
4870
+ {
4871
+ color: #929494;
4872
+ }
4873
+ .dashboard-text
4874
+ {
4875
+ color:#929494;
4876
+ font-size:18px;
4877
+ font-weight:400;
4878
+ }
4879
+ .dashboard-black-block
4880
+ {
4881
+ background-color: #676f73;
4882
+ padding: 55px 0px;
4883
+
4884
+ }
4885
+
4886
+ .dashboard-b-block-head
4887
+ {
4888
+ color:#4e5356;
4889
+ font-size:24px;
4890
+ font-weight:400;
4891
+ }
4892
+ .dashboard-b-block-text
4893
+ {
4894
+ color:#fff;
4895
+ font-size:18px;
4896
+ font-weight:400;
4897
+ }
4898
+ .black-block-padding
4899
+ {
4900
+ padding: 20px 0px 10px 0px;
4901
+ }
4902
+ .black-block-padding1
4903
+ {
4904
+ padding: 16px 0px;
4905
+ }
4906
+ .dashboard-gray-block
4907
+ {
4908
+ background-color: #787a7b;
4909
+ padding: 30px 0px 40px 0px;
4910
+
4911
+ }
4912
+
4913
+ .dashboard-popup
4914
+ {
4915
+ border-radius:10px !important;
4916
+ background-color: #fff;
4917
+ padding:8px 0px 50px 0px;
4918
+ }
4919
+ .popup-gray
4920
+ {
4921
+ background-color: #f3f6f6;
4922
+ padding-left:45px;
4923
+ }
4924
+ .dashboard-inner
4925
+ {
4926
+ padding: 0px 40px 50px 0px;
4927
+ }
4928
+ .dashboard-inner-popup
4929
+ {
4930
+ padding: 40px 60px 50px 40px;
4931
+ border:1px solid #c5c5c5;
4932
+ background-color: #fff;
4933
+ }
4934
+ .dashboard-inner-popup-text
4935
+ {
4936
+ color:#929494;
4937
+ font-size:16px;
4938
+ font-weight:400;
4939
+ }
4940
+ .cross-red
4941
+ {
4942
+
4943
+ background:url('../img/close.png') no-repeat; width:25px; height:25px;
4944
+ margin-right:15px
4945
+ }
4946
+
4947
+ .popup-head
4948
+ {
4949
+ color:#4e5356;
4950
+ font-size:24px;
4951
+ font-weight:400;
4952
+ text-align: center;
4953
+ }
4954
+ .popup-text
4955
+ {
4956
+ color:#929494;
4957
+ font-size:18px;
4958
+ font-weight:400;
4959
+ text-align: center;
4960
+ }
4961
+ .popup-text1
4962
+ {
4963
+ color:#2c3e4c;
4964
+ font-size:18px;
4965
+ font-weight:600;
4966
+ text-align: center;
4967
+ }
4968
+ .steps-row1
4969
+ {
4970
+ width:460px !important;
4971
+ margin:0px auto;
4972
+ float:none;
4973
+ margin-bottom: 20px;
4974
+ }
4975
+ .steps-row2
4976
+ {
4977
+ width:580px !important;
4978
+ margin:0px auto;
4979
+ float:none;
4980
+ margin-bottom: 40px;
4981
+ }
4982
+ .steps-circle-outer
4983
+ {
4984
+ width:38px !important;
4985
+ height:38px;
4986
+ border-radius: 50%;
4987
+ border:1px solid #c1d0d4;
4988
+ padding:4px;
4989
+ background-color: #fff;
4990
+ z-index:1;
4991
+ }
4992
+ .steps-circle-inner
4993
+ {
4994
+ background: #4bb4bf url('../img/checkmark.png') no-repeat 50%;
4995
+ border-radius: 50%;
4996
+ width: 28px !important;
4997
+ height: 28px;
4998
+
4999
+ }
5000
+ .steps-border
5001
+ {
5002
+ width:104px !important;
5003
+ border-top: 1px solid #c7d5d9;
5004
+ border-bottom: 1px solid #c7d5d9;
5005
+ background-color: #fff;
5006
+ height:6px;
5007
+ z-index:999;
5008
+ margin-left:-1px;
5009
+ margin-right:-1px;
5010
+ }
5011
+ .steps-circle-inner-numb
5012
+ {
5013
+ border-radius: 50%;
5014
+ width: 28px !important;
5015
+ height: 28px;
5016
+ color: #989898;
5017
+ font-weight:400;
5018
+ font-size: 20px;
5019
+ padding-top:1px;
5020
+ padding-left:7px;
5021
+ }
5022
+ .steps-circle-inner-numb-active
5023
+ {
5024
+ border:1px solid #49b6c2;
5025
+ border-radius: 50%;
5026
+ width: 28px !important;
5027
+ height: 28px;
5028
+ color: #00a6c9;
5029
+ font-weight:400;
5030
+ font-size: 20px;
5031
+ padding-top:0px;
5032
+ padding-left:7px;
5033
+ }
5034
+ .mar-top-3
5035
+ {
5036
+ margin-top:3px;
5037
+ }
5038
+ .mar-top-neg3
5039
+ {
5040
+ margin-top:-3px;
5041
+ }
5042
+ .mar-top-20
5043
+ {
5044
+ margin-top:15px;
5045
+ }
5046
+ .mar-top-30
5047
+ {
5048
+ margin-top:30px;
5049
+ }
5050
+ .mar-top-40
5051
+ {
5052
+ margin-top:40px;
5053
+ }
5054
+ .steps-text-active
5055
+ {
5056
+ font-size: 15px;
5057
+ font-weight: 400;
5058
+ color: #45b5c1;
5059
+ text-align: center
5060
+ }
5061
+ .steps-text
5062
+ {
5063
+ font-size: 15px;
5064
+ font-weight: 400;
5065
+ color: #929494;
5066
+ text-align: center;
5067
+ }
5068
+ .dashboard-label
5069
+ {
5070
+ color: #4e5356;
5071
+ font-weight:600;
5072
+ font-size: 18px;
5073
+ }
5074
+ .dashboard-input
5075
+ {
5076
+ width: 340px !important;
5077
+ height: 40px;
5078
+ border-radius: 2px;
5079
+ background-color: #fff;
5080
+ padding-left: 14px;
5081
+ font-size: 16px;
5082
+ color: #1a1c1c;
5083
+ border:1px solid #cbcbcb;
5084
+
5085
+ }
5086
+ .dashboard-button-label
5087
+ {
5088
+ height:40px;
5089
+ width:290px !important;
5090
+ border:1px solid #d9dede;
5091
+ font-weight: 600;
5092
+ font-size: 16px;
5093
+ color: #182b3a;
5094
+ box-shadow: none !important;
5095
+ border-right: none;
5096
+ }
5097
+ .width-400
5098
+ {
5099
+ width:400px !important;
5100
+ }
5101
+ .dashboard-copy-button
5102
+ {
5103
+ background: #f5f8fa url('../img/copy-black.png') no-repeat 50%;
5104
+ width:45px;
5105
+ height:40px;
5106
+ border:1px solid #d9dede;
5107
+ outline:none;
5108
+ cursor: pointer;
5109
+ box-shadow: none !important;
5110
+ background:
5111
+ /* top, transparent red, faked with gradient */
5112
+ linear-gradient(
5113
+ rgba(255,255,255,0),
5114
+ rgba(242,243,243,1)
5115
+ ),
5116
+ /* bottom, image */
5117
+ url('../img/copy-black.png') no-repeat 50%;
5118
+ }
5119
+ .dashboard-copy-button:hover
5120
+ {
5121
+ background: #f5f8fa url('../img/copy-black.png') no-repeat 50%;
5122
+ width:45px;
5123
+ height:40px;
5124
+ border:1px solid #d9dede;
5125
+ outline:none;
5126
+ }
5127
+ .dashboard-copy-button:active
5128
+ {
5129
+ background: #45b5c1 url('../img/copy-white.png') no-repeat 50%;
5130
+ width:45px;
5131
+ height:40px;
5132
+ border:none;
5133
+ outline:none;
5134
+ }
5135
+ .copy-link
5136
+ {
5137
+
5138
+ background-color: #929ca1;
5139
+ color: #fff;
5140
+ text-align: center;
5141
+ border-top-left-radius: 4px;
5142
+ border-bottom-right-radius: 4px;
5143
+ float: right;
5144
+ font-family: proxima-nova, Arial, sans-serif;
5145
+ font-size: 14px;
5146
+ font-weight:400;
5147
+ padding: 5px 0;
5148
+ }
5149
+ .gif-block
5150
+ {
5151
+ width:630px !important;
5152
+ height:230px;
5153
+ background-color: #f3f6f6;
5154
+ color: #4e5356;
5155
+ font-weight:400;
5156
+ font-size: 24px;
5157
+ text-align: center;
5158
+ vertical-align: middle;
5159
+ display:table-cell;
5160
+ }
5161
+ .magento-row-tabs
5162
+ {
5163
+ float:left;
5164
+ width:100%;
5165
+ background-color: #f3f6f6;
5166
+ padding: 8px 0px;
5167
+
5168
+ }
5169
+ ul.magento-conf-tabs {
5170
+ margin: 0;
5171
+ padding: 0;
5172
+ list-style-type: none;
5173
+
5174
+ }
5175
+ ul.magento-conf-tabs li {
5176
+
5177
+ font-size: 16px;
5178
+ font-weight: bold;
5179
+ display:inline;
5180
+
5181
+ }
5182
+ ul.magento-conf-tabs li a {
5183
+
5184
+
5185
+ width:248px;
5186
+ padding-left:30px;
5187
+ font-weight:400;
5188
+ font-size:16px;
5189
+
5190
+
5191
+ }
5192
+ ul.magento-conf-tabs li a.magento-conf-tabs-disabled {
5193
+ float: left;
5194
+ background: url('../img/step-arrow.png') no-repeat 92%;
5195
+ color: #b0b6b9 !important;
5196
+ }
5197
+ ul.magento-conf-tabs li a.magento-conf-tabs-enabled {
5198
+ float: left;
5199
+ background: url('../img/step-arrow.png') no-repeat 92%;
5200
+ color: #4e5356 !important;
5201
+
5202
+ }
5203
+ .magento-number
5204
+ {
5205
+ float:left;font-size:43px;padding-right:15px;
5206
+ }
5207
+ .magento-number-text
5208
+ {
5209
+ float:left;padding-left:15px;width:105px;border-left:1px solid #b0b6b9;margin-top:8px;
5210
+ }
5211
+ .width-188
5212
+ {
5213
+ width: 188px !important;
5214
+ }
5215
+ .button-edit-magento
5216
+ {
5217
+ border: 1px solid #dee2e4;
5218
+ height:32px;
5219
+ border-radius:3px;
5220
+ background: #fff url('../img/edit-magento.png') no-repeat 10%;
5221
+ color: #5c656a !important;
5222
+ font-size:16px;
5223
+ font-weight:400;
5224
+ padding-top:5px;
5225
+ padding-left: 33px;
5226
+ }
5227
+ .button-save-magento
5228
+ {
5229
+
5230
+ background: #fff url('../img/save.png') no-repeat 10%;
5231
+
5232
+ }
5233
+ /* common modified dashboard */
5234
+
5235
+ .button-blue1-middle
5236
+ {
5237
+ border: 1px solid #209dac !important;
5238
+ height:40px !important;
5239
+ padding-top:9px !important;
5240
+ border-radius:2px !important;
5241
+ padding-right: 0px !important;
5242
+ background-color: #45b5c1 !important;
5243
+ text-align: center;
5244
+ color: #fff !important;
5245
+ font-size:16px;
5246
+ font-weight:600;
5247
+ }
5248
+ .button-blue1-middle:hover
5249
+ {
5250
+ border: 1px solid #209dac !important;
5251
+ background-color: #3aabb7 !important;
5252
+ -moz-box-shadow:inset 0px 1px 1px 0px #2e8f9a;
5253
+ -webkit-box-shadow:inset 0px 1px 1px 0px #2e8f9a;
5254
+ box-shadow:inset 0px 1px 1px 0px #2e8f9a;
5255
+ }
5256
+ .button-blue1-middle:active
5257
+ {
5258
+ border: 1px solid #209dac !important;
5259
+ background-color: #3aabb7 !important;
5260
+ -moz-box-shadow:inset 0px 1px 1px 0px #2e8f9a;
5261
+ -webkit-box-shadow:inset 0px 1px 1px 0px #2e8f9a;
5262
+ box-shadow:inset 0px 1px 1px 0px #2e8f9a;
5263
+ padding-top:10px !important;
5264
+ }
5265
+ .button-black-middle
5266
+ {
5267
+ border: 1px solid #000;
5268
+ height:40px;
5269
+ border-radius:2px;
5270
+ background: #3b3e40 url('../img/btn-arrow.png') no-repeat 88%;
5271
+ text-align: center;
5272
+ color: #fdfdfd !important;
5273
+ font-size:16px;
5274
+ font-weight:600;
5275
+ padding-top:9px;
5276
+ }
5277
+ .button-black-middle:hover
5278
+ {
5279
+ background: #292d30 url('../img/btn-arrow.png') no-repeat 88%;
5280
+ -moz-box-shadow:inset 0px 1px 1px 0px #6d6d6d;
5281
+ -webkit-box-shadow:inset 0px 1px 1px 0px #6d6d6d;
5282
+ box-shadow:inset 0px 1px 1px 0px #6d6d6d;
5283
+
5284
+ }
5285
+ .button-black-middle:active
5286
+ {
5287
+ padding-top:10px;
5288
+ background: #292d30 url('../img/btn-arrow.png') no-repeat 88% 55%;
5289
+ -moz-box-shadow:inset 0px 1px 1px 0px #6d6d6d;
5290
+ -webkit-box-shadow:inset 0px 1px 1px 0px #6d6d6d;
5291
+ box-shadow:inset 0px 1px 1px 0px #6d6d6d;
5292
+
5293
+ }
5294
+
5295
+ .button-install
5296
+ {
5297
+ border: 1px solid #cecece !important;
5298
+ height:50px !important;
5299
+ padding-top:12px !important;
5300
+ border-radius:3px !important;
5301
+ padding-right: 0px !important;
5302
+ background: #fff url('../img/install.png') no-repeat 6%;
5303
+ padding-left: 55px;
5304
+ color: #5c656a !important;
5305
+ font-size:18px;
5306
+ font-weight:600;
5307
+ }
5308
+ .button-install:hover
5309
+ {
5310
+ border: 1px solid #45b5c1 !important;
5311
+ }
5312
+ .button-install:active
5313
+ {
5314
+
5315
+ border: 1px solid #cecece !important;
5316
+ background: #fff url('../img/install.png') no-repeat 6% 55%;
5317
+ padding-top:13px !important;
5318
+ }
5319
+ .button-install1
5320
+ {
5321
+ border: 1px solid #cecece !important;
5322
+ height:50px !important;
5323
+ padding-top:12px !important;
5324
+ border-radius:3px !important;
5325
+ padding-right: 0px !important;
5326
+ background: #fff url('../img/install.png') no-repeat 3%;
5327
+ padding-left: 55px;
5328
+ color: #5c656a !important;
5329
+ font-size:18px;
5330
+ font-weight:600;
5331
+ }
5332
+ .button-install1:hover
5333
+ {
5334
+ border: 1px solid #45b5c1 !important;
5335
+ }
5336
+ .button-install1:active
5337
+ {
5338
+
5339
+ border: 1px solid #cecece !important;
5340
+ background: #fff url('../img/install.png') no-repeat 3% 55%;
5341
+ padding-top:13px !important;
5342
+ }
5343
+ .button-black-disabled
5344
+ {
5345
+ height:40px;
5346
+ border-radius:2px;
5347
+ background: #ced1d2 url('../img/btn-arrow.png') no-repeat 94%;
5348
+ text-align: center;
5349
+ color: #fdfdfd !important;
5350
+ font-size:16px;
5351
+ font-weight:600;
5352
+ padding-top:9px;
5353
+ }
5354
+ .button-send-instruct
5355
+ {
5356
+ border: 1px solid #d9dede;
5357
+ height:40px;
5358
+ border-radius:2px;
5359
+ background: #fff url('../img/mail-new.png') no-repeat 97%;
5360
+ color: #3c3f40 !important;
5361
+ font-size:16px;
5362
+ font-weight:600;
5363
+ padding-top:8px;
5364
+ padding-left: 20px;
5365
+ }
5366
+ .button-platform-back
5367
+ {
5368
+ border: 1px solid #d9dede;
5369
+ height:40px;
5370
+ border-radius:2px;
5371
+ background: #fff url('../img/back.png') no-repeat 5%;
5372
+ color: #3c3f40 !important;
5373
+ font-size:16px;
5374
+ font-weight:600;
5375
+ padding-top:8px;
5376
+ padding-left: 42px;
5377
+ }
5378
+ .button-skip-dashboard
5379
+ {
5380
+ border: 1px solid #d9dede;
5381
+ height:40px;
5382
+ border-radius:2px;
5383
+ background: #fff url('../img/arrow-2.png') no-repeat 92%;
5384
+ color: #3c3f40 !important;
5385
+ font-size:16px;
5386
+ font-weight:600;
5387
+ padding-top:8px;
5388
+ padding-left: 20px;
5389
+ }
5390
+ .img-none
5391
+ {
5392
+ background-image:none;
5393
+ }
5394
+ .img-none:hover
5395
+ {
5396
+ background-image:none;
5397
+ }
5398
+ .img-none:active
5399
+ {
5400
+ background-image:none;
5401
+ }
5402
+ .block-center
5403
+ {
5404
+ margin:0px auto;
5405
+ float:none !important;
5406
+ }
5407
+ .pad-btm-20
5408
+ {
5409
+ padding-bottom:20px;
5410
+ }
5411
+ .pad-btm-100
5412
+ {
5413
+ padding-bottom:100px;
5414
+ }
5415
+ .font-18
5416
+ {
5417
+ font-size:18px !important;
5418
+ }
5419
+ .font-20
5420
+ {
5421
+ font-size:20px !important;
5422
+ }
5423
+ .font-24
5424
+ {
5425
+ font-size: 24px !important;
5426
+ }
5427
+ .font-30
5428
+ {
5429
+ font-size:30px !important;
5430
+ }
5431
+ .pad-btm-80
5432
+ {
5433
+ padding-bottom: 80px;
5434
+ }
5435
+ .pad-lft-40
5436
+ {
5437
+ padding-left: 40px;
5438
+ }
5439
+ .txt-center
5440
+ {
5441
+ text-align: center;
5442
+ }
5443
+ .width-300
5444
+ {
5445
+ width: 300px !important;
5446
+ }
5447
+ .tooltip-outer
5448
+ {
5449
+ float: left;
5450
+ width: 270px;
5451
+ }
5452
+ .tooltip-left {
5453
+ float: left;
5454
+ width: 7px;
5455
+ height: 15px;
5456
+ margin-top: 2px;
5457
+ }
5458
+ .tooltip-content {
5459
+ width:260px;
5460
+ text-align: left;
5461
+ padding: 20px 25px 20px 30px;
5462
+ background: #3c3f40;
5463
+ float: left;
5464
+ }
5465
+ .tooltip-top {
5466
+ font-size: 16px;
5467
+ font-weight: 600;
5468
+ color: #ffffff;
5469
+ margin-bottom: 10px;
5470
+ float: left;
5471
+ }
5472
+ .tooltip-text {
5473
+ font-size: 14px;
5474
+ color: #f3f6f6;
5475
+ float: left;
5476
+ font-weight:400;
5477
+ }
5478
+ @media (min-width: 768px) {
5479
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-13, .col-sm-14, .col-sm-15, .col-sm-16, .col-sm-17, .col-sm-18, .col-sm-19, .col-sm-20, .col-sm-21, .col-sm-22, .col-sm-23, .col-sm-24, .col-sm-25, .col-sm-26, .col-sm-27, .col-sm-28, .col-sm-29, .col-sm-30, .col-sm-31, .col-sm-32, .col-sm-33, .col-sm-34, .col-sm-35, .col-sm-36, .col-sm-37, .col-sm-38, .col-sm-39, .col-sm-40, .col-sm-41, .col-sm-42, .col-sm-43, .col-sm-44, .col-sm-45, .col-sm-46, .col-sm-47, .col-sm-48, .col-sm-49, .col-sm-50, .col-sm-51, .col-sm-52, .col-sm-53, .col-sm-54, .col-sm-55, .col-sm-56, .col-sm-57, .col-sm-58, .col-sm-59 {
5480
+ float: left;
5481
+ }
5482
+ .col-sm-1 {
5483
+ width: 1.666666666666667%;
5484
+ }
5485
+ .col-sm-2 {
5486
+ width: 3.333333333333333%;
5487
+ }
5488
+ .col-sm-3 {
5489
+ width: 5%;
5490
+ }
5491
+ .col-sm-4 {
5492
+ width: 6.666666666666667%;
5493
+ }
5494
+ .col-sm-5 {
5495
+ width: 8.333333333333333%;
5496
+ }
5497
+ .col-sm-6 {
5498
+ width: 10%;
5499
+ }
5500
+ .col-sm-7 {
5501
+ width: 11.66666666666667%;
5502
+ }
5503
+ .col-sm-8 {
5504
+ width: 13.33333333333333%;
5505
+ }
5506
+ .col-sm-9 {
5507
+ width: 15%;
5508
+ }
5509
+ .col-sm-10 {
5510
+ width: 16.66666666666667%;
5511
+ }
5512
+ .col-sm-11 {
5513
+ width: 18.33333333333333%;
5514
+ }
5515
+ .col-sm-12 {
5516
+ width: 20%;
5517
+ }
5518
+ .col-sm-13 {
5519
+ width: 21.66666666666667%;
5520
+ }
5521
+ .col-sm-14 {
5522
+ width: 23.33333333333333%;
5523
+ }
5524
+ .col-sm-15 {
5525
+ width: 25%;
5526
+ }
5527
+ .col-sm-16 {
5528
+ width: 26.66666666666667%;
5529
+ }
5530
+ .col-sm-17 {
5531
+ width: 28.33333333333333%;
5532
+ }
5533
+ .col-sm-18 {
5534
+ width: 30%;
5535
+ }
5536
+ .col-sm-19 {
5537
+ width: 31.66666666666667%;
5538
+ }
5539
+ .col-sm-20 {
5540
+ width: 33.33333333333333%;
5541
+ }
5542
+ .col-sm-21 {
5543
+ width: 35%;
5544
+ }
5545
+ .col-sm-22 {
5546
+ width: 36.66666666666667%;
5547
+ }
5548
+ .col-sm-23 {
5549
+ width: 38.33333333333333%;
5550
+ }
5551
+ .col-sm-24 {
5552
+ width: 40%;
5553
+ }
5554
+ .col-sm-25 {
5555
+ width: 41.66666666666667%;
5556
+ }
5557
+ .col-sm-26 {
5558
+ width: 43.33333333333333%;
5559
+ }
5560
+ .col-sm-27 {
5561
+ width: 45%;
5562
+ }
5563
+ .col-sm-28 {
5564
+ width: 46.66666666666667%;
5565
+ }
5566
+ .col-sm-29 {
5567
+ width: 48.33333333333333%;
5568
+ }
5569
+ .col-sm-30 {
5570
+ width: 50%;
5571
+ }
5572
+ .col-sm-31 {
5573
+ width: 51.66666666666667%;
5574
+ }
5575
+ .col-sm-32 {
5576
+ width: 53.33333333333333%;
5577
+ }
5578
+ .col-sm-33 {
5579
+ width: 55%;
5580
+ }
5581
+ .col-sm-34 {
5582
+ width: 56.66666666666667%;
5583
+ }
5584
+ .col-sm-35 {
5585
+ width: 58.33333333333333%;
5586
+ }
5587
+ .col-sm-36 {
5588
+ width: 60%;
5589
+ }
5590
+ .col-sm-37 {
5591
+ width: 61.66666666666667%;
5592
+ }
5593
+ .col-sm-38 {
5594
+ width: 63.33333333333333%;
5595
+ }
5596
+ .col-sm-39 {
5597
+ width: 65%;
5598
+ }
5599
+ .col-sm-40 {
5600
+ width: 66.66666666666667%;
5601
+ }
5602
+ .col-sm-41 {
5603
+ width: 68.33333333333333%;
5604
+ }
5605
+ .col-sm-42 {
5606
+ width: 70%;
5607
+ }
5608
+ .col-sm-43 {
5609
+ width: 71.66666666666667%;
5610
+ }
5611
+ .col-sm-44 {
5612
+ width: 73.33333333333333%;
5613
+ }
5614
+ .col-sm-45 {
5615
+ width: 75%;
5616
+ }
5617
+ .col-sm-46 {
5618
+ width: 76.66666666666667%;
5619
+ }
5620
+ .col-sm-47 {
5621
+ width: 78.33333333333333%;
5622
+ }
5623
+ .col-sm-48 {
5624
+ width: 80%;
5625
+ }
5626
+ .col-sm-49 {
5627
+ width: 81.66666666666667%;
5628
+ }
5629
+ .col-sm-50 {
5630
+ width: 83.33333333333333%;
5631
+ }
5632
+ .col-sm-51 {
5633
+ width: 85%;
5634
+ }
5635
+ .col-sm-52 {
5636
+ width: 86.66666666666667%;
5637
+ }
5638
+ .col-sm-53 {
5639
+ width: 88.33333333333333%;
5640
+ }
5641
+ .col-sm-54 {
5642
+ width: 90%;
5643
+ }
5644
+ .col-sm-55 {
5645
+ width: 91.66666666666667%;
5646
+ }
5647
+ .col-sm-56 {
5648
+ width: 93.33333333333333%;
5649
+ }
5650
+ .col-sm-57 {
5651
+ width: 95%;
5652
+ }
5653
+ .col-sm-58 {
5654
+ width: 96.66666666666667%;
5655
+ }
5656
+ .col-sm-59 {
5657
+ width: 98.33333333333333%;
5658
+ }
5659
+ .col-sm-60 {
5660
+ width: 100%;
5661
+ }
5662
+
5663
+ .col-sm-push-1 {
5664
+ left: 1.666666666666667%;
5665
+ }
5666
+ .col-sm-push-2 {
5667
+ left: 3.333333333333333%;
5668
+ }
5669
+ .col-sm-push-3 {
5670
+ left: 5%;
5671
+ }
5672
+ .col-sm-push-4 {
5673
+ left: 6.666666666666667%;
5674
+ }
5675
+ .col-sm-push-5 {
5676
+ left: 8.333333333333333%;
5677
+ }
5678
+ .col-sm-push-6 {
5679
+ left: 10%;
5680
+ }
5681
+ .col-sm-push-7 {
5682
+ left: 11.66666666666667%;
5683
+ }
5684
+ .col-sm-push-8 {
5685
+ left: 13.33333333333333%;
5686
+ }
5687
+ .col-sm-push-9 {
5688
+ left: 15%;
5689
+ }
5690
+ .col-sm-push-10 {
5691
+ left: 16.66666666666667%;
5692
+ }
5693
+ .col-sm-push-11 {
5694
+ left: 18.33333333333333%;
5695
+ }
5696
+ .col-sm-push-12 {
5697
+ left: 20%;
5698
+ }
5699
+ .col-sm-push-13 {
5700
+ left: 21.66666666666667%;
5701
+ }
5702
+ .col-sm-push-14 {
5703
+ left: 23.33333333333333%;
5704
+ }
5705
+ .col-sm-push-15 {
5706
+ left: 25%;
5707
+ }
5708
+ .col-sm-push-16 {
5709
+ left: 26.66666666666667%;
5710
+ }
5711
+ .col-sm-push-17 {
5712
+ left: 28.33333333333333%;
5713
+ }
5714
+ .col-sm-push-18 {
5715
+ left: 30%;
5716
+ }
5717
+ .col-sm-push-19 {
5718
+ left: 31.66666666666667%;
5719
+ }
5720
+ .col-sm-push-20 {
5721
+ left: 33.33333333333333%;
5722
+ }
5723
+ .col-sm-push-21 {
5724
+ left: 35%;
5725
+ }
5726
+ .col-sm-push-22 {
5727
+ left: 36.66666666666667%;
5728
+ }
5729
+ .col-sm-push-23 {
5730
+ left: 38.33333333333333%;
5731
+ }
5732
+ .col-sm-push-24 {
5733
+ left: 40%;
5734
+ }
5735
+ .col-sm-push-25 {
5736
+ left: 41.66666666666667%;
5737
+ }
5738
+ .col-sm-push-26 {
5739
+ left: 43.33333333333333%;
5740
+ }
5741
+ .col-sm-push-27 {
5742
+ left: 45%;
5743
+ }
5744
+ .col-sm-push-28 {
5745
+ left: 46.66666666666667%;
5746
+ }
5747
+ .col-sm-push-29 {
5748
+ left: 48.33333333333333%;
5749
+ }
5750
+ .col-sm-push-30 {
5751
+ left: 50%;
5752
+ }
5753
+ .col-sm-push-31 {
5754
+ left: 51.66666666666667%;
5755
+ }
5756
+ .col-sm-push-32 {
5757
+ left: 53.33333333333333%;
5758
+ }
5759
+ .col-sm-push-33 {
5760
+ left: 55%;
5761
+ }
5762
+ .col-sm-push-34 {
5763
+ left: 56.66666666666667%;
5764
+ }
5765
+ .col-sm-push-35 {
5766
+ left: 58.33333333333333%;
5767
+ }
5768
+ .col-sm-push-36 {
5769
+ left: 60%;
5770
+ }
5771
+ .col-sm-push-37 {
5772
+ left: 61.66666666666667%;
5773
+ }
5774
+ .col-sm-push-38 {
5775
+ left: 63.33333333333333%;
5776
+ }
5777
+ .col-sm-push-39 {
5778
+ left: 65%;
5779
+ }
5780
+ .col-sm-push-40 {
5781
+ left: 66.66666666666667%;
5782
+ }
5783
+ .col-sm-push-41 {
5784
+ left: 68.33333333333333%;
5785
+ }
5786
+ .col-sm-push-42 {
5787
+ left: 70%;
5788
+ }
5789
+ .col-sm-push-43 {
5790
+ left: 71.66666666666667%;
5791
+ }
5792
+ .col-sm-push-44 {
5793
+ left: 73.33333333333333%;
5794
+ }
5795
+ .col-sm-push-45 {
5796
+ left: 75%;
5797
+ }
5798
+ .col-sm-push-46 {
5799
+ left: 76.66666666666667%;
5800
+ }
5801
+ .col-sm-push-47 {
5802
+ left: 78.33333333333333%;
5803
+ }
5804
+ .col-sm-push-48 {
5805
+ left: 80%;
5806
+ }
5807
+ .col-sm-push-49 {
5808
+ left: 81.66666666666667%;
5809
+ }
5810
+ .col-sm-push-50 {
5811
+ left: 83.33333333333333%;
5812
+ }
5813
+ .col-sm-push-51 {
5814
+ left: 85%;
5815
+ }
5816
+ .col-sm-push-52 {
5817
+ left: 86.66666666666667%;
5818
+ }
5819
+ .col-sm-push-53 {
5820
+ left: 88.33333333333333%;
5821
+ }
5822
+ .col-sm-push-54 {
5823
+ left: 90%;
5824
+ }
5825
+ .col-sm-push-55 {
5826
+ left: 91.66666666666667%;
5827
+ }
5828
+ .col-sm-push-56 {
5829
+ left: 93.33333333333333%;
5830
+ }
5831
+ .col-sm-push-57 {
5832
+ left: 95%;
5833
+ }
5834
+ .col-sm-push-58 {
5835
+ left: 96.66666666666667%;
5836
+ }
5837
+ .col-sm-push-59 {
5838
+ left: 98.33333333333333%;
5839
+ }
5840
+
5841
+ .col-sm-pull-1 {
5842
+ right: 1.666666666666667%;
5843
+ }
5844
+ .col-sm-pull-2 {
5845
+ right: 3.333333333333333%;
5846
+ }
5847
+ .col-sm-pull-3 {
5848
+ right: 5%;
5849
+ }
5850
+ .col-sm-pull-4 {
5851
+ right: 6.666666666666667%;
5852
+ }
5853
+ .col-sm-pull-5 {
5854
+ right: 8.333333333333333%;
5855
+ }
5856
+ .col-sm-pull-6 {
5857
+ right: 10%;
5858
+ }
5859
+ .col-sm-pull-7 {
5860
+ right: 11.66666666666667%;
5861
+ }
5862
+ .col-sm-pull-8 {
5863
+ right: 13.33333333333333%;
5864
+ }
5865
+ .col-sm-pull-9 {
5866
+ right: 15%;
5867
+ }
5868
+ .col-sm-pull-10 {
5869
+ right: 16.66666666666667%;
5870
+ }
5871
+ .col-sm-pull-11 {
5872
+ right: 18.33333333333333%;
5873
+ }
5874
+ .col-sm-pull-12 {
5875
+ right: 20%;
5876
+ }
5877
+ .col-sm-pull-13 {
5878
+ right: 21.66666666666667%;
5879
+ }
5880
+ .col-sm-pull-14 {
5881
+ right: 23.33333333333333%;
5882
+ }
5883
+ .col-sm-pull-15 {
5884
+ right: 25%;
5885
+ }
5886
+ .col-sm-pull-16 {
5887
+ right: 26.66666666666667%;
5888
+ }
5889
+ .col-sm-pull-17 {
5890
+ right: 28.33333333333333%;
5891
+ }
5892
+ .col-sm-pull-18 {
5893
+ right: 30%;
5894
+ }
5895
+ .col-sm-pull-19 {
5896
+ right: 31.66666666666667%;
5897
+ }
5898
+ .col-sm-pull-20 {
5899
+ right: 33.33333333333333%;
5900
+ }
5901
+ .col-sm-pull-21 {
5902
+ right: 35%;
5903
+ }
5904
+ .col-sm-pull-22 {
5905
+ right: 36.66666666666667%;
5906
+ }
5907
+ .col-sm-pull-23 {
5908
+ right: 38.33333333333333%;
5909
+ }
5910
+ .col-sm-pull-24 {
5911
+ right: 40%;
5912
+ }
5913
+ .col-sm-pull-25 {
5914
+ right: 41.66666666666667%;
5915
+ }
5916
+ .col-sm-pull-26 {
5917
+ right: 43.33333333333333%;
5918
+ }
5919
+ .col-sm-pull-27 {
5920
+ right: 45%;
5921
+ }
5922
+ .col-sm-pull-28 {
5923
+ right: 46.66666666666667%;
5924
+ }
5925
+ .col-sm-pull-29 {
5926
+ right: 48.33333333333333%;
5927
+ }
5928
+ .col-sm-pull-30 {
5929
+ right: 50%;
5930
+ }
5931
+ .col-sm-pull-31 {
5932
+ right: 51.66666666666667%;
5933
+ }
5934
+ .col-sm-pull-32 {
5935
+ right: 53.33333333333333%;
5936
+ }
5937
+ .col-sm-pull-33 {
5938
+ right: 55%;
5939
+ }
5940
+ .col-sm-pull-34 {
5941
+ right: 56.66666666666667%;
5942
+ }
5943
+ .col-sm-pull-35 {
5944
+ right: 58.33333333333333%;
5945
+ }
5946
+ .col-sm-pull-36 {
5947
+ right: 60%;
5948
+ }
5949
+ .col-sm-pull-37 {
5950
+ right: 61.66666666666667%;
5951
+ }
5952
+ .col-sm-pull-38 {
5953
+ right: 63.33333333333333%;
5954
+ }
5955
+ .col-sm-pull-39 {
5956
+ right: 65%;
5957
+ }
5958
+ .col-sm-pull-40 {
5959
+ right: 66.66666666666667%;
5960
+ }
5961
+ .col-sm-pull-41 {
5962
+ right: 68.33333333333333%;
5963
+ }
5964
+ .col-sm-pull-42 {
5965
+ right: 70%;
5966
+ }
5967
+ .col-sm-pull-43 {
5968
+ right: 71.66666666666667%;
5969
+ }
5970
+ .col-sm-pull-44 {
5971
+ right: 73.33333333333333%;
5972
+ }
5973
+ .col-sm-pull-45 {
5974
+ right: 75%;
5975
+ }
5976
+ .col-sm-pull-46 {
5977
+ right: 76.66666666666667%;
5978
+ }
5979
+ .col-sm-pull-47 {
5980
+ right: 78.33333333333333%;
5981
+ }
5982
+ .col-sm-pull-48 {
5983
+ right: 80%;
5984
+ }
5985
+ .col-sm-pull-49 {
5986
+ right: 81.66666666666667%;
5987
+ }
5988
+ .col-sm-pull-50 {
5989
+ right: 83.33333333333333%;
5990
+ }
5991
+ .col-sm-pull-51 {
5992
+ right: 85%;
5993
+ }
5994
+ .col-sm-pull-52 {
5995
+ right: 86.66666666666667%;
5996
+ }
5997
+ .col-sm-pull-53 {
5998
+ right: 88.33333333333333%;
5999
+ }
6000
+ .col-sm-pull-54 {
6001
+ right: 90%;
6002
+ }
6003
+ .col-sm-pull-55 {
6004
+ right: 91.66666666666667%;
6005
+ }
6006
+ .col-sm-pull-56 {
6007
+ right: 93.33333333333333%;
6008
+ }
6009
+ .col-sm-pull-57 {
6010
+ right: 95%;
6011
+ }
6012
+ .col-sm-pull-58 {
6013
+ right: 96.66666666666667%;
6014
+ }
6015
+ .col-sm-pull-59 {
6016
+ right: 98.33333333333333%;
6017
+ }
6018
+
6019
+ .col-sm-offset-1 {
6020
+ margin-left: 1.666666666666667%;
6021
+ }
6022
+ .col-sm-offset-2 {
6023
+ margin-left: 3.333333333333333%;
6024
+ }
6025
+ .col-sm-offset-3 {
6026
+ margin-left: 5%;
6027
+ }
6028
+ .col-sm-offset-4 {
6029
+ margin-left: 6.666666666666667%;
6030
+ }
6031
+ .col-sm-offset-5 {
6032
+ margin-left: 8.333333333333333%;
6033
+ }
6034
+ .col-sm-offset-6 {
6035
+ margin-left: 10%;
6036
+ }
6037
+ .col-sm-offset-7 {
6038
+ margin-left: 11.66666666666667%;
6039
+ }
6040
+ .col-sm-offset-8 {
6041
+ margin-left: 13.33333333333333%;
6042
+ }
6043
+ .col-sm-offset-9 {
6044
+ margin-left: 15%;
6045
+ }
6046
+ .col-sm-offset-10 {
6047
+ margin-left: 16.66666666666667%;
6048
+ }
6049
+ .col-sm-offset-11 {
6050
+ margin-left: 18.33333333333333%;
6051
+ }
6052
+ .col-sm-offset-12 {
6053
+ margin-left: 20%;
6054
+ }
6055
+ .col-sm-offset-13 {
6056
+ margin-left: 21.66666666666667%;
6057
+ }
6058
+ .col-sm-offset-14 {
6059
+ margin-left: 23.33333333333333%;
6060
+ }
6061
+ .col-sm-offset-15 {
6062
+ margin-left: 25%;
6063
+ }
6064
+ .col-sm-offset-16 {
6065
+ margin-left: 26.66666666666667%;
6066
+ }
6067
+ .col-sm-offset-17 {
6068
+ margin-left: 28.33333333333333%;
6069
+ }
6070
+ .col-sm-offset-18 {
6071
+ margin-left: 30%;
6072
+ }
6073
+ .col-sm-offset-19 {
6074
+ margin-left: 31.66666666666667%;
6075
+ }
6076
+ .col-sm-offset-20 {
6077
+ margin-left: 33.33333333333333%;
6078
+ }
6079
+ .col-sm-offset-21 {
6080
+ margin-left: 35%;
6081
+ }
6082
+ .col-sm-offset-22 {
6083
+ margin-left: 36.66666666666667%;
6084
+ }
6085
+ .col-sm-offset-23 {
6086
+ margin-left: 38.33333333333333%;
6087
+ }
6088
+ .col-sm-offset-24 {
6089
+ margin-left: 40%;
6090
+ }
6091
+ .col-sm-offset-25 {
6092
+ margin-left: 41.66666666666667%;
6093
+ }
6094
+ .col-sm-offset-26 {
6095
+ margin-left: 43.33333333333333%;
6096
+ }
6097
+ .col-sm-offset-27 {
6098
+ margin-left: 45%;
6099
+ }
6100
+ .col-sm-offset-28 {
6101
+ margin-left: 46.66666666666667%;
6102
+ }
6103
+ .col-sm-offset-29 {
6104
+ margin-left: 48.33333333333333%;
6105
+ }
6106
+ .col-sm-offset-30 {
6107
+ margin-left: 50%;
6108
+ }
6109
+ .col-sm-offset-31 {
6110
+ margin-left: 51.66666666666667%;
6111
+ }
6112
+ .col-sm-offset-32 {
6113
+ margin-left: 53.33333333333333%;
6114
+ }
6115
+ .col-sm-offset-33 {
6116
+ margin-left: 55%;
6117
+ }
6118
+ .col-sm-offset-34 {
6119
+ margin-left: 56.66666666666667%;
6120
+ }
6121
+ .col-sm-offset-35 {
6122
+ margin-left: 58.33333333333333%;
6123
+ }
6124
+ .col-sm-offset-36 {
6125
+ margin-left: 60%;
6126
+ }
6127
+ .col-sm-offset-37 {
6128
+ margin-left: 61.66666666666667%;
6129
+ }
6130
+ .col-sm-offset-38 {
6131
+ margin-left: 63.33333333333333%;
6132
+ }
6133
+ .col-sm-offset-39 {
6134
+ margin-left: 65%;
6135
+ }
6136
+ .col-sm-offset-40 {
6137
+ margin-left: 66.66666666666667%;
6138
+ }
6139
+ .col-sm-offset-41 {
6140
+ margin-left: 68.33333333333333%;
6141
+ }
6142
+ .col-sm-offset-42 {
6143
+ margin-left: 70%;
6144
+ }
6145
+ .col-sm-offset-43 {
6146
+ margin-left: 71.66666666666667%;
6147
+ }
6148
+ .col-sm-offset-44 {
6149
+ margin-left: 73.33333333333333%;
6150
+ }
6151
+ .col-sm-offset-45 {
6152
+ margin-left: 75%;
6153
+ }
6154
+ .col-sm-offset-46 {
6155
+ margin-left: 76.66666666666667%;
6156
+ }
6157
+ .col-sm-offset-47 {
6158
+ margin-left: 78.33333333333333%;
6159
+ }
6160
+ .col-sm-offset-48 {
6161
+ margin-left: 80%;
6162
+ }
6163
+ .col-sm-offset-49 {
6164
+ margin-left: 81.66666666666667%;
6165
+ }
6166
+ .col-sm-offset-50 {
6167
+ margin-left: 83.33333333333333%;
6168
+ }
6169
+ .col-sm-offset-51 {
6170
+ margin-left: 85%;
6171
+ }
6172
+ .col-sm-offset-52 {
6173
+ margin-left: 86.66666666666667%;
6174
+ }
6175
+ .col-sm-offset-53 {
6176
+ margin-left: 88.33333333333333%;
6177
+ }
6178
+ .col-sm-offset-54 {
6179
+ margin-left: 90%;
6180
+ }
6181
+ .col-sm-offset-55 {
6182
+ margin-left: 91.66666666666667%;
6183
+ }
6184
+ .col-sm-offset-56 {
6185
+ margin-left: 93.33333333333333%;
6186
+ }
6187
+ .col-sm-offset-57 {
6188
+ margin-left: 95%;
6189
+ }
6190
+ .col-sm-offset-58 {
6191
+ margin-left: 96.66666666666667%;
6192
+ }
6193
+ .col-sm-offset-59 {
6194
+ margin-left: 98.33333333333333%;
6195
+ }
6196
+
6197
+ /*common tablet */
6198
+ .fixed-width-520 {
6199
+ margin: 0px auto;
6200
+ float: none;
6201
+ }
6202
+ .fixed-width-580 {
6203
+ margin: 0px auto;
6204
+ float: none;
6205
+ }
6206
+ .fixed-width-680 {
6207
+ margin: 0px auto;
6208
+ float: none;
6209
+ }
6210
+ .fixed-width-700 {
6211
+ margin: 0px auto;
6212
+ float: none;
6213
+ width: 700px !important;
6214
+ }
6215
+ .fixed-width-730 {
6216
+ margin: 0px auto;
6217
+ float: none;
6218
+ width: 730px !important;
6219
+ }
6220
+ .fixed-width-800 {
6221
+ margin: 0px auto;
6222
+ float: none;
6223
+ width: 800px !important;
6224
+ }
6225
+ .fixed-width-940 {
6226
+ margin: 0px auto;
6227
+ float: none;
6228
+ }
6229
+ .fixed-width-980 {
6230
+ margin: 0px auto;
6231
+ float: none;
6232
+ }
6233
+ .fixed-width-1080 {
6234
+ margin: 0px auto;
6235
+ float: none;
6236
+ }
6237
+ .fixed-width-1140 {
6238
+ margin: 0px auto;
6239
+ float: none;
6240
+ }
6241
+
6242
+ }
6243
+ @media (min-width: 980px) {
6244
+
6245
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md-13, .col-md-14, .col-md-15, .col-md-16, .col-md-17, .col-md-18, .col-md-19, .col-md-20, .col-md-21, .col-md-22, .col-md-23, .col-md-24, .col-md-25, .col-md-26, .col-md-27, .col-md-28, .col-md-29, .col-md-30, .col-md-31, .col-md-32, .col-md-33, .col-md-34, .col-md-35, .col-md-36, .col-md-37, .col-md-38, .col-md-39, .col-md-40, .col-md-41, .col-md-42, .col-md-43, .col-md-44, .col-md-45, .col-md-46, .col-md-47, .col-md-48, .col-md-49, .col-md-50, .col-md-51, .col-md-52, .col-md-53, .col-md-54, .col-md-55, .col-md-56, .col-md-57, .col-md-58, .col-md-59 {
6246
+ float: left;
6247
+ }
6248
+ .col-md-1 {
6249
+ width: 1.666666666666667%;
6250
+ }
6251
+ .col-md-2 {
6252
+ width: 3.333333333333333%;
6253
+ }
6254
+ .col-md-3 {
6255
+ width: 5%;
6256
+ }
6257
+ .col-md-4 {
6258
+ width: 6.666666666666667%;
6259
+ }
6260
+ .col-md-5 {
6261
+ width: 8.333333333333333%;
6262
+ }
6263
+ .col-md-6 {
6264
+ width: 10%;
6265
+ }
6266
+ .col-md-7 {
6267
+ width: 11.66666666666667%;
6268
+ }
6269
+ .col-md-8 {
6270
+ width: 13.33333333333333%;
6271
+ }
6272
+ .col-md-9 {
6273
+ width: 15%;
6274
+ }
6275
+ .col-md-10 {
6276
+ width: 16.66666666666667%;
6277
+ }
6278
+ .col-md-11 {
6279
+ width: 18.33333333333333%;
6280
+ }
6281
+ .col-md-12 {
6282
+ width: 20%;
6283
+ }
6284
+ .col-md-13 {
6285
+ width: 21.66666666666667%;
6286
+ }
6287
+ .col-md-14 {
6288
+ width: 23.33333333333333%;
6289
+ }
6290
+ .col-md-15 {
6291
+ width: 25%;
6292
+ }
6293
+ .col-md-16 {
6294
+ width: 26.66666666666667%;
6295
+ }
6296
+ .col-md-17 {
6297
+ width: 28.33333333333333%;
6298
+ }
6299
+ .col-md-18 {
6300
+ width: 30%;
6301
+ }
6302
+ .col-md-19 {
6303
+ width: 31.66666666666667%;
6304
+ }
6305
+ .col-md-20 {
6306
+ width: 33.33333333333333%;
6307
+ }
6308
+ .col-md-21 {
6309
+ width: 35%;
6310
+ }
6311
+ .col-md-22 {
6312
+ width: 36.66666666666667%;
6313
+ }
6314
+ .col-md-23 {
6315
+ width: 38.33333333333333%;
6316
+ }
6317
+ .col-md-24 {
6318
+ width: 40%;
6319
+ }
6320
+ .col-md-25 {
6321
+ width: 41.66666666666667%;
6322
+ }
6323
+ .col-md-26 {
6324
+ width: 43.33333333333333%;
6325
+ }
6326
+ .col-md-27 {
6327
+ width: 45%;
6328
+ }
6329
+ .col-md-28 {
6330
+ width: 46.66666666666667%;
6331
+ }
6332
+ .col-md-29 {
6333
+ width: 48.33333333333333%;
6334
+ }
6335
+ .col-md-30 {
6336
+ width: 50%;
6337
+ }
6338
+ .col-md-31 {
6339
+ width: 51.66666666666667%;
6340
+ }
6341
+ .col-md-32 {
6342
+ width: 53.33333333333333%;
6343
+ }
6344
+ .col-md-33 {
6345
+ width: 55%;
6346
+ }
6347
+ .col-md-34 {
6348
+ width: 56.66666666666667%;
6349
+ }
6350
+ .col-md-35 {
6351
+ width: 58.33333333333333%;
6352
+ }
6353
+ .col-md-36 {
6354
+ width: 60%;
6355
+ }
6356
+ .col-md-37 {
6357
+ width: 61.66666666666667%;
6358
+ }
6359
+ .col-md-38 {
6360
+ width: 63.33333333333333%;
6361
+ }
6362
+ .col-md-39 {
6363
+ width: 65%;
6364
+ }
6365
+ .col-md-40 {
6366
+ width: 66.66666666666667%;
6367
+ }
6368
+ .col-md-41 {
6369
+ width: 68.33333333333333%;
6370
+ }
6371
+ .col-md-42 {
6372
+ width: 70%;
6373
+ }
6374
+ .col-md-43 {
6375
+ width: 71.66666666666667%;
6376
+ }
6377
+ .col-md-44 {
6378
+ width: 73.33333333333333%;
6379
+ }
6380
+ .col-md-45 {
6381
+ width: 75%;
6382
+ }
6383
+ .col-md-46 {
6384
+ width: 76.66666666666667%;
6385
+ }
6386
+ .col-md-47 {
6387
+ width: 78.33333333333333%;
6388
+ }
6389
+ .col-md-48 {
6390
+ width: 80%;
6391
+ }
6392
+ .col-md-49 {
6393
+ width: 81.66666666666667%;
6394
+ }
6395
+ .col-md-50 {
6396
+ width: 83.33333333333333%;
6397
+ }
6398
+ .col-md-51 {
6399
+ width: 85%;
6400
+ }
6401
+ .col-md-52 {
6402
+ width: 86.66666666666667%;
6403
+ }
6404
+ .col-md-53 {
6405
+ width: 88.33333333333333%;
6406
+ }
6407
+ .col-md-54 {
6408
+ width: 90%;
6409
+ }
6410
+ .col-md-55 {
6411
+ width: 91.66666666666667%;
6412
+ }
6413
+ .col-md-56 {
6414
+ width: 93.33333333333333%;
6415
+ }
6416
+ .col-md-57 {
6417
+ width: 95%;
6418
+ }
6419
+ .col-md-58 {
6420
+ width: 96.66666666666667%;
6421
+ }
6422
+ .col-md-59 {
6423
+ width: 98.33333333333333%;
6424
+ }
6425
+ .col-md-60 {
6426
+ width: 100%;
6427
+ }
6428
+ .col-md-push-0 {
6429
+ left: auto
6430
+ }
6431
+ .col-md-push-1 {
6432
+ left: 1.666666666666667%;
6433
+ }
6434
+ .col-md-push-2 {
6435
+ left: 3.333333333333333%;
6436
+ }
6437
+ .col-md-push-3 {
6438
+ left: 5%;
6439
+ }
6440
+ .col-md-push-4 {
6441
+ left: 6.666666666666667%;
6442
+ }
6443
+ .col-md-push-5 {
6444
+ left: 8.333333333333333%;
6445
+ }
6446
+ .col-md-push-6 {
6447
+ left: 10%;
6448
+ }
6449
+ .col-md-push-7 {
6450
+ left: 11.66666666666667%;
6451
+ }
6452
+ .col-md-push-8 {
6453
+ left: 13.33333333333333%;
6454
+ }
6455
+ .col-md-push-9 {
6456
+ left: 15%;
6457
+ }
6458
+ .col-md-push-10 {
6459
+ left: 16.66666666666667%;
6460
+ }
6461
+ .col-md-push-11 {
6462
+ left: 18.33333333333333%;
6463
+ }
6464
+ .col-md-push-12 {
6465
+ left: 20%;
6466
+ }
6467
+ .col-md-push-13 {
6468
+ left: 21.66666666666667%;
6469
+ }
6470
+ .col-md-push-14 {
6471
+ left: 23.33333333333333%;
6472
+ }
6473
+ .col-md-push-15 {
6474
+ left: 25%;
6475
+ }
6476
+ .col-md-push-16 {
6477
+ left: 26.66666666666667%;
6478
+ }
6479
+ .col-md-push-17 {
6480
+ left: 28.33333333333333%;
6481
+ }
6482
+ .col-md-push-18 {
6483
+ left: 30%;
6484
+ }
6485
+ .col-md-push-19 {
6486
+ left: 31.66666666666667%;
6487
+ }
6488
+ .col-md-push-20 {
6489
+ left: 33.33333333333333%;
6490
+ }
6491
+ .col-md-push-21 {
6492
+ left: 35%;
6493
+ }
6494
+ .col-md-push-22 {
6495
+ left: 36.66666666666667%;
6496
+ }
6497
+ .col-md-push-23 {
6498
+ left: 38.33333333333333%;
6499
+ }
6500
+ .col-md-push-24 {
6501
+ left: 40%;
6502
+ }
6503
+ .col-md-push-25 {
6504
+ left: 41.66666666666667%;
6505
+ }
6506
+ .col-md-push-26 {
6507
+ left: 43.33333333333333%;
6508
+ }
6509
+ .col-md-push-27 {
6510
+ left: 45%;
6511
+ }
6512
+ .col-md-push-28 {
6513
+ left: 46.66666666666667%;
6514
+ }
6515
+ .col-md-push-29 {
6516
+ left: 48.33333333333333%;
6517
+ }
6518
+ .col-md-push-30 {
6519
+ left: 50%;
6520
+ }
6521
+ .col-md-push-31 {
6522
+ left: 51.66666666666667%;
6523
+ }
6524
+ .col-md-push-32 {
6525
+ left: 53.33333333333333%;
6526
+ }
6527
+ .col-md-push-33 {
6528
+ left: 55%;
6529
+ }
6530
+ .col-md-push-34 {
6531
+ left: 56.66666666666667%;
6532
+ }
6533
+ .col-md-push-35 {
6534
+ left: 58.33333333333333%;
6535
+ }
6536
+ .col-md-push-36 {
6537
+ left: 60%;
6538
+ }
6539
+ .col-md-push-37 {
6540
+ left: 61.66666666666667%;
6541
+ }
6542
+ .col-md-push-38 {
6543
+ left: 63.33333333333333%;
6544
+ }
6545
+ .col-md-push-39 {
6546
+ left: 65%;
6547
+ }
6548
+ .col-md-push-40 {
6549
+ left: 66.66666666666667%;
6550
+ }
6551
+ .col-md-push-41 {
6552
+ left: 68.33333333333333%;
6553
+ }
6554
+ .col-md-push-42 {
6555
+ left: 70%;
6556
+ }
6557
+ .col-md-push-43 {
6558
+ left: 71.66666666666667%;
6559
+ }
6560
+ .col-md-push-44 {
6561
+ left: 73.33333333333333%;
6562
+ }
6563
+ .col-md-push-45 {
6564
+ left: 75%;
6565
+ }
6566
+ .col-md-push-46 {
6567
+ left: 76.66666666666667%;
6568
+ }
6569
+ .col-md-push-47 {
6570
+ left: 78.33333333333333%;
6571
+ }
6572
+ .col-md-push-48 {
6573
+ left: 80%;
6574
+ }
6575
+ .col-md-push-49 {
6576
+ left: 81.66666666666667%;
6577
+ }
6578
+ .col-md-push-50 {
6579
+ left: 83.33333333333333%;
6580
+ }
6581
+ .col-md-push-51 {
6582
+ left: 85%;
6583
+ }
6584
+ .col-md-push-52 {
6585
+ left: 86.66666666666667%;
6586
+ }
6587
+ .col-md-push-53 {
6588
+ left: 88.33333333333333%;
6589
+ }
6590
+ .col-md-push-54 {
6591
+ left: 90%;
6592
+ }
6593
+ .col-md-push-55 {
6594
+ left: 91.66666666666667%;
6595
+ }
6596
+ .col-md-push-56 {
6597
+ left: 93.33333333333333%;
6598
+ }
6599
+ .col-md-push-57 {
6600
+ left: 95%;
6601
+ }
6602
+ .col-md-push-58 {
6603
+ left: 96.66666666666667%;
6604
+ }
6605
+ .col-md-push-59 {
6606
+ left: 98.33333333333333%;
6607
+ }
6608
+ .col-md-pull-0 {
6609
+ right: auto
6610
+ }
6611
+ .col-md-pull-1 {
6612
+ right: 1.666666666666667%;
6613
+ }
6614
+ .col-md-pull-2 {
6615
+ right: 3.333333333333333%;
6616
+ }
6617
+ .col-md-pull-3 {
6618
+ right: 5%;
6619
+ }
6620
+ .col-md-pull-4 {
6621
+ right: 6.666666666666667%;
6622
+ }
6623
+ .col-md-pull-5 {
6624
+ right: 8.333333333333333%;
6625
+ }
6626
+ .col-md-pull-6 {
6627
+ right: 10%;
6628
+ }
6629
+ .col-md-pull-7 {
6630
+ right: 11.66666666666667%;
6631
+ }
6632
+ .col-md-pull-8 {
6633
+ right: 13.33333333333333%;
6634
+ }
6635
+ .col-md-pull-9 {
6636
+ right: 15%;
6637
+ }
6638
+ .col-md-pull-10 {
6639
+ right: 16.66666666666667%;
6640
+ }
6641
+ .col-md-pull-11 {
6642
+ right: 18.33333333333333%;
6643
+ }
6644
+ .col-md-pull-12 {
6645
+ right: 20%;
6646
+ }
6647
+ .col-md-pull-13 {
6648
+ right: 21.66666666666667%;
6649
+ }
6650
+ .col-md-pull-14 {
6651
+ right: 23.33333333333333%;
6652
+ }
6653
+ .col-md-pull-15 {
6654
+ right: 25%;
6655
+ }
6656
+ .col-md-pull-16 {
6657
+ right: 26.66666666666667%;
6658
+ }
6659
+ .col-md-pull-17 {
6660
+ right: 28.33333333333333%;
6661
+ }
6662
+ .col-md-pull-18 {
6663
+ right: 30%;
6664
+ }
6665
+ .col-md-pull-19 {
6666
+ right: 31.66666666666667%;
6667
+ }
6668
+ .col-md-pull-20 {
6669
+ right: 33.33333333333333%;
6670
+ }
6671
+ .col-md-pull-21 {
6672
+ right: 35%;
6673
+ }
6674
+ .col-md-pull-22 {
6675
+ right: 36.66666666666667%;
6676
+ }
6677
+ .col-md-pull-23 {
6678
+ right: 38.33333333333333%;
6679
+ }
6680
+ .col-md-pull-24 {
6681
+ right: 40%;
6682
+ }
6683
+ .col-md-pull-25 {
6684
+ right: 41.66666666666667%;
6685
+ }
6686
+ .col-md-pull-26 {
6687
+ right: 43.33333333333333%;
6688
+ }
6689
+ .col-md-pull-27 {
6690
+ right: 45%;
6691
+ }
6692
+ .col-md-pull-28 {
6693
+ right: 46.66666666666667%;
6694
+ }
6695
+ .col-md-pull-29 {
6696
+ right: 48.33333333333333%;
6697
+ }
6698
+ .col-md-pull-30 {
6699
+ right: 50%;
6700
+ }
6701
+ .col-md-pull-31 {
6702
+ right: 51.66666666666667%;
6703
+ }
6704
+ .col-md-pull-32 {
6705
+ right: 53.33333333333333%;
6706
+ }
6707
+ .col-md-pull-33 {
6708
+ right: 55%;
6709
+ }
6710
+ .col-md-pull-34 {
6711
+ right: 56.66666666666667%;
6712
+ }
6713
+ .col-md-pull-35 {
6714
+ right: 58.33333333333333%;
6715
+ }
6716
+ .col-md-pull-36 {
6717
+ right: 60%;
6718
+ }
6719
+ .col-md-pull-37 {
6720
+ right: 61.66666666666667%;
6721
+ }
6722
+ .col-md-pull-38 {
6723
+ right: 63.33333333333333%;
6724
+ }
6725
+ .col-md-pull-39 {
6726
+ right: 65%;
6727
+ }
6728
+ .col-md-pull-40 {
6729
+ right: 66.66666666666667%;
6730
+ }
6731
+ .col-md-pull-41 {
6732
+ right: 68.33333333333333%;
6733
+ }
6734
+ .col-md-pull-42 {
6735
+ right: 70%;
6736
+ }
6737
+ .col-md-pull-43 {
6738
+ right: 71.66666666666667%;
6739
+ }
6740
+ .col-md-pull-44 {
6741
+ right: 73.33333333333333%;
6742
+ }
6743
+ .col-md-pull-45 {
6744
+ right: 75%;
6745
+ }
6746
+ .col-md-pull-46 {
6747
+ right: 76.66666666666667%;
6748
+ }
6749
+ .col-md-pull-47 {
6750
+ right: 78.33333333333333%;
6751
+ }
6752
+ .col-md-pull-48 {
6753
+ right: 80%;
6754
+ }
6755
+ .col-md-pull-49 {
6756
+ right: 81.66666666666667%;
6757
+ }
6758
+ .col-md-pull-50 {
6759
+ right: 83.33333333333333%;
6760
+ }
6761
+ .col-md-pull-51 {
6762
+ right: 85%;
6763
+ }
6764
+ .col-md-pull-52 {
6765
+ right: 86.66666666666667%;
6766
+ }
6767
+ .col-md-pull-53 {
6768
+ right: 88.33333333333333%;
6769
+ }
6770
+ .col-md-pull-54 {
6771
+ right: 90%;
6772
+ }
6773
+ .col-md-pull-55 {
6774
+ right: 91.66666666666667%;
6775
+ }
6776
+ .col-md-pull-56 {
6777
+ right: 93.33333333333333%;
6778
+ }
6779
+ .col-md-pull-57 {
6780
+ right: 95%;
6781
+ }
6782
+ .col-md-pull-58 {
6783
+ right: 96.66666666666667%;
6784
+ }
6785
+ .col-md-pull-59 {
6786
+ right: 98.33333333333333%;
6787
+ }
6788
+ .col-md-offset-0 {
6789
+ margin-left: 0
6790
+ }
6791
+ .col-md-offset-1 {
6792
+ margin-left: 1.666666666666667%;
6793
+ }
6794
+ .col-md-offset-2 {
6795
+ margin-left: 3.333333333333333%;
6796
+ }
6797
+ .col-md-offset-3 {
6798
+ margin-left: 5%;
6799
+ }
6800
+ .col-md-offset-4 {
6801
+ margin-left: 6.666666666666667%;
6802
+ }
6803
+ .col-md-offset-5 {
6804
+ margin-left: 8.333333333333333%;
6805
+ }
6806
+ .col-md-offset-6 {
6807
+ margin-left: 10%;
6808
+ }
6809
+ .col-md-offset-7 {
6810
+ margin-left: 11.66666666666667%;
6811
+ }
6812
+ .col-md-offset-8 {
6813
+ margin-left: 13.33333333333333%;
6814
+ }
6815
+ .col-md-offset-9 {
6816
+ margin-left: 15%;
6817
+ }
6818
+ .col-md-offset-10 {
6819
+ margin-left: 16.66666666666667%;
6820
+ }
6821
+ .col-md-offset-11 {
6822
+ margin-left: 18.33333333333333%;
6823
+ }
6824
+ .col-md-offset-12 {
6825
+ margin-left: 20%;
6826
+ }
6827
+ .col-md-offset-13 {
6828
+ margin-left: 21.66666666666667%;
6829
+ }
6830
+ .col-md-offset-14 {
6831
+ margin-left: 23.33333333333333%;
6832
+ }
6833
+ .col-md-offset-15 {
6834
+ margin-left: 25%;
6835
+ }
6836
+ .col-md-offset-16 {
6837
+ margin-left: 26.66666666666667%;
6838
+ }
6839
+ .col-md-offset-17 {
6840
+ margin-left: 28.33333333333333%;
6841
+ }
6842
+ .col-md-offset-18 {
6843
+ margin-left: 30%;
6844
+ }
6845
+ .col-md-offset-19 {
6846
+ margin-left: 31.66666666666667%;
6847
+ }
6848
+ .col-md-offset-20 {
6849
+ margin-left: 33.33333333333333%;
6850
+ }
6851
+ .col-md-offset-21 {
6852
+ margin-left: 35%;
6853
+ }
6854
+ .col-md-offset-22 {
6855
+ margin-left: 36.66666666666667%;
6856
+ }
6857
+ .col-md-offset-23 {
6858
+ margin-left: 38.33333333333333%;
6859
+ }
6860
+ .col-md-offset-24 {
6861
+ margin-left: 40%;
6862
+ }
6863
+ .col-md-offset-25 {
6864
+ margin-left: 41.66666666666667%;
6865
+ }
6866
+ .col-md-offset-26 {
6867
+ margin-left: 43.33333333333333%;
6868
+ }
6869
+ .col-md-offset-27 {
6870
+ margin-left: 45%;
6871
+ }
6872
+ .col-md-offset-28 {
6873
+ margin-left: 46.66666666666667%;
6874
+ }
6875
+ .col-md-offset-29 {
6876
+ margin-left: 48.33333333333333%;
6877
+ }
6878
+ .col-md-offset-30 {
6879
+ margin-left: 50%;
6880
+ }
6881
+ .col-md-offset-31 {
6882
+ margin-left: 51.66666666666667%;
6883
+ }
6884
+ .col-md-offset-32 {
6885
+ margin-left: 53.33333333333333%;
6886
+ }
6887
+ .col-md-offset-33 {
6888
+ margin-left: 55%;
6889
+ }
6890
+ .col-md-offset-34 {
6891
+ margin-left: 56.66666666666667%;
6892
+ }
6893
+ .col-md-offset-35 {
6894
+ margin-left: 58.33333333333333%;
6895
+ }
6896
+ .col-md-offset-36 {
6897
+ margin-left: 60%;
6898
+ }
6899
+ .col-md-offset-37 {
6900
+ margin-left: 61.66666666666667%;
6901
+ }
6902
+ .col-md-offset-38 {
6903
+ margin-left: 63.33333333333333%;
6904
+ }
6905
+ .col-md-offset-39 {
6906
+ margin-left: 65%;
6907
+ }
6908
+ .col-md-offset-40 {
6909
+ margin-left: 66.66666666666667%;
6910
+ }
6911
+ .col-md-offset-41 {
6912
+ margin-left: 68.33333333333333%;
6913
+ }
6914
+ .col-md-offset-42 {
6915
+ margin-left: 70%;
6916
+ }
6917
+ .col-md-offset-43 {
6918
+ margin-left: 71.66666666666667%;
6919
+ }
6920
+ .col-md-offset-44 {
6921
+ margin-left: 73.33333333333333%;
6922
+ }
6923
+ .col-md-offset-45 {
6924
+ margin-left: 75%;
6925
+ }
6926
+ .col-md-offset-46 {
6927
+ margin-left: 76.66666666666667%;
6928
+ }
6929
+ .col-md-offset-47 {
6930
+ margin-left: 78.33333333333333%;
6931
+ }
6932
+ .col-md-offset-48 {
6933
+ margin-left: 80%;
6934
+ }
6935
+ .col-md-offset-49 {
6936
+ margin-left: 81.6666666666667%;
6937
+ }
6938
+ .col-md-offset-50 {
6939
+ margin-left: 83.33333333333333%;
6940
+ }
6941
+ .col-md-offset-51 {
6942
+ margin-left: 85%;
6943
+ }
6944
+ .col-md-offset-52 {
6945
+ margin-left: 86.66666666666667%;
6946
+ }
6947
+ .col-md-offset-53 {
6948
+ margin-left: 88.33333333333333%;
6949
+ }
6950
+ .col-md-offset-54 {
6951
+ margin-left: 90%;
6952
+ }
6953
+ .col-md-offset-55 {
6954
+ margin-left: 91.66666666666667%;
6955
+ }
6956
+ .col-md-offset-56 {
6957
+ margin-left: 93.33333333333333%;
6958
+ }
6959
+ .col-md-offset-57 {
6960
+ margin-left: 95%;
6961
+ }
6962
+ .col-md-offset-58 {
6963
+ margin-left: 96.66666666666667%;
6964
+ }
6965
+ .col-md-offset-59 {
6966
+ margin-left: 98.33333333333333%;
6967
+ }
6968
+ /*commom desktop */
6969
+ .fixed-width-520 {
6970
+ margin: 0px auto;
6971
+ float: none;
6972
+ width: 520px !important;
6973
+ }
6974
+ .fixed-width-580 {
6975
+ margin: 0px auto;
6976
+ float: none;
6977
+ width: 580px !important;
6978
+ }
6979
+ .fixed-width-680 {
6980
+ margin: 0px auto;
6981
+ float: none;
6982
+ width: 680px !important;
6983
+ }
6984
+ .fixed-width-700 {
6985
+ margin: 0px auto;
6986
+ float: none;
6987
+ width: 700px;
6988
+ }
6989
+ .fixed-width-730 {
6990
+ margin: 0px auto;
6991
+ float: none;
6992
+ width: 730px;
6993
+ }
6994
+ .fixed-width-800 {
6995
+ margin: 0px auto;
6996
+ float: none;
6997
+ width: 800px;
6998
+ }
6999
+ .fixed-width-940 {
7000
+ margin: 0px auto;
7001
+ float: none;
7002
+ width: 940px;
7003
+ }
7004
+ .fixed-width-980 {
7005
+ margin: 0px auto;
7006
+ float: none;
7007
+ width: 980px;
7008
+ }
7009
+ .fixed-width-1080 {
7010
+ margin: 0px auto;
7011
+ float: none;
7012
+ width: 1080px;
7013
+ }
7014
+ .fixed-width-1140 {
7015
+ margin: 0px auto;
7016
+ float: none;
7017
+ width: 1140px;
7018
+ }
7019
+ .main-container {
7020
+ width: 100%;
7021
+ float: left;
7022
+ }
7023
+ .width-570 {
7024
+ width: 570px;
7025
+ }
7026
+ .width-680 {
7027
+ width: 680px;
7028
+ }
7029
+ /* signed up desktop*/
7030
+ .signup-block
7031
+ {
7032
+ width:740px;
7033
+ margin:60px 0px 0px 120px;
7034
+ }
7035
+ /* dashboard widget conf desktop*/
7036
+
7037
+ .layout-block
7038
+ {
7039
+ float: left;
7040
+ width:442px;
7041
+ }
7042
+ }
7043
+ @media (min-width: 1200px) {
7044
+
7045
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-13, .col-lg-14, .col-lg-15, .col-lg-16, .col-lg-17, .col-lg-18, .col-lg-19, .col-lg-20, .col-lg-21, .col-lg-22, .col-lg-23, .col-lg-24, .col-lg-25, .col-lg-26, .col-lg-27, .col-lg-28, .col-lg-29, .col-lg-30, .col-lg-31, .col-lg-32, .col-lg-33, .col-lg-34, .col-lg-35, .col-lg-36, .col-lg-37, .col-lg-38, .col-lg-39, .col-lg-40, .col-lg-41, .col-lg-42, .col-lg-43, .col-lg-44, .col-lg-45, .col-lg-46, .col-lg-47, .col-lg-48, .col-lg-49, .col-lg-50, .col-lg-51, .col-lg-52, .col-lg-53, .col-lg-54, .col-lg-55, .col-lg-56, .col-lg-57, .col-lg-58, .col-lg-59 {
7046
+ float: left;
7047
+ }
7048
+ .col-lg-1 {
7049
+ width: 1.666666666666667%;
7050
+ }
7051
+ .col-lg-2 {
7052
+ width: 3.333333333333333%;
7053
+ }
7054
+ .col-lg-3 {
7055
+ width: 5%;
7056
+ }
7057
+ .col-lg-4 {
7058
+ width: 6.666666666666667%;
7059
+ }
7060
+ .col-lg-5 {
7061
+ width: 8.333333333333333%;
7062
+ }
7063
+ .col-lg-6 {
7064
+ width: 10%;
7065
+ }
7066
+ .col-lg-7 {
7067
+ width: 11.66666666666667%;
7068
+ }
7069
+ .col-lg-8 {
7070
+ width: 13.33333333333333%;
7071
+ }
7072
+ .col-lg-9 {
7073
+ width: 15%;
7074
+ }
7075
+ .col-lg-10 {
7076
+ width: 16.66666666666667%;
7077
+ }
7078
+ .col-lg-11 {
7079
+ width: 18.33333333333333%;
7080
+ }
7081
+ .col-lg-12 {
7082
+ width: 20%;
7083
+ }
7084
+ .col-lg-13 {
7085
+ width: 21.66666666666667%;
7086
+ }
7087
+ .col-lg-14 {
7088
+ width: 23.33333333333333%;
7089
+ }
7090
+ .col-lg-15 {
7091
+ width: 25%;
7092
+ }
7093
+ .col-lg-16 {
7094
+ width: 26.66666666666667%;
7095
+ }
7096
+ .col-lg-17 {
7097
+ width: 28.33333333333333%;
7098
+ }
7099
+ .col-lg-18 {
7100
+ width: 30%;
7101
+ }
7102
+ .col-lg-19 {
7103
+ width: 31.66666666666667%;
7104
+ }
7105
+ .col-lg-20 {
7106
+ width: 33.33333333333333%;
7107
+ }
7108
+ .col-lg-21 {
7109
+ width: 35%;
7110
+ }
7111
+ .col-lg-22 {
7112
+ width: 36.66666666666667%;
7113
+ }
7114
+ .col-lg-23 {
7115
+ width: 38.33333333333333%;
7116
+ }
7117
+ .col-lg-24 {
7118
+ width: 40%;
7119
+ }
7120
+ .col-lg-25 {
7121
+ width: 41.66666666666667%;
7122
+ }
7123
+ .col-lg-26 {
7124
+ width: 43.33333333333333%;
7125
+ }
7126
+ .col-lg-27 {
7127
+ width: 45%;
7128
+ }
7129
+ .col-lg-28 {
7130
+ width: 46.66666666666667%;
7131
+ }
7132
+ .col-lg-29 {
7133
+ width: 48.33333333333333%;
7134
+ }
7135
+ .col-lg-30 {
7136
+ width: 50%;
7137
+ }
7138
+ .col-lg-31 {
7139
+ width: 51.66666666666667%;
7140
+ }
7141
+ .col-lg-32 {
7142
+ width: 53.33333333333333%;
7143
+ }
7144
+ .col-lg-33 {
7145
+ width: 55%;
7146
+ }
7147
+ .col-lg-34 {
7148
+ width: 56.66666666666667%;
7149
+ }
7150
+ .col-lg-35 {
7151
+ width: 58.33333333333333%;
7152
+ }
7153
+ .col-lg-36 {
7154
+ width: 60%;
7155
+ }
7156
+ .col-lg-37 {
7157
+ width: 61.66666666666667%;
7158
+ }
7159
+ .col-lg-38 {
7160
+ width: 63.33333333333333%;
7161
+ }
7162
+ .col-lg-39 {
7163
+ width: 65%;
7164
+ }
7165
+ .col-lg-40 {
7166
+ width: 66.66666666666667%;
7167
+ }
7168
+ .col-lg-41 {
7169
+ width: 68.33333333333333%;
7170
+ }
7171
+ .col-lg-42 {
7172
+ width: 70%;
7173
+ }
7174
+ .col-lg-43 {
7175
+ width: 71.66666666666667%;
7176
+ }
7177
+ .col-lg-44 {
7178
+ width: 73.33333333333333%;
7179
+ }
7180
+ .col-lg-45 {
7181
+ width: 75%;
7182
+ }
7183
+ .col-lg-46 {
7184
+ width: 76.66666666666667%;
7185
+ }
7186
+ .col-lg-47 {
7187
+ width: 78.33333333333333%;
7188
+ }
7189
+ .col-lg-48 {
7190
+ width: 80%;
7191
+ }
7192
+ .col-lg-49 {
7193
+ width: 81.66666666666667%;
7194
+ }
7195
+ .col-lg-50 {
7196
+ width: 83.33333333333333%;
7197
+ }
7198
+ .col-lg-51 {
7199
+ width: 85%;
7200
+ }
7201
+ .col-lg-52 {
7202
+ width: 86.66666666666667%;
7203
+ }
7204
+ .col-lg-53 {
7205
+ width: 88.33333333333333%;
7206
+ }
7207
+ .col-lg-54 {
7208
+ width: 90%;
7209
+ }
7210
+ .col-lg-55 {
7211
+ width: 91.66666666666667%;
7212
+ }
7213
+ .col-lg-56 {
7214
+ width: 93.33333333333333%;
7215
+ }
7216
+ .col-lg-57 {
7217
+ width: 95%;
7218
+ }
7219
+ .col-lg-58 {
7220
+ width: 96.66666666666667%;
7221
+ }
7222
+ .col-lg-59 {
7223
+ width: 98.33333333333333%;
7224
+ }
7225
+ .col-lg-60 {
7226
+ width: 100%;
7227
+ }
7228
+ .col-lg-push-0 {
7229
+ left: auto
7230
+ }
7231
+ .col-lg-push-1 {
7232
+ left: 1.666666666666667%;
7233
+ }
7234
+ .col-lg-push-2 {
7235
+ left: 3.333333333333333%;
7236
+ }
7237
+ .col-lg-push-3 {
7238
+ left: 5%;
7239
+ }
7240
+ .col-lg-push-4 {
7241
+ left: 6.666666666666667%;
7242
+ }
7243
+ .col-lg-push-5 {
7244
+ left: 8.333333333333333%;
7245
+ }
7246
+ .col-lg-push-6 {
7247
+ left: 10%;
7248
+ }
7249
+ .col-lg-push-7 {
7250
+ left: 11.66666666666667%;
7251
+ }
7252
+ .col-lg-push-8 {
7253
+ left: 13.33333333333333%;
7254
+ }
7255
+ .col-lg-push-9 {
7256
+ left: 15%;
7257
+ }
7258
+ .col-lg-push-10 {
7259
+ left: 16.66666666666667%;
7260
+ }
7261
+ .col-lg-push-11 {
7262
+ left: 18.33333333333333%;
7263
+ }
7264
+ .col-lg-push-12 {
7265
+ left: 20%;
7266
+ }
7267
+ .col-lg-push-13 {
7268
+ left: 21.66666666666667%;
7269
+ }
7270
+ .col-lg-push-14 {
7271
+ left: 23.33333333333333%;
7272
+ }
7273
+ .col-lg-push-15 {
7274
+ left: 25%;
7275
+ }
7276
+ .col-lg-push-16 {
7277
+ left: 26.66666666666667%;
7278
+ }
7279
+ .col-lg-push-17 {
7280
+ left: 28.33333333333333%;
7281
+ }
7282
+ .col-lg-push-18 {
7283
+ left: 30%;
7284
+ }
7285
+ .col-lg-push-19 {
7286
+ left: 31.66666666666667%;
7287
+ }
7288
+ .col-lg-push-20 {
7289
+ left: 33.33333333333333%;
7290
+ }
7291
+ .col-lg-push-21 {
7292
+ left: 35%;
7293
+ }
7294
+ .col-lg-push-22 {
7295
+ left: 36.66666666666667%;
7296
+ }
7297
+ .col-lg-push-23 {
7298
+ left: 38.33333333333333%;
7299
+ }
7300
+ .col-lg-push-24 {
7301
+ left: 40%;
7302
+ }
7303
+ .col-lg-push-25 {
7304
+ left: 41.66666666666667%;
7305
+ }
7306
+ .col-lg-push-26 {
7307
+ left: 43.33333333333333%;
7308
+ }
7309
+ .col-lg-push-27 {
7310
+ left: 45%;
7311
+ }
7312
+ .col-lg-push-28 {
7313
+ left: 46.66666666666667%;
7314
+ }
7315
+ .col-lg-push-29 {
7316
+ left: 48.33333333333333%;
7317
+ }
7318
+ .col-lg-push-30 {
7319
+ left: 50%;
7320
+ }
7321
+ .col-lg-push-31 {
7322
+ left: 51.66666666666667%;
7323
+ }
7324
+ .col-lg-push-32 {
7325
+ left: 53.33333333333333%;
7326
+ }
7327
+ .col-lg-push-33 {
7328
+ left: 55%;
7329
+ }
7330
+ .col-lg-push-34 {
7331
+ left: 56.66666666666667%;
7332
+ }
7333
+ .col-lg-push-35 {
7334
+ left: 58.33333333333333%;
7335
+ }
7336
+ .col-lg-push-36 {
7337
+ left: 60%;
7338
+ }
7339
+ .col-lg-push-37 {
7340
+ left: 61.66666666666667%;
7341
+ }
7342
+ .col-lg-push-38 {
7343
+ left: 63.33333333333333%;
7344
+ }
7345
+ .col-lg-push-39 {
7346
+ left: 65%;
7347
+ }
7348
+ .col-lg-push-40 {
7349
+ left: 66.66666666666667%;
7350
+ }
7351
+ .col-lg-push-41 {
7352
+ left: 68.33333333333333%;
7353
+ }
7354
+ .col-lg-push-42 {
7355
+ left: 70%;
7356
+ }
7357
+ .col-lg-push-43 {
7358
+ left: 71.66666666666667%;
7359
+ }
7360
+ .col-lg-push-44 {
7361
+ left: 73.33333333333333%;
7362
+ }
7363
+ .col-lg-push-45 {
7364
+ left: 75%;
7365
+ }
7366
+ .col-lg-push-46 {
7367
+ left: 76.66666666666667%;
7368
+ }
7369
+ .col-lg-push-47 {
7370
+ left: 78.33333333333333%;
7371
+ }
7372
+ .col-lg-push-48 {
7373
+ left: 80%;
7374
+ }
7375
+ .col-lg-push-49 {
7376
+ left: 81.66666666666667%;
7377
+ }
7378
+ .col-lg-push-50 {
7379
+ left: 83.33333333333333%;
7380
+ }
7381
+ .col-lg-push-51 {
7382
+ left: 85%;
7383
+ }
7384
+ .col-lg-push-52 {
7385
+ left: 86.66666666666667%;
7386
+ }
7387
+ .col-lg-push-53 {
7388
+ left: 88.33333333333333%;
7389
+ }
7390
+ .col-lg-push-54 {
7391
+ left: 90%;
7392
+ }
7393
+ .col-lg-push-55 {
7394
+ left: 91.66666666666667%;
7395
+ }
7396
+ .col-lg-push-56 {
7397
+ left: 93.33333333333333%;
7398
+ }
7399
+ .col-lg-push-57 {
7400
+ left: 95%;
7401
+ }
7402
+ .col-lg-push-58 {
7403
+ left: 96.66666666666667%;
7404
+ }
7405
+ .col-lg-push-59 {
7406
+ left: 98.33333333333333%;
7407
+ }
7408
+ .col-lg-pull-0 {
7409
+ right: auto
7410
+ }
7411
+ .col-lg-pull-1 {
7412
+ right: 1.666666666666667%;
7413
+ }
7414
+ .col-lg-pull-2 {
7415
+ right: 3.333333333333333%;
7416
+ }
7417
+ .col-lg-pull-3 {
7418
+ right: 5%;
7419
+ }
7420
+ .col-lg-pull-4 {
7421
+ right: 6.666666666666667%;
7422
+ }
7423
+ .col-lg-pull-5 {
7424
+ right: 8.333333333333333%;
7425
+ }
7426
+ .col-lg-pull-6 {
7427
+ right: 10%;
7428
+ }
7429
+ .col-lg-pull-7 {
7430
+ right: 11.66666666666667%;
7431
+ }
7432
+ .col-lg-pull-8 {
7433
+ right: 13.33333333333333%;
7434
+ }
7435
+ .col-lg-pull-9 {
7436
+ right: 15%;
7437
+ }
7438
+ .col-lg-pull-10 {
7439
+ right: 16.66666666666667%;
7440
+ }
7441
+ .col-lg-pull-11 {
7442
+ right: 18.33333333333333%;
7443
+ }
7444
+ .col-lg-pull-12 {
7445
+ right: 20%;
7446
+ }
7447
+ .col-lg-pull-13 {
7448
+ right: 21.66666666666667%;
7449
+ }
7450
+ .col-lg-pull-14 {
7451
+ right: 23.33333333333333%;
7452
+ }
7453
+ .col-lg-pull-15 {
7454
+ right: 25%;
7455
+ }
7456
+ .col-lg-pull-16 {
7457
+ right: 26.66666666666667%;
7458
+ }
7459
+ .col-lg-pull-17 {
7460
+ right: 28.33333333333333%;
7461
+ }
7462
+ .col-lg-pull-18 {
7463
+ right: 30%;
7464
+ }
7465
+ .col-lg-pull-19 {
7466
+ right: 31.66666666666667%;
7467
+ }
7468
+ .col-lg-pull-20 {
7469
+ right: 33.33333333333333%;
7470
+ }
7471
+ .col-lg-pull-21 {
7472
+ right: 35%;
7473
+ }
7474
+ .col-lg-pull-22 {
7475
+ right: 36.66666666666667%;
7476
+ }
7477
+ .col-lg-pull-23 {
7478
+ right: 38.33333333333333%;
7479
+ }
7480
+ .col-lg-pull-24 {
7481
+ right: 40%;
7482
+ }
7483
+ .col-lg-pull-25 {
7484
+ right: 41.66666666666667%;
7485
+ }
7486
+ .col-lg-pull-26 {
7487
+ right: 43.33333333333333%;
7488
+ }
7489
+ .col-lg-pull-27 {
7490
+ right: 45%;
7491
+ }
7492
+ .col-lg-pull-28 {
7493
+ right: 46.66666666666667%;
7494
+ }
7495
+ .col-lg-pull-29 {
7496
+ right: 48.33333333333333%;
7497
+ }
7498
+ .col-lg-pull-30 {
7499
+ right: 50%;
7500
+ }
7501
+ .col-lg-pull-31 {
7502
+ right: 51.66666666666667%;
7503
+ }
7504
+ .col-lg-pull-32 {
7505
+ right: 53.33333333333333%;
7506
+ }
7507
+ .col-lg-pull-33 {
7508
+ right: 55%;
7509
+ }
7510
+ .col-lg-pull-34 {
7511
+ right: 56.66666666666667%;
7512
+ }
7513
+ .col-lg-pull-35 {
7514
+ right: 58.33333333333333%;
7515
+ }
7516
+ .col-lg-pull-36 {
7517
+ right: 60%;
7518
+ }
7519
+ .col-lg-pull-37 {
7520
+ right: 61.66666666666667%;
7521
+ }
7522
+ .col-lg-pull-38 {
7523
+ right: 63.33333333333333%;
7524
+ }
7525
+ .col-lg-pull-39 {
7526
+ right: 65%;
7527
+ }
7528
+ .col-lg-pull-40 {
7529
+ right: 66.66666666666667%;
7530
+ }
7531
+ .col-lg-pull-41 {
7532
+ right: 68.33333333333333%;
7533
+ }
7534
+ .col-lg-pull-42 {
7535
+ right: 70%;
7536
+ }
7537
+ .col-lg-pull-43 {
7538
+ right: 71.66666666666667%;
7539
+ }
7540
+ .col-lg-pull-44 {
7541
+ right: 73.33333333333333%;
7542
+ }
7543
+ .col-lg-pull-45 {
7544
+ right: 75%;
7545
+ }
7546
+ .col-lg-pull-46 {
7547
+ right: 76.66666666666667%;
7548
+ }
7549
+ .col-lg-pull-47 {
7550
+ right: 78.33333333333333%;
7551
+ }
7552
+ .col-lg-pull-48 {
7553
+ right: 80%;
7554
+ }
7555
+ .col-lg-pull-49 {
7556
+ right: 81.66666666666667%;
7557
+ }
7558
+ .col-lg-pull-50 {
7559
+ right: 83.33333333333333%;
7560
+ }
7561
+ .col-lg-pull-51 {
7562
+ right: 85%;
7563
+ }
7564
+ .col-lg-pull-52 {
7565
+ right: 86.66666666666667%;
7566
+ }
7567
+ .col-lg-pull-53 {
7568
+ right: 88.33333333333333%;
7569
+ }
7570
+ .col-lg-pull-54 {
7571
+ right: 90%;
7572
+ }
7573
+ .col-lg-pull-55 {
7574
+ right: 91.66666666666667%;
7575
+ }
7576
+ .col-lg-pull-56 {
7577
+ right: 93.33333333333333%;
7578
+ }
7579
+ .col-lg-pull-57 {
7580
+ right: 95%;
7581
+ }
7582
+ .col-lg-pull-58 {
7583
+ right: 96.66666666666667%;
7584
+ }
7585
+ .col-lg-pull-59 {
7586
+ right: 98.33333333333333%;
7587
+ }
7588
+ .col-lg-offset-0 {
7589
+ margin-left: 0
7590
+ }
7591
+ .col-lg-offset-1 {
7592
+ margin-left: 1.666666666666667%;
7593
+ }
7594
+ .col-lg-offset-2 {
7595
+ margin-left: 3.333333333333333%;
7596
+ }
7597
+ .col-lg-offset-3 {
7598
+ margin-left: 5%;
7599
+ }
7600
+ .col-lg-offset-4 {
7601
+ margin-left: 6.666666666666667%;
7602
+ }
7603
+ .col-lg-offset-5 {
7604
+ margin-left: 8.333333333333333%;
7605
+ }
7606
+ .col-lg-offset-6 {
7607
+ margin-left: 10%;
7608
+ }
7609
+ .col-lg-offset-7 {
7610
+ margin-left: 11.66666666666667%;
7611
+ }
7612
+ .col-lg-offset-8 {
7613
+ margin-left: 13.33333333333333%;
7614
+ }
7615
+ .col-lg-offset-9 {
7616
+ margin-left: 15%;
7617
+ }
7618
+ .col-lg-offset-10 {
7619
+ margin-left: 16.66666666666667%;
7620
+ }
7621
+ .col-lg-offset-11 {
7622
+ margin-left: 18.33333333333333%;
7623
+ }
7624
+ .col-lg-offset-12 {
7625
+ margin-left: 20%;
7626
+ }
7627
+ .col-lg-offset-13 {
7628
+ margin-left: 21.66666666666667%;
7629
+ }
7630
+ .col-lg-offset-14 {
7631
+ margin-left: 23.33333333333333%;
7632
+ }
7633
+ .col-lg-offset-15 {
7634
+ margin-left: 25%;
7635
+ }
7636
+ .col-lg-offset-16 {
7637
+ margin-left: 26.66666666666667%;
7638
+ }
7639
+ .col-lg-offset-17 {
7640
+ margin-left: 28.33333333333333%;
7641
+ }
7642
+ .col-lg-offset-18 {
7643
+ margin-left: 30%;
7644
+ }
7645
+ .col-lg-offset-19 {
7646
+ margin-left: 31.66666666666667%;
7647
+ }
7648
+ .col-lg-offset-20 {
7649
+ margin-left: 33.33333333333333%;
7650
+ }
7651
+ .col-lg-offset-21 {
7652
+ margin-left: 35%;
7653
+ }
7654
+ .col-lg-offset-22 {
7655
+ margin-left: 36.66666666666667%;
7656
+ }
7657
+ .col-lg-offset-23 {
7658
+ margin-left: 38.33333333333333%;
7659
+ }
7660
+ .col-lg-offset-24 {
7661
+ margin-left: 40%;
7662
+ }
7663
+ .col-lg-offset-25 {
7664
+ margin-left: 41.66666666666667%;
7665
+ }
7666
+ .col-lg-offset-26 {
7667
+ margin-left: 43.33333333333333%;
7668
+ }
7669
+ .col-lg-offset-27 {
7670
+ margin-left: 45%;
7671
+ }
7672
+ .col-lg-offset-28 {
7673
+ margin-left: 46.66666666666667%;
7674
+ }
7675
+ .col-lg-offset-29 {
7676
+ margin-left: 48.33333333333333%;
7677
+ }
7678
+ .col-lg-offset-30 {
7679
+ margin-left: 50%;
7680
+ }
7681
+ .col-lg-offset-31 {
7682
+ margin-left: 51.66666666666667%;
7683
+ }
7684
+ .col-lg-offset-32 {
7685
+ margin-left: 53.33333333333333%;
7686
+ }
7687
+ .col-lg-offset-33 {
7688
+ margin-left: 55%;
7689
+ }
7690
+ .col-lg-offset-34 {
7691
+ margin-left: 56.66666666666667%;
7692
+ }
7693
+ .col-lg-offset-35 {
7694
+ margin-left: 58.33333333333333%;
7695
+ }
7696
+ .col-lg-offset-36 {
7697
+ margin-left: 60%;
7698
+ }
7699
+ .col-lg-offset-37 {
7700
+ margin-left: 61.66666666666667%;
7701
+ }
7702
+ .col-lg-offset-38 {
7703
+ margin-left: 63.33333333333333%;
7704
+ }
7705
+ .col-lg-offset-39 {
7706
+ margin-left: 65%;
7707
+ }
7708
+ .col-lg-offset-40 {
7709
+ margin-left: 66.66666666666667%;
7710
+ }
7711
+ .col-lg-offset-41 {
7712
+ margin-left: 68.33333333333333%;
7713
+ }
7714
+ .col-lg-offset-42 {
7715
+ margin-left: 70%;
7716
+ }
7717
+ .col-lg-offset-43 {
7718
+ margin-left: 71.66666666666667%;
7719
+ }
7720
+ .col-lg-offset-44 {
7721
+ margin-left: 73.33333333333333%;
7722
+ }
7723
+ .col-lg-offset-45 {
7724
+ margin-left: 75%;
7725
+ }
7726
+ .col-lg-offset-46 {
7727
+ margin-left: 76.66666666666667%;
7728
+ }
7729
+ .col-lg-offset-47 {
7730
+ margin-left: 78.33333333333333%;
7731
+ }
7732
+ .col-lg-offset-48 {
7733
+ margin-left: 80%;
7734
+ }
7735
+ .col-lg-offset-49 {
7736
+ margin-left: 81.66666666666667%;
7737
+ }
7738
+ .col-lg-offset-50 {
7739
+ margin-left: 83.33333333333333%;
7740
+ }
7741
+ .col-lg-offset-51 {
7742
+ margin-left: 85%;
7743
+ }
7744
+ .col-lg-offset-52 {
7745
+ margin-left: 86.66666666666667%;
7746
+ }
7747
+ .col-lg-offset-53 {
7748
+ margin-left: 88.33333333333333%;
7749
+ }
7750
+ .col-lg-offset-54 {
7751
+ margin-left: 90%;
7752
+ }
7753
+ .col-lg-offset-55 {
7754
+ margin-left: 91.66666666666667%;
7755
+ }
7756
+ .col-lg-offset-56 {
7757
+ margin-left: 93.33333333333333%;
7758
+ }
7759
+ .col-lg-offset-57 {
7760
+ margin-left: 95%;
7761
+ }
7762
+ .col-lg-offset-58 {
7763
+ margin-left: 96.66666666666667%;
7764
+ }
7765
+ .col-lg-offset-59 {
7766
+ margin-left: 98.33333333333333%;
7767
+ }
7768
+ {
7769
+
7770
+ }
7771
+ .container{
7772
+ background-color: #f3f6f6;
7773
+ }
skin/adminhtml/default/default/unbxd/css/bootstrap-them.css ADDED
@@ -0,0 +1,2 @@
 
 
1
+ .btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,0%,#e6e6e6,100%);background-image:-moz-linear-gradient(top,#fff 0,#e6e6e6 100%);background-image:linear-gradient(to bottom,#fff 0,#e6e6e6 100%);background-repeat:repeat-x;border-color:#e0e0e0;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0)}.btn-default:active,.btn-default.active{background-color:#e6e6e6;border-color:#e0e0e0}.btn-primary{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;border-color:#2d6ca2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.btn-primary:active,.btn-primary.active{background-color:#3071a9;border-color:#2d6ca2}.btn-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;border-color:#419641;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.btn-success:active,.btn-success.active{background-color:#449d44;border-color:#419641}.btn-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;border-color:#eb9316;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.btn-warning:active,.btn-warning.active{background-color:#ec971f;border-color:#eb9316}.btn-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;border-color:#c12e2a;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.btn-danger:active,.btn-danger.active{background-color:#c9302c;border-color:#c12e2a}.btn-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;border-color:#2aabd2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.btn-info:active,.btn-info.active{background-color:#31b0d5;border-color:#2aabd2}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.navbar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#f8f8f8));background-image:-webkit-linear-gradient(top,#fff,0%,#f8f8f8,100%);background-image:-moz-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff8f8f8',GradientType=0);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar .navbar-nav>.active>a{background-color:#f8f8f8}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-gradient(linear,left 0,left 100%,from(#3c3c3c),to(#222));background-image:-webkit-linear-gradient(top,#3c3c3c,0%,#222,100%);background-image:-moz-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',endColorstr='#ff222222',GradientType=0)}
2
+ .navbar-inverse .navbar-nav>.active>a{background-color:#222}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#c8e5bc));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#c8e5bc,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;border-color:#b2dba1;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffc8e5bc',GradientType=0)}.alert-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#b9def0));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#b9def0,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffb9def0',GradientType=0)}.alert-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#f8efc0));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#f8efc0,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;border-color:#f5e79e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fff8efc0',GradientType=0)}.alert-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#e7c3c3));background-image:-webkit-linear-gradient(top,#f2dede,0%,#e7c3c3,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;border-color:#dca7a7;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffe7c3c3',GradientType=0)}.progress{background-image:-webkit-gradient(linear,left 0,left 100%,from(#ebebeb),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#ebebeb,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff5f5f5',GradientType=0)}.progress-bar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.progress-bar-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.progress-bar-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.progress-bar-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.progress-bar-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3278b3));background-image:-webkit-linear-gradient(top,#428bca,0%,#3278b3,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3278b3',GradientType=0)}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f5f5f5),to(#e8e8e8));background-image:-webkit-linear-gradient(top,#f5f5f5,0%,#e8e8e8,100%);background-image:-moz-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#d0e9c6));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#d0e9c6,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffd0e9c6',GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#c4e3f3));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#c4e3f3,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffc4e3f3',GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#faf2cc));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#faf2cc,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fffaf2cc',GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#ebcccc));background-image:-webkit-linear-gradient(top,#f2dede,0%,#ebcccc,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffebcccc',GradientType=0)}.well{background-image:-webkit-gradient(linear,left 0,left 100%,from(#e8e8e8),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#e8e8e8,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)}
skin/adminhtml/default/default/unbxd/css/bootstrap.css ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Bootstrap v3.0.0
3
+ *
4
+ * Copyright 2013 Twitter, Inc
5
+ * Licensed under the Apache License v2.0
6
+ * http://www.apache.org/licenses/LICENSE-2.0
7
+ *
8
+ * Designed and built with all the love in the world by @mdo and @fat.
9
+ *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}
10
+ p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16.099999999999998px;font-weight:200;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-warning{color:#c09853}.text-danger{color:#b94a48}.text-success{color:#468847}.text-info{color:#3a87ad}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}
11
+ h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6
12
+ {font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1}
13
+ h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}
14
+ h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}h1,.h1{font-size:36px}h2,.h2{font-size:30px}
15
+ h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}h1 small,.h1 small{font-size:24px}h2 small,.h2 small{font-size:18px}h3 small,.h3 small,h4 small,.h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.428571429}code,pre{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.333333333333332%}.col-xs-2{width:16.666666666666664%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333333333%}.col-xs-5{width:41.66666666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333333333336%}.col-xs-8{width:66.66666666666666%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333333334%}.col-xs-11{width:91.66666666666666%}.col-xs-12{width:100%}@media(min-width:768px){.container{max-width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-1{width:8.333333333333332%}.col-sm-2{width:16.666666666666664%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333333333%}.col-sm-5{width:41.66666666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333333333336%}.col-sm-8{width:66.66666666666666%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333333334%}.col-sm-11{width:91.66666666666666%}.col-sm-12{width:100%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-11{left:91.66666666666666%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-11{margin-left:91.66666666666666%}}@media(min-width:992px){.container{max-width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-1{width:8.333333333333332%}.col-md-2{width:16.666666666666664%}.col-md-3{width:25%}.col-md-4{width:33.33333333333333%}.col-md-5{width:41.66666666666667%}.col-md-6{width:50%}.col-md-7{width:58.333333333333336%}.col-md-8{width:66.66666666666666%}.col-md-9{width:75%}.col-md-10{width:83.33333333333334%}.col-md-11{width:91.66666666666666%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333333333332%}.col-md-push-2{left:16.666666666666664%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333333333%}.col-md-push-5{left:41.66666666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333333333336%}.col-md-push-8{left:66.66666666666666%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333333334%}.col-md-push-11{left:91.66666666666666%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-11{right:91.66666666666666%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-11{margin-left:91.66666666666666%}}@media(min-width:1200px){.container{max-width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-1{width:8.333333333333332%}.col-lg-2{width:16.666666666666664%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333333333%}.col-lg-5{width:41.66666666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333333336%}.col-lg-8{width:66.66666666666666%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333333334%}.col-lg-11{width:91.66666666666666%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-11{left:91.66666666666666%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-11{margin-left:91.66666666666666%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8;border-color:#d6e9c6}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td{background-color:#d0e9c6;border-color:#c9e2b3}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede;border-color:#eed3d7}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td{background-color:#ebcccc;border-color:#e6c1c7}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3;border-color:#fbeed5}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td{background-color:#faf2cc;border-color:#f8e5be}@media(max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#c09853}.has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.form-control-static{padding-top:7px;margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}
16
+ .glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-left:4px solid transparent;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#428bca}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990
17
+ }.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:5px 10px;padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}
18
+ .nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}}.nav-tabs.nav-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs.nav-justified>.active>a{border-bottom-color:#fff}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs-justified>.active>a{border-bottom-color:#fff}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-header{float:left}}
19
+ .navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;z-index:1030}.navbar-fixed-bottom{bottom:0;margin-bottom:0}
20
+ .navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}
21
+ .navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}
22
+ .navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}
23
+ .navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}
24
+ .navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}
25
+ @media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}
26
+ .navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}
27
+ .navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{margin-right:15px;margin-left:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}
28
+ .navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e6e6e6}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}
29
+ .navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}
30
+ .navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}
31
+ .navbar-inverse .navbar-nav>li>a{color:#999}
32
+ .navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}
33
+ .navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,
34
+ .navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}
35
+ .navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse
36
+ .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:inline-block;display:block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img{display:block;height:auto;max-width:100%}a.thumbnail:hover,a.thumbnail:focus{border-color:#428bca}.thumbnail>img{margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.alert-warning hr{border-top-color:#f8e5be}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>
37
+ .pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table{margin-bottom:0}.panel>.panel-body+.table{border-top:1px solid #ddd}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#fbeed5}.panel-warning>.panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#fbeed5}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#fbeed5}.panel-danger{border-color:#eed3d7}.panel-danger>.panel-heading{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#eed3d7}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#eed3d7}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom{margin-right:15px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{z-index:1050;width:auto;padding:10px;margin-right:auto;margin-left:auto}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{right:auto;left:50%;width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;left:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}
38
+ .pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media screen and (max-width:400px){@-ms-viewport{width:320px}}.hidden{display:none!important;visibility:hidden!important}.visible-xs{display:none!important}tr.visible-xs{display:none!important}th.visible-xs,td.visible-xs{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}tr.visible-xs.visible-sm{display:table-row!important}th.visible-xs.visible-sm,td.visible-xs.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}tr.visible-xs.visible-md{display:table-row!important}th.visible-xs.visible-md,td.visible-xs.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-xs.visible-lg{display:block!important}tr.visible-xs.visible-lg{display:table-row!important}th.visible-xs.visible-lg,td.visible-xs.visible-lg{display:table-cell!important}}.visible-sm{display:none!important}tr.visible-sm{display:none!important}th.visible-sm,td.visible-sm{display:none!important}@media(max-width:767px){.visible-sm.visible-xs{display:block!important}tr.visible-sm.visible-xs{display:table-row!important}th.visible-sm.visible-xs,td.visible-sm.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}tr.visible-sm.visible-md{display:table-row!important}th.visible-sm.visible-md,td.visible-sm.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-sm.visible-lg{display:block!important}tr.visible-sm.visible-lg{display:table-row!important}th.visible-sm.visible-lg,td.visible-sm.visible-lg{display:table-cell!important}}.visible-md{display:none!important}tr.visible-md{display:none!important}th.visible-md,td.visible-md{display:none!important}@media(max-width:767px){.visible-md.visible-xs{display:block!important}tr.visible-md.visible-xs{display:table-row!important}th.visible-md.visible-xs,td.visible-md.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}tr.visible-md.visible-sm{display:table-row!important}th.visible-md.visible-sm,td.visible-md.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-md.visible-lg{display:block!important}tr.visible-md.visible-lg{display:table-row!important}th.visible-md.visible-lg,td.visible-md.visible-lg{display:table-cell!important}}.visible-lg{display:none!important}tr.visible-lg{display:none!important}th.visible-lg,td.visible-lg{display:none!important}@media(max-width:767px){.visible-lg.visible-xs{display:block!important}tr.visible-lg.visible-xs{display:table-row!important}th.visible-lg.visible-xs,td.visible-lg.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}tr.visible-lg.visible-sm{display:table-row!important}th.visible-lg.visible-sm,td.visible-lg.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}tr.visible-lg.visible-md{display:table-row!important}th.visible-lg.visible-md,td.visible-lg.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-lg{display:block!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}tr.hidden-xs{display:table-row!important}th.hidden-xs,td.hidden-xs{display:table-cell!important}@media(max-width:767px){.hidden-xs{display:none!important}tr.hidden-xs{display:none!important}th.hidden-xs,td.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm{display:none!important}tr.hidden-xs.hidden-sm{display:none!important}th.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md{display:none!important}tr.hidden-xs.hidden-md{display:none!important}th.hidden-xs.hidden-md,td.hidden-xs.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-xs.hidden-lg{display:none!important}tr.hidden-xs.hidden-lg{display:none!important}th.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}@media(max-width:767px){.hidden-sm.hidden-xs{display:none!important}tr.hidden-sm.hidden-xs{display:none!important}th.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}tr.hidden-sm{display:none!important}th.hidden-sm,td.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md{display:none!important}tr.hidden-sm.hidden-md{display:none!important}th.hidden-sm.hidden-md,td.hidden-sm.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-sm.hidden-lg{display:none!important}tr.hidden-sm.hidden-lg{display:none!important}th.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}@media(max-width:767px){.hidden-md.hidden-xs{display:none!important}tr.hidden-md.hidden-xs{display:none!important}th.hidden-md.hidden-xs,td.hidden-md.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-md.hidden-sm{display:none!important}tr.hidden-md.hidden-sm{display:none!important}th.hidden-md.hidden-sm,td.hidden-md.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}tr.hidden-md{display:none!important}th.hidden-md,td.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-md.hidden-lg{display:none!important}tr.hidden-md.hidden-lg{display:none!important}th.hidden-md.hidden-lg,td.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(max-width:767px){.hidden-lg.hidden-xs{display:none!important}tr.hidden-lg.hidden-xs{display:none!important}th.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm{display:none!important}tr.hidden-lg.hidden-sm{display:none!important}th.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md{display:none!important}tr.hidden-lg.hidden-md{display:none!important}th.hidden-lg.hidden-md,td.hidden-lg.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg{display:none!important}tr.hidden-lg{display:none!important}th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print{display:none!important}tr.visible-print{display:none!important}th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print{display:none!important}tr.hidden-print{display:none!important}th.hidden-print,td.hidden-print{display:none!important}}
skin/adminhtml/default/default/unbxd/css/chosen.css ADDED
@@ -0,0 +1,429 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .chosen-container {
2
+ position: relative;
3
+ display: inline-block;
4
+ vertical-align: middle;
5
+ font-size: 13px;
6
+ zoom: 1;
7
+ *display: inline;
8
+ -webkit-user-select: none;
9
+ -moz-user-select: none;
10
+ user-select: none;
11
+ }
12
+ .chosen-container .chosen-drop {
13
+ position: absolute;
14
+ top: 100%;
15
+ left: -9999px;
16
+ z-index: 1010;
17
+ -webkit-box-sizing: border-box;
18
+ -moz-box-sizing: border-box;
19
+ box-sizing: border-box;
20
+ width: 100%;
21
+ border: 1px solid #aaa;
22
+ border-top: 0;
23
+ background: #fff;
24
+ box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
25
+ }
26
+ .chosen-container.chosen-with-drop .chosen-drop {
27
+ left: 0;
28
+ }
29
+ .chosen-container a {
30
+ cursor: pointer;
31
+ }
32
+
33
+ /* @end */
34
+ /* @group Single Chosen */
35
+ .chosen-container-single .chosen-single {
36
+ position: relative;
37
+ display: block;
38
+ overflow: hidden;
39
+ padding: 0 0 0 8px;
40
+ height: 23px;
41
+ border: 1px solid #aaa;
42
+ border-radius: 5px;
43
+ background-color: #fff;
44
+ background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
45
+ background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
46
+ background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
47
+ background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
48
+ background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
49
+ background-clip: padding-box;
50
+ box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);
51
+ color: #444;
52
+ text-decoration: none;
53
+ white-space: nowrap;
54
+ line-height: 24px;
55
+ }
56
+ .chosen-container-single .chosen-default {
57
+ color: #999;
58
+ }
59
+ .chosen-container-single .chosen-single span {
60
+ display: block;
61
+ overflow: hidden;
62
+ margin-right: 26px;
63
+ text-overflow: ellipsis;
64
+ white-space: nowrap;
65
+ }
66
+ .chosen-container-single .chosen-single-with-deselect span {
67
+ margin-right: 38px;
68
+ }
69
+ .chosen-container-single .chosen-single abbr {
70
+ position: absolute;
71
+ top: 6px;
72
+ right: 26px;
73
+ display: block;
74
+ width: 12px;
75
+ height: 12px;
76
+ background: url('chosen-sprite.png') -42px 1px no-repeat;
77
+ font-size: 1px;
78
+ }
79
+ .chosen-container-single .chosen-single abbr:hover {
80
+ background-position: -42px -10px;
81
+ }
82
+ .chosen-container-single.chosen-disabled .chosen-single abbr:hover {
83
+ background-position: -42px -10px;
84
+ }
85
+ .chosen-container-single .chosen-single div {
86
+ position: absolute;
87
+ top: 0;
88
+ right: 0;
89
+ display: block;
90
+ width: 18px;
91
+ height: 100%;
92
+ }
93
+ .chosen-container-single .chosen-single div b {
94
+ display: block;
95
+ width: 100%;
96
+ height: 100%;
97
+ background: url('chosen-sprite.png') no-repeat 0px 2px;
98
+ }
99
+ .chosen-container-single .chosen-search {
100
+ position: relative;
101
+ z-index: 1010;
102
+ margin: 0;
103
+ padding: 3px 4px;
104
+ white-space: nowrap;
105
+ }
106
+ .chosen-container-single .chosen-search input[type="text"] {
107
+ -webkit-box-sizing: border-box;
108
+ -moz-box-sizing: border-box;
109
+ box-sizing: border-box;
110
+ margin: 1px 0;
111
+ padding: 4px 20px 4px 5px;
112
+ width: 100%;
113
+ height: auto;
114
+ outline: 0;
115
+ border: 1px solid #aaa;
116
+ background: white url('chosen-sprite.png') no-repeat 100% -20px;
117
+ background: url('chosen-sprite.png') no-repeat 100% -20px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
118
+ background: url('chosen-sprite.png') no-repeat 100% -20px, -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
119
+ background: url('chosen-sprite.png') no-repeat 100% -20px, -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
120
+ background: url('chosen-sprite.png') no-repeat 100% -20px, -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
121
+ background: url('chosen-sprite.png') no-repeat 100% -20px, linear-gradient(#eeeeee 1%, #ffffff 15%);
122
+ font-size: 1em;
123
+ font-family: sans-serif;
124
+ line-height: normal;
125
+ border-radius: 0;
126
+ }
127
+ .chosen-container-single .chosen-drop {
128
+ margin-top: -1px;
129
+ border-radius: 0 0 4px 4px;
130
+ background-clip: padding-box;
131
+ }
132
+ .chosen-container-single.chosen-container-single-nosearch .chosen-search {
133
+ position: absolute;
134
+ left: -9999px;
135
+ }
136
+
137
+ /* @end */
138
+ /* @group Results */
139
+ .chosen-container .chosen-results {
140
+ position: relative;
141
+ overflow-x: hidden;
142
+ overflow-y: auto;
143
+ margin: 0 4px 4px 0;
144
+ padding: 0 0 0 4px;
145
+ max-height: 240px;
146
+ -webkit-overflow-scrolling: touch;
147
+ }
148
+ .chosen-container .chosen-results li {
149
+ display: none;
150
+ margin: 0;
151
+ padding: 5px 6px;
152
+ list-style: none;
153
+ line-height: 15px;
154
+ }
155
+ .chosen-container .chosen-results li.active-result {
156
+ display: list-item;
157
+ cursor: pointer;
158
+ }
159
+ .chosen-container .chosen-results li.disabled-result {
160
+ display: list-item;
161
+ color: #ccc;
162
+ cursor: default;
163
+ }
164
+ .chosen-container .chosen-results li.highlighted {
165
+ background-color: #3875d7;
166
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
167
+ background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%);
168
+ background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%);
169
+ background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%);
170
+ background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);
171
+ color: #fff;
172
+ }
173
+ .chosen-container .chosen-results li.no-results {
174
+ display: list-item;
175
+ background: #f4f4f4;
176
+ }
177
+ .chosen-container .chosen-results li.group-result {
178
+ display: list-item;
179
+ font-weight: bold;
180
+ cursor: default;
181
+ }
182
+ .chosen-container .chosen-results li.group-option {
183
+ padding-left: 15px;
184
+ }
185
+ .chosen-container .chosen-results li em {
186
+ font-style: normal;
187
+ text-decoration: underline;
188
+ }
189
+
190
+ /* @end */
191
+ /* @group Multi Chosen */
192
+ .chosen-container-multi .chosen-choices {
193
+ position: relative;
194
+ overflow: hidden;
195
+ -webkit-box-sizing: border-box;
196
+ -moz-box-sizing: border-box;
197
+ box-sizing: border-box;
198
+ margin: 0;
199
+ padding: 0;
200
+ width: 100%;
201
+ height: auto !important;
202
+ height: 1%;
203
+ border: 1px solid #aaa;
204
+ background-color: #fff;
205
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
206
+ background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
207
+ background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
208
+ background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
209
+ background-image: linear-gradient(#eeeeee 1%, #ffffff 15%);
210
+ cursor: text;
211
+ }
212
+ .chosen-container-multi .chosen-choices li {
213
+ float: left;
214
+ list-style: none;
215
+ }
216
+ .chosen-container-multi .chosen-choices li.search-field {
217
+ margin: 0;
218
+ padding: 0;
219
+ white-space: nowrap;
220
+ }
221
+ .chosen-container-multi .chosen-choices li.search-field input[type="text"] {
222
+ margin: 1px 0;
223
+ padding: 5px;
224
+ height: 15px;
225
+ outline: 0;
226
+ border: 0 !important;
227
+ background: transparent !important;
228
+ box-shadow: none;
229
+ color: #666;
230
+ font-size: 100%;
231
+ font-family: sans-serif;
232
+ line-height: normal;
233
+ border-radius: 0;
234
+ }
235
+ .chosen-container-multi .chosen-choices li.search-field .default {
236
+ color: #999;
237
+ }
238
+ .chosen-container-multi .chosen-choices li.search-choice {
239
+ position: relative;
240
+ margin: 3px 0 3px 5px;
241
+ padding: 3px 20px 3px 5px;
242
+ border: 1px solid #aaa;
243
+ border-radius: 3px;
244
+ background-color: #e4e4e4;
245
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
246
+ background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
247
+ background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
248
+ background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
249
+ background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
250
+ background-clip: padding-box;
251
+ box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
252
+ color: #333;
253
+ line-height: 13px;
254
+ cursor: default;
255
+ }
256
+ .chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
257
+ position: absolute;
258
+ top: 4px;
259
+ right: 3px;
260
+ display: block;
261
+ width: 12px;
262
+ height: 12px;
263
+ background: url('chosen-sprite.png') -42px 1px no-repeat;
264
+ font-size: 1px;
265
+ }
266
+ .chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
267
+ background-position: -42px -10px;
268
+ }
269
+ .chosen-container-multi .chosen-choices li.search-choice-disabled {
270
+ padding-right: 5px;
271
+ border: 1px solid #ccc;
272
+ background-color: #e4e4e4;
273
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
274
+ background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
275
+ background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
276
+ background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
277
+ background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
278
+ color: #666;
279
+ }
280
+ .chosen-container-multi .chosen-choices li.search-choice-focus {
281
+ background: #d4d4d4;
282
+ }
283
+ .chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
284
+ background-position: -42px -10px;
285
+ }
286
+ .chosen-container-multi .chosen-results {
287
+ margin: 0;
288
+ padding: 0;
289
+ }
290
+ .chosen-container-multi .chosen-drop .result-selected {
291
+ display: list-item;
292
+ color: #ccc;
293
+ cursor: default;
294
+ }
295
+
296
+ /* @end */
297
+ /* @group Active */
298
+ .chosen-container-active .chosen-single {
299
+ border: 1px solid #5897fb;
300
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
301
+ }
302
+ .chosen-container-active.chosen-with-drop .chosen-single {
303
+ border: 1px solid #aaa;
304
+ -moz-border-radius-bottomright: 0;
305
+ border-bottom-right-radius: 0;
306
+ -moz-border-radius-bottomleft: 0;
307
+ border-bottom-left-radius: 0;
308
+ background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff));
309
+ background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%);
310
+ background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%);
311
+ background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%);
312
+ background-image: linear-gradient(#eeeeee 20%, #ffffff 80%);
313
+ box-shadow: 0 1px 0 #fff inset;
314
+ }
315
+ .chosen-container-active.chosen-with-drop .chosen-single div {
316
+ border-left: none;
317
+ background: transparent;
318
+ }
319
+ .chosen-container-active.chosen-with-drop .chosen-single div b {
320
+ background-position: -18px 2px;
321
+ }
322
+ .chosen-container-active .chosen-choices {
323
+ border: 1px solid #5897fb;
324
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
325
+ }
326
+ .chosen-container-active .chosen-choices li.search-field input[type="text"] {
327
+ color: #111 !important;
328
+ }
329
+
330
+ /* @end */
331
+ /* @group Disabled Support */
332
+ .chosen-disabled {
333
+ opacity: 0.5 !important;
334
+ cursor: default;
335
+ }
336
+ .chosen-disabled .chosen-single {
337
+ cursor: default;
338
+ }
339
+ .chosen-disabled .chosen-choices .search-choice .search-choice-close {
340
+ cursor: default;
341
+ }
342
+
343
+ /* @end */
344
+ /* @group Right to Left */
345
+ .chosen-rtl {
346
+ text-align: right;
347
+ }
348
+ .chosen-rtl .chosen-single {
349
+ overflow: visible;
350
+ padding: 0 8px 0 0;
351
+ }
352
+ .chosen-rtl .chosen-single span {
353
+ margin-right: 0;
354
+ margin-left: 26px;
355
+ direction: rtl;
356
+ }
357
+ .chosen-rtl .chosen-single-with-deselect span {
358
+ margin-left: 38px;
359
+ }
360
+ .chosen-rtl .chosen-single div {
361
+ right: auto;
362
+ left: 3px;
363
+ }
364
+ .chosen-rtl .chosen-single abbr {
365
+ right: auto;
366
+ left: 26px;
367
+ }
368
+ .chosen-rtl .chosen-choices li {
369
+ float: right;
370
+ }
371
+ .chosen-rtl .chosen-choices li.search-field input[type="text"] {
372
+ direction: rtl;
373
+ }
374
+ .chosen-rtl .chosen-choices li.search-choice {
375
+ margin: 3px 5px 3px 0;
376
+ padding: 3px 5px 3px 19px;
377
+ }
378
+ .chosen-rtl .chosen-choices li.search-choice .search-choice-close {
379
+ right: auto;
380
+ left: 4px;
381
+ }
382
+ .chosen-rtl.chosen-container-single-nosearch .chosen-search,
383
+ .chosen-rtl .chosen-drop {
384
+ left: 9999px;
385
+ }
386
+ .chosen-rtl.chosen-container-single .chosen-results {
387
+ margin: 0 0 4px 4px;
388
+ padding: 0 4px 0 0;
389
+ }
390
+ .chosen-rtl .chosen-results li.group-option {
391
+ padding-right: 15px;
392
+ padding-left: 0;
393
+ }
394
+ .chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
395
+ border-right: none;
396
+ }
397
+ .chosen-rtl .chosen-search input[type="text"] {
398
+ padding: 4px 5px 4px 20px;
399
+ background: white url('chosen-sprite.png') no-repeat -30px -20px;
400
+ background: url('chosen-sprite.png') no-repeat -30px -20px, -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
401
+ background: url('chosen-sprite.png') no-repeat -30px -20px, -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
402
+ background: url('chosen-sprite.png') no-repeat -30px -20px, -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
403
+ background: url('chosen-sprite.png') no-repeat -30px -20px, -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
404
+ background: url('chosen-sprite.png') no-repeat -30px -20px, linear-gradient(#eeeeee 1%, #ffffff 15%);
405
+ direction: rtl;
406
+ }
407
+ .chosen-rtl.chosen-container-single .chosen-single div b {
408
+ background-position: 6px 2px;
409
+ }
410
+ .chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {
411
+ background-position: -12px 2px;
412
+ }
413
+
414
+ /* @end */
415
+ /* @group Retina compatibility */
416
+ @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) {
417
+ .chosen-rtl .chosen-search input[type="text"],
418
+ .chosen-container-single .chosen-single abbr,
419
+ .chosen-container-single .chosen-single div b,
420
+ .chosen-container-single .chosen-search input[type="text"],
421
+ .chosen-container-multi .chosen-choices .search-choice .search-choice-close,
422
+ .chosen-container .chosen-results-scroll-down span,
423
+ .chosen-container .chosen-results-scroll-up span {
424
+ background-image: url('chosen-sprite@2x.png') !important;
425
+ background-size: 52px 37px !important;
426
+ background-repeat: no-repeat !important;
427
+ }
428
+ }
429
+ /* @end */
skin/adminhtml/default/default/unbxd/css/unbxd-magento.css ADDED
@@ -0,0 +1,632 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .container{
2
+ background-color: #f3f6f6;
3
+ }
4
+ .middle-nav-magento-dropdown, .background-grey{
5
+ background-color: #F3F6F6 !important;
6
+ }
7
+ .middle-nav-magento-dropdown{
8
+ top: 185px;
9
+ }
10
+ .top-200{
11
+ top:200px !important;
12
+ }
13
+ .top-185{
14
+ top: 185px !important;
15
+ }
16
+ .clickable-btn{
17
+ cursor: pointer;
18
+ }
19
+ .magento-active{
20
+ border-top: 1px solid #4e5253;
21
+ border-bottom: 1px solid #4e5253;
22
+ background: #45b5c1 url('../img/arrow-white.png') no-repeat 90%;
23
+ }
24
+ .site-key-help {
25
+ display: none;
26
+ top: 329px;
27
+ position: absolute;
28
+ left: 470px;
29
+ }
30
+ .secret-key-help{
31
+ display: none;
32
+ top: 329px;
33
+ position: absolute;
34
+ left: 870px;
35
+ }
36
+ .blue-link{
37
+ color: #11b3c7;
38
+ cursor: pointer;
39
+ padding-top: 13px;
40
+ padding-left: 10px;
41
+ }
42
+ .custom-attributes{
43
+ display: none;
44
+ }
45
+ .middle-nav-text {
46
+ padding-left: 5px;
47
+ color: #3c3f40;
48
+ font-size: 16px;
49
+ font-weight: 400;
50
+ padding-top: 5px;
51
+ padding-bottom: 5px;
52
+ margin-bottom: 0;
53
+ }
54
+ .chosen-drop{
55
+ z-index: 999999 !important;
56
+ }
57
+ .capitalize{
58
+ text-transform: capitalize;
59
+ }
60
+ .unbxd-table{
61
+
62
+ border-right-style: solid;
63
+ border-right-width: 1px;
64
+ border-top-color: rgb(222, 226, 228);
65
+ border-top-left-radius: 5px;
66
+ border-top-right-radius: 5px;
67
+ border-top-style: solid;
68
+ border-top-width: 1px;
69
+ box-sizing: border-box;
70
+ color: rgb(51, 51, 51);
71
+ font-family: proxima-nova, Arial, sans-serif;
72
+ font-size: 14px;
73
+ font-style: normal;
74
+ font-variant: normal;
75
+ font-weight: normal;
76
+ line-height: 20px;
77
+ margin-bottom: 20px;
78
+ margin-left: 0px;
79
+ margin-right: 0px;
80
+ margin-top: 0px;
81
+ max-width: 100%;
82
+ padding-bottom: 0px;
83
+ padding-left: 0px;
84
+ padding-right: 0px;
85
+ padding-top: 0px;
86
+ width: 100%;
87
+ }
88
+ .unbxd-thead{
89
+ color: rgb(51, 51, 51);
90
+ font-family: proxima-nova, Arial, sans-serif;
91
+ font-size: 14px;
92
+ font-style: normal;
93
+ font-variant: normal;
94
+ font-weight: normal;
95
+ height: 48px;
96
+ line-height: 20px;
97
+
98
+ }
99
+ .unbxd-tr{
100
+ border-bottom-color: rgb(222, 226, 228);
101
+ border-collapse: separate;
102
+ border-left-color: rgb(222, 226, 228);
103
+ border-right-color: rgb(222, 226, 228);
104
+ border-top-color: rgb(222, 226, 228);
105
+ box-sizing: border-box;
106
+ color: rgb(51, 51, 51);
107
+ font-family: proxima-nova, Arial, sans-serif;
108
+ font-size: 14px;
109
+ font-style: normal;
110
+ font-variant: normal;
111
+ font-weight: normal;
112
+ height: 48px;
113
+ line-height: 20px;
114
+ margin-bottom: 0px;
115
+ margin-left: 0px;
116
+ margin-right: 0px;
117
+ margin-top: 0px;
118
+ padding-bottom: 0px;
119
+ padding-left: 0px;
120
+ padding-right: 0px;
121
+ padding-top: 0px;
122
+ vertical-align: middle;
123
+ }
124
+ .unbxd-th{
125
+
126
+ background-color: rgb(60, 63, 64);
127
+ border-bottom-left-radius: 0px;
128
+ border-bottom-right-radius: 0px;
129
+ border-bottom-style: none;
130
+ border-bottom-width: 0px;
131
+ border-collapse: separate;
132
+ border-right-color: rgb(255, 255, 255);
133
+ border-right-style: solid;
134
+ border-right-width: 1px;
135
+ border-top-color: rgb(255, 255, 255);
136
+ border-top-left-radius: 5px;
137
+ border-top-right-radius: 0px;
138
+ border-top-style: none;
139
+ border-top-width: 0px;
140
+ box-sizing: border-box;
141
+ color: rgb(255, 255, 255);
142
+ font-family: proxima-nova, Arial, sans-serif;
143
+ font-size: 18px;
144
+ font-style: normal;
145
+ font-variant: normal;
146
+ font-weight: normal;
147
+ height: 48px;
148
+ line-height: 25.7142868041992px;
149
+ margin-bottom: 0px;
150
+ margin-left: 0px;
151
+ margin-right: 0px;
152
+ margin-top: 0px;
153
+ padding-bottom: 8px;
154
+ padding-left: 20px;
155
+ padding-right: 0px;
156
+ padding-top: 15px;
157
+ text-align: left;
158
+ }
159
+ .unbxd-tbody{
160
+ border-bottom-color: rgb(222, 226, 228);
161
+ border-collapse: separate;
162
+ border-left-color: rgb(222, 226, 228);
163
+ border-right-color: rgb(222, 226, 228);
164
+ border-top-color: rgb(222, 226, 228);
165
+ box-sizing: border-box;
166
+ color: rgb(51, 51, 51);
167
+ display: table-row-group;
168
+ font-family: proxima-nova, Arial, sans-serif;
169
+ font-size: 14px;
170
+ font-style: normal;
171
+ font-variant: normal;
172
+ font-weight: normal;
173
+ height: 549px;
174
+ line-height: 20px;
175
+ margin-bottom: 0px;
176
+ margin-left: 0px;
177
+ margin-right: 0px;
178
+ margin-top: 0px;
179
+ padding-bottom: 0px;
180
+ padding-left: 0px;
181
+ padding-right: 0px;
182
+ padding-top: 0px;
183
+ vertical-align: middle;
184
+ width: 666px;
185
+ }
186
+ .unbxd-td{
187
+ border-collapse: separate;
188
+ border-right-color: rgb(222, 226, 228);
189
+ border-right-style: solid;
190
+ border-right-width: 1px;
191
+ border-top-color: rgb(221, 221, 221);
192
+ border-top-style: solid;
193
+ border-top-width: 1px;
194
+ box-sizing: border-box;
195
+ color: rgb(92, 101, 106);
196
+ display: table-cell;
197
+ font-family: proxima-nova, Arial, sans-serif;
198
+ font-size: 16px;
199
+ font-style: normal;
200
+ font-variant: normal;
201
+ font-weight: normal;
202
+ height: 72px;
203
+ line-height: 22.8571434020996px;
204
+ margin-bottom: 0px;
205
+ margin-left: 0px;
206
+ margin-right: 0px;
207
+ margin-top: 0px;
208
+ padding-bottom: 15px;
209
+ padding-left: 23px;
210
+ padding-right: 100px;
211
+ padding-top: 15px;
212
+ text-transform: capitalize;
213
+
214
+ }
215
+ .width-45{
216
+ width: 45%;
217
+ }
218
+ .width-55{
219
+ width: 55%;
220
+ }
221
+ .width-50{
222
+ width: 50%;
223
+ }
224
+ .tr-row{
225
+ width: 100%;
226
+ height: 50px;
227
+
228
+ }
229
+ .td-right{
230
+ padding-top: 2px;
231
+ /*width: 55% !important;*/
232
+ float: right;
233
+ border-left: 1px solid #dee2e4 !important;
234
+ border-bottom: 1px solid #dee2e4 !important;
235
+ height: 100%;
236
+ }
237
+ .td-left{
238
+ float: left;
239
+ height: 100%;
240
+ padding-top: 19px;
241
+ padding-left: 32px;
242
+ font-size: 17px;
243
+ border-bottom: 1px solid #dee2e4 !important;
244
+ }
245
+ .magento-border-left{
246
+ border-left: 1px solid #dee2e4 !important;
247
+ }
248
+ .magento-border-right{
249
+ border-right: 1px solid #dee2e4 !important;
250
+ }
251
+ .unbxd-err{
252
+ float: right;
253
+ position: absolute;
254
+ left: 694px;
255
+ width: 200px;
256
+ padding-top: 7px;
257
+ color: red;
258
+ }
259
+ #selectSites + div.chosen-container {
260
+ width: 100% !important;
261
+ }
262
+ .width-100{
263
+ width: 100% !important;
264
+ }
265
+ .width-70{
266
+ width: 70% !important;
267
+ }
268
+ .width-100 > .chosen-container{
269
+ width: 100% !important;
270
+ }
271
+ .custom-attributes-td{
272
+ padding: 0;
273
+ padding-top: 4px;
274
+ padding-right: 3px;
275
+ }
276
+ .remove-row{
277
+ margin-top: 5px;
278
+ margin-left: 5px;
279
+ width: 21%;
280
+ height: 35px;
281
+ background-size: 100%;
282
+ background-image: url("../img/delete-raw.png");
283
+ }
284
+ .remove-row:hover{
285
+ background-image: url("../img/delete-raw-hover.png");
286
+ }
287
+ .add-row{
288
+ margin-top: 5px;
289
+ margin-left: 5px;
290
+ width: 21%;
291
+ height: 35px;
292
+ background-size: 100%;
293
+ background-image: url("../img/add-raw.png");
294
+ }
295
+ .add-row:hover{
296
+ background-image: url("../img/add-raw-hover.png");
297
+ }
298
+ .disabled-btn{
299
+ opacity: 0.5;
300
+ cursor: default;
301
+ pointer-events: none;
302
+ }
303
+ .width-62{
304
+ width: 62%;
305
+ }
306
+ .unbxd-div-td{
307
+ float: left;
308
+ height: 100%;
309
+ /* padding-top: 19px;
310
+ padding-left: 32px;*/
311
+ font-size: 17px;
312
+ border-bottom: 1px solid #dee2e4 !important;
313
+ border-left: 1px solid #dee2e4 !important;
314
+ }
315
+ .width-28{
316
+ width: 28%;
317
+ }
318
+ .width-30{
319
+ width: 30%;
320
+ }
321
+ .width-42{
322
+ width: 42%;
323
+ }
324
+ .unbxd-hide{
325
+ display: none !important;
326
+ }
327
+ .pad-top{
328
+ padding-top: 20px;
329
+ }
330
+ .middle-nav-magento, .inner-container-magento{
331
+ top: 278px
332
+ }
333
+ .border-left-color{
334
+ margin-left: 25px;
335
+ margin-right: 25px;
336
+ width: 96%;
337
+ }
338
+ .background-white{
339
+ background-color: white;
340
+ }
341
+ .pad-left-45{
342
+ padding-left: 45px;
343
+ }
344
+ .footer{
345
+ position: fixed;
346
+ width: 100%;
347
+ padding-top: 19px;
348
+ background: #efefef;
349
+ bottom: -55px;
350
+ }
351
+ .footer:hover{
352
+ bottom: -5px !important;
353
+ }
354
+ .pad-btm-10p{
355
+ padding-bottom: 10%;
356
+ }
357
+ .chosen-container{
358
+ width: 354px !important;
359
+ }
360
+ ._unbxd-err{
361
+ color: red;
362
+ padding-left: 13%;
363
+ font-weight: bold;
364
+ }
365
+ ._unbxd-success{
366
+ color: rgb(81, 157, 79);
367
+ padding-left: 13%;
368
+ font-weight: bold;
369
+ }
370
+ .unbxd-disabler{
371
+ opacity: 0.5;
372
+ margin-bottom: 5%;
373
+ }
374
+ .unbxd-cover{
375
+ height: 70%;
376
+ position: absolute;
377
+ width: 100%;
378
+ cursor: default;
379
+ z-index: 999999;
380
+ }
381
+ .pad-left-msg{
382
+ padding-left: 35%;
383
+ }
384
+ .width-25{
385
+ width: 25%;
386
+ }
387
+ .width-35{
388
+ width: 35%;
389
+ }
390
+ .width-40{
391
+ width: 40%;
392
+ }
393
+ .pad-left-10{
394
+ padding-left: 13px;
395
+ }
396
+ .pad-btm-0{
397
+ padding-bottom: 0;
398
+ }
399
+ .height-100{
400
+ height: 100%;
401
+ }
402
+ .unbxd-success-msg{
403
+ color: green;
404
+ font-weight: bold;
405
+ font-size: 13px;
406
+ }
407
+ .unbxd-error-msg{
408
+ color: red;
409
+ font-weight: bold;
410
+ font-size: 13px;
411
+ }
412
+ .unbxd-center-div{
413
+ margin: 0 auto;
414
+ width: 50%;
415
+ text-align: center;
416
+ }
417
+ .pad-top-20{
418
+ padding-top: 20px;
419
+ }
420
+ .pad-top-30{
421
+ padding-top: 30px;
422
+ }
423
+ .inner-container-magento .popover, .inner-container-magento .popover-title, .inner-container-magento .popover-content {
424
+ background: #3c3f40;
425
+ color: rgb(255, 255, 255);
426
+ font-family: proxima-nova, Arial, sans-serif;
427
+ font-size: 16px;
428
+ font-style: normal;
429
+ font-variant: normal;
430
+ font-weight: normal;
431
+ border: none;
432
+
433
+ }
434
+ .inner-container-magento .popover-content{
435
+ font-size: 14px;
436
+ padding-top: 0;
437
+ }
438
+ .magento-number-text {
439
+ width: 109px;
440
+ }
441
+ .box-35{
442
+ width: 35px;
443
+ height: 35px;
444
+ }
445
+ div.chosen-disabled > a.chosen-single > div {
446
+ display: none;
447
+ }
448
+ div.chosen-container-single ,div.chosen-container-single > a.chosen-single {
449
+ border: 0;
450
+ background-color: #FFF;
451
+ }
452
+ div.chosen-container-single > a.chosen-single > div b {
453
+ background: url(../img/dropdown-arrow.png) no-repeat 50%!important;
454
+ width: 28px!important;
455
+
456
+ }
457
+ .bord-right{
458
+ border-right: 1px solid #dee2e4 !important;
459
+ }
460
+ .chosen-disabled{
461
+ opacity: 1 !important;
462
+ }
463
+ .delete-row{
464
+ float: left;
465
+ }
466
+ .width-80{
467
+ width: 80% !important;
468
+ }
469
+ .width-20{
470
+ width: 20%;
471
+ }
472
+ div.cudtom-attr-rows div div.add-row{
473
+ display: none;
474
+ }
475
+ div.cudtom-attr-rows > div:last-child div.add-row{
476
+ display: block;
477
+ }
478
+ .width-38{
479
+ width: 38%;
480
+ }
481
+ .pad-top-5{
482
+ padding-top: 5px;
483
+ }
484
+ .width-64{
485
+ width: 64%
486
+ }
487
+ .width-36{
488
+ width: 36%
489
+ }
490
+ .btn-add-attribute, .btn-add-attribute:hover{
491
+ background: #3b3e40 url('../img/add-raw-hover.png') no-repeat 97%;
492
+ }
493
+ .magento-analytics-tick
494
+ {
495
+ background:#45b5c1 url('../img/DONE.png') no-repeat 50%;
496
+ }
497
+ .magento-analytics-cross
498
+ {
499
+ background: url('../img/red-loading.gif') no-repeat;
500
+ background-size: 92%;
501
+ }
502
+ .unbxd-top-strip{
503
+ border-top: 2px solid #45b5c1;
504
+ }
505
+ .unbxd-green-border{
506
+ border: 1px solid #47b28e;
507
+ }
508
+ .unbxd-green-border{
509
+ border: 1px solid #db2727;
510
+ }
511
+ .magento-analytics-block{
512
+ border: 1px solid #47b28e
513
+ }
514
+ .magento-analytics-block1 {
515
+ border: 1px solid #db2727;
516
+ }
517
+ .word-break{
518
+ word-wrap:break-word;
519
+ }
520
+ .height-75p{
521
+ height: 95px;
522
+ }
523
+ .unbxd-text-center{
524
+ padding-top: 10px;
525
+ }
526
+ .pad-left-15{
527
+ padding-left: 15px;
528
+ }
529
+ .unbxd-text-verticle-center{
530
+ display: flex;
531
+ align-items: center;
532
+ }
533
+ .background-success{
534
+ background-color: #47b28e;
535
+ height: 102px;
536
+ }
537
+ .background-success div.magento-text{
538
+ color: #FFF;
539
+ }
540
+ .succes-div{
541
+ background:#47b28e url('../img/congrats.png') no-repeat 50%;
542
+ width: 13%;
543
+ height: 90px;
544
+ }
545
+ .pad-10{
546
+ padding: 10px;
547
+ }
548
+ .success-head{
549
+ font-weight: bold;
550
+ font-size: 20px;
551
+ }
552
+ .magento-landing-block{
553
+ background-color: rgb(60, 63, 64);
554
+ }
555
+ .blue-link-help{
556
+ color: #45b5c1;
557
+ cursor: pointer;
558
+ }
559
+ .cms-help{
560
+ padding-bottom: 20px;
561
+ font-size: 16px;
562
+ padding-left: 30px;
563
+ padding-top: 5px;
564
+ }
565
+ .hide-over-flow{
566
+ overflow: hidden;
567
+ }
568
+ .width-60{
569
+ width: 60%;
570
+ }
571
+ .unbxd-caps{
572
+ text-transform: capitalize;
573
+ }
574
+ .pad-top-32{
575
+ padding-top: 32px;
576
+ }
577
+ .background-dark-grey{
578
+ background-color: rgba(210, 216, 216, 1) !important;
579
+ }
580
+ .unbxd-border{
581
+ border: 1px solid #cddbde;
582
+ }
583
+ .z99{
584
+ z-index: 99;
585
+ }
586
+ .magento-row-tabs{
587
+ float:left;
588
+ background-color: #f3f6f6;
589
+ padding: 0;
590
+ }
591
+
592
+ ul.magento-conf-tabs li a {
593
+ width: 25%;
594
+ padding-left: 0 !important;
595
+ font-weight: 400;
596
+ font-size: 16px;
597
+ border-right: 2px solid #B6BCBD;
598
+ padding-left: 2% !important;
599
+ cursor: pointer;
600
+ }
601
+ ul.magento-conf-tabs li:last-child > a{
602
+ border-right: 0;
603
+ }
604
+ .magento-head-active{
605
+ background-color: #FFF !important;
606
+ }
607
+ .txt-center{
608
+ text-align: center;
609
+ }
610
+ .height-80{
611
+ height: 80%;
612
+ }
613
+ .unbxd-bold{
614
+ font-weight: bold;
615
+ }
616
+ .help-table-head{
617
+ background-color: #FFF;
618
+ color: black;
619
+ }
620
+ div#unbxdHelpRows div div {
621
+ padding-left: 4%;
622
+ }
623
+ .border-right-rad{
624
+ border-radius: 0;
625
+ border-top-right-radius: 5px;
626
+ }
627
+ .unbxd-mar-left-30 {
628
+ margin-left: 30% !important;
629
+ }
630
+ .unbxd-mar-btm-20{
631
+ margin-bottom: 20px !important;
632
+ }
skin/adminhtml/default/default/unbxd/img/Custom-platform.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/DONE.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/HEXAGON-Only.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/Magento-small.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/Magento.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/X-popup-hover.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/X-popup.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/X-pricing.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/add-actv.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/add-icon.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/add-inactv.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/add-raw-hover.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/add-raw.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/add.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-2.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-calendar-down.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-calendar-down1.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-down-disabled.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-down-enabled.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-down-white.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-down-white1.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-down-white2.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-down.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-gray.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-left-white.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-left.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-mail-developer).png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-right-blue.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-right-gray.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-right-white.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-right.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-up-black.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-up-disabled.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-up-enabled.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-up-red.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-up-white.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-up-white1.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-up.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow-white.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/arrow.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/authenticated.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/back.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/bg.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/big-arrow-gray.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/bigcommerce.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/black-right-small.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/black-right-thick.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/btn-arrow-top.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/btn-arrow.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/button-arrow-blue.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/button-arrow-grey.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/button-arrow-red.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/cancel.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/card-image.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/card-image1.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/card-image2.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/card-image3.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/checkmark.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/chosen-sprite.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/close-analytics.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/close.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/color-pic.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/congrats.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/copy-black.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/copy-white.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/cros.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/cross-2.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/cvv-number.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/delete-raw-hover.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/delete-raw.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/delete-red.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/delete.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/detect.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/down-arrow.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/down-black.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/down-gray.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/dropdown-arrow.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/edit-magento.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/edit.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/eye-hover.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/eye.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/favicon.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/fill.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/group-arrow.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/help.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/icon-analytics.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/icon-info.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/icon-widget.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/install.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/integration-gray.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/introduction-gray.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/left-black.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/left-gray.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/level-arrow-active.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/level-arrow.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/link-arrow.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/loader-16x16.gif ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/loader-24x24.gif ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/loader-32x32.gif ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/loader.gif ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/loader_black.gif ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/lock-image.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/logo-unbxd.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/logo.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/mail-new.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/mail.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/minus.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/nav-highlight-arrow.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/not-detected.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/oops.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/or.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/other-gray.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/overview-gray.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/plus.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/question-mark2.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/red-cross.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/red-loading.gif ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/remove.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/right-black.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/right-gray.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/save.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/search.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/settings.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/shopify.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/site-dropdownarrow-down.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/site-dropdownarrow-up.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/slider-bg.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/slider-button.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/sort-arrow-blue-down.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/sort-arrow-blue-up.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/sort-arrow-grey-down.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/sort-arrow-grey-up.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/spree.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/start-gray.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/step-arrow.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/success.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/tick-analytics.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/tick-green.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/tick-pricing.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/tick.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/tooltip-left-arrow.jpg ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/tooltip.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/up-arrow.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/up-black.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/up-gray.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/user.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/warning.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/x-widget.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/img/x.png ADDED
Binary file
skin/adminhtml/default/default/unbxd/js/app.js ADDED
@@ -0,0 +1,780 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($) {
2
+
3
+ var baseUrl = _unbxdSkinurl +'unbxd/templates/';
4
+ site = "",
5
+ ractiveParent = {},
6
+ _unbxdObject = {
7
+ step1 : false,
8
+ step2 : false,
9
+ step3 : false,
10
+ step4 : false,
11
+ activeStep:{
12
+ one:true
13
+ },
14
+ originalMapping:[],
15
+ _unbxdSkinurl:_unbxdSkinurl,
16
+ siteName : site,
17
+ ractiveAnalytics:{}
18
+ },
19
+ unbxdMessages = {
20
+ authSuccess:"The Unbxd Module has been authenticated. Proceed to Catalog Configuration",
21
+ uploadSuccess:"Uploaded Catalog Data successfully. Proceed to Analytics integration"
22
+ },
23
+ unbxdDimensions = [
24
+ {
25
+ "value": "brand",
26
+ "helpText": "The brand to which a product belongs to"
27
+ },
28
+ {
29
+ "value": "imageUrl",
30
+ "helpText": "Thumbnail - the URL of the image of a product that needs to be displayed in the recommendation widget, normally the thumnail"
31
+ },
32
+ {
33
+ "value": "title",
34
+ "helpText": "The title or name of the product e.g 'Blue Nike Shoe' "
35
+ },
36
+ {
37
+ "value": "price",
38
+ "helpText": "The display price of the product e.g $499"
39
+ },
40
+ {
41
+ "value": "color",
42
+ "helpText": "The color of the product e.g. 'Green t-shirt' "
43
+ },
44
+ {
45
+ "value": "productUrl",
46
+ "helpText": "The material the product is made of e.g. 'Cotton trousers' "
47
+ },
48
+ {
49
+ "value": "sellingPrice",
50
+ "helpText": "The display price of the product e.g $499"
51
+ },
52
+ {
53
+ "value": "size",
54
+ "helpText": "The size of the product e.g. 'Size 10' shoes"
55
+ }
56
+ ];
57
+
58
+ $.get( baseUrl + 'credentails.html')
59
+ .then(function( template ){
60
+ $('#tab1Template').text( template );
61
+ //load tab2
62
+ $.get( baseUrl + 'catalog.html')
63
+ .then(function( template ){
64
+ $('#tab2Template').text( template );
65
+ //load tab3
66
+ $.get( baseUrl + 'analytics.html')
67
+ .then(function( template ){
68
+ $('#tab3Template').text( template );
69
+ //load tab4
70
+ $.get( baseUrl + 'widgets.html')
71
+ .then(function( template ){
72
+ $('#tab4Template').text( template );
73
+ //load row
74
+ $.get( baseUrl + 'custom.html')
75
+ .then(function( template ){
76
+ $('#rowTemplate').text( template );
77
+ loadMain();
78
+ })
79
+ });
80
+ });
81
+ });
82
+ });
83
+
84
+
85
+ //activate the clicked side nav, remove active from rest
86
+ var activateLink = function( step ){
87
+ _unbxdObject.activeStep = {};
88
+ _unbxdObject.activeStep[step] = true;
89
+ ractiveParent.update();
90
+ };
91
+
92
+
93
+ var loadMain = function(){
94
+
95
+
96
+
97
+ var $result = $.get( _unbxdBaseurl + 'unbxd/config/site');
98
+ $result.then(function( data ){
99
+
100
+ ractiveParent = new Ractive({
101
+ el: 'container',
102
+ template: '#template',
103
+ data: { sites: ['a', 'b'],
104
+ site:data.sites[0].name,
105
+ _unbxdObject:_unbxdObject
106
+ }
107
+ });
108
+
109
+ ractiveParent.observe('site', function(newValue, oldValue, keypath, s) {
110
+ if( !oldValue)
111
+ return;
112
+
113
+ _unbxdObject.catalogData = null;
114
+ _unbxdObject.originalMapping = [];
115
+ _unbxdObject.secretKey = "";
116
+ _unbxdObject.siteKey = "";
117
+ _unbxdObject.step1 = false;
118
+ activateLink( "one" );
119
+ loadCredentailsTab();
120
+ clearInterval( _unbxdObject.pollingId );
121
+
122
+ });
123
+
124
+
125
+ ractiveParent.on({
126
+
127
+ showCredentials: function ( event ) {
128
+ activateLink( "one" );
129
+ loadCredentailsTab();
130
+ clearInterval( _unbxdObject.pollingId );
131
+ },
132
+
133
+ showCatalog:function( event ){
134
+ activateLink( "two" );
135
+ loadCatalogTab();
136
+ clearInterval( _unbxdObject.pollingId );
137
+ },
138
+
139
+ showAnalytics:function( event ){
140
+ activateLink( "three" );
141
+ loadAnalyticsTab();
142
+ },
143
+
144
+ showWidgets:function( event ){
145
+ activateLink( "four" );
146
+ loadWidgetsTab();
147
+ clearInterval( _unbxdObject.pollingId );
148
+ }
149
+
150
+ });
151
+
152
+ site = data.sites[0].name;
153
+ ractiveParent.set('sites', data.sites);
154
+ data = data.sites[0];
155
+ if(data.numDocs && data.numDocs > 0){
156
+ _unbxdObject.step2 = true;
157
+ _unbxdObject.products = site.numDocs
158
+ }
159
+
160
+ loadCredentailsTab();
161
+ updateAllSelect();
162
+
163
+
164
+ })
165
+
166
+
167
+
168
+
169
+
170
+ //credentials view
171
+ var loadCredentailsTab = function(site_key, secret_key){
172
+
173
+ var ractiveCredentials = new Ractive({
174
+ el: 'innerContainr',
175
+ template: '#tab1Template',
176
+ data : {
177
+ site_key : _unbxdObject.siteKey,
178
+ secret_key : _unbxdObject.secretKey,
179
+ step1:_unbxdObject.step1,
180
+ _unbxdObject:_unbxdObject,
181
+ btnDisabled:false,
182
+ errorMsg:null,
183
+ successMsg:null
184
+ }
185
+ });
186
+
187
+ site = jQuery("#selectSites").chosen().val();
188
+ _unbxdObject.siteName = site;
189
+
190
+ var $keys = $.get( _unbxdBaseurl + "unbxd/config/keys?site="+site);
191
+
192
+ $keys.then(function( data ){
193
+ if( !data.success) {
194
+ ractiveCredentials.set({site_key:"", secret_key:"", step1:false})
195
+ return;
196
+ }
197
+
198
+ _unbxdObject.step1 = true;
199
+ _unbxdObject.siteKey = data.site_key;
200
+ _unbxdObject.secretKey = data.secret_key;
201
+ ractiveCredentials.set({site_key:data.site_key, secret_key:_unbxdObject.secretKey, step1:true})
202
+ ractiveParent.update();
203
+ },function( error ){
204
+ console.log(error);
205
+
206
+ })
207
+
208
+
209
+
210
+ ractiveCredentials.on({
211
+ //show tool tip
212
+ showSiteKeyHelp:function(){
213
+ $('.site-key-help').show();
214
+ },
215
+
216
+ hideSiteKeyHelp:function(){
217
+ $('.site-key-help').hide();
218
+ },
219
+
220
+ showSecretKeyHelp:function(){
221
+ $('.secret-key-help').show();
222
+ },
223
+
224
+ hideSecretKeyHelp:function(){
225
+ $('.secret-key-help').hide();
226
+ },
227
+
228
+ authenticate:function(){
229
+ var data = {
230
+ site_key: this.get("site_key"),
231
+ secret_key:this.get("secret_key")
232
+ };
233
+ data = JSON.stringify(data);
234
+ var self = this;
235
+ this.set({
236
+ btnDisabled : true,
237
+ errorMsg : null,
238
+ successMsg:null
239
+ });
240
+ $.ajax({
241
+ type:'POST',
242
+ url:_unbxdBaseurl +'unbxd/config/keys?site='+ site,
243
+ contentType:"application/json",
244
+ data:data,
245
+ success:function( data ){
246
+ if(!data.success){
247
+ self.set('errorMsg', data.errors.message);
248
+ return;
249
+ }
250
+ _unbxdObject.step1 = true;
251
+ self.set({
252
+ step1 : true,
253
+ successMsg:unbxdMessages.authSuccess
254
+ });
255
+ },
256
+ error:function(){
257
+
258
+ },
259
+ complete:function(){
260
+ self.set('btnDisabled', false);
261
+ }
262
+ })
263
+
264
+ }
265
+ })
266
+
267
+
268
+
269
+ setStyles();
270
+ $(".magento-tooltip").popover({ trigger:'hover' });
271
+ };
272
+
273
+ //catalog view
274
+ var loadCatalogTab = function(){
275
+ var mappedAttributes = _unbxdObject.originalMapping, //catalog map first table
276
+ magentoFields = [ {value:'', disabled:false}],
277
+ customAttributes = [],
278
+ dataTypes = [];
279
+
280
+ var RactiveCatalog = Ractive.extend({
281
+ template: '#tab2Template',
282
+ partials: { item: $('#rowTemplate').text() },
283
+
284
+ addItem: function ( description ) {
285
+ this.push( 'customAttributes', {
286
+ field_name : '',
287
+ datatype: '',
288
+ canRemove:true
289
+ });
290
+ },
291
+
292
+ init: function ( options ) {
293
+ var self = this;
294
+
295
+ this.on({
296
+
297
+ newTodo: function ( event ) {
298
+ this.addItem();
299
+ setStyles();
300
+ }
301
+
302
+ });
303
+ },
304
+
305
+
306
+ });
307
+
308
+ var ractiveCatalog = new RactiveCatalog({
309
+ el: 'innerContainr',
310
+ data : _unbxdObject.catalogData ||
311
+ {
312
+ magentoFields : [{disabled:false, value:"", test:"test"}],
313
+ mappedAttributes : mappedAttributes,
314
+ customAttributes : customAttributes,
315
+ enableEdit : false,
316
+ dataTypes : dataTypes,
317
+ saveMapping:'disabled-btn',
318
+ disableSaveCustomAttr:'disabled-btn',
319
+ _unbxdObject:_unbxdObject,
320
+ successMsg:null,
321
+ errorMsg:null,
322
+ customAttrSucessMsg:null,
323
+ customAttrErrorMsg: null,
324
+ dataErrorMsg:null,
325
+ dataSuccessMsg:null,
326
+ disableButton:false
327
+ },
328
+
329
+ });
330
+
331
+ $(".magento-tooltip").popover({ trigger:'hover' });
332
+
333
+
334
+ //when user maps a magento attribute, remove it from magento fields
335
+ ractiveCatalog.observe('mappedAttributes.*.field_name', function(newValue, oldValue, keypath, s) {
336
+ if( !oldValue && !newValue )
337
+ this.set('saveMapping', 'disabled-btn');
338
+ this.set('saveMapping', null);
339
+ var count = 0,
340
+ mappedAttributes = this.get('mappedAttributes'),
341
+ arr = [],
342
+ magentoFields = this.get("magentoFields"),
343
+ self = this;
344
+
345
+
346
+ magentoFields.each(function(obj, i){
347
+ if(obj.value === newValue){
348
+ obj.disabled = 'unbxd-hide';
349
+ }
350
+ if( obj.value === oldValue ){
351
+ obj.disabled = '';
352
+ }
353
+
354
+ })
355
+ this.set('magentoFields', magentoFields);
356
+ ractiveCatalog.update();
357
+ _unbxdObject.catalogData = ractiveCatalog.data;
358
+ updateAllSelect();
359
+
360
+ });
361
+
362
+ ractiveCatalog.observe('customAttributes.*.field_name', function(newValue, oldValue, keypath, s) {
363
+ if( !newValue && !oldValue )
364
+ return;
365
+ this.set('disableSaveCustomAttr', 'disabled-btn');
366
+ var count = 0,
367
+ customAttributes = this.get('customAttributes'),
368
+ self = this,
369
+ magentoFields = this.get("magentoFields");
370
+
371
+ if(customAttributes && customAttributes.length > 0)
372
+ this.set('disableSaveCustomAttr', null);
373
+
374
+ magentoFields.each(function(obj, i){
375
+ if(obj.value === newValue ){
376
+ obj.disabled = 'unbxd-hide';
377
+ }
378
+ if(obj.value === oldValue)
379
+ obj.disabled = '';
380
+ })
381
+
382
+ this.set('magentoFields', magentoFields);
383
+ ractiveCatalog.update();
384
+ _unbxdObject.catalogData = ractiveCatalog.data;
385
+ updateAllSelect();
386
+ });
387
+
388
+ ractiveCatalog.observe('customAttributes.*.datatype', function(newValue, oldValue, keypath, s) {
389
+
390
+ if( !newValue && !oldValue )
391
+ return;
392
+
393
+ var customAttributes = this.get('customAttributes');
394
+
395
+ if(customAttributes && customAttributes.length > 0)
396
+ this.set('disableSaveCustomAttr', null);
397
+ });
398
+
399
+ if( !_unbxdObject.catalogData ){
400
+ var $obj = $.get( _unbxdBaseurl + "unbxd/config/fields?site="+site);
401
+ $obj.then(function( data ){
402
+
403
+ var allFields = data.fields,
404
+ field = null;
405
+
406
+ $.each(data.fields, function(a, val){
407
+ magentoFields.push({ value:val, disabled:false} );
408
+ });
409
+
410
+ $.each(data.mappedFields, function(a, obj){
411
+ if(obj.featured_field){
412
+ if(!obj.field_name)
413
+ obj.field_name = "";
414
+ mappedAttributes.push(obj );
415
+ }else{
416
+ obj.disabled = "disabled";
417
+ customAttributes.push(obj)
418
+ }
419
+
420
+ magentoFields.each( function(item, j){
421
+ if(obj.field_name === item.value)
422
+ item.disabled = 'unbxd-hide';
423
+
424
+ });
425
+
426
+ field = magentoFields.find(function( item ){
427
+ return item.value === obj.field_name
428
+ })
429
+
430
+ if(!field)
431
+ magentoFields.push({value:obj.field_name, disabled:'unbxd-hide'});
432
+
433
+ });
434
+
435
+ //data = JSON.parse(data);
436
+
437
+ _unbxdObject.originalMapping = $.map( mappedAttributes, function(obj){
438
+ return $.extend({}, obj);
439
+ })
440
+ if(customAttributes.length < 1)
441
+ customAttributes = [{ field_name: '', datatype: '', canRemove:true }];
442
+
443
+
444
+ mappedAttributes.each(function(obj, i){
445
+ obj.tooltip = unbxdDimensions.filter(
446
+ function( dimension ){
447
+ return dimension.value === obj.featured_field;
448
+ })[0].helpText;
449
+ });
450
+
451
+ ractiveCatalog.set({
452
+ mappedAttributes: mappedAttributes,
453
+ magentoFields: magentoFields,
454
+ customAttributes:customAttributes,
455
+ dataTypes : data.datatype
456
+ });
457
+
458
+ _unbxdObject.catalogData = ractiveCatalog.data;
459
+ $("._tooltip").popover({ trigger:'hover' });
460
+ $('select[name="unbxd-customattr"]').chosen('chosen:updated');
461
+ $('select[name="unbxd-select"]').prop('disabled', true).trigger("chosen:updated");
462
+ updateAllSelect();
463
+ setStyles();
464
+ ractiveCatalog.update();
465
+ })
466
+ }
467
+
468
+
469
+
470
+
471
+
472
+
473
+ ractiveCatalog.on({
474
+
475
+ showDataHelp:function(){
476
+ $('#dataHelp').toggle();
477
+ },
478
+
479
+ removeRow:function ( event ) {
480
+ var obj = this.get('customAttributes')[event.index.i];
481
+ if( !obj.canRemove ){
482
+ result = window.confirm("Are you sure, you want to delete "+obj.field_name );
483
+ if(result){
484
+ $.ajax({
485
+ url:_unbxdBaseurl + 'unbxd/config/fields?site='+site ,
486
+ type:'PUT',
487
+ data:JSON.stringify({ fields:[obj] }),
488
+ });
489
+ this.get('customAttributes').splice(event.index.i, 1);
490
+ }
491
+ }else{
492
+ this.get('customAttributes').splice(event.index.i, 1);
493
+ }
494
+
495
+ setStyles();
496
+ },
497
+
498
+ saveMapping:function(event){
499
+ var mapping = this.get('mappedAttributes'),
500
+ self = this, data = [];
501
+
502
+ this.set( {'saveMapping':'disabled-btn',
503
+ 'successMsg':null,
504
+ 'errorMsg':null
505
+ });
506
+ mapping.each(function(obj, i){
507
+ if(obj.field_name)
508
+ data.push(obj);
509
+ })
510
+
511
+ saveFields( data ).then(
512
+ function( data ){
513
+ if(data.success){
514
+ self.set({
515
+ enableEdit: false,
516
+ saveMapping:'disabled-btn',
517
+ successMsg:"Saved succesfully",
518
+ errorMsg:null
519
+ });
520
+ }else{
521
+ for(var key in data.errors)
522
+ self.set("errorMsg", data.errors[key])
523
+ }
524
+ self.set('saveMapping', null);
525
+ },
526
+ function( error ){
527
+
528
+ })
529
+
530
+ },
531
+
532
+ saveCustomAttribute : function(){
533
+ var customMapping = this.get('customAttributes'),
534
+ self = this,
535
+ data = [];
536
+ customMapping.each(function(obj, i){
537
+ if( obj.field_name )
538
+ data.push(obj);
539
+ });
540
+
541
+ this.set("disableSaveCustomAttr", "disabled-btn");
542
+ saveFields( data ).then(
543
+ function( response ){
544
+ if(response.success){
545
+ self.set("customAttrSucessMsg", "Saved succesfully");
546
+ data.each(function(obj){
547
+ obj.canRemove = false;
548
+ })
549
+ }else{
550
+ self.set("customAttrErrorMsg", "Some error in saving !");
551
+ }
552
+
553
+ self.set("disableSaveCustomAttr", null);
554
+ },
555
+ function( error ){
556
+
557
+ });
558
+
559
+ },
560
+
561
+ showCustomAttribute:function(){
562
+ updateAllSelect();
563
+ $(".add-attr").toggle();
564
+ $(".custom-attributes").toggle();
565
+ this.set({
566
+ disableSaveCustomAttr : 'disabled-btn',
567
+ customAttrSucessMsg : null,
568
+ customAttrErrorMsg : null
569
+ });
570
+ setStyles();
571
+ },
572
+
573
+ enableEdit:function(){
574
+ this.set({ enableEdit: true,
575
+ saveMapping:'disabled-btn',
576
+ successMsg:""
577
+ });
578
+ $('select[name="unbxd-select"]').prop('disabled', false).trigger("chosen:updated");
579
+ },
580
+
581
+ disableEdit:function(){
582
+
583
+ this.set({ enableEdit: false,
584
+ saveMapping:'disabled-btn',
585
+ mappedAttributes : _unbxdObject.originalMapping,
586
+ successMsg:null,
587
+ errorMsg:null
588
+ });
589
+
590
+ _unbxdObject.originalMapping = $.map( _unbxdObject.originalMapping, function(obj){
591
+ return $.extend({}, obj);
592
+ })
593
+
594
+ ractiveCatalog.update();
595
+ _unbxdObject.catalogData = ractiveCatalog.data;
596
+ $('select[name="unbxd-select"]').prop('disabled', true).trigger("chosen:updated");
597
+ },
598
+
599
+ uploadData:function(){
600
+ this.set({
601
+ dataSuccessMsg:"Uploading data",
602
+ dataErrorMsg:"",
603
+ disableButton:true
604
+ });
605
+ var self = this;
606
+
607
+ $.ajax({
608
+
609
+ url:_unbxdBaseurl + "unbxd/config/productsync?site=" +site,
610
+ type:"GET",
611
+ success : function(data){
612
+
613
+ if(data.success){
614
+ self.set({
615
+ dataSuccessMsg:unbxdMessages.uploadSuccess,
616
+ disableButton:false
617
+ });
618
+ _unbxdObject.step2 = true;
619
+ }else{
620
+ self.set({
621
+ dataErrorMsg:data.message,
622
+ dataSuccessMsg:"",
623
+ disableButton:false
624
+ });
625
+ }
626
+ ractiveParent.update();
627
+ },
628
+ error : function(){
629
+ self.set({
630
+ dataErrorMsg : "Some error, please try again"
631
+ });
632
+ },
633
+ complete:function(){
634
+ self.set({
635
+ disableButton:false
636
+ });
637
+ }
638
+
639
+ });
640
+
641
+ }
642
+
643
+ });
644
+
645
+ setStyles();
646
+
647
+ };
648
+
649
+ //analytics view
650
+ var loadAnalyticsTab = function(){
651
+
652
+ var ractiveAnalytics = new Ractive({
653
+ el: 'innerContainr',
654
+ template: '#tab3Template',
655
+ data:{
656
+ productClick : _unbxdObject.ractiveAnalytics.CLICKRANK || false,
657
+ addToCartClick : _unbxdObject.ractiveAnalytics.ADDTOCART || false,
658
+ productBuysClick : _unbxdObject.ractiveAnalytics.ORDER || false,
659
+ _unbxdObject:_unbxdObject
660
+ }
661
+ });
662
+
663
+ _unbxdObject.pollingId = window.setInterval(function(){
664
+ $.get(_unbxdBaseurl+"unbxd/config/analyticsimpression?site="+site)
665
+ .then(
666
+ function(data){
667
+ if(data.success){
668
+ data = data.IntegrationDetails[0];
669
+ ractiveAnalytics.set({
670
+ productClick:data.CLICKRANK,
671
+ addToCartClick:data.ADDTOCART,
672
+ productBuysClick:data.ORDER
673
+ })
674
+ _unbxdObject.ractiveAnalytics = data;
675
+
676
+ if(data.CLICKRANK && data.ADDTOCART && data.ORDER)
677
+ clearInterval( _unbxdObject.pollingId );
678
+ }
679
+ },
680
+ function(error){
681
+ clearInterval( _unbxdObject.pollingId );
682
+ });
683
+ }, 3000);
684
+
685
+
686
+ setStyles();
687
+
688
+ };
689
+
690
+ //widgets view
691
+ var loadWidgetsTab = function(){
692
+
693
+ var ractiveWidgets = new Ractive({
694
+ el: 'innerContainr',
695
+ template: '#tab4Template'
696
+ });
697
+
698
+ ractiveWidgets.on({
699
+ showCMSHelp:function(){
700
+ $('#cmsHelp').toggle();
701
+ }
702
+ });
703
+
704
+ setStyles();
705
+ $(".magento-tooltip").popover({ trigger:'hover' });
706
+
707
+ };
708
+
709
+ var configureSelect = function(){
710
+ var chosenObj = $('select[name="unbxd-select"]').chosen();
711
+ chosenObj.trigger('chosen:updated');
712
+ };
713
+ //re render all chosen selects
714
+ var updateAllSelect = function(){
715
+ $('select').trigger('chosen:updated');
716
+ };
717
+
718
+ var setStyles = function(){
719
+ $('.middle-nav-magento').css("height", $('#innerContainr').css("height"));
720
+ //$('select[name="unbxd-select"]').chosen({})
721
+ };
722
+
723
+
724
+ var saveFields = function( data ){
725
+ return $.ajax({
726
+ data: JSON.stringify({ "fields": data }) ,
727
+ contentType:'application/json',
728
+ type:'POST',
729
+ url: _unbxdBaseurl + 'unbxd/config/fields?site='+site
730
+ })
731
+ }
732
+
733
+ }
734
+
735
+ Ractive.decorators.chosen.type.site = function (node) {
736
+ return {
737
+ disable_search_threshold:5
738
+ }
739
+ };
740
+
741
+ })(jQuery)
742
+
743
+ jQuery.noConflict();
744
+ //hack for prototypejs
745
+ Array.prototype.map = function(callback, thisArg) {
746
+
747
+ var T, A, k;
748
+
749
+ if (this == null) {
750
+ throw new TypeError(" this is null or not defined");
751
+ }
752
+
753
+ var O = Object(this);
754
+ var len = O.length >>> 0;
755
+
756
+ if (typeof callback !== "function") {
757
+ throw new TypeError(callback + " is not a function");
758
+ }
759
+
760
+ if (arguments.length > 1) {
761
+ T = thisArg;
762
+ }
763
+
764
+ A = new Array(len);
765
+ k = 0;
766
+ while (k < len) {
767
+ var kValue, mappedValue;
768
+ if (k in O) {
769
+ kValue = O[k];
770
+ mappedValue = callback.call(T, kValue, k, O);
771
+ A[k] = mappedValue;
772
+ }
773
+ k++;
774
+ }
775
+
776
+ return A;
777
+ };
778
+
779
+
780
+
skin/adminhtml/default/default/unbxd/js/lib/bootstrap-tooltip.js ADDED
@@ -0,0 +1 @@
 
1
+ if(typeof jQuery==="undefined"){throw new Error("Bootstrap's JavaScript requires jQuery")}+function(e){"use strict";function n(n){return this.each(function(){var r=e(this);var i=r.data("bs.tooltip");var s=typeof n=="object"&&n;if(!i&&n=="destroy")return;if(!i)r.data("bs.tooltip",i=new t(this,s));if(typeof n=="string")i[n]()})}var t=function(e,t){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null;this.init("tooltip",e,t)};t.VERSION="3.2.0";t.DEFAULTS={animation:true,placement:"top",selector:false,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:false,container:false,viewport:{selector:"body",padding:0}};t.prototype.init=function(t,n,r){this.enabled=true;this.type=t;this.$element=e(n);this.options=this.getOptions(r);this.$viewport=this.options.viewport&&e(this.options.viewport.selector||this.options.viewport);var i=this.options.trigger.split(" ");for(var s=i.length;s--;){var o=i[s];if(o=="click"){this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this))}else if(o!="manual"){var u=o=="hover"?"mouseenter":"focusin";var a=o=="hover"?"mouseleave":"focusout";this.$element.on(u+"."+this.type,this.options.selector,e.proxy(this.enter,this));this.$element.on(a+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()};t.prototype.getDefaults=function(){return t.DEFAULTS};t.prototype.getOptions=function(t){t=e.extend({},this.getDefaults(),this.$element.data(),t);if(t.delay&&typeof t.delay=="number"){t.delay={show:t.delay,hide:t.delay}}return t};t.prototype.getDelegateOptions=function(){var t={};var n=this.getDefaults();this._options&&e.each(this._options,function(e,r){if(n[e]!=r)t[e]=r});return t};t.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);if(!n){n=new this.constructor(t.currentTarget,this.getDelegateOptions());e(t.currentTarget).data("bs."+this.type,n)}clearTimeout(n.timeout);n.hoverState="in";if(!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout(function(){if(n.hoverState=="in")n.show()},n.options.delay.show)};t.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);if(!n){n=new this.constructor(t.currentTarget,this.getDelegateOptions());e(t.currentTarget).data("bs."+this.type,n)}clearTimeout(n.timeout);n.hoverState="out";if(!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){if(n.hoverState=="out")n.hide()},n.options.delay.hide)};t.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var n=e.contains(document.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!n)return;var r=this;var i=this.tip();var s=this.getUID(this.type);this.setContent();i.attr("id",s);this.$element.attr("aria-describedby",s);if(this.options.animation)i.addClass("fade");var o=typeof this.options.placement=="function"?this.options.placement.call(this,i[0],this.$element[0]):this.options.placement;var u=/\s?auto?\s?/i;var a=u.test(o);if(a)o=o.replace(u,"")||"top";i.detach().css({top:0,left:0,display:"block"}).addClass(o).data("bs."+this.type,this);this.options.container?i.appendTo(this.options.container):i.insertAfter(this.$element);var f=this.getPosition();var l=i[0].offsetWidth;var c=i[0].offsetHeight;if(a){var h=o;var p=this.$element.parent();var d=this.getPosition(p);o=o=="bottom"&&f.top+f.height+c-d.scroll>d.height?"top":o=="top"&&f.top-d.scroll-c<0?"bottom":o=="right"&&f.right+l>d.width?"left":o=="left"&&f.left-l<d.left?"right":o;i.removeClass(h).addClass(o)}var v=this.getCalculatedOffset(o,f,l,c);this.applyPlacement(v,o);var m=function(){r.$element.trigger("shown.bs."+r.type);r.hoverState=null};e.support.transition&&this.$tip.hasClass("fade")?i.one("bsTransitionEnd",m).emulateTransitionEnd(150):m()}};t.prototype.applyPlacement=function(t,n){var r=this.tip();var i=r[0].offsetWidth;var s=r[0].offsetHeight;var o=parseInt(r.css("margin-top"),10);var u=parseInt(r.css("margin-left"),10);if(isNaN(o))o=0;if(isNaN(u))u=0;t.top=t.top+o;t.left=t.left+u;e.offset.setOffset(r[0],e.extend({using:function(e){r.css({top:Math.round(e.top),left:Math.round(e.left)})}},t),0);r.addClass("in");var a=r[0].offsetWidth;var f=r[0].offsetHeight;if(n=="top"&&f!=s){t.top=t.top+s-f}var l=this.getViewportAdjustedDelta(n,t,a,f);if(l.left)t.left+=l.left;else t.top+=l.top;var c=l.left?l.left*2-i+a:l.top*2-s+f;var h=l.left?"left":"top";var p=l.left?"offsetWidth":"offsetHeight";r.offset(t);this.replaceArrow(c,r[0][p],h)};t.prototype.replaceArrow=function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")};t.prototype.setContent=function(){var e=this.tip();var t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t);e.removeClass("fade in top bottom left right")};t.prototype.hide=function(){function i(){if(t.hoverState!="in")n.detach();t.$element.trigger("hidden.bs."+t.type)}var t=this;var n=this.tip();var r=e.Event("hide.bs."+this.type);this.$element.removeAttr("aria-describedby");this.$element.trigger(r);this.$element.show();if(r.isDefaultPrevented())return;n.removeClass("in");e.support.transition&&this.$tip.hasClass("fade")?n.one("bsTransitionEnd",i).emulateTransitionEnd(150):i();this.hoverState=null;return this};t.prototype.fixTitle=function(){var e=this.$element;if(e.attr("title")||typeof e.attr("data-original-title")!="string"){e.attr("data-original-title",e.attr("title")||"").attr("title","")}};t.prototype.hasContent=function(){return this.getTitle()};t.prototype.getPosition=function(t){t=t||this.$element;var n=t[0];var r=n.tagName=="BODY";return e.extend({},typeof n.getBoundingClientRect=="function"?n.getBoundingClientRect():null,{scroll:r?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop(),width:r?e(window).width():t.outerWidth(),height:r?e(window).height():t.outerHeight()},r?{top:0,left:0}:t.offset())};t.prototype.getCalculatedOffset=function(e,t,n,r){return e=="bottom"?{top:t.top+t.height,left:t.left+t.width/2-n/2}:e=="top"?{top:t.top-r,left:t.left+t.width/2-n/2}:e=="left"?{top:t.top+t.height/2-r/2,left:t.left-n}:{top:t.top+t.height/2-r/2,left:t.left+t.width}};t.prototype.getViewportAdjustedDelta=function(e,t,n,r){var i={top:0,left:0};if(!this.$viewport)return i;var s=this.options.viewport&&this.options.viewport.padding||0;var o=this.getPosition(this.$viewport);if(/right|left/.test(e)){var u=t.top-s-o.scroll;var a=t.top+s-o.scroll+r;if(u<o.top){i.top=o.top-u}else if(a>o.top+o.height){i.top=o.top+o.height-a}}else{var f=t.left-s;var l=t.left+s+n;if(f<o.left){i.left=o.left-f}else if(l>o.width){i.left=o.left+o.width-l}}return i};t.prototype.getTitle=function(){var e;var t=this.$element;var n=this.options;e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title);return e};t.prototype.getUID=function(e){do e+=~~(Math.random()*1e6);while(document.getElementById(e));return e};t.prototype.tip=function(){return this.$tip=this.$tip||e(this.options.template)};t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")};t.prototype.validate=function(){if(!this.$element[0].parentNode){this.hide();this.$element=null;this.options=null}};t.prototype.enable=function(){this.enabled=true};t.prototype.disable=function(){this.enabled=false};t.prototype.toggleEnabled=function(){this.enabled=!this.enabled};t.prototype.toggle=function(t){var n=this;if(t){n=e(t.currentTarget).data("bs."+this.type);if(!n){n=new this.constructor(t.currentTarget,this.getDelegateOptions());e(t.currentTarget).data("bs."+this.type,n)}}n.tip().hasClass("in")?n.leave(n):n.enter(n)};t.prototype.destroy=function(){clearTimeout(this.timeout);this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var r=e.fn.tooltip;e.fn.tooltip=n;e.fn.tooltip.Constructor=t;e.fn.tooltip.noConflict=function(){e.fn.tooltip=r;return this}}(jQuery);+function(e){"use strict";function n(n){return this.each(function(){var r=e(this);var i=r.data("bs.popover");var s=typeof n=="object"&&n;if(!i&&n=="destroy")return;if(!i)r.data("bs.popover",i=new t(this,s));if(typeof n=="string")i[n]()})}var t=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");t.VERSION="3.2.0";t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'});t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype);t.prototype.constructor=t;t.prototype.getDefaults=function(){return t.DEFAULTS};t.prototype.setContent=function(){var e=this.tip();var t=this.getTitle();var n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t);e.find(".popover-content").empty()[this.options.html?typeof n=="string"?"html":"append":"text"](n);e.removeClass("fade top bottom left right in");if(!e.find(".popover-title").html())e.find(".popover-title").hide()};t.prototype.hasContent=function(){return this.getTitle()||this.getContent()};t.prototype.getContent=function(){var e=this.$element;var t=this.options;return e.attr("data-content")||(typeof t.content=="function"?t.content.call(e[0]):t.content)};t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};t.prototype.tip=function(){if(!this.$tip)this.$tip=e(this.options.template);return this.$tip};var r=e.fn.popover;e.fn.popover=n;e.fn.popover.Constructor=t;e.fn.popover.noConflict=function(){e.fn.popover=r;return this}}(jQuery)
skin/adminhtml/default/default/unbxd/js/lib/chosen.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ /* Chosen v1.1.0 | (c) 2011-2013 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */
2
+ !function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),children:0,disabled:a.disabled}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&amp;"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.text));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,this.outerHTML(c)):"":""},AbstractChosen.prototype.result_add_group=function(a){var b;return a.search_match||a.group_match?a.active_options>0?(b=document.createElement("li"),b.className="group-result",b.innerHTML=a.search_text,this.outerHTML(b)):"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m;for(this.no_results_clear(),e=0,g=this.get_search_text(),a=g.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),d=this.search_contains?"":"^",c=new RegExp(d+a,"i"),j=new RegExp(a,"i"),m=this.results_data,k=0,l=m.length;l>k;k++)b=m[k],b.search_match=!1,f=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(f=this.results_data[b.group_array_index],0===f.active_options&&f.search_match&&(e+=1),f.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(e+=1),b.search_match?(g.length&&(h=b.search_text.search(j),i=b.search_text.substr(0,h+g.length)+"</em>"+b.search_text.substr(h+g.length),b.search_text=i.substr(0,h)+"<em>"+i.substr(h)),null!=f&&(f.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>e&&g.length?(this.update_results_content(""),this.no_results(g)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},AbstractChosen.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},AbstractChosen.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},AbstractChosen.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d?d.destroy():d||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("<div />",c),this.is_multiple?this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="'+this.default_text+'" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>'):this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>'+this.default_text+'</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>'),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior(),this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.search_results.bind("touchstart.chosen",function(b){a.search_results_touchstart(b)}),this.search_results.bind("touchmove.chosen",function(b){a.search_results_touchmove(b)}),this.search_results.bind("touchend.chosen",function(b){a.search_results_touchend(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.form_field_jq.bind("chosen:close.chosen",function(b){a.input_blur(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.search_field.bind("cut.chosen",function(b){a.clipboard_event_checker(b)}),this.search_field.bind("paste.chosen",function(b){a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(this.container[0].ownerDocument).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b;return a.originalEvent&&(b=-a.originalEvent.wheelDelta||a.originalEvent.detail),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){var c;return c=a(b.target).closest(".chosen-container"),c.length&&this.container[0]===c[0]?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results(),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}))},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("<li />",{"class":"search-choice"}).html("<span>"+b.html+"</span>"),b.disabled?c.addClass("search-choice-disabled"):(d=a("<a />",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):this.reset_single_select_options(),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(c.text),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").text(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after('<abbr class="search-choice-close"></abbr>'),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.val()===this.default_text?"":a("<div/>").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('<li class="no-results">'+this.results_none_found+' "<span></span>"</li>'),c.find("span").first().html(b),this.search_results.append(c),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("<div />",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}.call(this);
skin/adminhtml/default/default/unbxd/js/lib/ractive-chosen.js ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+
3
+ ractive-decorators-chosen
4
+ =============================================
5
+
6
+ Integrate Ractive with chosen
7
+
8
+ ==========================
9
+
10
+ Troubleshooting: If you're using a module system in your app (AMD or
11
+ something more nodey) then you may need to change the paths below,
12
+ where it says `require( 'ractive' )` or `define([ 'ractive' ]...)`.
13
+
14
+ ==========================
15
+
16
+ Usage: Include this file on your page below Ractive, e.g:
17
+
18
+ <script src='lib/ractive.js'></script>
19
+ <script src='lib/ractive-decorators-chosen.js'></script>
20
+
21
+ Or, if you're using a module loader, require this module:
22
+
23
+ // requiring the plugin will 'activate' it - no need to use
24
+ // the return value
25
+ require( 'ractive-decorators-chosen' );
26
+
27
+ */
28
+
29
+ (function ( global, factory ) {
30
+
31
+ 'use strict';
32
+
33
+ // Common JS (i.e. browserify) environment
34
+ if ( typeof module !== 'undefined' && module.exports && typeof require === 'function' ) {
35
+ factory( require( 'ractive' ), require( 'jquery' ) );
36
+ }
37
+
38
+ // AMD?
39
+ else if ( typeof define === 'function' && define.amd ) {
40
+ define([ 'ractive', 'jquery' ], factory );
41
+ }
42
+
43
+ // browser global
44
+ else if ( global.Ractive && global.jQuery) {
45
+ factory( global.Ractive, global.jQuery );
46
+ }
47
+
48
+ else {
49
+ throw new Error( 'Could not find Ractive or jQuery! They must be loaded before the ractive-decorators-chosen plugin' );
50
+ }
51
+
52
+ }( typeof window !== 'undefined' ? window : this, function ( Ractive, jQuery ) {
53
+
54
+ 'use strict';
55
+
56
+ var chosenDecorator;
57
+ var $ = jQuery;
58
+
59
+ chosenDecorator = function (node, type) {
60
+
61
+ var ractive = node._ractive.root;
62
+ var setting = false;
63
+ var observer;
64
+
65
+ var options = {};
66
+ if (type) {
67
+ if (!chosenDecorator.type.hasOwnProperty(type)) {
68
+ throw new Error( 'Ractive Chosen type "' + type + '" is not defined!' );
69
+ }
70
+
71
+ options = chosenDecorator.type[type];
72
+ if (typeof options === 'function') {
73
+ options = options.call(this, node);
74
+ }
75
+ }
76
+
77
+ // Push changes from ractive to chosen
78
+ if (node._ractive.binding) {
79
+ observer = ractive.observe(node._ractive.binding.keypath, function (newvalue) {
80
+ if (!setting) {
81
+ setting = true;
82
+ window.setTimeout(function () {
83
+ if(newvalue === '')
84
+ $(node).trigger('chosen:updated');
85
+
86
+ $(node).change();
87
+ setting = false;
88
+ }, 0);
89
+ }
90
+ });
91
+ }
92
+
93
+ // Pull changes from chosen to ractive
94
+ $(node).chosen(options).on('change', function () {
95
+ if (!setting) {
96
+ setting = true;
97
+ ractive.updateModel();
98
+ setting = false;
99
+ }
100
+ });
101
+
102
+ return {
103
+ teardown: function () {
104
+ $(node).chosen('destroy');
105
+
106
+ if (observer) {
107
+ observer.cancel();
108
+ }
109
+ }
110
+ };
111
+ };
112
+
113
+ chosenDecorator.type = {};
114
+
115
+ Ractive.decorators.chosen = chosenDecorator;
116
+
117
+ }));
skin/adminhtml/default/default/unbxd/js/lib/ractive.js ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ ractive.min.js v0.5.8
3
+ 2014-09-18 - commit 2e726021
4
+
5
+ http://ractivejs.org
6
+ http://twitter.com/RactiveJS
7
+
8
+ Released under the MIT License.
9
+ */
10
+
11
+ !function(a){"use strict";var b=a.Ractive,c=function(){var a={el:void 0,append:!1,template:{v:1,t:[]},"yield":null,preserveWhitespace:!1,sanitize:!1,stripComments:!0,data:{},computed:{},magic:!1,modifyArrays:!0,adapt:[],isolated:!1,twoway:!0,lazy:!1,noIntro:!1,transitionsEnabled:!0,complete:void 0,noCssTransform:!1,debug:!1};return a}(),d={linear:function(a){return a},easeIn:function(a){return Math.pow(a,3)},easeOut:function(a){return Math.pow(a-1,3)+1},easeInOut:function(a){return(a/=.5)<1?.5*Math.pow(a,3):.5*(Math.pow(a-2,3)+2)}},e=[],f=Object.prototype.hasOwnProperty,g=function(){var a=Object.prototype.toString;return function(b){return"[object Array]"===a.call(b)}}(),h=function(){var a=Object.prototype.toString;return function(b){return b&&"[object Object]"===a.call(b)}}(),i=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},j=function(a,b,c,d,e){var f,g,h;return a.push(function(){g=a.interpolate}),h=/^([+-]?[0-9]+\.?(?:[0-9]+)?)(px|em|ex|%|in|cm|mm|pt|pc)$/,f={number:function(a,b){var c;return e(a)&&e(b)?(a=+a,b=+b,c=b-a,c?function(b){return a+b*c}:function(){return a}):null},array:function(a,b){var d,e,f,h;if(!c(a)||!c(b))return null;for(d=[],e=[],h=f=Math.min(a.length,b.length);h--;)e[h]=g(a[h],b[h]);for(h=f;h<a.length;h+=1)d[h]=a[h];for(h=f;h<b.length;h+=1)d[h]=b[h];return function(a){for(var b=f;b--;)d[b]=e[b](a);return d}},object:function(a,c){var e,f,h,i,j;if(!d(a)||!d(c))return null;e=[],i={},h={};for(j in a)b.call(a,j)&&(b.call(c,j)?(e.push(j),h[j]=g(a[j],c[j])):i[j]=a[j]);for(j in c)b.call(c,j)&&!b.call(a,j)&&(i[j]=c[j]);return f=e.length,function(a){for(var b,c=f;c--;)b=e[c],i[b]=h[b](a);return i}}}}(e,f,g,h,i),k=function(){var a;return a="undefined"==typeof document?!1:document&&document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")}(),l=function(){function a(a){var b,d,e,f,g,h="";if(!c[a]){for(e=[];h.length<a;)h+=1;for(b=parseInt(h,2),f=function(a){return"1"===a},g=0;b>=g;g+=1){for(d=g.toString(2);d.length<a;)d="0"+d;e[g]=Array.prototype.map.call(d,f)}c[a]=e}return c[a]}var b,c={};return b=function(b){var d,e,f,g,h,i;for(d=b.split("."),(e=c[d.length])||(e=a(d.length)),h=[],f=function(a,b){return a?"*":d[b]},g=e.length;g--;)i=e[g].map(f).join("."),h.hasOwnProperty(i)||(h.push(i),h[i]=!0);return h}}(),m=function(a){function b(d,e,f,g){var h=arguments[4];void 0===h&&(h=!1);var i,j,k=!0;for(j=e.length;j>=0;j--)i=d._subs[e[j]],i&&(k=c(d,i,f,g)&&k);if(d._parent&&k){if(h&&d.component){var l=d.component.name+"."+e[e.length-1];e=a(l),f&&(f.component=d)}b(d._parent,e,f,g)}}function c(a,b,c,d){var e=null,f=!1;c&&(d=[c].concat(d));for(var g=0,h=b.length;h>g;g+=1)b[g].apply(a,d)===!1&&(f=!0);return c&&f&&(e=c.original)&&(e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()),!f}var d;return d=function(c,d){var e=arguments[2];if(void 0===e&&(e={}),d){var f=a(d);b(c,f,e.event,e.args,!0)}}}(l),n=function(a,b){var c=a.indexOf(b);-1!==c&&a.splice(c,1)},o=function(){function a(a){setTimeout(a,0)}function b(a,b){return function(){for(var c;c=a.shift();)c(b)}}function c(a,b,d,f){var g;if(b===a)throw new TypeError("A promise's fulfillment handler cannot return the same promise");if(b instanceof e)b.then(d,f);else if(!b||"object"!=typeof b&&"function"!=typeof b)d(b);else{try{g=b.then}catch(h){return void f(h)}if("function"==typeof g){var i,j,k;j=function(b){i||(i=!0,c(a,b,d,f))},k=function(a){i||(i=!0,f(a))};try{g.call(b,j,k)}catch(h){if(!i)return f(h),void(i=!0)}}else d(b)}}var d,e,f={},g={},h={};return"function"==typeof o?e=o:(e=function(d){var i,j,k,l,m,n,o=[],p=[],q=f;k=function(c){return function(d){q===f&&(i=d,q=c,j=b(q===g?o:p,i),a(j))}},l=k(g),m=k(h);try{d(l,m)}catch(r){m(r)}return n={then:function(b,d){var g=new e(function(e,h){var i=function(a,b,d){b.push("function"==typeof a?function(b){var d;try{d=a(b),c(g,d,e,h)}catch(f){h(f)}}:d)};i(b,o,e),i(d,p,h),q!==f&&a(j)});return g}},n["catch"]=function(a){return this.then(null,a)},n},e.all=function(a){return new e(function(b,c){var d,e,f,g=[];if(!a.length)return void b(g);for(f=function(e){a[e].then(function(a){g[e]=a,--d||b(g)},c)},d=e=a.length;e--;)f(e)})},e.resolve=function(a){return new e(function(b){b(a)})},e.reject=function(a){return new e(function(b,c){c(a)})}),d=e}(),p=function(){var a=/\[\s*(\*|[0-9]|[1-9][0-9]+)\s*\]/g;return function(b){return(b||"").replace(a,".$1")}}(),q=function(a){do if(void 0!==a.context)return a.context;while(a=a.parent);return""},r=function(a,b){return null===a&&null===b?!0:"object"==typeof a||"object"==typeof b?!1:a===b},s=function(a,b,c){var d;a.push(function(){return d=a.runloop});var e=function(a,b,c,d,e){this.root=a,this.keypath=b,this.priority=e,this.otherInstance=c,this.otherKeypath=d,this.bind(),this.value=this.root.viewmodel.get(this.keypath)};return e.prototype={setValue:function(a){var e=this;return this.updating||this.counterpart&&this.counterpart.updating?void(this.value=a):void(b(a)&&a._ractive&&a._ractive.setting||c(a,this.value)||(this.updating=!0,d.addViewmodel(this.otherInstance.viewmodel),this.otherInstance.viewmodel.set(this.otherKeypath,a),this.value=a,d.scheduleTask(function(){return e.updating=!1})))},bind:function(){this.root.viewmodel.register(this.keypath,this)},rebind:function(a){this.unbind(),this.keypath=a,this.counterpart.otherKeypath=a,this.bind()},unbind:function(){this.root.viewmodel.unregister(this.keypath,this)}},function(a,b,c,d){var f,g,h,i,j,k;f=c+"="+d,h=a.bindings,h[f]||(g=a.instance,i=a.parentFragment.priority,j=new e(b,c,g,d,i),h.push(j),g.twoway&&(k=new e(g,d,b,c,1),h.push(k),j.counterpart=k,k.counterpart=j),h[f]=j)}}(e,g,r),t=function(a,b,c){function d(a,b){var c;if("."===b)return a;if(c=a?a.split("."):[],"../"===b.substr(0,3)){for(;"../"===b.substr(0,3);){if(!c.length)throw new Error(f);c.pop(),b=b.substring(3)}return c.push(b),c.join(".")}return a?a+b.replace(/^\.\//,"."):b.replace(/^\.\/?/,"")}var e,f,g;return f='Could not resolve reference - too many "../" prefixes',g={evaluateWrapped:!0},e=function h(e,f,i){var j,k,l,m,n,o,p,q,r,s;if(f=a(f),"~/"===f.substr(0,2))return f.substring(2);if("."===f.charAt(0))return d(b(i),f);k=f.split(".")[0];do if(j=i.context,j&&(o=!0,n=e.viewmodel.get(j,g),n&&("object"==typeof n||"function"==typeof n)&&k in n))return j+"."+f;while(i=i.parent);if(k in e.data||k in e.viewmodel.computations)return f;if(e._parent&&!e.isolated){if(i=e.component.parentFragment,i.indexRefs&&void 0!==(l=i.indexRefs[f]))return e.component.indexRefBindings[f]=f,void e.viewmodel.set(f,l,!0);if(m=h(e._parent,f,i)){for(p=m.split("."),q=f.split(".");p.length>1&&q.length>1&&p[p.length-1]===q[q.length-1];)p.pop(),q.pop();return r=p.join("."),s=q.join("."),e.viewmodel.set(s,e._parent.viewmodel.get(r),!0),c(e.component,e._parent,r,s),f}}return o?void 0!==e.viewmodel.get(f)?f:void 0:f}}(p,q,s),u=function(a){function b(a){a.detach()}function c(a){a.detachNodes()}function d(a){!a.ready||a.outros.length||a.outroChildren||(a.outrosComplete||(a.parent?a.parent.decrementOutros(a):a.detachNodes(),a.outrosComplete=!0),a.intros.length||a.totalChildren||("function"==typeof a.callback&&a.callback(),a.parent&&a.parent.decrementTotal()))}var e=function(a,b){this.callback=a,this.parent=b,this.intros=[],this.outros=[],this.children=[],this.totalChildren=this.outroChildren=0,this.detachQueue=[],this.outrosComplete=!1,b&&b.addChild(this)};return e.prototype={addChild:function(a){this.children.push(a),this.totalChildren+=1,this.outroChildren+=1},decrementOutros:function(){this.outroChildren-=1,d(this)},decrementTotal:function(){this.totalChildren-=1,d(this)},add:function(a){var b=a.isIntro?this.intros:this.outros;b.push(a)},remove:function(b){var c=b.isIntro?this.intros:this.outros;a(c,b),d(this)},init:function(){this.ready=!0,d(this)},detachNodes:function(){this.detachQueue.forEach(b),this.children.forEach(c)}},e}(n),v=function(a,b,c,d,e,f){function g(){var a,c,d;for(a=0;a<k.viewmodels.length;a+=1)c=k.viewmodels[a],d=c.applyChanges(),d&&b(c.ractive,"change",{args:[d]});for(k.viewmodels.length=0,h(),a=0;a<k.views.length;a+=1)k.views[a].update();for(k.views.length=0,a=0;a<k.tasks.length;a+=1)k.tasks[a]();return k.tasks.length=0,k.viewmodels.length?g():void 0}function h(){var a,b,c,d;for(a=m.length;a--;)b=m[a],b.keypath&&m.splice(a,1),(c=e(b.root,b.ref,b.parentFragment))&&((d||(d=[])).push({item:b,keypath:c}),m.splice(a,1));d&&d.forEach(i)}function i(a){a.item.resolve(a.keypath)}var j,k,l,m=[];return l={start:function(a,b){var c,e;return b&&(c=new d(function(a){return e=a})),k={previousBatch:k,transitionManager:new f(e,k&&k.transitionManager),views:[],tasks:[],viewmodels:[]},a&&k.viewmodels.push(a.viewmodel),c},end:function(){g(),k.transitionManager.init(),k=k.previousBatch},addViewmodel:function(a){k?-1===k.viewmodels.indexOf(a)&&k.viewmodels.push(a):a.applyChanges()},registerTransition:function(a){a._manager=k.transitionManager,k.transitionManager.add(a)},addView:function(a){k.views.push(a)},addUnresolved:function(a){m.push(a)},removeUnresolved:function(a){c(m,a)},detachWhenReady:function(a){k.transitionManager.detachQueue.push(a)},scheduleTask:function(a){k?k.tasks.push(a):a()}},a.runloop=l,j=l}(e,m,n,o,t,u),w=function(){var a=/^\s*[0-9]+\s*$/;return function(b){return a.test(b)?[]:{}}}(),x=function(a,b,c){function d(b,c,d){function e(b){var d,e;b.value=c,b.updating||(e=b.ractive,d=b.keypath,b.updating=!0,a.start(e),e.viewmodel.mark(d),a.end(),b.updating=!1)}var f,g,h,i,j,k;if(f=b.obj,g=b.prop,d&&!d.configurable){if("length"===g)return;throw new Error('Cannot use magic mode with property "'+g+'" - object is not configurable')}d&&(h=d.get,i=d.set),j=h||function(){return c},k=function(a){i&&i(a),c=h?h():a,k._ractiveWrappers.forEach(e)},k._ractiveWrappers=[b],Object.defineProperty(f,g,{get:j,set:k,enumerable:!0,configurable:!0})}var e,f,g;try{Object.defineProperty({},"test",{value:0}),f={filter:function(a,b,d){var e,f,g,h,i;return b?(e=b.split("."),f=e.pop(),g=e.join("."),(h=d.viewmodel.wrapped[g])&&!h.magic?!1:(i=d.get(g),c(i)&&/^[0-9]+$/.test(f)?!1:i&&("object"==typeof i||"function"==typeof i))):!1},wrap:function(a,b,c){return new g(a,b,c)}},g=function(a,b,c){var e,f,g,h;return this.magic=!0,this.ractive=a,this.keypath=c,this.value=b,e=c.split("."),this.prop=e.pop(),f=e.join("."),this.obj=f?a.get(f):a.data,g=this.originalDescriptor=Object.getOwnPropertyDescriptor(this.obj,this.prop),g&&g.set&&(h=g.set._ractiveWrappers)?void(-1===h.indexOf(this)&&h.push(this)):void d(this,b,g)},g.prototype={get:function(){return this.value},reset:function(b){this.updating||(this.updating=!0,this.obj[this.prop]=b,a.addViewmodel(this.ractive.viewmodel),this.ractive.viewmodel.mark(this.keypath),this.updating=!1)},set:function(a,c){this.updating||(this.obj[this.prop]||(this.updating=!0,this.obj[this.prop]=b(a),this.updating=!1),this.obj[this.prop][a]=c)},teardown:function(){var a,b,c,d,e;return this.updating?!1:(a=Object.getOwnPropertyDescriptor(this.obj,this.prop),b=a&&a.set,void(b&&(d=b._ractiveWrappers,e=d.indexOf(this),-1!==e&&d.splice(e,1),d.length||(c=this.obj[this.prop],Object.defineProperty(this.obj,this.prop,this.originalDescriptor||{writable:!0,enumerable:!0,configurable:!0}),this.obj[this.prop]=c))))}}}catch(h){f=!1}return e=f}(v,w,g),y=function(a){return!!a}(x),z={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},A=function(a,b){var c;return c=a?function(a,c){return c&&c!==b.html?document.createElementNS(c,a):document.createElement(a)}:function(a,c){if(c&&c!==b.html)throw"This browser does not support namespaces other than http://www.w3.org/1999/xhtml. The most likely cause of this error is that you're trying to render SVG in an older browser. See http://docs.ractivejs.org/latest/svg-and-older-browsers for more information";return document.createElement(a)}}(k,z),B=function(){var a="object"==typeof document;return a}(),C=function(a){var b;try{Object.defineProperty({},"test",{value:0}),a&&Object.defineProperty(document.createElement("div"),"test",{value:0}),b=Object.defineProperty}catch(c){b=function(a,b,c){a[b]=c.value}}return b}(B),D=function(a,b,c){var d;try{try{Object.defineProperties({},{test:{value:0}})}catch(e){throw e}c&&Object.defineProperties(a("div"),{test:{value:0}}),d=Object.defineProperties}catch(e){d=function(a,c){var d;for(d in c)c.hasOwnProperty(d)&&b(a,d,c[d])}}return d}(A,C,B),E=function(a){return function(b,c,d){var e;if("string"!=typeof c||!a(d))throw new Error("Bad arguments");if(e=+b.get(c)||0,!a(e))throw new Error("Cannot add to a non-numeric value");return b.set(c,e+d)}}(i),F=function(a){return function(b,c){return a(this,b,void 0===c?1:+c)}}(E),G=function(a){var b=/^\.+/;return function(c){return a(c).replace(b,"")}}(p),H=["o","ms","moz","webkit"],I=function(a){var b;return"undefined"==typeof window?b=null:(!function(a,b,c){var d,e;if(!c.requestAnimationFrame){for(d=0;d<a.length&&!c.requestAnimationFrame;++d)c.requestAnimationFrame=c[a[d]+"RequestAnimationFrame"];c.requestAnimationFrame||(e=c.setTimeout,c.requestAnimationFrame=function(a){var c,d,f;return c=Date.now(),d=Math.max(0,16-(c-b)),f=e(function(){a(c+d)},d),b=c+d,f})}}(a,0,window),b=window.requestAnimationFrame),b}(H),J=function(){var a;return a="undefined"!=typeof window&&window.performance&&"function"==typeof window.performance.now?function(){return window.performance.now()}:function(){return Date.now()}}(),K=function(a,b,c){var d=[],e={tick:function(){var f,g,h;for(h=b(),c.start(),f=0;f<d.length;f+=1)g=d[f],g.tick(h)||d.splice(f--,1);c.end(),d.length?a(e.tick):e.running=!1},add:function(b){d.push(b),e.running||(e.running=!0,a(e.tick))},abort:function(a,b){for(var c,e=d.length;e--;)c=d[e],c.root===b&&c.keypath===a&&c.stop()}};return e}(I,J,v),L=function(){var a,b={};return a="undefined"!=typeof console&&"function"==typeof console.warn&&"function"==typeof console.warn.apply?function(a,c){if(!c){if(b[a])return;b[a]=!0}console.warn(a)}:function(){}}(),M=function(){function a(a){return a.trim?a.trim():a.replace(/^\s+/,"").replace(/\s+$/,"")}function b(a){return a.str}var c,d=/(?:^|\})?\s*([^\{\}]+)\s*\{/g,e=/\/\*.*?\*\//g,f=/((?:(?:\[[^\]+]\])|(?:[^\s\+\>\~:]))+)((?::[^\s\+\>\~]+)?\s*[\s\+\>\~]?)\s*/g,g=/^@media/,h=/\[data-rvcguid="[a-z0-9-]+"]/g;return c=function(c,i){var j,k;return k=function(a){var c,d,e,g,h,j,k,l,m=[];for(c=[];d=f.exec(a);)c.push({str:d[0],base:d[1],modifiers:d[2]});for(g='[data-rvcguid="'+i+'"]',h=c.map(b),l=c.length;l--;)k=h.slice(),e=c[l],k[l]=e.base+g+e.modifiers||"",j=h.slice(),j[l]=g+" "+j[l],m.push(k.join(" "),j.join(" "));return m.join(", ")},j=h.test(c)?c.replace(h,'[data-rvcguid="'+i+'"]'):c.replace(e,"").replace(d,function(b,c){var d,e;return g.test(c)?b:(d=c.split(",").map(a),e=d.map(k).join(", ")+" ",b.replace(c,e))})}}(),N=function(a){function b(a,b,d){var e,f=b.constructor._guid;(e=c(d.css,d,f)||c(a.css,a,f))&&(b.constructor.css=e)}function c(b,c,d){return b?c.noCssTransform?b:a(b,d):void 0}var d={name:"css",extend:b,init:function(){}};return d}(M),O=function(){function a(a,b){return"function"==typeof b&&/_super/.test(a)}var b;return b=function(b,c,d){return d||a(b,c)?function(){var a,d="_super"in this,e=this._super;return this._super=c,a=b.apply(this,arguments),d&&(this._super=e),a}:b}}(),P=function(a){function b(a,b,c){var d=c.data||{},e=f(a.prototype.data);return g(e,d)}function c(a,c,d){c.data=b(a,c,d)}function d(a,c,d){var e=d.data,f=b(a,c,d);return"function"==typeof f&&(f=f.call(c,e)||e),c.data=f||{}}function e(a){var b=this.init(a.constructor,a,a);return b?(a.data=b,!0):void 0}function f(a){if("function"!=typeof a||!Object.keys(a).length)return a;var b={};return h(a,b),g(a,b)}function g(a,b){return"function"==typeof b?k(b,a):"function"==typeof a?j(b,a):i(b,a)}function h(a,b,c){for(var d in a)c&&d in b||(b[d]=a[d])}function i(a,b){return a=a||{},b?(h(b,a,!0),a):a}function j(a,b){return function(c){var d;if(a){d=[];for(var e in a)c&&e in c||d.push(e)}return c=b.call(this,c)||c,d&&d.length&&(c=c||{},d.forEach(function(b){c[b]=a[b]})),c}}function k(b,c){var d;return d="function"!=typeof c?function(a){i(a,c)}:function(b){return c=a(c,function(){},!0),c.call(this,b)||b},a(b,d)}var l,m={name:"data",extend:c,init:d,reset:e};return l=m}(O),Q={missingParser:"Missing Ractive.parse - cannot parse template. Either preparse or use the version that includes the parser",mergeComparisonFail:"Merge operation: comparison failed. Falling back to identity checking",noComponentEventArguments:"Components currently only support simple events - you cannot include arguments. Sorry!",noTemplateForPartial:'Could not find template for partial "{name}"',noNestedPartials:"Partials ({{>{name}}}) cannot contain nested inline partials",evaluationError:'Error evaluating "{uniqueString}": {err}',badArguments:"Bad arguments \"{arguments}\". I'm not allowed to argue unless you've paid.",failedComputation:'Failed to compute "{key}": {err}',missingPlugin:'Missing "{name}" {plugin} plugin. You may need to download a {plugin} via http://docs.ractivejs.org/latest/plugins#{plugin}s',badRadioInputBinding:"A radio input can have two-way binding on its name attribute, or its checked attribute - not both",noRegistryFunctionReturn:'A function was specified for "{name}" {registry}, but no {registry} was returned',defaultElSpecified:"The <{name}/> component has a default `el` property; it has been disregarded",noElementProxyEventWildcards:'Only component proxy-events may contain "*" wildcards, <{element} on-{event}/> is not valid.'},R={TEXT:1,INTERPOLATOR:2,TRIPLE:3,SECTION:4,INVERTED:5,CLOSING:6,ELEMENT:7,PARTIAL:8,COMMENT:9,DELIMCHANGE:10,MUSTACHE:11,TAG:12,ATTRIBUTE:13,CLOSING_TAG:14,COMPONENT:15,NUMBER_LITERAL:20,STRING_LITERAL:21,ARRAY_LITERAL:22,OBJECT_LITERAL:23,BOOLEAN_LITERAL:24,GLOBAL:26,KEY_VALUE_PAIR:27,REFERENCE:30,REFINEMENT:31,MEMBER:32,PREFIX_OPERATOR:33,BRACKETED:34,CONDITIONAL:35,INFIX_OPERATOR:36,INVOCATION:40,SECTION_IF:50,SECTION_UNLESS:51,SECTION_EACH:52,SECTION_WITH:53},S=function(){var a;try{Object.create(null),a=Object.create}catch(b){a=function(){var a=function(){};return function(b,c){var d;return null===b?{}:(a.prototype=b,d=new a,c&&Object.defineProperties(d,c),d)}}()}return a}(),T={expectedExpression:"Expected a JavaScript expression",expectedParen:"Expected closing paren"},U=function(a){var b=/^(?:[+-]?)(?:(?:(?:0|[1-9]\d*)?\.\d+)|(?:(?:0|[1-9]\d*)\.)|(?:0|[1-9]\d*))(?:[eE][+-]?\d+)?/;return function(c){var d;return(d=c.matchPattern(b))?{t:a.NUMBER_LITERAL,v:d}:null}}(R),V=function(a){return function(b){var c=b.remaining();return"true"===c.substr(0,4)?(b.pos+=4,{t:a.BOOLEAN_LITERAL,v:"true"}):"false"===c.substr(0,5)?(b.pos+=5,{t:a.BOOLEAN_LITERAL,v:"false"}):null}}(R),W=function(){var a,b,c;return a=/^(?=.)[^"'\\]+?(?:(?!.)|(?=["'\\]))/,b=/^\\(?:['"\\bfnrt]|0(?![0-9])|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|(?=.)[^ux0-9])/,c=/^\\(?:\r\n|[\u000A\u000D\u2028\u2029])/,function(d){return function(e){var f,g,h,i;for(f=e.pos,g='"',h=!1;!h;)i=e.matchPattern(a)||e.matchPattern(b)||e.matchString(d),i?g+='"'===i?'\\"':"\\'"===i?"'":i:(i=e.matchPattern(c),i?g+="\\u"+("000"+i.charCodeAt(1).toString(16)).slice(-4):h=!0);return g+='"',JSON.parse(g)}}}(),X=function(a){return a('"')}(W),Y=function(a){return a("'")}(W),Z=function(a,b,c){return function(d){var e,f;return e=d.pos,d.matchString('"')?(f=c(d),d.matchString('"')?{t:a.STRING_LITERAL,v:f}:(d.pos=e,null)):d.matchString("'")?(f=b(d),d.matchString("'")?{t:a.STRING_LITERAL,v:f}:(d.pos=e,null)):null}}(R,X,Y),$={name:/^[a-zA-Z_$][a-zA-Z_$0-9]*/},_=function(a,b,c){var d=/^[a-zA-Z_$][a-zA-Z_$0-9]*$/;return function(e){var f;return(f=a(e))?d.test(f.v)?f.v:'"'+f.v.replace(/"/g,'\\"')+'"':(f=b(e))?f.v:(f=e.matchPattern(c.name))?f:void 0}}(Z,U,$),ab=function(a,b){return function(c){var d,e,f;return d=c.pos,c.allowWhitespace(),e=b(c),null===e?(c.pos=d,null):(c.allowWhitespace(),c.matchString(":")?(c.allowWhitespace(),f=c.readExpression(),null===f?(c.pos=d,null):{t:a.KEY_VALUE_PAIR,k:e,v:f}):(c.pos=d,null))}}(R,_),bb=function(a){return function b(c){var d,e,f,g;return d=c.pos,f=a(c),null===f?null:(e=[f],c.matchString(",")?(g=b(c),g?e.concat(g):(c.pos=d,null)):e)}}(ab),cb=function(a,b){return function(c){var d,e;return d=c.pos,c.allowWhitespace(),c.matchString("{")?(e=b(c),c.allowWhitespace(),c.matchString("}")?{t:a.OBJECT_LITERAL,m:e}:(c.pos=d,null)):(c.pos=d,null)}}(R,bb),db=function(a){return function b(c){function d(a){f.push(a)}var e,f,g,h;return e=c.pos,c.allowWhitespace(),g=c.readExpression(),null===g?null:(f=[g],c.allowWhitespace(),c.matchString(",")&&(h=b(c),null===h&&c.error(a.expectedExpression),h.forEach(d)),f)}}(T),eb=function(a,b){return function(c){var d,e;return d=c.pos,c.allowWhitespace(),c.matchString("[")?(e=b(c),c.matchString("]")?{t:a.ARRAY_LITERAL,m:e}:(c.pos=d,null)):(c.pos=d,null)}}(R,db),fb=function(a,b,c,d,e){return function(f){var g=a(f)||b(f)||c(f)||d(f)||e(f);return g}}(U,V,Z,cb,eb),gb=function(a,b){var c,d,e,f,g;return c=/^\.[a-zA-Z_$0-9]+/,e=function(a){var b=a.matchPattern(d);return b?"."+b:null},d=/^\[(0|[1-9][0-9]*)\]/,f=/^(?:Array|Date|RegExp|decodeURIComponent|decodeURI|encodeURIComponent|encodeURI|isFinite|isNaN|parseFloat|parseInt|JSON|Math|NaN|undefined|null)$/,g=/^(?:break|case|catch|continue|debugger|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|var|void|while|with)$/,function(d){var h,i,j,k,l,m,n;if(h=d.pos,d.matchString("~/"))i="~/";else for(i="";d.matchString("../");)i+="../";if(i||(k=d.matchString(".")||""),j=d.matchPattern(/^@(?:index|key)/)||d.matchPattern(b.name)||"",g.test(j))return d.pos=h,null;if(!i&&!k&&f.test(j))return{t:a.GLOBAL,v:j};if(l=(i||k)+j,!l)return null;for(;m=d.matchPattern(c)||e(d);)l+=m;return d.matchString("(")&&(n=l.lastIndexOf("."),-1!==n?(l=l.substr(0,n),d.pos=h+l.length):d.pos-=1),{t:a.REFERENCE,n:l.replace(/^this\./,"./").replace(/^this$/,".")}}}(R,$),hb=function(a,b){return function(c){var d,e;return d=c.pos,c.matchString("(")?(c.allowWhitespace(),e=c.readExpression(),e||c.error(b.expectedExpression),c.allowWhitespace(),c.matchString(")")||c.error(b.expectedParen),{t:a.BRACKETED,x:e}):null}}(R,T),ib=function(a,b,c){return function(d){return a(d)||b(d)||c(d)}}(fb,gb,hb),jb=function(a,b,c){return function(d){var e,f,g;if(e=d.pos,d.allowWhitespace(),d.matchString(".")){if(d.allowWhitespace(),f=d.matchPattern(c.name))return{t:a.REFINEMENT,n:f};d.error("Expected a property name")}return d.matchString("[")?(d.allowWhitespace(),g=d.readExpression(),g||d.error(b.expectedExpression),d.allowWhitespace(),d.matchString("]")||d.error("Expected ']'"),{t:a.REFINEMENT,x:g}):null}}(R,T,$),kb=function(a,b,c,d,e){return function(f){var g,h,i,j;if(h=b(f),!h)return null;for(;h;)if(g=f.pos,i=d(f))h={t:a.MEMBER,x:h,r:i};else{if(!f.matchString("("))break;f.allowWhitespace(),j=c(f),f.allowWhitespace(),f.matchString(")")||f.error(e.expectedParen),h={t:a.INVOCATION,x:h},j&&(h.o=j)}return h}}(R,ib,db,jb,T),lb=function(a,b,c){var d,e;return e=function(c,d){return function(e){var f;return(f=d(e))?f:e.matchString(c)?(e.allowWhitespace(),f=e.readExpression(),f||e.error(b.expectedExpression),{s:c,o:f,t:a.PREFIX_OPERATOR}):null}},function(){var a,b,f,g,h;for(g="! ~ + - typeof".split(" "),h=c,a=0,b=g.length;b>a;a+=1)f=e(g[a],h),h=f;d=h}(),d}(R,T,kb),mb=function(a,b){var c,d;return d=function(b,c){return function(d){var e,f,g;if(f=c(d),!f)return null;for(;;){if(e=d.pos,d.allowWhitespace(),!d.matchString(b))return d.pos=e,f;if("in"===b&&/[a-zA-Z_$0-9]/.test(d.remaining().charAt(0)))return d.pos=e,f;if(d.allowWhitespace(),g=c(d),!g)return d.pos=e,f;f={t:a.INFIX_OPERATOR,s:b,o:[f,g]}}}},function(){var a,e,f,g,h;for(g="* / % + - << >> >>> < <= > >= in instanceof == != === !== & ^ | && ||".split(" "),h=b,a=0,e=g.length;e>a;a+=1)f=d(g[a],h),h=f;c=h}(),c}(R,lb),nb=function(a,b,c){return function(d){var e,f,g,h;return(f=b(d))?(e=d.pos,d.allowWhitespace(),d.matchString("?")?(d.allowWhitespace(),g=d.readExpression(),g||d.error(c.expectedExpression),d.allowWhitespace(),d.matchString(":")||d.error('Expected ":"'),d.allowWhitespace(),h=d.readExpression(),h||d.error(c.expectedExpression),{t:a.CONDITIONAL,o:[f,g,h]}):(d.pos=e,f)):null}}(R,mb,T),ob=function(a,b){function c(a){return JSON.stringify(String(a))}function d(c,e){var f,g;if(c.t===a.REFERENCE&&-1===e.indexOf(c.n)&&e.unshift(c.n),g=c.o||c.m)if(b(g))d(g,e);else for(f=g.length;f--;)d(g[f],e);c.x&&d(c.x,e),c.r&&d(c.r,e),c.v&&d(c.v,e)}function e(b,d,f){var g=function(a){return e(b,a,f)};switch(d.t){case a.BOOLEAN_LITERAL:case a.GLOBAL:case a.NUMBER_LITERAL:return d.v;case a.STRING_LITERAL:return c(d.v);case a.ARRAY_LITERAL:return"["+(d.m?d.m.map(g).join(","):"")+"]";case a.OBJECT_LITERAL:return"{"+(d.m?d.m.map(g).join(","):"")+"}";case a.KEY_VALUE_PAIR:return d.k+":"+e(b,d.v,f);case a.PREFIX_OPERATOR:return("typeof"===d.s?"typeof ":d.s)+e(b,d.o,f);case a.INFIX_OPERATOR:return e(b,d.o[0],f)+("in"===d.s.substr(0,2)?" "+d.s+" ":d.s)+e(b,d.o[1],f);case a.INVOCATION:return e(b,d.x,f)+"("+(d.o?d.o.map(g).join(","):"")+")";case a.BRACKETED:return"("+e(b,d.x,f)+")";case a.MEMBER:return e(b,d.x,f)+e(b,d.r,f);case a.REFINEMENT:return d.n?"."+d.n:"["+e(b,d.x,f)+"]";case a.CONDITIONAL:return e(b,d.o[0],f)+"?"+e(b,d.o[1],f)+":"+e(b,d.o[2],f);case a.REFERENCE:return"_"+f.indexOf(d.n);default:b.error("Expected legal JavaScript")}}var f;return f=function(a){var b,c=[];return d(a,c),b={r:c,s:e(this,a,c)}}}(R,h),pb=function(a,b,c,d,e){var f,g,h=/^\s+/;return g=function(a){this.name="ParseError",this.message=a;try{throw new Error(a)}catch(b){this.stack=b.stack}},g.prototype=Error.prototype,f=function(a,b){var c,d,e=0;for(this.str=a,this.options=b||{},this.pos=0,this.lines=this.str.split("\n"),this.lineEnds=this.lines.map(function(a){var b=e+a.length+1;return e=b,b},0),this.init&&this.init(a,b),c=[];this.pos<this.str.length&&(d=this.read());)c.push(d);this.leftover=this.remaining(),this.result=this.postProcess?this.postProcess(c,b):c},f.prototype={read:function(a){var b,c,d,e;for(a||(a=this.converters),b=this.pos,d=a.length,c=0;d>c;c+=1)if(this.pos=b,e=a[c](this))return e;return null},readExpression:function(){return d(this)},flattenExpression:e,getLinePos:function(a){for(var b,c=0,d=0;a>=this.lineEnds[c];)d=this.lineEnds[c],c+=1;return b=a-d,[c+1,b+1]},error:function(a){var b,c,d,e,f,h;throw b=this.getLinePos(this.pos),c=b[0],d=b[1],e=this.lines[b[0]-1],f=e+"\n"+new Array(b[1]).join(" ")+"^----",h=new g(a+" at line "+c+" character "+d+":\n"+f),h.line=b[0],h.character=b[1],h.shortMessage=a,h},matchString:function(a){return this.str.substr(this.pos,a.length)===a?(this.pos+=a.length,a):void 0},matchPattern:function(a){var b;return(b=a.exec(this.remaining()))?(this.pos+=b[0].length,b[1]||b[0]):void 0},allowWhitespace:function(){this.matchPattern(h)},remaining:function(){return this.str.substring(this.pos)},nextChar:function(){return this.str.charAt(this.pos)}},f.extend=function(a){var d,e,g=this;d=function(a,b){f.call(this,a,b)},d.prototype=b(g.prototype);for(e in a)c.call(a,e)&&(d.prototype[e]=a[e]);return d.extend=f.extend,d},a.Parser=f,f}(e,S,f,nb,ob),qb=function(){var a=/^[^\s=]+/,b=/^\s+/;return function(c){var d,e,f;return c.matchString("=")?(d=c.pos,c.allowWhitespace(),(e=c.matchPattern(a))?c.matchPattern(b)?(f=c.matchPattern(a))?(c.allowWhitespace(),c.matchString("=")?[e,f]:(c.pos=d,null)):(c.pos=d,null):null:(c.pos=d,null)):null}}(),rb=[{delimiters:"delimiters",isTriple:!1,isStatic:!1},{delimiters:"tripleDelimiters",isTriple:!0,isStatic:!1},{delimiters:"staticDelimiters",isTriple:!1,isStatic:!0},{delimiters:"staticTripleDelimiters",isTriple:!0,isStatic:!0}],sb=function(a){var b={"#":a.SECTION,"^":a.INVERTED,"/":a.CLOSING,">":a.PARTIAL,"!":a.COMMENT,"&":a.TRIPLE};return function(a){var c=b[a.str.charAt(a.pos)];return c?(a.pos+=1,c):null}}(R),tb=function(a){return{"if":a.SECTION_IF,unless:a.SECTION_UNLESS,"with":a.SECTION_WITH,each:a.SECTION_EACH}}(R),ub=null,vb=function(a,b,c){function d(b,c,d){var f;if(c){for(;c.t===a.BRACKETED&&c.x;)c=c.x;return c.t===a.REFERENCE?d.r=c.n:c.t===a.NUMBER_LITERAL&&i.test(c.v)?d.r=c.v:(f=e(b,c))?d.rx=f:d.x=b.flattenExpression(c),d}}function e(b,c){for(var d,e=[];c.t===a.MEMBER&&c.r.t===a.REFINEMENT;)d=c.r,e.unshift(d.x?d.x.t===a.REFERENCE?d.x:b.flattenExpression(d.x):d.n),c=c.x;return c.t!==a.REFERENCE?null:{r:c.n,m:e}}var f,g,h=/^\s*:\s*([a-zA-Z_$][a-zA-Z_$0-9]*)/,i=/^[0-9][1-9]*$/,j=new RegExp("^("+Object.keys(c).join("|")+")\\b");return g=/^[a-zA-Z$_0-9]+(?:(\.[a-zA-Z$_0-9]+)|(\[[a-zA-Z$_0-9]+\]))*$/,f=function(c,e){var f,i,k,l,m,n,o,p,q,r;if(f=c.pos,k={},r=c[e.delimiters],e.isStatic&&(k.s=!0),e.isTriple)k.t=a.TRIPLE;else{if("!"===c.remaining()[0]){try{n=c.readExpression(),c.allowWhitespace(),c.remaining().indexOf(r[1])?n=null:k.t=a.INTERPOLATOR}catch(s){}if(!n)return q=c.remaining().indexOf(r[1]),~q?c.pos+=q:c.error("Expected closing delimiter ('"+r[1]+"')"),{t:a.COMMENT}}if(!n)if(l=b(c),k.t=l||a.INTERPOLATOR,l===a.SECTION)(m=c.matchPattern(j))&&(k.n=m),c.allowWhitespace();else if((l===a.COMMENT||l===a.CLOSING)&&(p=c.remaining(),q=p.indexOf(r[1]),-1!==q))return k.r=p.substr(0,q).split(" ")[0],c.pos+=q,k}if(!n){c.allowWhitespace(),n=c.readExpression();var t;if(k.t===a.PARTIAL&&n&&(t=c.readExpression())&&(k={contextPartialExpression:n},n=t),p=c.remaining(),p.substr(0,r[1].length)!==r[1]&&":"!==p.charAt(0)){if(i=c.pos,c.pos=f,p=c.remaining(),q=p.indexOf(r[1]),-1!==q)return k.r=p.substr(0,q).trim(),g.test(k.r)||c.error("Expected a legal Mustache reference"),c.pos+=q,k;c.pos=i}}return d(c,n,k),k.contextPartialExpression&&(k.contextPartialExpression=[d(c,k.contextPartialExpression,{t:a.PARTIAL})]),(o=c.matchPattern(h))&&(k.i=o),k}}(R,sb,tb,ub),wb=function(a,b,c,d,e){function f(a){var b;return a.interpolate[a.inside]===!1?null:(b=c.slice().sort(function(b,c){return a[c.delimiters][0].length-a[b.delimiters][0].length}),function d(c){return c?g(a,c)||d(b.shift()):null}(b.shift()))}function g(c,f){var g,i,j,l,n,o,p,q,r;if(g=c.pos,j=c[f.delimiters],!c.matchString(j[0]))return null;if(i=b(c))return c.matchString(j[1])?(c[f.delimiters]=i,m):null;if(c.allowWhitespace(),i=d(c,f),null===i)return c.pos=g,null;if(c.allowWhitespace(),c.matchString(j[1])||c.error("Expected closing delimiter '"+j[1]+"' after reference"),i.t===a.COMMENT&&(i.exclude=!0),i.t===a.CLOSING&&(c.sectionDepth-=1,c.sectionDepth<0&&(c.pos=g,c.error("Attempted to close a section that wasn't open"))),i.contextPartialExpression)i.f=i.contextPartialExpression,i.t=a.SECTION,i.n="with",delete i.contextPartialExpression;else if(k(i)){for(c.sectionDepth+=1,l=[],p=l,n=i.n;q=c.read();){if(q.t===a.CLOSING){n&&q.r!==n&&c.error("Expected {{/"+n+"}}");break}if(q.t===a.INTERPOLATOR&&"else"===q.r)switch(i.n){case"unless":c.error("{{else}} not allowed in {{#unless}}");break;case"with":c.error("{{else}} not allowed in {{#with}}");break;default:p=o=[];continue}p.push(q)}l.length&&(i.f=l,!i.i&&"each"===i.n&&(r=h(i.f))&&(i.i=r)),o&&o.length&&(i.l=o)}return c.includeLinePositions&&(i.p=c.getLinePos(g)),i.n?i.n=e[i.n]:i.t===a.INVERTED&&(i.t=a.SECTION,i.n=a.SECTION_UNLESS),i}function h(b){var c,d,e,f;if(b)for(c=b.length;c--;){if(d=b[c],d.t===a.ELEMENT){if(e=h(d.o&&d.o.d)||h(d.t0&&d.t0.d)||h(d.t1&&d.t1.d)||h(d.t2&&d.t2.d)||h(d.f))return e;for(f in d.v)if(d.v.hasOwnProperty(f)&&d.v[f].d&&(e=h(d.v[f].d)))return e;for(f in d.a)if(d.a.hasOwnProperty(f)&&(e=h(d.a[f])))return e}if(d.t===a.INTERPOLATOR||d.t===a.TRIPLE||d.t===a.SECTION){if(d.r&&n.test(d.r))return d.r;if(d.x&&(e=i(d.x)))return e;if(d.rx&&(e=j(d.rx)))return e}}}function i(a){var b;for(b=a.r.length;b--;)if(n.test(a.r[b]))return a.r[b]}function j(b){var c,d,e;for(c=b.m.length;c--;){if(e=b.m[c],e.r&&(d=i(e)))return d;if(e.t===a.REFERENCE&&n.test(e.n))return e.n}}function k(b){return b.t===a.SECTION||b.t===a.INVERTED}var l,m={t:a.DELIMCHANGE,exclude:!0},n=/^@(?:index|key)$/;return l=f}(R,qb,rb,vb,tb),xb=function(a){var b="<!--",c="-->";return function(d){var e,f,g,h,i;return e=d.pos,d.matchString(b)?(g=d.remaining(),h=g.indexOf(c),-1===h&&d.error("Illegal HTML - expected closing comment sequence ('-->')"),f=g.substr(0,h),d.pos+=h+3,i={t:a.COMMENT,c:f},d.includeLinePositions&&(i.p=d.getLinePos(e)),i):null
12
+ }}(R),yb=function(){var a=/^(?:area|base|br|col|command|doctype|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/i;return a}(),zb=function(a,b){var c,d,e;for(c=b.length;c--;){if(d=a.indexOf(b[c]),!d)return 0;-1!==d&&(!e||e>d)&&(e=d)}return e||-1},Ab=function(a){return function(b){var c,d,e,f;return d=b.remaining(),f=b.inside?"</"+b.inside:"<",b.inside&&!b.interpolate[b.inside]?c=d.indexOf(f):(e=[f,b.delimiters[0],b.tripleDelimiters[0],b.staticDelimiters[0],b.staticTripleDelimiters[0]],b.inAttribute===!0?e.push('"',"'","=",">","`"):b.inAttribute&&e.push(b.inAttribute),c=a(d,e)),c?(-1===c&&(c=d.length),b.pos+=c,d.substr(0,c)):null}}(zb),Bb=function(a){var b=/^([a-zA-Z]{1,}:?[a-zA-Z0-9\-]*)\s*\>/;return function(c){var d;return c.matchString("</")?(d=c.matchPattern(b))?{t:a.CLOSING_TAG,e:d}:(c.pos-=2,void c.error("Illegal closing tag")):null}}(R),Cb=function(){function a(a){return a?10===a?32:128>a?a:159>=a?d[a-128]:55296>a?a:57343>=a?65533:65535>=a?a:65533:65533}var b,c,d,e;return c={quot:34,amp:38,apos:39,lt:60,gt:62,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,copy:169,ordf:170,laquo:171,not:172,shy:173,reg:174,macr:175,deg:176,plusmn:177,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,sup1:185,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,Agrave:192,Aacute:193,Acirc:194,Atilde:195,Auml:196,Aring:197,AElig:198,Ccedil:199,Egrave:200,Eacute:201,Ecirc:202,Euml:203,Igrave:204,Iacute:205,Icirc:206,Iuml:207,ETH:208,Ntilde:209,Ograve:210,Oacute:211,Ocirc:212,Otilde:213,Ouml:214,times:215,Oslash:216,Ugrave:217,Uacute:218,Ucirc:219,Uuml:220,Yacute:221,THORN:222,szlig:223,agrave:224,aacute:225,acirc:226,atilde:227,auml:228,aring:229,aelig:230,ccedil:231,egrave:232,eacute:233,ecirc:234,euml:235,igrave:236,iacute:237,icirc:238,iuml:239,eth:240,ntilde:241,ograve:242,oacute:243,ocirc:244,otilde:245,ouml:246,divide:247,oslash:248,ugrave:249,uacute:250,ucirc:251,uuml:252,yacute:253,thorn:254,yuml:255,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,"int":8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830},d=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376],e=new RegExp("&(#?(?:x[\\w\\d]+|\\d+|"+Object.keys(c).join("|")+"));?","g"),b=function(b){return b.replace(e,function(b,d){var e;return e="#"!==d[0]?c[d]:"x"===d[1]?parseInt(d.substring(2),16):parseInt(d.substring(1),10),e?String.fromCharCode(a(e)):b})}}(ub),Db=function(a,b,c){function d(a){var b,c,d;return a.allowWhitespace(),(c=a.matchPattern(k))?(b={name:c},d=e(a),d&&(b.value=d),b):null}function e(a){var b,d,e,f;return b=a.pos,a.allowWhitespace(),a.matchString("=")?(a.allowWhitespace(),d=a.pos,e=a.sectionDepth,f=h(a,"'")||h(a,'"')||g(a),a.sectionDepth!==e&&(a.pos=d,a.error("An attribute value must contain as many opening section tags as closing section tags")),null===f?(a.pos=b,null):f.length?1===f.length&&"string"==typeof f[0]?c(f[0]):f:null):(a.pos=b,null)}function f(b){var c,d,e,f,g;return c=b.pos,(d=b.matchPattern(l))?(e=d,f=[b.delimiters[0],b.tripleDelimiters[0],b.staticDelimiters[0],b.staticTripleDelimiters[0]],-1!==(g=a(e,f))&&(d=d.substr(0,g),b.pos=c+d.length),d):null}function g(a){var c,d;for(a.inAttribute=!0,c=[],d=b(a)||f(a);null!==d;)c.push(d),d=b(a)||f(a);return c.length?(a.inAttribute=!1,c):null}function h(a,c){var d,e,f;if(d=a.pos,!a.matchString(c))return null;for(a.inAttribute=c,e=[],f=b(a)||i(a,c);null!==f;)e.push(f),f=b(a)||i(a,c);return a.matchString(c)?(a.inAttribute=!1,e):(a.pos=d,null)}function i(b,c){var d,e,f,g;return d=b.pos,f=b.remaining(),g=[c,b.delimiters[0],b.tripleDelimiters[0],b.staticDelimiters[0],b.staticTripleDelimiters[0]],e=a(f,g),-1===e&&b.error("Quoted attribute value must have a closing quote"),e?(b.pos+=e,f.substr(0,e)):null}var j,k=/^[^\s"'>\/=]+/,l=/^[^\s"'=<>`]+/;return j=d}(zb,wb,Cb),Eb=function(a,b,c){function d(a){var b,d,e;return a.allowWhitespace(),(b=c(a))?(e={key:b},a.allowWhitespace(),a.matchString(":")?(a.allowWhitespace(),(d=a.read())?(e.value=d.v,e):null):null):null}var e,f,g,h,i,j,k;return f={"true":!0,"false":!1,undefined:void 0,"null":null},g=new RegExp("^(?:"+Object.keys(f).join("|")+")"),h=/^(?:[+-]?)(?:(?:(?:0|[1-9]\d*)?\.\d+)|(?:(?:0|[1-9]\d*)\.)|(?:0|[1-9]\d*))(?:[eE][+-]?\d+)?/,i=/\$\{([^\}]+)\}/g,j=/^\$\{([^\}]+)\}/,k=/^\s*$/,e=a.extend({init:function(a,b){this.values=b.values,this.allowWhitespace()},postProcess:function(a){return 1===a.length&&k.test(this.leftover)?{value:a[0].v}:null},converters:[function(a){var b;return a.values?(b=a.matchPattern(j),b&&a.values.hasOwnProperty(b)?{v:a.values[b]}:void 0):null},function(a){var b;return(b=a.matchPattern(g))?{v:f[b]}:void 0},function(a){var b;return(b=a.matchPattern(h))?{v:+b}:void 0},function(a){var c,d=b(a);return d&&(c=a.values)?{v:d.v.replace(i,function(a,b){return b in c?c[b]:b})}:d},function(a){var b,c;if(!a.matchString("{"))return null;if(b={},a.allowWhitespace(),a.matchString("}"))return{v:b};for(;c=d(a);){if(b[c.key]=c.value,a.allowWhitespace(),a.matchString("}"))return{v:b};if(!a.matchString(","))return null}return null},function(a){var b,c;if(!a.matchString("["))return null;if(b=[],a.allowWhitespace(),a.matchString("]"))return{v:b};for(;c=a.read();){if(b.push(c.v),a.allowWhitespace(),a.matchString("]"))return{v:b};if(!a.matchString(","))return null;a.allowWhitespace()}return null}]}),function(a,b){var c=new e(a,{values:b});return c.result}}(pb,Z,_),Fb=function(a,b,c,d){var e,f=/^([a-zA-Z_$][a-zA-Z_$0-9]*)\(/;return e=a.extend({converters:[b]}),function(a){var b,g,h,i,j,k,l,m,n;if("string"==typeof a){if(g=f.exec(a))return b={m:g[1]},i="["+a.slice(b.m.length+1,-1)+"]",h=new e(i),b.a=c(h.result[0]),b;if(-1===a.indexOf(":"))return a.trim();a=[a]}for(b={},l=[],m=[];a.length;)if(j=a.shift(),"string"==typeof j){if(k=j.indexOf(":"),-1!==k){k&&l.push(j.substr(0,k)),j.length>k+1&&(m[0]=j.substring(k+1));break}l.push(j)}else l.push(j);return m=m.concat(a),m.length||"string"!=typeof l?(b={n:1===l.length&&"string"==typeof l[0]?l[0]:l},1===m.length&&"string"==typeof m[0]?(n=d("["+m[0]+"]"),b.a=n?n.value:m[0].trim()):b.d=m):b=l,b}}(pb,nb,ob,Eb),Gb=function(a,b,c,d,e,f,g,h){function i(c){var d,e,f,i,k,m,u,v,w,x,y;if(d=c.pos,c.inside)return null;if(!c.matchString("<"))return null;if("/"===c.nextChar())return null;if(e={t:a.ELEMENT},c.includeLinePositions&&(e.p=c.getLinePos(d)),c.matchString("!")&&(e.y=1),e.e=c.matchPattern(n),!e.e)return null;for(o.test(c.nextChar())||c.error("Illegal tag name"),m=function(a,b){var d=b.n||b;r.test(d)&&(c.pos-=d.length,c.error("Cannot use reserved event names (change, reset, teardown, update)")),e.v[a]=b};u=g(c);)(i=s[u.name])?e[i]=h(u.value):(k=q.exec(u.name))?(e.v||(e.v={}),v=h(u.value),m(k[1],v)):c.sanitizeEventAttributes&&p.test(u.name)||(e.a||(e.a={}),e.a[u.name]=u.value||0);if(c.allowWhitespace(),c.matchString("/")&&(w=!0),!c.matchString(">"))return null;if(f=e.e.toLowerCase(),!w&&!b.test(e.e)){for(("script"===f||"style"===f)&&(c.inside=f),x=[];j(f,c.remaining())&&(y=c.read(l))&&y.t!==a.CLOSING&&y.t!==a.CLOSING_TAG;)x.push(y);x.length&&(e.f=x)}return c.inside=null,c.sanitizeElements&&-1!==c.sanitizeElements.indexOf(f)?t:e}function j(a,b){var c,d;return c=/^<([a-zA-Z][a-zA-Z0-9]*)/.exec(b),d=m[a],c&&d?!~d.indexOf(c[1].toLowerCase()):!0}var k,l,m,n=/^[a-zA-Z]{1,}:?[a-zA-Z0-9\-]*/,o=/^[\s\n\/>]/,p=/^on/,q=/^on-([a-zA-Z\\*\\.$_][a-zA-Z\\*\\.$_0-9\-]+)$/,r=/^(?:change|reset|teardown|update)$/,s={"intro-outro":"t0",intro:"t1",outro:"t2",decorator:"o"},t={exclude:!0};return l=[c,d,i,e,f],m={li:["li"],dt:["dt","dd"],dd:["dt","dd"],p:"address article aside blockquote div dl fieldset footer form h1 h2 h3 h4 h5 h6 header hgroup hr main menu nav ol p pre section table ul".split(" "),rt:["rt","rp"],rp:["rt","rp"],optgroup:["optgroup"],option:["option","optgroup"],thead:["tbody","tfoot"],tbody:["tbody","tfoot"],tfoot:["tbody"],tr:["tr","tbody"],td:["td","th","tr"],th:["td","th","tr"]},k=i}(R,yb,wb,xb,Ab,Bb,Db,Fb),Hb=function(){var a=/^[ \t\f\r\n]+/,b=/[ \t\f\r\n]+$/;return function(c,d,e){var f;d&&(f=c[0],"string"==typeof f&&(f=f.replace(a,""),f?c[0]=f:c.shift())),e&&(f=c[c.length-1],"string"==typeof f&&(f=f.replace(b,""),f?c[c.length-1]=f:c.pop()))}}(),Ib=function(a){function b(a){return"string"==typeof a}function c(b){return b.t===a.COMMENT||b.t===a.DELIMCHANGE}function d(b){return(b.t===a.SECTION||b.t===a.INVERTED)&&b.f}var e,f=/^\s*\r?\n/,g=/\r?\n\s*$/;return e=function(a){var e,h,i,j,k;for(e=1;e<a.length;e+=1)h=a[e],i=a[e-1],j=a[e-2],b(h)&&c(i)&&b(j)&&g.test(j)&&f.test(h)&&(a[e-2]=j.replace(g,"\n"),a[e]=h.replace(f,"")),d(h)&&b(i)&&g.test(i)&&b(h.f[0])&&f.test(h.f[0])&&(a[e-1]=i.replace(g,"\n"),h.f[0]=h.f[0].replace(f,"")),b(h)&&d(i)&&(k=i.f[i.f.length-1],b(k)&&g.test(k)&&f.test(h)&&(i.f[i.f.length-1]=k.replace(g,"\n"),a[e]=h.replace(f,"")));return a}}(R),Jb=function(){var a=/[-/\\^$*+?.()|[\]{}]/g;return function(b){return b.replace(a,"\\$&")}}(),Kb=function(a,b,c,d,e,f,g,h,i){function j(b,c,d,e,f,i){var k,l,m,n,s,t,u,v,w;for(h(b),k=b.length;k--;)l=b[k],l.exclude?b.splice(k,1):c&&l.t===a.COMMENT&&b.splice(k,1);for(g(b,e,f),k=b.length;k--;)if(l=b[k],l.f&&(s=d||l.t===a.ELEMENT&&p.test(l.e),s||(m=b[k-1],n=b[k+1],(!m||"string"==typeof m&&r.test(m))&&(t=!0),(!n||"string"==typeof n&&q.test(n))&&(u=!0)),j(l.f,c,s,t,u,i)),l.l&&(j(l.l,c,d,t,u,i),i&&(v={t:4,n:a.SECTION_UNLESS,f:l.l},l.r&&(v.r=l.r),l.x&&(v.x=l.x),l.rx&&(v.rx=l.rx),b.splice(k+1,0,v),delete l.l)),l.a)for(w in l.a)l.a.hasOwnProperty(w)&&"string"!=typeof l.a[w]&&j(l.a[w],c,d,t,u,i);for(k=b.length;k--;)"string"==typeof b[k]&&("string"==typeof b[k+1]&&(b[k]=b[k]+b[k+1],b.splice(k+1,1)),d||(b[k]=b[k].replace(o," ")),""===b[k]&&b.splice(k,1))}function k(a){var b=arguments[1];void 0===b&&(b=a),b.delimiters=a.delimiters||["{{","}}"],b.tripleDelimiters=a.tripleDelimiters||["{{{","}}}"],b.staticDelimiters=a.staticDelimiters||["[[","]]"],b.staticTripleDelimiters=a.staticTripleDelimiters||["[[[","]]]"]}var l,m,n,o=/[ \t\f\r\n]+/g,p=/^(?:pre|script|style|textarea)$/i,q=/^\s+/,r=/\s+$/;return m=b.extend({init:function(a,b){k(b,this),this.sectionDepth=0,this.interpolate={script:!b.interpolate||b.interpolate.script!==!1,style:!b.interpolate||b.interpolate.style!==!1},b.sanitize===!0&&(b.sanitize={elements:"applet base basefont body frame frameset head html isindex link meta noframes noscript object param script style title".split(" "),eventAttributes:!0}),this.sanitizeElements=b.sanitize&&b.sanitize.elements,this.sanitizeEventAttributes=b.sanitize&&b.sanitize.eventAttributes,this.includeLinePositions=b.includeLinePositions},postProcess:function(a,b){return this.sectionDepth>0&&this.error("A section was left open"),j(a,b.stripComments!==!1,b.preserveWhitespace,!b.preserveWhitespace,!b.preserveWhitespace,b.rewriteElse!==!1),a},converters:[c,d,e,f]}),n=function(a){var b=arguments[1];void 0===b&&(b={});var c,d,e,f,g,h,j,l;if(k(b),j=new RegExp("<!--\\s*"+i(b.delimiters[0])+"\\s*>\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)\\s*"+i(b.delimiters[1])+"\\s*-->"),l=new RegExp("<!--\\s*"+i(b.delimiters[0])+"\\s*\\/\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)\\s*"+i(b.delimiters[1])+"\\s*-->"),c={v:1},j.test(a)){for(d=a,a="";g=j.exec(d);){if(f=g[1],a+=d.substr(0,g.index),d=d.substring(g.index+g[0].length),h=l.exec(d),!h||h[1]!==f)throw new Error('Inline partials must have a closing delimiter, and cannot be nested. Expected closing for "'+f+'", but '+(h?'instead found "'+h[1]+'"':" no closing found"));(e||(e={}))[f]=new m(d.substr(0,h.index),b).result,d=d.substring(h.index+h[0].length)}a+=d,c.p=e}return c.t=new m(a,b).result,c},l=n}(R,pb,wb,xb,Gb,Ab,Hb,Ib,Jb),Lb=function(){return function(a,b){var c=a.map(b);return a.forEach(function(a,b){c[a]=c[b]}),c}}(ub),Mb=function(a){var b,c;return b=["preserveWhitespace","sanitize","stripComments","delimiters","tripleDelimiters","interpolate"],c=a(b,function(a){return a})}(Lb),Nb=function(a,b,c,d,e){function f(a){var b=d(l);return b.parse=function(b,c){return g(b,c||a)},b}function g(b,d){if(!c)throw new Error(a.missingParser);return c(b,d||this.options)}function h(a,c){var d;if(!b){if(c&&c.noThrow)return;throw new Error("Cannot retrieve template #"+a+" as Ractive is not running in a browser.")}if(i(a)&&(a=a.substring(1)),!(d=document.getElementById(a))){if(c&&c.noThrow)return;throw new Error("Could not find template element with id #"+a)}if("SCRIPT"!==d.tagName.toUpperCase()){if(c&&c.noThrow)return;throw new Error("Template element with id #"+a+", must be a <script> element")}return d.innerHTML}function i(a){return"#"===a.charAt(0)}function j(a){return!("string"==typeof a)}function k(a){return a.defaults&&(a=a.defaults),e.reduce(function(b,c){return b[c]=a[c],b},{})}var l={parse:g,fromId:h,isHashedId:i,isParsed:j,getParseOptions:k,createHelper:f};return l}(Q,B,Kb,S,Mb),Ob=function(a,b){function c(a){var b,c=a._config.template;if(c&&c.fn)return b=d(a,c.fn),b!==c.result?(c.result=b,b=e(b,a)):void 0}function d(b,c){var d=a.createHelper(a.getParseOptions(b));return c.call(b,b.data,d)}function e(c,d){if("string"==typeof c)"#"===c[0]&&(c=a.fromId(c)),c=b(c,a.getParseOptions(d));else if(1!==c.v)throw new Error("Mismatched template version! Please ensure you are using the latest version of Ractive.js in your build process as well as in your app");return c}function f(a,b,c){if(b)for(var d in b)(c||!a.hasOwnProperty(d))&&(a[d]=b[d])}var g={name:"template",extend:function(a,b,c){var d;"template"in c&&(d=c.template,b.template="function"==typeof d?d:e(d,b))},init:function(a,b,c){var g,h;g="template"in c?c.template:a.prototype.template,"function"==typeof g&&(h=g,g=d(b,h),b._config.template={fn:h,result:g}),g=e(g,b),b.template=g.t,g.p&&f(b.partials,g.p)},reset:function(a){var b,d=c(a);return d?(b=e(d,a),a.template=b.t,f(a.partials,b.p,!0),!0):void 0}};return g}(Nb,Kb),Pb=function(a){function b(a,b){this.name=a,this.useDefaults=b}function c(a,b){var d,e;return(d=b(a))?d:!a.isolated&&(e=a._parent)?c(e,b):void 0}return b.prototype={constructor:b,extend:function(a,b,c){this.configure(this.useDefaults?a.defaults:a,this.useDefaults?b:b.constructor,c)},init:function(a,b,c){this.configure(this.useDefaults?a.defaults:a,b,c)},configure:function(b,c,d){var e,f=this.name,g=d[f];e=a(b[f]);for(var h in g)e[h]=g[h];c[f]=e},reset:function(a){var b=a[this.name],c=!1;return Object.keys(b).forEach(function(a){var d=b[a];d._fn&&(d._fn.isOwner?b[a]=d._fn:delete b[a],c=!0)}),c},findOwner:function(a,b){return a[this.name].hasOwnProperty(b)?a:this.findConstructor(a.constructor,b)},findConstructor:function(a,b){return a?a[this.name].hasOwnProperty(b)?a:this.findConstructor(a._parent,b):void 0},find:function(a,b){var d=this;return c(a,function(a){return a[d.name][b]})},findInstance:function(a,b){var d=this;return c(a,function(a){return a[d.name][b]?a:void 0})}},b}(S,ub),Qb=function(a,b){var c=["adaptors","components","computed","decorators","easing","events","interpolators","partials","transitions"],d=a(c,function(a){return new b(a,"computed"===a)});return d}(Lb,Pb),Rb=function(){},Sb=function(a){function b(b,c){var d;if(c in b){var e=b[c];d="function"==typeof e?e:function(){return e}}else d=a;return d}var c;return c=function(a,c,d){if(!/_super/.test(d))return d;var e=function(){var a,f=b(e._parent,c),g="_super"in this,h=this._super;return this._super=f,a=d.apply(this,arguments),g?this._super=h:delete this._super,a};return e._parent=a,e._method=d,e}}(Rb),Tb=function(a,b){function c(b,c,e){if(c in b){if(e in b)throw new Error(d(c,e,!0));a(d(c,e)),b[e]=b[c]}}function d(a,b,c){return"options."+a+" has been deprecated in favour of options."+b+"."+(c?" You cannot specify both options, please use options."+b+".":"")}function e(a){c(a,"eventDefinitions","events")}function f(a){b(a.adaptors)&&c(a,"adaptors","adapt")}return function(a){e(a),f(a)}}(L,g),Ub=function(a,b,c,d,e,f,g,h){function i(a,b,c,d,e){k[b][a](c,d,e)}function j(a,b,d,e){h(e),i(a,"data",b,d,e),m.parseOptions.forEach(function(a){a in e&&(d[a]=e[a])});for(var f in e)if(f in c&&!(f in m.parseOptions)&&!(f in k)){var j=e[f];d[f]="function"==typeof j?g(b.prototype,f,j):j}m.registries.forEach(function(c){c[a](b,d,e)}),i(a,"template",b,d,e),i(a,"css",b,d,e)}var k,l,m;k={data:b,template:d,css:a},l=Object.keys(c).filter(function(a){return!f[a]&&!k[a]&&!e[a]}),m=[].concat(k.data,e,l,f,k.template,k.css);for(var n in k)m[n]=k[n];return m.keys=Object.keys(c).concat(f.map(function(a){return a.name})).concat(["css"]),m.parseOptions=e,m.registries=f,m.extend=function(a,b,c){j("extend",a,b,c)},m.init=function(a,b,c){j("init",a,b,c),b._config&&(b._config.options=c)},m.reset=function(a){return m.filter(function(b){return b.reset&&b.reset(a)}).map(function(a){return a.name})},m}(N,P,c,Ob,Mb,Qb,Sb,Tb),Vb=function(a,b,c,d){function e(a){return function(){return a}}var f,g=function(a,f,g,h){if(a===f)return e(f);if(h){var i=d.registries.interpolators.find(g,h);if(i)return i(a,f)||e(f);b('Missing "'+h+'" interpolator. You may need to download a plugin from [TODO]')}return c.number(a,f)||c.array(a,f)||c.object(a,f)||e(f)};return a.interpolate=g,f=g}(e,L,j,Ub),Wb=function(a,b,c){var d=function(a){var b;this.startTime=Date.now();for(b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);this.interpolator=c(this.from,this.to,this.root,this.interpolator),this.running=!0,this.tick()};return d.prototype={tick:function(){var c,d,e,f,g,h;return h=this.keypath,this.running?(f=Date.now(),c=f-this.startTime,c>=this.duration?(null!==h&&(b.start(this.root),this.root.viewmodel.set(h,this.to),b.end()),this.step&&this.step(1,this.to),this.complete(this.to),g=this.root._animations.indexOf(this),-1===g&&a("Animation was not found"),this.root._animations.splice(g,1),this.running=!1,!1):(d=this.easing?this.easing(c/this.duration):c/this.duration,null!==h&&(e=this.interpolator(d),b.start(this.root),this.root.viewmodel.set(h,e),b.end()),this.step&&this.step(d,e),!0)):!1},stop:function(){var b;this.running=!1,b=this.root._animations.indexOf(this),-1===b&&a("Animation was not found"),this.root._animations.splice(b,1)}},d}(L,v,Vb),Xb=function(a,b,c,d,e){function f(b,f,g,h){var j,k,l,m;return f&&(f=c(f)),null!==f&&(m=b.viewmodel.get(f)),d.abort(f,b),a(m,g)?(h.complete&&h.complete(h.to),i):(h.easing&&(j="function"==typeof h.easing?h.easing:b.easing[h.easing],"function"!=typeof j&&(j=null)),k=void 0===h.duration?400:h.duration,l=new e({keypath:f,from:m,to:g,root:b,duration:k,easing:j,interpolator:h.interpolator,step:h.step,complete:h.complete}),d.add(l),b._animations.push(l),l)}var g,h=function(){},i={stop:h};return g=function(a,c,d){var e,g,i,j,k,l,m,n,o,p,q,r,s,t;if(e=new b(function(a){g=a}),"object"==typeof a){d=c||{},l=d.easing,m=d.duration,k=[],n=d.step,o=d.complete,(n||o)&&(q={},d.step=null,d.complete=null,p=function(a){return function(b,c){q[a]=c}});for(i in a)a.hasOwnProperty(i)&&((n||o)&&(r=p(i),d={easing:l,duration:m},n&&(d.step=r)),d.complete=o?r:h,k.push(f(this,i,a[i],d)));return t={easing:l,duration:m},n&&(t.step=function(a){n(a,q)}),o&&e.then(function(a){o(a,q)}),t.complete=g,s=f(this,null,null,t),k.push(s),e.stop=function(){for(var a;a=k.pop();)a.stop();s&&s.stop()},e}return d=d||{},d.complete&&e.then(d.complete),d.complete=g,j=f(this,a,c,d),e.stop=function(){j.stop()},e}}(r,o,G,K,Wb),Yb=function(a){return function(){return this.detached?this.detached:(this.el&&a(this.el.__ractive_instances__,this),this.detached=this.fragment.detach(),this.detached)}}(n),Zb=function(a){return this.el?this.fragment.find(a):null},$b=function(a,b,c){var d,e,f,g,h,i,j,k;if(a){for(e=c("div"),f=["matches","matchesSelector"],k=function(a){return function(b,c){return b[a](c)}},i=f.length;i--&&!d;)if(g=f[i],e[g])d=k(g);else for(j=b.length;j--;)if(h=b[i]+g.substr(0,1).toUpperCase()+g.substring(1),e[h]){d=k(h);break}d||(d=function(a,b){var c,d,f;for(d=a.parentNode,d||(e.innerHTML="",d=e,a=a.cloneNode(),e.appendChild(a)),c=d.querySelectorAll(b),f=c.length;f--;)if(c[f]===a)return!0;return!1})}else d=null;return d}(B,H,A),_b=function(a){return function(b,c){var d=this._isComponentQuery?!this.selector||b.name===this.selector:a(b.node,this.selector);return d?(this.push(b.node||b.instance),c||this._makeDirty(),!0):void 0}}($b),ac=function(){var a,b,c;a=this._root[this._isComponentQuery?"liveComponentQueries":"liveQueries"],b=this.selector,c=a.indexOf(b),-1!==c&&(a.splice(c,1),a[b]=null)},bc=function(){function a(a){var b;return(b=a.parentFragment)?b.owner:a.component&&(b=a.component.parentFragment)?b.owner:void 0}function b(b){var c,d;for(c=[b],d=a(b);d;)c.push(d),d=a(d);return c}var c;return c=function(a,c){var d,e,f,g,h,i,j,k,l,m;for(d=b(a.component||a._ractive.proxy),e=b(c.component||c._ractive.proxy),f=d[d.length-1],g=e[e.length-1];f&&f===g;)d.pop(),e.pop(),h=f,f=d[d.length-1],g=e[e.length-1];if(f=f.component||f,g=g.component||g,l=f.parentFragment,m=g.parentFragment,l===m)return i=l.items.indexOf(f),j=m.items.indexOf(g),i-j||d.length-e.length;if(k=h.fragments)return i=k.indexOf(l),j=k.indexOf(m),i-j||d.length-e.length;throw new Error("An unexpected condition was met while comparing the position of two components. Please file an issue at https://github.com/RactiveJS/Ractive/issues - thanks!")}}(),cc=function(a){return function(b,c){var d;return b.compareDocumentPosition?(d=b.compareDocumentPosition(c),2&d?1:-1):a(b,c)}}(bc),dc=function(a,b){return function(){this.sort(this._isComponentQuery?b:a),this._dirty=!1}}(cc,bc),ec=function(a){return function(){var b=this;this._dirty||(this._dirty=!0,a.scheduleTask(function(){b._sort()}))}}(v),fc=function(a){var b=this.indexOf(this._isComponentQuery?a.instance:a);-1!==b&&this.splice(b,1)},gc=function(a,b,c,d,e,f){return function(g,h,i,j){var k=[];return a(k,{selector:{value:h},live:{value:i},_isComponentQuery:{value:j},_test:{value:b}}),i?(a(k,{cancel:{value:c},_root:{value:g},_sort:{value:d},_makeDirty:{value:e},_remove:{value:f},_dirty:{value:!1,writable:!0}}),k):k}}(D,_b,ac,dc,ec,fc),hc=function(a){return function(b,c){var d,e;return this.el?(c=c||{},d=this._liveQueries,(e=d[b])?c&&c.live?e:e.slice():(e=a(this,b,!!c.live,!1),e.live&&(d.push(b),d["_"+b]=e),this.fragment.findAll(b,e),e)):[]}}(gc),ic=function(a){return function(b,c){var d,e;return c=c||{},d=this._liveComponentQueries,(e=d[b])?c&&c.live?e:e.slice():(e=a(this,b,!!c.live,!0),e.live&&(d.push(b),d["_"+b]=e),this.fragment.findAllComponents(b,e),e)}}(gc),jc=function(a){return this.fragment.findComponent(a)},kc=function(a){return function(b){var c={args:Array.prototype.slice.call(arguments,1)};a(this,b,c)}}(m),lc=function(a){var b={capture:!0};return function(c){return c=a(c),this.viewmodel.get(c,b)}}(G),mc=function(a){var b;if(a&&"boolean"!=typeof a)return"undefined"!=typeof window&&document&&a?a.nodeType?a:"string"==typeof a&&(b=document.getElementById(a),!b&&document.querySelector&&(b=document.querySelector(a)),b&&b.nodeType)?b:a[0]&&a[0].nodeType?a[0]:null:null},nc=function(a){return function(b,c){if(!this.rendered)throw new Error("The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.");if(b=a(b),c=a(c)||null,!b)throw new Error("You must specify a valid target to insert into");b.insertBefore(this.detach(),c),this.el=b,(b.__ractive_instances__||(b.__ractive_instances__=[])).push(this),this.detached=null}}(mc),oc=function(a,b,c){return function(d,e,f){var g,h;return d=c(d),g=this.viewmodel.get(d),b(g)&&b(e)?(h=a.start(this,!0),this.viewmodel.merge(d,g,e,f),a.end(),f&&f.complete&&h.then(f.complete),h):this.set(d,e,f&&f.complete)}}(v,g,G),pc=function(a,b){var c=function(a,b,c,d){this.root=a,this.keypath=b,this.callback=c,this.defer=d.defer,this.priority=0,this.context=d&&d.context?d.context:a};return c.prototype={init:function(a){this.value=this.root.viewmodel.get(this.keypath),a!==!1?this.update():this.oldValue=this.value},setValue:function(c){var d=this;b(c,this.value)||(this.value=c,this.defer&&this.ready?a.scheduleTask(function(){return d.update()}):this.update())},update:function(){this.updating||(this.updating=!0,this.callback.call(this.context,this.value,this.oldValue,this.keypath),this.oldValue=this.value,this.updating=!1)}},c}(v,r),qc=function(a){return function(b,c){function d(c,d){var e,f,g;e=b.viewmodel.wrapped[d]?b.viewmodel.wrapped[d].get():b.get(d);for(f in e)!e.hasOwnProperty(f)||"_ractive"===f&&a(e)||(g=d?d+"."+f:f,c.push(g));return c}function e(a){return function(b){return b?b+"."+a:a}}var f,g,h;for(f=c.split("."),h=[""];g=f.shift();)"*"===g?h=h.reduce(d,[]):""===h[0]?h[0]=g:h=h.map(e(g));return h}}(g),rc=function(a){return function(b,c){var d,e;return d=a(b,c),e={},d.forEach(function(a){e[a]=b.get(a)}),e}}(qc),sc=function(a,b,c){var d,e=/\*/,f=Array.prototype.slice;return d=function(a,b,c,d){this.root=a,this.callback=c,this.defer=d.defer,this.keypath=b,this.regex=new RegExp("^"+b.replace(/\./g,"\\.").replace(/\*/g,"([^\\.]+)")+"$"),this.values={},this.defer&&(this.proxies=[]),this.priority="pattern",this.context=d&&d.context?d.context:a},d.prototype={init:function(a){var b,d;if(b=c(this.root,this.keypath),a!==!1)for(d in b)b.hasOwnProperty(d)&&this.update(d);else this.values=b},update:function(b){var d,f=this;if(e.test(b)){d=c(this.root,b);for(b in d)d.hasOwnProperty(b)&&this.update(b)}else if(!this.root.viewmodel.implicitChanges[b])return this.defer&&this.ready?void a.scheduleTask(function(){return f.getProxy(b).update()}):void this.reallyUpdate(b)},reallyUpdate:function(a){var c,d,e;return c=this.root.viewmodel.get(a),this.updating?void(this.values[a]=c):(this.updating=!0,b(c,this.values[a])&&this.ready||(d=f.call(this.regex.exec(a),1),e=[c,this.values[a],a].concat(d),this.callback.apply(this.context,e),this.values[a]=c),void(this.updating=!1))},getProxy:function(a){var b=this;return this.proxies[a]||(this.proxies[a]={update:function(){b.reallyUpdate(a)}}),this.proxies[a]}},d}(v,r,rc),tc=function(a,b,c){var d=/\*/,e={};return function(f,g,h,i){var j,k,l;return g=a(g),i=i||e,d.test(g)?(j=new c(f,g,h,i),f.viewmodel.patternObservers.push(j),k=!0):j=new b(f,g,h,i),f.viewmodel.register(g,j,k?"patternObservers":"observers"),j.init(i.init),j.ready=!0,{cancel:function(){var a;l||(k?(a=f.viewmodel.patternObservers.indexOf(j),f.viewmodel.patternObservers.splice(a,1),f.viewmodel.unregister(g,j,"patternObservers")):f.viewmodel.unregister(g,j,"observers"),l=!0)}}}}(G,pc,sc),uc=function(a,b){return function(c,d,e){var f,g,h,i;if(a(c)){e=d,g=c,f=[];for(c in g)g.hasOwnProperty(c)&&(d=g[c],f.push(this.observe(c,d,e)));return{cancel:function(){for(;f.length;)f.pop().cancel()}}}if("function"==typeof c)return e=d,d=c,c="",b(this,c,d,e);if(h=c.split(" "),1===h.length)return b(this,c,d,e);for(f=[],i=h.length;i--;)c=h[i],c&&f.push(b(this,c,d,e));return{cancel:function(){for(;f.length;)f.pop().cancel()}}}}(h,tc),vc=function(a){return a.trim()},wc=function(a){return""!==a},xc=function(a,b){return function(c,d){var e,f=this;if(c)e=c.split(" ").map(a).filter(b),e.forEach(function(a){var b,c;(b=f._subs[a])&&(d?(c=b.indexOf(d),-1!==c&&b.splice(c,1)):f._subs[a]=[])});else for(c in this._subs)delete this._subs[c];return this}}(vc,wc),yc=function(a,b){return function(c,d){var e,f,g,h=this,i=this;if("object"==typeof c){e=[];for(f in c)c.hasOwnProperty(f)&&e.push(this.on(f,c[f]));return{cancel:function(){for(var a;a=e.pop();)a.cancel()}}}return g=c.split(" ").map(a).filter(b),g.forEach(function(a){(h._subs[a]||(h._subs[a]=[])).push(d)}),{cancel:function(){i.off(c,d)}}}}(vc,wc),zc=function(a,b,c){switch(b){case"splice":return c;case"sort":case"reverse":return null;case"pop":return a.length?[-1]:null;case"push":return[a.length,0].concat(c);case"shift":return[0,1];case"unshift":return[0,0].concat(c)}},Ac=function(a,b){var c,d,e,f,g,h;return b?(c=+(b[0]<0?a.length+b[0]:b[0]),0>c?c=0:c>a.length&&(c=a.length),f=Math.max(0,b.length-2),g=void 0!==b[1]?b[1]:a.length-c,g=Math.min(g,a.length-c),h=f-g,e=a.length+h,d=h?Math.max(a.length,e):c+f,{rangeStart:c,rangeEnd:d,balance:h,added:f,removed:g}):null},Bc=function(a,b,c,d){var e=Array.prototype;return function(f){return function(g){var h,i,j,k,l,m=Array.prototype.slice,n=m.call(arguments,1);if(h=this.get(g),!a(h))throw new Error("Called ractive."+f+"('"+g+"'), but '"+g+"' does not refer to an array");return i=c(h,f,n),j=d(h,i),l=j?e.splice.apply(h,i):e[f].apply(h,n),k=b.start(this,!0),j?this.viewmodel.splice(g,j):this.viewmodel.mark(g),b.end(),("splice"===f||"pop"===f||"shift"===f)&&(k=k.then(function(){return l})),k}}}(g,v,zc,Ac),Cc=function(a){return a("pop")}(Bc),Dc=function(a){return a("push")}(Bc),Ec=function(a,b,c){var d,e,f,g,h,i,j,k="/* Ractive.js component styles */\n",l={},m=[];return b?(a.push(function(){f=a.runloop}),g=document.createElement("style"),g.type="text/css",h=document.getElementsByTagName("head")[0],j=!1,i=g.styleSheet,e=function(){var a;m.length?(a=k+m.join(" "),i?i.cssText=a:g.innerHTML=a,j||(h.appendChild(g),j=!0)):j&&(h.removeChild(g),j=!1)},d={add:function(a){a.css&&(l[a._guid]||(l[a._guid]=0,m.push(a.css),f.scheduleTask(e)),l[a._guid]+=1)},remove:function(a){a.css&&(l[a._guid]-=1,l[a._guid]||(c(m,a.css),f.scheduleTask(e)))}}):d=null,d}(e,B,n),Fc=function(a,b,c){function d(a){var b=e(a);for(a.init&&a.init(a._config.options);b.length;)d(b.shift());g[a._guid]=null}function e(a){return g[a._guid]||(g[a._guid]=[])}var f,g={},h={};return f=function(f,g){var i,j,k,l=this;if(h[this._guid]=!0,k=this.transitionsEnabled,this.noIntro&&(this.transitionsEnabled=!1),i=a.start(this,!0),this.rendered)throw new Error("You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first");return f=c(f)||this.el,g=c(g)||this.anchor,this.el=f,this.anchor=g,this.constructor.css&&b.add(this.constructor),f&&((j=f.__ractive_instances__)?j.push(this):f.__ractive_instances__=[this],g?f.insertBefore(this.fragment.render(),g):f.appendChild(this.fragment.render())),this._hasInited||(this._hasInited=!0,this._parent&&h[this._parent._guid]?e(this._parent).push(this):d(this)),h[this._guid]=!1,a.end(),this.rendered=!0,this.transitionsEnabled=k,this.complete&&i.then(function(){return l.complete()}),i}}(v,Ec,mc),Gc=function(){this.dirtyValue=this.dirtyArgs=!0,this.bound&&"function"==typeof this.owner.bubble&&this.owner.bubble()},Hc=function(){var a;return 1===this.items.length?this.items[0].detach():(a=document.createDocumentFragment(),this.items.forEach(function(b){a.appendChild(b.detach())}),a)},Ic=function(a){var b,c,d,e;if(this.items){for(c=this.items.length,b=0;c>b;b+=1)if(d=this.items[b],d.find&&(e=d.find(a)))return e;return null}},Jc=function(a,b){var c,d,e;if(this.items)for(d=this.items.length,c=0;d>c;c+=1)e=this.items[c],e.findAll&&e.findAll(a,b);
13
+ return b},Kc=function(a,b){var c,d,e;if(this.items)for(d=this.items.length,c=0;d>c;c+=1)e=this.items[c],e.findAllComponents&&e.findAllComponents(a,b);return b},Lc=function(a){var b,c,d,e;if(this.items){for(b=this.items.length,c=0;b>c;c+=1)if(d=this.items[c],d.findComponent&&(e=d.findComponent(a)))return e;return null}},Mc=function(a){var b,c=a.index;return b=this.items[c+1]?this.items[c+1].firstNode():this.owner===this.root?this.owner.component?this.owner.component.findNextNode():null:this.owner.findNextNode(this)},Nc=function(){return this.items&&this.items[0]?this.items[0].firstNode():null},Oc=function(){var a=this;do if(a.pElement)return a.pElement.node;while(a=a.parent);return this.root.detached||this.root.el},Pc=function(a){function b(a,c,d,e){return e=e||0,a.map(function(a){var f,g,h;return a.text?a.text:a.fragments?a.fragments.map(function(a){return b(a.items,c,d,e)}).join(""):(f=d+"-"+e++,h=(g=a.root.viewmodel.wrapped[a.keypath])?g.value:a.getValue(),c[f]=h,"${"+f+"}")}).join("")}var c,d={};return c=function(){var c=arguments[0];void 0===c&&(c=d);var e,f,g,h,i,j,k;return e=c.args,i=e?"argsList":"value",j=e?"dirtyArgs":"dirtyValue",this[j]&&(g=b(this.items,f={},this.root._guid),h=a(e?"["+g+"]":g,f),k=h?h.value:e?[this.toString()]:this.toString(),this[i]=k,this[j]=!1),this[i]}}(Eb),Qc=function(){var a=/</g,b=/>/g;return function(c){return c.replace(a,"&lt;").replace(b,"&gt;")}}(),Rc=function(a){return a&&a.parentNode&&a.parentNode.removeChild(a),a},Sc=function(a){return function(){return a(this.node)}}(Rc),Tc=function(a,b,c,d){var e=function(b){this.type=a.TEXT,this.text=b.template};return e.prototype={detach:c,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createTextNode(d(this.text))),this.node},toString:function(a){return a?b(this.text):this.text},unrender:function(a){return a?this.detach():void 0}},e}(R,Qc,Sc,Cb),Uc=function(a){return function(){this.keypath?this.root.viewmodel.unregister(this.keypath,this):a.removeUnresolved(this),this.resolver&&this.resolver.unbind()}}(v),Vc=function(){return this.value},Wc=function(a){var b=function(b,c,d,e){this.root=b,this.ref=c,this.parentFragment=d,this.resolve=e,a.addUnresolved(this)};return b.prototype={unbind:function(){a.removeUnresolved(this)}},b}(v),Xc=function(a,b){return a&&b&&a.substr(0,b.length+1)===b+"."},Yc=function(a){return function(b,c,d){return b===c?void 0!==d?d:null:a(b,c)?null===d?d:b.replace(c+".",d+"."):void 0}}(Xc),Zc=function(a,b){function c(a){var c=b[a.message]||a.message||"";return d(c,a.args)}function d(a,b){return a.replace(/{([^{}]*)}/g,function(a,c){return b[c]})}var e={warn:function(a,b){(a.debug||b)&&this.logger(c(a),a.allowDuplicates)},error:function(a){this.errorOnly(a),a.debug||this.warn(a,!0)},errorOnly:function(a){a.debug&&this.critical(a)},critical:function(a){var b=a.err||new Error(c(a));this.thrower(b)},logger:a,thrower:function(a){throw a}};return e}(L,Q),$c=function(){var a={};return function(b,c){var d,e;if(a[b])return a[b];for(e=[];c--;)e[c]="_"+c;return d=new Function(e.join(","),"return("+b+")"),a[b]=d,d}}(),_c=function(a,b,c){var d,e;for(d=b.length;d--;)e=b[d],-1===c.indexOf(e)&&a.viewmodel.unregister(e,a,"computed");for(d=c.length;d--;)e=c[d],-1===b.indexOf(e)&&a.viewmodel.register(e,a,"computed");a.dependencies=c.slice()},ad=function(a,b,c,d,e){function f(a,b){var d,e,f;if(a._noWrap)return a;if(e="__ractive_"+b._guid,d=a[e])return d;if(/this/.test(a.toString())){c(a,e,{value:j.call(a,b)});for(f in a)a.hasOwnProperty(f)&&(a[e][f]=a[f]);return a[e]}return c(a,"__ractive_nowrap",{value:a}),a.__ractive_nowrap}function g(a){return"function"==typeof a?a():a}var h,i,j=Function.prototype.bind;return i=function(a,b,c,e,g,h){var i=this,j=a.viewmodel;i.root=a,i.viewmodel=j,i.uniqueString=c,i.keypath=b,i.priority=h,i.fn=d(e,g.length),i.explicitDependencies=[],i.dependencies=[],i.argumentGetters=g.map(function(b){var c,d;return b?b.indexRef?d=b.value:(c=b.keypath,i.explicitDependencies.push(c),j.register(c,i,"computed"),function(){var b=j.get(c);return"function"==typeof b?f(b,a):b}):void 0})},i.prototype={wake:function(){this.awake=!0},sleep:function(){this.awake=!1},getValue:function(){var b,c,d;if(b=this.argumentGetters.map(g),!this.updating){this.updating=!0,this.viewmodel.capture();try{c=this.fn.apply(null,b)}catch(f){this.root.debug&&a.warn({debug:this.root.debug,message:"evaluationError",args:{uniqueString:this.uniqueString,err:f.message||f}}),c=void 0}return d=this.viewmodel.release(),e(this,this.dependencies,d),this.updating=!1,c}},update:function(){var a=this.getValue();return b(a,this.value)||(this.value=a,this.root.viewmodel.mark(this.keypath)),this},teardown:function(){var a=this;this.explicitDependencies.concat(this.dependencies).forEach(function(b){return a.viewmodel.unregister(b,a,"computed")}),this.root.viewmodel.evaluators[this.keypath]=null}},h=i}(Zc,r,C,$c,_c,ub),bd=function(a,b,c,d,e){function f(a,b){return a.replace(/_([0-9]+)/g,function(a,c){var d=b[c];return d?d.indexRef?d.value:d.keypath:"undefined"})}function g(a){return"${"+a.replace(/[\.\[\]]/g,"-")+"}"}var h,i=function(d,e,f,g){var h,i,j,k=this;return h=d.root,this.root=h,this.callback=g,this.owner=d,this.str=f.s,this.args=j=[],this.unresolved=[],this.pending=0,i=e.indexRefs,f.r&&f.r.length?(f.r.forEach(function(d,f){var g,l,m;return i&&void 0!==(g=i[d])?void(j[f]={indexRef:d,value:g}):(l=b(h,d,e))?void(j[f]={keypath:l}):"."===d?void(j[f]={"":""}):(j[f]=null,k.pending+=1,m=new c(h,d,e,function(b){k.resolve(f,b),a(k.unresolved,m)}),void k.unresolved.push(m))}),this.ready=!0,void this.bubble()):(this.resolved=this.ready=!0,void this.bubble())};return i.prototype={bubble:function(){this.ready&&(this.uniqueString=f(this.str,this.args),this.keypath=g(this.uniqueString),this.createEvaluator(),this.callback(this.keypath))},unbind:function(){for(var a;a=this.unresolved.pop();)a.unbind()},resolve:function(a,b){this.args[a]={keypath:b},this.bubble(),this.resolved=!--this.pending},createEvaluator:function(){var a=this.root.viewmodel.evaluators[this.keypath];a||(a=new d(this.root,this.keypath,this.uniqueString,this.str,this.args,this.owner.priority),this.root.viewmodel.evaluators[this.keypath]=a),a.update()},rebind:function(a,b,c,d){var f;this.args.forEach(function(g){var h;g&&(g.keypath&&(h=e(g.keypath,c,d))?(g.keypath=h,f=!0):g.indexRef&&g.indexRef===a&&(g.value=b,f=!0))}),f&&this.bubble()}},h=i}(n,t,Wc,ad,Yc),cd=function(a,b,c,d,e){var f=function(d,f,g){var h,i,j,k,l,m=this;m.resolver=f,m.root=f.root,m.viewmodel=f.root.viewmodel,"string"==typeof d?m.value=d:d.t===a.REFERENCE?(h=m.ref=d.n,(i=g.indexRefs)&&void 0!==(j=i[h])?(m.indexRef=h,m.value=j):(k=f.root,(l=b(k,h,g))?m.resolve(l):m.unresolved=new c(k,h,g,function(a){m.unresolved=null,m.resolve(a)}))):new e(f,g,d,function(a){m.resolve(a)})};return f.prototype={resolve:function(a){this.keypath=a,this.value=this.viewmodel.get(a),this.bind(),this.resolver.bubble()},bind:function(){this.viewmodel.register(this.keypath,this)},rebind:function(a,b,c,e){var f;if(a&&this.indexRef===a){if(b!==this.value)return this.value=b,!0}else if(this.keypath&&(f=d(this.keypath,c,e)))return this.unbind(),this.keypath=f,this.value=this.root.viewmodel.get(f),this.bind(),!0},setValue:function(a){this.value=a,this.resolver.bubble()},unbind:function(){this.keypath&&this.root.viewmodel.unregister(this.keypath,this),this.unresolved&&this.unresolved.unbind()},forceResolution:function(){this.unresolved&&(this.unresolved.unbind(),this.unresolved=null,this.keypath=this.ref,this.value=this.viewmodel.get(this.ref),this.bind())}},f}(R,t,Wc,Yc,bd),dd=function(a,b,c){function d(a){return a.value}function e(a){return void 0!=a}function f(a){a.unbind()}var g=function(d,e,f){var g,h,i,j,k=this,l=this;j=d.parentFragment,l.root=g=d.root,l.mustache=d,l.priority=d.priority,l.ref=h=e.r,l.callback=f,l.unresolved=[],(i=a(g,h,j))?l.base=i:l.baseResolver=new b(g,h,j,function(a){l.base=a,l.baseResolver=null,l.bubble()}),l.members=e.m.map(function(a){return new c(a,k,j)}),l.ready=!0,l.bubble()};return g.prototype={getKeypath:function(){var a=this.members.map(d);return!a.every(e)||this.baseResolver?null:this.base+"."+a.join(".")},bubble:function(){this.ready&&!this.baseResolver&&this.callback(this.getKeypath())},unbind:function(){this.members.forEach(f)},rebind:function(a,b,c,d){var e;this.members.forEach(function(f){f.rebind(a,b,c,d)&&(e=!0)}),e&&this.bubble()},forceResolution:function(){this.baseResolver&&(this.base=this.ref,this.baseResolver.unbind(),this.baseResolver=null),this.members.forEach(function(a){return a.forceResolution()}),this.bubble()}},g}(t,Wc,cd),ed=function(a,b,c,d,e){return function(f,g){function h(a){var b=f.keypath;a!==b&&(f.resolve(a),void 0!==b&&f.fragments&&f.fragments.forEach(function(c){c.rebind(null,null,b,a)}))}var i,j,k,l,m,n;if(m=g.parentFragment,n=g.template,f.root=m.root,f.parentFragment=m,f.pElement=m.pElement,f.template=g.template,f.index=g.index||0,f.priority=m.priority,f.isStatic=g.template.s,f.type=g.template.t,i=n.r){if(k=m.indexRefs,k&&void 0!==(l=k[i]))return f.indexRef=i,void f.setValue(l);j=c(f.root,i,f.parentFragment),void 0!==j?f.resolve(j):(f.ref=i,b.addUnresolved(f))}g.template.x&&(f.resolver=new e(f,m,g.template.x,h)),g.template.rx&&(f.resolver=new d(f,g.template.rx,h)),f.template.n!==a.SECTION_UNLESS||f.hasOwnProperty("value")||f.setValue(void 0)}}(R,v,t,dd,bd),fd=function(a){var b,c,d;void 0!=this.keypath&&(this.root.viewmodel.unregister(this.keypath,this),b=!0),this.keypath=a,void 0!=a&&(c=this.root.viewmodel.get(a),this.root.viewmodel.register(a,this)),this.setValue(c),b&&(d=this.twowayBinding)&&d.rebound()},gd=function(a){return function(b,c,d,e){var f;this.fragments&&this.fragments.forEach(function(a){return a.rebind(b,c,d,e)}),this.resolver&&this.resolver.rebind(b,c,d,e),void 0!==this.keypath?(f=a(this.keypath,d,e),void 0!==f&&this.resolve(f)):void 0!==b&&this.indexRef===b&&this.setValue(c)}}(Yc),hd=function(a,b,c,d){return{getValue:a,init:b,resolve:c,rebind:d}}(Vc,ed,fd,gd),id=function(a,b,c,d,e,f,g,h){var i=function(b){this.type=a.INTERPOLATOR,g.init(this,b)};return i.prototype={update:function(){this.node.data=void 0==this.value?"":this.value},resolve:g.resolve,rebind:g.rebind,detach:h,unbind:f,render:function(){return this.node||(this.node=document.createTextNode(void 0!=this.value?this.value:"")),this.node},unrender:function(a){a&&d(this.node)},getValue:g.getValue,setValue:function(a){var c;(c=this.root.viewmodel.wrapped[this.keypath])&&(a=c.get()),e(a,this.value)||(this.value=a,this.parentFragment.bubble(),this.node&&b.addView(this))},firstNode:function(){return this.node},toString:function(a){var b=void 0!=this.value?""+this.value:"";return a?c(b):b}},i}(R,v,Qc,Rc,r,Uc,hd,Sc),jd=function(){this.parentFragment.bubble()},kd=function(){var a;return 1===this.fragments.length?this.fragments[0].detach():(a=document.createDocumentFragment(),this.fragments.forEach(function(b){a.appendChild(b.detach())}),a)},ld=function(a){var b,c,d;for(c=this.fragments.length,b=0;c>b;b+=1)if(d=this.fragments[b].find(a))return d;return null},md=function(a,b){var c,d;for(d=this.fragments.length,c=0;d>c;c+=1)this.fragments[c].findAll(a,b)},nd=function(a,b){var c,d;for(d=this.fragments.length,c=0;d>c;c+=1)this.fragments[c].findAllComponents(a,b)},od=function(a){var b,c,d;for(c=this.fragments.length,b=0;c>b;b+=1)if(d=this.fragments[b].findComponent(a))return d;return null},pd=function(a){return this.fragments[a.index+1]?this.fragments[a.index+1].firstNode():this.parentFragment.findNextNode(this)},qd=function(){var a,b,c;if(a=this.fragments.length)for(b=0;a>b;b+=1)if(c=this.fragments[b].firstNode())return c;return this.parentFragment.findNextNode(this)},rd=function(a,b){var c;return b.push(function(){c=b.Fragment}),function(b){var c,d,e,f,g,h,i,j,k=this;if(!this.unbound){if(c=this.parentFragment,g=[],b.forEach(function(a,b){var c,e,f,h;return a===b?void(g[a]=k.fragments[b]):(c=k.fragments[b],void 0===d&&(d=b),-1===a?(k.fragmentsToUnrender.push(c),void c.unbind()):(e=a-b,f=k.keypath+"."+b,h=k.keypath+"."+a,c.rebind(k.template.i,a,f,h),void(g[a]=c)))}),f=this.root.get(this.keypath).length,void 0===d){if(this.length===f)return;d=this.length}for(this.length=this.fragments.length=f,a.addView(this),h={template:this.template.f,root:this.root,owner:this},this.template.i&&(h.indexRef=this.template.i),e=d;f>e;e+=1)(i=g[e])?this.docFrag.appendChild(i.detach(!1)):this.fragmentsToCreate.push(e),this.fragments[e]=i;j=c.findNextNode(this),this.parentFragment.getNode().insertBefore(this.docFrag,j)}}}(v,e),sd=function(){var a;return a=this.docFrag=document.createDocumentFragment(),this.update(),this.rendered=!0,a},td=function(a,b,c,d,e){function f(d,e){var f={template:d.template.f,root:d.root,pElement:d.parentFragment.pElement,owner:d};if(d.subtype)switch(d.subtype){case a.SECTION_IF:return j(d,e,!1,f);case a.SECTION_UNLESS:return j(d,e,!0,f);case a.SECTION_WITH:return i(d,f);case a.SECTION_EACH:if(c(e))return h(d,e,f)}return d.ordered=!!b(e),d.ordered?g(d,e,f):c(e)||"function"==typeof e?d.template.i?h(d,e,f):i(d,f):j(d,e,!1,f)}function g(a,b,c){var d,e,f;if(e=b.length,e===a.length)return!1;if(e<a.length)a.fragmentsToUnrender=a.fragments.splice(e,a.length-e),a.fragmentsToUnrender.forEach(k);else if(e>a.length)for(d=a.length;e>d;d+=1)c.context=a.keypath+"."+d,c.index=d,a.template.i&&(c.indexRef=a.template.i),f=new n(c),a.fragmentsToRender.push(a.fragments[d]=f);return a.length=e,!0}function h(a,b,c){var d,e,f,g,h;for(f=a.hasKey||(a.hasKey={}),e=a.fragments.length;e--;)g=a.fragments[e],g.index in b||(h=!0,g.unbind(),a.fragmentsToUnrender.push(g),a.fragments.splice(e,1),f[g.index]=!1);for(d in b)f[d]||(h=!0,c.context=a.keypath+"."+d,c.index=d,a.template.i&&(c.indexRef=a.template.i),g=new n(c),a.fragmentsToRender.push(g),a.fragments.push(g),f[d]=!0);return a.length=a.fragments.length,h}function i(a,b){var c;return a.length?void 0:(b.context=a.keypath,b.index=0,c=new n(b),a.fragmentsToRender.push(a.fragments[0]=c),a.length=1,!0)}function j(a,c,d,e){var f,g,h;if(g=b(c)&&0===c.length,f=d?g||!c:c&&!g){if(!a.length)return e.index=0,h=new n(e),a.fragmentsToRender.push(a.fragments[0]=h),a.length=1,!0;if(a.length>1)return a.fragmentsToUnrender=a.fragments.splice(1),a.fragmentsToUnrender.forEach(k),!0}else if(a.length)return a.fragmentsToUnrender=a.fragments.splice(0,a.fragments.length).filter(l),a.fragmentsToUnrender.forEach(k),a.length=a.fragmentsToRender.length=0,!0}function k(a){a.unbind()}function l(a){return a.rendered}var m,n;return e.push(function(){n=e.Fragment}),m=function(a){var b,c,e=this;this.updating||(this.updating=!0,(b=this.root.viewmodel.wrapped[this.keypath])&&(a=b.get()),this.fragmentsToCreate.length?(c={template:this.template.f,root:this.root,pElement:this.pElement,owner:this,indexRef:this.template.i},this.fragmentsToCreate.forEach(function(a){var b;c.context=e.keypath+"."+a,c.index=a,b=new n(c),e.fragmentsToRender.push(e.fragments[a]=b)}),this.fragmentsToCreate.length=0):f(this,a)&&(this.bubble(),this.rendered&&d.addView(this)),this.value=a,this.updating=!1)}}(R,g,h,v,e),ud=function(a,b){function c(a){a.unbind()}function d(a,b){var c,d=[];for(c=a;b>c;c+=1)d.push(c);return d}function e(a,b,c,d){var e,f,g,h,i;for(g=a.template.i,e=b;c>e;e+=1)f=a.fragments[e],h=a.keypath+"."+(e-d),i=a.keypath+"."+e,f.index=e,f.rebind(g,e,h,i)}var f,g;return b.push(function(){g=b.Fragment}),f=function(b){var f,g,h,i,j,k=this;if(!this.unbound&&(f=b.balance)){if(a.addView(k),g=b.rangeStart,k.length+=f,0>f)return k.fragmentsToUnrender=k.fragments.splice(g,-f),k.fragmentsToUnrender.forEach(c),void e(k,g,k.length,f);h=g+b.removed,i=g+b.added,j=[h,0],j.length+=f,k.fragments.splice.apply(k.fragments,j),e(k,i,k.length,f),k.fragmentsToCreate=d(h,i)}}}(v,e),vd=function(a){var b,c,d;for(b="",c=0,d=this.length,c=0;d>c;c+=1)b+=this.fragments[c].toString(a);return b},wd=function(a){function b(a){a.unbind()}var c;return c=function(){this.fragments.forEach(b),a.call(this),this.length=0,this.unbound=!0}}(Uc),xd=function(){function a(a){a.unrender(!0)}function b(a){a.unrender(!1)}var c;return c=function(c){this.fragments.forEach(c?a:b)}}(),yd=function(){for(var a,b,c,d,e;a=this.fragmentsToUnrender.pop();)a.unrender(!0);if(this.fragmentsToRender.length){for(this.rendered&&(e=this.parentFragment.getNode());a=this.fragmentsToRender.shift();)b=a.render(),this.docFrag.appendChild(b),this.rendered&&this.ordered&&(c=this.fragments[a.index+1],c&&c.rendered&&e.insertBefore(this.docFrag,c.firstNode()||null));this.rendered&&this.docFrag.childNodes.length&&(d=this.parentFragment.findNextNode(this),e.insertBefore(this.docFrag,d))}},zd=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){var s=function(c){this.type=a.SECTION,this.subtype=c.template.n,this.inverted=this.subtype===a.SECTION_UNLESS,this.pElement=c.pElement,this.fragments=[],this.fragmentsToCreate=[],this.fragmentsToRender=[],this.fragmentsToUnrender=[],this.length=0,b.init(this,c)};return s.prototype={bubble:c,detach:d,find:e,findAll:f,findAllComponents:g,findComponent:h,findNextNode:i,firstNode:j,getValue:b.getValue,merge:k,rebind:b.rebind,render:l,resolve:b.resolve,setValue:m,splice:n,toString:o,unbind:p,unrender:q,update:r},s}(R,hd,jd,kd,ld,md,nd,od,pd,qd,rd,sd,td,ud,vd,wd,xd,yd),Ad=function(){var a,b;if(this.docFrag){for(a=this.nodes.length,b=0;a>b;b+=1)this.docFrag.appendChild(this.nodes[b]);return this.docFrag}},Bd=function(a){return function(b){var c,d,e,f;for(d=this.nodes.length,c=0;d>c;c+=1)if(e=this.nodes[c],1===e.nodeType){if(a(e,b))return e;if(f=e.querySelector(b))return f}return null}}($b),Cd=function(a){return function(b,c){var d,e,f,g,h,i;for(e=this.nodes.length,d=0;e>d;d+=1)if(f=this.nodes[d],1===f.nodeType&&(a(f,b)&&c.push(f),g=f.querySelectorAll(b)))for(h=g.length,i=0;h>i;i+=1)c.push(g[i])}}($b),Dd=function(){return this.rendered&&this.nodes[0]?this.nodes[0]:this.parentFragment.findNextNode(this)},Ed=function(a,b){function c(a){return g[a]||(g[a]=b(a))}var d,e,f,g={};try{b("table").innerHTML="foo"}catch(h){e=!0,f={TABLE:['<table class="x">',"</table>"],THEAD:['<table><thead class="x">',"</thead></table>"],TBODY:['<table><tbody class="x">',"</tbody></table>"],TR:['<table><tr class="x">',"</tr></table>"],SELECT:['<select class="x">',"</select>"]}}return d=function(b,d,g){var h,i,j,k,l,m=[];if(null!=b&&""!==b){for(e&&(i=f[d.tagName])?(h=c("DIV"),h.innerHTML=i[0]+b+i[1],h=h.querySelector(".x"),"SELECT"===h.tagName&&(j=h.options[h.selectedIndex])):d.namespaceURI===a.svg?(h=c("DIV"),h.innerHTML='<svg class="x">'+b+"</svg>",h=h.querySelector(".x")):(h=c(d.tagName),h.innerHTML=b);k=h.firstChild;)m.push(k),g.appendChild(k);if(e&&"SELECT"===d.tagName)for(l=m.length;l--;)m[l]!==j&&(m[l].selected=!1)}return m}}(z,A),Fd=function(a){for(var b=[],c=a.length;c--;)b[c]=a[c];return b},Gd=function(a){function b(a){return a.selected}var c;return c=function(c){var d,e,f;c&&"select"===c.name&&c.binding&&(d=a(c.node.options).filter(b),c.getAttribute("multiple")?f=d.map(function(a){return a.value}):(e=d[0])&&(f=e.value),void 0!==f&&c.binding.setValue(f),c.bubble())}}(Fd),Hd=function(a,b){return function(){if(this.rendered)throw new Error("Attempted to render an item that was already rendered");return this.docFrag=document.createDocumentFragment(),this.nodes=a(this.value,this.parentFragment.getNode(),this.docFrag),b(this.pElement),this.rendered=!0,this.docFrag}}(Ed,Gd),Id=function(a){return function(b){var c;(c=this.root.viewmodel.wrapped[this.keypath])&&(b=c.get()),b!==this.value&&(this.value=b,this.parentFragment.bubble(),this.rendered&&a.addView(this))}}(v),Jd=function(a){return function(){return void 0!=this.value?a(""+this.value):""}}(Cb),Kd=function(a){return function(b){this.rendered&&b&&(this.nodes.forEach(a),this.rendered=!1)}}(Rc),Ld=function(a,b){return function(){var c,d;if(this.rendered){for(;this.nodes&&this.nodes.length;)c=this.nodes.pop(),c.parentNode.removeChild(c);d=this.parentFragment.getNode(),this.nodes=a(this.value,d,this.docFrag),d.insertBefore(this.docFrag,this.parentFragment.findNextNode(this)),b(this.pElement)}}}(Ed,Gd),Md=function(a,b,c,d,e,f,g,h,i,j,k,l){var m=function(c){this.type=a.TRIPLE,b.init(this,c)};return m.prototype={detach:c,find:d,findAll:e,firstNode:f,getValue:b.getValue,rebind:b.rebind,render:g,resolve:b.resolve,setValue:h,toString:i,unbind:l,unrender:j,update:k},m}(R,hd,Ad,Bd,Cd,Dd,Hd,Id,Jd,Kd,Ld,Uc),Nd=function(){this.parentFragment.bubble()},Od=function(){var a,b=this.node;return b?((a=b.parentNode)&&a.removeChild(b),b):void 0},Pd=function(a){return function(b){return a(this.node,b)?this.node:this.fragment&&this.fragment.find?this.fragment.find(b):void 0}}($b),Qd=function(a,b){b._test(this,!0)&&b.live&&(this.liveQueries||(this.liveQueries=[])).push(b),this.fragment&&this.fragment.findAll(a,b)},Rd=function(a,b){this.fragment&&this.fragment.findAllComponents(a,b)},Sd=function(a){return this.fragment?this.fragment.findComponent(a):void 0},Td=function(){return null},Ud=function(){return this.node},Vd=function(a){return this.attributes&&this.attributes[a]?this.attributes[a].value:void 0},Wd=function(){var a,b,c,d;return a="altGlyph altGlyphDef altGlyphItem animateColor animateMotion animateTransform clipPath feBlend feColorMatrix feComponentTransfer feComposite feConvolveMatrix feDiffuseLighting feDisplacementMap feDistantLight feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode feMorphology feOffset fePointLight feSpecularLighting feSpotLight feTile feTurbulence foreignObject glyphRef linearGradient radialGradient textPath vkern".split(" "),b="attributeName attributeType baseFrequency baseProfile calcMode clipPathUnits contentScriptType contentStyleType diffuseConstant edgeMode externalResourcesRequired filterRes filterUnits glyphRef gradientTransform gradientUnits kernelMatrix kernelUnitLength keyPoints keySplines keyTimes lengthAdjust limitingConeAngle markerHeight markerUnits markerWidth maskContentUnits maskUnits numOctaves pathLength patternContentUnits patternTransform patternUnits pointsAtX pointsAtY pointsAtZ preserveAlpha preserveAspectRatio primitiveUnits refX refY repeatCount repeatDur requiredExtensions requiredFeatures specularConstant specularExponent spreadMethod startOffset stdDeviation stitchTiles surfaceScale systemLanguage tableValues targetX targetY textLength viewBox viewTarget xChannelSelector yChannelSelector zoomAndPan".split(" "),c=function(a){for(var b={},c=a.length;c--;)b[a[c].toLowerCase()]=a[c];return b},d=c(a.concat(b)),function(a){var b=a.toLowerCase();return d[b]||b}}(),Xd=function(a){return function(){var b=this.fragment.getValue();b!==this.value&&("id"===this.name&&this.value&&delete this.root.nodes[this.value],this.value=b,"value"===this.name&&this.node&&(this.node._ractive.value=b),this.rendered&&a.addView(this))}}(v),Yd=function(){var a=/^(allowFullscreen|async|autofocus|autoplay|checked|compact|controls|declare|default|defaultChecked|defaultMuted|defaultSelected|defer|disabled|draggable|enabled|formNoValidate|hidden|indeterminate|inert|isMap|itemScope|loop|multiple|muted|noHref|noResize|noShade|noValidate|noWrap|open|pauseOnExit|readOnly|required|reversed|scoped|seamless|selected|sortable|translate|trueSpeed|typeMustMatch|visible)$/i;return a}(),Zd=function(a,b){return function(c,d){var e,f;if(e=d.indexOf(":"),-1===e||(f=d.substr(0,e),"xmlns"===f))c.name=c.element.namespace!==a.html?b(d):d;else if(d=d.substring(e+1),c.name=b(d),c.namespace=a[f.toLowerCase()],!c.namespace)throw'Unknown namespace ("'+f+'")'}}(z,Wd),$d=function(a){return function(b){var c=b.fragment.items;if(1===c.length)return c[0].type===a.INTERPOLATOR?c[0]:void 0}}(R),_d=function(a,b){var c={"accept-charset":"acceptCharset",accesskey:"accessKey",bgcolor:"bgColor","class":"className",codebase:"codeBase",colspan:"colSpan",contenteditable:"contentEditable",datetime:"dateTime",dirname:"dirName","for":"htmlFor","http-equiv":"httpEquiv",ismap:"isMap",maxlength:"maxLength",novalidate:"noValidate",pubdate:"pubDate",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",usemap:"useMap"};return function(d,e){var f;!d.pNode||d.namespace||e.pNode.namespaceURI&&e.pNode.namespaceURI!==a.html||(f=c[d.name]||d.name,void 0!==e.pNode[f]&&(d.propertyName=f),(b.test(f)||"value"===f)&&(d.useProperty=!0))}}(z,Yd),ae=function(a,b,c,d,e,f){var g;return f.push(function(){g=f.Fragment}),function(f){return this.type=a.ATTRIBUTE,this.element=f.element,this.root=f.root,c(this,f.name),f.value&&"string"!=typeof f.value?(this.parentFragment=this.element.parentFragment,this.fragment=new g({template:f.value,root:this.root,owner:this}),this.value=this.fragment.getValue(),this.interpolator=d(this),this.isBindable=!!this.interpolator&&!this.interpolator.isStatic,e(this,f),void(this.ready=!0)):void(this.value=b.test(this.name)?!0:f.value||"")}}(R,Yd,Zd,$d,_d,e),be=function(a,b,c,d){this.fragment&&this.fragment.rebind(a,b,c,d)},ce=function(a,b){var c={"accept-charset":"acceptCharset",accesskey:"accessKey",bgcolor:"bgColor","class":"className",codebase:"codeBase",colspan:"colSpan",contenteditable:"contentEditable",datetime:"dateTime",dirname:"dirName","for":"htmlFor","http-equiv":"httpEquiv",ismap:"isMap",maxlength:"maxLength",novalidate:"noValidate",pubdate:"pubDate",readonly:"readOnly",rowspan:"rowSpan",tabindex:"tabIndex",usemap:"useMap"};return function(d){var e;this.node=d,d.namespaceURI&&d.namespaceURI!==a.html||(e=c[this.name]||this.name,void 0!==d[e]&&(this.propertyName=e),(b.test(e)||"value"===e)&&(this.useProperty=!0),"value"===e&&(this.useProperty=!0,d._ractive.value=this.value)),this.rendered=!0,this.update()}}(z,Yd),de=function(a){function b(a){return a.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}var c;return c=function(){var c=(f=this).name,d=f.value,e=f.interpolator,f=f.fragment;if(("value"!==c||"select"!==this.element.name&&"textarea"!==this.element.name)&&("value"!==c||void 0===this.element.getAttribute("contenteditable")))return"name"===c&&"input"===this.element.name&&e?"name={{"+(e.keypath||e.ref)+"}}":a.test(c)?d?c:"":(f&&(d=f.toString()),d?c+'="'+b(d)+'"':c)}}(Yd),ee=function(){this.fragment&&this.fragment.unbind()},fe=function(){var a,b,c,d,e=this.value;if(!this.locked)for(this.node._ractive.value=e,a=this.node.options,d=a.length;d--;)if(b=a[d],c=b._ractive?b._ractive.value:b.value,c==e){b.selected=!0;break}},ge=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]==b)return!0;return!1},he=function(a,b){return function(){var c,d,e,f,g=this.value;for(b(g)||(g=[g]),c=this.node.options,d=c.length;d--;)e=c[d],f=e._ractive?e._ractive.value:e.value,e.selected=a(g,f)}}(ge,g),ie=function(){var a=(b=this).node,b=b.value;a.checked=b==a._ractive.value},je=function(a){return function(){var b,c,d,e,f=this.node;if(b=f.checked,f.value=this.element.getAttribute("value"),f.checked=this.element.getAttribute("value")===this.element.getAttribute("name"),b&&!f.checked&&this.element.binding&&(d=this.element.binding.siblings,e=d.length)){for(;e--;){if(c=d[e],!c.element.node)return;if(c.element.node.checked)return a.addViewmodel(c.root.viewmodel),c.handleChange()}a.addViewmodel(c.root.viewmodel),this.root.viewmodel.set(c.keypath,void 0)}}}(v),ke=function(a){return function(){var b,c;b=this.node,c=this.value,b.checked=a(c)?-1!==c.indexOf(b._ractive.value):c==b._ractive.value}}(g),le=function(){var a,b;a=this.node,b=this.value,void 0===b&&(b=""),a.className=b},me=function(){var a,b;a=this.node,b=this.value,void 0!==b&&(this.root.nodes[b]=void 0),this.root.nodes[b]=a,a.id=b},ne=function(){var a,b;a=this.node,b=this.value,void 0===b&&(b=""),a.style.setAttribute("cssText",b)},oe=function(){var a=this.value;void 0===a&&(a=""),this.locked||(this.node.innerHTML=a)},pe=function(){var a=(b=this).node,b=b.value;a._ractive.value=b,this.locked||(a.value=void 0==b?"":b)},qe=function(){this.locked||(this.node[this.propertyName]=this.value)},re=function(a){return function(){var b=(f=this).node,c=f.namespace,d=f.name,e=f.value,f=f.fragment;c?b.setAttributeNS(c,d,(f||e).toString()):a.test(d)?e?b.setAttribute(d,""):b.removeAttribute(d):b.setAttribute(d,(f||e).toString())}}(Yd),se=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){return function(){var o,p,q=(s=this).name,r=s.element,s=s.node;"id"===q?p=i:"value"===q?"select"===r.name&&"value"===q?p=r.getAttribute("multiple")?d:c:"textarea"===r.name?p=l:null!=r.getAttribute("contenteditable")?p=k:"input"===r.name&&(o=r.getAttribute("type"),p="file"===o?b:"radio"===o&&r.binding&&"name"===r.binding.name?f:l):this.twoway&&"name"===q?"radio"===s.type?p=e:"checkbox"===s.type&&(p=g):"style"===q&&s.style.setAttribute?p=j:"class"!==q||s.namespaceURI&&s.namespaceURI!==a.html?this.useProperty&&(p=m):p=h,p||(p=n),this.update=p,this.update()}}(z,Rb,fe,he,ie,je,ke,le,me,ne,oe,pe,qe,re),te=function(a,b,c,d,e,f,g){var h=function(a){this.init(a)};return h.prototype={bubble:a,init:b,rebind:c,render:d,toString:e,unbind:f,update:g},h}(Xd,ae,be,ce,de,ee,se),ue=function(a){return function(b,c){var d,e,f=[];for(d in c)c.hasOwnProperty(d)&&(e=new a({element:b,name:d,value:c[d],root:b.root}),f.push(f[d]=e));return f}}(te),ve=function(a){for(var b,c,d=Array.prototype.slice,e=d.call(arguments,1);c=e.shift();)for(b in c)c.hasOwnProperty(b)&&(a[b]=c[b]);return a},we=function(a,b,c,d,e){var f=function(a){var c,d,e;return this.element=a,this.root=a.root,this.attribute=a.attributes[this.name||"value"],c=this.attribute.interpolator,c.twowayBinding=this,c.keypath&&"${"===c.keypath.substr?(b("Two-way binding does not work with expressions: "+c.keypath),!1):(c.keypath||(c.ref&&c.resolve(c.ref),c.resolver&&c.resolver.forceResolution()),this.keypath=d=c.keypath,void(void 0===this.root.viewmodel.get(d)&&this.getInitialValue&&(e=this.getInitialValue(),void 0!==e&&this.root.viewmodel.set(d,e))))};return f.prototype={handleChange:function(){var b=this;a.start(this.root),this.attribute.locked=!0,this.root.viewmodel.set(this.keypath,this.getValue()),a.scheduleTask(function(){return b.attribute.locked=!1}),a.end()},rebound:function(){var a,b,c;b=this.keypath,c=this.attribute.interpolator.keypath,b!==c&&(e(this.root._twowayBindings[b],this),this.keypath=c,a=this.root._twowayBindings[c]||(this.root._twowayBindings[c]=[]),a.push(this))},unbind:function(){}},f.extend=function(a){var b,e=this;return b=function(a){f.call(this,a),this.init&&this.init()},b.prototype=c(e.prototype),d(b.prototype,a),b.extend=f.extend,b},f}(v,L,S,ve,n),xe=function(){this._ractive.binding.handleChange()},ye=function(a,b){var c=a.extend({getInitialValue:function(){return this.element.fragment?this.element.fragment.toString():""},render:function(){var a=this.element.node;a.addEventListener("change",b,!1),this.root.lazy||(a.addEventListener("input",b,!1),a.attachEvent&&a.addEventListener("keyup",b,!1))},unrender:function(){var a=this.element.node;a.removeEventListener("change",b,!1),a.removeEventListener("input",b,!1),a.removeEventListener("keyup",b,!1)},getValue:function(){return this.element.node.innerHTML}});return c}(we,xe),ze=function(){var a={};return function(b,c,d){var e=b+c+d;return a[e]||(a[e]=[])}}(),Ae=function(a,b,c,d,e){var f=c.extend({name:"checked",init:function(){this.siblings=d(this.root._guid,"radio",this.element.getAttribute("name")),this.siblings.push(this)},render:function(){var a=this.element.node;a.addEventListener("change",e,!1),a.attachEvent&&a.addEventListener("click",e,!1)},unrender:function(){var a=this.element.node;a.removeEventListener("change",e,!1),a.removeEventListener("click",e,!1)},handleChange:function(){a.start(this.root),this.siblings.forEach(function(a){a.root.viewmodel.set(a.keypath,a.getValue())}),a.end()},getValue:function(){return this.element.node.checked},unbind:function(){b(this.siblings,this)}});return f}(v,n,we,ze,xe),Be=function(a,b,c,d){var e=b.extend({name:"name",init:function(){this.siblings=d(this.root._guid,"radioname",this.keypath),this.siblings.push(this),this.radioName=!0,this.attribute.twoway=!0},getInitialValue:function(){return this.element.getAttribute("checked")?this.element.getAttribute("value"):void 0
14
+ },render:function(){var a=this.element.node;a.name="{{"+this.keypath+"}}",a.checked=this.root.viewmodel.get(this.keypath)==this.element.getAttribute("value"),a.addEventListener("change",c,!1),a.attachEvent&&a.addEventListener("click",c,!1)},unrender:function(){var a=this.element.node;a.removeEventListener("change",c,!1),a.removeEventListener("click",c,!1)},getValue:function(){var a=this.element.node;return a._ractive?a._ractive.value:a.value},handleChange:function(){this.element.node.checked&&b.prototype.handleChange.call(this)},rebound:function(a,c,d,e){var f;b.prototype.rebound.call(this,a,c,d,e),(f=this.element.node)&&(f.name="{{"+this.keypath+"}}")},unbind:function(){a(this.siblings,this)}});return e}(n,we,xe,ze),Ce=function(a,b,c,d,e){function f(a){return a.isChecked}function g(a){return a.element.getAttribute("value")}var h=c.extend({name:"name",getInitialValue:function(){return this.noInitialValue=!0,[]},init:function(){var b,c,e;this.checkboxName=!0,this.siblings=d(this.root._guid,"checkboxes",this.keypath),this.siblings.push(this),this.noInitialValue&&(this.siblings.noInitialValue=!0),e=this.siblings.noInitialValue,b=this.root.viewmodel.get(this.keypath),c=this.element.getAttribute("value"),e?(this.isChecked=this.element.getAttribute("checked"),this.isChecked&&b.push(c)):this.isChecked=a(b)?-1!==b.indexOf(c):b===c},unbind:function(){b(this.siblings,this)},render:function(){var a=this.element.node;a.name="{{"+this.keypath+"}}",a.checked=this.isChecked,a.addEventListener("change",e,!1),a.attachEvent&&a.addEventListener("click",e,!1)},unrender:function(){var a=this.element.node;a.removeEventListener("change",e,!1),a.removeEventListener("click",e,!1)},changed:function(){var a=!!this.isChecked;return this.isChecked=this.element.node.checked,this.isChecked===a},handleChange:function(){this.isChecked=this.element.node.checked,c.prototype.handleChange.call(this)},getValue:function(){return this.siblings.filter(f).map(g)}});return h}(g,n,we,ze,xe),De=function(a,b){var c=a.extend({name:"checked",render:function(){var a=this.element.node;a.addEventListener("change",b,!1),a.attachEvent&&a.addEventListener("click",b,!1)},unrender:function(){var a=this.element.node;a.removeEventListener("change",b,!1),a.removeEventListener("click",b,!1)},getValue:function(){return this.element.node.checked}});return c}(we,xe),Ee=function(a,b,c){var d=b.extend({getInitialValue:function(){var a,b,c,d,e=this.element.options;if(void 0===this.element.getAttribute("value")&&(b=a=e.length,a)){for(;b--;)if(e[b].getAttribute("selected")){c=e[b].getAttribute("value"),d=!0;break}if(!d)for(;++b<a;)if(!e[b].getAttribute("disabled")){c=e[b].getAttribute("value");break}return void 0!==c&&(this.element.attributes.value.value=c),c}},render:function(){this.element.node.addEventListener("change",c,!1)},unrender:function(){this.element.node.removeEventListener("change",c,!1)},setValue:function(b){a.addViewmodel(this.root.viewmodel),this.root.viewmodel.set(this.keypath,b)},getValue:function(){var a,b,c,d,e;for(a=this.element.node.options,c=a.length,b=0;c>b;b+=1)if(d=a[b],a[b].selected)return e=d._ractive?d._ractive.value:d.value},forceUpdate:function(){var b=this,c=this.getValue();void 0!==c&&(this.attribute.locked=!0,a.addViewmodel(this.root.viewmodel),a.scheduleTask(function(){return b.attribute.locked=!1}),this.root.viewmodel.set(this.keypath,c))}});return d}(v,we,xe),Fe=function(a){return function(b,c){var d;if(!a(b)||!a(c))return!1;if(b.length!==c.length)return!1;for(d=b.length;d--;)if(b[d]!==c[d])return!1;return!0}}(g),Ge=function(a,b,c,d){var e=c.extend({getInitialValue:function(){return this.element.options.filter(function(a){return a.getAttribute("selected")}).map(function(a){return a.getAttribute("value")})},render:function(){var a;this.element.node.addEventListener("change",d,!1),a=this.root.viewmodel.get(this.keypath),void 0===a&&this.handleChange()},unrender:function(){this.element.node.removeEventListener("change",d,!1)},setValue:function(){throw new Error("TODO not implemented yet")},getValue:function(){var a,b,c,d,e,f;for(a=[],b=this.element.node.options,d=b.length,c=0;d>c;c+=1)e=b[c],e.selected&&(f=e._ractive?e._ractive.value:e.value,a.push(f));return a},handleChange:function(){var a,d,e;return a=this.attribute,d=a.value,e=this.getValue(),void 0!==d&&b(e,d)||c.prototype.handleChange.call(this),this},forceUpdate:function(){var b=this,c=this.getValue();void 0!==c&&(this.attribute.locked=!0,a.addViewmodel(this.root.viewmodel),a.scheduleTask(function(){return b.attribute.locked=!1}),this.root.viewmodel.set(this.keypath,c))},updateModel:function(){void 0!==this.attribute.value&&this.attribute.value.length||this.root.viewmodel.set(this.keypath,this.initialValue)}});return e}(v,Fe,Ee,xe),He=function(a,b){var c=a.extend({render:function(){this.element.node.addEventListener("change",b,!1)},unrender:function(){this.element.node.removeEventListener("change",b,!1)},getValue:function(){return this.element.node.files}});return c}(we,xe),Ie=function(a,b){function c(){var a;b.call(this),a=this._ractive.root.viewmodel.get(this._ractive.binding.keypath,f),this.value=void 0==a?"":a}var d,e,f;return f={evaluateWrapped:!0},e=a.extend({getInitialValue:function(){return""},getValue:function(){return this.element.node.value},render:function(){var a=this.element.node;a.addEventListener("change",b,!1),this.root.lazy||(a.addEventListener("input",b,!1),a.attachEvent&&a.addEventListener("keyup",b,!1)),a.addEventListener("blur",c,!1)},unrender:function(){var a=this.element.node;a.removeEventListener("change",b,!1),a.removeEventListener("input",b,!1),a.removeEventListener("keyup",b,!1),a.removeEventListener("blur",c,!1)}}),d=e}(we,xe),Je=function(a){return a.extend({getInitialValue:function(){return void 0},getValue:function(){var a=parseFloat(this.element.node.value);return isNaN(a)?void 0:a}})}(Ie),Ke=function(a,b,c,d,e,f,g,h,i,j,k){function l(a){return a&&a.isBindable}var m;return m=function(m){var n,o,p,q,r=m.attributes;return m.binding&&(m.binding.teardown(),m.binding=null),m.getAttribute("contenteditable")&&l(r.value)?o=b:"input"===m.name?(n=m.getAttribute("type"),"radio"===n||"checkbox"===n?(p=l(r.name),q=l(r.checked),p&&q&&a.error({message:"badRadioInputBinding"}),p?o="radio"===n?d:e:q&&(o="radio"===n?c:f)):"file"===n&&l(r.value)?o=i:l(r.value)&&(o="number"===n||"range"===n?j:k)):"select"===m.name&&l(r.value)?o=m.getAttribute("multiple")?h:g:"textarea"===m.name&&l(r.value)&&(o=k),o?new o(m):void 0}}(Zc,ye,Ae,Be,Ce,De,Ee,Ge,He,Je,Ie),Le=function(){var a=this.getAction();a&&!this.hasListener?this.listen():!a&&this.hasListener&&this.unrender()},Me=function(a){return function(b){a(this.root,this.getAction(),{event:b})}}(m),Ne=function(){return this.action.toString().trim()},Oe=function(a,b,c,d,e,f,g){function h(a){var b,c,d;if(b=this.root,"function"!=typeof b[this.method])throw new Error('Attempted to call a non-existent method ("'+this.method+'")');c=this.args.map(function(c){var d,e,f;if(!c)return void 0;if(c.indexRef)return c.value;if(c.eventObject){if(d=a,e=c.refinements.length)for(f=0;e>f;f+=1)d=d[c.refinements[f]]}else d=b.get(c.keypath);return d}),d=this.fn.apply(null,c),b[this.method].apply(b,d)}function i(a){f(this.root,this.getAction(),{event:a,args:this.params})}function j(a){var b=this.dynamicParams.getValue(m);"string"==typeof b&&(b=b.substr(1,b.length-2)),f(this.root,this.getAction(),{event:a,args:b})}var k,l,m={args:!0},n=/^event(?:\.(.+))?/;return e.push(function(){l=e.Fragment}),k=function(e,f,k){var m,o,p,q,r,s=this;s.element=e,s.root=e.root,s.name=f,-1!==f.indexOf("*")&&(g.error({debug:this.root.debug,message:"noElementProxyEventWildcards",args:{element:e.tagName,event:f}}),this.invalid=!0),k.m?(s.method=k.m,s.args=o=[],s.unresolved=[],s.refs=k.a.r,s.fn=b(k.a.s,s.refs.length),r=e.parentFragment,p=r.indexRefs,q=s.root,k.a.r.forEach(function(b,e){var f,g,h,i;return p&&void 0!==(f=p[b])?void(o[e]={indexRef:b,value:f}):(h=n.exec(b))?void(o[e]={eventObject:!0,refinements:h[1]?h[1].split("."):[]}):(g=c(q,b,r))?void(o[e]={keypath:g}):(o[e]=null,i=new d(q,b,r,function(b){s.resolve(e,b),a(s.unresolved,i)}),void s.unresolved.push(i))}),this.fire=h):(m=k.n||k,"string"!=typeof m&&(m=new l({template:m,root:this.root,owner:this})),this.action=m,k.d?(this.dynamicParams=new l({template:k.d,root:this.root,owner:this.element}),this.fire=j):k.a&&(this.params=k.a,this.fire=i))}}(n,$c,t,Wc,e,m,Zc),Pe=function(a){var b,c;b=this._ractive,c=b.events[a.type],c.fire({node:this,original:a,index:b.index,keypath:b.keypath,context:b.root.get(b.keypath)})},Qe=function(a,b,c){function d(a){return f[a]||(f[a]=function(b){var c=b.node._ractive;b.index=c.index,b.keypath=c.keypath,b.context=c.root.get(c.keypath),c.events[a].fire(b)}),f[a]}var e,f={};return e=function(){var e,f=this.name;this.invalid||((e=a.registries.events.find(this.root,f))?this.custom=e(this.node,d(f)):("on"+f in this.node||window&&"on"+f in window||c.error({debug:this.root.debug,message:"missingPlugin",args:{plugin:"event",name:f}}),this.node.addEventListener(f,b,!1)),this.hasListener=!0)}}(Ub,Pe,Zc),Re=function(a){return function(b,c,d,e){return this.method?void this.args.forEach(function(f){f.indexRef&&f.indexRef===b&&(f.value=c),f.keypath&&(e=a(f.keypath,d,e))&&(f.keypath=e)}):("string"!=typeof this.action&&this.action.rebind(b,c,d,e),void(this.dynamicParams&&this.dynamicParams.rebind(b,c,d,e)))}}(Yc),Se=function(){this.node=this.element.node,this.node._ractive.events[this.name]=this,(this.method||this.getAction())&&this.listen()},Te=function(a,b){this.args[a]={keypath:b}},Ue=function(){function a(a){a.teardown()}var b;return b=function(){return this.method?void this.unresolved.forEach(a):("string"!=typeof this.action&&this.action.unbind(),void(this.dynamicParams&&this.dynamicParams.unbind()))}}(),Ve=function(a){return function(){this.custom?this.custom.teardown():this.node.removeEventListener(this.name,a,!1),this.hasListener=!1}}(Pe),We=function(a,b,c,d,e,f,g,h,i,j){var k=function(a,b,c){this.init(a,b,c)};return k.prototype={bubble:a,fire:b,getAction:c,init:d,listen:e,rebind:f,render:g,resolve:h,unbind:i,unrender:j},k}(Le,Me,Ne,Oe,Qe,Re,Se,Te,Ue,Ve),Xe=function(a){return function(b,c){var d,e,f,g,h=[];for(e in c)if(c.hasOwnProperty(e))for(f=e.split("-"),d=f.length;d--;)g=new a(b,f[d],c[e]),h.push(g);return h}}(We),Ye=function(a,b,c){var d,e,f;return b.push(function(){d=b.Fragment}),e={args:!0},f=function(b,f){var g,h,i,j=this;j.element=b,j.root=g=b.root,h=f.n||f,"string"!=typeof h&&(i=new d({template:h,root:g,owner:b}),h=i.toString(),i.unbind()),f.a?j.params=f.a:f.d&&(j.fragment=new d({template:f.d,root:g,owner:b}),j.params=j.fragment.getValue(e),j.fragment.bubble=function(){this.dirtyArgs=this.dirtyValue=!0,j.params=this.getValue(e),j.ready&&j.update()}),j.fn=c.registries.decorators.find(g,h),j.fn||a.error({debug:g.debug,message:"missingPlugin",args:{plugin:"decorator",name:h}})},f.prototype={init:function(){var a,b,c,d=this;if(a=d.element.node,d.params?(c=[a].concat(d.params),b=d.fn.apply(d.root,c)):b=d.fn.call(d.root,a),!b||!b.teardown)throw new Error("Decorator definition must return an object with a teardown method");d.actual=b,d.ready=!0},update:function(){this.actual.update?this.actual.update.apply(this.root,this.params):(this.actual.teardown(!0),this.init())},rebind:function(a,b,c,d){this.fragment&&this.fragment.rebind(a,b,c,d)},teardown:function(a){this.actual.teardown(),!a&&this.fragment&&this.fragment.unbind()}},f}(Zc,e,Ub),Ze=function(a){function b(a,b){for(var c=a.length;c--;)if(a[c]==b)return!0}var c;return c=function(c){var d,e,f,g,h;d=c.node,d&&(g=a(d.options),e=c.getAttribute("value"),f=c.getAttribute("multiple"),void 0!==e?(g.forEach(function(a){var c,d;c=a._ractive?a._ractive.value:a.value,d=f?b(e,c):e==c,d&&(h=!0),a.selected=d}),h||(g[0]&&(g[0].selected=!0),c.binding&&c.binding.forceUpdate())):c.binding&&c.binding.forceUpdate())}}(Fd),$e=function(a,b){return function(){var c=this;this.dirty||(this.dirty=!0,a.scheduleTask(function(){b(c),c.dirty=!1})),this.parentFragment.bubble()}}(v,Ze),_e=function(a){do if("select"===a.name)return a;while(a=a.parent)},af=function(a){return function(b,c){b.select=a(b.parent),b.select&&(b.select.options.push(b),c.a||(c.a={}),c.a.value||c.a.hasOwnProperty("disabled")||(c.a.value=c.f),"selected"in c.a&&void 0!==b.select.getAttribute("value")&&delete c.a.selected)}}(_e),bf=function(a,b,c,d,e,f,g,h,i){var j;return i.push(function(){j=i.Fragment}),function(i){var k,l,m,n,o;this.type=a.ELEMENT,k=this.parentFragment=i.parentFragment,l=this.template=i.template,this.parent=i.pElement||k.pElement,this.root=m=k.root,this.index=i.index,this.name=b(l.e),"option"===this.name&&h(this,l),"select"===this.name&&(this.options=[],this.bubble=g),this.attributes=c(this,l.a),l.f&&(this.fragment=new j({template:l.f,root:m,owner:this,pElement:this})),m.twoway&&(n=d(this,l.a))&&(this.binding=n,o=this.root._twowayBindings[n.keypath]||(this.root._twowayBindings[n.keypath]=[]),o.push(n)),l.v&&(this.eventHandlers=e(this,l.v)),l.o&&(this.decorator=new f(this,l.o)),this.intro=l.t0||l.t1,this.outro=l.t0||l.t2}}(R,Wd,ue,Ke,Xe,Ye,$e,af,e),cf=function(a){return function(b,c){return b===c||a(b,c)}}(Xc),df=function(a,b){return function(c,d,e,f){var g=c[d];g&&!a(g,f)&&a(g,e)&&(c[d]=b(g,e,f))}}(cf,Yc),ef=function(a){return function(b,c,d,e){function f(a){a.rebind(b,c,d,e)}var g,h,i,j;if(this.attributes&&this.attributes.forEach(f),this.eventHandlers&&this.eventHandlers.forEach(f),this.decorator&&f(this.decorator),this.fragment&&f(this.fragment),i=this.liveQueries)for(j=this.root,g=i.length;g--;)i[g]._makeDirty();this.node&&(h=this.node._ractive)&&(a(h,"keypath",d,e),void 0!=b&&(h.index[b]=c))}}(df),ff=function(a){var b;(a.attributes.width||a.attributes.height)&&a.node.addEventListener("load",b=function(){var c=a.getAttribute("width"),d=a.getAttribute("height");void 0!==c&&a.node.setAttribute("width",c),void 0!==d&&a.node.setAttribute("height",d),a.node.removeEventListener("load",b,!1)},!1)},gf=function(a,b,c){var d,e={};return c.push(function(){d=c.Fragment}),function(c,f,g){var h,i,j,k=this;return k.element=c,k.root=h=c.root,k.isIntro=g,i=f.n||f,"string"!=typeof i&&(j=new d({template:i,root:h,owner:c}),i=j.toString(),j.unbind()),k.name=i,f.a?k.params=f.a:f.d&&(j=new d({template:f.d,root:h,owner:c}),k.params=j.getValue(e),j.unbind()),k._fn=b.registries.transitions.find(h,i),k._fn?void 0:void a.error({debug:h.debug,message:"missingPlugin",args:{plugin:"transition",name:i}})}}(Zc,Ub,e),hf=function(a){return a.replace(/-([a-zA-Z])/g,function(a,b){return b.toUpperCase()})},jf=function(a,b,c,d){var e,f,g;return a?(f={},g=c("div").style,e=function(a){var c,e,h;if(a=d(a),!f[a])if(void 0!==g[a])f[a]=a;else for(h=a.charAt(0).toUpperCase()+a.substring(1),c=b.length;c--;)if(e=b[c],void 0!==g[e+h]){f[a]=e+h;break}return f[a]}):e=null,e}(B,H,A,hf),kf=function(a,b,c,d){var e,f;return b?(f=window.getComputedStyle||a.getComputedStyle,e=function(a){var b,e,g,h,i;if(b=f(this.node),"string"==typeof a)return i=b[d(a)],"0px"===i&&(i=0),i;if(!c(a))throw new Error("Transition$getStyle must be passed a string, or an array of strings representing CSS properties");for(e={},g=a.length;g--;)h=a[g],i=b[d(h)],"0px"===i&&(i=0),e[h]=i;return e}):e=null,e}(ub,B,g,jf),lf=function(a){return function(b,c){var d;if("string"==typeof b)this.node.style[a(b)]=c;else for(d in b)b.hasOwnProperty(d)&&(this.node.style[a(d)]=b[d]);return this}}(jf),mf=function(a,b,c){function d(a){return a}var e,f=function(e){var f;this.duration=e.duration,this.step=e.step,this.complete=e.complete,"string"==typeof e.easing?(f=e.root.easing[e.easing],f||(a('Missing easing function ("'+e.easing+'"). You may need to download a plugin from [TODO]'),f=d)):f="function"==typeof e.easing?e.easing:d,this.easing=f,this.start=b(),this.end=this.start+this.duration,this.running=!0,c.add(this)};return f.prototype={tick:function(a){var b,c;return this.running?a>this.end?(this.step&&this.step(1),this.complete&&this.complete(1),!1):(b=a-this.start,c=this.easing(b/this.duration),this.step&&this.step(c),!0):!1},stop:function(){this.abort&&this.abort(),this.running=!1}},e=f}(L,J,K),nf=function(a){var b=new RegExp("^-(?:"+a.join("|")+")-");return function(a){return a.replace(b,"")}}(H),of=function(a){var b=new RegExp("^(?:"+a.join("|")+")([A-Z])");return function(a){var c;return a?(b.test(a)&&(a="-"+a),c=a.replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()})):""}}(H),pf=function(a,b,c,d,e,f,g,h,i){var j,k,l,m,n,o,p,q,r={},s={};return a?(k=c("div").style,function(){void 0!==k.transition?(l="transition",m="transitionend",n=!0):void 0!==k.webkitTransition?(l="webkitTransition",m="webkitTransitionEnd",n=!0):n=!1}(),l&&(o=l+"Duration",p=l+"Property",q=l+"TimingFunction"),j=function(a,c,j,k,l){setTimeout(function(){var t,u,v,w,x;w=function(){u&&v&&(a.root.fire(a.name+":end",a.node,a.isIntro),l())},t=(a.node.namespaceURI||"")+a.node.tagName,a.node.style[p]=k.map(g).map(i).join(","),a.node.style[q]=i(j.easing||"linear"),a.node.style[o]=j.duration/1e3+"s",x=function(b){var c;c=k.indexOf(d(h(b.propertyName))),-1!==c&&k.splice(c,1),k.length||(a.node.removeEventListener(m,x,!1),v=!0,w())},a.node.addEventListener(m,x,!1),setTimeout(function(){for(var h,i,l,o,p,q=k.length,y=[];q--;)o=k[q],h=t+o,n&&!s[h]&&(a.node.style[g(o)]=c[o],r[h]||(i=a.getStyle(o),r[h]=a.getStyle(o)!=c[o],s[h]=!r[h],s[h]&&(a.node.style[g(o)]=i))),(!n||s[h])&&(void 0===i&&(i=a.getStyle(o)),l=k.indexOf(o),-1===l?b("Something very strange happened with transitions. If you see this message, please let @RactiveJS know. Thanks!"):k.splice(l,1),p=/[^\d]*$/.exec(c[o])[0],y.push({name:g(o),interpolator:e(parseFloat(i),parseFloat(c[o])),suffix:p}));y.length?new f({root:a.root,duration:j.duration,easing:d(j.easing||""),step:function(b){var c,d;for(d=y.length;d--;)c=y[d],a.node.style[c.name]=c.interpolator(b)+c.suffix},complete:function(){u=!0,w()}}):u=!0,k.length||(a.node.removeEventListener(m,x,!1),v=!0,w())},0)},j.delay||0)}):j=null,j}(B,L,A,hf,Vb,mf,jf,nf,of),qf=function(a){function b(){i.hidden=document[e]}function c(){i.hidden=!0}function d(){i.hidden=!1}var e,f,g,h,i;if("undefined"!=typeof document){if(e="hidden",i={},e in document)g="";else for(h=a.length;h--;)f=a[h],e=f+"Hidden",e in document&&(g=f);void 0!==g?(document.addEventListener(g+"visibilitychange",b),b()):("onfocusout"in document?(document.addEventListener("focusout",c),document.addEventListener("focusin",d)):(window.addEventListener("pagehide",c),window.addEventListener("blur",c),window.addEventListener("pageshow",d),window.addEventListener("focus",d)),i.hidden=!1)}return i}(H),rf=function(a,b,c,d,e,f,g){var h,i,j;return b?(i=window.getComputedStyle||a.getComputedStyle,h=function(a,b,h,k){var l,m=this;if(g.hidden)return this.setStyle(a,b),j||(j=d.resolve());"string"==typeof a?(l={},l[a]=b):(l=a,k=h,h=b),h||(c('The "'+m.name+'" transition does not supply an options object to `t.animateStyle()`. This will break in a future version of Ractive. For more info see https://github.com/RactiveJS/Ractive/issues/340'),h=m,k=m.complete);var n=new d(function(a){var b,c,d,g,j,k,n;if(!h.duration)return m.setStyle(l),void a();for(b=Object.keys(l),c=[],d=i(m.node),j={},k=b.length;k--;)n=b[k],g=d[e(n)],"0px"===g&&(g=0),g!=l[n]&&(c.push(n),m.node.style[e(n)]=g);return c.length?void f(m,l,h,c,a):void a()});return k&&(c("t.animateStyle returns a Promise as of 0.4.0. Transition authors should do t.animateStyle(...).then(callback)"),n.then(k)),n}):h=null,h}(ub,B,L,o,jf,pf,qf),sf=function(a,b){var c;for(c in b)!b.hasOwnProperty(c)||c in a||(a[c]=b[c]);return a},tf=function(a){return function(b,c){return"number"==typeof b?b={duration:b}:"string"==typeof b?b="slow"===b?{duration:600}:"fast"===b?{duration:200}:{duration:400}:b||(b={}),a(b,c)}}(sf),uf=function(){function a(a,b){b?a.setAttribute("style",b):(a.getAttribute("style"),a.removeAttribute("style"))}var b;return b=function(){var b,c,d=this;return b=d.node=d.element.node,c=b.getAttribute("style"),d.complete=function(e){!e&&d.isIntro&&a(b,c),b._ractive.transition=null,d._manager.remove(d)},d._fn?void d._fn.apply(d.root,[d].concat(d.params)):void d.complete()}}(),vf=function(a,b,c,d,e,f,g){var h,i;return g.push(function(){h=g.Fragment}),i=function(a,b,c){this.init(a,b,c)},i.prototype={init:a,start:f,getStyle:b,setStyle:c,animateStyle:d,processParams:e},i}(gf,kf,lf,rf,tf,uf,e),wf=function(a,b,c,d,e,f,g,h,i,j,k){function l(b){var c,d,e;return c=(d=b.getAttribute("xmlns"))?d:"svg"===b.name?a.svg:(e=b.parent)?"foreignObject"===e.name?a.html:e.node.namespaceURI:b.root.el.namespaceURI}function m(a){var c,d,e;if(a.select&&(d=a.select.getAttribute("value"),void 0!==d))if(c=a.getAttribute("value"),a.select.node.multiple&&b(d)){for(e=d.length;e--;)if(c==d[e]){a.node.selected=!0;break}}else a.node.selected=c==d}function n(a){var b,c,d,e,f;b=a.root;do for(c=b._liveQueries,d=c.length;d--;)e=c[d],f=c["_"+e],f._test(a)&&(a.liveQueries||(a.liveQueries=[])).push(f);while(b=b._parent)}var o,p,q;return p=function(){var a=this.node,b=this.fragment.toString(!1);if(a.styleSheet)a.styleSheet.cssText=b;else{for(;a.hasChildNodes();)a.removeChild(a.firstChild);a.appendChild(document.createTextNode(b))}},q=function(){this.node.type&&"text/javascript"!==this.node.type||c("Script tag was updated. This does not cause the code to be re-evaluated!"),this.node.text=this.fragment.toString(!1)},o=function(){var a,b,c=this,o=this.root;if(a=l(this),b=this.node=e(this.name,a),o.constructor.css&&this.parentFragment.getNode()===o.el&&this.node.setAttribute("data-rvcguid",o.constructor._guid),f(this.node,"_ractive",{value:{proxy:this,keypath:i(this.parentFragment),index:this.parentFragment.indexRefs,events:d(null),root:o}}),this.attributes.forEach(function(a){return a.render(b)}),this.fragment&&("script"===this.name?(this.bubble=q,this.node.text=this.fragment.toString(!1),this.fragment.unrender=g):"style"===this.name?(this.bubble=p,this.bubble(),this.fragment.unrender=g):this.binding&&this.getAttribute("contenteditable")?this.fragment.unrender=g:this.node.appendChild(this.fragment.render())),this.eventHandlers&&this.eventHandlers.forEach(function(a){return a.render()}),this.binding&&(this.binding.render(),this.node._ractive.binding=this.binding),"img"===this.name&&j(this),this.decorator&&this.decorator.fn&&h.scheduleTask(function(){c.decorator.init()}),o.transitionsEnabled&&this.intro){var r=new k(this,this.intro,!0);h.registerTransition(r),h.scheduleTask(function(){return r.start()})}return"option"===this.name&&m(this),this.node.autofocus&&h.scheduleTask(function(){return c.node.focus()}),n(this),this.node}}(z,g,L,S,A,C,Rb,v,q,ff,vf),xf=function(a,b,c){function d(a){var c,d,e;if(c=a.getAttribute("value"),void 0===c||!a.select)return!1;if(d=a.select.getAttribute("value"),d==c)return!0;if(a.select.getAttribute("multiple")&&b(d))for(e=d.length;e--;)if(d[e]==c)return!0}function e(a){var b,c,d,e;return b=a.attributes,c=b.type,d=b.value,e=b.name,c&&"radio"===c.value&&d&&e.interpolator&&d.value===e.interpolator.value?!0:void 0}function f(a){var b=a.toString();return b?" "+b:""}var g;return g=function(){var b,g;return b="<"+(this.template.y?"!DOCTYPE":this.template.e),b+=this.attributes.map(f).join(""),"option"===this.name&&d(this)&&(b+=" selected"),"input"===this.name&&e(this)&&(b+=" checked"),b+=">","textarea"===this.name&&void 0!==this.getAttribute("value")?b+=c(this.getAttribute("value")):void 0!==this.getAttribute("contenteditable")&&(b+=this.getAttribute("value")),this.fragment&&(g="script"!==this.name&&"style"!==this.name,b+=this.fragment.toString(g)),a.test(this.template.e)||(b+="</"+this.template.e+">"),b}}(yb,g,Qc),yf=function(a){return function(b){b.select&&a(b.select.options,b)}}(n),zf=function(a){function b(a){a.unbind()}var c;return c=function(){this.fragment&&this.fragment.unbind(),this.binding&&this.binding.unbind(),this.eventHandlers&&this.eventHandlers.forEach(b),"option"===this.name&&a(this),this.attributes.forEach(b)}}(yf),Af=function(a,b){function c(a){var b,c,d;for(d=a.liveQueries.length;d--;)b=a.liveQueries[d],c=b.selector,b._remove(a.node)}var d;return d=function(d){var e,f;if("option"===this.name?this.detach():d&&a.detachWhenReady(this),this.fragment&&this.fragment.unrender(!1),(e=this.binding)&&(this.binding.unrender(),this.node._ractive.binding=null,f=this.root._twowayBindings[e.keypath],f.splice(f.indexOf(e),1)),this.eventHandlers&&this.eventHandlers.forEach(function(a){return a.unrender()}),this.decorator&&this.decorator.teardown(),this.root.transitionsEnabled&&this.outro){var g=new b(this,this.outro,!1);a.registerTransition(g),a.scheduleTask(function(){return g.start()})}this.liveQueries&&c(this),this.node.id&&delete this.root.nodes[this.node.id]}}(v,vf),Bf=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=function(a){this.init(a)};return p.prototype={bubble:a,detach:b,find:c,findAll:d,findAllComponents:e,findComponent:f,findNextNode:g,firstNode:h,getAttribute:i,init:j,rebind:k,render:l,toString:m,unbind:n,unrender:o},p}(Nd,Od,Pd,Qd,Rd,Sd,Td,Ud,Vd,bf,ef,wf,xf,zf,Af),Cf=function(){function a(a,b){var c=d.exec(b)[0];return null===a||c.length<a.length?c:a}var b,c=/^\s*$/,d=/^\s*/;return b=function(b){var d,e,f,g;return d=b.split("\n"),e=d[0],void 0!==e&&c.test(e)&&d.shift(),f=d[d.length-1],void 0!==f&&c.test(f)&&d.pop(),g=d.reduce(a,null),g&&(b=d.map(function(a){return a.replace(g,"")}).join("\n")),b}}(),Df=function(a,b,c,d){function e(d,e){var f=b.registries.partials,g=f.findInstance(d,e);if(g){var h,i=g.partials[e];if("function"==typeof i&&(h=i.bind(g),h.isOwner=g.partials.hasOwnProperty(e),i=h(g.data,c)),!i)return void a.warn({debug:d.debug,message:"noRegistryFunctionReturn",args:{registry:"partial",name:e}});if(!c.isParsed(i)){var j=c.parse(i,c.getParseOptions(g));j.p&&a.warn({debug:d.debug,message:"noNestedPartials",args:{rname:e}});var k=h?g:f.findOwner(g,e);k.partials[e]=i=j.t}return h&&(i._fn=h),i.v?i.t:i}}var f;return f=function(b,f){var g;if(g=e(b,f))return g;if(g=c.fromId(f,{noThrow:!0})){g=d(g);var h=c.parse(g,c.getParseOptions(b));return b.partials[f]=h.t}return a.error({debug:b.debug,message:"noTemplateForPartial",args:{name:f}}),[]}}(Zc,Ub,Nb,Cf),Ef=function(a,b){var c;return b?c=a.split("\n").map(function(a,c){return c?b+a:a}).join("\n"):a},Ff=function(a,b,c,d,e,f,g,h){var i,j;return d.push(function(){j=d.Fragment}),i=function(b){var c=this.parentFragment=b.parentFragment;this.type=a.PARTIAL,this.name=b.template.r,this.index=b.index,this.root=c.root,f.init(this,b),this.update()},i.prototype={bubble:function(){this.parentFragment.bubble()},firstNode:function(){return this.fragment.firstNode()},findNextNode:function(){return this.parentFragment.findNextNode(this)},detach:function(){return this.fragment.detach()},render:function(){return this.update(),this.rendered=!0,this.fragment.render()},unrender:function(a){this.rendered&&(this.fragment.unrender(a),this.rendered=!1)},rebind:function(a,b,c,d){return this.fragment.rebind(a,b,c,d)},unbind:function(){this.fragment&&this.fragment.unbind()},toString:function(b){var d,e,f,g;return d=this.fragment.toString(b),e=this.parentFragment.items[this.index-1],e&&e.type===a.TEXT?(f=e.text.split("\n").pop(),(g=/^\s+$/.exec(f))?c(d,g[0]):d):d},find:function(a){return this.fragment.find(a)},findAll:function(a,b){return this.fragment.findAll(a,b)},findComponent:function(a){return this.fragment.findComponent(a)},findAllComponents:function(a,b){return this.fragment.findAllComponents(a,b)},getValue:function(){return this.fragment.getValue()},resolve:f.resolve,setValue:function(a){this.value!==a&&(this.fragment&&this.rendered&&this.fragment.unrender(!0),this.fragment=null,this.value=a,this.rendered?e.addView(this):(this.update(),this.bubble()))},update:function(){var a,c,d,e;this.fragment||(a=this.name&&(g.registries.partials.findInstance(this.root,this.name)||h.fromId(this.name,{noThrow:!0}))?b(this.root,this.name):this.value?b(this.root,this.value):[],this.fragment=new j({template:a,root:this.root,owner:this,pElement:this.parentFragment.pElement}),this.rendered&&(d=this.parentFragment.getNode(),c=this.fragment.render(),e=this.parentFragment.findNextNode(this),d.insertBefore(c,e)))}},i}(R,Df,Ef,e,v,hd,Ub,Nb),Gf=function(a,b,c){var d;return c.push(function(){d=c.Ractive}),function e(c,d){var f,g=a.registries.components.findInstance(c,d);if(g&&(f=g.components[d],!f._parent)){var h=f.bind(g);if(h.isOwner=g.components.hasOwnProperty(d),f=h(g.data),!f)return void b.warn({debug:c.debug,message:"noRegistryFunctionReturn",args:{registry:"component",name:d}});"string"==typeof f&&(f=e(c,f)),f._fn=h,g.components[d]=f}return f}}(Ub,Zc,e),Hf=function(){return this.instance.fragment.detach()},If=function(a){return this.instance.fragment.find(a)},Jf=function(a,b){return this.instance.fragment.findAll(a,b)},Kf=function(a,b){b._test(this,!0),this.instance.fragment&&this.instance.fragment.findAllComponents(a,b)},Lf=function(a){return a&&a!==this.name?this.instance.fragment?this.instance.fragment.findComponent(a):null:this.instance},Mf=function(){return this.parentFragment.findNextNode(this)},Nf=function(){return this.rendered?this.instance.fragment.firstNode():null},Of=function(a,b){var c,d;return b.push(function(){c=b.Fragment}),d=function(a,b,d){this.parentFragment=a.parentFragment,this.component=a,this.key=b,this.fragment=new c({template:d,root:a.root,owner:this}),this.value=this.fragment.getValue()},d.prototype={bubble:function(){this.dirty||(this.dirty=!0,a.addView(this))},update:function(){var b=this.fragment.getValue();this.component.instance.viewmodel.set(this.key,b),a.addViewmodel(this.component.instance.viewmodel),this.value=b,this.dirty=!1},rebind:function(a,b,c,d){this.fragment.rebind(a,b,c,d)},unbind:function(){this.fragment.unbind()}},d}(v,e),Pf=function(a,b){var c=function(c,d,e,f){var g=this;this.root=c.root,this.parentFragment=c.parentFragment,this.ready=!1,this.hash=null,this.resolver=new a(this,e,function(a){g.binding||(g.binding=c.bindings[g.hash])?(c.bindings[g.hash]=null,g.binding.rebind(a),g.hash=a+"="+d,c.bindings[g.hash]):g.ready?b(c,c.root,a,d):f.push({childKeypath:d,parentKeypath:a}),g.value=c.root.viewmodel.get(a)})};return c.prototype={rebind:function(a,b,c,d){this.resolver.rebind(a,b,c,d)},unbind:function(){this.resolver.unbind()}},c}(dd,s),Qf=function(a,b,c,d,e){function f(f,g,h,i){var j,k,l,m,n,o;if(l=f.root,m=f.parentFragment,"string"==typeof h)return k=b(h),k?k.value:h;if(null===h)return!0;if(1===h.length&&h[0].t===a.INTERPOLATOR){if(h[0].r)return m.indexRefs&&void 0!==m.indexRefs[o=h[0].r]?(f.indexRefBindings[o]=g,m.indexRefs[o]):(n=c(l,h[0].r,m)||h[0].r,i.push({childKeypath:g,parentKeypath:n}),l.viewmodel.get(n));if(h[0].rx)return j=new e(f,g,h[0].rx,i),f.complexParameters.push(j),j.ready=!0,j.value}return j=new d(f,g,h),f.complexParameters.push(j),j.value}var g;return g=function(a,b,c,d){var e,g,h={};a.complexParameters=[];for(e in c)c.hasOwnProperty(e)&&(g=f(a,e,c[e],d),(void 0!==g||void 0===b[e])&&(h[e]=g));return h}}(R,Eb,t,Of,Pf),Rf=function(a){return function(b,c,d,e){var f,g,h,i;return g=b.parentFragment,i=b.root,h={content:e||[]},c.defaults.el&&a.warn({debug:i.debug,message:"defaultElSpecified",args:{name:b.name}}),f=new c({el:null,append:!0,data:d,partials:h,magic:i.magic||c.defaults.magic,modifyArrays:i.modifyArrays,_parent:i,_component:b,adapt:i.adapt,"yield":{template:e,instance:i}})}}(Zc),Sf=function(a){return function(b,c){c.forEach(function(c){var d,e;a(b,b.root,c.parentKeypath,c.childKeypath),d=b.instance.viewmodel.get(c.childKeypath),e=b.root.viewmodel.get(c.parentKeypath),void 0!==d&&void 0===e&&b.root.viewmodel.set(c.parentKeypath,d)})}}(s),Tf=function(a,b,c){function d(a,d,e,f){"string"!=typeof f&&c.error({debug:d.debug,message:"noComponentEventArguments"}),a.on(e,function(){var a,c;return arguments.length&&arguments[0].node&&(a=Array.prototype.shift.call(arguments)),c=Array.prototype.slice.call(arguments),b(d,f,{event:a,args:c}),!1})}var e,f;return a.push(function(){f=a.Fragment}),e=function(a,b){var c;for(c in b)b.hasOwnProperty(c)&&d(a.instance,a.root,c,b[c])
15
+ }}(e,m,Zc),Uf=function(a){var b,c;for(b=a.root;b;)(c=b._liveComponentQueries["_"+a.name])&&c.push(a.instance),b=b._parent},Vf=function(a,b,c,d,e,f,g){return function(h,i){var j,k,l,m;if(j=this.parentFragment=h.parentFragment,k=j.root,this.root=k,this.type=a.COMPONENT,this.name=h.template.e,this.index=h.index,this.indexRefBindings={},this.bindings=[],this.yielder=null,!i)throw new Error('Component "'+this.name+'" not found');m=[],l=c(this,i.defaults.data||{},h.template.a,m),d(this,i,l,h.template.f),e(this,m),f(this,h.template.v),(h.template.t1||h.template.t2||h.template.o)&&b('The "intro", "outro" and "decorator" directives have no effect on components'),g(this)}}(R,L,Qf,Rf,Sf,Tf,Uf),Wf=function(a,b){return function(c,d,e,f){function g(a){a.rebind(c,d,e,f)}var h,i,j=this.instance,k=j._parent;this.bindings.forEach(function(a){var c;a.root===k&&(c=b(a.keypath,e,f))&&a.rebind(c)}),this.complexParameters.forEach(g),this.yielder&&g(this.yielder),(h=this.indexRefBindings[c])&&(a.addViewmodel(j.viewmodel),j.viewmodel.set(h,d)),(i=this.root._liveComponentQueries["_"+this.name])&&i._makeDirty()}}(v,Yc),Xf=function(){var a=this.instance;return a.render(this.parentFragment.getNode()),this.rendered=!0,a.fragment.detach()},Yf=function(){return this.instance.fragment.toString()},Zf=function(){function a(a){a.unbind()}function b(a){var b,c;b=a.root;do(c=b._liveComponentQueries["_"+a.name])&&c._remove(a);while(b=b._parent)}var c;return c=function(){this.complexParameters.forEach(a),this.bindings.forEach(a),b(this),this.instance.fragment.unbind()}}(),$f=function(a){return function(b){a(this.instance,"teardown"),this.shouldDestroy=b,this.instance.unrender()}}(m),_f=function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(a,b){this.init(a,b)};return n.prototype={detach:a,find:b,findAll:c,findAllComponents:d,findComponent:e,findNextNode:f,firstNode:g,init:h,rebind:i,render:j,toString:k,unbind:l,unrender:m},n}(Hf,If,Jf,Kf,Lf,Mf,Nf,Vf,Wf,Xf,Yf,Zf,$f),ag=function(a,b){var c=function(b){this.type=a.COMMENT,this.value=b.template.c};return c.prototype={detach:b,firstNode:function(){return this.node},render:function(){return this.node||(this.node=document.createComment(this.value)),this.node},toString:function(){return"<!--"+this.value+"-->"},unrender:function(a){a&&this.node.parentNode.removeChild(this.node)}},c}(R,Sc),bg=function(a){var b;a.push(function(){b=a.Fragment});var c=function(a){var c,d;if(c=a.parentFragment.root,this.component=d=c.component,this.surrogateParent=a.parentFragment,this.parentFragment=d.parentFragment,d.yielder)throw new Error("A component template can only have one {{yield}} declaration at a time");this.fragment=new b({owner:this,root:c.yield.instance,template:c.yield.template}),d.yielder=this};return c.prototype={detach:function(){return this.fragment.detach()},find:function(a){return this.fragment.find(a)},findAll:function(a,b){return this.fragment.findAll(a,b)},findComponent:function(a){return this.fragment.findComponent(a)},findAllComponents:function(a,b){return this.fragment.findAllComponents(a,b)},findNextNode:function(){return this.surrogateParent.findNextNode(this)},firstNode:function(){return this.fragment.firstNode()},getValue:function(a){return this.fragment.getValue(a)},render:function(){return this.fragment.render()},unbind:function(){this.fragment.unbind()},unrender:function(a){this.fragment.unrender(a),this.component.yielder=void 0},rebind:function(a,b,c,d){this.fragment.rebind(a,b,c,d)},toString:function(){return this.fragment.toString()}},c}(e),cg=function(a,b,c,d,e,f,g,h,i,j,k){return function(l){if("string"==typeof l.template)return new b(l);switch(l.template.t){case a.INTERPOLATOR:return"yield"===l.template.r?new k(l):new c(l);case a.SECTION:return new d(l);case a.TRIPLE:return new e(l);case a.ELEMENT:var m;return(m=h(l.parentFragment.root,l.template.e))?new i(l,m):new f(l);case a.PARTIAL:return new g(l);case a.COMMENT:return new j(l);default:throw new Error("Something very strange happened. Please file an issue at https://github.com/ractivejs/ractive/issues. Thanks!")}}}(R,Tc,id,zd,Md,Bf,Ff,Gf,_f,ag,bg),dg=function(a,b,c){return function(d){var e,f,g,h=this;if(this.owner=d.owner,e=this.parent=this.owner.parentFragment,this.root=d.root,this.pElement=d.pElement,this.context=d.context,this.owner.type===a.SECTION&&(this.index=d.index),e&&(f=e.indexRefs)){this.indexRefs=b(null);for(g in f)this.indexRefs[g]=f[g]}this.priority=e?e.priority+1:1,d.indexRef&&(this.indexRefs||(this.indexRefs={}),this.indexRefs[d.indexRef]=d.index),"string"==typeof d.template?d.template=[d.template]:d.template||(d.template=[]),this.items=d.template.map(function(a,b){return c({parentFragment:h,pElement:d.pElement,template:a,index:b})}),this.value=this.argsList=null,this.dirtyArgs=this.dirtyValue=!0,this.bound=!0}}(R,S,cg),eg=function(a){return function(b,c,d,e){a(this,"context",d,e),this.indexRefs&&void 0!==this.indexRefs[b]&&(this.indexRefs[b]=c),this.items.forEach(function(a){a.rebind&&a.rebind(b,c,d,e)})}}(df),fg=function(){var a;return 1===this.items.length?a=this.items[0].render():(a=document.createDocumentFragment(),this.items.forEach(function(b){a.appendChild(b.render())})),this.rendered=!0,a},gg=function(a){return this.items?this.items.map(function(b){return b.toString(a)}).join(""):""},hg=function(){function a(a){a.unbind&&a.unbind()}var b;return b=function(){this.bound&&(this.items.forEach(a),this.bound=!1)}}(),ig=function(a){if(!this.rendered)throw new Error("Attempted to unrender a fragment that was not rendered");this.items.forEach(function(b){return b.unrender(a)}),this.rendered=!1},jg=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){var r=function(a){this.init(a)};return r.prototype={bubble:a,detach:b,find:c,findAll:d,findAllComponents:e,findComponent:f,findNextNode:g,firstNode:h,getNode:i,getValue:j,init:k,rebind:l,render:m,toString:n,unbind:o,unrender:p},q.Fragment=r,r}(Gc,Hc,Ic,Jc,Kc,Lc,Mc,Nc,Oc,Pc,dg,eg,fg,gg,hg,ig,e),kg=function(a,b,c,d){var e=["template","partials","components","decorators","events"];return function(f,g){var h,i,j,k,l;if("function"!=typeof f||g?f=f||{}:(g=f,f={}),"object"!=typeof f)throw new Error("The reset method takes either no arguments, or an object containing new data");for((i=this.viewmodel.wrapped[""])&&i.reset?i.reset(f)===!1&&(this.data=f):this.data=f,j=d.reset(this),k=j.length;k--;)if(e.indexOf(j[k])>-1){l=!0;break}if(l){var m;this.viewmodel.mark(""),(m=this.component)&&(m.shouldDestroy=!0),this.unrender(),m&&(m.shouldDestroy=!1),this.fragment.template!==this.template&&(this.fragment.unbind(),this.fragment=new c({template:this.template,root:this,owner:this})),h=this.render(this.el,this.anchor)}else h=b.start(this,!0),this.viewmodel.mark(""),b.end();return a(this,"reset",{args:[f]}),g&&h.then(g),h}}(m,v,jg,Ub),lg=function(a,b){return function(c){var d,e;a.template.init(null,this,{template:c}),d=this.transitionsEnabled,this.transitionsEnabled=!1,(e=this.component)&&(e.shouldDestroy=!0),this.unrender(),e&&(e.shouldDestroy=!1),this.fragment.unbind(),this.fragment=new b({template:this.template,root:this,owner:this}),this.render(this.el,this.anchor),this.transitionsEnabled=d}}(Ub,jg),mg=function(a){return a("reverse")}(Bc),ng=function(a,b,c,d){var e=/\*/;return function(f,g,h){var i,j,k=this;if(j=a.start(this,!0),b(f)){i=f,h=g;for(f in i)i.hasOwnProperty(f)&&(g=i[f],f=c(f),this.viewmodel.set(f,g))}else f=c(f),e.test(f)?d(this,f).forEach(function(a){k.viewmodel.set(a,g)}):this.viewmodel.set(f,g);return a.end(),h&&j.then(h.bind(this)),j}}(v,h,G,qc),og=function(a){return a("shift")}(Bc),pg=function(a){return a("sort")}(Bc),qg=function(a){return a("splice")}(Bc),rg=function(a){return function(b,c){return a(this,b,void 0===c?-1:-c)}}(E),sg=function(a,b,c){return function(d){var e;return a(this,"teardown"),this.fragment.unbind(),this.viewmodel.teardown(),this.rendered&&this.el.__ractive_instances__&&b(this.el.__ractive_instances__,this),this.shouldDestroy=!0,e=this.rendered?this.unrender():c.resolve(),d&&e.then(d.bind(this)),e}}(m,n,o),tg=function(a){return function(b,c){var d;return"string"!=typeof b&&a.errorOnly({debug:this.debug,messsage:"badArguments",arg:{arguments:b}}),d=this.get(b),this.set(b,!d,c)}}(Zc),ug=function(){return this.fragment.toString(!0)},vg=function(a,b,c,d,e){return function(){var f,g,h=this;if(!this.rendered)return d.warn({debug:this.debug,message:"ractive.unrender() was called on a Ractive instance that was not rendered"}),e.resolve();for(f=b.start(this,!0),g=!this.component||this.component.shouldDestroy||this.shouldDestroy,this.constructor.css&&f.then(function(){c.remove(h.constructor)});this._animations[0];)this._animations[0].stop();return this.fragment.unrender(g),this.rendered=!1,a(this.el.__ractive_instances__,this),b.end(),f}}(n,v,Ec,Zc,o),wg=function(a){return a("unshift")}(Bc),xg=function(a,b){return function(c,d){var e;return"function"==typeof c?(d=c,c=""):c=c||"",e=b.start(this,!0),this.viewmodel.mark(c),b.end(),a(this,"update",{args:[c]}),d&&e.then(d.bind(this)),e}}(m,v),yg=function(a,b){function c(d,e,f,g){var h,i,j,k,l,m,n=[];if(h=d._twowayBindings[e],h&&(j=h.length))for(;j--;)k=h[j],(!k.radioName||k.element.node.checked)&&(k.checkboxName?n[k.keypath]||k.changed()||(n.push(k.keypath),n[k.keypath]=k):(l=k.attribute.value,m=k.getValue(),a(l,m)||b(l,m)||(f[e]=m)));if(n.length&&n.forEach(function(b){var c,d,e;c=n[b],d=c.attribute.value,e=c.getValue(),a(d,e)||(f[b]=e)}),g&&(i=d.viewmodel.depsMap["default"][e]))for(j=i.length;j--;)c(d,i[j],f,g)}var d;return d=function(a,b){var d;return"string"!=typeof a&&(a="",b=!0),c(this,a,d={},b),this.set(d)}}(Fe,r),zg=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F){return{add:a,animate:b,detach:c,find:d,findAll:e,findAllComponents:f,findComponent:g,fire:h,get:i,insert:j,merge:k,observe:l,off:m,on:n,pop:o,push:p,render:q,reset:r,resetTemplate:s,reverse:t,set:u,shift:v,sort:w,splice:x,subtract:y,teardown:z,toggle:A,toHTML:B,unrender:C,unshift:D,update:E,updateModel:F}}(F,Xb,Yb,Zb,hc,ic,jc,kc,lc,nc,oc,uc,xc,yc,Cc,Dc,Fc,kg,lg,mg,ng,og,pg,qg,rg,sg,tg,ug,vg,wg,xg,yg),Ag=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b,c;return b=16*Math.random()|0,c="x"==a?b:3&b|8,c.toString(16)})},Bg=function(){var a=0;return function(){return"r-"+a++}}(),Cg=function(a,b,c,d){var e=a.root,f=a.keypath;return"sort"===c||"reverse"===c?void e.viewmodel.set(f,b):void(d&&e.viewmodel.splice(f,d))},Dg=function(a,b,c,d,e){var f,g,h,i=[],j=["pop","push","reverse","shift","sort","splice","unshift"];return j.forEach(function(f){var g=function(){var b,g,h,i,j;for(b=c(this,f,Array.prototype.slice.call(arguments)),g=d(this,b),h=Array.prototype[f].apply(this,arguments),this._ractive.setting=!0,j=this._ractive.wrappers.length;j--;)i=this._ractive.wrappers[j],a.start(i.root),e(i,this,f,g),a.end();return this._ractive.setting=!1,h};b(i,f,{value:g})}),f={},f.__proto__?(g=function(a){a.__proto__=i},h=function(a){a.__proto__=Array.prototype}):(g=function(a){var c,d;for(c=j.length;c--;)d=j[c],b(a,d,{value:i[d],configurable:!0})},h=function(a){var b;for(b=j.length;b--;)delete a[j[b]]}),g.unpatch=h,g}(v,C,zc,Ac,Cg),Eg=function(a,b,c){var d,e,f;return d={filter:function(a){return b(a)&&(!a._ractive||!a._ractive.setting)},wrap:function(a,b,c){return new e(a,b,c)}},e=function(b,d,e){this.root=b,this.value=d,this.keypath=e,d._ractive||(a(d,"_ractive",{value:{wrappers:[],instances:[],setting:!1},configurable:!0}),c(d)),d._ractive.instances[b._guid]||(d._ractive.instances[b._guid]=0,d._ractive.instances.push(b)),d._ractive.instances[b._guid]+=1,d._ractive.wrappers.push(this)},e.prototype={get:function(){return this.value},teardown:function(){var a,b,d,e,g;if(a=this.value,b=a._ractive,d=b.wrappers,e=b.instances,b.setting)return!1;if(g=d.indexOf(this),-1===g)throw new Error(f);if(d.splice(g,1),d.length){if(e[this.root._guid]-=1,!e[this.root._guid]){if(g=e.indexOf(this.root),-1===g)throw new Error(f);e.splice(g,1)}}else delete a._ractive,c.unpatch(this.value)}},f="Something went wrong in a rather interesting way",d}(C,g,Dg),Fg=function(a,b){var c,d;return a&&(c={filter:function(c,d,e){return a.filter(c,d,e)&&b.filter(c)},wrap:function(a,b,c){return new d(a,b,c)}},d=function(c,d,e){this.value=d,this.magic=!0,this.magicWrapper=a.wrap(c,d,e),this.arrayWrapper=b.wrap(c,d,e)},d.prototype={get:function(){return this.value},teardown:function(){this.arrayWrapper.teardown(),this.magicWrapper.teardown()},reset:function(a){return this.magicWrapper.reset(a)}}),c}(x,Eg),Gg=function(a,b,c,d){function e(a,b){var c,d={};if(!b)return a;b+=".";for(c in a)a.hasOwnProperty(c)&&(d[b+c]=a[c]);return d}function f(a){var b;return h[a]||(b=a?a+".":"",h[a]=function(c,d){var f;return"string"==typeof c?(f={},f[b+c]=d,f):"object"==typeof c?b?e(c,a):c:void 0}),h[a]}var g,h={};return g=function(e,g){var h,i,j,k,l=this.ractive;for(h=l.adapt.length,i=0;h>i;i+=1){if(j=l.adapt[i],"string"==typeof j){var m=a.registries.adaptors.find(l,j);if(!m)throw new Error('Missing adaptor "'+j+'"');j=l.adapt[i]=m}if(j.filter(g,e,l))return k=this.wrapped[e]=j.wrap(l,g,e,f(e)),k.value=g,g}return l.magic?d.filter(g,e,l)?this.wrapped[e]=d.wrap(l,g,e):c.filter(g,e,l)&&(this.wrapped[e]=c.wrap(l,g,e)):l.modifyArrays&&b.filter(g,e,l)&&(this.wrapped[e]=b.wrap(l,g,e)),g}}(Ub,Eg,x,Fg),Hg=function(a){var b,c,d,e,f=[""];for(b=a.length;b--;)for(c=a[b],d=c.split(".");d.length>1;)d.pop(),e=d.join("."),-1===f.indexOf(e)&&f.push(e);return f},Ig=function(){function a(a){var b,d,e,f,g,h="";if(!c[a]){for(e=[];h.length<a;)h+=1;for(b=parseInt(h,2),f=function(a){return"1"===a},g=0;b>=g;g+=1){for(d=g.toString(2);d.length<a;)d="0"+d;e[g]=Array.prototype.map.call(d,f)}c[a]=e}return c[a]}var b,c={};return b=function(b){var c,d,e,f;return c=b.split("."),d=a(c.length),e=function(a,b){return a?"*":c[b]},f=d.map(function(a){return a.map(e).join(".")})}}(),Jg=function(a){function b(b,e,f){var g;d(b,e),f||(g=a(e),g.forEach(function(a){c(b,a,e)}))}function c(a,b,e){var g,h,i;g=a.depsMap.patternObservers,h=g[b],h&&h.forEach(function(b){var g=f.exec(b)[0];i=e?e+"."+g:g,d(a,i),c(a,b,i)})}function d(a,b){a.patternObservers.forEach(function(a){a.regex.test(b)&&a.update(b)})}var e,f=/[^\.]+$/;return e=b}(Ig),Kg=function(a,b){function c(a){a.update()}function d(a,b,c){var d,e;(d=f(a,b,c))&&(e=a.get(b),d.forEach(function(a){return a.setValue(e)}))}function e(a,b,c){function d(a){a.forEach(e),a.forEach(g)}function e(b){var d=f(a,b,c);d&&i.push({keypath:b,deps:d})}function g(b){var e;(e=a.depsMap[c][b])&&d(e)}function h(b){var c=a.get(b.keypath);b.deps.forEach(function(a){return a.setValue(c)})}var i=[];d(b),i.forEach(h)}function f(a,b,c){var d=a.deps[c];return d?d[b]:null}function g(a,b){b.forEach(function(b){-1===a.indexOf(b)&&a.push(b)})}var h,i=["observers","default"];return h=function(){var f,h,j,k,l,m=this,n=this,o=[],p={};if(this.changes.length){k=function(a){var b;(b=n.deps.computed[a])&&g(j,b)},l=function(a){var b;k(a),(b=n.depsMap.computed[a])&&b.forEach(l)};do f=this.changes,g(o,f),this.changes=[],j=[],h=a(f),h.forEach(k),f.forEach(l),j.forEach(c);while(this.changes.length);return h=a(o),this.patternObservers.length&&(h.forEach(function(a){return b(m,a,!0)}),o.forEach(function(a){return b(m,a)})),i.forEach(function(a){m.deps[a]&&(h.forEach(function(b){return d(m,b,a)}),e(m,o,a))}),o.forEach(function(a){p[a]=m.get(a)}),this.implicitChanges={},p}}}(Hg,Jg),Lg=function(){this.capturing=!0,this.captured=[]},Mg=function(a,b){var c,d,e;if(b||(d=this.wrapped[a])&&d.teardown()!==!1&&(this.wrapped[a]=null),(e=this.computations[a])&&e.compute(),this.cache[a]=void 0,c=this.cacheMap[a])for(;c.length;)this.clearCache(c.pop())},Ng={FAILED_LOOKUP:!0},Og=function(a,b){var c={},d=function(a,d){this.viewmodel=a,this.root=a.ractive,this.ref=d,this.parentFragment=c,a.unresolvedImplicitDependencies[d]=!0,a.unresolvedImplicitDependencies.push(this),b.addUnresolved(this)};return d.prototype={resolve:function(){this.viewmodel.mark(this.ref),this.viewmodel.unresolvedImplicitDependencies[this.ref]=!1,a(this.viewmodel.unresolvedImplicitDependencies,this)},teardown:function(){b.removeUnresolved(this)}},d}(n,v),Pg=function(a,b){function c(b,c){var d,e,f,g,h,i,j;return d=c.split("."),e=d.pop(),f=d.join("."),g=b.get(f),(j=b.wrapped[f])&&(g=j.get()),null!==g&&void 0!==g?((h=b.cacheMap[f])?-1===h.indexOf(c)&&h.push(c):b.cacheMap[f]=[c],"object"!=typeof g||e in g?(i=g[e],b.adapt(c,i,!1),b.cache[c]=i,i):b.cache[c]=a):void 0}var d,e={};return d=function(d){var f=arguments[1];void 0===f&&(f=e);var g,h,i,j,k=this.ractive,l=this.cache;return void 0===l[d]?((h=this.computations[d])?g=h.value:(i=this.wrapped[d])?g=i.value:d?g=(j=this.evaluators[d])?j.value:c(this,d):(this.adapt("",k.data),g=k.data),l[d]=g):g=l[d],f.evaluateWrapped&&(i=this.wrapped[d])&&(g=i.get()),f.capture&&this.capturing&&-1===this.captured.indexOf(d)&&(this.captured.push(d),g===a&&this.unresolvedImplicitDependencies[d]!==!0&&new b(this,d)),g===a?void 0:g}}(Ng,Og),Qg=function(a,b){b&&(this.implicitChanges[a]=!0),-1===this.changes.indexOf(a)&&(this.changes.push(a),this.clearCache(a))},Rg=function(a,b){var c,d,e,f;return c={},d=0,e=a.map(function(a,e){var g,h,i;h=d,i=b.length;do{if(g=b.indexOf(a,h),-1===g)return f=!0,-1;h=g+1}while(c[g]&&i>h);return g===d&&(d+=1),g!==e&&(f=!0),c[g]=!0,g}),e.unchanged=!f,e},Sg=function(a,b,c){function d(b){return"function"==typeof b.merge&&(!b.subtype||b.subtype===a.SECTION_EACH)}function e(a){return JSON.stringify(a)}function f(a){if(a===!0)return e;if("string"==typeof a)return h[a]||(h[a]=function(b){return b[a]}),h[a];if("function"==typeof a)return a;throw new Error("The `compare` option must be a function, or a string representing an identifying field (or `true` to use JSON.stringify)")}var g,h={};return g=function(a,e,g,h){var i,j,k,l,m,n=this;if(this.mark(a),h&&h.compare){k=f(h.compare);try{i=e.map(k),j=g.map(k)}catch(o){if(this.debug)throw o;b("Merge operation: comparison failed. Falling back to identity checking"),i=e,j=g}}else i=e,j=g;l=c(i,j),l.forEach(function(b,c){-1===b&&n.mark(a+"."+c)}),this.set(a,g,!0),(m=this.deps["default"][a])&&m.filter(d).forEach(function(a){return a.merge(l)}),e.length!==g.length&&this.mark(a+".length",!0)}}(R,L,Rg),Tg=function(){function a(a,b,c){var d,e,f,g;for(d=b.split(".");d.length;)d.pop(),e=d.join("."),f=a.depsMap[c]||(a.depsMap[c]={}),g=f[e]||(f[e]=[]),void 0===g[b]&&(g[b]=0,g.push(b)),g[b]+=1,b=e}var b;return b=function(b,c){var d=arguments[2];void 0===d&&(d="default");var e,f,g;c.isStatic||(e=this.deps[d]||(this.deps[d]={}),f=e[b]||(e[b]=[]),f.push(c),b&&((g=this.evaluators[b])&&(g.dependants||g.wake(),g.dependants+=1),a(this,b,d)))}}(),Ug=function(){return this.capturing=!1,this.captured},Vg=function(a,b){return function(c,d,e){var f,g,h,i,j,k,l,m;j=this.computations[c],j&&!j.setting&&(j.set(d),d=j.get()),a(this.cache[c],d)||(k=this.wrapped[c],l=this.evaluators[c],k&&k.reset&&(m=k.reset(d)!==!1,m&&(d=k.get())),l&&(l.value=d),j||l||m||(f=c.split("."),g=f.pop(),h=f.join("."),k=this.wrapped[h],k&&k.set?k.set(g,d):(i=k?k.get():this.get(h),i||(i=b(g),this.set(h,i,!0)),i[g]=d)),e?this.clearCache(c):this.mark(c))}}(r,w),Wg=function(a){function b(b){return b.type===a.SECTION&&(!b.subtype||b.subtype===a.SECTION_EACH)&&b.rendered}var c;return c=function(a,c){var d,e,f=this;for(d=c.rangeStart;d<c.rangeEnd;d+=1)f.mark(a+"."+d);c.balance&&f.mark(a+".length",!0),(e=f.deps["default"][a])&&e.filter(b).forEach(function(a){return a.splice(c)})}}(R),Xg=function(){var a,b=this;for(Object.keys(this.cache).forEach(function(a){return b.clearCache(a)});a=this.unresolvedImplicitDependencies.pop();)a.teardown()},Yg=function(){function a(a,b,c){var d,e,f,g;for(d=b.split(".");d.length;)d.pop(),e=d.join("."),f=a.depsMap[c],g=f[e],g[b]-=1,g[b]||(g.splice(g.indexOf(b),1),g[b]=void 0),b=e}var b;return b=function(b,c){var d=arguments[2];void 0===d&&(d="default");var e,f,g;if(!c.isStatic){if(e=this.deps[d][b],f=e.indexOf(c),-1===f)throw new Error("Attempted to remove a dependant that was no longer registered! This should not happen. If you are seeing this bug in development please raise an issue at https://github.com/RactiveJS/Ractive/issues - thanks");e.splice(f,1),b&&((g=this.evaluators[b])&&(g.dependants-=1,g.dependants||g.sleep()),a(this,b,d))}}}(),Zg=function(){function a(a){var b="var __ractive=this;return("+a.replace(c,function(a,b){return'__ractive.get("'+b+'")'})+")";return new Function(b)}var b,c=/\$\{([^\}]+)\}/g;return b=function(b){return"function"==typeof b?{get:b}:"string"==typeof b?{get:a(b)}:("object"==typeof b&&"string"==typeof b.get&&(b={get:a(b.get),set:b.set}),b)}}(),$g=function(a,b,c){var d=function(a,b,c){var d;this.ractive=a,this.viewmodel=a.viewmodel,this.key=b,this.getter=c.get,this.setter=c.set,this.dependencies=[],(d=a.viewmodel.get(b))&&this.set(d),this.update()};return d.prototype={get:function(){return this.compute(),this.value},set:function(a){if(this.setting)return void(this.value=a);if(!this.setter)throw new Error("Computed properties without setters are read-only. (This may change in a future version of Ractive!)");this.setter.call(this.ractive,a)},compute:function(){var b,d,e;b=this.ractive,b.viewmodel.capture();try{this.value=this.getter.call(b)}catch(f){a.warn({debug:b.debug,message:"failedComputation",args:{key:this.key,err:f.message||f}}),d=!0}return e=b.viewmodel.release(),c(this,this.dependencies,e),d?!1:!0},update:function(){var a=this.value;this.compute()&&!b(this.value,a)&&this.ractive.viewmodel.mark(this.key)}},d}(Zc,r,_c),_g=function(a,b){return function(c,d){var e,f;for(e in d)f=a(d[e]),c.viewmodel.computations[e]=new b(c,e,f)}}(Zg,$g),ah=function(){function a(a){return"string"==typeof a&&(a=[a]),a}var b={lookup:function(a,b){var c,d=a.adapt;if(!d||!d.length)return d;if(b&&Object.keys(b).length&&(c=d.length))for(;c--;){var e=d[c];"string"==typeof e&&(d[c]=b[e]||e)}return d},combine:function(b,c){return b=a(b),c=a(c),b&&b.length?c&&c.length?(b.forEach(function(a){-1===c.indexOf(a)&&c.push(a)}),c):b.slice():c}};return b}(),bh=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var q;try{Object.defineProperty({},"test",{value:0})}catch(r){q=!0}var s=function(b){this.ractive=b,s.extend(b.constructor,b),this.cache={},this.cacheMap=a(null),this.deps={computed:{},"default":{}},this.depsMap={computed:{},"default":{}},this.patternObservers=[],this.wrapped=a(null),this.evaluators=a(null),this.computations=a(null),this.captured=null,this.unresolvedImplicitDependencies=[],this.changes=[],this.implicitChanges={}};return s.extend=function(a,b){if(b.magic&&q)throw new Error("Getters and setters (magic mode) are not supported in this browser");b.adapt=p.combine(a.prototype.adapt,b.adapt)||[],b.adapt=p.lookup(b,b.adaptors)},s.prototype={adapt:b,applyChanges:c,capture:d,clearCache:e,get:f,mark:g,merge:h,register:i,release:j,set:k,splice:l,teardown:m,unregister:n,compute:function(){o(this.ractive,this.ractive.computed)}},s}(S,Gg,Kg,Lg,Mg,Pg,Qg,Sg,Tg,Ug,Vg,Wg,Xg,Yg,_g,ah),ch=function(a,b,c,d,e,f){function g(a){var b;if(b=c(a.el)){if(b&&!a.append){if(b.__ractive_instances__)try{b.__ractive_instances__.splice(0,b.__ractive_instances__.length).forEach(function(a){return a.teardown()})}catch(d){}b.innerHTML=""}a.render(b,a.append)}}function h(a,c){a._guid=d(),a._subs=b(null),a._config={},a._twowayBindings=b(null),a._animations=[],a.nodes={},a._liveQueries=[],a._liveComponentQueries=[],c._parent&&c._component&&(a._parent=c._parent,a.component=c._component,c._component.instance=a)}var i;return i=function(b){var c=arguments[1];void 0===c&&(c={}),h(b,c),a.init(b.constructor,b,c),b.viewmodel=new e(b),b.viewmodel.compute(),b.template&&(b.fragment=new f({template:b.template,root:b,owner:b})),g(b)}}(Ub,S,mc,Bg,bh,jg),dh=function(a){return function(b,c,d){b.beforeInit&&b.beforeInit(d),a(b,d)}}(ch),eh=function(a,b,c,d){function e(b,c,d){for(var e in d)if(!(e in j)&&d.hasOwnProperty(e)){var f=d[e];"function"==typeof f&&(f=a(b,e,f)),c[e]=f}}function f(a){if(!(a.prototype instanceof i))return a;for(var c={};a;)l.forEach(function(b){g(b.useDefaults?a.prototype:a,c,b.name)}),Object.keys(a.prototype).forEach(function(d){if("computed"!==d){var e=a.prototype[d];if(d in c){if("function"==typeof c[d]&&"function"==typeof e&&c[d]._method){var f,g=e._method;g&&(e=e._method),f=b(c[d]._method,e),g&&(f._method=f),c[d]=f}}else c[d]=e._method?e._method:e}}),a=a._parent!==i?a._parent:!1;return c}function g(a,b,c){var d,e=Object.keys(a[c]);e.length&&((d=b[c])||(d=b[c]={}),e.filter(function(a){return!(a in d)}).forEach(function(b){return d[b]=a[c][b]}))}var h,i,j={_parent:!0,_component:!0},k={toPrototype:e,toOptions:f},l=c.registries;return c.keys.forEach(function(a){return j[a]=!0}),d.push(function(){i=d.Ractive}),h=k}(Sb,O,Ub,e),fh=function(a,b,c,d,e,f,g){return function h(){var i=arguments[0];void 0===i&&(i={});var j,k,l,m=this;return i=g.toOptions(i),j=function(a){e(this,j,a)},k=a(m.prototype),k.constructor=j,l={_guid:{value:c()},defaults:{value:k},extend:{value:h,writable:!0,configurable:!0},_parent:{value:m}},b(j,l),d.extend(m,k,i),f.extend(m,k),g.toPrototype(m.prototype,k,i),j.prototype=k,j}}(S,D,Ag,Ub,dh,bh,eh),gh=function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n,o;for(n=function(a){l(this,a)},o={extend:{value:j},parse:{value:k},Promise:{value:h},svg:{value:d},magic:{value:e},VERSION:{value:"0.5.8"},adaptors:{writable:!0,value:{}},components:{writable:!0,value:{}},decorators:{writable:!0,value:{}},easing:{writable:!0,value:b},events:{writable:!0,value:{}},interpolators:{writable:!0,value:c},partials:{writable:!0,value:{}},transitions:{writable:!0,value:{}}},f(n,o),n.prototype=i(g,a),n.prototype.constructor=n,n.defaults=n.prototype,m.Ractive=n;m.length;)m.pop()();var p="function";if(typeof Date.now!==p||typeof String.prototype.trim!==p||typeof Object.keys!==p||typeof Array.prototype.indexOf!==p||typeof Array.prototype.forEach!==p||typeof Array.prototype.map!==p||typeof Array.prototype.filter!==p||"undefined"!=typeof window&&typeof window.addEventListener!==p)throw new Error("It looks like you're attempting to use Ractive.js in an older browser. You'll need to use one of the 'legacy builds' in order to continue - see http://docs.ractivejs.org/latest/legacy-builds for more information.");return n}(c,d,j,k,y,D,zg,o,ve,fh,Kb,ch,e);"undefined"!=typeof module&&module.exports?module.exports=gh:"function"==typeof define&&define.amd&&define(function(){return gh}),a.Ractive=gh,gh.noConflict=function(){return a.Ractive=b,gh}}("undefined"!=typeof window?window:this);
skin/adminhtml/default/default/unbxd/templates/analytics.html ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="col-md-60 col-sm-60 col-xs-60 pad-0 magento-inner-block pad-top-20 border-left-color pad-btm-10p">
2
+
3
+ {{^_unbxdObject.step2}}
4
+ <div class="row mar-0">
5
+ <div class="col-md-60 magento-head pad-0 mar-btm-30" style="color: red;font-size: 20px;">Please map catlog and upload data first
6
+ </div>
7
+ </div>
8
+ <div on-click="disabledClick" class="unbxd-cover">
9
+ </div>
10
+ {{/_unbxdObject.step2}}
11
+
12
+ <div on-click="disabledClick" class="{{^_unbxdObject.step2}} unbxd-disabler {{/_unbxdObject.step2}}">
13
+
14
+ <div class="row mar-0">
15
+ <div class="col-md-60 magento-head pad-0 mar-btm-10">
16
+ Event Tracking
17
+ </div>
18
+ </div>
19
+ <div class="row mar-0">
20
+ <div class="col-md-60 magento-text pad-0 mar-btm-30">
21
+ Unbxd Recommendations automatically tries to add event handling tags to important visitor events like Product Views, Additions to Cart and Orders.
22
+ </div>
23
+ </div>
24
+ <div class="row mar-0">
25
+ <div class="col-md-60 magento-text pad-0">
26
+ These are required for
27
+ </div>
28
+ </div>
29
+ <div class="row mar-0">
30
+ <div class="col-md-60 magento-text pad-0">
31
+ a) Reporting
32
+ </div>
33
+ </div>
34
+ <div class="row mar-0">
35
+ <div class="col-md-60 magento-text pad-0 mar-btm-30">
36
+ b) Tracking User-behavior for providing recommendations
37
+ </div>
38
+ </div>
39
+ <div class="row mar-0 unbxd-center-div pad-btm-20">
40
+ See below to check if the analytics integration is successful. Troubleshoot <a class="blue-link-help" href="http://unbxd.com/docs/product-recommendations/platforms/magento/">here</a>
41
+ </div>
42
+ <div class="row mar-0">
43
+ <div class="col-sm-60 col-xs-60 pad-0 fixed-width-800">
44
+ <div class="row">
45
+ <div class="col-md-60 col-sm-60 col-xs-60 mar-btm-30">
46
+
47
+ <div class="row mar-0">
48
+ <div class="col-md-17 col-sm-60 pad-0 magento-analytics-block
49
+ {{^productClick}} magento-analytics-block1 {{/productClick}} mar-rgt-52">
50
+ <div class="row">
51
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-analytics-head mar-btm-20">
52
+ PRODUCT VIEWS
53
+ </div>
54
+ </div>
55
+ <div class="row">
56
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-analytics-tick
57
+ {{^productClick}} magento-analytics-cross{{/productClick}} mar-btm-20">
58
+ &nbsp;
59
+ </div>
60
+ </div>
61
+ <div class="row">
62
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-analytics-text mar-top-20 mar-btm-10">
63
+ {{#if productClick}}
64
+ Captured
65
+ {{else}}
66
+ Waiting for
67
+ {{/if}}
68
+ </div>
69
+ </div>
70
+ <div class="row">
71
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-analytics-text">
72
+ Product Click
73
+ </div>
74
+ </div>
75
+
76
+ </div>
77
+
78
+ <div class="col-md-17 col-sm-60 pad-0 magento-analytics-block
79
+ {{^addToCartClick}}magento-analytics-block1{{/addToCartClick}} mar-rgt-52">
80
+ <div class="row">
81
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-analytics-head mar-btm-20">
82
+ ADD TO CART
83
+ </div>
84
+ </div>
85
+ <div class="row">
86
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-analytics-tick {{^addToCartClick}}magento-analytics-cross{{/addToCartClick}} mar-btm-20">
87
+ &nbsp;
88
+ </div>
89
+ </div>
90
+ <div class="row">
91
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-analytics-text mar-top-20 mar-btm-10">
92
+ {{#if addToCartClick}}
93
+ Captured
94
+ {{else}}
95
+ Waiting for
96
+ {{/if}}
97
+ </div>
98
+ </div>
99
+ <div class="row">
100
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-analytics-text">
101
+ Add to Cart
102
+ </div>
103
+ </div>
104
+
105
+ </div>
106
+ <div class="col-md-17 col-sm-60 pad-0 magento-analytics-block
107
+ {{^productBuysClick }} magento-analytics-block1 {{/productBuysClick}} mar-rgt-15">
108
+ <div class="row">
109
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-analytics-head mar-btm-20">
110
+ PRODUCT BUYS
111
+ </div>
112
+ </div>
113
+ <div class="row">
114
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-analytics-tick
115
+ {{^productBuysClick}} magento-analytics-cross{{/productBuysClick}} mar-btm-20">
116
+ &nbsp;
117
+ </div>
118
+ </div>
119
+ <div class="row">
120
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-analytics-text mar-top-20 mar-btm-10">
121
+ {{#if productBuysClick}}
122
+ Captured
123
+ {{else}}
124
+ Waiting for
125
+ {{/if}}
126
+ </div>
127
+ </div>
128
+ <div class="row">
129
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-analytics-text">
130
+ an Order
131
+ </div>
132
+ </div>
133
+ </div>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ </div>
138
+ </div>
139
+
140
+ <div class="col-md-60 magento-text pad-0 mar-btm-30" >
141
+ The above images indicate the events Unbxd Recommendations is able to track.
142
+ If the events are not being tracked it could be because your magento templates are customized. In such a case, follow the documentation <a class="blue-link-help" href="http://unbxd.com/docs/product-recommendations/platforms/magento/">here</a>, to manually add tags to track these events.
143
+ </div>
144
+
145
+
146
+
147
+ </div>
148
+ </div>
skin/adminhtml/default/default/unbxd/templates/catalog.html ADDED
@@ -0,0 +1,297 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="col-md-60 col-sm-60 col-xs-60 pad-0 magento-inner-block border-left-color pad-btm-10p">
2
+
3
+ {{^_unbxdObject.step1}}
4
+ <div class="row mar-0">
5
+ <div class="col-md-60 magento-head pad-0 mar-btm-30" style="color: red;font-size: 20px;">Please authenticate unbxd module
6
+ </div>
7
+ </div>
8
+ <div on-click="disabledClick" class="unbxd-cover">
9
+ </div>
10
+ {{/_unbxdObject.step1}}
11
+
12
+ <div class="{{^_unbxdObject.step1}} unbxd-disabler {{/_unbxdObject.step1}}">
13
+ <div class="row mar-0">
14
+ <div class="col-md-60 magento-head pad-0 mar-btm-30">
15
+ Map Catalog Attributes
16
+ </div>
17
+ </div>
18
+ <div class="row mar-0">
19
+ <div class="col-md-60 magento-text pad-0 mar-btm-10">
20
+ Unbxd needs your catalog data in order to show accurate recommendations.
21
+ </div>
22
+ </div>
23
+ <div class="row mar-0">
24
+ <div class="col-md-60 magento-text pad-0 mar-btm-30">
25
+ Help the Unbxd Recommendation Engine make sense of this data by mapping your catalog attributes to the <br>
26
+ respective Unbxd attributes.
27
+ </div>
28
+ </div>
29
+ <div class="row mar-0">
30
+ <div class="col-md-60 col-sm-60 col-xs-60 pad-0">
31
+ <div class="row mar-0">
32
+ <div class="col-md-60 col-sm-60 pad-0 mar-btm-20 ">
33
+ <div class="table table-magento table-magento1 unbxd-table width-62">
34
+ <div class="unbxd-thead">
35
+ <div class="unbxd-tr">
36
+ <div class="magento-tooltip unbxd-th pull-left width-45" data-title="UNBXD Attribute" data-content=" Unbxd attributes are fields which are identified by the Unbxd Recommendation Engine and are required for the recommendation algorithms and reporting" >
37
+ UNBXD Attribute
38
+ </div>
39
+ <div class="magento-tooltip unbxd-th pull-right width-55 border-right-rad"
40
+ data-title="{{_unbxdObject.siteName}} Catalog Fields" data-content="These are fields from {{_unbxdObject.siteName}}'s catalog which need to be mapped to the relevant Unbxd attribute. Skip the mapping for an Unbxd attribute if it cannot be mapped to a particular field in the {{_unbxdObject.siteName}} catalog" >
41
+ Magento Attribute
42
+ </div>
43
+ </div>
44
+ </div>
45
+
46
+ <div >
47
+ {{#mappedAttributes}}
48
+ <div class="tr-row">
49
+ <div data-content="{{tooltip}}" data-title="{{featured_field}}" class=" td-left width-45 _tooltip bord-right" >
50
+ {{featured_field}}
51
+ </div>
52
+
53
+ {{#if enableEdit}}
54
+ <div class="td-right width-55">
55
+ <div class="btn-group width-100" >
56
+ <select disabled=disabled decorator='chosen'
57
+ value={{field_name}} name="unbxd-select" id="">
58
+ {{#magentoFields}}
59
+ <option class={{disabled}} disabled={{disabled}} value="{{value}}">
60
+ {{value}}
61
+ </option>
62
+ {{/magentoFields}}
63
+ </select>
64
+ </div>
65
+ </div>
66
+ {{else}}
67
+ <div class=" td-left width-55 _tooltip chosen-padding" >
68
+ {{field_name}}
69
+ </div>
70
+ {{/if}}
71
+ </div>
72
+ {{/mappedAttributes}}
73
+ </div>
74
+ </div>
75
+
76
+ </div>
77
+ </div>
78
+
79
+ <div class="row mar-0 ">
80
+ <div class="width-62 pull-left">
81
+ {{^enableEdit}}
82
+ <div class="pull-right pad-left-10">
83
+ <div on-click="enableEdit" class="button-edit-magento width-140 clickable-btn">
84
+ Edit attribute
85
+ </div>
86
+ </div>
87
+ {{/enableEdit}}
88
+
89
+ {{#if enableEdit}}
90
+ <div class="pull-right {{saveMapping}} pad-left-10">
91
+ <div on-click="saveMapping" class="button-edit-magento button-save-magento width-140 clickable-btn">
92
+ Save attribute
93
+ </div>
94
+ </div>
95
+
96
+ <div class="pull-right pad-left-10">
97
+ <div on-click="disableEdit" class="button-edit-magento button-save-magento width-140 clickable-btn">
98
+ Cancel
99
+ </div>
100
+ </div>
101
+ {{/if}}
102
+ </div>
103
+
104
+ <div class="width-38 pull-left pad-top-5">
105
+ <div class="_unbxd-success">
106
+ {{successMsg}}
107
+ </div>
108
+ <div class="_unbxd-err">
109
+ {{errorMsg}}
110
+ </div>
111
+ </div>
112
+
113
+ </div>
114
+
115
+
116
+ <div class="row mar-0">
117
+ <div class="col-md-60 magento-head pad-0 mar-btm-30 float-left">
118
+ <div class="pull-left">Add Custom attributes</div>
119
+ </div>
120
+ </div>
121
+ <div class="row mar-0">
122
+ <div class="col-md-60 magento-text pad-0 mar-btm-20">
123
+ Certain fields like material, occasion, type etc. might be fields in
124
+ {{_unbxdObject.siteName}}'s catalog. These are not default Unbxd attributes. Provide information of the data type of these fields if these fields need to be displayed to in the recommendations to the site visitors.
125
+ </div>
126
+ </div>
127
+ <div class="row mar-0 pad-btm-20 add-attr">
128
+ <div on-click="showCustomAttribute" class="col-md-20 button-black-magento1 width-250 btn-add-attribute" >
129
+ <div class="clickable-btn" style="color: #fff !important;">
130
+ ADD ATTRIBUTE
131
+ </div>
132
+ </div>
133
+ </div>
134
+
135
+ <div class="custom-attributes">
136
+
137
+ <div>
138
+ <div class="width-80 pad-btm-20" >
139
+ <div class="tr-row">
140
+ <div class="magento-tooltip unbxd-th pull-left width-40" data-title="Custom attribute" data-content="Custom attributes are fields from the your product catalog which are, by default, not displayed in the Recommendation Widgets" >
141
+ Custom attribute
142
+ </div>
143
+ <div class=" unbxd-th pull-left width-40 border-right-rad" >
144
+ Data-type
145
+ </div>
146
+ <div class="pull-left width-20">
147
+ {{#if customAttributes.length === 0}}
148
+ <div on-click="newTodo" class="add-row clickable-btn pull-left">
149
+ </div>
150
+ {{/if}}
151
+ </div>
152
+ </div>
153
+ <div class="cudtom-attr-rows">
154
+ {{#each customAttributes:i}}
155
+ {{>item}}
156
+ {{/each}}
157
+ </div>
158
+ </div>
159
+
160
+
161
+ <div class="row mar-0 ">
162
+
163
+ <div class="width-64 pull-left">
164
+ <div class="pull-right pad-left-10">
165
+ <div on-click="saveCustomAttribute" class="button-edit-magento button-save-magento width-140 clickable-btn {{disableSaveCustomAttr}}" >
166
+ Save
167
+ </div>
168
+ </div>
169
+ </div>
170
+
171
+ <div class="width-36 pull-left pad-top-5">
172
+ <div class="_unbxd-success">
173
+ {{customAttrSucessMsg}}
174
+ </div>
175
+ <div class="_unbxd-err">
176
+ {{customAttrErrorMsg}}
177
+ </div>
178
+ </div>
179
+
180
+ </div>
181
+
182
+ <div class="row mar-0">
183
+ <div class="col-md-60 magento-text pad-0 mar-btm-20">
184
+ For a detailed explanation of data-types, click
185
+ <span on-click="showDataHelp" class="blue-link-help">here</span>
186
+ </div>
187
+ <div id="dataHelp" class="width-60" style="display:none" >
188
+ <div class="tr-row">
189
+ <div class="unbxd-th pull-left width-50 help-table-head unbxd-border" >
190
+ Data-type
191
+ </div>
192
+ <div class=" unbxd-th pull-left width-50 help-table-head unbxd-border border-right-rad" >
193
+ Description
194
+ </div>
195
+ </div>
196
+ <div id="unbxdHelpRows" class="cudtom-attr-rows">
197
+ <div class="tr-row" style="height:35px">
198
+ <div class="td-left width-50 custom-attributes-td magento-border-left pull-left" >
199
+ text
200
+ </div>
201
+ <div class="td-right width-50 custom-attributes-td magento-border-right pull-left">
202
+ Any string value
203
+ </div>
204
+ </div>
205
+ <div class="tr-row" style="height:35px">
206
+ <div class="td-left width-50 custom-attributes-td magento-border-left pull-left" >
207
+ decimal
208
+ </div>
209
+ <div class="td-right width-50 custom-attributes-td magento-border-right pull-left">
210
+ Any decimal
211
+ </div>
212
+ </div>
213
+ <div class="tr-row" style="height:35px">
214
+ <div class="td-left width-50 custom-attributes-td magento-border-left pull-left" >
215
+ number
216
+ </div>
217
+ <div class="td-right width-50 custom-attributes-td magento-border-right pull-left">
218
+ Any integer
219
+ </div>
220
+ </div>
221
+ <div class="tr-row" style="height:35px">
222
+ <div class="td-left width-50 custom-attributes-td magento-border-left pull-left" >
223
+ longText
224
+ </div>
225
+ <div class="td-right width-50 custom-attributes-td magento-border-right pull-left">
226
+ Any string value
227
+ </div>
228
+ </div>
229
+ <div class="tr-row" style="height:35px">
230
+ <div class="td-left width-50 custom-attributes-td magento-border-left pull-left" >
231
+ link
232
+ </div>
233
+ <div class="td-right width-50 custom-attributes-td magento-border-right pull-left">
234
+ Any URL
235
+ </div>
236
+ </div>
237
+ <div class="tr-row" style="height:35px">
238
+ <div class="td-left width-50 custom-attributes-td magento-border-left pull-left" >
239
+ date
240
+ </div>
241
+ <div class="td-right width-50 custom-attributes-td magento-border-right pull-left">
242
+ SO 8601 date (YYYY­MM­DDTHH:MM:SSZ)
243
+ </div>
244
+ </div>
245
+ <div class="tr-row" style="height:35px">
246
+ <div class="td-left width-50 custom-attributes-td magento-border-left pull-left" >
247
+ bool
248
+ </div>
249
+ <div class="td-right width-50 custom-attributes-td magento-border-right pull-left">
250
+ Can be “true” OR “false”
251
+ </div>
252
+ </div>
253
+ </div>
254
+ </div>
255
+ </div>
256
+ </div>
257
+ </div>
258
+
259
+ <div class="row mar-0 pad-top-10">
260
+ <div class="col-md-60 magento-head pad-0">
261
+ Sync the catalog data
262
+ </div>
263
+ </div>
264
+ <div class="row mar-0">
265
+ <div class="col-md-60 magento-text pad-0 mar-btm-10">
266
+ Sync your catalog data with the Unbxd Recommendation Engine once.
267
+ </div>
268
+ </div>
269
+ <div class="row mar-0 pad-top-30">
270
+ <div on-click="uploadData" class="col-md-20 button-black-magento1 width-250 {{#if disableButton}}disabled-btn{{/if}} " >
271
+ <div class="clickable-btn" style="color: #fff !important;">
272
+ UPLOAD CATALOG DATA
273
+ </div>
274
+ </div>
275
+ </div>
276
+
277
+ <!-- <div class="row mar-0 pad-10 background-success mar-top-10">
278
+ <div class="pull-left succes-div width-20">
279
+
280
+ </div>
281
+ <div class="magento-text width-80">
282
+ <div class="success-head">
283
+ Congratulations
284
+ </div>
285
+ {{_unbxdObject.siteName}}'s catalog has been successfully synced with Unbxd Recommendation Engine. Proceed to test for successful Analytics integration and widget integration.
286
+ </div>
287
+ </div> -->
288
+
289
+ <div style="padding-top: 9px;">
290
+ <div class="unbxd-error-msg">
291
+ {{dataErrorMsg}}
292
+ </div>
293
+ <div class="unbxd-success-msg">
294
+ {{dataSuccessMsg}}
295
+ </div>
296
+ </div>
297
+ </div>
skin/adminhtml/default/default/unbxd/templates/credentails.html ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+ <div class="row mar-0 border-left-color pad-btm-10p">
4
+ <div class="col-md-60 col-sm-60 pad-0">
5
+ <div class="row mar-0">
6
+ <div class="col-md-60 col-sm-60 col-xs-60 pad-0 magento-inner-block brd-btm-none">
7
+ <div class="row mar-0">
8
+ <div class="col-md-60 magento-head pad-0 mar-btm-20">
9
+ Authenticate the Unbxd Module
10
+ </div>
11
+ </div>
12
+ <div class="row mar-0">
13
+ <div class="col-md-60 magento-text text1 pad-0">
14
+ You will need an Unbxd Account in order to authenticate the Unbxd module
15
+ </div>
16
+ </div>
17
+ <div class="row mar-0">
18
+ <div class="col-md-60 magento-text text1 pad-0 mar-btm-70">
19
+ Create an account here <a href="//dashboard.unbxd.com/recommendations/#/register" target="_blank" style="color:#45b5c1;"> UNBXD Recommender </a>
20
+ </div>
21
+ </div>
22
+
23
+ </div>
24
+ </div>
25
+
26
+ <div class="row mar-0">
27
+ <div class="col-md-60 col-sm-60 col-xs-60 pad-0 magento-landing-block mar-btm-20">
28
+
29
+ <div class="row mar-0">
30
+ <div class="col-md-23 pad-0">
31
+ <div class="row">
32
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-label mar-btm-7">
33
+ Your Site Key
34
+ </div>
35
+ </div>
36
+ <div class="row">
37
+ <div class="col-md-48 col-sm-20 col-xs-60">
38
+ <input type="{{#if step1}}password{{else}}text{{/if}}" class="magento-input" placeholder="Eg: AHS234dhbcskdj23jsd" value={{site_key}}>
39
+ </div>
40
+ <div class="col-md-10 col-sm-20 col-xs-60 clickable-btn magento-tooltip box-35"
41
+ data-title="Site Key" data-content="Receive the Site Key in a mail or find it in the Info Section of the Unbxd Dashboard by providing your Site URL after creating an Account on Unbxd Dashboard" data-container="#innerContainr" >
42
+
43
+ </div>
44
+ </div>
45
+ </div>
46
+ <div class="col-md-23 pad-0">
47
+ <div class="row">
48
+ <div class="col-md-60 col-sm-60 col-xs-60 magento-label mar-btm-7">
49
+ Secret Key
50
+ </div>
51
+ </div>
52
+ <div class="row">
53
+ <div class="col-md-48 col-sm-20 col-xs-60">
54
+ <input type="{{#if step1}}password{{else}}text{{/if}}" class="magento-input" placeholder="Eg: AHS234dhbcskdj23jsd" value={{secret_key}} >
55
+ </div>
56
+ <div class="col-md-10 col-sm-20 col-xs-60 clickable-btn magento-tooltip box-35"
57
+ data-title="Secret Key" data-content="Receive the Secret Key in a mail or find it in the Accounts Section of the Unbxd Dashboard by providing your Site URL after creating an Account on Unbxd Dashboard" data-container="#innerContainr" >
58
+
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </div>
63
+
64
+ </div>
65
+ </div>
66
+ <div class="row mar-0">
67
+
68
+ <div on-click="authenticate" class="col-md-20
69
+ button-black-magento
70
+ {{#if btnDisabled}}disabled-btn{{/if}}
71
+ {{#if step1}}disabled-btn{{/if}}
72
+ width-190 clickable-btn unbxd-mar-left-30 unbxd-mar-btm-20" style="margin:0px auto;float:none;">
73
+
74
+ <div style="color: #fff !important;">
75
+ AUTHENTICATE
76
+ </div>
77
+ </div>
78
+ <div class="unbxd-error-msg unbxd-center-div " style="margin-left: 14% !important;">
79
+ {{errorMsg}}
80
+ </div>
81
+ <div class="unbxd-success-msg unbxd-center-div" style="margin-left: 14% !important;">
82
+ {{successMsg}}
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </div>
87
+
88
+
89
+
skin/adminhtml/default/default/unbxd/templates/custom.html ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="tr-row">
2
+
3
+ <div class="td-left width-40 custom-attributes-td magento-border-left pull-left">
4
+ <div class="btn-group width-100" >
5
+ <select disabled={{disabled}} decorator='chosen' value={{field_name}} name="unbxd-customattr" id="">
6
+ {{#magentoFields}}
7
+ <option class={{disabled}} value="{{value}}">{{value}}</option>
8
+ {{/magentoFields}}
9
+ </select>
10
+ </div>
11
+ </div>
12
+
13
+ <div class="td-right width-40 custom-attributes-td magento-border-right pull-left">
14
+ <div class="btn-group width-100">
15
+ <select decorator='chosen' value="{{datatype}}"
16
+ on-change="changeOfUnbxdAttr" name="unbxd-customattr" id="">
17
+ {{#dataTypes}}
18
+ <option value="{{.}}">{{.}}</option>
19
+ {{/dataTypes}}
20
+ </select>
21
+ </div>
22
+ </div>
23
+
24
+ <div class="pull-left width-20">
25
+ <div on-click="removeRow" class="remove-row clickable-btn pull-left">
26
+ </div>
27
+ <div on-click="newTodo" class="add-row clickable-btn pull-left">
28
+ </div>
29
+ </div>
30
+
31
+ </div>
skin/adminhtml/default/default/unbxd/templates/widgets.html ADDED
@@ -0,0 +1,302 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="col-md-60 col-sm-60 col-xs-60 pad-0 magento-inner-block border-left-color pad-btm-10p">
2
+
3
+ <div class="row mar-0">
4
+ <div class="col-md-60 magento-head pad-0 mar-btm-20">
5
+ Install Recommendation Widget
6
+ </div>
7
+ </div>
8
+ <div class="row mar-0">
9
+ <div class="col-md-60 magento-text pad-0 ">
10
+ Recommendation widgets can be displayed on the Homepage, Category Page, Brand Pages, on the Cart and Product Detail Pages.
11
+ </div>
12
+ </div>
13
+ <div class="row mar-0">
14
+ <div class="col-md-60 magento-text pad-0 mar-btm-20">
15
+ Unbxd Recommendation widgets can be integrated in the below methods
16
+ </div>
17
+ </div>
18
+ <div class="row mar-0 magento-text">
19
+ <ul>
20
+ <li class="pad-btm-20">1.Through the CMS. See steps to locate templates using CMS
21
+ <span class="blue-link-help" on-click="showCMSHelp">here</span>
22
+ <div id="cmsHelp" class="row mar-0 pad-left-30 cms-help" style="display:none">
23
+ <ul>
24
+ <li>a) On the Magento store admin, navigate to CMS -> Pages</li>
25
+ <li>b) In the Manage pages section, select the page you want to paste the widget snippet on</li>
26
+ <li>c) On the left navigation, click the Content section for Page Information</li>
27
+ <li>d) Paste the snippet on the page that opens up to the right in the appropriate location</li>
28
+ </ul>
29
+ </div>
30
+ <div>
31
+ Refer to table(a) below which provides information of page type applicable for each snippet
32
+ </div>
33
+ </li>
34
+
35
+ <li>
36
+ 2) By pasting the snippets on the appropriate template files
37
+ <div class="row mar-0">
38
+ <div class="col-md-60 magento-text pad-0 cms-help" style="padding-bottom:0">
39
+ For eg – To display the <b>“Recently Viewed”</b> widget on the HomePage, place the below snippet in the app/design/frontend/{your_package}/{your_theme}/template/catalog/product/view.phtml file
40
+ </div>
41
+ </div>
42
+ <div class="row">
43
+ <div class="col-md-60 col-sm-60 col-xs-60">
44
+ <div class="script-block" style="border:0;padding-top:10px">
45
+ <pre class="prettyprint-dashboard"> &lt;div id=<span class="pun">"unbxd_recently_viewed"&gt;</span>&lt;/div&gt;
46
+ </pre>
47
+ </div>
48
+ </div>
49
+ </div>
50
+ </li>
51
+ </ul>
52
+ </div>
53
+ <div class="row mar-0">
54
+ <b>Table (a)</b>
55
+ </div>
56
+
57
+ <div class="row mar-0">
58
+ <div class="col-md-60 col-sm-60 col-xs-60 pad-0">
59
+ <div class="row mar-0">
60
+ <div class="col-md-60 col-sm-60 pad-0 mar-btm-30 ">
61
+ <div class="table table-magento hide-over-flow" style="width: 95%;">
62
+ <div style="width: 100%;height: 50px;">
63
+ <div class="unbxd-div-td unbxd-th width-30 unbxd-text-verticle-center "
64
+ data-title="Magento Attribute" data-content="Magento fields in your feed" >
65
+ Widget Type
66
+ </div>
67
+
68
+ <div class="unbxd-div-td unbxd-th width-40 unbxd-text-verticle-center" data-title="Magento Attribute" data-content="Magento fields in your feed" >
69
+ HTML Snippet
70
+ </div>
71
+
72
+ <div class="unbxd-div-td unbxd-th width-30 unbxd-text-verticle-center" data-title="Magento Attribute" data-content="Magento fields in your feed" >
73
+ Page Type
74
+ </div>
75
+ </div>
76
+
77
+
78
+ <div>
79
+ <div class="tr-row ">
80
+ <div class="unbxd-div-td pad-left-10 width-30 unbxd-text-center unbxd-caps">
81
+ Recently Viewed
82
+ </div>
83
+
84
+ <div class="unbxd-div-td pad-left-10 width-40 word-break unbxd-text-center">
85
+ &ltdiv id="unbxd_recently_viewed"&gt; &lt/div&gt;
86
+ </div>
87
+
88
+ <div class="unbxd-div-td pad-left-10 width-30 word-break unbxd-text-center">
89
+
90
+ Home Page, Product Page
91
+ </div>
92
+
93
+ </div>
94
+
95
+ <div class="tr-row ">
96
+ <div class="unbxd-div-td pad-left-10 width-30 child-right unbxd-text-center unbxd-caps">Recommended for you
97
+ </div>
98
+
99
+ <div class="unbxd-div-td pad-left-10 width-40 word-break child-right word-break unbxd-text-center">
100
+ &ltdiv id="unbxd_recommended_for_you"&gt; &lt/div&gt;
101
+ </div>
102
+
103
+ <div class="unbxd-div-td pad-left-10 width-30 word-break child-right word-break unbxd-text-center">
104
+ Home Page, Product Page
105
+ </div>
106
+
107
+ </div>
108
+
109
+ <div class="tr-row ">
110
+ <div class="unbxd-div-td pad-left-10 width-30 unbxd-text-center unbxd-caps">
111
+ More Like these
112
+ </div>
113
+
114
+ <div class="unbxd-div-td pad-left-10 width-40 word-break child-right word-break unbxd-text-center">
115
+ &ltdiv id="unbxd_more_like_these"&gt; &lt/div&gt;
116
+ </div>
117
+
118
+ <div class="unbxd-div-td pad-left-10 width-30 word-break unbxd-text-center">
119
+ Product Page
120
+ </div>
121
+
122
+ </div>
123
+ <div class="tr-row ">
124
+ <div class="unbxd-div-td pad-left-10 width-30 unbxd-text-center unbxd-caps">
125
+ Viewed also Viewed
126
+ </div>
127
+ <div class="unbxd-div-td pad-left-10 width-40 word-break child-right word-break unbxd-text-center">
128
+ &ltdiv id="unbxd_also_viewed"&gt; &lt/div&gt;
129
+ </div>
130
+ <div class="unbxd-div-td pad-left-10 width-30 word-break unbxd-text-center">
131
+ Product Page
132
+ </div>
133
+
134
+ </div>
135
+
136
+ <div class="tr-row ">
137
+ <div class="unbxd-div-td pad-left-10 width-30 unbxd-text-center unbxd-caps">Bought Also Bought
138
+ </div>
139
+
140
+ <div class="unbxd-div-td pad-left-10 width-40 word-break child-right word-break unbxd-text-center">
141
+ &ltdiv id="unbxd_also_bought"&gt; &lt/div&gt;
142
+ </div>
143
+
144
+ <div class="unbxd-div-td pad-left-10 width-30 word-break unbxd-text-center"> Product Page
145
+ </div>
146
+ </div>
147
+
148
+ <div class="tr-row ">
149
+ <div class="unbxd-div-td pad-left-10 width-30 unbxd-text-center unbxd-caps">Cart Recommendations
150
+ </div>
151
+
152
+ <div class="unbxd-div-td pad-left-10 width-40 word-break child-right word-break unbxd-text-center">
153
+ &ltdiv id="unbxd_cart_recommendations"&gt; &lt/div&gt;
154
+ </div>
155
+
156
+ <div class="unbxd-div-td pad-left-10 width-30 word-break unbxd-text-center"> Cart Page
157
+ </div>
158
+ </div>
159
+
160
+ <div class="tr-row ">
161
+ <div class="unbxd-div-td pad-left-10 width-30 unbxd-text-center unbxd-caps">
162
+ HomePage Top Sellers
163
+ </div>
164
+
165
+ <div class="unbxd-div-td pad-left-10 width-40 word-break child-right word-break unbxd-text-center">
166
+ &ltdiv id="unbxd_top_sellers"&gt; &lt/div&gt;
167
+ </div>
168
+
169
+ <div class="unbxd-div-td pad-left-10 width-30 word-break unbxd-text-center"> Product Pages
170
+ </div>
171
+
172
+ <div class="tr-row ">
173
+ <div class="unbxd-div-td pad-left-10 width-30 unbxd-text-center unbxd-caps">
174
+ Category Top Sellers
175
+ </div>
176
+
177
+ <div class="unbxd-div-td pad-left-10 width-40 word-break child-right word-break unbxd-text-center">
178
+ &ltdiv id="unbxd_category_top_sellers"&gt; &lt/div&gt;
179
+ </div>
180
+
181
+
182
+ <div class="unbxd-div-td pad-left-10 width-30 word-break unbxd-text-center"> Category/Sub-category Pages
183
+ </div>
184
+ </div>
185
+
186
+ <div class="tr-row ">
187
+ <div class="unbxd-div-td pad-left-10 width-30 unbxd-text-center unbxd-caps">
188
+ Brand Top Sellers
189
+ </div>
190
+
191
+ <div class="unbxd-div-td pad-left-10 width-40 word-break child-right word-break unbxd-text-center">
192
+ &ltdiv id="unbxd_brand_top_sellers"&gt; &lt/div&gt;
193
+ </div>
194
+
195
+ <div class="unbxd-div-td pad-left-10 width-30 word-break unbxd-text-center"> Brand Pages
196
+ </div>
197
+ </div>
198
+
199
+ <div class="tr-row ">
200
+ <div class="unbxd-div-td pad-left-10 width-30 unbxd-text-center unbxd-caps">
201
+ PDP Top Sellers
202
+ </div>
203
+
204
+ <div class="unbxd-div-td pad-left-10 width-40 word-break child-right word-break unbxd-text-center">
205
+ &ltdiv id="unbxd_pdp_top_sellers"&gt; &lt/div&gt;
206
+ </div>
207
+
208
+ <div class="unbxd-div-td pad-left-10 width-30 word-break unbxd-text-center"> Product Pages
209
+ </div>
210
+ </div>
211
+
212
+ </div>
213
+ </div>
214
+
215
+ </div>
216
+ </div>
217
+
218
+ <div class="row mar-0">
219
+ <b>Table (b)</b>
220
+ </div>
221
+
222
+ <div class="row mar-0">
223
+ <div class="col-md-60 col-sm-60 col-xs-60 pad-0">
224
+ <div class="row mar-0" style="width: 95%;">
225
+ <div class="col-md-60 col-sm-60 pad-0 mar-btm-30 ">
226
+ <div class="table table-magento hide-over-flow">
227
+ <div style="width: 100%;height: 50px;">
228
+ <div class="unbxd-div-td unbxd-th width-20 unbxd-text-verticle-center "
229
+ data-title="Magento Attribute" data-content="Magento fields in your feed" >
230
+ Page Type
231
+ </div>
232
+
233
+ <div class="unbxd-div-td unbxd-th width-80 unbxd-text-verticle-center" data-title="Magento Attribute" data-content="Magento fields in your feed" >
234
+ Template File
235
+ </div>
236
+ </div>
237
+
238
+
239
+ <div>
240
+ <div class="tr-row ">
241
+ <div class="unbxd-div-td pad-left-10 width-20 child-right unbxd-text-center">Home Page</div>
242
+
243
+ <div class="unbxd-div-td pad-left-10 width-80 word-break child-right word-break unbxd-text-center">
244
+ app/design/frontend/{your_package}/{your_theme}/template/sample/home.phtml
245
+ </div>
246
+
247
+ </div>
248
+ <div class="tr-row ">
249
+ <div class="unbxd-div-td pad-left-10 width-20 unbxd-text-center">
250
+ Product Page
251
+ </div>
252
+
253
+ <div class="unbxd-div-td pad-left-10 width-80 word-break unbxd-text-center">
254
+ app/design/frontend/{your_package}/{your_theme}/template/catalog/product/view.phtml
255
+ </div>
256
+ </div>
257
+
258
+ <div class="tr-row ">
259
+ <div class="unbxd-div-td pad-left-10 width-20 unbxd-text-center">
260
+ Cart Page
261
+ </div>
262
+
263
+ <div class="unbxd-div-td pad-left-10 width-80 word-break unbxd-text-center">
264
+ app/design/frontend/{your_package}/{your_theme}/template/checkout/cart.phtml
265
+ </div>
266
+ </div>
267
+
268
+ <div class="tr-row ">
269
+ <div class="unbxd-div-td pad-left-10 width-20 unbxd-text-center">
270
+ Category Listing Page
271
+ </div>
272
+
273
+ <div class="unbxd-div-td pad-left-10 width-80 word-break unbxd-text-center">
274
+ app/design/frontend/{your_package}/{your_theme}/template/catalog/product/list.phtml
275
+ </div>
276
+ </div>
277
+
278
+ <div class="tr-row ">
279
+ <div class="unbxd-div-td pad-left-10 width-20 unbxd-text-center">
280
+ Brand Pages
281
+ </div>
282
+
283
+ <div class="unbxd-div-td pad-left-10 width-80 word-break unbxd-text-center">
284
+ app/design/frontend/{your_package}/{your_theme}/template/catalog/product/list.phtml
285
+ </div>
286
+ </div>
287
+
288
+
289
+ </div>
290
+ </div>
291
+
292
+ </div>
293
+ </div>
294
+
295
+
296
+ <div class="row mar-0 magento-text">
297
+ In case you face any issues, please contact us at <span class="unbxd-blue-link">support@unbxd.com</span>
298
+ </div>
299
+
300
+ </div>
301
+ </div>
302
+ </div>