Ereactor_Slider - Version 1.0.0

Version Notes

e-reactor Slider

Download this release

Release Info

Developer Mihai Andrei Livadariu
Extension Ereactor_Slider
Version 1.0.0
Comparing to
See all releases


Version 1.0.0

Files changed (77) hide show
  1. app/code/community/Ereactor/Slider/Block/Adminhtml/Slide/Batch.php +10 -0
  2. app/code/community/Ereactor/Slider/Block/Adminhtml/Slide/Batch/Images.php +48 -0
  3. app/code/community/Ereactor/Slider/Block/Adminhtml/Slide/Grid.php +114 -0
  4. app/code/community/Ereactor/Slider/Block/Adminhtml/Slide/Preview.php +27 -0
  5. app/code/community/Ereactor/Slider/Block/Adminhtml/Slide/Quickadd.php +175 -0
  6. app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow.php +14 -0
  7. app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Edit.php +56 -0
  8. app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Edit/Form.php +19 -0
  9. app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Edit/Tab/General.php +247 -0
  10. app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Edit/Tab/Slides.php +33 -0
  11. app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Edit/Tabs.php +30 -0
  12. app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Grid.php +83 -0
  13. app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Preview.php +22 -0
  14. app/code/community/Ereactor/Slider/Block/Adminhtml/Widget/Grid/Column/Renderer/Slideaction.php +49 -0
  15. app/code/community/Ereactor/Slider/Block/Slide.php +48 -0
  16. app/code/community/Ereactor/Slider/Block/Slider.php +39 -0
  17. app/code/community/Ereactor/Slider/Helper/Admin.php +9 -0
  18. app/code/community/Ereactor/Slider/Helper/Data.php +59 -0
  19. app/code/community/Ereactor/Slider/Model/Resource/Slide.php +9 -0
  20. app/code/community/Ereactor/Slider/Model/Resource/Slide/Collection.php +18 -0
  21. app/code/community/Ereactor/Slider/Model/Resource/Slideshow.php +9 -0
  22. app/code/community/Ereactor/Slider/Model/Resource/Slideshow/Collection.php +9 -0
  23. app/code/community/Ereactor/Slider/Model/Slide.php +7 -0
  24. app/code/community/Ereactor/Slider/Model/Slide_src.php +139 -0
  25. app/code/community/Ereactor/Slider/Model/Slideshow.php +116 -0
  26. app/code/community/Ereactor/Slider/controllers/Adminhtml/Ereactor/Slider/ImagesController.php +32 -0
  27. app/code/community/Ereactor/Slider/controllers/Adminhtml/Ereactor/Slider/SlideController.php +230 -0
  28. app/code/community/Ereactor/Slider/controllers/Adminhtml/Ereactor/SliderController.php +188 -0
  29. app/code/community/Ereactor/Slider/etc/adminhtml.xml +54 -0
  30. app/code/community/Ereactor/Slider/etc/config.xml +68 -0
  31. app/code/community/Ereactor/Slider/etc/system.xml +41 -0
  32. app/code/community/Ereactor/Slider/etc/widget.xml +16 -0
  33. app/code/community/Ereactor/Slider/sql/ereactor_slider_setup/install-1.0.0.php +168 -0
  34. app/design/adminhtml/default/default/layout/ereactor_slider.xml +71 -0
  35. app/design/adminhtml/default/default/template/ereactor/slider/slide/batch.phtml +4 -0
  36. app/design/adminhtml/default/default/template/ereactor/slider/slide/preview.phtml +6 -0
  37. app/design/adminhtml/default/default/template/ereactor/slider/slideshow/preview.phtml +13 -0
  38. app/design/frontend/base/default/template/ereactor/slider/slide/html.phtml +1 -0
  39. app/design/frontend/base/default/template/ereactor/slider/slide/image.phtml +9 -0
  40. app/design/frontend/base/default/template/ereactor/slider/slideshow.phtml +19 -0
  41. app/etc/modules/Ereactor_Slider.xml +13 -0
  42. app/locale/en_US/Ereactor_Slider.csv +100 -0
  43. js/ereactor_slider/adminhtml/edit-slideshow.js +243 -0
  44. js/ereactor_slider/adminhtml/edit-slideshow.min.js +10 -0
  45. js/ereactor_slider/jquery-1.9.1.min.js +7 -0
  46. js/ereactor_slider/jquery.nivo-slider.js +707 -0
  47. media/ereactor_slider/.thumbs/ereactor_slider/batch/nemo.jpg +0 -0
  48. media/ereactor_slider/.thumbs/ereactor_slider/batch/up.jpg +0 -0
  49. media/ereactor_slider/.thumbs/ereactor_slider/black-small.gif +0 -0
  50. media/ereactor_slider/.thumbs/ereactor_slider/grey-small.gif +0 -0
  51. media/ereactor_slider/.thumbs/ereactor_slider/nemo.jpg +0 -0
  52. media/ereactor_slider/.thumbs/ereactor_slider/orange-small.gif +0 -0
  53. media/ereactor_slider/.thumbs/ereactor_slider/toystory-small.jpg +0 -0
  54. media/ereactor_slider/.thumbs/ereactor_slider/toystory.jpg +0 -0
  55. media/ereactor_slider/.thumbs/ereactor_slider/up.jpg +0 -0
  56. media/ereactor_slider/.thumbs/ereactor_slider/walle-small.jpg +0 -0
  57. media/ereactor_slider/.thumbs/ereactor_slider/walle.jpg +0 -0
  58. media/ereactor_slider/.thumbs/ereactor_slider/white-small.gif +0 -0
  59. media/ereactor_slider/black-small.gif +0 -0
  60. media/ereactor_slider/grey-small.gif +0 -0
  61. media/ereactor_slider/orange-small.gif +0 -0
  62. media/ereactor_slider/white-small.gif +0 -0
  63. media/wysiwyg/sample-slideshow/coffeecup.jpg +0 -0
  64. media/wysiwyg/sample-slideshow/lock.jpg +0 -0
  65. media/wysiwyg/sample-slideshow/womanonbeach.jpg +0 -0
  66. package.xml +41 -0
  67. skin/adminhtml/base/default/ereactor_slider/style.css +113 -0
  68. skin/adminhtml/base/default/ereactor_slider/style.min.css +1 -0
  69. skin/adminhtml/base/default/images/ereactor_slider/slide_html.png +0 -0
  70. skin/adminhtml/base/default/images/ereactor_slider/slide_image.png +0 -0
  71. skin/adminhtml/base/default/images/ereactor_slider/slide_imagetext.png +0 -0
  72. skin/adminhtml/base/default/images/ereactor_slider/slide_product.png +0 -0
  73. skin/frontend/base/default/css/ereactor_slider/default.css +95 -0
  74. skin/frontend/base/default/css/ereactor_slider/nivo-slider.css +135 -0
  75. skin/frontend/base/default/images/ereactor_slider/arrows.png +0 -0
  76. skin/frontend/base/default/images/ereactor_slider/bullets.png +0 -0
  77. skin/frontend/base/default/images/ereactor_slider/loading.gif +0 -0
