QAZ_Qbanner - Version 1.9.1

Version Notes

Check all cross-browser and config with another extension

Download this release

Release Info

Developer Kevin Black
Extension QAZ_Qbanner
Version 1.9.1
Comparing to
See all releases


Version 1.9.1

Files changed (91) hide show
  1. app/code/community/Qaz/All/Helper/Data.php +20 -0
  2. app/code/community/Qaz/All/etc/config.xml +39 -0
  3. app/code/community/Qaz/All/etc/system.xml +9 -0
  4. app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner.php +12 -0
  5. app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit.php +37 -0
  6. app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit/Form.php +19 -0
  7. app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit/Tab/Category.php +194 -0
  8. app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit/Tab/Form.php +122 -0
  9. app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit/Tab/Image.php +168 -0
  10. app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit/Tab/Pages.php +39 -0
  11. app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit/Tabs.php +36 -0
  12. app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Grid.php +109 -0
  13. app/code/community/Qaz/Qbanner/Block/Qbanner.php +54 -0
  14. app/code/community/Qaz/Qbanner/Helper/Data.php +5 -0
  15. app/code/community/Qaz/Qbanner/Model/Config.php +155 -0
  16. app/code/community/Qaz/Qbanner/Model/Mysql4/Qbanner.php +282 -0
  17. app/code/community/Qaz/Qbanner/Model/Mysql4/Qbanner/Collection.php +55 -0
  18. app/code/community/Qaz/Qbanner/Model/Option/Pages.php +19 -0
  19. app/code/community/Qaz/Qbanner/Model/Option/Position.php +20 -0
  20. app/code/community/Qaz/Qbanner/Model/Option/Status.php +21 -0
  21. app/code/community/Qaz/Qbanner/Model/Qbanner.php +21 -0
  22. app/code/community/Qaz/Qbanner/controllers/Adminhtml/QbannerController.php +223 -0
  23. app/code/community/Qaz/Qbanner/controllers/IndexController.php +47 -0
  24. app/code/community/Qaz/Qbanner/etc/config.xml +157 -0
  25. app/code/community/Qaz/Qbanner/etc/system.xml +36 -0
  26. app/code/community/Qaz/Qbanner/sql/qbanner_setup/mysql4-install-0.1.0.php +60 -0
  27. app/code/community/Qaz/Qbanner/sql/qbanner_setup/mysql4-upgrade-1.7.1-1.8.1.php +10 -0
  28. app/design/adminhtml/default/default/layout/qbanner.xml +8 -0
  29. app/design/adminhtml/default/default/template/qaz/qbanner/edit/tab/category.phtml +183 -0
  30. app/design/adminhtml/default/default/template/qaz/qbanner/edit/tab/image.phtml +65 -0
  31. app/design/frontend/default/default/layout/qbanner.xml +11 -0
  32. app/design/frontend/default/default/template/qaz/qbanner/qbanner.after.header.phtml +109 -0
  33. app/design/frontend/default/default/template/qaz/qbanner/qbanner.content.top.phtml +109 -0
  34. app/etc/modules/Qaz_All.xml +10 -0
  35. app/etc/modules/Qaz_Qbanner.xml +9 -0
  36. js/qaz/qbanner/jquery.1.5.1.js +16 -0
  37. js/qaz/qbanner/jquery.slides.min.js +545 -0
  38. js/qaz/qbanner/jqueryNoconfig.js +1 -0
  39. media/qaz/qbanner/1/6/1694554_11311.jpg +0 -0
  40. media/qaz/qbanner/b/a/banner-2.jpg +0 -0
  41. media/qaz/qbanner/b/a/banner-21.jpg +0 -0
  42. media/qaz/qbanner/b/a/banner-21_1.jpg +0 -0
  43. media/qaz/qbanner/b/a/banner-21_2.jpg +0 -0
  44. media/qaz/qbanner/b/a/banner-2_1.jpg +0 -0
  45. media/qaz/qbanner/b/a/banner-2_2.jpg +0 -0
  46. media/qaz/qbanner/b/a/banner-2_3.jpg +0 -0
  47. media/qaz/qbanner/b/a/banner-3.jpg +0 -0
  48. media/qaz/qbanner/b/a/banner-31.jpg +0 -0
  49. media/qaz/qbanner/b/a/banner-31_1.jpg +0 -0
  50. media/qaz/qbanner/b/a/banner-3_1.jpg +0 -0
  51. media/qaz/qbanner/b/a/banner-3_2.jpg +0 -0
  52. media/qaz/qbanner/b/a/banner-3_3.jpg +0 -0
  53. media/qaz/qbanner/b/a/banner-3_4.jpg +0 -0
  54. media/qaz/qbanner/b/a/banner-3_5.jpg +0 -0
  55. media/qaz/qbanner/b/a/banner-3_6.jpg +0 -0
  56. media/qaz/qbanner/b/a/banner-4.jpg +0 -0
  57. media/qaz/qbanner/b/a/banner-4_1.jpg +0 -0
  58. media/qaz/qbanner/b/a/banner-4_2.jpg +0 -0
  59. media/qaz/qbanner/b/a/banner-4_3.jpg +0 -0
  60. media/qaz/qbanner/b/a/banner-4_4.jpg +0 -0
  61. media/qaz/qbanner/b/a/banner-4_5.jpg +0 -0
  62. media/qaz/qbanner/b/a/banner-4_6.jpg +0 -0
  63. media/qaz/qbanner/b/a/banner.jpg +0 -0
  64. media/qaz/qbanner/b/o/bottom_banner.jpg +0 -0
  65. media/qaz/qbanner/b/o/bottom_banner2.jpg +0 -0
  66. media/qaz/qbanner/b/o/bottom_banner2_1.jpg +0 -0
  67. media/qaz/qbanner/t/o/top_banner.jpg +0 -0
  68. media/qaz/qbanner/t/o/top_banner_1.jpg +0 -0
  69. package.xml +20 -0
  70. skin/frontend/default/default/qaz/qbanner/css/global.css +115 -0
  71. skin/frontend/default/default/qaz/qbanner/images/arrow-bg.png +0 -0
  72. skin/frontend/default/default/qaz/qbanner/images/arrow-bg2.gif +0 -0
  73. skin/frontend/default/default/qaz/qbanner/images/arrow-l.png +0 -0
  74. skin/frontend/default/default/qaz/qbanner/images/arrow-next.png +0 -0
  75. skin/frontend/default/default/qaz/qbanner/images/arrow-prev.png +0 -0
  76. skin/frontend/default/default/qaz/qbanner/images/arrow-r.png +0 -0
  77. skin/frontend/default/default/qaz/qbanner/images/b_next.png +0 -0
  78. skin/frontend/default/default/qaz/qbanner/images/b_prev.png +0 -0
  79. skin/frontend/default/default/qaz/qbanner/images/background.png +0 -0
  80. skin/frontend/default/default/qaz/qbanner/images/example-frame.png +0 -0
  81. skin/frontend/default/default/qaz/qbanner/images/loading.gif +0 -0
  82. skin/frontend/default/default/qaz/qbanner/images/new-ribbon.png +0 -0
  83. skin/frontend/default/default/qaz/qbanner/images/pagination.png +0 -0
  84. skin/frontend/default/default/qaz/qbanner/images/slide-1.jpg +0 -0
  85. skin/frontend/default/default/qaz/qbanner/images/slide-2.jpg +0 -0
  86. skin/frontend/default/default/qaz/qbanner/images/slide-3.jpg +0 -0
  87. skin/frontend/default/default/qaz/qbanner/images/slide-4.jpg +0 -0
  88. skin/frontend/default/default/qaz/qbanner/images/slide-5.jpg +0 -0
  89. skin/frontend/default/default/qaz/qbanner/images/slide-6.jpg +0 -0
  90. skin/frontend/default/default/qaz/qbanner/images/slide-7.jpg +0 -0
  91. skin/frontend/default/default/qaz/qbanner/images/slide.jpg +0 -0
