Jefferson_Clickview - Version 0.1.0

Version Notes

Technologies used to build the module: php, jquery, html, css, Bootstrap, modules compatible with Magento version 1.7 onward

Download this release

Release Info

Developer Jefferson Batista Porto
Extension Jefferson_Clickview
Version 0.1.0
Comparing to
See all releases


Version 0.1.0

Files changed (46) hide show
  1. app/code/community/Jefferson/Clickview/Block/Clickviewbestsellerbycategoryblock.php +110 -0
  2. app/code/community/Jefferson/Clickview/Block/Clickviewbestsellersblock.php +32 -0
  3. app/code/community/Jefferson/Clickview/Block/Clickviewblock.php +71 -0
  4. app/code/community/Jefferson/Clickview/Block/Clickviewmostviewedblock.php +65 -0
  5. app/code/community/Jefferson/Clickview/Block/Clickviewmostviewedbycategoryblock.php +104 -0
  6. app/code/community/Jefferson/Clickview/Block/Clickviewnewsproductsblock.php +241 -0
  7. app/code/community/Jefferson/Clickview/Block/Clickviewproductspromotionblock.php +212 -0
  8. app/code/community/Jefferson/Clickview/Block/Clickviewrecents.php +13 -0
  9. app/code/community/Jefferson/Clickview/Helper/Data.php +34 -0
  10. app/code/community/Jefferson/Clickview/Model/Clickviewbestsellerbycategorymodel.php +56 -0
  11. app/code/community/Jefferson/Clickview/Model/Clickviewbestsellersmodel.php +48 -0
  12. app/code/community/Jefferson/Clickview/Model/Clickviewmodel.php +139 -0
  13. app/code/community/Jefferson/Clickview/Model/Clickviewmostviewedbycategorymodel.php +59 -0
  14. app/code/community/Jefferson/Clickview/Model/Clickviewmostviewedmodel.php +48 -0
  15. app/code/community/Jefferson/Clickview/Model/Observer.php +49 -0
  16. app/code/community/Jefferson/Clickview/Model/System/Config/Source/Category.php +53 -0
  17. app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categoryallowed.php +62 -0
  18. app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categorybestsellerbycategory.php +62 -0
  19. app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categorynewsproducts.php +62 -0
  20. app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categorypromotionproducts.php +62 -0
  21. app/code/community/Jefferson/Clickview/Model/System/Config/Source/Mode.php +31 -0
  22. app/code/community/Jefferson/Clickview/controllers/IndexController.php +439 -0
  23. app/code/community/Jefferson/Clickview/etc/config.xml +299 -0
  24. app/code/community/Jefferson/Clickview/etc/system.xml +842 -0
  25. app/code/community/Jefferson/Clickview/sql/jefferson_clickview_setup/install-0.1.0.php +28 -0
  26. app/design/frontend/base/default/layout/jefferson/jefferson_clickview.xml +120 -0
  27. app/design/frontend/base/default/template/jefferson/clickview/bestseller.phtml +96 -0
  28. app/design/frontend/base/default/template/jefferson/clickview/bestsellerbycategory.phtml +75 -0
  29. app/design/frontend/base/default/template/jefferson/clickview/clickview_template.phtml +201 -0
  30. app/design/frontend/base/default/template/jefferson/clickview/mostviewed.phtml +92 -0
  31. app/design/frontend/base/default/template/jefferson/clickview/mostviewedbycategory.phtml +76 -0
  32. app/design/frontend/base/default/template/jefferson/clickview/newsproducts.phtml +86 -0
  33. app/design/frontend/base/default/template/jefferson/clickview/products_all_promotion.phtml +78 -0
  34. app/design/frontend/base/default/template/jefferson/clickview/products_discount.phtml +80 -0
  35. app/design/frontend/base/default/template/jefferson/clickview/products_new_by_category.phtml +77 -0
  36. app/design/frontend/base/default/template/jefferson/clickview/recents.phtml +101 -0
  37. app/design/frontend/base/default/template/jefferson/clickview/union.phtml +41 -0
  38. app/etc/modules/Jefferson_Clickview.xml +10 -0
  39. app/locale/pt_BR/jefferson_clickview.csv +31 -0
  40. package.xml +18 -0
  41. skin/frontend/base/default/jefferson/Clickview/css/bxslider.css +297 -0
  42. skin/frontend/base/default/jefferson/Clickview/css/style.css +31 -0
  43. skin/frontend/base/default/jefferson/Clickview/image/loading.gif +0 -0
  44. skin/frontend/base/default/jefferson/Clickview/js/bxslider.js +1348 -0
  45. skin/frontend/base/default/jefferson/Clickview/js/jquery.js +6 -0
  46. skin/frontend/base/default/jefferson/Clickview/js/script.js +40 -0