app/code/community/Ereactor/Slider/Block/Adminhtml/Slide/Batch.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ereactor_Slider_Block_Adminhtml_Slide_Batch
3
+ extends Mage_Adminhtml_Block_Template
4
+ {
5
+ protected function _prepareLayout()
6
+ {
7
+ $slideshow = Mage::helper('slider')->getSlideshowInstance();
8
+ $this->setImagesUrl($this->getUrl('*/ereactor_slider_slide/batchAddImagesForm', array('slideshow_id' => $slideshow->getId())));
9
+ }
10
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Slide/Batch/Images.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ereactor_Slider_Block_Adminhtml_Slide_Batch_Images
3
+ extends Mage_Adminhtml_Block_Widget_Form
4
+ {
5
+ protected function _prepareForm() {
6
+ $slideshow = Mage::helper('slider')->getSlideshowInstance();
7
+ $isElementDisabled = ! Mage::helper('slider/Admin')->isActionAllowed('save');
8
+
9
+ $form = new Varien_Data_Form();
10
+ $form->setHtmlIdPrefix('slideshow_batch_add_images');
11
+
12
+ $fieldset = $form->addFieldset('base_fieldset', array(
13
+ 'legend' => $this->__('Generate slides from images')
14
+ ));
15
+
16
+ if ($slideshow->getId()) {
17
+ $fieldset->addField('slideshow_id', 'hidden', array(
18
+ 'name' => 'slideshow_id',
19
+ 'value' => $slideshow->getId(),
20
+ ));
21
+ }
22
+
23
+ $fieldset->addField('source', 'hidden', array(
24
+ 'name' => 'source',
25
+ 'value' => 'images',
26
+ ));
27
+
28
+ $fieldset->addField('path', 'text', array(
29
+ 'name' => 'path',
30
+ 'label' => $this->__('Folder path'),
31
+ 'title' => $this->__('Folder path'),
32
+ 'disabled' => $isElementDisabled,
33
+ 'style' => 'width: 200px;',
34
+ 'after_element_html' => '<p class="note">' . $this->__('The path to the folder that contains the images') . '</p>',
35
+ ));
36
+
37
+ // Buttons - save and cancel
38
+ $fieldset->addField('save', 'note', array(
39
+ 'text' =>
40
+ $this->getButtonHtml($this->__('Generate'), '', 'save') . '&nbsp;'
41
+ . $this->getButtonHtml($this->__('Cancel'), '', 'cancel')
42
+ ));
43
+
44
+ $form->addFieldNameSuffix('generate');
45
+ $this->setForm($form);
46
+ return parent::_prepareForm();
47
+ }
48
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Slide/Grid.php ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ereactor_Slider_Block_Adminhtml_Slide_Grid
3
+ extends Mage_Adminhtml_Block_Widget_Grid
4
+ {
5
+ public function __construct()
6
+ {
7
+ parent::__construct();
8
+
9
+ $this->setId('slideGrid');
10
+ $this->setUseAjax(true); // We need updating through AJAX
11
+ $this->setDefaultSort('slide_order'); // Show the slides in order
12
+ $this->setDefaultDir('ASC');
13
+ $this->setFilterVisibility(false); // No filtering
14
+ $this->setPagerVisibility(false); // No pagination
15
+ $this->setSaveParametersInSession(false); //Don't save paramters in session or else it creates problems
16
+
17
+ // Javascript parameters
18
+ $this->setRowClickCallback(false);
19
+ }
20
+
21
+ protected function _prepareCollection()
22
+ {
23
+ $slideshow = Mage::registry('slideshow');
24
+ $collection = Mage::getModel('ereactor_slider/slide')->getCollection()->addFilter('slideshow_id', $slideshow->getId());
25
+ $this->setCollection($collection);
26
+ return parent::_prepareCollection();
27
+ }
28
+
29
+ protected function _prepareColumns()
30
+ {
31
+ $this->addColumn('position', array(
32
+ 'header' => $this->__('ID'),
33
+ 'index' => 'slide_id',
34
+ 'width' => '50px',
35
+ ));
36
+
37
+ $this->addColumn('name', array(
38
+ 'header' => $this->__('Name'),
39
+ 'index' => 'name',
40
+ ));
41
+
42
+ $this->addColumn('caption', array(
43
+ 'header' => $this->__('Caption'),
44
+ 'index' => 'caption',
45
+ ));
46
+
47
+ $this->addColumn('slide_order', array(
48
+ 'header' => $this->__('Order'),
49
+ 'index' => 'slide_order',
50
+ 'width' => '50px',
51
+ ));
52
+
53
+ $this->addColumn('order_actions', array(
54
+ 'header' => $this->__('Move'),
55
+ 'width' => '50px',
56
+ 'type' => 'action',
57
+ 'getter' => 'getId',
58
+ 'actions' => array(
59
+ array(
60
+ 'caption' => '',
61
+ 'icon' => '/skin/adminhtml/default/default/images/sort-arrow-up.png',
62
+ 'url' => array( 'base' => '*/ereactor_slider_slide/moveUp' ),
63
+ 'ajax' => true,
64
+ 'field' => 'slide_id',
65
+ ),
66
+ array(
67
+ 'caption' => '',
68
+ 'icon' => '/skin/adminhtml/default/default/images/sort-arrow-down.png',
69
+ 'url' => array( 'base' => '*/ereactor_slider_slide/moveDown' ),
70
+ 'ajax' => true,
71
+ 'field' => 'slide_id',
72
+ ),
73
+ ),
74
+ 'sortable' => false,
75
+ 'renderer' => 'Ereactor_Slider_Block_Adminhtml_Widget_Grid_Column_Renderer_Slideaction',
76
+ ));
77
+
78
+ $this->addColumn('action', array(
79
+ 'header' => $this->__('Actions'),
80
+ 'width' => '80px',
81
+ 'type' => 'action',
82
+ 'getter' => 'getId',
83
+ 'actions' => array(
84
+ array(
85
+ 'caption' => $this->__('Edit'),
86
+ 'url' => array( 'base' => '*/ereactor_slider_slide/edit' ),
87
+ 'popup' => true,
88
+ 'field' => 'slide_id',
89
+ ),
90
+ array(
91
+ 'caption' => $this->__('Delete'),
92
+ 'url' => array( 'base' => '*/ereactor_slider_slide/delete' ),
93
+ 'ajax' => true,
94
+ 'confirm' => $this->__('Are you sure you want to delete this slide?'),
95
+ 'field' => 'slide_id',
96
+ ),
97
+ ),
98
+ 'sortable' => false,
99
+ 'renderer' => 'Ereactor_Slider_Block_Adminhtml_Widget_Grid_Column_Renderer_Slideaction',
100
+ ));
101
+
102
+ return parent::_prepareColumns();
103
+ }
104
+
105
+ public function getRowUrl($row)
106
+ {
107
+ return $this->getUrl('*/ereactor_slider_slide/edit', array('slide_id' => $row->getId()));
108
+ }
109
+
110
+ public function getGridUrl()
111
+ {
112
+ return $this->getUrl('*/ereactor_slider_slide/grid', array('_current' => true));
113
+ }
114
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Slide/Preview.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ereactor_Slider_Block_Adminhtml_Slide_Preview
3
+ extends Mage_Adminhtml_Block_Template
4
+ {
5
+ protected function _prepareLayout()
6
+ {
7
+ $helper = Mage::helper('slider');
8
+ $slide = $helper->getSlideInstance();
9
+ if (!isset($slide)) {
10
+ return '';
11
+ }
12
+ $slideshow = $helper->getSlideshowInstance();
13
+ if (!isset($slideshow)) {
14
+ return '';
15
+ }
16
+
17
+ $this->setWidth($slideshow->getFullWidth());
18
+ $this->setHeight($slideshow->getFullHeight());
19
+
20
+ $block = $this->getLayout()->createBlock(
21
+ 'Ereactor_Slider_Block_Slide',
22
+ 'slide',
23
+ array('slide' => $slide)
24
+ );
25
+ $this->setSlide($block->toHtml());
26
+ }
27
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Slide/Quickadd.php ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ereactor_Slider_Block_Adminhtml_Slide_Quickadd
3
+ extends Mage_Adminhtml_Block_Widget_Form
4
+ {
5
+ protected static $_text = array(
6
+ 'add' => array(
7
+ 'caption' => 'Add new slide',
8
+ 'save_button' => 'Add slide',
9
+ 'cancel_button' => 'Cancel',
10
+ ),
11
+
12
+ 'edit' => array(
13
+ 'caption' => 'Edit slide',
14
+ 'save_button' => 'Save changes',
15
+ 'cancel_button' => 'Cancel',
16
+ ),
17
+ );
18
+
19
+ protected $_mode = 'add';
20
+
21
+ protected function _text( $text ) {
22
+ return self::$_text[ $this->_mode ][ $text ];
23
+ }
24
+
25
+ protected function _prepareForm()
26
+ {
27
+ $helper = Mage::helper('slider');
28
+ $slideshow = $helper->getSlideshowInstance();
29
+ $slide = $helper->getSlideInstance();
30
+ $isEditing = isset($slide) && $slide->getId();
31
+ if ($isEditing) {
32
+ $this->_mode = 'edit';
33
+ }
34
+ $isElementDisabled = ! Mage::helper('slider/Admin')->isActionAllowed('save');
35
+
36
+ $form = new Varien_Data_Form();
37
+ $form->setHtmlIdPrefix('slideshow_quick' . $this->_mode . '_');
38
+
39
+ $fieldset = $form->addFieldset('base_fieldset', array(
40
+ 'legend' => $this->__($this->_text('caption'))
41
+ ));
42
+
43
+ // General fields
44
+
45
+ if ($slideshow->getId()) {
46
+ $fieldset->addField('slideshow_id', 'hidden', array(
47
+ 'name' => 'slideshow_id',
48
+ 'value' => $slideshow->getId(),
49
+ ));
50
+ }
51
+
52
+ if ($isEditing) {
53
+ $fieldset->addField('slide_id', 'hidden', array(
54
+ 'name' => 'slide_id',
55
+ 'value' => $slide->getId(),
56
+ ));
57
+ }
58
+
59
+ $fieldset->addField('name', 'text', array(
60
+ 'name' => 'name',
61
+ 'label' => $this->__('Title'),
62
+ 'title' => $this->__('Title'),
63
+ //'required' => true,
64
+ 'disabled' => $isElementDisabled,
65
+ ));
66
+
67
+ $fieldset->addField('caption', 'text', array(
68
+ 'name' => 'caption',
69
+ 'label' => $this->__('Caption'),
70
+ 'title' => $this->__('Caption'),
71
+ 'disabled' => $isElementDisabled,
72
+ ));
73
+
74
+ $slideTypeImages = '';
75
+ foreach (Ereactor_Slider_Model_Slide::$slideTypes as $typeId => $typeLabel) {
76
+ $slideTypeImages .= '<div class="ereactor-slide-type ereactor-slide-t' . $typeId . '" data-value="' . $typeId . '">' . $this->__($typeLabel) . '</div>';
77
+ }
78
+ $slideTypeImages .= '<div class="ereactor-slide-disabled ereactor-slide-t2">' . $this->__('Product') . '</div>
79
+ <p class="note">' . $this->__('Product slides are only available in the PRO version') . '</p>';
80
+
81
+ $fieldset->addField('type', 'hidden', array(
82
+ 'name' => 'type',
83
+ 'value' => Ereactor_Slider_Model_Slide::TYPE_IMAGE,
84
+ ));
85
+
86
+ $fieldset->addField('type_images', 'note', array(
87
+ 'label' => $this->__('Slide layout'),
88
+ 'title' => $this->__('Slide layout'),
89
+ 'text' => $slideTypeImages,
90
+ ));
91
+
92
+ $this->_addImageFields($fieldset, $isElementDisabled);
93
+ $this->_addHtmlFields($fieldset, $isElementDisabled);
94
+
95
+ // Buttons - save and cancel (only if we're editing)
96
+ $fieldset->addField('save', 'note', array(
97
+ 'text' =>
98
+ $this->getButtonHtml(Mage::helper('catalog')->__($this->_text('save_button')), '', 'save')
99
+ . ( $isEditing ? '&nbsp;' . $this->getButtonHtml(Mage::helper('catalog')->__($this->_text('cancel_button')), '', 'cancel') : '' )
100
+ ));
101
+
102
+ $form->addFieldNameSuffix('slide');
103
+ Mage::dispatchEvent('adminhtml_slideshow_edit_tab_slides_quick' . $this->_mode . '_prepare_form', array('form' => $form));
104
+
105
+ if ($isEditing) {
106
+ $data = $slide->getData();
107
+ $form->setValues($data);
108
+ }
109
+ $this->setForm($form);
110
+
111
+ return parent::_prepareForm();
112
+ }
113
+
114
+ protected function _addImageFields($fieldset, $isElementDisabled) {
115
+ $imageField = 'field-t' . Ereactor_Slider_Model_Slide::TYPE_IMAGE;
116
+ $chooseButton = $this->getLayout()->createBlock('adminhtml/widget_button')
117
+ ->setType('button')
118
+ ->setClass('scalable btn-chooser ereactor-image-chooser')
119
+ ->setLabel($this->__('Choose...'));
120
+
121
+ $fieldset->addField('image_url', 'text', array(
122
+ 'name' => 'image_url',
123
+ 'label' => $this->__('Image'),
124
+ 'title' => $this->__('Image'),
125
+ 'disabled' => $isElementDisabled,
126
+ 'class' => $imageField,
127
+ 'style' => 'width: 200px;',
128
+ 'after_element_html' => $chooseButton->toHtml(),
129
+ ));
130
+
131
+ $fieldset->addField('image_link', 'text', array(
132
+ 'name' => 'image_link',
133
+ 'label' => $this->__('Image link'),
134
+ 'title' => $this->__('Image link'),
135
+ 'disabled' => $isElementDisabled,
136
+ 'class' => $imageField,
137
+ ));
138
+
139
+ $fieldset->addField('image_target', 'select', array(
140
+ 'name' => 'image_target',
141
+ 'label' => $this->__('Where to open the link'),
142
+ 'title' => $this->__('Where to open the link'),
143
+ 'values' => array(
144
+ '_blank' => $this->__('In a new window'),
145
+ 'self' => $this->__('In the current window'),
146
+ ),
147
+ 'disabled' => $isElementDisabled,
148
+ 'class' => $imageField,
149
+ ));
150
+
151
+ $fieldset->addField('image_follow', 'select', array(
152
+ 'name' => 'image_follow',
153
+ 'label' => $this->__('Link follow'),
154
+ 'title' => $this->__('Link follow'),
155
+ 'style' => 'width: 50px;',
156
+ 'values' => array(
157
+ 'follow' => $this->__('Yes'),
158
+ 'nofollow' => $this->__('No'),
159
+ ),
160
+ 'after_element_html' => '<p class="note">' . $this->__('Should search engines follow the link?') . '</p>',
161
+ 'disabled' => $isElementDisabled,
162
+ 'class' => $imageField,
163
+ ));
164
+ }
165
+
166
+ protected function _addHtmlFields($fieldset, $isElementDisabled) {
167
+ $fieldset->addField('html_html', 'textarea', array(
168
+ 'name' => 'html_html',
169
+ 'label' => $this->__('Content'),
170
+ 'title' => $this->__('Content'),
171
+ 'disabled' => $isElementDisabled,
172
+ 'class' => 'field-t' . Ereactor_Slider_Model_Slide::TYPE_HTML,
173
+ ));
174
+ }
175
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Block_Adminhtml_Slideshow extends
4
+ Mage_adminhtml_Block_Widget_Grid_Container
5
+ {
6
+ public function __construct()
7
+ {
8
+ $this->_blockGroup = 'slider';
9
+ $this->_controller = 'adminhtml_slideshow';
10
+ $this->_headerText = 'Manage slideshows';
11
+
12
+ parent::__construct();
13
+ }
14
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Edit.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Block_Adminhtml_Slideshow_Edit extends
4
+ Mage_adminhtml_Block_Widget_Form_Container
5
+ {
6
+ public function __construct()
7
+ {
8
+ $helper = Mage::helper('slider/Admin');
9
+ $this->_objectId = 'slideshow_id';
10
+ $this->_blockGroup = 'slider';
11
+ $this->_controller = 'adminhtml_slideshow';
12
+
13
+ parent::__construct();
14
+
15
+ if ($helper->isActionAllowed('save')) {
16
+ $this->_updateButton('save', 'label', $this->__('Save'));
17
+ $this->_addButton('saveandcontinue', array(
18
+ 'label' => $this->__('Save and continue'),
19
+ 'onclick' => 'saveAndContinueEdit()',
20
+ 'class' => 'save',
21
+ ), -100);
22
+ } else {
23
+ $this->_removeButton('save');
24
+ }
25
+
26
+ if ($helper->isActionAllowed('delete')) {
27
+ $this->_updateButton('delete', 'label', $this->__('Delete'));
28
+ } else {
29
+ $this->_removeButton('delete');
30
+ }
31
+
32
+ $this->_formScripts[] = "
33
+ function toggleEditor() {
34
+ if (tinyMCE.getInstanceById('page_content') == null) {
35
+ tinyMCE.execCommand('mceAddControl', false, 'page_content');
36
+ } else {
37
+ tinyMCE.execCommand('mceRemoveControl', false, 'page_content');
38
+ }
39
+ }
40
+
41
+ function saveAndContinueEdit()
42
+ {
43
+ editForm.submit($('edit_form').action+'back/edit');
44
+ }
45
+ ";
46
+ }
47
+
48
+ public function getHeaderText()
49
+ {
50
+ $model = Mage::helper('slider')->getSlideshowInstance();
51
+ if ($model->getId()) {
52
+ return $this->__("Edit '%s'", $this->escapeHtml($model->getName()));
53
+ }
54
+ return $this->__('New slideshow');
55
+ }
56
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Edit/Form.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Block_Adminhtml_Slideshow_Edit_Form extends
4
+ Mage_adminhtml_Block_Widget_Form
5
+ {
6
+ protected function _prepareForm()
7
+ {
8
+ $form = new Varien_Data_Form(array(
9
+ 'id' => 'edit_form',
10
+ 'action' => $this->getUrl('*/*/save'),
11
+ 'method' => 'post',
12
+ 'enctype' => 'multipart/form-data',
13
+ ));
14
+
15
+ $form->setUseContainer(true);
16
+ $this->setForm($form);
17
+ return parent::_prepareForm();
18
+ }
19
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Edit/Tab/General.php ADDED
@@ -0,0 +1,247 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Block_Adminhtml_Slideshow_Edit_Tab_General
4
+ extends Mage_adminhtml_Block_Widget_Form
5
+ implements Mage_adminhtml_Block_Widget_Tab_Interface
6
+ {
7
+ private static $defaultValues = array(
8
+ // Base default values
9
+ 'type' => 0,
10
+ 'theme' => 'default',
11
+ 'width' => 600,
12
+ 'width_unit' => 'px',
13
+ 'height' => 200,
14
+ 'height_unit' => 'px',
15
+ // Javascript default values
16
+ 'show_arrows' => 1,
17
+ 'show_buttons' => 1,
18
+ 'show_buttons_overlay' => 0,
19
+ 'mouse_scroll' => 1,
20
+ 'keyboard_scroll' => 1,
21
+ 'pause_on_hover' => 0,
22
+ 'manual_advance' => 0,
23
+ //'autoplay_mode' => 3,
24
+ 'autoplay_interval' => 5000,
25
+ 'transition_type' => 'slideInLeft',
26
+ 'transition_time' => 400,
27
+ 'transition_easing' => 0,
28
+ );
29
+
30
+ private static $units = array(
31
+ 0 => 'px',
32
+ 1 => '%',
33
+ );
34
+
35
+ protected function _prepareForm()
36
+ {
37
+ $this->getParentBlock()->setActiveTab('general');
38
+ $model = Mage::helper('slider')->getSlideshowInstance();
39
+ $isElementDisabled = ! Mage::helper('slider/Admin')->isActionAllowed('save');
40
+ $form = new Varien_Data_Form();
41
+ $form->setHtmlIdPrefix('slideshow_general_');
42
+ $formData = $model->getData();
43
+ $formData = array_merge(self::$defaultValues, $formData);
44
+
45
+ $fieldset = $form->addFieldset('base_fieldset', array(
46
+ 'legend' => $this->__('Slideshow info')
47
+ ));
48
+
49
+ if ($model->getId()) {
50
+ $fieldset->addField('slideshow_id', 'hidden', array(
51
+ 'name' => 'slideshow_id'
52
+ ));
53
+ }
54
+
55
+ $fieldset->addField('name', 'text', array(
56
+ 'name' => 'name',
57
+ 'label' => $this->__('Title'),
58
+ 'title' => $this->__('Title'),
59
+ 'required' => true,
60
+ 'disabled' => $isElementDisabled,
61
+ ));
62
+
63
+ /*$fieldset->addField('type', 'select', array(
64
+ 'name' => 'type',
65
+ 'label' => $this->__('Type'),
66
+ 'title' => $this->__('Type'),
67
+ 'values' => $model->getSlideshowTypes(),
68
+ ));*/
69
+
70
+ /*$fieldset->addField('theme', 'text', array(
71
+ 'name' => 'theme',
72
+ 'label' => $this->__('Theme'),
73
+ 'title' => $this->__('Theme'),
74
+ ));*/
75
+
76
+ $stretchButton = $this->getLayout()->createBlock('adminhtml/widget_button')
77
+ ->setType('button')
78
+ ->setId('slideshow_general_stretch_width')
79
+ ->setLabel($this->__('Stretch'));
80
+
81
+ $fieldset->addField('width', 'text', array(
82
+ 'name' => 'width',
83
+ 'label' => $this->__('Width'),
84
+ 'title' => $this->__('Width'),
85
+ 'style' => 'width: 50px;',
86
+ 'after_element_html' => $this->_prepareUnitSelect('width_unit', 'Width unit', $formData['width_unit']) . ' ' . $stretchButton->toHtml(),
87
+ ));
88
+
89
+ $fieldset->addField('height', 'text', array(
90
+ 'name' => 'height',
91
+ 'label' => $this->__('Height'),
92
+ 'title' => $this->__('Height'),
93
+ 'style' => 'width: 50px;','after_element_html' => $this->_prepareUnitSelect('height_unit', 'Height unit', $formData['height_unit']),
94
+ ));
95
+
96
+ $javascript = json_decode($model->getJavascript(), true);
97
+ $this->_prepareControlFields($form, $javascript);
98
+ $this->_prepareTransitionFields($form, $javascript);
99
+
100
+ Mage::dispatchEvent('adminhtml_slideshow_edit_tab_main_prepare_form', array('form' => $form));
101
+
102
+ $form->setValues($formData);
103
+ $this->setForm($form);
104
+
105
+ return parent::_prepareForm();
106
+ }
107
+
108
+ protected function _prepareUnitSelect($name, $title, $value)
109
+ {
110
+ $html = '<select id="slideshow_general_' . $name . '" name="' . $name . '" title="' . $title . '" class="select" style="width:40px;">';
111
+ foreach (self::$units as $key => $unit) {
112
+ $html .= '<option value="' . $key . '" ' . ($key == $value ? 'selected="selected"' : '') . '>' . $unit . '</option>';
113
+ }
114
+ $html .= '</select>';
115
+ return $html;
116
+ }
117
+
118
+ protected function _prepareControlFields($form, $js)
119
+ {
120
+ $fieldset = $form->addFieldset('javascript_fieldset', array(
121
+ 'legend' => $this->__('Slideshow controls')
122
+ ));
123
+
124
+ $fieldset->addField('show_arrows', 'radios', array(
125
+ 'name' => 'show_arrows',
126
+ 'label' => $this->__('Show navigation arrows?'),
127
+ 'values' => array(
128
+ array('value' => 1, 'label' => $this->__('Yes')),
129
+ array('value' => 0, 'label' => $this->__('No')),
130
+ ),
131
+ 'after_element_html' => '<p class="note">' . $this->__('These are the arrows you use to move left/right between slides') . '</p>',
132
+ ));
133
+
134
+ $fieldset->addField('show_buttons', 'radios', array(
135
+ 'name' => 'show_buttons',
136
+ 'label' => $this->__('Show navigation buttons?'),
137
+ 'values' => array(
138
+ array('value' => 1, 'label' => $this->__('Yes')),
139
+ array('value' => 0, 'label' => $this->__('No')),
140
+ ),
141
+ 'after_element_html' => '<p class="note">' . $this->__('These are the buttons you use to jump between slides') . '</p>',
142
+ ));
143
+
144
+ $fieldset->addField('show_buttons_overlay', 'radios', array(
145
+ 'name' => 'show_buttons_overlay',
146
+ 'label' => $this->__('Show navigation buttons as an overlay?'),
147
+ 'values' => array(
148
+ array('value' => 1, 'label' => $this->__('Yes')),
149
+ array('value' => 0, 'label' => $this->__('No')),
150
+ ),
151
+ 'after_element_html' => '<p class="note">' . $this->__('When enabled, the buttons will appear over the slideshow; when disabled, they will appear below.') . '</p>',
152
+ ));
153
+
154
+ /*$fieldset->addField('mouse_scroll', 'radios', array(
155
+ 'name' => 'mouse_scroll',
156
+ 'label' => $this->__('Enable mouse wheel scroll?'),
157
+ 'values' => array(
158
+ array('value' => 1, 'label' => $this->__('Yes')),
159
+ array('value' => 0, 'label' => $this->__('No')),
160
+ ),
161
+ ));
162
+
163
+ $fieldset->addField('keyboard_scroll', 'radios', array(
164
+ 'name' => 'keyboard_scroll',
165
+ 'label' => $this->__('Enable keyboard scroll?'),
166
+ 'values' => array(
167
+ array('value' => 1, 'label' => $this->__('Yes')),
168
+ array('value' => 0, 'label' => $this->__('No')),
169
+ ),
170
+ ));*/
171
+
172
+ $fieldset->addField('pause_on_hover', 'radios', array(
173
+ 'name' => 'pause_on_hover',
174
+ 'label' => $this->__('Pause slideshow on mouseover'),
175
+ 'values' => array(
176
+ array('value' => 1, 'label' => $this->__('Yes')),
177
+ array('value' => 0, 'label' => $this->__('No')),
178
+ ),
179
+ ));
180
+ }
181
+
182
+ protected function _prepareTransitionFields($form, $js) {
183
+ $fieldset = $form->addFieldset('transition_fieldset', array(
184
+ 'legend' => $this->__('Slide transitions')
185
+ ));
186
+
187
+ $fieldset->addField('manual_advance', 'radios', array(
188
+ 'name' => 'manual_advance',
189
+ 'label' => $this->__('Play automatically?'),
190
+ 'values' => array(
191
+ array('value' => 0, 'label' => $this->__('Yes')),
192
+ array('value' => 1, 'label' => $this->__('No')),
193
+ ),
194
+ ));
195
+
196
+ $fieldset->addField('autoplay_interval', 'text', array(
197
+ 'name' => 'autoplay_interval',
198
+ 'label' => $this->__('Time between slides'),
199
+ 'style' => 'width: 50px;',
200
+ 'after_element_html' => $this->__('milliseconds') . ' <p class="note">' . $this->__('Not available if autoplay is disabled.') . '<br />' . $this->__('Values under 50 miliseconds are ignored.') . '</p>',
201
+ ));
202
+
203
+ $fieldset->addField('transition_type', 'select', array(
204
+ 'name' => 'transition_type',
205
+ 'label' => $this->__('Slide transition'),
206
+ 'values' => Ereactor_Slider_Model_Slideshow::$transitionTypes,
207
+ 'after_element_html' => '<p class="note">' . $this->__('For Product and HTML slides, only Slide and Fade are available.') . '</p>',
208
+ ));
209
+
210
+ $fieldset->addField('transition_time', 'text', array(
211
+ 'name' => 'transition_time',
212
+ 'label' => $this->__('Transition time'),
213
+ 'style' => 'width: 50px;',
214
+ 'after_element_html' => $this->__('milliseconds') . ' <p class="note">' . $this->__('Values under 50 miliseconds are ignored.') . '</p>',
215
+ ));
216
+
217
+ /*$fieldset->addField('transition_easing', 'select', array(
218
+ 'name' => 'transition_easing',
219
+ 'label' => $this->__('Transition easing'),
220
+ 'values' => array(
221
+ 0 => $this->__('Linear'),
222
+ 1 => $this->__('Cubic'),
223
+ 2 => $this->__('Sine'),
224
+ ),
225
+ ));*/
226
+ }
227
+
228
+ public function getTabLabel()
229
+ {
230
+ return $this->__('General');
231
+ }
232
+
233
+ public function getTabTitle()
234
+ {
235
+ return $this->__('General');
236
+ }
237
+
238
+ public function canShowTab()
239
+ {
240
+ return true;
241
+ }
242
+
243
+ public function isHidden()
244
+ {
245
+ return false;
246
+ }
247
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Edit/Tab/Slides.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ereactor_Slider_Block_Adminhtml_Slideshow_Edit_Tab_Slides
3
+ extends Mage_Adminhtml_Block_Text_List
4
+ implements Mage_Adminhtml_Block_Widget_Tab_Interface
5
+ {
6
+ public function __construct()
7
+ {
8
+ }
9
+
10
+ public function getTabLabel()
11
+ {
12
+ return $this->__('Slides');
13
+ }
14
+
15
+ public function getTabTitle()
16
+ {
17
+ return $this->__('Slides');
18
+ }
19
+
20
+ public function canShowTab()
21
+ {
22
+ // Only show this tab if the slideshow is already created
23
+ // This is because we need to give a slideshow_id to the slides that we create
24
+ // We can't do that if the slideshow is not saved
25
+ $slideshow = Mage::helper('slider')->getSlideshowInstance();
26
+ return isset($slideshow) && $slideshow->getId();
27
+ }
28
+
29
+ public function isHidden()
30
+ {
31
+ return false;
32
+ }
33
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Edit/Tabs.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Block_Adminhtml_Slideshow_Edit_Tabs
4
+ extends Mage_adminhtml_Block_Widget_Tabs
5
+ {
6
+ public function __construct()
7
+ {
8
+ parent::__construct();
9
+ $this->setId('page_tabs');
10
+ $this->setDestElementId('edit_form');
11
+ $this->setTitle(Mage::helper('slider')->__('Slideshow info'));
12
+ }
13
+
14
+ protected function _prepareLayout() {
15
+ $url = array(
16
+ 'quickAddSave' => $this->getUrl('*/ereactor_slider_slide/save'),
17
+ 'productChooser' => $this->getUrl('*/ereactor_slider_chooser/product'),
18
+ 'productsSchooser' => $this->getUrl('*/ereactor_slider_chooser/products'),
19
+ 'imageChooser' => $this->getUrl('*/cms_wysiwyg_images/index'),
20
+ 'imageInsert' => $this->getUrl('*/ereactor_slider_images/onInsert'),
21
+ 'batchAdd' => $this->getUrl('*/ereactor_slider_slide/batchAdd'),
22
+ 'slidePreview' => $this->getUrl('*/ereactor_slider_slide/preview'),
23
+ );
24
+ $jsBlock = $this->getLayout()
25
+ ->createBlock('core/text', 'js_urls')
26
+ ->setText('<script type="text/javascript">EREACTOR.SLIDER.url = ' . json_encode( $url ) . ';</script>');
27
+ $this->getLayout()->getBlock('content')->append($jsBlock);
28
+ return parent::_prepareLayout();
29
+ }
30
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Grid.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Block_Adminhtml_Slideshow_Grid extends
4
+ Mage_adminhtml_Block_Widget_Grid
5
+ {
6
+ public function __construct()
7
+ {
8
+ parent::__construct();
9
+ $this->setId('slideshow_list_grid');
10
+ $this->setDefaultSort('slideshow_id');
11
+ $this->setDefaultDir('ASC');
12
+ $this->setSaveParametersInSession(true);
13
+ $this->setUseAjax(true);
14
+ }
15
+
16
+ protected function _prepareCollection()
17
+ {
18
+ $collection = Mage::getModel('ereactor_slider/slideshow')->getCollection();
19
+ $collection->getSelect()
20
+ ->joinLeft(array('slide' => 'ereactor_slider_slide'),'main_table.slideshow_id=slide.slideshow_id', null)
21
+ ->columns('COUNT(*) AS nr_slides')
22
+ ->group('main_table.slideshow_id');
23
+ $this->setCollection($collection);
24
+ return parent::_prepareCollection();
25
+ }
26
+
27
+ protected function _prepareColumns()
28
+ {
29
+ $this->addColumn('slideshow_id', array(
30
+ 'header' => $this->__('ID'),
31
+ 'width' => '50px',
32
+ 'index' => 'slideshow_id',
33
+ ));
34
+
35
+ $this->addColumn('name', array(
36
+ 'header' => $this->__('Name'),
37
+ 'index' => 'name',
38
+ ));
39
+
40
+ /*$this->addColumn('type', array(
41
+ 'header' => $this->__('Type'),
42
+ 'index' => 'type',
43
+ ));
44
+
45
+ $this->addColumn('theme', array(
46
+ 'header' => $this->__('Theme'),
47
+ 'index' => 'theme',
48
+ ));*/
49
+
50
+ $this->addColumn('nr_slides', array(
51
+ 'header' => $this->__('Number of slides'),
52
+ 'index' => 'nr_slides',
53
+ ));
54
+
55
+ $this->addColumn('action', array(
56
+ 'header' => $this->__('Action'),
57
+ 'width' => '100px',
58
+ 'type' => 'action',
59
+ 'getter' => 'getId',
60
+ 'actions' => array(
61
+ array(
62
+ 'caption' => $this->__('Edit'),
63
+ 'url' => array( 'base' => '*/*/edit' ),
64
+ 'field' => 'id'
65
+ ),
66
+ ),
67
+ 'filter' => false,
68
+ 'sortable' => false,
69
+ ));
70
+
71
+ return parent::_prepareColumns();
72
+ }
73
+
74
+ public function getRowUrl($row)
75
+ {
76
+ return $this->getUrl('*/*/edit', array('slideshow_id' => $row->getId()));
77
+ }
78
+
79
+ public function getGridUrl()
80
+ {
81
+ return $this->getUrl('*/*/grid', array('_current' => true));
82
+ }
83
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Slideshow/Preview.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ereactor_Slider_Block_Adminhtml_Slideshow_Preview
3
+ extends Mage_Adminhtml_Block_Template
4
+ {
5
+ public function __construct()
6
+ {
7
+ $nivoParams = json_encode(array(
8
+ 'effect' => 'slideInLeft',
9
+ 'animSpeed' => 400,
10
+ 'pauseTime' => 5000,
11
+ 'directionNav' => true,
12
+ 'controlNav' => true,
13
+ 'pauseOnHover' => false,
14
+ 'manualAdvance' => false,
15
+ ));
16
+ $slideshow = Mage::helper('slider')->getSlideshowInstance();
17
+ if (isset($slideshow) && $slideshow->getId()) {
18
+ $nivoParams = $slideshow->getNivoParams();
19
+ }
20
+ $this->setNivoParams($nivoParams);
21
+ }
22
+ }
app/code/community/Ereactor/Slider/Block/Adminhtml/Widget/Grid/Column/Renderer/Slideaction.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ereactor_Slider_Block_Adminhtml_Widget_Grid_Column_Renderer_Slideaction
3
+ extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Action
4
+ {
5
+ /**
6
+ * Renders column
7
+ *
8
+ * @param Varien_Object $row
9
+ * @return string
10
+ */
11
+ public function render(Varien_Object $row)
12
+ {
13
+ $actions = $this->getColumn()->getActions();
14
+ if (empty($actions) || !is_array($actions)) {
15
+ return '&nbsp;';
16
+ }
17
+
18
+ $out = '';
19
+
20
+ foreach ($actions as $action) {
21
+ if (is_array($action)) {
22
+ $icon = '';
23
+ if (isset($action['icon'])) {
24
+ $icon = '<img src="' . $action['icon'] . '" />';
25
+ $action['caption'] = '{ICON}' . ( empty( $action['caption'] ) ? '' : '&nbsp;' . $action['caption'] );
26
+ unset($action['icon']);
27
+ }
28
+ $extraClasses = array();
29
+ if (isset($action['popup']) && $action['popup'] === true) {
30
+ $extraClasses[] = 'ereactor-ajax-modal';
31
+ unset($action['popup']);
32
+ } elseif (isset($action['ajax']) && $action['ajax'] === true) {
33
+ $extraClasses[] = 'ereactor-ajax-link';
34
+ unset($action['ajax']);
35
+ }
36
+ if (!empty($action['confirm'])) {
37
+ $extraClasses[] = 'ereactor-confirm';
38
+ $action['data-confirm'] = $action['confirm'];
39
+ unset($action['confirm']);
40
+ }
41
+ $action['class'] = (empty($action['class']) ? '' : $action['class'] . ' ') . implode(' ', $extraClasses);
42
+ $renderedAction = str_replace( '{ICON}', $icon, $this->_toLinkHtml($action, $row) );
43
+ $out .= $renderedAction . '&nbsp;';
44
+ }
45
+ }
46
+
47
+ return $out;
48
+ }
49
+ }
app/code/community/Ereactor/Slider/Block/Slide.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Ereactor_Slider_Block_Slide
3
+ extends Mage_Core_Block_Template
4
+ {
5
+ public function __construct()
6
+ {
7
+ parent::__construct();
8
+
9
+ // This is always a frontend block, regardless of where it's called from
10
+ // This affects the paths that are generated for the templates
11
+ $this->setData('area', 'frontend');
12
+ }
13
+
14
+ protected function _prepareLayout()
15
+ {
16
+ $slide = $this->getSlide();
17
+ $this->setCaption($slide->getCaption());
18
+
19
+ $slideParams = json_decode($slide->getContent());
20
+ switch ($slide->getType()) {
21
+ case Ereactor_Slider_Model_Slide::TYPE_IMAGE:
22
+ $this->_prepareImage($slideParams);
23
+ break;
24
+ case Ereactor_Slider_Model_Slide::TYPE_HTML:
25
+ $this->_prepareHtml($slideParams);
26
+ break;
27
+ }
28
+
29
+ return parent::_prepareLayout();
30
+ }
31
+
32
+ protected function _prepareImage($params)
33
+ {
34
+ $this->setTemplate('ereactor/slider/slide/image.phtml');
35
+ $this->setImageUrl($params->image_url);
36
+ if (!empty($params->image_link)) {
37
+ $this->setImageLink($params->image_link);
38
+ $this->setTarget($params->image_target);
39
+ $this->setFollow($params->image_follow);
40
+ }
41
+ }
42
+
43
+ protected function _prepareHtml($params)
44
+ {
45
+ $this->setTemplate('ereactor/slider/slide/html.phtml');
46
+ $this->setInnerHtml($params->html_html);
47
+ }
48
+ }
app/code/community/Ereactor/Slider/Block/Slider.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Block_Slider
4
+ extends Mage_Core_Block_Template
5
+ implements Mage_Widget_Block_Interface
6
+ {
7
+ private static $_includedScripts = false;
8
+
9
+ protected function _toHtml()
10
+ {
11
+ $this->setTemplate('ereactor/slider/slideshow.phtml');
12
+
13
+ $slideshow = Mage::getModel('ereactor_slider/slideshow')->load($this->getData('slideshowId'));
14
+ $this->setSlideshow($slideshow);
15
+
16
+ $slides = Mage::getModel('ereactor_slider/slide')->getCollection()
17
+ ->addFilter('slideshow_id', $slideshow->getId())
18
+ ->setOrder('slide_order', 'ASC');
19
+
20
+ $slidesHtml = array();
21
+ foreach ($slides as $slide) {
22
+ $block = Mage::app()->getLayout()->createBlock(
23
+ 'Ereactor_Slider_Block_Slide',
24
+ 'slide',
25
+ array('slide' => $slide)
26
+ );
27
+ $slidesHtml[] = $block->toHtml();
28
+ }
29
+
30
+ $this->setSlides($slidesHtml);
31
+
32
+ if (!self::$_includedScripts) {
33
+ $this->setIncludeScripts(true);
34
+ self::$_includedScripts = true;
35
+ }
36
+
37
+ return parent::_toHtml();
38
+ }
39
+ }
app/code/community/Ereactor/Slider/Helper/Admin.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Helper_Admin extends Mage_Core_Helper_Abstract
4
+ {
5
+ public function isActionAllowed($action)
6
+ {
7
+ return Mage::getSingleton('Admin/session')->isAllowed('slideshow/manage/' . $action);
8
+ }
9
+ }
app/code/community/Ereactor/Slider/Helper/Data.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Helper_Data extends Mage_Core_Helper_Abstract
4
+ {
5
+ protected $_slideshowInstance;
6
+ protected $_slideInstance;
7
+
8
+ public function getSlideshowInstance() {
9
+ if (!$this->_slideshowInstance) {
10
+ $this->_slideshowInstance = Mage::registry('slideshow');
11
+ }
12
+
13
+ return $this->_slideshowInstance;
14
+ }
15
+
16
+ public function getSlideInstance() {
17
+ if (!$this->_slideInstance) {
18
+ $this->_slideInstance = Mage::registry('slide');
19
+ }
20
+
21
+ return $this->_slideInstance;
22
+ }
23
+
24
+ public function noLicenseKey($errorLevel = 'warning') {
25
+ $url = $this->_getUrl('*/system_config/edit', array( 'section' => 'ereactor_slider' ));
26
+ $errorText = $this->__('You have not yet entered a license key for e-reactor Slider. You must do this before you are able to save any slides.') .
27
+ ' <a href="' . $url . '" target="_blank">' . $this->__('Click here') . '</a>' . $this->__(' to enter a license key now.') . '<br />' .
28
+ $this->__('If you do not have a license key yet, you can go to %s and create one.', '<a href="http://shop.e-reactor.dk/licensemanager/license/" target="_blank">http://shop.e-reactor.dk</a>');
29
+
30
+ if ($errorLevel === 'warning') {
31
+ Mage::getSingleton('core/session')->addWarning($errorText);
32
+ } else {
33
+ Mage::throwException($errorText);
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Some form fields don't go straight to the database
39
+ * Instead, they are placed into a JSON-encoded field
40
+ * This method extracts those fields from the $data array
41
+ * and returns them encoded together as JSON
42
+ * Params:
43
+ * $data An array containing the form data (from $_POST)
44
+ * $data IS MODIFIED by this method
45
+ * $fields An array of fields to extract
46
+ */
47
+ public function extractJsonFields(&$data, $fields) {
48
+ $result = array();
49
+ foreach ($fields as $field) {
50
+ if (!array_key_exists($field, $data)) {
51
+ continue;
52
+ }
53
+ $result[$field] = $data[$field];
54
+ unset($data[$field]);
55
+ }
56
+
57
+ return json_encode( $result );
58
+ }
59
+ }
app/code/community/Ereactor/Slider/Model/Resource/Slide.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Model_Resource_Slide extends Mage_Core_Model_Resource_Db_Abstract
4
+ {
5
+ protected function _construct()
6
+ {
7
+ $this->_init('ereactor_slider/slide', 'slide_id');
8
+ }
9
+ }
app/code/community/Ereactor/Slider/Model/Resource/Slide/Collection.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Model_Resource_Slide_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
4
+ {
5
+ protected function _construct()
6
+ {
7
+ $this->_init('ereactor_slider/slide');
8
+ }
9
+
10
+ public function getNextOrder($slideshow_id)
11
+ {
12
+ $this->getSelect()
13
+ ->reset(Zend_Db_Select::COLUMNS)
14
+ ->columns('MAX(slide_order) AS max_order')
15
+ ->where('slideshow_id = ?', $slideshow_id);
16
+ return $this->fetchItem()->max_order + 1;
17
+ }
18
+ }
app/code/community/Ereactor/Slider/Model/Resource/Slideshow.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Model_Resource_Slideshow extends Mage_Core_Model_Resource_Db_Abstract
4
+ {
5
+ protected function _construct()
6
+ {
7
+ $this->_init('ereactor_slider/slideshow', 'slideshow_id');
8
+ }
9
+ }
app/code/community/Ereactor/Slider/Model/Resource/Slideshow/Collection.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Model_Resource_Slideshow_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
4
+ {
5
+ protected function _construct()
6
+ {
7
+ $this->_init('ereactor_slider/slideshow');
8
+ }
9
+ }
app/code/community/Ereactor/Slider/Model/Slide.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+ $currentError = error_reporting();
3
+ error_reporting(0);
4
+ ob_start();
5
+ require_once(__DIR__ . '/Slide_src.php');
6
+ ob_end_clean();
7
+ error_reporting($currentError);
app/code/community/Ereactor/Slider/Model/Slide_src.php ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ //Obfuscation provided by FOPO - Free Online PHP Obfuscator v1.2: http://www.fopo.com.ar
3
+ $u9d982898a3b="\x62\141\x73\145\x36\64\x5f\144\x65\143\x6f\144\x65";@eval($u9d982898a3b(
4
+ "JGtiOGE0MzE0YWM1MGUzYjI0MmFkMTkxZTEwMzkzODc4PSJceDYyIjskbTM3NDU2ZjBhMDgxMmY0MTQzMjEyYmE
5
+ 3ZTg3NjczZDc9Ilx4NjUiOyRuNjFkYTIyYTFhZTI2MTRjMDg1M2YzYWFjNzU1MjRhYj0iXHg2NiI7JGU2YjExMzd
6
+ lNmQ2MzM0MTcxZDAwYmNmMGVjMThjZGZjPSJceDY3IjskaDk3OWYwNWFiZjkzZjgxNDUwZTE0MDIzMTdjMmE0NGY
7
+ 9Ilx4NmQiOyRvZjc5YjhkNWQxMzNmYThlMGFmNjBkYjVmMGJiNGY2MT0iXHg2ZiI7JGg3OWI5NzgyMDk2ZmIwNjc
8
+ xZDU3NDRmZTlmYTg3MDk2PSJceDZmIjskeWRhZDQyYmQ4Y2JiYWE3ZTI2MWYwN2I3YzM5ZjVhNDQ9Ilx4NmYiOyR
9
+ lYzI5MGUxNWE0NTJhMmJkOTQ2ODEyMDg0YWU5OTQ2Nz0iXHg2ZiI7JHM2ZjA2ZWQ4NWQxZDdkNWVmOTlhNjVhNjU
10
+ yODU3OTEzPSJceDczIjskdGFjNzgzYTE5Y2ZhNGIwYzlkYjE3Mjk1NzJmNGE3YTQ9Ilx4NzMiOyRzNTgyNzhjNTN
11
+ jNmUyZWE3OWFiOTA2OTI5NzZmNTg5ZT0iXHg3MyI7JHBkMTU2NDVmMjY5YTdhMDAwMTY1YzRiNzBkYTFjOGU5PSJ
12
+ ceDczIjska2I4YTQzMTRhYzUwZTNiMjQyYWQxOTFlMTAzOTM4NzguPSJcMTQxIjskbTM3NDU2ZjBhMDgxMmY0MTQ
13
+ zMjEyYmE3ZTg3NjczZDcuPSJcMTYyIjskbjYxZGEyMmExYWUyNjE0YzA4NTNmM2FhYzc1NTI0YWIuPSJcMTUxIjs
14
+ kZTZiMTEzN2U2ZDYzMzQxNzFkMDBiY2YwZWMxOGNkZmMuPSJcMTcyIjskaDk3OWYwNWFiZjkzZjgxNDUwZTE0MDI
15
+ zMTdjMmE0NGYuPSJcMTQ0Ijskb2Y3OWI4ZDVkMTMzZmE4ZTBhZjYwZGI1ZjBiYjRmNjEuPSJcMTQyIjskaDc5Yjk
16
+ 3ODIwOTZmYjA2NzFkNTc0NGZlOWZhODcwOTYuPSJcMTQyIjskeWRhZDQyYmQ4Y2JiYWE3ZTI2MWYwN2I3YzM5ZjV
17
+ hNDQuPSJcMTQyIjskZWMyOTBlMTVhNDUyYTJiZDk0NjgxMjA4NGFlOTk0NjcuPSJcMTQyIjskczZmMDZlZDg1ZDF
18
+ kN2Q1ZWY5OWE2NWE2NTI4NTc5MTMuPSJcMTY0IjskdGFjNzgzYTE5Y2ZhNGIwYzlkYjE3Mjk1NzJmNGE3YTQuPSJ
19
+ cMTY0IjskczU4Mjc4YzUzYzZlMmVhNzlhYjkwNjkyOTc2ZjU4OWUuPSJcMTY0IjskcGQxNTY0NWYyNjlhN2EwMDA
20
+ xNjVjNGI3MGRhMWM4ZTkuPSJcMTY0Ijska2I4YTQzMTRhYzUwZTNiMjQyYWQxOTFlMTAzOTM4NzguPSJceDczIjs
21
+ kbTM3NDU2ZjBhMDgxMmY0MTQzMjEyYmE3ZTg3NjczZDcuPSJceDY1IjskbjYxZGEyMmExYWUyNjE0YzA4NTNmM2F
22
+ hYzc1NTI0YWIuPSJceDZjIjskZTZiMTEzN2U2ZDYzMzQxNzFkMDBiY2YwZWMxOGNkZmMuPSJceDY5IjskaDk3OWY
23
+ wNWFiZjkzZjgxNDUwZTE0MDIzMTdjMmE0NGYuPSJceDM1Ijskb2Y3OWI4ZDVkMTMzZmE4ZTBhZjYwZGI1ZjBiYjR
24
+ mNjEuPSJceDVmIjskaDc5Yjk3ODIwOTZmYjA2NzFkNTc0NGZlOWZhODcwOTYuPSJceDVmIjskeWRhZDQyYmQ4Y2J
25
+ iYWE3ZTI2MWYwN2I3YzM5ZjVhNDQuPSJceDVmIjskZWMyOTBlMTVhNDUyYTJiZDk0NjgxMjA4NGFlOTk0NjcuPSJ
26
+ ceDVmIjskczZmMDZlZDg1ZDFkN2Q1ZWY5OWE2NWE2NTI4NTc5MTMuPSJceDcyIjskdGFjNzgzYTE5Y2ZhNGIwYzl
27
+ kYjE3Mjk1NzJmNGE3YTQuPSJceDcyIjskczU4Mjc4YzUzYzZlMmVhNzlhYjkwNjkyOTc2ZjU4OWUuPSJceDcyIjs
28
+ kcGQxNTY0NWYyNjlhN2EwMDAxNjVjNGI3MGRhMWM4ZTkuPSJceDcyIjska2I4YTQzMTRhYzUwZTNiMjQyYWQxOTF
29
+ lMTAzOTM4NzguPSJcMTQ1IjskbTM3NDU2ZjBhMDgxMmY0MTQzMjEyYmE3ZTg3NjczZDcuPSJcMTQ3IjskbjYxZGE
30
+ yMmExYWUyNjE0YzA4NTNmM2FhYzc1NTI0YWIuPSJcMTQ1IjskZTZiMTEzN2U2ZDYzMzQxNzFkMDBiY2YwZWMxOGN
31
+ kZmMuPSJcMTU2Ijskb2Y3OWI4ZDVkMTMzZmE4ZTBhZjYwZGI1ZjBiYjRmNjEuPSJcMTQ1IjskaDc5Yjk3ODIwOTZ
32
+ mYjA2NzFkNTc0NGZlOWZhODcwOTYuPSJcMTQ1IjskeWRhZDQyYmQ4Y2JiYWE3ZTI2MWYwN2I3YzM5ZjVhNDQuPSJ
33
+ cMTQ3IjskZWMyOTBlMTVhNDUyYTJiZDk0NjgxMjA4NGFlOTk0NjcuPSJcMTYzIjskczZmMDZlZDg1ZDFkN2Q1ZWY
34
+ 5OWE2NWE2NTI4NTc5MTMuPSJcMTM3IjskdGFjNzgzYTE5Y2ZhNGIwYzlkYjE3Mjk1NzJmNGE3YTQuPSJcMTM3Ijs
35
+ kczU4Mjc4YzUzYzZlMmVhNzlhYjkwNjkyOTc2ZjU4OWUuPSJcMTYwIjskcGQxNTY0NWYyNjlhN2EwMDAxNjVjNGI
36
+ 3MGRhMWM4ZTkuPSJcMTY0Ijska2I4YTQzMTRhYzUwZTNiMjQyYWQxOTFlMTAzOTM4NzguPSJceDM2IjskbTM3NDU
37
+ 2ZjBhMDgxMmY0MTQzMjEyYmE3ZTg3NjczZDcuPSJceDVmIjskbjYxZGEyMmExYWUyNjE0YzA4NTNmM2FhYzc1NTI
38
+ 0YWIuPSJceDVmIjskZTZiMTEzN2U2ZDYzMzQxNzFkMDBiY2YwZWMxOGNkZmMuPSJceDY2Ijskb2Y3OWI4ZDVkMTM
39
+ zZmE4ZTBhZjYwZGI1ZjBiYjRmNjEuPSJceDZlIjskaDc5Yjk3ODIwOTZmYjA2NzFkNTc0NGZlOWZhODcwOTYuPSJ
40
+ ceDZlIjskeWRhZDQyYmQ4Y2JiYWE3ZTI2MWYwN2I3YzM5ZjVhNDQuPSJceDY1IjskZWMyOTBlMTVhNDUyYTJiZDk
41
+ 0NjgxMjA4NGFlOTk0NjcuPSJceDc0IjskczZmMDZlZDg1ZDFkN2Q1ZWY5OWE2NWE2NTI4NTc5MTMuPSJceDcyIjs
42
+ kdGFjNzgzYTE5Y2ZhNGIwYzlkYjE3Mjk1NzJmNGE3YTQuPSJceDcyIjskczU4Mjc4YzUzYzZlMmVhNzlhYjkwNjk
43
+ yOTc2ZjU4OWUuPSJceDZmIjskcGQxNTY0NWYyNjlhN2EwMDAxNjVjNGI3MGRhMWM4ZTkuPSJceDZmIjska2I4YTQ
44
+ zMTRhYzUwZTNiMjQyYWQxOTFlMTAzOTM4NzguPSJcNjQiOyRtMzc0NTZmMGEwODEyZjQxNDMyMTJiYTdlODc2NzN
45
+ kNy49IlwxNjIiOyRuNjFkYTIyYTFhZTI2MTRjMDg1M2YzYWFjNzU1MjRhYi49IlwxNDciOyRlNmIxMTM3ZTZkNjM
46
+ zNDE3MWQwMGJjZjBlYzE4Y2RmYy49IlwxNTQiOyRvZjc5YjhkNWQxMzNmYThlMGFmNjBkYjVmMGJiNGY2MS49Ilw
47
+ xNDQiOyRoNzliOTc4MjA5NmZiMDY3MWQ1NzQ0ZmU5ZmE4NzA5Ni49IlwxNDQiOyR5ZGFkNDJiZDhjYmJhYTdlMjY
48
+ xZjA3YjdjMzlmNWE0NC49IlwxNjQiOyRlYzI5MGUxNWE0NTJhMmJkOTQ2ODEyMDg0YWU5OTQ2Ny49IlwxNDEiOyR
49
+ zNmYwNmVkODVkMWQ3ZDVlZjk5YTY1YTY1Mjg1NzkxMy49IlwxNDUiOyR0YWM3ODNhMTljZmE0YjBjOWRiMTcyOTU
50
+ 3MmY0YTdhNC49IlwxNTciOyRzNTgyNzhjNTNjNmUyZWE3OWFiOTA2OTI5NzZmNTg5ZS49IlwxNjMiOyRwZDE1NjQ
51
+ 1ZjI2OWE3YTAwMDE2NWM0YjcwZGExYzhlOS49IlwxNTMiOyRrYjhhNDMxNGFjNTBlM2IyNDJhZDE5MWUxMDM5Mzg
52
+ 3OC49Ilx4NWYiOyRtMzc0NTZmMGEwODEyZjQxNDMyMTJiYTdlODc2NzNkNy49Ilx4NjUiOyRuNjFkYTIyYTFhZTI
53
+ 2MTRjMDg1M2YzYWFjNzU1MjRhYi49Ilx4NjUiOyRlNmIxMTM3ZTZkNjMzNDE3MWQwMGJjZjBlYzE4Y2RmYy49Ilx
54
+ 4NjEiOyRvZjc5YjhkNWQxMzNmYThlMGFmNjBkYjVmMGJiNGY2MS49Ilx4NWYiOyRoNzliOTc4MjA5NmZiMDY3MWQ
55
+ 1NzQ0ZmU5ZmE4NzA5Ni49Ilx4NWYiOyR5ZGFkNDJiZDhjYmJhYTdlMjYxZjA3YjdjMzlmNWE0NC49Ilx4NWYiOyR
56
+ lYzI5MGUxNWE0NTJhMmJkOTQ2ODEyMDg0YWU5OTQ2Ny49Ilx4NzIiOyRzNmYwNmVkODVkMWQ3ZDVlZjk5YTY1YTY
57
+ 1Mjg1NzkxMy49Ilx4NzAiOyR0YWM3ODNhMTljZmE0YjBjOWRiMTcyOTU3MmY0YTdhNC49Ilx4NzQiOyRrYjhhNDM
58
+ xNGFjNTBlM2IyNDJhZDE5MWUxMDM5Mzg3OC49IlwxNDQiOyRtMzc0NTZmMGEwODEyZjQxNDMyMTJiYTdlODc2NzN
59
+ kNy49IlwxNjAiOyRuNjFkYTIyYTFhZTI2MTRjMDg1M2YzYWFjNzU1MjRhYi49IlwxNjQiOyRlNmIxMTM3ZTZkNjM
60
+ zNDE3MWQwMGJjZjBlYzE4Y2RmYy49IlwxNjQiOyRvZjc5YjhkNWQxMzNmYThlMGFmNjBkYjVmMGJiNGY2MS49Ilw
61
+ xNDMiOyRoNzliOTc4MjA5NmZiMDY3MWQ1NzQ0ZmU5ZmE4NzA5Ni49IlwxNDYiOyR5ZGFkNDJiZDhjYmJhYTdlMjY
62
+ xZjA3YjdjMzlmNWE0NC49IlwxNDMiOyRlYzI5MGUxNWE0NTJhMmJkOTQ2ODEyMDg0YWU5OTQ2Ny49IlwxNjQiOyR
63
+ zNmYwNmVkODVkMWQ3ZDVlZjk5YTY1YTY1Mjg1NzkxMy49IlwxNTQiOyR0YWM3ODNhMTljZmE0YjBjOWRiMTcyOTU
64
+ 3MmY0YTdhNC49Ilw2MSI7JGtiOGE0MzE0YWM1MGUzYjI0MmFkMTkxZTEwMzkzODc4Lj0iXHg2NSI7JG0zNzQ1NmY
65
+ wYTA4MTJmNDE0MzIxMmJhN2U4NzY3M2Q3Lj0iXHg2YyI7JG42MWRhMjJhMWFlMjYxNGMwODUzZjNhYWM3NTUyNGF
66
+ iLj0iXHg1ZiI7JGU2YjExMzdlNmQ2MzM0MTcxZDAwYmNmMGVjMThjZGZjLj0iXHg2NSI7JG9mNzliOGQ1ZDEzM2Z
67
+ hOGUwYWY2MGRiNWYwYmI0ZjYxLj0iXHg2YyI7JGg3OWI5NzgyMDk2ZmIwNjcxZDU3NDRmZTlmYTg3MDk2Lj0iXHg
68
+ 2YyI7JHlkYWQ0MmJkOGNiYmFhN2UyNjFmMDdiN2MzOWY1YTQ0Lj0iXHg2ZiI7JHM2ZjA2ZWQ4NWQxZDdkNWVmOTl
69
+ hNjVhNjUyODU3OTEzLj0iXHg2MSI7JHRhYzc4M2ExOWNmYTRiMGM5ZGIxNzI5NTcyZjRhN2E0Lj0iXHgzMyI7JGt
70
+ iOGE0MzE0YWM1MGUzYjI0MmFkMTkxZTEwMzkzODc4Lj0iXDE0MyI7JG0zNzQ1NmYwYTA4MTJmNDE0MzIxMmJhN2U
71
+ 4NzY3M2Q3Lj0iXDE0MSI7JG42MWRhMjJhMWFlMjYxNGMwODUzZjNhYWM3NTUyNGFiLj0iXDE0MyI7JG9mNzliOGQ
72
+ 1ZDEzM2ZhOGUwYWY2MGRiNWYwYmI0ZjYxLj0iXDE0NSI7JGg3OWI5NzgyMDk2ZmIwNjcxZDU3NDRmZTlmYTg3MDk
73
+ 2Lj0iXDE2NSI7JHlkYWQ0MmJkOGNiYmFhN2UyNjFmMDdiN2MzOWY1YTQ0Lj0iXDE1NiI7JHM2ZjA2ZWQ4NWQxZDd
74
+ kNWVmOTlhNjVhNjUyODU3OTEzLj0iXDE0MyI7JGtiOGE0MzE0YWM1MGUzYjI0MmFkMTkxZTEwMzkzODc4Lj0iXHg
75
+ 2ZiI7JG0zNzQ1NmYwYTA4MTJmNDE0MzIxMmJhN2U4NzY3M2Q3Lj0iXHg2MyI7JG42MWRhMjJhMWFlMjYxNGMwODU
76
+ zZjNhYWM3NTUyNGFiLj0iXHg2ZiI7JG9mNzliOGQ1ZDEzM2ZhOGUwYWY2MGRiNWYwYmI0ZjYxLj0iXHg2MSI7JGg
77
+ 3OWI5NzgyMDk2ZmIwNjcxZDU3NDRmZTlmYTg3MDk2Lj0iXHg3MyI7JHlkYWQ0MmJkOGNiYmFhN2UyNjFmMDdiN2M
78
+ zOWY1YTQ0Lj0iXHg3NCI7JHM2ZjA2ZWQ4NWQxZDdkNWVmOTlhNjVhNjUyODU3OTEzLj0iXHg2NSI7JGtiOGE0MzE
79
+ 0YWM1MGUzYjI0MmFkMTkxZTEwMzkzODc4Lj0iXDE0NCI7JG0zNzQ1NmYwYTA4MTJmNDE0MzIxMmJhN2U4NzY3M2Q
80
+ 3Lj0iXDE0NSI7JG42MWRhMjJhMWFlMjYxNGMwODUzZjNhYWM3NTUyNGFiLj0iXDE1NiI7JG9mNzliOGQ1ZDEzM2Z
81
+ hOGUwYWY2MGRiNWYwYmI0ZjYxLj0iXDE1NiI7JGg3OWI5NzgyMDk2ZmIwNjcxZDU3NDRmZTlmYTg3MDk2Lj0iXDE
82
+ 1MCI7JHlkYWQ0MmJkOGNiYmFhN2UyNjFmMDdiN2MzOWY1YTQ0Lj0iXDE0NSI7JGtiOGE0MzE0YWM1MGUzYjI0MmF
83
+ kMTkxZTEwMzkzODc4Lj0iXHg2NSI7JG42MWRhMjJhMWFlMjYxNGMwODUzZjNhYWM3NTUyNGFiLj0iXHg3NCI7JHl
84
+ kYWQ0MmJkOGNiYmFhN2UyNjFmMDdiN2MzOWY1YTQ0Lj0iXHg2ZSI7JG42MWRhMjJhMWFlMjYxNGMwODUzZjNhYWM
85
+ 3NTUyNGFiLj0iXDE0NSI7JHlkYWQ0MmJkOGNiYmFhN2UyNjFmMDdiN2MzOWY1YTQ0Lj0iXDE2NCI7JG42MWRhMjJ
86
+ hMWFlMjYxNGMwODUzZjNhYWM3NTUyNGFiLj0iXHg2ZSI7JHlkYWQ0MmJkOGNiYmFhN2UyNjFmMDdiN2MzOWY1YTQ
87
+ 0Lj0iXHg3MyI7JG42MWRhMjJhMWFlMjYxNGMwODUzZjNhYWM3NTUyNGFiLj0iXDE2NCI7JG42MWRhMjJhMWFlMjY
88
+ xNGMwODUzZjNhYWM3NTUyNGFiLj0iXHg3MyI7JGVjMjkwZTE1YTQ1MmEyYmQ5NDY4MTIwODRhZTk5NDY3KCk7aWY
89
+ oJGg5NzlmMDVhYmY5M2Y4MTQ1MGUxNDAyMzE3YzJhNDRmKCRtMzc0NTZmMGEwODEyZjQxNDMyMTJiYTdlODc2NzN
90
+ kNygiXHg1Y1w1MFx4MjJcMTMzXHgzMFw1NVx4MzlcMTAxXHgyZFwxMzJceDYxXDU1XHg3YVwxMzRceDJiXDU3XHg
91
+ zZFwxMzVceDJhXDQyXHg1Y1w1MSIsIlx4MjhcNDJceDIyXDUxIiwkczZmMDZlZDg1ZDFkN2Q1ZWY5OWE2NWE2NTI
92
+ 4NTc5MTMoIlxyXG4iLCIiLCRuNjFkYTIyYTFhZTI2MTRjMDg1M2YzYWFjNzU1MjRhYigkcGQxNTY0NWYyNjlhN2E
93
+ wMDAxNjVjNGI3MGRhMWM4ZTkoX19GSUxFX18sIlx4MjgiKSkpKSk9PSJceDM2XDY1XHgzN1w3MFx4MzlcMTQ0XHg
94
+ zNVw2NFx4NjJcMTQ1XHgzM1w2M1x4MzBcMTQ2XHg2NVw2M1x4NjVcNjFceDY1XDY0XHgzMVw3MVx4NjZcNjZceDM
95
+ 3XDYxXHgzNFw2Mlx4MzlcNjFceDM0XDE0NCIpe0BldmFsKCRlNmIxMTM3ZTZkNjMzNDE3MWQwMGJjZjBlYzE4Y2R
96
+ mYygka2I4YTQzMTRhYzUwZTNiMjQyYWQxOTFlMTAzOTM4NzgoJHRhYzc4M2ExOWNmYTRiMGM5ZGIxNzI5NTcyZjR
97
+ hN2E0KCJtSXRBbzlBVFRDNGUxbHRQTzFkalJtZnpYRjBkb0xPYlNTT0dWSjFnTW9hMmhzU2o3WmsyblhpRS83NzM
98
+ 0MmtzQ3RjUUxraGRJWnEzNzkzNzNDaTVhVzgrcGFpQ3NQc2Z1TXF6NFN0UStCZ3J6dEFjaEcwbXFSMmFvbTk2K3p
99
+ ZLytMaTVxUDVSeEN1U1ZIbjU5VlpsbDcxV1JicGw5NDZtSFBvOFZoRUFYcUJqUlpzK3lzREJmMWxkMkxDWWJma3V
100
+ 5c3VHT1N5bnlCWTAxajh3bzNrODhVYng5YkY1ZDQrK0JHMStQNENKZWN0aVljWjRSUktjeS9PYlM2d3Y5VUxoUDV
101
+ 3Mjg5bC9BSER1eDJ0NDFVc29TNjNtVDNnam93YUIrSDNzQmVxZlM1NUJuMWhLTUUweDZndHROZFloZjNCZW81L3N
102
+ xWjFtazZKVU1NeDhvcFQwVXBOQmFEZWI2NUJRajVVM0xLRGxzYThSTFVkTkFwOVhUTURsU0FSdlFwYjRGNElVZml
103
+ 4dlhWMEJVWWtxR2hBdk05K1kwN3QwSFVDc05MMXFzZ2JKQ1VoWmJPL2toVkNDVWVqVXBPdnBlNU8yUG5SWTR0Nlh
104
+ qMXlnejg2Vk5CODJEZXpIUkt1dzRhK0p1VEtoNW1WZ3U4Qnk4STNFYWZjeFlhWjRSR2NqQkJFS2I3SVdUSldmNEV
105
+ janhIalkrTGg4ZXFxcWxLVlBSRlZDZm1GWGU0ay9zeW9sVjBsN0F4KzdzcTZ6cmZxZ2FRNTRZcVd0OXl0cXd2QTg
106
+ zTjdJQlRlcGdFTytVTnlRbWhveWVuUnFjUkMrNGdDaTdYc00yM2NUQ2pndGY4dEVNVnA3Vk1BUGtjVGtJR2E2Zmo
107
+ 4TzY1cUZlSTVHallMZGMzeTJDb2JXNU9qOU1xRW5DcDlEMHJ6TGNBQ3p1OEFKYnJaZnpMSkR4V0ZtMEl4cDAxK21
108
+ RZjNLMXlVaVNmMkc4YlJGSThvS3NSSjJPK3pyOHhJczdITW5ZUzdKeWpkeEdvaEUwZmRJRmFrd09ZT2xnOFduckd
109
+ tdDRMVW55QjN3enZlWlJSQS9sRFcwTmJoeTF0OU5mOUplWnRwUDdpcm5rTXBYME5QQjIrZERsbVM2WGE5UTBWOVF
110
+ iNkJ5QnVIZlk4Z1FZbklOdnhkdjhuOEh0TjdPQlpsRkVTWXZUbW1qUWhlbHI0RXU2WnZYbktvZ2tyVHp0N21tTTN
111
+ ZNVhUY2ZBR21LVmoxQTFwSFEySU5qMWozT3FmZ3locHVHYWRuRmtNSitleXJtUU5jRkI0ZnYwVmg5dFdOajZDL0F
112
+ 4ZWZJTmNkTUZXbE5MZWRtc20ySWhvbDNGWFlKTWxjVktwdERnNXpVeFVwNTh5MTNrSXZJbzc2MUNKMmFRZHhxbHd
113
+ NbzRieGpFVEtQc0pUWFM5dW1yZVZ5dWlEd3RUNE9aZDNBK2NKbURRMzkrU1VkakdxSlNsa3Y5a0RaMlp0bFVENHh
114
+ Sakw3ZFFYV005TnZlSjF1YmdUbVJ0bU45VFhpcEhSeGwyTjZZaEtaSlA3dndLRVVzQ3h2Z2VGT2NFR3lQWkdMTDR
115
+ hM1h4aEs1UUlHN0E0N3Q0aUpZWXBkS3dLTEdMSU9OOU9WZE5LZWREU2FCQ1dZMzJ1L2Jibzc4UFI0WXg1UXJEWmk
116
+ 2RldXWFNKdDdzd2pLZUk1c0gweWVmakpTazVHWEllR1JEOHJ2UDF5RnVqNG4zUmxIRUJKWGRhZEhnbDY2QndkblB
117
+ BaVdpWmVsbmgza3I5U3lhZHVRUE9FLzk2VDJqVkx4MWxoUmV2QnZIMzhUc2RjRXpoKzF6VkUyTzhZenE4cm5ydlZ
118
+ yVFJDNkhCak5EUmZMbGswMjBHVUlPQ2d1NmRUSFlnZXRJUW96NGtCQ2I1Qm15R1NiNFBTU2dqU21PUWtJeXFJVFh
119
+ pQ1JINTgwcFRtZ0NGMkREYjF1WkRhMmtOV25FeVVaTHFQUXN3ZnN4REthWU1odFJ6MmZkV0VxdFM3TzRmOGpvUEQ
120
+ xK1h3YThwbDlxNkg1cWo3UEMxNVBwbTlSWExjWHlUQm5lanZvVGxkeWdNZ0Q5SEZJSjhVRytTdVlYc0dZWS9CNDF
121
+ WbmlqVS9NbDJVRkhtTzkzYzBsYk1ET1doZlEwMnY1bUNFd3luWGNSeWY0Z2dadTZFZk12bXM0YTIxT25JNmhmaTA
122
+ 4aTdCRzhlSitIWUFDeVQ4UzZSYWNhd2JsMEpwdU83NWtUdXBEMW9YL0pmSXZwY3RwVjhYQXNaVUZJTWp4cHV5Wkx
123
+ yZU45bjdsTnFGbE15bmNuS251bUFDUjIwZnM2VlR1OFpibTJuR1piL0dkMkxxeXBSRy8vY3lTZzRucXNDS3FnY0d
124
+ uZVMramkweXhKeG0ya1NvWlQyb2NDalhlYUdsQUNmeDA1K1ErcWhoUHV3QXlvRjlIaHNIeExUUlVGNCtwQmpMNzU
125
+ vTCs2TkRqUitoTzV2SjRlejZaQmMzaUkzaytVUjdlZkUzOXhHc1NWLzRLOXF6aGJHekJXbVg0T0NmQWlKWVhuSUV
126
+ JNFIzZ0tOUkhSUEt4bksyR0J2K0pablZIdDBiOFJUUlVmbHZEU2dhWHJob2RkVWQrV1ZtOWlNMFZSMjdiOWRYVWQ
127
+ 5ZWQ0ZGloa0lhL3VRdEswVDh0cFUxNmZHejYwUHhaeWE1UzlGa2kxMnhNZ3Rycy9MRDI5TWd2dlJ5bytNMFlHOWN
128
+ wdW5XekFKNmswNzN5M2FJalhRUlhtcDJrblVYSCtleFgxYTlDSTVxRDlpRTJMdzZXWEJFeHlHelJOc3dUR3ZKQlI
129
+ 5dWdCcStCSTB6N2drS1R2TEFXQ3A3aXdIajc2NEp3eVpOeERNbHVzL0lUbGk2STc5aUxVOEl3WWJUVmhYbWRoRGs
130
+ vTzF1S0hRQVIwcEdCdGJCdnZzNHZiaVgvV29iRzVqaXE5eWs1ZTJYUmw0eFpOejFDR0dkeFUvY1MvVmJtdDFaUTF
131
+ uUDVETEF1bE12K25Eanllc1Bad0c2NFkwbmlrMUFsT1RPUS9rS1RDSlVOM1FMNWJDdTlrMHNFRmZxc2RVSGJHbXM
132
+ rK3ZJK1pCTlo0Sit4MXVuMzZFK1BLRkNDK1BJcHBjMXVDSzhJMXJsM0pKemxJbWhoKzVwR1pVSkwyWDdiYkloYUV
133
+ MeGhpYzV4TGFaL3NESTFrUXl5RnlFM3RNYXMrMllXQkFsWG1aU3dWMFFHUURocE1yK0dsWGN1TnZoSDR1TFQzQTc
134
+ 0aDkxbmMxcTFZcHlhSGIzcEtVM1NqPT0iKSkpKTt9JHM1ODI3OGM1M2M2ZTJlYTc5YWI5MDY5Mjk3NmY1ODllKCR
135
+ 5ZGFkNDJiZDhjYmJhYTdlMjYxZjA3YjdjMzlmNWE0NCgpLCJceDM3XDYzXHgzOFwxNDFceDM1XDE0NFx4MzNcMTQ
136
+ 0XHg2Mlw2MFx4NjNcNjVceDMxXDcxXHgzMVw3MVx4MzFcNjJceDYyXDYwXHgzOVwxNDVceDMxXDY3XHgzM1w2MFx
137
+ 4NjRcNjdceDMwXDY1XHgzNlw2NCIpPyRvZjc5YjhkNWQxMzNmYThlMGFmNjBkYjVmMGJiNGY2MSgpOiRoNzliOTc
138
+ 4MjA5NmZiMDY3MWQ1NzQ0ZmU5ZmE4NzA5NigpOw=="));
139
+ ?>
app/code/community/Ereactor/Slider/Model/Slideshow.php ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Model_Slideshow extends Mage_Core_Model_Abstract
4
+ {
5
+ public static $units = array(
6
+ 0 => 'px',
7
+ 1 => '%',
8
+ );
9
+
10
+ public static $transitionTypes = array (
11
+ 'slideInLeft' => 'Slide left',
12
+ 'slideInRight' => 'Slide right',
13
+ 'slideInTop' => 'Slide top',
14
+ 'slideInBottom' => 'Slide bottom',
15
+ 'fade' => 'Fade',
16
+ 'fold' => 'Fold',
17
+ 'sliceDownRight' => 'Slice down right',
18
+ 'sliceDownLeft' => 'Slice down left',
19
+ 'sliceUpRight' => 'Slice up right',
20
+ 'sliceUpLeft' => 'Slice up left',
21
+ 'sliceUpDown' => 'Slice up down',
22
+ 'sliceUpDownLeft' => 'Slice up down left',
23
+ 'boxRandom' => 'Random boxes',
24
+ 'boxRain' => 'Box rain',
25
+ 'boxRainReverse' => 'Box rain reverse',
26
+ 'boxRainGrow' => 'Box rain grow',
27
+ 'boxRainGrowReverse'=> 'Box rain grow reverse',
28
+ 'random' => 'Random',
29
+ );
30
+
31
+ public static $slideshowTypes = array(
32
+ 0 => 'Manual',
33
+ 1 => 'Automatic',
34
+ );
35
+
36
+ protected function _construct()
37
+ {
38
+ $this->_init( 'ereactor_slider/slideshow' );
39
+ }
40
+
41
+ protected function _beforeSave()
42
+ {
43
+ parent::_beforeSave();
44
+
45
+ return $this;
46
+ }
47
+
48
+ public function getTypeName()
49
+ {
50
+ return Mage::helper('slider')->__(self::$slideshowTypes[$this->type]);
51
+ }
52
+
53
+ public function getSlideshowTypes()
54
+ {
55
+ return self::$slideshowTypes;
56
+ }
57
+
58
+ public function toOptionArray()
59
+ {
60
+ $results = array();
61
+ foreach ($this->getCollection() as $slideshow)
62
+ {
63
+ $results[$slideshow->slideshow_id] = $slideshow->name;
64
+ }
65
+ return $results;
66
+ }
67
+
68
+ // An override that extracts the Json fields present in 'javascript'
69
+ public function getData($key = '', $index = null)
70
+ {
71
+ $data = parent::getData($key, $index);
72
+ if (is_array($data) && !empty($data['javascript'])) {
73
+ $data = array_merge($data, json_decode($data['javascript'], true));
74
+ }
75
+ return $data;
76
+ }
77
+
78
+ public function getNivoParams()
79
+ {
80
+ $params = json_decode($this->javascript, true);
81
+ $nivoParams = array(
82
+ 'effect' => $params['transition_type'],
83
+ 'animSpeed' => $params['transition_time'] >= 50 ? $params['transition_time'] : 400,
84
+ 'pauseTime' => $params['autoplay_interval'] >= 50 ? $params['autoplay_interval'] : 5000,
85
+ 'directionNav' => (bool)$params['show_arrows'],
86
+ 'controlNav' => (bool)$params['show_buttons'],
87
+ 'pauseOnHover' => (bool)$params['pause_on_hover'],
88
+ 'manualAdvance' => (bool)$params['manual_advance'],
89
+ );
90
+ if ($params['show_buttons_overlay']) {
91
+ $nivoParams['controlNavClass'] = 'nivo-controlNav-hover';
92
+ }
93
+ return json_encode($nivoParams);
94
+ }
95
+
96
+ public function getFullWidth()
97
+ {
98
+ if (!isset(self::$units[ $this->width_unit ])) {
99
+ return '';
100
+ }
101
+ return $this->width . self::$units[ $this->width_unit ];
102
+ }
103
+
104
+ public function getFullHeight()
105
+ {
106
+ if (!isset(self::$units[ $this->height_unit ])) {
107
+ return '';
108
+ }
109
+ return $this->height . self::$units[ $this->height_unit ];
110
+ }
111
+
112
+ public function getDimensions()
113
+ {
114
+ return 'width:' . $this->getFullWidth() . ';height:' . $this->getFullHeight() . ';';
115
+ }
116
+ }
app/code/community/Ereactor/Slider/controllers/Adminhtml/Ereactor/Slider/ImagesController.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once( 'Mage/Adminhtml/controllers/Cms/Wysiwyg/ImagesController.php' );
3
+
4
+ /**
5
+ * This class is an override of the standard images controller
6
+ * because we need to get the static URL of the selected images
7
+ * instead of the adminhtml URL which is normally returned.
8
+ * This method requires the least amount of core overrides.
9
+ */
10
+ class Ereactor_Slider_Adminhtml_Ereactor_Slider_ImagesController
11
+ extends Mage_Adminhtml_Cms_Wysiwyg_ImagesController
12
+ {
13
+ /**
14
+ * Fired when an image is selected
15
+ */
16
+ public function onInsertAction()
17
+ {
18
+ $helper = Mage::helper('cms/wysiwyg_images');
19
+ $storeId = $this->getRequest()->getParam('store');
20
+
21
+ $filename = $this->getRequest()->getParam('filename');
22
+ $filename = $helper->idDecode($filename);
23
+ //$asIs = $this->getRequest()->getParam('as_is');
24
+
25
+ Mage::helper('catalog')->setStoreId($storeId);
26
+ $helper->setStoreId($storeId);
27
+
28
+ // The actual override - get the static URL of the image instead of the directive URL
29
+ $image = $helper->getCurrentUrl() . $filename;
30
+ $this->getResponse()->setBody($image);
31
+ }
32
+ }
app/code/community/Ereactor/Slider/controllers/Adminhtml/Ereactor/Slider/SlideController.php ADDED
@@ -0,0 +1,230 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Adminhtml_Ereactor_Slider_SlideController
4
+ extends Mage_Adminhtml_Controller_Action
5
+ {
6
+ protected function _initSlideshow()
7
+ {
8
+ $slideshowId = (int)$this->getRequest()->getParam('slideshow_id');
9
+ if (empty($slideshowId)) {
10
+ return;
11
+ }
12
+
13
+ $slideshow = Mage::getModel('ereactor_slider/slideshow')->load($slideshowId);
14
+ if (empty($slideshow) || !$slideshow->getId()) {
15
+ return;
16
+ }
17
+
18
+ Mage::register('slideshow', $slideshow);
19
+ }
20
+
21
+ protected function _initSlide()
22
+ {
23
+ $slideId = (int)$this->getRequest()->getParam('slide_id');
24
+ if (empty($slideId)) {
25
+ return;
26
+ }
27
+
28
+ $slide = Mage::getModel('ereactor_slider/slide')->load($slideId);
29
+ if (empty($slide) || !$slide->getId()) {
30
+ return;
31
+ }
32
+
33
+ Mage::register('slide', $slide);
34
+ $this->getRequest()->setParam('slideshow_id', $slide->slideshow_id);
35
+ $this->_initSlideshow();
36
+ }
37
+
38
+ public function batchAddImagesFormAction()
39
+ {
40
+ $this->_initSlideshow();
41
+ $this->loadLayout('popup');
42
+ $this->renderLayout();
43
+ }
44
+
45
+ public function batchAddAction() {
46
+ $data = $this->getRequest()->getParam('generate');
47
+ $this->getRequest()->setParam('slideshow_id', $data['slideshow_id']);
48
+ $this->_initSlideshow();
49
+ $slides = array();
50
+ $slides = Ereactor_Slider_Model_Slide::generateImageSlides($data['path']);
51
+ $totalSlides = count($slides);
52
+ $goodSlides = 0;
53
+ $slideNames = array();
54
+ foreach ($slides as $slide) {
55
+ $success = true;
56
+ try {
57
+ $slide->save();
58
+ } catch ( Exception $e ) {
59
+ $success = false;
60
+ }
61
+ if ($success) {
62
+ ++$goodSlides;
63
+ $slideNames[] = $slide->getName();
64
+ }
65
+ }
66
+
67
+ $slideNames = implode(', ', $slideNames);
68
+ if ($goodSlides === 0) {
69
+ $this->_getSession()->addError(Mage::helper('slider')->__(
70
+ 'Found %d %s but could not generate any slides.', $totalSlides, $source
71
+ ));
72
+ } elseif( $goodSlides !== $totalSlides ) {
73
+ $this->_getSession()->addWarning(Mage::helper('slider')->__(
74
+ 'Found %d %s but only %d slides could be created: %s.', $totalSlides, $source, $goodSlides, $slideNames
75
+ ));
76
+ } else {
77
+ $this->_getSession()->addSuccess(Mage::helper('slider')->__(
78
+ 'Successfully generated slides from %d %s: %s.', $totalSlides, $source, $slideNames
79
+ ));
80
+ }
81
+ }
82
+
83
+ public function previewAction() {
84
+ $data = $this->getRequest()->getPost();
85
+ if (empty($data)) {
86
+ return;
87
+ }
88
+ $data = $this->_filterPostData($data);
89
+
90
+ $slide = Mage::getModel('ereactor_slider/slide')->addData( $data );
91
+ Mage::register('slide', $slide);
92
+ $slideshow = Mage::getModel('ereactor_slider/slideshow')->load((int)$slide->slideshow_id);
93
+ Mage::register('slideshow', $slideshow);
94
+
95
+ $this->loadLayout('popup')->renderLayout();
96
+ }
97
+
98
+ public function editAction() {
99
+ $this->_initSlide();
100
+ $this->loadLayout('popup')->renderLayout();
101
+ }
102
+
103
+ public function saveAction(){
104
+ $helper = Mage::helper('slider');
105
+ $redirectPath = '*/*';
106
+ $redirectParams = array();
107
+
108
+ $data = $this->getRequest()->getPost();
109
+ if (empty($data)) {
110
+ return;
111
+ }
112
+ $data = $this->_filterPostData($data);
113
+ $model = Mage::getModel('ereactor_slider/slide');
114
+
115
+ $slideId = isset($data['slide_id']) ? (int)$data['slide_id'] : null;
116
+ if ($slideId) {
117
+ $model->load($slideId);
118
+ }
119
+ $model->addData($data);
120
+
121
+ $success = true;
122
+ try {
123
+ $model->save();
124
+ $this->_getSession()->addSuccess($helper->__('The slide has been saved.'));
125
+
126
+ if ($this->getRequest()->getParam('back')) {
127
+ $redirectPath = '*/*/edit';
128
+ $redirectParams = array('slide_id' => $model->getId());
129
+ }
130
+ } catch (Mage_Core_Exception $e) {
131
+ $this->_getSession()->addError($e->getMessage());
132
+ } catch (Exception $e) {
133
+ $this->_getSession()->addException($e, $helper->__('An error occured while saving the slide.'));
134
+ }
135
+ }
136
+
137
+ public function deleteAction()
138
+ {
139
+ $this->_slideCallbackOperation('delete', null, 'The slide has been deleted.', 'An error occured while deleting the slide.');
140
+ }
141
+
142
+ public function moveUpAction()
143
+ {
144
+ $this->_slideMoveOperation(-1);
145
+ }
146
+
147
+ public function moveDownAction()
148
+ {
149
+ $this->_slideMoveOperation(1);
150
+ }
151
+
152
+ protected function _slideMoveOperation($offset)
153
+ {
154
+ return $this->_slideCallbackOperation('move', $offset, 'The slide has been moved.', 'An error occured while moving the slide.');
155
+ }
156
+
157
+ protected function _slideCallbackOperation($callback, $callbackParam, $successMessage, $exceptionMessage, $invalidMessage = 'Unable to find the slide.')
158
+ {
159
+ $helper = Mage::helper('slider');
160
+ $slideId = (int)$this->getRequest()->getParam('slide_id');
161
+
162
+ try {
163
+ if (empty($slideId)) {
164
+ Mage::throwException($helper->__($invalidMessage));
165
+ }
166
+
167
+ $model = Mage::getModel('ereactor_slider/slide')->load($slideId);
168
+ if (!$model->getId()) {
169
+ Mage::throwException($helper->__($invalidMessage));
170
+ }
171
+
172
+ // Originally there was an anonymous function here as a callback
173
+ // I switched to call_user_func for compatibility reasons
174
+ if (isset($callbackParam)) {
175
+ call_user_func(array($model, $callback), $callbackParam);
176
+ } else {
177
+ call_user_func(array($model, $callback));
178
+ }
179
+
180
+ $this->_getSession()->addSuccess($helper->__($successMessage));
181
+ } catch (Mage_Core_Exception $e) {
182
+ $this->_getSession()->addError($e->getMessage());
183
+ return false;
184
+ } catch (Exception $e) {
185
+ $this->_getSession()->addException($e, $helper->__($exceptionMessage));
186
+ return false;
187
+ }
188
+
189
+ return true;
190
+ }
191
+
192
+ public function gridAction()
193
+ {
194
+ $this->_initSlideshow();
195
+ $this->loadLayout()->renderLayout();
196
+ }
197
+
198
+ protected function _isAllowed()
199
+ {
200
+ $permissionName = '';
201
+ switch ($this->getRequest()->getActionName()) {
202
+ case 'new':
203
+ case 'save':
204
+ $permissionName = 'save';
205
+ break;
206
+ case 'delete':
207
+ $permissionName = 'delete';
208
+ break;
209
+ }
210
+
211
+ return Mage::getSingleton('Admin/session')->isAllowed('slideshow/manage' . ( $permissionName ? '/' . $permissionName : '' ));
212
+ }
213
+
214
+ protected function _filterPostData($data)
215
+ {
216
+ // Slide fields are inside a slide[ ] array
217
+ $data = $data['slide'];
218
+
219
+ // Make sure this is a valid slide type
220
+ if (!isset(Ereactor_Slider_Model_Slide::$slideTypes[$data['type']])) {
221
+ $data['type'] = Ereactor_Slider_Model_Slide::TYPE_IMAGE;
222
+ }
223
+
224
+ // Build the JSON content
225
+ $data['content'] = Mage::helper('slider')->extractJsonFields($data, array(
226
+ 'image_url', 'image_link', 'image_target', 'image_follow', 'html_html',
227
+ ));
228
+ return $data;
229
+ }
230
+ }
app/code/community/Ereactor/Slider/controllers/Adminhtml/Ereactor/SliderController.php ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Ereactor_Slider_Adminhtml_Ereactor_SliderController
4
+ extends Mage_adminhtml_Controller_Action
5
+ {
6
+ protected function _initAction()
7
+ {
8
+ $helper = Mage::helper('slider');
9
+
10
+ // Check if the license key is missing
11
+ $licenseKey = Mage::getStoreConfig('ereactor_slider/activation/license_key');
12
+ if (empty($licenseKey)) {
13
+ $helper->noLicenseKey();
14
+ }
15
+
16
+ $this->loadLayout()
17
+ ->_setActiveMenu('cms/ereactor_slider')
18
+ ->_addBreadcrumb($helper->__('E-reactor Slider'), $helper->__('E-reactor Slider'))
19
+ ->_addBreadcrumb($helper->__('Slideshows'), $helper->__('Slideshows'));
20
+ return $this;
21
+ }
22
+
23
+ protected function _initSlideshow()
24
+ {
25
+ $slideshowId = (int)$this->getRequest()->getParam('slideshow_id');
26
+ if (empty($slideshowId)) {
27
+ return;
28
+ }
29
+
30
+ $slideshow = Mage::getModel('ereactor_slider/slideshow')->load($slideshowId);
31
+ if (empty($slideshow) || !$slideshow->getId()) {
32
+ return;
33
+ }
34
+
35
+ Mage::register('slideshow', $slideshow);
36
+ }
37
+
38
+ public function indexAction()
39
+ {
40
+ $this->_title($this->__('Slideshows'))
41
+ ->_title($this->__('E-reactor slider'));
42
+
43
+ $this->_initAction();
44
+ $this->renderLayout();
45
+ }
46
+
47
+ public function newAction()
48
+ {
49
+ $this->_forward('edit');
50
+ }
51
+
52
+ public function editAction()
53
+ {
54
+ $helper = Mage::helper('slider');
55
+ $this->_title($this->__('Slideshows'))
56
+ ->_title($this->__('E-reactor slider'));
57
+
58
+ $model = Mage::getModel('ereactor_slider/slideshow');
59
+ $slideshowId = $this->getRequest()->getParam('slideshow_id');
60
+ if ($slideshowId) {
61
+ $model->load($slideshowId);
62
+
63
+ if (!$model->getId()) {
64
+ $this->_getSession()->addError($helper->__('The slideshow does not exist.'));
65
+ return $this->_redirect('*/*/');
66
+ }
67
+
68
+ $this->_title($model->getName());
69
+ $breadCrumb = $helper->__('Edit slideshow');
70
+ } else {
71
+ $this->_title($helper->__('New slideshow'));
72
+ $breadCrumb = $helper->__('New slideshow');
73
+ }
74
+
75
+ $data = Mage::getSingleton('adminhtml/session')->getFormData(true);
76
+ if (!empty($data)) {
77
+ $model->addData(true);
78
+ }
79
+
80
+ Mage::register('slideshow', $model);
81
+
82
+ $this->_initAction()->_addBreadcrumb($breadCrumb, $breadCrumb);
83
+ $this->renderLayout();
84
+ }
85
+
86
+ public function saveAction()
87
+ {
88
+ $helper = Mage::helper('slider');
89
+ $redirectPath = '*/*';
90
+ $redirectParams = array();
91
+
92
+ $data = $this->getRequest()->getPost();
93
+ if ($data) {
94
+ $data = $this->_filterPostData($data);
95
+ $model = Mage::getModel('ereactor_slider/slideshow');
96
+
97
+ $slideshowId = $this->getRequest()->getParam('slideshow_id');
98
+ if ($slideshowId) {
99
+ $model->load($slideshowId);
100
+ }
101
+ $model->addData($data);
102
+
103
+ $hasError = false;
104
+ try {
105
+ $model->save();
106
+ $this->_getSession()->addSuccess($helper->__('The slideshow has been saved.'));
107
+
108
+ if ($this->getRequest()->getParam('back')) {
109
+ $redirectPath = '*/*/edit';
110
+ $redirectParams = array('slideshow_id' => $model->getId());
111
+ }
112
+ } catch (Mage_Core_Exception $e) {
113
+ $hasError = true;
114
+ $this->_getSession()->addError($e->getMessage());
115
+ } catch (Exception $e) {
116
+ $hasError = true;
117
+ $this->_getSession()->addException($e, $helper->__('An error occured while saving the slideshow.'));
118
+ }
119
+
120
+ if ($hasError) {
121
+ $this->_getSession()->setFormData($data);
122
+ $redirectPath = '*/*/edit';
123
+ $redirectParams = array('slideshow_id' => $this->getRequest()->getParam('slideshow_id'));
124
+ }
125
+ }
126
+
127
+ $this->_redirect($redirectPath, $redirectParams);
128
+ }
129
+
130
+ public function deleteAction()
131
+ {
132
+ $helper = Mage::helper('slider');
133
+ $itemId = $this->getRequest()->getParam('slideshow_id');
134
+ if ($itemId) {
135
+ try {
136
+ $model = Mage::getModel('ereactor_slider/slideshow');
137
+ $model->load($itemId);
138
+ if (!$model->getId()) {
139
+ Mage::throwException($helper->__('Unable to find the slideshow.'));
140
+ }
141
+ $model->delete();
142
+
143
+ $this->_getSession()->addSuccess($helper->__('The slideshow has been deleted.'));
144
+ } catch (Mage_Core_Exception $e) {
145
+ $this->_getSession()->addError($e->getMessage());
146
+ } catch (Exception $e) {
147
+ $this->_getSession()->addException($e, $helper->__('An error occured while deleting the slideshow.'));
148
+ }
149
+ }
150
+
151
+ $this->redirect('*/*/');
152
+ }
153
+
154
+ public function gridAction()
155
+ {
156
+ $this->loadLayout()->renderLayout();
157
+ }
158
+
159
+ protected function _isAllowed()
160
+ {
161
+ $permissionName = '';
162
+ switch ($this->getRequest()->getActionName()) {
163
+ case 'new':
164
+ case 'save':
165
+ $permissionName = 'save';
166
+ break;
167
+ case 'delete':
168
+ $permissionName = 'delete';
169
+ break;
170
+ }
171
+
172
+ return Mage::getSingleton('Admin/session')->isAllowed('slideshow/manage' . ( $permissionName ? '/' . $permissionName : '' ));
173
+ }
174
+
175
+ protected function _filterPostData($data)
176
+ {
177
+ // The transition type must be one of the supported values
178
+ if (!isset(Ereactor_Slider_Model_Slideshow::$transitionTypes[$data['transition_type']])) {
179
+ $data['transition_type'] = 'slideInLeft';
180
+ }
181
+ $data['javascript'] = Mage::helper('slider')->extractJsonFields($data, array(
182
+ 'show_arrows', 'show_buttons', 'show_buttons_overlay', 'mouse_scroll', 'keyboard_scroll', 'pause_on_hover',
183
+ 'manual_advance', 'autoplay_interval', 'transition_type', 'transition_time', /*'transition_easing'*/
184
+ ));
185
+
186
+ return $data;
187
+ }
188
+ }
app/code/community/Ereactor/Slider/etc/adminhtml.xml ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <menu>
4
+ <cms>
5
+ <children>
6
+ <ereactor_slider translate="title" module="slider">
7
+ <title>E-reactor Slideshows</title>
8
+ <action>adminhtml/ereactor_slider/index</action>
9
+ <sort_order>50</sort_order>
10
+ </ereactor_slider>
11
+ </children>
12
+ </cms>
13
+ </menu>
14
+
15
+ <acl>
16
+ <resources>
17
+ <admin>
18
+ <children>
19
+ <slideshow translate="title" module="slider">
20
+ <title>Slideshows</title>
21
+ <sort_order>65</sort_order>
22
+ <children>
23
+ <manage translate="title">
24
+ <title>Manage slideshows</title>
25
+ <sort_order>0</sort_order>
26
+ <children>
27
+ <save translate="title">
28
+ <title>Save slideshows</title>
29
+ <sort_order>0</sort_order>
30
+ </save>
31
+ <delete translate="title">
32
+ <title>Delete slideshows</title>
33
+ <sort_order>10</sort_order>
34
+ </delete>
35
+ </children>
36
+ </manage>
37
+ </children>
38
+ </slideshow>
39
+ <system>
40
+ <children>
41
+ <config>
42
+ <children>
43
+ <ereactor_slider>
44
+ <title>e-reactor Slider options</title>
45
+ </ereactor_slider>
46
+ </children>
47
+ </config>
48
+ </children>
49
+ </system>
50
+ </children>
51
+ </admin>
52
+ </resources>
53
+ </acl>
54
+ </config>
app/code/community/Ereactor/Slider/etc/config.xml ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Ereactor_Slider>
5
+ <version>1.0.0</version>
6
+ </Ereactor_Slider>
7
+ </modules>
8
+
9
+ <global>
10
+ <models>
11
+ <ereactor_slider>
12
+ <class>Ereactor_Slider_Model</class>
13
+ <resourceModel>ereactor_slider_resource</resourceModel>
14
+ </ereactor_slider>
15
+ <ereactor_slider_resource>
16
+ <class>Ereactor_Slider_Model_Resource</class>
17
+ <entities>
18
+ <slideshow>
19
+ <table>ereactor_slider_slideshow</table>
20
+ </slideshow>
21
+ <slide>
22
+ <table>ereactor_slider_slide</table>
23
+ </slide>
24
+ </entities>
25
+ </ereactor_slider_resource>
26
+ </models>
27
+ <helpers>
28
+ <slider>
29
+ <class>Ereactor_Slider_Helper</class>
30
+ </slider>
31
+ </helpers>
32
+ <blocks>
33
+ <slider>
34
+ <class>Ereactor_Slider_Block</class>
35
+ </slider>
36
+ </blocks>
37
+ <resources>
38
+ <ereactor_slider_setup>
39
+ <setup>
40
+ <module>Ereactor_Slider</module>
41
+ <class>Mage_Core_Model_Resource_Setup</class>
42
+ </setup>
43
+ </ereactor_slider_setup>
44
+ </resources>
45
+ </global>
46
+
47
+ <adminhtml>
48
+ <layout>
49
+ <updates>
50
+ <ereactor_slider>
51
+ <file>ereactor_slider.xml</file>
52
+ </ereactor_slider>
53
+ </updates>
54
+ </layout>
55
+ </adminhtml>
56
+
57
+ <admin>
58
+ <routers>
59
+ <adminhtml>
60
+ <args>
61
+ <modules>
62
+ <Ereactor_Slider before="Mage_Adminhtml">Ereactor_Slider_Adminhtml</Ereactor_Slider>
63
+ </modules>
64
+ </args>
65
+ </adminhtml>
66
+ </routers>
67
+ </admin>
68
+ </config>
app/code/community/Ereactor/Slider/etc/system.xml ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <ereactor_config translate="label" module="slider">
5
+ <label>e-reactor Extensions</label>
6
+ <sort_order>9000</sort_order>
7
+ </ereactor_config>
8
+ </tabs>
9
+ <sections>
10
+ <ereactor_slider translate="label" module="slider">
11
+ <label>e-reactor Slider options</label>
12
+ <tab>ereactor_config</tab>
13
+ <frontend_type>text</frontend_type>
14
+ <sort_order>1</sort_order>
15
+ <show_in_default>1</show_in_default>
16
+ <show_in_website>1</show_in_website>
17
+ <show_in_store>1</show_in_store>
18
+ <groups>
19
+ <activation translate="label">
20
+ <label>Activation</label>
21
+ <frontend_type>text</frontend_type>
22
+ <sort_order>1</sort_order>
23
+ <show_in_default>1</show_in_default>
24
+ <show_in_website>1</show_in_website>
25
+ <show_in_store>1</show_in_store>
26
+ <fields>
27
+ <license_key translate="label comment">
28
+ <label>License key</label>
29
+ <comment>You must create a license key from the http://shop.e-reactor.dk website and enter it in this field</comment>
30
+ <frontend_type>text</frontend_type>
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
+ </license_key>
36
+ </fields>
37
+ </activation>
38
+ </groups>
39
+ </ereactor_slider>
40
+ </sections>
41
+ </config>
app/code/community/Ereactor/Slider/etc/widget.xml ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <widgets>
3
+ <slider_slider type="slider/slider" translate="name description" module="slider">
4
+ <name>Ereactor Slideshow</name>
5
+ <description type="desc">Adds a slideshow</description>
6
+ <parameters>
7
+ <slideshowId translate="label">
8
+ <label>Slideshow</label>
9
+ <visible>1</visible>
10
+ <required>1</required>
11
+ <type>select</type>
12
+ <source_model>ereactor_slider/slideshow</source_model>
13
+ </slideshowId>
14
+ </parameters>
15
+ </slider_slider>
16
+ </widgets>
app/code/community/Ereactor/Slider/sql/ereactor_slider_setup/install-1.0.0.php ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $installer = $this;
3
+ $db = $installer->getConnection();
4
+
5
+ $slideshowTableName = $installer->getTable('ereactor_slider/slideshow');
6
+ $slideshowTableExists = $db->showTableStatus($slideshowTableName);
7
+
8
+ if ($slideshowTableExists === false) {
9
+ $slideshowTable = $db->newTable($slideshowTableName)
10
+ ->addColumn('slideshow_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
11
+ 'auto_increment' => true,
12
+ 'unsigned' => true,
13
+ 'identity' => true,
14
+ 'nullable' => false,
15
+ 'primary' => true,
16
+ ), 'Slideshow id')
17
+ ->addColumn('name', Varien_Db_Ddl_Table::TYPE_TEXT, 255, array(
18
+ 'nullable' => true,
19
+ 'default' => null,
20
+ ), 'Name')
21
+ ->addColumn('is_published', Varien_Db_Ddl_Table::TYPE_TINYINT, null, array(
22
+ 'unsigned' => true,
23
+ 'nullable' => false,
24
+ 'default' => 1,
25
+ ), 'Is published')
26
+ ->addColumn('type', Varien_Db_Ddl_Table::TYPE_TINYINT, null, array(
27
+ 'unsigned' => true,
28
+ 'nullable' => false,
29
+ 'default' => 0,
30
+ ), 'Type')
31
+ ->addColumn('theme', Varien_Db_Ddl_Table::TYPE_TEXT, 255, array(
32
+ 'nullable' => false,
33
+ 'default' => 'default',
34
+ ), 'Theme')
35
+ ->addColumn('width', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
36
+ 'unsigned' => true,
37
+ 'nullable' => false,
38
+ 'default' => 600,
39
+ ), 'Width')
40
+ ->addColumn('width_unit', Varien_Db_Ddl_Table::TYPE_TINYINT, null, array(
41
+ 'unsigned' => true,
42
+ 'nullable' => false,
43
+ 'default' => 0,
44
+ ), 'Width unit')
45
+ ->addColumn('height', Varien_Db_Ddl_Table::TYPE_SMALLINT, null, array(
46
+ 'unsigned' => true,
47
+ 'nullable' => false,
48
+ 'default' => 100,
49
+ ), 'Height')
50
+ ->addColumn('height_unit', Varien_Db_Ddl_Table::TYPE_TINYINT, null, array(
51
+ 'unsigned' => true,
52
+ 'nullable' => false,
53
+ 'default' => 0,
54
+ ), 'Height unit')
55
+ ->addColumn('javascript', Varien_Db_Ddl_Table::TYPE_TEXT, '2M', array(
56
+ 'nullable' => true,
57
+ 'default' => null,
58
+ ), 'Javascript parameters')
59
+ ->addColumn('css', Varien_Db_Ddl_Table::TYPE_TEXT, '2M', array(
60
+ 'nullable' => true,
61
+ 'default' => null,
62
+ ), 'CSS parameters');
63
+ $db->createTable($slideshowTable);
64
+
65
+ // Create the sample slideshow
66
+ $slideshow = Mage::getModel('ereactor_slider/slideshow');
67
+ $slideshow->setName('Sample slider');
68
+ $slideshow->setWidth(685);
69
+ $slideshow->setHeight(257);
70
+ $slideshow->setJavascript('{"show_arrows":"1","show_buttons":"1","show_buttons_overlay":"0","pause_on_hover":"1","manual_advance":"0","autoplay_interval":"5000","transition_type":"random","transition_time":"400"}');
71
+ try{
72
+ $slideshow->save();
73
+ $slideshowId = $slideshow->getId();
74
+ } catch (Exception $e) {
75
+ $slideshowId = null;
76
+ }
77
+ }
78
+
79
+ $slideTableName = $installer->getTable('ereactor_slider/slide');
80
+ $slideTableExists = $db->showTableStatus($slideTableName);
81
+
82
+ if ($slideTableExists === false) {
83
+ $slideTable = $db->newTable($slideTableName)
84
+ ->addColumn('slide_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
85
+ 'auto_increment' => true,
86
+ 'unsigned' => true,
87
+ 'identity' => true,
88
+ 'nullable' => false,
89
+ 'primary' => true,
90
+ ), 'Slide id')
91
+ ->addColumn('slideshow_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
92
+ 'unsigned' => true,
93
+ 'nullable' => false,
94
+ ), 'Slideshow id')
95
+ ->addColumn('name', Varien_Db_Ddl_Table::TYPE_TEXT, 255, array(
96
+ 'nullable' => true,
97
+ 'default' => null,
98
+ ), 'Name')
99
+ ->addColumn('is_published', Varien_Db_Ddl_Table::TYPE_TINYINT, null, array(
100
+ 'unsigned' => true,
101
+ 'nullable' => false,
102
+ 'default' => 1,
103
+ ), 'Is published')
104
+ ->addColumn('caption', Varien_Db_Ddl_Table::TYPE_TEXT, 255, array(
105
+ 'nullable' => true,
106
+ 'default' => null,
107
+ ), 'Caption')
108
+ ->addColumn('type', Varien_Db_Ddl_Table::TYPE_TINYINT, null, array(
109
+ 'unsigned' => true,
110
+ 'nullable' => false,
111
+ 'default' => 0,
112
+ ), 'Type')
113
+ ->addColumn('content', Varien_Db_Ddl_Table::TYPE_TEXT, '2M', array(
114
+ 'nullable' => true,
115
+ 'default' => null,
116
+ ), 'Content')
117
+ ->addColumn('icon', Varien_Db_Ddl_Table::TYPE_TEXT, 255, array(
118
+ 'nullable' => true,
119
+ 'default' => null,
120
+ ), 'Icon')
121
+ ->addColumn('slide_order', Varien_Db_Ddl_Table::TYPE_TINYINT, null, array(
122
+ 'unsigned' => true,
123
+ 'nullable' => false,
124
+ 'default' => 0
125
+ ), 'Order')
126
+ ->addForeignKey(
127
+ 'FK_SLIDE_RELATION_SLIDESHOW',
128
+ 'slideshow_id',
129
+ $installer->getTable('ereactor_slider/slideshow'),
130
+ 'slideshow_id',
131
+ 'cascade',
132
+ 'cascade')
133
+ ->addIndex(
134
+ 'IDX_ORDER',
135
+ array('slideshow_id', 'slide_order')
136
+ );
137
+ $db->createTable($slideTable);
138
+
139
+ // Create the sample slides if possible
140
+ if (isset($slideshowId)) {
141
+ $db->insertArray($slideTableName, array('slide_id', 'slideshow_id', 'type', 'slide_order', 'name', 'caption', 'content'), array(
142
+ array(
143
+ 1, $slideshowId, Ereactor_Slider_Model_Slide::TYPE_IMAGE, 1,
144
+ 'Woman on beach',
145
+ 'Display large, stunning images anywhere on your website.',
146
+ '{"image_url":"\/media\/wysiwyg\/\/sample-slideshow\/womanonbeach.jpg","image_link":"","image_target":"_blank","image_follow":"follow","html_html":"","product_id":""}',
147
+ ),
148
+ array(
149
+ 2, $slideshowId, Ereactor_Slider_Model_Slide::TYPE_IMAGE, 2,
150
+ 'Coffee cup',
151
+ 'You can make the images link to other pages.',
152
+ '{"image_url":"\/media\/wysiwyg\/sample-slideshow\/coffeecup.jpg","image_link":"https:\/\/en.wikipedia.org\/wiki\/Coffee","image_target":"_blank","image_follow":"nofollow","html_html":"","product_id":""}',
153
+ ),
154
+ array(
155
+ 3, $slideshowId, Ereactor_Slider_Model_Slide::TYPE_HTML, 3,
156
+ 'Padlock',
157
+ 'And you can still include a caption if you need one.',
158
+ '{"image_url":"","image_link":"","image_target":"_blank","image_follow":"follow","html_html":"<img src=\"http:\/\/magentoslider.dk\/media\/wysiwyg\/sample-slideshow\/lock.jpg\" alt=\"Padlock\" \/>\n<div style=\"bottom:50px; left:20px; width: 200px; background:rgb(0,0,0); background:rgba(0,0,0,0.8); color:#fff; padding:20px; font-size:20px; line-height: 24px;\">With HTML slides, you can position content in any way you want!<\/div>","product_id":""}',
159
+ ),
160
+ array(
161
+ 4, $slideshowId, Ereactor_Slider_Model_Slide::TYPE_HTML, 4,
162
+ 'More HTML',
163
+ '',
164
+ '{"image_url":"","image_link":"","image_target":"_blank","image_follow":"follow","html_html":"<div style=\"width: 100%; height: 100%; background: #6af;\nbackground: -moz-linear-gradient(-45deg, #6af 0%, #fff 100%);\nbackground: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#6af), color-stop(100%,#fff));\nbackground: -webkit-linear-gradient(-45deg, #6af 0%,#fff 100%);\nbackground: -o-linear-gradient(-45deg, #6af 0%,#fff 100%);\nbackground: -ms-linear-gradient(-45deg, #6af 0%,#fff 100%);\nbackground: linear-gradient(135deg, #6af 0%,#fff 100%);\nfilter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'#6af\', endColorstr=\'#fff\',GradientType=1 );\">\n<div style=\"top:15%; left:50%; margin-left:-300px; width:600px; font-size:20px; line-height:24px;\">\nYou can include any HTML elements you want, such as <a href=\"#\">a link<\/a>, <button type=\"button\">a button<\/button>, <input type=\"text\" value=\"Editable form elements\" style=\"width:300px;\" \/>, or even more images.<\/div>\n<div style=\"top: 45%; width:100%; text-align:center;\">\n<img src=\"http:\/\/lorempixel.com\/g\/180\/100\/abstract\" alt=\"Sample image\" style=\"border: 1px solid #000974;\" \/>&nbsp;&nbsp;\n<img src=\"http:\/\/lorempixel.com\/230\/100\/abstract\" alt=\"Sample image\" style=\"border: 1px solid #000974;\" \/>&nbsp;&nbsp;\n<img src=\"http:\/\/lorempixel.com\/g\/200\/100\/abstract\" alt=\"Sample image\" style=\"border: 1px solid #000974;\" \/><\/div>\n<\/div>","product_id":""}',
165
+ ),
166
+ ));
167
+ }
168
+ }
app/design/adminhtml/default/default/layout/ereactor_slider.xml ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.0.1">
3
+ <adminhtml_ereactor_slider_index>
4
+ <reference name="content">
5
+ <block type="slider/adminhtml_slideshow" name="slideshow" />
6
+ </reference>
7
+ </adminhtml_ereactor_slider_index>
8
+
9
+ <adminhtml_ereactor_slider_grid>
10
+ <block type="slider/adminhtml_slideshow_grid" name="root" />
11
+ </adminhtml_ereactor_slider_grid>
12
+
13
+ <adminhtml_ereactor_slider_new>
14
+ <update handle="adminhtml_slideshow_edit" />
15
+ </adminhtml_ereactor_slider_new>
16
+
17
+ <adminhtml_ereactor_slider_edit>
18
+ <update handle="editor" />
19
+ <reference name="head">
20
+ <action method="addJs"><script>ereactor_slider/jquery-1.9.1.min.js</script></action>
21
+ <action method="addJs"><script>ereactor_slider/adminhtml/edit-slideshow.min.js</script></action>
22
+ <action method="addJs"><script>ereactor_slider/jquery.nivo-slider.js</script></action>
23
+ <action method="addCss"><stylesheet>../../../frontend/base/default/css/ereactor_slider/default.css</stylesheet></action>
24
+ <action method="addCss"><stylesheet>../../../frontend/base/default/css/ereactor_slider/nivo-slider.css</stylesheet></action>
25
+ <action method="addCss"><stylesheet>ereactor_slider/style.min.css</stylesheet></action>
26
+ </reference>
27
+ <reference name="content">
28
+ <block type="slider/adminhtml_slideshow_edit" name="slideshow_edit" />
29
+ </reference>
30
+ <reference name="left">
31
+ <block type="slider/adminhtml_slideshow_edit_tabs" name="slideshow_edit_tabs">
32
+ <block type="slider/adminhtml_slideshow_edit_tab_general" name="slideshow_edit_tab_general" />
33
+ <block type="slider/adminhtml_slideshow_edit_tab_slides" name="slideshow_edit_tab_slides">
34
+ <block type="slider/adminhtml_slide_quickadd" name="slide_quickadd" />
35
+ <block type="slider/adminhtml_slide_batch" name="slide_batch" template="ereactor/slider/slide/batch.phtml"/>
36
+ <block type="slider/adminhtml_slide_grid" name="slide_grid"/>
37
+ </block>
38
+
39
+ <action method="addTab">
40
+ <name>general</name>
41
+ <block>slideshow_edit_tab_general</block>
42
+ </action>
43
+
44
+ <action method="addTab">
45
+ <name>slides</name>
46
+ <block>slideshow_edit_tab_slides</block>
47
+ </action>
48
+ </block>
49
+ <block type="slider/adminhtml_slideshow_preview" name="slideshow_preview" template="ereactor/slider/slideshow/preview.phtml"/>
50
+ </reference>
51
+ </adminhtml_ereactor_slider_edit>
52
+
53
+ <adminhtml_ereactor_slider_slide_grid>
54
+ <block type="slider/adminhtml_slide_grid" name="root"/>
55
+ </adminhtml_ereactor_slider_slide_grid>
56
+
57
+ <adminhtml_ereactor_slider_slide_preview>
58
+ <block type="slider/adminhtml_slide_preview" name="root" template="ereactor/slider/slide/preview.phtml"/>
59
+ </adminhtml_ereactor_slider_slide_preview>
60
+
61
+ <adminhtml_ereactor_slider_slide_edit>
62
+ <block type="core/text_list" name="root">
63
+ <block type="slider/adminhtml_slide_preview" name="slide_preview" template="ereactor/slider/slide/preview.phtml"/>
64
+ <block type="slider/adminhtml_slide_quickadd" name="slide_quickedit"/>
65
+ </block>
66
+ </adminhtml_ereactor_slider_slide_edit>
67
+
68
+ <adminhtml_ereactor_slider_slide_batchaddimagesform>
69
+ <block type="slider/adminhtml_slide_batch_images" name="root"/>
70
+ </adminhtml_ereactor_slider_slide_batchaddimagesform>
71
+ </layout>
app/design/adminhtml/default/default/template/ereactor/slider/slide/batch.phtml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <div id="generateSlides">
2
+ <?php echo $this->__('Generate many slides at once'); ?>
3
+ <a class="ereactor-batch-images form-button" href="<?php echo $this->getImagesUrl(); ?>"><?php echo $this->__('From images'); ?></a>
4
+ </div>
app/design/adminhtml/default/default/template/ereactor/slider/slide/preview.phtml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <div class="ereactor-slide-preview nivo-slider-wrapper theme-default">
2
+ <div class="nivoSlider" style="width: <?php echo $this->getWidth(); ?>; height: <?php echo $this->getHeight(); ?>;">
3
+ <?php echo $this->getSlide(); ?>
4
+ </div>
5
+ </div>
6
+ <br />
app/design/adminhtml/default/default/template/ereactor/slider/slideshow/preview.phtml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div id="ereactor-slider-preview" class="nivo-slider-wrapper theme-default">
2
+ <div id="slider-<?php echo $this->_nameInLayout; ?>" class="nivoSlider" style="width: 200px; height: 75px;">
3
+ <img src="/media/ereactor_slider/grey-small.gif" alt="Slide" />
4
+ <img src="/media/ereactor_slider/orange-small.gif" alt="Slide" />
5
+ <img src="/media/ereactor_slider/grey-small.gif" alt="Slide" />
6
+ <img src="/media/ereactor_slider/orange-small.gif" alt="Slide" />
7
+ </div>
8
+ </div>
9
+ <script type="text/javascript">
10
+ jQuery(function() {
11
+ jQuery('#slider-<?php echo $this->_nameInLayout; ?>').nivoSlider(<?php echo $this->getNivoParams(); ?>);
12
+ });
13
+ </script>
app/design/frontend/base/default/template/ereactor/slider/slide/html.phtml ADDED
@@ -0,0 +1 @@
 
1
+ <div class="nivo-slide" <?php echo $this->getCaption() ? 'title="' . $this->getCaption() . '"' : ''; ?>><?php echo $this->getInnerHtml(); ?></div>
app/design/frontend/base/default/template/ereactor/slider/slide/image.phtml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $caption = $this->getCaption() ? 'title="' . $this->getCaption() . '"' : '';
3
+ if ($this->getImageLink()) :
4
+ $target = $this->getTarget() ? ('target="' . $this->getTarget() . '" ') : '';
5
+ $rel = $this->getFollow() ? ('rel="' . $this->getFollow() . '" ') : '';?>
6
+ <a href="<?php echo $this->getImageLink(); ?>" <?php echo $target . ' ' . $rel . ' ' . $caption; ?>><img src="<?php echo $this->getImageUrl(); ?>" alt="Slide" /></a>
7
+ <?php else: ?>
8
+ <img src="<?php echo $this->getImageUrl(); ?>" alt="Slide" <?php echo $caption; ?> />
9
+ <?php endif; ?>
app/design/frontend/base/default/template/ereactor/slider/slideshow.phtml ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ($this->getIncludeScripts()) : ?>
2
+ <script type="text/javascript" src="/js/ereactor_slider/jquery-1.9.1.min.js"></script>
3
+ <script type="text/javascript" src="/js/ereactor_slider/jquery.nivo-slider.js"></script>
4
+ <style>@import url("/skin/frontend/base/default/css/ereactor_slider/default.css")</style>
5
+ <style>@import url("/skin/frontend/base/default/css/ereactor_slider/nivo-slider.css")</style>
6
+ <?php endif; ?>
7
+
8
+ <div class="nivo-slider-wrapper theme-default">
9
+ <div id="slider-<?php echo $this->_nameInLayout; ?>" class="nivoSlider" style="<?php echo $this->getSlideshow()->getDimensions(); ?>">
10
+ <?php foreach ($this->getSlides() as $slide) : ?>
11
+ <?php echo $slide; ?>
12
+ <?php endforeach; ?>
13
+ </div>
14
+ </div>
15
+ <script type="text/javascript">
16
+ jQuery(function() {
17
+ jQuery('#slider-<?php echo $this->_nameInLayout; ?>').nivoSlider(<?php echo $this->getSlideshow()->getNivoParams(); ?>);
18
+ });
19
+ </script>
app/etc/modules/Ereactor_Slider.xml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+ <modules>
5
+ <Ereactor_Slider>
6
+ <active>true</active>
7
+ <codePool>community</codePool>
8
+ <depends>
9
+ <Mage_Cms />
10
+ </depends>
11
+ </Ereactor_Slider>
12
+ </modules>
13
+ </config>
app/locale/en_US/Ereactor_Slider.csv ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Action","Action"
2
+ "Actions","Actions"
3
+ "Add new slide","Add new slide"
4
+ "Add slide","Add slide"
5
+ "An error occured while deleting the slide.","An error occured while deleting the slide."
6
+ "An error occured while deleting the slideshow.","An error occured while deleting the slideshow."
7
+ "An error occured while moving the slide.","An error occured while moving the slide."
8
+ "An error occured while saving the slide.","An error occured while saving the slide."
9
+ "An error occured while saving the slideshow.","An error occured while saving the slideshow."
10
+ "Are you sure you want to delete this slide?","Are you sure you want to delete this slide?"
11
+ "Automatic","Automatic"
12
+ "Cancel","Cancel"
13
+ "Caption","Caption"
14
+ "Choose a product","Choose a product"
15
+ "Choose products","Choose products"
16
+ "Choose...","Choose..."
17
+ "Content","Content"
18
+ "Delete","Delete"
19
+ "Edit","Edit"
20
+ "Edit '%s'","Edit '%s'"
21
+ "Edit slide","Edit slide"
22
+ "Edit slideshow","Edit slideshow"
23
+ "Enable keyboard scroll?","Enable keyboard scroll?"
24
+ "Enable mouse wheel scroll?","Enable mouse wheel scroll?"
25
+ "E-reactor Slider","E-reactor Slider"
26
+ "Folder path","Folder path"
27
+ "For Product and HTML slides, only Slide and Fade are available.","For Product and HTML slides, only Slide and Fade are available."
28
+ "Found %d %s but could not generate any slides.","Found %d %s but could not generate any slides."
29
+ "Found %d %s but only %d slides could be created: %s.","Found %d %s but only %d slides could be created: %s."
30
+ "From images","From images"
31
+ "From products","From products"
32
+ "General","General"
33
+ "Generate","Generate"
34
+ "Generate many slides at once","Generate many slides at once"
35
+ "Generate slides from images","Generate slides from images"
36
+ "Generate slides from products","Generate slides from products"
37
+ "Height","Height"
38
+ "Height unit","Height unit"
39
+ "ID","ID"
40
+ "Image","Image"
41
+ "Image link","Image link"
42
+ "In a new window","In a new window"
43
+ "In the current window","In the current window"
44
+ "Link follow","Link follow"
45
+ "Manage slideshows","Manage slideshows"
46
+ "Manual","Manual"
47
+ "miliseconds","miliseconds"
48
+ "Move","Move"
49
+ "Name","Name"
50
+ "New slideshow","New slideshow"
51
+ "No","No"
52
+ "Not available if autoplay is disabled.","Not available if autoplay is disabled."
53
+ "Number of slides","Number of slides"
54
+ "or","or"
55
+ "Order","Order"
56
+ "Pause slideshow on mouseover","Pause slideshow on mouseover"
57
+ "Play automatically?","Play automatically?"
58
+ "Product","Product"
59
+ "Products","Products"
60
+ "Save","Save"
61
+ "Save and continue","Save and continue"
62
+ "Save changes","Save changes"
63
+ "Should search engines follow the link?","Should search engines follow the link?"
64
+ "Show navigation arrows","Show navigation arrows"
65
+ "Show navigation buttons as an overlay?","Show navigation buttons as an overlay?"
66
+ "Show navigation buttons?","Show navigation buttons?"
67
+ "Slide %d","Slide %d"
68
+ "Slide layout","Slide layout"
69
+ "Slide transition","Slide transition"
70
+ "Slide transitions","Slide transitions"
71
+ "Slides","Slides"
72
+ "Slideshow controls","Slideshow controls"
73
+ "Slideshow info","Slideshow info"
74
+ "Slideshows","Slideshows"
75
+ "Stretch","Stretch"
76
+ "Successfully generated slides from %d %s: %s.","Successfully generated slides from %d %s: %s."
77
+ "Text / HTML","Text / HTML"
78
+ "The path to the folder that contains the images","The path to the folder that contains the images"
79
+ "The slide has been deleted.","The slide has been deleted."
80
+ "The slide has been moved.","The slide has been moved."
81
+ "The slide has been saved.","The slide has been saved."
82
+ "The slideshow does not exist.","The slideshow does not exist."
83
+ "The slideshow has been deleted.","The slideshow has been deleted."
84
+ "The slideshow has been saved.","The slideshow has been saved."
85
+ "Theme","Theme"
86
+ "These are the arrows you use to move left/right between slides","These are the arrows you use to move left/right between slides"
87
+ "These are the buttons you use to jump between slides","These are the buttons you use to jump between slides"
88
+ "Time between slides","Time between slides"
89
+ "Title","Title"
90
+ "Transition easing","Transition easing"
91
+ "Transition time","Transition time"
92
+ "Type","Type"
93
+ "Unable to find the slide.","Unable to find the slide."
94
+ "Unable to find the slideshow.","Unable to find the slideshow."
95
+ "Values under 50 miliseconds are ignored.","Values under 50 miliseconds are ignored."
96
+ ""When enabled, the buttons will appear over the slideshow"," when disabled, they will appear below."",""When enabled, the buttons will appear over the slideshow"," when disabled, they will appear below.""
97
+ "Where to open the link","Where to open the link"
98
+ "Width","Width"
99
+ "Width unit","Width unit"
100
+ "Yes","Yes"
js/ereactor_slider/adminhtml/edit-slideshow.js ADDED
@@ -0,0 +1,243 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var EREACTOR = { UTILS : { }, SLIDER : { } };
2
+
3
+ (function($) {
4
+ "use strict";
5
+ // Slideshow tab
6
+ $( function() {
7
+ var $preview = $('#ereactor-slider-preview .nivoSlider');
8
+ $( '#slideshow_general_stretch_width' ).click( function() {
9
+ $( '#slideshow_general_width' ).val( 100 );
10
+ $( '#slideshow_general_width_unit option' ).prop('selected', false).filter('[value="1"]' ).prop('selected', true);
11
+ });
12
+ $( '#slideshow_general_autoplay_interval' ).change(function() {
13
+ $preview.data( 'nivoslider' ).options({ pauseTime : parseInt(this.value, 10) });
14
+ });
15
+ $( '#slideshow_general_transition_type' ).change(function() {
16
+ $preview.data( 'nivoslider' ).options({ effect : this.value });
17
+ });
18
+ $( '#slideshow_general_transition_time' ).change(function() {
19
+ $preview.data( 'nivoslider' ).options({ animSpeed : parseInt(this.value, 10) });
20
+ });
21
+ $( '#page_tabs_general_content')
22
+ .find( 'input[name="pause_on_hover"]' ).change(function() {
23
+ if( $( this ).is( ':checked' ) ) {
24
+ $preview.data( 'nivoslider' ).setPauseOnHover(this.value === '1');
25
+ }
26
+ }).end()
27
+ .find( 'input[name="show_arrows"]' ).change(function() {
28
+ if( $( this ).is( ':checked' ) ) {
29
+ $( '.nivo-directionNav', $preview ).toggle( this.value === '1' );
30
+ }
31
+ }).end()
32
+ .find( 'input[name="show_buttons"]' ).change(function() {
33
+ if( $( this ).is( ':checked' ) ) {
34
+ $( '.nivo-controlNav', $preview.parent() ).toggle( this.value === '1' );
35
+ }
36
+ }).end()
37
+ .find( 'input[name="show_buttons_overlay"]' ).change(function() {
38
+ if( $( this ).is( ':checked' ) ) {
39
+ $( '.nivo-controlNav', $preview.parent() ).toggleClass( 'nivo-controlNav-hover', this.value === '1' );
40
+ }
41
+ }).end()
42
+ .find( 'input[name="manual_advance"]' ).change(function() {
43
+ if( $( this ).is( ':checked' ) ) {
44
+ $preview.data( 'nivoslider' ).options({ manualAdvance : (this.value === '1') });
45
+ }
46
+ }).end();
47
+
48
+ // varienGlobalEvents - global variable; used for event listening
49
+ varienGlobalEvents.attachEventHandler( 'showTab', function( e ) {
50
+ $('#ereactor-slider-preview').toggle( e.tab.name === 'general' );
51
+ });
52
+ });
53
+
54
+ // Slides tab
55
+ // slidesGridJsObject - global variable; it represents the grid of slides
56
+ $( function() {
57
+ // Fail early if the slides tab does not exist
58
+ if( $('#page_tabs_slides_content').length === 0 ) {
59
+ return;
60
+ }
61
+ function saveQuickAdd( $quickAdd ) {
62
+ EREACTOR.UTILS.ajaxSubmit( $quickAdd, EREACTOR.SLIDER.url.quickAddSave, function() { slideGridJsObject.reload(); } );
63
+ }
64
+
65
+ function registerQuickAdd( $quickAdd ) {
66
+ $quickAdd = $quickAdd.filter('.entry-edit');
67
+
68
+ // Add the save button functionality if we're not in a modal
69
+ if( $( '[name="slide[slide_id]"]', $quickAdd ).length === 0 ) {
70
+ $( 'button.save', $quickAdd ).click( function() {
71
+ saveQuickAdd( $quickAdd );
72
+ return false;
73
+ });
74
+ }
75
+
76
+ $quickAdd
77
+ // Show / hide form fields according to the slide type
78
+ .find( '[name="slide[type]"]' ).change( function() {
79
+ var current = '.field-t' + this.value;
80
+ $quickAdd
81
+ // Get all the fields
82
+ .find( '[class*="field-t"]' )
83
+ // Hide all that aren't the current type
84
+ .not( current ).closest( 'tr' ).hide().end().end()
85
+ // Show the current type
86
+ .filter( current ).closest( 'tr' ).show().end().end().end()
87
+ // Mark all the images as unselected
88
+ .find( '.ereactor-slide-type' ).removeClass( 'ereactor-selected' )
89
+ // Mark the current image as selected
90
+ .filter( '.ereactor-slide-t' + this.value ).addClass( 'ereactor-selected' );
91
+ }).change().end()
92
+ // Change the slide type according to the selected image
93
+ .find( '.ereactor-slide-type' ).click( function() {
94
+ $( '[name="slide[type]"]', $quickAdd ).val( $( this ).data( 'value' ) ).change();
95
+ return false;
96
+ }).end()
97
+ // Open the image chooser
98
+ .find( '.ereactor-image-chooser' ).click( function() {
99
+ EREACTOR.UTILS.openMediaBrowser( $( this ).prev()[0], EREACTOR.SLIDER.url.imageChooser, EREACTOR.SLIDER.url.imageInsert);
100
+ return false;
101
+ }).end()
102
+ .find( '[class*="field-t"]' ).change( function() {
103
+ var type = $( '[name="slide[type]"]', $quickAdd ).val();
104
+ // Check that the main field for our current type is filled
105
+ if( ( type === 'image' && $( '[name="slide[image_url]"]', $quickAdd ).val() === '' ) ||
106
+ ( type === 'html' && $( '[name="slide[html_html]"]', $quickAdd ).val() === '' ) ) {
107
+ return;
108
+ }
109
+ EREACTOR.UTILS.ajaxSubmit( $quickAdd, EREACTOR.SLIDER.url.slidePreview, function(content){
110
+ $quickAdd.prevAll().remove().end().before( content.responseText );
111
+ });
112
+ }).end();
113
+ }
114
+
115
+ // If needed, displays a confirmation box with the appropriate text
116
+ function isConfirmed( elem ) {
117
+ var $elem = $( elem );
118
+ return !$elem.is( '.ereactor-confirm' ) || window.confirm( $elem.data('confirm') );
119
+ }
120
+
121
+ registerQuickAdd( $( '#page_tabs_slides_content .entry-edit' ) );
122
+
123
+ // Callback function that opens the quick edit modal
124
+ slideGridJsObject.rowClickCallback = function(grid, event) {
125
+ if( $( event.target ).is( 'td' ) ) {
126
+ EREACTOR.UTILS.openModal( event.currentTarget.title, registerQuickAdd, saveQuickAdd );
127
+ }
128
+ return false;
129
+ };
130
+
131
+ // Handlers for the various actions you can do in the slides grid
132
+ $( '#slideGrid' )
133
+ .on( 'click', '.ereactor-ajax-link', function() {
134
+ var ajaxRequest;
135
+ if( !isConfirmed( this ) ) {
136
+ return false;
137
+ }
138
+ ajaxRequest = new Ajax.Request(this.href, {
139
+ method : 'get',
140
+ onSuccess : function() { slideGridJsObject.reload(); }
141
+ });
142
+ return false;
143
+ })
144
+ .on( 'click', '.ereactor-ajax-modal', function() {
145
+ return EREACTOR.UTILS.openModal( this.href, registerQuickAdd, saveQuickAdd );
146
+ });
147
+
148
+ });
149
+
150
+ // Slide generation buttons
151
+ $( function() {
152
+ // Fail early if the slides tab does not exist
153
+ if( $('#page_tabs_slides_content').length === 0 ) {
154
+ return;
155
+ }
156
+
157
+ function submitGenerateForm( $form ) {
158
+ EREACTOR.UTILS.ajaxSubmit( $form, EREACTOR.SLIDER.url.batchAdd, function() { slideGridJsObject.reload(); } );
159
+ }
160
+
161
+ $( '#generateSlides' )
162
+ .find( '.ereactor-batch-images' ).click( function() {
163
+ return EREACTOR.UTILS.openModal( this.href, null, submitGenerateForm );
164
+ }).end();
165
+ });
166
+
167
+ // Media browser functionality
168
+ // MediabrowserUtility - global variable; we use it to instantiate a new media browser
169
+ // MediabrowserInstance - global variable; an instance of a media browser
170
+ // Windows - global variable; set by a prototype plugin and used to manage Magento's modal windows
171
+ $( function() {
172
+ // We don't receive an event when the media browser is loaded so we need to poll for it
173
+ EREACTOR.UTILS.openMediaBrowser = function( target, loadUrl, submitUrl ) {
174
+ var loadCheck;
175
+ MediabrowserUtility.openDialog( loadUrl + '?target_element_id=' + target.id );
176
+ loadCheck = setInterval( function() {
177
+ if( MediabrowserInstance ) {
178
+ // We replace the insertUrl with our own, so that we produce a correct filename
179
+ MediabrowserInstance.onInsertUrl = submitUrl;
180
+ clearInterval( loadCheck );
181
+ }
182
+ }, 100);
183
+ };
184
+
185
+ // Clear the media browser instance variable when the media browser is closed
186
+ // Also, fire the change event on the target field so we know it has been updated
187
+ Windows.addObserver( {
188
+ 'onDestroy' : function( event, window ) {
189
+ if( window.element.id === MediabrowserUtility.dialogWindow.element.id && MediabrowserInstance ) {
190
+ var $target = $( '#' + MediabrowserInstance.targetElementId );
191
+ // At this point the value hasn't been updated yet; we assume it will happen soon
192
+ setTimeout( function() {
193
+ $target.change();
194
+ }, 100);
195
+ MediabrowserInstance = null;
196
+ }
197
+ }
198
+ });
199
+ });
200
+
201
+ // Form serialization / AJAX submit
202
+ $( function() {
203
+ EREACTOR.UTILS.ajaxSubmit = function( $form, url, onSuccess ) {
204
+ var jsonData = {}, ajaxRequest;
205
+ $( ':input', $form ).each(function() {
206
+ jsonData[this.name] = this.value;
207
+ });
208
+ ajaxRequest = new Ajax.Request(url, {
209
+ method : 'post',
210
+ parameters : jsonData,
211
+ onSuccess : function( result ) {
212
+ if( onSuccess ) {
213
+ onSuccess( result );
214
+ }
215
+ }
216
+ });
217
+ };
218
+ });
219
+
220
+ // Modal dialogs functionality
221
+ $( function() {
222
+ var $container = $( '<div class="ereactor_modal_container"><div class="ereactor_modal_wrapper"></div></div>' ).hide().appendTo( 'body' );
223
+ EREACTOR.UTILS.openModal = function( url, onSuccess, onSubmit ) {
224
+ var ajaxRequest = new Ajax.Request( url, {
225
+ method : 'get',
226
+ onSuccess : function(result) {
227
+ var $root = $container.height( $( 'html' ).height() ).show().find( '.ereactor_modal_wrapper' ).html( result.responseText ).children();
228
+ if( onSuccess ) {
229
+ onSuccess( $root );
230
+ }
231
+ $('.save, .cancel', $root).click(function() {
232
+ if( $( this ).is('.save') && onSubmit ) {
233
+ onSubmit( $root );
234
+ }
235
+ $container.hide();
236
+ return false;
237
+ });
238
+ }
239
+ });
240
+ return false;
241
+ };
242
+ });
243
+ }(jQuery));
js/ereactor_slider/adminhtml/edit-slideshow.min.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ var EREACTOR={UTILS:{},SLIDER:{}};
2
+ (function(a){a(function(){var b=a("#ereactor-slider-preview .nivoSlider");a("#slideshow_general_stretch_width").click(function(){a("#slideshow_general_width").val(100);a("#slideshow_general_width_unit option").prop("selected",!1).filter('[value="1"]').prop("selected",!0)});a("#slideshow_general_autoplay_interval").change(function(){b.data("nivoslider").options({pauseTime:parseInt(this.value,10)})});a("#slideshow_general_transition_type").change(function(){b.data("nivoslider").options({effect:this.value})});a("#slideshow_general_transition_time").change(function(){b.data("nivoslider").options({animSpeed:parseInt(this.value,
3
+ 10)})});a("#page_tabs_general_content").find('input[name="pause_on_hover"]').change(function(){a(this).is(":checked")&&b.data("nivoslider").setPauseOnHover("1"===this.value)}).end().find('input[name="show_arrows"]').change(function(){a(this).is(":checked")&&a(".nivo-directionNav",b).toggle("1"===this.value)}).end().find('input[name="show_buttons"]').change(function(){a(this).is(":checked")&&a(".nivo-controlNav",b.parent()).toggle("1"===this.value)}).end().find('input[name="show_buttons_overlay"]').change(function(){a(this).is(":checked")&&
4
+ a(".nivo-controlNav",b.parent()).toggleClass("nivo-controlNav-hover","1"===this.value)}).end().find('input[name="manual_advance"]').change(function(){a(this).is(":checked")&&b.data("nivoslider").options({manualAdvance:"1"===this.value})}).end();varienGlobalEvents.attachEventHandler("showTab",function(b){a("#ereactor-slider-preview").toggle("general"===b.tab.name)})});a(function(){function b(a){EREACTOR.UTILS.ajaxSubmit(a,EREACTOR.SLIDER.url.quickAddSave,function(){slideGridJsObject.reload()})}function d(c){c=
5
+ c.filter(".entry-edit");0===a('[name="slide[slide_id]"]',c).length&&a("button.save",c).click(function(){b(c);return!1});c.find('[name="slide[type]"]').change(function(){var a=".field-t"+this.value;c.find('[class*="field-t"]').not(a).closest("tr").hide().end().end().filter(a).closest("tr").show().end().end().end().find(".ereactor-slide-type").removeClass("ereactor-selected").filter(".ereactor-slide-t"+this.value).addClass("ereactor-selected")}).change().end().find(".ereactor-slide-type").click(function(){a('[name="slide[type]"]',
6
+ c).val(a(this).data("value")).change();return!1}).end().find(".ereactor-image-chooser").click(function(){EREACTOR.UTILS.openMediaBrowser(a(this).prev()[0],EREACTOR.SLIDER.url.imageChooser,EREACTOR.SLIDER.url.imageInsert);return!1}).end().find('[class*="field-t"]').change(function(){var b=a('[name="slide[type]"]',c).val();"image"===b&&""===a('[name="slide[image_url]"]',c).val()||"html"===b&&""===a('[name="slide[html_html]"]',c).val()||EREACTOR.UTILS.ajaxSubmit(c,EREACTOR.SLIDER.url.slidePreview,function(a){c.prevAll().remove().end().before(a.responseText)})}).end()}
7
+ 0!==a("#page_tabs_slides_content").length&&(d(a("#page_tabs_slides_content .entry-edit")),slideGridJsObject.rowClickCallback=function(c,e){a(e.target).is("td")&&EREACTOR.UTILS.openModal(e.currentTarget.title,d,b);return!1},a("#slideGrid").on("click",".ereactor-ajax-link",function(){var b=a(this);if(b.is(".ereactor-confirm")&&!window.confirm(b.data("confirm")))return!1;new Ajax.Request(this.href,{method:"get",onSuccess:function(){slideGridJsObject.reload()}});return!1}).on("click",".ereactor-ajax-modal",
8
+ function(){return EREACTOR.UTILS.openModal(this.href,d,b)}))});a(function(){function b(a){EREACTOR.UTILS.ajaxSubmit(a,EREACTOR.SLIDER.url.batchAdd,function(){slideGridJsObject.reload()})}0!==a("#page_tabs_slides_content").length&&a("#generateSlides").find(".ereactor-batch-images").click(function(){return EREACTOR.UTILS.openModal(this.href,null,b)}).end()});a(function(){EREACTOR.UTILS.openMediaBrowser=function(a,d,c){var e;MediabrowserUtility.openDialog(d+"?target_element_id="+a.id);e=setInterval(function(){MediabrowserInstance&&
9
+ (MediabrowserInstance.onInsertUrl=c,clearInterval(e))},100)};Windows.addObserver({onDestroy:function(b,d){if(d.element.id===MediabrowserUtility.dialogWindow.element.id&&MediabrowserInstance){var c=a("#"+MediabrowserInstance.targetElementId);setTimeout(function(){c.change()},100);MediabrowserInstance=null}}})});a(function(){EREACTOR.UTILS.ajaxSubmit=function(b,d,c){var e={};a(":input",b).each(function(){e[this.name]=this.value});new Ajax.Request(d,{method:"post",parameters:e,onSuccess:function(a){c&&
10
+ c(a)}})}});a(function(){var b=a('<div class="ereactor_modal_container"><div class="ereactor_modal_wrapper"></div></div>').hide().appendTo("body");EREACTOR.UTILS.openModal=function(d,c,e){new Ajax.Request(d,{method:"get",onSuccess:function(d){var f=b.height(a("html").height()).show().find(".ereactor_modal_wrapper").html(d.responseText).children();c&&c(f);a(".save, .cancel",f).click(function(){a(this).is(".save")&&e&&e(f);b.hide();return!1})}});return!1}})})(jQuery);
js/ereactor_slider/jquery-1.9.1.min.js ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ /*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license
2
+ //@ sourceMappingURL=jquery.min.map
3
+ */(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;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 b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.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(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.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?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.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||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},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:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.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 f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.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?b.extend(e,r):r}},i={};return r.pipe=r.then,b.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=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.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],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.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;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[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%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.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&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,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 b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.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=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.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,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._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(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.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 n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},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}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[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),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=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));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,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]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),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=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),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=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=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 b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):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,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.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))},b.Event=function(e,n){return this instanceof b.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&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.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()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;
4
+ return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._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 b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.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 b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.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,b(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(){b.event.remove(this,e,r,n)})},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)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?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},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-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 u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(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?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(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]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===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]||st.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]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.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,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!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[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[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]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[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[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(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:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.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:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(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 mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&&gt(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.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?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(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(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.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,Nt=/^(?:checkbox|radio)$/i,Ct=/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:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(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 b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.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 b.clone(this,e,t)})},html:function(e){return b.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)||!b.support.htmlSerialize&&mt.test(e)||!b.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&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._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++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.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)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(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||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l)
5
+ }b.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),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(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,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});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("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","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"===b.css(e,"display")||!b.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]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.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}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.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,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],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||b.isNumeric(o)?o||0:a):a},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}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});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+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.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=b.support.boxSizing&&"border-box"===b.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&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<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=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.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,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.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=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.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)||(b.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;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.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(b.isArray(t))b.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"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.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){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.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(w)||[];if(b.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(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.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"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.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,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){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===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.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=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],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=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.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&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.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)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.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 On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=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 u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.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,On.push(o)),s&&b.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){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.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,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.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,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.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||(b.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?b.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=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.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)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.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=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._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=b.timers,a=b._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)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),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}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.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,b.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},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.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?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.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?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window);
6
+
7
+ jQuery.noConflict();
js/ereactor_slider/jquery.nivo-slider.js ADDED
@@ -0,0 +1,707 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery Nivo Slider v3.2
3
+ * http://nivo.dev7studios.com
4
+ *
5
+ * Copyright 2012, Dev7studios
6
+ * Free to use and abuse under the MIT license.
7
+ * http://www.opensource.org/licenses/mit-license.php
8
+ *
9
+ * Modified by E-reactor
10
+ */
11
+
12
+ (function($) {
13
+ "use strict";
14
+ var NivoSlider = function(element, options){
15
+ // Defaults are below
16
+ var settings = $.extend({}, $.fn.nivoSlider.defaults, options);
17
+
18
+ // Useful variables. Play carefully.
19
+ var vars = {
20
+ currentSlide: 0,
21
+ previousSlide: false,
22
+ currentImage: '',
23
+ totalSlides: 0,
24
+ running: false,
25
+ paused: false,
26
+ stop: false,
27
+ controlNavEl: false
28
+ };
29
+
30
+ // Get this slider
31
+ var slider = $(element);
32
+ slider.data('nivo:vars', vars).addClass('nivoSlider');
33
+
34
+ // Find our slider children
35
+ var kids = slider.children();
36
+ kids.each(function() {
37
+ var child = $(this).hide();
38
+ var link = '';
39
+ if(child.is('a')){
40
+ child.addClass('nivo-imageLink');
41
+ link = child;
42
+ child = child.find('img:first');
43
+ }
44
+ // Get img width & height
45
+ //var childWidth = (childWidth === 0) ? child.attr('width') : child.width(),
46
+ // childHeight = (childHeight === 0) ? child.attr('height') : child.height();
47
+
48
+ /*if(link !== ''){
49
+ link.css('display','none');
50
+ }*/
51
+ ++vars.totalSlides;
52
+ });
53
+ $( kids[0] ).show();
54
+
55
+ // If randomStart
56
+ if(settings.randomStart){
57
+ settings.startSlide = Math.floor(Math.random() * vars.totalSlides);
58
+ }
59
+
60
+ // Set startSlide
61
+ if(settings.startSlide > 0){
62
+ if(settings.startSlide >= vars.totalSlides) { settings.startSlide = vars.totalSlides - 1; }
63
+ vars.currentSlide = settings.startSlide;
64
+ }
65
+
66
+ // Get initial image
67
+ if($(kids[vars.currentSlide]).is('img')){
68
+ vars.currentImage = $(kids[vars.currentSlide]);
69
+ } else {
70
+ vars.currentImage = $(kids[vars.currentSlide]).find('img:first');
71
+ }
72
+
73
+ // Show initial link
74
+ if($(kids[vars.currentSlide]).is('a')){
75
+ $(kids[vars.currentSlide]).css('display','block');
76
+ }
77
+
78
+ // Set first background
79
+ var sliderImg = $('<img/>').addClass('nivo-main-image');
80
+ sliderImg.attr('src', vars.currentImage.attr('src')).show();
81
+ slider.append(sliderImg);
82
+
83
+ // Detect Window Resize
84
+ $(window).resize(function() {
85
+ slider.children('img').width(slider.width());
86
+ sliderImg.attr('src', vars.currentImage.attr('src'));
87
+ sliderImg.stop().height('auto');
88
+ $('.nivo-slice').remove();
89
+ $('.nivo-box').remove();
90
+ });
91
+
92
+ //Create caption
93
+ slider.append($('<div class="nivo-caption"></div>'));
94
+
95
+ // Process caption function
96
+ var processCaption = function(settings){
97
+ var nivoCaption = $('.nivo-caption', slider);
98
+ var $currentSlide = $(kids[vars.currentSlide]);
99
+ if($currentSlide.attr('title') !== '' && $currentSlide.attr('title') !== undefined){
100
+ var title = $currentSlide.attr('title');
101
+ if( title.substr(0,1) === '#' ) {
102
+ title = $(title).html();
103
+ }
104
+ if(nivoCaption.css('display') === 'block'){
105
+ setTimeout(function(){
106
+ nivoCaption.html(title);
107
+ }, settings.animSpeed);
108
+ } else {
109
+ nivoCaption.html(title);
110
+ nivoCaption.stop().fadeIn(settings.animSpeed);
111
+ }
112
+ } else {
113
+ nivoCaption.stop().fadeOut(settings.animSpeed);
114
+ }
115
+ };
116
+
117
+ //Process initial caption
118
+ processCaption(settings);
119
+
120
+ // In the words of Super Mario "let's a go!"
121
+ var timer = 0;
122
+ if(!settings.manualAdvance && kids.length > 1){
123
+ timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
124
+ }
125
+
126
+ // Add Direction nav
127
+ if(settings.directionNav){
128
+ slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+ settings.prevText +'</a><a class="nivo-nextNav">'+ settings.nextText +'</a></div>');
129
+
130
+ $(slider).on('click', 'a.nivo-prevNav', function(){
131
+ if(vars.running) { return false; }
132
+ clearInterval(timer);
133
+ timer = '';
134
+ vars.previousSlide = vars.currentSlide--;
135
+ nivoRun(slider, kids, settings, 'prev');
136
+ });
137
+
138
+ $(slider).on('click', 'a.nivo-nextNav', function(){
139
+ if(vars.running) { return false; }
140
+ clearInterval(timer);
141
+ timer = '';
142
+ vars.previousSlide = vars.currentSlide++;
143
+ nivoRun(slider, kids, settings, 'next');
144
+ });
145
+ }
146
+
147
+ // Add Control nav
148
+ if(settings.controlNav){
149
+ vars.controlNavEl = $('<div class="nivo-controlNav"></div>');
150
+ if( settings.controlNavClass !== false ) {
151
+ vars.controlNavEl.addClass( settings.controlNavClass );
152
+ }
153
+ slider.after(vars.controlNavEl);
154
+ for(var i = 0; i < kids.length; i++){
155
+ if(settings.controlNavThumbs){
156
+ vars.controlNavEl.addClass('nivo-thumbs-enabled');
157
+ var child = kids.eq(i);
158
+ if(!child.is('img')){
159
+ child = child.find('img:first');
160
+ }
161
+ if(child.attr('data-thumb')) vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'"><img src="'+ child.attr('data-thumb') +'" alt="" /></a>');
162
+ } else {
163
+ vars.controlNavEl.append('<a class="nivo-control" rel="'+ i +'">'+ (i + 1) +'</a>');
164
+ }
165
+ }
166
+
167
+ //Set initial active link
168
+ $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
169
+
170
+ $('a', vars.controlNavEl).bind('click', function(){
171
+ if(vars.running) return false;
172
+ if($(this).hasClass('active')) return false;
173
+ clearInterval(timer);
174
+ timer = '';
175
+ sliderImg.attr('src', vars.currentImage.attr('src'));
176
+ vars.previousSlide = vars.currentSlide;
177
+ vars.currentSlide = $(this).attr('rel');
178
+ nivoRun(slider, kids, settings, 'control');
179
+ });
180
+ }
181
+
182
+ // Pause / Resume
183
+ this.pause = function() {
184
+ vars.paused = true;
185
+ clearInterval(timer);
186
+ timer = '';
187
+ };
188
+
189
+ this.resume = function() {
190
+ vars.paused = false;
191
+ // Restart the timer
192
+ if(timer === '' && !settings.manualAdvance){
193
+ timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
194
+ }
195
+ };
196
+
197
+ this.setPauseOnHover = function(pauseOnHover) {
198
+ if( settings.pauseOnHover === pauseOnHover ) {
199
+ return;
200
+ }
201
+ if( pauseOnHover ) {
202
+ slider.hover( this.pause, this.resume );
203
+ } else {
204
+ slider.off( { 'mouseenter' : this.pause, 'mouseleave' : this.resume } );
205
+ }
206
+ settings.pauseOnHover = pauseOnHover;
207
+ };
208
+
209
+ //For pauseOnHover setting
210
+ if(settings.pauseOnHover){
211
+ slider.hover(this.pause, this.resume);
212
+ }
213
+
214
+ // Event when Animation finishes
215
+ slider.bind('nivo:animFinished', function(){
216
+ sliderImg.attr('src', vars.currentImage.attr('src'));
217
+ vars.running = false;
218
+ // Hide child links
219
+ /*$(kids).each(function(){
220
+ if($(this).is('a')){
221
+ $(this).css('display','none');
222
+ }
223
+ });*/
224
+ // Show current link
225
+ /*if($(kids[vars.currentSlide]).is('a')){
226
+ $(kids[vars.currentSlide]).css('display','block');
227
+ }*/
228
+ if(vars.previousSlide !== false ) {
229
+ $( kids[vars.previousSlide] ).hide();
230
+ }
231
+ $( kids[vars.currentSlide] ).show();
232
+
233
+ // Remove any slices from last transition
234
+ $('.nivo-slice', slider).remove();
235
+
236
+ // Remove any boxes from last transition
237
+ $('.nivo-box', slider).remove();
238
+
239
+ // Restart the timer
240
+ if(timer === '' && !vars.paused && !settings.manualAdvance){
241
+ timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime);
242
+ }
243
+ // Trigger the afterChange callback
244
+ settings.afterChange.call(this);
245
+ });
246
+
247
+ // Add slices for slice animations
248
+ var createSlices = function(slider, settings, vars) {
249
+ //if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
250
+ //$('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
251
+ var sliceHeight = ($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().is('a')) ? $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().height() : $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height();
252
+
253
+ for(var i = 0; i < settings.slices; i++){
254
+ var sliceWidth = Math.round(slider.width()/settings.slices);
255
+
256
+ if(i === settings.slices-1){
257
+ slider.append(
258
+ $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({
259
+ left:(sliceWidth*i)+'px',
260
+ width:(slider.width()-(sliceWidth*i))+'px',
261
+ height:sliceHeight+'px',
262
+ opacity:'0',
263
+ overflow:'hidden'
264
+ })
265
+ );
266
+ } else {
267
+ slider.append(
268
+ $('<div class="nivo-slice" name="'+i+'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block !important; top:0; left:-'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px;" /></div>').css({
269
+ left:(sliceWidth*i)+'px',
270
+ width:sliceWidth+'px',
271
+ height:sliceHeight+'px',
272
+ opacity:'0',
273
+ overflow:'hidden'
274
+ })
275
+ );
276
+ }
277
+ }
278
+
279
+ $('.nivo-slice', slider).height(sliceHeight);
280
+ sliderImg.stop().animate({
281
+ height: $(vars.currentImage).height()
282
+ }, settings.animSpeed);
283
+ };
284
+
285
+ // Add boxes for box animations
286
+ var createBoxes = function(slider, settings, vars){
287
+ //if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block');
288
+ //$('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show();
289
+ var boxWidth = Math.round(slider.width()/settings.boxCols),
290
+ boxHeight = Math.round($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height() / settings.boxRows);
291
+
292
+
293
+ for(var rows = 0; rows < settings.boxRows; rows++){
294
+ for(var cols = 0; cols < settings.boxCols; cols++){
295
+ if(cols === settings.boxCols-1){
296
+ slider.append(
297
+ $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({
298
+ opacity:0,
299
+ left:(boxWidth*cols)+'px',
300
+ top:(boxHeight*rows)+'px',
301
+ width:(slider.width()-(boxWidth*cols))+'px'
302
+
303
+ })
304
+ );
305
+ $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
306
+ } else {
307
+ slider.append(
308
+ $('<div class="nivo-box" name="'+ cols +'" rel="'+ rows +'"><img src="'+ vars.currentImage.attr('src') +'" style="position:absolute; width:'+ slider.width() +'px; height:auto; display:block; top:-'+ (boxHeight*rows) +'px; left:-'+ (boxWidth*cols) +'px;" /></div>').css({
309
+ opacity:0,
310
+ left:(boxWidth*cols)+'px',
311
+ top:(boxHeight*rows)+'px',
312
+ width:boxWidth+'px'
313
+ })
314
+ );
315
+ $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px');
316
+ }
317
+ }
318
+ }
319
+
320
+ sliderImg.stop().animate({
321
+ height: $(vars.currentImage).height()
322
+ }, settings.animSpeed);
323
+ };
324
+
325
+ // Private run method
326
+ var nivoRun = function(slider, kids, settings, nudge){
327
+ // Get our vars
328
+ var vars = slider.data('nivo:vars'),
329
+ $currentSlide;
330
+
331
+ // Trigger the lastSlide callback
332
+ if(vars && (vars.currentSlide === vars.totalSlides - 1)){
333
+ settings.lastSlide.call(this);
334
+ }
335
+
336
+ // Stop
337
+ if((!vars || vars.stop) && !nudge) { return false; }
338
+
339
+ // Trigger the beforeChange callback
340
+ settings.beforeChange.call(this);
341
+
342
+ // Set current background before change
343
+ if(!nudge){
344
+ sliderImg.attr('src', vars.currentImage.attr('src'));
345
+ } else {
346
+ if(nudge === 'prev'){
347
+ sliderImg.attr('src', vars.currentImage.attr('src'));
348
+ }
349
+ if(nudge === 'next'){
350
+ sliderImg.attr('src', vars.currentImage.attr('src'));
351
+ }
352
+ }
353
+
354
+ if( ! nudge ) {
355
+ vars.previousSlide = vars.currentSlide;
356
+ vars.currentSlide++;
357
+ }
358
+ // Trigger the slideshowEnd callback
359
+ if(vars.currentSlide === vars.totalSlides){
360
+ vars.currentSlide = 0;
361
+ settings.slideshowEnd.call(this);
362
+ }
363
+ if(vars.currentSlide < 0) { vars.currentSlide = (vars.totalSlides - 1); }
364
+
365
+ $currentSlide = $(kids[vars.currentSlide]);
366
+
367
+ // Set vars.currentImage
368
+ if($currentSlide.is('img')){
369
+ vars.currentImage = $currentSlide;
370
+ } else {
371
+ vars.currentImage = $currentSlide.find('img:first');
372
+ }
373
+
374
+ // Set active links
375
+ if(settings.controlNav){
376
+ $('a', vars.controlNavEl).removeClass('active');
377
+ $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active');
378
+ }
379
+
380
+ // Process caption
381
+ processCaption(settings);
382
+
383
+ var currentEffect = settings.effect,
384
+ anims = '';
385
+
386
+ // Generate random effect
387
+ if(settings.effect === 'random'){
388
+ anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade',
389
+ 'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');
390
+ currentEffect = anims[Math.floor(Math.random()*(anims.length + 1))];
391
+ if(currentEffect === undefined) { currentEffect = 'fade'; }
392
+ }
393
+
394
+ // Run random effect from specified set (eg: effect:'fold,fade')
395
+ if(settings.effect.indexOf(',') !== -1){
396
+ anims = settings.effect.split(',');
397
+ currentEffect = anims[Math.floor(Math.random()*(anims.length))];
398
+ if(currentEffect === undefined) { currentEffect = 'fade'; }
399
+ }
400
+
401
+ // Custom transition as defined by "data-transition" attribute
402
+ if(vars.currentImage.attr('data-transition')){
403
+ currentEffect = vars.currentImage.attr('data-transition');
404
+ }
405
+
406
+ // For HTML slides we can only have sliding or fading as an effect
407
+ if($currentSlide.is('div') && currentEffect != 'fade' && currentEffect.indexOf('slideIn') !== 0) {
408
+ currentEffect = 'fade';
409
+ }
410
+
411
+ // Run effects
412
+ vars.running = true;
413
+ var timeBuff = 0,
414
+ i = 0,
415
+ slices = '',
416
+ firstSlice = '',
417
+ totalBoxes = '',
418
+ boxes = '';
419
+
420
+ if(currentEffect === 'sliceDown' || currentEffect === 'sliceDownRight' || currentEffect === 'sliceDownLeft'){
421
+ createSlices(slider, settings, vars);
422
+ timeBuff = 0;
423
+ i = 0;
424
+ slices = $('.nivo-slice', slider);
425
+ if(currentEffect === 'sliceDownLeft') { slices = $('.nivo-slice', slider).reverse(); }
426
+
427
+ slices.each(function(){
428
+ var slice = $(this);
429
+ slice.css({ 'top': '0px' });
430
+ if(i === settings.slices-1){
431
+ setTimeout(function(){
432
+ slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
433
+ }, (100 + timeBuff));
434
+ } else {
435
+ setTimeout(function(){
436
+ slice.animate({opacity:'1.0' }, settings.animSpeed);
437
+ }, (100 + timeBuff));
438
+ }
439
+ timeBuff += 50;
440
+ i++;
441
+ });
442
+ } else if(currentEffect === 'sliceUp' || currentEffect === 'sliceUpRight' || currentEffect === 'sliceUpLeft'){
443
+ createSlices(slider, settings, vars);
444
+ timeBuff = 0;
445
+ i = 0;
446
+ slices = $('.nivo-slice', slider);
447
+ if(currentEffect === 'sliceUpLeft') { slices = $('.nivo-slice', slider).reverse(); }
448
+
449
+ slices.each(function(){
450
+ var slice = $(this);
451
+ slice.css({ 'bottom': '0px' });
452
+ if(i === settings.slices-1){
453
+ setTimeout(function(){
454
+ slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
455
+ }, (100 + timeBuff));
456
+ } else {
457
+ setTimeout(function(){
458
+ slice.animate({opacity:'1.0' }, settings.animSpeed);
459
+ }, (100 + timeBuff));
460
+ }
461
+ timeBuff += 50;
462
+ i++;
463
+ });
464
+ } else if(currentEffect === 'sliceUpDown' || currentEffect === 'sliceUpDownRight' || currentEffect === 'sliceUpDownLeft'){
465
+ createSlices(slider, settings, vars);
466
+ timeBuff = 0;
467
+ i = 0;
468
+ var v = 0;
469
+ slices = $('.nivo-slice', slider);
470
+ if(currentEffect === 'sliceUpDownLeft') { slices = $('.nivo-slice', slider).reverse(); }
471
+
472
+ slices.each(function(){
473
+ var slice = $(this);
474
+ if(i === 0){
475
+ slice.css('top','0px');
476
+ i++;
477
+ } else {
478
+ slice.css('bottom','0px');
479
+ i = 0;
480
+ }
481
+
482
+ if(v === settings.slices-1){
483
+ setTimeout(function(){
484
+ slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
485
+ }, (100 + timeBuff));
486
+ } else {
487
+ setTimeout(function(){
488
+ slice.animate({opacity:'1.0' }, settings.animSpeed);
489
+ }, (100 + timeBuff));
490
+ }
491
+ timeBuff += 50;
492
+ v++;
493
+ });
494
+ } else if(currentEffect === 'fold'){
495
+ createSlices(slider, settings, vars);
496
+ timeBuff = 0;
497
+ i = 0;
498
+
499
+ $('.nivo-slice', slider).each(function(){
500
+ var slice = $(this);
501
+ var origWidth = slice.width();
502
+ slice.css({ top:'0px', width:'0px' });
503
+ if(i === settings.slices-1){
504
+ setTimeout(function(){
505
+ slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
506
+ }, (100 + timeBuff));
507
+ } else {
508
+ setTimeout(function(){
509
+ slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed);
510
+ }, (100 + timeBuff));
511
+ }
512
+ timeBuff += 50;
513
+ i++;
514
+ });
515
+ } else if(currentEffect === 'fade') {
516
+ $currentSlide.show().css( 'z-index', 50 ).css( 'opacity', '0.0' )
517
+ .animate( { opacity: '1.0' }, (settings.animSpeed*2), '', function() {
518
+ $currentSlide.css('z-index', '');
519
+ slider.trigger('nivo:animFinished');
520
+ });
521
+ } else if( currentEffect.indexOf('slideIn') === 0 ) {
522
+ var direction = 'left',
523
+ sign = '',
524
+ animation = {};
525
+
526
+ switch( currentEffect ) {
527
+ case 'slideInLeft' :
528
+ break;
529
+ case 'slideInRight' :
530
+ sign = '-';
531
+ break;
532
+ case 'slideInTop' :
533
+ direction = 'top';
534
+ sign = '-';
535
+ break;
536
+ case 'slideInBottom' :
537
+ direction = 'top';
538
+ break;
539
+ }
540
+ animation[direction] = 0;
541
+ $currentSlide.show().css( 'z-index', 50 ).css( direction, sign + '100%' )
542
+ .animate( animation, (settings.animSpeed*2), '', function() {
543
+ $currentSlide.css('z-index', '');
544
+ slider.trigger('nivo:animFinished');
545
+ });
546
+ } else if(currentEffect === 'boxRandom'){
547
+ createBoxes(slider, settings, vars);
548
+
549
+ totalBoxes = settings.boxCols * settings.boxRows;
550
+ i = 0;
551
+ timeBuff = 0;
552
+
553
+ boxes = shuffle($('.nivo-box', slider));
554
+ boxes.each(function(){
555
+ var box = $(this);
556
+ if(i === totalBoxes-1){
557
+ setTimeout(function(){
558
+ box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); });
559
+ }, (100 + timeBuff));
560
+ } else {
561
+ setTimeout(function(){
562
+ box.animate({ opacity:'1' }, settings.animSpeed);
563
+ }, (100 + timeBuff));
564
+ }
565
+ timeBuff += 20;
566
+ i++;
567
+ });
568
+ } else if(currentEffect === 'boxRain' || currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
569
+ createBoxes(slider, settings, vars);
570
+
571
+ totalBoxes = settings.boxCols * settings.boxRows;
572
+ i = 0;
573
+ timeBuff = 0;
574
+
575
+ // Split boxes into 2D array
576
+ var rowIndex = 0;
577
+ var colIndex = 0;
578
+ var box2Darr = [];
579
+ box2Darr[rowIndex] = [];
580
+ boxes = $('.nivo-box', slider);
581
+ if(currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrowReverse'){
582
+ boxes = $('.nivo-box', slider).reverse();
583
+ }
584
+ boxes.each(function(){
585
+ box2Darr[rowIndex][colIndex] = $(this);
586
+ colIndex++;
587
+ if(colIndex === settings.boxCols){
588
+ rowIndex++;
589
+ colIndex = 0;
590
+ box2Darr[rowIndex] = [];
591
+ }
592
+ });
593
+
594
+ // Run animation
595
+ for(var cols = 0; cols < (settings.boxCols * 2); cols++){
596
+ var prevCol = cols;
597
+ for(var rows = 0; rows < settings.boxRows; rows++){
598
+ if(prevCol >= 0 && prevCol < settings.boxCols){
599
+ /* Due to some weird JS bug with loop vars
600
+ being used in setTimeout, this is wrapped
601
+ with an anonymous function call */
602
+ (function(row, col, time, i, totalBoxes) {
603
+ var box = $(box2Darr[row][col]);
604
+ var w = box.width();
605
+ var h = box.height();
606
+ if(currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){
607
+ box.width(0).height(0);
608
+ }
609
+ if(i === totalBoxes-1){
610
+ setTimeout(function(){
611
+ box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); });
612
+ }, (100 + time));
613
+ } else {
614
+ setTimeout(function(){
615
+ box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3);
616
+ }, (100 + time));
617
+ }
618
+ })(rows, prevCol, timeBuff, i, totalBoxes);
619
+ i++;
620
+ }
621
+ prevCol--;
622
+ }
623
+ timeBuff += 100;
624
+ }
625
+ }
626
+ };
627
+
628
+ // Shuffle an array
629
+ var shuffle = function(arr){
630
+ for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i, 10), x = arr[--i], arr[i] = arr[j], arr[j] = x) {}
631
+ return arr;
632
+ };
633
+
634
+ // For debugging
635
+ var trace = function(msg){
636
+ if(this.console && typeof console.log !== 'undefined') { console.log(msg); }
637
+ };
638
+
639
+ // Start / Stop
640
+ this.stop = function(){
641
+ if(!$(element).data('nivo:vars').stop){
642
+ $(element).data('nivo:vars').stop = true;
643
+ trace('Stop Slider');
644
+ }
645
+ };
646
+
647
+ this.start = function(){
648
+ if($(element).data('nivo:vars').stop){
649
+ $(element).data('nivo:vars').stop = false;
650
+ trace('Start Slider');
651
+ }
652
+ };
653
+
654
+ this.options = function(opt) {
655
+ $.extend(settings, opt);
656
+ this.pause();
657
+ this.resume();
658
+ };
659
+
660
+ // Trigger the afterLoad callback
661
+ settings.afterLoad.call(this);
662
+
663
+ return this;
664
+ };
665
+
666
+ $.fn.nivoSlider = function(options) {
667
+ return this.each(function(key, value){
668
+ var element = $(this);
669
+ // Return early if this element already has a plugin instance
670
+ if (element.data('nivoslider')) { return element.data('nivoslider'); }
671
+ // Pass options to plugin constructor
672
+ var nivoslider = new NivoSlider(this, options);
673
+ // Store plugin object in this element's data
674
+ element.data('nivoslider', nivoslider);
675
+ });
676
+ };
677
+
678
+ //Default settings
679
+ $.fn.nivoSlider.defaults = {
680
+ effect: 'random',
681
+ slices: 15,
682
+ boxCols: 8,
683
+ boxRows: 4,
684
+ animSpeed: 500,
685
+ pauseTime: 3000,
686
+ startSlide: 0,
687
+ directionNav: true,
688
+ controlNav: true,
689
+ controlNavThumbs: false,
690
+ controlNavClass : false,
691
+ pauseOnHover: true,
692
+ manualAdvance: false,
693
+ prevText: 'Prev',
694
+ nextText: 'Next',
695
+ randomStart: false,
696
+ beforeChange: function(){},
697
+ afterChange: function(){},
698
+ slideshowEnd: function(){},
699
+ lastSlide: function(){},
700
+ afterLoad: function(){}
701
+ };
702
+
703
+ $.fn.reverse = function() {
704
+ return this.pushStack(this.get().reverse(), arguments);
705
+ };
706
+
707
+ }(jQuery));
media/ereactor_slider/.thumbs/ereactor_slider/batch/nemo.jpg ADDED
Binary file
media/ereactor_slider/.thumbs/ereactor_slider/batch/up.jpg ADDED
Binary file
media/ereactor_slider/.thumbs/ereactor_slider/black-small.gif ADDED
Binary file
media/ereactor_slider/.thumbs/ereactor_slider/grey-small.gif ADDED
Binary file
media/ereactor_slider/.thumbs/ereactor_slider/nemo.jpg ADDED
Binary file
media/ereactor_slider/.thumbs/ereactor_slider/orange-small.gif ADDED
Binary file
media/ereactor_slider/.thumbs/ereactor_slider/toystory-small.jpg ADDED
Binary file
media/ereactor_slider/.thumbs/ereactor_slider/toystory.jpg ADDED
Binary file
media/ereactor_slider/.thumbs/ereactor_slider/up.jpg ADDED
Binary file
media/ereactor_slider/.thumbs/ereactor_slider/walle-small.jpg ADDED
Binary file
media/ereactor_slider/.thumbs/ereactor_slider/walle.jpg ADDED
Binary file
media/ereactor_slider/.thumbs/ereactor_slider/white-small.gif ADDED
Binary file
media/ereactor_slider/black-small.gif ADDED
Binary file
media/ereactor_slider/grey-small.gif ADDED
Binary file
media/ereactor_slider/orange-small.gif ADDED
Binary file
media/ereactor_slider/white-small.gif ADDED
Binary file
media/wysiwyg/sample-slideshow/coffeecup.jpg ADDED
Binary file
media/wysiwyg/sample-slideshow/lock.jpg ADDED
Binary file
media/wysiwyg/sample-slideshow/womanonbeach.jpg ADDED
Binary file
package.xml ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Ereactor_Slider</name>
4
+ <version>1.0.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/GPL-3.0">GPL</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Create a slideshow featuring Images or HTML and display it as a widget anywhere in your store.</summary>
10
+ <description>This extension allows you to create slideshows featuring image banners (promotional campaigns, for example), or custom HTML code. Since the slideshows are widgets, you can place them anywhere on your site - in static blocks, CMS pages or other areas in your template.&#xD;
11
+ &#xD;
12
+ Features&#xD;
13
+ - Customize the dimensions and handling of your slideshow&#xD;
14
+ - Choose from a large number of slide transitions&#xD;
15
+ - 2 kinds of slides (image and HTML) that can used together in the same slideshow&#xD;
16
+ - You can write captions for your slides, and the images can be assigned links&#xD;
17
+ - Rich administration panel - easy to configure and use&#xD;
18
+ - You can preview your slides as you are building them&#xD;
19
+ - Create many slides at a time from a folder of images&#xD;
20
+ &#xD;
21
+ Product slides&#xD;
22
+ We also provide a Pro version of e-reactor Slider that can create slides featuring products from your store. Please refer to the following link for more information: http://www.magentocommerce.com/magento-connect/catalog/product/view/id/18754/&#xD;
23
+ &#xD;
24
+ Demo site&#xD;
25
+ You can see various examples of our slideshow in action on this page:&#xD;
26
+ http://shop.e-reactor.dk/demo-ereactor-slider&#xD;
27
+ &#xD;
28
+ How to activate&#xD;
29
+ After e-reactor Slider is installed, it needs to be activated by providing a valid license key. Without a valid license key, you can still access the extension, but you will not be able to save any slides. You are entitled to 2 license keys - one for a production server and one for a development server. You can access these keys by registering on our site, http://shop.e-reactor.dk . After you register, navigate to "My Account" and then to "My License Keys". You can follow the instructions on that page to generate license keys for specific domains. The license key must be entered in the Configuration area of the Magento Admin panel, under the "e-reactor Slider options" tab.&#xD;
30
+ &#xD;
31
+ Customer support&#xD;
32
+ We will do our best to answer your questions, fix any problems you may encounter and make your experience with our software as productive as possible.&#xD;
33
+ We take suggestions and feature requests very seriously and will try to fulfill them as well as we can.</description>
34
+ <notes>e-reactor Slider</notes>
35
+ <authors><author><name>Mihai Andrei Livadariu</name><user>alivadariu</user><email>livadariu.andrei@gmail.com</email></author></authors>
36
+ <date>2013-08-09</date>
37
+ <time>09:22:23</time>
38
+ <contents><target name="magecommunity"><dir name="Ereactor"><dir name="Slider"><dir name="Block"><dir name="Adminhtml"><dir name="Slide"><dir name="Batch"><file name="Images.php" hash="628a5e67a0f28ed0b40eb86e009bc0ff"/></dir><file name="Batch.php" hash="cdb06d55c7ff0f80fb2b29cbc84a030a"/><file name="Grid.php" hash="3daa8238df20e04abded6a987509f348"/><file name="Preview.php" hash="f429d3957a2fe65f37d234cf16b48ef0"/><file name="Quickadd.php" hash="565e01ba22e82ac6ee15e09153225e59"/></dir><dir name="Slideshow"><dir name="Edit"><file name="Form.php" hash="e365b6f864b670f3d0f0a79e4fb655c0"/><dir name="Tab"><file name="General.php" hash="188b3a27e639920a8dc9d0c6830a3a9c"/><file name="Slides.php" hash="656bdd13ef255e23b440ae4003fc9590"/></dir><file name="Tabs.php" hash="0e93a65ad09bcc7cb7249e941b951988"/></dir><file name="Edit.php" hash="78275684a0cf8d307b9abf3111bcc083"/><file name="Grid.php" hash="8fdd5c62a948fd854c122babdd26e826"/><file name="Preview.php" hash="4c2d44f83322ba26db6c2474d9c55cb2"/></dir><file name="Slideshow.php" hash="c29b7b54d856e229983de15bafe18bd5"/><dir name="Widget"><dir name="Grid"><dir name="Column"><dir name="Renderer"><file name="Slideaction.php" hash="44830761b6f34475b15532105715ef2f"/></dir></dir></dir></dir></dir><file name="Slide.php" hash="314ee1cd06a9ee67fe328607d9d66042"/><file name="Slider.php" hash="89a0f782ffe96bc47f37fa5f0d60855d"/></dir><dir name="Helper"><file name="Admin.php" hash="60c8c0cb889a732b6ef49b70b5dd4914"/><file name="Data.php" hash="a02c1c9ce9900e29839688211155253c"/></dir><dir name="Model"><dir name="Resource"><dir name="Slide"><file name="Collection.php" hash="65e22f25d4ba263931b0e03cccd2bc0a"/></dir><file name="Slide.php" hash="6c31a1d51f1752dfaa050273690a1d27"/><dir name="Slideshow"><file name="Collection.php" hash="c52a9c027d0593b621288e8352c56602"/></dir><file name="Slideshow.php" hash="00e5c73bb01359b6fa698a7389b8e9db"/></dir><file name="Slide.php" hash="0f564b3ac27a46c9addb7ab56209d1d7"/><file name="Slide_src.php" hash="20d7eaa28e799d326bf18ee993e3f17c"/><file name="Slideshow.php" hash="70ae21f6cdbf719efdc3640888f1d1f6"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Ereactor"><dir name="Slider"><file name="ImagesController.php" hash="67468bcd41017f24a6b3e85a4f337091"/><file name="SlideController.php" hash="55ca25987cf7a7f0b03a854aeec2a935"/></dir><file name="SliderController.php" hash="91d8606e478e8ae29d4128af6ae3f804"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="a35b6de42e520017ffe6f1cd46fd94ff"/><file name="config.xml" hash="5e04cb6da109100c389b4b75f34b4bbf"/><file name="system.xml" hash="18c8d5ff57033e27e3b1dfa78b2be52f"/><file name="widget.xml" hash="b44ad80e2a81f717091e7eea812cc929"/></dir><dir name="sql"><dir name="ereactor_slider_setup"><file name="install-1.0.0.php" hash="1b87dbdbfecad9517935cf655b9f1a04"/></dir></dir></dir></dir></target><target name="magelocale"><dir><dir name="en_US"><file name="Ereactor_Slider.csv" hash="535d0dff1f174d6f54e780dcb1137772"/></dir></dir></target><target name="mage"><dir name="js"><dir name="ereactor_slider"><dir name="adminhtml"><file name="edit-slideshow.js" hash="a70a77fb7b64a78be06e11472cb291c7"/><file name="edit-slideshow.min.js" hash="ce1f83a82811f09c5ce52f3b9e2731aa"/></dir><file name="jquery-1.9.1.min.js" hash="ceb631805d088bb6c25d61fa5d268191"/><file name="jquery.nivo-slider.js" hash="a657b2c19b33cf5794538405239c22a7"/></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="ereactor_slider"><file name="style.css" hash="541e372dc913201e4df2006179c2997e"/><file name="style.min.css" hash="fd63d8953ecafa9450b9a03cface69c5"/></dir><dir name="images"><dir name="ereactor_slider"><file name="slide_html.png" hash="1be259256203d4b7cb29f87c076d8f4b"/><file name="slide_image.png" hash="e630b1ec4ebbd84255a58445db0e8bb2"/><file name="slide_imagetext.png" hash="fb8e32307d4260dc5dbf45d2e7fb47b2"/><file name="slide_product.png" hash="775561053f2e0b75d5e208d84345f27b"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="ereactor_slider"><file name="default.css" hash="b41ea5c137c934dd0c3a3dbe438a261e"/><file name="nivo-slider.css" hash="65462bb9a083de8655490190bf0b58b3"/></dir></dir><dir name="images"><dir name="ereactor_slider"><file name="arrows.png" hash="09b24f1a73b9eeb5cc62db7ec0b60bca"/><file name="bullets.png" hash="acc66fce35a54d815a3aa3fd573cdd90"/><file name="loading.gif" hash="dd6b7b0bf5c3af22499abc0a9ee1e1b2"/></dir></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="ereactor_slider.xml" hash="b2931cab283884fc21ee4d35891cfca3"/></dir><dir name="template"><dir name="ereactor"><dir name="slider"><dir name="slide"><file name="batch.phtml" hash="a93c7573427cbe42b264b61931ec096d"/><file name="preview.phtml" hash="36713057599598eff7a070821165eac7"/></dir><dir name="slideshow"><file name="preview.phtml" hash="a82086c91ff63984808947f20b6c363b"/></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="ereactor"><dir name="slider"><dir name="slide"><file name="html.phtml" hash="f89763f60f16d58e9955101359cfd20e"/><file name="image.phtml" hash="735c6a446ab8a50e54a71d1825f40e97"/></dir><file name="slideshow.phtml" hash="339d1ec638207219fdfb76b8e7cbf6a1"/></dir></dir></dir></dir></dir></dir></target><target name="magemedia"><dir name="ereactor_slider"><file name="black-small.gif" hash="fef4971f84692bc86c4ce86f12496349"/><file name="grey-small.gif" hash="115df342e4c6c3945a84482c35125f9b"/><file name="orange-small.gif" hash="fafc52983d8a3400a70cb1761f187b04"/><file name="white-small.gif" hash="471adc4a276ba05cbe4c7ae9aac94e58"/><dir name=".thumbs"><dir name="ereactor_slider"><dir name="batch"><file name="nemo.jpg" hash="0113c613da1d19ce78033fd15fd0dd7c"/><file name="up.jpg" hash="90a2ba5eac5f5f60eba2de06c211d88e"/></dir><file name="black-small.gif" hash="7e49115167f3cd8a8a99742dc7086886"/><file name="grey-small.gif" hash="79520ead9a4b56d612acbc619e7c2cd9"/><file name="nemo.jpg" hash="0113c613da1d19ce78033fd15fd0dd7c"/><file name="orange-small.gif" hash="7d789b1b26683d8c516833df63c8fc01"/><file name="toystory-small.jpg" hash="530ddb3e47c7c29a490722ebd3af2a8a"/><file name="toystory.jpg" hash="855e30c6168afb5ee9ae59af3a244654"/><file name="up.jpg" hash="90a2ba5eac5f5f60eba2de06c211d88e"/><file name="walle-small.jpg" hash="6078c0665b5c648921c7c7e72234b5f0"/><file name="walle.jpg" hash="c6ca6adb19dd08a51e956cd0e958eba2"/><file name="white-small.gif" hash="e960e81c886120aaf57e2145369ebf44"/></dir></dir></dir><dir name="wysiwyg"><dir name="sample-slideshow"><file name="coffeecup.jpg" hash="5f8d13f118ba674280d46fb7a1bcbc0d"/><file name="lock.jpg" hash="d44a2ace3dc88e915d0e29e3bcc7d642"/><file name="womanonbeach.jpg" hash="1c7fe28178fbf5bd7259f25ee0e8d245"/></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Ereactor_Slider.xml" hash="cd53bdd659f879bc338cfa7b66f29b8e"/></dir></target></contents>
39
+ <compatible/>
40
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.6.0.0</min><max>1.7</max></package></required></dependencies>
41
+ </package>
skin/adminhtml/base/default/ereactor_slider/style.css ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .ereactor_modal_container {
2
+ position: absolute;
3
+ top: 0;
4
+ left: 0;
5
+ width: 100%;
6
+ height: 100%;
7
+ background: rgba(0,0,0,0.6);
8
+ z-index: 300;
9
+ text-align: center;
10
+ display: table;
11
+ }
12
+
13
+ .ereactor_modal_wrapper {
14
+ display: table-cell;
15
+ vertical-align: middle;
16
+ }
17
+
18
+ .ereactor_modal_wrapper > div {
19
+ display: inline-block;
20
+ text-align: left;
21
+ }
22
+
23
+ #ereactor-slider-preview {
24
+ position: fixed;
25
+ bottom: 50%;
26
+ left: 30px;
27
+ }
28
+
29
+ .ereactor-slide-preview {
30
+ max-width: 800px;
31
+ }
32
+
33
+ .ereactor_modal_wrapper .ereactor-slide-preview {
34
+ width: 800px;
35
+ }
36
+
37
+ #ereactor-slider-preview .nivo-controlNav-hover {
38
+ margin-bottom: 10px;
39
+ }
40
+
41
+ #slideshow_quickadd_type {
42
+ display: none;
43
+ }
44
+
45
+ .ereactor-slide-type, .ereactor-slide-disabled {
46
+ display: inline-block;
47
+ border: 2px solid #3e3e3e;
48
+ width: 44px;
49
+ height: 34px;
50
+ padding: 14px 17px 0 40px;
51
+ text-transform: uppercase;
52
+ text-align: right;
53
+ margin: 0 10px 10px 0;
54
+ font-weight: bold;
55
+ cursor: pointer;
56
+ background: transparent no-repeat 4px 8px;
57
+ vertical-align: middle;
58
+ }
59
+
60
+ .ereactor-slide-disabled {
61
+ border-color: #BBB;
62
+ color: #BBB;
63
+ }
64
+
65
+ .ereactor-slide-type:hover, .ereactor-slide-type.ereactor-selected {
66
+ border-color: #ed6502;
67
+ color: #ed6502;
68
+ }
69
+
70
+ .ereactor-slide-t1 {
71
+ background-image: url(../images/ereactor_slider/slide_html.png);
72
+ padding-top: 6px;
73
+ height: 42px;
74
+ }
75
+
76
+ .ereactor-slide-t0 {
77
+ background-image: url(../images/ereactor_slider/slide_image.png);
78
+ }
79
+
80
+ .ereactor-slide-t4 {
81
+ background-image: url(../images/ereactor_slider/slide_imagetext.png);
82
+ padding-top: 6px;
83
+ height: 42px;
84
+ }
85
+
86
+ .ereactor-slide-t2 {
87
+ background-image: url(../images/ereactor_slider/slide_product.png);
88
+ }
89
+
90
+ a.form-button {
91
+ text-decoration: none;
92
+ }
93
+
94
+ a.form-button:hover {
95
+ color: #fff;
96
+ background: #f77c16;
97
+ }
98
+
99
+ button.btn-chooser {
100
+ display: inline-block;
101
+ }
102
+
103
+ #generateSlides {
104
+ margin-bottom: 15px;
105
+ }
106
+
107
+ textarea.disabled {
108
+ background: #eee;
109
+ }
110
+
111
+ #page_tabs_slides_content .form-list td.value {
112
+ width: 350px;
113
+ }
skin/adminhtml/base/default/ereactor_slider/style.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .ereactor_modal_container{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.6);z-index:300;text-align:center;display:table;}.ereactor_modal_wrapper{display:table-cell;vertical-align:middle;}.ereactor_modal_wrapper > div{display:inline-block;text-align:left;}#ereactor-slider-preview{position:fixed;bottom:50%;left:30px;}.ereactor-slide-preview{max-width:800px;}.ereactor_modal_wrapper .ereactor-slide-preview{width:800px;}#ereactor-slider-preview .nivo-controlNav-hover{margin-bottom:10px;}#slideshow_quickadd_type{display:none;}.ereactor-slide-type,.ereactor-slide-disabled{display:inline-block;border:2px solid #3e3e3e;width:44px;height:34px;text-transform:uppercase;text-align:right;font-weight:700;cursor:pointer;background:transparent no-repeat 4px 8px;vertical-align:middle;margin:0 10px 10px 0;padding:14px 17px 0 40px;}.ereactor-slide-disabled{color:#BBB;border-color:#BBB;}.ereactor-slide-type:hover,.ereactor-slide-type.ereactor-selected{color:#ed6502;border-color:#ed6502;}.ereactor-slide-t1{background-image:url(../images/ereactor_slider/slide_html.png);padding-top:6px;height:42px;}.ereactor-slide-t0{background-image:url(../images/ereactor_slider/slide_image.png);}.ereactor-slide-t4{background-image:url(../images/ereactor_slider/slide_imagetext.png);padding-top:6px;height:42px;}.ereactor-slide-t2{background-image:url(../images/ereactor_slider/slide_product.png);}a.form-button{text-decoration:none;}a.form-button:hover{color:#fff;background:#f77c16;}button.btn-chooser{display:inline-block;}#generateSlides{margin-bottom:15px;}textarea.disabled{background:#eee;}#page_tabs_slides_content .form-list td.value{width:350px;}
skin/adminhtml/base/default/images/ereactor_slider/slide_html.png ADDED
Binary file
skin/adminhtml/base/default/images/ereactor_slider/slide_image.png ADDED
Binary file
skin/adminhtml/base/default/images/ereactor_slider/slide_imagetext.png ADDED
Binary file
skin/adminhtml/base/default/images/ereactor_slider/slide_product.png ADDED
Binary file
skin/frontend/base/default/css/ereactor_slider/default.css ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Skin Name: Nivo Slider Default Theme
3
+ Skin URI: http://nivo.dev7studios.com
4
+ Description: The default skin for the Nivo Slider.
5
+ Version: 1.3
6
+ Author: Gilbert Pellegrom
7
+ Author URI: http://dev7studios.com
8
+ Supports Thumbs: true
9
+ */
10
+
11
+ .theme-default .nivoSlider {
12
+ position:relative;
13
+ background-color:#fff;
14
+ margin-bottom:10px;
15
+ -webkit-box-shadow: 0px 1px 5px 0px #4a4a4a;
16
+ -moz-box-shadow: 0px 1px 5px 0px #4a4a4a;
17
+ box-shadow: 0px 1px 5px 0px #4a4a4a;
18
+ }
19
+ .theme-default .nivoSlider img {
20
+ position:absolute;
21
+ top:0px;
22
+ left:0px;
23
+ /*display:none;*/
24
+ width: 100%;
25
+ }
26
+
27
+ .theme-default .nivo-controlNav {
28
+ text-align: center;
29
+ padding: 0;
30
+ }
31
+ .theme-default .nivo-controlNav a {
32
+ display:inline-block;
33
+ width:22px;
34
+ height:22px;
35
+ background:url(../../images/ereactor_slider/bullets.png) no-repeat;
36
+ text-indent:-9999px;
37
+ border:0;
38
+ margin: 0 2px;
39
+ }
40
+ .theme-default .nivo-controlNav a.active {
41
+ background-position:0 -22px;
42
+ }
43
+
44
+ .theme-default .nivo-directionNav a {
45
+ display:block;
46
+ width:30px;
47
+ height:30px;
48
+ background:url(../../images/ereactor_slider/arrows.png) no-repeat;
49
+ text-indent:-9999px;
50
+ border:0;
51
+ opacity: 0;
52
+ -webkit-transition: all 200ms ease-in-out;
53
+ -moz-transition: all 200ms ease-in-out;
54
+ -o-transition: all 200ms ease-in-out;
55
+ transition: all 200ms ease-in-out;
56
+ }
57
+ .theme-default:hover .nivo-directionNav a { opacity: 1; }
58
+ .theme-default a.nivo-nextNav {
59
+ background-position:-30px 0;
60
+ right:15px;
61
+ }
62
+ .theme-default a.nivo-prevNav {
63
+ left:15px;
64
+ }
65
+
66
+ .theme-default .nivo-caption {
67
+ font-family: Helvetica, Arial, sans-serif;
68
+ }
69
+ .theme-default .nivo-caption a {
70
+ color:#fff;
71
+ border-bottom:1px dotted #fff;
72
+ }
73
+ .theme-default .nivo-caption a:hover {
74
+ color:#fff;
75
+ }
76
+
77
+ .theme-default .nivo-controlNav.nivo-thumbs-enabled {
78
+ width: 100%;
79
+ }
80
+ .theme-default .nivo-controlNav.nivo-thumbs-enabled a {
81
+ width: auto;
82
+ height: auto;
83
+ background: none;
84
+ margin-bottom: 5px;
85
+ }
86
+ .theme-default .nivo-controlNav.nivo-thumbs-enabled img {
87
+ display: block;
88
+ width: 120px;
89
+ height: auto;
90
+ }
91
+
92
+ .theme-default .nivoSlider .nivo-slide img {
93
+ position: static;
94
+ width: auto;
95
+ }
skin/frontend/base/default/css/ereactor_slider/nivo-slider.css ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery Nivo Slider v3.2
3
+ * http://nivo.dev7studios.com
4
+ *
5
+ * Copyright 2012, Dev7studios
6
+ * Free to use and abuse under the MIT license.
7
+ * http://www.opensource.org/licenses/mit-license.php
8
+ */
9
+
10
+ /* The Nivo Slider styles */
11
+ .nivoSlider {
12
+ position:relative;
13
+ width:100%;
14
+ height:auto;
15
+ overflow: hidden;
16
+ }
17
+ .nivoSlider img {
18
+ position:absolute;
19
+ top:0px;
20
+ left:0px;
21
+ max-width: none;
22
+ }
23
+ .nivo-main-image {
24
+ display: none !important;
25
+ position: relative !important;
26
+ width: 100% !important;
27
+ }
28
+
29
+ /* If an image is wrapped in a link */
30
+ .nivoSlider a.nivo-imageLink {
31
+ position:absolute;
32
+ top:0px;
33
+ left:0px;
34
+ width:100%;
35
+ height:100%;
36
+ border:0;
37
+ padding:0;
38
+ margin:0;
39
+ z-index:6;
40
+ display:none;
41
+ background:white;
42
+ /*filter:alpha(opacity=0);
43
+ opacity:0;*/
44
+ }
45
+ /* The slices and boxes in the Slider */
46
+ .nivo-slice {
47
+ display:block;
48
+ position:absolute;
49
+ z-index:50;
50
+ height:100%;
51
+ top:0;
52
+ }
53
+ .nivo-box {
54
+ display:block;
55
+ position:absolute;
56
+ z-index:50;
57
+ overflow:hidden;
58
+ }
59
+ .nivo-box img { display:block; }
60
+
61
+ /* Caption styles */
62
+ .nivo-caption {
63
+ position:absolute;
64
+ left:0px;
65
+ bottom:0px;
66
+ background:#000;
67
+ color:#fff;
68
+ width:100%;
69
+ z-index:80;
70
+ padding: 5px 10px;
71
+ opacity: 0.8;
72
+ overflow: hidden;
73
+ display: none;
74
+ -moz-opacity: 0.8;
75
+ filter:alpha(opacity=8);
76
+ -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
77
+ -moz-box-sizing: border-box; /* Firefox, other Gecko */
78
+ box-sizing: border-box; /* Opera/IE 8+ */
79
+ }
80
+ .nivo-caption p {
81
+ padding:5px;
82
+ margin:0;
83
+ }
84
+ .nivo-caption a {
85
+ display:inline !important;
86
+ }
87
+ .nivo-html-caption {
88
+ display:none;
89
+ }
90
+ /* Direction nav styles (e.g. Next & Prev) */
91
+ .nivo-directionNav a {
92
+ position:absolute;
93
+ top:45%;
94
+ z-index:1000;
95
+ cursor:pointer;
96
+ }
97
+ .nivo-prevNav {
98
+ left:0px;
99
+ }
100
+ .nivo-nextNav {
101
+ right:0px;
102
+ }
103
+ /* Control nav styles (e.g. 1,2,3...) */
104
+ .nivo-controlNav {
105
+ text-align:center;
106
+ padding: 15px 0;
107
+ }
108
+ .nivo-controlNav a {
109
+ cursor:pointer;
110
+ }
111
+ .nivo-controlNav a.active {
112
+ font-weight:bold;
113
+ }
114
+
115
+ .nivo-slider-wrapper {
116
+ position: relative;
117
+ }
118
+
119
+ .nivo-controlNav-hover {
120
+ position: absolute;
121
+ bottom: 0;
122
+ right: 0;
123
+ padding: 0 !important;
124
+ z-index: 100;
125
+ }
126
+
127
+ div.nivo-slide {
128
+ position: absolute;
129
+ width: 100%;
130
+ height: 100%;
131
+ }
132
+ div.nivo-slide div {
133
+ position: absolute;
134
+ display: block;
135
+ }
skin/frontend/base/default/images/ereactor_slider/arrows.png ADDED
Binary file
skin/frontend/base/default/images/ereactor_slider/bullets.png ADDED
Binary file
skin/frontend/base/default/images/ereactor_slider/loading.gif ADDED
Binary file