magento_easy_tabs - Version 2.3.5

Version Notes

Magento Easy Tabs Community Module

Download this release

Release Info

Developer TemplatesMaster
Extension magento_easy_tabs
Version 2.3.5
Comparing to
See all releases


Code changes from version 2.3.0 to 2.3.5

Files changed (52) hide show
  1. app/code/community/TM/Core/Block/Cms/Block.php +19 -0
  2. app/code/community/TM/Core/Helper/Data.php +6 -2
  3. app/code/community/TM/Core/Helper/Debug.php +29 -0
  4. app/code/community/TM/Core/Model/Module.php +12 -6
  5. app/code/community/TM/Core/Model/Module/Upgrade.php +45 -0
  6. app/code/community/TM/Core/Model/Observer.php +49 -0
  7. app/code/community/TM/Core/Model/Resource/Module/RemoteCollection.php +32 -0
  8. app/code/community/TM/Core/Model/Timer.php +65 -0
  9. app/code/community/TM/Core/controllers/Adminhtml/Tmcore/ModuleController.php +27 -4
  10. app/code/community/TM/Core/controllers/Adminhtml/Tmcore/SupportController.php +46 -18
  11. app/code/community/TM/Core/etc/adminhtml.xml +4 -3
  12. app/code/community/TM/Core/etc/config.xml +47 -56
  13. app/code/community/TM/Core/etc/system.xml +27 -0
  14. app/code/community/TM/EasyTabs/Block/Adminhtml/Edit/Tab/Main.php +1 -1
  15. app/code/community/TM/EasyTabs/Block/Adminhtml/List/Grid.php +2 -2
  16. app/code/community/TM/EasyTabs/Block/Tab/Cms.php +1 -1
  17. app/code/community/TM/EasyTabs/Block/Tab/SameAttrValue.php +199 -0
  18. app/code/community/TM/EasyTabs/Block/Tab/Template.php +15 -1
  19. app/code/community/TM/EasyTabs/Block/Tabs.php +111 -11
  20. app/code/community/TM/EasyTabs/Model/Config.php +8 -1
  21. app/code/community/TM/EasyTabs/Model/Config/Status.php +3 -3
  22. app/code/community/TM/EasyTabs/Model/Config/Tabs.php +29 -0
  23. app/code/community/TM/EasyTabs/controllers/Adminhtml/Easytabs/IndexController.php +5 -0
  24. app/code/community/TM/EasyTabs/etc/config.xml +16 -1
  25. app/code/community/TM/EasyTabs/etc/easytabs.xml +73 -0
  26. app/code/community/TM/EasyTabs/etc/system.xml +23 -2
  27. app/code/community/TM/EasyTabs/etc/widget.xml +10 -188
  28. app/design/adminhtml/default/default/layout/tm/easytabs.xml +4 -0
  29. app/design/adminhtml/default/default/layout/tmcore.xml +2 -1
  30. app/design/adminhtml/default/default/template/tmcore/ticket/edit/form/element/theard/content.phtml +9 -4
  31. app/design/frontend/base/default/layout/tm/core.xml +13 -0
  32. app/design/frontend/base/default/template/tm/easytabs/tab/catalog/product/related.phtml +10 -5
  33. app/design/frontend/base/default/template/tm/easytabs/tab/catalog/product/sameattrvalue.phtml +49 -0
  34. app/design/frontend/base/default/template/tm/easytabs/tab/review/product/view/list.phtml +4 -60
  35. app/design/frontend/base/default/template/tm/easytabs/tabs.phtml +14 -5
  36. app/locale/en_US/TM_EasyTabs.csv +3 -3
  37. app/locale/es_ES/TM_Core.csv +48 -0
  38. app/locale/es_ES/TM_EasyTabs.csv +11 -0
  39. app/locale/fr_FR/TM_Core.csv +48 -0
  40. app/locale/fr_FR/TM_EasyTabs.csv +11 -0
  41. app/locale/it_IT/TM_Core.csv +48 -0
  42. app/locale/it_IT/TM_EasyTabs.csv +11 -0
  43. app/locale/nl_NL/TM_Core.csv +48 -0
  44. app/locale/nl_NL/TM_EasyTabs.csv +11 -0
  45. app/locale/pt_PT/TM_Core.csv +48 -0
  46. app/locale/pt_PT/TM_EasyTabs.csv +11 -0
  47. js/lib/jquery/jquery-1.10.2.min.js +6 -0
  48. js/lib/jquery/noconflict.js +27 -0
  49. js/tm/adminhtml/core/window.js +1 -1
  50. package.xml +5 -5
  51. skin/frontend/base/default/css/tm/easytabs.css +37 -1
  52. skin/frontend/base/default/js/tm/easytabs.js +50 -10
app/code/community/TM/Core/Block/Cms/Block.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Rewrite Mage_Cms_Block_Block class to prevent CMS Static blocks from caching.
4
+ * TM Themes and Extensions use static blocks to output dynamic data.
5
+ */
6
+ class TM_Core_Block_Cms_Block extends Mage_Cms_Block_Block
7
+ {
8
+ /**
9
+ * No cache for CMS blocks
10
+ *
11
+ * @return null
12
+ */
13
+ protected function _construct()
14
+ {
15
+ parent::_construct();
16
+ $this->unsCacheTags();
17
+ $this->unsCacheLifetime();
18
+ }
19
+ }
app/code/community/TM/Core/Helper/Data.php CHANGED
@@ -2,5 +2,9 @@
2
 
3
  class TM_Core_Helper_Data extends Mage_Core_Helper_Abstract
4
  {
5
-
6
- }
 
 
 
 
2
 
3
  class TM_Core_Helper_Data extends Mage_Core_Helper_Abstract
4
  {
5
+ public function isDesignPackageEquals($packageName)
6
+ {
7
+ $package = Mage::getSingleton('core/design_package');
8
+ return $package->getPackageName() === $packageName;
9
+ }
10
+ }
app/code/community/TM/Core/Helper/Debug.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class TM_Core_Helper_Debug extends Mage_Core_Helper_Abstract
4
+ {
5
+ const POPUP_NAME = 'tmcore_debug_popup';
6
+
7
+ public function preparePopup($text, $title = 'Debug Information')
8
+ {
9
+ $helper = Mage::helper('core');
10
+
11
+ Mage::app()->getLayout()
12
+ ->createBlock('core/text')
13
+ ->setNameInLayout(self::POPUP_NAME)
14
+ ->setText(
15
+ '<div id="'.self::POPUP_NAME.'" style="display:none">'
16
+ . '<pre>'
17
+ . $helper->escapeHtml($text)
18
+ . '</pre>'
19
+ . '</div>'
20
+ );
21
+
22
+ $title = $helper->escapeHtml($title);
23
+ return sprintf(
24
+ "<a href='#' onclick=\"%s\">%s</a>",
25
+ "tmcoreWindow.update($('".self::POPUP_NAME."').innerHTML, '{$title}').show()",
26
+ Mage::helper('tmcore')->__('Show response')
27
+ );
28
+ }
29
+ }
app/code/community/TM/Core/Model/Module.php CHANGED
@@ -102,7 +102,7 @@ class TM_Core_Model_Module extends Mage_Core_Model_Abstract
102
  */
103
  public function isValidationRequired()
104
  {
105
- return !$this->getRemote() || $this->getRemote()->getIdentityKeyLink();
106
  }
107
 
108
  /**
@@ -138,12 +138,15 @@ class TM_Core_Model_Module extends Mage_Core_Model_Abstract
138
  $adapter = new Zend_Http_Client_Adapter_Curl();
139
  $client->setAdapter($adapter);
140
  $client->setUri($this->_getValidateUri($site));
141
- $client->setConfig(array('maxredirects'=>0, 'timeout'=>30));
142
  $client->setParameterGet('key', $secret);
143
  $client->setParameterGet('suffix', $suffix);
144
  $module = $this->getTmPurchaseCode() ? $this->getTmPurchaseCode() : $this->getCode();
145
  $client->setParameterGet('module', $module);
146
  $client->setParameterGet('module_code', $this->getCode());
 
 
 
147
  $client->setParameterGet('domain', Mage::app()->getRequest()->getHttpHost());
148
  $response = $client->request();
149
  $responseBody = $response->getBody();
@@ -173,10 +176,13 @@ class TM_Core_Model_Module extends Mage_Core_Model_Abstract
173
  throw new Exception('Decoding failed');
174
  }
175
  } catch (Exception $e) {
176
- $result = array('error' => array(
177
- 'Sorry, try again in five minutes. Validation response parsing error: %s',
178
- $e->getMessage()
179
- ));
 
 
 
180
  }
181
  return $result;
182
  }
102
  */
103
  public function isValidationRequired()
104
  {
105
+ return $this->getRemote() && $this->getRemote()->getIdentityKeyLink();
106
  }
107
 
108
  /**
138
  $adapter = new Zend_Http_Client_Adapter_Curl();
139
  $client->setAdapter($adapter);
140
  $client->setUri($this->_getValidateUri($site));
141
+ $client->setConfig(array('maxredirects'=>5, 'timeout'=>30));
142
  $client->setParameterGet('key', $secret);
143
  $client->setParameterGet('suffix', $suffix);
144
  $module = $this->getTmPurchaseCode() ? $this->getTmPurchaseCode() : $this->getCode();
145
  $client->setParameterGet('module', $module);
146
  $client->setParameterGet('module_code', $this->getCode());
147
+ if ($this->getConfigSection()) {
148
+ $client->setParameterGet('config_section', $this->getConfigSection());
149
+ }
150
  $client->setParameterGet('domain', Mage::app()->getRequest()->getHttpHost());
151
  $response = $client->request();
152
  $responseBody = $response->getBody();
176
  throw new Exception('Decoding failed');
177
  }
178
  } catch (Exception $e) {
179
+ $result = array(
180
+ 'error' => array(
181
+ 'Sorry, try again in five minutes. Validation response parsing error: %s',
182
+ $e->getMessage()
183
+ ),
184
+ 'response' => $response
185
+ );
186
  }
187
  return $result;
188
  }
app/code/community/TM/Core/Model/Module/Upgrade.php CHANGED
@@ -191,6 +191,9 @@ abstract class TM_Core_Model_Module_Upgrade extends Varien_Object
191
  $website = null;
192
  $store = null;
193
  } else {
 
 
 
194
  $website = $this->_getStore($storeId)->getWebsite()->getCode();
195
  $store = $this->_getStore($storeId)->getCode();
196
  }
@@ -512,6 +515,48 @@ abstract class TM_Core_Model_Module_Upgrade extends Varien_Object
512
  }
513
  }
514
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
515
  /**
516
  * Backup and create new tabs
517
  * Alias is used as idendifier
191
  $website = null;
192
  $store = null;
193
  } else {
194
+ if (!$this->_getStore($storeId)->getId()) {
195
+ continue;
196
+ }
197
  $website = $this->_getStore($storeId)->getWebsite()->getCode();
198
  $store = $this->_getStore($storeId)->getCode();
199
  }
515
  }
516
  }
517
 
518
+ /**
519
+ * Unset easytabs from storeIds
520
+ *
521
+ * @param string $type
522
+ * @param array $storeIdsToRemove
523
+ * @return void
524
+ */
525
+ public function unsetEasytab($type, $storeIdsToRemove)
526
+ {
527
+ $isSingleStore = Mage::app()->isSingleStoreMode();
528
+
529
+ $storeIdsToRemove[] = 0;
530
+ $storesToKeep = Mage::getResourceModel('core/store_collection')->getAllIds();
531
+ $storesToKeep = array_diff($storesToKeep, $storeIdsToRemove);
532
+
533
+ $relatedTabs = Mage::getModel('easytabs/config_collection');
534
+ $relatedTabs->addFieldToFilter('block', $type);
535
+ foreach ($relatedTabs as $relatedTab) {
536
+ if ($isSingleStore) {
537
+ $relatedTab->setStatus(0);
538
+ } else {
539
+ $stores = $relatedTab->getStoreId();
540
+ $stores = array_diff($stores, array(0));
541
+ if (!$stores) { // tab was assigned to all stores
542
+ $relatedTab->setStoreId($storesToKeep);
543
+ } else {
544
+ if (!array_diff($stores, $storesToKeep)) {
545
+ // tab is not assigned to storesToRemove
546
+ continue;
547
+ }
548
+ $keep = array_intersect($stores, $storesToKeep);
549
+ if ($keep) {
550
+ $relatedTab->setStoreId($keep);
551
+ } else {
552
+ $relatedTab->setStatus(0);
553
+ }
554
+ }
555
+ }
556
+ $relatedTab->save();
557
+ }
558
+ }
559
+
560
  /**
561
  * Backup and create new tabs
562
  * Alias is used as idendifier
app/code/community/TM/Core/Model/Observer.php CHANGED
@@ -10,8 +10,57 @@ class TM_Core_Model_Observer
10
  public function preDispatch(Varien_Event_Observer $observer)
11
  {
12
  if (Mage::getSingleton('admin/session')->isLoggedIn()) {
 
 
 
 
13
  $feedModel = Mage::getModel('tmcore/notification_feed');
14
  $feedModel->checkUpdate();
15
  }
16
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  }
10
  public function preDispatch(Varien_Event_Observer $observer)
11
  {
12
  if (Mage::getSingleton('admin/session')->isLoggedIn()) {
13
+ if (!Mage::getStoreConfig('tmcore/notification/enabled')) {
14
+ return;
15
+ }
16
+
17
  $feedModel = Mage::getModel('tmcore/notification_feed');
18
  $feedModel->checkUpdate();
19
  }
20
  }
21
+
22
+ /**
23
+ * Add layout update files just before local.xml
24
+ * Conditions are supported too
25
+ */
26
+ public function addLayoutUpdate($observer)
27
+ {
28
+ // $area = Mage::getSingleton('core/design_package')->getArea();
29
+ $area = Mage_Core_Model_App_Area::AREA_FRONTEND;
30
+ $updates = $observer->getUpdates();
31
+ $extraNodes = Mage::app()->getConfig()->getNode($area.'/tm_layout/updates');
32
+ if (!$extraNodes) {
33
+ return;
34
+ }
35
+ foreach ($extraNodes->children() as $node) {
36
+ if ($node->getAttribute('condition')) {
37
+ $parts = explode('/', $node->getAttribute('condition'));
38
+ $helper = array_shift($parts);
39
+ $method = array_shift($parts);
40
+ if (count($parts)) {
41
+ $helper .= '/' . $method;
42
+ $method = array_shift($parts);
43
+ }
44
+ $helper = Mage::helper($helper);
45
+ if ($args = $node->getAttribute('args')) {
46
+ $args = explode(',', $args);
47
+ $enabled = call_user_func_array(array($helper, $method), $args);
48
+ } else {
49
+ $enabled = $helper->{$method}();
50
+ }
51
+ if (!$enabled) {
52
+ continue;
53
+ }
54
+ }
55
+ $updates->appendChild($node);
56
+ }
57
+ }
58
+
59
+ public function onBeforeRenderLayout()
60
+ {
61
+ $layout = Mage::app()->getLayout();
62
+ if ($debug = $layout->getBlock(TM_Core_Helper_Debug::POPUP_NAME)) {
63
+ $layout->getBlock('content')->append($debug);
64
+ }
65
+ }
66
  }
app/code/community/TM/Core/Model/Resource/Module/RemoteCollection.php CHANGED
@@ -67,6 +67,14 @@ class TM_Core_Model_Resource_Module_RemoteCollection extends Varien_Data_Collect
67
  'download_link' => 'https://argentotheme.com/downloadable/customer/products/',
68
  'identity_key_link' => 'https://argentotheme.com/license/customer/identity/'
69
  ),
 
 
 
 
 
 
 
 
70
  'TM_ArgentoMage2Cloud' => array(
71
  'code' => 'TM_ArgentoMage2Cloud',
72
  'version' => '',
@@ -90,6 +98,30 @@ class TM_Core_Model_Resource_Module_RemoteCollection extends Varien_Data_Collect
90
  'link' => 'http://argentotheme.com',
91
  'download_link' => 'https://argentotheme.com/downloadable/customer/products/',
92
  'identity_key_link' => 'https://argentotheme.com/license/customer/identity/'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  )
94
  );
95
  }
67
  'download_link' => 'https://argentotheme.com/downloadable/customer/products/',
68
  'identity_key_link' => 'https://argentotheme.com/license/customer/identity/'
69
  ),
70
+ 'TM_ArgentoFlat' => array(
71
+ 'code' => 'TM_ArgentoFlat',
72
+ 'version' => '',
73
+ 'changelog' => "",
74
+ 'link' => 'http://argentotheme.com',
75
+ 'download_link' => 'https://argentotheme.com/downloadable/customer/products/',
76
+ 'identity_key_link' => 'https://argentotheme.com/license/customer/identity/'
77
+ ),
78
  'TM_ArgentoMage2Cloud' => array(
79
  'code' => 'TM_ArgentoMage2Cloud',
80
  'version' => '',
98
  'link' => 'http://argentotheme.com',
99
  'download_link' => 'https://argentotheme.com/downloadable/customer/products/',
100
  'identity_key_link' => 'https://argentotheme.com/license/customer/identity/'
101
+ ),
102
+ 'TM_ArgentoPure2' => array(
103
+ 'code' => 'TM_ArgentoPure2',
104
+ 'version' => '',
105
+ 'changelog' => "",
106
+ 'link' => 'http://argentotheme.com',
107
+ 'download_link' => 'https://argentotheme.com/downloadable/customer/products/',
108
+ 'identity_key_link' => 'https://argentotheme.com/license/customer/identity/'
109
+ ),
110
+ 'TM_ArgentoTM' => array(
111
+ 'code' => 'TM_ArgentoTM',
112
+ 'version' => '',
113
+ 'changelog' => "",
114
+ 'link' => 'http://argentotheme.com',
115
+ 'download_link' => '',
116
+ 'identity_key_link' => ''
117
+ ),
118
+ 'Swissup_Subscription' => array(
119
+ 'code' => 'Swissup_Subscription',
120
+ 'version' => '',
121
+ 'changelog' => "",
122
+ 'link' => 'http://swissuplabs.com',
123
+ 'download_link' => 'https://swissuplabs.com/subscription/customer/products/',
124
+ 'identity_key_link' => 'https://swissuplabs.com/license/customer/identity/'
125
  )
126
  );
127
  }
app/code/community/TM/Core/Model/Timer.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Usage example:
5
+ *
6
+ * 1. $this->_timer = Mage::getModel('tmcore/timer', array('name' => 'tm_crawler'));
7
+ *
8
+ * 2. $this->_timer->startOrResume();
9
+ *
10
+ * 3. $limit = $this->_timer->getTimeLimit() / 3;
11
+ * if ($this->_timer->getElapsedSecs() >= $limit) {
12
+ * return;
13
+ * }
14
+ */
15
+ class TM_Core_Model_Timer extends Varien_Object
16
+ {
17
+ protected $_timers = array();
18
+
19
+ public function start($reset = false)
20
+ {
21
+ if ($reset) {
22
+ $this->_timers[$name]['start'] = microtime(true);
23
+ } else {
24
+ $this->startOrResume();
25
+ }
26
+ }
27
+
28
+ public function stop()
29
+ {
30
+ $this->_timers[$this->getName()]['stop'] = microtime(true);
31
+ }
32
+
33
+ public function startOrResume()
34
+ {
35
+ $name = $this->getName();
36
+ if (isset($this->_timers[$name])) {
37
+ return;
38
+ }
39
+ $this->_timers[$name]['start'] = microtime(true);
40
+ }
41
+
42
+ public function getElapsedSecs()
43
+ {
44
+ $now = microtime(true);
45
+ if (isset($this->_timers[$this->getName()]['stop'])) {
46
+ return $this->_timers[$this->getName()]['stop']
47
+ - $this->_timers[$this->getName()]['start'];
48
+ }
49
+ return $now - $this->_timers[$this->getName()]['start'];
50
+ }
51
+
52
+ /**
53
+ * Get max execution time
54
+ *
55
+ * @return int
56
+ */
57
+ public function getTimeLimit()
58
+ {
59
+ $time = @ini_get('max_execution_time');
60
+ if (empty($time)) {
61
+ $time = 30;
62
+ }
63
+ return $time;
64
+ }
65
+ }
app/code/community/TM/Core/controllers/Adminhtml/Tmcore/ModuleController.php CHANGED
@@ -40,6 +40,16 @@ class TM_Core_Adminhtml_Tmcore_ModuleController extends Mage_Adminhtml_Controlle
40
  $module->addData($data);
41
  }
42
 
 
 
 
 
 
 
 
 
 
 
43
  Mage::register('tmcore_module', $module);
44
 
45
  $this->_initAction()
@@ -65,10 +75,18 @@ class TM_Core_Adminhtml_Tmcore_ModuleController extends Mage_Adminhtml_Controlle
65
  $result = $module->validateLicense();
66
  if (is_array($result) && isset($result['error'])) {
67
  Mage::getSingleton('adminhtml/session')->setFormData($this->getRequest()->getPost());
68
- Mage::getSingleton('adminhtml/session')->addError(
69
- // try to translate remote response
70
- call_user_func_array(array(Mage::helper('tmcore'), '__'), $result['error'])
71
- );
 
 
 
 
 
 
 
 
72
  return $this->_redirect('*/*/manage', array('id' => $module->getId()));
73
  }
