padoo_testimonial - Version 1.2.2

Version Notes

Allow customers post testimonial text and their image. And support flexible how display testimonials sliders on home page or other page with static block.

Download this release

Release Info

Developer Padoosoft
Extension padoo_testimonial
Version 1.2.2
Comparing to
See all releases


Version 1.2.2

Files changed (55) hide show
  1. app/code/local/Padoo/Testimonial/Block/Adminhtml/Testimonial.php +35 -0
  2. app/code/local/Padoo/Testimonial/Block/Adminhtml/Testimonial/Edit.php +56 -0
  3. app/code/local/Padoo/Testimonial/Block/Adminhtml/Testimonial/Edit/Form.php +149 -0
  4. app/code/local/Padoo/Testimonial/Block/Adminhtml/Testimonial/Grid.php +152 -0
  5. app/code/local/Padoo/Testimonial/Block/Testimonial.php +54 -0
  6. app/code/local/Padoo/Testimonial/Helper/Data.php +149 -0
  7. app/code/local/Padoo/Testimonial/Model/Mysql4/Testimonial.php +31 -0
  8. app/code/local/Padoo/Testimonial/Model/Mysql4/Testimonial/Collection.php +33 -0
  9. app/code/local/Padoo/Testimonial/Model/Status.php +29 -0
  10. app/code/local/Padoo/Testimonial/Model/System/Conf/Source/Effect.php +47 -0
  11. app/code/local/Padoo/Testimonial/Model/Testimonial.php +52 -0
  12. app/code/local/Padoo/Testimonial/Model/Wysiwyg/Config.php +50 -0
  13. app/code/local/Padoo/Testimonial/controllers/Adminhtml/TestimonialController.php +183 -0
  14. app/code/local/Padoo/Testimonial/controllers/IndexController.php +28 -0
  15. app/code/local/Padoo/Testimonial/controllers/SubmitController.php +109 -0
  16. app/code/local/Padoo/Testimonial/etc/adminhtml.xml +24 -0
  17. app/code/local/Padoo/Testimonial/etc/config.xml +193 -0
  18. app/code/local/Padoo/Testimonial/etc/system.xml +166 -0
  19. app/code/local/Padoo/Testimonial/sql/padoo_testimonial_setup/mysql4-install-1.0.0.php +50 -0
  20. app/code/local/Padoo/Testimonial/sql/padoo_testimonial_setup/mysql4-upgrade-1.1.1-1.1.2.php +21 -0
  21. app/code/local/Padoo/Testimonial/sql/padoo_testimonial_setup/mysql4-upgrade-1.1.3-1.1.4.php +50 -0
  22. app/code/local/Padoo/Testimonial/sql/padoo_testimonial_setup/mysql4-upgrade-1.2.1-1.2.2.php +12 -0
  23. app/design/adminhtml/default/default/layout/padoo_testimonial.xml +10 -0
  24. app/design/frontend/default/default/layout/padoo_testimonial.xml +67 -0
  25. app/etc/modules/Padoo_Testimonial.xml +9 -0
  26. app/locale/en_US/Padoo_Testimonial.csv +9 -0
  27. js/padoo/checkValue.js +10 -0
  28. js/padoo/jquery.js +2 -0
  29. js/padoo/jquery_noconflict.js +1 -0
  30. js/padoo/scriptaculous.js +58 -0
  31. js/padoo/simplecheckout.js +360 -0
  32. js/padoo/storelocator.js +239 -0
  33. js/padoo/tinybox.js +124 -0
  34. package.xml +58 -0
  35. skin/frontend/default/default/css/padoo/jquery-ui.css +1225 -0
  36. skin/frontend/default/default/css/padoo/jquery.bxslider.css +204 -0
  37. skin/frontend/default/default/css/padoo/onecheckout.css +452 -0
  38. skin/frontend/default/default/css/padoo/storelocator.css +529 -0
  39. skin/frontend/default/default/css/padoo/storelocator/navigation.png +0 -0
  40. skin/frontend/default/default/css/padoo/storelocator/navigation1.png +0 -0
  41. skin/frontend/default/default/css/padoo/storelocator/tag-bg.png +0 -0
  42. skin/frontend/default/default/css/padoo/storelocator/vssver2.scc +0 -0
  43. skin/frontend/default/default/css/padoo/testimonial.css +83 -0
  44. skin/frontend/default/default/css/padoo/tinybox.css +3 -0
  45. skin/frontend/default/default/css/testimonial/testimonial.css +91 -0
  46. skin/frontend/default/default/images/padoo/ajax-loader-tr.gif +0 -0
  47. skin/frontend/default/default/images/padoo/bg-btn-delete.gif +0 -0
  48. skin/frontend/default/default/images/padoo/bg-btn-update.gif +0 -0
  49. skin/frontend/default/default/images/padoo/btn_trash.gif +0 -0
  50. skin/frontend/default/default/images/padoo/controls.png +0 -0
  51. skin/frontend/default/default/images/padoo/loading.gif +0 -0
  52. skin/frontend/default/default/images/padoo/process.jpg +0 -0
  53. skin/frontend/default/default/images/padoo/slider_controls.png +0 -0
  54. skin/frontend/default/default/js/padoo/jquery.bxslider.js +1343 -0
  55. skin/frontend/default/default/js/padoo/jquery.cycle.js +1548 -0
app/code/local/Padoo/Testimonial/Block/Adminhtml/Testimonial.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Block_Adminhtml_Testimonial extends Mage_Adminhtml_Block_Widget_Grid_Container
21
+ {
22
+
23
+ /**
24
+ * Constructor
25
+ */
26
+ public function __construct()
27
+ {
28
+ $this->_controller = 'adminhtml_testimonial';
29
+ $this->_blockGroup = 'padoo_testimonial';
30
+ $this->_headerText = Mage::helper('padoo_testimonial')->__('Manage Testimonials');
31
+ $this->_addButtonLabel = Mage::helper('padoo_testimonial')->__('Add New Testimonial');
32
+ parent::__construct();
33
+ }
34
+
35
+ }
app/code/local/Padoo/Testimonial/Block/Adminhtml/Testimonial/Edit.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Block_Adminhtml_Testimonial_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
21
+ {
22
+
23
+ /**
24
+ * Constructor
25
+ */
26
+ public function __construct()
27
+ {
28
+ parent::__construct();
29
+
30
+ $this->_objectId = 'id';
31
+ $this->_blockGroup = 'padoo_testimonial';
32
+ $this->_controller = 'adminhtml_testimonial';
33
+
34
+ $this->_updateButton('save', 'label', Mage::helper('padoo_testimonial')->__('Save Testimonial'));
35
+ $this->_updateButton('delete', 'label', Mage::helper('padoo_testimonial')->__('Delete Testimonial'));
36
+
37
+ if( $this->getRequest()->getParam($this->_objectId) ) {
38
+ $model = Mage::getModel('padoo_testimonial/testimonial')->load($this->getRequest()->getParam($this->_objectId));
39
+ Mage::register('padoo_testimonial', $model);
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Get header text
45
+ *
46
+ * @return string
47
+ */
48
+ public function getHeaderText()
49
+ {
50
+ if( Mage::registry('padoo_testimonial') && Mage::registry('padoo_testimonial')->getId() ) {
51
+ return Mage::helper('padoo_testimonial')->__('Edit Testimonial');
52
+ } else {
53
+ return Mage::helper('padoo_testimonial')->__('Add Testimonial');
54
+ }
55
+ }
56
+ }
app/code/local/Padoo/Testimonial/Block/Adminhtml/Testimonial/Edit/Form.php ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Block_Adminhtml_Testimonial_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
21
+ {
22
+
23
+ /**
24
+ * Preparing global layout
25
+ *
26
+ * You can redefine this method in child classes for changin layout
27
+ *
28
+ * @return Mage_Core_Block_Abstract
29
+ */
30
+ protected function _prepareLayout()
31
+ {
32
+ parent::_prepareLayout();
33
+ if (Mage::getSingleton('cms/wysiwyg_config')->isEnabled()) {
34
+ $this->getLayout()->getBlock('head')->setCanLoadTinyMce(true);
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Prepare form before rendering HTML
40
+ *
41
+ * @return Mage_Adminhtml_Block_Widget_Form
42
+ */
43
+ protected function _prepareForm()
44
+ {
45
+ $form = new Varien_Data_Form(array(
46
+ 'id' => 'edit_form',
47
+ 'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
48
+ 'method' => 'post',
49
+ 'enctype' => 'multipart/form-data'
50
+ ));
51
+
52
+ $fieldset = $form->addFieldset('testimonial_form', array(
53
+ 'legend' => Mage::helper('padoo_testimonial')->__('Testimonial'),
54
+ 'class' => 'fieldset-wide',
55
+ )
56
+ );
57
+
58
+ if (!Mage::app()->isSingleStoreMode()) {
59
+ $fieldset->addField('store_id', 'multiselect', array(
60
+ 'name' => 'stores[]',
61
+ 'label' => Mage::helper('padoo_testimonial')->__('Store View'),
62
+ 'title' => Mage::helper('padoo_testimonial')->__('Store View'),
63
+ 'required' => true,
64
+ 'values' => Mage::getSingleton('adminhtml/system_store')
65
+ ->getStoreValuesForForm(false, true),
66
+ ));
67
+ }
68
+ else {
69
+ $fieldset->addField('store_id', 'hidden', array(
70
+ 'name' => 'stores[]',
71
+ 'value' => Mage::app()->getStore(true)->getId()
72
+ ));
73
+ }
74
+
75
+ $fieldset->addField('testimonial_position', 'text', array(
76
+ 'name' => 'testimonial_position',
77
+ 'label' => Mage::helper('padoo_testimonial')->__('Position'),
78
+ 'style' => 'width:100px !important',
79
+ ));
80
+
81
+ $fieldset->addField('testimonial_img', 'image', array(
82
+ 'name' => 'testimonial_img',
83
+ 'label' => Mage::helper('padoo_testimonial')->__('Image'),
84
+ ));
85
+
86
+ $fieldset->addField('testimonial_name', 'text', array(
87
+ 'name' => 'testimonial_name',
88
+ 'label' => Mage::helper('padoo_testimonial')->__('Name'),
89
+ 'class' => 'required-entry',
90
+ 'required' => true,
91
+ ));
92
+
93
+ $fieldset->addField('testimonial_email', 'text', array(
94
+ 'name' => 'testimonial_email',
95
+ 'label' => Mage::helper('padoo_testimonial')->__('Email'),
96
+ 'class' => 'required-entry',
97
+ 'required' => true,
98
+ ));
99
+
100
+ $fieldset->addField('testimonial_text', 'editor', array(
101
+ 'name' => 'testimonial_text',
102
+ 'label' => Mage::helper('padoo_testimonial')->__('Text'),
103
+ 'title' => Mage::helper('padoo_testimonial')->__('Text'),
104
+ 'style' => 'width:100%;height:300px;',
105
+ 'wysiwyg' => true,
106
+ 'required' => true,
107
+ ));
108
+
109
+ $fieldset->addField('testimonial_sidebar', 'select', array(
110
+ 'label' => Mage::helper('padoo_testimonial')->__('Show in sidebox'),
111
+ 'name' => 'testimonial_sidebar',
112
+ 'values' => array(
113
+ array(
114
+ 'value' => 1,
115
+ 'label' => Mage::helper('core')->__('Yes'),
116
+ ),
117
+ array(
118
+ 'value' => 0,
119
+ 'label' => Mage::helper('core')->__('No'),
120
+ ),
121
+ ),
122
+ ));
123
+
124
+ $fieldset->addField('testimonial_status', 'select', array(
125
+ 'label' => Mage::helper('padoo_testimonial')->__('Status'),
126
+ 'class' => 'required-entry',
127
+ 'name' => 'testimonial_status',
128
+ 'values' => array(
129
+ array(
130
+ 'value' => 1,
131
+ 'label' => Mage::helper('padoo_testimonial')->__('Enabled'),
132
+ ),
133
+ array(
134
+ 'value' => 2,
135
+ 'label' => Mage::helper('padoo_testimonial')->__('Disabled'),
136
+ ),
137
+ ),
138
+ ));
139
+
140
+ if (Mage::registry('padoo_testimonial')) {
141
+ $form->setValues(Mage::registry('padoo_testimonial')->getData());
142
+ }
143
+
144
+ $form->setUseContainer(true);
145
+ $this->setForm($form);
146
+ return parent::_prepareForm();
147
+ }
148
+
149
+ }
app/code/local/Padoo/Testimonial/Block/Adminhtml/Testimonial/Grid.php ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Block_Adminhtml_Testimonial_Grid extends Mage_Adminhtml_Block_Widget_Grid
21
+ {
22
+
23
+ /**
24
+ * Constructor
25
+ */
26
+ public function __construct()
27
+ {
28
+ parent::__construct();
29
+ $this->setId('testimonialGrid');
30
+ $this->setDefaultSort('testimonial_position');
31
+ $this->setDefaultDir('ASC');
32
+ $this->setSaveParametersInSession(true);
33
+ }
34
+
35
+ /**
36
+ * Prepare grid collection object
37
+ *
38
+ * @return Padoo_Testimonial_Block_Adminhtml_Testimonial_Grid
39
+ */
40
+ protected function _prepareCollection()
41
+ {
42
+ $this->setCollection(Mage::getModel('padoo_testimonial/testimonial')->getCollection());
43
+ return parent::_prepareCollection();
44
+ }
45
+
46
+ /**
47
+ * Preparing colums for grid
48
+ *
49
+ * @return Padoo_Testimonial_Block_Adminhtml_Testimonial_Grid
50
+ */
51
+ protected function _prepareColumns()
52
+ {
53
+ $this->addColumn('testimonial_id', array(
54
+ 'header' => Mage::helper('padoo_testimonial')->__('ID'),
55
+ 'align' => 'center',
56
+ 'width' => '30px',
57
+ 'index' => 'testimonial_id',
58
+ ));
59
+
60
+ $this->addColumn('testimonial_position', array(
61
+ 'header' => Mage::helper('padoo_testimonial')->__('Position'),
62
+ 'align' => 'right',
63
+ 'width' => '50px',
64
+ 'index' => 'testimonial_position',
65
+ 'type' => 'number',
66
+ ));
67
+
68
+ $this->addColumn('testimonial_name', array(
69
+ 'header' => Mage::helper('padoo_testimonial')->__('Name'),
70
+ 'align' => 'left',
71
+ 'index' => 'testimonial_name',
72
+ ));
73
+
74
+ $this->addColumn('testimonial_email', array(
75
+ 'header' => Mage::helper('padoo_testimonial')->__('Email'),
76
+ 'align' => 'left',
77
+ 'index' => 'testimonial_email',
78
+ ));
79
+
80
+ $this->addColumn('testimonial_text', array(
81
+ 'header' => Mage::helper('padoo_testimonial')->__('Text'),
82
+ 'align' => 'left',
83
+ 'index' => 'testimonial_text',
84
+ ));
85
+
86
+ $this->addColumn('testimonial_status', array(
87
+ 'header' => Mage::helper('padoo_testimonial')->__('Status'),
88
+ 'align' => 'center',
89
+ 'type' => 'options',
90
+ 'index' => 'testimonial_status',
91
+ 'options' => array(
92
+ 1 => 'Enabled',
93
+ 2 => 'Disabled',
94
+ ),
95
+ ));
96
+
97
+ $this->addColumn('action',
98
+ array(
99
+ 'header' => Mage::helper('padoo_testimonial')->__('Action'),
100
+ 'width' => '80',
101
+ 'type' => 'action',
102
+ 'getter' => 'getId',
103
+ 'actions' => array(
104
+ array(
105
+ 'caption' => Mage::helper('padoo_testimonial')->__('Edit'),
106
+ 'url' => array('base' => '*/*/edit'),
107
+ 'field' => 'id'
108
+ )
109
+ ),
110
+ 'filter' => false,
111
+ 'sortable' => false,
112
+ 'index' => 'stores',
113
+ 'is_system' => true,
114
+ ));
115
+ $this->addExportType('*/*/exportCsv', Mage::helper('padoo_testimonial')->__('CSV'));
116
+ $this->addExportType('*/*/exportXml', Mage::helper('padoo_testimonial')->__('XML'));
117
+
118
+ return parent::_prepareColumns();
119
+ }
120
+
121
+ protected function _prepareMassaction() {
122
+ $this->setMassactionIdField('testimonial_id');
123
+ $this->getMassactionBlock()->setFormFieldName('padoo_testimonial');
124
+ $this->getMassactionBlock()->addItem('delete', array(
125
+ 'label' => Mage::helper('padoo_testimonial')->__('Delete'),
126
+ 'url' => $this->getUrl('*/*/massDelete'),
127
+ 'confirm' => Mage::helper('padoo_testimonial')->__('Are you sure?')
128
+ ));
129
+ $statuses = Mage::getSingleton('padoo_testimonial/status')->getOptionArray();
130
+ array_unshift($statuses, array('label' => '', 'value' => ''));
131
+ $this->getMassactionBlock()->addItem('testimonial_status', array(
132
+ 'label' => Mage::helper('padoo_testimonial')->__('Change status'),
133
+ 'url' => $this->getUrl('*/*/massStatus', array('_current' => true)),
134
+ 'additional' => array(
135
+ 'visibility' => array(
136
+ 'name' => 'status',
137
+ 'type' => 'select',
138
+ 'class' => 'required-entry',
139
+ 'label' => Mage::helper('padoo_testimonial')->__('Status'),
140
+ 'values' => $statuses
141
+ )
142
+ )
143
+ ));
144
+ return $this;
145
+ }
146
+
147
+ public function getRowUrl($row)
148
+ {
149
+ return $this->getUrl('*/*/edit', array('id' => $row->getId()));
150
+ }
151
+
152
+ }
app/code/local/Padoo/Testimonial/Block/Testimonial.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Block_Testimonial extends Mage_Core_Block_Template
21
+ {
22
+
23
+ public function __construct()
24
+ {
25
+ parent::__construct();
26
+ $collection = Mage::getModel("padoo_testimonial/testimonial")->getCollection();
27
+ $collection->addFieldToFilter('testimonial_status','1');
28
+ if ($this->getSidebar()){
29
+ $collection->addFieldToFilter('testimonial_sidebar', '1');
30
+ }
31
+
32
+ $collection->setOrder('testimonial_position', 'ASC')
33
+ ->load();
34
+
35
+ $this->setTestimonials($collection);
36
+ }
37
+
38
+ protected function _prepareLayout()
39
+ {
40
+ parent::_prepareLayout();
41
+ $pager = $this->getLayout()->createBlock('page/html_pager', 'custom.pager');
42
+ $pager->setAvailableLimit(array(5=>5,10=>10,20=>20,'all'=>'all'));
43
+ $pager->setCollection($this->getTestimonials());
44
+ $this->setChild('pager', $pager);
45
+ $this->getTestimonials()->load();
46
+ return $this;
47
+ }
48
+
49
+ public function getPagerHtml()
50
+ {
51
+ return $this->getChildHtml('pager');
52
+ }
53
+
54
+ }
app/code/local/Padoo/Testimonial/Helper/Data.php ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Helper_Data extends Mage_Core_Helper_Abstract
21
+ {
22
+
23
+ /**
24
+ * Get name of the extension
25
+ *
26
+ * @return string - name
27
+ */
28
+ public function getTranslatedExtensionName()
29
+ {
30
+ return $this->__('Testimonials');
31
+ }
32
+
33
+ /**
34
+ * Get url for check updates
35
+ *
36
+ * @return string - URL
37
+ */
38
+ public function getCheckUpdateUrl()
39
+ {
40
+ $_t = explode('_', __CLASS__);
41
+ $module_name = $_t[0] . '_' . $_t[1];
42
+ $version = (string)Mage::getConfig()->getModuleConfig($module_name)->version;
43
+ $check_url = 'http://padoo.com/extension.html?name=' . $module_name . '&version=' . $version;
44
+ return $check_url;
45
+ }
46
+
47
+ /* public function sendMailToStore($email_sender,$name_sender,$message){
48
+ $templateId = Mage::getStoreConfig('testimonials/mail/mail_to_store_template');
49
+
50
+ $mailSubject = $this->__('Notification');
51
+ $sender = Array(
52
+ 'name' => $name_sender,
53
+ 'email' => $email_sender
54
+ );
55
+
56
+ $email = Mage::getStoreConfig('padoo_testimonial/options/recipient_email');
57
+ $title_sender = 'New testimonial was send !';
58
+ $vars = Array(
59
+ 'subject' => $title_sender,
60
+ 'customer_name' => $name_sender,
61
+ 'message' => $message,
62
+ );
63
+ $storeId = Mage::app()->getStore()->getId();
64
+
65
+ $translate = Mage::getSingleton('core/translate');
66
+ Mage::getModel('core/email_template')
67
+ ->setTemplateSubject($mailSubject)
68
+ ->sendTransactional($templateId, $sender, $email, null, $vars, $storeId);
69
+ $translate->setTranslateInline(true);
70
+ } */
71
+
72
+ public function sendMailToStore($itemId){
73
+ $object = Mage::getModel('padoo_testimonial/testimonial')->load($itemId);
74
+ $customer_email = $object->getTestimonialEmail();
75
+ $customer_name = $object->getTestimonialName();
76
+ $message = $object->getTestimonialText();
77
+ $templateId = Mage::getStoreConfig('padoo_testimonial/options/mail_to_store_template');
78
+
79
+ $mailSubject = $this->__('Testimonial Notification !');
80
+
81
+ /**
82
+ * $sender can be of type string or array. You can set identity of
83
+ * diffrent Store emails (like 'support', 'sales', etc.) found
84
+ * in "System->Configuration->General->Store Email Addresses"
85
+ */
86
+ $sender = Array(
87
+ 'name' => $customer_name,
88
+ 'email' => $customer_email
89
+ );
90
+
91
+ /**
92
+ * In case of multiple recipient use array here.
93
+ */
94
+ $email = Mage::getStoreConfig('padoo_testimonial/options/recipient_email');
95
+
96
+ $vars = Array(
97
+ 'subject' => 'New Testimonial was sended.',
98
+ 'customer_name' => $customer_name,
99
+ 'message' => $message,
100
+ );
101
+
102
+ /* This is optional */
103
+ $storeId = Mage::app()->getStore()->getId();
104
+
105
+ $translate = Mage::getSingleton('core/translate');
106
+ Mage::getModel('core/email_template')
107
+ ->setTemplateSubject($mailSubject)
108
+ ->sendTransactional($templateId, $sender, $email, null, $vars, $storeId);
109
+ $translate->setTranslateInline(true);
110
+ }
111
+
112
+
113
+
114
+ /* public function sendMailToStore($itemId){
115
+ $object = Mage::getModel('padoo_testimonial/testimonial')->load($itemId);
116
+ $customer_email = $object->getTestimonialEmail();
117
+ $customer_name = $object->getTestimonialName();
118
+ $message = $object->getTestimonialText();
119
+
120
+ $templateId = Mage::getStoreConfig('padoo_testimonial/options/mail_to_store_template');
121
+
122
+ $mailSubject = $this->__('Testimonial Notification !');
123
+
124
+ $sender = Array(
125
+ 'name' => $customer_name,
126
+ 'email' => $customer_email
127
+ );
128
+
129
+ $email = Mage::getStoreConfig('padoo_testimonial/options/recipient_email');
130
+
131
+ $vars = Array(
132
+ 'subject' => 'New Testimonial was sended.',
133
+ 'name' => $customer_name,
134
+ 'email' => $customer_email,
135
+ 'message' => $message,
136
+ );
137
+
138
+ $translate = Mage::getSingleton('core/translate');
139
+ Mage::getModel('core/email_template')
140
+ ->setTemplateSubject($mailSubject)
141
+ ->sendTransactional($templateId, $sender, $email, null, $vars);
142
+ $translate->setTranslateInline(true);
143
+ } */
144
+
145
+ public function getTestimonialUrl(){
146
+ return $this->_getUrl('testimonials');
147
+ }
148
+
149
+ }
app/code/local/Padoo/Testimonial/Model/Mysql4/Testimonial.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Model_Mysql4_Testimonial extends Mage_Core_Model_Mysql4_Abstract
21
+ {
22
+
23
+ /**
24
+ * Resource initialization
25
+ */
26
+ public function _construct()
27
+ {
28
+ $this->_init('padoo_testimonial/testimonial', 'testimonial_id');
29
+ }
30
+
31
+ }
app/code/local/Padoo/Testimonial/Model/Mysql4/Testimonial/Collection.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Model_Mysql4_Testimonial_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
21
+ {
22
+
23
+ /**
24
+ * Initialization here
25
+ *
26
+ */
27
+ public function _construct()
28
+ {
29
+ parent::_construct();
30
+ $this->_init('padoo_testimonial/testimonial');
31
+ }
32
+
33
+ }
app/code/local/Padoo/Testimonial/Model/Status.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Model_Status extends Varien_Object {
21
+ const STATUS_ENABLED = 1;
22
+ const STATUS_DISABLED = 0;
23
+ static public function getOptionArray() {
24
+ return array(
25
+ self::STATUS_ENABLED => Mage::helper('padoo_testimonial')->__('Enabled'),
26
+ self::STATUS_DISABLED => Mage::helper('padoo_testimonial')->__('Disabled')
27
+ );
28
+ }
29
+ }
app/code/local/Padoo/Testimonial/Model/System/Conf/Source/Effect.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Model_System_Conf_Source_Effect
21
+ {
22
+
23
+ /**
24
+ * Options getter
25
+ *
26
+ * @return array
27
+ */
28
+ public function toOptionArray()
29
+ {
30
+ return array(
31
+ array('value' => '', 'label'=>Mage::helper('adminhtml')->__('---Select One---')),
32
+ array('value' => 'fade', 'label'=>Mage::helper('adminhtml')->__('Fade')),
33
+ array('value' => 'fadeZoom', 'label'=>Mage::helper('adminhtml')->__('FadeZoom')),
34
+ array('value' => 'cover', 'label'=>Mage::helper('adminhtml')->__('Cover')),
35
+ array('value' => 'uncover', 'label'=>Mage::helper('adminhtml')->__('Uncover')),
36
+ array('value' => 'shuffle', 'label'=>Mage::helper('adminhtml')->__('Shuffle')),
37
+ array('value' => 'zoom', 'label'=>Mage::helper('adminhtml')->__('Zoom')),
38
+ array('value' => 'wipe', 'label'=>Mage::helper('adminhtml')->__('Wipe')),
39
+ array('value' => 'toss', 'label'=>Mage::helper('adminhtml')->__('Toss')),
40
+ array('value' => 'turnDown', 'label'=>Mage::helper('adminhtml')->__('TurnDown')),
41
+ array('value' => 'turnUp', 'label'=>Mage::helper('adminhtml')->__('TurnUp')),
42
+ array('value' => 'scrollDown', 'label'=>Mage::helper('adminhtml')->__('ScrollDown')),
43
+ array('value' => 'scrollUp', 'label'=>Mage::helper('adminhtml')->__('ScrollUp'))
44
+ );
45
+ }
46
+
47
+ }
app/code/local/Padoo/Testimonial/Model/Testimonial.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Model_Testimonial extends Mage_Core_Model_Abstract
21
+ {
22
+
23
+ /**
24
+ * Internal constructor not depended on params. Can be used for object initialization
25
+ */
26
+ public function _construct()
27
+ {
28
+ parent::_construct();
29
+ $this->_init('padoo_testimonial/testimonial');
30
+ }
31
+
32
+ public function validate()
33
+ {
34
+ $errors = array();
35
+ $helper = Mage::helper('padoo_testimonial');
36
+ $data = $_POST['testimonial'];
37
+ if (!Zend_Validate::is($data['name'], 'NotEmpty')) {
38
+ $errors[] = $helper->__('Name is a required field');
39
+ }
40
+ if (!Zend_Validate::is($data['email'], 'NotEmpty')) {
41
+ $errors[] = $helper->__('Email a required field');
42
+ }
43
+ if (!Zend_Validate::is($data['content'], 'NotEmpty')) {
44
+ $errors[] = $helper->__('Content is a required field');
45
+ }
46
+ if (empty($errors)) {
47
+ return true;
48
+ }
49
+ return $errors;
50
+ }
51
+
52
+ }
app/code/local/Padoo/Testimonial/Model/Wysiwyg/Config.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Model_Wysiwyg_Config extends Mage_Cms_Model_Wysiwyg_Config
21
+ {
22
+
23
+ /**
24
+ * Return Wysiwyg config as Varien_Object
25
+ *
26
+ * Config options description:
27
+ *
28
+ * enabled: Enabled Visual Editor or not
29
+ * hidden: Show Visual Editor on page load or not
30
+ * use_container: Wrap Editor contents into div or not
31
+ * no_display: Hide Editor container or not (related to use_container)
32
+ * translator: Helper to translate phrases in lib
33
+ * files_browser_*: Files Browser (media, images) settings
34
+ * encode_directives: Encode template directives with JS or not
35
+ *
36
+ * @param $data Varien_Object constructor params to override default config values
37
+ *
38
+ * @return Varien_Object
39
+ */
40
+ public function getConfig($data = array())
41
+ {
42
+ $config = parent::getConfig($data);
43
+ $config->setData('files_browser_window_url',Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/cms_wysiwyg_images/index/'));
44
+ $config->setData('directives_url',Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/cms_wysiwyg/directive'));
45
+ $config->setData('directives_url_quoted', preg_quote($config->getData('directives_url')));
46
+ $config->setData('widget_window_url',Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/widget/index'));
47
+ return $config;
48
+ }
49
+
50
+ }
app/code/local/Padoo/Testimonial/controllers/Adminhtml/TestimonialController.php ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_Adminhtml_TestimonialController extends Mage_Adminhtml_Controller_Action
21
+ {
22
+
23
+ protected function _isAllowed()
24
+ {
25
+ return Mage::getSingleton('admin/session')->isAllowed('padoo_testimonial/testimonial');
26
+ }
27
+
28
+ /**
29
+ * Init here
30
+ */
31
+ protected function _initAction()
32
+ {
33
+ $this->loadLayout();
34
+ $this->_setActiveMenu('padoo_testimonial/testimonial');
35
+ $this->_addBreadcrumb(Mage::helper('padoo_testimonial')->__('Testimonials'), Mage::helper('padoo_testimonial')->__('Testimonials'));
36
+ }
37
+
38
+ /**
39
+ * View grid action
40
+ */
41
+ public function indexAction()
42
+ {
43
+ $this->_initAction();
44
+ $this->renderLayout();
45
+ }
46
+
47
+ /**
48
+ * View edit form action
49
+ */
50
+ public function editAction()
51
+ {
52
+ $this->_initAction();
53
+ $this->_addContent($this->getLayout()->createBlock('padoo_testimonial/adminhtml_testimonial_edit'));
54
+ $this->renderLayout();
55
+ }
56
+
57
+ /**
58
+ * View new form action
59
+ */
60
+ public function newAction()
61
+ {
62
+ $this->editAction();
63
+ }
64
+
65
+ /**
66
+ * Save form action
67
+ */
68
+ public function saveAction()
69
+ {
70
+ if ($this->getRequest()->getPost()) {
71
+ try {
72
+ $data = $this->getRequest()->getPost();
73
+ if (isset($_FILES['testimonial_img']['name']) and (file_exists($_FILES['testimonial_img']['tmp_name']))) {
74
+ $uploader = new Varien_File_Uploader('testimonial_img');
75
+ $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png','mp4','flv'));
76
+ $uploader->setAllowRenameFiles(false);
77
+ $uploader->setFilesDispersion(false);
78
+ $path = Mage::getBaseDir('media') . DS . 'testimonials';
79
+ $uploader->save($path, $_FILES['testimonial_img']['name']);
80
+ $data['testimonial_img'] = 'testimonials/' . $_FILES['testimonial_img']['name'];
81
+ } else {
82
+ if(isset($data['testimonial_img']['delete']) && $data['testimonial_img']['delete'] == 1) {
83
+ $data['testimonial_img'] = '';
84
+ } else {
85
+ unset($data['testimonial_img']);
86
+ }
87
+ }
88
+ //save store view
89
+ $storeView = $data['stores'];
90
+ $dataStore = "";
91
+ foreach($storeView as $store){
92
+ if($dataStore != "") $dataStore .=",";
93
+ $dataStore .= $store;
94
+ }
95
+ $data['store_id'] = $dataStore;
96
+ $model = Mage::getModel('padoo_testimonial/testimonial');
97
+ $model->setData($data)->setTestimonialId($this->getRequest()->getParam('id'));
98
+ if ($model->getTestimonialDate == NULL) {
99
+ $model->setTestimonialDate(now());
100
+ }
101
+ $model->save();
102
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('padoo_testimonial')->__('Testimonial was successfully saved'));
103
+ } catch (Exception $e) {
104
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
105
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
106
+ return;
107
+ }
108
+ }
109
+
110
+ $this->_redirect('*/*/');
111
+ }
112
+
113
+ /**
114
+ * Delete action
115
+ */
116
+ public function deleteAction()
117
+ {
118
+ if ($this->getRequest()->getParam('id') > 0) {
119
+ try {
120
+ $model = Mage::getModel('padoo_testimonial/testimonial');
121
+ $model->setTestimonialId($this->getRequest()->getParam('id'))
122
+ ->delete();
123
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('padoo_testimonial')->__('Testimonial was successfully deleted'));
124
+ $this->_redirect('*/*/');
125
+ } catch (Exception $e) {
126
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
127
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
128
+ }
129
+ }
130
+
131
+ $this->_redirect('*/*/');
132
+ }
133
+
134
+ public function massDeleteAction() {
135
+ $bannerIds = $this->getRequest()->getParam('padoo_testimonial');
136
+ if (!is_array($bannerIds)) {
137
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Please select item(s)'));
138
+ } else {
139
+ try {
140
+ foreach ($bannerIds as $bannerId) {
141
+ $model = Mage::getModel('padoo_testimonial/testimonial')->load($bannerId);
142
+ $_helper = Mage::helper('padoo_testimonial');
143
+ $model->delete();
144
+ }
145
+ Mage::getSingleton('adminhtml/session')->addSuccess(
146
+ Mage::helper('adminhtml')->__('Total of %d record(s) were successfully deleted', count($bannerIds)));
147
+ } catch (Exception $e) {
148
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
149
+ }
150
+ }
151
+ $this->_redirect('*/*/index');
152
+ }
153
+
154
+ public function massStatusAction() {
155
+ $bannerIds = $this->getRequest()->getParam('padoo_testimonial');
156
+ if (!is_array($bannerIds)) {
157
+ Mage::getSingleton('adminhtml/session')->addError($this->__('Please select item(s)'));
158
+ } else {
159
+ try {
160
+ foreach ($bannerIds as $bannerId) {
161
+ $banner = Mage::getSingleton('padoo_testimonial/testimonial')->load($bannerId)->setTestimonialStatus($this->getRequest()->getParam('status'))->setIsMassupdate(true)->save();
162
+ }
163
+ $this->_getSession()->addSuccess(
164
+ $this->__('Total of %d record(s) were successfully updated', count($bannerIds))
165
+ );
166
+ } catch (Exception $e) {
167
+ $this->_getSession()->addError($e->getMessage());
168
+ }
169
+ }
170
+ $this->_redirect('*/*/index');
171
+ }
172
+
173
+ public function exportCsvAction() {
174
+ $fileName = 'padoo_testimonial.csv';
175
+ $content = $this->getLayout()->createBlock('padoo_testimonial/adminhtml_padoo_testimonial_grid')->getCsv();
176
+ $this->_sendUploadResponse($fileName, $content);
177
+ }
178
+ public function exportXmlAction() {
179
+ $fileName = 'padoo_testimonial.xml';
180
+ $content = $this->getLayout()->createBlock('padoo_testimonial/adminhtml_padoo_testimonial_grid')->getXml();
181
+ $this->_sendUploadResponse($fileName, $content);
182
+ }
183
+ }
app/code/local/Padoo/Testimonial/controllers/IndexController.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_IndexController extends Mage_Core_Controller_Front_Action
21
+ {
22
+ public function indexAction()
23
+ {
24
+ if (!Mage::getStoreConfig('padoo_testimonial/general/enable')) $this->_redirect('no-route');
25
+ $this->loadLayout();
26
+ $this->renderLayout();
27
+ }
28
+ }
app/code/local/Padoo/Testimonial/controllers/SubmitController.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoosoft Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to support@mage-addons.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @author PadooSoft Team
16
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://mage-addons.com)
17
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
18
+ */
19
+
20
+ class Padoo_Testimonial_SubmitController extends Mage_Core_Controller_Front_Action
21
+ {
22
+ public function indexAction()
23
+ {
24
+ if (!Mage::getStoreConfig('padoo_testimonial/general/enable')) $this->_redirect('no-route');
25
+ $this->loadLayout();
26
+ $this->renderLayout();
27
+ }
28
+
29
+ public function saveAction() {
30
+ if (!Mage::getStoreConfig('padoo_testimonial/general/enable')) $this->_redirect('no-route');
31
+ $data = $this->getRequest()->getPost();
32
+ $testimonialData = $data['testimonial'];
33
+ $media = $_FILES['testimonialmedia']['name'];
34
+ if (!empty($data)) {
35
+ $session = Mage::getSingleton('core/session', array('name'=>'frontend'));
36
+ /* @var $session Mage_Core_Model_Session */
37
+ $testimonial = Mage::getModel('padoo_testimonial/testimonial');
38
+ $validate = $testimonial->validate();
39
+ if ($validate === true) {
40
+ $formId = 'padoo_testimonial';
41
+ $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
42
+ if ($captchaModel->isRequired()) {
43
+ $word = $this->_getCaptchaString($this->getRequest(), $formId);
44
+ if (!$captchaModel->isCorrect($word)) {
45
+ Mage::getSingleton('core/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
46
+ $this->_redirectReferer('');
47
+ return;
48
+ }
49
+ }
50
+
51
+ try {
52
+ if(isset($_FILES['testimonialmedia']['name']) && ($_FILES['testimonialmedia']['tmp_name'] != NULL)){
53
+ $uploader = new Varien_File_Uploader('testimonialmedia');
54
+ $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png','mp4','flv'));
55
+ $uploader->setAllowRenameFiles(true);
56
+ $uploader->setFilesDispersion(true);
57
+ //$path = Mage::getBaseDir('media') . DS ;
58
+ //$path= Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA);
59
+
60
+ $path = Mage::getBaseDir('media') . DS . 'testimonials';
61
+ $img = $uploader->save($path, 'testimonials/' . $_FILES['testimonialmedia']['name']);
62
+ }
63
+ $imgPath = 'testimonials'. $img['file'];
64
+ $testimonial->setTestimonialName($testimonialData['name']);
65
+ $testimonial->setTestimonialEmail($testimonialData['email']);
66
+ $testimonial->setTestimonialText($testimonialData['content']);
67
+ $testimonial->setTestimonialImg($imgPath);
68
+ $testimonial->save();
69
+ $itemId = $testimonial->getTestimonialId();
70
+ //send email to store
71
+ if(Mage::getStoreConfig('padoo_testimonial/options/enable_notification')){
72
+ Mage::helper('padoo_testimonial')->sendMailToStore($itemId);
73
+ }
74
+
75
+ $session->addSuccess($this->__('Your testimonial has been accepted'));
76
+ }catch (Exception $e) {
77
+ $session->setFormData($data);
78
+ $session->addError($this->__('Unable to post testimonial. Please, try again later !'));
79
+ }
80
+ }else {
81
+ try{
82
+ $session->setFormData($data);
83
+ }catch(Exception $e){
84
+ Mage::log($e->getMessage());
85
+ }
86
+ if (is_array($validate)) {
87
+ foreach ($validate as $errorMessage) {
88
+ $session->addError($errorMessage);
89
+ }
90
+ }
91
+ else {
92
+ $session->addError($this->__('Unable to post testimonial. Please, try again later !'));
93
+ }
94
+ }
95
+ }
96
+
97
+ if ($redirectUrl = Mage::getSingleton('core/session')->getRedirectUrl(true)) {
98
+ $this->_redirectUrl($redirectUrl);
99
+ return;
100
+ }
101
+ $this->_redirectReferer();
102
+ }
103
+
104
+ protected function _getCaptchaString($request, $formId)
105
+ {
106
+ $captchaParams = $request->getPost(Mage_Captcha_Helper_Data::INPUT_NAME_FIELD_VALUE);
107
+ return $captchaParams[$formId];
108
+ }
109
+ }
app/code/local/Padoo/Testimonial/etc/adminhtml.xml ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+ <acl>
5
+ <resources>
6
+ <admin>
7
+ <children>
8
+ <system>
9
+ <children>
10
+ <config>
11
+ <children>
12
+ <padoo_testimonial translate="title" module="padoo_testimonial">
13
+ <title>Testimonial</title>
14
+ <sort_order>50</sort_order>
15
+ </padoo_testimonial>
16
+ </children>
17
+ </config>
18
+ </children>
19
+ </system>
20
+ </children>
21
+ </admin>
22
+ </resources>
23
+ </acl>
24
+ </config>
app/code/local/Padoo/Testimonial/etc/config.xml ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Padoo_Testimonial>
5
+ <version>1.2.2</version>
6
+ </Padoo_Testimonial>
7
+ </modules>
8
+
9
+ <global>
10
+ <models>
11
+ <padoo_testimonial>
12
+ <class>Padoo_Testimonial_Model</class>
13
+ <resourceModel>padoo_testimonial_mysql4</resourceModel>
14
+ </padoo_testimonial>
15
+ <padoo_testimonial_mysql4>
16
+ <class>Padoo_Testimonial_Model_Mysql4</class>
17
+ <entities>
18
+ <testimonial>
19
+ <table>padoo_testimonial</table>
20
+ </testimonial>
21
+ </entities>
22
+ </padoo_testimonial_mysql4>
23
+ </models>
24
+
25
+ <blocks>
26
+ <padoo_testimonial>
27
+ <class>Padoo_Testimonial_Block</class>
28
+ </padoo_testimonial>
29
+ </blocks>
30
+
31
+ <helpers>
32
+ <padoo_testimonial>
33
+ <class>Padoo_Testimonial_Helper</class>
34
+ </padoo_testimonial>
35
+ </helpers>
36
+
37
+ <resources>
38
+ <padoo_testimonial_setup>
39
+ <setup>
40
+ <module>Padoo_Testimonial</module>
41
+ </setup>
42
+ <connection>
43
+ <use>core_setup</use>
44
+ </connection>
45
+ </padoo_testimonial_setup>
46
+ <padoo_testimonial_write>
47
+ <connection>
48
+ <use>core_write</use>
49
+ </connection>
50
+ </padoo_testimonial_write>
51
+ <padoo_testimonial_read>
52
+ <connection>
53
+ <use>core_read</use>
54
+ </connection>
55
+ </padoo_testimonial_read>
56
+ </resources>
57
+ <template>
58
+ <email>
59
+ <padoo_testimonial_options_mail_to_store_template translate="label">
60
+ <label>Notification Tesimonials</label>
61
+ <file>padoo_testimonial_options_mail_to_store_template.html</file>
62
+ <type>html</type>
63
+ </padoo_testimonial_options_mail_to_store_template>
64
+ </email>
65
+ </template>
66
+ </global>
67
+ <default>
68
+ <captcha>
69
+ <frontend>
70
+ <areas>
71
+ <padoo_testimonial>
72
+ <label>Testimonials Page</label>
73
+ </padoo_testimonial>
74
+ </areas>
75
+ </frontend>
76
+ </captcha>
77
+ <customer>
78
+ <captcha>
79
+ <enable>1</enable>
80
+ <always_for>
81
+ <padoo_testimonial>1</padoo_testimonial>
82
+ </always_for>
83
+ <forms>padoo_testimonial</forms>
84
+ </captcha>
85
+ </customer>
86
+ <padoo_testimonial>
87
+ <general>
88
+ <num_sidebar>4</num_sidebar>
89
+ <time_effect>5</time_effect>
90
+ </general>
91
+ </padoo_testimonial>
92
+ </default>
93
+ <admin>
94
+ <routers>
95
+ <adminhtml>
96
+ <args>
97
+ <modules>
98
+ <padoo_testimonial after="Mage_Adminhtml">Padoo_Testimonial_Adminhtml</padoo_testimonial>
99
+ </modules>
100
+ </args>
101
+ </adminhtml>
102
+ </routers>
103
+ </admin>
104
+
105
+ <adminhtml>
106
+ <menu>
107
+ <padoo_testimonial>
108
+ <title>Testimonial</title>
109
+ <sort_order>76</sort_order>
110
+ <children>
111
+ <testimonial>
112
+ <title>Manage Testimonial</title>
113
+ <sort_order>0</sort_order>
114
+ <action>adminhtml/testimonial</action>
115
+ </testimonial>
116
+ <configs>
117
+ <title>Configs</title>
118
+ <sort_order>1</sort_order>
119
+ <action>adminhtml/system_config/edit/section/padoo_testimonial</action>
120
+ </configs>
121
+ </children>
122
+ </padoo_testimonial>
123
+ </menu>
124
+ <acl>
125
+ <resources>
126
+ <admin>
127
+ <children>
128
+ <padoo_testimonial>
129
+ <title>Testimonial</title>
130
+ <sort_order>76</sort_order>
131
+ <children>
132
+ <testimonial>
133
+ <title>Manage Testimonial</title>
134
+ <sort_order>0</sort_order>
135
+ <action>adminhtml/testimonial</action>
136
+ </testimonial>
137
+ <configs>
138
+ <title>Configs</title>
139
+ <sort_order>1</sort_order>
140
+ <action>adminhtml/system_config/edit/section/padoo_testimonial</action>
141
+ </configs>
142
+ </children>
143
+ </padoo_testimonial>
144
+ </children>
145
+ </admin>
146
+ </resources>
147
+ </acl>
148
+ <layout>
149
+ <updates>
150
+ <padoo_testimonial>
151
+ <file>padoo_testimonial.xml</file>
152
+ </padoo_testimonial>
153
+ </updates>
154
+ </layout>
155
+ <translate>
156
+ <modules>
157
+ <Padoo_Testimonial>
158
+ <files>
159
+ <default>Padoo_Testimonial.csv</default>
160
+ </files>
161
+ </Padoo_Testimonial>
162
+ </modules>
163
+ </translate>
164
+ </adminhtml>
165
+
166
+ <frontend>
167
+ <routers>
168
+ <padoo_testimonial>
169
+ <use>standard</use>
170
+ <args>
171
+ <module>Padoo_Testimonial</module>
172
+ <frontName>testimonials</frontName>
173
+ </args>
174
+ </padoo_testimonial>
175
+ </routers>
176
+ <layout>
177
+ <updates>
178
+ <padoo_testimonial>
179
+ <file>padoo_testimonial.xml</file>
180
+ </padoo_testimonial>
181
+ </updates>
182
+ </layout>
183
+ <translate>
184
+ <modules>
185
+ <Padoo_Testimonial>
186
+ <files>
187
+ <default>Padoo_Testimonial.csv</default>
188
+ </files>
189
+ </Padoo_Testimonial>
190
+ </modules>
191
+ </translate>
192
+ </frontend>
193
+ </config>
app/code/local/Padoo/Testimonial/etc/system.xml ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <padoo_templates translate="label" module="padoo_testimonial">
5
+ <label>Padoosoft extension</label>
6
+ <!-- it relation to diplaying position on left menu -->
7
+ <sort_order>198</sort_order>
8
+ </padoo_templates>
9
+ </tabs>
10
+ <sections>
11
+ <padoo_testimonial translate="label" module="padoo_testimonial">
12
+ <label>Testimonial</label>
13
+ <tab>padoo_templates</tab>
14
+ <frontend_type>text</frontend_type>
15
+ <sort_order>6</sort_order>
16
+ <show_in_default>1</show_in_default>
17
+ <show_in_website>1</show_in_website>
18
+ <show_in_store>1</show_in_store>
19
+ <groups>
20
+ <general translate="label" module="padoo_testimonial">
21
+ <label>General Settings</label>
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
+ <enable translate="label">
28
+ <label>Enable</label>
29
+ <frontend_type>select</frontend_type>
30
+ <source_model>adminhtml/system_config_source_yesno</source_model>
31
+ <sort_order>0</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
+ </enable>
36
+ <enable_box_right translate="label">
37
+ <label>Enabled testimonial box in right column</label>
38
+ <frontend_type>select</frontend_type>
39
+ <source_model>adminhtml/system_config_source_yesno</source_model>
40
+ <sort_order>1</sort_order>
41
+ <show_in_default>1</show_in_default>
42
+ <show_in_website>1</show_in_website>
43
+ <show_in_store>1</show_in_store>
44
+ </enable_box_right>
45
+ <effects translate="label">
46
+ <label>Enable slider in sidebar</label>
47
+ <frontend_type>select</frontend_type>
48
+ <source_model>adminhtml/system_config_source_yesno</source_model>
49
+ <sort_order>2</sort_order>
50
+ <show_in_default>1</show_in_default>
51
+ <show_in_website>1</show_in_website>
52
+ <show_in_store>1</show_in_store>
53
+ <depends><enable_box_right>1</enable_box_right></depends>
54
+ </effects>
55
+ <num_sidebar translate="label">
56
+ <label>Number item in sidebar</label>
57
+ <frontend_type>text</frontend_type>
58
+ <sort_order>3</sort_order>
59
+ <show_in_default>1</show_in_default>
60
+ <show_in_website>1</show_in_website>
61
+ <show_in_store>1</show_in_store>
62
+ <depends>
63
+ <enable_box_right>1</enable_box_right>
64
+ <effects>1</effects>
65
+ </depends>
66
+ </num_sidebar>
67
+ <effects_type translate="label">
68
+ <label>Effect type</label>
69
+ <frontend_type>select</frontend_type>
70
+ <source_model>padoo_testimonial/system_conf_source_effect</source_model>
71
+ <sort_order>4</sort_order>
72
+ <show_in_default>1</show_in_default>
73
+ <show_in_website>1</show_in_website>
74
+ <show_in_store>1</show_in_store>
75
+ <depends><enable_box_right>1</enable_box_right><effects>1</effects></depends>
76
+ </effects_type>
77
+ <time_effect translate="label">
78
+ <label>Time slide</label>
79
+ <frontend_type>text</frontend_type>
80
+ <sort_order>5</sort_order>
81
+ <show_in_default>1</show_in_default>
82
+ <show_in_website>1</show_in_website>
83
+ <show_in_store>1</show_in_store>
84
+ <depends><enable_box_right>1</enable_box_right><effects>1</effects></depends>
85
+ <comment>second(s)</comment>
86
+ </time_effect>
87
+ <enable_capcha translate="label">
88
+ <label>Enable Captcha</label>
89
+ <frontend_type>select</frontend_type>
90
+ <source_model>adminhtml/system_config_source_yesno</source_model>
91
+ <config_path>customer/captcha/enable</config_path>
92
+ <sort_order>6</sort_order>
93
+ <show_in_default>1</show_in_default>
94
+ <show_in_website>1</show_in_website>
95
+ <show_in_store>1</show_in_store>
96
+ </enable_capcha>
97
+ <display_email translate="label">
98
+ <label>Allow display Email</label>
99
+ <frontend_type>select</frontend_type>
100
+ <source_model>adminhtml/system_config_source_yesno</source_model>
101
+ <sort_order>7</sort_order>
102
+ <show_in_default>1</show_in_default>
103
+ <show_in_website>1</show_in_website>
104
+ <show_in_store>1</show_in_store>
105
+ </display_email>
106
+ <display_datetime translate="label">
107
+ <label>Allow display DateTime</label>
108
+ <frontend_type>select</frontend_type>
109
+ <source_model>adminhtml/system_config_source_yesno</source_model>
110
+ <sort_order>8</sort_order>
111
+ <show_in_default>1</show_in_default>
112
+ <show_in_website>1</show_in_website>
113
+ <show_in_store>1</show_in_store>
114
+ </display_datetime>
115
+ <enable_top_link translate="label">
116
+ <label>Enable link in header</label>
117
+ <frontend_type>select</frontend_type>
118
+ <source_model>adminhtml/system_config_source_yesno</source_model>
119
+ <sort_order>9</sort_order>
120
+ <show_in_default>1</show_in_default>
121
+ <show_in_website>1</show_in_website>
122
+ <show_in_store>1</show_in_store>
123
+ </enable_top_link>
124
+ </fields>
125
+ </general>
126
+ <options translate="label" module="padoo_testimonial">
127
+ <label>Email Notifications</label>
128
+ <sort_order>2</sort_order>
129
+ <show_in_default>1</show_in_default>
130
+ <show_in_website>1</show_in_website>
131
+ <show_in_store>1</show_in_store>
132
+ <fields>
133
+ <enable_notification translate="label">
134
+ <label>Enable Email Notification</label>
135
+ <frontend_type>select</frontend_type>
136
+ <source_model>adminhtml/system_config_source_yesno</source_model>
137
+ <sort_order>1</sort_order>
138
+ <show_in_default>1</show_in_default>
139
+ <show_in_website>1</show_in_website>
140
+ <show_in_store>1</show_in_store>
141
+ </enable_notification>
142
+ <mail_to_store_template translate="label">
143
+ <label>Email to Store Template</label>
144
+ <frontend_type>select</frontend_type>
145
+ <source_model>adminhtml/system_config_source_email_template</source_model>
146
+ <sort_order>1</sort_order>
147
+ <show_in_default>1</show_in_default>
148
+ <show_in_website>1</show_in_website>
149
+ <show_in_store>1</show_in_store>
150
+ <depends><enable_notification>1</enable_notification></depends>
151
+ </mail_to_store_template>
152
+ <recipient_email translate="label">
153
+ <label>Recipient's Email</label>
154
+ <frontend_type>text</frontend_type>
155
+ <sort_order>4</sort_order>
156
+ <show_in_default>1</show_in_default>
157
+ <show_in_website>1</show_in_website>
158
+ <show_in_store>1</show_in_store>
159
+ <depends><enable_notification>1</enable_notification></depends>
160
+ </recipient_email>
161
+ </fields>
162
+ </options>
163
+ </groups>
164
+ </padoo_testimonial>
165
+ </sections>
166
+ </config>
app/code/local/Padoo/Testimonial/sql/padoo_testimonial_setup/mysql4-install-1.0.0.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoo Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to info@padoo.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://padoo.com)
16
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
+ */
18
+
19
+ /**
20
+ * Installation script
21
+ *
22
+ * @category Padoo
23
+ * @package Padoo_Testimonial
24
+ * @author Tien Nguyen <tiennd@padoosoft.com>
25
+ */
26
+
27
+ /* @var $installer Mage_Core_Model_Resource_Setup */
28
+ $installer = $this;
29
+
30
+ $installer->startSetup();
31
+
32
+ $table = $installer->getTable('padoo_testimonial');
33
+
34
+ $installer->run("
35
+ DROP TABLE IF EXISTS {$table};
36
+ CREATE TABLE IF NOT EXISTS {$table} (
37
+ testimonial_id int(11) unsigned not null auto_increment,
38
+ testimonial_position int(11) DEFAULT 0,
39
+ testimonial_name varchar(50) NOT NULL DEFAULT '',
40
+ testimonial_email varchar(50) NOT NULL DEFAULT '',
41
+ testimonial_status smallint(6) NOT NULL DEFAULT '2',
42
+ testimonial_text TEXT not null,
43
+ testimonial_img varchar(128) DEFAULT NULL,
44
+ testimonial_sidebar tinyint(4) NOT NULL,
45
+ testimonial_date DATETIME DEFAULT NULL,
46
+ PRIMARY KEY(testimonial_id)
47
+ ) engine=InnoDB default charset=utf8;
48
+ ");
49
+
50
+ $installer->endSetup();
app/code/local/Padoo/Testimonial/sql/padoo_testimonial_setup/mysql4-upgrade-1.1.1-1.1.2.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Testimonial - Magento Extension
5
+ *
6
+ * @package Testimonial
7
+ * @category Padoo
8
+ * @copyright Copyright 2015 Padoo.
9
+ */
10
+
11
+ $installer = $this;
12
+ /* @var $installer Mage_Core_Model_Resource_Setup */
13
+
14
+ $configValuesMap = array(
15
+ 'padoo_testimonial/options/mail_to_store_template' => 'padoo_testimonial_options_mail_to_store_template',
16
+ );
17
+
18
+ foreach ($configValuesMap as $configPath=>$configValue) {
19
+ $installer->setConfigData($configPath, $configValue);
20
+ }
21
+
app/code/local/Padoo/Testimonial/sql/padoo_testimonial_setup/mysql4-upgrade-1.1.3-1.1.4.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Padoo Co.
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain it through the world-wide-web, please send
11
+ * an email to info@padoo.com so we can send you a copy immediately.
12
+ *
13
+ * @category Padoo
14
+ * @package Padoo_Testimonial
15
+ * @copyright Copyright (c) 2010-2012 Padoo Co. (http://padoo.com)
16
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
+ */
18
+
19
+ /**
20
+ * Installation script
21
+ *
22
+ * @category Padoo
23
+ * @package Padoo_Testimonial
24
+ * @author Tien Nguyen <tiennd@padoosoft.com>
25
+ */
26
+
27
+ /* @var $installer Mage_Core_Model_Resource_Setup */
28
+ $installer = $this;
29
+
30
+ $installer->startSetup();
31
+
32
+ $table = $installer->getTable('padoo_testimonial');
33
+
34
+ $installer->run("
35
+ DROP TABLE IF EXISTS {$table};
36
+ CREATE TABLE IF NOT EXISTS {$table} (
37
+ testimonial_id int(11) unsigned not null auto_increment,
38
+ testimonial_position int(11) DEFAULT 0,
39
+ testimonial_name varchar(50) NOT NULL DEFAULT '',
40
+ testimonial_email varchar(50) NOT NULL DEFAULT '',
41
+ testimonial_status smallint(6) NOT NULL DEFAULT '2',
42
+ testimonial_text TEXT not null,
43
+ testimonial_img varchar(128) DEFAULT NULL,
44
+ testimonial_sidebar tinyint(4) NOT NULL,
45
+ testimonial_date DATETIME DEFAULT NULL,
46
+ PRIMARY KEY(testimonial_id)
47
+ ) engine=InnoDB default charset=utf8;
48
+ ");
49
+
50
+ $installer->endSetup();
app/code/local/Padoo/Testimonial/sql/padoo_testimonial_setup/mysql4-upgrade-1.2.1-1.2.2.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+ /* @var $installer Mage_Core_Model_Resource_Setup */
5
+
6
+ $installer->startSetup();
7
+
8
+ $installer->getConnection()->addColumn($installer->getTable('padoo_testimonial'), 'store_id',
9
+ 'varchar(255) NOT NULL AFTER testimonial_sidebar'
10
+ );
11
+
12
+ $installer->endSetup();
app/design/adminhtml/default/default/layout/padoo_testimonial.xml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="1.0.0">
3
+
4
+ <adminhtml_testimonial_index>
5
+ <reference name="content">
6
+ <block type="padoo_testimonial/adminhtml_testimonial" name="testimonial" />
7
+ </reference>
8
+ </adminhtml_testimonial_index>
9
+
10
+ </layout>
app/design/frontend/default/default/layout/padoo_testimonial.xml ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="1.0.0">
3
+ <default>
4
+ <reference name="head">
5
+ <action method="addCss"><stylesheet>css/testimonial/testimonial.css</stylesheet></action>
6
+ <action method="addItem"><type>js</type><name>padoo/jquery.js</name></action>
7
+ <action method="addItem"><type>js</type><name>padoo/jquery_noconflict.js</name></action>
8
+ <action method="addItem"><type>skin_js</type><name>js/padoo/jquery.cycle.js</name><params/></action>
9
+ </reference>
10
+ <reference name="top.links">
11
+ <action ifconfig="padoo_testimonial/general/enable_top_link" method="addLink" translate="label title" module="padoo_testimonial"><label>Testimonials</label><url helper="padoo_testimonial/getTestimonialUrl" /><title>Testimonials</title><prepare/><urlParams/><position>11</position><aParams><target>_blank</target> </aParams></action>
12
+ </reference>
13
+ <reference name="right">
14
+ <block type="padoo_testimonial/testimonial" name="right.testimonials">
15
+ <action method="setTemplate" ifconfig="padoo_testimonial/general/enable_box_right">
16
+ <template>padoo/testimonial/testimonials_box.phtml</template>
17
+ </action>
18
+ <action method="setSidebar"><sidebar>1</sidebar></action>
19
+ </block>
20
+ </reference>
21
+ </default>
22
+
23
+ <padoo_testimonial_index_index>
24
+ <label>Testimonials</label>
25
+ <reference name="head">
26
+ <action method="setTitle"><title>Testimonials</title></action>
27
+ <action method="addCss"><stylesheet>css/testimonial/testimonial.css</stylesheet></action>
28
+ <action method="addItem"><type>js</type><name>padoo/jquery.js</name></action>
29
+ <action method="addItem"><type>js</type><name>padoo/jquery_noconflict.js</name></action>
30
+ <action method="addItem"><type>skin_js</type><name>js/padoo/jquery.cycle.js</name><params/></action>
31
+ </reference>
32
+ <reference name="root">
33
+ <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
34
+ </reference>
35
+ <reference name="content">
36
+ <block type="padoo_testimonial/testimonial" name="testimonials" template="padoo/testimonial/testimonials.phtml" />
37
+ </reference>
38
+ </padoo_testimonial_index_index>
39
+
40
+ <padoo_testimonial_submit_index>
41
+ <label>Testimonials</label>
42
+ <reference name="head">
43
+ <action method="setTitle"><title>Submit Testimonial</title></action>
44
+ <action method="addCss"><stylesheet>css/testimonial/testimonial.css</stylesheet></action>
45
+ <action method="addItem"><type>js</type><name>padoo/jquery.js</name></action>
46
+ <action method="addItem"><type>js</type><name>padoo/jquery_noconflict.js</name></action>
47
+ <action method="addItem"><type>skin_js</type><name>js/padoo/jquery.cycle.js</name><params/></action>
48
+ </reference>
49
+ <reference name="root">
50
+ <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
51
+ </reference>
52
+ <reference name="content">
53
+ <block type="padoo_testimonial/testimonial" name="testimonials" template="padoo/testimonial/submit.phtml">
54
+ <!-- Code Start For Display Captcha on Register page -->
55
+ <block type="captcha/captcha" name="captcha">
56
+ <reference name="head">
57
+ <action method="addJs"><file>mage/captcha.js</file></action>
58
+ </reference>
59
+ <action method="setFormId"><formId>padoo_testimonial</formId></action>
60
+ <action method="setImgWidth"><width>230</width></action>
61
+ <action method="setImgHeight"><width>50</width></action>
62
+ </block>
63
+ </block>
64
+ <!-- Code End For Display Captcha on Register page-->
65
+ </reference>
66
+ </padoo_testimonial_submit_index>
67
+ </layout>
app/etc/modules/Padoo_Testimonial.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <config>
3
+ <modules>
4
+ <Padoo_Testimonial>
5
+ <active>true</active>
6
+ <codePool>local</codePool>
7
+ </Padoo_Testimonial>
8
+ </modules>
9
+ </config>
app/locale/en_US/Padoo_Testimonial.csv ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ "Write your testimonial","Write your testimonial"
2
+ "Name","Name"
3
+ "Email","Email"
4
+ "Upload Images","Upload Images"
5
+ "Send","Send"
6
+ "Reset","Reset"
7
+ "Testimonials","Testimonials"
8
+ "Submit your testimonial","Submit your testimonial"
9
+ "View All Testimonials","View All Testimonials"
js/padoo/checkValue.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ function checkValue(el){
2
+ for (var k=1; k<9; k++){
3
+ if((el.value == $("onepagecheckout_positions_position"+k).value) && (el.id != "onepagecheckout_positions_position"+k) && (el.value!="")){
4
+ el.value = "";
5
+ alert("This field already exists. Please choose other field !");
6
+ break;
7
+ }
8
+ }
9
+
10
+ }
js/padoo/jquery.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ /*! jQuery v@1.8.1 jquery.com | jquery.org/license */
2
+ (function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.1",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":a.toString().replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||f.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return typeof a=="object"?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length||!d)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,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%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||++p.uuid:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")===0&&(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)~f.indexOf(" "+b[g]+" ")||(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>-1)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,""+d),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},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(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,k,l,m,n=(p._data(this,"events")||{})[c.type]||[],o=n.delegateCount,q=[].slice.call(arguments),r=!c.exclusive&&!c.namespace,s=p.event.special[c.type]||{},t=[];q[0]=c,c.delegateTarget=this;if(s.preDispatch&&s.preDispatch.call(this,c)===!1)return;if(o&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<o;d++)k=n[d],l=k.selector,h[l]===b&&(h[l]=p(l,this).index(f)>=0),h[l]&&j.push(k);j.length&&t.push({elem:f,matches:j})}n.length>o&&t.push({elem:this,matches:n.slice(o)});for(d=0;d<t.length&&!c.isPropagationStopped();d++){i=t[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){k=i.matches[e];if(r||!c.namespace&&!k.namespace||c.namespace_re&&c.namespace_re.test(k.namespace))c.data=k.data,c.handleObj=k,g=((p.event.special[k.origType]||{}).handle||k.handler).apply(i.elem,q),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return s.postDispatch&&s.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function $(a,b,c,d){c=c||[],b=b||q;var e,f,g,j,k=b.nodeType;if(k!==1&&k!==9)return[];if(!a||typeof a!="string")return c;g=h(b);if(!g&&!d)if(e=L.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&i(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return u.apply(c,t.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&X&&b.getElementsByClassName)return u.apply(c,t.call(b.getElementsByClassName(j),0)),c}return bk(a,b,c,d,g)}function _(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function ba(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bb(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bc(a,b,c,d){var e,g,h,i,j,k,l,m,n,p,r=!c&&b!==q,s=(r?"<s>":"")+a.replace(H,"$1<s>"),u=y[o][s];if(u)return d?0:t.call(u,0);j=a,k=[],m=0,n=f.preFilter,p=f.filter;while(j){if(!e||(g=I.exec(j)))g&&(j=j.slice(g[0].length),h.selector=l),k.push(h=[]),l="",r&&(j=" "+j);e=!1;if(g=J.exec(j))l+=g[0],j=j.slice(g[0].length),e=h.push({part:g.pop().replace(H," "),string:g[0],captures:g});for(i in p)(g=S[i].exec(j))&&(!n[i]||(g=n[i](g,b,c)))&&(l+=g[0],j=j.slice(g[0].length),e=h.push({part:i,string:g.shift(),captures:g}));if(!e)break}return l&&(h.selector=l),d?j.length:j?$.error(a):t.call(y(s,k),0)}function bd(a,b,e,f){var g=b.dir,h=s++;return a||(a=function(a){return a===e}),b.first?function(b){while(b=b[g])if(b.nodeType===1)return a(b)&&b}:f?function(b){while(b=b[g])if(b.nodeType===1&&a(b))return b}:function(b){var e,f=h+"."+c,i=f+"."+d;while(b=b[g])if(b.nodeType===1){if((e=b[o])===i)return b.sizset;if(typeof e=="string"&&e.indexOf(f)===0){if(b.sizset)return b}else{b[o]=i;if(a(b))return b.sizset=!0,b;b.sizset=!1}}}}function be(a,b){return a?function(c){var d=b(c);return d&&a(d===!0?c:d)}:b}function bf(a,b,c){var d,e,g=0;for(;d=a[g];g++)f.relative[d.part]?e=bd(e,f.relative[d.part],b,c):e=be(e,f.filter[d.part].apply(null,d.captures.concat(b,c)));return e}function bg(a){return function(b){var c,d=0;for(;c=a[d];d++)if(c(b))return!0;return!1}}function bh(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)$(a,b[e],c,d)}function bi(a,b,c,d,e,g){var h,i=f.setFilters[b.toLowerCase()];return i||$.error(b),(a||!(h=e))&&bh(a||"*",d,h=[],e),h.length>0?i(h,c,g):[]}function bj(a,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q,r,s=0,t=a.length,v=S.POS,w=new RegExp("^"+v.source+"(?!"+A+")","i"),x=function(){var a=1,c=arguments.length-2;for(;a<c;a++)arguments[a]===b&&(n[a]=b)};for(;s<t;s++){f=a[s],g="",m=e;for(h=0,i=f.length;h<i;h++){j=f[h],k=j.string;if(j.part==="PSEUDO"){v.exec(""),l=0;while(n=v.exec(k)){o=!0,p=v.lastIndex=n.index+n[0].length;if(p>l){g+=k.slice(l,n.index),l=p,q=[c],J.test(g)&&(m&&(q=m),m=e);if(r=O.test(g))g=g.slice(0,-5).replace(J,"$&*"),l++;n.length>1&&n[0].replace(w,x),m=bi(g,n[1],n[2],q,m,r)}g=""}}o||(g+=k),o=!1}g?J.test(g)?bh(g,m||[c],d,e):$(g,c,d,e?e.concat(m):m):u.apply(d,m)}return t===1?d:$.uniqueSort(d)}function bk(a,b,e,g,h){a=a.replace(H,"$1");var i,k,l,m,n,o,p,q,r,s,v=bc(a,b,h),w=b.nodeType;if(S.POS.test(a))return bj(v,b,e,g);if(g)i=t.call(g,0);else if(v.length===1){if((o=t.call(v[0],0)).length>2&&(p=o[0]).part==="ID"&&w===9&&!h&&f.relative[o[1].part]){b=f.find.ID(p.captures[0].replace(R,""),b,h)[0];if(!b)return e;a=a.slice(o.shift().string.length)}r=(v=N.exec(o[0].string))&&!v.index&&b.parentNode||b,q="";for(n=o.length-1;n>=0;n--){p=o[n],s=p.part,q=p.string+q;if(f.relative[s])break;if(f.order.test(s)){i=f.find[s](p.captures[0].replace(R,""),r,h);if(i==null)continue;a=a.slice(0,a.length-q.length)+q.replace(S[s],""),a||u.apply(e,t.call(i,0));break}}}if(a){k=j(a,b,h),c=k.dirruns++,i==null&&(i=f.find.TAG("*",N.test(a)&&b.parentNode||b));for(n=0;m=i[n];n++)d=k.runs++,k(m)&&e.push(m)}return e}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=a.document,r=q.documentElement,s=0,t=[].slice,u=[].push,v=function(a,b){return a[o]=b||!0,a},w=function(){var a={},b=[];return v(function(c,d){return b.push(c)>f.cacheLength&&delete a[b.shift()],a[c]=d},a)},x=w(),y=w(),z=w(),A="[\\x20\\t\\r\\n\\f]",B="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",C=B.replace("w","w#"),D="([*^$|!~]?=)",E="\\["+A+"*("+B+")"+A+"*(?:"+D+A+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+C+")|)|)"+A+"*\\]",F=":("+B+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+E+")|[^:]|\\\\.)*|.*))\\)|)",G=":(nth|eq|gt|lt|first|last|even|odd)(?:\\(((?:-\\d)?\\d*)\\)|)(?=[^-]|$)",H=new RegExp("^"+A+"+|((?:^|[^\\\\])(?:\\\\.)*)"+A+"+$","g"),I=new RegExp("^"+A+"*,"+A+"*"),J=new RegExp("^"+A+"*([\\x20\\t\\r\\n\\f>+~])"+A+"*"),K=new RegExp(F),L=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,M=/^:not/,N=/[\x20\t\r\n\f]*[+~]/,O=/:not\($/,P=/h\d/i,Q=/input|select|textarea|button/i,R=/\\(?!\\)/g,S={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),NAME:new RegExp("^\\[name=['\"]?("+B+")['\"]?\\]"),TAG:new RegExp("^("+B.replace("w","w*")+")"),ATTR:new RegExp("^"+E),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|nth|last|first)-child(?:\\("+A+"*(even|odd|(([+-]|)(\\d*)n|)"+A+"*(?:([+-]|)"+A+"*(\\d+)|))"+A+"*\\)|)","i"),POS:new RegExp(G,"ig"),needsContext:new RegExp("^"+A+"*[>+~]|"+G,"i")},T=function(a){var b=q.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},U=T(function(a){return a.appendChild(q.createComment("")),!a.getElementsByTagName("*").length}),V=T(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),W=T(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),X=T(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),Y=T(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",r.insertBefore(a,r.firstChild);var b=q.getElementsByName&&q.getElementsByName(o).length===2+q.getElementsByName(o+0).length;return e=!q.getElementById(o),r.removeChild(a),b});try{t.call(r.childNodes,0)[0].nodeType}catch(Z){t=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}$.matches=function(a,b){return $(a,null,null,b)},$.matchesSelector=function(a,b){return $(b,null,null,[a]).length>0},g=$.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=g(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=g(b);return c},h=$.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},i=$.contains=r.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:r.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},$.attr=function(a,b){var c,d=h(a);return d||(b=b.toLowerCase()),f.attrHandle[b]?f.attrHandle[b](a):W||d?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},f=$.selectors={cacheLength:50,createPseudo:v,match:S,order:new RegExp("ID|TAG"+(Y?"|NAME":"")+(X?"|CLASS":"")),attrHandle:V?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:e?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:U?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(R,""),a[3]=(a[4]||a[5]||"").replace(R,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||$.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&$.error(a[0]),a},PSEUDO:function(a,b,c){var d,e;if(S.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(d=a[4])K.test(d)&&(e=bc(d,b,c,!0))&&(e=d.indexOf(")",d.length-e)-d.length)&&(d=d.slice(0,e),a[0]=a[0].slice(0,e)),a[2]=d;return a.slice(0,3)}},filter:{ID:e?function(a){return a=a.replace(R,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(R,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(R,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=x[o][a];return b||(b=x(a,new RegExp("(^|"+A+")"+a+"("+A+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return b?function(d){var e=$.attr(d,a),f=e+"";if(e==null)return b==="!=";switch(b){case"=":return f===c;case"!=":return f!==c;case"^=":return c&&f.indexOf(c)===0;case"*=":return c&&f.indexOf(c)>-1;case"$=":return c&&f.substr(f.length-c.length)===c;case"~=":return(" "+f+" ").indexOf(c)>-1;case"|=":return f===c||f.substr(0,c.length+1)===c+"-"}}:function(b){return $.attr(b,a)!=null}},CHILD:function(a,b,c,d){if(a==="nth"){var e=s++;return function(a){var b,f,g=0,h=a;if(c===1&&d===0)return!0;b=a.parentNode;if(b&&(b[o]!==e||!a.sizset)){for(h=b.firstChild;h;h=h.nextSibling)if(h.nodeType===1){h.sizset=++g;if(h===a)break}b[o]=e}return f=a.sizset-d,c===0?f===0:f%c===0&&f/c>=0}}return function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b,c,d){var e,g=f.pseudos[a]||f.pseudos[a.toLowerCase()];return g||$.error("unsupported pseudo: "+a),g[o]?g(b,c,d):g.length>1?(e=[a,a,"",b],function(a){return g(a,0,e)}):g}},pseudos:{not:v(function(a,b,c){var d=j(a.replace(H,"$1"),b,c);return function(a){return!d(a)}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!f.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},contains:v(function(a){return function(b){return(b.textContent||b.innerText||g(b)).indexOf(a)>-1}}),has:v(function(a){return function(b){return $(a,b).length>0}}),header:function(a){return P.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:_("radio"),checkbox:_("checkbox"),file:_("file"),password:_("password"),image:_("image"),submit:ba("submit"),reset:ba("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return Q.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b,c){return c?a.slice(1):[a[0]]},last:function(a,b,c){var d=a.pop();return c?a:[d]},even:function(a,b,c){var d=[],e=c?1:0,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},odd:function(a,b,c){var d=[],e=c?0:1,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},lt:function(a,b,c){return c?a.slice(+b):a.slice(0,+b)},gt:function(a,b,c){return c?a.slice(0,+b+1):a.slice(+b+1)},eq:function(a,b,c){var d=a.splice(+b,1);return c?a:d}}},k=r.compareDocumentPosition?function(a,b){return a===b?(l=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return l=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bb(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bb(e[j],f[j]);return j===c?bb(a,f[j],-1):bb(e[j],b,1)},[0,0].sort(k),m=!l,$.uniqueSort=function(a){var b,c=1;l=m,a.sort(k);if(l)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},$.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},j=$.compile=function(a,b,c){var d,e,f,g=z[o][a];if(g&&g.context===b)return g;d=bc(a,b,c);for(e=0,f=d.length;e<f;e++)d[e]=bf(d[e],b,c);return g=z(a,bg(d)),g.context=b,g.runs=g.dirruns=0,g},q.querySelectorAll&&function(){var a,b=bk,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[],f=[":active"],g=r.matchesSelector||r.mozMatchesSelector||r.webkitMatchesSelector||r.oMatchesSelector||r.msMatchesSelector;T(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+A+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),T(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+A+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=e.length&&new RegExp(e.join("|")),bk=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a)))if(d.nodeType===9)try{return u.apply(f,t.call(d.querySelectorAll(a),0)),f}catch(i){}else if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){var j,k,l,m=d.getAttribute("id"),n=m||o,p=N.test(a)&&d.parentNode||d;m?n=n.replace(c,"\\$&"):d.setAttribute("id",n),j=bc(a,d,h),n="[id='"+n+"']";for(k=0,l=j.length;k<l;k++)j[k]=n+j[k].selector;try{return u.apply(f,t.call(p.querySelectorAll(j.join(",")),0)),f}catch(i){}finally{m||d.removeAttribute("id")}}return b(a,d,f,g,h)},g&&(T(function(b){a=g.call(b,"div");try{g.call(b,"[test!='']:sizzle"),f.push(S.PSEUDO.source,S.POS.source,"!=")}catch(c){}}),f=new RegExp(f.join("|")),$.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!h(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=g.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return $(c,null,null,[b]).length>0})}(),f.setFilters.nth=f.setFilters.eq,f.filters=f.pseudos,$.attr=p.attr,p.find=$,p.expr=$.selectors,p.expr[":"]=p.expr.pseudos,p.unique=$.uniqueSort,p.text=$.getText,p.isXMLDoc=$.isXML,p.contains=$.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{cj=f.href}catch(cy){cj=e.createElement("a"),cj.href="",cj=cj.href}ck=ct.exec(cj.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:cj,isLocal:cn.test(ck[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=""+(c||y),k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,ck[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]==ck[1]&&i[2]==ck[2]&&(i[3]||(i[1]==="http:"?80:443))==(ck[3]||(ck[1]==="http:"?80:443)))),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e,f=this.createTween(a,b),g=cQ.exec(b),h=f.cur(),i=+h||0,j=1;if(g){c=+g[2],d=g[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&i){i=p.css(f.elem,a,!0)||c||1;do e=j=j||".5",i=i/j,p.style(f.elem,a,i+d),j=f.cur()/h;while(j!==1&&j!==e)}f.unit=d,f.start=i,f.end=g[1]?i+(g[1]+1)*c:c}return f}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j,k,l,m=this[0],n=m&&m.ownerDocument;if(!n)return;return(e=n.body)===m?p.offset.bodyOffset(m):(d=n.documentElement,p.contains(d,m)?(c=m.getBoundingClientRect(),f=da(n),g=d.clientTop||e.clientTop||0,h=d.clientLeft||e.clientLeft||0,i=f.pageYOffset||d.scrollTop,j=f.pageXOffset||d.scrollLeft,k=c.top+i-g,l=c.left+j-h,{top:k,left:l}):{top:0,left:0})},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
js/padoo/jquery_noconflict.js ADDED
@@ -0,0 +1 @@
 
1
+ jQuery.noConflict();
js/padoo/scriptaculous.js ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // script.aculo.us scriptaculous.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008
2
+
3
+ // Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
4
+ //
5
+ // Permission is hereby granted, free of charge, to any person obtaining
6
+ // a copy of this software and associated documentation files (the
7
+ // "Software"), to deal in the Software without restriction, including
8
+ // without limitation the rights to use, copy, modify, merge, publish,
9
+ // distribute, sublicense, and/or sell copies of the Software, and to
10
+ // permit persons to whom the Software is furnished to do so, subject to
11
+ // the following conditions:
12
+ //
13
+ // The above copyright notice and this permission notice shall be
14
+ // included in all copies or substantial portions of the Software.
15
+ //
16
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ //
24
+ // For details, see the script.aculo.us web site: http://script.aculo.us/
25
+
26
+ var Scriptaculous = {
27
+ Version: '1.8.1',
28
+ require: function(libraryName) {
29
+ // inserting via DOM fails in Safari 2.0, so brute force approach
30
+ document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
31
+ },
32
+ REQUIRED_PROTOTYPE: '1.6.0',
33
+ load: function() {
34
+ function convertVersionString(versionString){
35
+ var r = versionString.split('.');
36
+ return parseInt(r[0])*100000 + parseInt(r[1])*1000 + parseInt(r[2]);
37
+ }
38
+
39
+ if((typeof Prototype=='undefined') ||
40
+ (typeof Element == 'undefined') ||
41
+ (typeof Element.Methods=='undefined') ||
42
+ (convertVersionString(Prototype.Version) <
43
+ convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
44
+ throw("script.aculo.us requires the Prototype JavaScript framework >= " +
45
+ Scriptaculous.REQUIRED_PROTOTYPE);
46
+
47
+ $A(document.getElementsByTagName("script")).findAll( function(s) {
48
+ return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))
49
+ }).each( function(s) {
50
+ var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,'');
51
+ var includes = s.src.match(/\?.*load=([a-z,]*)/);
52
+ (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
53
+ function(include) { Scriptaculous.require(path+include+'.js') });
54
+ });
55
+ }
56
+ }
57
+
58
+ Scriptaculous.load();
js/padoo/simplecheckout.js ADDED
@@ -0,0 +1,360 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Magento SimpleCheckout Extension
3
+ *
4
+ * @copyright: PadoosoftTeam (http://www.padoosoft.com)
5
+ * @version: 1.0
6
+ *
7
+ */
8
+
9
+ function startLoadingData(only_review_block){
10
+ if(only_review_block){
11
+ checkoutoverlay.createOverlay('review', $('onecheckout-review'));
12
+ }else{
13
+ if(update_shipping > 0)checkoutoverlay.createOverlay('shipping_methods', $('onecheckout_shipping_method'));
14
+ if(update_payment > 0)checkoutoverlay.createOverlay('payment_methods', $('onecheckout_payment_method'));
15
+ if(update_review > 0)checkoutoverlay.createOverlay('review', $('onecheckout-review'));
16
+ }
17
+ }
18
+
19
+ function stopLoadingData(){
20
+ checkoutoverlay.hideOverlay();
21
+ }
22
+
23
+
24
+ function shippingAddressChanged(){
25
+
26
+ if(!$('billing_use_for_shipping_yes').checked){
27
+ sendShippingAddress();
28
+ }
29
+ }
30
+
31
+ function billingAddressChanged(){
32
+ sendBillingAddress();
33
+ }
34
+
35
+ function changeShippingAddressMode(){
36
+
37
+ $flag = this.checked;
38
+
39
+ if($flag){
40
+ $('shipping-address-form').style.display = 'none';
41
+ sendBillingAddress();
42
+ }else{
43
+ $('shipping-address-form').style.display = 'block';
44
+ sendShippingAddress();
45
+ };
46
+
47
+ }
48
+
49
+ function buildQueryString(elements){
50
+
51
+ var q = '';
52
+
53
+ for(var i = 0;i < elements.length;i++){
54
+ if((elements[i].type == 'checkbox' || elements[i].type == 'radio') && !elements[i].checked){
55
+ continue;
56
+ }
57
+ q += elements[i].name + '=' + elements[i].value;
58
+
59
+ if(i+1 < elements.length){
60
+ q += '&';
61
+ }
62
+
63
+ }
64
+ return q;
65
+ }
66
+ function updateShopping(container){
67
+ startLoadingData();
68
+ var editItemUrl = checkoutUpdateUrl;
69
+ var q = prepairParams(container);
70
+ updateFormData(editItemUrl, q);
71
+ }
72
+ function deleteShopping(id){
73
+ startLoadingData();
74
+ var url=checkoutDeleteUrl+'id/'+id;
75
+ updateFormData(url, '');
76
+ }
77
+ function prepairParams(container) {
78
+ var params = {};
79
+ var fields = $(container).select('input', 'select', 'textarea');
80
+ var data = Form.serializeElements(fields, true);
81
+ data = $H(data);
82
+ var query ="";
83
+ if (data) {
84
+ data.each(function(value) {
85
+ if(query !="")
86
+ query +="&"
87
+ query +=value[0] + "=" + value[1];
88
+
89
+ });
90
+ }
91
+ return query;
92
+ }
93
+ function update_coupon(remove){
94
+ if($('coupon_code').value == ""){
95
+ alert('Please enter Coupon code !');
96
+ return;
97
+ }
98
+ startLoadingData();
99
+ if (remove){
100
+
101
+
102
+ $('remove-coupone').value = "1";
103
+ var q = buildQueryString($$('#coupon_code, #remove-coupone'));
104
+
105
+ return updateFormData(checkoutCouponUrl, q);
106
+ }
107
+ else{
108
+
109
+ $('remove-coupone').value = "0";
110
+ var q = buildQueryString($$('#coupon_code, #remove-coupone'));
111
+
112
+ return updateFormData(checkoutCouponUrl, q);
113
+ }
114
+ }
115
+
116
+ function elogin(e, p, url){
117
+
118
+ $('elogin-loading').style.display = 'block';
119
+ $('elogin-buttons').style.display = 'none';
120
+
121
+ var request = new Ajax.Request(url,
122
+ {
123
+ method:'post',
124
+ parameters:'username='+e+'&password='+p,
125
+ onSuccess: function(transport){ var response = eval('('+(transport.responseText || false)+')');
126
+
127
+ if(response.error){
128
+ $('elogin-message').innerHTML = response.message;
129
+ $('elogin-loading').style.display = 'none';
130
+ $('elogin-buttons').style.display = 'block';
131
+ }else{
132
+
133
+ location.reload();
134
+
135
+ }
136
+
137
+ },
138
+ onFailure: function(){ alert('Something went wrong...');stopLoadingData(); }
139
+ });
140
+ }
141
+
142
+ function updateFormData(url, q){
143
+
144
+ var request = new Ajax.Request(url,
145
+ {
146
+ method:'post',
147
+ parameters:q,
148
+ onSuccess: function(transport){ var response = eval('('+(transport.responseText || false)+')');
149
+
150
+ if(response.error){
151
+ if(response.review){
152
+ $('onecheckout-review-info').update(response.review);
153
+ }
154
+ stopLoadingData();
155
+ alert(response.message);
156
+ //coming soon...
157
+ }else{
158
+ if(response.shipping_rates && update_shipping > 0){
159
+ $('onecheckout-shippingmethod-available').update(response.shipping_rates);
160
+ }
161
+ if(response.payments && update_payment > 0){
162
+ $('onecheckout-paymentmethod-available').update(response.payments);
163
+ }
164
+ if(response.review && update_review >0){
165
+
166
+ var data = String(response.review)
167
+ if(data =="no_data"){
168
+ window.location = defaultCart;
169
+ return ;
170
+ }
171
+ $('onecheckout-review-info').update(response.review);
172
+ }
173
+
174
+ if(response.coupon){
175
+ $('onecheckout-coupon').update(response.coupon);
176
+ }
177
+ if(response.shippingMethods){
178
+ $('onecheckout_shipping_method').update(response.shippingMethods);
179
+ }
180
+
181
+ stopLoadingData();
182
+ }
183
+
184
+ },
185
+ onFailure: function(){ alert('Something went wrong...');stopLoadingData(); }
186
+ });
187
+
188
+ }
189
+
190
+
191
+ function sendBillingAddress(){
192
+
193
+ startLoadingData();
194
+
195
+ var q = buildQueryString($$('#onecheckout-addressbilling input, #onecheckout-addressbilling select, #onecheckout-addressbilling textarea, #billing_use_for_shipping_yes'));
196
+
197
+ if($('billing_use_for_shipping_yes') && $('billing_use_for_shipping_yes').checked){
198
+ return updateFormData(checkoutDefaultUrl, q);
199
+ }
200
+
201
+ return updateFormData(checkoutBillingUrl, q);
202
+
203
+
204
+ }
205
+
206
+ function sendShippingAddress(){
207
+
208
+ startLoadingData();
209
+
210
+ var q = buildQueryString($$('#shipping-address-form input, #shipping-address-form select, #shipping-address-form textarea'));
211
+
212
+ return updateFormData(checkoutShippingUrl, q);
213
+
214
+ }
215
+
216
+ function sendMethods(){
217
+
218
+ startLoadingData(true);
219
+
220
+ var q = '';
221
+
222
+ q += buildQueryString($$('#onecheckout-shippingmethod input, #onecheckout-shippingmethod select, #onecheckout-shippingmethod textarea'));
223
+ q += '&';
224
+ q += buildQueryString($$('#onecheckout-paymentmethod input, #onecheckout-paymentmethod select, #onecheckout-paymentmethod textarea'));
225
+
226
+ return updateFormData(checkoutTotalsUrl, q);
227
+
228
+ }
229
+
230
+ var checkoutoverlay = {
231
+ overlay:{},
232
+ hideOverlay:function(){
233
+ for(i in this.overlay){
234
+ this.overlay[i].style.display = 'none';
235
+ }
236
+ },
237
+ createOverlay:function(id, container){
238
+
239
+ if(this.overlay['sln-overlay-'+id]){
240
+
241
+ var overlay = this.overlay['sln-overlay-'+id];
242
+
243
+ }else{
244
+
245
+ var overlay = document.createElement('div');
246
+ overlay.id = 'sln-overlay-'+id;
247
+ var span = document.createElement('span');
248
+ span.className = "img-load";
249
+ overlay.appendChild(span);
250
+ container.appendChild(overlay);
251
+
252
+ this.overlay['sln-overlay-'+id] = overlay;
253
+ }
254
+
255
+ if(typeof SLN_IS_IE == 'boolean'){
256
+ container.style.position = 'relative';
257
+ }else{
258
+ SLN_IS_IE = false;
259
+ }
260
+
261
+ overlay.style.top = 0;
262
+ overlay.style.left = 0;
263
+ overlay.style.width = container.offsetWidth + (SLN_IS_IE ? 1 : 0) + 'px';
264
+ overlay.style.height = container.offsetHeight + 'px';
265
+ overlay.style.display = 'block';
266
+ overlay.style.background = '#ffffff';
267
+ overlay.style.position = 'absolute';
268
+ overlay.style.opacity = '0.7';
269
+ overlay.style.filter = 'alpha(opacity: 70)';
270
+
271
+ }
272
+ }
273
+
274
+
275
+
276
+
277
+ var paymentForm = Class.create();
278
+ paymentForm.prototype = {
279
+ beforeInitFunc:$H({}),
280
+ afterInitFunc:$H({}),
281
+ beforeValidateFunc:$H({}),
282
+ afterValidateFunc:$H({}),
283
+ initialize: function(formId){
284
+ this.form = $(this.formId = formId);
285
+ },
286
+ init : function () {
287
+ //var elements = Form.getElements(this.form);
288
+
289
+ var elements = $$('#onecheckout-paymentmethod-available input, #onecheckout-paymentmethod-available select, #onecheckout-paymentmethod-available textarea');
290
+
291
+ /*if ($(this.form)) {
292
+ $(this.form).observe('submit', function(event){this.save();Event.stop(event);}.bind(this));
293
+ }*/
294
+ var method = null;
295
+ for (var i=0; i<elements.length; i++) {
296
+ if (elements[i].name=='payment[method]') {
297
+ if (elements[i].checked) {
298
+ method = elements[i].value;
299
+ }
300
+ }
301
+ elements[i].setAttribute('autocomplete','off');
302
+ }
303
+ if (method) this.switchMethod(method);
304
+ },
305
+
306
+ switchMethod: function(method){
307
+ if (this.currentMethod && $('payment_form_'+this.currentMethod)) {
308
+
309
+ var form = $('payment_form_'+this.currentMethod);
310
+ form.style.display = 'none';
311
+ var elements = form.getElementsByTagName('input');
312
+ for (var i=0; i<elements.length; i++) elements[i].disabled = true;
313
+ var elements = form.getElementsByTagName('select');
314
+ for (var i=0; i<elements.length; i++) elements[i].disabled = true;
315
+
316
+
317
+ }
318
+ if ($('payment_form_'+method)){
319
+ var form = $('payment_form_'+method);
320
+ form.style.display = '';
321
+ var elements = form.getElementsByTagName('input');
322
+ for (var i=0; i<elements.length; i++) elements[i].disabled = false;
323
+ var elements = form.getElementsByTagName('select');
324
+ for (var i=0; i<elements.length; i++) elements[i].disabled = false;
325
+ this.currentMethod = method;
326
+ }
327
+ }
328
+ }
329
+ var billing = Class.create();
330
+ billing = billing.prototype = {
331
+ newAddress: function(isNew){
332
+ if (isNew) {
333
+
334
+ $('billing-new-address-form').select('input[type=text], select, textarea').each(function(e){if(!e.getAttribute('disabled') && !e.getAttribute('readonly')){e.value = ''};});
335
+
336
+ Element.show('billing-new-address-form');
337
+ } else {
338
+ Element.hide('billing-new-address-form');
339
+ }
340
+
341
+ billingAddressChanged();
342
+ }
343
+ }
344
+ var shipping = Class.create();
345
+ shipping = billing.prototype = {
346
+ newAddress: function(isNew){
347
+ if (isNew) {
348
+
349
+ $('shipping-new-address-form').select('input[type=text], select, textarea').each(function(e){if(!e.getAttribute('disabled') && !e.getAttribute('readonly')){e.value = ''};});
350
+
351
+ Element.show('shipping-new-address-form');
352
+ } else {
353
+ Element.hide('shipping-new-address-form');
354
+ }
355
+
356
+ shippingAddressChanged();
357
+
358
+ //shipping.setSameAsBilling(false);
359
+ }
360
+ }
js/padoo/storelocator.js ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ var Storelocator = Class.create();
3
+ Storelocator.prototype = {
4
+ initialize: function(latitude, longtitude, zoom_value){
5
+
6
+ // latitude = parseFloat($('latitude').getValue());
7
+ // longtitude = parseFloat($('longtitude').getValue());
8
+ this.stockholm = new google.maps.LatLng(latitude, longtitude);
9
+ this.zoom_value = zoom_value;
10
+ this.marker = null;
11
+ this.map = null;
12
+ //var zoom_value = parseInt($('zoom_level').getValue());
13
+ google.maps.event.addDomListener(window, 'load', this.initGoogleMap.bind(this));
14
+
15
+
16
+ },
17
+ initGoogleMap: function(){
18
+ var mapOptions = {
19
+ zoom: this.zoom_value,
20
+ mapTypeId: google.maps.MapTypeId.ROADMAP,
21
+ center: this.stockholm
22
+ };
23
+
24
+ this.map = new google.maps.Map($('googleMap'),
25
+ mapOptions);
26
+
27
+ this.marker = new google.maps.Marker({
28
+ map:this.map,
29
+ draggable:true,
30
+ position: this.stockholm
31
+ });
32
+ google.maps.event.addListener(this.marker, 'dragend', function(event) {
33
+ $('store_latitude_value').value = event.latLng.lat();
34
+ $('store_longtitude_value').value = event.latLng.lng();
35
+ $('latitude').value = event.latLng.lat();
36
+ $('longtitude').value = event.latLng.lng();
37
+ $('latitude').setStyle({
38
+ background: 'rgb(250, 230, 180)'
39
+ });
40
+ $('longtitude').setStyle({
41
+ background: 'rgb(250, 230, 180)'
42
+ });
43
+ }.bind(this));
44
+ google.maps.event.addListener(this.map, 'zoom_changed', function() {
45
+ var zoomLevel = this.map.getZoom();
46
+ $('zoom_level_value').value = zoomLevel;
47
+ $('zoom_level').value = zoomLevel;
48
+ $('zoom_level').setStyle({
49
+ background: 'rgb(250, 230, 180)'
50
+ });
51
+ }.bind(this));
52
+ },
53
+ reSizeMap: function (){
54
+ // map = this.map;
55
+
56
+ },
57
+ reLoadMap: function (){
58
+ // var service = new google.maps.places.PlacesService(map);
59
+ // service.textSearch(request, this.processSearchResults.bind(this));
60
+ }
61
+ }
62
+
63
+ var StorelocatorFrontEnd = Class.create();
64
+ StorelocatorFrontEnd.prototype = {
65
+ initialize: function(latitude, longtitude, zoom_value, idMap){
66
+ this.myLatlng = new google.maps.LatLng(latitude, longtitude);
67
+ this.markerArray = [];
68
+ this.markearryIdStore =[];
69
+ this.myOptions = {
70
+ zoom: zoom_value,
71
+ center: this.myLatlng,
72
+ mapTypeId: google.maps.MapTypeId.ROADMAP
73
+ };
74
+ this.map = new google.maps.Map(document.getElementById(idMap), this.myOptions);
75
+ this.bounds = new google.maps.LatLngBounds();
76
+ this.rendererOptions = {
77
+ map:this.map
78
+ };
79
+ this.directionsDisplay = new google.maps.DirectionsRenderer(this.rendererOptions);
80
+ this.directionsService = new google.maps.DirectionsService();
81
+ },
82
+
83
+ extendPoint: function(marker){
84
+ this.bounds.extend(marker);
85
+ },
86
+
87
+ placeMarker: function(point, store_info, storeId, image,zoomLevel, infoWindow, x, storeObject){
88
+ var marker;
89
+ if(image){
90
+ marker = new google.maps.Marker({
91
+ position: point,
92
+ map: this.map,
93
+ icon: image,
94
+ store_id :storeId
95
+ });
96
+ }
97
+ else {
98
+ marker = new google.maps.Marker({
99
+ position: point,
100
+ map: this.map,
101
+ store_id :storeId
102
+ });
103
+ }
104
+ storeObject.marker = marker;
105
+ this.markerArray.push(marker);
106
+ google.maps.event.addListener(marker, 'click', function(event) {
107
+ infoWindow.setContent(store_info);
108
+ infoWindow.setPosition(event.latLng);
109
+ infoWindow.open(this.map, marker);
110
+ if(zoomLevel!=0){
111
+ this.map.setZoom(zoomLevel);
112
+ }
113
+ this.setActiveForm(storeId, x);
114
+ }.bind(this));
115
+
116
+ //this.getPoupForm(store_info, point, marker, zoomLevel, storeId, infoWindow)
117
+ },
118
+ getPoupForm: function(store_info, point, zoomLevel, storeId, infoWindow){
119
+ $('id' + storeId).observe('click', function(event) {
120
+ infoWindow.setContent(store_info);
121
+ infoWindow.setPosition(point);
122
+ //marker_point = new google.maps.LatLng(setLat, setLon);
123
+ this.map.setCenter(point);
124
+ infoWindow.open(this.map);
125
+ if(zoomLevel!=0){
126
+ this.map.setZoom(zoomLevel);
127
+ }
128
+ }.bind(this));
129
+ },
130
+ setBoundFill: function (){
131
+ this.map.fitBounds(this.bounds);
132
+ this.map.setCenter(this.bounds.getCenter());
133
+ },
134
+
135
+ setActiveForm: function(id, x){
136
+ $$('.active').invoke('removeClassName', 'active');
137
+ $('id' + id).addClassName('active');
138
+ if(x){
139
+ for (i=0; i<=this.markearryIdStore.length-1; i++){
140
+ try{
141
+ if(this.markearryIdStore[i] == id){
142
+ $('padoo-storelocator-getdirection-'+id).show();
143
+ }else{
144
+ $('padoo-storelocator-getdirection-'+this.markearryIdStore[i]).hide();
145
+ }
146
+ }catch(err){
147
+
148
+ }
149
+ }
150
+ this.directionsDisplay.setPanel(document.getElementById('padoo-storelocator-directionsPanel-'+id));
151
+ this.calcRoute(id);
152
+ }
153
+ },
154
+
155
+ createMarker: function(marker_point){
156
+ //marker_point = new google.maps.LatLng(latitude, longitude);
157
+ image_icon = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|0099FF");
158
+ //shadow = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_shadow");
159
+ marker = new google.maps.Marker({
160
+ position: marker_point,
161
+ map: this.map,
162
+ icon: image_icon
163
+ // shadow: shadow
164
+ });
165
+ this.markerArray.push(marker);
166
+ this.extendPoint(marker_point);
167
+ },
168
+
169
+ createRadius: function (radius){
170
+ var myCircle = new google.maps.Circle({
171
+ center: this.markerArray[this.markerArray.length - 1].getPosition(),
172
+ map: this.map,
173
+ radius: radius,
174
+ strokeColor: "#FF0000",
175
+ strokeOpacity: 0.8,
176
+ strokeWeight: 2,
177
+ fillColor: "#B9D3EE",
178
+ fillOpacity: 0.35
179
+ });
180
+ var myBounds = myCircle.getBounds();
181
+
182
+ //filters markers
183
+ for(var i=this.markerArray.length;i--;){
184
+ if(!myBounds.contains(this.markerArray[i].getPosition()))
185
+ {
186
+ this.markerArray[i].setMap(null);
187
+ $("id"+this.markerArray[i].store_id).hide();
188
+ }
189
+ }
190
+ this.map.setCenter(this.markerArray[this.markerArray.length - 1].getPosition());
191
+ this.map.setZoom(this.map.getZoom()+1);
192
+ },
193
+
194
+ calcRoute: function (idstore){
195
+ destination_lat = $('storelocator-lat-'+idstore).value;
196
+ destination_lng = $('storelocator-lng-'+idstore).value;
197
+ finalMarker = this.markerArray.length - 1;
198
+ // for(var i=0; i< finalMarker; i++){
199
+ var request = {
200
+ origin: this.markerArray[finalMarker].getPosition(),
201
+ destination: new google.maps.LatLng(destination_lat, destination_lng),
202
+ waypoints:[],
203
+ travelMode: google.maps.DirectionsTravelMode.DRIVING
204
+ };
205
+ this.directionsService.route(request, function(response, status) {
206
+ if (status === google.maps.DirectionsStatus.OK) {
207
+ this.directionsDisplay.setDirections(response);
208
+ }
209
+ }.bind(this));
210
+ // }
211
+ },
212
+ computeTotalDistance: function (result) {
213
+ var total = 0;
214
+ var myroute = result.routes[0];
215
+ for (var i = 0; i < myroute.legs.length; i++) {
216
+ total += myroute.legs[i].distance.value;
217
+ }
218
+ }
219
+ }
220
+
221
+ var StorelocatorObject = Class.create();
222
+ StorelocatorObject.prototype = {
223
+ initialize: function(html, distance, storeId, marker){
224
+ this.html = html;
225
+ this.distance = distance;
226
+ this.storeId = storeId;
227
+ this.marker = marker;
228
+ }
229
+ }
230
+
231
+ var InfoPopup = Class.create();
232
+ InfoPopup.prototype = {
233
+ initialize: function(storeId,html, zoom, point){
234
+ this.storeId = storeId;
235
+ this.html = html;
236
+ this.point = point;
237
+ this.zoom = zoom;
238
+ }
239
+ }
js/padoo/tinybox.js ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var TINY={};
2
+
3
+ function T$(i){return document.getElementById(i)}
4
+
5
+ TINY.box=function(){
6
+ var p,m,b,fn,ic,iu,iw,ih,ia,f=0;
7
+ return{
8
+ show:function(c,u,w,h,a,t){
9
+ if(!f){
10
+ p=document.createElement('div'); p.id='tinybox';
11
+ m=document.createElement('div'); m.id='tinymask';
12
+ b=document.createElement('div'); b.id='tinycontent';
13
+ document.body.appendChild(m); document.body.appendChild(p); p.appendChild(b);
14
+ m.onclick=TINY.box.hide; window.onresize=TINY.box.resize; f=1
15
+ }
16
+ if(!a&&!u){
17
+ p.style.width=w?w+'px':'auto'; p.style.height=h?h+'px':'auto';
18
+ p.style.backgroundImage='none'; b.innerHTML=c
19
+ }else{
20
+ b.style.display='none'; p.style.width=p.style.height='100px'
21
+ }
22
+ this.mask();
23
+ ic=c; iu=u; iw=w; ih=h; ia=a; this.alpha(m,1,80,3);
24
+ if(t){setTimeout(function(){TINY.box.hide()},1000*t)}
25
+ },
26
+ fill:function(c,u,w,h,a){
27
+ if(u){
28
+ p.style.backgroundImage='';
29
+ var x=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');
30
+ x.onreadystatechange=function(){
31
+ if(x.readyState==4&&x.status==200){TINY.box.psh(x.responseText,w,h,a)}
32
+ };
33
+ x.open('GET',c,1); x.send(null)
34
+ }else{
35
+ this.psh(c,w,h,a)
36
+ }
37
+ },
38
+ psh:function(c,w,h,a){
39
+ if(a){
40
+ if(!w||!h){
41
+ var x=p.style.width, y=p.style.height; b.innerHTML=c;
42
+ p.style.width=w?w+'px':''; p.style.height=h?h+'px':'';
43
+ b.style.display='';
44
+ w=parseInt(b.offsetWidth); h=parseInt(b.offsetHeight);
45
+ b.style.display='none'; p.style.width=x; p.style.height=y;
46
+ }else{
47
+ b.innerHTML=c
48
+ }
49
+ this.size(p,w,h)
50
+ }else{
51
+ p.style.backgroundImage='none'
52
+ }
53
+ },
54
+ hide:function(){
55
+ TINY.box.alpha(p,-1,0,3)
56
+ },
57
+ resize:function(){
58
+ TINY.box.pos(); TINY.box.mask()
59
+ },
60
+ mask:function(){
61
+ m.style.height=TINY.page.total(1)+'px';
62
+ m.style.width=''; m.style.width=TINY.page.total(0)+'px'
63
+ },
64
+ pos:function(){
65
+ var t=(TINY.page.height()/2)-(p.offsetHeight/2); t=t<10?10:t;
66
+ //p.style.top=(t+TINY.page.top())+'px';
67
+ p.style.top=TINY.page.top()+'px';
68
+ p.style.left=(TINY.page.width()/2)-(p.offsetWidth/2)+'px'
69
+ },
70
+ alpha:function(e,d,a){
71
+ clearInterval(e.ai);
72
+ if(d==1){
73
+ e.style.opacity=0; e.style.filter='alpha(opacity=0)';
74
+ e.style.display='block'; this.pos()
75
+ }
76
+ e.ai=setInterval(function(){TINY.box.ta(e,a,d)},20)
77
+ },
78
+ ta:function(e,a,d){
79
+ var o=Math.round(e.style.opacity*100);
80
+ if(o==a){
81
+ clearInterval(e.ai);
82
+ if(d==-1){
83
+ e.style.display='none';
84
+ e==p?TINY.box.alpha(m,-1,0,2):b.innerHTML=p.style.backgroundImage=''
85
+ }else{
86
+ e==m?this.alpha(p,1,100):TINY.box.fill(ic,iu,iw,ih,ia)
87
+ }
88
+ }else{
89
+ var n=Math.ceil((o+((a-o)*.5))); n=n==1?0:n;
90
+ e.style.opacity=n/100; e.style.filter='alpha(opacity='+n+')'
91
+ }
92
+ },
93
+ size:function(e,w,h){
94
+ e=typeof e=='object'?e:T$(e); clearInterval(e.si);
95
+ var ow=e.offsetWidth, oh=e.offsetHeight,
96
+ wo=ow-parseInt(e.style.width), ho=oh-parseInt(e.style.height);
97
+ var wd=ow-wo>w?0:1, hd=(oh-ho>h)?0:1;
98
+ e.si=setInterval(function(){TINY.box.ts(e,w,wo,wd,h,ho,hd)},20)
99
+ },
100
+ ts:function(e,w,wo,wd,h,ho,hd){
101
+ var ow=e.offsetWidth-wo, oh=e.offsetHeight-ho;
102
+ if(ow==w&&oh==h){
103
+ clearInterval(e.si); p.style.backgroundImage='none'; b.style.display='block'
104
+ }else{
105
+ if(ow!=w){var n=ow+((w-ow)*.5); e.style.width=wd?Math.ceil(n)+'px':Math.floor(n)+'px'}
106
+ if(oh!=h){var n=oh+((h-oh)*.5); e.style.height=hd?Math.ceil(n)+'px':Math.floor(n)+'px'}
107
+ this.pos()
108
+ }
109
+ }
110
+ }
111
+ }();
112
+
113
+ TINY.page=function(){
114
+ return{
115
+ top:function(){return document.documentElement.scrollTop||document.body.scrollTop},
116
+ width:function(){return self.innerWidth||document.documentElement.clientWidth||document.body.clientWidth},
117
+ height:function(){return self.innerHeight||document.documentElement.clientHeight||document.body.clientHeight},
118
+ total:function(d){
119
+ var b=document.body, e=document.documentElement;
120
+ return d?Math.max(Math.max(b.scrollHeight,e.scrollHeight),Math.max(b.clientHeight,e.clientHeight)):
121
+ Math.max(Math.max(b.scrollWidth,e.scrollWidth),Math.max(b.clientWidth,e.clientWidth))
122
+ }
123
+ }
124
+ }();
package.xml ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>padoo_testimonial</name>
4
+ <version>1.2.2</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://www.opensource.org/licenses/gpl-license.php">GNU General Public License (GPL)</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Allow customers post testimonial text and their image. And support flexible how display testimonials sliders on home page or other page with static block.</summary>
10
+ <description>&lt;div&gt;&#xD;
11
+ &lt;p&gt;Customer satisfied is one of best marketing asset that can give a boost your business. And testimonial is inexpensive and effortless way of displaying proof of your company &#x2018;s worth and convincing to new customers. And nowadays all business online have it.&lt;/p&gt;&#xD;
12
+ &lt;p&gt;By install and use our testimonial extension. It will help you easy display testimonials on your website and allow your customers post their review.&lt;/p&gt;&#xD;
13
+ &lt;/div&gt;&#xD;
14
+ &lt;div&gt;&#xD;
15
+ &lt;h3&gt;Features and benefits&lt;/h3&gt;&#xD;
16
+ &lt;ul&gt;&#xD;
17
+ &lt;li&gt;100% opensource&lt;/li&gt;&#xD;
18
+ &lt;li&gt;Very easy to install and use&lt;/li&gt;&#xD;
19
+ &lt;li&gt;Doesn&#x2019;t override core Magento ( core class or core template)&lt;/li&gt;&#xD;
20
+ &lt;li&gt;Support responsive for difference devices&lt;/li&gt;&#xD;
21
+ &lt;li&gt;Works perfectly with popular browsers including Firefox, Chrome, IE and Safari&lt;/li&gt;&#xD;
22
+ &lt;li&gt;Friendly and easy to configurable&lt;/li&gt;&#xD;
23
+ &lt;li&gt;Compatibility: Magento CE 1.4, 1.5, 1.6, 1.7, 1.8, 1.9&lt;/li&gt;&#xD;
24
+ &lt;/ul&gt;&#xD;
25
+ &lt;/div&gt;&#xD;
26
+ &lt;div&gt;&#xD;
27
+ &lt;h3&gt;How to use the our Testimonials extension&lt;/h3&gt;&#xD;
28
+ &lt;ol&gt;&#xD;
29
+ &lt;li&gt;Install via Magentoconnect or get it from our site Mage-addons.com&lt;/li&gt;&#xD;
30
+ &lt;li&gt;Configuration Testimonial options are available in administration panel: System --&amp;gt; Configuration --&amp;gt; Padoosoft extension --&amp;gt; Testimonial&lt;img alt="" src="http://www.mage-addons.com/media/wysiwyg/testimonial/settings.png" /&gt;&lt;/li&gt;&#xD;
31
+ &lt;li&gt;On On the backend, go to Testimonial=&amp;gt; Manage Testimonial&lt;img alt="" src="http://www.mage-addons.com/media/wysiwyg/testimonial/manage-testimonials.png" /&gt;&#xD;
32
+ To create a new item, click on the Add New Testimonial button:&#xD;
33
+ You can input the Position, image, name, text and select the displaying store view, then enable the Testimonial items.&#xD;
34
+ &lt;img alt="" src="http://www.mage-addons.com/media/wysiwyg/testimonial/add-testimonial.png" /&gt;&#xD;
35
+ &lt;/li&gt;&#xD;
36
+ &lt;li&gt;By default, the module supports to show testimonials on the sidebar block like slider and has a link to testimonials page&#xD;
37
+ &lt;img alt="" src="http://www.mage-addons.com/media/wysiwyg/testimonial/testimonials-page.png" /&gt;&#xD;
38
+ &lt;/li&gt;&#xD;
39
+ &lt;li&gt;Customers can submit their own testimonial at the frontend. After finishing, their testimonials will be listed at Manage Testimonials page from the backend to wait for the store owner&#x2019;s approval. &#xD;
40
+ To navigate to the submit form, customer can click on the Submit Your Testimonial link at top of Testimonial List page.&#xD;
41
+ &lt;img alt="" src="http://www.mage-addons.com/media/wysiwyg/testimonial/submit-testiminial.png" /&gt;&#xD;
42
+ &lt;/li&gt;&#xD;
43
+ &lt;/ol&gt;&#xD;
44
+ &lt;/div&gt;&#xD;
45
+ &lt;div&gt;&#xD;
46
+ &lt;h3&gt;How to disable the extension&lt;/h3&gt;&#xD;
47
+ &lt;p&gt;Set &amp;quot;No&amp;quot; on System &amp;gt; Configuration&amp;gt; Testimonial &amp;gt; General&lt;/p&gt;&#xD;
48
+ &lt;p&gt;Open the file &#x201C;app/etc/modules/ Padoo_Testimonial.xml&#x201D; and change the following line: Form &amp;quot;True&amp;quot; To &amp;quot; False&amp;quot;&#xD;
49
+ &lt;/p&gt;&#xD;
50
+ &lt;/div&gt;</description>
51
+ <notes>Allow customers post testimonial text and their image. And support flexible how display testimonials sliders on home page or other page with static block.</notes>
52
+ <authors><author><name>Padoosoft</name><user>MageAddons82</user><email>stdspace@gmail.com</email></author></authors>
53
+ <date>2016-03-29</date>
54
+ <time>01:45:08</time>
55
+ <contents><target name="magelocal"><dir name="Padoo"><dir name="Testimonial"><dir name="Block"><dir name="Adminhtml"><dir name="Testimonial"><dir name="Edit"><file name="Form.php" hash="5749dbeb7f1fe7ab8b78dbe884c7040e"/></dir><file name="Edit.php" hash="914b023cec2b1402dccb031d4deb2e12"/><file name="Grid.php" hash="722f186ab879bf3d4112f6adf24ec274"/></dir><file name="Testimonial.php" hash="f9dbe9544ed6930394cf3fa7256b22fd"/></dir><file name="Testimonial.php" hash="f0edf369e74a58bc3f2d8fb42f316832"/></dir><dir name="Helper"><file name="Data.php" hash="924a16124019b4e449971dd25366da1d"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Testimonial"><file name="Collection.php" hash="c07706f21811ce990785236f833bb69b"/></dir><file name="Testimonial.php" hash="d4696cae8433d116a667f5c15a5ebf61"/></dir><file name="Status.php" hash="7df6f57de6d7345c739d4f679ae32596"/><dir name="System"><dir name="Conf"><dir name="Source"><file name="Effect.php" hash="4c626e35adcb612e899eee6c37ff68fa"/></dir></dir></dir><file name="Testimonial.php" hash="f76dde45980ad4404e9b25cef879569a"/><dir name="Wysiwyg"><file name="Config.php" hash="eb660301a3a3920c658e47a73f5862d9"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="TestimonialController.php" hash="34c2dcec439012b90b9600d46990030f"/></dir><file name="IndexController.php" hash="6b5430e76115b8bd1234e1a7083ebbf5"/><file name="SubmitController.php" hash="c0444ad03035a499e3a11be2d57ed43d"/></dir><dir name="etc"><file name="adminhtml.xml" hash="1de85fe62eceb0069649b02e55cacb25"/><file name="config.xml" hash="4778624513f169af21f618949eeeb687"/><file name="system.xml" hash="3acbe960f7c683338d2090b6b0d38a7f"/></dir><dir name="sql"><dir name="padoo_testimonial_setup"><file name="mysql4-install-1.0.0.php" hash="2f3b794d43922cfc4db1f3e7ccfb18c2"/><file name="mysql4-upgrade-1.1.1-1.1.2.php" hash="318b75675441e3a7c94126a2cd01ccc1"/><file name="mysql4-upgrade-1.1.3-1.1.4.php" hash="2f3b794d43922cfc4db1f3e7ccfb18c2"/><file name="mysql4-upgrade-1.2.1-1.2.2.php" hash="3c7148f289ad51e16e8a0bb8841e7a32"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Padoo_Testimonial.xml" hash="37cb5152f7d09a25593523de5e3066f1"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="padoo_testimonial.xml" hash="2511123fd1ae491cc5102b5327f3182f"/></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="padoo_testimonial.xml" hash="005c2c5f1501c093ed99751189870982"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Padoo_Testimonial.csv" hash="1d27ca49b4c4a6378a24a61dadd7e3d1"/></dir></target><target name="mage"><dir name="js"><dir name="padoo"><file name="checkValue.js" hash="963c1c86bbd0462be3c4793399a86024"/><file name="jquery.js" hash="b08031186fb28716dcbb38bcbd3ace0d"/><file name="jquery_noconflict.js" hash="afdd9b4ecb226d898fe655136f849752"/><file name="scriptaculous.js" hash="b592273cfa1d97643325ad77f7030879"/><file name="simplecheckout.js" hash="7158c0b30c4fbf2cbfc9b87c3f065043"/><file name="storelocator.js" hash="4cd94ab10a4cd421fff843a3854f71c4"/><file name="tinybox.js" hash="7e8a0b5f8e639947f494c9668caa169c"/></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="default"><dir name="default"><dir name="css"><dir name="testimonial"><file name="testimonial.css" hash="aadfb6b347aac28e11773af0cbbc2c03"/></dir><dir name="padoo"><file name="jquery-ui.css" hash="c932ef4ca169d744a94855e65fa39531"/><file name="jquery.bxslider.css" hash="951b49dc2e2d9639063f8d74fae1c8f9"/><file name="onecheckout.css" hash="e98e06328b5870f6900fad90b473fb7a"/><dir name="storelocator"><file name="navigation.png" hash="e9c107ff5505cdcc8b1a56b582785be5"/><file name="navigation1.png" hash="4059251ab55fe554770ec860167e279f"/><file name="tag-bg.png" hash="6ed007475c32ee2d35c7133dba65dea9"/><file name="vssver2.scc" hash="4a0203452e42133d03bba0f121cc392d"/></dir><file name="storelocator.css" hash="455f9cad3c21e072f34bdc0ba6c6c768"/><file name="testimonial.css" hash="11f853c031875b77b31ff818bccd8682"/><file name="tinybox.css" hash="dd735dee70c031110a582ce2f037b009"/></dir></dir><dir name="images"><dir name="padoo"><file name="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><file name="bg-btn-delete.gif" hash="2e447b3ea9a8e86d5e620bd8ed895423"/><file name="bg-btn-update.gif" hash="67dd70c9aaa8f568ca34d0698989c6ce"/><file name="btn_trash.gif" hash="bcb22f558a0eb32243a2a36645189e9f"/><file name="controls.png" hash="ace48756f4799305ae30e1167e0ff1f9"/><file name="loading.gif" hash="94b7ff6d24d260848bdd112fdac6a3f1"/><file name="process.jpg" hash="9c3130b318ec087449837bcf1886de7f"/><file name="slider_controls.png" hash="d9d25372f38c6b242b9b51d5841fe86e"/></dir></dir><dir name="js"><dir name="padoo"><file name="jquery.bxslider.js" hash="eea4ef92150fe92c5e75aef6507d06cf"/><file name="jquery.cycle.js" hash="ce83808c0a5a3fd7143adc6fdd6295f3"/></dir></dir></dir></dir></dir></target></contents>
56
+ <compatible/>
57
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
58
+ </package>
skin/frontend/default/default/css/padoo/jquery-ui.css ADDED
@@ -0,0 +1,1225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! jQuery UI - v1.11.4 - 2015-03-11
2
+ * http://jqueryui.com
3
+ * Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
+ * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
6
+
7
+ /* Layout helpers
8
+ ----------------------------------*/
9
+ .ui-helper-hidden {
10
+ display: none;
11
+ }
12
+ .ui-helper-hidden-accessible {
13
+ border: 0;
14
+ clip: rect(0 0 0 0);
15
+ height: 1px;
16
+ margin: -1px;
17
+ overflow: hidden;
18
+ padding: 0;
19
+ position: absolute;
20
+ width: 1px;
21
+ }
22
+ .ui-helper-reset {
23
+ margin: 0;
24
+ padding: 0;
25
+ border: 0;
26
+ outline: 0;
27
+ line-height: 1.3;
28
+ text-decoration: none;
29
+ font-size: 100%;
30
+ list-style: none;
31
+ }
32
+ .ui-helper-clearfix:before,
33
+ .ui-helper-clearfix:after {
34
+ content: "";
35
+ display: table;
36
+ border-collapse: collapse;
37
+ }
38
+ .ui-helper-clearfix:after {
39
+ clear: both;
40
+ }
41
+ .ui-helper-clearfix {
42
+ min-height: 0; /* support: IE7 */
43
+ }
44
+ .ui-helper-zfix {
45
+ width: 100%;
46
+ height: 100%;
47
+ top: 0;
48
+ left: 0;
49
+ position: absolute;
50
+ opacity: 0;
51
+ filter:Alpha(Opacity=0); /* support: IE8 */
52
+ }
53
+
54
+ .ui-front {
55
+ z-index: 100;
56
+ }
57
+
58
+
59
+ /* Interaction Cues
60
+ ----------------------------------*/
61
+ .ui-state-disabled {
62
+ cursor: default !important;
63
+ }
64
+
65
+
66
+ /* Icons
67
+ ----------------------------------*/
68
+
69
+ /* states and images */
70
+ .ui-icon {
71
+ display: block;
72
+ text-indent: -99999px;
73
+ overflow: hidden;
74
+ background-repeat: no-repeat;
75
+ }
76
+
77
+
78
+ /* Misc visuals
79
+ ----------------------------------*/
80
+
81
+ /* Overlays */
82
+ .ui-widget-overlay {
83
+ position: fixed;
84
+ top: 0;
85
+ left: 0;
86
+ width: 100%;
87
+ height: 100%;
88
+ }
89
+ .ui-accordion .ui-accordion-header {
90
+ display: block;
91
+ cursor: pointer;
92
+ position: relative;
93
+ margin: 2px 0 0 0;
94
+ padding: .5em .5em .5em .7em;
95
+ min-height: 0; /* support: IE7 */
96
+ font-size: 100%;
97
+ }
98
+ .ui-accordion .ui-accordion-icons {
99
+ padding-left: 2.2em;
100
+ }
101
+ .ui-accordion .ui-accordion-icons .ui-accordion-icons {
102
+ padding-left: 2.2em;
103
+ }
104
+ .ui-accordion .ui-accordion-header .ui-accordion-header-icon {
105
+ position: absolute;
106
+ left: .5em;
107
+ top: 50%;
108
+ margin-top: -8px;
109
+ }
110
+ .ui-accordion .ui-accordion-content {
111
+ padding: 1em 2.2em;
112
+ border-top: 0;
113
+ overflow: auto;
114
+ }
115
+ .ui-autocomplete {
116
+ position: absolute;
117
+ top: 0;
118
+ left: 0;
119
+ cursor: default;
120
+ }
121
+ .ui-button {
122
+ display: inline-block;
123
+ position: relative;
124
+ padding: 0;
125
+ line-height: normal;
126
+ margin-right: .1em;
127
+ cursor: pointer;
128
+ vertical-align: middle;
129
+ text-align: center;
130
+ overflow: visible; /* removes extra width in IE */
131
+ }
132
+ .ui-button,
133
+ .ui-button:link,
134
+ .ui-button:visited,
135
+ .ui-button:hover,
136
+ .ui-button:active {
137
+ text-decoration: none;
138
+ }
139
+ /* to make room for the icon, a width needs to be set here */
140
+ .ui-button-icon-only {
141
+ width: 2.2em;
142
+ }
143
+ /* button elements seem to need a little more width */
144
+ button.ui-button-icon-only {
145
+ width: 2.4em;
146
+ }
147
+ .ui-button-icons-only {
148
+ width: 3.4em;
149
+ }
150
+ button.ui-button-icons-only {
151
+ width: 3.7em;
152
+ }
153
+
154
+ /* button text element */
155
+ .ui-button .ui-button-text {
156
+ display: block;
157
+ line-height: normal;
158
+ }
159
+ .ui-button-text-only .ui-button-text {
160
+ padding: .4em 1em;
161
+ }
162
+ .ui-button-icon-only .ui-button-text,
163
+ .ui-button-icons-only .ui-button-text {
164
+ padding: .4em;
165
+ text-indent: -9999999px;
166
+ }
167
+ .ui-button-text-icon-primary .ui-button-text,
168
+ .ui-button-text-icons .ui-button-text {
169
+ padding: .4em 1em .4em 2.1em;
170
+ }
171
+ .ui-button-text-icon-secondary .ui-button-text,
172
+ .ui-button-text-icons .ui-button-text {
173
+ padding: .4em 2.1em .4em 1em;
174
+ }
175
+ .ui-button-text-icons .ui-button-text {
176
+ padding-left: 2.1em;
177
+ padding-right: 2.1em;
178
+ }
179
+ /* no icon support for input elements, provide padding by default */
180
+ input.ui-button {
181
+ padding: .4em 1em;
182
+ }
183
+
184
+ /* button icon element(s) */
185
+ .ui-button-icon-only .ui-icon,
186
+ .ui-button-text-icon-primary .ui-icon,
187
+ .ui-button-text-icon-secondary .ui-icon,
188
+ .ui-button-text-icons .ui-icon,
189
+ .ui-button-icons-only .ui-icon {
190
+ position: absolute;
191
+ top: 50%;
192
+ margin-top: -8px;
193
+ }
194
+ .ui-button-icon-only .ui-icon {
195
+ left: 50%;
196
+ margin-left: -8px;
197
+ }
198
+ .ui-button-text-icon-primary .ui-button-icon-primary,
199
+ .ui-button-text-icons .ui-button-icon-primary,
200
+ .ui-button-icons-only .ui-button-icon-primary {
201
+ left: .5em;
202
+ }
203
+ .ui-button-text-icon-secondary .ui-button-icon-secondary,
204
+ .ui-button-text-icons .ui-button-icon-secondary,
205
+ .ui-button-icons-only .ui-button-icon-secondary {
206
+ right: .5em;
207
+ }
208
+
209
+ /* button sets */
210
+ .ui-buttonset {
211
+ margin-right: 7px;
212
+ }
213
+ .ui-buttonset .ui-button {
214
+ margin-left: 0;
215
+ margin-right: -.3em;
216
+ }
217
+
218
+ /* workarounds */
219
+ /* reset extra padding in Firefox, see h5bp.com/l */
220
+ input.ui-button::-moz-focus-inner,
221
+ button.ui-button::-moz-focus-inner {
222
+ border: 0;
223
+ padding: 0;
224
+ }
225
+ .ui-datepicker {
226
+ width: 17em;
227
+ padding: .2em .2em 0;
228
+ display: none;
229
+ }
230
+ .ui-datepicker .ui-datepicker-header {
231
+ position: relative;
232
+ padding: .2em 0;
233
+ }
234
+ .ui-datepicker .ui-datepicker-prev,
235
+ .ui-datepicker .ui-datepicker-next {
236
+ position: absolute;
237
+ top: 2px;
238
+ width: 1.8em;
239
+ height: 1.8em;
240
+ }
241
+ .ui-datepicker .ui-datepicker-prev-hover,
242
+ .ui-datepicker .ui-datepicker-next-hover {
243
+ top: 1px;
244
+ }
245
+ .ui-datepicker .ui-datepicker-prev {
246
+ left: 2px;
247
+ }
248
+ .ui-datepicker .ui-datepicker-next {
249
+ right: 2px;
250
+ }
251
+ .ui-datepicker .ui-datepicker-prev-hover {
252
+ left: 1px;
253
+ }
254
+ .ui-datepicker .ui-datepicker-next-hover {
255
+ right: 1px;
256
+ }
257
+ .ui-datepicker .ui-datepicker-prev span,
258
+ .ui-datepicker .ui-datepicker-next span {
259
+ display: block;
260
+ position: absolute;
261
+ left: 50%;
262
+ margin-left: -8px;
263
+ top: 50%;
264
+ margin-top: -8px;
265
+ }
266
+ .ui-datepicker .ui-datepicker-title {
267
+ margin: 0 2.3em;
268
+ line-height: 1.8em;
269
+ text-align: center;
270
+ }
271
+ .ui-datepicker .ui-datepicker-title select {
272
+ font-size: 1em;
273
+ margin: 1px 0;
274
+ }
275
+ .ui-datepicker select.ui-datepicker-month,
276
+ .ui-datepicker select.ui-datepicker-year {
277
+ width: 45%;
278
+ }
279
+ .ui-datepicker table {
280
+ width: 100%;
281
+ font-size: .9em;
282
+ border-collapse: collapse;
283
+ margin: 0 0 .4em;
284
+ }
285
+ .ui-datepicker th {
286
+ padding: .7em .3em;
287
+ text-align: center;
288
+ font-weight: bold;
289
+ border: 0;
290
+ }
291
+ .ui-datepicker td {
292
+ border: 0;
293
+ padding: 1px;
294
+ }
295
+ .ui-datepicker td span,
296
+ .ui-datepicker td a {
297
+ display: block;
298
+ padding: .2em;
299
+ text-align: right;
300
+ text-decoration: none;
301
+ }
302
+ .ui-datepicker .ui-datepicker-buttonpane {
303
+ background-image: none;
304
+ margin: .7em 0 0 0;
305
+ padding: 0 .2em;
306
+ border-left: 0;
307
+ border-right: 0;
308
+ border-bottom: 0;
309
+ }
310
+ .ui-datepicker .ui-datepicker-buttonpane button {
311
+ float: right;
312
+ margin: .5em .2em .4em;
313
+ cursor: pointer;
314
+ padding: .2em .6em .3em .6em;
315
+ width: auto;
316
+ overflow: visible;
317
+ }
318
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
319
+ float: left;
320
+ }
321
+
322
+ /* with multiple calendars */
323
+ .ui-datepicker.ui-datepicker-multi {
324
+ width: auto;
325
+ }
326
+ .ui-datepicker-multi .ui-datepicker-group {
327
+ float: left;
328
+ }
329
+ .ui-datepicker-multi .ui-datepicker-group table {
330
+ width: 95%;
331
+ margin: 0 auto .4em;
332
+ }
333
+ .ui-datepicker-multi-2 .ui-datepicker-group {
334
+ width: 50%;
335
+ }
336
+ .ui-datepicker-multi-3 .ui-datepicker-group {
337
+ width: 33.3%;
338
+ }
339
+ .ui-datepicker-multi-4 .ui-datepicker-group {
340
+ width: 25%;
341
+ }
342
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
343
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
344
+ border-left-width: 0;
345
+ }
346
+ .ui-datepicker-multi .ui-datepicker-buttonpane {
347
+ clear: left;
348
+ }
349
+ .ui-datepicker-row-break {
350
+ clear: both;
351
+ width: 100%;
352
+ font-size: 0;
353
+ }
354
+
355
+ /* RTL support */
356
+ .ui-datepicker-rtl {
357
+ direction: rtl;
358
+ }
359
+ .ui-datepicker-rtl .ui-datepicker-prev {
360
+ right: 2px;
361
+ left: auto;
362
+ }
363
+ .ui-datepicker-rtl .ui-datepicker-next {
364
+ left: 2px;
365
+ right: auto;
366
+ }
367
+ .ui-datepicker-rtl .ui-datepicker-prev:hover {
368
+ right: 1px;
369
+ left: auto;
370
+ }
371
+ .ui-datepicker-rtl .ui-datepicker-next:hover {
372
+ left: 1px;
373
+ right: auto;
374
+ }
375
+ .ui-datepicker-rtl .ui-datepicker-buttonpane {
376
+ clear: right;
377
+ }
378
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button {
379
+ float: left;
380
+ }
381
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
382
+ .ui-datepicker-rtl .ui-datepicker-group {
383
+ float: right;
384
+ }
385
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
386
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
387
+ border-right-width: 0;
388
+ border-left-width: 1px;
389
+ }
390
+ .ui-dialog {
391
+ overflow: hidden;
392
+ position: absolute;
393
+ top: 0;
394
+ left: 0;
395
+ padding: .2em;
396
+ outline: 0;
397
+ }
398
+ .ui-dialog .ui-dialog-titlebar {
399
+ padding: .4em 1em;
400
+ position: relative;
401
+ }
402
+ .ui-dialog .ui-dialog-title {
403
+ float: left;
404
+ margin: .1em 0;
405
+ white-space: nowrap;
406
+ width: 90%;
407
+ overflow: hidden;
408
+ text-overflow: ellipsis;
409
+ }
410
+ .ui-dialog .ui-dialog-titlebar-close {
411
+ position: absolute;
412
+ right: .3em;
413
+ top: 50%;
414
+ width: 20px;
415
+ margin: -10px 0 0 0;
416
+ padding: 1px;
417
+ height: 20px;
418
+ }
419
+ .ui-dialog .ui-dialog-content {
420
+ position: relative;
421
+ border: 0;
422
+ padding: .5em 1em;
423
+ background: none;
424
+ overflow: auto;
425
+ }
426
+ .ui-dialog .ui-dialog-buttonpane {
427
+ text-align: left;
428
+ border-width: 1px 0 0 0;
429
+ background-image: none;
430
+ margin-top: .5em;
431
+ padding: .3em 1em .5em .4em;
432
+ }
433
+ .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
434
+ float: right;
435
+ }
436
+ .ui-dialog .ui-dialog-buttonpane button {
437
+ margin: .5em .4em .5em 0;
438
+ cursor: pointer;
439
+ }
440
+ .ui-dialog .ui-resizable-se {
441
+ width: 12px;
442
+ height: 12px;
443
+ right: -5px;
444
+ bottom: -5px;
445
+ background-position: 16px 16px;
446
+ }
447
+ .ui-draggable .ui-dialog-titlebar {
448
+ cursor: move;
449
+ }
450
+ .ui-draggable-handle {
451
+ -ms-touch-action: none;
452
+ touch-action: none;
453
+ }
454
+ .ui-menu {
455
+ list-style: none;
456
+ padding: 0;
457
+ margin: 0;
458
+ display: block;
459
+ outline: none;
460
+ }
461
+ .ui-menu .ui-menu {
462
+ position: absolute;
463
+ }
464
+ .ui-menu .ui-menu-item {
465
+ position: relative;
466
+ margin: 0;
467
+ padding: 3px 1em 3px .4em;
468
+ cursor: pointer;
469
+ min-height: 0; /* support: IE7 */
470
+ /* support: IE10, see #8844 */
471
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
472
+ }
473
+ .ui-menu .ui-menu-divider {
474
+ margin: 5px 0;
475
+ height: 0;
476
+ font-size: 0;
477
+ line-height: 0;
478
+ border-width: 1px 0 0 0;
479
+ }
480
+ .ui-menu .ui-state-focus,
481
+ .ui-menu .ui-state-active {
482
+ margin: -1px;
483
+ }
484
+
485
+ /* icon support */
486
+ .ui-menu-icons {
487
+ position: relative;
488
+ }
489
+ .ui-menu-icons .ui-menu-item {
490
+ padding-left: 2em;
491
+ }
492
+
493
+ /* left-aligned */
494
+ .ui-menu .ui-icon {
495
+ position: absolute;
496
+ top: 0;
497
+ bottom: 0;
498
+ left: .2em;
499
+ margin: auto 0;
500
+ }
501
+
502
+ /* right-aligned */
503
+ .ui-menu .ui-menu-icon {
504
+ left: auto;
505
+ right: 0;
506
+ }
507
+ .ui-progressbar {
508
+ height: 2em;
509
+ text-align: left;
510
+ overflow: hidden;
511
+ }
512
+ .ui-progressbar .ui-progressbar-value {
513
+ margin: -1px;
514
+ height: 100%;
515
+ }
516
+ .ui-progressbar .ui-progressbar-overlay {
517
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
518
+ height: 100%;
519
+ filter: alpha(opacity=25); /* support: IE8 */
520
+ opacity: 0.25;
521
+ }
522
+ .ui-progressbar-indeterminate .ui-progressbar-value {
523
+ background-image: none;
524
+ }
525
+ .ui-resizable {
526
+ position: relative;
527
+ }
528
+ .ui-resizable-handle {
529
+ position: absolute;
530
+ font-size: 0.1px;
531
+ display: block;
532
+ -ms-touch-action: none;
533
+ touch-action: none;
534
+ }
535
+ .ui-resizable-disabled .ui-resizable-handle,
536
+ .ui-resizable-autohide .ui-resizable-handle {
537
+ display: none;
538
+ }
539
+ .ui-resizable-n {
540
+ cursor: n-resize;
541
+ height: 7px;
542
+ width: 100%;
543
+ top: -5px;
544
+ left: 0;
545
+ }
546
+ .ui-resizable-s {
547
+ cursor: s-resize;
548
+ height: 7px;
549
+ width: 100%;
550
+ bottom: -5px;
551
+ left: 0;
552
+ }
553
+ .ui-resizable-e {
554
+ cursor: e-resize;
555
+ width: 7px;
556
+ right: -5px;
557
+ top: 0;
558
+ height: 100%;
559
+ }
560
+ .ui-resizable-w {
561
+ cursor: w-resize;
562
+ width: 7px;
563
+ left: -5px;
564
+ top: 0;
565
+ height: 100%;
566
+ }
567
+ .ui-resizable-se {
568
+ cursor: se-resize;
569
+ width: 12px;
570
+ height: 12px;
571
+ right: 1px;
572
+ bottom: 1px;
573
+ }
574
+ .ui-resizable-sw {
575
+ cursor: sw-resize;
576
+ width: 9px;
577
+ height: 9px;
578
+ left: -5px;
579
+ bottom: -5px;
580
+ }
581
+ .ui-resizable-nw {
582
+ cursor: nw-resize;
583
+ width: 9px;
584
+ height: 9px;
585
+ left: -5px;
586
+ top: -5px;
587
+ }
588
+ .ui-resizable-ne {
589
+ cursor: ne-resize;
590
+ width: 9px;
591
+ height: 9px;
592
+ right: -5px;
593
+ top: -5px;
594
+ }
595
+ .ui-selectable {
596
+ -ms-touch-action: none;
597
+ touch-action: none;
598
+ }
599
+ .ui-selectable-helper {
600
+ position: absolute;
601
+ z-index: 100;
602
+ border: 1px dotted black;
603
+ }
604
+ .ui-selectmenu-menu {
605
+ padding: 0;
606
+ margin: 0;
607
+ position: absolute;
608
+ top: 0;
609
+ left: 0;
610
+ display: none;
611
+ }
612
+ .ui-selectmenu-menu .ui-menu {
613
+ overflow: auto;
614
+ /* Support: IE7 */
615
+ overflow-x: hidden;
616
+ padding-bottom: 1px;
617
+ }
618
+ .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
619
+ font-size: 1em;
620
+ font-weight: bold;
621
+ line-height: 1.5;
622
+ padding: 2px 0.4em;
623
+ margin: 0.5em 0 0 0;
624
+ height: auto;
625
+ border: 0;
626
+ }
627
+ .ui-selectmenu-open {
628
+ display: block;
629
+ }
630
+ .ui-selectmenu-button {
631
+ display: inline-block;
632
+ overflow: hidden;
633
+ position: relative;
634
+ text-decoration: none;
635
+ cursor: pointer;
636
+ }
637
+ .ui-selectmenu-button span.ui-icon {
638
+ right: 0.5em;
639
+ left: auto;
640
+ margin-top: -8px;
641
+ position: absolute;
642
+ top: 50%;
643
+ }
644
+ .ui-selectmenu-button span.ui-selectmenu-text {
645
+ text-align: left;
646
+ padding: 0.4em 2.1em 0.4em 1em;
647
+ display: block;
648
+ line-height: 1.4;
649
+ overflow: hidden;
650
+ text-overflow: ellipsis;
651
+ white-space: nowrap;
652
+ }
653
+ .ui-slider {
654
+ position: relative;
655
+ text-align: left;
656
+ }
657
+ .ui-slider .ui-slider-handle {
658
+ position: absolute;
659
+ z-index: 2;
660
+ width: 1.2em;
661
+ height: 1.2em;
662
+ cursor: default;
663
+ -ms-touch-action: none;
664
+ touch-action: none;
665
+ }
666
+ .ui-slider .ui-slider-range {
667
+ position: absolute;
668
+ z-index: 1;
669
+ font-size: .7em;
670
+ display: block;
671
+ border: 0;
672
+ background-position: 0 0;
673
+ }
674
+
675
+ /* support: IE8 - See #6727 */
676
+ .ui-slider.ui-state-disabled .ui-slider-handle,
677
+ .ui-slider.ui-state-disabled .ui-slider-range {
678
+ filter: inherit;
679
+ }
680
+
681
+ .ui-slider-horizontal {
682
+ height: .8em;
683
+ }
684
+ .ui-slider-horizontal .ui-slider-handle {
685
+ top: -.3em;
686
+ margin-left: -.6em;
687
+ }
688
+ .ui-slider-horizontal .ui-slider-range {
689
+ top: 0;
690
+ height: 100%;
691
+ }
692
+ .ui-slider-horizontal .ui-slider-range-min {
693
+ left: 0;
694
+ }
695
+ .ui-slider-horizontal .ui-slider-range-max {
696
+ right: 0;
697
+ }
698
+
699
+ .ui-slider-vertical {
700
+ width: .8em;
701
+ height: 100px;
702
+ }
703
+ .ui-slider-vertical .ui-slider-handle {
704
+ left: -.3em;
705
+ margin-left: 0;
706
+ margin-bottom: -.6em;
707
+ }
708
+ .ui-slider-vertical .ui-slider-range {
709
+ left: 0;
710
+ width: 100%;
711
+ }
712
+ .ui-slider-vertical .ui-slider-range-min {
713
+ bottom: 0;
714
+ }
715
+ .ui-slider-vertical .ui-slider-range-max {
716
+ top: 0;
717
+ }
718
+ .ui-sortable-handle {
719
+ -ms-touch-action: none;
720
+ touch-action: none;
721
+ }
722
+ .ui-spinner {
723
+ position: relative;
724
+ display: inline-block;
725
+ overflow: hidden;
726
+ padding: 0;
727
+ vertical-align: middle;
728
+ }
729
+ .ui-spinner-input {
730
+ border: none;
731
+ background: none;
732
+ color: inherit;
733
+ padding: 0;
734
+ margin: .2em 0;
735
+ vertical-align: middle;
736
+ margin-left: .4em;
737
+ margin-right: 22px;
738
+ }
739
+ .ui-spinner-button {
740
+ width: 16px;
741
+ height: 50%;
742
+ font-size: .5em;
743
+ padding: 0;
744
+ margin: 0;
745
+ text-align: center;
746
+ position: absolute;
747
+ cursor: default;
748
+ display: block;
749
+ overflow: hidden;
750
+ right: 0;
751
+ }
752
+ /* more specificity required here to override default borders */
753
+ .ui-spinner a.ui-spinner-button {
754
+ border-top: none;
755
+ border-bottom: none;
756
+ border-right: none;
757
+ }
758
+ /* vertically center icon */
759
+ .ui-spinner .ui-icon {
760
+ position: absolute;
761
+ margin-top: -8px;
762
+ top: 50%;
763
+ left: 0;
764
+ }
765
+ .ui-spinner-up {
766
+ top: 0;
767
+ }
768
+ .ui-spinner-down {
769
+ bottom: 0;
770
+ }
771
+
772
+ /* TR overrides */
773
+ .ui-spinner .ui-icon-triangle-1-s {
774
+ /* need to fix icons sprite */
775
+ background-position: -65px -16px;
776
+ }
777
+ .ui-tabs {
778
+ position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
779
+ padding: .2em;
780
+ }
781
+ .ui-tabs .ui-tabs-nav {
782
+ margin: 0;
783
+ padding: .2em .2em 0;
784
+ }
785
+ .ui-tabs .ui-tabs-nav li {
786
+ list-style: none;
787
+ float: left;
788
+ position: relative;
789
+ top: 0;
790
+ margin: 1px .2em 0 0;
791
+ border-bottom-width: 0;
792
+ padding: 0;
793
+ white-space: nowrap;
794
+ }
795
+ .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
796
+ float: left;
797
+ padding: .5em 1em;
798
+ text-decoration: none;
799
+ }
800
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active {
801
+ margin-bottom: -1px;
802
+ padding-bottom: 1px;
803
+ }
804
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
805
+ .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
806
+ .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
807
+ cursor: text;
808
+ }
809
+ .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
810
+ cursor: pointer;
811
+ }
812
+ .ui-tabs .ui-tabs-panel {
813
+ display: block;
814
+ border-width: 0;
815
+ padding: 1em 1.4em;
816
+ background: none;
817
+ }
818
+ .ui-tooltip {
819
+ padding: 8px;
820
+ position: absolute;
821
+ z-index: 9999;
822
+ max-width: 300px;
823
+ -webkit-box-shadow: 0 0 5px #aaa;
824
+ box-shadow: 0 0 5px #aaa;
825
+ }
826
+ body .ui-tooltip {
827
+ border-width: 2px;
828
+ }
829
+
830
+ /* Component containers
831
+ ----------------------------------*/
832
+ .ui-widget {
833
+ font-family: Verdana,Arial,sans-serif;
834
+ font-size: 1.1em;
835
+ }
836
+ .ui-widget .ui-widget {
837
+ font-size: 1em;
838
+ }
839
+ .ui-widget input,
840
+ .ui-widget select,
841
+ .ui-widget textarea,
842
+ .ui-widget button {
843
+ font-family: Verdana,Arial,sans-serif;
844
+ font-size: 1em;
845
+ }
846
+ .ui-widget-content {
847
+ border: 1px solid #aaaaaa;
848
+ background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
849
+ color: #222222;
850
+ }
851
+ .ui-widget-content a {
852
+ color: #222222;
853
+ }
854
+ .ui-widget-header {
855
+ border: 1px solid #aaaaaa;
856
+ background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;
857
+ color: #222222;
858
+ font-weight: bold;
859
+ }
860
+ .ui-widget-header a {
861
+ color: #222222;
862
+ }
863
+
864
+ /* Interaction states
865
+ ----------------------------------*/
866
+ .ui-state-default,
867
+ .ui-widget-content .ui-state-default,
868
+ .ui-widget-header .ui-state-default {
869
+ border: 1px solid #d3d3d3;
870
+ background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
871
+ font-weight: normal;
872
+ color: #555555;
873
+ }
874
+ .ui-state-default a,
875
+ .ui-state-default a:link,
876
+ .ui-state-default a:visited {
877
+ color: #555555;
878
+ text-decoration: none;
879
+ }
880
+ .ui-state-hover,
881
+ .ui-widget-content .ui-state-hover,
882
+ .ui-widget-header .ui-state-hover,
883
+ .ui-state-focus,
884
+ .ui-widget-content .ui-state-focus,
885
+ .ui-widget-header .ui-state-focus {
886
+ border: 1px solid #999999;
887
+ background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
888
+ font-weight: normal;
889
+ color: #212121;
890
+ }
891
+ .ui-state-hover a,
892
+ .ui-state-hover a:hover,
893
+ .ui-state-hover a:link,
894
+ .ui-state-hover a:visited,
895
+ .ui-state-focus a,
896
+ .ui-state-focus a:hover,
897
+ .ui-state-focus a:link,
898
+ .ui-state-focus a:visited {
899
+ color: #212121;
900
+ text-decoration: none;
901
+ }
902
+ .ui-state-active,
903
+ .ui-widget-content .ui-state-active,
904
+ .ui-widget-header .ui-state-active {
905
+ border: 1px solid #aaaaaa;
906
+ background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
907
+ font-weight: normal;
908
+ color: #212121;
909
+ }
910
+ .ui-state-active a,
911
+ .ui-state-active a:link,
912
+ .ui-state-active a:visited {
913
+ color: #212121;
914
+ text-decoration: none;
915
+ }
916
+
917
+ /* Interaction Cues
918
+ ----------------------------------*/
919
+ .ui-state-highlight,
920
+ .ui-widget-content .ui-state-highlight,
921
+ .ui-widget-header .ui-state-highlight {
922
+ border: 1px solid #fcefa1;
923
+ background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
924
+ color: #363636;
925
+ }
926
+ .ui-state-highlight a,
927
+ .ui-widget-content .ui-state-highlight a,
928
+ .ui-widget-header .ui-state-highlight a {
929
+ color: #363636;
930
+ }
931
+ .ui-state-error,
932
+ .ui-widget-content .ui-state-error,
933
+ .ui-widget-header .ui-state-error {
934
+ border: 1px solid #cd0a0a;
935
+ background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
936
+ color: #cd0a0a;
937
+ }
938
+ .ui-state-error a,
939
+ .ui-widget-content .ui-state-error a,
940
+ .ui-widget-header .ui-state-error a {
941
+ color: #cd0a0a;
942
+ }
943
+ .ui-state-error-text,
944
+ .ui-widget-content .ui-state-error-text,
945
+ .ui-widget-header .ui-state-error-text {
946
+ color: #cd0a0a;
947
+ }
948
+ .ui-priority-primary,
949
+ .ui-widget-content .ui-priority-primary,
950
+ .ui-widget-header .ui-priority-primary {
951
+ font-weight: bold;
952
+ }
953
+ .ui-priority-secondary,
954
+ .ui-widget-content .ui-priority-secondary,
955
+ .ui-widget-header .ui-priority-secondary {
956
+ opacity: .7;
957
+ filter:Alpha(Opacity=70); /* support: IE8 */
958
+ font-weight: normal;
959
+ }
960
+ .ui-state-disabled,
961
+ .ui-widget-content .ui-state-disabled,
962
+ .ui-widget-header .ui-state-disabled {
963
+ opacity: .35;
964
+ filter:Alpha(Opacity=35); /* support: IE8 */
965
+ background-image: none;
966
+ }
967
+ .ui-state-disabled .ui-icon {
968
+ filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
969
+ }
970
+
971
+ /* Icons
972
+ ----------------------------------*/
973
+
974
+ /* states and images */
975
+ .ui-icon {
976
+ width: 16px;
977
+ height: 16px;
978
+ }
979
+ .ui-icon,
980
+ .ui-widget-content .ui-icon {
981
+ background-image: url("images/ui-icons_222222_256x240.png");
982
+ }
983
+ .ui-widget-header .ui-icon {
984
+ background-image: url("images/ui-icons_222222_256x240.png");
985
+ }
986
+ .ui-state-default .ui-icon {
987
+ background-image: url("images/ui-icons_888888_256x240.png");
988
+ }
989
+ .ui-state-hover .ui-icon,
990
+ .ui-state-focus .ui-icon {
991
+ background-image: url("images/ui-icons_454545_256x240.png");
992
+ }
993
+ .ui-state-active .ui-icon {
994
+ background-image: url("images/ui-icons_454545_256x240.png");
995
+ }
996
+ .ui-state-highlight .ui-icon {
997
+ background-image: url("images/ui-icons_2e83ff_256x240.png");
998
+ }
999
+ .ui-state-error .ui-icon,
1000
+ .ui-state-error-text .ui-icon {
1001
+ background-image: url("images/ui-icons_cd0a0a_256x240.png");
1002
+ }
1003
+
1004
+ /* positioning */
1005
+ .ui-icon-blank { background-position: 16px 16px; }
1006
+ .ui-icon-carat-1-n { background-position: 0 0; }
1007
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
1008
+ .ui-icon-carat-1-e { background-position: -32px 0; }
1009
+ .ui-icon-carat-1-se { background-position: -48px 0; }
1010
+ .ui-icon-carat-1-s { background-position: -64px 0; }
1011
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
1012
+ .ui-icon-carat-1-w { background-position: -96px 0; }
1013
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
1014
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
1015
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
1016
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
1017
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
1018
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
1019
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
1020
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
1021
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
1022
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
1023
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
1024
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
1025
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
1026
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
1027
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
1028
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
1029
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
1030
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
1031
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
1032
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
1033
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
1034
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
1035
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
1036
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
1037
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
1038
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
1039
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
1040
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
1041
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
1042
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
1043
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
1044
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
1045
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
1046
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
1047
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
1048
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
1049
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
1050
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
1051
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
1052
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
1053
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
1054
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
1055
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
1056
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
1057
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
1058
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
1059
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
1060
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
1061
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
1062
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
1063
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
1064
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
1065
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
1066
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
1067
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
1068
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
1069
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
1070
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
1071
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
1072
+ .ui-icon-extlink { background-position: -32px -80px; }
1073
+ .ui-icon-newwin { background-position: -48px -80px; }
1074
+ .ui-icon-refresh { background-position: -64px -80px; }
1075
+ .ui-icon-shuffle { background-position: -80px -80px; }
1076
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
1077
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
1078
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
1079
+ .ui-icon-folder-open { background-position: -16px -96px; }
1080
+ .ui-icon-document { background-position: -32px -96px; }
1081
+ .ui-icon-document-b { background-position: -48px -96px; }
1082
+ .ui-icon-note { background-position: -64px -96px; }
1083
+ .ui-icon-mail-closed { background-position: -80px -96px; }
1084
+ .ui-icon-mail-open { background-position: -96px -96px; }
1085
+ .ui-icon-suitcase { background-position: -112px -96px; }
1086
+ .ui-icon-comment { background-position: -128px -96px; }
1087
+ .ui-icon-person { background-position: -144px -96px; }
1088
+ .ui-icon-print { background-position: -160px -96px; }
1089
+ .ui-icon-trash { background-position: -176px -96px; }
1090
+ .ui-icon-locked { background-position: -192px -96px; }
1091
+ .ui-icon-unlocked { background-position: -208px -96px; }
1092
+ .ui-icon-bookmark { background-position: -224px -96px; }
1093
+ .ui-icon-tag { background-position: -240px -96px; }
1094
+ .ui-icon-home { background-position: 0 -112px; }
1095
+ .ui-icon-flag { background-position: -16px -112px; }
1096
+ .ui-icon-calendar { background-position: -32px -112px; }
1097
+ .ui-icon-cart { background-position: -48px -112px; }
1098
+ .ui-icon-pencil { background-position: -64px -112px; }
1099
+ .ui-icon-clock { background-position: -80px -112px; }
1100
+ .ui-icon-disk { background-position: -96px -112px; }
1101
+ .ui-icon-calculator { background-position: -112px -112px; }
1102
+ .ui-icon-zoomin { background-position: -128px -112px; }
1103
+ .ui-icon-zoomout { background-position: -144px -112px; }
1104
+ .ui-icon-search { background-position: -160px -112px; }
1105
+ .ui-icon-wrench { background-position: -176px -112px; }
1106
+ .ui-icon-gear { background-position: -192px -112px; }
1107
+ .ui-icon-heart { background-position: -208px -112px; }
1108
+ .ui-icon-star { background-position: -224px -112px; }
1109
+ .ui-icon-link { background-position: -240px -112px; }
1110
+ .ui-icon-cancel { background-position: 0 -128px; }
1111
+ .ui-icon-plus { background-position: -16px -128px; }
1112
+ .ui-icon-plusthick { background-position: -32px -128px; }
1113
+ .ui-icon-minus { background-position: -48px -128px; }
1114
+ .ui-icon-minusthick { background-position: -64px -128px; }
1115
+ .ui-icon-close { background-position: -80px -128px; }
1116
+ .ui-icon-closethick { background-position: -96px -128px; }
1117
+ .ui-icon-key { background-position: -112px -128px; }
1118
+ .ui-icon-lightbulb { background-position: -128px -128px; }
1119
+ .ui-icon-scissors { background-position: -144px -128px; }
1120
+ .ui-icon-clipboard { background-position: -160px -128px; }
1121
+ .ui-icon-copy { background-position: -176px -128px; }
1122
+ .ui-icon-contact { background-position: -192px -128px; }
1123
+ .ui-icon-image { background-position: -208px -128px; }
1124
+ .ui-icon-video { background-position: -224px -128px; }
1125
+ .ui-icon-script { background-position: -240px -128px; }
1126
+ .ui-icon-alert { background-position: 0 -144px; }
1127
+ .ui-icon-info { background-position: -16px -144px; }
1128
+ .ui-icon-notice { background-position: -32px -144px; }
1129
+ .ui-icon-help { background-position: -48px -144px; }
1130
+ .ui-icon-check { background-position: -64px -144px; }
1131
+ .ui-icon-bullet { background-position: -80px -144px; }
1132
+ .ui-icon-radio-on { background-position: -96px -144px; }
1133
+ .ui-icon-radio-off { background-position: -112px -144px; }
1134
+ .ui-icon-pin-w { background-position: -128px -144px; }
1135
+ .ui-icon-pin-s { background-position: -144px -144px; }
1136
+ .ui-icon-play { background-position: 0 -160px; }
1137
+ .ui-icon-pause { background-position: -16px -160px; }
1138
+ .ui-icon-seek-next { background-position: -32px -160px; }
1139
+ .ui-icon-seek-prev { background-position: -48px -160px; }
1140
+ .ui-icon-seek-end { background-position: -64px -160px; }
1141
+ .ui-icon-seek-start { background-position: -80px -160px; }
1142
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
1143
+ .ui-icon-seek-first { background-position: -80px -160px; }
1144
+ .ui-icon-stop { background-position: -96px -160px; }
1145
+ .ui-icon-eject { background-position: -112px -160px; }
1146
+ .ui-icon-volume-off { background-position: -128px -160px; }
1147
+ .ui-icon-volume-on { background-position: -144px -160px; }
1148
+ .ui-icon-power { background-position: 0 -176px; }
1149
+ .ui-icon-signal-diag { background-position: -16px -176px; }
1150
+ .ui-icon-signal { background-position: -32px -176px; }
1151
+ .ui-icon-battery-0 { background-position: -48px -176px; }
1152
+ .ui-icon-battery-1 { background-position: -64px -176px; }
1153
+ .ui-icon-battery-2 { background-position: -80px -176px; }
1154
+ .ui-icon-battery-3 { background-position: -96px -176px; }
1155
+ .ui-icon-circle-plus { background-position: 0 -192px; }
1156
+ .ui-icon-circle-minus { background-position: -16px -192px; }
1157
+ .ui-icon-circle-close { background-position: -32px -192px; }
1158
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
1159
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
1160
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
1161
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
1162
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
1163
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
1164
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
1165
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
1166
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
1167
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
1168
+ .ui-icon-circle-check { background-position: -208px -192px; }
1169
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
1170
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
1171
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
1172
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
1173
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
1174
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
1175
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
1176
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
1177
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
1178
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
1179
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
1180
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
1181
+
1182
+
1183
+ /* Misc visuals
1184
+ ----------------------------------*/
1185
+
1186
+ /* Corner radius */
1187
+ .ui-corner-all,
1188
+ .ui-corner-top,
1189
+ .ui-corner-left,
1190
+ .ui-corner-tl {
1191
+ border-top-left-radius: 4px;
1192
+ }
1193
+ .ui-corner-all,
1194
+ .ui-corner-top,
1195
+ .ui-corner-right,
1196
+ .ui-corner-tr {
1197
+ border-top-right-radius: 4px;
1198
+ }
1199
+ .ui-corner-all,
1200
+ .ui-corner-bottom,
1201
+ .ui-corner-left,
1202
+ .ui-corner-bl {
1203
+ border-bottom-left-radius: 4px;
1204
+ }
1205
+ .ui-corner-all,
1206
+ .ui-corner-bottom,
1207
+ .ui-corner-right,
1208
+ .ui-corner-br {
1209
+ border-bottom-right-radius: 4px;
1210
+ }
1211
+
1212
+ /* Overlays */
1213
+ .ui-widget-overlay {
1214
+ background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
1215
+ opacity: .3;
1216
+ filter: Alpha(Opacity=30); /* support: IE8 */
1217
+ }
1218
+ .ui-widget-shadow {
1219
+ margin: -8px 0 0 -8px;
1220
+ padding: 8px;
1221
+ background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
1222
+ opacity: .3;
1223
+ filter: Alpha(Opacity=30); /* support: IE8 */
1224
+ border-radius: 8px;
1225
+ }
skin/frontend/default/default/css/padoo/jquery.bxslider.css ADDED
@@ -0,0 +1,204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * BxSlider v4.1.2 - Fully loaded, responsive content slider
3
+ * http://bxslider.com
4
+ *
5
+ * Written by: Steven Wanderski, 2014
6
+ * http://stevenwanderski.com
7
+ * (while drinking Belgian ales and listening to jazz)
8
+ *
9
+ * CEO and founder of bxCreative, LTD
10
+ * http://bxcreative.com
11
+ */
12
+
13
+
14
+ /** RESET AND LAYOUT
15
+ ===================================*/
16
+
17
+ .bx-wrapper {
18
+ position: relative;
19
+ margin: 0 auto 60px;
20
+ padding: 0;
21
+ *zoom: 1;
22
+ }
23
+
24
+ .bx-wrapper img {
25
+ max-width: 100%;
26
+ display: block;
27
+ }
28
+
29
+ /** THEME
30
+ ===================================*/
31
+
32
+ .bx-wrapper .bx-viewport {
33
+ -moz-box-shadow: 0 0 5px #ccc;
34
+ -webkit-box-shadow: 0 0 5px #ccc;
35
+ box-shadow: 0 0 5px #ccc;
36
+ border: 5px solid #fff;
37
+ left: -5px;
38
+ background: #fff;
39
+
40
+ /*fix other elements on the page moving (on Chrome)*/
41
+ -webkit-transform: translatez(0);
42
+ -moz-transform: translatez(0);
43
+ -ms-transform: translatez(0);
44
+ -o-transform: translatez(0);
45
+ transform: translatez(0);
46
+ }
47
+
48
+ .bx-wrapper .bx-pager,
49
+ .bx-wrapper .bx-controls-auto {
50
+ position: absolute;
51
+ bottom: -30px;
52
+ width: 100%;
53
+ }
54
+
55
+ /* LOADER */
56
+
57
+ .bx-wrapper .bx-loading {
58
+ min-height: 50px;
59
+ background: url(images/bx_loader.gif) center center no-repeat #fff;
60
+ height: 100%;
61
+ width: 100%;
62
+ position: absolute;
63
+ top: 0;
64
+ left: 0;
65
+ z-index: 2000;
66
+ }
67
+
68
+ /* PAGER */
69
+
70
+ .bx-wrapper .bx-pager {
71
+ text-align: center;
72
+ font-size: .85em;
73
+ font-family: Arial;
74
+ font-weight: bold;
75
+ color: #666;
76
+ padding-top: 20px;
77
+ }
78
+
79
+ .bx-wrapper .bx-pager .bx-pager-item,
80
+ .bx-wrapper .bx-controls-auto .bx-controls-auto-item {
81
+ display: inline-block;
82
+ *zoom: 1;
83
+ *display: inline;
84
+ }
85
+
86
+ .bx-wrapper .bx-pager.bx-default-pager a {
87
+ background: #666;
88
+ text-indent: -9999px;
89
+ display: block;
90
+ width: 10px;
91
+ height: 10px;
92
+ margin: 0 5px;
93
+ outline: 0;
94
+ -moz-border-radius: 5px;
95
+ -webkit-border-radius: 5px;
96
+ border-radius: 5px;
97
+ }
98
+
99
+ .bx-wrapper .bx-pager.bx-default-pager a:hover,
100
+ .bx-wrapper .bx-pager.bx-default-pager a.active {
101
+ background: #000;
102
+ }
103
+
104
+ /* DIRECTION CONTROLS (NEXT / PREV) */
105
+
106
+ .bx-wrapper .bx-prev {
107
+ left: 10px;
108
+ background: url("../../images/ajaxshopping/slider_controls.png") no-repeat 0 -32px;
109
+ }
110
+
111
+ .bx-wrapper .bx-next {
112
+ right: 10px;
113
+ background: url("../../images/ajaxshopping/slider_controls.png") no-repeat -43px -32px;
114
+ }
115
+
116
+ .bx-wrapper .bx-prev:hover {
117
+ background-position: 0 0;
118
+ }
119
+
120
+ .bx-wrapper .bx-next:hover {
121
+ background-position: -43px 0;
122
+ }
123
+
124
+ .bx-wrapper .bx-controls-direction a {
125
+ position: absolute;
126
+ top: 50%;
127
+ margin-top: -16px;
128
+ outline: 0;
129
+ width: 32px;
130
+ height: 32px;
131
+ text-indent: -9999px;
132
+ z-index: 9999;
133
+ }
134
+
135
+ .bx-wrapper .bx-controls-direction a.disabled {
136
+ display: none;
137
+ }
138
+
139
+ /* AUTO CONTROLS (START / STOP) */
140
+
141
+ .bx-wrapper .bx-controls-auto {
142
+ text-align: center;
143
+ }
144
+
145
+ .bx-wrapper .bx-controls-auto .bx-start {
146
+ display: block;
147
+ text-indent: -9999px;
148
+ width: 10px;
149
+ height: 11px;
150
+ outline: 0;
151
+ background: url(images/controls.png) -86px -11px no-repeat;
152
+ margin: 0 3px;
153
+ }
154
+
155
+ .bx-wrapper .bx-controls-auto .bx-start:hover,
156
+ .bx-wrapper .bx-controls-auto .bx-start.active {
157
+ background-position: -86px 0;
158
+ }
159
+
160
+ .bx-wrapper .bx-controls-auto .bx-stop {
161
+ display: block;
162
+ text-indent: -9999px;
163
+ width: 9px;
164
+ height: 11px;
165
+ outline: 0;
166
+ background: url(images/controls.png) -86px -44px no-repeat;
167
+ margin: 0 3px;
168
+ }
169
+
170
+ .bx-wrapper .bx-controls-auto .bx-stop:hover,
171
+ .bx-wrapper .bx-controls-auto .bx-stop.active {
172
+ background-position: -86px -33px;
173
+ }
174
+
175
+ /* PAGER WITH AUTO-CONTROLS HYBRID LAYOUT */
176
+
177
+ .bx-wrapper .bx-controls.bx-has-controls-auto.bx-has-pager .bx-pager {
178
+ text-align: left;
179
+ width: 80%;
180
+ }
181
+
182
+ .bx-wrapper .bx-controls.bx-has-controls-auto.bx-has-pager .bx-controls-auto {
183
+ right: 0;
184
+ width: 35px;
185
+ }
186
+
187
+ /* IMAGE CAPTIONS */
188
+
189
+ .bx-wrapper .bx-caption {
190
+ position: absolute;
191
+ bottom: 0;
192
+ left: 0;
193
+ background: #666\9;
194
+ background: rgba(80, 80, 80, 0.75);
195
+ width: 100%;
196
+ }
197
+
198
+ .bx-wrapper .bx-caption span {
199
+ color: #fff;
200
+ font-family: Arial;
201
+ display: block;
202
+ font-size: .85em;
203
+ padding: 10px;
204
+ }
skin/frontend/default/default/css/padoo/onecheckout.css ADDED
@@ -0,0 +1,452 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import "//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css";
2
+ .onecheckout-onepage-wrap{
3
+ /* position:relative; */
4
+ }
5
+ #load-info-overlay{
6
+ position:relative;
7
+ background:url('../../images/ecommerceteam/loadinfo.gif') 50% 50% no-repeat #fff;
8
+ opacity:0.8;
9
+ filter: alpha(opacity=50);
10
+ width:100%;
11
+ z-index:255;
12
+ display:none;
13
+ }
14
+ #sln-overlay-methods .img-load {
15
+ display: none;
16
+ }
17
+ .img-load {
18
+ background:url('../../images/padoo/ajax-loader-tr.gif') no-repeat;
19
+ width: 32px;
20
+ height: 32px;
21
+ position:absolute;
22
+ right: 0;
23
+ left:0;
24
+ bottom:0;
25
+ top:0;
26
+ margin:auto;
27
+ }
28
+ #onecheckout-form-wrap form{
29
+ zoom:1;
30
+ }
31
+ #onecheckout-form-wrap form ul{
32
+ margin:0;
33
+ padding:5px 10px;
34
+ list-style:none;
35
+
36
+ }
37
+
38
+ #onecheckout-form-wrap form ul.right{
39
+ margin-right:38px;
40
+ }
41
+
42
+ #onecheckout-form-wrap .address-form-list li{
43
+ clear:both;
44
+ zoom:1;
45
+ }
46
+ #onecheckout-form-wrap .address-form-list label{
47
+ display:inline;
48
+ float:left;
49
+ width:130px;
50
+ text-align:left;
51
+ }
52
+
53
+ #onecheckout-form-wrap .form-list label.required em{
54
+ color: #eb340a;
55
+ float: left;
56
+ font-style: normal;
57
+ position:initial;
58
+ }
59
+
60
+ #onecheckout-form-wrap.onecheckout-3columns .address-form-list label{
61
+ width:110px;
62
+ }
63
+
64
+ #onecheckout-form-wrap .address-form-list .field {
65
+ width:auto;
66
+ }
67
+ #onecheckout-form-wrap .address-form-list .field .input-box{
68
+ clear:none;
69
+ width:auto;
70
+ float:left;
71
+ }
72
+ #onecheckout-form-wrap .easy-step{
73
+ display:block;
74
+ clear:both;
75
+ border:1px solid #ccc;
76
+ background:url('../../images/ecommerceteam/block.gif') 0 0 repeat-x #fff;
77
+ margin: 0 0 10px;
78
+ padding: 0 0 10px;
79
+ }
80
+ #onecheckout-shipping-payment-step{
81
+ width:100%;
82
+ margin-bottom:10px;
83
+ position:relative;
84
+ }
85
+
86
+ #onecheckout-shipping-payment-step td{
87
+ border:1px solid #ccc;
88
+
89
+ }
90
+ #onecheckout-shipping-payment-step td.shipping-method,
91
+ #onecheckout-shipping-payment-step td.payment-method{
92
+ background:#fff;
93
+ }
94
+ #onecheckout-shipping-payment-step td.methods-separator{
95
+ width:10px;
96
+ border:0;
97
+ }
98
+ #onecheckout-shipping-payment-step td.shipping-method{
99
+ width:40%;
100
+ }
101
+ #onecheckout-form-wrap.onecheckout-3columns #onecheckout-shipping-payment-step td.shipping-method{
102
+ width:250px;
103
+ }
104
+ #onecheckout-form-wrap.onecheckout-3columns #onecheckout-shipping-payment-step td.shipping-method .easy-step{
105
+ width:220px;
106
+ }
107
+ #onecheckout-form-wrap.onecheckout-3columns #onecheckout-shipping-payment-step td.shipping-method .input-text{
108
+ width:215px;
109
+ }
110
+ #onecheckout-form-wrap .easy-step h2{
111
+ /* color:#E26703; */
112
+ font-size:16px;
113
+ font-weight:900;
114
+ margin:0;
115
+ padding: 10px;
116
+ }
117
+ #onecheckout-form-wrap .easy-step h2 span{
118
+ color:#333;
119
+ font-weight:100;
120
+ text-transform:none;
121
+ }
122
+ #onecheckout-form-wrap .easy-step h2 label{
123
+ display: block;
124
+ }
125
+ #onecheckout-form-wrap .address-form-list .fields .field{
126
+ width:50%;
127
+ }
128
+ #onecheckout-form-wrap .address-form-list .fields .field .input-box{
129
+
130
+ }
131
+
132
+
133
+ #onecheckout-form-wrap .address-form-list .input-box input.input-text{
134
+ padding:3px;
135
+ width:252px;
136
+ background:url('../../images/ecommerceteam/inputbg.gif') 0 0 no-repeat #fff;
137
+ }
138
+ #onecheckout-form-wrap.onecheckout-3columns .address-form-list .fields .field .input-box{
139
+ width:152px;
140
+ }
141
+ #onecheckout-form-wrap.onecheckout-3columns .address-form-list .input-box input.input-text{
142
+ width:152px;
143
+ }
144
+ #onecheckout-form-wrap.onecheckout-3columns .address-form-list .input-box{
145
+ width:160px;
146
+ }
147
+ #onecheckout-form-wrap.onecheckout-3columns .address-form-list .input-box select{
148
+ width:160px;
149
+ }
150
+ #onecheckout-form-wrap.onecheckout-3columns .onecheckout-left-column{
151
+ float:left;
152
+ width:36%;
153
+
154
+ }
155
+ #onecheckout-form-wrap.onecheckout-3columns .onecheckout-right-column{
156
+ float:right;
157
+ width:63%;
158
+ }
159
+
160
+ #onecheckout-form-wrap .address-form-list .input-box input.readonly{
161
+ color:#969696;
162
+ background:url('../../images/ecommerceteam/inputbg-readonly.gif') 0 0 no-repeat #e6e6e6;
163
+ }
164
+
165
+ #onecheckout-form-wrap .address-form-list .input-box select{
166
+ padding:2px;
167
+ background:url('../../images/ecommerceteam/inputbg.gif') 0 0 no-repeat #fff;
168
+ }
169
+
170
+ #onecheckout-form-wrap .address-form-list .input-box .validation-failed{
171
+ border:1px solid #EB340A !important;
172
+ background:url('../../images/ecommerceteam/inputbg-error.gif') 0 0 no-repeat #fff !important;
173
+ }
174
+
175
+ #onecheckout-form-wrap #onecheckout-shippingmethod,
176
+ #onecheckout-form-wrap #onecheckout-paymentmethod{
177
+ border:0;
178
+ margin:0;
179
+ }
180
+
181
+ #onecheckout-form-wrap #onecheckout-review{
182
+ clear:both;
183
+ position:relative;
184
+ }
185
+ #onecheckout-form-wrap .validation-advice{
186
+ /*display:none;*/
187
+ }
188
+ #onecheckout-form-wrap .address-form-list .control label{
189
+ display:inline;
190
+ margin-right:17px;
191
+ }
192
+ #onecheckout-form-wrap fieldset{
193
+ padding-top:10px;
194
+ }
195
+ #onecheckout-form-wrap #checkout-review-table{
196
+ margin:10px 0;
197
+ border:1px solid #ddd;
198
+ }
199
+ #onecheckout-form-wrap #checkout-review-table thead th {
200
+ background:#eee;
201
+ border:0;
202
+ border-bottom:1px solid #ddd !important;
203
+ }
204
+ #onecheckout-form-wrap #checkout-review-table tfoot tr{
205
+ background:#eee !important;
206
+ }
207
+ #onecheckout-form-wrap #checkout-review-table tfoot tr.first td {
208
+ background:url('../../images/ecommerceteam/totalsbg.gif') 0 0 repeat-x #eee;
209
+ }
210
+
211
+ #onecheckout-form-wrap #checkout-review-table .even{
212
+ background:#fff !important;
213
+ }
214
+ #onecheckout-form-wrap .button-set{
215
+ text-align:right;
216
+ }
217
+ #onecheckout-form-wrap.onecheckout-3columns .button-set{
218
+ float:left;
219
+ }
220
+ #onecheckout-shippingmethod .box-weight {
221
+ float: left;
222
+ width: 100%;
223
+ margin: 5px 0px 0px 0px;
224
+ }
225
+ #onecheckout-shippingmethod .box-weight p {
226
+ float: left;
227
+ width: 50%;
228
+ }
229
+ #onecheckout-shippingmethod .box-weight p span {
230
+ font-size: 16px;
231
+ font-weight: bold;
232
+ }
233
+
234
+ #elogin-buttons{
235
+ overflow:hidden;
236
+ zoom:1;
237
+ }
238
+ #elogin-message{
239
+ color:red
240
+ }
241
+ #elogin-loading{
242
+ background:url('../../images/ecommerceteam/elogin-loading.gif') center center no-repeat;
243
+ font-size:10px;
244
+ color:#666;
245
+ padding-top:5px;
246
+ height:20px;
247
+ }
248
+ #elogin-buttons{
249
+ padding-top:3px;
250
+ height:22px;
251
+ }
252
+
253
+ #onecheckout-coupon{
254
+ width: 50%;
255
+ float:left;
256
+ }
257
+
258
+ #onecheckout-coupon button{
259
+ margin-top:10px;
260
+ }
261
+
262
+ #onecheckout-coupon .button-set {
263
+ float: left;
264
+ }
265
+
266
+ #coupon_code{
267
+ width:90%;
268
+ }
269
+
270
+ .onecheckout-3columns #register-customer-password .field{
271
+ margin-bottom:8px;
272
+ }
273
+ #onecheckout-form-wrap #onecheckout-addressbilling select.address-select,
274
+ #onecheckout-form-wrap #shipping-address-form select.address-select{
275
+ width:98%;
276
+ }
277
+ .one_step {
278
+ float: left;
279
+ width: 100%;
280
+ }
281
+ .one_step ul {
282
+ float: left;
283
+ width: 100%;
284
+ margin-left: 5%;
285
+ }
286
+ .one_step ul li {
287
+ float: left;
288
+ margin-top: 16px;
289
+ height: 60px;
290
+ width: 25%;
291
+ }
292
+ .one_step ul li strong {
293
+ color: #E26703;
294
+ float: left;
295
+ font-size: 20px;
296
+ line-height: 20px;
297
+ margin-right: 15px;
298
+
299
+ }
300
+ .one_step ul li p {
301
+ float: left;
302
+ font-size: 14px;
303
+ font-weight: bold;
304
+ text-align: center;
305
+ }
306
+ .checkout-5step ul {
307
+ margin-left: 2%;
308
+ }
309
+ .checkout-5step ul li {
310
+ width: 20%;
311
+ }
312
+ #myimage {
313
+ position: fixed;
314
+ top: 0px;
315
+ left: 400px;
316
+ background: #fff;
317
+ z-index: 9999;
318
+ width: 300px;
319
+ padding: 30px;
320
+ }
321
+ .easy-step .subscribe label {
322
+ }
323
+ #checkout-review-table .cat-image {
324
+ float: left;
325
+ margin-right: 10px;
326
+ }
327
+ #checkout-review-table dl.item-options{display: inherit;}
328
+ #checkout-review-table .update,
329
+ #checkout-review-table .delete {
330
+ background: url("../../images/padoo/bg-btn-delete.gif") no-repeat scroll 0 0 transparent;
331
+ line-height: 50px;
332
+ padding-left: 15px;
333
+ text-decoration: none;
334
+ text-align: right;
335
+ color: #000;
336
+ float: right;
337
+ margin: 20px 0px 0px 0px;
338
+ }
339
+ #checkout-review-table .update:hover,
340
+ #checkout-review-table .delete:hover {
341
+ color: #E26703;
342
+ }
343
+ #checkout-review-table .update span,
344
+ #checkout-review-table .delete span {
345
+ float: right;
346
+ line-height: 10px;
347
+ }
348
+ #checkout-review-table .update {
349
+ background: url("../../images/padoo/bg-btn-update.gif") no-repeat scroll 0 0 transparent;
350
+ margin: 17px 0px 0px 0px;
351
+ }
352
+
353
+ .checkout-agreements .agree {
354
+ margin: 0;
355
+ padding: 10px 0;
356
+ }
357
+ .checkout-agreements .agree a{
358
+ text-decoration: none;
359
+ }
360
+ .checkout-agreements li {margin:0 !important;}
361
+ .agreement-box{
362
+ bottom: 0;
363
+ display: block;
364
+ height: 100%;
365
+ left: 0;
366
+ position: fixed;
367
+ right: 0;
368
+ top: 0;
369
+ width: 100%;
370
+ z-index:10005;
371
+ background: rgba(0, 0, 0, 0.7) no-repeat 0 50%;
372
+ display:none;
373
+ }
374
+ .agreement-box .agreement-content{
375
+ background: none repeat scroll 0 0 #ffffff;
376
+ border: 1px solid #999999;
377
+ bottom: 0;
378
+ height: 150px;
379
+ left: 0;
380
+ margin: auto;
381
+ padding: 5px 5px 5px 20px;
382
+ position: absolute;
383
+ right: 0;
384
+ top: 0 !important;
385
+ width: 450px;
386
+ border-radius: 4px;
387
+ box-shadow: 0 0 4px 2px #888;
388
+ box-sizing:content-box;
389
+ }
390
+ .agreement-box .agreement-content span{
391
+ display: block;
392
+ height: 128px;
393
+ margin-top: 10px;
394
+ overflow-y: scroll;
395
+ text-align: left;
396
+ width: 100%;
397
+ }
398
+ .agreement-box .agreement-content .close-confirm {
399
+ background: rgba(0, 0, 0, 0) url("../../images/padoo/controls.png") no-repeat scroll -50px 0;
400
+ bottom: 4px;
401
+ float: right;
402
+ left: 3px;
403
+ position: relative;
404
+ width: 20px;
405
+ height: 20px;
406
+ }
407
+ .comments{width: 50%; float: left;}
408
+ .comments textarea{padding: 0; width: 99.5%;}
409
+ .onestepcheckout-survey{
410
+ background: #f8f7f5;
411
+ margin: 10px;
412
+ padding: 10px;
413
+ }
414
+ .onestepcheckout-survey label{
415
+ display: block;
416
+ margin: 0 0 5px;
417
+ }
418
+ .onestepcheckout-survey select{
419
+ width: 50%;
420
+ }
421
+ .onestepcheckout-group{
422
+ display: inline-block;
423
+ padding: 1%;
424
+ width: 98%;
425
+ }
426
+ .onestepcheckout-group h2{padding: 10px 0 !important;}
427
+ .onestepcheckout-giftmessage{
428
+ background:#f8f7f5;
429
+ margin: 10px;
430
+ padding: 1px 10px;
431
+ }
432
+ .onestepcheckout-giftmessage .onestepcheckout-form-list{
433
+ padding:0 !important;
434
+ }
435
+ .onestepcheckout-giftmessage .gift-messages{
436
+ padding: 5px 0;
437
+ }
438
+ .onestepcheckout-form-list .field {
439
+ width:49%;
440
+ }
441
+ .onestepcheckout-form-list .field .input-box input {
442
+ width:98%;
443
+ }
444
+ .onestepcheckout-form-list .input-box textarea {
445
+ width: 99%;
446
+ }
447
+ .delivery-box{
448
+ margin:10px 0;
449
+ padding: 5px 10px;
450
+ }
451
+ .delivery-box input {height:19px;}
452
+ .enable-shipping,.group-method,#onecheckout-paymentmethod-available,#checkout-review-table-wrapper,.agreements,.subscribe,.delivery-enable{padding:5px 10px }
skin/frontend/default/default/css/padoo/storelocator.css ADDED
@@ -0,0 +1,529 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*Search*/
2
+ .store-locator-search-box{
3
+ width:100%;
4
+ border-bottom:1px solid #ccc;
5
+ margin-bottom:20px;
6
+ }
7
+ .store-locator-list {
8
+ width:50%;
9
+ float :left;
10
+ }
11
+ .store-locator-list:nth-child(2n){text-align:right}
12
+ .store-locator-content a:active{text-decoration:underline;color:#6699FF;}
13
+ .store-locator-list-store td{vertical-align:middle;}
14
+ .store-locator-list-store td:first-child{padding-right:25px;}
15
+ .fields.store-locator-list.last {
16
+ float: right;
17
+ margin:15px 0 10px;
18
+ }
19
+ .store-locator-list label{
20
+ width:24%;
21
+ float:left;
22
+ }
23
+ .store-locator-list input{
24
+ width:70%;
25
+ padding:2px!important;
26
+ }
27
+ .adp-directions{width:100%;}
28
+ .store-locator-list select{
29
+ width:71%!important;
30
+ padding:0;
31
+ margin:0;
32
+ padding:2px!important;
33
+ }
34
+ .store-locator-column-left{
35
+ padding-left:2%;
36
+ width:40%!important;
37
+ float:left;
38
+ }
39
+ .padoo-map-image{
40
+ width:100%;
41
+ }
42
+ .padoo-map-image img{width:100%;}
43
+ .store-locator-column-right{
44
+ padding-left:5px;
45
+ width:55%!important;
46
+ float:right;
47
+ }
48
+ .store-locator-column-button{
49
+ padding-right:5px;
50
+ text-align:right;
51
+ }
52
+ /*Content*/
53
+ .store-locator-content{
54
+ width:100%;
55
+ height: auto;
56
+ border-bottom:1px solid #ccc;
57
+ padding-bottom:10px;
58
+ }
59
+ /*List store*/
60
+ .store-locator-list-store-box{
61
+ border:1px solid #ccc;
62
+ float:left;
63
+ width:29%;
64
+ padding:5px 0px 5px 10px;
65
+ height:520px;
66
+ }
67
+
68
+ .fb_iframe_widget span,.fb_iframe_widget iframe{width:100%!important;}
69
+ .fb_iframe_widget{display:inline!important;}
70
+ .store-locator-list-store-title{
71
+ width:95%;
72
+ font-size:16pt;
73
+ border-bottom:1px solid #ccc;
74
+ margin-bottom:5px;
75
+ }
76
+ .store-locator-list-store{
77
+ height:480px;
78
+ overflow:auto;
79
+ }
80
+ .store-locator-list-store-item{
81
+ width:93%;
82
+ min-height:100px;
83
+ height: auto;
84
+ margin-bottom:10px;
85
+ border:1px solid #ccc;
86
+ padding:2%;
87
+
88
+ }
89
+ .store-locator-list-store-item:hover{
90
+ background:#E9E9F3;
91
+ }
92
+ .active{
93
+ background:#E9E9F3;
94
+ }
95
+ .selecteda{
96
+ background:#E9E9F3;
97
+ }
98
+ .store-locator-item-content{
99
+ color:#666;
100
+ float:left;
101
+ width:60%;
102
+ font-size:8pt;
103
+ }
104
+ .store-locator-item-image{
105
+ float:right;
106
+ width:70px;
107
+ height:100px;
108
+ background:#edf7fd;
109
+ }
110
+ .store-locator-item-name{
111
+ font-size:9pt;
112
+ color:#de5400;
113
+ font-weight:bold;
114
+ }
115
+ .store-locator-view-detail .store-locator-item-name a{
116
+ text-decoration: none;
117
+ color: #de5400;
118
+ }
119
+ .store-locator-view-detail .store-locator-item-name a:hover{
120
+ text-decoration: underline;
121
+ }
122
+ .store-locator-item-content a{
123
+ color:#69F;
124
+ font-style:italic;
125
+ text-decoration:none;
126
+ margin-right:10px;
127
+ }
128
+ .store-locator-item-content a:hover{
129
+ text-decoration:underline;
130
+ }
131
+ /*Map*/
132
+ .store-locator-map{
133
+ border:1px solid #ccc;
134
+ float:right;
135
+ height:530px;
136
+ width:68%;
137
+ }
138
+
139
+ .store-locator-view-detail{
140
+ width: 40%;
141
+ height: auto;
142
+ float: left;
143
+ }
144
+ .store-locator-view-detail a{
145
+ color:#69F;
146
+ text-decoration: none;
147
+ }
148
+ .store-locator-view-detail label{
149
+ display: block;
150
+ float: left;
151
+ width: 25%;
152
+ font-weight: bold;
153
+ clear: both;
154
+ }
155
+ .store-locator-view-detail span{
156
+ width: 73%;
157
+ display: block;
158
+ float: right;
159
+ padding-bottom: 2px;
160
+ }
161
+ .store-locator-view-detail p{
162
+ text-align: justify;
163
+ padding-top:1px;
164
+ padding-bottom: 1px;
165
+ margin: 0;
166
+ }
167
+ .clear{
168
+ clear:both;
169
+ }
170
+
171
+ .store-pickup-image{
172
+ float :left;
173
+ margin-right: 5px;
174
+ }
175
+
176
+ .locator-main-outer .locator-image-small{
177
+ border: 2px solid #DDDDDD;
178
+ float: left;
179
+ height: 56px;
180
+ overflow: hidden;
181
+ width: 56px;
182
+ }
183
+ .locator-image-main{
184
+ margin: 0 0 13px;
185
+ }
186
+ .locator-main-outer .more-views h2 {
187
+ border-bottom: 1px solid #CCCCCC;
188
+ font-size: 11px;
189
+ margin: 0 0 8px;
190
+ text-transform: uppercase;
191
+ font-weight: bold;
192
+ }
193
+ .store-locator-title{
194
+ color: #de5400;
195
+ font-weight: bold;
196
+ font-size: 13px;
197
+ margin-bottom: 5px;
198
+ display: block;
199
+ }
200
+
201
+ .more-views ul li {
202
+ float: left;
203
+ padding: 3px;
204
+ margin: 1px;
205
+ border: 1px solid rgb(230, 230, 230);
206
+ }
207
+ .padoo-map-image:hover img{
208
+ box-shadow: 0 0 5px rgb(155, 148, 148);
209
+ }
210
+ .locator-image-small:hover img{
211
+ border: 1px solid #ccc;
212
+ }
213
+ #description {
214
+ overflow: auto;
215
+ max-height: 250px;
216
+ }
217
+ .store-locator-tag{
218
+ position: relative;
219
+ width:98%;
220
+ padding:1%;
221
+ margin:auto;
222
+ padding-top: 20px;
223
+ margin-top:13px;
224
+ border:1px solid #E5E5E5;
225
+ background:url(storelocator/tag-bg.png) repeat;
226
+ }
227
+ .store-locator-tag a{
228
+ color:#fafafa;
229
+ text-shadow: 0 1px rgba(0,0,0,0.4);
230
+ text-decoration:none;
231
+ display: inline-block;
232
+ padding: 0 12px;
233
+ font-size:11pt;
234
+ margin-bottom: 5px;
235
+ background:#06F;
236
+ border-radius:15px;
237
+ background: #ff9035; /* Old browsers */
238
+ line-height:27px;
239
+ background: -moz-linear-gradient(top, #ff9035 1%, #ff7400 100%); /* FF3.6+ */
240
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#ff9035), color-stop(100%,#ff7400)); /* Chrome,Safari4+ */
241
+ background: -webkit-linear-gradient(top, #ff9035 1%,#ff7400 100%); /* Chrome10+,Safari5.1+ */
242
+ background: -o-linear-gradient(top, #ff9035 1%,#ff7400 100%); /* Opera 11.10+ */
243
+ background: -ms-linear-gradient(top, #ff9035 1%,#ff7400 100%); /* IE10+ */
244
+ background: linear-gradient(to bottom, #ff9035 1%,#ff7400 100%); /* W3C */
245
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff9035', endColorstr='#ff7400',GradientType=0 ); /* IE6-9 */
246
+
247
+ box-shadow: 0 1px 2px rgba(0,0,0,0.21);
248
+ }
249
+ .store-locator-tag a:hover{
250
+ background: #B6DA25;
251
+ }
252
+ .padoo-storelocator-getdirection{
253
+ border: 1px solid #E5E6E3;
254
+ background-color: #FFFFFF;
255
+ margin-top: -10px;
256
+ margin-bottom: 10px;
257
+ width: 97%;
258
+ clear:both;
259
+ display:block;
260
+ }
261
+ .padoo-storelocator-navigation{
262
+ margin-top: 5px;
263
+ margin-bottom:5px;
264
+ display: block;
265
+ }
266
+ .padoo-storelocator-navigation .store-locator-navigation_image{
267
+ background: url(storelocator/navigation.png) left no-repeat;
268
+ background-position: 0px 0px;
269
+ display:inline-block;
270
+ height: 8px;
271
+ width: 16px;
272
+ margin-right:10px;
273
+ margin-left:5px;
274
+ }
275
+ .padoo-storelocator-directionsPanel{}
276
+ .padoo-storelocator-navigation-up{
277
+ background-image: url(storelocator/navigation.png);
278
+ background-position: 16px 0px;
279
+
280
+ height: 8px;
281
+ width: 16px;
282
+ margin-left: 107px;
283
+ margin-top: 3px;
284
+ display: block;
285
+ }
286
+ .store-locator-tag .tag_active{
287
+ background:#B6DA25;
288
+ }
289
+
290
+ .store-locator-span-tag {
291
+ font-weight: bold;
292
+ border: 1px solid #E5E5E5;
293
+ position: absolute;
294
+ top: -10px;
295
+ padding:2px;
296
+ background-color: #F1F0F0;
297
+ background:url(storelocator/tag-bg.png) repeat;
298
+ }
299
+ .store-locator-list input,.store-locator-list select{height:auto!important; border:1px solid #CCCCCC;}
300
+
301
+ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++RESPONSIVE++++++++++++++++++++++++++++++++++++++++++++++++++++*/
302
+
303
+ /*@media all and (min-width: 0px) and (max-width: 379px) {
304
+
305
+ }*/
306
+
307
+ @media all and (min-width: 0px) and (max-width: 719px) {
308
+ .store-locator-list,.store-locator-list label,.store-locator-list input,.store-locator-list select{
309
+ width:100%!important;
310
+ text-align:left;
311
+ -webkit-box-sizing:border-box;
312
+ -moz-box-sizing:border-box;
313
+ box-sizing:border-box;
314
+ -moz-background-clip:padding-box !important;
315
+ -webkit-background-clip:padding-box !important;
316
+ background-clip:padding-box !important;
317
+ }
318
+ .store-locator-list-store-box{
319
+ width:100%;
320
+ border:none;
321
+ padding:5px 0 5px 0px;
322
+ border-bottom:1px solid #cccccc;
323
+ margin-bottom:18px;
324
+ height:auto;
325
+ }
326
+ .store-locator-list-store{width:100%;
327
+ padding-right:0;
328
+ height:160px;
329
+ }
330
+ .store-locator-list-store-title,.store-locator-view-detail{
331
+ width:100%;
332
+ }
333
+
334
+ .store-locator-list-store-item{
335
+ width:100%;
336
+ float:left;
337
+ -webkit-box-sizing:border-box;
338
+ -moz-box-sizing:border-box;
339
+ box-sizing:border-box;
340
+ -moz-background-clip:padding-box !important;
341
+ -webkit-background-clip:padding-box !important;
342
+ background-clip:padding-box !important;
343
+ }
344
+
345
+ #store-locator-list-store div.store-locator-list-store-item:nth-child(even){
346
+ float:right;
347
+ }
348
+ .store-locator-list-store-box .clear{
349
+ display:none;
350
+ }
351
+ .store-locator-map{
352
+ width:100%!important;
353
+ margin-bottom:15px;
354
+ }
355
+ .store-locator-item-content a{float:left!important;}
356
+ .padoo-map-image{width:100%;}
357
+ .padoo-map-image img{width:100%;}
358
+
359
+ .store-locator-column-right,.fb_iframe_widget span,.fb_iframe_widget iframe{width:100%!important;}
360
+ .fb_iframe_widget{display:inline!important;}
361
+
362
+ .store-locator-column-left{
363
+ width:100%!important;
364
+ margin-bottom:18px;
365
+ }
366
+ }
367
+ /*
368
+ @media all and (min-width: 481px) and (max-width: 719px) {
369
+ .store-locator-list,.store-locator-list label,.store-locator-list input,.store-locator-list select{
370
+ width:100%;
371
+ text-align:left;
372
+ -webkit-box-sizing:border-box;
373
+ -moz-box-sizing:border-box;
374
+ box-sizing:border-box;
375
+ -moz-background-clip:padding-box !important;
376
+ -webkit-background-clip:padding-box !important;
377
+ background-clip:padding-box !important;
378
+ }
379
+ .store-locator-list-store-box,.store-locator-view-detail{
380
+ width:100%;
381
+ border:none;
382
+ padding:5px 0 5px 0px;
383
+ border-bottom:1px solid #cccccc;
384
+ margin-bottom:18px;
385
+ height:auto;
386
+ }
387
+ .store-locator-list-store{width:100%;
388
+ padding-right:0;
389
+ height:160px;
390
+ }
391
+ .store-locator-list-store-title{
392
+ width:100%;
393
+ }
394
+
395
+ .store-locator-list-store-item{
396
+ width:49%;
397
+ float:left;
398
+ -webkit-box-sizing:border-box;
399
+ -moz-box-sizing:border-box;
400
+ box-sizing:border-box;
401
+ -moz-background-clip:padding-box !important;
402
+ -webkit-background-clip:padding-box !important;
403
+ background-clip:padding-box !important;
404
+ }
405
+
406
+ #store-locator-list-store div.store-locator-list-store-item:nth-child(even){
407
+ float:right;
408
+ }
409
+ .store-locator-list-store-box .clear{
410
+ display:none;
411
+ }
412
+ .store-locator-map{
413
+ width:100%!important;
414
+ margin-bottom:15px;
415
+ }
416
+ .store-locator-item-content a{float:left!important;}
417
+ .store-locator-column-right{
418
+ float:left;
419
+ }
420
+ .store-locator-column-left{
421
+ width:100%!important;
422
+ }
423
+ .locator-image-main img{
424
+ width:400px;
425
+ display:block;
426
+ float:none; margin:0 auto;
427
+ }
428
+
429
+ .store-locator-title{text-align:center;}
430
+
431
+ .store-locator-column-right,.fb_iframe_widget span,.fb_iframe_widget iframe{width:100%!important;}
432
+ .fb_iframe_widget{display:inline!important;}
433
+
434
+ }
435
+ */
436
+ @media screen and (min-width: 720px) and (max-width: 985px) {
437
+ .store-locator-list,.store-locator-list label,.store-locator-list input,.store-locator-list select{
438
+ width:100%!important;
439
+ text-align:left;
440
+ -webkit-box-sizing:border-box;
441
+ -moz-box-sizing:border-box;
442
+ box-sizing:border-box;
443
+ -moz-background-clip:padding-box !important;
444
+ -webkit-background-clip:padding-box !important;
445
+ background-clip:padding-box !important;
446
+ }
447
+ .store-locator-list-store-box{
448
+ width:100%;
449
+ border:none;
450
+ padding:5px 0 5px 0px;
451
+ border-bottom:1px solid #cccccc;
452
+ margin-bottom:18px;
453
+ height:auto;
454
+ }
455
+ .store-locator-list-store{width:100%;
456
+ padding-right:0;
457
+ height:160px;
458
+ }
459
+ .store-locator-list-store-title,.store-locator-view-detail{
460
+ width:100%;
461
+ }
462
+
463
+ .store-locator-list-store-item{
464
+ width:100%;
465
+ float:left;
466
+ -webkit-box-sizing:border-box;
467
+ -moz-box-sizing:border-box;
468
+ box-sizing:border-box;
469
+ -moz-background-clip:padding-box !important;
470
+ -webkit-background-clip:padding-box !important;
471
+ background-clip:padding-box !important;
472
+ }
473
+
474
+ #store-locator-list-store div.store-locator-list-store-item:nth-child(even){
475
+ float:right;
476
+ }
477
+ .store-locator-list-store-box .clear{
478
+ display:none;
479
+ }
480
+ .store-locator-map{
481
+ width:100%!important;
482
+ margin-bottom:15px;
483
+ }
484
+ .store-locator-item-content a{float:left!important;}
485
+ .padoo-map-image{width:100%;}
486
+ .padoo-map-image img{width:100%;}
487
+
488
+ .store-locator-column-right,.fb_iframe_widget span,.fb_iframe_widget iframe{width:100%!important;}
489
+ .fb_iframe_widget{display:inline!important;}
490
+
491
+ .store-locator-column-left{
492
+ width:100%!important;
493
+ margin-bottom:18px;
494
+ }
495
+ }
496
+ @media only screen and (max-width: 767px) {
497
+ .store-locator-list label{width:27%;}
498
+ .store-locator-column-right{float:right;width:100%;}
499
+ .padoo-map-image{width:100%;}
500
+ .padoo-map-image img{width:100%;}
501
+
502
+ .fb_iframe_widget span,.fb_iframe_widget iframe{width:100%!important;}
503
+ .fb_iframe_widget{display:inline!important;}
504
+ }
505
+
506
+ @media screen and (min-width: 986px) and (max-width: 1235px) {
507
+
508
+ }
509
+
510
+
511
+
512
+ @media screen and (min-width: 1236px) and (max-width: 1585px) {
513
+
514
+
515
+ }
516
+
517
+
518
+ @media screen and (min-width: 1586px) and (max-width: 1890px) {
519
+
520
+ }
521
+
522
+
523
+ @media screen and (min-width:1891px) {
524
+
525
+ }
526
+ .store-locator-content #map img {
527
+ max-width: inherit;
528
+ width: auto !important;
529
+ }
skin/frontend/default/default/css/padoo/storelocator/navigation.png ADDED
Binary file
skin/frontend/default/default/css/padoo/storelocator/navigation1.png ADDED
Binary file
skin/frontend/default/default/css/padoo/storelocator/tag-bg.png ADDED
Binary file
skin/frontend/default/default/css/padoo/storelocator/vssver2.scc ADDED
Binary file
skin/frontend/default/default/css/padoo/testimonial.css ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .testimonials-container {}
2
+ .testimonials-container .title-box { position: relative;}
3
+ .testimonials-container .title-box a {
4
+ position: absolute;
5
+ right: 0;
6
+ text-decoration: none;
7
+ top: 15px;
8
+ }
9
+ .testimonials-container .title {
10
+ border-bottom: 1px solid #ccc;
11
+ margin: 0 0 30px;
12
+ font-size: 25px;
13
+ }
14
+ .testimonials-container .testimonials {}
15
+ .testimonials-container .testimonials .testimonial-image {
16
+ float: left;
17
+ margin: 0 10px 10px 0;
18
+ }
19
+ .testimonials-container .testimonials .testimonial-text {
20
+ border-bottom: 1px solid #ccc;
21
+ margin: 0 0 15px;
22
+ min-height: 150px;
23
+ }
24
+ .testimonials-container .testimonials .testimonial-text .author,
25
+ .sidebar-box .sidebar-name{
26
+ text-align: right;
27
+ font-style: italic;
28
+ }
29
+ .testimonials-sidebar{}
30
+ .testimonials-sidebar .block-title{}
31
+ .testimonials-sidebar .block-content{}
32
+ .testimonials-sidebar .block-content .sidebar-box{
33
+ margin: 0 0 10px;
34
+ padding: 10px 5px;
35
+ box-sizing: border-box;
36
+ width: 100% !important;
37
+ }
38
+ .testimonials-sidebar .block-content .sidebar-box.last{border:0}
39
+ .testimonials-sidebar .block-content .sidebar-box .sidebar-media img{width:100%;text-align:center}
40
+ .testimonials-sidebar .block-content .sidebar-box .sidebar-text{}
41
+ .testimonials-sidebar .block-content .sidebar-box .sidebar-name{}
42
+
43
+ .testimonials-slider li {height: 200px;}
44
+ .testimonials-container.slider .testimonial-item{padding: 5px 10px 0 0;}
45
+ .testimonials-container.slider .testimonial-text{padding-top: 5px;}
46
+ .testimonials-container.slider .bx-controls .bx-controls-direction{display:none}
47
+ .testimonials-container.slider figure {text-align: center;padding: 0 0 5px;}
48
+ .testimonials-container.slider figure img{
49
+ display: inline-block;
50
+ width: 120px;
51
+ }
52
+ .testimonials-container.slider .author{
53
+ font-style: italic;
54
+ text-align: center;
55
+ color: #f5831f;
56
+ }
57
+ .testimonials-container.slider blockquote::before {
58
+ color: #ccc;
59
+ content: "“";
60
+ font-family: Georgia,"Times New Roman",Times,serif;
61
+ font-size: 30px;
62
+ font-style: normal;
63
+ left: 3px;
64
+ position: absolute;
65
+ top: -3px;
66
+ width: 55px;
67
+ }
68
+ .submit-form h4.title {
69
+ font-size: 22px;
70
+ margin: 0 0 15px;
71
+ }
72
+ .submit-form .field label {
73
+ display: block;
74
+ margin: 0 0 5px;
75
+ }
76
+ .submit-form .field input[type='text'] {
77
+ border: 1px solid #ccc;
78
+ height: 20px;
79
+ width: 50%;
80
+ }
81
+ .submit-form .field {
82
+ margin: 0 0 15px;
83
+ }
skin/frontend/default/default/css/padoo/tinybox.css ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ #tinybox {position:fixed; top:40% !important; display:none;padding:15px; background:#fff ; z-index:2000}
2
+ #tinymask {position:absolute; display:none; top:0; left:0; height:100%; width:100%; background:#000; z-index:1500}
3
+ #tinycontent {background:#fff}
skin/frontend/default/default/css/testimonial/testimonial.css ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .testimonials-container {width:100%}
2
+ .testimonials-container .testimonials > div{
3
+ border-bottom: 1px solid #ccc;
4
+ clear: both;
5
+ display: inline-block;
6
+ width: 100%;
7
+ }
8
+ .testimonials-container .title-box { position: relative;}
9
+ .testimonials-container .title-box a {
10
+ position: absolute;
11
+ right: 0;
12
+ text-decoration: none;
13
+ top: 15px;
14
+ }
15
+ .testimonials-container .title {
16
+ border-bottom: 1px solid #ccc;
17
+ margin: 0 0 30px;
18
+ font-size: 25px;
19
+ }
20
+ .testimonials-container .testimonials {}
21
+ .testimonials-container .testimonials .testimonial-image {
22
+ float: left;
23
+ margin: 10px;
24
+ }
25
+ .testimonials-container .testimonials .testimonial-text {
26
+ margin: 10px 0 15px;
27
+ min-height: 150px;
28
+ }
29
+ .testimonials-container .testimonials .testimonial-text .author,
30
+ .sidebar-box .sidebar-name{
31
+ text-align: right;
32
+ font-style: italic;
33
+ }
34
+ .testimonials-sidebar{}
35
+ .testimonials-sidebar .block-title{}
36
+ .testimonials-sidebar .block-content{}
37
+ .testimonials-sidebar .block-content .sidebar-box{
38
+ margin: 0 0 10px;
39
+ padding: 10px 5px;
40
+ box-sizing: border-box;
41
+ width: 100% !important;
42
+ }
43
+ .testimonials-sidebar .block-content .sidebar-box.last{border:0}
44
+ .testimonials-sidebar .block-content .sidebar-box .sidebar-media img{width:100%;text-align:center}
45
+ .testimonials-sidebar .block-content .sidebar-box .sidebar-text{}
46
+ .testimonials-sidebar .block-content .sidebar-box .sidebar-name{}
47
+
48
+ .testimonials-slider li {height: 200px;}
49
+ .testimonials-container.slider .testimonial-item{padding: 5px 10px 0 0;}
50
+ .testimonials-container.slider .testimonial-text{padding-top: 5px;}
51
+ .testimonials-container.slider .bx-wrapper .bx-pager {text-align: center !important; width: 100% !important;}
52
+ .testimonials-container.slider .bx-controls .bx-controls-direction{display:none}
53
+ .testimonials-container.slider figure {text-align: center;padding: 0 0 5px;}
54
+ .testimonials-container.slider figure img{
55
+ border-radius: 50%;
56
+ display: inline-block;
57
+ width: 70px;
58
+ }
59
+ .testimonials-container.slider .author{
60
+ font-style: italic;
61
+ text-align: center;
62
+ color: #f5831f;
63
+ }
64
+ .testimonials-container.slider blockquote::before {
65
+ color: #ccc;
66
+ content: "“";
67
+ font-family: Georgia,"Times New Roman",Times,serif;
68
+ font-size: 30px;
69
+ font-style: normal;
70
+ left: 3px;
71
+ position: absolute;
72
+ top: -3px;
73
+ width: 55px;
74
+ }
75
+ .testimonial-form ,.testimonial-form textarea {width: 100%;}
76
+ .submit-form h4.title {
77
+ font-size: 22px;
78
+ margin: 0 0 15px;
79
+ }
80
+ .submit-form .field label {
81
+ display: block;
82
+ margin: 0 0 5px;
83
+ }
84
+ .submit-form .field input[type='text'] {
85
+ border: 1px solid #ccc;
86
+ height: 20px;
87
+ width: 50%;
88
+ }
89
+ .submit-form .field {
90
+ margin: 0 0 15px;
91
+ }
skin/frontend/default/default/images/padoo/ajax-loader-tr.gif ADDED
Binary file
skin/frontend/default/default/images/padoo/bg-btn-delete.gif ADDED
Binary file
skin/frontend/default/default/images/padoo/bg-btn-update.gif ADDED
Binary file
skin/frontend/default/default/images/padoo/btn_trash.gif ADDED
Binary file
skin/frontend/default/default/images/padoo/controls.png ADDED
Binary file
skin/frontend/default/default/images/padoo/loading.gif ADDED
Binary file
skin/frontend/default/default/images/padoo/process.jpg ADDED
Binary file
skin/frontend/default/default/images/padoo/slider_controls.png ADDED
Binary file
skin/frontend/default/default/js/padoo/jquery.bxslider.js ADDED
@@ -0,0 +1,1343 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * BxSlider v4.1.2 - Fully loaded, responsive content slider
3
+ * http://bxslider.com
4
+ *
5
+ * Copyright 2014, Steven Wanderski - http://stevenwanderski.com - http://bxcreative.com
6
+ * Written while drinking Belgian ales and listening to jazz
7
+ *
8
+ * Released under the MIT license - http://opensource.org/licenses/MIT
9
+ */
10
+
11
+ ;(function($){
12
+
13
+ var plugin = {};
14
+
15
+ var defaults = {
16
+
17
+ // GENERAL
18
+ mode: 'horizontal',
19
+ slideSelector: '',
20
+ infiniteLoop: true,
21
+ hideControlOnEnd: false,
22
+ speed: 500,
23
+ easing: null,
24
+ slideMargin: 0,
25
+ startSlide: 0,
26
+ randomStart: false,
27
+ captions: false,
28
+ ticker: false,
29
+ tickerHover: false,
30
+ adaptiveHeight: false,
31
+ adaptiveHeightSpeed: 500,
32
+ video: false,
33
+ useCSS: true,
34
+ preloadImages: 'visible',
35
+ responsive: true,
36
+ slideZIndex: 50,
37
+ wrapperClass: 'bx-wrapper',
38
+
39
+ // TOUCH
40
+ touchEnabled: true,
41
+ swipeThreshold: 50,
42
+ oneToOneTouch: true,
43
+ preventDefaultSwipeX: true,
44
+ preventDefaultSwipeY: false,
45
+
46
+ // PAGER
47
+ pager: true,
48
+ pagerType: 'full',
49
+ pagerShortSeparator: ' / ',
50
+ pagerSelector: null,
51
+ buildPager: null,
52
+ pagerCustom: null,
53
+
54
+ // CONTROLS
55
+ controls: true,
56
+ nextText: 'Next',
57
+ prevText: 'Prev',
58
+ nextSelector: null,
59
+ prevSelector: null,
60
+ autoControls: false,
61
+ startText: 'Start',
62
+ stopText: 'Stop',
63
+ autoControlsCombine: false,
64
+ autoControlsSelector: null,
65
+
66
+ // AUTO
67
+ auto: false,
68
+ pause: 4000,
69
+ autoStart: true,
70
+ autoDirection: 'next',
71
+ autoHover: false,
72
+ autoDelay: 0,
73
+ autoSlideForOnePage: false,
74
+
75
+ // CAROUSEL
76
+ minSlides: 1,
77
+ maxSlides: 1,
78
+ moveSlides: 0,
79
+ slideWidth: 0,
80
+
81
+ // CALLBACKS
82
+ onSliderLoad: function() {},
83
+ onSlideBefore: function() {},
84
+ onSlideAfter: function() {},
85
+ onSlideNext: function() {},
86
+ onSlidePrev: function() {},
87
+ onSliderResize: function() {}
88
+ }
89
+
90
+ $.fn.bxSlider = function(options){
91
+
92
+ if(this.length == 0) return this;
93
+
94
+ // support mutltiple elements
95
+ if(this.length > 1){
96
+ this.each(function(){$(this).bxSlider(options)});
97
+ return this;
98
+ }
99
+
100
+ // create a namespace to be used throughout the plugin
101
+ var slider = {};
102
+ // set a reference to our slider element
103
+ var el = this;
104
+ plugin.el = this;
105
+
106
+ /**
107
+ * Makes slideshow responsive
108
+ */
109
+ // first get the original window dimens (thanks alot IE)
110
+ var windowWidth = $(window).width();
111
+ var windowHeight = $(window).height();
112
+
113
+
114
+
115
+ /**
116
+ * ===================================================================================
117
+ * = PRIVATE FUNCTIONS
118
+ * ===================================================================================
119
+ */
120
+
121
+ /**
122
+ * Initializes namespace settings to be used throughout plugin
123
+ */
124
+ var init = function(){
125
+ // merge user-supplied options with the defaults
126
+ slider.settings = $.extend({}, defaults, options);
127
+ // parse slideWidth setting
128
+ slider.settings.slideWidth = parseInt(slider.settings.slideWidth);
129
+ // store the original children
130
+ slider.children = el.children(slider.settings.slideSelector);
131
+ // check if actual number of slides is less than minSlides / maxSlides
132
+ if(slider.children.length < slider.settings.minSlides) slider.settings.minSlides = slider.children.length;
133
+ if(slider.children.length < slider.settings.maxSlides) slider.settings.maxSlides = slider.children.length;
134
+ // if random start, set the startSlide setting to random number
135
+ if(slider.settings.randomStart) slider.settings.startSlide = Math.floor(Math.random() * slider.children.length);
136
+ // store active slide information
137
+ slider.active = { index: slider.settings.startSlide }
138
+ // store if the slider is in carousel mode (displaying / moving multiple slides)
139
+ slider.carousel = slider.settings.minSlides > 1 || slider.settings.maxSlides > 1;
140
+ // if carousel, force preloadImages = 'all'
141
+ if(slider.carousel) slider.settings.preloadImages = 'all';
142
+ // calculate the min / max width thresholds based on min / max number of slides
143
+ // used to setup and update carousel slides dimensions
144
+ slider.minThreshold = (slider.settings.minSlides * slider.settings.slideWidth) + ((slider.settings.minSlides - 1) * slider.settings.slideMargin);
145
+ slider.maxThreshold = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin);
146
+ // store the current state of the slider (if currently animating, working is true)
147
+ slider.working = false;
148
+ // initialize the controls object
149
+ slider.controls = {};
150
+ // initialize an auto interval
151
+ slider.interval = null;
152
+ // determine which property to use for transitions
153
+ slider.animProp = slider.settings.mode == 'vertical' ? 'top' : 'left';
154
+ // determine if hardware acceleration can be used
155
+ slider.usingCSS = slider.settings.useCSS && slider.settings.mode != 'fade' && (function(){
156
+ // create our test div element
157
+ var div = document.createElement('div');
158
+ // css transition properties
159
+ var props = ['WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];
160
+ // test for each property
161
+ for(var i in props){
162
+ if(div.style[props[i]] !== undefined){
163
+ slider.cssPrefix = props[i].replace('Perspective', '').toLowerCase();
164
+ slider.animProp = '-' + slider.cssPrefix + '-transform';
165
+ return true;
166
+ }
167
+ }
168
+ return false;
169
+ }());
170
+ // if vertical mode always make maxSlides and minSlides equal
171
+ if(slider.settings.mode == 'vertical') slider.settings.maxSlides = slider.settings.minSlides;
172
+ // save original style data
173
+ el.data("origStyle", el.attr("style"));
174
+ el.children(slider.settings.slideSelector).each(function() {
175
+ $(this).data("origStyle", $(this).attr("style"));
176
+ });
177
+ // perform all DOM / CSS modifications
178
+ setup();
179
+ }
180
+
181
+ /**
182
+ * Performs all DOM and CSS modifications
183
+ */
184
+ var setup = function(){
185
+ // wrap el in a wrapper
186
+ el.wrap('<div class="' + slider.settings.wrapperClass + '"><div class="bx-viewport"></div></div>');
187
+ // store a namspace reference to .bx-viewport
188
+ slider.viewport = el.parent();
189
+ // add a loading div to display while images are loading
190
+ slider.loader = $('<div class="bx-loading" />');
191
+ slider.viewport.prepend(slider.loader);
192
+ // set el to a massive width, to hold any needed slides
193
+ // also strip any margin and padding from el
194
+ el.css({
195
+ width: slider.settings.mode == 'horizontal' ? (slider.children.length * 100 + 215) + '%' : 'auto',
196
+ position: 'relative'
197
+ });
198
+ // if using CSS, add the easing property
199
+ if(slider.usingCSS && slider.settings.easing){
200
+ el.css('-' + slider.cssPrefix + '-transition-timing-function', slider.settings.easing);
201
+ // if not using CSS and no easing value was supplied, use the default JS animation easing (swing)
202
+ }else if(!slider.settings.easing){
203
+ slider.settings.easing = 'swing';
204
+ }
205
+ var slidesShowing = getNumberSlidesShowing();
206
+ // make modifications to the viewport (.bx-viewport)
207
+ slider.viewport.css({
208
+ width: '100%',
209
+ overflow: 'hidden',
210
+ position: 'relative'
211
+ });
212
+ slider.viewport.parent().css({
213
+ maxWidth: getViewportMaxWidth()
214
+ });
215
+ // make modification to the wrapper (.bx-wrapper)
216
+ if(!slider.settings.pager) {
217
+ slider.viewport.parent().css({
218
+ margin: '0 auto 0px'
219
+ });
220
+ }
221
+ // apply css to all slider children
222
+ slider.children.css({
223
+ 'float': slider.settings.mode == 'horizontal' ? 'left' : 'none',
224
+ listStyle: 'none',
225
+ position: 'relative'
226
+ });
227
+ // apply the calculated width after the float is applied to prevent scrollbar interference
228
+ slider.children.css('width', getSlideWidth());
229
+ // if slideMargin is supplied, add the css
230
+ if(slider.settings.mode == 'horizontal' && slider.settings.slideMargin > 0) slider.children.css('marginRight', slider.settings.slideMargin);
231
+ if(slider.settings.mode == 'vertical' && slider.settings.slideMargin > 0) slider.children.css('marginBottom', slider.settings.slideMargin);
232
+ // if "fade" mode, add positioning and z-index CSS
233
+ if(slider.settings.mode == 'fade'){
234
+ slider.children.css({
235
+ position: 'absolute',
236
+ zIndex: 0,
237
+ display: 'none'
238
+ });
239
+ // prepare the z-index on the showing element
240
+ slider.children.eq(slider.settings.startSlide).css({zIndex: slider.settings.slideZIndex, display: 'block'});
241
+ }
242
+ // create an element to contain all slider controls (pager, start / stop, etc)
243
+ slider.controls.el = $('<div class="bx-controls" />');
244
+ // if captions are requested, add them
245
+ if(slider.settings.captions) appendCaptions();
246
+ // check if startSlide is last slide
247
+ slider.active.last = slider.settings.startSlide == getPagerQty() - 1;
248
+ // if video is true, set up the fitVids plugin
249
+ if(slider.settings.video) el.fitVids();
250
+ // set the default preload selector (visible)
251
+ var preloadSelector = slider.children.eq(slider.settings.startSlide);
252
+ if (slider.settings.preloadImages == "all") preloadSelector = slider.children;
253
+ // only check for control addition if not in "ticker" mode
254
+ if(!slider.settings.ticker){
255
+ // if pager is requested, add it
256
+ if(slider.settings.pager) appendPager();
257
+ // if controls are requested, add them
258
+ if(slider.settings.controls) appendControls();
259
+ // if auto is true, and auto controls are requested, add them
260
+ if(slider.settings.auto && slider.settings.autoControls) appendControlsAuto();
261
+ // if any control option is requested, add the controls wrapper
262
+ if(slider.settings.controls || slider.settings.autoControls || slider.settings.pager) slider.viewport.after(slider.controls.el);
263
+ // if ticker mode, do not allow a pager
264
+ }else{
265
+ slider.settings.pager = false;
266
+ }
267
+ // preload all images, then perform final DOM / CSS modifications that depend on images being loaded
268
+ loadElements(preloadSelector, start);
269
+ }
270
+
271
+ var loadElements = function(selector, callback){
272
+ var total = selector.find('img, iframe').length;
273
+ if (total == 0){
274
+ callback();
275
+ return;
276
+ }
277
+ var count = 0;
278
+ selector.find('img, iframe').each(function(){
279
+ $(this).one('load', function() {
280
+ if(++count == total) callback();
281
+ }).each(function() {
282
+ if(this.complete) $(this).load();
283
+ });
284
+ });
285
+ }
286
+
287
+ /**
288
+ * Start the slider
289
+ */
290
+ var start = function(){
291
+ // if infinite loop, prepare additional slides
292
+ if(slider.settings.infiniteLoop && slider.settings.mode != 'fade' && !slider.settings.ticker){
293
+ var slice = slider.settings.mode == 'vertical' ? slider.settings.minSlides : slider.settings.maxSlides;
294
+ var sliceAppend = slider.children.slice(0, slice).clone().addClass('bx-clone');
295
+ var slicePrepend = slider.children.slice(-slice).clone().addClass('bx-clone');
296
+ el.append(sliceAppend).prepend(slicePrepend);
297
+ }
298
+ // remove the loading DOM element
299
+ slider.loader.remove();
300
+ // set the left / top position of "el"
301
+ setSlidePosition();
302
+ // if "vertical" mode, always use adaptiveHeight to prevent odd behavior
303
+ if (slider.settings.mode == 'vertical') slider.settings.adaptiveHeight = true;
304
+ // set the viewport height
305
+ slider.viewport.height(getViewportHeight());
306
+ // make sure everything is positioned just right (same as a window resize)
307
+ el.redrawSlider();
308
+ // onSliderLoad callback
309
+ slider.settings.onSliderLoad(slider.active.index);
310
+ // slider has been fully initialized
311
+ slider.initialized = true;
312
+ // bind the resize call to the window
313
+ if (slider.settings.responsive) $(window).bind('resize', resizeWindow);
314
+ // if auto is true and has more than 1 page, start the show
315
+ if (slider.settings.auto && slider.settings.autoStart && (getPagerQty() > 1 || slider.settings.autoSlideForOnePage)) initAuto();
316
+ // if ticker is true, start the ticker
317
+ if (slider.settings.ticker) initTicker();
318
+ // if pager is requested, make the appropriate pager link active
319
+ if (slider.settings.pager) updatePagerActive(slider.settings.startSlide);
320
+ // check for any updates to the controls (like hideControlOnEnd updates)
321
+ if (slider.settings.controls) updateDirectionControls();
322
+ // if touchEnabled is true, setup the touch events
323
+ if (slider.settings.touchEnabled && !slider.settings.ticker) initTouch();
324
+ }
325
+
326
+ /**
327
+ * Returns the calculated height of the viewport, used to determine either adaptiveHeight or the maxHeight value
328
+ */
329
+ var getViewportHeight = function(){
330
+ var height = 0;
331
+ // first determine which children (slides) should be used in our height calculation
332
+ var children = $();
333
+ // if mode is not "vertical" and adaptiveHeight is false, include all children
334
+ if(slider.settings.mode != 'vertical' && !slider.settings.adaptiveHeight){
335
+ children = slider.children;
336
+ }else{
337
+ // if not carousel, return the single active child
338
+ if(!slider.carousel){
339
+ children = slider.children.eq(slider.active.index);
340
+ // if carousel, return a slice of children
341
+ }else{
342
+ // get the individual slide index
343
+ var currentIndex = slider.settings.moveSlides == 1 ? slider.active.index : slider.active.index * getMoveBy();
344
+ // add the current slide to the children
345
+ children = slider.children.eq(currentIndex);
346
+ // cycle through the remaining "showing" slides
347
+ for (i = 1; i <= slider.settings.maxSlides - 1; i++){
348
+ // if looped back to the start
349
+ if(currentIndex + i >= slider.children.length){
350
+ children = children.add(slider.children.eq(i - 1));
351
+ }else{
352
+ children = children.add(slider.children.eq(currentIndex + i));
353
+ }
354
+ }
355
+ }
356
+ }
357
+ // if "vertical" mode, calculate the sum of the heights of the children
358
+ if(slider.settings.mode == 'vertical'){
359
+ children.each(function(index) {
360
+ height += $(this).outerHeight();
361
+ });
362
+ // add user-supplied margins
363
+ if(slider.settings.slideMargin > 0){
364
+ height += slider.settings.slideMargin * (slider.settings.minSlides - 1);
365
+ }
366
+ // if not "vertical" mode, calculate the max height of the children
367
+ }else{
368
+ height = Math.max.apply(Math, children.map(function(){
369
+ return $(this).outerHeight(false);
370
+ }).get());
371
+ }
372
+
373
+ if(slider.viewport.css('box-sizing') == 'border-box'){
374
+ height += parseFloat(slider.viewport.css('padding-top')) + parseFloat(slider.viewport.css('padding-bottom')) +
375
+ parseFloat(slider.viewport.css('border-top-width')) + parseFloat(slider.viewport.css('border-bottom-width'));
376
+ }else if(slider.viewport.css('box-sizing') == 'padding-box'){
377
+ height += parseFloat(slider.viewport.css('padding-top')) + parseFloat(slider.viewport.css('padding-bottom'));
378
+ }
379
+
380
+ return height;
381
+ }
382
+
383
+ /**
384
+ * Returns the calculated width to be used for the outer wrapper / viewport
385
+ */
386
+ var getViewportMaxWidth = function(){
387
+ var width = '100%';
388
+ if(slider.settings.slideWidth > 0){
389
+ if(slider.settings.mode == 'horizontal'){
390
+ width = (slider.settings.maxSlides * slider.settings.slideWidth) + ((slider.settings.maxSlides - 1) * slider.settings.slideMargin);
391
+ }else{
392
+ width = slider.settings.slideWidth;
393
+ }
394
+ }
395
+ return width;
396
+ }
397
+
398
+ /**
399
+ * Returns the calculated width to be applied to each slide
400
+ */
401
+ var getSlideWidth = function(){
402
+ // start with any user-supplied slide width
403
+ var newElWidth = slider.settings.slideWidth;
404
+ // get the current viewport width
405
+ var wrapWidth = slider.viewport.width();
406
+ // if slide width was not supplied, or is larger than the viewport use the viewport width
407
+ if(slider.settings.slideWidth == 0 ||
408
+ (slider.settings.slideWidth > wrapWidth && !slider.carousel) ||
409
+ slider.settings.mode == 'vertical'){
410
+ newElWidth = wrapWidth;
411
+ // if carousel, use the thresholds to determine the width
412
+ }else if(slider.settings.maxSlides > 1 && slider.settings.mode == 'horizontal'){
413
+ if(wrapWidth > slider.maxThreshold){
414
+ // newElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.maxSlides - 1))) / slider.settings.maxSlides;
415
+ }else if(wrapWidth < slider.minThreshold){
416
+ newElWidth = (wrapWidth - (slider.settings.slideMargin * (slider.settings.minSlides - 1))) / slider.settings.minSlides;
417
+ }
418
+ }
419
+ return newElWidth;
420
+ }
421
+
422
+ /**
423
+ * Returns the number of slides currently visible in the viewport (includes partially visible slides)
424
+ */
425
+ var getNumberSlidesShowing = function(){
426
+ var slidesShowing = 1;
427
+ if(slider.settings.mode == 'horizontal' && slider.settings.slideWidth > 0){
428
+ // if viewport is smaller than minThreshold, return minSlides
429
+ if(slider.viewport.width() < slider.minThreshold){
430
+ slidesShowing = slider.settings.minSlides;
431
+ // if viewport is larger than minThreshold, return maxSlides
432
+ }else if(slider.viewport.width() > slider.maxThreshold){
433
+ slidesShowing = slider.settings.maxSlides;
434
+ // if viewport is between min / max thresholds, divide viewport width by first child width
435
+ }else{
436
+ var childWidth = slider.children.first().width() + slider.settings.slideMargin;
437
+ slidesShowing = Math.floor((slider.viewport.width() +
438
+ slider.settings.slideMargin) / childWidth);
439
+ }
440
+ // if "vertical" mode, slides showing will always be minSlides
441
+ }else if(slider.settings.mode == 'vertical'){
442
+ slidesShowing = slider.settings.minSlides;
443
+ }
444
+ return slidesShowing;
445
+ }
446
+
447
+ /**
448
+ * Returns the number of pages (one full viewport of slides is one "page")
449
+ */
450
+ var getPagerQty = function(){
451
+ var pagerQty = 0;
452
+ // if moveSlides is specified by the user
453
+ if(slider.settings.moveSlides > 0){
454
+ if(slider.settings.infiniteLoop){
455
+ pagerQty = Math.ceil(slider.children.length / getMoveBy());
456
+ }else{
457
+ // use a while loop to determine pages
458
+ var breakPoint = 0;
459
+ var counter = 0
460
+ // when breakpoint goes above children length, counter is the number of pages
461
+ while (breakPoint < slider.children.length){
462
+ ++pagerQty;
463
+ breakPoint = counter + getNumberSlidesShowing();
464
+ counter += slider.settings.moveSlides <= getNumberSlidesShowing() ? slider.settings.moveSlides : getNumberSlidesShowing();
465
+ }
466
+ }
467
+ // if moveSlides is 0 (auto) divide children length by sides showing, then round up
468
+ }else{
469
+ pagerQty = Math.ceil(slider.children.length / getNumberSlidesShowing());
470
+ }
471
+ return pagerQty;
472
+ }
473
+
474
+ /**
475
+ * Returns the number of indivual slides by which to shift the slider
476
+ */
477
+ var getMoveBy = function(){
478
+ // if moveSlides was set by the user and moveSlides is less than number of slides showing
479
+ if(slider.settings.moveSlides > 0 && slider.settings.moveSlides <= getNumberSlidesShowing()){
480
+ return slider.settings.moveSlides;
481
+ }
482
+ // if moveSlides is 0 (auto)
483
+ return getNumberSlidesShowing();
484
+ }
485
+
486
+ /**
487
+ * Sets the slider's (el) left or top position
488
+ */
489
+ var setSlidePosition = function(){
490
+ // if last slide, not infinite loop, and number of children is larger than specified maxSlides
491
+ if(slider.children.length > slider.settings.maxSlides && slider.active.last && !slider.settings.infiniteLoop){
492
+ if (slider.settings.mode == 'horizontal'){
493
+ // get the last child's position
494
+ var lastChild = slider.children.last();
495
+ var position = lastChild.position();
496
+ // set the left position
497
+ setPositionProperty(-(position.left - (slider.viewport.width() - lastChild.outerWidth())), 'reset', 0);
498
+ }else if(slider.settings.mode == 'vertical'){
499
+ // get the last showing index's position
500
+ var lastShowingIndex = slider.children.length - slider.settings.minSlides;
501
+ var position = slider.children.eq(lastShowingIndex).position();
502
+ // set the top position
503
+ setPositionProperty(-position.top, 'reset', 0);
504
+ }
505
+ // if not last slide
506
+ }else{
507
+ // get the position of the first showing slide
508
+ var position = slider.children.eq(slider.active.index * getMoveBy()).position();
509
+ // check for last slide
510
+ if (slider.active.index == getPagerQty() - 1) slider.active.last = true;
511
+ // set the repective position
512
+ if (position != undefined){
513
+ if (slider.settings.mode == 'horizontal') setPositionProperty(-position.left, 'reset', 0);
514
+ else if (slider.settings.mode == 'vertical') setPositionProperty(-position.top, 'reset', 0);
515
+ }
516
+ }
517
+ }
518
+
519
+ /**
520
+ * Sets the el's animating property position (which in turn will sometimes animate el).
521
+ * If using CSS, sets the transform property. If not using CSS, sets the top / left property.
522
+ *
523
+ * @param value (int)
524
+ * - the animating property's value
525
+ *
526
+ * @param type (string) 'slider', 'reset', 'ticker'
527
+ * - the type of instance for which the function is being
528
+ *
529
+ * @param duration (int)
530
+ * - the amount of time (in ms) the transition should occupy
531
+ *
532
+ * @param params (array) optional
533
+ * - an optional parameter containing any variables that need to be passed in
534
+ */
535
+ var setPositionProperty = function(value, type, duration, params){
536
+ // use CSS transform
537
+ if(slider.usingCSS){
538
+ // determine the translate3d value
539
+ var propValue = slider.settings.mode == 'vertical' ? 'translate3d(0, ' + value + 'px, 0)' : 'translate3d(' + value + 'px, 0, 0)';
540
+ // add the CSS transition-duration
541
+ el.css('-' + slider.cssPrefix + '-transition-duration', duration / 1000 + 's');
542
+ if(type == 'slide'){
543
+ // set the property value
544
+ el.css(slider.animProp, propValue);
545
+ // bind a callback method - executes when CSS transition completes
546
+ el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){
547
+ // unbind the callback
548
+ el.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');
549
+ updateAfterSlideTransition();
550
+ });
551
+ }else if(type == 'reset'){
552
+ el.css(slider.animProp, propValue);
553
+ }else if(type == 'ticker'){
554
+ // make the transition use 'linear'
555
+ el.css('-' + slider.cssPrefix + '-transition-timing-function', 'linear');
556
+ el.css(slider.animProp, propValue);
557
+ // bind a callback method - executes when CSS transition completes
558
+ el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function(){
559
+ // unbind the callback
560
+ el.unbind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd');
561
+ // reset the position
562
+ setPositionProperty(params['resetValue'], 'reset', 0);
563
+ // start the loop again
564
+ tickerLoop();
565
+ });
566
+ }
567
+ // use JS animate
568
+ }else{
569
+ var animateObj = {};
570
+ animateObj[slider.animProp] = value;
571
+ if(type == 'slide'){
572
+ el.animate(animateObj, duration, slider.settings.easing, function(){
573
+ updateAfterSlideTransition();
574
+ });
575
+ }else if(type == 'reset'){
576
+ el.css(slider.animProp, value)
577
+ }else if(type == 'ticker'){
578
+ el.animate(animateObj, speed, 'linear', function(){
579
+ setPositionProperty(params['resetValue'], 'reset', 0);
580
+ // run the recursive loop after animation
581
+ tickerLoop();
582
+ });
583
+ }
584
+ }
585
+ }
586
+
587
+ /**
588
+ * Populates the pager with proper amount of pages
589
+ */
590
+ var populatePager = function(){
591
+ var pagerHtml = '';
592
+ var pagerQty = getPagerQty();
593
+ // loop through each pager item
594
+ for(var i=0; i < pagerQty; i++){
595
+ var linkContent = '';
596
+ // if a buildPager function is supplied, use it to get pager link value, else use index + 1
597
+ if(slider.settings.buildPager && $.isFunction(slider.settings.buildPager)){
598
+ linkContent = slider.settings.buildPager(i);
599
+ slider.pagerEl.addClass('bx-custom-pager');
600
+ }else{
601
+ linkContent = i + 1;
602
+ slider.pagerEl.addClass('bx-default-pager');
603
+ }
604
+ // var linkContent = slider.settings.buildPager && $.isFunction(slider.settings.buildPager) ? slider.settings.buildPager(i) : i + 1;
605
+ // add the markup to the string
606
+ pagerHtml += '<div class="bx-pager-item"><a href="" data-slide-index="' + i + '" class="bx-pager-link">' + linkContent + '</a></div>';
607
+ };
608
+ // populate the pager element with pager links
609
+ slider.pagerEl.html(pagerHtml);
610
+ }
611
+
612
+ /**
613
+ * Appends the pager to the controls element
614
+ */
615
+ var appendPager = function(){
616
+ if(!slider.settings.pagerCustom){
617
+ // create the pager DOM element
618
+ slider.pagerEl = $('<div class="bx-pager" />');
619
+ // if a pager selector was supplied, populate it with the pager
620
+ if(slider.settings.pagerSelector){
621
+ $(slider.settings.pagerSelector).html(slider.pagerEl);
622
+ // if no pager selector was supplied, add it after the wrapper
623
+ }else{
624
+ slider.controls.el.addClass('bx-has-pager').append(slider.pagerEl);
625
+ }
626
+ // populate the pager
627
+ populatePager();
628
+ }else{
629
+ slider.pagerEl = $(slider.settings.pagerCustom);
630
+ }
631
+ // assign the pager click binding
632
+ slider.pagerEl.on('click', 'a', clickPagerBind);
633
+ }
634
+
635
+ /**
636
+ * Appends prev / next controls to the controls element
637
+ */
638
+ var appendControls = function(){
639
+ slider.controls.next = $('<a class="bx-next" href="">' + slider.settings.nextText + '</a>');
640
+ slider.controls.prev = $('<a class="bx-prev" href="">' + slider.settings.prevText + '</a>');
641
+ // bind click actions to the controls
642
+ slider.controls.next.bind('click', clickNextBind);
643
+ slider.controls.prev.bind('click', clickPrevBind);
644
+ // if nextSlector was supplied, populate it
645
+ if(slider.settings.nextSelector){
646
+ $(slider.settings.nextSelector).append(slider.controls.next);
647
+ }
648
+ // if prevSlector was supplied, populate it
649
+ if(slider.settings.prevSelector){
650
+ $(slider.settings.prevSelector).append(slider.controls.prev);
651
+ }
652
+ // if no custom selectors were supplied
653
+ if(!slider.settings.nextSelector && !slider.settings.prevSelector){
654
+ // add the controls to the DOM
655
+ slider.controls.directionEl = $('<div class="bx-controls-direction" />');
656
+ // add the control elements to the directionEl
657
+ slider.controls.directionEl.append(slider.controls.prev).append(slider.controls.next);
658
+ // slider.viewport.append(slider.controls.directionEl);
659
+ slider.controls.el.addClass('bx-has-controls-direction').append(slider.controls.directionEl);
660
+ }
661
+ }
662
+
663
+ /**
664
+ * Appends start / stop auto controls to the controls element
665
+ */
666
+ var appendControlsAuto = function(){
667
+ slider.controls.start = $('<div class="bx-controls-auto-item"><a class="bx-start" href="">' + slider.settings.startText + '</a></div>');
668
+ slider.controls.stop = $('<div class="bx-controls-auto-item"><a class="bx-stop" href="">' + slider.settings.stopText + '</a></div>');
669
+ // add the controls to the DOM
670
+ slider.controls.autoEl = $('<div class="bx-controls-auto" />');
671
+ // bind click actions to the controls
672
+ slider.controls.autoEl.on('click', '.bx-start', clickStartBind);
673
+ slider.controls.autoEl.on('click', '.bx-stop', clickStopBind);
674
+ // if autoControlsCombine, insert only the "start" control
675
+ if(slider.settings.autoControlsCombine){
676
+ slider.controls.autoEl.append(slider.controls.start);
677
+ // if autoControlsCombine is false, insert both controls
678
+ }else{
679
+ slider.controls.autoEl.append(slider.controls.start).append(slider.controls.stop);
680
+ }
681
+ // if auto controls selector was supplied, populate it with the controls
682
+ if(slider.settings.autoControlsSelector){
683
+ $(slider.settings.autoControlsSelector).html(slider.controls.autoEl);
684
+ // if auto controls selector was not supplied, add it after the wrapper
685
+ }else{
686
+ slider.controls.el.addClass('bx-has-controls-auto').append(slider.controls.autoEl);
687
+ }
688
+ // update the auto controls
689
+ updateAutoControls(slider.settings.autoStart ? 'stop' : 'start');
690
+ }
691
+
692
+ /**
693
+ * Appends image captions to the DOM
694
+ */
695
+ var appendCaptions = function(){
696
+ // cycle through each child
697
+ slider.children.each(function(index){
698
+ // get the image title attribute
699
+ var title = $(this).find('img:first').attr('title');
700
+ // append the caption
701
+ if (title != undefined && ('' + title).length) {
702
+ $(this).append('<div class="bx-caption"><span>' + title + '</span></div>');
703
+ }
704
+ });
705
+ }
706
+
707
+ /**
708
+ * Click next binding
709
+ *
710
+ * @param e (event)
711
+ * - DOM event object
712
+ */
713
+ var clickNextBind = function(e){
714
+ // if auto show is running, stop it
715
+ if (slider.settings.auto) el.stopAuto();
716
+ el.goToNextSlide();
717
+ e.preventDefault();
718
+ }
719
+
720
+ /**
721
+ * Click prev binding
722
+ *
723
+ * @param e (event)
724
+ * - DOM event object
725
+ */
726
+ var clickPrevBind = function(e){
727
+ // if auto show is running, stop it
728
+ if (slider.settings.auto) el.stopAuto();
729
+ el.goToPrevSlide();
730
+ e.preventDefault();
731
+ }
732
+
733
+ /**
734
+ * Click start binding
735
+ *
736
+ * @param e (event)
737
+ * - DOM event object
738
+ */
739
+ var clickStartBind = function(e){
740
+ el.startAuto();
741
+ e.preventDefault();
742
+ }
743
+
744
+ /**
745
+ * Click stop binding
746
+ *
747
+ * @param e (event)
748
+ * - DOM event object
749
+ */
750
+ var clickStopBind = function(e){
751
+ el.stopAuto();
752
+ e.preventDefault();
753
+ }
754
+
755
+ /**
756
+ * Click pager binding
757
+ *
758
+ * @param e (event)
759
+ * - DOM event object
760
+ */
761
+ var clickPagerBind = function(e){
762
+ // if auto show is running, stop it
763
+ if (slider.settings.auto) el.stopAuto();
764
+ var pagerLink = $(e.currentTarget);
765
+ if(pagerLink.attr('data-slide-index') !== undefined){
766
+ var pagerIndex = parseInt(pagerLink.attr('data-slide-index'));
767
+ // if clicked pager link is not active, continue with the goToSlide call
768
+ if(pagerIndex != slider.active.index) el.goToSlide(pagerIndex);
769
+ e.preventDefault();
770
+ }
771
+ }
772
+
773
+ /**
774
+ * Updates the pager links with an active class
775
+ *
776
+ * @param slideIndex (int)
777
+ * - index of slide to make active
778
+ */
779
+ var updatePagerActive = function(slideIndex){
780
+ // if "short" pager type
781
+ var len = slider.children.length; // nb of children
782
+ if(slider.settings.pagerType == 'short'){
783
+ if(slider.settings.maxSlides > 1) {
784
+ len = Math.ceil(slider.children.length/slider.settings.maxSlides);
785
+ }
786
+ slider.pagerEl.html( (slideIndex + 1) + slider.settings.pagerShortSeparator + len);
787
+ return;
788
+ }
789
+ // remove all pager active classes
790
+ slider.pagerEl.find('a').removeClass('active');
791
+ // apply the active class for all pagers
792
+ slider.pagerEl.each(function(i, el) { $(el).find('a').eq(slideIndex).addClass('active'); });
793
+ }
794
+
795
+ /**
796
+ * Performs needed actions after a slide transition
797
+ */
798
+ var updateAfterSlideTransition = function(){
799
+ // if infinte loop is true
800
+ if(slider.settings.infiniteLoop){
801
+ var position = '';
802
+ // first slide
803
+ if(slider.active.index == 0){
804
+ // set the new position
805
+ position = slider.children.eq(0).position();
806
+ // carousel, last slide
807
+ }else if(slider.active.index == getPagerQty() - 1 && slider.carousel){
808
+ position = slider.children.eq((getPagerQty() - 1) * getMoveBy()).position();
809
+ // last slide
810
+ }else if(slider.active.index == slider.children.length - 1){
811
+ position = slider.children.eq(slider.children.length - 1).position();
812
+ }
813
+ if(position){
814
+ if (slider.settings.mode == 'horizontal') { setPositionProperty(-position.left, 'reset', 0); }
815
+ else if (slider.settings.mode == 'vertical') { setPositionProperty(-position.top, 'reset', 0); }
816
+ }
817
+ }
818
+ // declare that the transition is complete
819
+ slider.working = false;
820
+ // onSlideAfter callback
821
+ slider.settings.onSlideAfter(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
822
+ }
823
+
824
+ /**
825
+ * Updates the auto controls state (either active, or combined switch)
826
+ *
827
+ * @param state (string) "start", "stop"
828
+ * - the new state of the auto show
829
+ */
830
+ var updateAutoControls = function(state){
831
+ // if autoControlsCombine is true, replace the current control with the new state
832
+ if(slider.settings.autoControlsCombine){
833
+ slider.controls.autoEl.html(slider.controls[state]);
834
+ // if autoControlsCombine is false, apply the "active" class to the appropriate control
835
+ }else{
836
+ slider.controls.autoEl.find('a').removeClass('active');
837
+ slider.controls.autoEl.find('a:not(.bx-' + state + ')').addClass('active');
838
+ }
839
+ }
840
+
841
+ /**
842
+ * Updates the direction controls (checks if either should be hidden)
843
+ */
844
+ var updateDirectionControls = function(){
845
+ if(getPagerQty() == 1){
846
+ slider.controls.prev.addClass('disabled');
847
+ slider.controls.next.addClass('disabled');
848
+ }else if(!slider.settings.infiniteLoop && slider.settings.hideControlOnEnd){
849
+ // if first slide
850
+ if (slider.active.index == 0){
851
+ slider.controls.prev.addClass('disabled');
852
+ slider.controls.next.removeClass('disabled');
853
+ // if last slide
854
+ }else if(slider.active.index == getPagerQty() - 1){
855
+ slider.controls.next.addClass('disabled');
856
+ slider.controls.prev.removeClass('disabled');
857
+ // if any slide in the middle
858
+ }else{
859
+ slider.controls.prev.removeClass('disabled');
860
+ slider.controls.next.removeClass('disabled');
861
+ }
862
+ }
863
+ }
864
+
865
+ /**
866
+ * Initialzes the auto process
867
+ */
868
+ var initAuto = function(){
869
+ // if autoDelay was supplied, launch the auto show using a setTimeout() call
870
+ if(slider.settings.autoDelay > 0){
871
+ var timeout = setTimeout(el.startAuto, slider.settings.autoDelay);
872
+ // if autoDelay was not supplied, start the auto show normally
873
+ }else{
874
+ el.startAuto();
875
+ }
876
+ // if autoHover is requested
877
+ if(slider.settings.autoHover){
878
+ // on el hover
879
+ el.hover(function(){
880
+ // if the auto show is currently playing (has an active interval)
881
+ if(slider.interval){
882
+ // stop the auto show and pass true agument which will prevent control update
883
+ el.stopAuto(true);
884
+ // create a new autoPaused value which will be used by the relative "mouseout" event
885
+ slider.autoPaused = true;
886
+ }
887
+ }, function(){
888
+ // if the autoPaused value was created be the prior "mouseover" event
889
+ if(slider.autoPaused){
890
+ // start the auto show and pass true agument which will prevent control update
891
+ el.startAuto(true);
892
+ // reset the autoPaused value
893
+ slider.autoPaused = null;
894
+ }
895
+ });
896
+ }
897
+ }
898
+
899
+ /**
900
+ * Initialzes the ticker process
901
+ */
902
+ var initTicker = function(){
903
+ var startPosition = 0;
904
+ // if autoDirection is "next", append a clone of the entire slider
905
+ if(slider.settings.autoDirection == 'next'){
906
+ el.append(slider.children.clone().addClass('bx-clone'));
907
+ // if autoDirection is "prev", prepend a clone of the entire slider, and set the left position
908
+ }else{
909
+ el.prepend(slider.children.clone().addClass('bx-clone'));
910
+ var position = slider.children.first().position();
911
+ startPosition = slider.settings.mode == 'horizontal' ? -position.left : -position.top;
912
+ }
913
+ setPositionProperty(startPosition, 'reset', 0);
914
+ // do not allow controls in ticker mode
915
+ slider.settings.pager = false;
916
+ slider.settings.controls = false;
917
+ slider.settings.autoControls = false;
918
+ // if autoHover is requested
919
+ if(slider.settings.tickerHover && !slider.usingCSS){
920
+ // on el hover
921
+ slider.viewport.hover(function(){
922
+ el.stop();
923
+ }, function(){
924
+ // calculate the total width of children (used to calculate the speed ratio)
925
+ var totalDimens = 0;
926
+ slider.children.each(function(index){
927
+ totalDimens += slider.settings.mode == 'horizontal' ? $(this).outerWidth(true) : $(this).outerHeight(true);
928
+ });
929
+ // calculate the speed ratio (used to determine the new speed to finish the paused animation)
930
+ var ratio = slider.settings.speed / totalDimens;
931
+ // determine which property to use
932
+ var property = slider.settings.mode == 'horizontal' ? 'left' : 'top';
933
+ // calculate the new speed
934
+ var newSpeed = ratio * (totalDimens - (Math.abs(parseInt(el.css(property)))));
935
+ tickerLoop(newSpeed);
936
+ });
937
+ }
938
+ // start the ticker loop
939
+ tickerLoop();
940
+ }
941
+
942
+ /**
943
+ * Runs a continuous loop, news ticker-style
944
+ */
945
+ var tickerLoop = function(resumeSpeed){
946
+ speed = resumeSpeed ? resumeSpeed : slider.settings.speed;
947
+ var position = {left: 0, top: 0};
948
+ var reset = {left: 0, top: 0};
949
+ // if "next" animate left position to last child, then reset left to 0
950
+ if(slider.settings.autoDirection == 'next'){
951
+ position = el.find('.bx-clone').first().position();
952
+ // if "prev" animate left position to 0, then reset left to first non-clone child
953
+ }else{
954
+ reset = slider.children.first().position();
955
+ }
956
+ var animateProperty = slider.settings.mode == 'horizontal' ? -position.left : -position.top;
957
+ var resetValue = slider.settings.mode == 'horizontal' ? -reset.left : -reset.top;
958
+ var params = {resetValue: resetValue};
959
+ setPositionProperty(animateProperty, 'ticker', speed, params);
960
+ }
961
+
962
+ /**
963
+ * Initializes touch events
964
+ */
965
+ var initTouch = function(){
966
+ // initialize object to contain all touch values
967
+ slider.touch = {
968
+ start: {x: 0, y: 0},
969
+ end: {x: 0, y: 0}
970
+ }
971
+ slider.viewport.bind('touchstart', onTouchStart);
972
+ }
973
+
974
+ /**
975
+ * Event handler for "touchstart"
976
+ *
977
+ * @param e (event)
978
+ * - DOM event object
979
+ */
980
+ var onTouchStart = function(e){
981
+ if(slider.working){
982
+ e.preventDefault();
983
+ }else{
984
+ // record the original position when touch starts
985
+ slider.touch.originalPos = el.position();
986
+ var orig = e.originalEvent;
987
+ // record the starting touch x, y coordinates
988
+ slider.touch.start.x = orig.changedTouches[0].pageX;
989
+ slider.touch.start.y = orig.changedTouches[0].pageY;
990
+ // bind a "touchmove" event to the viewport
991
+ slider.viewport.bind('touchmove', onTouchMove);
992
+ // bind a "touchend" event to the viewport
993
+ slider.viewport.bind('touchend', onTouchEnd);
994
+ }
995
+ }
996
+
997
+ /**
998
+ * Event handler for "touchmove"
999
+ *
1000
+ * @param e (event)
1001
+ * - DOM event object
1002
+ */
1003
+ var onTouchMove = function(e){
1004
+ var orig = e.originalEvent;
1005
+ // if scrolling on y axis, do not prevent default
1006
+ var xMovement = Math.abs(orig.changedTouches[0].pageX - slider.touch.start.x);
1007
+ var yMovement = Math.abs(orig.changedTouches[0].pageY - slider.touch.start.y);
1008
+ // x axis swipe
1009
+ if((xMovement * 3) > yMovement && slider.settings.preventDefaultSwipeX){
1010
+ e.preventDefault();
1011
+ // y axis swipe
1012
+ }else if((yMovement * 3) > xMovement && slider.settings.preventDefaultSwipeY){
1013
+ e.preventDefault();
1014
+ }
1015
+ if(slider.settings.mode != 'fade' && slider.settings.oneToOneTouch){
1016
+ var value = 0;
1017
+ // if horizontal, drag along x axis
1018
+ if(slider.settings.mode == 'horizontal'){
1019
+ var change = orig.changedTouches[0].pageX - slider.touch.start.x;
1020
+ value = slider.touch.originalPos.left + change;
1021
+ // if vertical, drag along y axis
1022
+ }else{
1023
+ var change = orig.changedTouches[0].pageY - slider.touch.start.y;
1024
+ value = slider.touch.originalPos.top + change;
1025
+ }
1026
+ setPositionProperty(value, 'reset', 0);
1027
+ }
1028
+ }
1029
+
1030
+ /**
1031
+ * Event handler for "touchend"
1032
+ *
1033
+ * @param e (event)
1034
+ * - DOM event object
1035
+ */
1036
+ var onTouchEnd = function(e){
1037
+ slider.viewport.unbind('touchmove', onTouchMove);
1038
+ var orig = e.originalEvent;
1039
+ var value = 0;
1040
+ // record end x, y positions
1041
+ slider.touch.end.x = orig.changedTouches[0].pageX;
1042
+ slider.touch.end.y = orig.changedTouches[0].pageY;
1043
+ // if fade mode, check if absolute x distance clears the threshold
1044
+ if(slider.settings.mode == 'fade'){
1045
+ var distance = Math.abs(slider.touch.start.x - slider.touch.end.x);
1046
+ if(distance >= slider.settings.swipeThreshold){
1047
+ slider.touch.start.x > slider.touch.end.x ? el.goToNextSlide() : el.goToPrevSlide();
1048
+ el.stopAuto();
1049
+ }
1050
+ // not fade mode
1051
+ }else{
1052
+ var distance = 0;
1053
+ // calculate distance and el's animate property
1054
+ if(slider.settings.mode == 'horizontal'){
1055
+ distance = slider.touch.end.x - slider.touch.start.x;
1056
+ value = slider.touch.originalPos.left;
1057
+ }else{
1058
+ distance = slider.touch.end.y - slider.touch.start.y;
1059
+ value = slider.touch.originalPos.top;
1060
+ }
1061
+ // if not infinite loop and first / last slide, do not attempt a slide transition
1062
+ if(!slider.settings.infiniteLoop && ((slider.active.index == 0 && distance > 0) || (slider.active.last && distance < 0))){
1063
+ setPositionProperty(value, 'reset', 200);
1064
+ }else{
1065
+ // check if distance clears threshold
1066
+ if(Math.abs(distance) >= slider.settings.swipeThreshold){
1067
+ distance < 0 ? el.goToNextSlide() : el.goToPrevSlide();
1068
+ el.stopAuto();
1069
+ }else{
1070
+ // el.animate(property, 200);
1071
+ setPositionProperty(value, 'reset', 200);
1072
+ }
1073
+ }
1074
+ }
1075
+ slider.viewport.unbind('touchend', onTouchEnd);
1076
+ }
1077
+
1078
+ /**
1079
+ * Window resize event callback
1080
+ */
1081
+ var resizeWindow = function(e){
1082
+ // don't do anything if slider isn't initialized.
1083
+ if(!slider.initialized) return;
1084
+ // get the new window dimens (again, thank you IE)
1085
+ var windowWidthNew = $(window).width();
1086
+ var windowHeightNew = $(window).height();
1087
+ // make sure that it is a true window resize
1088
+ // *we must check this because our dinosaur friend IE fires a window resize event when certain DOM elements
1089
+ // are resized. Can you just die already?*
1090
+ if(windowWidth != windowWidthNew || windowHeight != windowHeightNew){
1091
+ // set the new window dimens
1092
+ windowWidth = windowWidthNew;
1093
+ windowHeight = windowHeightNew;
1094
+ // update all dynamic elements
1095
+ el.redrawSlider();
1096
+ // Call user resize handler
1097
+ slider.settings.onSliderResize.call(el, slider.active.index);
1098
+ }
1099
+ }
1100
+
1101
+ /**
1102
+ * ===================================================================================
1103
+ * = PUBLIC FUNCTIONS
1104
+ * ===================================================================================
1105
+ */
1106
+
1107
+ /**
1108
+ * Performs slide transition to the specified slide
1109
+ *
1110
+ * @param slideIndex (int)
1111
+ * - the destination slide's index (zero-based)
1112
+ *
1113
+ * @param direction (string)
1114
+ * - INTERNAL USE ONLY - the direction of travel ("prev" / "next")
1115
+ */
1116
+ el.goToSlide = function(slideIndex, direction){
1117
+ // if plugin is currently in motion, ignore request
1118
+ if(slider.working || slider.active.index == slideIndex) return;
1119
+ // declare that plugin is in motion
1120
+ slider.working = true;
1121
+ // store the old index
1122
+ slider.oldIndex = slider.active.index;
1123
+ // if slideIndex is less than zero, set active index to last child (this happens during infinite loop)
1124
+ if(slideIndex < 0){
1125
+ slider.active.index = getPagerQty() - 1;
1126
+ // if slideIndex is greater than children length, set active index to 0 (this happens during infinite loop)
1127
+ }else if(slideIndex >= getPagerQty()){
1128
+ slider.active.index = 0;
1129
+ // set active index to requested slide
1130
+ }else{
1131
+ slider.active.index = slideIndex;
1132
+ }
1133
+ // onSlideBefore, onSlideNext, onSlidePrev callbacks
1134
+ slider.settings.onSlideBefore(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
1135
+ if(direction == 'next'){
1136
+ slider.settings.onSlideNext(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
1137
+ }else if(direction == 'prev'){
1138
+ slider.settings.onSlidePrev(slider.children.eq(slider.active.index), slider.oldIndex, slider.active.index);
1139
+ }
1140
+ // check if last slide
1141
+ slider.active.last = slider.active.index >= getPagerQty() - 1;
1142
+ // update the pager with active class
1143
+ if(slider.settings.pager) updatePagerActive(slider.active.index);
1144
+ // // check for direction control update
1145
+ if(slider.settings.controls) updateDirectionControls();
1146
+ // if slider is set to mode: "fade"
1147
+ if(slider.settings.mode == 'fade'){
1148
+ // if adaptiveHeight is true and next height is different from current height, animate to the new height
1149
+ if(slider.settings.adaptiveHeight && slider.viewport.height() != getViewportHeight()){
1150
+ slider.viewport.animate({height: getViewportHeight()}, slider.settings.adaptiveHeightSpeed);
1151
+ }
1152
+ // fade out the visible child and reset its z-index value
1153
+ slider.children.filter(':visible').fadeOut(slider.settings.speed).css({zIndex: 0});
1154
+ // fade in the newly requested slide
1155
+ slider.children.eq(slider.active.index).css('zIndex', slider.settings.slideZIndex+1).fadeIn(slider.settings.speed, function(){
1156
+ $(this).css('zIndex', slider.settings.slideZIndex);
1157
+ updateAfterSlideTransition();
1158
+ });
1159
+ // slider mode is not "fade"
1160
+ }else{
1161
+ // if adaptiveHeight is true and next height is different from current height, animate to the new height
1162
+ if(slider.settings.adaptiveHeight && slider.viewport.height() != getViewportHeight()){
1163
+ slider.viewport.animate({height: getViewportHeight()}, slider.settings.adaptiveHeightSpeed);
1164
+ }
1165
+ var moveBy = 0;
1166
+ var position = {left: 0, top: 0};
1167
+ // if carousel and not infinite loop
1168
+ if(!slider.settings.infiniteLoop && slider.carousel && slider.active.last){
1169
+ if(slider.settings.mode == 'horizontal'){
1170
+ // get the last child position
1171
+ var lastChild = slider.children.eq(slider.children.length - 1);
1172
+ position = lastChild.position();
1173
+ // calculate the position of the last slide
1174
+ moveBy = slider.viewport.width() - lastChild.outerWidth();
1175
+ }else{
1176
+ // get last showing index position
1177
+ var lastShowingIndex = slider.children.length - slider.settings.minSlides;
1178
+ position = slider.children.eq(lastShowingIndex).position();
1179
+ }
1180
+ // horizontal carousel, going previous while on first slide (infiniteLoop mode)
1181
+ }else if(slider.carousel && slider.active.last && direction == 'prev'){
1182
+ // get the last child position
1183
+ var eq = slider.settings.moveSlides == 1 ? slider.settings.maxSlides - getMoveBy() : ((getPagerQty() - 1) * getMoveBy()) - (slider.children.length - slider.settings.maxSlides);
1184
+ var lastChild = el.children('.bx-clone').eq(eq);
1185
+ position = lastChild.position();
1186
+ // if infinite loop and "Next" is clicked on the last slide
1187
+ }else if(direction == 'next' && slider.active.index == 0){
1188
+ // get the last clone position
1189
+ position = el.find('> .bx-clone').eq(slider.settings.maxSlides).position();
1190
+ slider.active.last = false;
1191
+ // normal non-zero requests
1192
+ }else if(slideIndex >= 0){
1193
+ var requestEl = slideIndex * getMoveBy();
1194
+ position = slider.children.eq(requestEl).position();
1195
+ }
1196
+
1197
+ /* If the position doesn't exist
1198
+ * (e.g. if you destroy the slider on a next click),
1199
+ * it doesn't throw an error.
1200
+ */
1201
+ if ("undefined" !== typeof(position)) {
1202
+ var value = slider.settings.mode == 'horizontal' ? -(position.left - moveBy) : -position.top;
1203
+ // plugin values to be animated
1204
+ setPositionProperty(value, 'slide', slider.settings.speed);
1205
+ }
1206
+ }
1207
+ }
1208
+
1209
+ /**
1210
+ * Transitions to the next slide in the show
1211
+ */
1212
+ el.goToNextSlide = function(){
1213
+ // if infiniteLoop is false and last page is showing, disregard call
1214
+ if (!slider.settings.infiniteLoop && slider.active.last) return;
1215
+ var pagerIndex = parseInt(slider.active.index) + 1;
1216
+ el.goToSlide(pagerIndex, 'next');
1217
+ }
1218
+
1219
+ /**
1220
+ * Transitions to the prev slide in the show
1221
+ */
1222
+ el.goToPrevSlide = function(){
1223
+ // if infiniteLoop is false and last page is showing, disregard call
1224
+ if (!slider.settings.infiniteLoop && slider.active.index == 0) return;
1225
+ var pagerIndex = parseInt(slider.active.index) - 1;
1226
+ el.goToSlide(pagerIndex, 'prev');
1227
+ }
1228
+
1229
+ /**
1230
+ * Starts the auto show
1231
+ *
1232
+ * @param preventControlUpdate (boolean)
1233
+ * - if true, auto controls state will not be updated
1234
+ */
1235
+ el.startAuto = function(preventControlUpdate){
1236
+ // if an interval already exists, disregard call
1237
+ if(slider.interval) return;
1238
+ // create an interval
1239
+ slider.interval = setInterval(function(){
1240
+ slider.settings.autoDirection == 'next' ? el.goToNextSlide() : el.goToPrevSlide();
1241
+ }, slider.settings.pause);
1242
+ // if auto controls are displayed and preventControlUpdate is not true
1243
+ if (slider.settings.autoControls && preventControlUpdate != true) updateAutoControls('stop');
1244
+ }
1245
+
1246
+ /**
1247
+ * Stops the auto show
1248
+ *
1249
+ * @param preventControlUpdate (boolean)
1250
+ * - if true, auto controls state will not be updated
1251
+ */
1252
+ el.stopAuto = function(preventControlUpdate){
1253
+ // if no interval exists, disregard call
1254
+ if(!slider.interval) return;
1255
+ // clear the interval
1256
+ clearInterval(slider.interval);
1257
+ slider.interval = null;
1258
+ // if auto controls are displayed and preventControlUpdate is not true
1259
+ if (slider.settings.autoControls && preventControlUpdate != true) updateAutoControls('start');
1260
+ }
1261
+
1262
+ /**
1263
+ * Returns current slide index (zero-based)
1264
+ */
1265
+ el.getCurrentSlide = function(){
1266
+ return slider.active.index;
1267
+ }
1268
+
1269
+ /**
1270
+ * Returns current slide element
1271
+ */
1272
+ el.getCurrentSlideElement = function(){
1273
+ return slider.children.eq(slider.active.index);
1274
+ }
1275
+
1276
+ /**
1277
+ * Returns number of slides in show
1278
+ */
1279
+ el.getSlideCount = function(){
1280
+ return slider.children.length;
1281
+ }
1282
+
1283
+ /**
1284
+ * Update all dynamic slider elements
1285
+ */
1286
+ el.redrawSlider = function(){
1287
+ // resize all children in ratio to new screen size
1288
+ slider.children.add(el.find('.bx-clone')).width(getSlideWidth());
1289
+ // adjust the height
1290
+ slider.viewport.css('height', getViewportHeight());
1291
+ // update the slide position
1292
+ if(!slider.settings.ticker) setSlidePosition();
1293
+ // if active.last was true before the screen resize, we want
1294
+ // to keep it last no matter what screen size we end on
1295
+ if (slider.active.last) slider.active.index = getPagerQty() - 1;
1296
+ // if the active index (page) no longer exists due to the resize, simply set the index as last
1297
+ if (slider.active.index >= getPagerQty()) slider.active.last = true;
1298
+ // if a pager is being displayed and a custom pager is not being used, update it
1299
+ if(slider.settings.pager && !slider.settings.pagerCustom){
1300
+ populatePager();
1301
+ updatePagerActive(slider.active.index);
1302
+ }
1303
+ }
1304
+
1305
+ /**
1306
+ * Destroy the current instance of the slider (revert everything back to original state)
1307
+ */
1308
+ el.destroySlider = function(){
1309
+ // don't do anything if slider has already been destroyed
1310
+ if(!slider.initialized) return;
1311
+ slider.initialized = false;
1312
+ $('.bx-clone', this).remove();
1313
+ slider.children.each(function() {
1314
+ $(this).data("origStyle") != undefined ? $(this).attr("style", $(this).data("origStyle")) : $(this).removeAttr('style');
1315
+ });
1316
+ $(this).data("origStyle") != undefined ? this.attr("style", $(this).data("origStyle")) : $(this).removeAttr('style');
1317
+ $(this).unwrap().unwrap();
1318
+ if(slider.controls.el) slider.controls.el.remove();
1319
+ if(slider.controls.next) slider.controls.next.remove();
1320
+ if(slider.controls.prev) slider.controls.prev.remove();
1321
+ if(slider.pagerEl && slider.settings.controls) slider.pagerEl.remove();
1322
+ $('.bx-caption', this).remove();
1323
+ if(slider.controls.autoEl) slider.controls.autoEl.remove();
1324
+ clearInterval(slider.interval);
1325
+ if(slider.settings.responsive) $(window).unbind('resize', resizeWindow);
1326
+ }
1327
+
1328
+ /**
1329
+ * Reload the slider (revert all DOM changes, and re-initialize)
1330
+ */
1331
+ el.reloadSlider = function(settings){
1332
+ if (settings != undefined) options = settings;
1333
+ el.destroySlider();
1334
+ init();
1335
+ }
1336
+
1337
+ init();
1338
+
1339
+ // returns the current jQuery object
1340
+ return this;
1341
+ }
1342
+
1343
+ })(jQuery);
skin/frontend/default/default/js/padoo/jquery.cycle.js ADDED
@@ -0,0 +1,1548 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * jQuery Cycle Plugin (with Transition Definitions)
3
+ * Examples and documentation at: http://jquery.malsup.com/cycle/
4
+ * Copyright (c) 2007-2010 M. Alsup
5
+ * Version: 2.9999.6 (11-SEP-2012)
6
+ * Dual licensed under the MIT and GPL licenses.
7
+ * http://jquery.malsup.com/license.html
8
+ * Requires: jQuery v1.3.2 or later
9
+ */
10
+ ;(function($, undefined) {
11
+ "use strict";
12
+
13
+ var ver = '2.9999.6';
14
+
15
+ // if $.support is not defined (pre jQuery 1.3) add what I need
16
+ if ($.support === undefined) {
17
+ $.support = {
18
+ opacity: !($.browser.msie)
19
+ };
20
+ }
21
+
22
+ function debug(s) {
23
+ if ($.fn.cycle.debug)
24
+ log(s);
25
+ }
26
+ function log() {
27
+ if (window.console && console.log)
28
+ console.log('[cycle] ' + Array.prototype.join.call(arguments,' '));
29
+ }
30
+ $.expr[':'].paused = function(el) {
31
+ return el.cyclePause;
32
+ };
33
+
34
+
35
+ // the options arg can be...
36
+ // a number - indicates an immediate transition should occur to the given slide index
37
+ // a string - 'pause', 'resume', 'toggle', 'next', 'prev', 'stop', 'destroy' or the name of a transition effect (ie, 'fade', 'zoom', etc)
38
+ // an object - properties to control the slideshow
39
+ //
40
+ // the arg2 arg can be...
41
+ // the name of an fx (only used in conjunction with a numeric value for 'options')
42
+ // the value true (only used in first arg == 'resume') and indicates
43
+ // that the resume should occur immediately (not wait for next timeout)
44
+
45
+ $.fn.cycle = function(options, arg2) {
46
+ var o = { s: this.selector, c: this.context };
47
+
48
+ // in 1.3+ we can fix mistakes with the ready state
49
+ if (this.length === 0 && options != 'stop') {
50
+ if (!$.isReady && o.s) {
51
+ log('DOM not ready, queuing slideshow');
52
+ $(function() {
53
+ $(o.s,o.c).cycle(options,arg2);
54
+ });
55
+ return this;
56
+ }
57
+ // is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
58
+ log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
59
+ return this;
60
+ }
61
+
62
+ // iterate the matched nodeset
63
+ return this.each(function() {
64
+ var opts = handleArguments(this, options, arg2);
65
+ if (opts === false)
66
+ return;
67
+
68
+ opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink;
69
+
70
+ // stop existing slideshow for this container (if there is one)
71
+ if (this.cycleTimeout)
72
+ clearTimeout(this.cycleTimeout);
73
+ this.cycleTimeout = this.cyclePause = 0;
74
+ this.cycleStop = 0; // issue #108
75
+
76
+ var $cont = $(this);
77
+ var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children();
78
+ var els = $slides.get();
79
+
80
+ if (els.length < 2) {
81
+ log('terminating; too few slides: ' + els.length);
82
+ return;
83
+ }
84
+
85
+ var opts2 = buildOptions($cont, $slides, els, opts, o);
86
+ if (opts2 === false)
87
+ return;
88
+
89
+ var startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.backwards);
90
+
91
+ // if it's an auto slideshow, kick it off
92
+ if (startTime) {
93
+ startTime += (opts2.delay || 0);
94
+ if (startTime < 10)
95
+ startTime = 10;
96
+ debug('first timeout: ' + startTime);
97
+ this.cycleTimeout = setTimeout(function(){go(els,opts2,0,!opts.backwards);}, startTime);
98
+ }
99
+ });
100
+ };
101
+
102
+ function triggerPause(cont, byHover, onPager) {
103
+ var opts = $(cont).data('cycle.opts');
104
+ var paused = !!cont.cyclePause;
105
+ if (paused && opts.paused)
106
+ opts.paused(cont, opts, byHover, onPager);
107
+ else if (!paused && opts.resumed)
108
+ opts.resumed(cont, opts, byHover, onPager);
109
+ }
110
+
111
+ // process the args that were passed to the plugin fn
112
+ function handleArguments(cont, options, arg2) {
113
+ if (cont.cycleStop === undefined)
114
+ cont.cycleStop = 0;
115
+ if (options === undefined || options === null)
116
+ options = {};
117
+ if (options.constructor == String) {
118
+ switch(options) {
119
+ case 'destroy':
120
+ case 'stop':
121
+ var opts = $(cont).data('cycle.opts');
122
+ if (!opts)
123
+ return false;
124
+ cont.cycleStop++; // callbacks look for change
125
+ if (cont.cycleTimeout)
126
+ clearTimeout(cont.cycleTimeout);
127
+ cont.cycleTimeout = 0;
128
+ if (opts.elements)
129
+ $(opts.elements).stop();
130
+ $(cont).removeData('cycle.opts');
131
+ if (options == 'destroy')
132
+ destroy(cont, opts);
133
+ return false;
134
+ case 'toggle':
135
+ cont.cyclePause = (cont.cyclePause === 1) ? 0 : 1;
136
+ checkInstantResume(cont.cyclePause, arg2, cont);
137
+ triggerPause(cont);
138
+ return false;
139
+ case 'pause':
140
+ cont.cyclePause = 1;
141
+ triggerPause(cont);
142
+ return false;
143
+ case 'resume':
144
+ cont.cyclePause = 0;
145
+ checkInstantResume(false, arg2, cont);
146
+ triggerPause(cont);
147
+ return false;
148
+ case 'prev':
149
+ case 'next':
150
+ opts = $(cont).data('cycle.opts');
151
+ if (!opts) {
152
+ log('options not found, "prev/next" ignored');
153
+ return false;
154
+ }
155
+ $.fn.cycle[options](opts);
156
+ return false;
157
+ default:
158
+ options = { fx: options };
159
+ }
160
+ return options;
161
+ }
162
+ else if (options.constructor == Number) {
163
+ // go to the requested slide
164
+ var num = options;
165
+ options = $(cont).data('cycle.opts');
166
+ if (!options) {
167
+ log('options not found, can not advance slide');
168
+ return false;
169
+ }
170
+ if (num < 0 || num >= options.elements.length) {
171
+ log('invalid slide index: ' + num);
172
+ return false;
173
+ }
174
+ options.nextSlide = num;
175
+ if (cont.cycleTimeout) {
176
+ clearTimeout(cont.cycleTimeout);
177
+ cont.cycleTimeout = 0;
178
+ }
179
+ if (typeof arg2 == 'string')
180
+ options.oneTimeFx = arg2;
181
+ go(options.elements, options, 1, num >= options.currSlide);
182
+ return false;
183
+ }
184
+ return options;
185
+
186
+ function checkInstantResume(isPaused, arg2, cont) {
187
+ if (!isPaused && arg2 === true) { // resume now!
188
+ var options = $(cont).data('cycle.opts');
189
+ if (!options) {
190
+ log('options not found, can not resume');
191
+ return false;
192
+ }
193
+ if (cont.cycleTimeout) {
194
+ clearTimeout(cont.cycleTimeout);
195
+ cont.cycleTimeout = 0;
196
+ }
197
+ go(options.elements, options, 1, !options.backwards);
198
+ }
199
+ }
200
+ }
201
+
202
+ function removeFilter(el, opts) {
203
+ if (!$.support.opacity && opts.cleartype && el.style.filter) {
204
+ try { el.style.removeAttribute('filter'); }
205
+ catch(smother) {} // handle old opera versions
206
+ }
207
+ }
208
+
209
+ // unbind event handlers
210
+ function destroy(cont, opts) {
211
+ if (opts.next)
212
+ $(opts.next).unbind(opts.prevNextEvent);
213
+ if (opts.prev)
214
+ $(opts.prev).unbind(opts.prevNextEvent);
215
+
216
+ if (opts.pager || opts.pagerAnchorBuilder)
217
+ $.each(opts.pagerAnchors || [], function() {
218
+ this.unbind().remove();
219
+ });
220
+ opts.pagerAnchors = null;
221
+ $(cont).unbind('mouseenter.cycle mouseleave.cycle');
222
+ if (opts.destroy) // callback
223
+ opts.destroy(opts);
224
+ }
225
+
226
+ // one-time initialization
227
+ function buildOptions($cont, $slides, els, options, o) {
228
+ var startingSlideSpecified;
229
+ // support metadata plugin (v1.0 and v2.0)
230
+ var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
231
+ var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null;
232
+ if (meta)
233
+ opts = $.extend(opts, meta);
234
+ if (opts.autostop)
235
+ opts.countdown = opts.autostopCount || els.length;
236
+
237
+ var cont = $cont[0];
238
+ $cont.data('cycle.opts', opts);
239
+ opts.$cont = $cont;
240
+ opts.stopCount = cont.cycleStop;
241
+ opts.elements = els;
242
+ opts.before = opts.before ? [opts.before] : [];
243
+ opts.after = opts.after ? [opts.after] : [];
244
+
245
+ // push some after callbacks
246
+ if (!$.support.opacity && opts.cleartype)
247
+ opts.after.push(function() { removeFilter(this, opts); });
248
+ if (opts.continuous)
249
+ opts.after.push(function() { go(els,opts,0,!opts.backwards); });
250
+
251
+ saveOriginalOpts(opts);
252
+
253
+ // clearType corrections
254
+ if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
255
+ clearTypeFix($slides);
256
+
257
+ // container requires non-static position so that slides can be position within
258
+ if ($cont.css('position') == 'static')
259
+ $cont.css('position', 'relative');
260
+ if (opts.width)
261
+ $cont.width(opts.width);
262
+ if (opts.height && opts.height != 'auto')
263
+ $cont.height(opts.height);
264
+
265
+ if (opts.startingSlide !== undefined) {
266
+ opts.startingSlide = parseInt(opts.startingSlide,10);
267
+ if (opts.startingSlide >= els.length || opts.startSlide < 0)
268
+ opts.startingSlide = 0; // catch bogus input
269
+ else
270
+ startingSlideSpecified = true;
271
+ }
272
+ else if (opts.backwards)
273
+ opts.startingSlide = els.length - 1;
274
+ else
275
+ opts.startingSlide = 0;
276
+
277
+ // if random, mix up the slide array
278
+ if (opts.random) {
279
+ opts.randomMap = [];
280
+ for (var i = 0; i < els.length; i++)
281
+ opts.randomMap.push(i);
282
+ opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
283
+ if (startingSlideSpecified) {
284
+ // try to find the specified starting slide and if found set start slide index in the map accordingly
285
+ for ( var cnt = 0; cnt < els.length; cnt++ ) {
286
+ if ( opts.startingSlide == opts.randomMap[cnt] ) {
287
+ opts.randomIndex = cnt;
288
+ }
289
+ }
290
+ }
291
+ else {
292
+ opts.randomIndex = 1;
293
+ opts.startingSlide = opts.randomMap[1];
294
+ }
295
+ }
296
+ else if (opts.startingSlide >= els.length)
297
+ opts.startingSlide = 0; // catch bogus input
298
+ opts.currSlide = opts.startingSlide || 0;
299
+ var first = opts.startingSlide;
300
+
301
+ // set position and zIndex on all the slides
302
+ $slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) {
303
+ var z;
304
+ if (opts.backwards)
305
+ z = first ? i <= first ? els.length + (i-first) : first-i : els.length-i;
306
+ else
307
+ z = first ? i >= first ? els.length - (i-first) : first-i : els.length-i;
308
+ $(this).css('z-index', z);
309
+ });
310
+
311
+ // make sure first slide is visible
312
+ $(els[first]).css('opacity',1).show(); // opacity bit needed to handle restart use case
313
+ removeFilter(els[first], opts);
314
+
315
+ // stretch slides
316
+ if (opts.fit) {
317
+ if (!opts.aspect) {
318
+ if (opts.width)
319
+ $slides.width(opts.width);
320
+ if (opts.height && opts.height != 'auto')
321
+ $slides.height(opts.height);
322
+ } else {
323
+ $slides.each(function(){
324
+ var $slide = $(this);
325
+ var ratio = (opts.aspect === true) ? $slide.width()/$slide.height() : opts.aspect;
326
+ if( opts.width && $slide.width() != opts.width ) {
327
+ $slide.width( opts.width );
328
+ $slide.height( opts.width / ratio );
329
+ }
330
+
331
+ if( opts.height && $slide.height() < opts.height ) {
332
+ $slide.height( opts.height );
333
+ $slide.width( opts.height * ratio );
334
+ }
335
+ });
336
+ }
337
+ }
338
+
339
+ if (opts.center && ((!opts.fit) || opts.aspect)) {
340
+ $slides.each(function(){
341
+ var $slide = $(this);
342
+ $slide.css({
343
+ "margin-left": opts.width ?
344
+ ((opts.width - $slide.width()) / 2) + "px" :
345
+ 0,
346
+ "margin-top": opts.height ?
347
+ ((opts.height - $slide.height()) / 2) + "px" :
348
+ 0
349
+ });
350
+ });
351
+ }
352
+
353
+ if (opts.center && !opts.fit && !opts.slideResize) {
354
+ $slides.each(function(){
355
+ var $slide = $(this);
356
+ $slide.css({
357
+ "margin-left": opts.width ? ((opts.width - $slide.width()) / 2) + "px" : 0,
358
+ "margin-top": opts.height ? ((opts.height - $slide.height()) / 2) + "px" : 0
359
+ });
360
+ });
361
+ }
362
+
363
+ // stretch container
364
+ var reshape = (opts.containerResize || opts.containerResizeHeight) && !$cont.innerHeight();
365
+ if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9
366
+ var maxw = 0, maxh = 0;
367
+ for(var j=0; j < els.length; j++) {
368
+ var $e = $(els[j]), e = $e[0], w = $e.outerWidth(), h = $e.outerHeight();
369
+ if (!w) w = e.offsetWidth || e.width || $e.attr('width');
370
+ if (!h) h = e.offsetHeight || e.height || $e.attr('height');
371
+ maxw = w > maxw ? w : maxw;
372
+ maxh = h > maxh ? h : maxh;
373
+ }
374
+ if (opts.containerResize && maxw > 0 && maxh > 0)
375
+ $cont.css({width:maxw+'px',height:maxh+'px'});
376
+ if (opts.containerResizeHeight && maxh > 0)
377
+ $cont.css({height:maxh+'px'});
378
+ }
379
+
380
+ var pauseFlag = false; // https://github.com/malsup/cycle/issues/44
381
+ if (opts.pause)
382
+ $cont.bind('mouseenter.cycle', function(){
383
+ pauseFlag = true;
384
+ this.cyclePause++;
385
+ triggerPause(cont, true);
386
+ }).bind('mouseleave.cycle', function(){
387
+ if (pauseFlag)
388
+ this.cyclePause--;
389
+ triggerPause(cont, true);
390
+ });
391
+
392
+ if (supportMultiTransitions(opts) === false)
393
+ return false;
394
+
395
+ // apparently a lot of people use image slideshows without height/width attributes on the images.
396
+ // Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that.
397
+ var requeue = false;
398
+ options.requeueAttempts = options.requeueAttempts || 0;
399
+ $slides.each(function() {
400
+ // try to get height/width of each slide
401
+ var $el = $(this);
402
+ this.cycleH = (opts.fit && opts.height) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr('height') || 0);
403
+ this.cycleW = (opts.fit && opts.width) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr('width') || 0);
404
+
405
+ if ( $el.is('img') ) {
406
+ // sigh.. sniffing, hacking, shrugging... this crappy hack tries to account for what browsers do when
407
+ // an image is being downloaded and the markup did not include sizing info (height/width attributes);
408
+ // there seems to be some "default" sizes used in this situation
409
+ var loadingIE = ($.browser.msie && this.cycleW == 28 && this.cycleH == 30 && !this.complete);
410
+ var loadingFF = ($.browser.mozilla && this.cycleW == 34 && this.cycleH == 19 && !this.complete);
411
+ var loadingOp = ($.browser.opera && ((this.cycleW == 42 && this.cycleH == 19) || (this.cycleW == 37 && this.cycleH == 17)) && !this.complete);
412
+ var loadingOther = (this.cycleH === 0 && this.cycleW === 0 && !this.complete);
413
+ // don't requeue for images that are still loading but have a valid size
414
+ if (loadingIE || loadingFF || loadingOp || loadingOther) {
415
+ if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) { // track retry count so we don't loop forever
416
+ log(options.requeueAttempts,' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH);
417
+ setTimeout(function() {$(o.s,o.c).cycle(options);}, opts.requeueTimeout);
418
+ requeue = true;
419
+ return false; // break each loop
420
+ }
421
+ else {
422
+ log('could not determine size of image: '+this.src, this.cycleW, this.cycleH);
423
+ }
424
+ }
425
+ }
426
+ return true;
427
+ });
428
+
429
+ if (requeue)
430
+ return false;
431
+
432
+ opts.cssBefore = opts.cssBefore || {};
433
+ opts.cssAfter = opts.cssAfter || {};
434
+ opts.cssFirst = opts.cssFirst || {};
435
+ opts.animIn = opts.animIn || {};
436
+ opts.animOut = opts.animOut || {};
437
+
438
+ $slides.not(':eq('+first+')').css(opts.cssBefore);
439
+ $($slides[first]).css(opts.cssFirst);
440
+
441
+ if (opts.timeout) {
442
+ opts.timeout = parseInt(opts.timeout,10);
443
+ // ensure that timeout and speed settings are sane
444
+ if (opts.speed.constructor == String)
445
+ opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed,10);
446
+ if (!opts.sync)
447
+ opts.speed = opts.speed / 2;
448
+
449
+ var buffer = opts.fx == 'none' ? 0 : opts.fx == 'shuffle' ? 500 : 250;
450
+ while((opts.timeout - opts.speed) < buffer) // sanitize timeout
451
+ opts.timeout += opts.speed;
452
+ }
453
+ if (opts.easing)
454
+ opts.easeIn = opts.easeOut = opts.easing;
455
+ if (!opts.speedIn)
456
+ opts.speedIn = opts.speed;
457
+ if (!opts.speedOut)
458
+ opts.speedOut = opts.speed;
459
+
460
+ opts.slideCount = els.length;
461
+ opts.currSlide = opts.lastSlide = first;
462
+ if (opts.random) {
463
+ if (++opts.randomIndex == els.length)
464
+ opts.randomIndex = 0;
465
+ opts.nextSlide = opts.randomMap[opts.randomIndex];
466
+ }
467
+ else if (opts.backwards)
468
+ opts.nextSlide = opts.startingSlide === 0 ? (els.length-1) : opts.startingSlide-1;
469
+ else
470
+ opts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1;
471
+
472
+ // run transition init fn
473
+ if (!opts.multiFx) {
474
+ var init = $.fn.cycle.transitions[opts.fx];
475
+ if ($.isFunction(init))
476
+ init($cont, $slides, opts);
477
+ else if (opts.fx != 'custom' && !opts.multiFx) {
478
+ log('unknown transition: ' + opts.fx,'; slideshow terminating');
479
+ return false;
480
+ }
481
+ }
482
+
483
+ // fire artificial events
484
+ var e0 = $slides[first];
485
+ if (!opts.skipInitializationCallbacks) {
486
+ if (opts.before.length)
487
+ opts.before[0].apply(e0, [e0, e0, opts, true]);
488
+ if (opts.after.length)
489
+ opts.after[0].apply(e0, [e0, e0, opts, true]);
490
+ }
491
+ if (opts.next)
492
+ $(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,1);});
493
+ if (opts.prev)
494
+ $(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,0);});
495
+ if (opts.pager || opts.pagerAnchorBuilder)
496
+ buildPager(els,opts);
497
+
498
+ exposeAddSlide(opts, els);
499
+
500
+ return opts;
501
+ }
502
+
503
+ // save off original opts so we can restore after clearing state
504
+ function saveOriginalOpts(opts) {
505
+ opts.original = { before: [], after: [] };
506
+ opts.original.cssBefore = $.extend({}, opts.cssBefore);
507
+ opts.original.cssAfter = $.extend({}, opts.cssAfter);
508
+ opts.original.animIn = $.extend({}, opts.animIn);
509
+ opts.original.animOut = $.extend({}, opts.animOut);
510
+ $.each(opts.before, function() { opts.original.before.push(this); });
511
+ $.each(opts.after, function() { opts.original.after.push(this); });
512
+ }
513
+
514
+ function supportMultiTransitions(opts) {
515
+ var i, tx, txs = $.fn.cycle.transitions;
516
+ // look for multiple effects
517
+ if (opts.fx.indexOf(',') > 0) {
518
+ opts.multiFx = true;
519
+ opts.fxs = opts.fx.replace(/\s*/g,'').split(',');
520
+ // discard any bogus effect names
521
+ for (i=0; i < opts.fxs.length; i++) {
522
+ var fx = opts.fxs[i];
523
+ tx = txs[fx];
524
+ if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) {
525
+ log('discarding unknown transition: ',fx);
526
+ opts.fxs.splice(i,1);
527
+ i--;
528
+ }
529
+ }
530
+ // if we have an empty list then we threw everything away!
531
+ if (!opts.fxs.length) {
532
+ log('No valid transitions named; slideshow terminating.');
533
+ return false;
534
+ }
535
+ }
536
+ else if (opts.fx == 'all') { // auto-gen the list of transitions
537
+ opts.multiFx = true;
538
+ opts.fxs = [];
539
+ for (var p in txs) {
540
+ if (txs.hasOwnProperty(p)) {
541
+ tx = txs[p];
542
+ if (txs.hasOwnProperty(p) && $.isFunction(tx))
543
+ opts.fxs.push(p);
544
+ }
545
+ }
546
+ }
547
+ if (opts.multiFx && opts.randomizeEffects) {
548
+ // munge the fxs array to make effect selection random
549
+ var r1 = Math.floor(Math.random() * 20) + 30;
550
+ for (i = 0; i < r1; i++) {
551
+ var r2 = Math.floor(Math.random() * opts.fxs.length);
552
+ opts.fxs.push(opts.fxs.splice(r2,1)[0]);
553
+ }
554
+ debug('randomized fx sequence: ',opts.fxs);
555
+ }
556
+ return true;
557
+ }
558
+
559
+ // provide a mechanism for adding slides after the slideshow has started
560
+ function exposeAddSlide(opts, els) {
561
+ opts.addSlide = function(newSlide, prepend) {
562
+ var $s = $(newSlide), s = $s[0];
563
+ if (!opts.autostopCount)
564
+ opts.countdown++;
565
+ els[prepend?'unshift':'push'](s);
566
+ if (opts.els)
567
+ opts.els[prepend?'unshift':'push'](s); // shuffle needs this
568
+ opts.slideCount = els.length;
569
+
570
+ // add the slide to the random map and resort
571
+ if (opts.random) {
572
+ opts.randomMap.push(opts.slideCount-1);
573
+ opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
574
+ }
575
+
576
+ $s.css('position','absolute');
577
+ $s[prepend?'prependTo':'appendTo'](opts.$cont);
578
+
579
+ if (prepend) {
580
+ opts.currSlide++;
581
+ opts.nextSlide++;
582
+ }
583
+
584
+ if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
585
+ clearTypeFix($s);
586
+
587
+ if (opts.fit && opts.width)
588
+ $s.width(opts.width);
589
+ if (opts.fit && opts.height && opts.height != 'auto')
590
+ $s.height(opts.height);
591
+ s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height();
592
+ s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width();
593
+
594
+ $s.css(opts.cssBefore);
595
+
596
+ if (opts.pager || opts.pagerAnchorBuilder)
597
+ $.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts);
598
+
599
+ if ($.isFunction(opts.onAddSlide))
600
+ opts.onAddSlide($s);
601
+ else
602
+ $s.hide(); // default behavior
603
+ };
604
+ }
605
+
606
+ // reset internal state; we do this on every pass in order to support multiple effects
607
+ $.fn.cycle.resetState = function(opts, fx) {
608
+ fx = fx || opts.fx;
609
+ opts.before = []; opts.after = [];
610
+ opts.cssBefore = $.extend({}, opts.original.cssBefore);
611
+ opts.cssAfter = $.extend({}, opts.original.cssAfter);
612
+ opts.animIn = $.extend({}, opts.original.animIn);
613
+ opts.animOut = $.extend({}, opts.original.animOut);
614
+ opts.fxFn = null;
615
+ $.each(opts.original.before, function() { opts.before.push(this); });
616
+ $.each(opts.original.after, function() { opts.after.push(this); });
617
+
618
+ // re-init
619
+ var init = $.fn.cycle.transitions[fx];
620
+ if ($.isFunction(init))
621
+ init(opts.$cont, $(opts.elements), opts);
622
+ };
623
+
624
+ // this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt
625
+ function go(els, opts, manual, fwd) {
626
+ var p = opts.$cont[0], curr = els[opts.currSlide], next = els[opts.nextSlide];
627
+
628
+ // opts.busy is true if we're in the middle of an animation
629
+ if (manual && opts.busy && opts.manualTrump) {
630
+ // let manual transitions requests trump active ones
631
+ debug('manualTrump in go(), stopping active transition');
632
+ $(els).stop(true,true);
633
+ opts.busy = 0;
634
+ clearTimeout(p.cycleTimeout);
635
+ }
636
+
637
+ // don't begin another timeout-based transition if there is one active
638
+ if (opts.busy) {
639
+ debug('transition active, ignoring new tx request');
640
+ return;
641
+ }
642
+
643
+
644
+ // stop cycling if we have an outstanding stop request
645
+ if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual)
646
+ return;
647
+
648
+ // check to see if we should stop cycling based on autostop options
649
+ if (!manual && !p.cyclePause && !opts.bounce &&
650
+ ((opts.autostop && (--opts.countdown <= 0)) ||
651
+ (opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) {
652
+ if (opts.end)
653
+ opts.end(opts);
654
+ return;
655
+ }
656
+
657
+ // if slideshow is paused, only transition on a manual trigger
658
+ var changed = false;
659
+ if ((manual || !p.cyclePause) && (opts.nextSlide != opts.currSlide)) {
660
+ changed = true;
661
+ var fx = opts.fx;
662
+ // keep trying to get the slide size if we don't have it yet
663
+ curr.cycleH = curr.cycleH || $(curr).height();
664
+ curr.cycleW = curr.cycleW || $(curr).width();
665
+ next.cycleH = next.cycleH || $(next).height();
666
+ next.cycleW = next.cycleW || $(next).width();
667
+
668
+ // support multiple transition types
669
+ if (opts.multiFx) {
670
+ if (fwd && (opts.lastFx === undefined || ++opts.lastFx >= opts.fxs.length))
671
+ opts.lastFx = 0;
672
+ else if (!fwd && (opts.lastFx === undefined || --opts.lastFx < 0))
673
+ opts.lastFx = opts.fxs.length - 1;
674
+ fx = opts.fxs[opts.lastFx];
675
+ }
676
+
677
+ // one-time fx overrides apply to: $('div').cycle(3,'zoom');
678
+ if (opts.oneTimeFx) {
679
+ fx = opts.oneTimeFx;
680
+ opts.oneTimeFx = null;
681
+ }
682
+
683
+ $.fn.cycle.resetState(opts, fx);
684
+
685
+ // run the before callbacks
686
+ if (opts.before.length)
687
+ $.each(opts.before, function(i,o) {
688
+ if (p.cycleStop != opts.stopCount) return;
689
+ o.apply(next, [curr, next, opts, fwd]);
690
+ });
691
+
692
+ // stage the after callacks
693
+ var after = function() {
694
+ opts.busy = 0;
695
+ $.each(opts.after, function(i,o) {
696
+ if (p.cycleStop != opts.stopCount) return;
697
+ o.apply(next, [curr, next, opts, fwd]);
698
+ });
699
+ if (!p.cycleStop) {
700
+ // queue next transition
701
+ queueNext();
702
+ }
703
+ };
704
+
705
+ debug('tx firing('+fx+'); currSlide: ' + opts.currSlide + '; nextSlide: ' + opts.nextSlide);
706
+
707
+ // get ready to perform the transition
708
+ opts.busy = 1;
709
+ if (opts.fxFn) // fx function provided?
710
+ opts.fxFn(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
711
+ else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ?
712
+ $.fn.cycle[opts.fx](curr, next, opts, after, fwd, manual && opts.fastOnEvent);
713
+ else
714
+ $.fn.cycle.custom(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
715
+ }
716
+ else {
717
+ queueNext();
718
+ }
719
+
720
+ if (changed || opts.nextSlide == opts.currSlide) {
721
+ // calculate the next slide
722
+ var roll;
723
+ opts.lastSlide = opts.currSlide;
724
+ if (opts.random) {
725
+ opts.currSlide = opts.nextSlide;
726
+ if (++opts.randomIndex == els.length) {
727
+ opts.randomIndex = 0;
728
+ opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
729
+ }
730
+ opts.nextSlide = opts.randomMap[opts.randomIndex];
731
+ if (opts.nextSlide == opts.currSlide)
732
+ opts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1;
733
+ }
734
+ else if (opts.backwards) {
735
+ roll = (opts.nextSlide - 1) < 0;
736
+ if (roll && opts.bounce) {
737
+ opts.backwards = !opts.backwards;
738
+ opts.nextSlide = 1;
739
+ opts.currSlide = 0;
740
+ }
741
+ else {
742
+ opts.nextSlide = roll ? (els.length-1) : opts.nextSlide-1;
743
+ opts.currSlide = roll ? 0 : opts.nextSlide+1;
744
+ }
745
+ }
746
+ else { // sequence
747
+ roll = (opts.nextSlide + 1) == els.length;
748
+ if (roll && opts.bounce) {
749
+ opts.backwards = !opts.backwards;
750
+ opts.nextSlide = els.length-2;
751
+ opts.currSlide = els.length-1;
752
+ }
753
+ else {
754
+ opts.nextSlide = roll ? 0 : opts.nextSlide+1;
755
+ opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
756
+ }
757
+ }
758
+ }
759
+ if (changed && opts.pager)
760
+ opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass);
761
+
762
+ function queueNext() {
763
+ // stage the next transition
764
+ var ms = 0, timeout = opts.timeout;
765
+ if (opts.timeout && !opts.continuous) {
766
+ ms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd);
767
+ if (opts.fx == 'shuffle')
768
+ ms -= opts.speedOut;
769
+ }
770
+ else if (opts.continuous && p.cyclePause) // continuous shows work off an after callback, not this timer logic
771
+ ms = 10;
772
+ if (ms > 0)
773
+ p.cycleTimeout = setTimeout(function(){ go(els, opts, 0, !opts.backwards); }, ms);
774
+ }
775
+ }
776
+
777
+ // invoked after transition
778
+ $.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) {
779
+ $(pager).each(function() {
780
+ $(this).children().removeClass(clsName).eq(currSlide).addClass(clsName);
781
+ });
782
+ };
783
+
784
+ // calculate timeout value for current transition
785
+ function getTimeout(curr, next, opts, fwd) {
786
+ if (opts.timeoutFn) {
787
+ // call user provided calc fn
788
+ var t = opts.timeoutFn.call(curr,curr,next,opts,fwd);
789
+ while (opts.fx != 'none' && (t - opts.speed) < 250) // sanitize timeout
790
+ t += opts.speed;
791
+ debug('calculated timeout: ' + t + '; speed: ' + opts.speed);
792
+ if (t !== false)
793
+ return t;
794
+ }
795
+ return opts.timeout;
796
+ }
797
+
798
+ // expose next/prev function, caller must pass in state
799
+ $.fn.cycle.next = function(opts) { advance(opts,1); };
800
+ $.fn.cycle.prev = function(opts) { advance(opts,0);};
801
+
802
+ // advance slide forward or back
803
+ function advance(opts, moveForward) {
804
+ var val = moveForward ? 1 : -1;
805
+ var els = opts.elements;
806
+ var p = opts.$cont[0], timeout = p.cycleTimeout;
807
+ if (timeout) {
808
+ clearTimeout(timeout);
809
+ p.cycleTimeout = 0;
810
+ }
811
+ if (opts.random && val < 0) {
812
+ // move back to the previously display slide
813
+ opts.randomIndex--;
814
+ if (--opts.randomIndex == -2)
815
+ opts.randomIndex = els.length-2;
816
+ else if (opts.randomIndex == -1)
817
+ opts.randomIndex = els.length-1;
818
+ opts.nextSlide = opts.randomMap[opts.randomIndex];
819
+ }
820
+ else if (opts.random) {
821
+ opts.nextSlide = opts.randomMap[opts.randomIndex];
822
+ }
823
+ else {
824
+ opts.nextSlide = opts.currSlide + val;
825
+ if (opts.nextSlide < 0) {
826
+ if (opts.nowrap) return false;
827
+ opts.nextSlide = els.length - 1;
828
+ }
829
+ else if (opts.nextSlide >= els.length) {
830
+ if (opts.nowrap) return false;
831
+ opts.nextSlide = 0;
832
+ }
833
+ }
834
+
835
+ var cb = opts.onPrevNextEvent || opts.prevNextClick; // prevNextClick is deprecated
836
+ if ($.isFunction(cb))
837
+ cb(val > 0, opts.nextSlide, els[opts.nextSlide]);
838
+ go(els, opts, 1, moveForward);
839
+ return false;
840
+ }
841
+
842
+ function buildPager(els, opts) {
843
+ var $p = $(opts.pager);
844
+ $.each(els, function(i,o) {
845
+ $.fn.cycle.createPagerAnchor(i,o,$p,els,opts);
846
+ });
847
+ opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass);
848
+ }
849
+
850
+ $.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {
851
+ var a;
852
+ if ($.isFunction(opts.pagerAnchorBuilder)) {
853
+ a = opts.pagerAnchorBuilder(i,el);
854
+ debug('pagerAnchorBuilder('+i+', el) returned: ' + a);
855
+ }
856
+ else
857
+ a = '<a href="#">'+(i+1)+'</a>';
858
+
859
+ if (!a)
860
+ return;
861
+ var $a = $(a);
862
+ // don't reparent if anchor is in the dom
863
+ if ($a.parents('body').length === 0) {
864
+ var arr = [];
865
+ if ($p.length > 1) {
866
+ $p.each(function() {
867
+ var $clone = $a.clone(true);
868
+ $(this).append($clone);
869
+ arr.push($clone[0]);
870
+ });
871
+ $a = $(arr);
872
+ }
873
+ else {
874
+ $a.appendTo($p);
875
+ }
876
+ }
877
+
878
+ opts.pagerAnchors = opts.pagerAnchors || [];
879
+ opts.pagerAnchors.push($a);
880
+
881
+ var pagerFn = function(e) {
882
+ e.preventDefault();
883
+ opts.nextSlide = i;
884
+ var p = opts.$cont[0], timeout = p.cycleTimeout;
885
+ if (timeout) {
886
+ clearTimeout(timeout);
887
+ p.cycleTimeout = 0;
888
+ }
889
+ var cb = opts.onPagerEvent || opts.pagerClick; // pagerClick is deprecated
890
+ if ($.isFunction(cb))
891
+ cb(opts.nextSlide, els[opts.nextSlide]);
892
+ go(els,opts,1,opts.currSlide < i); // trigger the trans
893
+ // return false; // <== allow bubble
894
+ };
895
+
896
+ if ( /mouseenter|mouseover/i.test(opts.pagerEvent) ) {
897
+ $a.hover(pagerFn, function(){/* no-op */} );
898
+ }
899
+ else {
900
+ $a.bind(opts.pagerEvent, pagerFn);
901
+ }
902
+
903
+ if ( ! /^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble)
904
+ $a.bind('click.cycle', function(){return false;}); // suppress click
905
+
906
+ var cont = opts.$cont[0];
907
+ var pauseFlag = false; // https://github.com/malsup/cycle/issues/44
908
+ if (opts.pauseOnPagerHover) {
909
+ $a.hover(
910
+ function() {
911
+ pauseFlag = true;
912
+ cont.cyclePause++;
913
+ triggerPause(cont,true,true);
914
+ }, function() {
915
+ if (pauseFlag)
916
+ cont.cyclePause--;
917
+ triggerPause(cont,true,true);
918
+ }
919
+ );
920
+ }
921
+ };
922
+
923
+ // helper fn to calculate the number of slides between the current and the next
924
+ $.fn.cycle.hopsFromLast = function(opts, fwd) {
925
+ var hops, l = opts.lastSlide, c = opts.currSlide;
926
+ if (fwd)
927
+ hops = c > l ? c - l : opts.slideCount - l;
928
+ else
929
+ hops = c < l ? l - c : l + opts.slideCount - c;
930
+ return hops;
931
+ };
932
+
933
+ // fix clearType problems in ie6 by setting an explicit bg color
934
+ // (otherwise text slides look horrible during a fade transition)
935
+ function clearTypeFix($slides) {
936
+ debug('applying clearType background-color hack');
937
+ function hex(s) {
938
+ s = parseInt(s,10).toString(16);
939
+ return s.length < 2 ? '0'+s : s;
940
+ }
941
+ function getBg(e) {
942
+ for ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) {
943
+ var v = $.css(e,'background-color');
944
+ if (v && v.indexOf('rgb') >= 0 ) {
945
+ var rgb = v.match(/\d+/g);
946
+ return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
947
+ }
948
+ if (v && v != 'transparent')
949
+ return v;
950
+ }
951
+ return '#ffffff';
952
+ }
953
+ $slides.each(function() { $(this).css('background-color', getBg(this)); });
954
+ }
955
+
956
+ // reset common props before the next transition
957
+ $.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) {
958
+ $(opts.elements).not(curr).hide();
959
+ if (typeof opts.cssBefore.opacity == 'undefined')
960
+ opts.cssBefore.opacity = 1;
961
+ opts.cssBefore.display = 'block';
962
+ if (opts.slideResize && w !== false && next.cycleW > 0)
963
+ opts.cssBefore.width = next.cycleW;
964
+ if (opts.slideResize && h !== false && next.cycleH > 0)
965
+ opts.cssBefore.height = next.cycleH;
966
+ opts.cssAfter = opts.cssAfter || {};
967
+ opts.cssAfter.display = 'none';
968
+ $(curr).css('zIndex',opts.slideCount + (rev === true ? 1 : 0));
969
+ $(next).css('zIndex',opts.slideCount + (rev === true ? 0 : 1));
970
+ };
971
+
972
+ // the actual fn for effecting a transition
973
+ $.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) {
974
+ var $l = $(curr), $n = $(next);
975
+ var speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut;
976
+ $n.css(opts.cssBefore);
977
+ if (speedOverride) {
978
+ if (typeof speedOverride == 'number')
979
+ speedIn = speedOut = speedOverride;
980
+ else
981
+ speedIn = speedOut = 1;
982
+ easeIn = easeOut = null;
983
+ }
984
+ var fn = function() {
985
+ $n.animate(opts.animIn, speedIn, easeIn, function() {
986
+ cb();
987
+ });
988
+ };
989
+ $l.animate(opts.animOut, speedOut, easeOut, function() {
990
+ $l.css(opts.cssAfter);
991
+ if (!opts.sync)
992
+ fn();
993
+ });
994
+ if (opts.sync) fn();
995
+ };
996
+
997
+ // transition definitions - only fade is defined here, transition pack defines the rest
998
+ $.fn.cycle.transitions = {
999
+ fade: function($cont, $slides, opts) {
1000
+ $slides.not(':eq('+opts.currSlide+')').css('opacity',0);
1001
+ opts.before.push(function(curr,next,opts) {
1002
+ $.fn.cycle.commonReset(curr,next,opts);
1003
+ opts.cssBefore.opacity = 0;
1004
+ });
1005
+ opts.animIn = { opacity: 1 };
1006
+ opts.animOut = { opacity: 0 };
1007
+ opts.cssBefore = { top: 0, left: 0 };
1008
+ }
1009
+ };
1010
+
1011
+ $.fn.cycle.ver = function() { return ver; };
1012
+
1013
+ // override these globally if you like (they are all optional)
1014
+ $.fn.cycle.defaults = {
1015
+ activePagerClass: 'activeSlide', // class name used for the active pager link
1016
+ after: null, // transition callback (scope set to element that was shown): function(currSlideElement, nextSlideElement, options, forwardFlag)
1017
+ allowPagerClickBubble: false, // allows or prevents click event on pager anchors from bubbling
1018
+ animIn: null, // properties that define how the slide animates in
1019
+ animOut: null, // properties that define how the slide animates out
1020
+ aspect: false, // preserve aspect ratio during fit resizing, cropping if necessary (must be used with fit option)
1021
+ autostop: 0, // true to end slideshow after X transitions (where X == slide count)
1022
+ autostopCount: 0, // number of transitions (optionally used with autostop to define X)
1023
+ backwards: false, // true to start slideshow at last slide and move backwards through the stack
1024
+ before: null, // transition callback (scope set to element to be shown): function(currSlideElement, nextSlideElement, options, forwardFlag)
1025
+ center: null, // set to true to have cycle add top/left margin to each slide (use with width and height options)
1026
+ cleartype: !$.support.opacity, // true if clearType corrections should be applied (for IE)
1027
+ cleartypeNoBg: false, // set to true to disable extra cleartype fixing (leave false to force background color setting on slides)
1028
+ containerResize: 1, // resize container to fit largest slide
1029
+ containerResizeHeight: 0, // resize containers height to fit the largest slide but leave the width dynamic
1030
+ continuous: 0, // true to start next transition immediately after current one completes
1031
+ cssAfter: null, // properties that defined the state of the slide after transitioning out
1032
+ cssBefore: null, // properties that define the initial state of the slide before transitioning in
1033
+ delay: 0, // additional delay (in ms) for first transition (hint: can be negative)
1034
+ easeIn: null, // easing for "in" transition
1035
+ easeOut: null, // easing for "out" transition
1036
+ easing: null, // easing method for both in and out transitions
1037
+ end: null, // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)
1038
+ fastOnEvent: 0, // force fast transitions when triggered manually (via pager or prev/next); value == time in ms
1039
+ fit: 0, // force slides to fit container
1040
+ fx: 'fade', // name of transition effect (or comma separated names, ex: 'fade,scrollUp,shuffle')
1041
+ fxFn: null, // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)
1042
+ height: 'auto', // container height (if the 'fit' option is true, the slides will be set to this height as well)
1043
+ manualTrump: true, // causes manual transition to stop an active transition instead of being ignored
1044
+ metaAttr: 'cycle', // data- attribute that holds the option data for the slideshow
1045
+ next: null, // element, jQuery object, or jQuery selector string for the element to use as event trigger for next slide
1046
+ nowrap: 0, // true to prevent slideshow from wrapping
1047
+ onPagerEvent: null, // callback fn for pager events: function(zeroBasedSlideIndex, slideElement)
1048
+ onPrevNextEvent: null, // callback fn for prev/next events: function(isNext, zeroBasedSlideIndex, slideElement)
1049
+ pager: null, // element, jQuery object, or jQuery selector string for the element to use as pager container
1050
+ pagerAnchorBuilder: null, // callback fn for building anchor links: function(index, DOMelement)
1051
+ pagerEvent: 'click.cycle', // name of event which drives the pager navigation
1052
+ pause: 0, // true to enable "pause on hover"
1053
+ pauseOnPagerHover: 0, // true to pause when hovering over pager link
1054
+ prev: null, // element, jQuery object, or jQuery selector string for the element to use as event trigger for previous slide
1055
+ prevNextEvent: 'click.cycle',// event which drives the manual transition to the previous or next slide
1056
+ random: 0, // true for random, false for sequence (not applicable to shuffle fx)
1057
+ randomizeEffects: 1, // valid when multiple effects are used; true to make the effect sequence random
1058
+ requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded
1059
+ requeueTimeout: 250, // ms delay for requeue
1060
+ rev: 0, // causes animations to transition in reverse (for effects that support it such as scrollHorz/scrollVert/shuffle)
1061
+ shuffle: null, // coords for shuffle animation, ex: { top:15, left: 200 }
1062
+ skipInitializationCallbacks: false, // set to true to disable the first before/after callback that occurs prior to any transition
1063
+ slideExpr: null, // expression for selecting slides (if something other than all children is required)
1064
+ slideResize: 1, // force slide width/height to fixed size before every transition
1065
+ speed: 1000, // speed of the transition (any valid fx speed value)
1066
+ speedIn: null, // speed of the 'in' transition
1067
+ speedOut: null, // speed of the 'out' transition
1068
+ startingSlide: undefined,// zero-based index of the first slide to be displayed
1069
+ sync: 1, // true if in/out transitions should occur simultaneously
1070
+ timeout: 4000, // milliseconds between slide transitions (0 to disable auto advance)
1071
+ timeoutFn: null, // callback for determining per-slide timeout value: function(currSlideElement, nextSlideElement, options, forwardFlag)
1072
+ updateActivePagerLink: null,// callback fn invoked to update the active pager link (adds/removes activePagerClass style)
1073
+ width: null // container width (if the 'fit' option is true, the slides will be set to this width as well)
1074
+ };
1075
+
1076
+ })(jQuery);
1077
+
1078
+
1079
+ /*!
1080
+ * jQuery Cycle Plugin Transition Definitions
1081
+ * This script is a plugin for the jQuery Cycle Plugin
1082
+ * Examples and documentation at: http://malsup.com/jquery/cycle/
1083
+ * Copyright (c) 2007-2010 M. Alsup
1084
+ * Version: 2.73
1085
+ * Dual licensed under the MIT and GPL licenses:
1086
+ * http://www.opensource.org/licenses/mit-license.php
1087
+ * http://www.gnu.org/licenses/gpl.html
1088
+ */
1089
+ (function($) {
1090
+ "use strict";
1091
+
1092
+ //
1093
+ // These functions define slide initialization and properties for the named
1094
+ // transitions. To save file size feel free to remove any of these that you
1095
+ // don't need.
1096
+ //
1097
+ $.fn.cycle.transitions.none = function($cont, $slides, opts) {
1098
+ opts.fxFn = function(curr,next,opts,after){
1099
+ $(next).show();
1100
+ $(curr).hide();
1101
+ after();
1102
+ };
1103
+ };
1104
+
1105
+ // not a cross-fade, fadeout only fades out the top slide
1106
+ $.fn.cycle.transitions.fadeout = function($cont, $slides, opts) {
1107
+ $slides.not(':eq('+opts.currSlide+')').css({ display: 'block', 'opacity': 1 });
1108
+ opts.before.push(function(curr,next,opts,w,h,rev) {
1109
+ $(curr).css('zIndex',opts.slideCount + (rev !== true ? 1 : 0));
1110
+ $(next).css('zIndex',opts.slideCount + (rev !== true ? 0 : 1));
1111
+ });
1112
+ opts.animIn.opacity = 1;
1113
+ opts.animOut.opacity = 0;
1114
+ opts.cssBefore.opacity = 1;
1115
+ opts.cssBefore.display = 'block';
1116
+ opts.cssAfter.zIndex = 0;
1117
+ };
1118
+
1119
+ // scrollUp/Down/Left/Right
1120
+ $.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) {
1121
+ $cont.css('overflow','hidden');
1122
+ opts.before.push($.fn.cycle.commonReset);
1123
+ var h = $cont.height();
1124
+ opts.cssBefore.top = h;
1125
+ opts.cssBefore.left = 0;
1126
+ opts.cssFirst.top = 0;
1127
+ opts.animIn.top = 0;
1128
+ opts.animOut.top = -h;
1129
+ };
1130
+ $.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) {
1131
+ $cont.css('overflow','hidden');
1132
+ opts.before.push($.fn.cycle.commonReset);
1133
+ var h = $cont.height();
1134
+ opts.cssFirst.top = 0;
1135
+ opts.cssBefore.top = -h;
1136
+ opts.cssBefore.left = 0;
1137
+ opts.animIn.top = 0;
1138
+ opts.animOut.top = h;
1139
+ };
1140
+ $.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) {
1141
+ $cont.css('overflow','hidden');
1142
+ opts.before.push($.fn.cycle.commonReset);
1143
+ var w = $cont.width();
1144
+ opts.cssFirst.left = 0;
1145
+ opts.cssBefore.left = w;
1146
+ opts.cssBefore.top = 0;
1147
+ opts.animIn.left = 0;
1148
+ opts.animOut.left = 0-w;
1149
+ };
1150
+ $.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) {
1151
+ $cont.css('overflow','hidden');
1152
+ opts.before.push($.fn.cycle.commonReset);
1153
+ var w = $cont.width();
1154
+ opts.cssFirst.left = 0;
1155
+ opts.cssBefore.left = -w;
1156
+ opts.cssBefore.top = 0;
1157
+ opts.animIn.left = 0;
1158
+ opts.animOut.left = w;
1159
+ };
1160
+ $.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) {
1161
+ $cont.css('overflow','hidden').width();
1162
+ opts.before.push(function(curr, next, opts, fwd) {
1163
+ if (opts.rev)
1164
+ fwd = !fwd;
1165
+ $.fn.cycle.commonReset(curr,next,opts);
1166
+ opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW);
1167
+ opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW;
1168
+ });
1169
+ opts.cssFirst.left = 0;
1170
+ opts.cssBefore.top = 0;
1171
+ opts.animIn.left = 0;
1172
+ opts.animOut.top = 0;
1173
+ };
1174
+ $.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) {
1175
+ $cont.css('overflow','hidden');
1176
+ opts.before.push(function(curr, next, opts, fwd) {
1177
+ if (opts.rev)
1178
+ fwd = !fwd;
1179
+ $.fn.cycle.commonReset(curr,next,opts);
1180
+ opts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1);
1181
+ opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH;
1182
+ });
1183
+ opts.cssFirst.top = 0;
1184
+ opts.cssBefore.left = 0;
1185
+ opts.animIn.top = 0;
1186
+ opts.animOut.left = 0;
1187
+ };
1188
+
1189
+ // slideX/slideY
1190
+ $.fn.cycle.transitions.slideX = function($cont, $slides, opts) {
1191
+ opts.before.push(function(curr, next, opts) {
1192
+ $(opts.elements).not(curr).hide();
1193
+ $.fn.cycle.commonReset(curr,next,opts,false,true);
1194
+ opts.animIn.width = next.cycleW;
1195
+ });
1196
+ opts.cssBefore.left = 0;
1197
+ opts.cssBefore.top = 0;
1198
+ opts.cssBefore.width = 0;
1199
+ opts.animIn.width = 'show';
1200
+ opts.animOut.width = 0;
1201
+ };
1202
+ $.fn.cycle.transitions.slideY = function($cont, $slides, opts) {
1203
+ opts.before.push(function(curr, next, opts) {
1204
+ $(opts.elements).not(curr).hide();
1205
+ $.fn.cycle.commonReset(curr,next,opts,true,false);
1206
+ opts.animIn.height = next.cycleH;
1207
+ });
1208
+ opts.cssBefore.left = 0;
1209
+ opts.cssBefore.top = 0;
1210
+ opts.cssBefore.height = 0;
1211
+ opts.animIn.height = 'show';
1212
+ opts.animOut.height = 0;
1213
+ };
1214
+
1215
+ // shuffle
1216
+ $.fn.cycle.transitions.shuffle = function($cont, $slides, opts) {
1217
+ var i, w = $cont.css('overflow', 'visible').width();
1218
+ $slides.css({left: 0, top: 0});
1219
+ opts.before.push(function(curr,next,opts) {
1220
+ $.fn.cycle.commonReset(curr,next,opts,true,true,true);
1221
+ });
1222
+ // only adjust speed once!
1223
+ if (!opts.speedAdjusted) {
1224
+ opts.speed = opts.speed / 2; // shuffle has 2 transitions
1225
+ opts.speedAdjusted = true;
1226
+ }
1227
+ opts.random = 0;
1228
+ opts.shuffle = opts.shuffle || {left:-w, top:15};
1229
+ opts.els = [];
1230
+ for (i=0; i < $slides.length; i++)
1231
+ opts.els.push($slides[i]);
1232
+
1233
+ for (i=0; i < opts.currSlide; i++)
1234
+ opts.els.push(opts.els.shift());
1235
+
1236
+ // custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!)
1237
+ opts.fxFn = function(curr, next, opts, cb, fwd) {
1238
+ if (opts.rev)
1239
+ fwd = !fwd;
1240
+ var $el = fwd ? $(curr) : $(next);
1241
+ $(next).css(opts.cssBefore);
1242
+ var count = opts.slideCount;
1243
+ $el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() {
1244
+ var hops = $.fn.cycle.hopsFromLast(opts, fwd);
1245
+ for (var k=0; k < hops; k++) {
1246
+ if (fwd)
1247
+ opts.els.push(opts.els.shift());
1248
+ else
1249
+ opts.els.unshift(opts.els.pop());
1250
+ }
1251
+ if (fwd) {
1252
+ for (var i=0, len=opts.els.length; i < len; i++)
1253
+ $(opts.els[i]).css('z-index', len-i+count);
1254
+ }
1255
+ else {
1256
+ var z = $(curr).css('z-index');
1257
+ $el.css('z-index', parseInt(z,10)+1+count);
1258
+ }
1259
+ $el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() {
1260
+ $(fwd ? this : curr).hide();
1261
+ if (cb) cb();
1262
+ });
1263
+ });
1264
+ };
1265
+ $.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
1266
+ };
1267
+
1268
+ // turnUp/Down/Left/Right
1269
+ $.fn.cycle.transitions.turnUp = function($cont, $slides, opts) {
1270
+ opts.before.push(function(curr, next, opts) {
1271
+ $.fn.cycle.commonReset(curr,next,opts,true,false);
1272
+ opts.cssBefore.top = next.cycleH;
1273
+ opts.animIn.height = next.cycleH;
1274
+ opts.animOut.width = next.cycleW;
1275
+ });
1276
+ opts.cssFirst.top = 0;
1277
+ opts.cssBefore.left = 0;
1278
+ opts.cssBefore.height = 0;
1279
+ opts.animIn.top = 0;
1280
+ opts.animOut.height = 0;
1281
+ };
1282
+ $.fn.cycle.transitions.turnDown = function($cont, $slides, opts) {
1283
+ opts.before.push(function(curr, next, opts) {
1284
+ $.fn.cycle.commonReset(curr,next,opts,true,false);
1285
+ opts.animIn.height = next.cycleH;
1286
+ opts.animOut.top = curr.cycleH;
1287
+ });
1288
+ opts.cssFirst.top = 0;
1289
+ opts.cssBefore.left = 0;
1290
+ opts.cssBefore.top = 0;
1291
+ opts.cssBefore.height = 0;
1292
+ opts.animOut.height = 0;
1293
+ };
1294
+ $.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) {
1295
+ opts.before.push(function(curr, next, opts) {
1296
+ $.fn.cycle.commonReset(curr,next,opts,false,true);
1297
+ opts.cssBefore.left = next.cycleW;
1298
+ opts.animIn.width = next.cycleW;
1299
+ });
1300
+ opts.cssBefore.top = 0;
1301
+ opts.cssBefore.width = 0;
1302
+ opts.animIn.left = 0;
1303
+ opts.animOut.width = 0;
1304
+ };
1305
+ $.fn.cycle.transitions.turnRight = function($cont, $slides, opts) {
1306
+ opts.before.push(function(curr, next, opts) {
1307
+ $.fn.cycle.commonReset(curr,next,opts,false,true);
1308
+ opts.animIn.width = next.cycleW;
1309
+ opts.animOut.left = curr.cycleW;
1310
+ });
1311
+ $.extend(opts.cssBefore, { top: 0, left: 0, width: 0 });
1312
+ opts.animIn.left = 0;
1313
+ opts.animOut.width = 0;
1314
+ };
1315
+
1316
+ // zoom
1317
+ $.fn.cycle.transitions.zoom = function($cont, $slides, opts) {
1318
+ opts.before.push(function(curr, next, opts) {
1319
+ $.fn.cycle.commonReset(curr,next,opts,false,false,true);
1320
+ opts.cssBefore.top = next.cycleH/2;
1321
+ opts.cssBefore.left = next.cycleW/2;
1322
+ $.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
1323
+ $.extend(opts.animOut, { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 });
1324
+ });
1325
+ opts.cssFirst.top = 0;
1326
+ opts.cssFirst.left = 0;
1327
+ opts.cssBefore.width = 0;
1328
+ opts.cssBefore.height = 0;
1329
+ };
1330
+
1331
+ // fadeZoom
1332
+ $.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) {
1333
+ opts.before.push(function(curr, next, opts) {
1334
+ $.fn.cycle.commonReset(curr,next,opts,false,false);
1335
+ opts.cssBefore.left = next.cycleW/2;
1336
+ opts.cssBefore.top = next.cycleH/2;
1337
+ $.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
1338
+ });
1339
+ opts.cssBefore.width = 0;
1340
+ opts.cssBefore.height = 0;
1341
+ opts.animOut.opacity = 0;
1342
+ };
1343
+
1344
+ // blindX
1345
+ $.fn.cycle.transitions.blindX = function($cont, $slides, opts) {
1346
+ var w = $cont.css('overflow','hidden').width();
1347
+ opts.before.push(function(curr, next, opts) {
1348
+ $.fn.cycle.commonReset(curr,next,opts);
1349
+ opts.animIn.width = next.cycleW;
1350
+ opts.animOut.left = curr.cycleW;
1351
+ });
1352
+ opts.cssBefore.left = w;
1353
+ opts.cssBefore.top = 0;
1354
+ opts.animIn.left = 0;
1355
+ opts.animOut.left = w;
1356
+ };
1357
+ // blindY
1358
+ $.fn.cycle.transitions.blindY = function($cont, $slides, opts) {
1359
+ var h = $cont.css('overflow','hidden').height();
1360
+ opts.before.push(function(curr, next, opts) {
1361
+ $.fn.cycle.commonReset(curr,next,opts);
1362
+ opts.animIn.height = next.cycleH;
1363
+ opts.animOut.top = curr.cycleH;
1364
+ });
1365
+ opts.cssBefore.top = h;
1366
+ opts.cssBefore.left = 0;
1367
+ opts.animIn.top = 0;
1368
+ opts.animOut.top = h;
1369
+ };
1370
+ // blindZ
1371
+ $.fn.cycle.transitions.blindZ = function($cont, $slides, opts) {
1372
+ var h = $cont.css('overflow','hidden').height();
1373
+ var w = $cont.width();
1374
+ opts.before.push(function(curr, next, opts) {
1375
+ $.fn.cycle.commonReset(curr,next,opts);
1376
+ opts.animIn.height = next.cycleH;
1377
+ opts.animOut.top = curr.cycleH;
1378
+ });
1379
+ opts.cssBefore.top = h;
1380
+ opts.cssBefore.left = w;
1381
+ opts.animIn.top = 0;
1382
+ opts.animIn.left = 0;
1383
+ opts.animOut.top = h;
1384
+ opts.animOut.left = w;
1385
+ };
1386
+
1387
+ // growX - grow horizontally from centered 0 width
1388
+ $.fn.cycle.transitions.growX = function($cont, $slides, opts) {
1389
+ opts.before.push(function(curr, next, opts) {
1390
+ $.fn.cycle.commonReset(curr,next,opts,false,true);
1391
+ opts.cssBefore.left = this.cycleW/2;
1392
+ opts.animIn.left = 0;
1393
+ opts.animIn.width = this.cycleW;
1394
+ opts.animOut.left = 0;
1395
+ });
1396
+ opts.cssBefore.top = 0;
1397
+ opts.cssBefore.width = 0;
1398
+ };
1399
+ // growY - grow vertically from centered 0 height
1400
+ $.fn.cycle.transitions.growY = function($cont, $slides, opts) {
1401
+ opts.before.push(function(curr, next, opts) {
1402
+ $.fn.cycle.commonReset(curr,next,opts,true,false);
1403
+ opts.cssBefore.top = this.cycleH/2;
1404
+ opts.animIn.top = 0;
1405
+ opts.animIn.height = this.cycleH;
1406
+ opts.animOut.top = 0;
1407
+ });
1408
+ opts.cssBefore.height = 0;
1409
+ opts.cssBefore.left = 0;
1410
+ };
1411
+
1412
+ // curtainX - squeeze in both edges horizontally
1413
+ $.fn.cycle.transitions.curtainX = function($cont, $slides, opts) {
1414
+ opts.before.push(function(curr, next, opts) {
1415
+ $.fn.cycle.commonReset(curr,next,opts,false,true,true);
1416
+ opts.cssBefore.left = next.cycleW/2;
1417
+ opts.animIn.left = 0;
1418
+ opts.animIn.width = this.cycleW;
1419
+ opts.animOut.left = curr.cycleW/2;
1420
+ opts.animOut.width = 0;
1421
+ });
1422
+ opts.cssBefore.top = 0;
1423
+ opts.cssBefore.width = 0;
1424
+ };
1425
+ // curtainY - squeeze in both edges vertically
1426
+ $.fn.cycle.transitions.curtainY = function($cont, $slides, opts) {
1427
+ opts.before.push(function(curr, next, opts) {
1428
+ $.fn.cycle.commonReset(curr,next,opts,true,false,true);
1429
+ opts.cssBefore.top = next.cycleH/2;
1430
+ opts.animIn.top = 0;
1431
+ opts.animIn.height = next.cycleH;
1432
+ opts.animOut.top = curr.cycleH/2;
1433
+ opts.animOut.height = 0;
1434
+ });
1435
+ opts.cssBefore.height = 0;
1436
+ opts.cssBefore.left = 0;
1437
+ };
1438
+
1439
+ // cover - curr slide covered by next slide
1440
+ $.fn.cycle.transitions.cover = function($cont, $slides, opts) {
1441
+ var d = opts.direction || 'left';
1442
+ var w = $cont.css('overflow','hidden').width();
1443
+ var h = $cont.height();
1444
+ opts.before.push(function(curr, next, opts) {
1445
+ $.fn.cycle.commonReset(curr,next,opts);
1446
+ if (d == 'right')
1447
+ opts.cssBefore.left = -w;
1448
+ else if (d == 'up')
1449
+ opts.cssBefore.top = h;
1450
+ else if (d == 'down')
1451
+ opts.cssBefore.top = -h;
1452
+ else
1453
+ opts.cssBefore.left = w;
1454
+ });
1455
+ opts.animIn.left = 0;
1456
+ opts.animIn.top = 0;
1457
+ opts.cssBefore.top = 0;
1458
+ opts.cssBefore.left = 0;
1459
+ };
1460
+
1461
+ // uncover - curr slide moves off next slide
1462
+ $.fn.cycle.transitions.uncover = function($cont, $slides, opts) {
1463
+ var d = opts.direction || 'left';
1464
+ var w = $cont.css('overflow','hidden').width();
1465
+ var h = $cont.height();
1466
+ opts.before.push(function(curr, next, opts) {
1467
+ $.fn.cycle.commonReset(curr,next,opts,true,true,true);
1468
+ if (d == 'right')
1469
+ opts.animOut.left = w;
1470
+ else if (d == 'up')
1471
+ opts.animOut.top = -h;
1472
+ else if (d == 'down')
1473
+ opts.animOut.top = h;
1474
+ else
1475
+ opts.animOut.left = -w;
1476
+ });
1477
+ opts.animIn.left = 0;
1478
+ opts.animIn.top = 0;
1479
+ opts.cssBefore.top = 0;
1480
+ opts.cssBefore.left = 0;
1481
+ };
1482
+
1483
+ // toss - move top slide and fade away
1484
+ $.fn.cycle.transitions.toss = function($cont, $slides, opts) {
1485
+ var w = $cont.css('overflow','visible').width();
1486
+ var h = $cont.height();
1487
+ opts.before.push(function(curr, next, opts) {
1488
+ $.fn.cycle.commonReset(curr,next,opts,true,true,true);
1489
+ // provide default toss settings if animOut not provided
1490
+ if (!opts.animOut.left && !opts.animOut.top)
1491
+ $.extend(opts.animOut, { left: w*2, top: -h/2, opacity: 0 });
1492
+ else
1493
+ opts.animOut.opacity = 0;
1494
+ });
1495
+ opts.cssBefore.left = 0;
1496
+ opts.cssBefore.top = 0;
1497
+ opts.animIn.left = 0;
1498
+ };
1499
+
1500
+ // wipe - clip animation
1501
+ $.fn.cycle.transitions.wipe = function($cont, $slides, opts) {
1502
+ var w = $cont.css('overflow','hidden').width();
1503
+ var h = $cont.height();
1504
+ opts.cssBefore = opts.cssBefore || {};
1505
+ var clip;
1506
+ if (opts.clip) {
1507
+ if (/l2r/.test(opts.clip))
1508
+ clip = 'rect(0px 0px '+h+'px 0px)';
1509
+ else if (/r2l/.test(opts.clip))
1510
+ clip = 'rect(0px '+w+'px '+h+'px '+w+'px)';
1511
+ else if (/t2b/.test(opts.clip))
1512
+ clip = 'rect(0px '+w+'px 0px 0px)';
1513
+ else if (/b2t/.test(opts.clip))
1514
+ clip = 'rect('+h+'px '+w+'px '+h+'px 0px)';
1515
+ else if (/zoom/.test(opts.clip)) {
1516
+ var top = parseInt(h/2,10);
1517
+ var left = parseInt(w/2,10);
1518
+ clip = 'rect('+top+'px '+left+'px '+top+'px '+left+'px)';
1519
+ }
1520
+ }
1521
+
1522
+ opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)';
1523
+
1524
+ var d = opts.cssBefore.clip.match(/(\d+)/g);
1525
+ var t = parseInt(d[0],10), r = parseInt(d[1],10), b = parseInt(d[2],10), l = parseInt(d[3],10);
1526
+
1527
+ opts.before.push(function(curr, next, opts) {
1528
+ if (curr == next) return;
1529
+ var $curr = $(curr), $next = $(next);
1530
+ $.fn.cycle.commonReset(curr,next,opts,true,true,false);
1531
+ opts.cssAfter.display = 'block';
1532
+
1533
+ var step = 1, count = parseInt((opts.speedIn / 13),10) - 1;
1534
+ (function f() {
1535
+ var tt = t ? t - parseInt(step * (t/count),10) : 0;
1536
+ var ll = l ? l - parseInt(step * (l/count),10) : 0;
1537
+ var bb = b < h ? b + parseInt(step * ((h-b)/count || 1),10) : h;
1538
+ var rr = r < w ? r + parseInt(step * ((w-r)/count || 1),10) : w;
1539
+ $next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' });
1540
+ (step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none');
1541
+ })();
1542
+ });
1543
+ $.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
1544
+ opts.animIn = { left: 0 };
1545
+ opts.animOut = { left: 0 };
1546
+ };
1547
+
1548
+ })(jQuery);