app/code/community/Jefferson/Clickview/Block/Clickviewbestsellerbycategoryblock.php ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * @category Jefferson
6
+ * @package Jefferson_Clickview
7
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
8
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
+ *
10
+ */
11
+
12
+ class Jefferson_Clickview_Block_Clickviewbestsellerbycategoryblock extends Mage_Catalog_Block_Product_List {
13
+
14
+ protected $cat = null;
15
+ protected $html = null;
16
+
17
+ /**
18
+ * Get category allowed bests seller
19
+ *
20
+ */
21
+ public function getCategoryBestSeller(){
22
+
23
+ $storeId = Mage::app()->getStore()->getId();
24
+
25
+ $catAllowed = self::getCategoryAllowed();
26
+
27
+ $catDefault = self::getCatDefault();
28
+
29
+ $this->cat = Mage::getSingleton('catalog/category')
30
+ ->getCollection()
31
+ ->addAttributeToSelect('*')
32
+ ->setStoreId($storeId)
33
+ ->addAttributeToFilter('entity_id', array('in' => $catAllowed));
34
+
35
+ foreach($this->cat as $i){
36
+ if($i->getId() == $catDefault){
37
+ $this->html .= "<option value='".$i->getId()."' selected='selected' >".$i->getName()."</option>";
38
+ }else{
39
+ $this->html .= "<option value='".$i->getId()."'>".$i->getName()."</option>";
40
+ }
41
+ }
42
+
43
+ return $this->html;
44
+ }
45
+
46
+
47
+ /**
48
+ * Get the products by category
49
+ *
50
+ */
51
+ public function getBestsellerProductsByCategory($num,$cat){
52
+ return Mage::getSingleton('clickview/clickviewbestsellerbycategorymodel')->getBestsellerProductsByCategory($num,$cat);
53
+ }
54
+
55
+ /**
56
+ * Get url controller
57
+ */
58
+ public function getUrlControllerBestSellerByCategory(){
59
+ echo Mage::getUrl()."clickview/index/getbestsellerbycategory";
60
+ }
61
+
62
+ /**
63
+ * Get the best selling function settings
64
+ *
65
+ */
66
+
67
+ public function getCategoryAllowed(){
68
+ $cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_allowed'));
69
+ return $cat;
70
+ }
71
+ public function getCatDefault(){
72
+ return $catDefault = Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_default');
73
+ return $catDefault;
74
+ }
75
+
76
+ public function getMinSlides(){
77
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_minslider'));
78
+ }
79
+
80
+ public function getMaxSlides(){
81
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_maxslider'));
82
+ }
83
+
84
+ public function getSlideWidth(){
85
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_slidewidth'));
86
+ }
87
+
88
+ public function getSlideMargin(){
89
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_slidewidth'));
90
+ }
91
+
92
+ public function getBestSellerByCatImgSize(){
93
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_img_size'));
94
+ }
95
+
96
+ public function getBestSellerByCatRow(){
97
+ return Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_click_number_rows');
98
+ }
99
+
100
+ public function getBestSellerByCatMode(){
101
+ return Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_slide_mode');
102
+ }
103
+
104
+ public function getBestSellerByCatEnabled(){
105
+ return Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_click_enabled');
106
+ }
107
+
108
+ }
109
+
110
+ ?>
app/code/community/Jefferson/Clickview/Block/Clickviewbestsellersblock.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * @category Jefferson
6
+ * @package Jefferson_Clickview
7
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
8
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
+ *
10
+ */
11
+
12
+ class Jefferson_Clickview_Block_Clickviewbestsellersblock extends Mage_Catalog_Block_Product_List {
13
+
14
+ public function getBestsellerProducts($num){
15
+ return Mage::getSingleton('clickview/clickviewbestsellersmodel')->getBestsellerProducts($num);
16
+ }
17
+
18
+ public function getClickCountRows(){
19
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_best_seller/clickview_best_seller_general/clickview_click_number_rows'));
20
+ }
21
+
22
+ public function getClickEnabled(){
23
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_best_seller/clickview_best_seller_general/clickview_click_enabled'));
24
+ }
25
+
26
+ public function getClickImgSize(){
27
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_best_seller/clickview_best_seller_general/clickview_img_size'));
28
+ }
29
+
30
+ }
31
+
32
+ ?>
app/code/community/Jefferson/Clickview/Block/Clickviewblock.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * @category Jefferson
6
+ * @package Jefferson_Clickview
7
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
8
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
+ *
10
+ */
11
+
12
+ class Jefferson_Clickview_Block_Clickviewblock extends Mage_Catalog_Block_Product_List {
13
+
14
+ /**
15
+ * Take the methods of model
16
+ *
17
+ * Jefferson_Clickview_Model_Observer
18
+ * Jefferson_Clickview_Model_Clickviewmodel
19
+ */
20
+
21
+ protected $obj = null;
22
+ protected $objObs = null;
23
+
24
+ public function _construct(){
25
+ $this->obj = Mage::getSingleton('clickview/clickviewmodel');
26
+ $this->objObs = Mage::getSingleton('clickview/observer');
27
+ }
28
+
29
+ public function getCookie(){
30
+ return $this->objObs->getCookie('IDPRODUCT');
31
+ }
32
+
33
+ public function getCategoryProducts($id){
34
+ return $this->obj->getCategoryProducts($id);
35
+ }
36
+
37
+ public function getCategoryName($category){
38
+ return $this->obj->getCategoryName($category);
39
+ }
40
+
41
+ public function getDataProducts($entity_id, $categoryCurrent, $limit){
42
+ return $this->obj->getDataProducts($entity_id, $categoryCurrent, $limit);
43
+ }
44
+
45
+ public function getDataProductCurrent($id){
46
+ return $this->obj->getDataProductCurrent($id);
47
+ }
48
+
49
+ public function getDataProductSingle($id){
50
+ return $this->obj->getDataProductSingle($id);
51
+ }
52
+
53
+ public function getDataProductsRelated($id){
54
+ return $this->obj->getDataProductsRelated($id);
55
+ }
56
+
57
+ public function getClickCountRows(){
58
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_options/clickview_general/clickview_click_number_rows'));
59
+ }
60
+
61
+ public function getClickEnabled(){
62
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_options/clickview_general/clickview_click_enabled'));
63
+ }
64
+
65
+ public function getClickImgSize(){
66
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_options/clickview_general/clickview_img_size'));
67
+ }
68
+
69
+ }
70
+
71
+ ?>
app/code/community/Jefferson/Clickview/Block/Clickviewmostviewedblock.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * @category Jefferson
6
+ * @package Jefferson_Clickview
7
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
8
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
+ *
10
+ */
11
+
12
+ class Jefferson_Clickview_Block_Clickviewmostviewedblock extends Mage_Catalog_Block_Product_Abstract {
13
+
14
+ public function getMostViewed($num){
15
+ $storeId = Mage::app()->getStore()->getId();
16
+
17
+ $today = time();
18
+ $last = $today - (60*60*24*30);
19
+
20
+ $fromDate = date("Y-m-d", $last);
21
+ $toDate = date("Y-m-d", $today);
22
+
23
+ $products = Mage::getResourceModel('reports/product_collection')
24
+ ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
25
+ ->setStoreId($storeId)
26
+ ->addStoreFilter($storeId)
27
+ ->addViewsCount($fromDate, $toDate)
28
+ ->setOrder('views_count', 'desc')
29
+ ->setPageSize($num);
30
+
31
+ $productFlatData = Mage::getStoreConfig('catalog/frontend/flat_catalog_product');
32
+ if($productFlatData == "1")
33
+ {
34
+ $products->getSelect()->joinLeft(
35
+ array('flat' => 'catalog_product_flat_'.$storeId),
36
+ "(e.entity_id = flat.entity_id ) ",
37
+ array(
38
+ 'flat.name AS name','flat.small_image AS small_image','flat.price AS price','flat.special_price as special_price','flat.special_from_date AS special_from_date','flat.special_to_date AS special_to_date'
39
+ )
40
+ );
41
+ }
42
+ Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
43
+ Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);
44
+
45
+ return $products;
46
+ }
47
+
48
+ public function getClickCountRows(){
49
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_most_views/clickview_most_views_general/clickview_click_number_rows'));
50
+ }
51
+
52
+ public function getClickEnabled(){
53
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_most_views/clickview_most_views_general/clickview_click_enabled'));
54
+ }
55
+
56
+ public function getClickImgSize(){
57
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_most_views/clickview_most_views_general/clickview_img_size'));
58
+ }
59
+
60
+
61
+
62
+
63
+ }
64
+
65
+ ?>
app/code/community/Jefferson/Clickview/Block/Clickviewmostviewedbycategoryblock.php ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * @category Jefferson
6
+ * @package Jefferson_Clickview
7
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
8
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
+ *
10
+ */
11
+
12
+ class Jefferson_Clickview_Block_Clickviewmostviewedbycategoryblock extends Mage_Catalog_Block_Product_List {
13
+
14
+ protected $cat = null;
15
+ protected $html = null;
16
+
17
+ public function getMostViewedByCategory($num,$cat){
18
+ return Mage::getSingleton('clickview/clickviewmostviewedbycategorymodel')->getMostViewedByCategory($num,$cat);
19
+ }
20
+
21
+ public function getCategoryMostViewed(){
22
+
23
+ $storeId = Mage::app()->getStore()->getId();
24
+
25
+ $catAllowed = self::getCategoryAllowed();
26
+
27
+ $catDefault = self::getCatDefault();
28
+
29
+ $this->cat = Mage::getSingleton('catalog/category')
30
+ ->getCollection()
31
+ ->addAttributeToSelect('*')
32
+ ->setStoreId($storeId)
33
+ ->addAttributeToFilter('entity_id', array('in' => $catAllowed));
34
+
35
+ foreach($this->cat as $i){
36
+ if($i->getId() == $catDefault){
37
+ $this->html .= "<option value='".$i->getId()."' selected='selected' >".$i->getName()."</option>";
38
+ }else{
39
+ $this->html .= "<option value='".$i->getId()."'>".$i->getName()."</option>";
40
+ }
41
+ }
42
+
43
+ return $this->html;
44
+ }
45
+
46
+ public function getCategoryAllowed(){
47
+ $cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_allowed'));
48
+ return $cat;
49
+ }
50
+
51
+ public function getUrlControllerMostViewedByCategory(){
52
+ echo Mage::getUrl()."clickview/index/getmostviewedbycategory";
53
+ }
54
+
55
+ public function getBestsellerProductsByCategory($num,$cat){
56
+ return Mage::getSingleton('clickview/clickviewbestsellerbycategorymodel')->getBestsellerProductsByCategory($num,$cat);
57
+ }
58
+
59
+ public function getUrlControllerBestSellerByCategory(){
60
+ echo Mage::getUrl()."clickview/index/getbestsellerbycategory";
61
+ }
62
+
63
+
64
+ public function getCatDefault(){
65
+ return $catDefault = Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_default');
66
+ return $catDefault;
67
+ }
68
+
69
+
70
+ public function getMinSlides(){
71
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_minslider'));
72
+ }
73
+
74
+ public function getMaxSlides(){
75
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_maxslider'));
76
+ }
77
+
78
+ public function getSlideWidth(){
79
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_slidewidth'));
80
+ }
81
+
82
+ public function getSlideMargin(){
83
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_slidewidth'));
84
+ }
85
+
86
+ public function getMostViewedByCatImgSize(){
87
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_img_size'));
88
+ }
89
+
90
+ public function getMostViewedByCatRow(){
91
+ return Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_click_number_rows');
92
+ }
93
+
94
+ public function getMostViewedByCatMode(){
95
+ return Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_slide_mode');
96
+ }
97
+
98
+ public function getMostViewedByCatEnabled(){
99
+ return Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_click_enabled');
100
+ }
101
+
102
+ }
103
+
104
+ ?>
app/code/community/Jefferson/Clickview/Block/Clickviewnewsproductsblock.php ADDED
@@ -0,0 +1,241 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magento.com so we can send you a copy immediately.
15
+ *
16
+ * @category Jefferson
17
+ * @package Jefferson_Clickview
18
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
19
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
20
+ *
21
+ */
22
+
23
+ class Jefferson_Clickview_Block_Clickviewnewsproductsblock extends Mage_Catalog_Block_Product_List {
24
+
25
+
26
+ /**
27
+ * Get the new products by category
28
+ *
29
+ * @param $num int
30
+ * @param $cat int
31
+ */
32
+
33
+ public function getNewsProductCollectionByCategory($num, $cat)
34
+ {
35
+ $todayStartOfDayDate = Mage::app()->getLocale()->date()
36
+ ->setTime('00:00:00')
37
+ ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
38
+
39
+ $todayEndOfDayDate = Mage::app()->getLocale()->date()
40
+ ->setTime('23:59:59')
41
+ ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
42
+
43
+ $collection = Mage::getResourceModel('catalog/product_collection');
44
+ $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());
45
+
46
+ $category = Mage::getSingleton('catalog/category')
47
+ ->setStoreId(Mage::app()->getStore()->getId())
48
+ ->load($cat);
49
+
50
+ $collection = $this->_addProductAttributesAndPrices($collection)
51
+ ->addStoreFilter()
52
+ ->addCategoryFilter($category)
53
+ ->addAttributeToFilter('news_from_date', array('or'=> array(
54
+ 0 => array('date' => true, 'to' => $todayEndOfDayDate),
55
+ 1 => array('is' => new Zend_Db_Expr('null')))
56
+ ), 'left')
57
+ ->addAttributeToFilter('news_to_date', array('or'=> array(
58
+ 0 => array('date' => true, 'from' => $todayStartOfDayDate),
59
+ 1 => array('is' => new Zend_Db_Expr('null')))
60
+ ), 'left')
61
+ ->addAttributeToFilter(
62
+ array(
63
+ array('attribute' => 'news_from_date', 'is'=>new Zend_Db_Expr('not null')),
64
+ array('attribute' => 'news_to_date', 'is'=>new Zend_Db_Expr('not null'))
65
+ )
66
+ )
67
+ ->addAttributeToSort('news_from_date', 'desc')
68
+ ->setPageSize($num)
69
+ ->setCurPage(1)
70
+ ;
71
+
72
+ return $collection;
73
+
74
+ }
75
+
76
+ public function getCategoryNewProduct(){
77
+
78
+ $storeId = Mage::app()->getStore()->getId();
79
+
80
+ $catAllowed = self::getCategoryAllowed();
81
+
82
+ $catDefault = self::getCatDefault();
83
+
84
+ $this->cat = Mage::getSingleton('catalog/category')
85
+ ->getCollection()
86
+ ->addAttributeToSelect('*')
87
+ ->setStoreId($storeId)
88
+ ->addAttributeToFilter('entity_id', array('in' => $catAllowed));
89
+
90
+ foreach($this->cat as $i){
91
+ if($i->getId() == $catDefault){
92
+ $this->html .= "<option value='".$i->getId()."' selected='selected' >".$i->getName()."</option>";
93
+ }else{
94
+ $this->html .= "<option value='".$i->getId()."'>".$i->getName()."</option>";
95
+ }
96
+ }
97
+
98
+ return $this->html;
99
+ }
100
+
101
+ public function getUrlControllerNewsProductsByCategory(){
102
+ echo Mage::getUrl()."clickview/index/getproductsnewsbycategory";
103
+ }
104
+
105
+ public function getUrlControllerAllProductsPromotion(){
106
+ echo Mage::getUrl()."clickview/index/getallproductspromotion";
107
+ }
108
+
109
+
110
+
111
+ public function getAllProductsPromotion($num, $cat){
112
+
113
+ $todayStartOfDayDate = Mage::app()->getLocale()->date()
114
+ ->setTime('00:00:00')
115
+ ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
116
+
117
+ $todayEndOfDayDate = Mage::app()->getLocale()->date()
118
+ ->setTime('23:59:59')
119
+ ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
120
+
121
+ $category = Mage::getSingleton('catalog/category')
122
+ ->setStoreId(Mage::app()->getStore()->getId())
123
+ ->load($cat);
124
+
125
+
126
+
127
+ $_products = Mage::getSingleton('catalog/product')
128
+ ->getCollection()
129
+ ->addAttributeToSelect('*')
130
+ ->addAttributeToFilter(
131
+ 'special_price', array('notnull' => true)
132
+ )
133
+ ->addAttributeToFilter('special_from_date', array('or'=> array(
134
+ 0 => array('date' => true, 'to' => $todayEndOfDayDate),
135
+ 1 => array('is' => new Zend_Db_Expr('null')))
136
+ ), 'left')
137
+ ->addAttributeToFilter('special_to_date', array('or'=> array(
138
+ 0 => array('date' => true, 'from' => $todayStartOfDayDate),
139
+ 1 => array('is' => new Zend_Db_Expr('null')))
140
+ ), 'left')
141
+ ->addAttributeToFilter(
142
+ array(
143
+ array('attribute' => 'special_from_date', 'is'=>new Zend_Db_Expr('not null')),
144
+ array('attribute' => 'special_to_date', 'is'=>new Zend_Db_Expr('not null'))
145
+ )
146
+ )
147
+ ->addCategoryFilter($category)
148
+ ->addAttributeToSort('special_from_date', 'desc')
149
+ ->setStoreId(Mage::app()->getStore()->getId())
150
+ ->setPageSize($num);
151
+
152
+ $_products->getSelect()->order('RAND()');
153
+
154
+ return $_products;
155
+
156
+ }
157
+
158
+
159
+ /**
160
+ * Get products with discount
161
+ */
162
+ public function getProductsDiscount($num){
163
+
164
+ $cat = @implode(',',Mage::getModel('clickview/system_config_source_category')->toOptionArray());
165
+
166
+ $_products = self::getAllProductsPromotion($num, $cat);
167
+
168
+ return $_products;
169
+
170
+ }
171
+
172
+ /**
173
+ * Calculates the percentage of discount
174
+ *
175
+ * @param $val1 double
176
+ * @param $val2 double
177
+ */
178
+
179
+ public function getPerc($val1, $val2){
180
+ return Mage::helper('clickview')->calcPerc($val1, $val2);
181
+ }
182
+
183
+ /**
184
+ * Get the best selling function settings
185
+ *
186
+ */
187
+
188
+ public function getCategoryAllowed(){
189
+ $cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_allowed'));
190
+ return $cat;
191
+ }
192
+ public function getCatDefault(){
193
+ return $catDefault = Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_default');
194
+ return $catDefault;
195
+ }
196
+
197
+ public function getMinSlides(){
198
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_minslider'));
199
+ }
200
+
201
+ public function getMaxSlides(){
202
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_maxslider'));
203
+ }
204
+
205
+ public function getSlideWidth(){
206
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_slidewidth'));
207
+ }
208
+
209
+ public function getSlideMargin(){
210
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_slidewidth'));
211
+ }
212
+
213
+ public function getNewProductByCatImgSize(){
214
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_img_size'));
215
+ }
216
+
217
+ public function getNewProductByCatRow(){
218
+ return Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_click_number_rows');
219
+ }
220
+
221
+ public function getNewProductByCatMode(){
222
+ return Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_slide_mode');
223
+ }
224
+
225
+ public function getNewProductByCatEnabled(){
226
+ return Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_click_enabled');
227
+ }
228
+
229
+ public function getDiscountImgSize(){
230
+ return Mage::getStoreConfig('clickview_product_discount/clickview_products_discount_general/clickview_img_size');
231
+ }
232
+
233
+ public function getDiscountRows(){
234
+ return Mage::getStoreConfig('clickview_product_discount/clickview_products_discount_general/clickview_click_number_rows');
235
+ }
236
+
237
+
238
+ }
239
+
240
+ ?>
241
+
app/code/community/Jefferson/Clickview/Block/Clickviewproductspromotionblock.php ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * @category Jefferson
6
+ * @package Jefferson_Clickview
7
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
8
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
9
+ *
10
+ */
11
+
12
+ class Jefferson_Clickview_Block_Clickviewproductspromotionblock extends Mage_Catalog_Block_Product_List {
13
+
14
+
15
+ /**
16
+ * Get the products by category in promotion
17
+ *
18
+ * @param $num int
19
+ * @param $cat int
20
+ */
21
+
22
+ public function getNewsProductCollectionByCategory($num, $cat)
23
+ {
24
+ $todayStartOfDayDate = Mage::app()->getLocale()->date()
25
+ ->setTime('00:00:00')
26
+ ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
27
+
28
+ $todayEndOfDayDate = Mage::app()->getLocale()->date()
29
+ ->setTime('23:59:59')
30
+ ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
31
+
32
+ $collection = Mage::getResourceModel('catalog/product_collection');
33
+ $collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());
34
+
35
+ $category = Mage::getSingleton('catalog/category')
36
+ ->setStoreId(Mage::app()->getStore()->getId())
37
+ ->load($cat);
38
+
39
+ $collection = $this->_addProductAttributesAndPrices($collection)
40
+ ->setStoreId(Mage::app()->getStore()->getId())
41
+ ->addStoreFilter(Mage::app()->getStore()->getId())
42
+ ->addCategoryFilter($category)
43
+ ->addAttributeToFilter('news_from_date', array('or'=> array(
44
+ 0 => array('date' => true, 'to' => $todayEndOfDayDate),
45
+ 1 => array('is' => new Zend_Db_Expr('null')))
46
+ ), 'left')
47
+ ->addAttributeToFilter('news_to_date', array('or'=> array(
48
+ 0 => array('date' => true, 'from' => $todayStartOfDayDate),
49
+ 1 => array('is' => new Zend_Db_Expr('null')))
50
+ ), 'left')
51
+ ->addAttributeToFilter(
52
+ array(
53
+ array('attribute' => 'news_from_date', 'is'=>new Zend_Db_Expr('not null')),
54
+ array('attribute' => 'news_to_date', 'is'=>new Zend_Db_Expr('not null'))
55
+ )
56
+ )
57
+ ->addAttributeToSort('news_from_date', 'desc')
58
+ ->setPageSize($num)
59
+ ->setCurPage(1)
60
+ ;
61
+
62
+ return $collection;
63
+
64
+ }
65
+
66
+ public function getCategoryProductPromotion(){
67
+
68
+ $storeId = Mage::app()->getStore()->getId();
69
+
70
+ $catAllowed = self::getCategoryAllowed();
71
+
72
+ $catDefault = self::getCatDefault();
73
+
74
+ $this->cat = Mage::getSingleton('catalog/category')
75
+ ->getCollection()
76
+ ->addAttributeToSelect('*')
77
+ ->setStoreId($storeId)
78
+ ->addAttributeToFilter('entity_id', array('in' => $catAllowed));
79
+
80
+ foreach($this->cat as $i){
81
+ if($i->getId() == $catDefault){
82
+ $this->html .= "<option value='".$i->getId()."' selected='selected' >".$i->getName()."</option>";
83
+ }else{
84
+ $this->html .= "<option value='".$i->getId()."'>".$i->getName()."</option>";
85
+ }
86
+ }
87
+
88
+ return $this->html;
89
+ }
90
+
91
+ public function getUrlControllerNewsProductsByCategory(){
92
+ echo Mage::getUrl()."clickview/index/getproductsnewsbycategory";
93
+ }
94
+
95
+ public function getUrlControllerAllProductsPromotion(){
96
+ echo Mage::getUrl()."clickview/index/getallproductspromotion";
97
+ }
98
+
99
+
100
+
101
+ public function getAllProductsPromotion($num, $cat){
102
+
103
+ $todayStartOfDayDate = Mage::app()->getLocale()->date()
104
+ ->setTime('00:00:00')
105
+ ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
106
+
107
+ $todayEndOfDayDate = Mage::app()->getLocale()->date()
108
+ ->setTime('23:59:59')
109
+ ->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
110
+
111
+ $category = Mage::getSingleton('catalog/category')
112
+ ->setStoreId(Mage::app()->getStore()->getId())
113
+ ->load($cat);
114
+
115
+
116
+
117
+ $_products = Mage::getSingleton('catalog/product')
118
+ ->getCollection()
119
+ ->addAttributeToSelect('*')
120
+ ->addAttributeToFilter(
121
+ 'special_price', array('notnull' => true)
122
+ )
123
+ ->addAttributeToFilter('special_from_date', array('or'=> array(
124
+ 0 => array('date' => true, 'to' => $todayEndOfDayDate),
125
+ 1 => array('is' => new Zend_Db_Expr('null')))
126
+ ), 'left')
127
+ ->addAttributeToFilter('special_to_date', array('or'=> array(
128
+ 0 => array('date' => true, 'from' => $todayStartOfDayDate),
129
+ 1 => array('is' => new Zend_Db_Expr('null')))
130
+ ), 'left')
131
+ ->addAttributeToFilter(
132
+ array(
133
+ array('attribute' => 'special_from_date', 'is'=>new Zend_Db_Expr('not null')),
134
+ array('attribute' => 'special_to_date', 'is'=>new Zend_Db_Expr('not null'))
135
+ )
136
+ )
137
+ ->addCategoryFilter($category)
138
+ ->addAttributeToSort('special_from_date', 'desc')
139
+ ->setStoreId(Mage::app()->getStore()->getId())
140
+ ->setPageSize($num);
141
+
142
+ $_products->getSelect()->order('RAND()');
143
+
144
+ return $_products;
145
+
146
+ }
147
+
148
+ public function getProductsDiscount(){
149
+
150
+ $num = 50;
151
+ $cat = implode(',',Mage::getModel('clickview/system_config_source_category')->toOptionArray());
152
+
153
+ $_products = self::getAllProductsPromotion($num, $cat);
154
+
155
+ return $_products;
156
+
157
+ }
158
+
159
+ public function getPerc($val1, $val2){
160
+ return Mage::helper('clickview')->calcPerc($val1, $val2);
161
+ }
162
+
163
+ /**
164
+ * Get the best selling function settings
165
+ *
166
+ */
167
+
168
+ public function getCategoryAllowed(){
169
+ $cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_allowed'));
170
+ return $cat;
171
+ }
172
+ public function getCatDefault(){
173
+ return $catDefault = Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_default');
174
+ return $catDefault;
175
+ }
176
+
177
+ public function getMinSlides(){
178
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_minslider'));
179
+ }
180
+
181
+ public function getMaxSlides(){
182
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_maxslider'));
183
+ }
184
+
185
+ public function getSlideWidth(){
186
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_slidewidth'));
187
+ }
188
+
189
+ public function getSlideMargin(){
190
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_slidewidth'));
191
+ }
192
+
193
+ public function getNewProductByCatImgSize(){
194
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_img_size'));
195
+ }
196
+
197
+ public function getNewProductByCatRow(){
198
+ return Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_click_number_rows');
199
+ }
200
+
201
+ public function getNewProductByCatMode(){
202
+ return Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_slide_mode');
203
+ }
204
+
205
+ public function getNewProductByCatEnabled(){
206
+ return Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_click_enabled');
207
+ }
208
+
209
+ }
210
+
211
+ ?>
212
+
app/code/community/Jefferson/Clickview/Block/Clickviewrecents.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Jefferson_Clickview_Block_Clickviewrecents extends Mage_Reports_Block_Product_Viewed {
3
+
4
+ public function getClickEnabled(){
5
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_click_recents/clickview_general/clickview_click_enabled'));
6
+ }
7
+
8
+ public function getClickImgSize(){
9
+ return preg_replace("/[^0-9]/", "", Mage::getStoreConfig('clickview_click_recents/clickview_click_recents_general/clickview_img_size'));
10
+ }
11
+
12
+ }
13
+ ?>
app/code/community/Jefferson/Clickview/Helper/Data.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-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@magento.com so we can send you a copy immediately.
14
+ *
15
+ * @category Jefferson
16
+ * @package Jefferson_Clickview
17
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
18
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
19
+ *
20
+ */
21
+
22
+ class Jefferson_Clickview_Helper_Data extends Mage_Core_Helper_Abstract {
23
+
24
+ public static function calcPerc($val1, $val2){
25
+ $total = ($val1 - $val2);
26
+ $total = $total / $val1;
27
+ $total = $total * 100;
28
+
29
+ return "-".number_format($total,'0')."%";
30
+ }
31
+
32
+
33
+ }
34
+ ?>
app/code/community/Jefferson/Clickview/Model/Clickviewbestsellerbycategorymodel.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Jefferson_Clickview_Model_Clickviewbestsellerbycategorymodel extends Mage_Core_Model_Abstract {
3
+
4
+ protected function _construct()
5
+ {
6
+ $this->_init('clickview/clickviewbestsellerbycategorymodel');
7
+ }
8
+
9
+ /**
10
+ * Get the best selling products by category
11
+ *
12
+ * @param $num int
13
+ * @param $cat int
14
+ */
15
+
16
+ public function getBestsellerProductsByCategory($num,$cat)
17
+ {
18
+ $storeId = (int) Mage::app()->getStore()->getId();
19
+ $today = time();
20
+ $last = $today - (60*60*24*30);
21
+
22
+ $fromDate = date("Y-m-d", $last);
23
+ $toDate = date("Y-m-d", $today);
24
+
25
+ $category = Mage::getSingleton('catalog/category')
26
+ ->setStoreId($storeId)
27
+ ->load($cat);
28
+
29
+
30
+ $collection = Mage::getResourceModel('catalog/product_collection')
31
+ ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
32
+ ->addStoreFilter()
33
+ ->addPriceData()
34
+ ->addCategoryFilter($category)
35
+ ->addTaxPercents()
36
+ ->addUrlRewrite()
37
+ ->setPageSize($num);
38
+
39
+ $collection->getSelect()
40
+ ->joinLeft(
41
+ array('aggregation' => $collection->getResource()->getTable('sales/bestsellers_aggregated_monthly')),
42
+ "e.entity_id = aggregation.product_id AND aggregation.store_id={$storeId} AND aggregation.period BETWEEN '{$fromDate}' AND '{$toDate}'",
43
+ array('SUM(aggregation.qty_ordered) AS sold_quantity')
44
+ )
45
+ ->group('e.entity_id')
46
+ ->order(array('sold_quantity DESC', 'e.created_at'));
47
+
48
+ Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
49
+ Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
50
+
51
+ return $collection;
52
+ }
53
+
54
+ }
55
+
56
+ ?>
app/code/community/Jefferson/Clickview/Model/Clickviewbestsellersmodel.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Jefferson_Clickview_Model_Clickviewbestsellersmodel extends Mage_Core_Model_Abstract {
3
+
4
+ protected function _construct()
5
+ {
6
+ $this->_init('clickview/clickviewbestsellersmodel');
7
+ }
8
+
9
+ /**
10
+ * Get the best-selling products
11
+ * @param $num int
12
+ * return Array
13
+ */
14
+ public function getBestsellerProducts($num)
15
+ {
16
+ $storeId = (int) Mage::app()->getStore()->getId();
17
+
18
+ // Date
19
+
20
+ $toDate = date('y-m-d');
21
+ $fromDate = date('y-m-1');
22
+
23
+ $collection = Mage::getResourceModel('catalog/product_collection')
24
+ ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
25
+ ->addStoreFilter()
26
+ ->addPriceData()
27
+ ->addTaxPercents()
28
+ ->addUrlRewrite()
29
+ ->setPageSize($num);
30
+
31
+ $collection->getSelect()
32
+ ->joinLeft(
33
+ array('aggregation' => $collection->getResource()->getTable('sales/bestsellers_aggregated_monthly')),
34
+ "e.entity_id = aggregation.product_id AND aggregation.store_id={$storeId} AND aggregation.period BETWEEN '{$fromDate}' AND '{$toDate}'",
35
+ array('SUM(aggregation.qty_ordered) AS sold_quantity')
36
+ )
37
+ ->group('e.entity_id')
38
+ ->order(array('sold_quantity DESC', 'e.created_at'));
39
+
40
+ Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
41
+ Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
42
+
43
+ return $collection;
44
+ }
45
+
46
+ }
47
+
48
+ ?>
app/code/community/Jefferson/Clickview/Model/Clickviewmodel.php ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Jefferson
5
+ * @package Jefferson_Clickview
6
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
7
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
8
+ *
9
+ */
10
+
11
+ class Jefferson_Clickview_Model_Clickviewmodel extends Mage_Core_Model_Abstract {
12
+
13
+
14
+
15
+ protected function _construct()
16
+ {
17
+ $this->_init('clickview/clickviewmodel');
18
+ }
19
+
20
+
21
+ /**
22
+ * Handle the products in a given category
23
+ *
24
+ * @param int $entity_id
25
+ * @param int $categoryCurrent
26
+ * @param int $limit
27
+ * return Array
28
+ */
29
+ public function getDataProducts($entity_id, $categoryCurrent, $limit){
30
+
31
+ $storeId = Mage::app()->getStore()->getId();
32
+ $_products = Mage::getSingleton('catalog/product')
33
+ ->getCollection()
34
+ ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
35
+ ->addAttributeToSelect('*')
36
+ // ->addAttributeToFilter('set_promotion', array('in'=>"1"))
37
+
38
+ ->addFieldToFilter(array(
39
+ array('attribute'=>'entity_id','nin'=> $entity_id),
40
+ ))
41
+
42
+ ->addFieldToFilter(array(
43
+ array('attribute'=>'category_id','in'=> array($categoryCurrent)),
44
+ ))
45
+
46
+ ->setStoreId($storeId)
47
+ ->setPageSize($limit);
48
+ $_products->getSelect()->group('e.entity_id');
49
+
50
+ Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($_products);
51
+ Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($_products);
52
+
53
+
54
+ $_products->getSelect()->order('RAND()');
55
+
56
+
57
+ foreach($_products as $item);
58
+
59
+ if ($item)
60
+ {
61
+ return $_products;
62
+
63
+ }else{
64
+ return false;
65
+ }
66
+ }
67
+
68
+ /**
69
+ *Returns the name of a category
70
+ *
71
+ *@param int $category
72
+ *return String
73
+ */
74
+ public function getCategoryName($category)
75
+ {
76
+ $storeId = (int)Mage::app()->getStore()->getId();
77
+ $this->category = Mage::getSingleton('catalog/category')
78
+ ->setStoreId($storeId)
79
+ ->load($category);
80
+ $cat = $this->category->getTitleCustomTabs();
81
+ if(!empty($cat)){
82
+ echo $this->category->getTitleCustomTabs();
83
+ }
84
+ else
85
+ {
86
+ echo $this->category->getName();
87
+ }
88
+
89
+ }
90
+
91
+
92
+ /**
93
+ *Take the categories of a product
94
+ *
95
+ *@param int $id
96
+ *return string
97
+ */
98
+ public function getCategoryProducts($id){
99
+
100
+ $storeId = Mage::app()->getStore()->getId();
101
+ $_products = Mage::getSingleton('catalog/product')
102
+ ->setStoreId($storeId)
103
+ ->load($id);
104
+ $_category = $_products->getCategoryIds();
105
+
106
+ return implode(',',$_category);
107
+ }
108
+
109
+ /**
110
+ *Get the data of the current products
111
+ *
112
+ *@param int $id
113
+ *return Object
114
+ */
115
+ public function getDataProductCurrent($id){
116
+ $storeId = (int)Mage::app()->getStore()->getId();
117
+ $_products = Mage::getSingleton('catalog/product')
118
+ ->setStoreID($storeId)
119
+ ->load($id);
120
+ return $_products;
121
+ }
122
+
123
+
124
+ /**
125
+ *Get a product related products
126
+ *
127
+ *@param int $id
128
+ *return Array
129
+ *
130
+ * Obs:This method is not being used in this module
131
+ */
132
+ public function getDataProductsRelated($id){
133
+ $_products = self::getDataProductCurrent($id);
134
+ return $_products->getRelatedProductIds();
135
+
136
+ }
137
+
138
+ }
139
+ ?>
app/code/community/Jefferson/Clickview/Model/Clickviewmostviewedbycategorymodel.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Jefferson_Clickview_Model_Clickviewmostviewedbycategorymodel extends Mage_Core_Model_Abstract {
4
+
5
+ protected function _construct()
6
+ {
7
+ $this->_init('clickview/clickviewmostviewedbycategorymodel');
8
+ }
9
+
10
+ /**
11
+ * Get the most viewed products by category
12
+ *
13
+ * @param $num int
14
+ * @param $cat int
15
+ */
16
+
17
+ public function getMostViewedByCategory($num,$cat){
18
+ $storeId = Mage::app()->getStore()->getId();
19
+ $today = time();
20
+ $last = $today - (60*60*24*30);
21
+
22
+ $fromDate = date("Y-m-d", $last);
23
+ $toDate = date("Y-m-d", $today);
24
+
25
+ $category = Mage::getSingleton('catalog/category')
26
+ ->setStoreId(Mage::app()->getStore()->getId())
27
+ ->load($cat);
28
+
29
+ $products = Mage::getResourceModel('reports/product_collection')
30
+ ->addAttributeToSelect('*')
31
+ ->addCategoryFilter($category)
32
+ ->setStoreId($storeId)
33
+ ->addStoreFilter($storeId)
34
+ ->addViewsCount($fromDate, $toDate)
35
+ ->setOrder('views_count', 'desc')
36
+ ->setPageSize($num);
37
+
38
+ $productFlatData = Mage::getStoreConfig('catalog/frontend/flat_catalog_product');
39
+ if($productFlatData == "1")
40
+ {
41
+ $products->getSelect()->joinLeft(
42
+ array('flat' => 'catalog_product_flat_'.$storeId),
43
+ "(e.entity_id = flat.entity_id ) ",
44
+ array(
45
+ 'flat.name AS name','flat.small_image AS small_image','flat.price AS price','flat.special_price as special_price','flat.special_from_date AS special_from_date','flat.special_to_date AS special_to_date'
46
+ )
47
+ );
48
+ }
49
+
50
+ Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
51
+ Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);
52
+
53
+ return $products;
54
+
55
+ }
56
+
57
+
58
+ }
59
+ ?>
app/code/community/Jefferson/Clickview/Model/Clickviewmostviewedmodel.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Jefferson
5
+ * @package Jefferson_Clickview
6
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
7
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
8
+ *
9
+ */
10
+ class Jefferson_Clickview_Model_Clickviewmostviewedmodel extends Mage_Core_Model_Abstract {
11
+
12
+ protected function _construct()
13
+ {
14
+ $this->_init('clickview/clickviewmostviewedmodel');
15
+ }
16
+
17
+ /**
18
+ * Get the products viewed
19
+ * @param $num int
20
+ * @param Array
21
+ */
22
+
23
+ public function getMostViewed($num){
24
+ $storeId = Mage::app()->getStore()->getId();
25
+
26
+ $today = time();
27
+ $last = $today - (60*60*24*30);
28
+
29
+ $fromDate = date("Y-m-d", $last);
30
+ $toDate = date("Y-m-d", $today);
31
+
32
+ $products = Mage::getResourceModel('reports/product_collection')
33
+ ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
34
+ ->setStoreId($storeId)
35
+ ->addStoreFilter($storeId)
36
+ ->addViewsCount($fromDate, $toDate)
37
+ ->setOrder('views_count', 'desc')
38
+ ->setPageSize($num);
39
+
40
+ Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products);
41
+ Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products);
42
+
43
+ return $products;
44
+ }
45
+
46
+
47
+ }
48
+ ?>
app/code/community/Jefferson/Clickview/Model/Observer.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @category Jefferson
4
+ * @package Jefferson_Clickview
5
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
6
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
7
+ *
8
+ */
9
+
10
+ class Jefferson_Clickview_Model_Observer {
11
+
12
+ protected $name = 'IDPRODUCT';
13
+ protected $id = null;
14
+
15
+ /**
16
+ * Get the id of the clicked product and called the method that the arrow product id in the cookie
17
+ *
18
+ * @param $observer type Varien_Event_Observer
19
+ **/
20
+ public function setExecuteClickview(Varien_Event_Observer $observer){
21
+ $this->id = $observer->getProduct()->getId();
22
+ self::setCookie($this->name, $this->id);
23
+ }
24
+
25
+ /**
26
+ * Writes the product id in the cookie
27
+ *
28
+ * @param $name String
29
+ * @param $value
30
+ **/
31
+ public function setCookie($name, $value){
32
+ return Mage::getSingleton('core/cookie')->set($name, $value);
33
+ }
34
+
35
+
36
+ /**
37
+ * Get cookie data reported
38
+ *
39
+ * @param $name String
40
+ **/
41
+
42
+ public function getCookie($name){
43
+ return Mage::getSingleton('core/cookie')->get($name);
44
+ }
45
+
46
+
47
+
48
+ }
49
+ ?>
app/code/community/Jefferson/Clickview/Model/System/Config/Source/Category.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-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@magento.com so we can send you a copy immediately.
14
+ *
15
+ * @category Jefferson
16
+ * @package Jefferson_Promocaotabs
17
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
18
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
19
+ *
20
+ */
21
+
22
+ class Jefferson_Clickview_Model_System_Config_Source_Category extends Mage_Adminhtml_Model_System_Config_Source_Category
23
+ {
24
+
25
+ protected function _construct()
26
+ {
27
+ $this->_init('clickview/system_config_source_category');
28
+ }
29
+
30
+
31
+ public function toOptionArray($addEmpty = true)
32
+ {
33
+ $options = array();
34
+ $storeId = Mage::app()->getStore()->getId();
35
+ $collection = Mage::getModel('catalog/category')
36
+ ->getCollection()
37
+ ->addAttributeToSelect('*')
38
+ ->setStoreId($storeId);
39
+
40
+ foreach($collection as $category){
41
+ if($category->getName() != 'Root Catalog'){
42
+ $options[] = array(
43
+ 'label' => $category->getName(),
44
+ 'value' => $category->getId()
45
+ );
46
+ }
47
+ }
48
+ return $options;
49
+ }
50
+ }
51
+
52
+
53
+ ?>
app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categoryallowed.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-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@magento.com so we can send you a copy immediately.
14
+ *
15
+ * @category Jefferson
16
+ * @package Jefferson_Promocaotabs
17
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
18
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
19
+ *
20
+ */
21
+
22
+ class Jefferson_Clickview_Model_System_Config_Source_Categoryallowed extends Mage_Adminhtml_Model_System_Config_Source_Category
23
+ {
24
+
25
+ protected function _construct()
26
+ {
27
+ $this->_init('clickview/system_config_source_categoryallowed');
28
+ }
29
+
30
+
31
+ public function toOptionArray($addEmpty = true)
32
+ {
33
+
34
+ $catAllowed = self::getCategoryAllowed();
35
+ $options = array();
36
+ $storeId = Mage::app()->getStore()->getId();
37
+ $collection = Mage::getModel('catalog/category')
38
+ ->getCollection()
39
+ ->addAttributeToSelect('*')
40
+ ->addAttributeToFilter('entity_id', array('in' => $catAllowed))
41
+ ->setStoreId($storeId);
42
+
43
+ foreach($collection as $category){
44
+ if($category->getName() != 'Root Catalog'){
45
+ $options[] = array(
46
+ 'label' => $category->getName(),
47
+ 'value' => $category->getId()
48
+ );
49
+ }
50
+ }
51
+ return $options;
52
+ }
53
+
54
+ public function getCategoryAllowed(){
55
+ $cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_allowed'));
56
+ return $cat;
57
+ }
58
+
59
+ }
60
+
61
+
62
+ ?>
app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categorybestsellerbycategory.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-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@magento.com so we can send you a copy immediately.
14
+ *
15
+ * @category Jefferson
16
+ * @package Jefferson_Promocaotabs
17
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
18
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
19
+ *
20
+ */
21
+
22
+ class Jefferson_Clickview_Model_System_Config_Source_Categorybestsellerbycategory extends Mage_Adminhtml_Model_System_Config_Source_Category
23
+ {
24
+
25
+ protected function _construct()
26
+ {
27
+ $this->_init('clickview/system_config_source_Categorybestsellerbycategory');
28
+ }
29
+
30
+
31
+ public function toOptionArray($addEmpty = true)
32
+ {
33
+
34
+ $catAllowed = self::getCategoryAllowed();
35
+ $options = array();
36
+ $storeId = Mage::app()->getStore()->getId();
37
+ $collection = Mage::getModel('catalog/category')
38
+ ->getCollection()
39
+ ->addAttributeToSelect('*')
40
+ ->addAttributeToFilter('entity_id', array('in' => $catAllowed))
41
+ ->setStoreId($storeId);
42
+
43
+ foreach($collection as $category){
44
+ if($category->getName() != 'Root Catalog'){
45
+ $options[] = array(
46
+ 'label' => $category->getName(),
47
+ 'value' => $category->getId()
48
+ );
49
+ }
50
+ }
51
+ return $options;
52
+ }
53
+
54
+ public function getCategoryAllowed(){
55
+ $cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_best_seller_by_category/clickview_category_allowed'));
56
+ return $cat;
57
+ }
58
+
59
+ }
60
+
61
+
62
+ ?>
app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categorynewsproducts.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-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@magento.com so we can send you a copy immediately.
14
+ *
15
+ * @category Jefferson
16
+ * @package Jefferson_Promocaotabs
17
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
18
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
19
+ *
20
+ */
21
+
22
+ class Jefferson_Clickview_Model_System_Config_Source_Categorynewsproducts extends Mage_Adminhtml_Model_System_Config_Source_Category
23
+ {
24
+
25
+ protected function _construct()
26
+ {
27
+ $this->_init('clickview/system_config_source_Categorynewsproducts');
28
+ }
29
+
30
+
31
+ public function toOptionArray($addEmpty = true)
32
+ {
33
+
34
+ $catAllowed = self::getCategoryAllowed();
35
+ $options = array();
36
+ $storeId = Mage::app()->getStore()->getId();
37
+ $collection = Mage::getModel('catalog/category')
38
+ ->getCollection()
39
+ ->addAttributeToSelect('*')
40
+ ->addAttributeToFilter('entity_id', array('in' => $catAllowed))
41
+ ->setStoreId($storeId);
42
+
43
+ foreach($collection as $category){
44
+ if($category->getName() != 'Root Catalog'){
45
+ $options[] = array(
46
+ 'label' => $category->getName(),
47
+ 'value' => $category->getId()
48
+ );
49
+ }
50
+ }
51
+ return $options;
52
+ }
53
+
54
+ public function getCategoryAllowed(){
55
+ $cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_news_products_by_category/clickview_category_allowed'));
56
+ return $cat;
57
+ }
58
+
59
+ }
60
+
61
+
62
+ ?>
app/code/community/Jefferson/Clickview/Model/System/Config/Source/Categorypromotionproducts.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-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@magento.com so we can send you a copy immediately.
14
+ *
15
+ * @category Jefferson
16
+ * @package Jefferson_Promocaotabs
17
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
18
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
19
+ *
20
+ */
21
+
22
+ class Jefferson_Clickview_Model_System_Config_Source_Categorypromotionproducts extends Mage_Adminhtml_Model_System_Config_Source_Category
23
+ {
24
+
25
+ protected function _construct()
26
+ {
27
+ $this->_init('clickview/system_config_source_categorypromotionproducts');
28
+ }
29
+
30
+
31
+ public function toOptionArray($addEmpty = true)
32
+ {
33
+
34
+ $catAllowed = self::getCategoryAllowed();
35
+ $options = array();
36
+ $storeId = Mage::app()->getStore()->getId();
37
+ $collection = Mage::getModel('catalog/category')
38
+ ->getCollection()
39
+ ->addAttributeToSelect('*')
40
+ ->addAttributeToFilter('entity_id', array('in' => $catAllowed))
41
+ ->setStoreId($storeId);
42
+
43
+ foreach($collection as $category){
44
+ if($category->getName() != 'Root Catalog'){
45
+ $options[] = array(
46
+ 'label' => $category->getName(),
47
+ 'value' => $category->getId()
48
+ );
49
+ }
50
+ }
51
+ return $options;
52
+ }
53
+
54
+ public function getCategoryAllowed(){
55
+ $cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_products_promotion_by_category/clickview_category_allowed'));
56
+ return $cat;
57
+ }
58
+
59
+ }
60
+
61
+
62
+ ?>
app/code/community/Jefferson/Clickview/Model/System/Config/Source/Mode.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category Jefferson
5
+ * @package Jefferson_Clickiew
6
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
7
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
8
+ *
9
+ */
10
+
11
+ class Jefferson_Clickview_Model_System_Config_Source_Mode extends Mage_Adminhtml_Model_System_Config_Source_Category
12
+ {
13
+
14
+ protected function _construct()
15
+ {
16
+ $this->_init('clickview/system_config_source_mode');
17
+ }
18
+
19
+
20
+ public function toOptionArray($addEmpty = true)
21
+ {
22
+ $options = array(
23
+ 'horizontal' => 'Horizontal',
24
+ 'fade' => 'Fade'
25
+ );
26
+ return $options;
27
+ }
28
+ }
29
+
30
+
31
+ ?>
app/code/community/Jefferson/Clickview/controllers/IndexController.php ADDED
@@ -0,0 +1,439 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Academic Free License (AFL 3.0)
7
+ * that is bundled with this package in the file LICENSE_AFL.txt.
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/afl-3.0.php
10
+ * If you did not receive a copy of the license and are unable to
11
+ * obtain it through the world-wide-web, please send an email
12
+ * to license@magento.com so we can send you a copy immediately.
13
+ *
14
+ * @category Jefferson
15
+ * @package Jefferson_Clickview
16
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ *
19
+ */
20
+
21
+
22
+ class Jefferson_Clickview_IndexController extends Mage_Core_Controller_Front_Action {
23
+
24
+ //Carrega o layout
25
+ public function indexAction(){
26
+ $this->loadLayout();
27
+ $this->renderLayout();
28
+ }
29
+
30
+ //Retorna os produtos mais visualizados de uma categoria
31
+ public function getMostViewedByCategoryAction(){
32
+ $html = null;
33
+ $block = $this->getLayout()->createBlock('clickview/clickviewmostviewedbycategoryblock');
34
+
35
+ $getImgSize = $block->getMostViewedByCatImgSize();
36
+
37
+ $cat = $this->getRequest()->getParam('cat');
38
+
39
+ $rows = $block->getMostViewedByCatRow();
40
+
41
+ $_products = $block->getMostViewedByCategory($rows,$cat);
42
+
43
+ foreach($_products as $item){
44
+
45
+ $html .= "<li>";
46
+
47
+ $html .= "<figure>";
48
+
49
+ $html .= "<a href=".$item->getProductUrl() ." class='product-image'>";
50
+ $html .= "<img src='".Mage::helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($getImgSize,$getImgSize)."'/>";
51
+ $html .= "</a>";
52
+
53
+ $html .= "<figcaption>";
54
+
55
+ $html .= "<a href=".$item->getProductUrl() ." class='product-image'>".$item->getName()."</a>";
56
+ $html .= $block->getPriceHtml($item, true);
57
+
58
+ $html .= '<div class="product-secondary">';
59
+
60
+ if(!$item->canConfigure() && $item->isSaleable()):
61
+ $html .= '<p class="action">';
62
+ $html .= '<button type="button" title="'.$this->__('Add to Cart').'" class="button btn-cart"
63
+ onclick = " setLocation('."'".$block->getAddToCartUrl($item)."'".') ">';
64
+ $html .= "<span>";
65
+ $html .= "<span>";
66
+ $html .= $this->__('Add to Cart');
67
+ $html .= "</span>";
68
+ $html .= "</span>";
69
+ $html .= "</button>";
70
+
71
+ $html .= '</p>';
72
+
73
+ elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()):
74
+
75
+ $html .= '<p class="action">';
76
+
77
+ $html .= '<a title=" '.$this->__('View Details').'"
78
+ class="button" href="'.$item->getProductUrl().' ">'.
79
+ $this->__('View Details').'</a>';
80
+
81
+ $html .= '</p>';
82
+
83
+ else:
84
+
85
+ $html .= '<p class="action availability out-of-stock">';
86
+ $html .= '<span>'.$this->__('Out of stock').'</span>';
87
+ $html .= '</p>';
88
+
89
+ endif;
90
+
91
+ $html .= '</div>';
92
+
93
+
94
+ $html .= "</figcaption>";
95
+
96
+ $html .= "</figure>";
97
+
98
+ $html .= "</li>";
99
+
100
+ }
101
+
102
+ echo json_encode(array('content' => $html));
103
+ }
104
+
105
+
106
+ //Retorna um mesclado dos produtos mais vendidos e mais vistos de uma determinada cateoria
107
+ public function getBestSellerByCategoryAction(){
108
+
109
+ $html = null;
110
+ $block = $this->getLayout()->createBlock('clickview/clickviewbestsellerbycategoryblock');
111
+ $cat = $this->getRequest()->getParam('cat');
112
+ $rows = $block->getBestSellerByCatRow();
113
+ $imgSize = $block->getBestSellerByCatImgSize();
114
+ $_products = $block->getBestsellerProductsByCategory($rows,$cat);
115
+
116
+ foreach($_products as $item){
117
+
118
+ $html .= "<li>";
119
+
120
+ $html .= "<figure>";
121
+
122
+ $html .= "<a href=".$item->getProductUrl() ." class='product-image'>";
123
+ $html .= "<img src='".Mage::helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($imgSize,$imgSize)."'/>";
124
+ $html .= "</a>";
125
+
126
+ $html .= "<figcaption>";
127
+ $html .= "<a href=".$item->getProductUrl() ." class='product-image'>".$item->getName()."</a>";
128
+ $html .= $block->getPriceHtml($item, true);
129
+
130
+ $html .= '<div class="product-secondary">';
131
+
132
+ if(!$item->canConfigure() && $item->isSaleable()):
133
+ $html .= '<p class="action">';
134
+ $html .= '<button type="button" title="'.$this->__('Add to Cart').'" class="button btn-cart"
135
+ onclick = " setLocation('."'".$block->getAddToCartUrl($item)."'".') ">';
136
+ $html .= "<span>";
137
+ $html .= "<span>";
138
+ $html .= $this->__('Add to Cart');
139
+ $html .= "</span>";
140
+ $html .= "</span>";
141
+ $html .= "</button>";
142
+
143
+ $html .= '</p>';
144
+
145
+ elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()):
146
+
147
+ $html .= '<p class="action">';
148
+
149
+ $html .= '<a title=" '.$this->__('View Details').'"
150
+ class="button" href="'.$item->getProductUrl().' ">'.
151
+ $this->__('View Details').'</a>';
152
+ $html .= '</p>';
153
+ else:
154
+
155
+ $html .= '<p class="action availability out-of-stock">';
156
+ $html .= '<span>'.$this->__('Out of stock').'</span>';
157
+ $html .= '</p>';
158
+
159
+ $html .= '</p>';
160
+
161
+ endif;
162
+
163
+ $html .= '</div>';
164
+
165
+ $html .= "</figcaption>";
166
+
167
+ $html .= "</figure>";
168
+
169
+ $html .= "</li>";
170
+
171
+ }
172
+
173
+ echo json_encode(array('content' => $html));
174
+
175
+ }
176
+
177
+ public function getProductsNewsByCategoryAction(){
178
+
179
+ $html = null;
180
+ $block = $this->getLayout()->createBlock('clickview/clickviewnewsproductsblock');
181
+ $cat = $this->getRequest()->getParam('cat');
182
+ $rows = $block->getNewProductByCatRow();
183
+ $imgSize = $block->getNewProductByCatImgSize();
184
+
185
+
186
+ $_products = $block->getNewsProductCollectionByCategory($rows,$cat);
187
+
188
+ foreach($_products as $item){
189
+
190
+ $html .= "<li>";
191
+
192
+ $html .= "<figure>";
193
+
194
+ $html .= "<a href=".$item->getProductUrl() ." class='product-image'>";
195
+ $html .= "<img src='".Mage::helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($imgSize,$imgSize)."'/>";
196
+ $html .= "</a>";
197
+
198
+ $html .= '<span class="perc">'.$this->__('News').'</span>';
199
+
200
+ $html .= "<figcaption>";
201
+
202
+ $html .= "<a href=".$item->getProductUrl() ." class='product-image'>".$item->getName()."</a>";
203
+ $html .= $block->getPriceHtml($item, true);
204
+
205
+ $html .= '<div class="product-secondary">';
206
+
207
+ if(!$item->canConfigure() && $item->isSaleable()):
208
+ $html .= '<p class="action">';
209
+ $html .= '<button type="button" title="'.$this->__('Add to Cart').'" class="button btn-cart"
210
+ onclick = " setLocation('."'".$block->getAddToCartUrl($item)."'".') ">';
211
+ $html .= "<span>";
212
+ $html .= "<span>";
213
+ $html .= $this->__('Add to Cart');
214
+ $html .= "</span>";
215
+ $html .= "</span>";
216
+ $html .= "</button>";
217
+
218
+ $html .= '</p>';
219
+
220
+ elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()):
221
+
222
+ $html .= '<p class="action">';
223
+
224
+ $html .= '<a title=" '.$this->__('View Details').'"
225
+ class="button" href="'.$item->getProductUrl().' ">'.
226
+ $this->__('View Details').'</a>';
227
+ $html .= '</p>';
228
+ else:
229
+
230
+ $html .= '<p class="action availability out-of-stock">';
231
+ $html .= '<span>'.$this->__('Out of stock').'</span>';
232
+ $html .= '</p>';
233
+
234
+ $html .= '</p>';
235
+
236
+ endif;
237
+
238
+ $html .= '</div>';
239
+
240
+
241
+ $html .= "</figcaption>";
242
+
243
+ $html .= "</figure>";
244
+
245
+ $html .= "</li>";
246
+
247
+ }
248
+
249
+ echo json_encode(array('content' => $html));
250
+
251
+ }
252
+
253
+
254
+ public function getAllProductsPromotionAction(){
255
+
256
+ $html = null;
257
+
258
+ $block = $this->getLayout()->createBlock('clickview/Clickviewproductspromotionblock');
259
+
260
+ $cat = $this->getRequest()->getParam('cat');
261
+
262
+ $num = $block->getNewProductByCatRow();
263
+
264
+ $imgSize = $block->getNewProductByCatImgSize();
265
+
266
+ $_products = $block->getAllProductsPromotion($num, $cat);
267
+
268
+ foreach($_products as $item){
269
+
270
+ $html .= "<li>";
271
+
272
+ $html .= "<figure>";
273
+
274
+ $html .= "<a href=".$item->getProductUrl() ." class='product-image'>";
275
+ $html .= "<img src='".Mage::helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($imgSize,$imgSize)."'/>";
276
+ $html .= "</a>";
277
+
278
+ if($item->getSpecialPrice() > 0 ):
279
+ $html .= '<span class="perc">'.$block->getPerc($item->getPrice(), $item->getSpecialPrice() ).'</span>';
280
+ endif;
281
+
282
+ $html .= "<figcaption>";
283
+
284
+ $html .= "<a href=".$item->getProductUrl() ." class='product-image'>".$item->getName()."</a>";
285
+ $html .= $block->getPriceHtml($item, true);
286
+
287
+ $html .= '<div class="product-secondary">';
288
+
289
+ if(!$item->canConfigure() && $item->isSaleable()):
290
+ $html .= '<p class="action">';
291
+ $html .= '<button type="button" title="'.$this->__('Add to Cart').'" class="button btn-cart"
292
+ onclick = " setLocation('."'".$block->getAddToCartUrl($item)."'".') ">';
293
+ $html .= "<span>";
294
+ $html .= "<span>";
295
+ $html .= $this->__('Add to Cart');
296
+ $html .= "</span>";
297
+ $html .= "</span>";
298
+ $html .= "</button>";
299
+
300
+ $html .= '</p>';
301
+
302
+ elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()):
303
+
304
+ $html .= '<p class="action">';
305
+
306
+ $html .= '<a title=" '.$this->__('View Details').'"
307
+ class="button" href="'.$item->getProductUrl().' ">'.
308
+ $this->__('View Details').'</a>';
309
+ $html .= '</p>';
310
+ else:
311
+
312
+ $html .= '<p class="action availability out-of-stock">';
313
+ $html .= '<span>'.$this->__('Out of stock').'</span>';
314
+ $html .= '</p>';
315
+
316
+ $html .= '</p>';
317
+
318
+ endif;
319
+
320
+ $html .= '</div>';
321
+
322
+
323
+ $html .= "</figcaption>";
324
+
325
+ $html .= "</figure>";
326
+
327
+ $html .= "</li>";
328
+
329
+ }
330
+
331
+ echo json_encode(array('content' => $html));
332
+
333
+ }
334
+
335
+
336
+ public function getCatAction(){
337
+ $html = null;
338
+ $storeId = Mage::app()->getStore()->getId();
339
+
340
+ $catAllowed = self::getCategoryAllowed();
341
+
342
+ $cat = Mage::getSingleton('catalog/category')
343
+ ->getCollection()
344
+ ->addAttributeToSelect('*')
345
+ ->setStoreId($storeId)
346
+ ->addAttributeToFilter('entity_id', array('in' => $catAllowed));
347
+
348
+ foreach($cat as $i){
349
+ $html .= "<option value='".$i->getId()."'>".$i->getName()."</option>";
350
+ }
351
+
352
+
353
+ }
354
+
355
+ public function getCategoryAllowed(){
356
+ $cat = explode(',', Mage::getStoreConfig('clickview_by_category/clickview_most_viewed_by_category/clickview_category_allowed'));
357
+ return $cat;
358
+ }
359
+
360
+
361
+ /**public function feedAction(){
362
+
363
+ $_products = Mage::getSingleton('catalog/product')
364
+ ->getCollection()
365
+ ->addAttributeToSelect('*')
366
+ ->addAttributeToFilter('status', array('eq' => 1))
367
+ ->joinField('qty',
368
+ 'cataloginventory/stock_item',
369
+ 'qty',
370
+ 'product_id=entity_id',
371
+ '{{table}}.stock_id=1',
372
+ 'left')
373
+
374
+ ->addAttributeToFilter('qty', array("gt" => 0))
375
+ ->load();
376
+
377
+ $xml .= '<?xml version="1.0"?>';
378
+ $xml .= '<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">';
379
+ $xml .= '<channel>';
380
+ $xml .= '<title>Hajime</title>';
381
+ $xml .= '<link>http://webmaster.hajimesushitucuruvi.com.br/teste/</link>';
382
+ $xml .= '<description>Loja teste</description>';
383
+
384
+ foreach($_products as $item){
385
+
386
+ $xml .= '<item>';
387
+ $xml .= "<g:id>".$item->getSku()."</g:id>";
388
+ $xml .= "<g:title>".$item->getName()."</g:title>";
389
+ $xml .= "<g:description>".$item->getShortDescription()."</g:description>";
390
+ $xml .= "<g:price>".self::getPriceProduct($item->getPrice(), $item->getSpecialPrice())."</g:price>";
391
+ $xml .= "<g:availability>".self::isStock($item->isSaleable())."</g:availability>";
392
+ $xml .= "<g:link>".$item->getProductUrl()."</g:link>";
393
+ $xml .= "<g:image_link>".Mage::helper('catalog/image')->init($item, 'small_image')->resize(200)."</g:image_link>";
394
+ $xml .= "<g:condition>new</g:condition>";
395
+ $xml .= "".number_format($item->getQty(),0,'','')."";
396
+ $xml .= '<g:shipping>
397
+ <g:country>BR</g:country>
398
+ <g:service>Standard</g:service>
399
+ <g:price>20.00 BRL</g:price>
400
+ </g:shipping>';
401
+ $xml .= "<g:google_product_category>Alimentos, bebidas e tabaco > Alimentos > Padaria</g:google_product_category>";
402
+ $xml .= '<g:identifier_exists>FALSE</g:identifier_exists>';
403
+ $xml .= "<g:product_type>Alimentos Orgânicos</g:product_type>";
404
+ $xml .= '</item>';
405
+
406
+ }
407
+
408
+ $xml .= '</channel>';
409
+ $xml .= '</rss>';
410
+
411
+ return self::setFile($xml);
412
+
413
+ }*/
414
+
415
+ public function isStock($stock){
416
+ if($stock){
417
+ return "in stock";
418
+ }else{
419
+ return "sold out";
420
+ }
421
+ }
422
+
423
+ public function getPriceProduct($price, $specialPrice){
424
+ if($specialPrice > 0){
425
+ return number_format($specialPrice,2,'.','.');
426
+ }else{
427
+ return number_format($price,2,'.','.');
428
+ }
429
+ }
430
+
431
+ public function setFile($xml){
432
+ $f = fopen('feed.xml', 'a+');
433
+ fwrite($f, $xml);
434
+ fclose($f);
435
+ }
436
+
437
+ }
438
+
439
+ ?>
app/code/community/Jefferson/Clickview/etc/config.xml ADDED
@@ -0,0 +1,299 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Academic Free License (AFL 3.0)
7
+ * that is bundled with this package in the file LICENSE_AFL.txt.
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/afl-3.0.php
10
+ * If you did not receive a copy of the license and are unable to
11
+ * obtain it through the world-wide-web, please send an email
12
+ * to license@magento.com so we can send you a copy immediately.
13
+ *
14
+ * @category Jefferson
15
+ * @package Jefferson_Clickview
16
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ *
19
+ */
20
+ -->
21
+
22
+ <config>
23
+
24
+ <modules>
25
+ <Jefferson_Clickview>
26
+ <version>0.1.0</version>
27
+ </Jefferson_Clickview>
28
+ </modules>
29
+
30
+ <frontend>
31
+
32
+ <layout>
33
+ <updates>
34
+ <Jefferson_Clickview>
35
+ <file>jefferson/jefferson_clickview.xml</file>
36
+ </Jefferson_Clickview>
37
+ </updates>
38
+ </layout>
39
+
40
+ <routers>
41
+ <clickview>
42
+ <use>standard</use>
43
+ <args>
44
+ <module>Jefferson_Clickview</module>
45
+ <frontName>clickview</frontName>
46
+ </args>
47
+ </clickview>
48
+ </routers>
49
+
50
+ <translate>
51
+ <modules>
52
+ <Jefferson_Clickview>
53
+ <files>
54
+ <default>jefferson_clickview.csv</default>
55
+ </files>
56
+ </Jefferson_Clickview>
57
+ </modules>
58
+ </translate>
59
+
60
+ <events>
61
+ <catalog_controller_product_view >
62
+ <observers>
63
+ <jefferson_clickview_model_observer>
64
+ <type>singleton</type>
65
+ <class>Jefferson_Clickview_Model_Observer</class>
66
+ <method>setExecuteClickview</method>
67
+ </jefferson_clickview_model_observer>
68
+ </observers>
69
+ </catalog_controller_product_view >
70
+
71
+ <catalog_product_compare_add_product>
72
+ <observers>
73
+ <jefferson_clickview_model_observer>
74
+ <type>singleton</type>
75
+ <class>Jefferson_Clickview_Model_Observer</class>
76
+ <method>setExecuteClickview</method>
77
+ </jefferson_clickview_model_observer>
78
+ </observers>
79
+ </catalog_product_compare_add_product>
80
+
81
+ <wishlist_add_product>
82
+ <observers>
83
+ <jefferson_clickview_model_observer>
84
+ <type>singleton</type>
85
+ <class>Jefferson_Clickview_Model_Observer</class>
86
+ <method>setExecuteClickview</method>
87
+ </jefferson_clickview_model_observer>
88
+ </observers>
89
+ </wishlist_add_product>
90
+
91
+ <checkout_cart_product_add_after>
92
+ <observers>
93
+ <jefferson_clickview_model_observer>
94
+ <type>singleton</type>
95
+ <class>Jefferson_Clickview_Model_Observer</class>
96
+ <method>setExecuteClickview</method>
97
+ </jefferson_clickview_model_observer>
98
+ </observers>
99
+ </checkout_cart_product_add_after>
100
+
101
+ </events>
102
+
103
+ </frontend>
104
+
105
+ <global>
106
+
107
+ <resources>
108
+ <jefferson_clickview_setup>
109
+ <setup>
110
+ <module>Jefferson_Clickview</module>
111
+ </setup>
112
+ </jefferson_clickview_setup>
113
+ </resources>
114
+
115
+ <blocks>
116
+ <clickview>
117
+ <class>Jefferson_Clickview_Block</class>
118
+ </clickview>
119
+ </blocks>
120
+
121
+ <helpers>
122
+ <clickview>
123
+ <class>Jefferson_Clickview_Helper</class>
124
+ </clickview>
125
+ </helpers>
126
+
127
+ <models>
128
+ <clickview>
129
+ <class>Jefferson_Clickview_Model</class>
130
+ </clickview>
131
+ </models>
132
+ </global>
133
+
134
+ <default>
135
+ <clickview_options>
136
+ <clickview_general>
137
+ <clickview_click_number_rows>16</clickview_click_number_rows>
138
+ <clickview_img_size>200</clickview_img_size>
139
+ <clickview_click_enabled>1</clickview_click_enabled>
140
+ </clickview_general>
141
+ </clickview_options>
142
+
143
+ <clickview_click_recents>
144
+ <clickview_click_recents_general>
145
+ <clickview_img_size>200</clickview_img_size>
146
+ <clickview_click_enabled>1</clickview_click_enabled>
147
+ </clickview_click_recents_general>
148
+ </clickview_click_recents>
149
+
150
+ <clickview_best_seller>
151
+ <clickview_best_seller_general>
152
+ <clickview_click_number_rows>16</clickview_click_number_rows>
153
+ <clickview_img_size>200</clickview_img_size>
154
+ <clickview_click_enabled>1</clickview_click_enabled>
155
+ </clickview_best_seller_general>
156
+ </clickview_best_seller>
157
+
158
+ <clickview_most_views>
159
+ <clickview_most_views_general>
160
+ <clickview_click_number_rows>16</clickview_click_number_rows>
161
+ <clickview_img_size>200</clickview_img_size>
162
+ <clickview_click_enabled>1</clickview_click_enabled>
163
+ </clickview_most_views_general>
164
+ </clickview_most_views>
165
+
166
+ <clickview_product_discount>
167
+ <clickview_products_discount_general>
168
+ <clickview_click_number_rows>16</clickview_click_number_rows>
169
+ <clickview_img_size>200</clickview_img_size>
170
+ <clickview_click_enabled>1</clickview_click_enabled>
171
+ </clickview_products_discount_general>
172
+ </clickview_product_discount>
173
+
174
+ <clickview_product_release>
175
+ <clickview_product_release_general>
176
+ <clickview_img_size>200</clickview_img_size>
177
+ <clickview_click_enabled>1</clickview_click_enabled>
178
+ </clickview_product_release_general>
179
+ </clickview_product_release>
180
+
181
+ <clickview_by_category>
182
+
183
+ <clickview_most_viewed_by_category>
184
+ <clickview_category_slidemargin>10</clickview_category_slidemargin>
185
+ <clickview_category_slidewidth>200</clickview_category_slidewidth>
186
+ <clickview_category_maxslider>1</clickview_category_maxslider>
187
+ <clickview_category_minslider>1</clickview_category_minslider>
188
+ <clickview_category_allowed></clickview_category_allowed>
189
+ <clickview_category_default></clickview_category_default>
190
+ <clickview_click_number_rows>16</clickview_click_number_rows>
191
+ <clickview_img_size>200</clickview_img_size>
192
+ <clickview_slide_mode>fade</clickview_slide_mode>
193
+ <clickview_click_enabled>1</clickview_click_enabled>
194
+ </clickview_most_viewed_by_category>
195
+
196
+ <clickview_best_seller_by_category>
197
+ <clickview_category_slidemargin>10</clickview_category_slidemargin>
198
+ <clickview_category_slidewidth>200</clickview_category_slidewidth>
199
+ <clickview_category_maxslider>1</clickview_category_maxslider>
200
+ <clickview_category_minslider>1</clickview_category_minslider>
201
+ <clickview_category_allowed></clickview_category_allowed>
202
+ <clickview_category_default></clickview_category_default>
203
+ <clickview_click_number_rows>16</clickview_click_number_rows>
204
+ <clickview_img_size>200</clickview_img_size>
205
+ <clickview_slide_mode>fade</clickview_slide_mode>
206
+ <clickview_click_enabled>1</clickview_click_enabled>
207
+ </clickview_best_seller_by_category>
208
+
209
+ <clickview_news_products_by_category>
210
+ <clickview_category_slidemargin>10</clickview_category_slidemargin>
211
+ <clickview_category_slidewidth>200</clickview_category_slidewidth>
212
+ <clickview_category_maxslider>1</clickview_category_maxslider>
213
+ <clickview_category_minslider>1</clickview_category_minslider>
214
+ <clickview_category_allowed></clickview_category_allowed>
215
+ <clickview_category_default></clickview_category_default>
216
+ <clickview_click_number_rows>16</clickview_click_number_rows>
217
+ <clickview_img_size>200</clickview_img_size>
218
+ <clickview_slide_mode>fade</clickview_slide_mode>
219
+ <clickview_click_enabled>1</clickview_click_enabled>
220
+ </clickview_news_products_by_category>
221
+
222
+ <clickview_products_promotion_by_category>
223
+ <clickview_category_slidemargin>10</clickview_category_slidemargin>
224
+ <clickview_category_slidewidth>200</clickview_category_slidewidth>
225
+ <clickview_category_maxslider>1</clickview_category_maxslider>
226
+ <clickview_category_minslider>1</clickview_category_minslider>
227
+ <clickview_category_allowed></clickview_category_allowed>
228
+ <clickview_category_default></clickview_category_default>
229
+ <clickview_click_number_rows>16</clickview_click_number_rows>
230
+ <clickview_img_size>200</clickview_img_size>
231
+ <clickview_slide_mode>fade</clickview_slide_mode>
232
+ <clickview_click_enabled>1</clickview_click_enabled>
233
+ </clickview_products_promotion_by_category>
234
+
235
+ </clickview_by_category>
236
+
237
+ </default>
238
+
239
+
240
+ <adminhtml>
241
+ <translate>
242
+ <modules>
243
+ <Jefferson_Clickview>
244
+ <files>
245
+ <default>jefferson_clickview.csv</default>
246
+ </files>
247
+ </Jefferson_Clickview>
248
+ </modules>
249
+ </translate>
250
+
251
+ <acl>
252
+ <resources>
253
+ <admin>
254
+ <children>
255
+ <system>
256
+ <children>
257
+ <config>
258
+ <children>
259
+
260
+ <clickview_options>
261
+ <title>Last click</title>
262
+ </clickview_options>
263
+
264
+ <clickview_click_recents>
265
+ <title>Click recents</title>
266
+ </clickview_click_recents>
267
+
268
+ <clickview_best_seller>
269
+ <title>Best Seller</title>
270
+ </clickview_best_seller>
271
+
272
+ <clickview_most_views>
273
+ <title>Most Viewed</title>
274
+ </clickview_most_views>
275
+
276
+ <clickview_by_category>
277
+ <title>Filter by category</title>
278
+ </clickview_by_category>
279
+
280
+ <clickview_product_discount>
281
+ <title>Products discount</title>
282
+ </clickview_product_discount>
283
+
284
+ <clickview_product_release>
285
+ <title>Products release</title>
286
+ </clickview_product_release>
287
+
288
+ </children>
289
+ </config>
290
+ </children>
291
+ </system>
292
+ </children>
293
+ </admin>
294
+ </resources>
295
+ </acl>
296
+
297
+ </adminhtml>
298
+
299
+ </config>
app/code/community/Jefferson/Clickview/etc/system.xml ADDED
@@ -0,0 +1,842 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * @category Jefferson
5
+ * @package Jefferson_Clickview
6
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
7
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
8
+ *
9
+ */
10
+ -->
11
+
12
+ <config>
13
+ <tabs>
14
+ <clickview translate="label" module="clickview">
15
+ <label>Top Home Store</label>
16
+ <sort_order>99999</sort_order>
17
+ </clickview>
18
+ </tabs>
19
+ <!--Click view click-->
20
+ <sections>
21
+ <clickview_options translate="label" module="clickview">
22
+ <label>Last click</label>
23
+ <tab>clickview</tab>
24
+ <frontend_type>text</frontend_type>
25
+ <sort_order>1000</sort_order>
26
+ <show_in_default>1</show_in_default>
27
+ <show_in_website>1</show_in_website>
28
+ <show_in_store>1</show_in_store>
29
+
30
+ <groups translate="label">
31
+
32
+ <clickview_general>
33
+ <label>General</label>
34
+ <frontend_type>text</frontend_type>
35
+ <sort_order>1</sort_order>
36
+ <show_in_default>1</show_in_default>
37
+ <show_in_website>1</show_in_website>
38
+ <show_in_store>1</show_in_store>
39
+
40
+ <fields>
41
+
42
+ <clickview_click_number_rows translate="label">
43
+ <label>Number in the results</label>
44
+ <frontend_type>text</frontend_type>
45
+ <sort_order>1</sort_order>
46
+ <show_in_default>1</show_in_default>
47
+ <show_in_website>1</show_in_website>
48
+ <show_in_store>1</show_in_store>
49
+ </clickview_click_number_rows>
50
+
51
+ <clickview_img_size>
52
+ <label>Product image size</label>
53
+ <frontend_type>text</frontend_type>
54
+ <sort_order>1</sort_order>
55
+ <show_in_default>1</show_in_default>
56
+ <show_in_website>1</show_in_website>
57
+ <show_in_store>1</show_in_store>
58
+ </clickview_img_size>
59
+
60
+ <clickview_click_enabled translate="label">
61
+ <label>Enabled</label>
62
+ <frontend_type>select</frontend_type>
63
+ <source_model>adminhtml/system_config_source_yesno</source_model>
64
+ <sort_order>1</sort_order>
65
+ <show_in_default>1</show_in_default>
66
+ <show_in_website>1</show_in_website>
67
+ <show_in_store>1</show_in_store>
68
+ </clickview_click_enabled>
69
+
70
+ </fields>
71
+
72
+ </clickview_general>
73
+
74
+ </groups>
75
+
76
+ </clickview_options>
77
+ </sections>
78
+
79
+ <!--Click view click recents-->
80
+ <sections>
81
+ <clickview_click_recents translate="label" module="clickview">
82
+ <label>Click recents</label>
83
+ <tab>clickview</tab>
84
+ <frontend_type>text</frontend_type>
85
+ <sort_order>1000</sort_order>
86
+ <show_in_default>1</show_in_default>
87
+ <show_in_website>1</show_in_website>
88
+ <show_in_store>1</show_in_store>
89
+
90
+ <groups translate="label">
91
+
92
+ <clickview_click_recents_general>
93
+ <label>General</label>
94
+ <frontend_type>text</frontend_type>
95
+ <sort_order>1</sort_order>
96
+ <show_in_default>1</show_in_default>
97
+ <show_in_website>1</show_in_website>
98
+ <show_in_store>1</show_in_store>
99
+
100
+ <fields>
101
+
102
+ <clickview_img_size>
103
+ <label>Product image size</label>
104
+ <frontend_type>text</frontend_type>
105
+ <sort_order>1</sort_order>
106
+ <show_in_default>1</show_in_default>
107
+ <show_in_website>1</show_in_website>
108
+ <show_in_store>1</show_in_store>
109
+ </clickview_img_size>
110
+
111
+ <clickview_click_enabled translate="label">
112
+ <label>Enabled</label>
113
+ <frontend_type>select</frontend_type>
114
+ <source_model>adminhtml/system_config_source_yesno</source_model>
115
+ <sort_order>1</sort_order>
116
+ <show_in_default>1</show_in_default>
117
+ <show_in_website>1</show_in_website>
118
+ <show_in_store>1</show_in_store>
119
+ </clickview_click_enabled>
120
+
121
+ </fields>
122
+
123
+ </clickview_click_recents_general>
124
+
125
+ </groups>
126
+
127
+ </clickview_click_recents>
128
+ </sections>
129
+
130
+ <!--Get the best-selling products-->
131
+ <sections>
132
+ <clickview_best_seller translate="label" module="clickview">
133
+ <label>Best Seller</label>
134
+ <tab>clickview</tab>
135
+ <frontend_type>text</frontend_type>
136
+ <sort_order>1000</sort_order>
137
+ <show_in_default>1</show_in_default>
138
+ <show_in_website>1</show_in_website>
139
+ <show_in_store>1</show_in_store>
140
+
141
+ <groups translate="label">
142
+
143
+ <clickview_best_seller_general>
144
+ <label>General</label>
145
+ <frontend_type>text</frontend_type>
146
+ <sort_order>1</sort_order>
147
+ <show_in_default>1</show_in_default>
148
+ <show_in_website>1</show_in_website>
149
+ <show_in_store>1</show_in_store>
150
+
151
+ <fields>
152
+
153
+ <clickview_click_number_rows translate="label">
154
+ <label>Number in the results</label>
155
+ <frontend_type>text</frontend_type>
156
+ <sort_order>1</sort_order>
157
+ <show_in_default>1</show_in_default>
158
+ <show_in_website>1</show_in_website>
159
+ <show_in_store>1</show_in_store>
160
+ </clickview_click_number_rows>
161
+
162
+ <clickview_img_size>
163
+ <label>Product image size</label>
164
+ <frontend_type>text</frontend_type>
165
+ <sort_order>1</sort_order>
166
+ <show_in_default>1</show_in_default>
167
+ <show_in_website>1</show_in_website>
168
+ <show_in_store>1</show_in_store>
169
+ </clickview_img_size>
170
+
171
+ <clickview_click_enabled translate="label">
172
+ <label>Enabled</label>
173
+ <frontend_type>select</frontend_type>
174
+ <source_model>adminhtml/system_config_source_yesno</source_model>
175
+ <sort_order>1</sort_order>
176
+ <show_in_default>1</show_in_default>
177
+ <show_in_website>1</show_in_website>
178
+ <show_in_store>1</show_in_store>
179
+ </clickview_click_enabled>
180
+
181
+ </fields>
182
+
183
+ </clickview_best_seller_general>
184
+
185
+ </groups>
186
+
187
+ </clickview_best_seller>
188
+ </sections>
189
+
190
+ <!--Get the most viewed products-->
191
+ <sections>
192
+ <clickview_most_views translate="label" module="clickview">
193
+ <label>Most Viewed</label>
194
+ <tab>clickview</tab>
195
+ <frontend_type>text</frontend_type>
196
+ <sort_order>1000</sort_order>
197
+ <show_in_default>1</show_in_default>
198
+ <show_in_website>1</show_in_website>
199
+ <show_in_store>1</show_in_store>
200
+
201
+ <groups translate="label">
202
+
203
+ <clickview_most_views_general>
204
+ <label>General</label>
205
+ <frontend_type>text</frontend_type>
206
+ <sort_order>1</sort_order>
207
+ <show_in_default>1</show_in_default>
208
+ <show_in_website>1</show_in_website>
209
+ <show_in_store>1</show_in_store>
210
+
211
+ <fields>
212
+
213
+ <clickview_click_number_rows translate="label">
214
+ <label>Number in the results</label>
215
+ <frontend_type>text</frontend_type>
216
+ <sort_order>1</sort_order>
217
+ <show_in_default>1</show_in_default>
218
+ <show_in_website>1</show_in_website>
219
+ <show_in_store>1</show_in_store>
220
+ </clickview_click_number_rows>
221
+
222
+ <clickview_img_size>
223
+ <label>Product image size</label>
224
+ <frontend_type>text</frontend_type>
225
+ <sort_order>1</sort_order>
226
+ <show_in_default>1</show_in_default>
227
+ <show_in_website>1</show_in_website>
228
+ <show_in_store>1</show_in_store>
229
+ </clickview_img_size>
230
+
231
+ <clickview_click_enabled translate="label">
232
+ <label>Enabled</label>
233
+ <frontend_type>select</frontend_type>
234
+ <source_model>adminhtml/system_config_source_yesno</source_model>
235
+ <sort_order>1</sort_order>
236
+ <show_in_default>1</show_in_default>
237
+ <show_in_website>1</show_in_website>
238
+ <show_in_store>1</show_in_store>
239
+ </clickview_click_enabled>
240
+
241
+ </fields>
242
+
243
+ </clickview_most_views_general>
244
+
245
+ </groups>
246
+
247
+ </clickview_most_views>
248
+ </sections>
249
+
250
+ <!--Products discount-->
251
+
252
+ <sections>
253
+ <clickview_product_discount translate="label" module="clickview">
254
+ <label>Products discount</label>
255
+ <tab>clickview</tab>
256
+ <frontend_type>text</frontend_type>
257
+ <sort_order>1000</sort_order>
258
+ <show_in_default>1</show_in_default>
259
+ <show_in_website>1</show_in_website>
260
+ <show_in_store>1</show_in_store>
261
+
262
+ <groups translate="label">
263
+
264
+ <clickview_products_discount_general>
265
+ <label>General</label>
266
+ <frontend_type>text</frontend_type>
267
+ <sort_order>1</sort_order>
268
+ <show_in_default>1</show_in_default>
269
+ <show_in_website>1</show_in_website>
270
+ <show_in_store>1</show_in_store>
271
+
272
+ <fields>
273
+
274
+ <clickview_click_number_rows translate="label">
275
+ <label>Number in the results</label>
276
+ <frontend_type>text</frontend_type>
277
+ <sort_order>1</sort_order>
278
+ <show_in_default>1</show_in_default>
279
+ <show_in_website>1</show_in_website>
280
+ <show_in_store>1</show_in_store>
281
+ </clickview_click_number_rows>
282
+
283
+ <clickview_img_size>
284
+ <label>Product image size</label>
285
+ <frontend_type>text</frontend_type>
286
+ <sort_order>1</sort_order>
287
+ <show_in_default>1</show_in_default>
288
+ <show_in_website>1</show_in_website>
289
+ <show_in_store>1</show_in_store>
290
+ </clickview_img_size>
291
+
292
+ <clickview_click_enabled translate="label">
293
+ <label>Enabled</label>
294
+ <frontend_type>select</frontend_type>
295
+ <source_model>adminhtml/system_config_source_yesno</source_model>
296
+ <sort_order>1</sort_order>
297
+ <show_in_default>1</show_in_default>
298
+ <show_in_website>1</show_in_website>
299
+ <show_in_store>1</show_in_store>
300
+ </clickview_click_enabled>
301
+
302
+ </fields>
303
+
304
+ </clickview_products_discount_general>
305
+
306
+ </groups>
307
+
308
+ </clickview_product_discount>
309
+ </sections>
310
+
311
+ <!--Products release-->
312
+
313
+ <sections>
314
+ <clickview_product_release translate="label" module="clickview">
315
+ <label>Products release</label>
316
+ <tab>clickview</tab>
317
+ <frontend_type>text</frontend_type>
318
+ <sort_order>1000</sort_order>
319
+ <show_in_default>1</show_in_default>
320
+ <show_in_website>1</show_in_website>
321
+ <show_in_store>1</show_in_store>
322
+
323
+ <groups translate="label">
324
+
325
+ <clickview_product_release_general>
326
+ <label>General</label>
327
+ <frontend_type>text</frontend_type>
328
+ <sort_order>1</sort_order>
329
+ <show_in_default>1</show_in_default>
330
+ <show_in_website>1</show_in_website>
331
+ <show_in_store>1</show_in_store>
332
+
333
+ <fields>
334
+ <clickview_img_size>
335
+ <label>Product image size</label>
336
+ <frontend_type>text</frontend_type>
337
+ <sort_order>1</sort_order>
338
+ <show_in_default>1</show_in_default>
339
+ <show_in_website>1</show_in_website>
340
+ <show_in_store>1</show_in_store>
341
+ </clickview_img_size>
342
+
343
+ <clickview_click_enabled translate="label">
344
+ <label>Enabled</label>
345
+ <frontend_type>select</frontend_type>
346
+ <source_model>adminhtml/system_config_source_yesno</source_model>
347
+ <sort_order>1</sort_order>
348
+ <show_in_default>1</show_in_default>
349
+ <show_in_website>1</show_in_website>
350
+ <show_in_store>1</show_in_store>
351
+ </clickview_click_enabled>
352
+
353
+ </fields>
354
+
355
+ </clickview_product_release_general>
356
+
357
+ </groups>
358
+
359
+ </clickview_product_release>
360
+ </sections>
361
+
362
+
363
+ <!---->
364
+
365
+ <!--Filter by category-->
366
+
367
+ <sections>
368
+ <clickview_by_category translate="label" module="clickview">
369
+ <label>Filter by category</label>
370
+ <tab>clickview</tab>
371
+ <frontend_type>text</frontend_type>
372
+ <sort_order>1000</sort_order>
373
+ <show_in_default>1</show_in_default>
374
+ <show_in_website>1</show_in_website>
375
+ <show_in_store>1</show_in_store>
376
+
377
+ <groups translate="label">
378
+
379
+ <clickview_most_viewed_by_category>
380
+ <label>Most viewed by category</label>
381
+ <frontend_type>text</frontend_type>
382
+ <sort_order>1</sort_order>
383
+ <show_in_default>1</show_in_default>
384
+ <show_in_website>1</show_in_website>
385
+ <show_in_store>1</show_in_store>
386
+
387
+ <fields>
388
+
389
+ <clickview_category_slidemargin>
390
+ <label>Margin of the slide</label>
391
+ <frontend_type>text</frontend_type>
392
+ <sort_order>1</sort_order>
393
+ <show_in_default>1</show_in_default>
394
+ <show_in_website>1</show_in_website>
395
+ <show_in_store>1</show_in_store>
396
+ </clickview_category_slidemargin>
397
+
398
+
399
+ <clickview_category_slidewidth>
400
+ <label>Maximum width of the slider</label>
401
+ <frontend_type>text</frontend_type>
402
+ <sort_order>1</sort_order>
403
+ <show_in_default>1</show_in_default>
404
+ <show_in_website>1</show_in_website>
405
+ <show_in_store>1</show_in_store>
406
+ </clickview_category_slidewidth>
407
+
408
+
409
+ <clickview_category_maxslider>
410
+ <label>Maximum amount slider</label>
411
+ <frontend_type>text</frontend_type>
412
+ <sort_order>1</sort_order>
413
+ <show_in_default>1</show_in_default>
414
+ <show_in_website>1</show_in_website>
415
+ <show_in_store>1</show_in_store>
416
+ </clickview_category_maxslider>
417
+
418
+ <clickview_category_minslider>
419
+ <label>Minimum amount slider</label>
420
+ <frontend_type>text</frontend_type>
421
+ <sort_order>1</sort_order>
422
+ <show_in_default>1</show_in_default>
423
+ <show_in_website>1</show_in_website>
424
+ <show_in_store>1</show_in_store>
425
+ </clickview_category_minslider>
426
+
427
+ <clickview_category_allowed>
428
+ <label>Select the categories allowed</label>
429
+ <frontend_type>multiselect</frontend_type>
430
+ <source_model>clickview/system_config_source_category</source_model>
431
+ <sort_order>1</sort_order>
432
+ <show_in_default>1</show_in_default>
433
+ <show_in_website>1</show_in_website>
434
+ <show_in_store>1</show_in_store>
435
+ </clickview_category_allowed>
436
+
437
+ <clickview_category_default>
438
+ <label>Select the default category</label>
439
+ <frontend_type>select</frontend_type>
440
+ <source_model>clickview/system_config_source_categoryallowed</source_model>
441
+ <sort_order>1</sort_order>
442
+ <show_in_default>1</show_in_default>
443
+ <show_in_website>1</show_in_website>
444
+ <show_in_store>1</show_in_store>
445
+ </clickview_category_default>
446
+
447
+ <clickview_click_number_rows translate="label">
448
+ <label>Number in the results</label>
449
+ <frontend_type>text</frontend_type>
450
+ <sort_order>1</sort_order>
451
+ <show_in_default>1</show_in_default>
452
+ <show_in_website>1</show_in_website>
453
+ <show_in_store>1</show_in_store>
454
+ <comment>Enter the number of products that will appear in the slider</comment>
455
+ </clickview_click_number_rows>
456
+
457
+ <clickview_img_size>
458
+ <label>Product image size</label>
459
+ <frontend_type>text</frontend_type>
460
+ <sort_order>1</sort_order>
461
+ <show_in_default>1</show_in_default>
462
+ <show_in_website>1</show_in_website>
463
+ <show_in_store>1</show_in_store>
464
+ <comment>Notify the image size of the product</comment>
465
+ </clickview_img_size>
466
+
467
+ <clickview_slide_mode>
468
+ <label>Select the default category</label>
469
+ <frontend_type>select</frontend_type>
470
+ <source_model>clickview/system_config_source_mode</source_model>
471
+ <sort_order>1</sort_order>
472
+ <show_in_default>1</show_in_default>
473
+ <show_in_website>1</show_in_website>
474
+ <show_in_store>1</show_in_store>
475
+ </clickview_slide_mode>
476
+
477
+ <clickview_click_enabled translate="label">
478
+ <label>Enabled</label>
479
+ <frontend_type>select</frontend_type>
480
+ <source_model>adminhtml/system_config_source_yesno</source_model>
481
+ <sort_order>0</sort_order>
482
+ <show_in_default>1</show_in_default>
483
+ <show_in_website>1</show_in_website>
484
+ <show_in_store>1</show_in_store>
485
+ <comment>Enabled/Disabled the function Click Recents</comment>
486
+ </clickview_click_enabled>
487
+
488
+
489
+ </fields>
490
+
491
+ </clickview_most_viewed_by_category>
492
+
493
+ <!--Best seller by categry-->
494
+
495
+ <clickview_best_seller_by_category>
496
+ <label>Best seller by category</label>
497
+ <frontend_type>text</frontend_type>
498
+ <sort_order>1</sort_order>
499
+ <show_in_default>1</show_in_default>
500
+ <show_in_website>1</show_in_website>
501
+ <show_in_store>1</show_in_store>
502
+
503
+ <fields>
504
+
505
+ <clickview_click_enabled translate="label">
506
+ <label>Enabled</label>
507
+ <frontend_type>select</frontend_type>
508
+ <source_model>adminhtml/system_config_source_yesno</source_model>
509
+ <sort_order>0</sort_order>
510
+ <show_in_default>1</show_in_default>
511
+ <show_in_website>1</show_in_website>
512
+ <show_in_store>1</show_in_store>
513
+ <comment>Enabled/Disabled the function Click Recents</comment>
514
+ </clickview_click_enabled>
515
+
516
+ <clickview_category_slidemargin>
517
+ <label>Margin of the slide</label>
518
+ <frontend_type>text</frontend_type>
519
+ <sort_order>1</sort_order>
520
+ <show_in_default>1</show_in_default>
521
+ <show_in_website>1</show_in_website>
522
+ <show_in_store>1</show_in_store>
523
+ </clickview_category_slidemargin>
524
+
525
+
526
+ <clickview_category_slidewidth>
527
+ <label>Maximum width of the slider</label>
528
+ <frontend_type>text</frontend_type>
529
+ <sort_order>1</sort_order>
530
+ <show_in_default>1</show_in_default>
531
+ <show_in_website>1</show_in_website>
532
+ <show_in_store>1</show_in_store>
533
+ </clickview_category_slidewidth>
534
+
535
+
536
+ <clickview_category_maxslider>
537
+ <label>Maximum amount slider</label>
538
+ <frontend_type>text</frontend_type>
539
+ <sort_order>1</sort_order>
540
+ <show_in_default>1</show_in_default>
541
+ <show_in_website>1</show_in_website>
542
+ <show_in_store>1</show_in_store>
543
+ </clickview_category_maxslider>
544
+
545
+ <clickview_category_minslider>
546
+ <label>Minimum amount slider</label>
547
+ <frontend_type>text</frontend_type>
548
+ <sort_order>1</sort_order>
549
+ <show_in_default>1</show_in_default>
550
+ <show_in_website>1</show_in_website>
551
+ <show_in_store>1</show_in_store>
552
+ </clickview_category_minslider>
553
+
554
+ <clickview_category_allowed>
555
+ <label>Select the categories allowed</label>
556
+ <frontend_type>multiselect</frontend_type>
557
+ <source_model>clickview/system_config_source_category</source_model>
558
+ <sort_order>1</sort_order>
559
+ <show_in_default>1</show_in_default>
560
+ <show_in_website>1</show_in_website>
561
+ <show_in_store>1</show_in_store>
562
+ </clickview_category_allowed>
563
+
564
+ <clickview_category_default>
565
+ <label>Select the default category</label>
566
+ <frontend_type>select</frontend_type>
567
+ <source_model>clickview/system_config_source_Categorybestsellerbycategory</source_model>
568
+ <sort_order>1</sort_order>
569
+ <show_in_default>1</show_in_default>
570
+ <show_in_website>1</show_in_website>
571
+ <show_in_store>1</show_in_store>
572
+ </clickview_category_default>
573
+
574
+ <clickview_click_number_rows translate="label">
575
+ <label>Number in the results</label>
576
+ <frontend_type>text</frontend_type>
577
+ <sort_order>1</sort_order>
578
+ <show_in_default>1</show_in_default>
579
+ <show_in_website>1</show_in_website>
580
+ <show_in_store>1</show_in_store>
581
+ <comment>Enter the number of products that will appear in the slider</comment>
582
+ </clickview_click_number_rows>
583
+
584
+ <clickview_img_size>
585
+ <label>Product image size</label>
586
+ <frontend_type>text</frontend_type>
587
+ <sort_order>1</sort_order>
588
+ <show_in_default>1</show_in_default>
589
+ <show_in_website>1</show_in_website>
590
+ <show_in_store>1</show_in_store>
591
+ <comment>Notify the image size of the product</comment>
592
+ </clickview_img_size>
593
+
594
+ <clickview_slide_mode>
595
+ <label>Select the default category</label>
596
+ <frontend_type>select</frontend_type>
597
+ <source_model>clickview/system_config_source_mode</source_model>
598
+ <sort_order>1</sort_order>
599
+ <show_in_default>1</show_in_default>
600
+ <show_in_website>1</show_in_website>
601
+ <show_in_store>1</show_in_store>
602
+ </clickview_slide_mode>
603
+
604
+ </fields>
605
+
606
+ </clickview_best_seller_by_category>
607
+
608
+ <!--News products by category-->
609
+
610
+ <clickview_news_products_by_category>
611
+ <label>News products by category</label>
612
+ <frontend_type>text</frontend_type>
613
+ <sort_order>1</sort_order>
614
+ <show_in_default>1</show_in_default>
615
+ <show_in_website>1</show_in_website>
616
+ <show_in_store>1</show_in_store>
617
+
618
+ <fields>
619
+
620
+ <clickview_click_enabled translate="label">
621
+ <label>Enabled</label>
622
+ <frontend_type>select</frontend_type>
623
+ <source_model>adminhtml/system_config_source_yesno</source_model>
624
+ <sort_order>0</sort_order>
625
+ <show_in_default>1</show_in_default>
626
+ <show_in_website>1</show_in_website>
627
+ <show_in_store>1</show_in_store>
628
+ <comment>Enabled/Disabled the function Click Recents</comment>
629
+ </clickview_click_enabled>
630
+
631
+ <clickview_category_slidemargin>
632
+ <label>Margin of the slide</label>
633
+ <frontend_type>text</frontend_type>
634
+ <sort_order>1</sort_order>
635
+ <show_in_default>1</show_in_default>
636
+ <show_in_website>1</show_in_website>
637
+ <show_in_store>1</show_in_store>
638
+ </clickview_category_slidemargin>
639
+
640
+
641
+ <clickview_category_slidewidth>
642
+ <label>Maximum width of the slider</label>
643
+ <frontend_type>text</frontend_type>
644
+ <sort_order>1</sort_order>
645
+ <show_in_default>1</show_in_default>
646
+ <show_in_website>1</show_in_website>
647
+ <show_in_store>1</show_in_store>
648
+ </clickview_category_slidewidth>
649
+
650
+
651
+ <clickview_category_maxslider>
652
+ <label>Maximum amount slider</label>
653
+ <frontend_type>text</frontend_type>
654
+ <sort_order>1</sort_order>
655
+ <show_in_default>1</show_in_default>
656
+ <show_in_website>1</show_in_website>
657
+ <show_in_store>1</show_in_store>
658
+ </clickview_category_maxslider>
659
+
660
+ <clickview_category_minslider>
661
+ <label>Minimum amount slider</label>
662
+ <frontend_type>text</frontend_type>
663
+ <sort_order>1</sort_order>
664
+ <show_in_default>1</show_in_default>
665
+ <show_in_website>1</show_in_website>
666
+ <show_in_store>1</show_in_store>
667
+ </clickview_category_minslider>
668
+
669
+ <clickview_category_allowed>
670
+ <label>Select the categories allowed</label>
671
+ <frontend_type>multiselect</frontend_type>
672
+ <source_model>clickview/system_config_source_category</source_model>
673
+ <sort_order>1</sort_order>
674
+ <show_in_default>1</show_in_default>
675
+ <show_in_website>1</show_in_website>
676
+ <show_in_store>1</show_in_store>
677
+ </clickview_category_allowed>
678
+
679
+ <clickview_category_default>
680
+ <label>Select the default category</label>
681
+ <frontend_type>select</frontend_type>
682
+ <source_model>clickview/system_config_source_Categorynewsproducts</source_model>
683
+ <sort_order>1</sort_order>
684
+ <show_in_default>1</show_in_default>
685
+ <show_in_website>1</show_in_website>
686
+ <show_in_store>1</show_in_store>
687
+ </clickview_category_default>
688
+
689
+ <clickview_click_number_rows translate="label">
690
+ <label>Number in the results</label>
691
+ <frontend_type>text</frontend_type>
692
+ <sort_order>1</sort_order>
693
+ <show_in_default>1</show_in_default>
694
+ <show_in_website>1</show_in_website>
695
+ <show_in_store>1</show_in_store>
696
+ <comment>Enter the number of products that will appear in the slider</comment>
697
+ </clickview_click_number_rows>
698
+
699
+ <clickview_img_size>
700
+ <label>Product image size</label>
701
+ <frontend_type>text</frontend_type>
702
+ <sort_order>1</sort_order>
703
+ <show_in_default>1</show_in_default>
704
+ <show_in_website>1</show_in_website>
705
+ <show_in_store>1</show_in_store>
706
+ <comment>Notify the image size of the product</comment>
707
+ </clickview_img_size>
708
+
709
+ <clickview_slide_mode>
710
+ <label>Select the default category</label>
711
+ <frontend_type>select</frontend_type>
712
+ <source_model>clickview/system_config_source_mode</source_model>
713
+ <sort_order>1</sort_order>
714
+ <show_in_default>1</show_in_default>
715
+ <show_in_website>1</show_in_website>
716
+ <show_in_store>1</show_in_store>
717
+ </clickview_slide_mode>
718
+
719
+ </fields>
720
+
721
+ </clickview_news_products_by_category>
722
+
723
+ <!--Products promotion by category-->
724
+
725
+ <clickview_products_promotion_by_category>
726
+ <label>Products promotion by category</label>
727
+ <frontend_type>text</frontend_type>
728
+ <sort_order>1</sort_order>
729
+ <show_in_default>1</show_in_default>
730
+ <show_in_website>1</show_in_website>
731
+ <show_in_store>1</show_in_store>
732
+
733
+ <fields>
734
+
735
+ <clickview_click_enabled translate="label">
736
+ <label>Enabled</label>
737
+ <frontend_type>select</frontend_type>
738
+ <source_model>adminhtml/system_config_source_yesno</source_model>
739
+ <sort_order>0</sort_order>
740
+ <show_in_default>1</show_in_default>
741
+ <show_in_website>1</show_in_website>
742
+ <show_in_store>1</show_in_store>
743
+ <comment>Enabled/Disabled the function Click Recents</comment>
744
+ </clickview_click_enabled>
745
+
746
+ <clickview_category_slidemargin>
747
+ <label>Margin of the slide</label>
748
+ <frontend_type>text</frontend_type>
749
+ <sort_order>1</sort_order>
750
+ <show_in_default>1</show_in_default>
751
+ <show_in_website>1</show_in_website>
752
+ <show_in_store>1</show_in_store>
753
+ </clickview_category_slidemargin>
754
+
755
+
756
+ <clickview_category_slidewidth>
757
+ <label>Maximum width of the slider</label>
758
+ <frontend_type>text</frontend_type>
759
+ <sort_order>1</sort_order>
760
+ <show_in_default>1</show_in_default>
761
+ <show_in_website>1</show_in_website>
762
+ <show_in_store>1</show_in_store>
763
+ </clickview_category_slidewidth>
764
+
765
+
766
+ <clickview_category_maxslider>
767
+ <label>Maximum amount slider</label>
768
+ <frontend_type>text</frontend_type>
769
+ <sort_order>1</sort_order>
770
+ <show_in_default>1</show_in_default>
771
+ <show_in_website>1</show_in_website>
772
+ <show_in_store>1</show_in_store>
773
+ </clickview_category_maxslider>
774
+
775
+ <clickview_category_minslider>
776
+ <label>Minimum amount slider</label>
777
+ <frontend_type>text</frontend_type>
778
+ <sort_order>1</sort_order>
779
+ <show_in_default>1</show_in_default>
780
+ <show_in_website>1</show_in_website>
781
+ <show_in_store>1</show_in_store>
782
+ </clickview_category_minslider>
783
+
784
+ <clickview_category_allowed>
785
+ <label>Select the categories allowed</label>
786
+ <frontend_type>multiselect</frontend_type>
787
+ <source_model>clickview/system_config_source_category</source_model>
788
+ <sort_order>1</sort_order>
789
+ <show_in_default>1</show_in_default>
790
+ <show_in_website>1</show_in_website>
791
+ <show_in_store>1</show_in_store>
792
+ </clickview_category_allowed>
793
+
794
+ <clickview_category_default>
795
+ <label>Select the default category</label>
796
+ <frontend_type>select</frontend_type>
797
+ <source_model>clickview/system_config_source_Categorypromotionproducts</source_model>
798
+ <sort_order>1</sort_order>
799
+ <show_in_default>1</show_in_default>
800
+ <show_in_website>1</show_in_website>
801
+ <show_in_store>1</show_in_store>
802
+ </clickview_category_default>
803
+
804
+ <clickview_click_number_rows translate="label">
805
+ <label>Number in the results</label>
806
+ <frontend_type>text</frontend_type>
807
+ <sort_order>1</sort_order>
808
+ <show_in_default>1</show_in_default>
809
+ <show_in_website>1</show_in_website>
810
+ <show_in_store>1</show_in_store>
811
+ <comment>Enter the number of products that will appear in the slider</comment>
812
+ </clickview_click_number_rows>
813
+
814
+ <clickview_img_size>
815
+ <label>Product image size</label>
816
+ <frontend_type>text</frontend_type>
817
+ <sort_order>1</sort_order>
818
+ <show_in_default>1</show_in_default>
819
+ <show_in_website>1</show_in_website>
820
+ <show_in_store>1</show_in_store>
821
+ <comment>Notify the image size of the product</comment>
822
+ </clickview_img_size>
823
+
824
+ <clickview_slide_mode>
825
+ <label>Select the default category</label>
826
+ <frontend_type>select</frontend_type>
827
+ <source_model>clickview/system_config_source_mode</source_model>
828
+ <sort_order>1</sort_order>
829
+ <show_in_default>1</show_in_default>
830
+ <show_in_website>1</show_in_website>
831
+ <show_in_store>1</show_in_store>
832
+ </clickview_slide_mode>
833
+
834
+ </fields>
835
+
836
+ </clickview_products_promotion_by_category>
837
+ </groups>
838
+
839
+ </clickview_by_category>
840
+ </sections>
841
+
842
+ </config>
app/code/community/Jefferson/Clickview/sql/jefferson_clickview_setup/install-0.1.0.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-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@magento.com so we can send you a copy immediately.
14
+ *
15
+ * @category Jefferson
16
+ * @package Jefferson_Clickview
17
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
18
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
19
+ *
20
+ */
21
+
22
+
23
+ $installer = Mage::getResourceModel('catalog/setup', 'core_setup');
24
+
25
+ $installer->startSetup();
26
+ $installer->endSetup();
27
+
28
+ ?>
app/design/frontend/base/default/layout/jefferson/jefferson_clickview.xml ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <!--
4
+ /**
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magento.com so we can send you a copy immediately.
15
+ *
16
+ * @category design
17
+ * @package base_default
18
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
19
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
20
+ *
21
+ */
22
+ -->
23
+
24
+ <layout version="0.1.0">
25
+
26
+
27
+ <default>
28
+
29
+ <reference name="head">
30
+
31
+ <action method="addItem"><type>skin_css</type><name>jefferson/Clickview/css/bxslider.css</name></action>
32
+
33
+ <action method="addItem"><type>skin_css</type><name>jefferson/Clickview/css/style.css</name></action>
34
+
35
+ <action method="addLinkRel"><rel>stylesheet</rel><href>//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css</href></action>
36
+
37
+ <action method="addItem"><type>skin_js</type><name>jefferson/Clickview/js/jquery.js</name></action>
38
+
39
+ <action method="addItem"><type>skin_js</type><name>jefferson/Clickview/js/bxslider.js</name></action>
40
+
41
+ <action method="addItem"><type>skin_js</type><name>jefferson/Clickview/js/script.js</name></action>
42
+
43
+ <block type="core/text" name="bootstrap.cdn">
44
+ <action method="setText">
45
+ <text><![CDATA[<script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>]]></text>
46
+ </action>
47
+
48
+ </block>
49
+
50
+ </reference>
51
+
52
+
53
+ </default>
54
+
55
+ <cms_index_index>
56
+ <reference name="content">
57
+ <remove name="home.reports.product.viewed" />
58
+ <remove name="home.reports.product.compared" />
59
+ <remove name="home.catalog.product.new" />
60
+
61
+ <!--Jefferson_Clickview_Block_Clickviewblock-->
62
+ <block type="clickview/clickviewblock" name="clickview" before="">
63
+ <action method="setTemplate" ifconfig="clickview_options/clickview_general/clickview_click_enabled">
64
+ <template>jefferson/clickview/clickview_template.phtml</template>
65
+ </action>
66
+ </block>
67
+
68
+ <!--Jefferson_Clickview_Block_Clickviewrecents-->
69
+ <block type="clickview/Clickviewrecents" name="product.viewed.recents" alias="product_viewed_recents" after="product_new">
70
+ <action method="addPriceBlockType">
71
+ <type>bundle</type>
72
+ <block>bundle/catalog_product_price</block>
73
+ <template>bundle/catalog/product/price.phtml</template>
74
+ </action>
75
+
76
+ <action method="setTemplate" ifconfig="clickview_click_recents/clickview_click_recents_general/clickview_click_enabled">
77
+ <template>jefferson/clickview/recents.phtml</template>
78
+ </action>
79
+ </block>
80
+
81
+ <!--Produtos mais vendidos-->
82
+ <block type="clickview/clickviewbestsellersblock" name="clickview.bestseller">
83
+ <action method="setTemplate" ifconfig="clickview_best_seller/clickview_best_seller_general/clickview_click_enabled">
84
+ <template>jefferson/clickview/bestseller.phtml</template>
85
+ </action>
86
+ </block>
87
+
88
+ <!--Produtos mais visualizados-->
89
+ <block type="clickview/clickviewmostviewedblock" name="clickview.mostviewed">
90
+ <action method="setTemplate" ifconfig="clickview_most_views/clickview_most_views_general/clickview_click_enabled">
91
+ <template>jefferson/clickview/mostviewed.phtml</template>
92
+ </action>
93
+ </block>
94
+
95
+ <!--Produtos filtrados por categorias-->
96
+ <block type="core/template" name="union" template="jefferson/clickview/union.phtml" />
97
+
98
+
99
+ <!--Baixaram de preço-->
100
+ <block type = "clickview/clickviewnewsproductsblock" name = "productsPromotion">
101
+ <action method="setTemplate" ifconfig="clickview_product_discount/clickview_products_discount_general/clickview_click_enabled">
102
+ <template>jefferson/clickview/products_discount.phtml</template>
103
+ </action>
104
+ </block>
105
+
106
+ <!--Novos produtos-->
107
+ <block type="catalog/product_new" name="productNew">
108
+ <action method="setTemplate" ifconfig="clickview_product_release/clickview_product_release_general/clickview_click_enabled">
109
+ <template>jefferson/clickview/newsproducts.phtml</template>
110
+ </action>
111
+ </block>
112
+
113
+
114
+
115
+ </reference>
116
+ </cms_index_index>
117
+
118
+
119
+
120
+ </layout>
app/design/frontend/base/default/template/jefferson/clickview/bestseller.phtml ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @category design
4
+ * @package base_default
5
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
6
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
7
+ *
8
+ */
9
+ ?>
10
+ <?php
11
+ /**
12
+ *@see Jefferson_Clickview_Block_Clickviewbestsellersblock
13
+ *
14
+ */
15
+ ?>
16
+ <?php
17
+
18
+ $num = $this->getClickCountRows();
19
+
20
+ $getImgSize = $this->getClickImgSize();
21
+
22
+ $_products = $this->getBestsellerProducts($num);
23
+
24
+ ?>
25
+
26
+
27
+ <div class="container clickview">
28
+ <div class="row">
29
+ <div class="col-md-12">
30
+ <h2 class="subtitle"><?php echo $this->__('The most sold...') ?></h2>
31
+ </div>
32
+ <div class="col-md-12">
33
+ <ul class="bxslider_clickview_best_selling">
34
+ <?php foreach($_products as $item){ ?>
35
+
36
+ <li>
37
+ <figure>
38
+
39
+ <a href="<?php echo $item->getProductUrl() ?>"
40
+ title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>" class="product-image">
41
+ <img src="<?php echo $this->helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($getImgSize, $getImgSize); ?>" />
42
+ </a>
43
+
44
+ <figcaption>
45
+
46
+ <a href="<?php echo $item->getProductUrl() ?>"
47
+ title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>"
48
+ class="product-image">
49
+ <?php echo $item->getName(); ?>
50
+ </a>
51
+
52
+ <?php echo $this->getPriceHtml($item, true) ?>
53
+
54
+ <div class="product-secondary">
55
+
56
+ <?php if(!$item->canConfigure() && $item->isSaleable()): ?>
57
+
58
+ <p class="action">
59
+ <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart"
60
+ onclick="setLocation('<?php echo $this->getAddToCartUrl($item) ?>')">
61
+ <span>
62
+ <span>
63
+ <?php echo $this->__('Add to Cart') ?>
64
+ </span>
65
+ </span>
66
+ </button>
67
+ </p>
68
+
69
+ <?php elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()): ?>
70
+
71
+ <p class="action">
72
+ <a title="<?php echo $this->__('View Details') ?>" class="button"
73
+ href="<?php echo $item->getProductUrl() ?>"><?php echo $this->__('View Details') ?>
74
+ </a>
75
+ </p>
76
+
77
+ <?php else: ?>
78
+
79
+ <p class="action availability out-of-stock">
80
+ <span><?php echo $this->__('Out of stock') ?></span>
81
+ </p>
82
+
83
+ <?php endif; ?>
84
+
85
+ </div>
86
+
87
+ </figcaption>
88
+
89
+ </figure>
90
+ </li>
91
+
92
+ <?php } ?>
93
+ </ul>
94
+ </div>
95
+ </div>
96
+ </div>
app/design/frontend/base/default/template/jefferson/clickview/bestsellerbycategory.phtml ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript">
2
+
3
+ $clickview(document).ready(function(){
4
+
5
+ var slider1 = $clickview('.bxslider_clickview_best_seller_by_category').bxSlider({
6
+
7
+ mode: '<?php echo $this->getBestSellerByCatMode() ?>',
8
+ minSlides: <?php echo $this->getMinSlides() ?>,
9
+ maxSlides: <?php echo $this->getMaxSlides() ?>,
10
+ slideWidth: <?php echo $this->getSlideWidth() ?>,
11
+ slideMargin: <?php echo $this->getSlideMargin() ?>
12
+
13
+ });
14
+
15
+ var formData1 = {
16
+ cat : '<?php echo $this->getCatDefault() ?>',
17
+ };
18
+
19
+ $clickview.ajax({
20
+
21
+ url: "<?php echo $this->getUrlControllerBestSellerByCategory() ?>",
22
+ type: "POST",
23
+ dataType: 'json',
24
+ cache : false,
25
+ data: formData1,
26
+ beforeSend: function(){
27
+ $clickview('.bxslider_clickview_best_seller_by_category').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
28
+ },
29
+ success : function(data2){
30
+ $clickview('.bxslider_clickview_best_seller_by_category').empty();
31
+ $clickview('.bxslider_clickview_best_seller_by_category').append(data2.content);
32
+ slider1.reloadSlider();
33
+ },
34
+
35
+ });
36
+
37
+ $clickview('.category_clickview_best_seller').change(function(){
38
+
39
+ var formData = {
40
+ cat : $clickview('.category_clickview_best_seller').val(),
41
+ };
42
+
43
+ $clickview.ajax({
44
+
45
+ url: "<?php echo $this->getUrlControllerBestSellerByCategory() ?>",
46
+ type: "POST",
47
+ dataType: 'json',
48
+ cache : false,
49
+ data: formData,
50
+ beforeSend: function(){
51
+ $clickview('.bxslider_clickview_best_seller_by_category').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>')
52
+ },
53
+ success : function(data2){
54
+ $clickview('.bxslider_clickview_best_seller_by_category').empty();
55
+ $clickview('.bxslider_clickview_best_seller_by_category').append(data2.content);
56
+ slider1.reloadSlider();
57
+ },
58
+
59
+ });
60
+
61
+ });
62
+ });
63
+
64
+ </script>
65
+
66
+
67
+ <div class="col-md-3">
68
+ <div class="info">
69
+ <h2 class="subtitle"><?php echo $this->__('Top sellers') ?></h2>
70
+ <select name="category_clickview_best_seller" class="category_clickview_best_seller form-control">
71
+ <?php echo $this->getCategoryBestSeller(); ?>
72
+ </select>
73
+ <ul class="bxslider_clickview_best_seller_by_category"></ul>
74
+ </div>
75
+ </div>
app/design/frontend/base/default/template/jefferson/clickview/clickview_template.phtml ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @category design
4
+ * @package base_default
5
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
6
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
7
+ *
8
+ */
9
+ ?>
10
+ <?php
11
+ /**
12
+ * Related products loop that was clicked
13
+ * @see Jefferson_Clickview_Block_Clickviewblock
14
+ *
15
+ */
16
+ ?>
17
+ <?php
18
+
19
+ /**
20
+ * Limits the query results
21
+ */
22
+ $limit = $this->getClickCountRows();
23
+
24
+ /**
25
+ * Product image size
26
+ */
27
+ $getImgSize = $this->getClickImgSize();
28
+
29
+ /**
30
+ * Get the id of the item that was clicked through the cookie
31
+ */
32
+ $cookie = $this->getCookie();
33
+
34
+ /**
35
+ * Get the categrias of the product that was clicked
36
+ */
37
+ $_categoryProducts = $this->getCategoryProducts($cookie);
38
+
39
+
40
+ /**
41
+ * Get the products product category that was clicked
42
+ */
43
+ $_products = $this->getDataProducts($cookie,$_categoryProducts,$limit);
44
+
45
+
46
+
47
+ ?>
48
+ <?php if(!empty($cookie)): ?>
49
+ <div class="container clickview">
50
+
51
+ <div class="row">
52
+ <div class="col-md-3">
53
+ <h2 class="subtitle">
54
+ <?php echo $this->__('You clicked...') ?>
55
+ </h2>
56
+ </div>
57
+
58
+ <div class="col-md-9">
59
+ <h2 class="subtitle">
60
+ <?php echo $this->__('and we recommend for you...'); ?>
61
+ </h2>
62
+ </div>
63
+
64
+ </div>
65
+ <div class="row">
66
+
67
+ <div class="col-md-3">
68
+ <?php
69
+ $item_current = $this->getDataProductCurrent($cookie);
70
+ ?>
71
+ <figure>
72
+
73
+ <a href="<?php echo $item_current->getProductUrl() ?>"
74
+ title="<?php echo $this->stripTags($this->getImageLabel($item_current, 'small_image'), null, true) ?>" class="product-image">
75
+ <img src="<?php echo $this->helper('catalog/image')->init($item_current, 'small_image')->keepFrame(false)->resize($getImgSize,$getImgSize); ?>" />
76
+ </a>
77
+
78
+ <figcaption>
79
+
80
+ <a href="<?php echo $item_current->getProductUrl() ?>"
81
+ title="<?php echo $this->stripTags($this->getImageLabel($item_current, 'small_image'), null, true) ?>"
82
+ class="product-image">
83
+ <?php echo $item_current->getName()."<br />"; ?>
84
+ </a>
85
+
86
+ <?php echo $this->getPriceHtml($item_current, true) ?>
87
+
88
+ <div class="product-secondary">
89
+
90
+ <?php if(!$item_current->canConfigure() && $item_current->isSaleable()): ?>
91
+
92
+ <p class="action">
93
+ <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart"
94
+ onclick="setLocation('<?php echo $this->getAddToCartUrl($item_current) ?>')">
95
+ <span>
96
+ <span>
97
+ <?php echo $this->__('Add to Cart') ?>
98
+ </span>
99
+ </span>
100
+ </button>
101
+ </p>
102
+
103
+ <?php elseif($item_current->getStockItem() && $item_current->getStockItem()->getIsInStock() && $item_current->isSaleable()): ?>
104
+
105
+ <p class="action">
106
+ <a title="<?php echo $this->__('View Details') ?>" class="button"
107
+ href="<?php echo $item_current->getProductUrl() ?>"><?php echo $this->__('View Details') ?>
108
+ </a>
109
+ </p>
110
+
111
+ <?php else: ?>
112
+
113
+ <p class="action availability out-of-stock">
114
+ <span><?php echo $this->__('Out of stock') ?></span>
115
+ </p>
116
+
117
+ <?php endif; ?>
118
+
119
+ </div>
120
+
121
+ </figcaption>
122
+
123
+ </figure>
124
+ </div>
125
+
126
+ <div class="col-md-9">
127
+ <ul class="bxslider_clickview">
128
+
129
+ <?php foreach($_products as $item){ ?>
130
+
131
+ <li>
132
+ <figure>
133
+
134
+ <a href="<?php echo $item->getProductUrl() ?>"
135
+ title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>" class="product-image">
136
+ <img src="<?php echo $this->helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($getImgSize); ?>" />
137
+ </a>
138
+
139
+ <figcaption>
140
+
141
+ <a href="<?php echo $item->getProductUrl() ?>"
142
+ title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>"
143
+ class="product-image">
144
+ <?php echo $item->getName()."<br />"; ?>
145
+ </a>
146
+
147
+ <?php echo $this->getPriceHtml($item, true) ?>
148
+
149
+ <div class="product-secondary">
150
+
151
+ <?php if(!$item->canConfigure() && $item->isSaleable()): ?>
152
+
153
+ <p class="action">
154
+ <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart"
155
+ onclick="setLocation('<?php echo $this->getAddToCartUrl($item) ?>')">
156
+ <span>
157
+ <span>
158
+ <?php echo $this->__('Add to Cart') ?>
159
+ </span>
160
+ </span>
161
+ </button>
162
+ </p>
163
+
164
+ <?php elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()): ?>
165
+
166
+ <p class="action">
167
+ <a title="<?php echo $this->__('View Details') ?>" class="button"
168
+ href="<?php echo $item->getProductUrl() ?>"><?php echo $this->__('View Details') ?>
169
+ </a>
170
+ </p>
171
+
172
+ <?php else: ?>
173
+
174
+ <p class="action availability out-of-stock">
175
+ <span><?php echo $this->__('Out of stock') ?></span>
176
+ </p>
177
+
178
+ <?php endif; ?>
179
+
180
+ </div>
181
+
182
+ </figcaption>
183
+
184
+ </figure>
185
+ </li>
186
+
187
+ <?php } ?>
188
+ </ul>
189
+ </div>
190
+
191
+ </div>
192
+ </div>
193
+ <?php endif; ?>
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
app/design/frontend/base/default/template/jefferson/clickview/mostviewed.phtml ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @category design
4
+ * @package base_default
5
+ * @author Jefferson Batista Porto <jefferson.b.porto@gmail.com>
6
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
7
+ *
8
+ */
9
+ ?>
10
+ <?php
11
+ /**
12
+ *@see Jefferson_Clickview_Block_Clickviewmostviewedblock
13
+ *
14
+ */
15
+ ?>
16
+ <?php
17
+
18
+ $num = $this->getClickCountRows();
19
+ $getImgSize = $this->getClickImgSize();
20
+ $_products = $this->getMostViewed($num);
21
+ ?>
22
+
23
+ <div class="container clickview">
24
+ <div class="row">
25
+ <div class="col-md-12">
26
+ <h2 class="subtitle"><?php echo $this->__('Most viewed...') ?></h2>
27
+ </div>
28
+ <div class="col-md-12">
29
+ <ul class="bxslider_clickview_best_selling">
30
+ <?php foreach($_products as $item){ ?>
31
+
32
+ <li>
33
+ <figure>
34
+
35
+ <a href="<?php echo $item->getProductUrl() ?>"
36
+ title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>" class="product-image">
37
+ <img src="<?php echo $this->helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($getImgSize,$getImgSize); ?>" />
38
+ </a>
39
+
40
+ <figcaption>
41
+
42
+ <a href="<?php echo $item->getProductUrl() ?>"
43
+ title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>"
44
+ class="product-image">
45
+ <?php echo $item->getName(); ?>
46
+ </a>
47
+
48
+ <?php echo $this->getPriceHtml($item, true) ?>
49
+
50
+ <div class="product-secondary">
51
+
52
+ <?php if(!$item->canConfigure() && $item->isSaleable()): ?>
53
+
54
+ <p class="action">
55
+ <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart"
56
+ onclick="setLocation('<?php echo $this->getAddToCartUrl($item) ?>')">
57
+ <span>
58
+ <span>
59
+ <?php echo $this->__('Add to Cart') ?>
60
+ </span>
61
+ </span>
62
+ </button>
63
+ </p>
64
+
65
+ <?php elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()): ?>
66
+
67
+ <p class="action">
68
+ <a title="<?php echo $this->__('View Details') ?>" class="button"
69
+ href="<?php echo $item->getProductUrl() ?>"><?php echo $this->__('View Details') ?>
70
+ </a>
71
+ </p>
72
+
73
+ <?php else: ?>
74
+
75
+ <p class="action availability out-of-stock">
76
+ <span><?php echo $this->__('Out of stock') ?></span>
77
+ </p>
78
+
79
+ <?php endif; ?>
80
+
81
+ </div>
82
+
83
+ </figcaption>
84
+
85
+ </figure>
86
+ </li>
87
+
88
+ <?php } ?>
89
+ </ul>
90
+ </div>
91
+ </div>
92
+ </div>
app/design/frontend/base/default/template/jefferson/clickview/mostviewedbycategory.phtml ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript">
2
+
3
+ $clickview(document).ready(function(){
4
+
5
+ var slider = $clickview('.bxslider_clickview_most_viewed_by_category').bxSlider({
6
+
7
+ mode: '<?php echo $this->getMostViewedByCatMode() ?>',
8
+ minSlides: <?php echo $this->getMinSlides() ?>,
9
+ maxSlides: <?php echo $this->getMaxSlides() ?>,
10
+ slideWidth: <?php echo $this->getSlideWidth() ?>,
11
+ slideMargin: <?php echo $this->getSlideMargin() ?>
12
+
13
+ });
14
+
15
+ var formData1 = {
16
+ cat : <?php echo $this->getCatDefault(); ?>,
17
+ };
18
+
19
+ $clickview.ajax({
20
+
21
+ url: "<?php echo $this->getUrlControllerMostViewedByCategory() ?>",
22
+ type: "POST",
23
+ dataType: 'json',
24
+ cache : false,
25
+ data: formData1,
26
+ beforeSend: function(){
27
+ $clickview('.bxslider_clickview_most_viewed_by_category').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
28
+ },
29
+ success : function(data2){
30
+ $clickview('.bxslider_clickview_most_viewed_by_category').empty();
31
+ $clickview('.bxslider_clickview_most_viewed_by_category').append(data2.content);
32
+ slider.reloadSlider();
33
+ },
34
+
35
+ });
36
+
37
+ $clickview('.category_clickview').change(function(){
38
+
39
+ var formData = {
40
+ cat : $clickview('.category_clickview').val(),
41
+ };
42
+
43
+ $clickview.ajax({
44
+
45
+ url: "<?php echo $this->getUrlControllerMostViewedByCategory() ?>",
46
+ type: "POST",
47
+ dataType: 'json',
48
+ cache : false,
49
+ data: formData,
50
+ beforeSend: function(){
51
+ $clickview('.bxslider_clickview_most_viewed_by_category').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
52
+ },
53
+ success : function(data2){
54
+ $clickview('.bxslider_clickview_most_viewed_by_category').empty();
55
+ $clickview('.bxslider_clickview_most_viewed_by_category').append(data2.content);
56
+ slider.reloadSlider();
57
+ },
58
+
59
+ });
60
+
61
+
62
+
63
+ });
64
+ });
65
+
66
+ </script>
67
+
68
+ <div class="col-md-3">
69
+ <div class="info">
70
+ <h2 class="subtitle"><?php echo $this->__('Most viewed') ?></h2>
71
+ <select name="category_clickview" class="category_clickview form-control">
72
+ <?php echo $this->getCategoryMostViewed(); ?>
73
+ </select>
74
+ <ul class="bxslider_clickview_most_viewed_by_category "></ul>
75
+ </div>
76
+ </div>
app/design/frontend/base/default/template/jefferson/clickview/newsproducts.phtml ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @category design
4
+ * @package base_default
5
+ * @copyright Copyright (c) 2006-2015 X.commerce, Inc. (http://www.magento.com)
6
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
7
+ */
8
+ ?>
9
+ <?php
10
+ $getImgSize = Mage::getStoreConfig('clickview_product_release/clickview_product_release_general/clickview_img_size');
11
+ ?>
12
+ <?php if (($_products = $this->getProductCollection()) && $_products->getSize()): ?>
13
+
14
+ <div class="container clickview">
15
+ <div class="row">
16
+ <div class="col-md-12">
17
+ <h2 class="subtitle"><?php echo $this->__('Releases') ?></h2>
18
+ </div>
19
+ <div class="col-md-12">
20
+ <ul class="bxslider_clickview_best_selling">
21
+ <?php foreach($_products as $item){ ?>
22
+
23
+ <li>
24
+ <figure>
25
+
26
+ <a href="<?php echo $item->getProductUrl() ?>"
27
+ title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>" class="product-image">
28
+ <img src="<?php echo $this->helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($getImgSize,$getImgSize); ?>" />
29
+ </a>
30
+
31
+ <span class="perc"> <?php echo $this->__('News') ?></span>;
32
+
33
+ <figcaption>
34
+
35
+ <a href="<?php echo $item->getProductUrl() ?>"
36
+ title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>"
37
+ class="product-image">
38
+ <?php echo $item->getName(); ?>
39
+ </a>
40
+
41
+ <?php echo $this->getPriceHtml($item, true) ?>
42
+
43
+ <div class="product-secondary">
44
+
45
+ <?php if(!$item->canConfigure() && $item->isSaleable()): ?>
46
+
47
+ <p class="action">
48
+ <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart"
49
+ onclick="setLocation('<?php echo $this->getAddToCartUrl($item) ?>')">
50
+ <span>
51
+ <span>
52
+ <?php echo $this->__('Add to Cart') ?>
53
+ </span>
54
+ </span>
55
+ </button>
56
+ </p>
57
+
58
+ <?php elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()): ?>
59
+
60
+ <p class="action">
61
+ <a title="<?php echo $this->__('View Details') ?>" class="button"
62
+ href="<?php echo $item->getProductUrl() ?>"><?php echo $this->__('View Details') ?>
63
+ </a>
64
+ </p>
65
+
66
+ <?php else: ?>
67
+
68
+ <p class="action availability out-of-stock">
69
+ <span><?php echo $this->__('Out of stock') ?></span>
70
+ </p>
71
+
72
+ <?php endif; ?>
73
+
74
+ </div>
75
+
76
+ </figcaption>
77
+
78
+ </figure>
79
+ </li>
80
+
81
+ <?php } ?>
82
+ </ul>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ <?php endif; ?>
app/design/frontend/base/default/template/jefferson/clickview/products_all_promotion.phtml ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <script type="text/javascript">
3
+
4
+ $clickview(document).ready(function(){
5
+
6
+ var sliderPromotion = $clickview('.bxslider_clickview_products_promotion').bxSlider({
7
+
8
+ mode: '<?php echo $this->getNewProductByCatMode()?>',
9
+ minSlides: <?php echo $this->getMinSlides() ?>,
10
+ maxSlides: <?php echo $this->getMaxSlides() ?>,
11
+ slideWidth: <?php echo $this->getSlideWidth() ?>,
12
+ slideMargin: <?php echo $this->getSlideMargin() ?>
13
+
14
+ });
15
+
16
+ var formDataPromotion = {
17
+ cat : '<?php echo $this->getCatDefault() ?>',
18
+ };
19
+
20
+ $clickview.ajax({
21
+
22
+ url: "<?php echo $this->getUrlControllerAllProductsPromotion() ?>",
23
+ type: "POST",
24
+ dataType: 'json',
25
+ cache : false,
26
+ data: formDataPromotion,
27
+ beforeSend: function(){
28
+ $clickview('.bxslider_clickview_products_promotion').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
29
+ },
30
+ success : function(data2){
31
+ $clickview('.bxslider_clickview_products_promotion').empty();
32
+ $clickview('.bxslider_clickview_products_promotion').append(data2.content);
33
+ sliderPromotion.reloadSlider();
34
+ },
35
+
36
+ });
37
+
38
+ $clickview('.category_clickview_products_promotion').change(function(){
39
+
40
+ var formDataPromotion = {
41
+ cat : $clickview('.category_clickview_products_promotion').val(),
42
+ };
43
+
44
+ $clickview.ajax({
45
+
46
+ url: "<?php echo $this->getUrlControllerAllProductsPromotion() ?>",
47
+ type: "POST",
48
+ dataType: 'json',
49
+ cache : false,
50
+ data: formDataPromotion,
51
+ beforeSend: function(){
52
+ $clickview('.bxslider_clickview_products_promotion').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
53
+ },
54
+ success : function(data2){
55
+ $clickview('.bxslider_clickview_products_promotion').empty();
56
+ $clickview('.bxslider_clickview_products_promotion').append(data2.content);
57
+ sliderPromotion.reloadSlider();
58
+ },
59
+
60
+ });
61
+
62
+
63
+
64
+ });
65
+ });
66
+
67
+ </script>
68
+
69
+
70
+ <div class="col-md-3">
71
+ <div class="info">
72
+ <h2 class="subtitle"><?php echo $this->__('Promotion') ?></h2>
73
+ <select name="category_clickview_products_promotion" class="category_clickview_products_promotion form-control">
74
+ <?php echo $this->getCategoryProductPromotion(); ?>
75
+ </select>
76
+ <ul class="bxslider_clickview_products_promotion"></ul>
77
+ </div>
78
+ </div>
app/design/frontend/base/default/template/jefferson/clickview/products_discount.phtml ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $getImgSize = $this->getDiscountImgSize();
3
+ $num = $this->getDiscountRows();
4
+ $_products = $this->getProductsDiscount($num);
5
+ ?>
6
+
7
+ <div class="container clickview">
8
+ <div class="row">
9
+ <div class="col-md-12">
10
+ <h2 class="subtitle"><?php echo $this->__('Price lowered') ?></h2>
11
+ </div>
12
+ <div class="col-md-12">
13
+ <ul class="bxslider_clickview_best_selling">
14
+ <?php foreach($_products as $item){ ?>
15
+
16
+ <li>
17
+ <figure>
18
+
19
+ <a href="<?php echo $item->getProductUrl() ?>"
20
+ title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>" class="product-image">
21
+ <img src="<?php echo $this->helper('catalog/image')->init($item, 'small_image')->keepFrame(true)->resize($getImgSize,$getImgSize); ?>" />
22
+ </a>
23
+
24
+ <?php if($item->getSpecialPrice() > 0 ): ?>
25
+ <span class="perc"> <?php echo $this->getPerc($item->getPrice(), $item->getSpecialPrice() ); ?></span>
26
+ <?php endif; ?>
27
+
28
+ <figcaption>
29
+
30
+ <a href="<?php echo $item->getProductUrl() ?>"
31
+ title="<?php echo $this->stripTags($this->getImageLabel($item, 'small_image'), null, true) ?>"
32
+ class="product-image">
33
+ <?php echo $item->getName(); ?>
34
+ </a>
35
+
36
+ <?php echo $this->getPriceHtml($item, true) ?>
37
+
38
+ <div class="product-secondary">
39
+
40
+ <?php if(!$item->canConfigure() && $item->isSaleable()): ?>
41
+
42
+ <p class="action">
43
+ <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart"
44
+ onclick="setLocation('<?php echo $this->getAddToCartUrl($item) ?>')">
45
+ <span>
46
+ <span>
47
+ <?php echo $this->__('Add to Cart') ?>
48
+ </span>
49
+ </span>
50
+ </button>
51
+ </p>
52
+
53
+ <?php elseif($item->getStockItem() && $item->getStockItem()->getIsInStock()): ?>
54
+
55
+ <p class="action">
56
+ <a title="<?php echo $this->__('View Details') ?>" class="button"
57
+ href="<?php echo $item->getProductUrl() ?>"><?php echo $this->__('View Details') ?>
58
+ </a>
59
+ </p>
60
+
61
+ <?php else: ?>
62
+
63
+ <p class="action availability out-of-stock">
64
+ <span><?php echo $this->__('Out of stock') ?></span>
65
+ </p>
66
+
67
+ <?php endif; ?>
68
+
69
+ </div>
70
+
71
+ </figcaption>
72
+
73
+ </figure>
74
+ </li>
75
+
76
+ <?php } ?>
77
+ </ul>
78
+ </div>
79
+ </div>
80
+ </div>
app/design/frontend/base/default/template/jefferson/clickview/products_new_by_category.phtml ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript">
2
+
3
+ $clickview(document).ready(function(){
4
+
5
+ var sliderNews = $clickview('.bxslider_clickview_new_product_by_category').bxSlider({
6
+
7
+ mode: '<?php echo $this->getNewProductByCatMode() ?>',
8
+ minSlides: <?php echo $this->getMinSlides() ?>,
9
+ maxSlides: <?php echo $this->getMaxSlides() ?>,
10
+ slideWidth: <?php echo $this->getSlideWidth() ?>,
11
+ slideMargin: <?php echo $this->getSlideMargin() ?>
12
+
13
+ });
14
+
15
+ var formDataNews = {
16
+ cat : '<?php echo $this->getCatDefault() ?>',
17
+ };
18
+
19
+ $clickview.ajax({
20
+
21
+ url: "<?php echo $this->getUrlControllerNewsProductsByCategory() ?>",
22
+ type: "POST",
23
+ dataType: 'json',
24
+ cache : false,
25
+ data: formDataNews,
26
+ beforeSend: function(){
27
+ $clickview('.bxslider_clickview_new_product_by_category').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
28
+ },
29
+ success : function(data2){
30
+ $clickview('.bxslider_clickview_new_product_by_category').empty();
31
+ $clickview('.bxslider_clickview_new_product_by_category').append(data2.content);
32
+ sliderNews.reloadSlider();
33
+ },
34
+
35
+ });
36
+
37
+ $clickview('.category_clickview_new_product').change(function(){
38
+
39
+ var formDataNews = {
40
+ cat : $clickview('.category_clickview_new_product').val(),
41
+ };
42
+
43
+ $clickview.ajax({
44
+
45
+ url: "<?php echo $this->getUrlControllerNewsProductsByCategory() ?>",
46
+ type: "POST",
47
+ dataType: 'json',
48
+ cache : false,
49
+ data: formDataNews,
50
+ beforeSend: function(){
51
+ $clickview('.bxslider_clickview_new_product_by_category').append('<li><img src="<?php echo Mage::getBaseUrl() ?>/skin/frontend/base/default/jefferson/Clickview/image/loading.gif" /></li>');
52
+ },
53
+ success : function(data2){
54
+ $clickview('.bxslider_clickview_new_product_by_category').empty();
55
+ $clickview('.bxslider_clickview_new_product_by_category').append(data2.content);
56
+ sliderNews.reloadSlider();
57
+ },
58
+
59
+ });
60
+
61
+
62
+
63
+ });
64
+ });
65
+
66
+ </script>
67
+
68
+
69
+ <div class="col-md-3">
70
+ <div class="info">
71
+ <h2 class="subtitle"><?php echo $this->__('News') ?></h2>
72
+ <select name="category_clickview_new_product" class="category_clickview_new_product form-control">
73
+ <?php echo $this->getCategoryNewProduct(); ?>
74
+ </select>
75
+ <ul class="bxslider_clickview_new_product_by_category"></ul>
76
+ </div>
77
+ </div>
app/design/frontend/base/default/template/jefferson/clickview/recents.phtml ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-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@magento.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.magento.com for more information.
20
+ *
21
+ * @category design
22
+ * @package base_default
23
+ * @copyright Copyright (c) 2006-2015 X.commerce, Inc. (http://www.magento.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ /* @var $this Jefferson_Clickview_Block_Clickviewrecents */
27
+ ?>
28
+ <?php
29
+ $getImgSize = $this->getClickImgSize();
30
+ ?>
31
+
32
+
33
+ <?php
34
+ /**
35
+ * @see Jefferson_Clickview_Block_Clickviewrecents
36
+ */
37
+ ?>
38
+
39
+ <div class="container clickview">
40
+ <div class="row">
41
+ <div class="col-md-12">
42
+ <?php if ($_products = $this->getRecentlyViewedProducts()): ?>
43
+
44
+ <h2 class="subtitle">
45
+ <?php echo $this->__('Their recent clicks...') ?>
46
+ </h2>
47
+
48
+ <ul class="bxslider_clickview_recents">
49
+
50
+ <?php foreach ($_products as $_product): ?>
51
+
52
+ <li>
53
+ <a href="<?php echo $this->getProductUrl($_product) ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"
54
+ class="product-image">
55
+ <img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->keepFrame(true)->resize($getImgSize,$getImgSize) ?>"
56
+ alt="<?php echo $this->stripTags($_product->getName(), null, true) ?>" />
57
+ </a>
58
+
59
+ <h3 class="product-name">
60
+ <a href="<?php echo $this->getProductUrl($_product) ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>">
61
+ <?php echo $this->helper('catalog/output')->productAttribute($_product, $_product->getName() , 'name') ?>
62
+ </a>
63
+ </h3>
64
+
65
+ <?php echo $this->getReviewsSummaryHtml($_product, 'short') ?>
66
+
67
+ <?php echo $this->getPriceHtml($_product, true, '-home-viewed') ?>
68
+
69
+ <div class="actions">
70
+ <?php if($_product->isSaleable()): ?>
71
+
72
+ <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')">
73
+ <span>
74
+ <span>
75
+ <?php echo $this->__('Add to Cart') ?>
76
+ </span>
77
+ </span>
78
+ </button>
79
+
80
+ <?php else: ?>
81
+
82
+ <p class="availability out-of-stock">
83
+ <span>
84
+ <?php echo $this->__('Out of stock') ?>
85
+ </span>
86
+ </p>
87
+
88
+ <?php endif; ?>
89
+
90
+ </div>
91
+
92
+ </li>
93
+
94
+ <?php endforeach; ?>
95
+
96
+ </ul>
97
+
98
+ <?php endif; ?>
99
+ </div>
100
+ </div>
101
+ </div>
app/design/frontend/base/default/template/jefferson/clickview/union.phtml ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="container clickview clickview_by_category">
2
+ <div class="container">
3
+ <div class="row">
4
+ <?php
5
+ //The most-viewed products by category
6
+ $obj1 = $this->getLayout()->createBlock('clickview/clickviewmostviewedbycategoryblock');
7
+ if($obj1->getMostViewedByCatEnabled() == 1):
8
+ echo $obj1->setTemplate('jefferson/clickview/mostviewedbycategory.phtml')->toHtml();
9
+ endif;
10
+ ?>
11
+
12
+ <?php
13
+
14
+ //Top-selling products by category
15
+ $obj2 = $this->getLayout()->createBlock('clickview/clickviewbestsellerbycategoryblock');
16
+ if($obj2->getBestSellerByCatEnabled() == 1):
17
+ echo $obj2->setTemplate('jefferson/clickview/bestsellerbycategory.phtml')->toHtml();
18
+ endif;
19
+ ?>
20
+
21
+ <?php
22
+
23
+ //New products by category
24
+ $obj3 = $this->getLayout()->createBlock('clickview/clickviewnewsproductsblock');
25
+ if($obj3->getNewProductByCatEnabled() == 1):
26
+ echo $obj3->setTemplate('jefferson/clickview/products_new_by_category.phtml')->toHtml();
27
+ endif;
28
+ ?>
29
+
30
+ <?php
31
+
32
+ //Products on promotion by category
33
+ $obj4 = $this->getLayout()->createBlock('clickview/clickviewproductspromotionblock');
34
+ if($obj4->getNewProductByCatEnabled() == 1):
35
+ echo $obj4->setTemplate('jefferson/clickview/products_all_promotion.phtml')->toHtml();
36
+ endif;
37
+ ?>
38
+ </div>
39
+
40
+ </div>
41
+ </div>
app/etc/modules/Jefferson_Clickview.xml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Jefferson_Clickview>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ <version>0.1.0</version>
8
+ </Jefferson_Clickview>
9
+ </modules>
10
+ </config>
app/locale/pt_BR/jefferson_clickview.csv ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "You clicked...","You clicked..."
2
+ "and we recommend for you...","and we recommend for you..."
3
+ "Their recent clicks...","Their recent clicks..."
4
+ "The most sold...","The most sold..."
5
+ "Most viewed...","Most viewed..."
6
+ "Top sellers","Top sellers"
7
+ "Most viewed","Most viewed"
8
+ "Releases","Releases"
9
+ "Promotion","Promotion"
10
+ "Price lowered","Price lowered"
11
+ "News","News"
12
+ "Last click","Last click"
13
+ "Number in the results","Number in the results"
14
+ "Product image size","Product image size"
15
+ "Notify the image size of the product","Notify the image size of the product"
16
+ "Best Seller","Best Seller"
17
+ "Most Viewed","Most Viewed"
18
+ "Products discount","Products discount"
19
+ "Filter by category","Filter by category"
20
+ "Most viewed by category","Most viewed by category"
21
+ "Margin of the slide","Margin of the slide"
22
+ "Maximum width of the slider","Maximum width of the slider"
23
+ "Maximum amount slider","Maximum amount slider"
24
+ "Minimum amount slider","Minimum amount slider"
25
+ "Select the categories allowed","Select the categories allowed"
26
+ "Select the default category","Select the default category"
27
+ "Number in the results","Number in the results"
28
+ "Best seller by category","Best seller by category"
29
+ "News products by category","News products by category"
30
+ "Products promotion by category","Products promotion by category"
31
+ "Enabled","Enabled"
package.xml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Jefferson_Clickview</name>
4
+ <version>0.1.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/OSL-3.0">Open Software License v. 3.0 (OSL-3.0)</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>A new look at &amp;quot;Home&amp;quot; of your store with Top Home Store, increase your sales</summary>
10
+ <description>A new look for your store with Top Home Store, increase your sales conversion making the functional user navigation, with Top Home Store, let your store more appealing to its users, show your users with the product in promotion, news, bestsellers, recent clicks and display click related products with Top Home Store you can he get the results mentioned above by filtering for each category. You retailer has the option to choose which categories can be filtered by the user, enable only the features that interest you and more of a new face to your store with Top Home Store.</description>
11
+ <notes>Technologies used to build the module: php, jquery, html, css, Bootstrap, modules compatible with Magento version 1.7 onward</notes>
12
+ <authors><author><name>Jefferson Batista Porto</name><user>fdsa451</user><email>jefferson.b.porto@gmail.com</email></author></authors>
13
+ <date>2015-08-16</date>
14
+ <time>18:39:04</time>
15
+ <contents><target name="magecommunity"><dir name="Jefferson"><dir name="Clickview"><dir name="Block"><file name="Clickviewbestsellerbycategoryblock.php" hash="25bcb2637e01516401313ab53dc6780c"/><file name="Clickviewbestsellersblock.php" hash="fc3321f2a8134d2e94f4a12489329bca"/><file name="Clickviewblock.php" hash="6abae3caed79df9fe3bc9698850253a0"/><file name="Clickviewmostviewedblock.php" hash="b821224b3e904f1dfb694ceb6fa684a1"/><file name="Clickviewmostviewedbycategoryblock.php" hash="d7aa10e2ef69e37dc23bc0416c2ae2c9"/><file name="Clickviewnewsproductsblock.php" hash="a24f62577b0c47877b5d6406bf354318"/><file name="Clickviewproductspromotionblock.php" hash="b9da6d7a10591c2539e2edd64974433e"/><file name="Clickviewrecents.php" hash="cc5e7f3fd6df907920628110fce99ea8"/></dir><dir name="Helper"><file name="Data.php" hash="db5fec2a366116d4aaa2f6df4fa1e373"/></dir><dir name="Model"><file name="Clickviewbestsellerbycategorymodel.php" hash="0f68ffb78761a1c8aec3d4bd2439f3f7"/><file name="Clickviewbestsellersmodel.php" hash="015b28819ddb0c1b0704008f8b287093"/><file name="Clickviewmodel.php" hash="52cccf9902d85b0d8a8a74e0cada601a"/><file name="Clickviewmostviewedbycategorymodel.php" hash="053d9e7c0ca15876d2bae68242760941"/><file name="Clickviewmostviewedmodel.php" hash="4027dfd7ce7d9d0d8e3020b1cc31159c"/><file name="Observer.php" hash="d5c2ba687b4874b817a6544aa92f26df"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Category.php" hash="bebbe28ec9124e754bdde82c6723deff"/><file name="Categoryallowed.php" hash="7d1d52db12000dad3159694e7d1d25dc"/><file name="Categorybestsellerbycategory.php" hash="b5be7a5b5aca876278039d6c5ec57c35"/><file name="Categorynewsproducts.php" hash="68af05b6f6b42291cc554f1a05a98ada"/><file name="Categorypromotionproducts.php" hash="d3c85ad367f2d48c9be9d6194eb7ed78"/><file name="Mode.php" hash="c732297289d1f2d10d3d51c4a6792e09"/></dir></dir></dir></dir><dir name="controllers"><file name="IndexController.php" hash="ee6be9d81c06b5ada17dc0de9031cd36"/></dir><dir name="etc"><file name="config.xml" hash="3bd6069ec32be6a1624a8c6af1f6f369"/><file name="system.xml" hash="774a9fdeeee58960ea6b40d75780831c"/></dir><dir name="sql"><dir name="jefferson_clickview_setup"><file name="install-0.1.0.php" hash="49d40128d6bb7c8f30e868fcd198fbb4"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Jefferson_Clickview.xml" hash="6a3e062c2fe7e70587000c5adc8901a5"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="jefferson"><file name="jefferson_clickview.xml" hash="27000a35ea320d328ae4ebf594046d77"/></dir></dir><dir name="template"><dir name="jefferson"><dir name="clickview"><file name="bestseller.phtml" hash="e1eee56a45b3798a657d1ca643739026"/><file name="bestsellerbycategory.phtml" hash="b4f8e670dd2f49cbc5ee89f298575c7e"/><file name="clickview_template.phtml" hash="c1a78ce739707ee6a94383dd9f592936"/><file name="mostviewed.phtml" hash="b2b88fdb86001ade4d6e21b20896e54e"/><file name="mostviewedbycategory.phtml" hash="75e4fc7dce2f0c0d84eb5212da9492bd"/><file name="newsproducts.phtml" hash="8a3f5982508760d51c38025930805243"/><file name="products_all_promotion.phtml" hash="86b6cec4a1f7c5ea427539d91b178b2a"/><file name="products_discount.phtml" hash="78fb35f4445c218741fcb700ecfaec85"/><file name="products_new_by_category.phtml" hash="083e0f82af2d9f44d2a0c3c66d3f5156"/><file name="recents.phtml" hash="17ac128b65cef52ab2cdc21e2bab0e9a"/><file name="union.phtml" hash="ebde22ef0c62e47db7fa2eccdf6c7ebb"/></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir><dir name="pt_BR"><file name="jefferson_clickview.csv" hash="d92519f5537fe6ef674b053ab54f6b16"/></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="jefferson"><dir name="Clickview"><dir name="css"><file name="bxslider.css" hash="f74f7a7073563c0f3b42357057b8c0b2"/><file name="style.css" hash="87ee9efd8916894a5766bec424d24b56"/></dir><dir name="image"><file name="loading.gif" hash="1a01d0c9387d131090ff88f8d24b9bc2"/></dir><dir name="js"><file name="bxslider.js" hash="fe2e161344ab5535b98d4a58596fb2b0"/><file name="jquery.js" hash="628072e7212db1e8cdacb22b21752cda"/><file name="script.js" hash="b01b5ab109f4148552cea5ded88ce2a7"/></dir></dir></dir></dir></dir></dir></target></contents>
16
+ <compatible/>
17
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
18
+ </package>
skin/frontend/base/default/jefferson/Clickview/css/bxslider.css ADDED
@@ -0,0 +1,297 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * BxSlider v4.1.2 - Fully loaded, responsive content slider
3
+ * http://bxslider.com
4
+ *
5
+ * Written by: Steven Wanderski, 2014
6
+ * http://stevenwanderski.com
7
+ * (while drinking Belgian ales and listening to jazz)
8
+ *
9
+ * CEO and founder of bxCreative, LTD
10
+ * http://bxcreative.com
11
+ */
12
+
13
+
14
+ /** RESET AND LAYOUT
15
+ ===================================*/
16
+
17
+ @media(max-width:768px){
18
+ .container_img_bx {
19
+ width: 100% !important;
20
+ }
21
+
22
+ .container_info_bx {
23
+ width: 100% !important;
24
+ word-wrap:break-word;
25
+ }
26
+
27
+ .bx-wrapper li img {
28
+ float: none !important;
29
+ text-align: center !important;
30
+ margin: 0 auto !important;
31
+ }
32
+
33
+ .perc {
34
+ float: none !important;
35
+ margin: 10px auto !important;
36
+ }
37
+ }
38
+
39
+ .container_info_bx {
40
+ float: right;
41
+ display: inline-block;
42
+ width: 50%;
43
+ }
44
+
45
+ .container_img_bx {
46
+ float: left;
47
+ width: 48%;
48
+ }
49
+
50
+ .perc {
51
+ border-radius: 5%;
52
+ width: 55px;
53
+ height: 25px;
54
+ background: #3399CC;
55
+ text-align: left;
56
+ line-height: 25px;
57
+ color: #fff;
58
+ display: inline-block;
59
+ padding: 0 8px;
60
+ font-weight: bold;
61
+ font-size: 13px;
62
+ top: 10px;
63
+ right: 10px;
64
+ position: absolute;
65
+ }
66
+
67
+ .product-cta {
68
+ text-align: center;
69
+ background: #3399CC;
70
+ color: #fff;
71
+ padding: 10px 11px;
72
+ font-size: 18px;
73
+ border-radius: 5%;
74
+ top: 15px;
75
+ display: inline-block;
76
+ width: 190px;
77
+ font-weight: bold;
78
+ }
79
+
80
+ .bx-wrapper {
81
+ position: relative;
82
+ margin: 0 auto 60px;
83
+ padding: 0;
84
+ *zoom: 1;
85
+ }
86
+
87
+ .bx-wrapper img {
88
+ max-width: 100%;
89
+ display: block;
90
+ }
91
+
92
+ /** THEME
93
+ ===================================*/
94
+
95
+ .clickview_by_category .bx-wrapper img,
96
+ .clickview_by_category .bx-wrapper a {
97
+ width: 100%;
98
+ float: none;
99
+ margin: 0 auto;
100
+ }
101
+
102
+ .bx-wrapper img,
103
+ .bx-wrapper a {
104
+ border: none;
105
+ }
106
+
107
+ .bx-wrapper .bx-viewport {
108
+ /*-moz-box-shadow: 0 0 5px #ccc;*/
109
+ /*-webkit-box-shadow: 0 0 5px #ccc;*/
110
+ /*box-shadow: 0 0 5px #ccc;*/
111
+ /*border: 5px solid #fff;*/
112
+ left: -5px;
113
+ background: #fff;
114
+
115
+ /*fix other elements on the page moving (on Chrome)*/
116
+ -webkit-transform: translatez(0);
117
+ -moz-transform: translatez(0);
118
+ -ms-transform: translatez(0);
119
+ -o-transform: translatez(0);
120
+ transform: translatez(0);
121
+ }
122
+
123
+ .bx-wrapper .bx-pager,
124
+ .bx-wrapper .bx-controls-auto {
125
+ position: absolute;
126
+ bottom: -30px;
127
+ width: 100%;
128
+ }
129
+
130
+ /* LOADER */
131
+
132
+ .bx-wrapper .bx-loading {
133
+ min-height: 50px;
134
+ background: url(images/bx_loader.gif) center center no-repeat #fff;
135
+ height: 100%;
136
+ width: 100%;
137
+ position: absolute;
138
+ top: 0;
139
+ left: 0;
140
+ z-index: 2000;
141
+ }
142
+
143
+ /* PAGER */
144
+
145
+ .bx-wrapper .bx-pager {
146
+ text-align: center;
147
+ font-size: .85em;
148
+ font-family: Arial;
149
+ font-weight: bold;
150
+ color: #666;
151
+ padding-top: 20px;
152
+ }
153
+
154
+ .bx-wrapper .bx-pager .bx-pager-item,
155
+ .bx-wrapper .bx-controls-auto .bx-controls-auto-item {
156
+ display: inline-block;
157
+ *zoom: 1;
158
+ *display: inline;
159
+ }
160
+
161
+ .clickview_by_category .bx-wrapper .bx-pager.bx-default-pager a {
162
+ background: #666 !important;
163
+ text-indent: -9999px !important;
164
+ display: block !important;
165
+ width: 10px !important;
166
+ height: 10px !important;
167
+ margin: 0 5px !important;
168
+ outline: 0 !important;
169
+ -moz-border-radius: 5px !important;
170
+ -webkit-border-radius: 5px !important;
171
+ border-radius: 5px !important;
172
+ }
173
+
174
+ .bx-wrapper .bx-pager.bx-default-pager a:hover,
175
+ .bx-wrapper .bx-pager.bx-default-pager a.active {
176
+ background: #000;
177
+ }
178
+
179
+ /* DIRECTION CONTROLS (NEXT / PREV) */
180
+
181
+ .bx-wrapper .bx-prev {
182
+ /* left: 10px;
183
+ background: url(images/controls.png) no-repeat 0 -32px; */
184
+ display: none;
185
+ }
186
+
187
+ .bx-wrapper .bx-next {
188
+ right: 10px;
189
+ background: url(images/controls.png) no-repeat -43px -32px;
190
+ display: none;
191
+ }
192
+
193
+ .bx-wrapper .bx-prev:hover {
194
+ background-position: 0 0;
195
+ }
196
+
197
+ .bx-wrapper .bx-next:hover {
198
+ background-position: -43px 0;
199
+ }
200
+
201
+ .bx-wrapper .bx-controls-direction a {
202
+ position: absolute;
203
+ top: 50%;
204
+ margin-top: -16px;
205
+ outline: 0;
206
+ width: 32px;
207
+ height: 32px;
208
+ text-indent: -9999px;
209
+ z-index: 9999;
210
+ }
211
+
212
+ .bx-wrapper .bx-controls-direction a.disabled {
213
+ display: none;
214
+ }
215
+
216
+ /* AUTO CONTROLS (START / STOP) */
217
+
218
+ .bx-wrapper .bx-controls-auto {
219
+ text-align: center;
220
+ }
221
+
222
+ .bx-wrapper .bx-controls-auto .bx-start {
223
+ display: block;
224
+ text-indent: -9999px;
225
+ width: 10px;
226
+ height: 11px;
227
+ outline: 0;
228
+ background: url(images/controls.png) -86px -11px no-repeat;
229
+ margin: 0 3px;
230
+ }
231
+
232
+ .bx-wrapper .bx-controls-auto .bx-start:hover,
233
+ .bx-wrapper .bx-controls-auto .bx-start.active {
234
+ background-position: -86px 0;
235
+ }
236
+
237
+ .bx-wrapper .bx-controls-auto .bx-stop {
238
+ display: block;
239
+ text-indent: -9999px;
240
+ width: 9px;
241
+ height: 11px;
242
+ outline: 0;
243
+ background: url(images/controls.png) -86px -44px no-repeat;
244
+ margin: 0 3px;
245
+ }
246
+
247
+ .bx-wrapper .bx-controls-auto .bx-stop:hover,
248
+ .bx-wrapper .bx-controls-auto .bx-stop.active {
249
+ background-position: -86px -33px;
250
+ }
251
+
252
+ /* PAGER WITH AUTO-CONTROLS HYBRID LAYOUT */
253
+
254
+ .bx-wrapper li {
255
+ text-align: center;
256
+ }
257
+
258
+ .bx-wrapper li img{
259
+ text-align: left;
260
+ float: left;
261
+ }
262
+
263
+
264
+ .bx-wrapper .bx-controls.bx-has-controls-auto.bx-has-pager .bx-pager {
265
+ text-align: left;
266
+ width: 80%;
267
+ }
268
+
269
+ .bx-wrapper .bx-controls.bx-has-controls-auto.bx-has-pager .bx-controls-auto {
270
+ right: 0;
271
+ width: 35px;
272
+ }
273
+
274
+ /* IMAGE CAPTIONS */
275
+
276
+ .bx-wrapper .bx-caption {
277
+ position: absolute;
278
+ bottom: 0;
279
+ left: 0;
280
+ background: #666\9;
281
+ background: rgba(80, 80, 80, 0.75);
282
+ width: 100%;
283
+ }
284
+
285
+ .bx-wrapper .bx-caption span {
286
+ color: #fff;
287
+ font-family: Arial;
288
+ display: block;
289
+ font-size: .85em;
290
+ padding: 10px;
291
+ }
292
+
293
+
294
+ .clickview .bx-wrapper img,
295
+ .clickview_by_category .bx-wrapper img {
296
+ width: auto !important;
297
+ }
skin/frontend/base/default/jefferson/Clickview/css/style.css ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ .clickview .bx-wrapper {
3
+ margin: 0;
4
+ }
5
+
6
+ .clickview {
7
+ margin-bottom: 50px;
8
+ }
9
+
10
+ .clickview + .std {
11
+ display: none;
12
+ }
13
+
14
+ .clickview figure {
15
+ text-align: center;
16
+ }
17
+
18
+ .clickview figure img {
19
+ margin: 0 auto;
20
+ }
21
+
22
+ /*By category*/
23
+
24
+ .clickview.clickview_by_category .bx-wrapper{
25
+ margin: 14px auto;
26
+ vertical-align: top;
27
+ }
28
+
29
+ .clickview.clickview_by_category .form-control {
30
+ text-transform: uppercase;
31
+ }
skin/frontend/base/default/jefferson/Clickview/image/loading.gif ADDED
Binary file
skin/frontend/base/default/jefferson/Clickview/js/bxslider.js ADDED
@@ -0,0 +1,1348 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * BxSlider v4.1.2 - Fully loaded, responsive content slider
3
+ * http://bxslider.com
4
+ *
5
+ * Copyright 2014, Steven Wanderski - http://stevenwanderski.com - http://bxcreative.com
6
+ * Written while drinking Belgian ales and listening to jazz
7
+ *
8
+ * Released under the MIT license - http://opensource.org/licenses/MIT
9
+ */
10
+
11
+ jQuery.noConflict();
12
+
13
+ ;(function($){
14
+
15
+
16
+
17
+
18
+ var plugin = {};
19
+
20
+ var defaults = {
21
+
22
+ // GENERAL
23
+ mode: 'horizontal',
24
+ slideSelector: '',
25
+ infiniteLoop: true,
26
+ hideControlOnEnd: false,
27
+ speed: 500,
28
+ easing: null,
29
+ slideMargin: 0,
30
+ startSlide: 0,
31
+ randomStart: false,
32
+ captions: false,
33
+ ticker: false,
34
+ tickerHover: false,
35
+ adaptiveHeight: false,
36
+ adaptiveHeightSpeed: 500,
37
+ video: false,
38
+ useCSS: true,
39
+ preloadImages: 'visible',
40
+ responsive: true,
41
+ slideZIndex: 50,
42
+ wrapperClass: 'bx-wrapper',
43
+
44
+ // TOUCH
45
+ touchEnabled: true,
46
+ swipeThreshold: 50,
47
+ oneToOneTouch: true,
48
+ preventDefaultSwipeX: true,
49
+ preventDefaultSwipeY: false,
50
+
51
+ // PAGER
52
+ pager: true,
53
+ pagerType: 'full',
54
+ pagerShortSeparator: ' / ',
55
+ pagerSelector: null,
56
+ buildPager: null,
57
+ pagerCustom: null,
58
+
59
+ // CONTROLS
60
+ controls: true,
61
+ nextText: 'Next',
62
+ prevText: 'Prev',
63
+ nextSelector: null,
64
+ prevSelector: null,
65
+ autoControls: false,
66
+ startText: 'Start',
67
+ stopText: 'Stop',
68
+ autoControlsCombine: false,
69
+ autoControlsSelector: null,
70
+
71
+ // AUTO
72
+ auto: false,
73
+ pause: 4000,
74
+ autoStart: true,
75
+ autoDirection: 'next',
76
+ autoHover: false,
77
+ autoDelay: 0,
78
+ autoSlideForOnePage: false,
79
+
80
+ // CAROUSEL
81
+ minSlides: 1,
82
+ maxSlides: 1,
83
+ moveSlides: 0,
84
+ slideWidth: 0,
85
+
86
+ // CALLBACKS
87
+ onSliderLoad: function() {},
88
+ onSlideBefore: function() {},
89
+ onSlideAfter: function() {},
90
+ onSlideNext: function() {},
91
+ onSlidePrev: function() {},
92
+ onSliderResize: function() {}
93
+ }
94
+
95
+ $.fn.bxSlider = function(options){
96
+
97
+ if(this.length == 0) return this;
98
+
99
+ // support mutltiple elements
100
+ if(this.length > 1){
101
+ this.each(function(){$(this).bxSlider(options)});
102
+ return this;
103
+ }
104
+
105
+ // create a namespace to be used throughout the plugin
106
+ var slider = {};
107
+ // set a reference to our slider element
108
+ var el = this;
109
+ plugin.el = this;
110
+
111
+ /**
112
+ * Makes slideshow responsive
113
+ */
114
+ // first get the original window dimens (thanks alot IE)
115
+ var windowWidth = $(window).width();
116
+ var windowHeight = $(window).height();
117
+
118
+
119
+
120
+ /**
121
+ * ===================================================================================
122
+ * = PRIVATE FUNCTIONS
123
+ * ===================================================================================
124
+ */
125
+
126
+ /**
127
+ * Initializes namespace settings to be used throughout plugin
128
+ */
129
+ var init = function(){
130
+ // merge user-supplied options with the defaults
131
+ slider.settings = $.extend({}, defaults, options);
132
+ // parse slideWidth setting
133
+ slider.settings.slideWidth = parseInt(slider.settings.slideWidth);
134
+ // store the original children
135
+ slider.children = el.children(slider.settings.slideSelector);
136
+ // check if actual number of slides is less than minSlides / maxSlides
137
+ if(slider.children.length < slider.settings.minSlides) slider.settings.minSlides = slider.children.length;
138
+ if(slider.children.length < slider.settings.maxSlides) slider.settings.maxSlides = slider.children.length;
139
+ // if random start, set the startSlide setting to random number
140
+ if(slider.settings.randomStart) slider.settings.startSlide = Math.floor(Math.random() * slider.children.length);
141
+ // store active slide information
142
+ slider.active = { index: slider.settings.startSlide }
143
+ // store if the slider is in carousel mode (displaying / moving multiple slides)
144
+ slider.carousel = slider.settings.minSlides > 1 || slider.settings.maxSlides > 1;
145
+ // if carousel, force preloadImages = 'all'
146
+ if(slider.carousel) slider.settings.preloadImages = 'all';
147
+ // calculate the min / max width thresholds based on min / max number of slides
148
+ // used to setup and update carousel slides dimensions
149
+ slider.minThreshold = (slider.settings.minSlides * slider.settings.slideWidth) + ((slider.settings.minSlides - 1) * slider.settings.slideMargin);
150
+ slider.maxThreshold = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin);
151
+ // store the current state of the slider (if currently animating, working is true)
152
+ slider.working = false;
153
+ // initialize the controls object
154
+ slider.controls = {};
155
+ // initialize an auto interval
156
+ slider.interval = null;
157
+ // determine which property to use for transitions
158
+ slider.animProp = slider.settings.mode == 'vertical' ? 'top' : 'left';
159
+ // determine if hardware acceleration can be used
160
+ slider.usingCSS = slider.settings.useCSS && slider.settings.mode != 'fade' && (function(){
161
+ // create our test div element
162
+ var div = document.createElement('div');
163
+ // css transition properties
164
+ var props = ['WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];
165
+ // test for each property
166
+ for(var i in props){
167
+ if(div.style[props[i]] !== undefined){
168
+ slider.cssPrefix = props[i].replace('Perspective', '').toLowerCase();
169
+ slider.animProp = '-' + slider.cssPrefix + '-transform';
170
+ return true;
171
+ }
172
+ }
173
+ return false;
174
+ }());
175
+ // if vertical mode always make maxSlides and minSlides equal
176
+ if(slider.settings.mode == 'vertical') slider.settings.maxSlides = slider.settings.minSlides;
177
+ // save original style data
178
+ el.data("origStyle", el.attr("style"));
179
+ el.children(slider.settings.slideSelector).each(function() {
180
+ $(this).data("origStyle", $(this).attr("style"));
181
+ });
182
+ // perform all DOM / CSS modifications
183
+ setup();
184
+ }
185
+
186
+ /**
187
+ * Performs all DOM and CSS modifications
188
+ */
189
+ var setup = function(){
190
+ // wrap el in a wrapper
191
+ el.wrap('<div class="' + slider.settings.wrapperClass + '"><div class="bx-viewport"></div></div>');
192
+ // store a namspace reference to .bx-viewport
193
+ slider.viewport = el.parent();
194
+ // add a loading div to display while images are loading
195
+ slider.loader = $('<div class="bx-loading" />');
196
+ slider.viewport.prepend(slider.loader);
197
+ // set el to a massive width, to hold any needed slides
198
+ // also strip any margin and padding from el
199
+ el.css({
200
+ width: slider.settings.mode == 'horizontal' ? (slider.children.length * 100 + 215) + '%' : 'auto',
201
+ position: 'relative'
202
+ });
203
+ // if using CSS, add the easing property
204
+ if(slider.usingCSS && slider.settings.easing){
205
+ el.css('-' + slider.cssPrefix + '-transition-timing-function', slider.settings.easing);
206
+ // if not using CSS and no easing value was supplied, use the default JS animation easing (swing)
207
+ }else if(!slider.settings.easing){
208
+ slider.settings.easing = 'swing';
209
+ }
210
+ var slidesShowing = getNumberSlidesShowing();
211
+ // make modifications to the viewport (.bx-viewport)
212
+ slider.viewport.css({
213
+ width: '100%',
214
+ overflow: 'hidden',
215
+ position: 'relative'
216
+ });
217
+ slider.viewport.parent().css({
218
+ maxWidth: getViewportMaxWidth()
219
+ });
220
+ // make modification to the wrapper (.bx-wrapper)
221
+ if(!slider.settings.pager) {
222
+ slider.viewport.parent().css({
223
+ margin: '0 auto 0px'
224
+ });
225
+ }
226
+ // apply css to all slider children
227
+ slider.children.css({
228
+ 'float': slider.settings.mode == 'horizontal' ? 'left' : 'none',
229
+ listStyle: 'none',
230
+ position: 'relative'
231
+ });
232
+ // apply the calculated width after the float is applied to prevent scrollbar interference
233
+ slider.children.css('width', getSlideWidth());
234
+ // if slideMargin is supplied, add the css
235
+ if(slider.settings.mode == 'horizontal' && slider.settings.slideMargin > 0) slider.children.css('marginRight', slider.settings.slideMargin);
236
+ if(slider.settings.mode == 'vertical' && slider.settings.slideMargin > 0) slider.children.css('marginBottom', slider.settings.slideMargin);
237
+ // if "fade" mode, add positioning and z-index CSS
238
+ if(slider.settings.mode == 'fade'){
239
+ slider.children.css({
240
+ position: 'absolute',
241
+ zIndex: 0,
242
+ display: 'none'
243
+ });
244
+ // prepare the z-index on the showing element
245
+ slider.children.eq(slider.settings.startSlide).css({zIndex: slider.settings.slideZIndex, display: 'block'});
246
+ }
247
+ // create an element to contain all slider controls (pager, start / stop, etc)
248
+ slider.controls.el = $('<div class="bx-controls" />');
249
+ // if captions are requested, add them
250
+ if(slider.settings.captions) appendCaptions();
251
+ // check if startSlide is last slide
252
+ slider.active.last = slider.settings.startSlide == getPagerQty() - 1;
253
+ // if video is true, set up the fitVids plugin
254
+ if(slider.settings.video) el.fitVids();
255
+ // set the default preload selector (visible)
256
+ var preloadSelector = slider.children.eq(slider.settings.startSlide);
257
+ if (slider.settings.preloadImages == "all") preloadSelector = slider.children;
258
+ // only check for control addition if not in "ticker" mode
259
+ if(!slider.settings.ticker){
260
+ // if pager is requested, add it
261
+ if(slider.settings.pager) appendPager();
262
+ // if controls are requested, add them
263
+ if(slider.settings.controls) appendControls();
264
+ // if auto is true, and auto controls are requested, add them
265
+ if(slider.settings.auto && slider.settings.autoControls) appendControlsAuto();
266
+ // if any control option is requested, add the controls wrapper
267
+ if(slider.settings.controls || slider.settings.autoControls || slider.settings.pager) slider.viewport.after(slider.controls.el);
268
+ // if ticker mode, do not allow a pager
269
+ }else{
270
+ slider.settings.pager = false;
271
+ }
272
+ // preload all images, then perform final DOM / CSS modifications that depend on images being loaded
273
+ loadElements(preloadSelector, start);
274
+ }
275
+
276
+ var loadElements = function(selector, callback){
277
+ var total = selector.find('img, iframe').length;
278
+ if (total == 0){
279
+ callback();
280
+ return;
281
+ }
282
+ var count = 0;
283
+ selector.find('img, iframe').each(function(){
284
+ $(this).one('load', function() {
285
+ if(++count == total) callback();
286
+ }).each(function() {
287
+ if(this.complete) $(this).load();
288
+ });
289
+ });
290
+ }
291
+
292
+ /**
293
+ * Start the slider
294
+ */
295
+ var start = function(){
296
+ // if infinite loop, prepare additional slides
297
+ if(slider.settings.infiniteLoop && slider.settings.mode != 'fade' && !slider.settings.ticker){
298
+ var slice = slider.settings.mode == 'vertical' ? slider.settings.minSlides : slider.settings.maxSlides;
299
+ var sliceAppend = slider.children.slice(0, slice).clone().addClass('bx-clone');
300
+ var slicePrepend = slider.children.slice(-slice).clone().addClass('bx-clone');
301
+ el.append(sliceAppend).prepend(slicePrepend);
302
+ }
303
+ // remove the loading DOM element
304
+ slider.loader.remove();
305
+ // set the left / top position of "el"
306
+ setSlidePosition();
307
+ // if "vertical" mode, always use adaptiveHeight to prevent odd behavior
308
+ if (slider.settings.mode == 'vertical') slider.settings.adaptiveHeight = true;
309
+ // set the viewport height
310
+ slider.viewport.height(getViewportHeight());
311
+ // make sure everything is positioned just right (same as a window resize)
312
+ el.redrawSlider();
313
+ // onSliderLoad callback
314
+ slider.settings.onSliderLoad(slider.active.index);
315
+ // slider has been fully initialized
316
+ slider.initialized = true;
317
+ // bind the resize call to the window
318
+ if (slider.settings.responsive) $(window).bind('resize', resizeWindow);
319
+ // if auto is true and has more than 1 page, start the show
320
+ if (slider.settings.auto && slider.settings.autoStart && (getPagerQty() > 1 || slider.settings.autoSlideForOnePage)) initAuto();
321
+ // if ticker is true, start the ticker
322
+ if (slider.settings.ticker) initTicker();
323
+ // if pager is requested, make the appropriate pager link active
324
+ if (slider.settings.pager) updatePagerActive(slider.settings.startSlide);
325
+ // check for any updates to the controls (like hideControlOnEnd updates)
326
+ if (slider.settings.controls) updateDirectionControls();
327
+ // if touchEnabled is true, setup the touch events
328
+ if (slider.settings.touchEnabled && !slider.settings.ticker) initTouch();
329
+ }
330
+
331
+ /**
332
+ * Returns the calculated height of the viewport, used to determine either adaptiveHeight or the maxHeight value
333
+ */
334
+ var getViewportHeight = function(){
335
+ var height = 0;
336
+ // first determine which children (slides) should be used in our height calculation
337
+ var children = $();
338
+ // if mode is not "vertical" and adaptiveHeight is false, include all children
339
+ if(slider.settings.mode != 'vertical' && !slider.settings.adaptiveHeight){
340
+ children = slider.children;
341
+ }else{
342
+ // if not carousel, return the single active child
343
+ if(!slider.carousel){
344
+ children = slider.children.eq(slider.active.index);
345
+ // if carousel, return a slice of children
346
+ }else{
347
+ // get the individual slide index
348
+ var currentIndex = slider.settings.moveSlides == 1 ? slider.active.index : slider.active.index * getMoveBy();
349
+ // add the current slide to the children
350
+ children = slider.children.eq(currentIndex);
351
+ // cycle through the remaining "showing" slides
352
+ for (i = 1; i <= slider.settings.maxSlides - 1; i++){
353
+ // if looped back to the start
354
+ if(currentIndex + i >= slider.children.length){
355
+ children = children.add(slider.children.eq(i - 1));
356
+ }else{
357
+ children = children.add(slider.children.eq(currentIndex + i));
358
+ }
359
+ }
360
+ }
361
+ }
362
+ // if "vertical" mode, calculate the sum of the heights of the children
363
+ if(slider.settings.mode == 'vertical'){
364
+ children.each(function(index) {
365
+ height += $(this).outerHeight();
366
+ });
367
+ // add user-supplied margins
368
+ if(slider.settings.slideMargin > 0){
369
+ height += slider.settings.slideMargin * (slider.settings.minSlides - 1);
370
+ }
371
+ // if not "vertical" mode, calculate the max height of the children
372
+ }else{
373
+ height = Math.max.apply(Math, children.map(function(){
374
+ return $(this).outerHeight(false);
375
+ }).get());
376
+ }
377
+
378
+ if(slider.viewport.css('box-sizing') == 'border-box'){
379
+ height += parseFloat(slider.viewport.css('padding-top')) + parseFloat(slider.viewport.css('padding-bottom')) +
380
+ parseFloat(slider.viewport.css('border-top-width')) + parseFloat(slider.viewport.css('border-bottom-width'));
381
+ }else if(slider.viewport.css('box-sizing') == 'padding-box'){
382
+ height += parseFloat(slider.viewport.css('padding-top')) + parseFloat(slider.viewport.css('padding-bottom'));
383
+ }
384
+
385
+ return height;
386
+ }
387
+
388
+ /**
389
+ * Returns the calculated width to be used for the outer wrapper / viewport
390
+ */
391
+ var getViewportMaxWidth = function(){
392
+ var width = '100%';
393
+ if(slider.settings.slideWidth > 0){
394
+ if(slider.settings.mode == 'horizontal'){
395
+ width = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin);
396
+ }else{
397
+ width = slider.settings.slideWidth;
398
+ }
399
+ }
400
+ return width;
401
+ }
402
+
403
+ /**
404
+ * Returns the calculated width to be applied to each slide
405
+ */
406
+ var getSlideWidth = function(){
407
+ // start with any user-supplied slide width
408
+ var newElWidth = slider.settings.slideWidth;
409
+ // get the current viewport width
410
+ var wrapWidth = slider.viewport.width();
411
+ // if slide width was not supplied, or is larger than the viewport use the viewport width
412
+ if(slider.settings.slideWidth == 0 ||
413
+ (slider.settings.slideWidth > wrapWidth && !slider.carousel) ||
414
+ slider.settings.mode == 'vertical'){
415
+ newElWidth = wrapWidth;
416
+ // if carousel, use the thresholds to determine the width
417
+ }else if(slider.settings.maxSlides > 1 && slider.settings.mode == 'horizontal'){
418
+ if(wrapWidth > slider.maxThreshold){
419
+ // newElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.maxSlides - 1))) / slider.settings.maxSlides;
420
+ }else if(wrapWidth < slider.minThreshold){
421
+ newElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.minSlides - 1))) / slider.settings.minSlides;
422
+ }
423
+ }
424
+ return newElWidth;
425
+ }
426
+
427
+ /**
428
+ * Returns the number of slides currently visible in the viewport (includes partially visible slides)
429
+ */
430
+ var getNumberSlidesShowing = function(){
431
+ var slidesShowing = 1;
432
+ if(slider.settings.mode == 'horizontal' && slider.settings.slideWidth > 0){
433
+ // if viewport is smaller than minThreshold, return minSlides
434
+ if(slider.viewport.width() < slider.minThreshold){
435
+ slidesShowing = slider.settings.minSlides;
436
+ // if viewport is larger than minThreshold, return maxSlides
437
+ }else if(slider.viewport.width() > slider.maxThreshold){
438
+ slidesShowing = slider.settings.maxSlides;
439
+ // if viewport is between min / max thresholds, divide viewport width by first child width
440
+ }else{
441
+ var childWidth = slider.children.first().width() + slider.settings.slideMargin;
442
+ slidesShowing = Math.floor((slider.viewport.width() +
443
+ slider.settings.slideMargin) / childWidth);
444
+ }
445
+ // if "vertical" mode, slides showing will always be minSlides
446
+ }else if(slider.settings.mode == 'vertical'){
447
+ slidesShowing = slider.settings.minSlides;
448
+ }
449
+ return slidesShowing;
450
+ }
451
+
452
+ /**
453
+ * Returns the number of pages (one full viewport of slides is one "page")
454
+ */
455
+ var getPagerQty = function(){
456
+ var pagerQty = 0;
457
+ // if moveSlides is specified by the user
458
+ if(slider.settings.moveSlides > 0){
459
+ if(slider.settings.infiniteLoop){
460
+ pagerQty = Math.ceil(slider.children.length / getMoveBy());
461
+ }else{
462
+ // use a while loop to determine pages
463
+ var breakPoint = 0;
464
+ var counter = 0
465
+ // when breakpoint goes above children length, counter is the number of pages
466
+ while (breakPoint < slider.children.length){
467
+ ++pagerQty;
468
+ breakPoint = counter + getNumberSlidesShowing();
469
+ counter += slider.settings.moveSlides <= getNumberSlidesShowing() ? slider.settings.moveSlides : getNumberSlidesShowing();
470
+ }
471
+ }
472
+ // if moveSlides is 0 (auto) divide children length by sides showing, then round up
473
+ }else{
474
+ pagerQty = Math.ceil(slider.children.length / getNumberSlidesShowing());
475
+ }
476
+ return pagerQty;
477
+ }
478
+
479
+ /**
480
+ * Returns the number of indivual slides by which to shift the slider
481
+ */
482
+ var getMoveBy = function(){
483
+ // if moveSlides was set by the user and moveSlides is less than number of slides showing
484
+ if(slider.settings.moveSlides > 0 && slider.settings.moveSlides <= getNumberSlidesShowing()){
485
+ return slider.settings.moveSlides;
486
+ }
487
+ // if moveSlides is 0 (auto)
488
+ return getNumberSlidesShowing();
489
+ }
490
+
491
+ /**
492
+ * Sets the slider's (el) left or top position
493
+ */
494
+ var setSlidePosition = function(){
495
+ // if last slide, not infinite loop, and number of children is larger than specified maxSlides
496
+ if(slider.children.length > slider.settings.maxSlides && slider.active.last && !slider.settings.infiniteLoop){
497
+ if (slider.settings.mode == 'horizontal'){
498
+ // get the last child's position
499
+ var lastChild = slider.children.last();
500
+ var position = lastChild.position();
501
+ // set the left position
502
+ setPositionProperty(-(position.left - (slider.viewport.width() - lastChild.outerWidth())), 'reset', 0);
503
+ }else if(slider.settings.mode == 'vertical'){
504
+ // get the last showing index's position
505
+ var lastShowingIndex = slider.children.length - slider.settings.minSlides;
506
+ var position = slider.children.eq(lastShowingIndex).position();
507
+ // set the top position
508
+ setPositionProperty(-position.top, 'reset', 0);
509
+ }
510
+ // if not last slide
511
+ }else{
512
+ // get the position of the first showing slide
513
+ var position = slider.children.eq(slider.active.index * getMoveBy()).position();
514
+ // check for last slide
515
+ if (slider.active.index == getPagerQty() - 1) slider.active.last = true;
516
+ // set the repective position
517
+ if (position != undefined){
518
+ if (slider.settings.mode == 'horizontal') setPositionProperty(-position.left, 'reset', 0);
519
+ else if (slider.settings.mode == 'vertical') setPositionProperty(-position.top, 'reset', 0);
520
+ }
521
+ }
522
+ }
523
+
524
+ /**
525
+ * Sets the el's animating property position (which in turn will sometimes animate el).
526
+ * If using CSS, sets the transform property. If not using CSS, sets the top / left property.
527
+ *
528
+ * @param value (int)
529
+ * - the animating property's value
530
+ *
531
+ * @param type (string) 'slider', 'reset', 'ticker'
532
+ * - the type of instance for which the function is being
533
+ *
534
+ * @param duration (int)
535
+ * - the amount of time (in ms) the transition should occupy
536
+ *
537
+ * @param params (array) optional
538
+ * - an optional parameter containing any variables that need to be passed in
539
+ */
540
+ var setPositionProperty = function(value, type, duration, params){
541
+ // use CSS transform
542
+ if(slider.usingCSS){
543
+ // determine the translate3d value
544
+ var propValue = slider.settings.mode == 'vertical' ? 'translate3d(0, ' + value + 'px, 0)' : 'translate3d(' + value + 'px, 0, 0)';
545
+ // add the CSS transition-duration
546
+ el.css('-' + slider.cssPrefix + '-transition-duration', duration / 1000 + 's');
547
+ if(type == 'slide'){
548
+ // set the property value
549
+ el.css(slider.animProp, propValue);
550
+ // bind a callback method - executes when CSS transition completes
551
+ el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){
552
+ // unbind the callback
553
+ el.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');
554
+ updateAfterSlideTransition();
555
+ });
556
+ }else if(type == 'reset'){
557
+ el.css(slider.animProp, propValue);
558
+ }else if(type == 'ticker'){
559
+ // make the transition use 'linear'
560
+ el.css('-' + slider.cssPrefix + '-transition-timing-function', 'linear');
561
+ el.css(slider.animProp, propValue);
562
+ // bind a callback method - executes when CSS transition completes
563
+ el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){
564
+ // unbind the callback
565
+ el.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');
566
+ // reset the position
567
+ setPositionProperty(params['resetValue'], 'reset', 0);
568
+ // start the loop again
569
+ tickerLoop();
570
+ });
571
+ }
572
+ // use JS animate
573
+ }else{
574
+ var animateObj = {};
575
+ animateObj[slider.animProp] = value;
576
+ if(type == 'slide'){
577
+ el.animate(animateObj, duration, slider.settings.easing, function(){
578
+ updateAfterSlideTransition();
579
+ });
580
+ }else if(type == 'reset'){
581
+ el.css(slider.animProp, value)
582
+ }else if(type == 'ticker'){
583
+ el.animate(animateObj, speed, 'linear', function(){
584
+ setPositionProperty(params['resetValue'], 'reset', 0);
585
+ // run the recursive loop after animation
586
+ tickerLoop();
587
+ });
588
+ }
589
+ }
590
+ }
591
+
592
+ /**
593
+ * Populates the pager with proper amount of pages
594
+ */
595
+ var populatePager = function(){
596
+ var pagerHtml = '';
597
+ var pagerQty = getPagerQty();
598
+ // loop through each pager item
599
+ for(var i=0; i < pagerQty; i++){
600
+ var linkContent = '';
601
+ // if a buildPager function is supplied, use it to get pager link value, else use index + 1
602
+ if(slider.settings.buildPager && $.isFunction(slider.settings.buildPager)){
603
+ linkContent = slider.settings.buildPager(i);
604
+ slider.pagerEl.addClass('bx-custom-pager');
605
+ }else{
606
+ linkContent = i + 1;
607
+ slider.pagerEl.addClass('bx-default-pager');
608
+ }
609
+ // var linkContent = slider.settings.buildPager && $.isFunction(slider.settings.buildPager) ? slider.settings.buildPager(i) : i + 1;
610
+ // add the markup to the string
611
+ pagerHtml += '<div class="bx-pager-item"><a href="" data-slide-index="' + i + '" class="bx-pager-link">' + linkContent + '</a></div>';
612
+ };
613
+ // populate the pager element with pager links
614
+ slider.pagerEl.html(pagerHtml);
615
+ }
616
+
617
+ /**
618
+ * Appends the pager to the controls element
619
+ */
620
+ var appendPager = function(){
621
+ if(!slider.settings.pagerCustom){
622
+ // create the pager DOM element
623
+ slider.pagerEl = $('<div class="bx-pager" />');
624
+ // if a pager selector was supplied, populate it with the pager
625
+ if(slider.settings.pagerSelector){
626
+ $(slider.settings.pagerSelector).html(slider.pagerEl);
627
+ // if no pager selector was supplied, add it after the wrapper
628
+ }else{
629
+ slider.controls.el.addClass('bx-has-pager').append(slider.pagerEl);
630
+ }
631
+ // populate the pager
632
+ populatePager();
633
+ }else{
634
+ slider.pagerEl = $(slider.settings.pagerCustom);
635
+ }
636
+ // assign the pager click binding
637
+ slider.pagerEl.on('click', 'a', clickPagerBind);
638
+ }
639
+
640
+ /**
641
+ * Appends prev / next controls to the controls element
642
+ */
643
+ var appendControls = function(){
644
+ slider.controls.next = $('<a class="bx-next" href="">' + slider.settings.nextText + '</a>');
645
+ slider.controls.prev = $('<a class="bx-prev" href="">' + slider.settings.prevText + '</a>');
646
+ // bind click actions to the controls
647
+ slider.controls.next.bind('click', clickNextBind);
648
+ slider.controls.prev.bind('click', clickPrevBind);
649
+ // if nextSlector was supplied, populate it
650
+ if(slider.settings.nextSelector){
651
+ $(slider.settings.nextSelector).append(slider.controls.next);
652
+ }
653
+ // if prevSlector was supplied, populate it
654
+ if(slider.settings.prevSelector){
655
+ $(slider.settings.prevSelector).append(slider.controls.prev);
656
+ }
657
+ // if no custom selectors were supplied
658
+ if(!slider.settings.nextSelector && !slider.settings.prevSelector){
659
+ // add the controls to the DOM
660
+ slider.controls.directionEl = $('<div class="bx-controls-direction" />');
661
+ // add the control elements to the directionEl
662
+ slider.controls.directionEl.append(slider.controls.prev).append(slider.controls.next);
663
+ // slider.viewport.append(slider.controls.directionEl);
664
+ slider.controls.el.addClass('bx-has-controls-direction').append(slider.controls.directionEl);
665
+ }
666
+ }
667
+
668
+ /**
669
+ * Appends start / stop auto controls to the controls element
670
+ */
671
+ var appendControlsAuto = function(){
672
+ slider.controls.start = $('<div class="bx-controls-auto-item"><a class="bx-start" href="">' + slider.settings.startText + '</a></div>');
673
+ slider.controls.stop = $('<div class="bx-controls-auto-item"><a class="bx-stop" href="">' + slider.settings.stopText + '</a></div>');
674
+ // add the controls to the DOM
675
+ slider.controls.autoEl = $('<div class="bx-controls-auto" />');
676
+ // bind click actions to the controls
677
+ slider.controls.autoEl.on('click', '.bx-start', clickStartBind);
678
+ slider.controls.autoEl.on('click', '.bx-stop', clickStopBind);
679
+ // if autoControlsCombine, insert only the "start" control
680
+ if(slider.settings.autoControlsCombine){
681
+ slider.controls.autoEl.append(slider.controls.start);
682
+ // if autoControlsCombine is false, insert both controls
683
+ }else{
684
+ slider.controls.autoEl.append(slider.controls.start).append(slider.controls.stop);
685
+ }
686
+ // if auto controls selector was supplied, populate it with the controls
687
+ if(slider.settings.autoControlsSelector){
688
+ $(slider.settings.autoControlsSelector).html(slider.controls.autoEl);
689
+ // if auto controls selector was not supplied, add it after the wrapper
690
+ }else{
691
+ slider.controls.el.addClass('bx-has-controls-auto').append(slider.controls.autoEl);
692
+ }
693
+ // update the auto controls
694
+ updateAutoControls(slider.settings.autoStart ? 'stop' : 'start');
695
+ }
696
+
697
+ /**
698
+ * Appends image captions to the DOM
699
+ */
700
+ var appendCaptions = function(){
701
+ // cycle through each child
702
+ slider.children.each(function(index){
703
+ // get the image title attribute
704
+ var title = $(this).find('img:first').attr('title');
705
+ // append the caption
706
+ if (title != undefined && ('' + title).length) {
707
+ $(this).append('<div class="bx-caption"><span>' + title + '</span></div>');
708
+ }
709
+ });
710
+ }
711
+
712
+ /**
713
+ * Click next binding
714
+ *
715
+ * @param e (event)
716
+ * - DOM event object
717
+ */
718
+ var clickNextBind = function(e){
719
+ // if auto show is running, stop it
720
+ if (slider.settings.auto) el.stopAuto();
721
+ el.goToNextSlide();
722
+ e.preventDefault();
723
+ }
724
+
725
+ /**
726
+ * Click prev binding
727
+ *
728
+ * @param e (event)
729
+ * - DOM event object
730
+ */
731
+ var clickPrevBind = function(e){
732
+ // if auto show is running, stop it
733
+ if (slider.settings.auto) el.stopAuto();
734
+ el.goToPrevSlide();
735
+ e.preventDefault();
736
+ }
737
+
738
+ /**
739
+ * Click start binding
740
+ *
741
+ * @param e (event)
742
+ * - DOM event object
743
+ */
744
+ var clickStartBind = function(e){
745
+ el.startAuto();
746
+ e.preventDefault();
747
+ }
748
+
749
+ /**
750
+ * Click stop binding
751
+ *
752
+ * @param e (event)
753
+ * - DOM event object
754
+ */
755
+ var clickStopBind = function(e){
756
+ el.stopAuto();
757
+ e.preventDefault();
758
+ }
759
+
760
+ /**
761
+ * Click pager binding
762
+ *
763
+ * @param e (event)
764
+ * - DOM event object
765
+ */
766
+ var clickPagerBind = function(e){
767
+ // if auto show is running, stop it
768
+ if (slider.settings.auto) el.stopAuto();
769
+ var pagerLink = $(e.currentTarget);
770
+ if(pagerLink.attr('data-slide-index') !== undefined){
771
+ var pagerIndex = parseInt(pagerLink.attr('data-slide-index'));
772
+ // if clicked pager link is not active, continue with the goToSlide call
773
+ if(pagerIndex != slider.active.index) el.goToSlide(pagerIndex);
774
+ e.preventDefault();
775
+ }
776
+ }
777
+
778
+ /**
779
+ * Updates the pager links with an active class
780
+ *
781
+ * @param slideIndex (int)
782
+ * - index of slide to make active
783
+ */
784
+ var updatePagerActive = function(slideIndex){
785
+ // if "short" pager type
786
+ var len = slider.children.length; // nb of children
787
+ if(slider.settings.pagerType == 'short'){
788
+ if(slider.settings.maxSlides > 1) {
789
+ len = Math.ceil(slider.children.length/slider.settings.maxSlides);
790
+ }
791
+ slider.pagerEl.html( (slideIndex + 1) + slider.settings.pagerShortSeparator + len);
792
+ return;
793
+ }
794
+ // remove all pager active classes
795
+ slider.pagerEl.find('a').removeClass('active');
796
+ // apply the active class for all pagers
797
+ slider.pagerEl.each(function(i, el) { $(el).find('a').eq(slideIndex).addClass('active'); });
798
+ }
799
+
800
+ /**
801
+ * Performs needed actions after a slide transition
802
+ */
803
+ var updateAfterSlideTransition = function(){
804
+ // if infinte loop is true
805
+ if(slider.settings.infiniteLoop){
806
+ var position = '';
807
+ // first slide
808
+ if(slider.active.index == 0){
809
+ // set the new position
810
+ position = slider.children.eq(0).position();
811
+ // carousel, last slide
812
+ }else if(slider.active.index == getPagerQty() - 1 && slider.carousel){
813
+ position = slider.children.eq((getPagerQty() - 1) * getMoveBy()).position();
814
+ // last slide
815
+ }else if(slider.active.index == slider.children.length - 1){
816
+ position = slider.children.eq(slider.children.length - 1).position();
817
+ }
818
+ if(position){
819
+ if (slider.settings.mode == 'horizontal') { setPositionProperty(-position.left, 'reset', 0); }
820
+ else if (slider.settings.mode == 'vertical') { setPositionProperty(-position.top, 'reset', 0); }
821
+ }
822
+ }
823
+ // declare that the transition is complete
824
+ slider.working = false;
825
+ // onSlideAfter callback
826
+ slider.settings.onSlideAfter(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
827
+ }
828
+
829
+ /**
830
+ * Updates the auto controls state (either active, or combined switch)
831
+ *
832
+ * @param state (string) "start", "stop"
833
+ * - the new state of the auto show
834
+ */
835
+ var updateAutoControls = function(state){
836
+ // if autoControlsCombine is true, replace the current control with the new state
837
+ if(slider.settings.autoControlsCombine){
838
+ slider.controls.autoEl.html(slider.controls[state]);
839
+ // if autoControlsCombine is false, apply the "active" class to the appropriate control
840
+ }else{
841
+ slider.controls.autoEl.find('a').removeClass('active');
842
+ slider.controls.autoEl.find('a:not(.bx-' + state + ')').addClass('active');
843
+ }
844
+ }
845
+
846
+ /**
847
+ * Updates the direction controls (checks if either should be hidden)
848
+ */
849
+ var updateDirectionControls = function(){
850
+ if(getPagerQty() == 1){
851
+ slider.controls.prev.addClass('disabled');
852
+ slider.controls.next.addClass('disabled');
853
+ }else if(!slider.settings.infiniteLoop && slider.settings.hideControlOnEnd){
854
+ // if first slide
855
+ if (slider.active.index == 0){
856
+ slider.controls.prev.addClass('disabled');
857
+ slider.controls.next.removeClass('disabled');
858
+ // if last slide
859
+ }else if(slider.active.index == getPagerQty() - 1){
860
+ slider.controls.next.addClass('disabled');
861
+ slider.controls.prev.removeClass('disabled');
862
+ // if any slide in the middle
863
+ }else{
864
+ slider.controls.prev.removeClass('disabled');
865
+ slider.controls.next.removeClass('disabled');
866
+ }
867
+ }
868
+ }
869
+
870
+ /**
871
+ * Initialzes the auto process
872
+ */
873
+ var initAuto = function(){
874
+ // if autoDelay was supplied, launch the auto show using a setTimeout() call
875
+ if(slider.settings.autoDelay > 0){
876
+ var timeout = setTimeout(el.startAuto, slider.settings.autoDelay);
877
+ // if autoDelay was not supplied, start the auto show normally
878
+ }else{
879
+ el.startAuto();
880
+ }
881
+ // if autoHover is requested
882
+ if(slider.settings.autoHover){
883
+ // on el hover
884
+ el.hover(function(){
885
+ // if the auto show is currently playing (has an active interval)
886
+ if(slider.interval){
887
+ // stop the auto show and pass true agument which will prevent control update
888
+ el.stopAuto(true);
889
+ // create a new autoPaused value which will be used by the relative "mouseout" event
890
+ slider.autoPaused = true;
891
+ }
892
+ }, function(){
893
+ // if the autoPaused value was created be the prior "mouseover" event
894
+ if(slider.autoPaused){
895
+ // start the auto show and pass true agument which will prevent control update
896
+ el.startAuto(true);
897
+ // reset the autoPaused value
898
+ slider.autoPaused = null;
899
+ }
900
+ });
901
+ }
902
+ }
903
+
904
+ /**
905
+ * Initialzes the ticker process
906
+ */
907
+ var initTicker = function(){
908
+ var startPosition = 0;
909
+ // if autoDirection is "next", append a clone of the entire slider
910
+ if(slider.settings.autoDirection == 'next'){
911
+ el.append(slider.children.clone().addClass('bx-clone'));
912
+ // if autoDirection is "prev", prepend a clone of the entire slider, and set the left position
913
+ }else{
914
+ el.prepend(slider.children.clone().addClass('bx-clone'));
915
+ var position = slider.children.first().position();
916
+ startPosition = slider.settings.mode == 'horizontal' ? -position.left : -position.top;
917
+ }
918
+ setPositionProperty(startPosition, 'reset', 0);
919
+ // do not allow controls in ticker mode
920
+ slider.settings.pager = false;
921
+ slider.settings.controls = false;
922
+ slider.settings.autoControls = false;
923
+ // if autoHover is requested
924
+ if(slider.settings.tickerHover && !slider.usingCSS){
925
+ // on el hover
926
+ slider.viewport.hover(function(){
927
+ el.stop();
928
+ }, function(){
929
+ // calculate the total width of children (used to calculate the speed ratio)
930
+ var totalDimens = 0;
931
+ slider.children.each(function(index){
932
+ totalDimens += slider.settings.mode == 'horizontal' ? $(this).outerWidth(true) : $(this).outerHeight(true);
933
+ });
934
+ // calculate the speed ratio (used to determine the new speed to finish the paused animation)
935
+ var ratio = slider.settings.speed / totalDimens;
936
+ // determine which property to use
937
+ var property = slider.settings.mode == 'horizontal' ? 'left' : 'top';
938
+ // calculate the new speed
939
+ var newSpeed = ratio * (totalDimens - (Math.abs(parseInt(el.css(property)))));
940
+ tickerLoop(newSpeed);
941
+ });
942
+ }
943
+ // start the ticker loop
944
+ tickerLoop();
945
+ }
946
+
947
+ /**
948
+ * Runs a continuous loop, news ticker-style
949
+ */
950
+ var tickerLoop = function(resumeSpeed){
951
+ speed = resumeSpeed ? resumeSpeed : slider.settings.speed;
952
+ var position = {left: 0, top: 0};
953
+ var reset = {left: 0, top: 0};
954
+ // if "next" animate left position to last child, then reset left to 0
955
+ if(slider.settings.autoDirection == 'next'){
956
+ position = el.find('.bx-clone').first().position();
957
+ // if "prev" animate left position to 0, then reset left to first non-clone child
958
+ }else{
959
+ reset = slider.children.first().position();
960
+ }
961
+ var animateProperty = slider.settings.mode == 'horizontal' ? -position.left : -position.top;
962
+ var resetValue = slider.settings.mode == 'horizontal' ? -reset.left : -reset.top;
963
+ var params = {resetValue: resetValue};
964
+ setPositionProperty(animateProperty, 'ticker', speed, params);
965
+ }
966
+
967
+ /**
968
+ * Initializes touch events
969
+ */
970
+ var initTouch = function(){
971
+ // initialize object to contain all touch values
972
+ slider.touch = {
973
+ start: {x: 0, y: 0},
974
+ end: {x: 0, y: 0}
975
+ }
976
+ slider.viewport.bind('touchstart', onTouchStart);
977
+ }
978
+
979
+ /**
980
+ * Event handler for "touchstart"
981
+ *
982
+ * @param e (event)
983
+ * - DOM event object
984
+ */
985
+ var onTouchStart = function(e){
986
+ if(slider.working){
987
+ e.preventDefault();
988
+ }else{
989
+ // record the original position when touch starts
990
+ slider.touch.originalPos = el.position();
991
+ var orig = e.originalEvent;
992
+ // record the starting touch x, y coordinates
993
+ slider.touch.start.x = orig.changedTouches[0].pageX;
994
+ slider.touch.start.y = orig.changedTouches[0].pageY;
995
+ // bind a "touchmove" event to the viewport
996
+ slider.viewport.bind('touchmove', onTouchMove);
997
+ // bind a "touchend" event to the viewport
998
+ slider.viewport.bind('touchend', onTouchEnd);
999
+ }
1000
+ }
1001
+
1002
+ /**
1003
+ * Event handler for "touchmove"
1004
+ *
1005
+ * @param e (event)
1006
+ * - DOM event object
1007
+ */
1008
+ var onTouchMove = function(e){
1009
+ var orig = e.originalEvent;
1010
+ // if scrolling on y axis, do not prevent default
1011
+ var xMovement = Math.abs(orig.changedTouches[0].pageX - slider.touch.start.x);
1012
+ var yMovement = Math.abs(orig.changedTouches[0].pageY - slider.touch.start.y);
1013
+ // x axis swipe
1014
+ if((xMovement * 3) > yMovement && slider.settings.preventDefaultSwipeX){
1015
+ e.preventDefault();
1016
+ // y axis swipe
1017
+ }else if((yMovement * 3) > xMovement && slider.settings.preventDefaultSwipeY){
1018
+ e.preventDefault();
1019
+ }
1020
+ if(slider.settings.mode != 'fade' && slider.settings.oneToOneTouch){
1021
+ var value = 0;
1022
+ // if horizontal, drag along x axis
1023
+ if(slider.settings.mode == 'horizontal'){
1024
+ var change = orig.changedTouches[0].pageX - slider.touch.start.x;
1025
+ value = slider.touch.originalPos.left + change;
1026
+ // if vertical, drag along y axis
1027
+ }else{
1028
+ var change = orig.changedTouches[0].pageY - slider.touch.start.y;
1029
+ value = slider.touch.originalPos.top + change;
1030
+ }
1031
+ setPositionProperty(value, 'reset', 0);
1032
+ }
1033
+ }
1034
+
1035
+ /**
1036
+ * Event handler for "touchend"
1037
+ *
1038
+ * @param e (event)
1039
+ * - DOM event object
1040
+ */
1041
+ var onTouchEnd = function(e){
1042
+ slider.viewport.unbind('touchmove', onTouchMove);
1043
+ var orig = e.originalEvent;
1044
+ var value = 0;
1045
+ // record end x, y positions
1046
+ slider.touch.end.x = orig.changedTouches[0].pageX;
1047
+ slider.touch.end.y = orig.changedTouches[0].pageY;
1048
+ // if fade mode, check if absolute x distance clears the threshold
1049
+ if(slider.settings.mode == 'fade'){
1050
+ var distance = Math.abs(slider.touch.start.x - slider.touch.end.x);
1051
+ if(distance >= slider.settings.swipeThreshold){
1052
+ slider.touch.start.x > slider.touch.end.x ? el.goToNextSlide() : el.goToPrevSlide();
1053
+ el.stopAuto();
1054
+ }
1055
+ // not fade mode
1056
+ }else{
1057
+ var distance = 0;
1058
+ // calculate distance and el's animate property
1059
+ if(slider.settings.mode == 'horizontal'){
1060
+ distance = slider.touch.end.x - slider.touch.start.x;
1061
+ value = slider.touch.originalPos.left;
1062
+ }else{
1063
+ distance = slider.touch.end.y - slider.touch.start.y;
1064
+ value = slider.touch.originalPos.top;
1065
+ }
1066
+ // if not infinite loop and first / last slide, do not attempt a slide transition
1067
+ if(!slider.settings.infiniteLoop && ((slider.active.index == 0 && distance > 0) || (slider.active.last && distance < 0))){
1068
+ setPositionProperty(value, 'reset', 200);
1069
+ }else{
1070
+ // check if distance clears threshold
1071
+ if(Math.abs(distance) >= slider.settings.swipeThreshold){
1072
+ distance < 0 ? el.goToNextSlide() : el.goToPrevSlide();
1073
+ el.stopAuto();
1074
+ }else{
1075
+ // el.animate(property, 200);
1076
+ setPositionProperty(value, 'reset', 200);
1077
+ }
1078
+ }
1079
+ }
1080
+ slider.viewport.unbind('touchend', onTouchEnd);
1081
+ }
1082
+
1083
+ /**
1084
+ * Window resize event callback
1085
+ */
1086
+ var resizeWindow = function(e){
1087
+ // don't do anything if slider isn't initialized.
1088
+ if(!slider.initialized) return;
1089
+ // get the new window dimens (again, thank you IE)
1090
+ var windowWidthNew = $(window).width();
1091
+ var windowHeightNew = $(window).height();
1092
+ // make sure that it is a true window resize
1093
+ // *we must check this because our dinosaur friend IE fires a window resize event when certain DOM elements
1094
+ // are resized. Can you just die already?*
1095
+ if(windowWidth != windowWidthNew || windowHeight != windowHeightNew){
1096
+ // set the new window dimens
1097
+ windowWidth = windowWidthNew;
1098
+ windowHeight = windowHeightNew;
1099
+ // update all dynamic elements
1100
+ el.redrawSlider();
1101
+ // Call user resize handler
1102
+ slider.settings.onSliderResize.call(el, slider.active.index);
1103
+ }
1104
+ }
1105
+
1106
+ /**
1107
+ * ===================================================================================
1108
+ * = PUBLIC FUNCTIONS
1109
+ * ===================================================================================
1110
+ */
1111
+
1112
+ /**
1113
+ * Performs slide transition to the specified slide
1114
+ *
1115
+ * @param slideIndex (int)
1116
+ * - the destination slide's index (zero-based)
1117
+ *
1118
+ * @param direction (string)
1119
+ * - INTERNAL USE ONLY - the direction of travel ("prev" / "next")
1120
+ */
1121
+ el.goToSlide = function(slideIndex, direction){
1122
+ // if plugin is currently in motion, ignore request
1123
+ if(slider.working || slider.active.index == slideIndex) return;
1124
+ // declare that plugin is in motion
1125
+ slider.working = true;
1126
+ // store the old index
1127
+ slider.oldIndex = slider.active.index;
1128
+ // if slideIndex is less than zero, set active index to last child (this happens during infinite loop)
1129
+ if(slideIndex < 0){
1130
+ slider.active.index = getPagerQty() - 1;
1131
+ // if slideIndex is greater than children length, set active index to 0 (this happens during infinite loop)
1132
+ }else if(slideIndex >= getPagerQty()){
1133
+ slider.active.index = 0;
1134
+ // set active index to requested slide
1135
+ }else{
1136
+ slider.active.index = slideIndex;
1137
+ }
1138
+ // onSlideBefore, onSlideNext, onSlidePrev callbacks
1139
+ slider.settings.onSlideBefore(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
1140
+ if(direction == 'next'){
1141
+ slider.settings.onSlideNext(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
1142
+ }else if(direction == 'prev'){
1143
+ slider.settings.onSlidePrev(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
1144
+ }
1145
+ // check if last slide
1146
+ slider.active.last = slider.active.index >= getPagerQty() - 1;
1147
+ // update the pager with active class
1148
+ if(slider.settings.pager) updatePagerActive(slider.active.index);
1149
+ // // check for direction control update
1150
+ if(slider.settings.controls) updateDirectionControls();
1151
+ // if slider is set to mode: "fade"
1152
+ if(slider.settings.mode == 'fade'){
1153
+ // if adaptiveHeight is true and next height is different from current height, animate to the new height
1154
+ if(slider.settings.adaptiveHeight && slider.viewport.height() != getViewportHeight()){
1155
+ slider.viewport.animate({height: getViewportHeight()}, slider.settings.adaptiveHeightSpeed);
1156
+ }
1157
+ // fade out the visible child and reset its z-index value
1158
+ slider.children.filter(':visible').fadeOut(slider.settings.speed).css({zIndex: 0});
1159
+ // fade in the newly requested slide
1160
+ slider.children.eq(slider.active.index).css('zIndex', slider.settings.slideZIndex+1).fadeIn(slider.settings.speed, function(){
1161
+ $(this).css('zIndex', slider.settings.slideZIndex);
1162
+ updateAfterSlideTransition();
1163
+ });
1164
+ // slider mode is not "fade"
1165
+ }else{
1166
+ // if adaptiveHeight is true and next height is different from current height, animate to the new height
1167
+ if(slider.settings.adaptiveHeight && slider.viewport.height() != getViewportHeight()){
1168
+ slider.viewport.animate({height: getViewportHeight()}, slider.settings.adaptiveHeightSpeed);
1169
+ }
1170
+ var moveBy = 0;
1171
+ var position = {left: 0, top: 0};
1172
+ // if carousel and not infinite loop
1173
+ if(!slider.settings.infiniteLoop && slider.carousel && slider.active.last){
1174
+ if(slider.settings.mode == 'horizontal'){
1175
+ // get the last child position
1176
+ var lastChild = slider.children.eq(slider.children.length - 1);
1177
+ position = lastChild.position();
1178
+ // calculate the position of the last slide
1179
+ moveBy = slider.viewport.width() - lastChild.outerWidth();
1180
+ }else{
1181
+ // get last showing index position
1182
+ var lastShowingIndex = slider.children.length - slider.settings.minSlides;
1183
+ position = slider.children.eq(lastShowingIndex).position();
1184
+ }
1185
+ // horizontal carousel, going previous while on first slide (infiniteLoop mode)
1186
+ }else if(slider.carousel && slider.active.last && direction == 'prev'){
1187
+ // get the last child position
1188
+ var eq = slider.settings.moveSlides == 1 ? slider.settings.maxSlides - getMoveBy() : ((getPagerQty() - 1) * getMoveBy()) - (slider.children.length - slider.settings.maxSlides);
1189
+ var lastChild = el.children('.bx-clone').eq(eq);
1190
+ position = lastChild.position();
1191
+ // if infinite loop and "Next" is clicked on the last slide
1192
+ }else if(direction == 'next' && slider.active.index == 0){
1193
+ // get the last clone position
1194
+ position = el.find('> .bx-clone').eq(slider.settings.maxSlides).position();
1195
+ slider.active.last = false;
1196
+ // normal non-zero requests
1197
+ }else if(slideIndex >= 0){
1198
+ var requestEl = slideIndex * getMoveBy();
1199
+ position = slider.children.eq(requestEl).position();
1200
+ }
1201
+
1202
+ /* If the position doesn't exist
1203
+ * (e.g. if you destroy the slider on a next click),
1204
+ * it doesn't throw an error.
1205
+ */
1206
+ if ("undefined" !== typeof(position)) {
1207
+ var value = slider.settings.mode == 'horizontal' ? -(position.left - moveBy) : -position.top;
1208
+ // plugin values to be animated
1209
+ setPositionProperty(value, 'slide', slider.settings.speed);
1210
+ }
1211
+ }
1212
+ }
1213
+
1214
+ /**
1215
+ * Transitions to the next slide in the show
1216
+ */
1217
+ el.goToNextSlide = function(){
1218
+ // if infiniteLoop is false and last page is showing, disregard call
1219
+ if (!slider.settings.infiniteLoop && slider.active.last) return;
1220
+ var pagerIndex = parseInt(slider.active.index) + 1;
1221
+ el.goToSlide(pagerIndex, 'next');
1222
+ }
1223
+
1224
+ /**
1225
+ * Transitions to the prev slide in the show
1226
+ */
1227
+ el.goToPrevSlide = function(){
1228
+ // if infiniteLoop is false and last page is showing, disregard call
1229
+ if (!slider.settings.infiniteLoop && slider.active.index == 0) return;
1230
+ var pagerIndex = parseInt(slider.active.index) - 1;
1231
+ el.goToSlide(pagerIndex, 'prev');
1232
+ }
1233
+
1234
+ /**
1235
+ * Starts the auto show
1236
+ *
1237
+ * @param preventControlUpdate (boolean)
1238
+ * - if true, auto controls state will not be updated
1239
+ */
1240
+ el.startAuto = function(preventControlUpdate){
1241
+ // if an interval already exists, disregard call
1242
+ if(slider.interval) return;
1243
+ // create an interval
1244
+ slider.interval = setInterval(function(){
1245
+ slider.settings.autoDirection == 'next' ? el.goToNextSlide() : el.goToPrevSlide();
1246
+ }, slider.settings.pause);
1247
+ // if auto controls are displayed and preventControlUpdate is not true
1248
+ if (slider.settings.autoControls && preventControlUpdate != true) updateAutoControls('stop');
1249
+ }
1250
+
1251
+ /**
1252
+ * Stops the auto show
1253
+ *
1254
+ * @param preventControlUpdate (boolean)
1255
+ * - if true, auto controls state will not be updated
1256
+ */
1257
+ el.stopAuto = function(preventControlUpdate){
1258
+ // if no interval exists, disregard call
1259
+ if(!slider.interval) return;
1260
+ // clear the interval
1261
+ clearInterval(slider.interval);
1262
+ slider.interval = null;
1263
+ // if auto controls are displayed and preventControlUpdate is not true
1264
+ if (slider.settings.autoControls && preventControlUpdate != true) updateAutoControls('start');
1265
+ }
1266
+
1267
+ /**
1268
+ * Returns current slide index (zero-based)
1269
+ */
1270
+ el.getCurrentSlide = function(){
1271
+ return slider.active.index;
1272
+ }
1273
+
1274
+ /**
1275
+ * Returns current slide element
1276
+ */
1277
+ el.getCurrentSlideElement = function(){
1278
+ return slider.children.eq(slider.active.index);
1279
+ }
1280
+
1281
+ /**
1282
+ * Returns number of slides in show
1283
+ */
1284
+ el.getSlideCount = function(){
1285
+ return slider.children.length;
1286
+ }
1287
+
1288
+ /**
1289
+ * Update all dynamic slider elements
1290
+ */
1291
+ el.redrawSlider = function(){
1292
+ // resize all children in ratio to new screen size
1293
+ slider.children.add(el.find('.bx-clone')).width(getSlideWidth());
1294
+ // adjust the height
1295
+ slider.viewport.css('height', getViewportHeight());
1296
+ // update the slide position
1297
+ if(!slider.settings.ticker) setSlidePosition();
1298
+ // if active.last was true before the screen resize, we want
1299
+ // to keep it last no matter what screen size we end on
1300
+ if (slider.active.last) slider.active.index = getPagerQty() - 1;
1301
+ // if the active index (page) no longer exists due to the resize, simply set the index as last
1302
+ if (slider.active.index >= getPagerQty()) slider.active.last = true;
1303
+ // if a pager is being displayed and a custom pager is not being used, update it
1304
+ if(slider.settings.pager && !slider.settings.pagerCustom){
1305
+ populatePager();
1306
+ updatePagerActive(slider.active.index);
1307
+ }
1308
+ }
1309
+
1310
+ /**
1311
+ * Destroy the current instance of the slider (revert everything back to original state)
1312
+ */
1313
+ el.destroySlider = function(){
1314
+ // don't do anything if slider has already been destroyed
1315
+ if(!slider.initialized) return;
1316
+ slider.initialized = false;
1317
+ $('.bx-clone', this).remove();
1318
+ slider.children.each(function() {
1319
+ $(this).data("origStyle") != undefined ? $(this).attr("style", $(this).data("origStyle")) : $(this).removeAttr('style');
1320
+ });
1321
+ $(this).data("origStyle") != undefined ? this.attr("style", $(this).data("origStyle")) : $(this).removeAttr('style');
1322
+ $(this).unwrap().unwrap();
1323
+ if(slider.controls.el) slider.controls.el.remove();
1324
+ if(slider.controls.next) slider.controls.next.remove();
1325
+ if(slider.controls.prev) slider.controls.prev.remove();
1326
+ if(slider.pagerEl && slider.settings.controls) slider.pagerEl.remove();
1327
+ $('.bx-caption', this).remove();
1328
+ if(slider.controls.autoEl) slider.controls.autoEl.remove();
1329
+ clearInterval(slider.interval);
1330
+ if(slider.settings.responsive) $(window).unbind('resize', resizeWindow);
1331
+ }
1332
+
1333
+ /**
1334
+ * Reload the slider (revert all DOM changes, and re-initialize)
1335
+ */
1336
+ el.reloadSlider = function(settings){
1337
+ if (settings != undefined) options = settings;
1338
+ el.destroySlider();
1339
+ init();
1340
+ }
1341
+
1342
+ init();
1343
+
1344
+ // returns the current jQuery object
1345
+ return this;
1346
+ }
1347
+
1348
+ })(jQuery);
skin/frontend/base/default/jefferson/Clickview/js/jquery.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ /*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
2
+ //@ sourceMappingURL=jquery-1.10.2.min.map
3
+ */
4
+ (function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t
5
+ }({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={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:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);
6
+ u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.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(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,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":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
skin/frontend/base/default/jefferson/Clickview/js/script.js ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ $clickview = jQuery.noConflict();
2
+
3
+ $clickview(document).ready(function(){
4
+
5
+ $clickview('.bxslider_clickview').bxSlider({
6
+
7
+ minSlides: 1,
8
+ maxSlides: 15,
9
+ slideWidth: 200,
10
+ slideMargin: 10
11
+
12
+ });
13
+
14
+ $clickview('.bxslider_clickview_recents').bxSlider({
15
+
16
+ minSlides: 1,
17
+ maxSlides: 15,
18
+ slideWidth: 200,
19
+ slideMargin: 10
20
+
21
+ });
22
+
23
+ $clickview('.bxslider_clickview_best_selling').bxSlider({
24
+
25
+ minSlides: 1,
26
+ maxSlides: 15,
27
+ slideWidth: 200,
28
+ slideMargin: 10
29
+
30
+ });
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+ });