74
 
@@ -97,4 +115,9 @@ class TM_Core_Adminhtml_Tmcore_ModuleController extends Mage_Adminhtml_Controlle
97
  Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('tmcore')->__("The module has been saved"));
98
  $this->_redirect('*/*/');
99
  }
 
 
 
 
 
100
  }
40
  $module->addData($data);
41
  }
42
 
43
+ if ($info = Mage::getSingleton('adminhtml/session')->getTmValidationInfo(true)) {
44
+ $link = Mage::helper('tmcore/debug')->preparePopup(
45
+ $info['response'],
46
+ 'SwissUpLabs subscription validation response'
47
+ );
48
+ Mage::getSingleton('adminhtml/session')->addError(
49
+ $info['error'] . ' | ' . $link
50
+ );
51
+ }
52
+
53
  Mage::register('tmcore_module', $module);
54
 
55
  $this->_initAction()
75
  $result = $module->validateLicense();
76
  if (is_array($result) && isset($result['error'])) {
77
  Mage::getSingleton('adminhtml/session')->setFormData($this->getRequest()->getPost());
78
+
79
+ $error = call_user_func_array(array(Mage::helper('tmcore'), '__'), $result['error']);
80
+ if (isset($result['response'])) {
81
+ Mage::getSingleton('adminhtml/session')->setTmValidationInfo(
82
+ array(
83
+ 'error' => $error,
84
+ 'response' => $result['response']
85
+ )
86
+ );
87
+ } else {
88
+ Mage::getSingleton('adminhtml/session')->addError($error);
89
+ }
90
  return $this->_redirect('*/*/manage', array('id' => $module->getId()));
91
  }
92
 
115
  Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('tmcore')->__("The module has been saved"));
116
  $this->_redirect('*/*/');
117
  }
118
+
119
+ protected function _isAllowed()
120
+ {
121
+ return Mage::getSingleton('admin/session')->isAllowed('templates_master/tmcore_module');
122
+ }
123
  }
app/code/community/TM/Core/controllers/Adminhtml/Tmcore/SupportController.php CHANGED
@@ -7,10 +7,20 @@ class TM_Core_Adminhtml_Tmcore_SupportController extends Mage_Adminhtml_Controll
7
  $this->loadLayout()
8
  ->_setActiveMenu('templates_master/tmcore_module')
9
  ->_addBreadcrumb('Templates Master', 'Templates Master')
10
- ->_addBreadcrumb(Mage::helper('tmcore')->__('Supprt'), Mage::helper('tmcore')->__('Support'));
11
  return $this;
12
  }
13
 
 
 
 
 
 
 
 
 
 
 
14
  /**
15
  *
16
  * @return Zend_Oauth_Client
@@ -32,8 +42,16 @@ class TM_Core_Adminhtml_Tmcore_SupportController extends Mage_Adminhtml_Controll
32
  return $restClient;
33
  }
34
 
 
 
 
 
 
35
  protected function _prepareApiRestResponseErrorMessages($response)
36
  {
 
 
 
37
  $messages = $response->messages;
38
  if ($messages) {
39
  $errors = $messages->error;
@@ -51,27 +69,30 @@ class TM_Core_Adminhtml_Tmcore_SupportController extends Mage_Adminhtml_Controll
51
  return false;
52
  }
53
 
 
 
 
 
 
54
  protected function _getRestApiData($uri)
55
  {
56
  $restClient = $this->_getRestApiClient();
57
 
58
  if (!$restClient) {
59
- return;
60
  }
61
 
62
  $restClient->setHeaders('Accept', 'application/json');
63
  $restClient->setMethod(Zend_Http_Client::GET);
64
 
65
- $magentohost = Mage::getStoreConfig('tmcore/troubleshooting/url');
66
- $restClient->setUri($magentohost . '/api/rest' . $uri);
67
 
68
  $response = $restClient->request();
69
  $_items = json_decode($response->getBody());
70
 
71
  $this->_prepareApiRestResponseErrorMessages($_items);
72
 
73
- // Zend_Debug::dump($_items);
74
- // die;
75
  if (is_array($_items)) {
76
  $collection = new TM_Core_Model_Resource_Support_Collection();
77
  foreach ($_items as &$_item) {
@@ -85,12 +106,18 @@ class TM_Core_Adminhtml_Tmcore_SupportController extends Mage_Adminhtml_Controll
85
  return $object;
86
  }
87
 
 
 
 
 
 
 
88
  protected function _setRestApiData($uri, $params)
89
  {
90
  $restClient = $this->_getRestApiClient();
91
 
92
  if (!$restClient) {
93
- return;
94
  }
95
 
96
  $restClient->setHeaders('Accept', 'application/json');
@@ -98,8 +125,8 @@ class TM_Core_Adminhtml_Tmcore_SupportController extends Mage_Adminhtml_Controll
98
  $restClient->setEncType('application/json');
99
  $restClient->setMethod(Zend_Http_Client::POST);
100
 
101
- $magentohost = Mage::getStoreConfig('tmcore/troubleshooting/url');
102
- $restClient->setUri($magentohost . '/api/rest' . $uri);
103
 
104
  $restClient->setRawData(json_encode($params));
105
 
@@ -113,18 +140,19 @@ class TM_Core_Adminhtml_Tmcore_SupportController extends Mage_Adminhtml_Controll
113
 
114
  public function oauthAction()
115
  {
116
- $magentohost = Mage::getStoreConfig('tmcore/troubleshooting/url');
117
- // $magentohost = 'http://local.magentocommerce.com/';//Mage::getBaseUrl();// 'http://templates-master.com';
 
118
  //Basic parameters that need to be provided for oAuth authentication
119
  //on Magento
120
  $params = array(
121
- 'siteUrl' => "{$magentohost}/oauth",
122
- 'requestTokenUrl' => "{$magentohost}/oauth/initiate",
123
- 'accessTokenUrl' => "{$magentohost}/oauth/token",
124
- 'authorizeUrl' => "{$magentohost}/oauth/authorize",
125
- // 'authorizeUrl' => "{$magentohost}admin/oauth_authorize", //This URL is used only if we authenticate as Admin user type
126
- 'consumerKey' => Mage::getStoreConfig('tmcore/troubleshooting/consumer_key'), //Consumer key registered in server administration
127
- 'consumerSecret' => Mage::getStoreConfig('tmcore/troubleshooting/consumer_secret'), //Consumer secret registered in server administration
128
  'callbackUrl' => $this->getUrl('*/*/index')//Url of callback action below
129
  );
130
  $oAuthClient = Mage::getModel('tmcore/oauth_client');
7
  $this->loadLayout()
8
  ->_setActiveMenu('templates_master/tmcore_module')
9
  ->_addBreadcrumb('Templates Master', 'Templates Master')
10
+ ->_addBreadcrumb(Mage::helper('tmcore')->__('Support'), Mage::helper('tmcore')->__('Support'));
11
  return $this;
12
  }
13
 
14
+ /**
15
+ *
16
+ * @return string (uri)
17
+ */
18
+ protected function _getApiHost()
19
+ {
20
+ // return 'http://mage.local';
21
+ return Mage::getStoreConfig('tmcore/troubleshooting/url');
22
+ }
23
+
24
  /**
25
  *
26
  * @return Zend_Oauth_Client
42
  return $restClient;
43
  }
44
 
45
+ /**
46
+ *
47
+ * @param type $response
48
+ * @return boolean
49
+ */
50
  protected function _prepareApiRestResponseErrorMessages($response)
51
  {
52
+ if (!is_object($response) || !property_exists($response, 'messages')) {
53
+ return false;
54
+ }
55
  $messages = $response->messages;
56
  if ($messages) {
57
  $errors = $messages->error;
69
  return false;
70
  }
71
 
72
+ /**
73
+ *
74
+ * @param string $uri
75
+ * @return \Varien_Object|\TM_Core_Model_Resource_Support_Collection
76
+ */
77
  protected function _getRestApiData($uri)
78
  {
79
  $restClient = $this->_getRestApiClient();
80
 
81
  if (!$restClient) {
82
+ return false;
83
  }
84
 
85
  $restClient->setHeaders('Accept', 'application/json');
86
  $restClient->setMethod(Zend_Http_Client::GET);
87
 
88
+ $host = $this->_getApiHost();
89
+ $restClient->setUri($host . '/api/rest' . $uri);
90
 
91
  $response = $restClient->request();
92
  $_items = json_decode($response->getBody());
93
 
94
  $this->_prepareApiRestResponseErrorMessages($_items);
95
 
 
 
96
  if (is_array($_items)) {
97
  $collection = new TM_Core_Model_Resource_Support_Collection();
98
  foreach ($_items as &$_item) {
106
  return $object;
107
  }
108
 
109
+ /**
110
+ *
111
+ * @param type $uri
112
+ * @param type $params
113
+ * @return type
114
+ */
115
  protected function _setRestApiData($uri, $params)
116
  {
117
  $restClient = $this->_getRestApiClient();
118
 
119
  if (!$restClient) {
120
+ return false;
121
  }
122
 
123
  $restClient->setHeaders('Accept', 'application/json');
125
  $restClient->setEncType('application/json');
126
  $restClient->setMethod(Zend_Http_Client::POST);
127
 
128
+ $host = $this->_getApiHost();
129
+ $restClient->setUri($host . '/api/rest' . $uri);
130
 
131
  $restClient->setRawData(json_encode($params));
132
 
140
 
141
  public function oauthAction()
142
  {
143
+ $host = $this->_getApiHost();
144
+ $consumerKey = Mage::getStoreConfig('tmcore/troubleshooting/consumer_key');
145
+ $consumerSecret = Mage::getStoreConfig('tmcore/troubleshooting/consumer_secret');
146
  //Basic parameters that need to be provided for oAuth authentication
147
  //on Magento
148
  $params = array(
149
+ 'siteUrl' => "{$host}/oauth",
150
+ 'requestTokenUrl' => "{$host}/oauth/initiate",
151
+ 'accessTokenUrl' => "{$host}/oauth/token",
152
+ 'authorizeUrl' => "{$host}/oauth/authorize",
153
+ // 'authorizeUrl' => "{$magentohost}/admin/oauth_authorize", //This URL is used only if we authenticate as Admin user type
154
+ 'consumerKey' => $consumerKey, //Consumer key registered in server administration
155
+ 'consumerSecret' => $consumerSecret, //Consumer secret registered in server administration
156
  'callbackUrl' => $this->getUrl('*/*/index')//Url of callback action below
157
  );
158
  $oAuthClient = Mage::getModel('tmcore/oauth_client');
app/code/community/TM/Core/etc/adminhtml.xml CHANGED
@@ -5,11 +5,12 @@
5
  <title>Templates Master</title>
6
  <sort_order>71</sort_order>
7
  <children>
8
- <!-- <tmcore_support translate="title" module="tmcore">
9
  <title>Support</title>
10
- <sort_order>11</sort_order>
11
  <action>adminhtml/tmcore_support/index</action>
12
- </tmcore_support> -->
 
13
  <tmcore_module translate="title" module="tmcore">
14
  <title>Modules</title>
15
  <sort_order>1340</sort_order>
5
  <title>Templates Master</title>
6
  <sort_order>71</sort_order>
7
  <children>
8
+ <!-- <tmcore_support translate="title" module="tmcore">
9
  <title>Support</title>
10
+ <sort_order>1339</sort_order>
11
  <action>adminhtml/tmcore_support/index</action>
12
+ </tmcore_support>-->
13
+
14
  <tmcore_module translate="title" module="tmcore">
15
  <title>Modules</title>
16
  <sort_order>1340</sort_order>
app/code/community/TM/Core/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <TM_Core>
5
- <version>1.2.1</version>
6
  </TM_Core>
7
  </modules>
8
 
@@ -25,6 +25,11 @@
25
  <tmcore>
26
  <class>TM_Core_Block</class>
27
  </tmcore>
 
 
 
 
 
28
  </blocks>
29
  <helpers>
30
  <tmcore>
@@ -41,6 +46,17 @@
41
  </connection>
42
  </tm_core_setup>
43
  </resources>
 
 
 
 
 
 
 
 
 
 
 
44
  </global>
45
 
46
  <adminhtml>
@@ -70,59 +86,28 @@
70
  </TM_Core>
71
  </modules>
72
  </translate>
73
- <menu>
74
- <templates_master>
75
- <title>Templates Master</title>
76
- <sort_order>71</sort_order>
77
- <children>
78
- <!-- <tmcore_support translate="title" module="tmcore">
79
- <title>Support</title>
80
- <sort_order>11</sort_order>
81
- <action>adminhtml/tmcore_support/index</action>
82
- </tmcore_support> -->
83
- <tmcore_module translate="title" module="tmcore">
84
- <title>Modules</title>
85
- <sort_order>1340</sort_order>
86
- <action>adminhtml/tmcore_module/index</action>
87
- </tmcore_module>
88
- </children>
89
- </templates_master>
90
- </menu>
91
- <acl>
92
- <resources>
93
- <admin>
94
- <children>
95
- <system>
96
- <children>
97
- <config>
98
- <children>
99
- <tmcore>
100
- <title>Core</title>
101
- </tmcore>
102
- </children>
103
- </config>
104
- </children>
105
- </system>
106
- <templates_master>
107
- <title>Templates Master</title>
108
- <sort_order>71</sort_order>
109
- <children>
110
- <!-- <tmcore_support translate="title" module="tmcore">
111
- <title>Support</title>
112
- <sort_order>11</sort_order>
113
- </tmcore_support> -->
114
- <tmcore_module translate="title" module="tmcore">
115
- <title>Modules</title>
116
- <sort_order>1340</sort_order>
117
- </tmcore_module>
118
- </children>
119
- </templates_master>
120
- </children>
121
- </admin>
122
- </resources>
123
- </acl>
124
  </adminhtml>
125
 
 
 
 
 
 
 
 
 
 
 
126
  <admin>
127
  <routers>
128
  <adminhtml>
@@ -136,15 +121,21 @@
136
  </admin>
137
 
138
  <default>
 
 
 
 
 
139
  <tmcore>
140
  <modules>
141
- <feed_url>templates-master.com/modules</feed_url>
142
  </modules>
143
  <license>
144
  <use_https>0</use_https>
145
  <url>/license/validate</url>
146
  </license>
147
  <notification>
 
148
  <feed_url>templates-master.com/notifier</feed_url>
149
  <use_https>0</use_https>
150
  <frequency>24</frequency>
@@ -153,9 +144,9 @@
153
  </notification>
154
  <troubleshooting>
155
  <text><![CDATA[Please <a href='http://templates-master.com/contacts' onclick='window.open(this.href); return false;'>contact us</a>, if you have some issues with one of our modules.]]></text>
156
- <url>http://local.magentocommerce.com</url>
157
- <consumer_key>r28tmti3geufx9chh4rtup746rvr7fs4</consumer_key>
158
- <consumer_secret>t81jrin6y1xpkqcikawvk1p6t7kgd7vg</consumer_secret>
159
  </troubleshooting>
160
  </tmcore>
161
  </default>
2
  <config>
3
  <modules>
4
  <TM_Core>
5
+ <version>1.3.5</version>
6
  </TM_Core>
7
  </modules>
8
 
25
  <tmcore>
26
  <class>TM_Core_Block</class>
27
  </tmcore>
28
+ <cms>
29
+ <rewrite>
30
+ <block>TM_Core_Block_Cms_Block</block>
31
+ </rewrite>
32
+ </cms>
33
  </blocks>
34
  <helpers>
35
  <tmcore>
46
  </connection>
47
  </tm_core_setup>
48
  </resources>
49
+ <events>
50
+ <core_layout_update_updates_get_after>
51
+ <observers>
52
+ <tm_layout>
53
+ <type>model</type>
54
+ <class>tmcore/observer</class>
55
+ <method>addLayoutUpdate</method>
56
+ </tm_layout>
57
+ </observers>
58
+ </core_layout_update_updates_get_after>
59
+ </events>
60
  </global>
61
 
62
  <adminhtml>
86
  </TM_Core>
87
  </modules>
88
  </translate>
89
+ <events>
90
+ <controller_action_layout_render_before>
91
+ <observers>
92
+ <tmcore>
93
+ <class>tmcore/observer</class>
94
+ <method>onBeforeRenderLayout</method>
95
+ </tmcore>
96
+ </observers>
97
+ </controller_action_layout_render_before>
98
+ </events>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  </adminhtml>
100
 
101
+ <frontend>
102
+ <layout>
103
+ <updates>
104
+ <tm_core>
105
+ <file>tm/core.xml</file>
106
+ </tm_core>
107
+ </updates>
108
+ </layout>
109
+ </frontend>
110
+
111
  <admin>
112
  <routers>
113
  <adminhtml>
121
  </admin>
122
 
123
  <default>
124
+ <subscriptionchecker>
125
+ <ignored_sections>
126
+ <tmcore/>
127
+ </ignored_sections>
128
+ </subscriptionchecker>
129
  <tmcore>
130
  <modules>
131
+ <feed_url>templates-master.com/modules.json</feed_url>
132
  </modules>
133
  <license>
134
  <use_https>0</use_https>
135
  <url>/license/validate</url>
136
  </license>
137
  <notification>
138
+ <enabled>1</enabled>
139
  <feed_url>templates-master.com/notifier</feed_url>
140
  <use_https>0</use_https>
141
  <frequency>24</frequency>
144
  </notification>
145
  <troubleshooting>
146
  <text><![CDATA[Please <a href='http://templates-master.com/contacts' onclick='window.open(this.href); return false;'>contact us</a>, if you have some issues with one of our modules.]]></text>
147
+ <url>http://templates-master.com/</url>
148
+ <consumer_key>b96f1fdbcc5df5608bab036f23caead2</consumer_key>
149
+ <consumer_secret>b17bb7641ffcdb267264b39460eee8ae</consumer_secret>
150
  </troubleshooting>
151
  </tmcore>
152
  </default>
app/code/community/TM/Core/etc/system.xml CHANGED
@@ -16,6 +16,24 @@
16
  <show_in_website>1</show_in_website>
17
  <show_in_store>1</show_in_store>
18
  <groups>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  <troubleshooting translate="label comment" module="tmcore">
20
  <label>Troubleshooting</label>
21
  <frontend_type>text</frontend_type>
@@ -51,6 +69,15 @@
51
  <show_in_website>0</show_in_website>
52
  <show_in_store>0</show_in_store>
53
  </use_https> -->
 
 
 
 
 
 
 
 
 
54
  <frequency translate="label">
55
  <label>Update Frequency</label>
56
  <frontend_type>select</frontend_type>
16
  <show_in_website>1</show_in_website>
17
  <show_in_store>1</show_in_store>
18
  <groups>
19
+ <jslibs translate="label comment" module="tmcore">
20
+ <label>JavaScript libraries</label>
21
+ <show_in_default>1</show_in_default>
22
+ <show_in_website>1</show_in_website>
23
+ <show_in_store>1</show_in_store>
24
+ <fields>
25
+ <jquery translate="label">
26
+ <label>Enable jQuery</label>
27
+ <comment>version 1.10.2</comment>
28
+ <frontend_type>select</frontend_type>
29
+ <source_model>adminhtml/system_config_source_yesno</source_model>
30
+ <sort_order>10</sort_order>
31
+ <show_in_default>1</show_in_default>
32
+ <show_in_website>1</show_in_website>
33
+ <show_in_store>1</show_in_store>
34
+ </jquery>
35
+ </fields>
36
+ </jslibs>
37
  <troubleshooting translate="label comment" module="tmcore">
38
  <label>Troubleshooting</label>
39
  <frontend_type>text</frontend_type>
69
  <show_in_website>0</show_in_website>
70
  <show_in_store>0</show_in_store>
71
  </use_https> -->
72
+ <enabled translate="label">
73
+ <label>Enabled</label>
74
+ <frontend_type>select</frontend_type>
75
+ <source_model>adminhtml/system_config_source_yesno</source_model>
76
+ <sort_order>10</sort_order>
77
+ <show_in_default>1</show_in_default>
78
+ <show_in_website>0</show_in_website>
79
+ <show_in_store>0</show_in_store>
80
+ </enabled>
81
  <frequency translate="label">
82
  <label>Update Frequency</label>
83
  <frontend_type>select</frontend_type>
app/code/community/TM/EasyTabs/Block/Adminhtml/Edit/Tab/Main.php CHANGED
@@ -83,7 +83,7 @@ class TM_EasyTabs_Block_Adminhtml_Edit_Tab_Main
83
  'title' => Mage::helper('easytabs')->__('Status'),
84
  'name' => 'status',
85
  'required' => true,
86
- 'options' => Mage::getSingleton('easytabs/config_status')->getOptionHash(),
87
  ));
88
 
89
  if (!Mage::app()->isSingleStoreMode()) {
83
  'title' => Mage::helper('easytabs')->__('Status'),
84
  'name' => 'status',
85
  'required' => true,
86
+ 'options' => Mage::getSingleton('easytabs/config_status')->toOptionHash(),
87
  ));
88
 
89
  if (!Mage::app()->isSingleStoreMode()) {
app/code/community/TM/EasyTabs/Block/Adminhtml/List/Grid.php CHANGED
@@ -76,7 +76,7 @@ class TM_EasyTabs_Block_Adminhtml_List_Grid extends Mage_Adminhtml_Block_Widget_
76
  'width' => '80px',
77
  'index' => 'status',
78
  'type' => 'options',
79
- 'options' => Mage::getSingleton('easytabs/config_status')->getOptionHash(),
80
  ));
81
  if (!Mage::app()->isSingleStoreMode()) {
82
  // $this->addColumn('website_id', array(
@@ -140,7 +140,7 @@ class TM_EasyTabs_Block_Adminhtml_List_Grid extends Mage_Adminhtml_Block_Widget_
140
  'confirm' => Mage::helper('easytabs')->__('Are you sure?')
141
  ));