app/code/community/Qaz/All/Helper/Data.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * http://www.extensionsmagento.com
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the EULA
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+
12
+ *
13
+ * @category Qaz
14
+ * @package Qaz_All
15
+ * @copyright Copyright (c) 2011 Qazware http://www.extensionsmagento.com
16
+ */
17
+ class Qaz_All_Helper_Data extends Mage_Core_Helper_Abstract {
18
+
19
+ }
20
+
app/code/community/Qaz/All/etc/config.xml ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Qaz_All>
5
+ <version>1.0.1</version>
6
+ </Qaz_All>
7
+ </modules>
8
+ <global>
9
+ <helpers>
10
+ <all>
11
+ <class>Qaz_All_Helper</class>
12
+ </all>
13
+ </helpers>
14
+ </global>
15
+ <adminhtml>
16
+ <acl>
17
+ <resources>
18
+ <all>
19
+ <title>Allow Everything</title>
20
+ </all>
21
+ <admin>
22
+ <children>
23
+ <system>
24
+ <children>
25
+ <config>
26
+ <children>
27
+ <all>
28
+ <title>qazMagentoExtensions - All</title>
29
+ </all>
30
+ </children>
31
+ </config>
32
+ </children>
33
+ </system>
34
+ </children>
35
+ </admin>
36
+ </resources>
37
+ </acl>
38
+ </adminhtml>
39
+ </config>
app/code/community/Qaz/All/etc/system.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <qall translate="label" module="all">
5
+ <label>Qazware Extensions</label>
6
+ <sort_order>100</sort_order>
7
+ </qall>
8
+ </tabs>
9
+ </config>
app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Qaz_Qbanner_Block_Adminhtml_Qbanner extends Mage_Adminhtml_Block_Widget_Grid_Container
3
+ {
4
+ public function __construct()
5
+ {
6
+ $this->_controller = 'adminhtml_qbanner';
7
+ $this->_blockGroup = 'qbanner';
8
+ $this->_headerText = Mage::helper('qbanner')->__('Qbanner Manager');
9
+ $this->_addButtonLabel = Mage::helper('qbanner')->__('Add New Banner');
10
+ parent::__construct();
11
+ }
12
+ }
app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Block_Adminhtml_Qbanner_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
4
+ {
5
+ public function __construct()
6
+ {
7
+ parent::__construct();
8
+
9
+ $this->_objectId = 'id';
10
+ $this->_blockGroup = 'qbanner';
11
+ $this->_controller = 'adminhtml_qbanner';
12
+
13
+ $this->_updateButton('save', 'label', Mage::helper('qbanner')->__('Save Banner'));
14
+ $this->_updateButton('delete', 'label', Mage::helper('qbanner')->__('Delete Banner'));
15
+
16
+ $this->_addButton('saveandcontinue', array(
17
+ 'label' => Mage::helper('adminhtml')->__('Save And Continue Edit'),
18
+ 'onclick' => 'saveAndContinueEdit()',
19
+ 'class' => 'save',
20
+ ), -100);
21
+
22
+ $this->_formScripts[] = "
23
+ function saveAndContinueEdit(){
24
+ editForm.submit($('edit_form').action+'back/edit/');
25
+ }
26
+ ";
27
+ }
28
+
29
+ public function getHeaderText()
30
+ {
31
+ if( Mage::registry('qbanner_data') && Mage::registry('qbanner_data')->getId() ) {
32
+ return Mage::helper('qbanner')->__("Edit Banner '%s'", $this->htmlEscape(Mage::registry('qbanner_data')->getTitle()));
33
+ } else {
34
+ return Mage::helper('qbanner')->__('Add New Banner');
35
+ }
36
+ }
37
+ }
app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit/Form.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Block_Adminhtml_Qbanner_Edit_Form extends Mage_Adminhtml_Block_Widget_Form {
4
+
5
+ protected function _prepareForm() {
6
+ $form = new Varien_Data_Form(array(
7
+ 'id' => 'edit_form',
8
+ 'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
9
+ 'method' => 'post',
10
+ 'enctype' => 'multipart/form-data'
11
+ )
12
+ );
13
+
14
+ $form->setUseContainer(true);
15
+ $this->setForm($form);
16
+ return parent::_prepareForm();
17
+ }
18
+
19
+ }
app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit/Tab/Category.php ADDED
@@ -0,0 +1,194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @author kevin.magento@gmail.com
4
+ */
5
+ class Qaz_Qbanner_Block_Adminhtml_QBanner_Edit_Tab_Category extends Mage_Adminhtml_Block_Catalog_Category_Tree
6
+ {
7
+ protected $_categoryIds;
8
+ protected $_selectedNodes = null;
9
+
10
+ public function __construct()
11
+ {
12
+ parent::__construct();
13
+ $this->setTemplate('qaz/qbanner/edit/tab/category.phtml');
14
+ }
15
+
16
+ public function getBanner()
17
+ {
18
+ return Mage::registry('qbanner_data');
19
+ }
20
+
21
+ public function isReadonly()
22
+ {
23
+ return $this->getBanner()->getCategoriesReadonly();
24
+ }
25
+
26
+ protected function getCategoryIds()
27
+ {
28
+ $_categoryList = $this->getBanner()->getCategoryId();
29
+ return is_array($_categoryList) ? $_categoryList : array();
30
+ }
31
+
32
+ public function getIdsString()
33
+ {
34
+ return implode(',', $this->getCategoryIds());
35
+ }
36
+
37
+ public function getRootNode()
38
+ {
39
+ $root = $this->getRoot();
40
+ if ($root && in_array($root->getId(), $this->getCategoryIds())) {
41
+ $root->setChecked(true);
42
+ }
43
+ return $root;
44
+ }
45
+
46
+ public function getRoot($parentNodeCategory=null, $recursionLevel=3)
47
+ {
48
+ if (!is_null($parentNodeCategory) && $parentNodeCategory->getId()) {
49
+ return $this->getNode($parentNodeCategory, $recursionLevel);
50
+ }
51
+ $root = Mage::registry('root');
52
+ if (is_null($root)) {
53
+ $storeId = (int) $this->getRequest()->getParam('store');
54
+
55
+ if ($storeId) {
56
+ $store = Mage::app()->getStore($storeId);
57
+ $rootId = $store->getRootCategoryId();
58
+ }
59
+ else {
60
+ $rootId = Mage_Catalog_Model_Category::TREE_ROOT_ID;
61
+ }
62
+
63
+ $ids = $this->getSelectedCategoriesPathIds($rootId);
64
+ $tree = Mage::getResourceSingleton('catalog/category_tree')
65
+ ->loadByIds($ids, false, false);
66
+
67
+ if ($this->getCategory()) {
68
+ $tree->loadEnsuredNodes($this->getCategory(), $tree->getNodeById($rootId));
69
+ }
70
+
71
+ $tree->addCollectionData($this->getCategoryCollection());
72
+
73
+ $root = $tree->getNodeById($rootId);
74
+
75
+ if ($root && $rootId != Mage_Catalog_Model_Category::TREE_ROOT_ID) {
76
+ $root->setIsVisible(true);
77
+ if ($this->isReadonly()) {
78
+ $root->setDisabled(true);
79
+ }
80
+ }
81
+ elseif($root && $root->getId() == Mage_Catalog_Model_Category::TREE_ROOT_ID) {
82
+ $root->setName(Mage::helper('catalog')->__('Root'));
83
+ }
84
+
85
+ Mage::register('root', $root);
86
+ }
87
+
88
+ return $root;
89
+ }
90
+
91
+ protected function _getNodeJson($node, $level=1)
92
+ {
93
+ $item = parent::_getNodeJson($node, $level);
94
+
95
+ $isParent = $this->_isParentSelectedCategory($node);
96
+
97
+ if ($isParent) {
98
+ $item['expanded'] = true;
99
+ }
100
+
101
+ if (in_array($node->getId(), $this->getCategoryIds())) {
102
+ $item['checked'] = true;
103
+ }
104
+
105
+ if ($this->isReadonly()) {
106
+ $item['disabled'] = true;
107
+ }
108
+ return $item;
109
+ }
110
+
111
+ protected function _isParentSelectedCategory($node)
112
+ {
113
+ foreach ($this->_getSelectedNodes() as $selected) {
114
+ if ($selected) {
115
+ $pathIds = explode('/', $selected->getPathId());
116
+ if (in_array($node->getId(), $pathIds)) {
117
+ return true;
118
+ }
119
+ }
120
+ }
121
+
122
+ return false;
123
+ }
124
+
125
+ protected function _getSelectedNodes()
126
+ {
127
+ if ($this->_selectedNodes === null) {
128
+ $this->_selectedNodes = array();
129
+ $root = $this->getRoot();
130
+ foreach ($this->getCategoryIds() as $categoryId) {
131
+ if ($root) {
132
+ $this->_selectedNodes[] = $root->getTree()->getNodeById($categoryId);
133
+ }
134
+ }
135
+ }
136
+
137
+ return $this->_selectedNodes;
138
+ }
139
+
140
+ public function getCategoryChildrenJson($categoryId)
141
+ {
142
+ $category = Mage::getModel('catalog/category')->load($categoryId);
143
+ $node = $this->getRoot($category, 1)->getTree()->getNodeById($categoryId);
144
+
145
+ if (!$node || !$node->hasChildren()) {
146
+ return '[]';
147
+ }
148
+
149
+ $children = array();
150
+ foreach ($node->getChildren() as $child) {
151
+ $children[] = $this->_getNodeJson($child);
152
+ }
153
+
154
+ return Mage::helper('qbanner')->jsonEncode($children);
155
+ }
156
+
157
+ public function getLoadTreeUrl($expanded=null)
158
+ {
159
+ return $this->getUrl('*/*/categoriesJson', array('_current'=>true));
160
+ }
161
+
162
+ /**
163
+ * Return distinct path ids of selected categories
164
+ *
165
+ * @param int $rootId Root category Id for context
166
+ * @return array
167
+ */
168
+ public function getSelectedCategoriesPathIds($rootId = false)
169
+ {
170
+ $ids = array();
171
+ $collection = Mage::getModel('catalog/category')->getCollection()
172
+ ->addFieldToFilter('entity_id', array('in'=>$this->getCategoryIds()));
173
+ foreach ($collection as $item) {
174
+ if ($rootId && !in_array($rootId, $item->getPathIds())) {
175
+ continue;
176
+ }
177
+ foreach ($item->getPathIds() as $id) {
178
+ if (!in_array($id, $ids)) {
179
+ $ids[] = $id;
180
+ }
181
+ }
182
+ }
183
+ return $ids;
184
+ }
185
+
186
+ public function getProductsJson()
187
+ {
188
+ $products = $this->getBanner()->getProductsPosition();
189
+ if (!empty($products)) {
190
+ return Mage::helper('core')->jsonEncode($products);
191
+ }
192
+ return '{}';
193
+ }
194
+ }
app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit/Tab/Form.php ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Block_Adminhtml_Qbanner_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form {
4
+
5
+ protected function _prepareForm() {
6
+ $form = new Varien_Data_Form();
7
+ $this->setForm($form);
8
+ $fieldset = $form->addFieldset('qbanner_form', array('legend' => Mage::helper('qbanner')->__('Banner information')));
9
+
10
+ $fieldset->addField('title', 'text', array(
11
+ 'label' => Mage::helper('qbanner')->__('Title'),
12
+ 'class' => 'required-entry',
13
+ 'required' => true,
14
+ 'name' => 'title',
15
+ ));
16
+ $fieldset->addField('width', 'text', array(
17
+ 'label' => Mage::helper('qbanner')->__('Width'),
18
+ 'class' => 'required-entry',
19
+ 'required' => true,
20
+ 'name' => 'width',
21
+ ));
22
+ $fieldset->addField('height', 'text', array(
23
+ 'label' => Mage::helper('qbanner')->__('Height'),
24
+ 'class' => 'required-entry',
25
+ 'required' => true,
26
+ 'name' => 'height',
27
+ ));
28
+ $fieldset->addField('duration', 'text', array(
29
+ 'label' => Mage::helper('qbanner')->__('Duration'),
30
+ 'class' => 'required-entry',
31
+ 'required' => true,
32
+ 'name' => 'duration',
33
+ ));
34
+ $fieldset->addField('position', 'select', array(
35
+ 'label' => Mage::helper('qbanner')->__('Position'),
36
+ 'name' => 'position',
37
+ 'values' => Mage::getSingleton('qbanner/option_position')->getOptionArrayEdit(),
38
+ ));
39
+
40
+ $fieldset->addField('effect', 'select', array(
41
+ 'label' => Mage::helper('qbanner')->__('Effects'),
42
+ 'name' => 'effect',
43
+ 'values' => array(
44
+ array('value'=>'fade','label'=>'Fade'),
45
+ array('value'=>'slide','label'=>'Slide'),
46
+ ),
47
+ ));
48
+
49
+ $fieldset->addField('show_caption', 'select', array(
50
+ 'label' => Mage::helper('qbanner')->__('Show Caption'),
51
+ 'name' => 'show_caption',
52
+ 'values' => array(
53
+ array('value'=>1,'label'=>'Yes'),
54
+ array('value'=>0,'label'=>'No'),
55
+ ),
56
+ ));
57
+
58
+ $fieldset->addField('show_pagination', 'select', array(
59
+ 'label' => Mage::helper('qbanner')->__('Show Pagination'),
60
+ 'name' => 'show_pagination',
61
+ 'values' => array(
62
+ array('value'=>1,'label'=>'Yes'),
63
+ array('value'=>0,'label'=>'No'),
64
+ ),
65
+ ));
66
+ $fieldset->addField('show_next_prev', 'select', array(
67
+ 'label' => Mage::helper('qbanner')->__('Show Next & Prev'),
68
+ 'name' => 'show_next_prev',
69
+ 'values' => array(
70
+ array('value'=>1,'label'=>'Yes'),
71
+ array('value'=>0,'label'=>'No'),
72
+ ),
73
+ ));
74
+
75
+ $fieldset->addField('auto_slide', 'select', array(
76
+ 'label' => Mage::helper('qbanner')->__('Auto Slide'),
77
+ 'name' => 'auto_slide',
78
+ 'values' => array(
79
+ array('value'=>1,'label'=>'Yes'),
80
+ array('value'=>0,'label'=>'No'),
81
+ ),
82
+ ));
83
+
84
+ $fieldset->addField('mouseover_stop', 'select', array(
85
+ 'label' => Mage::helper('qbanner')->__('Mouseover Stop'),
86
+ 'name' => 'mouseover_stop',
87
+ 'values' => array(
88
+ array('value'=>1,'label'=>'Yes'),
89
+ array('value'=>0,'label'=>'No'),
90
+ ),
91
+ ));
92
+
93
+ $fieldset->addField('status', 'select', array(
94
+ 'label' => Mage::helper('qbanner')->__('Status'),
95
+ 'name' => 'status',
96
+ 'values' => Mage::getSingleton('qbanner/option_status')->getOptionArrayEdit(),
97
+ ));
98
+
99
+ // if (!Mage::app()->isSingleStoreMode()) {
100
+ $fieldset->addField('stores', 'multiselect', array(
101
+ 'label' => Mage::helper('qbanner')->__('Show In'),
102
+ 'required' => true,
103
+ 'name' => 'stores[]',
104
+ 'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(),
105
+ ));
106
+ // } else {
107
+ // $fieldset->addField('stores', 'hidden', array(
108
+ // 'name' => 'stores[]',
109
+ // 'value' => Mage::app()->getStore(true)->getId()
110
+ // ));
111
+ // }
112
+
113
+ if (Mage::getSingleton('adminhtml/session')->getQbannerData()) {
114
+ $form->setValues(Mage::getSingleton('adminhtml/session')->getQbannerData());
115
+ Mage::getSingleton('adminhtml/session')->setQbannerData(null);
116
+ } elseif (Mage::registry('qbanner_data')) {
117
+ $form->setValues(Mage::registry('qbanner_data')->getData());
118
+ }
119
+ return parent::_prepareForm();
120
+ }
121
+
122
+ }
app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit/Tab/Image.php ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @author kevin.magento@gmail.com
5
+ */
6
+ class Qaz_Qbanner_Block_Adminhtml_QBanner_Edit_Tab_Image extends Mage_Adminhtml_Block_Widget {
7
+
8
+ protected function _prepareForm() {
9
+ $data = $this->getRequest()->getPost();
10
+ $form = new Varien_Data_Form();
11
+ $form->setValues($data);
12
+ $this->setForm($form);
13
+
14
+ return parent::_prepareForm();
15
+ }
16
+
17
+ public function __construct() {
18
+ parent::__construct();
19
+ $this->setTemplate('qaz/qbanner/edit/tab/image.phtml');
20
+ $this->setId('image_gallery');
21
+ $this->setHtmlId('image_gallery');
22
+ }
23
+
24
+ protected function _prepareLayout() {
25
+ $this->setChild('uploader',
26
+ $this->getLayout()->createBlock('adminhtml/media_uploader')
27
+ );
28
+
29
+ $this->getUploader()->getConfig()
30
+ ->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/upload'))
31
+ ->setFileField('image')
32
+ ->setFilters(array(
33
+ 'images' => array(
34
+ 'label' => Mage::helper('adminhtml')->__('Images (.gif, .jpg, .png)'),
35
+ 'files' => array('*.gif', '*.jpg','*.jpeg', '*.png')
36
+ )
37
+ ));
38
+
39
+ $this->setChild(
40
+ 'delete_button',
41
+ $this->getLayout()->createBlock('adminhtml/widget_button')
42
+ ->addData(array(
43
+ 'id' => '{{id}}-delete',
44
+ 'class' => 'delete',
45
+ 'type' => 'button',
46
+ 'label' => Mage::helper('adminhtml')->__('Remove'),
47
+ 'onclick' => $this->getJsObjectName() . '.removeFile(\'{{fileId}}\')'
48
+ ))
49
+ );
50
+
51
+ return parent::_prepareLayout();
52
+ }
53
+
54
+ /**
55
+ * Retrive uploader block
56
+ *
57
+ * @return Mage_Adminhtml_Block_Media_Uploader
58
+ */
59
+ public function getUploader() {
60
+ return $this->getChild('uploader');
61
+ }
62
+
63
+ /**
64
+ * Retrive uploader block html
65
+ *
66
+ * @return string
67
+ */
68
+ public function getUploaderHtml() {
69
+ return $this->getChildHtml('uploader');
70
+ }
71
+
72
+ public function getJsObjectName() {
73
+ return $this->getHtmlId() . 'JsObject';
74
+ }
75
+
76
+ public function getAddImagesButton() {
77
+ return $this->getButtonHtml(
78
+ Mage::helper('catalog')->__('Add New Images'),
79
+ $this->getJsObjectName() . '.showUploader()',
80
+ 'add',
81
+ $this->getHtmlId() . '_add_images_button'
82
+ );
83
+ }
84
+
85
+ public function getImagesJson() {
86
+ $_model = Mage::registry('qbanner_data');
87
+ $_data = $_model->getImage();
88
+ if (is_array($_data) and sizeof($_data) > 0) {
89
+ $_result = array();
90
+ foreach ($_data as &$_item) {
91
+ $_result[] = array(
92
+ 'value_id' => $_item['image_id'],
93
+ 'url' => Mage::getSingleton('qbanner/config')->getBaseMediaUrl() . $_item['file'],
94
+ 'file' => $_item['file'],
95
+ 'label' => $_item['label'],
96
+ 'position' => $_item['position'],
97
+ 'disabled' => $_item['disabled']);
98
+ }
99
+ return Zend_Json::encode($_result);
100
+ }
101
+ return '[]';
102
+ }
103
+
104
+ public function getImagesValuesJson() {
105
+ $values = array();
106
+
107
+ return Zend_Json::encode($values);
108
+ }
109
+
110
+
111
+ /**
112
+ * Enter description here...
113
+ *
114
+ * @return array
115
+ */
116
+ public function getMediaAttributes() {
117
+
118
+ }
119
+
120
+ public function getImageTypes() {
121
+ $type = array();
122
+ $type['gallery']['label'] = "qbanner";
123
+ $type['gallery']['field'] = "qbanner";
124
+
125
+ $imageTypes = array();
126
+
127
+ return $type;
128
+ }
129
+
130
+ public function getImageTypesJson() {
131
+ return Zend_Json::encode($this->getImageTypes());
132
+ }
133
+
134
+ public function getCustomRemove() {
135
+ return $this->setChild(
136
+ 'delete_button',
137
+ $this->getLayout()->createBlock('adminhtml/widget_button')
138
+ ->addData(array(
139
+ 'id' => '{{id}}-delete',
140
+ 'class' => 'delete',
141
+ 'type' => 'button',
142
+ 'label' => Mage::helper('adminhtml')->__('Remove'),
143
+ 'onclick' => $this->getJsObjectName() . '.removeFile(\'{{fileId}}\')'
144
+ ))
145
+ );
146
+ }
147
+
148
+ public function getDeleteButtonHtml() {
149
+ return $this->getChildHtml('delete_button');
150
+ }
151
+
152
+ public function getCustomValueId() {
153
+ return $this->setChild(
154
+ 'value_id',
155
+ $this->getLayout()->createBlock('adminhtml/widget_button')
156
+ ->addData(array(
157
+ 'id' => '{{id}}-value',
158
+ 'class' => 'value_id',
159
+ 'type' => 'text',
160
+ 'label' => Mage::helper('adminhtml')->__('ValueId'),
161
+ ))
162
+ );
163
+ }
164
+
165
+ public function getValueIdHtml() {
166
+ return $this->getChildHtml('value_id');
167
+ }
168
+ }
app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit/Tab/Pages.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @author kevin.magento@gmail.com
5
+ */
6
+ class Qaz_Qbanner_Block_Adminhtml_QBanner_Edit_Tab_Pages extends Mage_Adminhtml_Block_Widget_Form {
7
+
8
+ protected function _prepareForm() {
9
+ $form = new Varien_Data_Form();
10
+ $this->setForm($form);
11
+
12
+ $fieldset = $form->addFieldset('qbanner_form', array('legend' => Mage::helper('qbanner')->__('Banner Pages')));
13
+ $fieldset->addField('pages', 'multiselect', array(
14
+ 'label' => Mage::helper('qbanner')->__('Visible In'),
15
+ 'name' => 'pages[]',
16
+ 'values' => Mage::getSingleton('qbanner/option_pages')->getOptionArray(),
17
+ ));
18
+ $showIn = array(
19
+ array('value'=>'catalog','label'=>'Category & Product Page'),
20
+ array('value'=>'customer','label'=>'Customer Page'),
21
+ array('value'=>'checkout','label'=>'Cart & Checkout Page'),
22
+ );
23
+
24
+ $fieldset->addField('show_in', 'multiselect', array(
25
+ 'label' => Mage::helper('qbanner')->__('Show In'),
26
+ 'name' => 'show_in[]',
27
+ 'values' => $showIn,
28
+ ));
29
+ if (Mage::getSingleton('adminhtml/session')->getQbannerData()) {
30
+ $form->setValues(Mage::getSingleton('adminhtml/session')->getQbannerData());
31
+ Mage::getSingleton('adminhtml/session')->setQbannerData(null);
32
+ } elseif (Mage::registry('qbanner_data')) {
33
+ $form->setValues(Mage::registry('qbanner_data')->getData());
34
+ }
35
+
36
+ return parent::_prepareForm();
37
+ }
38
+
39
+ }
app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Edit/Tabs.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Block_Adminhtml_Qbanner_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs {
4
+
5
+ public function __construct() {
6
+ parent::__construct();
7
+ $this->setId('qbanner_tabs');
8
+ $this->setDestElementId('edit_form');
9
+ $this->setTitle(Mage::helper('qbanner')->__('Banner Information'));
10
+ }
11
+
12
+ protected function _beforeToHtml() {
13
+ $this->addTab('form_section', array(
14
+ 'label' => Mage::helper('qbanner')->__('Banner Information'),
15
+ 'title' => Mage::helper('qbanner')->__('Banner Information'),
16
+ 'content' => $this->getLayout()->createBlock('qbanner/adminhtml_qbanner_edit_tab_form')->toHtml(),
17
+ ));
18
+ $this->addTab('image_section', array(
19
+ 'label' => Mage::helper('qbanner')->__('Banner Images'),
20
+ 'title' => Mage::helper('qbanner')->__('Banner Images'),
21
+ 'content' => $this->getLayout()->createBlock('qbanner/adminhtml_qbanner_edit_tab_image')->toHtml(),
22
+ ));
23
+ $this->addTab('page_section', array(
24
+ 'label' => Mage::helper('qbanner')->__('Display on Pages'),
25
+ 'title' => Mage::helper('qbanner')->__('Display on Pages'),
26
+ 'content' => $this->getLayout()->createBlock('qbanner/adminhtml_qbanner_edit_tab_pages')->toHtml(),
27
+ ));
28
+ $this->addTab('category_section', array(
29
+ 'label' => Mage::helper('qbanner')->__('Display on Categories'),
30
+ 'title' => Mage::helper('qbanner')->__('Display on Categories'),
31
+ 'content' => $this->getLayout()->createBlock('qbanner/adminhtml_qbanner_edit_tab_category')->toHtml(),
32
+ ));
33
+ return parent::_beforeToHtml();
34
+ }
35
+
36
+ }
app/code/community/Qaz/Qbanner/Block/Adminhtml/Qbanner/Grid.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Block_Adminhtml_Qbanner_Grid extends Mage_Adminhtml_Block_Widget_Grid {
4
+
5
+ public function __construct() {
6
+ parent::__construct();
7
+ $this->setId('qbannerGrid');
8
+ $this->setDefaultSort('qbanner_id');
9
+ $this->setDefaultDir('ASC');
10
+ $this->setSaveParametersInSession(true);
11
+ }
12
+
13
+ protected function _prepareCollection() {
14
+ $collection = Mage::getModel('qbanner/qbanner')->getCollection();
15
+ $this->setCollection($collection);
16
+ return parent::_prepareCollection();
17
+ }
18
+
19
+ protected function _getStore() {
20
+ $storeId = (int) $this->getRequest()->getParam('store', 0);
21
+ return Mage::app()->getStore($storeId);
22
+ }
23
+
24
+ protected function _prepareColumns() {
25
+ $this->addColumn('qbanner_id', array(
26
+ 'header' => Mage::helper('qbanner')->__('ID'),
27
+ 'align' => 'right',
28
+ 'width' => '50px',
29
+ 'index' => 'qbanner_id',
30
+ ));
31
+
32
+ $this->addColumn('title', array(
33
+ 'header' => Mage::helper('qbanner')->__('Title'),
34
+ 'align' => 'left',
35
+ 'index' => 'title',
36
+ ));
37
+
38
+ $this->addColumn('position', array(
39
+ 'header' => Mage::helper('qbanner')->__('Position'),
40
+ 'align' => 'left',
41
+ 'width' => '80px',
42
+ 'index' => 'position',
43
+ 'type' => 'options',
44
+ 'options' => Mage::getSingleton('qbanner/option_position')->getOptionArray(),
45
+ ));
46
+
47
+ $this->addColumn('status', array(
48
+ 'header' => Mage::helper('qbanner')->__('Status'),
49
+ 'align' => 'left',
50
+ 'width' => '80px',
51
+ 'index' => 'status',
52
+ 'type' => 'options',
53
+ 'options' => Mage::getSingleton('qbanner/option_status')->getOptionArray(),
54
+ ));
55
+
56
+ $this->addColumn('action', array(
57
+ 'header' => Mage::helper('qbanner')->__('Action'),
58
+ 'width' => '100',
59
+ 'type' => 'action',
60
+ 'getter' => 'getId',
61
+ 'actions' => array(
62
+ array(
63
+ 'caption' => Mage::helper('qbanner')->__('Edit'),
64
+ 'url' => array('base' => '*/*/edit'),
65
+ 'field' => 'id'
66
+ )
67
+ ),
68
+ 'filter' => false,
69
+ 'sortable' => false,
70
+ 'index' => 'stores',
71
+ 'is_system' => true,
72
+ ));
73
+ return parent::_prepareColumns();
74
+ }
75
+
76
+ protected function _prepareMassaction() {
77
+ $this->setMassactionIdField('qbanner_id');
78
+ $this->getMassactionBlock()->setFormFieldName('qbanner');
79
+
80
+ $this->getMassactionBlock()->addItem('delete', array(
81
+ 'label' => Mage::helper('qbanner')->__('Delete'),
82
+ 'url' => $this->getUrl('*/*/massDelete'),
83
+ 'confirm' => Mage::helper('qbanner')->__('Are you sure?')
84
+ ));
85
+
86
+ $statuses = Mage::getSingleton('qbanner/option_status')->getOptionArray();
87
+
88
+ array_unshift($statuses, array('label' => '', 'value' => ''));
89
+ $this->getMassactionBlock()->addItem('status', array(
90
+ 'label' => Mage::helper('qbanner')->__('Change status'),
91
+ 'url' => $this->getUrl('*/*/massStatus', array('_current' => true)),
92
+ 'additional' => array(
93
+ 'visibility' => array(
94
+ 'name' => 'status',
95
+ 'type' => 'select',
96
+ 'class' => 'required-entry',
97
+ 'label' => Mage::helper('qbanner')->__('Status'),
98
+ 'values' => $statuses
99
+ )
100
+ )
101
+ ));
102
+ return $this;
103
+ }
104
+
105
+ public function getRowUrl($row) {
106
+ return $this->getUrl('*/*/edit', array('id' => $row->getId()));
107
+ }
108
+
109
+ }
app/code/community/Qaz/Qbanner/Block/Qbanner.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Block_Qbanner extends Mage_Core_Block_Template {
4
+
5
+
6
+ public function _prepareLayout() {
7
+ $headBlock = $this->getLayout()->getBlock('head');
8
+ $headBlock->addJs('qaz/qbanner/jquery.1.5.1.js');
9
+ $headBlock->addJs('qaz/qbanner/jqueryNoconfig.js');
10
+ $headBlock->addJs('qaz/qbanner/jquery.slides.min.js');
11
+
12
+ $headBlock->addCss('qaz/qbanner/css/global.css');
13
+ return parent::_prepareLayout();
14
+ }
15
+
16
+ public function getQbanner($position = null) {
17
+ $storeId = Mage::app()->getStore()->getId();
18
+
19
+ $collection = Mage::getModel('qbanner/qbanner')->getCollection()
20
+ ->addFieldToFilter('status', 1)
21
+ ;
22
+ if (!Mage::app()->isSingleStoreMode()) {
23
+ $collection->addStoreFilter($storeId);
24
+ }
25
+ if (Mage::registry('current_category')) {
26
+ $_categoryId = Mage::registry('current_category')->getId();
27
+ $collection->addCategoryFilter($_categoryId);
28
+ }
29
+ if (Mage::app()->getFrontController()->getRequest()->getRouteName() == 'cms') {
30
+ $_pageId = Mage::getBlockSingleton('cms/page')->getPage()->getPageId();
31
+ $collection->addPageFilter($_pageId);
32
+ }
33
+ if ($position) {
34
+ $collection->addFieldToFilter('position', $position);
35
+ }
36
+
37
+ return $collection;
38
+ }
39
+ /**
40
+ * Add Filter show in Module Name (Catalog , Customer , Checkout , ....)
41
+ * @param type object $banner
42
+ */
43
+ public function addShowInFilter($banner){
44
+ $moduleName = Mage::app()->getRequest()->getModuleName();
45
+ $showIn = $banner->getShowIn();
46
+ if(strlen($showIn) > 0 and $moduleName != 'cms'){
47
+ if(strpos("Show In ".$showIn, $moduleName) > 0)
48
+ return true;
49
+ return false;
50
+ }else{
51
+ return true;
52
+ }
53
+ }
54
+ }
app/code/community/Qaz/Qbanner/Helper/Data.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Helper_Data extends Mage_Core_Helper_Abstract {
4
+
5
+ }
app/code/community/Qaz/Qbanner/Model/Config.php ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Qaz_Qbanner_Model_Config extends Mage_Catalog_Model_Product_Media_Config {
3
+
4
+ /**
5
+ * Filesystem directory path of product images
6
+ * relatively to media folder
7
+ *
8
+ * @return string
9
+ */
10
+ public function getBaseMediaPathAddition()
11
+ {
12
+ return 'qbanner';
13
+ }
14
+
15
+ /**
16
+ * Web-based directory path of product images
17
+ * relatively to media folder
18
+ *
19
+ * @return string
20
+ */
21
+ public function getBaseMediaUrlAddition()
22
+ {
23
+ return 'qbanner';
24
+ }
25
+
26
+ /**
27
+ * Filesystem directory path of temporary product images
28
+ * relatively to media folder
29
+ *
30
+ * @return string
31
+ */
32
+ public function getBaseTmpMediaPathAddition()
33
+ {
34
+ return 'qaz' . DS . $this->getBaseMediaPathAddition();
35
+ }
36
+
37
+ /**
38
+ * Web-based directory path of temporary product images
39
+ * relatively to media folder
40
+ *
41
+ * @return string
42
+ */
43
+ public function getBaseTmpMediaUrlAddition()
44
+ {
45
+ return 'qaz/' . $this->getBaseMediaUrlAddition();
46
+ }
47
+
48
+ public function getBaseMediaPath()
49
+ {
50
+ return Mage::getBaseDir('media') . DS . 'qaz' . DS . 'qbanner';
51
+ }
52
+
53
+ public function getBaseMediaUrl()
54
+ {
55
+ return Mage::getBaseUrl('media') . 'qaz/qbanner';
56
+ }
57
+
58
+ public function getBaseTmpMediaPath()
59
+ {
60
+ return Mage::getBaseDir('media') . DS . $this->getBaseTmpMediaPathAddition();
61
+ }
62
+
63
+ public function getBaseTmpMediaUrl()
64
+ {
65
+ return Mage::getBaseUrl('media') . $this->getBaseTmpMediaUrlAddition();
66
+ }
67
+
68
+ public function getMediaUrl($file)
69
+ {
70
+ $file = $this->_prepareFileForUrl($file);
71
+
72
+ if(substr($file, 0, 1) == '/') {
73
+ return $this->getBaseMediaUrl() . $file;
74
+ }
75
+
76
+ return $this->getBaseMediaUrl() . '/' . $file;
77
+ }
78
+
79
+ public function getMediaPath($file)
80
+ {
81
+ $file = $this->_prepareFileForPath($file);
82
+
83
+ if(substr($file, 0, 1) == DS) {
84
+ return $this->getBaseMediaPath() . DS . substr($file, 1);
85
+ }
86
+
87
+ return $this->getBaseMediaPath() . DS . $file;
88
+ }
89
+
90
+ public function getTmpMediaUrl($file)
91
+ {
92
+ $file = $this->_prepareFileForUrl($file);
93
+
94
+ if(substr($file, 0, 1) == '/') {
95
+ $file = substr($file, 1);
96
+ }
97
+
98
+ return $this->getBaseTmpMediaUrl() . '/' . $file;
99
+ }
100
+
101
+ /**
102
+ * Part of URL of temporary product images
103
+ * relatively to media folder
104
+ *
105
+ * @return string
106
+ */
107
+ public function getTmpMediaShortUrl($file)
108
+ {
109
+ $file = $this->_prepareFileForUrl($file);
110
+
111
+ if(substr($file, 0, 1) == '/') {
112
+ $file = substr($file, 1);
113
+ }
114
+
115
+ return $this->getBaseTmpMediaUrlAddition() . '/' . $file;
116
+ }
117
+
118
+ /**
119
+ * Part of URL of product images relatively to media folder
120
+ *
121
+ * @return string
122
+ */
123
+ public function getMediaShortUrl($file)
124
+ {
125
+ $file = $this->_prepareFileForUrl($file);
126
+
127
+ if(substr($file, 0, 1) == '/') {
128
+ $file = substr($file, 1);
129
+ }
130
+
131
+ return $this->getBaseMediaUrlAddition() . '/' . $file;
132
+ }
133
+
134
+ public function getTmpMediaPath($file)
135
+ {
136
+ $file = $this->_prepareFileForPath($file);
137
+
138
+ if(substr($file, 0, 1) == DS) {
139
+ return $this->getBaseTmpMediaPath() . DS . substr($file, 1);
140
+ }
141
+
142
+ return $this->getBaseTmpMediaPath() . DS . $file;
143
+ }
144
+
145
+ protected function _prepareFileForUrl($file)
146
+ {
147
+ return str_replace(DS, '/', $file);
148
+ }
149
+
150
+ protected function _prepareFileForPath($file)
151
+ {
152
+ return str_replace('/', DS, $file);
153
+ }
154
+
155
+ }
app/code/community/Qaz/Qbanner/Model/Mysql4/Qbanner.php ADDED
@@ -0,0 +1,282 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Model_Mysql4_Qbanner extends Mage_Core_Model_Mysql4_Abstract {
4
+
5
+ public function _construct() {
6
+ // Note that the qqbanner_id refers to the key field in your database table.
7
+ $this->_init('qbanner/qbanner', 'qbanner_id');
8
+ }
9
+
10
+ /**
11
+ * Load images
12
+ */
13
+ public function loadImage(Mage_Core_Model_Abstract $object) {
14
+ return $this->__loadImage($object);
15
+ }
16
+
17
+ /**
18
+ *
19
+ * @param Mage_Core_Model_Abstract $object
20
+ */
21
+ protected function _afterLoad(Mage_Core_Model_Abstract $object) {
22
+ if (!$object->getIsMassDelete()) {
23
+ $object = $this->__loadStore($object);
24
+ $object = $this->__loadPage($object);
25
+ $object = $this->__loadCategory($object);
26
+ $object = $this->__loadImage($object);
27
+ }
28
+
29
+ return parent::_afterLoad($object);
30
+ }
31
+
32
+ /**
33
+ * Retrieve select object for load object data
34
+ *
35
+ * @param string $field
36
+ * @param mixed $value
37
+ * @return Zend_Db_Select
38
+ */
39
+ protected function _getLoadSelect($field, $value, $object) {
40
+ $select = parent::_getLoadSelect($field, $value, $object);
41
+
42
+ if ($data = $object->getStoreId()) {
43
+ $select->join(
44
+ array('store' => $this->getTable('qbanner/qqbanner_store')), $this->getMainTable() . '.qbanner_id = `store`.qbanner_id')
45
+ ->where('`store`.store_id in (0, ?) ', $data);
46
+ }
47
+ if ($data = $object->getPageId()) {
48
+ $select->join(
49
+ array('page' => $this->getTable('qbanner/qbanner_page')), $this->getMainTable() . '.qbanner_id = `page`.qbanner_id')
50
+ ->where('`page`.page_id in (?) ', $data);
51
+ }
52
+ if ($data = $object->getCategoryId()) {
53
+ $select->join(
54
+ array('category' => $this->getTable('qbanner/qbanner_category')), $this->getMainTable() . '.qbanner_id = `category`.qbanner_id')
55
+ ->where('`category`.category_id in (?) ', $data);
56
+ }
57
+ $select->order('title DESC')->limit(1);
58
+
59
+ return $select;
60
+ }
61
+
62
+ /**
63
+ * Call-back function
64
+ */
65
+ protected function _afterSave(Mage_Core_Model_Abstract $object) {
66
+ if (!$object->getIsMassStatus()) {
67
+ $this->__saveToStoreTable($object);
68
+ $this->__saveToPageTable($object);
69
+ $this->__saveToCategoryTable($object);
70
+ $this->__saveToImageTable($object);
71
+ }
72
+
73
+ return parent::_afterSave($object);
74
+ }
75
+
76
+ /**
77
+ * Call-back function
78
+ */
79
+ protected function _beforeDelete(Mage_Core_Model_Abstract $object) {
80
+ // Cleanup stats on blog delete
81
+ $adapter = $this->_getReadAdapter();
82
+ // 1. Delete blog/store
83
+ $adapter->delete($this->getTable('qbanner/qbanner_store'), 'qbanner_id=' . $object->getId());
84
+ // 2. Delete blog/post_cat
85
+ $adapter->delete($this->getTable('qbanner/qbanner_page'), 'qbanner_id=' . $object->getId());
86
+ // 3. Delete blog/post_comment
87
+ $adapter->delete($this->getTable('qbanner/qbanner_category'), 'qbanner_id=' . $object->getId());
88
+ // Update tags
89
+
90
+ return parent::_beforeDelete($object);
91
+ }
92
+
93
+ /**
94
+ * Load stores
95
+ */
96
+ private function __loadStore(Mage_Core_Model_Abstract $object) {
97
+ $select = $this->_getReadAdapter()->select()
98
+ ->from($this->getTable('qbanner/qbanner_store'))
99
+ ->where('qbanner_id = ?', $object->getId());
100
+
101
+ if ($data = $this->_getReadAdapter()->fetchAll($select)) {
102
+ $array = array();
103
+ foreach ($data as $row) {
104
+ $array[] = $row['store_id'];
105
+ }
106
+ $object->setData('stores', $array);
107
+ }
108
+ return $object;
109
+ }
110
+
111
+ /**
112
+ * Load pages
113
+ */
114
+ private function __loadPage(Mage_Core_Model_Abstract $object) {
115
+ $select = $this->_getReadAdapter()->select()
116
+ ->from($this->getTable('qbanner/qbanner_page'))
117
+ ->where('qbanner_id = ?', $object->getId());
118
+
119
+ if ($data = $this->_getReadAdapter()->fetchAll($select)) {
120
+ $array = array();
121
+ foreach ($data as $row) {
122
+ $array[] = $row['page_id'];
123
+ }
124
+ $object->setData('pages', $array);
125
+ }
126
+ return $object;
127
+ }
128
+
129
+ /**
130
+ * Load categories
131
+ */
132
+ private function __loadCategory(Mage_Core_Model_Abstract $object) {
133
+ $select = $this->_getReadAdapter()->select()
134
+ ->from($this->getTable('qbanner/qbanner_category'))
135
+ ->where('qbanner_id = ?', $object->getId());
136
+
137
+ if ($data = $this->_getReadAdapter()->fetchAll($select)) {
138
+ $array = array();
139
+ foreach ($data as $row) {
140
+ $array[] = $row['category_id'];
141
+ }
142
+ $object->setData('category_id', $array);
143
+ }
144
+ return $object;
145
+ }
146
+
147
+ /**
148
+ * Load images
149
+ */
150
+ private function __loadImage(Mage_Core_Model_Abstract $object) {
151
+ $select = $this->_getReadAdapter()->select()
152
+ ->from($this->getTable('qbanner/qbanner_image'))
153
+ ->where('qbanner_id = ?', $object->getId())
154
+ ->order(array('position ASC', 'image_id'));
155
+
156
+ $object->setData('image', $this->_getReadAdapter()->fetchAll($select));
157
+ return $object;
158
+ }
159
+
160
+ /**
161
+ * Save stores
162
+ */
163
+ private function __saveToStoreTable(Mage_Core_Model_Abstract $object) {
164
+ if (!$object->getData('stores')) {
165
+ $condition = $this->_getWriteAdapter()->quoteInto('qbanner_id = ?', $object->getId());
166
+ $this->_getWriteAdapter()->delete($this->getTable('qbanner/qbanner_store'), $condition);
167
+
168
+ $storeArray = array(
169
+ 'qbanner_id' => $object->getId(),
170
+ 'store_id' => '0');
171
+ $this->_getWriteAdapter()->insert(
172
+ $this->getTable('qbanner/qbanner_store'), $storeArray);
173
+ return true;
174
+ }
175
+
176
+ $condition = $this->_getWriteAdapter()->quoteInto('qbanner_id = ?', $object->getId());
177
+ $this->_getWriteAdapter()->delete($this->getTable('qbanner/qbanner_store'), $condition);
178
+ foreach ((array) $object->getData('stores') as $store) {
179
+ $storeArray = array();
180
+ $storeArray['qbanner_id'] = $object->getId();
181
+ $storeArray['store_id'] = $store;
182
+ $this->_getWriteAdapter()->insert(
183
+ $this->getTable('qbanner/qbanner_store'), $storeArray);
184
+ }
185
+ }
186
+
187
+ /**
188
+ * Save stores
189
+ */
190
+ private function __saveToPageTable(Mage_Core_Model_Abstract $object) {
191
+ if ($data = $object->getData('pages')) {
192
+ $this->_getWriteAdapter()->beginTransaction();
193
+ try {
194
+ $condition = $this->_getWriteAdapter()->quoteInto('qbanner_id = ?', $object->getId());
195
+ $this->_getWriteAdapter()->delete($this->getTable('qbanner/qbanner_page'), $condition);
196
+
197
+ foreach ((array) $data as $page) {
198
+ $pageArray = array();
199
+ $pageArray['qbanner_id'] = $object->getId();
200
+ $pageArray['page_id'] = $page;
201
+ $this->_getWriteAdapter()->insert(
202
+ $this->getTable('qbanner/qbanner_page'), $pageArray);
203
+ }
204
+ $this->_getWriteAdapter()->commit();
205
+ } catch (Exception $e) {
206
+ $this->_getWriteAdapter()->rollBack();
207
+ echo $e->getMessage();
208
+ }
209
+ return true;
210
+ }
211
+
212
+ $condition = $this->_getWriteAdapter()->quoteInto('qbanner_id = ?', $object->getId());
213
+ $this->_getWriteAdapter()->delete($this->getTable('qbanner/qbanner_page'), $condition);
214
+ }
215
+
216
+ /**
217
+ * Save categories
218
+ */
219
+ private function __saveToCategoryTable(Mage_Core_Model_Abstract $object) {
220
+ if ($data = $object->getData('categories')) {
221
+ $this->_getWriteAdapter()->beginTransaction();
222
+ try {
223
+ $condition = $this->_getWriteAdapter()->quoteInto('qbanner_id = ?', $object->getId());
224
+ $this->_getWriteAdapter()->delete($this->getTable('qbanner/qbanner_category'), $condition);
225
+
226
+ $data = array_unique($data);
227
+ foreach ((array) $data as $category) {
228
+ $categoryArray = array();
229
+ $categoryArray['qbanner_id'] = $object->getId();
230
+ $categoryArray['category_id'] = $category;
231
+ $this->_getWriteAdapter()->insert(
232
+ $this->getTable('qbanner/qbanner_category'), $categoryArray);
233
+ }
234
+ $this->_getWriteAdapter()->commit();
235
+ } catch (Exception $e) {
236
+ $this->_getWriteAdapter()->rollBack();
237
+ echo $e->getMessage();
238
+ }
239
+ return true;
240
+ }
241
+
242
+ $condition = $this->_getWriteAdapter()->quoteInto('qbanner_id = ?', $object->getId());
243
+ $this->_getWriteAdapter()->delete($this->getTable('qbanner/qbanner_category'), $condition);
244
+ }
245
+
246
+ /**
247
+ * Save stores
248
+ */
249
+ private function __saveToImageTable(Mage_Core_Model_Abstract $object) {
250
+ if ($_imageList = $object->getData('images')) {
251
+ $_imageList = Zend_Json::decode($_imageList);
252
+ if (is_array($_imageList) and sizeof($_imageList) > 0) {
253
+ $_imageTable = $this->getTable('qbanner/qbanner_image');
254
+ $_adapter = $this->_getWriteAdapter();
255
+ $_adapter->beginTransaction();
256
+ try {
257
+ $condition = $this->_getWriteAdapter()->quoteInto('qbanner_id = ?', $object->getId());
258
+ $this->_getWriteAdapter()->delete($this->getTable('qbanner/qbanner_image'), $condition);
259
+
260
+ foreach ($_imageList as &$_item) {
261
+ if (isset($_item['removed']) and $_item['removed'] == '1') {
262
+ $_adapter->delete($_imageTable, $_adapter->quoteInto('image_id = ?', $_item['value_id'], 'INTEGER'));
263
+ } else {
264
+ $_data = array(
265
+ 'label' => $_item['label'],
266
+ 'file' => $_item['file'],
267
+ 'position' => $_item['position'],
268
+ 'disabled' => $_item['disabled'],
269
+ 'qbanner_id' => $object->getId());
270
+ $_adapter->insert($_imageTable, $_data);
271
+ }
272
+ }
273
+ $_adapter->commit();
274
+ } catch (Exception $e) {
275
+ $_adapter->rollBack();
276
+ echo $e->getMessage();
277
+ }
278
+ }
279
+ }
280
+ }
281
+
282
+ }
app/code/community/Qaz/Qbanner/Model/Mysql4/Qbanner/Collection.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Model_Mysql4_Qbanner_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract {
4
+
5
+ public function _construct() {
6
+ parent::_construct();
7
+ $this->_init('qbanner/qbanner');
8
+ }
9
+
10
+ /**
11
+ * Add Filter by category
12
+ *
13
+ * @param int $category
14
+ */
15
+ public function addCategoryFilter($categoryId) {
16
+ $this->getSelect()->join(
17
+ array('category_table' => $this->getTable('qbanner/qbanner_category')), 'main_table.qbanner_id = category_table.qbanner_id', array()
18
+ )
19
+ ->where('category_table.category_id = ?', $categoryId);
20
+ return $this;
21
+ }
22
+
23
+ /**
24
+ * Add Filter by page
25
+ *
26
+ * @param int $page
27
+ */
28
+ public function addPageFilter($pageId) {
29
+ $this->getSelect()->join(
30
+ array('page_table' => $this->getTable('qbanner/qbanner_page')), 'main_table.qbanner_id = page_table.qbanner_id', array()
31
+ )
32
+ ->where('page_table.page_id = ?', $pageId);
33
+ return $this;
34
+ }
35
+
36
+ /**
37
+ * Add Filter by store
38
+ *
39
+ * @param int|Mage_Core_Model_Store $store
40
+ */
41
+ public function addStoreFilter($store) {
42
+ if (!Mage::app()->isSingleStoreMode()) {
43
+ if ($store instanceof Mage_Core_Model_Store) {
44
+ $store = array($store->getId());
45
+ }
46
+
47
+ $this->getSelect()->join(
48
+ array('store_table' => $this->getTable('qbanner/qbanner_store')), 'main_table.qbanner_id = store_table.qbanner_id', array()
49
+ )
50
+ ->where('store_table.store_id in (?)', array(0, $store));
51
+ return $this;
52
+ }
53
+ return $this;
54
+ }
55
+ }
app/code/community/Qaz/Qbanner/Model/Option/Pages.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Model_Option_Pages extends Varien_Object {
4
+
5
+ public function getOptionArray() {
6
+ $_collection = Mage::getSingleton('cms/page')->getCollection()
7
+ ->addFieldToFilter('is_active', 1);
8
+
9
+ $_result = array();
10
+ foreach ($_collection as $item) {
11
+ $data = array(
12
+ 'value' => $item->getData('page_id'),
13
+ 'label' => $item->getData('title'));
14
+ $_result[] = $data;
15
+ }
16
+ return $_result;
17
+ }
18
+
19
+ }
app/code/community/Qaz/Qbanner/Model/Option/Position.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Model_Option_Position extends Varien_Object {
4
+ const POSITION_CONTENT_TOP = 1;
5
+ const POSITION_CONTENT_BOTTOM = 2;
6
+
7
+ static public function getOptionArray() {
8
+ return array(
9
+ self::POSITION_CONTENT_TOP => Mage::helper('qbanner')->__('Content Top'),
10
+ self::POSITION_CONTENT_BOTTOM => Mage::helper('qbanner')->__('After Header')
11
+ );
12
+ }
13
+
14
+ static public function getOptionArrayEdit() {
15
+ return array(
16
+ array('value' => self::POSITION_CONTENT_TOP, 'label' => Mage::helper('qbanner')->__('Content Top')),
17
+ array('value' => self::POSITION_CONTENT_BOTTOM, 'label' => Mage::helper('qbanner')->__('After Header'))
18
+ );
19
+ }
20
+ }
app/code/community/Qaz/Qbanner/Model/Option/Status.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Model_Option_Status extends Varien_Object {
4
+ const STATUS_ENABLED = 1;
5
+ const STATUS_DISABLED = 2;
6
+
7
+ static public function getOptionArray() {
8
+ return array(
9
+ self::STATUS_ENABLED => Mage::helper('qbanner')->__('Active'),
10
+ self::STATUS_DISABLED => Mage::helper('qbanner')->__('Non Active')
11
+ );
12
+ }
13
+
14
+ static public function getOptionArrayEdit() {
15
+ return array(
16
+ array('value' => self::STATUS_DISABLED, 'label' => Mage::helper('qbanner')->__('Non Active')),
17
+ array('value' => self::STATUS_ENABLED, 'label' => Mage::helper('qbanner')->__('Active')),
18
+ );
19
+ }
20
+
21
+ }
app/code/community/Qaz/Qbanner/Model/Qbanner.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Model_Qbanner extends Mage_Core_Model_Abstract {
4
+
5
+ public function _construct() {
6
+ parent::_construct();
7
+ $this->_init('qbanner/qbanner');
8
+ }
9
+
10
+ /*
11
+ * Load image
12
+ */
13
+
14
+ public function getImageList() {
15
+ if (!$this->hasData('image')) {
16
+ $_object = $this->_getResource()->loadImage($this);
17
+ }
18
+ return $this->getData('image');
19
+ }
20
+
21
+ }
app/code/community/Qaz/Qbanner/controllers/Adminhtml/QbannerController.php ADDED
@@ -0,0 +1,223 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Qaz_Qbanner_Adminhtml_QbannerController extends Mage_Adminhtml_Controller_action {
4
+
5
+ protected function _initAction() {
6
+ $this->loadLayout()
7
+ ->_setActiveMenu('qbanner')
8
+ ->_addBreadcrumb(Mage::helper('adminhtml')->__('Banners Manager'), Mage::helper('adminhtml')->__('Banner Manager'));
9
+
10
+ return $this;
11
+ }
12
+
13
+ public function indexAction() {
14
+ $this->_initAction()
15
+ ->renderLayout();
16
+ }
17
+
18
+ public function editAction() {
19
+ $id = $this->getRequest()->getParam('id');
20
+ $model = Mage::getModel('qbanner/qbanner')->load($id);
21
+
22
+ if ($model->getId() || $id == 0) {
23
+ $data = Mage::getSingleton('adminhtml/session')->getFormData(true);
24
+ if (!empty($data)) {
25
+ $model->setData($data);
26
+ }
27
+ $showIn = $model->getShowIn();
28
+ if (strlen($showIn) > 0)
29
+ $model->setShowIn(explode(",", $showIn));
30
+ Mage::register('qbanner_data', $model);
31
+
32
+ $this->loadLayout();
33
+ $this->_setActiveMenu('qbanner');
34
+
35
+ $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Banner Manager'), Mage::helper('adminhtml')->__('Banner Manager'));
36
+ $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Banner News'), Mage::helper('adminhtml')->__('Banner News'));
37
+
38
+ $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
39
+
40
+ $this->_addContent($this->getLayout()->createBlock('qbanner/adminhtml_qbanner_edit'))
41
+ ->_addLeft($this->getLayout()->createBlock('qbanner/adminhtml_qbanner_edit_tabs'));
42
+
43
+ $this->renderLayout();
44
+ } else {
45
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('qbanner')->__('Banner does not exist'));
46
+ $this->_redirect('*/*/');
47
+ }
48
+ }
49
+
50
+ public function newAction() {
51
+ $this->_forward('edit');
52
+ }
53
+
54
+ public function saveAction() {
55
+ if ($data = $this->getRequest()->getPost()) {
56
+ $model = Mage::getModel('qbanner/qbanner');
57
+
58
+ if (isset($data['categories'])) {
59
+ $data['categories'] = explode(',', $data['categories']);
60
+ if (is_array($data['categories'])) {
61
+ $data['categories'] = array_unique($data['categories']);
62
+ }
63
+ }
64
+ if (isset($data['show_in']) and sizeof($data['show_in']) > 0) {
65
+ $data['show_in'] = implode(",", $data['show_in']);
66
+ } else {
67
+ $data['show_in'] = 'no_where';
68
+ }
69
+
70
+ $model->setData($data)
71
+ ->setId($this->getRequest()->getParam('id'));
72
+ try {
73
+ $model->save();
74
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('qbanner')->__('Banner was successfully saved'));
75
+ Mage::getSingleton('adminhtml/session')->setFormData(false);
76
+
77
+ if ($this->getRequest()->getParam('back')) {
78
+ $this->_redirect('*/*/edit', array('id' => $model->getId()));
79
+ return;
80
+ }
81
+ $this->_redirect('*/*/');
82
+ return;
83
+ } catch (Exception $e) {
84
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
85
+ Mage::getSingleton('adminhtml/session')->setFormData($data);
86
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
87
+ return;
88
+ }
89
+ }
90
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('qbanner')->__('Unable to find item to save'));
91
+ $this->_redirect('*/*/');
92
+ }
93
+
94
+ public function deleteAction() {
95
+ if ($this->getRequest()->getParam('id') > 0) {
96
+ try {
97
+ $model = Mage::getModel('qbanner/qbanner');
98
+
99
+ $model->setId($this->getRequest()->getParam('id'))
100
+ ->delete();
101
+
102
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Banner was successfully deleted'));
103
+ $this->_redirect('*/*/');
104
+ } catch (Exception $e) {
105
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
106
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
107
+ }
108
+ }
109
+ $this->_redirect('*/*/');
110
+ }
111
+
112
+ public function massDeleteAction() {
113
+ $qbannerIds = $this->getRequest()->getParam('qbanner');
114
+ if (!is_array($qbannerIds)) {
115
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Please select item(s)'));
116
+ } else {
117
+ try {
118
+ foreach ($qbannerIds as $qbannerId) {
119
+ $qbanner = Mage::getModel('qbanner/qbanner')->load($qbannerId);
120
+ $qbanner->delete();
121
+ }
122
+ Mage::getSingleton('adminhtml/session')->addSuccess(
123
+ Mage::helper('adminhtml')->__(
124
+ 'Total of %d record(s) were successfully deleted', count($qbannerIds)
125
+ )
126
+ );
127
+ } catch (Exception $e) {
128
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
129
+ }
130
+ }
131
+ $this->_redirect('*/*/index');
132
+ }
133
+
134
+ public function massStatusAction() {
135
+ $qbannerIds = $this->getRequest()->getParam('qbanner');
136
+ if (!is_array($qbannerIds)) {
137
+ Mage::getSingleton('adminhtml/session')->addError($this->__('Please select item(s)'));
138
+ } else {
139
+ try {
140
+ foreach ($qbannerIds as $qbannerId) {
141
+ $qbanner = Mage::getSingleton('qbanner/qbanner')
142
+ ->load($qbannerId)
143
+ ->setStatus($this->getRequest()->getParam('status'))
144
+ ->setIsMassupdate(true)
145
+ ->save();
146
+ }
147
+ $this->_getSession()->addSuccess(
148
+ $this->__('Total of %d record(s) were successfully updated', count($qbannerIds))
149
+ );
150
+ } catch (Exception $e) {
151
+ $this->_getSession()->addError($e->getMessage());
152
+ }
153
+ }
154
+ $this->_redirect('*/*/index');
155
+ }
156
+
157
+ public function exportCsvAction() {
158
+ $fileName = 'qbanner.csv';
159
+ $content = $this->getLayout()->createBlock('qbanner/adminhtml_qbanner_grid')
160
+ ->getCsv();
161
+
162
+ $this->_sendUploadResponse($fileName, $content);
163
+ }
164
+
165
+ public function exportXmlAction() {
166
+ $fileName = 'qbanner.xml';
167
+ $content = $this->getLayout()->createBlock('qbanner/adminhtml_qbanner_grid')
168
+ ->getXml();
169
+
170
+ $this->_sendUploadResponse($fileName, $content);
171
+ }
172
+
173
+ protected function _sendUploadResponse($fileName, $content, $contentType='application/octet-stream') {
174
+ $response = $this->getResponse();
175
+ $response->setHeader('HTTP/1.1 200 OK', '');
176
+ $response->setHeader('Pragma', 'public', true);
177
+ $response->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true);
178
+ $response->setHeader('Content-Disposition', 'attachment; filename=' . $fileName);
179
+ $response->setHeader('Last-Modified', date('r'));
180
+ $response->setHeader('Accept-Ranges', 'bytes');
181
+ $response->setHeader('Content-Length', strlen($content));
182
+ $response->setHeader('Content-type', $contentType);
183
+ $response->setBody($content);
184
+ $response->sendResponse();
185
+ die;
186
+ }
187
+
188
+ public function uploadAction() {
189
+ try {
190
+ $uploader = new Mage_Core_Model_File_Uploader('image');
191
+ $uploader->setAllowedExtensions(array('jpg', 'jpeg', 'gif', 'png'));
192
+ $uploader->setAllowRenameFiles(true);
193
+ $uploader->setFilesDispersion(true);
194
+ $result = $uploader->save(
195
+ Mage::getSingleton('qbanner/config')->getBaseTmpMediaPath()
196
+ );
197
+ /**
198
+ * Workaround for prototype 1.7 methods "isJSON", "evalJSON" on Windows OS
199
+ */
200
+ $result['tmp_name'] = str_replace(DS, "/", $result['tmp_name']);
201
+ $result['path'] = str_replace(DS, "/", $result['path']);
202
+
203
+ $result['url'] = Mage::getSingleton('qbanner/config')->getTmpMediaUrl($result['file']);
204
+ $result['cookie'] = array(
205
+ 'name' => session_name(),
206
+ 'value' => $this->_getSession()->getSessionId(),
207
+ 'lifetime' => $this->_getSession()->getCookieLifetime(),
208
+ 'path' => $this->_getSession()->getCookiePath(),
209
+ 'domain' => $this->_getSession()->getCookieDomain()
210
+ );
211
+ } catch (Exception $e) {
212
+ $result = array(
213
+ 'error' => $e->getMessage(),
214
+ 'errorcode' => $e->getCode());
215
+ }
216
+ $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
217
+ }
218
+
219
+ protected function _isAllowed() {
220
+ return Mage::getSingleton('admin/session')->isAllowed('qbanner/config');
221
+ }
222
+
223
+ }
app/code/community/Qaz/Qbanner/controllers/IndexController.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Qaz_Qbanner_IndexController extends Mage_Core_Controller_Front_Action
3
+ {
4
+ public function indexAction()
5
+ {
6
+
7
+ /*
8
+ * Load an object by id
9
+ * Request looking like:
10
+ * http://site.com/qbanner?id=15
11
+ * or
12
+ * http://site.com/qbanner/id/15
13
+ */
14
+ /*
15
+ $qbanner_id = $this->getRequest()->getParam('id');
16
+
17
+ if($qbanner_id != null && $qbanner_id != '') {
18
+ $qbanner = Mage::getModel('qbanner/qbanner')->load($qbanner_id)->getData();
19
+ } else {
20
+ $qbanner = null;
21
+ }
22
+ */
23
+
24
+ /*
25
+ * If no param we load a the last created item
26
+ */
27
+ /*
28
+ if($qbanner == null) {
29
+ $resource = Mage::getSingleton('core/resource');
30
+ $read= $resource->getConnection('core_read');
31
+ $qbannerTable = $resource->getTableName('qbanner');
32
+
33
+ $select = $read->select()
34
+ ->from($qbannerTable,array('qbanner_id','title','content','status'))
35
+ ->where('status',1)
36
+ ->order('created_time DESC') ;
37
+
38
+ $qbanner = $read->fetchRow($select);
39
+ }
40
+ Mage::register('qbanner', $qbanner);
41
+ */
42
+
43
+
44
+ $this->loadLayout();
45
+ $this->renderLayout();
46
+ }
47
+ }
app/code/community/Qaz/Qbanner/etc/config.xml ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Qaz_Qbanner>
5
+ <version>1.8.1</version>
6
+ </Qaz_Qbanner>
7
+ </modules>
8
+ <frontend>
9
+ <routers>
10
+ <qbanner>
11
+ <use>standard</use>
12
+ <args>
13
+ <module>Qaz_Qbanner</module>
14
+ <frontName>qbanner</frontName>
15
+ </args>
16
+ </qbanner>
17
+ </routers>
18
+ <layout>
19
+ <updates>
20
+ <qbanner>
21
+ <file>qbanner.xml</file>
22
+ </qbanner>
23
+ </updates>
24
+ </layout>
25
+ </frontend>
26
+ <admin>
27
+ <routers>
28
+ <qbanner>
29
+ <use>admin</use>
30
+ <args>
31
+ <module>Qaz_Qbanner</module>
32
+ <frontName>qbanner</frontName>
33
+ </args>
34
+ </qbanner>
35
+ </routers>
36
+ </admin>
37
+ <adminhtml>
38
+ <menu>
39
+ <qbanner module="qbanner">
40
+ <title>Qbanner</title>
41
+ <sort_order>71</sort_order>
42
+ <children>
43
+ <items module="qbanner">
44
+ <title>Manage Banner</title>
45
+ <sort_order>0</sort_order>
46
+ <action>qbanner/adminhtml_qbanner</action>
47
+ </items>
48
+ </children>
49
+ </qbanner>
50
+ </menu>
51
+ <acl>
52
+ <resources>
53
+ <all>
54
+ <title>Allow Everything</title>
55
+ </all>
56
+ <admin>
57
+ <children>
58
+ <qbanner>
59
+ <title>Qaz Q Banner</title>
60
+ <sort_order>50</sort_order>
61
+ <children>
62
+ <item>
63
+ <title>Manage Q Banner</title>
64
+ <sort_order>0</sort_order>
65
+ </item>
66
+ </children>
67
+ </qbanner>
68
+ <system>
69
+ <children>
70
+ <config>
71
+ <children>
72
+ <qbanner>
73
+ <title>Q Banner Section</title>
74
+ </qbanner>
75
+ </children>
76
+ </config>
77
+ </children>
78
+ </system>
79
+ </children>
80
+ </admin>
81
+ </resources>
82
+ </acl>
83
+ <layout>
84
+ <updates>
85
+ <qbanner>
86
+ <file>qbanner.xml</file>
87
+ </qbanner>
88
+ </updates>
89
+ </layout>
90
+ </adminhtml>
91
+ <global>
92
+ <models>
93
+ <qbanner>
94
+ <class>Qaz_Qbanner_Model</class>
95
+ <resourceModel>qbanner_mysql4</resourceModel>
96
+ </qbanner>
97
+ <qbanner_mysql4>
98
+ <class>Qaz_Qbanner_Model_Mysql4</class>
99
+ <entities>
100
+ <qbanner>
101
+ <table>qaz_qbanner</table>
102
+ </qbanner>
103
+ <qbanner_image>
104
+ <table>qaz_qbanner_image</table>
105
+ </qbanner_image>
106
+ <qbanner_category>
107
+ <table>qaz_qbanner_category</table>
108
+ </qbanner_category>
109
+ <qbanner_page>
110
+ <table>qaz_qbanner_page</table>
111
+ </qbanner_page>
112
+ <qbanner_store>
113
+ <table>qaz_qbanner_store</table>
114
+ </qbanner_store>
115
+ </entities>
116
+ </qbanner_mysql4>
117
+ </models>
118
+ <resources>
119
+ <qbanner_setup>
120
+ <setup>
121
+ <module>Qaz_Qbanner</module>
122
+ </setup>
123
+ <connection>
124
+ <use>core_setup</use>
125
+ </connection>
126
+ </qbanner_setup>
127
+ <qbanner_write>
128
+ <connection>
129
+ <use>core_write</use>
130
+ </connection>
131
+ </qbanner_write>
132
+ <qbanner_read>
133
+ <connection>
134
+ <use>core_read</use>
135
+ </connection>
136
+ </qbanner_read>
137
+ </resources>
138
+ <blocks>
139
+ <qbanner>
140
+ <class>Qaz_Qbanner_Block</class>
141
+ </qbanner>
142
+ </blocks>
143
+ <helpers>
144
+ <qbanner>
145
+ <class>Qaz_Qbanner_Helper</class>
146
+ </qbanner>
147
+ </helpers>
148
+ </global>
149
+ <default>
150
+ <qbanner>
151
+ <general>
152
+ <enable>1</enable>
153
+ <enable_jquery>1</enable_jquery>
154
+ </general>
155
+ </qbanner>
156
+ </default>
157
+ </config>
app/code/community/Qaz/Qbanner/etc/system.xml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <sections>
4
+ <qbanner translate="label" module="qbanner">
5
+ <label>QBanner</label>
6
+ <tab>qall</tab>
7
+ <frontend_type>text</frontend_type>
8
+ <sort_order>101</sort_order>
9
+ <show_in_default>1</show_in_default>
10
+ <show_in_website>1</show_in_website>
11
+ <show_in_store>1</show_in_store>
12
+ <groups>
13
+ <general translate="label">
14
+ <label>General Configuration</label>
15
+ <frontend_type>text</frontend_type>
16
+ <sort_order>50</sort_order>
17
+ <show_in_default>1</show_in_default>
18
+ <show_in_website>1</show_in_website>
19
+ <show_in_store>1</show_in_store>
20
+ <fields>
21
+ <enable_jquery translate="label">
22
+ <label>Enable Jquery</label>
23
+ <frontend_type>select</frontend_type>
24
+ <source_model>adminhtml/system_config_source_yesno</source_model>
25
+ <sort_order>2</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
+ <comment>If Jquery exists , You can disable it.</comment>
30
+ </enable_jquery>
31
+ </fields>
32
+ </general>
33
+ </groups>
34
+ </qbanner>
35
+ </sections>
36
+ </config>
app/code/community/Qaz/Qbanner/sql/qbanner_setup/mysql4-install-0.1.0.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+ $installer->run("
7
+
8
+ DROP TABLE IF EXISTS {$this->getTable('qbanner/qbanner')};
9
+ CREATE TABLE {$this->getTable('qbanner/qbanner')} (
10
+ `qbanner_id` int(11) unsigned NOT NULL auto_increment,
11
+ `title` varchar(255) NOT NULL default '',
12
+ `width` smallint(4),
13
+ `height` smallint(4),
14
+ `duration` INT NOT NULL DEFAULT '5000' ,
15
+ `effect` VARCHAR( 30 ) NOT NULL,
16
+ `show_caption` TINYINT( 4 ) NOT NULL ,
17
+ `show_pagination` TINYINT( 4 ) NOT NULL,
18
+ `auto_slide` TINYINT( 4 ) NOT NULL ,
19
+ `mouseover_stop` TINYINT( 4 ) NOT NULL,
20
+ `position` smallint (4) ,
21
+ `status` smallint(6) NOT NULL default '0',
22
+ `show_in` VARCHAR( 100 ) NOT NULL,
23
+ PRIMARY KEY (`qbanner_id`)
24
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
25
+
26
+ DROP TABLE IF EXISTS `{$this->getTable('qbanner/qbanner_image')}`;
27
+ CREATE TABLE `{$this->getTable('qbanner/qbanner_image')}` (
28
+ `image_id` smallint(6) NOT NULL AUTO_INCREMENT,
29
+ `label` varchar(255) DEFAULT NULL,
30
+ `file` varchar(255) DEFAULT NULL,
31
+ `position` smallint(5) DEFAULT '0',
32
+ `disabled` tinyint(1) DEFAULT '1',
33
+ `qbanner_id` smallint(6) DEFAULT '0',
34
+ PRIMARY KEY (`image_id`)
35
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Qbanner Image' ;
36
+
37
+ DROP TABLE IF EXISTS `{$this->getTable('qbanner/qbanner_category')}`;
38
+ CREATE TABLE `{$this->getTable('qbanner/qbanner_category')}` (
39
+ `qbanner_id` smallint(6) NOT NULL,
40
+ `category_id` smallint(6) NOT NULL,
41
+ PRIMARY KEY (`qbanner_id`,`category_id`)
42
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Qbanner Category' ;
43
+
44
+ DROP TABLE IF EXISTS `{$this->getTable('qbanner/qbanner_page')}`;
45
+ CREATE TABLE `{$this->getTable('qbanner/qbanner_page')}` (
46
+ `qbanner_id` smallint(6) NOT NULL,
47
+ `page_id` smallint(6) NOT NULL,
48
+ PRIMARY KEY (`qbanner_id`,`page_id`)
49
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Qbanner Page' ;
50
+
51
+ DROP TABLE IF EXISTS `{$this->getTable('qbanner/qbanner_store')}`;
52
+ CREATE TABLE `{$this->getTable('qbanner/qbanner_store')}` (
53
+ `qbanner_id` smallint(6) NOT NULL,
54
+ `store_id` smallint(6) NOT NULL,
55
+ PRIMARY KEY (`qbanner_id`,`store_id`)
56
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Qbanner Store' ;
57
+
58
+ ");
59
+
60
+ $installer->endSetup();
app/code/community/Qaz/Qbanner/sql/qbanner_setup/mysql4-upgrade-1.7.1-1.8.1.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+ $installer->run("
7
+ ALTER TABLE {$this->getTable('qbanner/qbanner')} add column show_next_prev TINYINT( 4 ) after `show_pagination`;
8
+ ");
9
+
10
+ $installer->endSetup();
app/design/adminhtml/default/default/layout/qbanner.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <qbanner_adminhtml_qbanner_index>
4
+ <reference name="content">
5
+ <block type="qbanner/adminhtml_qbanner" name="qbanner" />
6
+ </reference>
7
+ </qbanner_adminhtml_qbanner_index>
8
+ </layout>
app/design/adminhtml/default/default/template/qaz/qbanner/edit/tab/category.phtml ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="entry-edit">
2
+ <div class="entry-edit-head">
3
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('qbanner')->__('Banner Categories') ?></h4>
4
+ </div>
5
+ <fieldset id="grop_fields">
6
+ <input type="hidden" name="categories" id="banner_categories" value="<?php echo $this->getIdsString() ?>">
7
+ <div id="banner-categories" class="tree"></div>
8
+ </fieldset>
9
+ </div>
10
+ <input type="hidden" name="category_products" id="in_category_products" value="" />
11
+ <?php if($this->getRootNode() && $this->getRootNode()->hasChildren()): ?>
12
+ <script type="text/javascript">
13
+ Ext.EventManager.onDocumentReady(function() {
14
+ var categoryLoader = new Ext.tree.TreeLoader({
15
+ dataUrl: '<?php echo $this->getLoadTreeUrl()?>'
16
+ });
17
+
18
+ categoryLoader.createNode = function(config) {
19
+ config.uiProvider = Ext.tree.CheckboxNodeUI;
20
+ var node;
21
+ if (config.children && !config.children.length) {
22
+ delete(config.children);
23
+ node = new Ext.tree.AsyncTreeNode(config);
24
+
25
+ } else {
26
+ node = new Ext.tree.TreeNode(config);
27
+ }
28
+ return node;
29
+ };
30
+
31
+ categoryLoader.on("beforeload", function(treeLoader, node) {
32
+ treeLoader.baseParams.category = node.attributes.id;
33
+ });
34
+
35
+ categoryLoader.on("load", function(treeLoader, node, config) {
36
+ varienWindowOnload();
37
+ });
38
+
39
+ var tree = new Ext.tree.TreePanel('banner-categories', {
40
+ animate:true,
41
+ loader: categoryLoader,
42
+ enableDD:false,
43
+ containerScroll: true,
44
+ rootUIProvider: Ext.tree.CheckboxNodeUI,
45
+ selModel: new Ext.tree.CheckNodeMultiSelectionModel(),
46
+ rootVisible: '<?php echo $this->getRootNode()->getIsVisible() ?>'
47
+ });
48
+
49
+ tree.on('check', function(node) {
50
+ if(node.attributes.checked) {
51
+ categoryAdd(node.id);
52
+ } else {
53
+ categoryRemove(node.id);
54
+ }
55
+ varienElementMethods.setHasChanges(node.getUI().checkbox);
56
+ }, tree);
57
+
58
+ // set the root node
59
+ var root = new Ext.tree.TreeNode({
60
+ text: '<?php echo $this->jsQuoteEscape($this->getRootNode()->getName()) ?>',
61
+ draggable:false,
62
+ checked:'<?php echo $this->getRootNode()->getChecked() ?>',
63
+ id:'<?php echo $this->getRootNode()->getId() ?>',
64
+ disabled: <?php echo ($this->getRootNode()->getDisabled() ? 'true' : 'false') ?>,
65
+ uiProvider: Ext.tree.CheckboxNodeUI
66
+ });
67
+
68
+ tree.setRootNode(root);
69
+ bildCategoryTree(root, <?php echo $this->getTreeJson() ?>);
70
+ tree.addListener('click', categoryClick.createDelegate(this));
71
+
72
+ // render the tree
73
+ tree.render();
74
+ root.expand();
75
+ //tree.expandAll();
76
+ });
77
+
78
+ function bildCategoryTree(parent, config){
79
+ if (!config) return null;
80
+
81
+ if (parent && config && config.length){
82
+ for (var i = 0; i < config.length; i++){
83
+ config[i].uiProvider = Ext.tree.CheckboxNodeUI;
84
+ var node;
85
+ var _node = Object.clone(config[i]);
86
+ if (_node.children && !_node.children.length) {
87
+ delete(_node.children);
88
+ node = new Ext.tree.AsyncTreeNode(_node);
89
+
90
+ } else {
91
+ node = new Ext.tree.TreeNode(config[i]);
92
+ }
93
+ parent.appendChild(node);
94
+ node.loader = node.getOwnerTree().loader;
95
+ if(config[i].children){
96
+ bildCategoryTree(node, config[i].children);
97
+ }
98
+ }
99
+ }
100
+ }
101
+
102
+ function categoryClick(node, e){
103
+ if (node.disabled) {
104
+ return;
105
+ }
106
+ node.getUI().check(!node.getUI().checked());
107
+ varienElementMethods.setHasChanges(Event.element(e), e);
108
+ };
109
+ function categoryAdd(id) {
110
+ var ids = $('banner_categories').value.split(',');
111
+ ids.push(id);
112
+ $('banner_categories').value = ids.join(',');
113
+ }
114
+ function categoryRemove(id) {
115
+ var ids = $('banner_categories').value.split(',');
116
+ // bug #7654 fixed
117
+ while (-1 != ids.indexOf(id)) {
118
+ ids.splice(ids.indexOf(id), 1);
119
+ }
120
+ $('banner_categories').value = ids.join(',');
121
+ }
122
+ </script>
123
+ <?php endif; ?>
124
+ <?php if(($block = $this->getLayout()->getBlock('qbanner.product.grid')) && ($_gridJsObject=$block->getJsObjectName())): ?>
125
+ <script type="text/javascript">
126
+ var categoryProducts = $H(<?php echo $this->getProductsJson() ?>);
127
+ $('in_category_products').value = categoryProducts.toQueryString();
128
+
129
+ function registerCategoryProduct(grid, element, checked){
130
+ if(checked){
131
+ if(element.positionElement){
132
+ element.positionElement.disabled = false;
133
+ categoryProducts.set(element.value, element.positionElement.value);
134
+ }
135
+ }
136
+ else{
137
+ if(element.positionElement){
138
+ element.positionElement.disabled = true;
139
+ }
140
+ categoryProducts.unset(element.value);
141
+ }
142
+ $('in_category_products').value = categoryProducts.toQueryString();
143
+ grid.reloadParams = {'selected_products[]':categoryProducts.keys()};
144
+ }
145
+ function categoryProductRowClick(grid, event){
146
+ var trElement = Event.findElement(event, 'tr');
147
+ var isInput = Event.element(event).tagName == 'INPUT';
148
+ if(trElement){
149
+ var checkbox = Element.getElementsBySelector(trElement, 'input');
150
+ if(checkbox[0]){
151
+ var checked = isInput ? checkbox[0].checked : !checkbox[0].checked;
152
+ <?php echo $_gridJsObject ?>.setCheckboxChecked(checkbox[0], checked);
153
+ }
154
+ }
155
+ }
156
+ function positionChange(event){
157
+ var element = Event.element(event);
158
+ if(element && element.checkboxElement && element.checkboxElement.checked){
159
+ categoryProducts.set(element.checkboxElement.value, element.value);
160
+ $('in_category_products').value = categoryProducts.toQueryString();
161
+ }
162
+ }
163
+
164
+ var tabIndex = 1000;
165
+ function categoryProductRowInit(grid, row){
166
+ var checkbox = $(row).getElementsByClassName('checkbox')[0];
167
+ var position = $(row).getElementsByClassName('input-text')[0];
168
+ if(checkbox && position){
169
+ checkbox.positionElement = position;
170
+ position.checkboxElement = checkbox;
171
+ position.disabled = !checkbox.checked;
172
+ position.tabIndex = tabIndex++;
173
+ Event.observe(position,'keyup',positionChange);
174
+ }
175
+ }
176
+
177
+
178
+ <?php echo $_gridJsObject ?>.rowClickCallback = categoryProductRowClick;
179
+ <?php echo $_gridJsObject ?>.initRowCallback = categoryProductRowInit;
180
+ <?php echo $_gridJsObject ?>.checkboxCheckCallback = registerCategoryProduct;
181
+ <?php echo $_gridJsObject ?>.rows.each(function(row){categoryProductRowInit(<?php echo $_gridJsObject ?>, row)});
182
+ </script>
183
+ <?php endif; ?>
app/design/adminhtml/default/default/template/qaz/qbanner/edit/tab/image.phtml ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $_block = $this; ?>
2
+ <div id="<?php echo $_block->getHtmlId() ?>" >
3
+ <div class="grid">
4
+ <table cellspacing="0" class="data border" id="<?php echo $_block->getHtmlId() ?>_grid_qbanner" width="100%">
5
+ <col width="120" />
6
+ <col />
7
+ <col width="60" />
8
+ <?php foreach ($_block->getImageTypes() as $typeId=>$type): ?>
9
+ <?php endforeach; ?>
10
+ <col width="50" />
11
+ <col width="50" />
12
+ <thead>
13
+ <tr class="headings">
14
+ <th><?php echo Mage::helper('qbanner')->__('Image') ?></th>
15
+ <th><?php echo Mage::helper('qbanner')->__('Image Link') ?></th>
16
+ <th><?php echo Mage::helper('qbanner')->__('Sort Order') ?></th>
17
+ <?php foreach ($_block->getImageTypes() as $typeId=>$type): ?>
18
+ <?php endforeach; ?>
19
+ <th><?php echo Mage::helper('qbanner')->__('Disable') ?></th>
20
+ <th class="last"><?php echo Mage::helper('qbanner')->__('Remove') ?></th>
21
+ </tr>
22
+ </thead>
23
+ <tbody id="<?php echo $_block->getHtmlId() ?>_list">
24
+ <tr id="<?php echo $_block->getHtmlId() ?>_template" class="template no-display">
25
+ <td class="cell-image"><div class="place-holder" onmouseover="<?php echo $_block->getJsObjectName(); ?>.loadImage('__file__')"><span><?php echo Mage::helper('qbanner')->__('Roll Over for preview') ?></span></div><img src="<?php echo $this->getSkinUrl('images/spacer.gif')?>" width="100" style="display:none;" alt="" /></td>
26
+ <td class="cell-label"><input type="text" class="input-text" onkeyup="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" onchange="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" /></td>
27
+ <td class="cell-position"><input type="text" class="input-text validate-number" onkeyup="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" onchange="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" /></td>
28
+ <?php foreach ($_block->getImageTypes() as $typeId=>$type): ?>
29
+ <td class="cell-<?php echo $typeId ?> a-center" style="display:none;">
30
+ <input type="hidden" name="<?php echo $type['field'] ?>" onclick="<?php echo $_block->getJsObjectName(); ?>.setProductImages('__file__')" value="__file__" /></td>
31
+ <?php endforeach; ?>
32
+ <td class="cell-disable a-center"><input type="checkbox" onclick="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" /></td>
33
+ <td class="cell-remove a-center last"><input type="checkbox" onclick="<?php echo $_block->getJsObjectName(); ?>.updateImage('__file__')" /></td>
34
+ </tr>
35
+
36
+ <tr id="<?php echo $_block->getHtmlId() ?>-image-0">
37
+ <td class="cell-image"><?php echo Mage::helper('catalog')->__('No image') ?></td>
38
+ <td class="cell-label"><input type="hidden" />&nbsp;</td>
39
+ <td class="cell-position"><input type="hidden" />&nbsp;</td>
40
+ <?php foreach ($_block->getImageTypes() as $typeId=>$type): ?>
41
+ <td class="cell-<?php echo $typeId ?> a-center" style="display:none;">
42
+ <input type="hidden" disabled="disabled" name="<?php echo $type['field'] ?>" onclick="<?php echo $_block->getJsObjectName(); ?>.setProductImages('no_selection')" value="no_selection" /></td>
43
+ <?php endforeach; ?>
44
+ <td class="cell-disable"><input type="hidden" />&nbsp;</td>
45
+ <td class="cell-remove"><input type="hidden" />&nbsp;</td>
46
+ </tr>
47
+ </tbody>
48
+ <tfoot>
49
+ <tr>
50
+ <td colspan="100" class="last" style="padding:8px">
51
+ <?php echo $_block->getUploaderHtml() ?>
52
+ </td>
53
+ </tr>
54
+ </tfoot>
55
+ </table>
56
+ </div>
57
+ </div>
58
+ <input type="hidden" id="<?php echo $_block->getHtmlId() ?>_save" name="images" value="<?php echo $_block->htmlEscape($_block->getImagesJson()) ?>" />
59
+ <input type="hidden" id="smece_save" name="[smece]" value="smece" />
60
+ <input type="hidden" id="<?php echo $_block->getHtmlId() ?>_save_image" name="[values]" value="<?php echo $_block->htmlEscape($_block->getImagesValuesJson()) ?>" />
61
+ <script type="text/javascript">
62
+ //<![CDATA[
63
+ var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php echo $_block->getUploader()->getJsObjectName() ?>, <?php echo $_block->getImageTypesJson() ?>);
64
+ //]]>
65
+ </script>
app/design/frontend/default/default/layout/qbanner.xml ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <default>
4
+ <reference name="header">
5
+ <block type="qbanner/qbanner" name="qbanner.top" template="qaz/qbanner/qbanner.after.header.phtml" />
6
+ </reference>
7
+ <reference name="content">
8
+ <block type="qbanner/qbanner" name="qbanner" before="-" template="qaz/qbanner/qbanner.content.top.phtml" />
9
+ </reference>
10
+ </default>
11
+ </layout>
app/design/frontend/default/default/template/qaz/qbanner/qbanner.after.header.phtml ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $banners = $this->getQbanner(2); ?>
2
+ <?php if (count($banners->getData()) > 0) : ?>
3
+ <?php foreach ($banners as $banner): ?>
4
+ <?php
5
+ $showIn = $this->addShowInFilter($banner);
6
+ if (!$showIn)
7
+ continue;
8
+ $duration = $banner->getDuration();
9
+ if (!$duration)
10
+ $duration = 5000;
11
+ $effect = $banner->getEffect();
12
+ $showCaption = $banner->getShowCaption();
13
+ $showNext = $banner->getShowNextPrev();
14
+ $showPagination = $banner->getShowPagination();
15
+ $autoSlide = $banner->getAutoSlide();
16
+ if (!$autoSlide)
17
+ $duration = 0;
18
+ $mouseoverStop = $banner->getMouseoverStop();
19
+ if ($mouseoverStop)
20
+ $mouseoverStop = 'true';
21
+ else
22
+ $mouseoverStop = 'false';
23
+ $bannerWidth = $banner->getWidth();
24
+ $bannerHeight = $banner->getHeight();
25
+ ?>
26
+ <div class="clear"></div>
27
+ <div class="qbanner content-top" style="width:<?php echo $bannerWidth . 'px'; ?>; height: <?php echo $bannerHeight . 'px'; ?>;">
28
+ <div id="slides-content-top-<?php echo $banner->getId(); ?>" class="qbanner-slide">
29
+ <div class="slides_container">
30
+ <?php $images = $banner->getImageList(); ?>
31
+ <?php if (sizeof($images) > 0) : ?>
32
+ <?php foreach ($images as $image): ?>
33
+ <?php if (sizeof($images) == 1): ?>
34
+ <div class="slide" style="width:<?php echo $bannerWidth . 'px'; ?>; height: <?php echo $bannerHeight . 'px'; ?>;">
35
+ <img src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) . 'qaz/qbanner' . $image['file']; ?>"alt="<?php echo $image['label']; ?>"/>
36
+ <?php if ($showCaption): ?>
37
+ <div class="caption" style="bottom:0">
38
+ <p><?php echo $image['label']; ?></p>
39
+ </div>
40
+ <?php endif; ?>
41
+ </div>
42
+ <?php endif; ?>
43
+ <div class="slide" style="width:<?php echo $bannerWidth . 'px'; ?>; height: <?php echo $bannerHeight . 'px'; ?>;">
44
+ <img src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) . 'qaz/qbanner' . $image['file']; ?>"alt="<?php echo $image['label']; ?>"/>
45
+ <?php if ($showCaption): ?>
46
+ <div class="caption" style="bottom:0">
47
+ <p><?php echo $image['label']; ?></p>
48
+ </div>
49
+ <?php endif; ?>
50
+ </div>
51
+ <?php endforeach; ?>
52
+ <?php endif; ?>
53
+ </div>
54
+ <?php if ($showNext): ?>
55
+ <a href="#" class="prev" style="top:<?php echo $bannerHeight / 2 - 20; ?>px;left:0px"><img src="<?php echo $this->getSkinUrl('qaz/qbanner/images/b_prev.png'); ?>" alt="Arrow Prev"/></a>
56
+ <a href="#" class="next" style="top:<?php echo $bannerHeight / 2 - 20; ?>px;right:0px"><img src="<?php echo $this->getSkinUrl('qaz/qbanner/images/b_next.png'); ?>" alt="Arrow Next"/></a>
57
+ <?php endif; ?>
58
+ </div>
59
+ </div>
60
+ <div class="clear"></div>
61
+ <script>
62
+ <?php if ($showIn): ?>
63
+ $j(function(){
64
+ $j('#slides-content-top-<?php echo $banner->getId(); ?>').slides({
65
+ preload : true,
66
+ preloadImage: 'skin/frontend/default/default/qaz/qbanner/images/loading.gif',
67
+ play: <?php echo $duration; ?>,
68
+ pause: 1000,
69
+ hoverPause: <?php echo $mouseoverStop; ?>,
70
+ effect : '<?php echo $effect; ?>',
71
+ animationStart: function(current){
72
+ $j('.caption').animate({
73
+ bottom:-40
74
+ },200);
75
+ if (window.console && console.log) {
76
+ // example return of current slide number
77
+ console.log('animationStart on slide: ', current);
78
+ };
79
+ },
80
+ animationComplete: function(current){
81
+ $j('.caption').animate({
82
+ bottom:0
83
+ },250);
84
+ if (window.console && console.log) {
85
+ // example return of current slide number
86
+ console.log('animationComplete on slide: ', current);
87
+ };
88
+ },
89
+ slidesLoaded: function() {
90
+ $j('.caption').animate({
91
+ bottom:0
92
+ },250);
93
+ }
94
+ });
95
+ });
96
+ </script>
97
+ <style>
98
+ #slides-content-top-<?php echo $banner->getId() ?> .caption{width: <?php echo $bannerWidth; ?>px;}
99
+ #slides-content-top-<?php echo $banner->getId() ?> .pagination {margin:0 auto;left:<?php echo ($bannerWidth - 50 ) / 2; ?>px;}
100
+ </style>
101
+ <?php if (!$showPagination): ?>
102
+ <style>
103
+ #slides-content-top-<?php echo $banner->getId() ?> .pagination {display:none;}
104
+ </style>
105
+ <?php endif; ?>
106
+ <?php endif; ?>
107
+ <?php endforeach; ?>
108
+ <?php endif; ?>
109
+
app/design/frontend/default/default/template/qaz/qbanner/qbanner.content.top.phtml ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php $banners = $this->getQbanner(1); ?>
2
+ <?php if (count($banners->getData()) > 0) : ?>
3
+ <?php foreach ($banners as $banner): ?>
4
+ <?php
5
+ $showIn = $this->addShowInFilter($banner);
6
+ if (!$showIn)
7
+ continue;
8
+ $duration = $banner->getDuration();
9
+ if (!$duration)
10
+ $duration = 5000;
11
+ $effect = $banner->getEffect();
12
+ $showCaption = $banner->getShowCaption();
13
+ $showNext = $banner->getShowNextPrev();
14
+ $showPagination = $banner->getShowPagination();
15
+ $autoSlide = $banner->getAutoSlide();
16
+ if (!$autoSlide)
17
+ $duration = 0;
18
+ $mouseoverStop = $banner->getMouseoverStop();
19
+ if ($mouseoverStop)
20
+ $mouseoverStop = 'true';
21
+ else
22
+ $mouseoverStop = 'false';
23
+ $bannerWidth = $banner->getWidth();
24
+ $bannerHeight = $banner->getHeight();
25
+ ?>
26
+ <div class="clear"></div>
27
+ <div class="qbanner content-top" style="width:<?php echo $bannerWidth . 'px'; ?>; height: <?php echo $bannerHeight . 'px'; ?>;">
28
+ <div id="slides-content-top-<?php echo $banner->getId(); ?>" class="qbanner-slide">
29
+ <div class="slides_container">
30
+ <?php $images = $banner->getImageList(); ?>
31
+ <?php if (sizeof($images) > 0) : ?>
32
+ <?php foreach ($images as $image): ?>
33
+ <?php if (sizeof($images) == 1): ?>
34
+ <div class="slide" style="width:<?php echo $bannerWidth . 'px'; ?>; height: <?php echo $bannerHeight . 'px'; ?>;">
35
+ <img src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) . 'qaz/qbanner' . $image['file']; ?>"alt="<?php echo $image['label']; ?>"/>
36
+ <?php if ($showCaption): ?>
37
+ <div class="caption" style="bottom:0">
38
+ <p><?php echo $image['label']; ?></p>
39
+ </div>
40
+ <?php endif; ?>
41
+ </div>
42
+ <?php endif; ?>
43
+ <div class="slide" style="width:<?php echo $bannerWidth . 'px'; ?>; height: <?php echo $bannerHeight . 'px'; ?>;">
44
+ <img src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) . 'qaz/qbanner' . $image['file']; ?>"alt="<?php echo $image['label']; ?>"/>
45
+ <?php if ($showCaption): ?>
46
+ <div class="caption" style="bottom:0">
47
+ <p><?php echo $image['label']; ?></p>
48
+ </div>
49
+ <?php endif; ?>
50
+ </div>
51
+ <?php endforeach; ?>
52
+ <?php endif; ?>
53
+ </div>
54
+ <?php if ($showNext): ?>
55
+ <a href="#" class="prev" style="top:<?php echo $bannerHeight / 2 - 20; ?>px;left:0px"><img src="<?php echo $this->getSkinUrl('qaz/qbanner/images/b_prev.png'); ?>" alt="Arrow Prev"/></a>
56
+ <a href="#" class="next" style="top:<?php echo $bannerHeight / 2 - 20; ?>px;right:0px"><img src="<?php echo $this->getSkinUrl('qaz/qbanner/images/b_next.png'); ?>" alt="Arrow Next"/></a>
57
+ <?php endif; ?>
58
+ </div>
59
+ </div>
60
+ <div class="clear"></div>
61
+ <script>
62
+ <?php if ($showIn): ?>
63
+ $j(function(){
64
+ $j('#slides-content-top-<?php echo $banner->getId(); ?>').slides({
65
+ preload : true,
66
+ preloadImage: 'skin/frontend/default/default/qaz/qbanner/images/loading.gif',
67
+ play: <?php echo $duration; ?>,
68
+ pause: 1000,
69
+ hoverPause: <?php echo $mouseoverStop; ?>,
70
+ effect : '<?php echo $effect; ?>',
71
+ animationStart: function(current){
72
+ $j('.caption').animate({
73
+ bottom:-40
74
+ },200);
75
+ if (window.console && console.log) {
76
+ // example return of current slide number
77
+ console.log('animationStart on slide: ', current);
78
+ };
79
+ },
80
+ animationComplete: function(current){
81
+ $j('.caption').animate({
82
+ bottom:0
83
+ },250);
84
+ if (window.console && console.log) {
85
+ // example return of current slide number
86
+ console.log('animationComplete on slide: ', current);
87
+ };
88
+ },
89
+ slidesLoaded: function() {
90
+ $j('.caption').animate({
91
+ bottom:0
92
+ },250);
93
+ }
94
+ });
95
+ });
96
+ </script>
97
+ <style>
98
+ #slides-content-top-<?php echo $banner->getId() ?> .caption{width: <?php echo $bannerWidth; ?>px;}
99
+ #slides-content-top-<?php echo $banner->getId() ?> .pagination {margin:0 auto;left:<?php echo ($bannerWidth - 50 ) / 2; ?>px;}
100
+ </style>
101
+ <?php if (!$showPagination): ?>
102
+ <style>
103
+ #slides-content-top-<?php echo $banner->getId() ?> .pagination {display:none;}
104
+ </style>
105
+ <?php endif; ?>
106
+ <?php endif; ?>
107
+ <?php endforeach; ?>
108
+ <?php endif; ?>
109
+
app/etc/modules/Qaz_All.xml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Qaz_All>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ </Qaz_All>
8
+ </modules>
9
+ </config>
10
+ <!--Qazware Magento Oscommerce All -->
app/etc/modules/Qaz_Qbanner.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Qaz_Qbanner>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ </Qaz_Qbanner>
8
+ </modules>
9
+ </config>
js/qaz/qbanner/jquery.1.5.1.js ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * jQuery JavaScript Library v1.5.1
3
+ * http://jquery.com/
4
+ *
5
+ * Copyright 2011, John Resig
6
+ * Dual licensed under the MIT or GPL Version 2 licenses.
7
+ * http://jquery.org/license
8
+ *
9
+ * Includes Sizzle.js
10
+ * http://sizzlejs.com/
11
+ * Copyright 2011, The Dojo Foundation
12
+ * Released under the MIT, BSD, and GPL Licenses.
13
+ *
14
+ * Date: Wed Feb 23 13:55:29 2011 -0500
15
+ */
16
+ (function(a,b){function cg(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cd(a){if(!bZ[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";bZ[a]=c}return bZ[a]}function cc(a,b){var c={};d.each(cb.concat.apply([],cb.slice(0,b)),function(){c[this]=a});return c}function bY(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bX(){try{return new a.XMLHttpRequest}catch(b){}}function bW(){d(a).unload(function(){for(var a in bU)bU[a](0,1)})}function bQ(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h==="string"&&(f[h.toLowerCase()]=a.converters[h]);l=k,k=e[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=f[m]||f["* "+k];if(!n){p=b;for(o in f){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=f[j[1]+" "+k];if(p){o=f[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&d.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bP(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bO(a,b,c,e){if(d.isArray(b)&&b.length)d.each(b,function(b,f){c||bq.test(a)?e(a,f):bO(a+"["+(typeof f==="object"||d.isArray(f)?b:"")+"]",f,c,e)});else if(c||b==null||typeof b!=="object")e(a,b);else if(d.isArray(b)||d.isEmptyObject(b))e(a,"");else for(var f in b)bO(a+"["+f+"]",b[f],c,e)}function bN(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bH,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l==="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bN(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bN(a,c,d,e,"*",g));return l}function bM(a){return function(b,c){typeof b!=="string"&&(c=b,b="*");if(d.isFunction(c)){var e=b.toLowerCase().split(bB),f=0,g=e.length,h,i,j;for(;f<g;f++)h=e[f],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bo(a,b,c){var e=b==="width"?bi:bj,f=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return f;d.each(e,function(){c||(f-=parseFloat(d.css(a,"padding"+this))||0),c==="margin"?f+=parseFloat(d.css(a,"margin"+this))||0:f-=parseFloat(d.css(a,"border"+this+"Width"))||0});return f}function ba(a,b){b.src?d.ajax({url:b.src,async:!1,dataType:"script"}):d.globalEval(b.text||b.textContent||b.innerHTML||""),b.parentNode&&b.parentNode.removeChild(b)}function _(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function $(a,b){if(b.nodeType===1){var c=b.nodeName.toLowerCase();b.clearAttributes(),b.mergeAttributes(a);if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(d.expando)}}function Z(a,b){if(b.nodeType===1&&d.hasData(a)){var c=d.expando,e=d.data(a),f=d.data(b,e);if(e=e[c]){var g=e.events;f=f[c]=d.extend({},e);if(g){delete f.handle,f.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)d.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function Y(a,b){return d.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function O(a,b,c){if(d.isFunction(b))return d.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return d.grep(a,function(a,d){return a===b===c});if(typeof b==="string"){var e=d.grep(a,function(a){return a.nodeType===1});if(J.test(b))return d.filter(b,e,!c);b=d.filter(b,e)}return d.grep(a,function(a,e){return d.inArray(a,b)>=0===c})}function N(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function F(a,b){return(a&&a!=="*"?a+".":"")+b.replace(r,"`").replace(s,"&")}function E(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,q=[],r=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;i<t.length;i++)g=t[i],g.origType.replace(p,"")===a.type?r.push(g.selector):t.splice(i--,1);f=d(a.target).closest(r,a.currentTarget);for(j=0,k=f.length;j<k;j++){m=f[j];for(i=0;i<t.length;i++){g=t[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,e=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,e=d(a.relatedTarget).closest(g.selector)[0];(!e||e!==h)&&q.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=q.length;j<k;j++){f=q[j];if(c&&f.level>c)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function C(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function w(){return!0}function v(){return!1}function g(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function f(a,c,f){if(f===b&&a.nodeType===1){f=a.getAttribute("data-"+c);if(typeof f==="string"){try{f=f==="true"?!0:f==="false"?!1:f==="null"?null:d.isNaN(f)?e.test(f)?d.parseJSON(f):f:parseFloat(f)}catch(g){}d.data(a,c,f)}else f=b}return f}var c=a.document,d=function(){function I(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(I,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x=!1,y,z="then done fail isResolved isRejected promise".split(" "),A,B=Object.prototype.toString,C=Object.prototype.hasOwnProperty,D=Array.prototype.push,E=Array.prototype.slice,F=String.prototype.trim,G=Array.prototype.indexOf,H={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.1",length:0,size:function(){return this.length},toArray:function(){return E.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?D.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(E.apply(this,arguments),"slice",E.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:D,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){e=i[c],f=a[c];if(i===f)continue;l&&f&&(d.isPlainObject(f)||(g=d.isArray(f)))?(g?(g=!1,h=e&&d.isArray(e)?e:[]):h=e&&d.isPlainObject(e)?e:{},i[c]=d.extend(l,h,f)):f!==b&&(i[c]=f)}return i},d.extend({noConflict:function(b){a.$=f,b&&(a.jQuery=e);return d},isReady:!1,readyWait:1,ready:function(a){a===!0&&d.readyWait--;if(!d.readyWait||a!==!0&&!d.isReady){if(!c.body)return setTimeout(d.ready,1);d.isReady=!0;if(a!==!0&&--d.readyWait>0)return;y.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=!0;if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",A,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",A),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&I()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):H[B.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!C.call(a,"constructor")&&!C.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||C.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g<h;)if(c.apply(a[g++],e)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(var j=a[0];g<h&&c.call(j,g,j)!==!1;j=a[++g]){}return a},trim:F?function(a){return a==null?"":F.call(a)}:function(a){return a==null?"":(a+"").replace(j,"").replace(k,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var e=d.type(a);a.length==null||e==="string"||e==="function"||e==="regexp"||d.isWindow(a)?D.call(c,a):d.merge(c,a)}return c},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length==="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,b,c){var d=[],e;for(var f=0,g=a.length;f<g;f++)e=b(a[f],f,c),e!=null&&(d[d.length]=e);return d.concat.apply([],d)},guid:1,proxy:function(a,c,e){arguments.length===2&&(typeof c==="string"?(e=a,a=e[c],c=b):c&&!d.isFunction(c)&&(e=c,c=b)),!c&&a&&(c=function(){return a.apply(e||this,arguments)}),a&&(c.guid=a.guid=a.guid||c.guid||d.guid++);return c},access:function(a,c,e,f,g,h){var i=a.length;if(typeof c==="object"){for(var j in c)d.access(a,j,c[j],f,g,e);return a}if(e!==b){f=!h&&f&&d.isFunction(e);for(var k=0;k<i;k++)g(a[k],c,f?e.call(a[k],k,g(a[k],c)):e,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},_Deferred:function(){var a=[],b,c,e,f={done:function(){if(!e){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=d.type(i),j==="array"?f.done.apply(f,i):j==="function"&&a.push(i);k&&f.resolveWith(k[0],k[1])}return this},resolveWith:function(d,f){if(!e&&!b&&!c){c=1;try{while(a[0])a.shift().apply(d,f)}catch(g){throw g}finally{b=[d,f],c=0}}return this},resolve:function(){f.resolveWith(d.isFunction(this.promise)?this.promise():this,arguments);return this},isResolved:function(){return c||b},cancel:function(){e=1,a=[];return this}};return f},Deferred:function(a){var b=d._Deferred(),c=d._Deferred(),e;d.extend(b,{then:function(a,c){b.done(a).fail(c);return this},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,promise:function(a){if(a==null){if(e)return e;e=a={}}var c=z.length;while(c--)a[z[c]]=b[z[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){var b=arguments.length,c=b<=1&&a&&d.isFunction(a.promise)?a:d.Deferred(),e=c.promise();if(b>1){var f=E.call(arguments,0),g=b,h=function(a){return function(b){f[a]=arguments.length>1?E.call(arguments,0):b,--g||c.resolveWith(e,f)}};while(b--)a=f[b],a&&d.isFunction(a.promise)?a.promise().then(h(b),c.reject):--g;g||c.resolveWith(e,f)}else c!==a&&c.resolve(a);return e},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}d.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.subclass=this.subclass,a.fn.init=function b(b,c){c&&c instanceof d&&!(c instanceof a)&&(c=a(c));return d.fn.init.call(this,b,c,e)},a.fn.init.prototype=a.fn;var e=a(c);return a},browser:{}}),y=d._Deferred(),d.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){H["[object "+b+"]"]=b.toLowerCase()}),w=d.uaMatch(v),w.browser&&(d.browser[w.browser]=!0,d.browser.version=w.version),d.browser.webkit&&(d.browser.safari=!0),G&&(d.inArray=function(a,b){return G.call(b,a)}),i.test(" ")&&(j=/^[\s\xA0]+/,k=/[\s\xA0]+$/),g=d(c),c.addEventListener?A=function(){c.removeEventListener("DOMContentLoaded",A,!1),d.ready()}:c.attachEvent&&(A=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",A),d.ready())});return d}();(function(){d.support={};var b=c.createElement("div");b.style.display="none",b.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e),b=e=f=null}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function"),b=null;return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}})();var e=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!g(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,h=b.nodeType,i=h?d.cache:b,j=h?b[d.expando]:d.expando;if(!i[j])return;if(c){var k=e?i[j][f]:i[j];if(k){delete k[c];if(!g(k))return}}if(e){delete i[j][f];if(!g(i[j]))return}var l=i[j][f];d.support.deleteExpando||i!=a?delete i[j]:i[j]=null,l?(i[j]={},h||(i[j].toJSON=d.noop),i[j][f]=l):h&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var g=this[0].attributes,h;for(var i=0,j=g.length;i<j;i++)h=g[i].name,h.indexOf("data-")===0&&(h=h.substr(5),f(this[0],h,e[h]))}}return e}if(typeof a==="object")return this.each(function(){d.data(this,a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(c===b){e=this.triggerHandler("getData"+k[1]+"!",[k[0]]),e===b&&this.length&&(e=d.data(this[0],a),e=f(this[0],a,e));return e===b&&k[1]?this.data(k[0]):e}return this.each(function(){var b=d(this),e=[k[0],c];b.triggerHandler("setData"+k[1]+"!",e),d.data(this,a,c),b.triggerHandler("changeData"+k[1]+"!",e)})},removeData:function(a){return this.each(function(){d.removeData(this,a)})}}),d.extend({queue:function(a,b,c){if(a){b=(b||"fx")+"queue";var e=d._data(a,b);if(!c)return e||[];!e||d.isArray(c)?e=d._data(a,b,d.makeArray(c)):e.push(c);return e}},dequeue:function(a,b){b=b||"fx";var c=d.queue(a,b),e=c.shift();e==="inprogress"&&(e=c.shift()),e&&(b==="fx"&&c.unshift("inprogress"),e.call(a,function(){d.dequeue(a,b)})),c.length||d.removeData(a,b+"queue",!0)}}),d.fn.extend({queue:function(a,c){typeof a!=="string"&&(c=a,a="fx");if(c===b)return d.queue(this[0],a);return this.each(function(b){var e=d.queue(this,a,c);a==="fx"&&e[0]!=="inprogress"&&d.dequeue(this,a)})},dequeue:function(a){return this.each(function(){d.dequeue(this,a)})},delay:function(a,b){a=d.fx?d.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){d.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var h=/[\n\t\r]/g,i=/\s+/,j=/\r/g,k=/^(?:href|src|style)$/,l=/^(?:button|input)$/i,m=/^(?:button|input|object|select|textarea)$/i,n=/^a(?:rea)?$/i,o=/^(?:radio|checkbox)$/i;d.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"},d.fn.extend({attr:function(a,b){return d.access(this,a,b,!0,d.attr)},removeAttr:function(a,b){return this.each(function(){d.attr(this,a,""),this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.addClass(a.call(this,b,c.attr("class")))});if(a&&typeof a==="string"){var b=(a||"").split(i);for(var c=0,e=this.length;c<e;c++){var f=this[c];if(f.nodeType===1)if(f.className){var g=" "+f.className+" ",h=f.className;for(var j=0,k=b.length;j<k;j++)g.indexOf(" "+b[j]+" ")<0&&(h+=" "+b[j]);f.className=d.trim(h)}else f.className=a}}return this},removeClass:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a==="string"||a===b){var c=(a||"").split(i);for(var e=0,f=this.length;e<f;e++){var g=this[e];if(g.nodeType===1&&g.className)if(a){var j=(" "+g.className+" ").replace(h," ");for(var k=0,l=c.length;k<l;k++)j=j.replace(" "+c[k]+" "," ");g.className=d.trim(j)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,e=typeof b==="boolean";if(d.isFunction(a))return this.each(function(c){var e=d(this);e.toggleClass(a.call(this,c,e.attr("class"),b),b)});return this.each(function(){if(c==="string"){var f,g=0,h=d(this),j=b,k=a.split(i);while(f=k[g++])j=e?j:!h.hasClass(f),h[j?"addClass":"removeClass"](f)}else if(c==="undefined"||c==="boolean")this.className&&d._data(this,"__className__",this.className),this.className=this.className||a===!1?"":d._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(h," ").indexOf(b)>-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var k=i?f:0,l=i?f+1:h.length;k<l;k++){var m=h[k];if(m.selected&&(d.support.optDisabled?!m.disabled:m.getAttribute("disabled")===null)&&(!m.parentNode.disabled||!d.nodeName(m.parentNode,"optgroup"))){a=d(m).val();if(i)return a;g.push(a)}}if(i&&!g.length&&h.length)return d(h[f]).val();return g}if(o.test(c.type)&&!d.support.checkOn)return c.getAttribute("value")===null?"on":c.value;return(c.value||"").replace(j,"")}return b}var n=d.isFunction(a);return this.each(function(b){var c=d(this),e=a;if(this.nodeType===1){n&&(e=a.call(this,b,c.val())),e==null?e="":typeof e==="number"?e+="":d.isArray(e)&&(e=d.map(e,function(a){return a==null?"":a+""}));if(d.isArray(e)&&o.test(this.type))this.checked=d.inArray(c.val(),e)>=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=k.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&l.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var o=a.getAttributeNode("tabIndex");return o&&o.specified?o.value:m.test(a.nodeName)||n.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var p=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return p===null?b:p}h&&(a[c]=e);return a[c]}});var p=/\.(.*)$/,q=/^(?:textarea|input|select)$/i,r=/\./g,s=/ /g,t=/[^\w\s.|`]/g,u=function(a){return a.replace(t,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=v;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(){return typeof d!=="undefined"&&!d.event.triggered?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=v);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),u).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))d.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=d.event.special[h]||{};for(j=f||0;j<p.length;j++){q=p[j];if(e.guid===q.guid){if(l||n.test(q.namespace))f==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(f!=null)break}}if(p.length===0||f!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&d.removeEvent(a,h,s.handle),g=null,delete t[h]}if(d.isEmptyObject(t)){var w=s.handle;w&&(w.elem=null),delete s.events,delete s.handle,d.isEmptyObject(s)&&d.removeData(a,b,!0)}}},trigger:function(a,c,e){var f=a.type||a,g=arguments[3];if(!g){a=typeof a==="object"?a[d.expando]?a:d.extend(d.Event(f),a):d.Event(f),f.indexOf("!")>=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(p,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=!0,l[m]())}catch(q){}k&&(l["on"+m]=k),d.event.triggered=!1}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l<m;l++){var n=f[l];if(e||h.test(n.namespace)){c.handler=n.handler,c.data=n.data,c.handleObj=n;var o=n.handler.apply(this,k);o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[d.expando])return a;var e=a;a=d.Event(e);for(var f=this.props.length,g;f;)g=this.props[--f],a[g]=e[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=c.documentElement,i=c.body;a.pageX=a.clientX+(h&&h.scrollLeft||i&&i.scrollLeft||0)-(h&&h.clientLeft||i&&i.clientLeft||0),a.pageY=a.clientY+(h&&h.scrollTop||i&&i.scrollTop||0)-(h&&h.clientTop||i&&i.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:d.proxy,special:{ready:{setup:d.bindReady,teardown:d.noop},live:{add:function(a){d.event.add(this,F(a.origType,a.selector),d.extend({},a,{handler:E,guid:a.handler.guid}))},remove:function(a){d.event.remove(this,F(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){d.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},d.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},d.Event=function(a){if(!this.preventDefault)return new d.Event(a);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?w:v):this.type=a,this.timeStamp=d.now(),this[d.expando]=!0},d.Event.prototype={preventDefault:function(){this.isDefaultPrevented=w;var a=this.originalEvent;a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=w;var a=this.originalEvent;a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=w,this.stopPropagation()},isDefaultPrevented:v,isPropagationStopped:v,isImmediatePropagationStopped:v};var x=function(a){var b=a.relatedTarget;try{if(b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&(a.type=a.data,d.event.handle.apply(this,arguments))}catch(e){}},y=function(a){a.type=a.data,d.event.handle.apply(this,arguments)};d.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){d.event.special[a]={setup:function(c){d.event.add(this,b,c&&c.selector?y:x,a)},teardown:function(a){d.event.remove(this,b,a&&a.selector?y:x)}}}),d.support.submitBubbles||(d.event.special.submit={setup:function(a,b){if(this.nodeName&&this.nodeName.toLowerCase()!=="form")d.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&d(b).closest("form").length&&C("submit",this,arguments)}),d.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&d(b).closest("form").length&&a.keyCode===13&&C("submit",this,arguments)});else return!1},teardown:function(a){d.event.remove(this,".specialSubmit")}});if(!d.support.changeBubbles){var z,A=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},B=function B(a){var c=a.target,e,f;if(q.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=A(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:B,beforedeactivate:B,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&B.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&B.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",A(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in z)d.event.add(this,c+".specialChange",z[c]);return q.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return q.test(this.nodeName)}},z=d.event.special.change.filters,z.focus=z.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function c(a){a=d.event.fix(a),a.type=b;return d.event.handle.call(this,a)}d.event.special[b]={setup:function(){this.addEventListener(a,c,!0)},teardown:function(){this.removeEventListener(a,c,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i<j;i++)d.event.add(this[i],a,h,e);return this}}),d.fn.extend({unbind:function(a,b){if(typeof a!=="object"||a.preventDefault)for(var e=0,f=this.length;e<f;e++)d.event.remove(this[e],a,b);else for(var c in a)this.unbind(c,a[c]);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){d.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var c=d.Event(a);c.preventDefault(),c.stopPropagation(),d.event.trigger(c,b,this[0]);return c.result}},toggle:function(a){var b=arguments,c=1;while(c<b.length)d.proxy(a,b[c++]);return this.click(d.proxy(a,function(e){var f=(d._data(this,"lastToggle"+a.guid)||0)%c;d._data(this,"lastToggle"+a.guid,f+1),e.preventDefault();return b[f].apply(this,arguments)||!1}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var D={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};d.each(["live","die"],function(a,c){d.fn[c]=function(a,e,f,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:d(this.context);if(typeof a==="object"&&!a.preventDefault){for(var o in a)n[c](o,e,a[o],m);return this}d.isFunction(e)&&(f=e,e=b),a=(a||"").split(" ");while((h=a[i++])!=null){j=p.exec(h),k="",j&&(k=j[0],h=h.replace(p,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,h==="focus"||h==="blur"?(a.push(D[h]+k),h=h+k):h=(D[h]||h)+k;if(c==="live")for(var q=0,r=n.length;q<r;q++)d.event.add(n[q],"live."+F(h,m),{data:e,selector:m,handler:f,origType:h,origHandler:f,preType:l});else n.unbind("live."+F(h,m),f)}return this}}),d.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".split(" "),function(a,b){d.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!=="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!=="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(f){if(f===!0)continue}else g=o=!0}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b==="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1){}a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=u;typeof b==="string"&&!j.test(b)&&(b=b.toLowerCase(),d=b,g=t),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=u;typeof b==="string"&&!j.test(b)&&(b=b.toLowerCase(),d=b,g=t),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!=="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!=="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!=="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){return"text"===a.getAttribute("type")},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(a===b){g=!0;return 0}if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector,d=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(e){d=!0}b&&(k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(d||!l.match.PSEUDO.test(c)&&!/!=/.test(c))return b.call(a,c)}catch(e){}return k(c,null,null,[a]).length>0})}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};d.find=k,d.expr=k.selectors,d.expr[":"]=d.expr.filters,d.unique=k.uniqueSort,d.text=k.getText,d.isXMLDoc=k.isXML,d.contains=k.contains}();var G=/Until$/,H=/^(?:parents|prevUntil|prevAll)/,I=/,/,J=/^.[^:#\[\.,]*$/,K=Array.prototype.slice,L=d.expr.match.POS,M={children:!0,contents:!0,next:!0,prev:!0};d.fn.extend({find:function(a){var b=this.pushStack("","find",a),c=0;for(var e=0,f=this.length;e<f;e++){c=b.length,d.find(a,this[e],b);if(e>0)for(var g=c;g<b.length;g++)for(var h=0;h<c;h++)if(b[h]===b[g]){b.splice(g--,1);break}}return b},has:function(a){var b=d(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(d.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(O(this,a,!1),"not",a)},filter:function(a){return this.pushStack(O(this,a,!0),"filter",a)},is:function(a){return!!a&&d.filter(a,this).length>0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e<f;e++)i=a[e],j[i]||(j[i]=d.expr.match.POS.test(i)?d(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=L.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e<f;e++){g=this[e];while(g){if(l?l.index(g)>-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(N(c[0])||N(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=K.call(arguments);G.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!M[a]?d.unique(f):f,(this.length>1||I.test(e))&&H.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var P=/ jQuery\d+="(?:\d+|null)"/g,Q=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,S=/<([\w:]+)/,T=/<tbody/i,U=/<|&#?\w+;/,V=/<(?:script|object|embed|option|style)/i,W=/checked\s*(?:[^=]|=\s*.checked.)/i,X={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};X.optgroup=X.option,X.tbody=X.tfoot=X.colgroup=X.caption=X.thead,X.th=X.td,d.support.htmlSerialize||(X._default=[1,"div<div>","</div>"]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(P,""):null;if(typeof a!=="string"||V.test(a)||!d.support.leadingWhitespace&&Q.test(a)||X[(S.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(R,"<$1></$2>");try{for(var c=0,e=this.length;c<e;c++)this[c].nodeType===1&&(d.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(f){this.empty().append(a)}}return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(d.isFunction(a))return this.each(function(b){var c=d(this),e=c.html();c.replaceWith(a.call(this,b,e))});typeof a!=="string"&&(a=d(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;d(this).remove(),b?d(b).before(a):d(c).append(a)})}return this.pushStack(d(d.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,e){var f,g,h,i,j=a[0],k=[];if(!d.support.checkClone&&arguments.length===3&&typeof j==="string"&&W.test(j))return this.each(function(){d(this).domManip(a,c,e,!0)});if(d.isFunction(j))return this.each(function(f){var g=d(this);a[0]=j.call(this,f,c?g.html():b),g.domManip(a,c,e)});if(this[0]){i=j&&j.parentNode,d.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?f={fragment:i}:f=d.buildFragment(a,this,k),h=f.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&d.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)e.call(c?Y(this[l],g):this[l],f.cacheable||m>1&&l<n?d.clone(h,!0,!0):h)}k.length&&d.each(k,ba)}return this}}),d.buildFragment=function(a,b,e){var f,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]==="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!V.test(a[0])&&(d.support.checkClone||!W.test(a[0]))&&(g=!0,h=d.fragments[a[0]],h&&(h!==1&&(f=h))),f||(f=i.createDocumentFragment(),d.clean(a,i,f,e)),g&&(d.fragments[a[0]]=h?f:1);return{fragment:f,cacheable:g}},d.fragments={},d.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){d.fn[a]=function(c){var e=[],f=d(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&f.length===1){f[b](this[0]);return this}for(var h=0,i=f.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){$(a,e),f=_(a),g=_(e);for(h=0;f[h];++h)$(f[h],g[h])}if(b){Z(a,e);if(c){f=_(a),g=_(e);for(h=0;f[h];++h)Z(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||U.test(i)){if(typeof i==="string"){i=i.replace(R,"<$1></$2>");var j=(S.exec(i)||["",""])[1].toLowerCase(),k=X[j]||X._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=T.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]==="<table>"&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&Q.test(i)&&m.insertBefore(b.createTextNode(Q.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bb=/alpha\([^)]*\)/i,bc=/opacity=([^)]*)/,bd=/-([a-z])/ig,be=/([A-Z])/g,bf=/^-?\d+(?:px)?$/i,bg=/^-?\d/,bh={position:"absolute",visibility:"hidden",display:"block"},bi=["Left","Right"],bj=["Top","Bottom"],bk,bl,bm,bn=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bk(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bk)return bk(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bd,bn)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bo(a,b,e):d.swap(a,bh,function(){f=bo(a,b,e)});if(f<=0){f=bk(a,b,b),f==="0px"&&bm&&(f=bm(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bf.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return bc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bb.test(f)?f.replace(bb,e):c.filter+" "+e}}),c.defaultView&&c.defaultView.getComputedStyle&&(bl=function(a,c,e){var f,g,h;e=e.replace(be,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bm=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bf.test(d)&&bg.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bk=bl||bm,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var bp=/%20/g,bq=/\[\]$/,br=/\r?\n/g,bs=/#.*$/,bt=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bu=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bv=/(?:^file|^widget|\-extension):$/,bw=/^(?:GET|HEAD)$/,bx=/^\/\//,by=/\?/,bz=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bA=/^(?:select|textarea)/i,bB=/\s+/,bC=/([?&])_=[^&]*/,bD=/(^|\-)([a-z])/g,bE=function(a,b,c){return b+c.toUpperCase()},bF=/^([\w\+\.\-]+:)\/\/([^\/?#:]*)(?::(\d+))?/,bG=d.fn.load,bH={},bI={},bJ,bK;try{bJ=c.location.href}catch(bL){bJ=c.createElement("a"),bJ.href="",bJ=bJ.href}bK=bF.exec(bJ.toLowerCase()),d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bG)return bG.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("<div>").append(c.replace(bz,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bA.test(this.nodeName)||bu.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(br,"\r\n")}}):{name:b.name,value:c.replace(br,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bJ,isLocal:bv.test(bK[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bM(bH),ajaxTransport:bM(bI),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bP(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bQ(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bD,bE)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bt.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bs,"").replace(bx,bK[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bB),e.crossDomain||(q=bF.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bK[1]||q[2]!=bK[2]||(q[3]||(q[1]==="http:"?80:443))!=(bK[3]||(bK[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bN(bH,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!bw.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(by.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bC,"$1_="+w);e.url=x+(x===e.url?(by.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bN(bI,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bO(g,a[g],c,f);return e.join("&").replace(bp,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bR=d.now(),bS=/(\=)\?(&|$)|()\?\?()/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bR++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bS.test(b.url)||f&&bS.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bS,l),b.url===j&&(f&&(k=k.replace(bS,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bT=d.now(),bU,bV;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bX()||bY()}:bX,bV=d.ajaxSettings.xhr(),d.support.ajax=!!bV,d.support.cors=bV&&"withCredentials"in bV,bV=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),(!a.crossDomain||a.hasContent)&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bU[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bU||(bU={},bW()),h=bT++,g.onreadystatechange=bU[h]=c):c()},abort:function(){c&&c(0,1)}}}});var bZ={},b$=/^(?:toggle|show|hide)$/,b_=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,ca,cb=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(cc("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)e=this[g],f=e.style.display,!d._data(e,"olddisplay")&&f==="none"&&(f=e.style.display=""),f===""&&d.css(e,"display")==="none"&&d._data(e,"olddisplay",cd(e.nodeName));for(g=0;g<h;g++){e=this[g],f=e.style.display;if(f===""||f==="none")e.style.display=d._data(e,"olddisplay")||""}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cc("hide",3),a,b,c);for(var e=0,f=this.length;e<f;e++){var g=d.css(this[e],"display");g!=="none"&&!d._data(this[e],"olddisplay")&&d._data(this[e],"olddisplay",g)}for(e=0;e<f;e++)this[e].style.display="none";return this},_toggle:d.fn.toggle,toggle:function(a,b,c){var e=typeof a==="boolean";d.isFunction(a)&&d.isFunction(b)?this._toggle.apply(this,arguments):a==null||e?this.each(function(){var b=e?a:d(this).is(":hidden");d(this)[b?"show":"hide"]()}):this.animate(cc("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,e){var f=d.speed(b,c,e);if(d.isEmptyObject(a))return this.each(f.complete);return this[f.queue===!1?"each":"queue"](function(){var b=d.extend({},f),c,e=this.nodeType===1,g=e&&d(this).is(":hidden"),h=this;for(c in a){var i=d.camelCase(c);c!==i&&(a[i]=a[c],delete a[c],c=i);if(a[c]==="hide"&&g||a[c]==="show"&&!g)return b.complete.call(this);if(e&&(c==="height"||c==="width")){b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(d.css(this,"display")==="inline"&&d.css(this,"float")==="none")if(d.support.inlineBlockNeedsLayout){var j=cd(this.nodeName);j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)}else this.style.display="inline-block"}d.isArray(a[c])&&((b.specialEasing=b.specialEasing||{})[c]=a[c][1],a[c]=a[c][0])}b.overflow!=null&&(this.style.overflow="hidden"),b.curAnim=d.extend({},a),d.each(a,function(c,e){var f=new d.fx(h,b,c);if(b$.test(e))f[e==="toggle"?g?"show":"hide":e](a);else{var i=b_.exec(e),j=f.cur();if(i){var k=parseFloat(i[2]),l=i[3]||(d.cssNumber[c]?"":"px");l!=="px"&&(d.style(h,c,(k||1)+l),j=(k||1)/f.cur()*j,d.style(h,c,j+l)),i[1]&&(k=(i[1]==="-="?-1:1)*k+j),f.custom(j,k,l)}else f.custom(j,e,"")}});return!0})},stop:function(a,b){var c=d.timers;a&&this.queue([]),this.each(function(){for(var a=c.length-1;a>=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:cc("show",1),slideUp:cc("hide",1),slideToggle:cc("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!ca&&(ca=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||d.fx.stop()},interval:13,stop:function(){clearInterval(ca),ca=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){d.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),d.expr&&d.expr.filters&&(d.expr.filters.animated=function(a){return d.grep(d.timers,function(b){return a===b.elem}).length});var ce=/^t(?:able|d|h)$/i,cf=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?d.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){d.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return d.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,g=f.documentElement;if(!c||!d.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=f.body,i=cg(f),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||d.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||d.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:d.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){d.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return d.offset.bodyOffset(b);d.offset.initialize();var c,e=b.offsetParent,f=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(d.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===e&&(l+=b.offsetTop,m+=b.offsetLeft,d.offset.doesNotAddBorder&&(!d.offset.doesAddBorderForTableAndCells||!ce.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),f=e,e=b.offsetParent),d.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;d.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},d.offset={initialize:function(){var a=c.body,b=c.createElement("div"),e,f,g,h,i=parseFloat(d.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),a=b=e=f=g=h=null,d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=e==="absolute"&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=cf.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!cf.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=cg(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=cg(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window);
js/qaz/qbanner/jquery.slides.min.js ADDED
@@ -0,0 +1,545 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Slides, A Slideshow Plugin for jQuery
3
+ * Intructions: http://slidesjs.com
4
+ * By: Nathan Searles, http://nathansearles.com
5
+ * Version: 1.1.7
6
+ * Updated: May 2nd, 2011
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+ (function($){
21
+ $.fn.slides = function( option ) {
22
+ // override defaults with specified option
23
+ option = $.extend( {}, $.fn.slides.option, option );
24
+
25
+ return this.each(function(){
26
+ // wrap slides in control container, make sure slides are block level
27
+ $('.' + option.container, $(this)).children().wrapAll('<div class="slides_control"/>');
28
+
29
+ var elem = $(this),
30
+ control = $('.slides_control',elem),
31
+ total = control.children().size(),
32
+ width = control.children().outerWidth(),
33
+ height = control.children().outerHeight(),
34
+ start = option.start - 1,
35
+ effect = option.effect.indexOf(',') < 0 ? option.effect : option.effect.replace(' ', '').split(',')[0],
36
+ paginationEffect = option.effect.indexOf(',') < 0 ? effect : option.effect.replace(' ', '').split(',')[1],
37
+ next = 0, prev = 0, number = 0, current = 0, loaded, active, clicked, position, direction, imageParent, pauseTimeout, playInterval;
38
+
39
+ // animate slides
40
+ function animate(direction, effect, clicked) {
41
+ if (!active && loaded) {
42
+ active = true;
43
+ // start of animation
44
+ option.animationStart(current + 1);
45
+ switch(direction) {
46
+ case 'next':
47
+ // change current slide to previous
48
+ prev = current;
49
+ // get next from current + 1
50
+ next = current + 1;
51
+ // if last slide, set next to first slide
52
+ next = total === next ? 0 : next;
53
+ // set position of next slide to right of previous
54
+ position = width*2;
55
+ // distance to slide based on width of slides
56
+ direction = -width*2;
57
+ // store new current slide
58
+ current = next;
59
+ break;
60
+ case 'prev':
61
+ // change current slide to previous
62
+ prev = current;
63
+ // get next from current - 1
64
+ next = current - 1;
65
+ // if first slide, set next to last slide
66
+ next = next === -1 ? total-1 : next;
67
+ // set position of next slide to left of previous
68
+ position = 0;
69
+ // distance to slide based on width of slides
70
+ direction = 0;
71
+ // store new current slide
72
+ current = next;
73
+ break;
74
+ case 'pagination':
75
+ // get next from pagination item clicked, convert to number
76
+ next = parseInt(clicked,10);
77
+ // get previous from pagination item with class of current
78
+ prev = $('.' + option.paginationClass + ' li.'+ option.currentClass +' a', elem).attr('href').match('[^#/]+$');
79
+ // if next is greater then previous set position of next slide to right of previous
80
+ if (next > prev) {
81
+ position = width*2;
82
+ direction = -width*2;
83
+ } else {
84
+ // if next is less then previous set position of next slide to left of previous
85
+ position = 0;
86
+ direction = 0;
87
+ }
88
+ // store new current slide
89
+ current = next;
90
+ break;
91
+ }
92
+
93
+ // fade animation
94
+ if (effect === 'fade') {
95
+ // fade animation with crossfade
96
+ if (option.crossfade) {
97
+ // put hidden next above current
98
+ control.children(':eq('+ next +')', elem).css({
99
+ zIndex: 10
100
+ // fade in next
101
+ }).fadeIn(option.fadeSpeed, option.fadeEasing, function(){
102
+ if (option.autoHeight) {
103
+ // animate container to height of next
104
+ control.animate({
105
+ height: control.children(':eq('+ next +')', elem).outerHeight()
106
+ }, option.autoHeightSpeed, function(){
107
+ // hide previous
108
+ control.children(':eq('+ prev +')', elem).css({
109
+ display: 'none',
110
+ zIndex: 0
111
+ });
112
+ // reset z index
113
+ control.children(':eq('+ next +')', elem).css({
114
+ zIndex: 0
115
+ });
116
+ // end of animation
117
+ option.animationComplete(next + 1);
118
+ active = false;
119
+ });
120
+ } else {
121
+ // hide previous
122
+ control.children(':eq('+ prev +')', elem).css({
123
+ display: 'none',
124
+ zIndex: 0
125
+ });
126
+ // reset zindex
127
+ control.children(':eq('+ next +')', elem).css({
128
+ zIndex: 0
129
+ });
130
+ // end of animation
131
+ option.animationComplete(next + 1);
132
+ active = false;
133
+ }
134
+ });
135
+ } else {
136
+ // fade animation with no crossfade
137
+ control.children(':eq('+ prev +')', elem).fadeOut(option.fadeSpeed, option.fadeEasing, function(){
138
+ // animate to new height
139
+ if (option.autoHeight) {
140
+ control.animate({
141
+ // animate container to height of next
142
+ height: control.children(':eq('+ next +')', elem).outerHeight()
143
+ }, option.autoHeightSpeed,
144
+ // fade in next slide
145
+ function(){
146
+ control.children(':eq('+ next +')', elem).fadeIn(option.fadeSpeed, option.fadeEasing);
147
+ });
148
+ } else {
149
+ // if fixed height
150
+ control.children(':eq('+ next +')', elem).fadeIn(option.fadeSpeed, option.fadeEasing, function(){
151
+ // fix font rendering in ie, lame
152
+ if($.browser.msie) {
153
+ $(this).get(0).style.removeAttribute('filter');
154
+ }
155
+ });
156
+ }
157
+ // end of animation
158
+ option.animationComplete(next + 1);
159
+ active = false;
160
+ });
161
+ }
162
+ // slide animation
163
+ } else {
164
+ // move next slide to right of previous
165
+ control.children(':eq('+ next +')').css({
166
+ left: position,
167
+ display: 'block'
168
+ });
169
+ // animate to new height
170
+ if (option.autoHeight) {
171
+ control.animate({
172
+ left: direction,
173
+ height: control.children(':eq('+ next +')').outerHeight()
174
+ },option.slideSpeed, option.slideEasing, function(){
175
+ control.css({
176
+ left: -width
177
+ });
178
+ control.children(':eq('+ next +')').css({
179
+ left: width,
180
+ zIndex: 5
181
+ });
182
+ // reset previous slide
183
+ control.children(':eq('+ prev +')').css({
184
+ left: width,
185
+ display: 'none',
186
+ zIndex: 0
187
+ });
188
+ // end of animation
189
+ option.animationComplete(next + 1);
190
+ active = false;
191
+ });
192
+ // if fixed height
193
+ } else {
194
+ // animate control
195
+ control.animate({
196
+ left: direction
197
+ },option.slideSpeed, option.slideEasing, function(){
198
+ // after animation reset control position
199
+ control.css({
200
+ left: -width
201
+ });
202
+ // reset and show next
203
+ control.children(':eq('+ next +')').css({
204
+ left: width,
205
+ zIndex: 5
206
+ });
207
+ // reset previous slide
208
+ control.children(':eq('+ prev +')').css({
209
+ left: width,
210
+ display: 'none',
211
+ zIndex: 0
212
+ });
213
+ // end of animation
214
+ option.animationComplete(next + 1);
215
+ active = false;
216
+ });
217
+ }
218
+ }
219
+ // set current state for pagination
220
+ if (option.pagination) {
221
+ // remove current class from all
222
+ $('.'+ option.paginationClass +' li.' + option.currentClass, elem).removeClass(option.currentClass);
223
+ // add current class to next
224
+ $('.' + option.paginationClass + ' li:eq('+ next +')', elem).addClass(option.currentClass);
225
+ }
226
+ }
227
+ } // end animate function
228
+
229
+ function stop() {
230
+ // clear interval from stored id
231
+ clearInterval(elem.data('interval'));
232
+ }
233
+
234
+ function pause() {
235
+ if (option.pause) {
236
+ // clear timeout and interval
237
+ clearTimeout(elem.data('pause'));
238
+ clearInterval(elem.data('interval'));
239
+ // pause slide show for option.pause amount
240
+ pauseTimeout = setTimeout(function() {
241
+ // clear pause timeout
242
+ clearTimeout(elem.data('pause'));
243
+ // start play interval after pause
244
+ playInterval = setInterval( function(){
245
+ animate("next", effect);
246
+ },option.play);
247
+ // store play interval
248
+ elem.data('interval',playInterval);
249
+ },option.pause);
250
+ // store pause interval
251
+ elem.data('pause',pauseTimeout);
252
+ } else {
253
+ // if no pause, just stop
254
+ stop();
255
+ }
256
+ }
257
+
258
+ // 2 or more slides required
259
+ if (total < 2) {
260
+ return;
261
+ }
262
+
263
+ // error corection for start slide
264
+ if (start < 0) {
265
+ start = 0;
266
+ }
267
+
268
+ if (start > total) {
269
+ start = total - 1;
270
+ }
271
+
272
+ // change current based on start option number
273
+ if (option.start) {
274
+ current = start;
275
+ }
276
+
277
+ // randomizes slide order
278
+ if (option.randomize) {
279
+ control.randomize();
280
+ }
281
+
282
+ // make sure overflow is hidden, width is set
283
+ $('.' + option.container, elem).css({
284
+ overflow: 'hidden',
285
+ // fix for ie
286
+ position: 'relative'
287
+ });
288
+
289
+ // set css for slides
290
+ control.children().css({
291
+ position: 'absolute',
292
+ top: 0,
293
+ left: control.children().outerWidth(),
294
+ zIndex: 0,
295
+ display: 'none'
296
+ });
297
+
298
+ // set css for control div
299
+ control.css({
300
+ position: 'relative',
301
+ // size of control 3 x slide width
302
+ width: (width * 3),
303
+ // set height to slide height
304
+ height: height,
305
+ // center control to slide
306
+ left: -width
307
+ });
308
+
309
+ // show slides
310
+ $('.' + option.container, elem).css({
311
+ display: 'block'
312
+ });
313
+
314
+ // if autoHeight true, get and set height of first slide
315
+ if (option.autoHeight) {
316
+ control.children().css({
317
+ height: 'auto'
318
+ });
319
+ control.animate({
320
+ height: control.children(':eq('+ start +')').outerHeight()
321
+ },option.autoHeightSpeed);
322
+ }
323
+
324
+ // checks if image is loaded
325
+ if (option.preload && control.find('img').length) {
326
+ // adds preload image
327
+ $('.' + option.container, elem).css({
328
+ background: 'url(' + option.preloadImage + ') no-repeat 50% 50%'
329
+ });
330
+
331
+ // gets image src, with cache buster
332
+ var img = control.find('img:eq(' + start + ')').attr('src') + '?' + (new Date()).getTime();
333
+
334
+ // check if the image has a parent
335
+ if ($('img', elem).parent().attr('class') != 'slides_control') {
336
+ // If image has parent, get tag name
337
+ imageParent = control.children(':eq(0)')[0].tagName.toLowerCase();
338
+ } else {
339
+ // Image doesn't have parent, use image tag name
340
+ imageParent = control.find('img:eq(' + start + ')');
341
+ }
342
+
343
+ // checks if image is loaded
344
+ control.find('img:eq(' + start + ')').attr('src', img).load(function() {
345
+ // once image is fully loaded, fade in
346
+ control.find(imageParent + ':eq(' + start + ')').fadeIn(option.fadeSpeed, option.fadeEasing, function(){
347
+ $(this).css({
348
+ zIndex: 5
349
+ });
350
+ // removes preload image
351
+ $('.' + option.container, elem).css({
352
+ background: ''
353
+ });
354
+ // let the script know everything is loaded
355
+ loaded = true;
356
+ // call the loaded funciton
357
+ option.slidesLoaded();
358
+ });
359
+ });
360
+ } else {
361
+ // if no preloader fade in start slide
362
+ control.children(':eq(' + start + ')').fadeIn(option.fadeSpeed, option.fadeEasing, function(){
363
+ // let the script know everything is loaded
364
+ loaded = true;
365
+ // call the loaded funciton
366
+ option.slidesLoaded();
367
+ });
368
+ }
369
+
370
+ // click slide for next
371
+ if (option.bigTarget) {
372
+ // set cursor to pointer
373
+ control.children().css({
374
+ cursor: 'pointer'
375
+ });
376
+ // click handler
377
+ control.children().click(function(){
378
+ // animate to next on slide click
379
+ animate('next', effect);
380
+ return false;
381
+ });
382
+ }
383
+
384
+ // pause on mouseover
385
+ if (option.hoverPause && option.play) {
386
+ control.bind('mouseover',function(){
387
+ // on mouse over stop
388
+ stop();
389
+ });
390
+ control.bind('mouseleave',function(){
391
+ // on mouse leave start pause timeout
392
+ pause();
393
+ });
394
+ }
395
+
396
+ // generate next/prev buttons
397
+ if (option.generateNextPrev) {
398
+ $('.' + option.container, elem).after('<a href="#" class="'+ option.prev +'">Prev</a>');
399
+ $('.' + option.prev, elem).after('<a href="#" class="'+ option.next +'">Next</a>');
400
+ }
401
+
402
+ // next button
403
+ $('.' + option.next ,elem).click(function(e){
404
+ e.preventDefault();
405
+ if (option.play) {
406
+ pause();
407
+ }
408
+ animate('next', effect);
409
+ });
410
+
411
+ // previous button
412
+ $('.' + option.prev, elem).click(function(e){
413
+ e.preventDefault();
414
+ if (option.play) {
415
+ pause();
416
+ }
417
+ animate('prev', effect);
418
+ });
419
+
420
+ // generate pagination
421
+ if (option.generatePagination) {
422
+ // create unordered list
423
+ if (option.prependPagination) {
424
+ elem.prepend('<ul class='+ option.paginationClass +'></ul>');
425
+ } else {
426
+ elem.append('<ul class='+ option.paginationClass +'></ul>');
427
+ }
428
+ // for each slide create a list item and link
429
+ control.children().each(function(){
430
+ $('.' + option.paginationClass, elem).append('<li><a href="#'+ number +'">'+ (number+1) +'</a></li>');
431
+ number++;
432
+ });
433
+ } else {
434
+ // if pagination exists, add href w/ value of item number to links
435
+ $('.' + option.paginationClass + ' li a', elem).each(function(){
436
+ $(this).attr('href', '#' + number);
437
+ number++;
438
+ });
439
+ }
440
+
441
+ // add current class to start slide pagination
442
+ $('.' + option.paginationClass + ' li:eq('+ start +')', elem).addClass(option.currentClass);
443
+
444
+ // click handling
445
+ $('.' + option.paginationClass + ' li a', elem ).click(function(){
446
+ // pause slideshow
447
+ if (option.play) {
448
+ pause();
449
+ }
450
+ // get clicked, pass to animate function
451
+ clicked = $(this).attr('href').match('[^#/]+$');
452
+ // if current slide equals clicked, don't do anything
453
+ if (current != clicked) {
454
+ animate('pagination', paginationEffect, clicked);
455
+ }
456
+ return false;
457
+ });
458
+
459
+ // click handling
460
+ $('a.link', elem).click(function(){
461
+ // pause slideshow
462
+ if (option.play) {
463
+ pause();
464
+ }
465
+ // get clicked, pass to animate function
466
+ clicked = $(this).attr('href').match('[^#/]+$') - 1;
467
+ // if current slide equals clicked, don't do anything
468
+ if (current != clicked) {
469
+ animate('pagination', paginationEffect, clicked);
470
+ }
471
+ return false;
472
+ });
473
+
474
+ if (option.play) {
475
+ // set interval
476
+ playInterval = setInterval(function() {
477
+ animate('next', effect);
478
+ }, option.play);
479
+ // store interval id
480
+ elem.data('interval',playInterval);
481
+ }
482
+ });
483
+ };
484
+
485
+ // default options
486
+ $.fn.slides.option = {
487
+ preload: false, // boolean, Set true to preload images in an image based slideshow
488
+ preloadImage: '/images/loading.gif', // string, Name and location of loading image for preloader. Default is "/img/loading.gif"
489
+ container: 'slides_container', // string, Class name for slides container. Default is "slides_container"
490
+ generateNextPrev: false, // boolean, Auto generate next/prev buttons
491
+ next: 'next', // string, Class name for next button
492
+ prev: 'prev', // string, Class name for previous button
493
+ pagination: true, // boolean, If you're not using pagination you can set to false, but don't have to
494
+ generatePagination: true, // boolean, Auto generate pagination
495
+ prependPagination: false, // boolean, prepend pagination
496
+ paginationClass: 'pagination', // string, Class name for pagination
497
+ currentClass: 'current', // string, Class name for current class
498
+ fadeSpeed: 1000, // number, Set the speed of the fading animation in milliseconds
499
+ fadeEasing: '', // string, must load jQuery's easing plugin before http://gsgd.co.uk/sandbox/jquery/easing/
500
+ slideSpeed: 1000, // number, Set the speed of the sliding animation in milliseconds
501
+ slideEasing: '', // string, must load jQuery's easing plugin before http://gsgd.co.uk/sandbox/jquery/easing/
502
+ start: 1, // number, Set the speed of the sliding animation in milliseconds
503
+ effect: 'slide', // string, '[next/prev], [pagination]', e.g. 'slide, fade' or simply 'fade' for both
504
+ crossfade: false, // boolean, Crossfade images in a image based slideshow
505
+ randomize: false, // boolean, Set to true to randomize slides
506
+ play: 0, // number, Autoplay slideshow, a positive number will set to true and be the time between slide animation in milliseconds
507
+ pause: 0, // number, Pause slideshow on click of next/prev or pagination. A positive number will set to true and be the time of pause in milliseconds
508
+ hoverPause: false, // boolean, Set to true and hovering over slideshow will pause it
509
+ autoHeight: false, // boolean, Set to true to auto adjust height
510
+ autoHeightSpeed: 350, // number, Set auto height animation time in milliseconds
511
+ bigTarget: false, // boolean, Set to true and the whole slide will link to next slide on click
512
+ animationStart: function(){}, // Function called at the start of animation
513
+ animationComplete: function(){}, // Function called at the completion of animation
514
+ slidesLoaded: function() {} // Function is called when slides is fully loaded
515
+ };
516
+
517
+ // Randomize slide order on load
518
+ $.fn.randomize = function(callback) {
519
+ function randomizeOrder() {
520
+ return(Math.round(Math.random())-0.5);
521
+ }
522
+ return($(this).each(function() {
523
+ var $this = $(this);
524
+ var $children = $this.children();
525
+ var childCount = $children.length;
526
+ if (childCount > 1) {
527
+ $children.hide();
528
+ var indices = [];
529
+ for (i=0;i<childCount;i++) {
530
+ indices[indices.length] = i;
531
+ }
532
+ indices = indices.sort(randomizeOrder);
533
+ $.each(indices,function(j,k) {
534
+ var $child = $children.eq(k);
535
+ var $clone = $child.clone(true);
536
+ $clone.show().appendTo($this);
537
+ if (callback !== undefined) {
538
+ callback($child, $clone);
539
+ }
540
+ $child.remove();
541
+ });
542
+ }
543
+ }));
544
+ };
545
+ })(jQuery);
js/qaz/qbanner/jqueryNoconfig.js ADDED
@@ -0,0 +1 @@
 
1
+ $j = jQuery.noConflict();
media/qaz/qbanner/1/6/1694554_11311.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-2.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-21.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-21_1.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-21_2.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-2_1.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-2_2.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-2_3.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-3.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-31.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-31_1.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-3_1.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-3_2.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-3_3.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-3_4.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-3_5.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-3_6.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-4.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-4_1.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-4_2.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-4_3.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-4_4.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-4_5.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner-4_6.jpg ADDED
Binary file
media/qaz/qbanner/b/a/banner.jpg ADDED
Binary file
media/qaz/qbanner/b/o/bottom_banner.jpg ADDED
Binary file
media/qaz/qbanner/b/o/bottom_banner2.jpg ADDED
Binary file
media/qaz/qbanner/b/o/bottom_banner2_1.jpg ADDED
Binary file
media/qaz/qbanner/t/o/top_banner.jpg ADDED
Binary file
media/qaz/qbanner/t/o/top_banner_1.jpg ADDED
Binary file
package.xml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>QAZ_Qbanner</name>
4
+ <version>1.9.1</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Introduction and Features - This extension adds ability for online shops to display banners as a slider of images . - Qbanner can be add more banner image. - Qbanner can be more config ex : time to change image , effect , show pagination , position , auto slide ,....and set width + height of banner (!) - Support in all browser. - For show banner in position (After Header) U must go to design/frontend/default/default/template/page/html/header.phtml and paste at the end of file :&#xD;
10
+ (Or edit theme of you is not use default theme) More extensions FREE : http://extensions.qazware.com/</summary>
11
+ <description>Introduction and Features - This extension adds ability for online shops to display banners as a slider of images . - Qbanner can be add more banner image. - Qbanner can be more config ex : time to change image , effect , show pagination , position , auto slide ,....and set width + height of banner (!) - Support in all browser. - For show banner in position (After Header) U must go to design/frontend/default/default/template/page/html/header.phtml and paste at the end of file :&#xD;
12
+ (Or edit theme of you is not use default theme) More extensions FREE : http://extensions.qazware.com/</description>
13
+ <notes>Check all cross-browser and config with another extension</notes>
14
+ <authors><author><name>Kevin Black</name><user>kevinblack</user><email>kevin.qazware@gmail.com</email></author></authors>
15
+ <date>2011-12-20</date>
16
+ <time>08:29:34</time>
17
+ <contents><target name="magecommunity"><dir name="Qaz"><dir name="Qbanner"><dir name="Block"><dir name="Adminhtml"><dir name="Qbanner"><dir name="Edit"><file name="Form.php" hash="aee2407e2a9f5940e9c08170b6a43abe"/><dir name="Tab"><file name="Category.php" hash="61abdaddee7d7f504332b89967d28437"/><file name="Form.php" hash="03482f82f257505cb684a239c32a3086"/><file name="Image.php" hash="c48ea83ae0ebce092d93a6b3dbbaf139"/><file name="Pages.php" hash="594a0ecffb7147893deb39d7f2f03493"/></dir><file name="Tabs.php" hash="769ebfc7c86192e02d189478f997eb40"/></dir><file name="Edit.php" hash="4970a7507a9b156eb5ad3549031ef791"/><file name="Grid.php" hash="4342ef02239e11f0e91c427169979d42"/></dir><file name="Qbanner.php" hash="cdc72f40377017f48bc7f83a4d879620"/></dir><file name="Qbanner.php" hash="5c6616111c1c04d821cf3f292c1987cf"/></dir><dir name="Helper"><file name="Data.php" hash="12358d50493059aa9171f2fe4fc340c0"/></dir><dir name="Model"><file name="Config.php" hash="77b86ba70a8709518a1833cce313f8ce"/><dir name="Mysql4"><dir name="Qbanner"><file name="Collection.php" hash="713a2a33f4f015b30cf6f013d5fc30ed"/></dir><file name="Qbanner.php" hash="05a976e268ba40e1c38662d6bb5f6458"/></dir><dir name="Option"><file name="Pages.php" hash="221f9a629ea486d52b219b47e9d51583"/><file name="Position.php" hash="449baccb2053509ba0726befe7a4a1cf"/><file name="Status.php" hash="12d8c41655369a00094b9276e211582c"/></dir><file name="Qbanner.php" hash="062251b29ee6e6b9eca5fbb5217574f5"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="QbannerController.php" hash="aed486cfedde5f7022e5ad85b178d337"/></dir><file name="IndexController.php" hash="d3c15879f3158b505d412ae90aeb5466"/></dir><dir name="etc"><file name="config.xml" hash="f6dba44b52968680c146359bf9a0bad6"/><file name="system.xml" hash="da732ecff7683edca974b996f74a5027"/></dir><dir name="sql"><dir name="qbanner_setup"><file name="mysql4-install-0.1.0.php" hash="6a7322f7c3b8978f4de877c7a3401480"/><file name="mysql4-upgrade-1.7.1-1.8.1.php" hash="85249553045169fee124e843298d62a6"/></dir></dir></dir><dir name="All"><dir name="Helper"><file name="Data.php" hash="a531698b0373f15ed017a921e0bfbe4b"/></dir><dir name="etc"><file name="config.xml" hash="6c6f6676c558ccb25c43a2c016f2d09d"/><file name="system.xml" hash="29a1180abd3b6a53b024f2bde75207bc"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Qaz_Qbanner.xml" hash="81840a50f8ba118b9f652a4c68e6608f"/><file name="Qaz_All.xml" hash="abff101149db6be3dd3340323e9fad85"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="qbanner.xml" hash="c1d49b73932f0b5a5cad7000f0940e55"/></dir><dir name="template"><dir name="qaz"><dir name="qbanner"><file name="qbanner.after.header.phtml" hash="29d8d87a6bd783bb8fefc2d66410fc77"/><file name="qbanner.content.top.phtml" hash="a75163bd5663cc3d8f97be9619e6bcff"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="qbanner.xml" hash="1cfd7b9362bf8e99dc47b450a920a25c"/></dir><dir name="template"><dir name="qaz"><dir name="qbanner"><dir name="edit"><dir name="tab"><file name="category.phtml" hash="46a89238104e417024606afb156c6af8"/><file name="image.phtml" hash="041ff63dcce58cd68e439b24b96062dc"/></dir></dir></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="default"><dir name="default"><dir name="qaz"><dir name="qbanner"><dir name="css"><file name="global.css" hash="8c6811cf4bca210b0a3ad3cd88344c01"/></dir><dir name="images"><file name="arrow-bg.png" hash="dd02d2e167a7ad76df8f10bf1147de70"/><file name="arrow-bg2.gif" hash="630ba4ce19ec51a1f984d3d8bd140479"/><file name="arrow-l.png" hash="9a4f1aadda0df80f8db6ebc7d0c938d7"/><file name="arrow-next.png" hash="15d6fe778c4df2494a7af4e098aad4ff"/><file name="arrow-prev.png" hash="bc273e26e577babc8044b0a8a86358d0"/><file name="arrow-r.png" hash="94af413ec776ca1b09b9fff4f81cc618"/><file name="b_next.png" hash="d72dde0609aded61a24fa18cdca4bf7f"/><file name="b_prev.png" hash="86e333b7023d493e8024ccc6b32cd690"/><file name="background.png" hash="96519dab3e5a2a09075632cca4a98141"/><file name="example-frame.png" hash="a6fe93af35f205873d1c68e257f0ffe1"/><file name="loading.gif" hash="58c35cf5e9fcbe3914c839c6665794bd"/><file name="new-ribbon.png" hash="ddf312ad3449c87f2c98f11a56a3fcc3"/><file name="pagination.png" hash="c1e5cc6dfe80b935b657576c8b93f5f5"/><file name="slide-1.jpg" hash="60f4feb9d141c63d4b120831b7deab11"/><file name="slide-2.jpg" hash="772208e05945f5e83275b4869875f9ae"/><file name="slide-3.jpg" hash="5aa6d109f0131737ca0e7c9fbf3b9bae"/><file name="slide-4.jpg" hash="3eb11a293897724ada695688486f38e9"/><file name="slide-5.jpg" hash="8692bb9ad56518c50625d53cb87f4795"/><file name="slide-6.jpg" hash="7eb3c3d3bd818ec1d6726cc33881d661"/><file name="slide-7.jpg" hash="fcf0c1c41e4880f58d735bde18c986b5"/><file name="slide.jpg" hash="0a421d74f61d7cb8e01d203b7b3825fb"/></dir></dir></dir></dir></dir></dir></target><target name="magemedia"><dir name="qaz"><dir name="qbanner"><dir name="1"><dir name="6"><file name="1694554_11311.jpg" hash="185393ad2608267414c07df2bf7773ab"/></dir></dir><dir name="b"><dir name="a"><file name="banner-2.jpg" hash="6febbe94012249dcc75365c1021092a3"/><file name="banner-21.jpg" hash="6febbe94012249dcc75365c1021092a3"/><file name="banner-21_1.jpg" hash="6febbe94012249dcc75365c1021092a3"/><file name="banner-21_2.jpg" hash="6febbe94012249dcc75365c1021092a3"/><file name="banner-2_1.jpg" hash="6febbe94012249dcc75365c1021092a3"/><file name="banner-2_2.jpg" hash="6febbe94012249dcc75365c1021092a3"/><file name="banner-2_3.jpg" hash="6febbe94012249dcc75365c1021092a3"/><file name="banner-3.jpg" hash="bfc028c43f28e9f5b4b7f31ab08cb2c8"/><file name="banner-31.jpg" hash="bfc028c43f28e9f5b4b7f31ab08cb2c8"/><file name="banner-31_1.jpg" hash="bfc028c43f28e9f5b4b7f31ab08cb2c8"/><file name="banner-3_1.jpg" hash="bfc028c43f28e9f5b4b7f31ab08cb2c8"/><file name="banner-3_2.jpg" hash="bfc028c43f28e9f5b4b7f31ab08cb2c8"/><file name="banner-3_3.jpg" hash="bfc028c43f28e9f5b4b7f31ab08cb2c8"/><file name="banner-3_4.jpg" hash="bfc028c43f28e9f5b4b7f31ab08cb2c8"/><file name="banner-3_5.jpg" hash="bfc028c43f28e9f5b4b7f31ab08cb2c8"/><file name="banner-3_6.jpg" hash="bfc028c43f28e9f5b4b7f31ab08cb2c8"/><file name="banner-4.jpg" hash="f5dfb9ddfbe2c50dea7e82ff27dbe038"/><file name="banner-4_1.jpg" hash="f5dfb9ddfbe2c50dea7e82ff27dbe038"/><file name="banner-4_2.jpg" hash="f5dfb9ddfbe2c50dea7e82ff27dbe038"/><file name="banner-4_3.jpg" hash="f5dfb9ddfbe2c50dea7e82ff27dbe038"/><file name="banner-4_4.jpg" hash="f5dfb9ddfbe2c50dea7e82ff27dbe038"/><file name="banner-4_5.jpg" hash="f5dfb9ddfbe2c50dea7e82ff27dbe038"/><file name="banner-4_6.jpg" hash="f5dfb9ddfbe2c50dea7e82ff27dbe038"/><file name="banner.jpg" hash="4a3fa9332b011c561ac6067fc9303a53"/></dir><dir name="o"><file name="bottom_banner.jpg" hash="b4f1c5ed987763bc87b9c1c68cc4c9c5"/><file name="bottom_banner2.jpg" hash="e40c9024be93cfc9ffee642c77cb7879"/><file name="bottom_banner2_1.jpg" hash="e40c9024be93cfc9ffee642c77cb7879"/></dir></dir><dir name="t"><dir name="o"><file name="top_banner.jpg" hash="037cd1d0514b2ffa0885c21750df10a4"/><file name="top_banner_1.jpg" hash="037cd1d0514b2ffa0885c21750df10a4"/></dir></dir></dir></dir></target><target name="mage"><dir name="js"><dir name="qaz"><dir name="qbanner"><file name="jquery.1.5.1.js" hash="38251a5074065e46fea974a460ea7a00"/><file name="jquery.slides.min.js" hash="a599effbf3331c3616e8b393ab7d10d6"/><file name="jqueryNoconfig.js" hash="8dd633a4b123d345a666b655d88d0b17"/></dir></dir></dir></target></contents>
18
+ <compatible/>
19
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
20
+ </package>
skin/frontend/default/default/qaz/qbanner/css/global.css ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ .qbanner {
3
+ margin:0 auto;
4
+ padding: 2px 0;
5
+ z-index:0;
6
+ }
7
+ .clear{clear: both;}
8
+
9
+ #ribbon {
10
+ position:absolute;
11
+ top:-3px;
12
+ left:-15px;
13
+ z-index:500;
14
+ }
15
+ /*
16
+ Slideshow
17
+ */
18
+ .qbanner-slide{
19
+ position:relative;
20
+ z-index:100;
21
+ }
22
+
23
+ /*
24
+ Slides container
25
+ Important:
26
+ Set the width of your slides container
27
+ Set to display none, prevents content flash
28
+ */
29
+
30
+ .slides_container {
31
+ overflow:hidden;
32
+ position:relative;
33
+ display:none;
34
+ }
35
+
36
+ /*
37
+ Each slide
38
+ Important:
39
+ Set the width of your slides
40
+ If height not specified height will be set by the slide content
41
+ Set to display block
42
+ */
43
+
44
+ .slides_container div.slide {
45
+ display:block;
46
+ }
47
+
48
+ /*
49
+ Next/prev buttons
50
+ */
51
+ .qbanner-slide .next,.qbanner-slide .prev {
52
+ position:absolute;
53
+ /* top:107px;*/
54
+ /* left:-39px;*/
55
+ /* width:24px;*/
56
+ /* height:42px;*/
57
+ /* display:none;*/
58
+ z-index:101;
59
+ /* display: none;*/
60
+ }
61
+
62
+ /*
63
+ Pagination
64
+ */
65
+
66
+ .pagination {
67
+ margin:0 auto;
68
+ top:2px;
69
+ width:100px;
70
+ z-index: 999;
71
+ position: absolute;
72
+ }
73
+
74
+ .pagination li {
75
+ float:left;
76
+ margin:0 1px;
77
+ list-style:none;
78
+ }
79
+
80
+ .pagination li a {
81
+ display:block;
82
+ width:12px;
83
+ height:0;
84
+ padding-top:12px;
85
+ background-image:url(../images/pagination.png);
86
+ background-position:0 0;
87
+ float:left;
88
+ overflow:hidden;
89
+ }
90
+
91
+ .pagination li.current a {
92
+ background-position:0 -12px;
93
+ }
94
+
95
+ /*
96
+ Caption
97
+ */
98
+
99
+ .caption {
100
+ z-index:500;
101
+ position:absolute;
102
+ bottom:-35px;
103
+ left:0;
104
+ height:35px;
105
+ padding:5px 20px 0 20px;
106
+ background:#000;
107
+ background:rgba(0,0,0,.5);
108
+ /* width:950px;*/
109
+ font-size:1.3em;
110
+ line-height:1.33;
111
+ color:#fff;
112
+ border-top:1px solid #000;
113
+ text-shadow:none;
114
+ text-align: left;
115
+ }
skin/frontend/default/default/qaz/qbanner/images/arrow-bg.png ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/arrow-bg2.gif ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/arrow-l.png ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/arrow-next.png ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/arrow-prev.png ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/arrow-r.png ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/b_next.png ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/b_prev.png ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/background.png ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/example-frame.png ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/loading.gif ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/new-ribbon.png ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/pagination.png ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/slide-1.jpg ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/slide-2.jpg ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/slide-3.jpg ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/slide-4.jpg ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/slide-5.jpg ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/slide-6.jpg ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/slide-7.jpg ADDED
Binary file
skin/frontend/default/default/qaz/qbanner/images/slide.jpg ADDED
Binary file