142
 
143
- $statuses = Mage::getSingleton('easytabs/config_status')->getOptionArray();
144
 
145
  array_unshift($statuses, array('label'=>'', 'value'=>''));
146
  // Zend_Debug::dump($statuses);die;
76
  'width' => '80px',
77
  'index' => 'status',
78
  'type' => 'options',
79
+ 'options' => Mage::getSingleton('easytabs/config_status')->toOptionHash(),
80
  ));
81
  if (!Mage::app()->isSingleStoreMode()) {
82
  // $this->addColumn('website_id', array(
140
  'confirm' => Mage::helper('easytabs')->__('Are you sure?')
141
  ));
142
 
143
+ $statuses = Mage::getSingleton('easytabs/config_status')->toOptionArray();
144
 
145
  array_unshift($statuses, array('label'=>'', 'value'=>''));
146
  // Zend_Debug::dump($statuses);die;
app/code/community/TM/EasyTabs/Block/Tab/Cms.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class TM_EasyTabs_Block_Tab_Cms extends Mage_Catalog_Block_Product_View
4
  {
5
  public function getCmsBlockId()
6
  {
1
  <?php
2
 
3
+ class TM_EasyTabs_Block_Tab_Cms extends Mage_Core_Block_Template
4
  {
5
  public function getCmsBlockId()
6
  {
app/code/community/TM/EasyTabs/Block/Tab/SameAttrValue.php ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class TM_EasyTabs_Block_Tab_SameAttrValue extends Mage_Catalog_Block_Product_Abstract
3
+ {
4
+ protected $_cachePrefix = 'TM_EASYTABS_SERIE';
5
+ const PRODUCTS_COUNT = 8;
6
+ const COLUMNS_COUNT = 4;
7
+ const ATTRIBUTE_CODE = 'serie';
8
+
9
+ protected function _construct()
10
+ {
11
+ parent::_construct();
12
+ $this->addData(array(
13
+ 'cache_lifetime' => 86400,
14
+ 'cache_tags' => array(Mage_Catalog_Model_Product::CACHE_TAG),
15
+ ));
16
+ }
17
+ public function getCacheKeyInfo()
18
+ {
19
+ $productId = 0;
20
+ if ($product = Mage::registry('product')) {
21
+ $productId = $product->getId();
22
+ }
23
+ return array(
24
+ $this->_cachePrefix,
25
+ Mage::app()->getStore()->getId(),
26
+ Mage::app()->getStore()->getCurrentCurrencyCode(),
27
+ Mage::getDesign()->getPackageName(),
28
+ $this->getTemplate(),
29
+ $this->getProductsCount(),
30
+ $this->getColumnsCount(),
31
+ $this->getNameInLayout(),
32
+ $productId
33
+ );
34
+ }
35
+ /**
36
+ * Process cached form_key and uenc params
37
+ *
38
+ * @param string $html
39
+ * @return string
40
+ */
41
+ protected function _loadCache()
42
+ {
43
+ $cacheData = parent::_loadCache();
44
+ if ($cacheData) {
45
+ $search = array(
46
+ '{{tm_easytabs uenc}}'
47
+ );
48
+ $replace = array(
49
+ Mage_Core_Controller_Front_Action::PARAM_NAME_URL_ENCODED
50
+ . '/' . Mage::helper('core/url')->getEncodedUrl()
51
+ );
52
+ if (defined('Mage_Core_Model_Url::FORM_KEY')) {
53
+ $formKey = Mage::getSingleton('core/session')->getFormKey();
54
+ $search = array_merge($search, array(
55
+ '{{tm_easytabs form_key_url}}',
56
+ '{{tm_easytabs form_key_hidden}}'
57
+ ));
58
+ $replace = array_merge($replace, array(
59
+ Mage_Core_Model_Url::FORM_KEY . '/' . $formKey,
60
+ 'value="' . $formKey . '"'
61
+ ));
62
+ }
63
+ $cacheData = str_replace($search, $replace, $cacheData);
64
+ }
65
+ return $cacheData;
66
+ }
67
+ /**
68
+ * Replace form_key and uenc with placeholders
69
+ *
70
+ * @param string $data
71
+ * @return Mage_Core_Block_Abstract
72
+ */
73
+ protected function _saveCache($data)
74
+ {
75
+ if (is_null($this->getCacheLifetime())
76
+ || !$this->getMageApp()->useCache(self::CACHE_GROUP)) {
77
+ return false;
78
+ }
79
+ $search = array(
80
+ Mage_Core_Controller_Front_Action::PARAM_NAME_URL_ENCODED
81
+ . '/' . Mage::helper('core/url')->getEncodedUrl()
82
+ );
83
+ $replace = array(
84
+ '{{tm_easytabs uenc}}'
85
+ );
86
+ if (defined('Mage_Core_Model_Url::FORM_KEY')) {
87
+ $formKey = Mage::getSingleton('core/session')->getFormKey();
88
+ $search = array_merge($search, array(
89
+ Mage_Core_Model_Url::FORM_KEY . '/' . $formKey,
90
+ 'value="' . $formKey . '"'
91
+ ));
92
+ $replace = array_merge($replace, array(
93
+ '{{tm_easytabs form_key_url}}',
94
+ '{{tm_easytabs form_key_hidden}}'
95
+ ));
96
+ }
97
+ $data = str_replace($search, $replace, $data);
98
+ return parent::_saveCache($data);
99
+ }
100
+ /**
101
+ * EE compatibility
102
+ *
103
+ * @return Mage_Core_Model_App
104
+ */
105
+ public function getMageApp()
106
+ {
107
+ if (method_exists($this, '_getApp')) {
108
+ return $this->_getApp();
109
+ }
110
+ return Mage::app();
111
+ }
112
+ /**
113
+ * Retrieve product final price in current currency
114
+ *
115
+ * @param Mage_Catalog_Model_Product $product
116
+ * @param boolean $includingTax
117
+ * @return float
118
+ */
119
+ public function getProductFinalPrice($product, $includingTax = false)
120
+ {
121
+ $basePrice = Mage::helper('tax')->getPrice($product, $product->getFinalPrice(), $includingTax);
122
+ return round(Mage::helper('core')->currency($basePrice, false, false), 2);
123
+ }
124
+ protected function _toHtml()
125
+ {
126
+ if (!$this->getProductCollection()) {
127
+ return '';
128
+ }
129
+ return parent::_toHtml();
130
+ }
131
+ public function getProductsCount()
132
+ {
133
+ return self::PRODUCTS_COUNT;
134
+ }
135
+ public function getColumnsCount()
136
+ {
137
+ return self::COLUMNS_COUNT;
138
+ }
139
+
140
+ protected function _beforeToHtml()
141
+ {
142
+ $product = Mage::registry('product');
143
+ if (!$product) {
144
+ return parent::_beforeToHtml();
145
+ }
146
+ $attrValue = $product->getResource()
147
+ ->getAttribute(self::ATTRIBUTE_CODE)
148
+ ->getFrontend()
149
+ ->getValue($product);
150
+ /**
151
+ * @var Mage_Catalog_Model_Resource_Product_Collection
152
+ */
153
+ $collection = Mage::getResourceModel('catalog/product_collection');
154
+ $collection->setVisibility(
155
+ Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds()
156
+ );
157
+ $this->_addProductAttributesAndPrices($collection)
158
+ ->addStoreFilter()
159
+ ->setPageSize($this->getProductsCount())
160
+ ->setCurPage(1);
161
+ Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($collection);
162
+ // $collection->addFieldToFilter(self::ATTRIBUTE_CODE, array('eq' => $attrValue));
163
+ $collection->addFieldToFilter(array(
164
+ array('attribute' => 'entity_id', 'neq' => $product->getId()),
165
+ ));
166
+ $collection->addFieldToFilter(array(
167
+ array('attribute' => self::ATTRIBUTE_CODE, 'eq' => $attrValue),
168
+ ));
169
+ $this->setProductCollection($collection);
170
+ return parent::_beforeToHtml();
171
+ }
172
+ /**
173
+ * Retrieve url for add product to cart
174
+ * Will return product view page URL if product has required options
175
+ *
176
+ * @param Mage_Catalog_Model_Product $product
177
+ * @param array $additional
178
+ * @return string
179
+ */
180
+ public function getAddToCartUrl($product, $additional = array())
181
+ {
182
+ if ($product->getTypeInstance(true)->hasOptions($product)
183
+ || 'grouped' === $product->getTypeId()) {
184
+ if (!isset($additional['_escape'])) {
185
+ $additional['_escape'] = true;
186
+ }
187
+ if (!isset($additional['_query'])) {
188
+ $additional['_query'] = array();
189
+ }
190
+ $additional['_query']['options'] = 'cart';
191
+ $_url = $product->getUrl();
192
+ $product->setUrl(null);
193
+ $url = $this->getProductUrl($product, $additional);
194
+ $product->setUrl($_url);
195
+ return $url;
196
+ }
197
+ return parent::getAddToCartUrl($product, $additional);
198
+ }
199
+ }
app/code/community/TM/EasyTabs/Block/Tab/Template.php CHANGED
@@ -15,11 +15,25 @@ class TM_EasyTabs_Block_Tab_Template extends Mage_Core_Block_Template
15
 
16
  protected function _toHtml()
17
  {
18
- $block = $this->getChild($this->getNameInLayout() . '_tab');
19
  if ($block instanceof Mage_Core_Block_Template) {
20
  return $block->setTemplate($this->getTemplate())
21
  ->toHtml();
22
  }
23
  return '';
24
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  }
15
 
16
  protected function _toHtml()
17
  {
18
+ $block = $this->getTabBlock();
19
  if ($block instanceof Mage_Core_Block_Template) {
20
  return $block->setTemplate($this->getTemplate())
21
  ->toHtml();
22
  }
23
  return '';
24
  }
25
+
26
+ public function getTabBlock()
27
+ {
28
+ return $this->getChild($this->getNameInLayout() . '_tab');
29
+ }
30
+
31
+ public function getCount()
32
+ {
33
+ $block = $this->getTabBlock();
34
+ if ($block instanceof Mage_Core_Block_Template) {
35
+ return $block->getCount();
36
+ }
37
+ return;
38
+ }
39
  }
app/code/community/TM/EasyTabs/Block/Tabs.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class TM_EasyTabs_Block_Tabs extends Mage_Core_Block_Template
4
  {
5
  protected $_tabs = array();
6
 
@@ -19,7 +19,17 @@ class TM_EasyTabs_Block_Tabs extends Mage_Core_Block_Template
19
  if (!Mage::getStoreConfig('tm_easytabs/general/enabled')) {
20
  return parent::_prepareLayout();
21
  }
22
- foreach ($this->_getCollection() as $tab) {
 
 
 
 
 
 
 
 
 
 
23
  $this->addTab(
24
  $tab->getAlias(),
25
  $tab->getTitle(),
@@ -37,6 +47,23 @@ class TM_EasyTabs_Block_Tabs extends Mage_Core_Block_Template
37
  list($blockName, $alias) = explode('::', $unset);
38
  $block = $this->getLayout()->getBlock($blockName);
39
  if ($block) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  $block->unsetChild($alias);
41
  }
42
  }
@@ -50,26 +77,71 @@ class TM_EasyTabs_Block_Tabs extends Mage_Core_Block_Template
50
  * @param string $template
51
  * @param array $attributes
52
  */
53
- public function addTab($alias, $title, $block, $template, $attributes = array())
54
  {
55
- if (!$title || !$block || ($block !== 'easytabs/tab_html' && !$template)) {
56
  return false;
57
  }
58
 
59
- $this->_tabs[] = array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  'alias' => $alias,
61
  'title' => $title
62
  );
63
 
64
- $this->setChild($alias,
65
- $this->getLayout()
66
- ->createBlock($block, $alias, $attributes)
67
- ->setTemplate($template)
68
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  }
70
 
71
  public function getTabs()
72
  {
 
73
  return $this->_tabs;
74
  }
75
 
@@ -83,7 +155,7 @@ class TM_EasyTabs_Block_Tabs extends Mage_Core_Block_Template
83
  {
84
  $content = strip_tags(
85
  $content,
86
- '<hr><img><iframe><embed><video><audio><input><textarea><script><style><link><meta>'
87
  );
88
  $content = trim($content);
89
  return strlen($content) === 0;
@@ -101,4 +173,32 @@ class TM_EasyTabs_Block_Tabs extends Mage_Core_Block_Template
101
 
102
  return $processor->filter($tab['title']);
103
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  }
1
  <?php
2
 
3
+ class TM_EasyTabs_Block_Tabs extends Mage_Core_Block_Template implements Mage_Widget_Block_Interface
4
  {
5
  protected $_tabs = array();
6
 
19
  if (!Mage::getStoreConfig('tm_easytabs/general/enabled')) {
20
  return parent::_prepareLayout();
21
  }
22
+
23
+ $collection = $this->_getCollection();
24
+
25
+ $filterTabs = $this->getFilterTabs();
26
+ if (!empty($filterTabs)) {
27
+ $filterTabs = str_replace(' ', '', $filterTabs);
28
+ $filterTabs = explode(',', $filterTabs);
29
+ $collection->addFieldToFilter('alias', array('in' => $filterTabs));
30
+ }
31
+
32
+ foreach ($collection as $tab) {
33
  $this->addTab(
34
  $tab->getAlias(),
35
  $tab->getTitle(),
47
  list($blockName, $alias) = explode('::', $unset);
48
  $block = $this->getLayout()->getBlock($blockName);
49
  if ($block) {
50
+ /**
51
+ * @see http://www.magentocommerce.com/bug-tracking/issue/index/id/142
52
+ * Call sortChildren before unset to fix Magento bug in
53
+ * Mage_Core_Block_Abstract::sortChildren:
54
+ * 1. Unset drop the key from the _sortedChildren array
55
+ * 2. sortChildren method finds the block index to remove
56
+ * 3. sortChildren method uses array_splice wich reorder array
57
+ * and previously founded block index become incorrect.
58
+ *
59
+ * The fix is works because sort is called only once.
60
+ * The correct way is to add the following line to
61
+ * Mage_Core_Block_Abstract::unsetChild after
62
+ * `unset($this->_sortedChildren[$key]);`:
63
+ *
64
+ * $this->_sortedChildren = array_values($this->_sortedChildren);
65
+ */
66
+ $block->sortChildren();
67
  $block->unsetChild($alias);
68
  }
69
  }
77
  * @param string $template
78
  * @param array $attributes
79
  */
80
+ public function addTab($alias, $title, $block = false, $template = false, $attributes = array())
81
  {
82
+ if (!$title || ($block && $block !== 'easytabs/tab_html' && !$template)) {
83
  return false;
84
  }
85
 
86
+ if (isset($attributes['handles']) && !empty($attributes['handles'])) {
87
+ $handles = explode(',', $attributes['handles']);
88
+ $layoutHandles = $this->getLayout()->getUpdate()->getHandles();
89
+ $commonHandles = array_intersect($handles, $layoutHandles);
90
+ if (!empty($handles) && count($commonHandles) < 1) {
91
+ return false;
92
+ }
93
+ }
94
+
95
+
96
+
97
+ if (!$block) {
98
+ $block = $this->getLayout()->getBlock($alias);
99
+ if (!$block) {
100
+ return false;
101
+ }
102
+ } else {
103
+ // if (!Mage::registry('product') && strstr($block, 'product')) {
104
+ // return false;
105
+ // }
106
+
107
+ $block = $this->getLayout()
108
+ ->createBlock($block, $alias, $attributes)
109
+ ->setTemplate($template);
110
+ }
111
+
112
+ $tab = array(
113
  'alias' => $alias,
114
  'title' => $title
115
  );
116
 
117
+ if (isset($attributes['sort_order'])) {
118
+ $tab['sort_order'] = $attributes['sort_order'];
119
+ }
120
+
121
+ $this->_tabs[] = $tab;
122
+
123
+ $this->setChild($alias, $block);
124
+ }
125
+
126
+ protected function _sort($tab1, $tab2)
127
+ {
128
+ if (!isset($tab2['sort_order'])) {
129
+ return -1;
130
+ }
131
+
132
+ if (!isset($tab1['sort_order'])) {
133
+ return 1;
134
+ }
135
+
136
+ if ($tab1['sort_order'] == $tab2['sort_order']) {
137
+ return 0;
138
+ }
139
+ return ($tab1['sort_order'] < $tab2['sort_order']) ? -1 : 1;
140
  }
141
 
142
  public function getTabs()
143
  {
144
+ usort($this->_tabs, array($this, '_sort'));
145
  return $this->_tabs;
146
  }
147
 
155
  {
156
  $content = strip_tags(
157
  $content,
158
+ '<hr><img><iframe><embed><object><video><audio><input><textarea><script><style><link><meta>'
159
  );
160
  $content = trim($content);
161
  return strlen($content) === 0;
173
 
174
  return $processor->filter($tab['title']);
175
  }
176
+
177
+ /**
178
+ * Returns show anchor flag
179
+ *
180
+ * @return boolean
181
+ */
182
+ public function getUpdateUrlHash()
183
+ {
184
+ return Mage::getStoreConfigFlag('tm_easytabs/general/update_url_hash');
185
+ }
186
+
187
+ /**
188
+ * Returns show anchor flag
189
+ *
190
+ * @return boolean
191
+ */
192
+ public function getShowAnchor()
193
+ {
194
+ return Mage::getStoreConfigFlag('tm_easytabs/general/show_anchor');
195
+ }
196
+
197
+ protected function _toHtml()
198
+ {
199
+ if (!$this->getTemplate()) {
200
+ $this->setTemplate('tm/easytabs/tabs.phtml');
201
+ }
202
+ return parent::_toHtml();
203
+ }
204
  }
app/code/community/TM/EasyTabs/Model/Config.php CHANGED
@@ -32,11 +32,18 @@ class TM_EasyTabs_Model_Config extends Varien_Object
32
  $section = 'tm_easytabs';
33
  $websiteId = $storeId = 0;
34
 
 
 
 
 
 
 
 
35
  $groups = array(
36
  'general' => array(
37
  'fields' => array(
38
  'config' => array(
39
- 'value' => json_encode($items)
40
  ))));
41
  Mage::getSingleton('adminhtml/config_data')
42
  ->setSection($section)
32
  $section = 'tm_easytabs';
33
  $websiteId = $storeId = 0;
34
 
35
+ $value = json_encode($items);
36
+
37
+ $ob = json_decode($value);
38
+ if($ob === null) {
39
+ throw new Mage_Exception("invalid json", 1);
40
+ }
41
+
42
  $groups = array(
43
  'general' => array(
44
  'fields' => array(
45
  'config' => array(
46
+ 'value' => $value
47
  ))));
48
  Mage::getSingleton('adminhtml/config_data')
49
  ->setSection($section)
app/code/community/TM/EasyTabs/Model/Config/Status.php CHANGED
@@ -6,16 +6,16 @@ class TM_EasyTabs_Model_Config_Status extends Varien_Object
6
  const STATUS_ENABLE = 1;
7
 
8
 
9
- public function getOptionArray()
10
  {
11
  $res = array();
12
- foreach ($this->getOptionHash() as $value => $label) {
13
  $res[] = array('value' => $value, 'label' => $label);
14
  }
15
  return $res;
16
  }
17
 
18
- public function getOptionHash()
19
  {
20
  return array(
21
  self::STATUS_DISABLE => Mage::helper('easytabs')->__('Disable'),
6
  const STATUS_ENABLE = 1;
7
 
8
 
9
+ public function toOptionArray()
10
  {
11
  $res = array();
12
+ foreach ($this->toOptionHash() as $value => $label) {
13
  $res[] = array('value' => $value, 'label' => $label);
14
  }
15
  return $res;
16
  }
17
 
18
+ public function toOptionHash()
19
  {
20
  return array(
21
  self::STATUS_DISABLE => Mage::helper('easytabs')->__('Disable'),
app/code/community/TM/EasyTabs/Model/Config/Tabs.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class TM_EasyTabs_Model_Config_Tabs //extends Varien_Object
4
+ {
5
+ const STATUS_DISABLE = 0;
6
+ const STATUS_ENABLE = 1;
7
+
8
+ public function toOptionArray()
9
+ {
10
+ $res = array();
11
+ foreach ($this->toOptionHash() as $value => $label) {
12
+ $res[] = array('value' => $value, 'label' => $label);
13
+ }
14
+ return $res;
15
+ }
16
+
17
+ public function toOptionHash()
18
+ {
19
+ $collection = new TM_EasyTabs_Model_Config_Collection();
20
+ $collection->addFieldToFilter('status', array('eq' => 1));
21
+
22
+ // \Zend_Debug::dump($collection->getFirstItem()->getData());
23
+ $res = array();
24
+ foreach ($collection as $tab) {
25
+ $res[$tab['alias']] = $tab['title'];
26
+ }
27
+ return $res;
28
+ }
29
+ }
app/code/community/TM/EasyTabs/controllers/Adminhtml/Easytabs/IndexController.php CHANGED
@@ -197,4 +197,9 @@ class TM_EasyTabs_Adminhtml_Easytabs_IndexController extends Mage_Adminhtml_Cont
197
 
198
  $this->getResponse()->setBody($content->toHtml());
199
  }
 
 
 
 
 
200
  }
197
 
198
  $this->getResponse()->setBody($content->toHtml());
199
  }
200
+
201
+ protected function _isAllowed()
202
+ {
203
+ return Mage::getSingleton('admin/session')->isAllowed('templates_master/easytabs');
204
+ }
205
  }
app/code/community/TM/EasyTabs/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <TM_EasyTabs>
5
- <version>2.3.0</version>
6
  </TM_EasyTabs>
7
  </modules>
8
 
@@ -45,9 +45,16 @@
45
  </frontend>
46
 
47
  <default>
 
 
 
 
 
48
  <tm_easytabs>
49
  <general>
50
  <enabled>0</enabled>
 
 
51
  <config><![CDATA[
52
  {
53
  "1":{
@@ -58,6 +65,7 @@
58
  "custom_option":null,
59
  "template":"tm\/easytabs\/tab\/catalog\/product\/view\/description.phtml",
60
  "unset":"product.info::description",
 
61
  "sort_order":1,
62
  "status":true,
63
  "store_id":[
@@ -72,6 +80,7 @@
72
  "custom_option":null,
73
  "template":"tm\/easytabs\/tab\/catalog\/product\/view\/attributes.phtml",
74
  "unset":"product.info::additional",
 
75
  "sort_order":2,
76
  "status":true,
77
  "store_id":[
@@ -86,6 +95,7 @@
86
  "custom_option":null,
87
  "template":"catalog\/product\/list\/upsell.phtml",
88
  "unset":"product.info::upsell_products",
 
89
  "sort_order":4,
90
  "status":true,
91
  "store_id":[
@@ -100,6 +110,7 @@
100
  "custom_option":null,
101
  "template":"tm\/easytabs\/tab\/catalog\/product\/related.phtml",
102
  "unset":"right::catalog.product.related,product.info::related_products",
 
103
  "sort_order":5,
104
  "status":true,
105
  "store_id":[
@@ -114,6 +125,7 @@
114
  "custom_option":null,
115
  "template":"tm\/easytabs\/tab\/tag\/product\/list.phtml",
116
  "unset":"product.info.additional::product_tag_list",
 
117
  "sort_order":6,
118
  "status":true,
119
  "store_id":[
@@ -128,6 +140,7 @@
128
  "custom_option":null,
129
  "template":"tm\/easytabs\/tab\/review\/product\/view\/list.phtml",
130
  "unset":"product.info::reviews",
 
131
  "sort_order":7,
132
  "status":true,
133
  "store_id":[
@@ -156,6 +169,7 @@
156
  "custom_option":"color",
157
  "template":"tm\/easytabs\/tab\/catalog\/product\/attribute.phtml",
158
  "unset":"",
 
159
  "sort_order":9,
160
  "status":false,
161
  "store_id":[
@@ -170,6 +184,7 @@
170
  "custom_option":"payment\/catalog_product_view_profile",
171
  "template":"payment\/catalog\/product\/view\/profile\/schedule.phtml",
172
  "unset":"product.info::recurring_info",
 
173
  "sort_order":10,
174
  "status":true,
175
  "store_id":[
2
  <config>
3
  <modules>
4
  <TM_EasyTabs>
5
+ <version>2.3.5</version>
6
  </TM_EasyTabs>
7
  </modules>
8
 
45
  </frontend>
46
 
47
  <default>
48
+ <subscriptionchecker>
49
+ <ignored_sections>
50
+ <tm_easytabs/>
51
+ </ignored_sections>
52
+ </subscriptionchecker>
53
  <tm_easytabs>
54
  <general>
55
  <enabled>0</enabled>
56
+ <update_url_hash>1</update_url_hash>
57
+ <show_anchor>0</show_anchor>
58
  <config><![CDATA[
59
  {
60
  "1":{
65
  "custom_option":null,
66
  "template":"tm\/easytabs\/tab\/catalog\/product\/view\/description.phtml",
67
  "unset":"product.info::description",
68
+ "handles":"catalog_product_view",
69
  "sort_order":1,
70
  "status":true,
71
  "store_id":[
80
  "custom_option":null,
81
  "template":"tm\/easytabs\/tab\/catalog\/product\/view\/attributes.phtml",
82
  "unset":"product.info::additional",
83
+ "handles":"catalog_product_view",
84
  "sort_order":2,
85
  "status":true,
86
  "store_id":[
95
  "custom_option":null,
96
  "template":"catalog\/product\/list\/upsell.phtml",
97
  "unset":"product.info::upsell_products",
98
+ "handles":"catalog_product_view",
99
  "sort_order":4,
100
  "status":true,
101
  "store_id":[
110
  "custom_option":null,
111
  "template":"tm\/easytabs\/tab\/catalog\/product\/related.phtml",
112
  "unset":"right::catalog.product.related,product.info::related_products",
113
+ "handles":"catalog_product_view",
114
  "sort_order":5,
115
  "status":true,
116
  "store_id":[
125
  "custom_option":null,
126
  "template":"tm\/easytabs\/tab\/tag\/product\/list.phtml",
127
  "unset":"product.info.additional::product_tag_list",
128
+ "handles":"catalog_product_view",
129
  "sort_order":6,
130
  "status":true,
131
  "store_id":[
140
  "custom_option":null,
141
  "template":"tm\/easytabs\/tab\/review\/product\/view\/list.phtml",
142
  "unset":"product.info::reviews",
143
+ "handles":"catalog_product_view",
144
  "sort_order":7,
145
  "status":true,
146
  "store_id":[
169
  "custom_option":"color",
170
  "template":"tm\/easytabs\/tab\/catalog\/product\/attribute.phtml",
171
  "unset":"",
172
+ "handles":"catalog_product_view",
173
  "sort_order":9,
174
  "status":false,
175
  "store_id":[
184
  "custom_option":"payment\/catalog_product_view_profile",
185
  "template":"payment\/catalog\/product\/view\/profile\/schedule.phtml",
186
  "unset":"product.info::recurring_info",
187
+ "handles":"catalog_product_view",
188
  "sort_order":10,
189
  "status":true,
190
  "store_id":[
app/code/community/TM/EasyTabs/etc/easytabs.xml CHANGED
@@ -17,6 +17,13 @@
17
  <required>0</required>
18
  <value></value>
19
  </unset>
 
 
 
 
 
 
 
20
  </parameters>
21
  </html>
22
  <template type="easytabs/tab_template">
@@ -43,6 +50,15 @@
43
  <required>0</required>
44
  <value></value>
45
  </unset>
 
 
 
 
 
 
 
 
 
46
  </parameters>
47
  </template>
48
  <attribute type="easytabs/tab_attribute">
@@ -63,6 +79,13 @@
63
  <required>1</required>
64
  <value>tm/easytabs/tab/catalog/product/attribute.phtml</value>
65
  </template>
 
 
 
 
 
 
 
66
  </parameters>
67
  </attribute>
68
  <product_description type="easytabs/tab_product_description">
@@ -82,6 +105,13 @@
82
  <required>0</required>
83
  <value>product.info::description</value>
84
  </unset>
 
 
 
 
 
 
 
85
  </parameters>
86
  </product_description>
87
  <product_additional type="easytabs/tab_product_additional">
@@ -101,6 +131,13 @@
101
  <required>0</required>
102
  <value>product.info::additional</value>
103
  </unset>
 
 
 
 
 
 
 
104
  </parameters>
105
  </product_additional>
106
  <product_upsell type="easytabs/tab_product_upsell">
@@ -120,6 +157,13 @@
120
  <required>0</required>
121
  <value>product.info::upsell_products</value>
122
  </unset>
 
 
 
 
 
 
 
123
  </parameters>
124
  </product_upsell>
125
  <product_related type="easytabs/tab_product_related">
@@ -139,6 +183,13 @@
139
  <required>0</required>
140
  <value>right::catalog.product.related</value>
141
  </unset>
 
 
 
 
 
 
 
142
  </parameters>
143
  </product_related>
144
  <product_tags type="easytabs/tab_product_tags">
@@ -158,6 +209,13 @@
158
  <required>0</required>
159
  <value>product.info.additional::product_tag_list</value>
160
  </unset>
 
 
 
 
 
 
 
161
  </parameters>
162
  </product_tags>
163
  <product_review type="easytabs/tab_product_review">
@@ -169,6 +227,7 @@
169
  <visible>1</visible>
170
  <required>1</required>
171
  <value>tm/easytabs/tab/review/product/view/list.phtml</value>
 
172
  </template>
173
  <unset>
174
  <label>Unset</label>
@@ -177,6 +236,13 @@
177
  <required>0</required>
178
  <value>product.info::reviews</value>
179
  </unset>
 
 
 
 
 
 
 
180
  </parameters>
181
  </product_review>
182
  <cms type="easytabs/tab_cms">
@@ -197,6 +263,13 @@
197
  <required>1</required>
198
  <value>tm/easytabs/tab/cms.phtml</value>
199
  </template>
 
 
 
 
 
 
 
200
  </parameters>
201
  </cms>
202
  </easytabs>
17
  <required>0</required>
18
  <value></value>
19
  </unset>
20
+ <handles>
21
+ <label>Handles</label>
22
+ <type>text</type>
23
+ <visible>1</visible>
24
+ <required>0</required>
25
+ <value></value>
26
+ </handles>
27
  </parameters>
28
  </html>
29
  <template type="easytabs/tab_template">
50
  <required>0</required>
51
  <value></value>
52
  </unset>
53
+ <handles>
54
+ <label>Handles</label>
55
+ <type>text</type>
56
+ <!-- <type>multiselect</type> -->
57
+ <!-- <source_model>easytabs/layout_handle_collection</source_model> -->
58
+ <visible>1</visible>
59
+ <required>0</required>
60
+ <value></value>
61
+ </handles>
62
  </parameters>
63
  </template>
64
  <attribute type="easytabs/tab_attribute">
79
  <required>1</required>
80
  <value>tm/easytabs/tab/catalog/product/attribute.phtml</value>
81
  </template>
82
+ <handles>
83
+ <label>Handles</label>
84
+ <type>text</type>
85
+ <visible>1</visible>
86
+ <required>0</required>
87
+ <value>catalog_product_view</value>
88
+ </handles>
89
  </parameters>
90
  </attribute>
91
  <product_description type="easytabs/tab_product_description">
105
  <required>0</required>
106
  <value>product.info::description</value>
107
  </unset>
108
+ <handles>
109
+ <label>Handles</label>
110
+ <type>text</type>
111
+ <visible>1</visible>
112
+ <required>0</required>
113
+ <value>catalog_product_view</value>
114
+ </handles>
115
  </parameters>
116
  </product_description>
117
  <product_additional type="easytabs/tab_product_additional">
131
  <required>0</required>
132
  <value>product.info::additional</value>
133
  </unset>
134
+ <handles>
135
+ <label>Handles</label>
136
+ <type>text</type>
137
+ <visible>1</visible>
138
+ <required>0</required>
139
+ <value>catalog_product_view</value>
140
+ </handles>
141
  </parameters>
142
  </product_additional>
143
  <product_upsell type="easytabs/tab_product_upsell">
157
  <required>0</required>
158
  <value>product.info::upsell_products</value>
159
  </unset>
160
+ <handles>
161
+ <label>Handles</label>
162
+ <type>text</type>
163
+ <visible>1</visible>
164
+ <required>0</required>
165
+ <value>catalog_product_view</value>
166
+ </handles>
167
  </parameters>
168
  </product_upsell>
169
  <product_related type="easytabs/tab_product_related">
183
  <required>0</required>
184
  <value>right::catalog.product.related</value>
185
  </unset>
186
+ <handles>
187
+ <label>Handles</label>
188
+ <type>text</type>
189
+ <visible>1</visible>
190
+ <required>0</required>
191
+ <value>catalog_product_view</value>
192
+ </handles>
193
  </parameters>
194
  </product_related>
195
  <product_tags type="easytabs/tab_product_tags">
209
  <required>0</required>
210
  <value>product.info.additional::product_tag_list</value>
211
  </unset>
212
+ <handles>
213
+ <label>Handles</label>
214
+ <type>text</type>
215
+ <visible>1</visible>
216
+ <required>0</required>
217
+ <value>catalog_product_view</value>
218
+ </handles>
219
  </parameters>
220
  </product_tags>
221
  <product_review type="easytabs/tab_product_review">
227
  <visible>1</visible>
228
  <required>1</required>
229
  <value>tm/easytabs/tab/review/product/view/list.phtml</value>
230
+ <!-- <value>review/product/view/list.phtml</value> -->
231
  </template>
232
  <unset>
233
  <label>Unset</label>
236
  <required>0</required>
237
  <value>product.info::reviews</value>
238
  </unset>
239
+ <handles>
240
+ <label>Handles</label>
241
+ <type>text</type>
242
+ <visible>1</visible>
243
+ <required>0</required>
244
+ <value>catalog_product_view</value>
245
+ </handles>
246
  </parameters>
247
  </product_review>
248
  <cms type="easytabs/tab_cms">
263
  <required>1</required>
264
  <value>tm/easytabs/tab/cms.phtml</value>
265
  </template>
266
+ <handles>
267
+ <label>Handles</label>
268
+ <type>text</type>
269
+ <visible>1</visible>
270
+ <required>0</required>
271
+ <value></value>
272
+ </handles>
273
  </parameters>
274
  </cms>
275
  </easytabs>
app/code/community/TM/EasyTabs/etc/system.xml CHANGED
@@ -25,14 +25,35 @@
25
  <show_in_store>1</show_in_store>
26
  <fields>
27
  <enabled translate="label">
28
- <label>Enable easy tabs</label>
29
  <frontend_type>select</frontend_type>
30
  <source_model>adminhtml/system_config_source_yesno</source_model>
31
- <sort_order>1</sort_order>
32
  <show_in_default>1</show_in_default>
33
  <show_in_website>1</show_in_website>
34
  <show_in_store>1</show_in_store>
35
  </enabled>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  </fields>
37
  </general>
38
  </groups>
25
  <show_in_store>1</show_in_store>
26
  <fields>
27
  <enabled translate="label">
28
+ <label>Enabled</label>
29
  <frontend_type>select</frontend_type>
30
  <source_model>adminhtml/system_config_source_yesno</source_model>
31
+ <sort_order>10</sort_order>
32
  <show_in_default>1</show_in_default>
33
  <show_in_website>1</show_in_website>
34
  <show_in_store>1</show_in_store>
35
  </enabled>
36
+ <update_url_hash translate="label">
37
+ <label>Update url when switch between tabs</label>
38
+ <frontend_type>select</frontend_type>
39
+ <source_model>adminhtml/system_config_source_yesno</source_model>
40
+ <sort_order>20</sort_order>
41
+ <show_in_default>1</show_in_default>
42
+ <show_in_website>1</show_in_website>
43
+ <show_in_store>1</show_in_store>
44
+ </update_url_hash>
45
+ <show_anchor translate="label">
46
+ <label>Show tab anchor when hovering tab</label>
47
+ <frontend_type>select</frontend_type>
48
+ <source_model>adminhtml/system_config_source_yesno</source_model>
49
+ <depends>
50
+ <update_url_hash>0</update_url_hash>
51
+ </depends>
52
+ <sort_order>30</sort_order>
53
+ <show_in_default>1</show_in_default>
54
+ <show_in_website>1</show_in_website>
55
+ <show_in_store>1</show_in_store>
56
+ </show_anchor>
57
  </fields>
58
  </general>
59
  </groups>
app/code/community/TM/EasyTabs/etc/widget.xml CHANGED
@@ -1,195 +1,17 @@
1
  <?xml version="1.0"?>
2
  <widgets>
3
- <easytabs_tab_template type="easytabs/tab_template">
4
- <name>Easy Tab Custom Block</name>
5
- <description type="desc">Easy Tab Anything Block</description>
6
  <parameters>
7
- <custom_option>
8
- <label>Block</label>
9
- <type>text</type>
 
10
  <visible>1</visible>
11
  <required>1</required>
12
- <value></value>
13
- </custom_option>
14
- <template>
15
- <label>Template</label>
16
- <type>text</type>
17
- <visible>1</visible>
18
- <required>1</required>
19
- <value></value>
20
- </template>
21
- <unset>
22
- <label>Unset(reference::block_alias)</label>
23
- <type>text</type>
24
- <visible>1</visible>
25
- <required>0</required>
26
- <value></value>
27
- </unset>
28
-
29
- </parameters>
30
- </easytabs_tab_template>
31
-
32
- <easytabs_tab_product_description type="easytabs/tab_product_description">
33
- <name>Easy Tab Product Desription Block</name>
34
- <description type="desc">Easy Tab Product Desription Block</description>
35
- <parameters>
36
- <template>
37
- <label>Template</label>
38
- <type>text</type>
39
- <visible>1</visible>
40
- <required>1</required>
41
- <value>easytabs/tab/catalog/product/view/description.phtml</value>
42
- </template>
43
- <unset>
44
- <label>Unset</label>
45
- <type>text</type>
46
- <visible>0</visible>
47
- <required>1</required>
48
- <value>product.info::description</value>
49
- </unset>
50
- </parameters>
51
- </easytabs_tab_product_description>
52
-
53
- <easytabs_tab_product_additional type="easytabs/tab_product_additional">
54
- <name>Easy Tab Additional Information Block</name>
55
- <description type="desc">Easy TabAdditional Information Block</description>
56
- <parameters>
57
- <template>
58
- <label>Template</label>
59
- <type>text</type>
60
- <visible>1</visible>
61
- <required>1</required>
62
- <value>easytabs/tab/catalog/product/view/attributes.phtml</value>
63
- </template>
64
- <unset>
65
- <label>Unset</label>
66
- <type>text</type>
67
- <visible>0</visible>
68
- <required>1</required>
69
- <value>product.info::additional</value>
70
- </unset>
71
- </parameters>
72
- </easytabs_tab_product_additional>
73
-
74
- <easytabs_tab_product_upsell type="easytabs/tab_product_upsell">
75
- <name>Easy Tab We Also Recommend Block</name>
76
- <description type="desc">Easy Tab We Also Recommend Block</description>
77
- <parameters>
78
- <template>
79
- <label>Template</label>
80
- <type>text</type>
81
- <visible>1</visible>
82
- <required>1</required>
83
- <value>catalog/product/list/upsell.phtml</value>
84
- </template>
85
- <unset>
86
- <label>Unset</label>
87
- <type>text</type>
88
- <visible>0</visible>
89
- <required>1</required>
90
- <value>product.info::upsell_products</value>
91
- </unset>
92
- </parameters>
93
- </easytabs_tab_product_upsell>
94
-
95
- <easytabs_tab_product_related type="easytabs/tab_product_related">
96
- <name>Easy Tab Related Products Block</name>
97
- <description type="desc">Easy Tab Related Products Block</description>
98
- <parameters>
99
- <template>
100
- <label>Template</label>
101
- <type>text</type>
102
- <visible>1</visible>
103
- <required>1</required>
104
- <value>easytabs/tab/catalog/product/related.phtml</value>
105
- </template>
106
- <unset>
107
- <label>Unset</label>
108
- <type>text</type>
109
- <visible>0</visible>
110
- <required>1</required>
111
- <value>right::catalog.product.related</value>
112
- </unset>
113
- </parameters>
114
- </easytabs_tab_product_related>
115
-
116
- <easytabs_tab_product_tags type="easytabs/tab_product_tags">
117
- <name>Easy Tab Products Tags Block</name>
118
- <description type="desc">Easy Tab Products Tags Block</description>
119
- <parameters>
120
- <template>
121
- <label>Template</label>
122
- <type>text</type>
123
- <visible>1</visible>
124
- <required>1</required>
125
- <value>easytabs/tab/tag/product/list.phtml</value>
126
- </template>
127
- <unset>
128
- <label>Unset</label>
129
- <type>text</type>
130
- <visible>0</visible>
131
- <required>1</required>
132
- <value>product.info.additional::product_tag_list</value>
133
- </unset>
134
- </parameters>
135
- </easytabs_tab_product_tags>
136
-
137
- <easytabs_tab_product_review type="easytabs/tab_product_review">
138
- <name>Easy Tab Product's Review Block</name>
139
- <description type="desc">Easy Tab Product's Review Block</description>
140
- <parameters>
141
- <template>
142
- <label>Template</label>
143
- <type>text</type>
144
- <visible>1</visible>
145
- <required>1</required>
146
- <value>easytabs/tab/review/product/view/list.phtml</value>
147
- </template>
148
- </parameters>
149
- </easytabs_tab_product_review>
150
-
151
- <easytabs_tab_cms type="easytabs/tab_cms">
152
- <name>Easy Tab CMS Static Block</name>
153
- <description type="desc">Easy Tab CMS Static Block</description>
154
- <parameters>
155
- <custom_option>
156
- <label>Identifier</label>
157
- <type>select</type>
158
- <visible>1</visible>
159
- <required>1</required>
160
- <value></value>
161
- <source_model>cms/mysql4_block_collection</source_model>
162
- </custom_option>
163
- <template>
164
- <label>Template</label>
165
- <type>text</type>
166
- <visible>1</visible>
167
- <required>1</required>
168
- <value>easytabs/tab/cms.phtml</value>
169
- </template>
170
- </parameters>
171
- </easytabs_tab_cms>
172
-
173
- <easytabs_tab_atribute type="easytabs/tab_attribute">
174
- <name>Easy Tab Attribute Block</name>
175
- <description type="desc">Easy Tab Attribute Block</description>
176
- <parameters>
177
- <custom_option>
178
- <label>Attribute Code</label>
179
- <type>select</type>
180
- <visible>1</visible>
181
- <required>1</required>
182
- <value></value>
183
- <source_model>easytabs/product_attribute_collection</source_model>
184
- </custom_option>
185
- <template>
186
- <label>Template</label>
187
- <type>text</type>
188
- <visible>1</visible>
189
- <required>1</required>
190
- <value>easytabs/tab/catalog/product/attribute.phtml</value>
191
- </template>
192
  </parameters>
193
- </easytabs_tab_atribute>
194
-
195
  </widgets>
1
  <?xml version="1.0"?>
2
  <widgets>
3
+ <easytabs type="easytabs/tabs">
4
+ <name>Easy Tabs </name>
5
+ <description type="desc">Easy Tabs</description>
6
  <parameters>
7
+ <filter_tabs>
8
+ <label>Tabs</label>
9
+ <type>multiselect</type>
10
+ <source_model>easytabs/config_tabs</source_model>
11
  <visible>1</visible>
12
  <required>1</required>
13
+ <value>10</value>
14
+ </filter_tabs>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  </parameters>
16
+ </easytabs>
 
17
  </widgets>
app/design/adminhtml/default/default/layout/tm/easytabs.xml CHANGED
@@ -24,6 +24,10 @@
24
  </block>
25
  </reference>
26
  </adminhtml_easytabs_index_edit>
 
 
 
 
27
 
28
  <adminhtml_easytabs_index_loadtaboptions>
29
  <block name="easytabs.tab.options" type="easytabs/adminhtml_tab_options" output="toHtml" />
24
  </block>
25
  </reference>
26
  </adminhtml_easytabs_index_edit>
27
+
28
+ <adminhtml_easytabs_index_loadTabOptions>
29
+ <block name="easytabs.tab.options" type="easytabs/adminhtml_tab_options" output="toHtml" />
30
+ </adminhtml_easytabs_index_loadTabOptions>
31
 
32
  <adminhtml_easytabs_index_loadtaboptions>
33
  <block name="easytabs.tab.options" type="easytabs/adminhtml_tab_options" output="toHtml" />
app/design/adminhtml/default/default/layout/tmcore.xml CHANGED
@@ -12,6 +12,7 @@
12
  </adminhtml_tmcore_module_grid>
13
 
14
  <adminhtml_tmcore_module_manage>
 
15
  <reference name="content">
16
  <block type="tmcore/adminhtml_module_manage" name="module.manage"/>
17
  </reference>
@@ -54,7 +55,7 @@
54
  </block>
55
  </reference>
56
  </adminhtml_tmcore_support_edit>
57
-
58
  <adminhtml_tmcore_support_new>
59
  <update handle="adminhtml_tmcore_support_edit"/>
60
  </adminhtml_tmcore_support_new>
12
  </adminhtml_tmcore_module_grid>
13
 
14
  <adminhtml_tmcore_module_manage>
15
+ <update handle="tmcore_popup"/>
16
  <reference name="content">
17
  <block type="tmcore/adminhtml_module_manage" name="module.manage"/>
18
  </reference>
55
  </block>
56
  </reference>
57
  </adminhtml_tmcore_support_edit>
58
+
59
  <adminhtml_tmcore_support_new>
60
  <update handle="adminhtml_tmcore_support_edit"/>
61
  </adminhtml_tmcore_support_new>
app/design/adminhtml/default/default/template/tmcore/ticket/edit/form/element/theard/content.phtml CHANGED
@@ -17,7 +17,9 @@ document.observe("dom:loaded", function() {
17
  $theards = $this->getTheards();
18
  $previosTheard = current($theards);
19
  $diff = array();
20
- foreach ($theards as $_theard): ?>
 
 
21
  <li>
22
  <strong>
23
  <?php echo $this->getTheardOwnerTitle($_theard) ?>
@@ -59,7 +61,8 @@ document.observe("dom:loaded", function() {
59
  });
60
 
61
  </script>
62
- <?php if ($_theard['status'] !== $previosTheard['status']) :?>
 
63
  <br/><small> <?php echo $this->helper('helpmate')->__(
64
  'Status has been changed from %s to %s',
65
  $this->getTheardStatus($previosTheard),
@@ -68,7 +71,8 @@ document.observe("dom:loaded", function() {
68
  ) ?>
69
  </small>
70
  <?php endif;
71
- if ($_theard['priority'] !== $previosTheard['priority']) : ?>
 
72
  <br/><small><?php echo $this->helper('helpmate')->__(
73
  'Priority has been changed from %s to %s',
74
  $this->getTheardPriority($previosTheard),
@@ -76,7 +80,8 @@ document.observe("dom:loaded", function() {
76
  );?>
77
  </small>
78
  <?php endif;
79
- if ($_theard['department_id'] !== $previosTheard['department_id']) : ?>
 
80
  <br/><small><?php echo $this->helper('helpmate')->__(
81
  'Department has been changed from %s to %s',
82
  $this->getTheardDepartment($previosTheard),
17
  $theards = $this->getTheards();
18
  $previosTheard = current($theards);
19
  $diff = array();
20
+ foreach ($theards as $_theard):
21
+ $_theard = $_theard->getData();
22
+ ?>
23
  <li>
24
  <strong>
25
  <?php echo $this->getTheardOwnerTitle($_theard) ?>
61
  });
62
 
63
  </script>
64
+ <?php if (isset($_theard['status']) && isset($previosTheard['status']) &&
65
+ $_theard['status'] !== $previosTheard['status']) :?>
66
  <br/><small> <?php echo $this->helper('helpmate')->__(
67
  'Status has been changed from %s to %s',
68
  $this->getTheardStatus($previosTheard),
71
  ) ?>
72
  </small>
73
  <?php endif;
74
+ if (isset($_theard['priority']) && isset($previosTheard['priority']) &&
75
+ $_theard['priority'] !== $previosTheard['priority']) : ?>
76
  <br/><small><?php echo $this->helper('helpmate')->__(
77
  'Priority has been changed from %s to %s',
78
  $this->getTheardPriority($previosTheard),
80
  );?>
81
  </small>
82
  <?php endif;
83
+ if (isset($_theard['department_id']) && isset($previosTheard['department_id']) &&
84
+ $_theard['department_id'] !== $previosTheard['department_id']) : ?>
85
  <br/><small><?php echo $this->helper('helpmate')->__(
86
  'Department has been changed from %s to %s',
87
  $this->getTheardDepartment($previosTheard),
app/design/frontend/base/default/layout/tm/core.xml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" ?>
2
+ <layout>
3
+ <default>
4
+ <reference name="head">
5
+ <action method="addJs" ifconfig="tmcore/jslibs/jquery">
6
+ <script>lib/jquery/jquery-1.10.2.min.js</script>
7
+ </action>
8
+ <action method="addJs" ifconfig="tmcore/jslibs/jquery">
9
+ <script>lib/jquery/noconflict.js</script>
10
+ </action>
11
+ </reference>
12
+ </default>
13
+ </layout>
app/design/frontend/base/default/template/tm/easytabs/tab/catalog/product/related.phtml CHANGED
@@ -39,7 +39,12 @@
39
  <?php else: ?>
40
  <span class="checkbox-container">&nbsp;</span>
41
  <?php endif; ?>
42
- <a href="<?php echo $_item->getProductUrl() ?>"><img src="<?php echo $this->helper('catalog/image')->init($_item, 'thumbnail')->resize(50) ?>" alt="<?php echo $this->htmlEscape($_item->getName()) ?>" width="50" height="50" /></a>
 
 
 
 
 
43
  </div>
44
  <div class="product-details">
45
  <a href="<?php echo $_item->getProductUrl() ?>"><?php echo $this->htmlEscape($_item->getName()) ?></a>
@@ -52,9 +57,9 @@
52
  <?php endforeach ?>
53
  </ol>
54
  <script type="text/javascript">
55
- <!--
56
  $$('.related-checkbox').each(function(elem){
57
- Event.observe(elem, 'click', addRelatedToProduct)
58
  });
59
 
60
  var relatedProductsCheckFlag = false;
@@ -85,6 +90,6 @@ function addRelatedToProduct(){
85
  $('related-products-field').value = values.join(',');
86
  }
87
  }
88
- //-->
89
  </script>
90
- <?php endif ?>
39
  <?php else: ?>
40
  <span class="checkbox-container">&nbsp;</span>
41
  <?php endif; ?>
42
+ <a href="<?php echo $_item->getProductUrl() ?>"
43
+ ><img src="<?php echo $this->helper('catalog/image')->init($_item, 'thumbnail')->resize(50) ?>"
44
+ srcset="<?php echo $this->helper('catalog/image')->init($_item, 'thumbnail')->resize(50) ?> 1x, <?php echo $this->helper('catalog/image')->init($_item, 'thumbnail')->resize(50 * 2) ?> 2x"
45
+ alt="<?php echo $this->htmlEscape($_item->getName()) ?>"
46
+ width="50" height="50"
47
+ /></a>
48
  </div>
49
  <div class="product-details">
50
  <a href="<?php echo $_item->getProductUrl() ?>"><?php echo $this->htmlEscape($_item->getName()) ?></a>
57
  <?php endforeach ?>
58
  </ol>
59
  <script type="text/javascript">
60
+ //<![CDATA[
61
  $$('.related-checkbox').each(function(elem){
62
+ Event.observe(elem, 'click', addRelatedToProduct);
63
  });
64
 
65
  var relatedProductsCheckFlag = false;
90
  $('related-products-field').value = values.join(',');
91
  }
92
  }
93
+ //]]>
94
  </script>
95
+ <?php endif ?>
app/design/frontend/base/default/template/tm/easytabs/tab/catalog/product/sameattrvalue.phtml ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $_productCollection = $this->getProductCollection();
3
+ $_helper = $this->helper('catalog/output');
4
+ ?>
5
+ <?php if ($_productCollection->count()) : ?>
6
+ <div class="box-collateral block-same-attr-value">
7
+ <?php $_collectionSize = $_productCollection->count() ?>
8
+ <?php $_columnCount = $this->getColumnsCount(); ?>
9
+ <?php $i=0; foreach ($_productCollection as $_product): ?>
10
+ <?php if ($i++%$_columnCount==0): ?>
11
+ <ul class="products-grid">
12
+ <?php endif ?>
13
+ <li class="item<?php if(($i-1)%$_columnCount==0): ?> first<?php elseif($i%$_columnCount==0): ?> last<?php endif; ?>">
14
+ <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image">
15
+ <img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(200); ?>" width="200" height="200" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" />
16
+ </a>
17
+ <h3 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></a></h3>
18
+ <?php echo $this->getReviewsSummaryHtml($_product, 'short') ?>
19
+ <?php echo $this->getPriceHtml($_product, true, '-related-customer') ?>
20
+ <div class="actions">
21
+ <?php if($_product->isSaleable()): ?>
22
+ <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button>
23
+ <?php else: ?>
24
+ <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
25
+ <?php endif; ?>
26
+ <ul class="add-to-links">
27
+ <?php if ($this->helper('wishlist')->isAllow()) : ?>
28
+ <li class="li-wishlist"><a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
29
+ <?php endif; ?>
30
+ <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?>
31
+ <li class="li-compare"><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
32
+ <?php endif; ?>
33
+ </ul>
34
+ </div>
35
+ </li>
36
+ <?php if ($i%$_columnCount==0 || $i==$_collectionSize): ?>
37
+ </ul>
38
+ <?php endif ?>
39
+ <?php endforeach ?>
40
+ <script type="text/javascript">
41
+ decorateGeneric($$('.block-same-attr-value ul.products-grid'), ['odd','even','first','last']);
42
+ </script>
43
+ <style type="text/css">
44
+ .block-same-attr-value .products-grid li.item {
45
+ width: 23%;
46
+ }
47
+ </style>
48
+ </div>
49
+ <?php endif; ?>
app/design/frontend/base/default/template/tm/easytabs/tab/review/product/view/list.phtml CHANGED
@@ -1,65 +1,9 @@
1
- <?php
2
- /**
3
- * Magento
4
- *
5
- * NOTICE OF LICENSE
6
- *
7
- * This source file is subject to the Academic Free License (AFL 3.0)
8
- * that is bundled with this package in the file LICENSE_AFL.txt.
9
- * It is also available through the world-wide-web at this URL:
10
- * http://opensource.org/licenses/afl-3.0.php
11
- * If you did not receive a copy of the license and are unable to
12
- * obtain it through the world-wide-web, please send an email
13
- * to license@magentocommerce.com so we can send you a copy immediately.
14
- *
15
- * DISCLAIMER
16
- *
17
- * Do not edit or add to this file if you wish to upgrade Magento to newer
18
- * versions in the future. If you wish to customize Magento for your
19
- * needs please refer to http://www.magentocommerce.com for more information.
20
- *
21
- * @category design_default
22
- * @package Mage
23
- * @copyright Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
24
- * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
- */
26
  ?>
27
 
28
- <?php $_items = $this->getReviewsCollection()->getItems();?>
29
- <?php if (count($_items)):?>
30
- <div class="collateral-box dedicated-review-box" id="customer-reviews">
31
-
32
- <?php echo $this->getChildHtml('toolbar') ?>
33
-
34
- <ol style="margin-top:15px;">
35
- <?php foreach ($_items as $_review):?>
36
- <li>
37
- <strong><?php echo $this->htmlEscape($_review->getTitle()) ?></strong> <?php echo $this->__('Review by %s', $this->htmlEscape($_review->getNickname())) ?>
38
- <table class="ratings-list ratings-table" cellspacing="0">
39
- <tbody>
40
- <?php foreach ($_review->getRatingVotes() as $_vote): ?>
41
- <tr>
42
- <td class="label"><strong><?php echo $_vote->getRatingCode() ?></strong></td>
43
- <td>
44
- <div class="rating-box">
45
- <div class="rating" style="width: <?php echo $_vote->getPercent() ?>%;"></div>
46
- </div>
47
- </td>
48
- </tr>
49
- <?php endforeach; ?>
50
- </tbody>
51
- </table>
52
- <p><?php echo nl2br($this->htmlEscape($_review->getDetail())) ?> <?php echo $this->__('(Posted on %s)', $this->formatDate($_review->getCreatedAt()), 'long') ?></p>
53
- </li>
54
- <?php endforeach; ?>
55
- </ol>
56
-
57
- <?php echo $this->getChildHtml('toolbar') ?>
58
- </div>
59
- <?php endif;?>
60
-
61
- <br/>
62
-
63
  <?php echo $this->getChildHtml('review_form') ?>
64
 
65
  <script type="text/javascript">
1
+ <?php echo $this->getLayout()
2
+ ->createBlock('review/product_view_list')
3
+ ->setTemplate('review/product/view/list.phtml')
4
+ ->toHtml();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  ?>
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  <?php echo $this->getChildHtml('review_form') ?>
8
 
9
  <script type="text/javascript">
app/design/frontend/base/default/template/tm/easytabs/tabs.phtml CHANGED
@@ -17,18 +17,27 @@
17
  <ul class="easytabs">
18
  <?php foreach ($tabs as $_index => $_tab) : ?>
19
  <li>
20
- <a href="#product_tabs_<?php echo $_tab['alias'] ?>"
21
- class="easytabs-anchor easytabs-a easytabs-a-tab"
22
- ><?php echo $this->__($_tab['title']); ?></a>
 
 
 
 
 
 
 
 
 
23
  </li>
24
  <?php endforeach; ?>
25
  </ul>
26
  </div>
27
  <div class="padder easytabs-content-wrapper">
28
  <?php foreach ($tabs as $_index => $_tab) : ?>
29
- <a href="#product_tabs_<?php echo $_tab['alias'] ?>"
30
  class="easytabs-anchor easytabs-a easytabs-a-accordion"
31
- ><?php echo $this->__($_tab['title']); ?></a>
32
  <div class="easytabs-content"
33
  id="product_tabs_<?php echo $_tab['alias'] ?>_contents"
34
  style="display:none">
17
  <ul class="easytabs">
18
  <?php foreach ($tabs as $_index => $_tab) : ?>
19
  <li>
20
+ <?php if ($this->getUpdateUrlHash()) : ?>
21
+ <a href="#product_tabs_<?php echo $_tab['alias'] ?>" class="easytabs-anchor easytabs-a easytabs-a-tab">
22
+ <?php echo $this->__($_tab['title']); ?>
23
+ </a>
24
+ <?php else : ?>
25
+ <span data-href="#product_tabs_<?php echo $_tab['alias'] ?>" class="easytabs-anchor easytabs-a easytabs-a-tab">
26
+ <?php if ($this->getShowAnchor()) : ?>
27
+ <a href="#product_tabs_<?php echo $_tab['alias'] ?>" class="easytabs-anchor-icon">#</a>
28
+ <?php endif ?>
29
+ <?php echo $this->__($_tab['title']); ?>
30
+ </span>
31
+ <?php endif ?>
32
  </li>
33
  <?php endforeach; ?>
34
  </ul>
35
  </div>
36
  <div class="padder easytabs-content-wrapper">
37
  <?php foreach ($tabs as $_index => $_tab) : ?>
38
+ <span data-href="#product_tabs_<?php echo $_tab['alias'] ?>"
39
  class="easytabs-anchor easytabs-a easytabs-a-accordion"
40
+ ><?php echo $this->__($_tab['title']); ?></span>
41
  <div class="easytabs-content"
42
  id="product_tabs_<?php echo $_tab['alias'] ?>_contents"
43
  style="display:none">
app/locale/en_US/TM_EasyTabs.csv CHANGED
@@ -1,5 +1,3 @@
1
- "General","General"
2
- "Enable easy flags","Enable easy flags"
3
  "Check items to add to the cart or","Check items to add to the cart or"
4
  "Add to Wishlist","Add to Wishlist"
5
  "Review by %s","Review by %s"
@@ -8,4 +6,6 @@
8
  "Add Your Tags:","Add Your Tags:"
9
  "Add Tags","Add Tags"
10
  "Use spaces to separate tags. Use single quotes (') for phrases.","Use spaces to separate tags. Use single quotes (') for phrases."
11
- "Email to a Friend","Email to a Friend"
 
 
 
 
1
  "Check items to add to the cart or","Check items to add to the cart or"
2
  "Add to Wishlist","Add to Wishlist"
3
  "Review by %s","Review by %s"
6
  "Add Your Tags:","Add Your Tags:"
7
  "Add Tags","Add Tags"
8
  "Use spaces to separate tags. Use single quotes (') for phrases.","Use spaces to separate tags. Use single quotes (') for phrases."
9
+ "Email to a Friend","Email to a Friend"
10
+ "Update url when switch between tabs","Update url when switch between tabs"
11
+ "Show tab anchor when hovering tab","Show tab anchor when hovering tab"
app/locale/es_ES/TM_Core.csv ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Modules Information","Módulos de Información"
2
+ "Open Extension Page","Abrir página de extensión"
3
+ "Please <a href='http://templates-master.com/contacts' onclick='window.open(this.href); return false;'>contact us</a>, if you have some issues with one of our modules.","Por favor <a href='http://templates-master.com/contacts' onclick='window.open(this.href); regresa false;'>contact us</a>, si tienes algun problema con uno de nuestros módulos."
4
+ "Troubleshooting","Solución de problemas"
5
+ "Changelog","Cambios"
6
+ "Download Latest Version","Descargar la última versión"
7
+ "Download","Descargar"
8
+ "Manage","Gestionar"
9
+ "Upgrades are not installed","Las actualizaciones no se instalan"
10
+ "New version is available","La nueva versión está disponible"
11
+ "Upgrade Information","Actualizar información"
12
+ "Activate this checkbox, if you want to skip the upgrade operations","Activar esta casilla si deseas omitir las operaciones de actualización"
13
+ "Module data will be upgraded from %s to %s at the following stores","Los datos de los módulos se actualizarán de % s para % s en las siguientes tiendas"
14
+ "Install and Reinstall Information","Instalar y reinstalar Información"
15
+ "Identity Key","Clave de Identidad"
16
+ "Get your identity key at <a href=""%s"" title=""%s"" target=""_blank"">%s</a>","Obtén tu clave de identidad en <a href=""%s"" title=""%s"" target=""_blank""> % s < / a>"
17
+ "Select stores to install or reinstall module","Seleccione las tiendas para instalar o reinstalar módulo"
18
+ "Module is already installed at following stores","El módulo ya está instalado en las siguientes tiendas"
19
+ "Manage Module","Gestionar Módulo"
20
+ "Code","Código"
21
+ "Local Version","Versión local"
22
+ "Latest Version","La última versión"
23
+ "Version Status","Estado de la versión "
24
+ "Run","Ejecutar"
25
+ "Upgrade and Install/Reinstall %s %s (Data version %s)","Actualizar e instalar / reinstalar % s % s (versión de datos % s) "
26
+ "Install or Reinstall %s %s (Data version %s)","Instalar o reinstalar % s % s (% s Versión de datos)"
27
+ "Install %s %s","Instalar % s % s"
28
+ "Modules","Módulos"
29
+ "The module has been saved","El módulo se ha guardado"
30
+ "updated","Actualizado"
31
+ "outdated","Desactualizado"
32
+ "deprecated","Desaprobado"
33
+ "Identity key is required","Se necesita una clave de identidad"
34
+ "Response error: %s","Respuesta de error: % s"
35
+ "Sorry, try again in five minutes. Validation response parsing error: %s","Lo sentimos, inténtelo de nuevo en cinco minutos. Error de validación de análisis de respuesta: % s"
36
+ "Module code is required","Se requiere código de módulo"
37
+ "Domain name is required","Se requiere un nombre de dominio"
38
+ "Identity key is not valid","Clave de identidad no es válida"
39
+ "%s module is not found in purchase history","% s módulo no se encuentra en el historial de compras"
40
+ "%s activations limit reached. Please <a href=""%s"" title=""%s"" target=""_blank"">buy the product</a> to activate more domains","%s límite de activaciones alcanzadas. Por favor, <a href=""%s"" title=""%s"" target=""_blank"">compre el producto </a> para activar más dominios"
41
+ "Module ""%s"" is not activated for ""%s"" domain. Please, <a href=""%s"" title=""%s"" target=""_blank"">activate</a> it from our site. %s activations left","Módulo ""%s"" no está activo para el ""%s"" dominio. Por favor, <a href=""%s"" title=""%s"" target=""_blank"">activalo</a> desde nuestro sitio. %s activaciones que quedan"
42
+ "You are trying to use %s activation(s) for %s module. Only %s activations left. Please <a href=""%s"" title=""%s"">buy the product</a> to activate more domains","Estas tratando de usar %s activaciones para %s módulo. Sólo quedan %s activaciones. Por favor, <a href=""%s"" title=""%s"">compre el producto</a> para activar más dominios"
43
+ "Installed products","Productos instalados"
44
+ "Product promotions and discounts","Promociones de productos y descuentos"
45
+ "New Products","Nuevos Productos"
46
+ "Product updates","Actualizaciones de productos"
47
+ "Other","Otros"
48
+ "News to show in notification bar","Noticias para mostrar en la barra de notificación"
app/locale/es_ES/TM_EasyTabs.csv ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ "General","General"
2
+ "Enable easy tabs","Habilitar banderas fáciles "
3
+ "Check items to add to the cart or","Comprueba los artículos para añadirlos a la cesta o"
4
+ "Add to Wishlist","Agregar a la lista de peticiones"
5
+ "Review by %s","Revisado por % s"
6
+ "(Posted on %s)","(Publicado en% s)"
7
+ "Other people marked this product with these tags:","Otras personas marcaron este producto con las siguientes etiquetas:"
8
+ "Add Your Tags:","Agregar tus etiquetas:"
9
+ "Add Tags","Agregar etiquetas"
10
+ "Use spaces to separate tags. Use single quotes (') for phrases.","Utilizar espacios para separar las etiquetas. Usar comillas simples ( ') para frases."
11
+ "Email to a Friend","Enviar a un amigo"
app/locale/fr_FR/TM_Core.csv ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Modules Information","Information sur les modules"
2
+ "Open Extension Page","Page d'extension"
3
+ "Please <a href='http://templates-master.com/contacts' onclick='window.open(this.href); return false;'>contact us</a>, if you have some issues with one of our modules.","Veuillez <a href='http://templates-master.com/contacts' onclick='window.open(this.href); return false;'>nous contacter</a>, si vous rencontrez des problèmes avec nos modules"
4
+ "Troubleshooting","Dépannage"
5
+ "Changelog","Changer le login"
6
+ "Download Latest Version","Télécharger la dernière version"
7
+ "Download","Télécharger"
8
+ "Manage","Gérer"
9
+ "Upgrades are not installed","Les mises à jour ne sont pas installées"
10
+ "New version is available","Une nouvelle version est disponible"
11
+ "Upgrade Information","Information de mise à jour"
12
+ "Activate this checkbox, if you want to skip the upgrade operations","Activer cette boîte si vous ne souhaitez pas effectuer les opérations de mise à jour"
13
+ "Module data will be upgraded from %s to %s at the following stores","Les données de module vont être mises à jour de %s à %s dans les magasins suivants"
14
+ "Install and Reinstall Information","Information d'Installation et de Réinstallation"
15
+ "Identity Key","Clé d'identification"
16
+ "Get your identity key at <a href=""%s"" title=""%s"" target=""_blank"">%s</a>","Recevez votre clé d'idendification <a href=""%s"" title=""%s"" target=""_blank"">%s</a>"
17
+ "Select stores to install or reinstall module","Sélectionnez des magasins pour installer ou réinstaller le module"
18
+ "Module is already installed at following stores","Le module est déjà installé dans les magasins suivants"
19
+ "Manage Module","Gérer le module"
20
+ "Code","Code"
21
+ "Local Version","Version locale"
22
+ "Latest Version","Dernière version"
23
+ "Version Status","Statut de la version"
24
+ "Run","En marche"
25
+ "Upgrade and Install/Reinstall %s %s (Data version %s)","Mise à jour et Installer/Réinstallr %s %s (Version de données %s)"
26
+ "Install or Reinstall %s %s (Data version %s)","Installer ou Reinstaller %s %s (Verion de données %s)"
27
+ "Install %s %s","Installer %s %s"
28
+ "Modules","Modules"
29
+ "The module has been saved","Le module a été enregistré"
30
+ "updated","Mis à jour"
31
+ "outdated","Pas à jour"
32
+ "deprecated","Obsolète"
33
+ "Identity key is required","La clé d'identification est requise"
34
+ "Response error: %s","Réponse d'erreur: %s"
35
+ "Sorry, try again in five minutes. Validation response parsing error: %s","Veuillez réessayer dans 5 minutes. Validation du message d'analyse d'erreur: %s"
36
+ "Module code is required","Le code du module est requis"
37
+ "Domain name is required","Le nom de domaine est requis"
38
+ "Identity key is not valid","La clé d'identification n'est pas valide"
39
+ "%s module is not found in purchase history","%s le module n'a pas été trouvé dans l'historique d'achat"
40
+ "%s activations limit reached. Please <a href=""%s"" title=""%s"" target=""_blank"">buy the product</a> to activate more domains","%s Limite d'activations atteinte. Aller sur <a href=""%s"" title=""%s"" target=""_blank"">acheter le produit</a> pour activer plus de domaines"
41
+ "Module ""%s"" is not activated for ""%s"" domain. Please, <a href=""%s"" title=""%s"" target=""_blank"">activate</a> it from our site. %s activations left","Le module ""%s"" n'est pas activé pour le domaine ""%s"". Veuillez l' <a href=""%s"" title=""%s"" target=""_blank"">activer</a> depuis notre site. %s activations restantes."
42
+ "You are trying to use %s activation(s) for %s module. Only %s activations left. Please <a href=""%s"" title=""%s"">buy the product</a> to activate more domains","Vou essayer d'utiliser la/les activation/s %s pour le module %s . Seulement %s activations restantes. Veuillez <a href=""%s"" title=""%s"">acheter le produit</a> pour activer plus de domaines."
43
+ "Installed products","Produits installés"
44
+ "Product promotions and discounts","Promotions et remises sur les produits"
45
+ "New Products","Nouveaux produits"
46
+ "Product updates","Mises à jour du produit"
47
+ "Other","Autre"
48
+ "News to show in notification bar","Actualités à montrer dans la barre de notification"
app/locale/fr_FR/TM_EasyTabs.csv ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ "General","Général"
2
+ "Enable easy tabs","Activer les flags simples"
3
+ "Check items to add to the cart or","Contrôler les objets à ajouter au panier ou"
4
+ "Add to Wishlist","Ajouter à la liste de souhaits"
5
+ "Review by %s","Evalué par %"
6
+ "(Posted on %s)","(Publié sur %)"
7
+ "Other people marked this product with these tags:","D'autres personnes ont identifié ce produit avec ces tags: "
8
+ "Add Your Tags:","Ajouter vos Tags:"
9
+ "Add Tags","Ajouter des Tags:"
10
+ "Use spaces to separate tags. Use single quotes (') for phrases.","Utiliser des espaces pour séparer les tags. Entrer une simple citation (') pour les phrases."
11
+ "Email to a Friend","Transmettre par courriel à un ami"
app/locale/it_IT/TM_Core.csv ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Modules Information","Informazioni Modulo"
2
+ "Open Extension Page","Apri Pagina Estensione"
3
+ "Please <a href='http://templates-master.com/contacts' onclick='window.open(this.href); return false;'>contact us</a>, if you have some issues with one of our modules.","Per favore <a href='http://templates-master.com/contacts' onclick='window.open(this.href); return false;'>contattaci</a>, se hai dei problemi con uno dei nostri moduli."
4
+ "Troubleshooting","Risoluzione Problemi"
5
+ "Changelog","Changelog"
6
+ "Download Latest Version","Scarica Ultima Versione"
7
+ "Download","Download"
8
+ "Manage","Gestisci"
9
+ "Upgrades are not installed","Upgrade non installati"
10
+ "New version is available","Nuova versione disponibile"
11
+ "Upgrade Information","Informazioni Upgrade"
12
+ "Activate this checkbox, if you want to skip the upgrade operations","Attiva questa casella, se vuoi saltare le operazioni di upgrade"
13
+ "Module data will be upgraded from %s to %s at the following stores","Verrà effettuato l'upgrade dei moduli da %s a %s ai seguenti negozi"
14
+ "Install and Reinstall Information","Installa e Reinstalla Informazioni"
15
+ "Identity Key","Chiave Identità"
16
+ "Get your identity key at <a href=""%s"" title=""%s"" target=""_blank"">%s</a>","Ottieni la tua chiave identità a <a href=""%s"" title=""%s"" target=""_blank"">%s</a>"
17
+ "Select stores to install or reinstall module","Seleziona negozi per installare o reinstallare il modulo"
18
+ "Module is already installed at following stores","Modulo già installato nei seguenti negozi"
19
+ "Manage Module","Gestisci Modulo"
20
+ "Code","Codice"
21
+ "Local Version","Versione Locale"
22
+ "Latest Version","Ultima Versione"
23
+ "Version Status","Stato Versione"
24
+ "Run","Esegui"
25
+ "Upgrade and Install/Reinstall %s %s (Data version %s)","Fai l'Upgrade e Installa/Reinstalla %s %s (Versione Dati %s)"
26
+ "Install or Reinstall %s %s (Data version %s)","Installa o Reinstalla %s %s (Versione Dati %s)"
27
+ "Install %s %s","Installa %s %s"
28
+ "Modules","Moduli"
29
+ "The module has been saved","Il modulo è stato salvato"
30
+ "updated","aggiornato"
31
+ "outdated","obsoleto"
32
+ "deprecated","deprecato"
33
+ "Identity key is required","Chiave identità necessaria"
34
+ "Response error: %s","Errore Risposta: %s"
35
+ "Sorry, try again in five minutes. Validation response parsing error: %s","Spiacente, riprova tra cinque minuti. Errore parsing risposta validazione: %s"
36
+ "Module code is required","Codice modulo necessario"
37
+ "Domain name is required","Nome dominio richiesto"
38
+ "Identity key is not valid","Chiave identità non valida"
39
+ "%s module is not found in purchase history","Modulo %s non trovato nello storico acquisti"
40
+ "%s activations limit reached. Please <a href=""%s"" title=""%s"" target=""_blank"">buy the product</a> to activate more domains","limite attivazioni %s raggiunto. Per favore <a href=""%s"" title=""%s"" target=""_blank"">acquista il prodotto</a> per attivare più domini"
41
+ "Module ""%s"" is not activated for ""%s"" domain. Please, <a href=""%s"" title=""%s"" target=""_blank"">activate</a> it from our site. %s activations left","Modulo ""%s"" non attivato per il dominio ""%s"". Per favore, <a href=""%s"" title=""%s"" target=""_blank"">attivalo</a> dal nostro sito. %s attivazioni rimaste"
42
+ "You are trying to use %s activation(s) for %s module. Only %s activations left. Please <a href=""%s"" title=""%s"">buy the product</a> to activate more domains","Stai cercando di utilizzare %s attivazione/i per il modulo %s. Solo %s attivazioni rimaste. Per favore <a href=""%s"" title=""%s"">acquista il prodotto</a> per attivare più domini"
43
+ "Installed products","Prodotti installati"
44
+ "Product promotions and discounts","Promozioni prodotto e sconti"
45
+ "New Products","Nuovi Prodotti"
46
+ "Product updates","Aggiornamenti prodotto"
47
+ "Other","Altro"
48
+ "News to show in notification bar","News da mostrare nella barra notifiche"
app/locale/it_IT/TM_EasyTabs.csv ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ "General","Generale"
2
+ "Enable easy tabs","Attiva easy flags"
3
+ "Check items to add to the cart or","Controlla oggetti da aggiungere al carrello o"
4
+ "Add to Wishlist","Aggiungi alla Lista dei Desideri"
5
+ "Review by %s","Recensione di %s"
6
+ "(Posted on %s)","(Pubblicato su %s)"
7
+ "Other people marked this product with these tags:","Altre persone hanno marcato il prodotto con queste tag:"
8
+ "Add Your Tags:","Aggiungi le Tue Tag:"
9
+ "Add Tags","Aggiungi Tag"
10
+ "Use spaces to separate tags. Use single quotes (') for phrases.","Usa gli spazi per separare le tag. usa gli apici (') per le frasi."
11
+ "Email to a Friend","Invia una Email ad un amico"
app/locale/nl_NL/TM_Core.csv ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Modules Information","Modules Informatie"
2
+ "Open Extension Page","Open Extensie Pagina"
3
+ "Please <a href='http://templates-master.com/contacts' onclick='window.open(this.href); return false;'>contact us</a>, if you have some issues with one of our modules.","Gelieve <a href='http://templates-master.com/contacts' onclick='window.open(this.href); return false;'>contacteer ons</a>, indien je problemen hebt met een van onze modules."
4
+ "Troubleshooting","Probleemoplossing"
5
+ "Changelog","Changelog"
6
+ "Download Latest Version","Download de laatste versie"
7
+ "Download","Download"
8
+ "Manage","Beheer"
9
+ "Upgrades are not installed","Upgrades zijn niet geinstalleerd"
10
+ "New version is available","Nieuwe versie werd geinstalleerd"
11
+ "Upgrade Information","Upgrade Informatie"
12
+ "Activate this checkbox, if you want to skip the upgrade operations","Activeer dit vakje indien je deze upgrade handelingen wil overslaan"
13
+ "Module data will be upgraded from %s to %s at the following stores","data Module zal geupdatet worden %s to %s in de volgende winkels"
14
+ "Install and Reinstall Information","Installeer en herinstalleer Informatie"
15
+ "Identity Key","Identificatie Sleutel"
16
+ "Get your identity key at <a href=""%s"" title=""%s"" target=""_blank"">%s</a>","Krijg je identificatiesleutel bij <a href=""%s"" title=""%s"" target=""_blank"">%s</a>"
17
+ "Select stores to install or reinstall module","Selecteer winkels om de module te installeren of te herinstalleren"
18
+ "Module is already installed at following stores","Module is reeds geinstalleerd in de volgende winkels"
19
+ "Manage Module","Beheer Module"
20
+ "Code","Code"
21
+ "Local Version","Locale Versie"
22
+ "Latest Version","Laatste Versie"
23
+ "Version Status","Versie Status"
24
+ "Run","Run"
25
+ "Upgrade and Install/Reinstall %s %s (Data version %s)","Upgrade en Installeer/Herinstalleer %s %s (Data versie %s)"
26
+ "Install or Reinstall %s %s (Data version %s)","Installeer or Herinstalleer %s %s (Data versie %s)"
27
+ "Install %s %s","Installeer %s %s"
28
+ "Modules","Modules"
29
+ "The module has been saved","De module werd opgeslagen"
30
+ "updated","geupdated"
31
+ "outdated","verouderd"
32
+ "deprecated","deprecated"
33
+ "Identity key is required","Identiteits sleutel is vereist"
34
+ "Response error: %s","Respons fout: %s"
35
+ "Sorry, try again in five minutes. Validation response parsing error: %s","Sorry, probeer opnieuw binnen vijf minuten. Validatie respons parsing fout: %s"
36
+ "Module code is required","Module code is vereist"
37
+ "Domain name is required","Domein naam is vereist"
38
+ "Identity key is not valid","Identiteits sleutel is niet geldig"
39
+ "%s module is not found in purchase history","%s module word niet gevonden in de aankoop geschiedenis"
40
+ "%s activations limit reached. Please <a href=""%s"" title=""%s"" target=""_blank"">buy the product</a> to activate more domains","%s activatie limiet bereikt. Gelieve <a href=""%s"" title=""%s"" target=""_blank"">het product te kopen</a>om meer domeinen te activeren."
41
+ "Module ""%s"" is not activated for ""%s"" domain. Please, <a href=""%s"" title=""%s"" target=""_blank"">activate</a> it from our site. %s activations left","Module ""%s"" is niet geactiveerd voor domein ""%s"". Gelieve, <a href=""%s"" title=""%s"" target=""_blank"">te activeren</a> van onze site. %s activaties over"
42
+ "You are trying to use %s activation(s) for %s module. Only %s activations left. Please <a href=""%s"" title=""%s"">buy the product</a> to activate more domains","Je probeert %s activatie(s)te gebruiken voor %s module. Nog %s activaties over. Gelieve <a href=""%s"" title=""%s"">het product te kopen </a> om meer domeinen te activeren"
43
+ "Installed products","Geinstalleerde producten"
44
+ "Product promotions and discounts","Product promoties en kortingen"
45
+ "New Products","Nieuwe Producten"
46
+ "Product updates","Product updates"
47
+ "Other","Andere"
48
+ "News to show in notification bar","Nieuws te laten zien in de notificatiebalk"
app/locale/nl_NL/TM_EasyTabs.csv ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ "General","Algemeen"
2
+ "Enable easy tabs","Maak easy tabs mogelijk"
3
+ "Check items to add to the cart or","Check items om aan het winkelwagentje toe te voegen of"
4
+ "Add to Wishlist","Voeg toe aan het verlanglijstje"
5
+ "Review by %s","Beoordeling door %s"
6
+ "(Posted on %s)","(Geplaatst op %s)"
7
+ "Other people marked this product with these tags:","Andere mensen hebben dit product aangeduid met deze tags:"
8
+ "Add Your Tags:","Voeg je Tags toe:"
9
+ "Add Tags","VoegTags toe"
10
+ "Use spaces to separate tags. Use single quotes (') for phrases.","Gebruik spaties om tags te scheiden. Gebruik enkele aanhalingstekens voor(') zinnen. "
11
+ "Email to a Friend","Email naar een vriend"
app/locale/pt_PT/TM_Core.csv ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Modules Information","Informações de módulos"
2
+ "Open Extension Page","Página de extensão aberta"
3
+ "Please <a href='http://templates-master.com/contacts' onclick='window.open(this.href); return false;'>contact us</a>, if you have some issues with one of our modules.","Por favor <a href='http://templates-master.com/contacts' onclick='window.open(this.href); return false;'>contate-nos</a>, se você tiver algum problema com algum dos nossos môdulos."
4
+ "Troubleshooting","Solução de problemas"
5
+ "Changelog","Changelog"
6
+ "Download Latest Version","Baixe a versão mais recente"
7
+ "Download","Download"
8
+ "Manage","Gerenciar"
9
+ "Upgrades are not installed","Upgrades não estão instalados."
10
+ "New version is available","Nova versão está disponível"
11
+ "Upgrade Information","Atualizar informações"
12
+ "Activate this checkbox, if you want to skip the upgrade operations","Ativar esta opção, se você deseja ignorar as operações de atualização"
13
+ "Module data will be upgraded from %s to %s at the following stores","Dados de módulo serão atualizados de %s para %s nas seguintes lojas"
14
+ "Install and Reinstall Information","Instalar e reinstalar as informações"
15
+ "Identity Key","Chave de identidade"
16
+ "Get your identity key at <a href=""%s"" title=""%s"" target=""_blank"">%s</a>","Obter a sua chave de identidade em <a href=""%s"" title=""%s"" target=""_blank""> %s</a>"
17
+ "Select stores to install or reinstall module","Selecione lojas para instalar ou reinstalar o módulo"
18
+ "Module is already installed at following stores","Módulo já está instalado nas seguintes lojas"
19
+ "Manage Module","Gerenciar módulo"
20
+ "Code","Código"
21
+ "Local Version","Versão local"
22
+ "Latest Version","Versão mais recente"
23
+ "Version Status","Status da versão"
24
+ "Run","Executar"
25
+ "Upgrade and Install/Reinstall %s %s (Data version %s)","Atualização e instalação/reinstalação %s %s (dados versão %s)"
26
+ "Install or Reinstall %s %s (Data version %s)","Instalar ou reinstalar o %s %s (dados versão %s)"
27
+ "Install %s %s","Instalar o %s %s"
28
+ "Modules","Módulos"
29
+ "The module has been saved","O módulo foi salvo"
30
+ "updated","atualizado"
31
+ "outdated","desatualizado"
32
+ "deprecated","preterido"
33
+ "Identity key is required","Chave de identidade é necessária"
34
+ "Response error: %s","Erro de resposta: %s"
35
+ "Sorry, try again in five minutes. Validation response parsing error: %s","Desculpe, tente novamente em cinco minutos. Resposta de validação, análise de erro: %s"
36
+ "Module code is required","Código do módulo é necessário"
37
+ "Domain name is required","Nome de domínio é necessária"
38
+ "Identity key is not valid","Chave de identidade não está válida"
39
+ "%s module is not found in purchase history","módulo de %s não foi encontrado no histórico de compras"
40
+ "%s activations limit reached. Please <a href=""%s"" title=""%s"" target=""_blank"">buy the product</a> to activate more domains","atingido o limite de ativações de %s. Por favor, <a href=""%s"" title=""%s"" target=""_blank""> comprar o produto</a> para ativar mais domínios"
41
+ "Module ""%s"" is not activated for ""%s"" domain. Please, <a href=""%s"" title=""%s"" target=""_blank"">activate</a> it from our site. %s activations left","Módulo ""%s"" não está ativado para o domínio ""%s"". Por favor, <a href=""%s"" title=""%s"" target=""_blank""> ative</a> em nosso site. Ativações de %s restantes"
42
+ "You are trying to use %s activation(s) for %s module. Only %s activations left. Please <a href=""%s"" title=""%s"">buy the product</a> to activate more domains","Você está tentando usar ativação(ões) de %s para %s módulo. Única ativações de %s restantes. Por favor, <a href=""%s"" title=""%s""> comprar o produto</a> para ativar mais domínios"
43
+ "Installed products","Produtos instalados"
44
+ "Product promotions and discounts","Promoções de produto e descontos"
45
+ "New Products","Novos produtos"
46
+ "Product updates","Atualizações de produto"
47
+ "Other","Outros"
48
+ "News to show in notification bar","Notícias para mostrar na barra de notificação"
app/locale/pt_PT/TM_EasyTabs.csv ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ "General","Geral"
2
+ "Enable easy tabs","Permitir bandeiras fáceis"
3
+ "Check items to add to the cart or","Verifique itens para adicionar ao carrinho ou"
4
+ "Add to Wishlist","Adicionar à lista de desejos"
5
+ "Review by %s","Revisado por %s"
6
+ "(Posted on %s)","(Postado em %s)"
7
+ "Other people marked this product with these tags:","Outras pessoas marcaram este produto com estas tags:"
8
+ "Add Your Tags:","Add Suas Tags:"
9
+ "Add Tags","Add Tags"
10
+ "Use spaces to separate tags. Use single quotes (') for phrases.","Use espaços para separar tags. Use aspas simples (') para frases."
11
+ "Email to a Friend","E-mail para um amigo"
js/lib/jquery/jquery-1.10.2.min.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ /*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
2
+ //@ sourceMappingURL=jquery-1.10.2.min.map
3
+ */
4
+ (function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t
5
+ }({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);
6
+ u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
js/lib/jquery/noconflict.js ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Magento
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Academic Free License (AFL 3.0)
7
+ * that is bundled with this package in the file LICENSE_AFL.txt.
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/afl-3.0.php
10
+ * If you did not receive a copy of the license and are unable to
11
+ * obtain it through the world-wide-web, please send an email
12
+ * to license@magento.com so we can send you a copy immediately.
13
+ *
14
+ * DISCLAIMER
15
+ *
16
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
17
+ * versions in the future. If you wish to customize Magento for your
18
+ * needs please refer to http://www.magento.com for more information.
19
+ *
20
+ * @category Mage
21
+ * @package js
22
+ * @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
23
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
24
+ */
25
+
26
+ // Avoid PrototypeJS conflicts, assign jQuery to $j instead of $
27
+ var $j = jQuery.noConflict();
js/tm/adminhtml/core/window.js CHANGED
@@ -45,7 +45,7 @@ TmcoreWindow.prototype = {
45
  this.blockMask.style.display = 'none';
46
  this.blockWindow.style.display = 'none';
47
  },
48
- }
49
 
50
  Event.observe(window, 'load', function() {
51
  tmcoreWindow = new TmcoreWindow();
45
  this.blockMask.style.display = 'none';
46
  this.blockWindow.style.display = 'none';
47
  },
48
+ };
49
 
50
  Event.observe(window, 'load', function() {
51
  tmcoreWindow = new TmcoreWindow();
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>magento_easy_tabs</name>
4
- <version>2.3.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://creativecommons.org/licenses/by/3.0/">Creative Commons License </license>
7
  <channel>community</channel>
@@ -10,9 +10,9 @@
10
  <description>Free Easy Tabs extension is efficient solution for usability of your store. It was developed in order to add informational tabs on product page. The number of tabs is unlimited. You can replace default system tabs, add new blocks into the tabs and apply ready to use tabs to create new one according to your requirements.</description>
11
  <notes>Magento Easy Tabs Community Module</notes>
12
  <authors><author><name>TemplatesMaster</name><user>TemplatesMaster</user><email>support@templates-master.com</email></author></authors>
13
- <date>2015-02-09</date>
14
- <time>14:58:47</time>
15
- <contents><target name="magecommunity"><dir name="TM"><dir name="EasyTabs"><dir name="Block"><dir name="Adminhtml"><dir name="Edit"><file name="Form.php" hash="ac9ae8dd2ca02d2aea88b02ae4a6094e"/><dir name="Tab"><file name="Main.php" hash="d731385ab2e61e86d744affd70df9d80"/></dir><file name="Tabs.php" hash="e051b10be665ca34fb1bffa2e379fa3e"/></dir><file name="Edit.php" hash="fd61e3e748a4f7fbe6ee3b99c2ba61bf"/><dir name="List"><file name="Grid.php" hash="f710404ed05ac2aafd831742ada44a32"/></dir><file name="List.php" hash="c88c7f76f0d5a72ff320f7359f24ea1f"/><dir name="Tab"><file name="Options.php" hash="3e1d0b56f4a2951ac7a1ce5859775eeb"/></dir></dir><dir name="Tab"><file name="Attribute.php" hash="2b9795e99d8ad1e3c6c87b4c89dd76e3"/><file name="Cms.php" hash="a732fa31ff5c6ab0658567ff79e2c1e4"/><file name="Html.php" hash="fffb4847f6bc2c6f70877b34a57eaed2"/><dir name="Product"><file name="Additional.php" hash="9da7bf2ad135cb8f94816ca15c279863"/><file name="Description.php" hash="bac6f4872f41bf5d251f4ba93db4794d"/><file name="Related.php" hash="18f4f3476ce85d2a1c518c081a1eafce"/><file name="Review.php" hash="3887ef16b754c6546297c72b7bafc605"/><file name="Tags.php" hash="0d924a1877b253eca47e575786a1910c"/><file name="Upsell.php" hash="78d62b391b5c8abdf2a78b8fedb69c94"/></dir><file name="Template.php" hash="e3988e18f4b933562338772daa521c89"/></dir><file name="Tabs.php" hash="a922a213d9819944fd935de9935e9b25"/></dir><dir name="Helper"><file name="Data.php" hash="164bf2329ec0c7fe31fb3598daa2ec8c"/></dir><dir name="Model"><dir name="Config"><file name="Collection.php" hash="9b8337609597d8b566d3e0f1310a9afa"/><file name="Status.php" hash="b33bf57fc95f380e28c95144221ce8af"/></dir><file name="Config.php" hash="2b1360d67adae3bb9ea1627433c6e0b1"/><dir name="Product"><dir name="Attribute"><file name="Collection.php" hash="c6a21bb64a4a8f3fcc1cce76025e20f2"/></dir></dir><file name="Tabs.php" hash="ca445bb6138c4273e280a66397d94c15"/><dir name="Template"><file name="Filter.php" hash="a3971400bd335f4330cc5f981f396cfc"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Easytabs"><file name="IndexController.php" hash="32bc7df83ea5b57ae8db340c7bc1a948"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="38df7e6f89659b212673696de51c4ba8"/><file name="config.xml" hash="6f49f8a5b3ace941372c63acb17e95f2"/><file name="easytabs.xml" hash="988706876b5f646bc97180a22515ed8e"/><file name="system.xml" hash="90074ce38a9ee144e1cbb44508ce3873"/><file name="widget.xml" hash="bdfd35e765ed22db84b99e5282b131b5"/></dir></dir><dir name="Core"><dir name="Block"><dir name="Adminhtml"><dir name="Module"><dir name="Grid"><dir name="Renderer"><file name="Actions.php" hash="94e4642076a653933f831d21587f0e0b"/><file name="VersionStatus.php" hash="f437375fa42bd6d5811e9ac357b25b92"/></dir></dir><file name="Grid.php" hash="6ed8add73540c00a9f00cb9519576e3e"/><dir name="Manage"><file name="Form.php" hash="445f9d528e6649634ef998676edca76d"/><dir name="Tab"><file name="Main.php" hash="d04eaf5d68e0a1fcc5c9f81f532f6ea4"/></dir><file name="Tabs.php" hash="b8b94209331a74de8f74b43096957b46"/></dir><file name="Manage.php" hash="de66455cf3b3c137d63600fcfb752c2e"/></dir><file name="Module.php" hash="5fc47720bda5db44a99ee33dc6682088"/><dir name="Support"><dir name="Edit"><dir name="Form"><dir name="Element"><dir name="Theard"><file name="Content.php" hash="a0df79a98bff0cf48b84683b13dcfc9e"/></dir><file name="Theard.php" hash="49aa528200fdfecbd73fa5678f579331"/></dir></dir><file name="Form.php" hash="7711ae3830edf2ac1f38c100f576b038"/><dir name="Tab"><file name="Main.php" hash="f95d31910171ac100ba51749dc9ffa1f"/></dir><file name="Tabs.php" hash="009b12547acf1771dceebc7db473be27"/></dir><file name="Edit.php" hash="0dabfacbf1b7a79e47686be6645ecb7d"/><dir name="List"><file name="Grid.php" hash="a01bb91dfa62d5b1415e7a413ab11339"/></dir><file name="List.php" hash="8d059add18b516d9e3bc634f570437ea"/></dir><dir name="System"><dir name="Config"><dir name="Form"><dir name="Field"><file name="Notification.php" hash="6c06aec0e04520f2dffe9a8ec580d545"/><file name="Size.php" hash="3516ca14bea4f21ee3805219ff128b8a"/></dir><dir name="Fieldset"><dir name="Modules"><file name="List.php" hash="e4fcb7c10f265a111e754d2776afd9a8"/></dir><file name="Troubleshooting.php" hash="9516baca7da47dffc4c70123260c0ae8"/></dir></dir></dir></dir><dir name="Widget"><dir name="Form"><dir name="Element"><dir name="Wysiwyg"><file name="Content.php" hash="cc2b4fa2903d8eff9fa3833462af2f31"/></dir><file name="Wysiwyg.php" hash="a1dbb1fa4d338f9e5f7d6b3d73064179"/></dir><dir name="Renderer"><file name="Wysiwyg.php" hash="853eaaf1f404379b7f288538e1165db5"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="04f3938da6e900e9a393899e9a7f8600"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Source"><dir name="Notification"><file name="Channel.php" hash="a617b0f2a905bc28d2946a23e68ede5f"/></dir></dir></dir></dir></dir><dir name="Module"><file name="MessageLogger.php" hash="23ae476aa7a9ef6379ffe6953e869e0e"/><file name="Upgrade.php" hash="388d39859d304c05c0a684e221a49b1a"/></dir><file name="Module.php" hash="b72f0452c524f6372c53cfbb26fac8a5"/><dir name="Notification"><file name="Feed.php" hash="f148f51380e489e0aee2fc82d780fffa"/></dir><dir name="Oauth"><file name="Client.php" hash="b6ccf069f5b59d74ce09e50c3a83b61d"/></dir><file name="Observer.php" hash="86ab42323c4782aa3aa5e9b3f2b2f300"/><dir name="Resource"><dir name="Module"><file name="AdminGridCollection.php" hash="fb9642aff21c3c833195aebf4cf65644"/><file name="Collection.php" hash="a6fe79d80f1e7039abd51010e5e1ec4c"/><file name="MergedCollection.php" hash="be79fb45e9d1f463d29118faaa320434"/><file name="RemoteCollection.php" hash="7c827b782b7ab6dbe5a80be4e9389c9d"/></dir><file name="Module.php" hash="3338136f015ec2ef531214c3430fa087"/><dir name="Support"><file name="Collection.php" hash="ed4112064055536e5eea998c5a2aecd9"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Tmcore"><file name="ModuleController.php" hash="b00a654a61aafefa782ff1603656f725"/><file name="SupportController.php" hash="38f7dbe63ead6f7c684dd592c319e1ba"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="43e32dcadcda6c5fc89d906a952b56d1"/><file name="config.xml" hash="90f57f93c0136f7c8f352ff7f047683d"/><file name="system.xml" hash="80f99931d76e07264eec3694f94dd961"/></dir><dir name="sql"><dir name="tm_core_setup"><file name="mysql4-install-1.0.0.php" hash="aa545a4cb0dd65a6af6e58f3a3a73e69"/><file name="mysql4-upgrade-1.0.0-1.0.1.php" hash="26da85d76c4ad2469e3723f16154234f"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="tm"><file name="easytabs.xml" hash="3f4625f515b36268576e45835161fc02"/></dir></dir><dir name="template"><dir name="tm"><dir name="easytabs"><dir><dir name="tab"><dir name="catalog"><dir name="product"><file name="attribute.phtml" hash="ed39373d85ba401d5c6d47637e88547a"/><file name="related.phtml" hash="feee59638d5b9e7d3856808db85fcc6a"/><dir name="view"><file name="attributes.phtml" hash="e8f0d67efb940c29797c264ab5835732"/><file name="description.phtml" hash="e05ed55676f71fd0af2f5d400b5a6c50"/></dir></dir></dir><file name="cms.phtml" hash="24fa6e1afbd40b8461449c3b7e16efb4"/><dir name="review"><dir name="product"><dir name="view"><file name="list.phtml" hash="d6e75bff9740572e0af89c095ee29134"/></dir></dir></dir><dir name="tag"><dir name="product"><file name="list.phtml" hash="1ecae7b01d97b786876d379a699a6b30"/></dir></dir></dir></dir><file name="tabs.phtml" hash="dec6b506d8519576402755c1c4d5dbc7"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="tmcore.xml" hash="93e50640cd04f2ed2243eaa418a51cfc"/><dir name="tm"><file name="easytabs.xml" hash="2a452adbd78d5b62b3dafce51858d1f4"/></dir></dir><dir name="template"><dir name="tmcore"><dir name="ticket"><dir name="edit"><dir name="form"><dir name="element"><dir name="theard"><file name="content.phtml" hash="a53a06e14664a42864200a06da075dc6"/></dir></dir></dir></dir></dir><file name="popup.phtml" hash="2f9c258f2010fabe08f8737781562c78"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="tm"><file name="easytabs.css" hash="f2e21bf39618e796e36761be0ae55285"/></dir></dir><dir name="js"><dir name="tm"><file name="easytabs.js" hash="b0a05933a2b252c58da298c7ce21daf4"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="TM_EasyTabs.xml" hash="ea8a3b9273ac77ad1d4c22777755bb00"/><file name="TM_Core.xml" hash="432801c3e16eb2ffa4d48309024617bb"/></dir></target><target name="magelocale"><dir name="en_US"><file name="TM_Core.csv" hash="afd8a7597ed0531c6a84ad05cb5205a5"/><file name="TM_EasyTabs.csv" hash="9e24db26c54445f1ebb3e4ba97356dcd"/></dir></target><target name="mageweb"><dir name="js"><dir name="tm"><dir name="adminhtml"><dir name="core"><file name="window.js" hash="1e204d5d2cc835187e4a5b06ba45105d"/></dir></dir></dir></dir></target></contents>
16
  <compatible/>
17
- <dependencies><required><php><min>5.2.0</min><max>5.9.0</max></php></required></dependencies>
18
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>magento_easy_tabs</name>
4
+ <version>2.3.5</version>
5
  <stability>stable</stability>
6
  <license uri="http://creativecommons.org/licenses/by/3.0/">Creative Commons License </license>
7
  <channel>community</channel>
10
  <description>Free Easy Tabs extension is efficient solution for usability of your store. It was developed in order to add informational tabs on product page. The number of tabs is unlimited. You can replace default system tabs, add new blocks into the tabs and apply ready to use tabs to create new one according to your requirements.</description>
11
  <notes>Magento Easy Tabs Community Module</notes>
12
  <authors><author><name>TemplatesMaster</name><user>TemplatesMaster</user><email>support@templates-master.com</email></author></authors>
13
+ <date>2016-08-22</date>
14
+ <time>07:25:02</time>
15
+ <contents><target name="magecommunity"><dir name="TM"><dir name="EasyTabs"><dir name="Block"><dir name="Adminhtml"><dir name="Edit"><file name="Form.php" hash="ac9ae8dd2ca02d2aea88b02ae4a6094e"/><dir name="Tab"><file name="Main.php" hash="485ff004422a52cad678fd08b5665328"/></dir><file name="Tabs.php" hash="e051b10be665ca34fb1bffa2e379fa3e"/></dir><file name="Edit.php" hash="fd61e3e748a4f7fbe6ee3b99c2ba61bf"/><dir name="List"><file name="Grid.php" hash="605356fee2a11f307c9a7ab946ec0d04"/></dir><file name="List.php" hash="c88c7f76f0d5a72ff320f7359f24ea1f"/><dir name="Tab"><file name="Options.php" hash="3e1d0b56f4a2951ac7a1ce5859775eeb"/></dir></dir><dir name="Tab"><file name="Attribute.php" hash="2b9795e99d8ad1e3c6c87b4c89dd76e3"/><file name="Cms.php" hash="512d13f19a9155b7e926dd77efec9f10"/><file name="Html.php" hash="fffb4847f6bc2c6f70877b34a57eaed2"/><dir name="Product"><file name="Additional.php" hash="9da7bf2ad135cb8f94816ca15c279863"/><file name="Description.php" hash="bac6f4872f41bf5d251f4ba93db4794d"/><file name="Related.php" hash="18f4f3476ce85d2a1c518c081a1eafce"/><file name="Review.php" hash="3887ef16b754c6546297c72b7bafc605"/><file name="Tags.php" hash="0d924a1877b253eca47e575786a1910c"/><file name="Upsell.php" hash="78d62b391b5c8abdf2a78b8fedb69c94"/></dir><file name="SameAttrValue.php" hash="cd904ee1ac6e1cc0b55735e23b1a8a7e"/><file name="Template.php" hash="eb52fd526169bf6ffc8ff9ce68f56601"/></dir><file name="Tabs.php" hash="f69b52da532fb21649b2f6fb6c047381"/></dir><dir name="Helper"><file name="Data.php" hash="164bf2329ec0c7fe31fb3598daa2ec8c"/></dir><dir name="Model"><dir name="Config"><file name="Collection.php" hash="9b8337609597d8b566d3e0f1310a9afa"/><file name="Status.php" hash="2dff584852a6a5758c196a3a100d6b56"/><file name="Tabs.php" hash="fde3c0e370feb3e878f03905dd83a9f7"/></dir><file name="Config.php" hash="8620e6d3baaecd7077948550ea12de50"/><dir name="Product"><dir name="Attribute"><file name="Collection.php" hash="c6a21bb64a4a8f3fcc1cce76025e20f2"/></dir></dir><file name="Tabs.php" hash="ca445bb6138c4273e280a66397d94c15"/><dir name="Template"><file name="Filter.php" hash="a3971400bd335f4330cc5f981f396cfc"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Easytabs"><file name="IndexController.php" hash="4e5efb897db7de51c303899c443c39e8"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="38df7e6f89659b212673696de51c4ba8"/><file name="config.xml" hash="8af162f9d36c085205cbde0e0ed98082"/><file name="easytabs.xml" hash="5ad887bfefedc987a23667a06eb548ee"/><file name="system.xml" hash="6d9bad94977a5ad85513743135237376"/><file name="widget.xml" hash="b582e0900460cfa23353328af452700e"/></dir></dir><dir name="Core"><dir name="Block"><dir name="Adminhtml"><dir name="Module"><dir name="Grid"><dir name="Renderer"><file name="Actions.php" hash="94e4642076a653933f831d21587f0e0b"/><file name="VersionStatus.php" hash="f437375fa42bd6d5811e9ac357b25b92"/></dir></dir><file name="Grid.php" hash="6ed8add73540c00a9f00cb9519576e3e"/><dir name="Manage"><file name="Form.php" hash="445f9d528e6649634ef998676edca76d"/><dir name="Tab"><file name="Main.php" hash="d04eaf5d68e0a1fcc5c9f81f532f6ea4"/></dir><file name="Tabs.php" hash="b8b94209331a74de8f74b43096957b46"/></dir><file name="Manage.php" hash="de66455cf3b3c137d63600fcfb752c2e"/></dir><file name="Module.php" hash="5fc47720bda5db44a99ee33dc6682088"/><dir name="Support"><dir name="Edit"><dir name="Form"><dir name="Element"><dir name="Theard"><file name="Content.php" hash="a0df79a98bff0cf48b84683b13dcfc9e"/></dir><file name="Theard.php" hash="49aa528200fdfecbd73fa5678f579331"/></dir></dir><file name="Form.php" hash="7711ae3830edf2ac1f38c100f576b038"/><dir name="Tab"><file name="Main.php" hash="f95d31910171ac100ba51749dc9ffa1f"/></dir><file name="Tabs.php" hash="009b12547acf1771dceebc7db473be27"/></dir><file name="Edit.php" hash="0dabfacbf1b7a79e47686be6645ecb7d"/><dir name="List"><file name="Grid.php" hash="a01bb91dfa62d5b1415e7a413ab11339"/></dir><file name="List.php" hash="8d059add18b516d9e3bc634f570437ea"/></dir><dir name="System"><dir name="Config"><dir name="Form"><dir name="Field"><file name="Notification.php" hash="6c06aec0e04520f2dffe9a8ec580d545"/><file name="Size.php" hash="3516ca14bea4f21ee3805219ff128b8a"/></dir><dir name="Fieldset"><dir name="Modules"><file name="List.php" hash="e4fcb7c10f265a111e754d2776afd9a8"/></dir><file name="Troubleshooting.php" hash="9516baca7da47dffc4c70123260c0ae8"/></dir></dir></dir></dir><dir name="Widget"><dir name="Form"><dir name="Element"><dir name="Wysiwyg"><file name="Content.php" hash="cc2b4fa2903d8eff9fa3833462af2f31"/></dir><file name="Wysiwyg.php" hash="a1dbb1fa4d338f9e5f7d6b3d73064179"/></dir><dir name="Renderer"><file name="Wysiwyg.php" hash="853eaaf1f404379b7f288538e1165db5"/></dir></dir></dir></dir><dir name="Cms"><file name="Block.php" hash="c10f566da9bc88653ce54176819d754d"/></dir></dir><dir name="Helper"><file name="Data.php" hash="77bfd46c4405cbc4907feafce196280c"/><file name="Debug.php" hash="54d8b318e43d182ecb43bb850f2cdbd8"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Source"><dir name="Notification"><file name="Channel.php" hash="a617b0f2a905bc28d2946a23e68ede5f"/></dir></dir></dir></dir></dir><dir name="Module"><file name="MessageLogger.php" hash="23ae476aa7a9ef6379ffe6953e869e0e"/><file name="Upgrade.php" hash="c9872fe30623ab511577ea4d98724ca5"/></dir><file name="Module.php" hash="c507995abec692b3f38f66a65b4d5c44"/><dir name="Notification"><file name="Feed.php" hash="f148f51380e489e0aee2fc82d780fffa"/></dir><dir name="Oauth"><file name="Client.php" hash="b6ccf069f5b59d74ce09e50c3a83b61d"/></dir><file name="Observer.php" hash="02539a75bbf4762a2d09944f8bbd58d9"/><dir name="Resource"><dir name="Module"><file name="AdminGridCollection.php" hash="fb9642aff21c3c833195aebf4cf65644"/><file name="Collection.php" hash="a6fe79d80f1e7039abd51010e5e1ec4c"/><file name="MergedCollection.php" hash="be79fb45e9d1f463d29118faaa320434"/><file name="RemoteCollection.php" hash="bd380a11d95cc75cdbfb2f5a6d46108f"/></dir><file name="Module.php" hash="3338136f015ec2ef531214c3430fa087"/><dir name="Support"><file name="Collection.php" hash="ed4112064055536e5eea998c5a2aecd9"/></dir></dir><file name="Timer.php" hash="bab5a57d3b5a1d2f67aa1c76d1463392"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Tmcore"><file name="ModuleController.php" hash="0bd870e61b0babbcb1470731856d6952"/><file name="SupportController.php" hash="bf983c1bf8155d455b07b55a9af71046"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="aa149f26dedd303c22173cf80a87bbc9"/><file name="config.xml" hash="75007c1739f03f4ad6b50abae073dd3b"/><file name="system.xml" hash="f7f906b1630acefa1aeb9600277584d6"/></dir><dir name="sql"><dir name="tm_core_setup"><file name="mysql4-install-1.0.0.php" hash="aa545a4cb0dd65a6af6e58f3a3a73e69"/><file name="mysql4-upgrade-1.0.0-1.0.1.php" hash="26da85d76c4ad2469e3723f16154234f"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="tm"><file name="easytabs.xml" hash="3f4625f515b36268576e45835161fc02"/><file name="core.xml" hash="b79ead82dc2369bea0130abfb1de8d67"/></dir></dir><dir name="template"><dir name="tm"><dir name="easytabs"><dir><dir name="tab"><dir name="catalog"><dir name="product"><file name="attribute.phtml" hash="ed39373d85ba401d5c6d47637e88547a"/><file name="related.phtml" hash="c272b6c776d4fe9fd5515679b6e91a7a"/><file name="sameattrvalue.phtml" hash="ec4bd0b9fae4b4e66e1df638934db77c"/><dir name="view"><file name="attributes.phtml" hash="e8f0d67efb940c29797c264ab5835732"/><file name="description.phtml" hash="e05ed55676f71fd0af2f5d400b5a6c50"/></dir></dir></dir><file name="cms.phtml" hash="24fa6e1afbd40b8461449c3b7e16efb4"/><dir name="review"><dir name="product"><dir name="view"><file name="list.phtml" hash="8365b7696b46757186acda79f988d915"/></dir></dir></dir><dir name="tag"><dir name="product"><file name="list.phtml" hash="1ecae7b01d97b786876d379a699a6b30"/></dir></dir></dir></dir><file name="tabs.phtml" hash="9702c40b8d4316c0a5931e469e18f978"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="tmcore.xml" hash="249d8fe0c9ec19ff413eb93ac428739e"/><dir name="tm"><file name="easytabs.xml" hash="857813b55c612a0c0c2101b5240dbc17"/></dir></dir><dir name="template"><dir name="tmcore"><dir name="ticket"><dir name="edit"><dir name="form"><dir name="element"><dir name="theard"><file name="content.phtml" hash="8130a426137cfce127e47278656d9152"/></dir></dir></dir></dir></dir><file name="popup.phtml" hash="2f9c258f2010fabe08f8737781562c78"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="tm"><file name="easytabs.css" hash="07d5e250a00ab19a2938587f4d7dcd27"/></dir></dir><dir name="js"><dir name="tm"><file name="easytabs.js" hash="f2b4e56b1e16b255b416a502cc296a5b"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="TM_EasyTabs.xml" hash="ea8a3b9273ac77ad1d4c22777755bb00"/><file name="TM_Core.xml" hash="432801c3e16eb2ffa4d48309024617bb"/></dir></target><target name="magelocale"><dir name="en_US"><file name="TM_Core.csv" hash="afd8a7597ed0531c6a84ad05cb5205a5"/><file name="TM_EasyTabs.csv" hash="05e29e3991942f13281de0044c7baca2"/></dir><dir name="es_ES"><file name="TM_EasyTabs.csv" hash="3283ac3d336f882837fe5a4570d963c4"/><file name="TM_Core.csv" hash="817aa9cd9985b5ed81c3aadb62a26d7a"/></dir><dir name="fr_FR"><file name="TM_EasyTabs.csv" hash="baf9f2e12bf5f896db691f96242ce9a9"/><file name="TM_Core.csv" hash="4d85a7e25a16948ea77d459f93894e8d"/></dir><dir name="it_IT"><file name="TM_EasyTabs.csv" hash="ee017c63ac747b5ea1503a839c392a73"/><file name="TM_Core.csv" hash="d033d060e066d41af444e830fdc27504"/></dir><dir name="nl_NL"><file name="TM_EasyTabs.csv" hash="719a9829db65dcef62c971370bbf577b"/><file name="TM_Core.csv" hash="9ef1bce86d8a0d95952ba77c5fb1f3ef"/></dir><dir name="pt_PT"><file name="TM_EasyTabs.csv" hash="5d9dfb42cd746fc1afad26f3de818a5e"/><file name="TM_Core.csv" hash="ec345fcb6370864537f721499d63ab56"/></dir></target><target name="mageweb"><dir name="js"><dir name="tm"><dir name="adminhtml"><dir name="core"><file name="window.js" hash="5cd7bc7e3432c98e95c0ddbe459cd045"/></dir></dir></dir><dir name="lib"><dir name="jquery"><file name="jquery-1.10.2.min.js" hash="841dc30647f93349b7d8ef61deebe411"/><file name="noconflict.js" hash="12f820da0f5ba19abfb4f5fc270bb62c"/></dir></dir></dir></target></contents>
16
  <compatible/>
17
+ <dependencies><required><php><min>5.2.0</min><max>7.1.0</max></php></required></dependencies>
18
  </package>
skin/frontend/base/default/css/tm/easytabs.css CHANGED
@@ -18,7 +18,7 @@
18
  box-shadow: inset 0 -12px 8px -14px rgba(0, 0, 0, 0.2);
19
  }
20
  .easytabs li:hover { box-shadow: none; }
21
- .easytabs li a:hover,
22
  .easytabs-a-accordion:hover { text-decoration: none; }
23
  .easytabs li.active {
24
  background: #fbfbfb;
@@ -29,11 +29,19 @@
29
  .easytabs-a {
30
  display: block;
31
  padding: 9px 12px;
 
 
 
 
32
  color: #777;
33
  text-decoration: none;
34
  text-shadow: 1px 1px 1px rgba(255,255,255,0.8);
35
  font: bold 12px/16px Arial, Helvetica, Tahoma, sans-serif;
36
  }
 
 
 
 
37
  .easytabs-content {
38
  padding: 7px 8px;
39
  border: 1px solid #ccc;
@@ -45,6 +53,19 @@
45
  .easytabs-a-accordion { margin-top: -1px; background: #f1f1f1; display: none; padding: 12px; }
46
  .easytabs-a-accordion.active { box-shadow: none; color: #48494a; }
47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  .easytabs-content .box-collateral { margin: 0; }
49
  .easytabs-content .box-up-sell .products-grid td { padding-left: 7px; padding-right: 7px; }
50
  .easytabs-content .block-related .block-title { display: none; }
@@ -83,4 +104,19 @@
83
 
84
  #product_tabs_related_tabbed_contents li { float:none; margin: 0 0 10px; width: auto; }
85
  #product_tabs_related_tabbed_contents li:nth-child(1n) { width: auto; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  }
18
  box-shadow: inset 0 -12px 8px -14px rgba(0, 0, 0, 0.2);
19
  }
20
  .easytabs li:hover { box-shadow: none; }
21
+ .easytabs li .easytabs-anchor-icon:hover,
22
  .easytabs-a-accordion:hover { text-decoration: none; }
23
  .easytabs li.active {
24
  background: #fbfbfb;
29
  .easytabs-a {
30
  display: block;
31
  padding: 9px 12px;
32
+ cursor: pointer;
33
+ }
34
+ .easytabs-a,
35
+ .easytabs-a .easytabs-anchor-icon {
36
  color: #777;
37
  text-decoration: none;
38
  text-shadow: 1px 1px 1px rgba(255,255,255,0.8);
39
  font: bold 12px/16px Arial, Helvetica, Tahoma, sans-serif;
40
  }
41
+ .easytabs-a .easytabs-anchor-icon:hover {
42
+ color: #777;
43
+ text-decoration: none;
44
+ }
45
  .easytabs-content {
46
  padding: 7px 8px;
47
  border: 1px solid #ccc;
53
  .easytabs-a-accordion { margin-top: -1px; background: #f1f1f1; display: none; padding: 12px; }
54
  .easytabs-a-accordion.active { box-shadow: none; color: #48494a; }
55
 
56
+ .easytabs-a .easytabs-anchor-icon {
57
+ font-size: 12px;
58
+ height: 16px;
59
+ width: 10px;
60
+ margin-left: -10px;
61
+ float: left;
62
+ opacity: 0.7;
63
+ visibility: hidden;
64
+ text-decoration: none;
65
+ }
66
+ .easytabs-a:hover .easytabs-anchor-icon { visibility: visible; }
67
+ .easytabs-a .easytabs-anchor-icon:hover { opacity: 1; }
68
+
69
  .easytabs-content .box-collateral { margin: 0; }
70
  .easytabs-content .box-up-sell .products-grid td { padding-left: 7px; padding-right: 7px; }
71
  .easytabs-content .block-related .block-title { display: none; }
104
 
105
  #product_tabs_related_tabbed_contents li { float:none; margin: 0 0 10px; width: auto; }
106
  #product_tabs_related_tabbed_contents li:nth-child(1n) { width: auto; }
107
+
108
+ #product_tabs_review_tabbed_contents .ratings .rating-box {
109
+ background: rgba(0, 0, 0, 0) none repeat scroll 0 0;
110
+ height: 19.6px;
111
+ text-align: center;
112
+ text-indent: 0;
113
+ width: 100%;
114
+ }
115
+
116
+ #product_tabs_review_tabbed_contents .ratings .rating-box .rating {
117
+ display: none;
118
+ }
119
+ #product_tabs_review_tabbed_contents .ratings .rating-box .rating-number {
120
+ display: inline-block;
121
+ }
122
  }
skin/frontend/base/default/js/tm/easytabs.js CHANGED
@@ -8,7 +8,9 @@ EasyTabs.prototype = {
8
  config: {
9
  tabs : '.easytabs-anchor',
10
  container: '#easytabs',
11
- trackHashValue: true
 
 
12
  },
13
  container : false,
14
 
@@ -42,13 +44,41 @@ EasyTabs.prototype = {
42
  }.bind(this));
43
  }
44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  if (!this.activeTabs.length) {
46
  var first = this.container.down(this.config.tabs);
47
- this.activate(this.getTabByHref(first.href));
 
 
48
  }
49
 
50
  $$(this.config.tabs).each(function(el ,i) {
51
  el.observe('click', this.onclick.bind(this, el));
 
 
 
 
 
 
 
 
 
 
 
 
52
  }.bind(this));
53
  },
54
 
@@ -57,7 +87,7 @@ EasyTabs.prototype = {
57
  * @param {Boolean} scroll lag to indicate that page should be scrolled to the tab
58
  * @return {String|false} Activated tab of false if tab wasn't found
59
  */
60
- activate: function(tab, scroll) {
61
  var content = $(this.tpl.content.replace(this.tpl.tab, tab));
62
  if (!content) {
63
  return false;
@@ -78,7 +108,10 @@ EasyTabs.prototype = {
78
  }
79
 
80
  var href = this.tpl.href.replace(this.tpl.tab, tab),
81
- tabs = this.container.select(this.config.tabs + '[href="' + href + '"]');
 
 
 
82
 
83
  tabs.each(function(a) {
84
  a.addClassName('active');
@@ -91,7 +124,10 @@ EasyTabs.prototype = {
91
  return el.getStyle('display') !== 'none';
92
  });
93
  if (visibleTab) {
94
- visibleTab.scrollTo();
 
 
 
95
  }
96
  }
97
 
@@ -136,7 +172,10 @@ EasyTabs.prototype = {
136
  content.hide();
137
 
138
  var href = this.tpl.href.replace(this.tpl.tab, tab),
139
- tabs = this.container.select(this.config.tabs + '[href="' + href + '"]');
 
 
 
140
 
141
  tabs.each(function(a) {
142
  a.removeClassName('active');
@@ -159,7 +198,7 @@ EasyTabs.prototype = {
159
  * @param {String} tab Tab to activate
160
  * @param {Boolean} scroll Flag to indicate that page should be scrolled to the tab
161
  */
162
- onclick: function(el, e, tab, scroll) {
163
  var isAccordion = false,
164
  accordionTrigger = $$('.easytabs-a-accordion').first();
165
  if (accordionTrigger) {
@@ -167,17 +206,18 @@ EasyTabs.prototype = {
167
  isAccordion = (accordionTrigger.getStyle('display') !== 'none');
168
  }
169
 
170
- tab = tab || this.getTabByHref(el.href);
171
  scroll = scroll || el.hasClassName('easytabs-scroll');
 
172
  if (isAccordion) {
173
  if (el.hasClassName('active')) {
174
  this.deactivate(tab);
175
  } else {
176
- this.activate(tab, scroll);
177
  }
178
  } else {
179
  this.deactivate();
180
- this.activate(tab, scroll);
181
  }
182
  },
183
 
8
  config: {
9
  tabs : '.easytabs-anchor',
10
  container: '#easytabs',
11
+ trackHashValue: true,
12
+ scrollSpeed: 0.5,
13
+ scrollOffset: -5
14
  },
15
  container : false,
16
 
44
  }.bind(this));
45
  }
46
 
47
+ Event.observe(window, "hashchange", function() {
48
+ var href = window.location.hash;
49
+ if (href.length <= 1) {
50
+ var first = this.container.down(this.config.tabs);
51
+ href = first.href || first.readAttribute('data-href');
52
+ } else {
53
+ if (-1 === href.indexOf('#product_tabs_')) {
54
+ return;
55
+ }
56
+ }
57
+ this.deactivate();
58
+ this.activate(this.getTabByHref(href));
59
+ }.bind(this));
60
+
61
  if (!this.activeTabs.length) {
62
  var first = this.container.down(this.config.tabs);
63
+ if ('undefined' !== typeof first) {
64
+ this.activate(this.getTabByHref(first.href || first.readAttribute('data-href')));
65
+ }
66
  }
67
 
68
  $$(this.config.tabs).each(function(el ,i) {
69
  el.observe('click', this.onclick.bind(this, el));
70
+
71
+ var id = $(el).getAttribute('data-href');
72
+ if (!id) {
73
+ return;
74
+ }
75
+ $$(id + '_contents .pages a').each(function(_el){
76
+ if (-1 == _el.href.indexOf("#")
77
+ && -1 !== _el.href.indexOf(window.location.host)) {
78
+
79
+ _el.href = _el.href + id;
80
+ }
81
+ });
82
  }.bind(this));
83
  },
84
 
87
  * @param {Boolean} scroll lag to indicate that page should be scrolled to the tab
88
  * @return {String|false} Activated tab of false if tab wasn't found
89
  */
90
+ activate: function(tab, scroll, animate) {
91
  var content = $(this.tpl.content.replace(this.tpl.tab, tab));
92
  if (!content) {
93
  return false;
108
  }
109
 
110
  var href = this.tpl.href.replace(this.tpl.tab, tab),
111
+ tabs = this.container.select(
112
+ this.config.tabs + '[href="' + href + '"]',
113
+ this.config.tabs + '[data-href="' + href + '"]'
114
+ );
115
 
116
  tabs.each(function(a) {
117
  a.addClassName('active');
124
  return el.getStyle('display') !== 'none';
125
  });
126
  if (visibleTab) {
127
+ Effect.ScrollTo(visibleTab, {
128
+ duration: animate ? this.config.scrollSpeed : 0,
129
+ offset: this.config.scrollOffset
130
+ });
131
  }
132
  }
133
 
172
  content.hide();
173
 
174
  var href = this.tpl.href.replace(this.tpl.tab, tab),
175
+ tabs = this.container.select(
176
+ this.config.tabs + '[href="' + href + '"]',
177
+ this.config.tabs + '[data-href="' + href + '"]'
178
+ );
179
 
180
  tabs.each(function(a) {
181
  a.removeClassName('active');
198
  * @param {String} tab Tab to activate
199
  * @param {Boolean} scroll Flag to indicate that page should be scrolled to the tab
200
  */
201
+ onclick: function(el, e, tab, scroll, animate) {
202
  var isAccordion = false,
203
  accordionTrigger = $$('.easytabs-a-accordion').first();
204
  if (accordionTrigger) {
206
  isAccordion = (accordionTrigger.getStyle('display') !== 'none');
207
  }
208
 
209
+ tab = tab || this.getTabByHref(el.href || el.readAttribute('data-href'));
210
  scroll = scroll || el.hasClassName('easytabs-scroll');
211
+ animate = animate || el.hasClassName('easytabs-animate');
212
  if (isAccordion) {
213
  if (el.hasClassName('active')) {
214
  this.deactivate(tab);
215
  } else {
216
+ this.activate(tab, scroll, animate);
217
  }
218
  } else {
219
  this.deactivate();
220
+ this.activate(tab, scroll, animate);
221
  }
222
  },
223