clarion_responsiveslider - Version 1.0.0

Version Notes

Clarion_Bannersliders 1.0.0 version

Download this release

Release Info

Developer kushagra daharwal
Extension clarion_responsiveslider
Version 1.0.0
Comparing to
See all releases


Version 1.0.0

Files changed (137) hide show
  1. app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive.php +12 -0
  2. app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive/Edit.php +45 -0
  3. app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive/Edit/Form.php +19 -0
  4. app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive/Edit/Tab/Form.php +102 -0
  5. app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive/Edit/Tabs.php +24 -0
  6. app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive/Grid.php +134 -0
  7. app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive/Renderer/Image.php +12 -0
  8. app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Entity/Helper/Image.php +13 -0
  9. app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Grid/Renderer/Image - Copy.php +21 -0
  10. app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Grid/Renderer/Image.php +21 -0
  11. app/code/local/Clarion/Bannerresponsive/Block/Bannerresponsive.php +131 -0
  12. app/code/local/Clarion/Bannerresponsive/Helper/Data.php +26 -0
  13. app/code/local/Clarion/Bannerresponsive/Model/Bannereffectoption.php +19 -0
  14. app/code/local/Clarion/Bannerresponsive/Model/Bannerresponsive.php +14 -0
  15. app/code/local/Clarion/Bannerresponsive/Model/Bannerslidingoptions.php +29 -0
  16. app/code/local/Clarion/Bannerresponsive/Model/Camerabardirection.php +13 -0
  17. app/code/local/Clarion/Bannerresponsive/Model/Camerabarposistion.php +13 -0
  18. app/code/local/Clarion/Bannerresponsive/Model/Camerafx.php +36 -0
  19. app/code/local/Clarion/Bannerresponsive/Model/Cameraloader.php +12 -0
  20. app/code/local/Clarion/Bannerresponsive/Model/Camerapieposition.php +13 -0
  21. app/code/local/Clarion/Bannerresponsive/Model/Mysql4/Bannerresponsive.php +10 -0
  22. app/code/local/Clarion/Bannerresponsive/Model/Mysql4/Bannerresponsive/Collection.php +10 -0
  23. app/code/local/Clarion/Bannerresponsive/Model/Status.php +15 -0
  24. app/code/local/Clarion/Bannerresponsive/Model/Truefalseall.php +16 -0
  25. app/code/local/Clarion/Bannerresponsive/Model/Typebanners.php +14 -0
  26. app/code/local/Clarion/Bannerresponsive/controllers/Adminhtml/BannerresponsiveController - Copy.php +302 -0
  27. app/code/local/Clarion/Bannerresponsive/controllers/Adminhtml/BannerresponsiveController.php +242 -0
  28. app/code/local/Clarion/Bannerresponsive/controllers/IndexController.php +47 -0
  29. app/code/local/Clarion/Bannerresponsive/etc/adminhtml.xml +26 -0
  30. app/code/local/Clarion/Bannerresponsive/etc/config.xml +136 -0
  31. app/code/local/Clarion/Bannerresponsive/etc/system.xml +756 -0
  32. app/code/local/Clarion/Bannerresponsive/sql/bannerresponsive_setup/mysql4-install-0.1.0.php +26 -0
  33. app/design/adminhtml/default/default/layout/bannerresponsive.xml +8 -0
  34. app/design/frontend/default/default/layout/bannerresponsive.xml +22 -0
  35. app/design/frontend/default/default/template/bannerresponsive/bannerresponsive.phtml +366 -0
  36. app/design/frontend/default/default/template/bannerresponsive/bannerresponsivecamera.phtml +75 -0
  37. app/design/frontend/default/default/template/bannerresponsive/bannerresponsivetypmodern.phtml +97 -0
  38. app/etc/modules/Clarion_Bannerresponsive.xml +9 -0
  39. media/adam/images/default/bt-next.png +0 -0
  40. media/adam/images/default/bt-next_1.png +0 -0
  41. media/adam/images/default/bt-prev.png +0 -0
  42. media/adam/images/default/bt-prev_1.png +0 -0
  43. media/adam/images/default/camera_skins.png +0 -0
  44. media/adam/images/default/leaf.jpg +0 -0
  45. media/bannerimages/big_bunny_fake.jpg +0 -0
  46. media/bannerimages/bridge.jpg +0 -0
  47. media/bannerimages/chakasas.jpg +0 -0
  48. media/bannerimages/images_1_.jpg +0 -0
  49. media/bannerimages/medium/big_bunny_fake.jpg +0 -0
  50. media/bannerimages/medium/bridge.jpg +0 -0
  51. media/bannerimages/medium/chakasas.jpg +0 -0
  52. media/bannerimages/medium/road.jpg +0 -0
  53. media/bannerimages/medium/young-girl-holding-long-vertical-banner-6719737.jpg +0 -0
  54. media/bannerimages/model2.png +0 -0
  55. media/bannerimages/model3.png +0 -0
  56. media/bannerimages/road.jpg +0 -0
  57. media/bannerimages/s1_1.jpg +0 -0
  58. media/bannerimages/slider_pic1.jpg +0 -0
  59. media/bannerimages/thumbs/big_bunny_fake.jpg +0 -0
  60. media/bannerimages/thumbs/bridge.jpg +0 -0
  61. media/bannerimages/thumbs/chakasas.jpg +0 -0
  62. media/bannerimages/thumbs/model2.png +0 -0
  63. media/bannerimages/thumbs/model3.png +0 -0
  64. media/bannerimages/thumbs/road.jpg +0 -0
  65. media/bannerimages/thumbs/s1_1.jpg +0 -0
  66. media/bannerimages/thumbs/slider_pic1.jpg +0 -0
  67. media/bannerimages/thumbs/young-girl-holding-long-vertical-banner-6719737.jpg +0 -0
  68. media/bannerimages/young-girl-holding-long-vertical-banner-6719737.jpg +0 -0
  69. package.xml +20 -0
  70. skin/frontend/default/default/css/responsivebanner/camera.css +1067 -0
  71. skin/frontend/default/default/css/responsivebanner/images/01(1).png +0 -0
  72. skin/frontend/default/default/css/responsivebanner/images/01.jpg +0 -0
  73. skin/frontend/default/default/css/responsivebanner/images/01.png +0 -0
  74. skin/frontend/default/default/css/responsivebanner/images/02(1).png +0 -0
  75. skin/frontend/default/default/css/responsivebanner/images/02(2).jpg +0 -0
  76. skin/frontend/default/default/css/responsivebanner/images/02.jpg +0 -0
  77. skin/frontend/default/default/css/responsivebanner/images/02.png +0 -0
  78. skin/frontend/default/default/css/responsivebanner/images/03(1).png +0 -0
  79. skin/frontend/default/default/css/responsivebanner/images/03.jpg +0 -0
  80. skin/frontend/default/default/css/responsivebanner/images/03.png +0 -0
  81. skin/frontend/default/default/css/responsivebanner/images/04.png +0 -0
  82. skin/frontend/default/default/css/responsivebanner/images/150115-1356942247.png +0 -0
  83. skin/frontend/default/default/css/responsivebanner/images/1_1.jpg +0 -0
  84. skin/frontend/default/default/css/responsivebanner/images/1a.png +0 -0
  85. skin/frontend/default/default/css/responsivebanner/images/1b.jpg +0 -0
  86. skin/frontend/default/default/css/responsivebanner/images/1b.png +0 -0
  87. skin/frontend/default/default/css/responsivebanner/images/1c.png +0 -0
  88. skin/frontend/default/default/css/responsivebanner/images/216840-0129_1(1).jpg +0 -0
  89. skin/frontend/default/default/css/responsivebanner/images/216840-0129_1.jpg +0 -0
  90. skin/frontend/default/default/css/responsivebanner/images/271669-0054_1(1).jpg +0 -0
  91. skin/frontend/default/default/css/responsivebanner/images/271669-0054_1.jpg +0 -0
  92. skin/frontend/default/default/css/responsivebanner/images/2a.png +0 -0
  93. skin/frontend/default/default/css/responsivebanner/images/2b_2.jpg +0 -0
  94. skin/frontend/default/default/css/responsivebanner/images/3a.jpg +0 -0
  95. skin/frontend/default/default/css/responsivebanner/images/3b(1).jpg +0 -0
  96. skin/frontend/default/default/css/responsivebanner/images/3b.jpg +0 -0
  97. skin/frontend/default/default/css/responsivebanner/images/3bb.jpg +0 -0
  98. skin/frontend/default/default/css/responsivebanner/images/3c.jpg +0 -0
  99. skin/frontend/default/default/css/responsivebanner/images/428338-0029_1.jpg +0 -0
  100. skin/frontend/default/default/css/responsivebanner/images/428357-0001_1_1_1.jpg +0 -0
  101. skin/frontend/default/default/css/responsivebanner/images/428374-0023_1_1.jpg +0 -0
  102. skin/frontend/default/default/css/responsivebanner/images/428381-0001_1_1.jpg +0 -0
  103. skin/frontend/default/default/css/responsivebanner/images/428446-0067_1_1_1_1_1.jpg +0 -0
  104. skin/frontend/default/default/css/responsivebanner/images/428507-0066_1_1.jpg +0 -0
  105. skin/frontend/default/default/css/responsivebanner/images/4_3.jpg +0 -0
  106. skin/frontend/default/default/css/responsivebanner/images/4c.jpg +0 -0
  107. skin/frontend/default/default/css/responsivebanner/images/546029-0013_1_2.jpg +0 -0
  108. skin/frontend/default/default/css/responsivebanner/images/6.jpg +0 -0
  109. skin/frontend/default/default/css/responsivebanner/images/677188-0067_1(1).jpg +0 -0
  110. skin/frontend/default/default/css/responsivebanner/images/677188-0067_1.jpg +0 -0
  111. skin/frontend/default/default/css/responsivebanner/images/734198-0056_1_2.jpg +0 -0
  112. skin/frontend/default/default/css/responsivebanner/images/7e7013467a0aaa9b190144598ee32819.js +12039 -0
  113. skin/frontend/default/default/css/responsivebanner/images/857055-0115_1_2.jpg +0 -0
  114. skin/frontend/default/default/css/responsivebanner/images/870044-0032_1_2.jpg +0 -0
  115. skin/frontend/default/default/css/responsivebanner/images/917397-0134_1_1_1_1.jpg +0 -0
  116. skin/frontend/default/default/css/responsivebanner/images/928172-0484_1.jpg +0 -0
  117. skin/frontend/default/default/css/responsivebanner/images/996093-0100_1(1).jpg +0 -0
  118. skin/frontend/default/default/css/responsivebanner/images/996093-0100_1.jpg +0 -0
  119. skin/frontend/default/default/css/responsivebanner/images/a7629b8024b8ff12739117f186c33375.css +9403 -0
  120. skin/frontend/default/default/css/responsivebanner/images/active_bg.png +0 -0
  121. skin/frontend/default/default/css/responsivebanner/images/apple.png +0 -0
  122. skin/frontend/default/default/css/responsivebanner/images/banner1.jpg +0 -0
  123. skin/frontend/default/default/css/responsivebanner/images/banner2.jpg +0 -0
  124. skin/frontend/default/default/css/responsivebanner/images/banner3.jpg +0 -0
  125. skin/frontend/default/default/css/responsivebanner/images/bg-sequence.jpg +0 -0
  126. skin/frontend/default/default/css/responsivebanner/images/bluelogo.png +0 -0
  127. skin/frontend/default/default/css/responsivebanner/images/brandisimi.png +0 -0
  128. skin/frontend/default/default/css/responsivebanner/images/bt-next.png +0 -0
  129. skin/frontend/default/default/css/responsivebanner/images/bt-prev.png +0 -0
  130. skin/frontend/default/default/css/responsivebanner/images/bx_loader.gif +0 -0
  131. skin/frontend/default/default/css/responsivebanner/images/camera_skins.png +0 -0
  132. skin/frontend/default/default/css/responsivebanner/images/company.png +0 -0
  133. skin/frontend/default/default/css/responsivebanner/images/controls.png +0 -0
  134. skin/frontend/default/default/css/responsivebanner/images/css +6 -0
  135. skin/frontend/default/default/css/responsivebanner/images/divider.png +0 -0
  136. skin/frontend/default/default/css/responsivebanner/images/f6e62d1da07bb38772c4bacfcef59296.css +41 -0
  137. skin/frontend/default/default/css/responsivebanner/images/ga.js +65 -0
app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Clarion_Bannerresponsive_Block_Adminhtml_Bannerresponsive extends Mage_Adminhtml_Block_Widget_Grid_Container
3
+ {
4
+ public function __construct()
5
+ {
6
+ $this->_controller = 'adminhtml_bannerresponsive';
7
+ $this->_blockGroup = 'bannerresponsive';
8
+ $this->_headerText = Mage::helper('bannerresponsive')->__('Item Manager');
9
+ $this->_addButtonLabel = Mage::helper('bannerresponsive')->__('Add Item');
10
+ parent::__construct();
11
+ }
12
+ }
app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive/Edit.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Block_Adminhtml_Bannerresponsive_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
4
+ {
5
+ public function __construct()
6
+ {
7
+ parent::__construct();
8
+
9
+ $this->_objectId = 'id';
10
+ $this->_blockGroup = 'bannerresponsive';
11
+ $this->_controller = 'adminhtml_bannerresponsive';
12
+
13
+ $this->_updateButton('save', 'label', Mage::helper('bannerresponsive')->__('Save Item'));
14
+ $this->_updateButton('delete', 'label', Mage::helper('bannerresponsive')->__('Delete Item'));
15
+
16
+ $this->_addButton('saveandcontinue', array(
17
+ 'label' => Mage::helper('adminhtml')->__('Save And Continue Edit'),
18
+ 'onclick' => 'saveAndContinueEdit()',
19
+ 'class' => 'save',
20
+ ), -100);
21
+
22
+ $this->_formScripts[] = "
23
+ function toggleEditor() {
24
+ if (tinyMCE.getInstanceById('bannerresponsive_content') == null) {
25
+ tinyMCE.execCommand('mceAddControl', false, 'bannerresponsive_content');
26
+ } else {
27
+ tinyMCE.execCommand('mceRemoveControl', false, 'bannerresponsive_content');
28
+ }
29
+ }
30
+
31
+ function saveAndContinueEdit(){
32
+ editForm.submit($('edit_form').action+'back/edit/');
33
+ }
34
+ ";
35
+ }
36
+
37
+ public function getHeaderText()
38
+ {
39
+ if( Mage::registry('bannerresponsive_data') && Mage::registry('bannerresponsive_data')->getId() ) {
40
+ return Mage::helper('bannerresponsive')->__("Edit Item '%s'", $this->htmlEscape(Mage::registry('bannerresponsive_data')->getTitle()));
41
+ } else {
42
+ return Mage::helper('bannerresponsive')->__('Add Item');
43
+ }
44
+ }
45
+ }
app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive/Edit/Form.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Block_Adminhtml_Bannerresponsive_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
4
+ {
5
+ protected function _prepareForm()
6
+ {
7
+ $form = new Varien_Data_Form(array(
8
+ 'id' => 'edit_form',
9
+ 'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
10
+ 'method' => 'post',
11
+ 'enctype' => 'multipart/form-data'
12
+ )
13
+ );
14
+
15
+ $form->setUseContainer(true);
16
+ $this->setForm($form);
17
+ return parent::_prepareForm();
18
+ }
19
+ }
app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive/Edit/Tab/Form.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Block_Adminhtml_Bannerresponsive_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form
4
+ {
5
+ protected function _prepareForm()
6
+ {
7
+ $form = new Varien_Data_Form();
8
+ $this->setForm($form);
9
+ $fieldset = $form->addFieldset('bannerresponsive_form', array('legend'=>Mage::helper('bannerresponsive')->__('Item information')));
10
+
11
+
12
+
13
+
14
+ $fieldset->addField('title', 'text', array(
15
+ 'label' => Mage::helper('bannerresponsive')->__('Title'),
16
+ 'class' => 'required-entry',
17
+ 'required' => true,
18
+ 'name' => 'title',
19
+ ));
20
+
21
+
22
+ $fieldset->addField('orderid', 'text', array(
23
+ 'label' => Mage::helper('bannerresponsive')->__('Order'),
24
+ 'class' => 'required-entry',
25
+ 'required' => false,
26
+ 'name' => 'orderid',
27
+ ));
28
+
29
+
30
+ $fieldset->addField('filename', 'image', array(
31
+ 'label' => Mage::helper('bannerresponsive')->__('File'),
32
+ 'required' => false,
33
+ 'name' => 'filename',
34
+ ));
35
+ $fieldset->addType('image', Mage::getConfig()->getBlockClassName('bannerresponsive/adminhtml_entity_helper_image'));
36
+ // $fieldset->addField('thumbname', 'image', array(
37
+ // 'label' => Mage::helper('bannerresponsive')->__('ThumbNail Images'),
38
+ // 'required' => false,
39
+ // 'name' => 'thumbname',
40
+ //));
41
+
42
+
43
+
44
+ $fieldset->addField('status', 'select', array(
45
+ 'label' => Mage::helper('bannerresponsive')->__('Status'),
46
+ 'name' => 'status',
47
+ 'values' => array(
48
+ array(
49
+ 'value' => 1,
50
+ 'label' => Mage::helper('bannerresponsive')->__('Enabled'),
51
+ ),
52
+
53
+ array(
54
+ 'value' => 2,
55
+ 'label' => Mage::helper('bannerresponsive')->__('Disabled'),
56
+ ),
57
+ ),
58
+ ));
59
+
60
+
61
+ $fieldset->addField('nubersliderbt', 'select', array(
62
+ 'label' => Mage::helper('bannerresponsive')->__('Bannertype'),
63
+ 'name' => 'nubersliderbt',
64
+ 'values' => array(
65
+ array(
66
+ 'value' => 'bxslider',
67
+ 'label' => Mage::helper('bannerresponsive')->__('Bxslider'),
68
+ ),
69
+
70
+ array(
71
+ 'value' => 'modernslide',
72
+ 'label' => Mage::helper('bannerresponsive')->__('Modernslide'),
73
+ ),
74
+
75
+ array(
76
+ 'value' => 'cameraslider',
77
+ 'label' => Mage::helper('bannerresponsive')->__('Camera Banner'),
78
+ ),
79
+
80
+ ),
81
+
82
+ ));
83
+
84
+ $fieldset->addField('content', 'editor', array(
85
+ 'name' => 'content',
86
+ 'label' => Mage::helper('bannerresponsive')->__('Content'),
87
+ 'title' => Mage::helper('bannerresponsive')->__('Content'),
88
+ 'style' => 'width:700px; height:500px;',
89
+ 'wysiwyg' => false,
90
+ 'required' => true,
91
+ ));
92
+
93
+ if ( Mage::getSingleton('adminhtml/session')->getBannerresponsiveData() )
94
+ {
95
+ $form->setValues(Mage::getSingleton('adminhtml/session')->getBannerresponsiveData());
96
+ Mage::getSingleton('adminhtml/session')->setBannerresponsiveData(null);
97
+ } elseif ( Mage::registry('bannerresponsive_data') ) {
98
+ $form->setValues(Mage::registry('bannerresponsive_data')->getData());
99
+ }
100
+ return parent::_prepareForm();
101
+ }
102
+ }
app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive/Edit/Tabs.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Block_Adminhtml_Bannerresponsive_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
4
+ {
5
+
6
+ public function __construct()
7
+ {
8
+ parent::__construct();
9
+ $this->setId('bannerresponsive_tabs');
10
+ $this->setDestElementId('edit_form');
11
+ $this->setTitle(Mage::helper('bannerresponsive')->__('Item Information'));
12
+ }
13
+
14
+ protected function _beforeToHtml()
15
+ {
16
+ $this->addTab('form_section', array(
17
+ 'label' => Mage::helper('bannerresponsive')->__('Item Information'),
18
+ 'title' => Mage::helper('bannerresponsive')->__('Item Information'),
19
+ 'content' => $this->getLayout()->createBlock('bannerresponsive/adminhtml_bannerresponsive_edit_tab_form')->toHtml(),
20
+ ));
21
+
22
+ return parent::_beforeToHtml();
23
+ }
24
+ }
app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive/Grid.php ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Block_Adminhtml_Bannerresponsive_Grid extends Mage_Adminhtml_Block_Widget_Grid
4
+ {
5
+ public function __construct()
6
+ {
7
+ parent::__construct();
8
+ $this->setId('bannerresponsiveGrid');
9
+ $this->setDefaultSort('bannerresponsive_id');
10
+ $this->setDefaultDir('ASC');
11
+ $this->setSaveParametersInSession(true);
12
+ }
13
+
14
+ protected function _prepareCollection()
15
+ {
16
+ $collection = Mage::getModel('bannerresponsive/bannerresponsive')->getCollection();
17
+ $this->setCollection($collection);
18
+ return parent::_prepareCollection();
19
+ }
20
+
21
+ protected function _prepareColumns()
22
+ {
23
+ $this->addColumn('bannerresponsive_id', array(
24
+ 'header' => Mage::helper('bannerresponsive')->__('ID'),
25
+ 'align' =>'right',
26
+ 'width' => '50px',
27
+ 'index' => 'bannerresponsive_id',
28
+ ));
29
+
30
+ $this->addColumn('title', array(
31
+ 'header' => Mage::helper('bannerresponsive')->__('Title'),
32
+ 'align' =>'left',
33
+ 'index' => 'title',
34
+ ));
35
+ $this->addColumn('filename', array(
36
+ 'header' => Mage::helper('bannerresponsive')->__('Image'),
37
+ 'align' =>'left',
38
+ 'index' => 'filename',
39
+ 'renderer' => ''
40
+ ));
41
+
42
+ $this->addColumn('filename', array(
43
+ 'header' => Mage::helper('bannerresponsive')->__('Image'),
44
+ 'align' => 'left',
45
+ 'width' => '100px',
46
+ 'index' => 'filename',
47
+ 'type' => 'image',
48
+ 'escape' => true,
49
+ 'sortable' => false,
50
+ 'filter' => false,
51
+ 'renderer' => new Clarion_Bannerresponsive_Block_Adminhtml_Grid_Renderer_Image,
52
+ ));
53
+
54
+ /*
55
+ $this->addColumn('content', array(
56
+ 'header' => Mage::helper('bannerresponsive')->__('Item Content'),
57
+ 'width' => '150px',
58
+ 'index' => 'content',
59
+ ));
60
+ */
61
+
62
+ $this->addColumn('status', array(
63
+ 'header' => Mage::helper('bannerresponsive')->__('Status'),
64
+ 'align' => 'left',
65
+ 'width' => '80px',
66
+ 'index' => 'status',
67
+ 'type' => 'options',
68
+ 'options' => array(
69
+ 1 => 'Enabled',
70
+ 2 => 'Disabled',
71
+ ),
72
+ ));
73
+
74
+ $this->addColumn('action',
75
+ array(
76
+ 'header' => Mage::helper('bannerresponsive')->__('Action'),
77
+ 'width' => '100',
78
+ 'type' => 'action',
79
+ 'getter' => 'getId',
80
+ 'actions' => array(
81
+ array(
82
+ 'caption' => Mage::helper('bannerresponsive')->__('Edit'),
83
+ 'url' => array('base'=> '*/*/edit'),
84
+ 'field' => 'id'
85
+ )
86
+ ),
87
+ 'filter' => false,
88
+ 'sortable' => false,
89
+ 'index' => 'stores',
90
+ 'is_system' => true,
91
+ ));
92
+
93
+ $this->addExportType('*/*/exportCsv', Mage::helper('bannerresponsive')->__('CSV'));
94
+ $this->addExportType('*/*/exportXml', Mage::helper('bannerresponsive')->__('XML'));
95
+
96
+ return parent::_prepareColumns();
97
+ }
98
+
99
+ protected function _prepareMassaction()
100
+ {
101
+ $this->setMassactionIdField('bannerresponsive_id');
102
+ $this->getMassactionBlock()->setFormFieldName('bannerresponsive');
103
+
104
+ $this->getMassactionBlock()->addItem('delete', array(
105
+ 'label' => Mage::helper('bannerresponsive')->__('Delete'),
106
+ 'url' => $this->getUrl('*/*/massDelete'),
107
+ 'confirm' => Mage::helper('bannerresponsive')->__('Are you sure?')
108
+ ));
109
+
110
+ $statuses = Mage::getSingleton('bannerresponsive/status')->getOptionArray();
111
+
112
+ array_unshift($statuses, array('label'=>'', 'value'=>''));
113
+ $this->getMassactionBlock()->addItem('status', array(
114
+ 'label'=> Mage::helper('bannerresponsive')->__('Change status'),
115
+ 'url' => $this->getUrl('*/*/massStatus', array('_current'=>true)),
116
+ 'additional' => array(
117
+ 'visibility' => array(
118
+ 'name' => 'status',
119
+ 'type' => 'select',
120
+ 'class' => 'required-entry',
121
+ 'label' => Mage::helper('bannerresponsive')->__('Status'),
122
+ 'values' => $statuses
123
+ )
124
+ )
125
+ ));
126
+ return $this;
127
+ }
128
+
129
+ public function getRowUrl($row)
130
+ {
131
+ return $this->getUrl('*/*/edit', array('id' => $row->getId()));
132
+ }
133
+
134
+ }
app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Bannerresponsive/Renderer/Image.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Block_Adminhtml_Bannerresponsive_Renderer_Image extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
4
+ {
5
+
6
+ public function render(Varion_Object $row)
7
+ {
8
+
9
+ $html .= '<img',
10
+ $html .='id='''.$this->getColumn()->getId().''' ';
11
+ }
12
+ }
app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Entity/Helper/Image.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Clarion_Bannerresponsive_Block_Adminhtml_Entity_Helper_Image extends Varien_Data_Form_Element_Image
3
+ {
4
+ public function getUrl(){
5
+ $url = false;
6
+ if ($this->getValue()) {
7
+ echo $url = Mage::getBaseUrl('media') . 'bannerimages/'.$this->getValue();
8
+ die;
9
+
10
+ }
11
+ return $url;
12
+ }
13
+ }
app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Grid/Renderer/Image - Copy.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Block_Adminhtml_Grid_Renderer_Image extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
4
+ {
5
+ public function render(Varien_Object $row)
6
+ {
7
+ if($row->getData($this->getColumn()->getIndex())==""){
8
+ return "";
9
+ }
10
+ else{
11
+ $html = '<img ';
12
+ $html .= 'id="' . $this->getColumn()->getId() . '" ';
13
+ $html .= 'width="45" ';
14
+ $html .= 'height="35" ';
15
+ $html .= 'src="' . Mage::getBaseUrl("media") .'bannerimages/'. $row->getData($this->getColumn()->getIndex()) . '"';
16
+ $html .= 'class="grid-image ' . $this->getColumn()->getInlineCss() . '"/>';
17
+
18
+ return $html;
19
+ }
20
+ }
21
+ }
app/code/local/Clarion/Bannerresponsive/Block/Adminhtml/Grid/Renderer/Image.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Block_Adminhtml_Grid_Renderer_Image extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
4
+ {
5
+ public function render(Varien_Object $row)
6
+ {
7
+ if($row->getData($this->getColumn()->getIndex())==""){
8
+ return "";
9
+ }
10
+ else{
11
+ $html = '<img ';
12
+ $html .= 'id="' . $this->getColumn()->getId() . '" ';
13
+ $html .= 'width="45" ';
14
+ $html .= 'height="35" ';
15
+ $html .= 'src="' . Mage::getBaseUrl("media") .'bannerimages/'. $row->getData($this->getColumn()->getIndex()) . '"';
16
+ $html .= 'class="grid-image ' . $this->getColumn()->getInlineCss() . '"/>';
17
+
18
+ return $html;
19
+ }
20
+ }
21
+ }
app/code/local/Clarion/Bannerresponsive/Block/Bannerresponsive.php ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Clarion_Bannerresponsive_Block_Bannerresponsive extends Mage_Core_Block_Template
3
+ {
4
+ /*
5
+ set varrible for modern style banner
6
+ */
7
+ protected $nextButton;
8
+ protected $prevButton;
9
+ protected $pagination;
10
+ protected $animateStartingFrameIn;
11
+ protected $autoPlay;
12
+ protected $autoPlayDelay;
13
+ protected $preloader;
14
+
15
+ /*
16
+ set varrible for modern style banner
17
+ * bx silders settings
18
+ */
19
+ protected $slidewidth; //slidr width
20
+ protected $speed;
21
+ protected $mode;
22
+ protected $randomStart;
23
+ protected $responsive;
24
+ protected $adaptiveHeight;
25
+
26
+ /*
27
+ *
28
+ * set varribe for cameara banner type slider's
29
+ */
30
+ protected $fx; //slidr width
31
+ protected $height;
32
+ protected $loader;
33
+ protected $piePosition;
34
+ protected $paginationcameara;
35
+ protected $time;
36
+ protected $transPeriod;
37
+ protected $barDirection;
38
+ protected $barPosition;
39
+ protected $playPause;
40
+ protected $pauseOnClick;
41
+ protected $thaumbNails;
42
+
43
+
44
+ public function __construct()
45
+ {
46
+
47
+
48
+
49
+ $this->nextButton = Mage::getStoreConfig('bannerresponsive/modersslidersetting/nextButton');
50
+ $this->prevButton = Mage::getStoreConfig('bannerresponsive/modersslidersetting/prevButton');
51
+ $this->pagination = Mage::getStoreConfig('bannerresponsive/modersslidersetting/pagination');
52
+ $this->animateStartingFrameIn = Mage::getStoreConfig('bannerresponsive/modersslidersetting/animateStartingFrameIn');
53
+ $this->autoPlay = Mage::getStoreConfig('bannerresponsive/modersslidersetting/autoPlay');
54
+ $this->autoPlayDelay = Mage::getStoreConfig('bannerresponsive/modersslidersetting/autoPlayDelay');
55
+ $this->preloader = Mage::getStoreConfig('bannerresponsive/modersslidersetting/preloader');
56
+
57
+
58
+ //general
59
+
60
+ $this->slidewidth = Mage::getStoreConfig('bannerresponsive/commonbxslider/silderwidth');
61
+
62
+ $this->speed = Mage::getStoreConfig('bannerresponsive/responsivegeneral/speed');
63
+ $this->mode = Mage::getStoreConfig('bannerresponsive/responsivegeneral/mode');
64
+ $this->randomStart = Mage::getStoreConfig('bannerresponsive/responsivegeneral/randomStart');
65
+ $this->responsive =Mage::getStoreConfig('bannerresponsive/responsivegeneral/responsive');
66
+ $this->adaptiveHeight = Mage::getStoreConfig('bannerresponsive/responsivegeneral/adaptiveheight');
67
+ $this->minslides =Mage::getStoreConfig('bannerresponsive/responsivegeneral/minslides');
68
+ $this->maxSlides = Mage::getStoreConfig('bannerresponsive/responsivegeneral/maxSlides');
69
+ $this->moveSlides = Mage::getStoreConfig('bannerresponsive/responsivegeneral/moveSlides');
70
+ $this->slideWidth = Mage::getStoreConfig('bannerresponsive/responsivegeneral/slideWidth');
71
+ //pager
72
+ $this->pager = Mage::getStoreConfig('bannerresponsive/responsivegeneral/pager');
73
+ $this->pagerType = Mage::getStoreConfig('bannerresponsive/responsivegeneral/pagerType');
74
+ $this->pagerShortSeparator = Mage::getStoreConfig('bannerresponsive/responsivegeneral/pagerShortSeparator');
75
+ //controll
76
+ $this->pager = Mage::getStoreConfig('bannerresponsive/responsivegeneral/pager');
77
+ $this->pretext = Mage::getStoreConfig('bannerresponsive/responsivegeneral/prevText');
78
+ $this->nexttext = Mage::getStoreConfig('bannerresponsive/responsivegeneral/nextText');
79
+ $this->controls = Mage::getStoreConfig('bannerresponsive/responsivegeneral/controls');
80
+ $this->caption = Mage::getStoreConfig('bannerresponsive/responsivegeneral/caption');
81
+
82
+ //auto
83
+
84
+
85
+ $this->auto = Mage::getStoreConfig('bannerresponsive/responsivegeneral/auto');
86
+ $this->pause = Mage::getStoreConfig('bannerresponsive/responsivegeneral/pause');
87
+ $this->autoStart = Mage::getStoreConfig('bannerresponsive/responsivegeneral/autoStart');
88
+ $this->autoDirection = Mage::getStoreConfig('bannerresponsive/responsivegeneral/autoDirection');
89
+ $this->hideControlOnEnd = Mage::getStoreConfig('bannerresponsive/responsivegeneral/hidecontrolend');
90
+
91
+
92
+ //camera type attributes
93
+ $this->fx = Mage::getStoreConfig('bannerresponsive/cameraslider/fx');
94
+ $this->height = Mage::getStoreConfig('bannerresponsive/cameraslider/hights');
95
+ $this->loader = Mage::getStoreConfig('bannerresponsive/cameraslider/loader');
96
+ $this->piePosition = Mage::getStoreConfig('bannerresponsive/cameraslider/piePosition');
97
+ $this->paginationcameara = Mage::getStoreConfig('bannerresponsive/cameraslider/pagination');
98
+ $this->time = Mage::getStoreConfig('bannerresponsive/cameraslider/time');
99
+ $this->transPeriod = Mage::getStoreConfig('bannerresponsive/cameraslider/transPeriod');
100
+ $this->barDirection = Mage::getStoreConfig('bannerresponsive/cameraslider/bardirection');
101
+ $this->barPosition = Mage::getStoreConfig('bannerresponsive/cameraslider/barPosition');
102
+ $this->playPause = Mage::getStoreConfig('bannerresponsive/cameraslider/playPause');
103
+ $this->pauseOnClick = Mage::getStoreConfig('bannerresponsive/cameraslider/pauseOnClick');
104
+ $this->thaumbNails = Mage::getStoreConfig('bannerresponsive/cameraslider/thumbnails');
105
+ }
106
+
107
+ public function _prepareLayout()
108
+ {
109
+ return parent::_prepareLayout();
110
+
111
+ }
112
+
113
+
114
+ public function getBannerresponsive()
115
+ {
116
+ if (!$this->hasData('bannerresponsive')) {
117
+ $this->setData('bannerresponsive', Mage::registry('bannerresponsive'));
118
+ }
119
+ return $this->getData('bannerresponsive');
120
+
121
+ }
122
+
123
+ public function getBannercollection($getbanner)
124
+ {
125
+
126
+ $collection = Mage::getModel('bannerresponsive/bannerresponsive')->getCollection()
127
+ ->addFieldToFilter("nubersliderbt",$getbanner);
128
+ return $collection;
129
+ }
130
+
131
+ }
app/code/local/Clarion/Bannerresponsive/Helper/Data.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Helper_Data extends Mage_Core_Helper_Abstract
4
+ {
5
+ public $val;
6
+ public function Isbannerenable()
7
+ {
8
+
9
+ return Mage::getStoreConfig('bannerresponsive/responsive/blockpostion');
10
+
11
+ }
12
+
13
+ public function Bannertype()
14
+ {
15
+ return Mage::getStoreConfig('bannerresponsive/bannertypecollection/bannertype');
16
+
17
+ }
18
+
19
+
20
+ public function getBannerstyle()
21
+ {
22
+ return Mage::getStoreConfig('bannerresponsive/commonbxslider/bannereffectoptions');
23
+
24
+ }
25
+
26
+ }
app/code/local/Clarion/Bannerresponsive/Model/Bannereffectoption.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Bannereffectoption
4
+ {
5
+ public function toOptionArray(){
6
+ return array(
7
+ array('value' => 'Image slideshow with captions', 'label'=>Mage::helper('bannerresponsive')->__('Image slideshow with captions')),
8
+ array('value' => 'Auto show with start / stop controls', 'label'=>Mage::helper('bannerresponsive')->__('Auto show with start / stop controls')),
9
+ array('value' => 'Manual show without infinite loop', 'label'=>Mage::helper('bannerresponsive')->__('Manual show without infinite loop')),
10
+ array('value' => 'Slideshow using adaptiveHeight', 'label'=>Mage::helper('bannerresponsive')->__('Slideshow using adaptiveHeight')),
11
+ array('value' => 'Vertical slideshow', 'label'=>Mage::helper('bannerresponsive')->__('Vertical slideshow')),
12
+ array('value' => 'Custom next / prev control selectors', 'label'=>Mage::helper('bannerresponsive')->__('Custom next / prev control selectors
13
+
14
+ ')),
15
+ array('value' => 'Thumbnail pager', 'label'=>Mage::helper('bannerresponsive')->__('Thumbnail pager')),
16
+
17
+ );
18
+ }
19
+ }
app/code/local/Clarion/Bannerresponsive/Model/Bannerresponsive.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Bannerresponsive extends Mage_Core_Model_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('bannerresponsive/bannerresponsive');
9
+ }
10
+
11
+
12
+
13
+
14
+ }
app/code/local/Clarion/Bannerresponsive/Model/Bannerslidingoptions.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Bannerslidingoptions
4
+ {
5
+ protected $_options;
6
+ const IMAGETHUMB_THUMBNAIL = 'bxslider';
7
+ const IMAGETHUMB_PAGINATION = 'modernslider';
8
+ const IMAGETHUMB_ELACSTC = 'elastic';
9
+
10
+ public function toOptionArray(){
11
+ if (!$this->_options) {
12
+ $this->_options[] = array(
13
+ 'value'=>self::IMAGETHUMB_THUMBNAIL,
14
+ 'label'=>Mage::helper('bannerresponsive')->__('Bxslider')
15
+ );
16
+ $this->_options[] = array(
17
+ 'value'=>self::IMAGETHUMB_PAGINATION,
18
+ 'label'=>Mage::helper('bannerresponsive')->__('Modernslider')
19
+ );
20
+ $this->_options[] = array(
21
+ 'value'=>self::IMAGETHUMB_ELACSTC,
22
+ 'label'=>Mage::helper('bannerresponsive')->__('Elastic')
23
+ );
24
+
25
+
26
+ }
27
+ return $this->_options;
28
+ }
29
+ }
app/code/local/Clarion/Bannerresponsive/Model/Camerabardirection.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Camerabardirection
4
+ {
5
+ public function toOptionArray(){
6
+ return array(
7
+ array('value' => 'leftToRight', 'label'=>Mage::helper('bannerresponsive')->__('leftToRight')),
8
+ array('value' => 'left', 'label'=>Mage::helper('bannerresponsive')->__('left')),
9
+ array('value' => 'top', 'label'=>Mage::helper('bannerresponsive')->__('top')),
10
+ array('value' => 'cameraslider', 'label'=>Mage::helper('bannerresponsive')->__('bottomToTop'))
11
+ );
12
+ }
13
+ }
app/code/local/Clarion/Bannerresponsive/Model/Camerabarposistion.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Camerabarposistion
4
+ {
5
+ public function toOptionArray(){
6
+ return array(
7
+ array('value' => 'bottom', 'label'=>Mage::helper('bannerresponsive')->__('bottom')),
8
+ array('value' => 'left', 'label'=>Mage::helper('bannerresponsive')->__('left')),
9
+ array('value' => 'top', 'label'=>Mage::helper('bannerresponsive')->__('top')),
10
+ array('value' => 'right', 'label'=>Mage::helper('bannerresponsive')->__('right'))
11
+ );
12
+ }
13
+ }
app/code/local/Clarion/Bannerresponsive/Model/Camerafx.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Camerafx
4
+ {
5
+
6
+ public function toOptionArray(){
7
+ return array(
8
+ array('value' => 'random', 'label'=>Mage::helper('bannerresponsive')->__('random')),
9
+ array('value' => 'simpleFade', 'label'=>Mage::helper('bannerresponsive')->__('simpleFade')),
10
+ array('value' => 'curtainTopLeft', 'label'=>Mage::helper('bannerresponsive')->__('curtainTopLeft')),
11
+ array('value' => 'curtainTopRight', 'label'=>Mage::helper('bannerresponsive')->__('curtainTopRight')),
12
+ array('value' => 'curtainBottomLeft', 'label'=>Mage::helper('bannerresponsive')->__('curtainBottomLeft')),
13
+ array('value' => 'curtainBottomRight', 'label'=>Mage::helper('bannerresponsive')->__('curtainBottomRight')),
14
+ array('value' => 'curtainSliceLeft', 'label'=>Mage::helper('bannerresponsive')->__('curtainSliceLeft')),
15
+ array('value' => 'curtainSliceRight', 'label'=>Mage::helper('bannerresponsive')->__('curtainSliceRight')),
16
+ array('value' => 'blindCurtainTopLeft', 'label'=>Mage::helper('bannerresponsive')->__('blindCurtainTopLeft')),
17
+ array('value' => 'blindCurtainTopRight', 'label'=>Mage::helper('bannerresponsive')->__('blindCurtainTopRight')),
18
+ array('value' => 'blindCurtainBottomLeft', 'label'=>Mage::helper('bannerresponsive')->__('blindCurtainBottomLeft')),
19
+ array('value' => 'blindCurtainBottomRight', 'label'=>Mage::helper('bannerresponsive')->__('blindCurtainBottomRight')),
20
+ array('value' => 'blindCurtainSliceBottom', 'label'=>Mage::helper('bannerresponsive')->__('blindCurtainSliceBottom')),
21
+ array('value' => 'blindCurtainSliceTop', 'label'=>Mage::helper('bannerresponsive')->__('blindCurtainSliceTop')),
22
+ array('value' => 'stampede', 'label'=>Mage::helper('bannerresponsive')->__('stampede')),
23
+ array('value' => 'mosaic', 'label'=>Mage::helper('bannerresponsive')->__('mosaic')),
24
+ array('value' => 'mosaicReverse', 'label'=>Mage::helper('bannerresponsive')->__('mosaicReverse')),
25
+ array('value' => 'mosaicRandom', 'label'=>Mage::helper('bannerresponsive')->__('mosaicRandom')),
26
+ array('value' => 'mosaicSpiral', 'label'=>Mage::helper('bannerresponsive')->__('mosaicSpiral')),
27
+ array('value' => 'mosaicSpiralReverse', 'label'=>Mage::helper('bannerresponsive')->__('mosaicSpiralReverse')),
28
+ array('value' => 'bottomRightTopLeft', 'label'=>Mage::helper('bannerresponsive')->__('bottomRightTopLeft')),
29
+ array('value' => 'bottomLeftTopRight', 'label'=>Mage::helper('bannerresponsive')->__('bottomLeftTopRight'))
30
+ );
31
+ }
32
+ }
33
+
34
+
35
+
36
+
app/code/local/Clarion/Bannerresponsive/Model/Cameraloader.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Cameraloader
4
+ {
5
+ public function toOptionArray(){
6
+ return array(
7
+ array('value' => 'pie', 'label'=>Mage::helper('bannerresponsive')->__('pie')),
8
+ array('value' => 'bar', 'label'=>Mage::helper('bannerresponsive')->__('bar')),
9
+ array('value' => 'none', 'label'=>Mage::helper('bannerresponsive')->__('none'))
10
+ );
11
+ }
12
+ }
app/code/local/Clarion/Bannerresponsive/Model/Camerapieposition.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Camerapieposition
4
+ {
5
+ public function toOptionArray(){
6
+ return array(
7
+ array('value' => 'rightTop', 'label'=>Mage::helper('bannerresponsive')->__('rightTop')),
8
+ array('value' => 'leftTop', 'label'=>Mage::helper('bannerresponsive')->__('leftTop')),
9
+ array('value' => 'leftBottom', 'label'=>Mage::helper('bannerresponsive')->__('leftBottom')),
10
+ array('value' => 'rightBottom', 'label'=>Mage::helper('bannerresponsive')->__('rightBottom'))
11
+ );
12
+ }
13
+ }
app/code/local/Clarion/Bannerresponsive/Model/Mysql4/Bannerresponsive.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Mysql4_Bannerresponsive extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ // Note that the bannerresponsive_id refers to the key field in your database table.
8
+ $this->_init('bannerresponsive/bannerresponsive', 'bannerresponsive_id');
9
+ }
10
+ }
app/code/local/Clarion/Bannerresponsive/Model/Mysql4/Bannerresponsive/Collection.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Mysql4_Bannerresponsive_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('bannerresponsive/bannerresponsive');
9
+ }
10
+ }
app/code/local/Clarion/Bannerresponsive/Model/Status.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Status extends Varien_Object
4
+ {
5
+ const STATUS_ENABLED = 1;
6
+ const STATUS_DISABLED = 2;
7
+
8
+ static public function getOptionArray()
9
+ {
10
+ return array(
11
+ self::STATUS_ENABLED => Mage::helper('bannerresponsive')->__('Enabled'),
12
+ self::STATUS_DISABLED => Mage::helper('bannerresponsive')->__('Disabled')
13
+ );
14
+ }
15
+ }
app/code/local/Clarion/Bannerresponsive/Model/Truefalseall.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Truefalseall
4
+ {
5
+
6
+ public function toOptionArray(){
7
+ return array(
8
+ array('value' => 'true', 'label'=>Mage::helper('bannerresponsive')->__('true')),
9
+ array('value' => 'false', 'label'=>Mage::helper('bannerresponsive')->__('false')),
10
+ );
11
+ }
12
+ }
13
+
14
+
15
+
16
+
app/code/local/Clarion/Bannerresponsive/Model/Typebanners.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Model_Typebanners
4
+ {
5
+
6
+
7
+ public function toOptionArray(){
8
+ return array(
9
+ array('value' => 'bxslider', 'label'=>Mage::helper('bannerresponsive')->__('Bxslider')),
10
+ array('value' => 'modernslide', 'label'=>Mage::helper('bannerresponsive')->__('Modern Slide')),
11
+ array('value' => 'cameraslider', 'label'=>Mage::helper('bannerresponsive')->__('Camera Slider'))
12
+ );
13
+ }
14
+ }
app/code/local/Clarion/Bannerresponsive/controllers/Adminhtml/BannerresponsiveController - Copy.php ADDED
@@ -0,0 +1,302 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Adminhtml_BannerresponsiveController extends Mage_Adminhtml_Controller_action
4
+ {
5
+
6
+ protected function _initAction() {
7
+ $this->loadLayout()
8
+ ->_setActiveMenu('bannerresponsive/items')
9
+ ->_addBreadcrumb(Mage::helper('adminhtml')->__('Items Manager'), Mage::helper('adminhtml')->__('Item Manager'));
10
+
11
+ return $this;
12
+ }
13
+
14
+ public function indexAction() {
15
+ $this->_initAction()
16
+ ->renderLayout();
17
+ }
18
+
19
+ public function editAction() {
20
+ $id = $this->getRequest()->getParam('id');
21
+ $model = Mage::getModel('bannerresponsive/bannerresponsive')->load($id);
22
+
23
+ if ($model->getId() || $id == 0) {
24
+ $data = Mage::getSingleton('adminhtml/session')->getFormData(true);
25
+ if (!empty($data)) {
26
+ $model->setData($data);
27
+ }
28
+
29
+ Mage::register('bannerresponsive_data', $model);
30
+
31
+ $this->loadLayout();
32
+ $this->_setActiveMenu('bannerresponsive/items');
33
+
34
+ $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item Manager'), Mage::helper('adminhtml')->__('Item Manager'));
35
+ $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item News'), Mage::helper('adminhtml')->__('Item News'));
36
+
37
+ $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
38
+
39
+ $this->_addContent($this->getLayout()->createBlock('bannerresponsive/adminhtml_bannerresponsive_edit'))
40
+ ->_addLeft($this->getLayout()->createBlock('bannerresponsive/adminhtml_bannerresponsive_edit_tabs'));
41
+
42
+ $this->renderLayout();
43
+ } else {
44
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('bannerresponsive')->__('Item does not exist'));
45
+ $this->_redirect('*/*/');
46
+ }
47
+ }
48
+
49
+ public function newAction() {
50
+ $this->_forward('edit');
51
+ }
52
+
53
+ public function saveAction() {
54
+
55
+ if ($data = $this->getRequest()->getPost()) {
56
+
57
+ if($data['filename']['delete']==1){
58
+ $data['filename']='';
59
+ }
60
+ elseif(is_array($data['filename'])){
61
+ $data['filename']=$data['filename']['value'];
62
+ }
63
+
64
+
65
+ $file = new Varien_Io_File();
66
+ //$baseDir = Mage::getBaseDir();
67
+
68
+ $mediaDir = Mage::getBaseDir('media');
69
+ $imageDir = $mediaDir.DS.'bannerimages'.DS;
70
+
71
+ $thumbimageyDir = $mediaDir.DS.'bannerimages'.DS.'thumbs';
72
+
73
+ if(!is_dir($imageDir)){
74
+ $imageDirResult = $file->mkdir($imageDir, 0777);
75
+ }
76
+ if(!is_dir($thumbimageyDir)){
77
+ $thumbimageDirResult = $file->mkdir($thumbimageyDir, 0777);
78
+ }
79
+
80
+ //$thumbimageDirResult = $file->mkdir($thumbimageyDir);
81
+
82
+ if(isset($_FILES['filename']['name']) && $_FILES['filename']['name'] != '') {
83
+ try {
84
+ /* Starting upload */
85
+ $uploader = new Varien_File_Uploader('filename');
86
+
87
+ // Any extention would work
88
+ $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png'));
89
+ $uploader->setAllowRenameFiles(false);
90
+
91
+ // Set the file upload mode
92
+ // false -> get the file directly in the specified folder
93
+ // true -> get the file in the product like folders
94
+ // (file.jpg will go in something like /media/f/i/file.jpg)
95
+ $uploader->setFilesDispersion(false);
96
+
97
+ // We set media as the upload dir
98
+ //$path = Mage::getBaseDir('media') . DS ;
99
+
100
+ $path = $imageDir;
101
+
102
+ $result = $uploader->save($path, $_FILES['filename']['name'] );
103
+
104
+ ###############################################################################
105
+ // actual path of image
106
+ $imageUrl = Mage::getBaseDir('media').DS."bannerimages".DS.$_FILES['filename']['name'];
107
+
108
+ // path of the resized image to be saved
109
+ // here, the resized image is saved in media/resized folder
110
+ $imageResized = Mage::getBaseDir('media').DS."bannerimages".DS."thumbs".DS.$_FILES['filename']['name'];
111
+
112
+ // resize image only if the image file exists and the resized image file doesn't exist
113
+ // the image is resized proportionally with the width/height 135px
114
+ if (!file_exists($imageResized)&&file_exists($imageUrl)) :
115
+ $imageObj = new Varien_Image($imageUrl);
116
+ $imageObj->constrainOnly(TRUE);
117
+ $imageObj->keepAspectRatio(FALSE);
118
+ $imageObj->keepFrame(FALSE);
119
+ $imageObj->quality(100);
120
+ $imageObj->resize(100,100);
121
+ $imageObj->save($imageResized);
122
+ endif;
123
+ #################################################################################
124
+
125
+
126
+
127
+
128
+ $data['filename'] = $result['file'];
129
+ } catch (Exception $e) {
130
+ $data['filename'] = $_FILES['filename']['name'];
131
+ }
132
+ }
133
+
134
+
135
+ if(isset($_FILES['thumbname']['name']) && $_FILES['thumbname']['name'] != '') {
136
+ try {
137
+ /* Starting upload */
138
+ $uploader = new Varien_File_Uploader('thumbname');
139
+
140
+ // Any extention would work
141
+ $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png'));
142
+ $uploader->setAllowRenameFiles(false);
143
+
144
+ // Set the file upload mode
145
+ // false -> get the file directly in the specified folder
146
+ // true -> get the file in the product like folders
147
+ // (file.jpg will go in something like /media/f/i/file.jpg)
148
+ $uploader->setFilesDispersion(false);
149
+
150
+ // We set media as the upload dir
151
+ $path = Mage::getBaseDir('media').DS.'bannerimages'.DS;
152
+ $uploader->save($path, $_FILES['thumbname']['name'] );
153
+
154
+ } catch (Exception $e) {
155
+
156
+ }
157
+
158
+ //this way the name is saved in DB
159
+ $data['thumbname'] = $_FILES['thumbname']['name'];
160
+ }
161
+
162
+
163
+ $model = Mage::getModel('bannerresponsive/bannerresponsive');
164
+
165
+
166
+ $model->setData($data)
167
+ ->setId($this->getRequest()->getParam('id'));
168
+
169
+ try {
170
+ if ($model->getCreatedTime == NULL || $model->getUpdateTime() == NULL) {
171
+ $model->setCreatedTime(now())
172
+ ->setUpdateTime(now());
173
+ } else {
174
+ $model->setUpdateTime(now());
175
+ }
176
+
177
+ //$model->setStores(implode(',',$data['stores']));
178
+ /*if (isset($data['category_ids'])){
179
+ $model->setCategories(implode(',',array_unique(explode(',',$data['category_ids']))));
180
+ }*/
181
+
182
+
183
+
184
+ $model->save();
185
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('bannerresponsive')->__('Item was successfully saved'));
186
+ Mage::getSingleton('adminhtml/session')->setFormData(false);
187
+
188
+ if ($this->getRequest()->getParam('back')) {
189
+ $this->_redirect('*/*/edit', array('id' => $model->getId()));
190
+ return;
191
+ }
192
+ $this->_redirect('*/*/');
193
+ return;
194
+ } catch (Exception $e) {
195
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
196
+ Mage::getSingleton('adminhtml/session')->setFormData($data);
197
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
198
+ return;
199
+ }
200
+ }
201
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('bannerresponsive')->__('Unable to find item to save'));
202
+ $this->_redirect('*/*/');
203
+ }
204
+
205
+ public function deleteAction() {
206
+ if( $this->getRequest()->getParam('id') > 0 ) {
207
+ try {
208
+ $model = Mage::getModel('bannerresponsive/bannerresponsive');
209
+
210
+ $model->setId($this->getRequest()->getParam('id'))
211
+ ->delete();
212
+
213
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Item was successfully deleted'));
214
+ $this->_redirect('*/*/');
215
+ } catch (Exception $e) {
216
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
217
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
218
+ }
219
+ }
220
+ $this->_redirect('*/*/');
221
+ }
222
+
223
+ public function massDeleteAction() {
224
+ $bannerresponsiveIds = $this->getRequest()->getParam('bannerresponsive');
225
+ if(!is_array($bannerresponsiveIds)) {
226
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Please select item(s)'));
227
+ } else {
228
+ try {
229
+ foreach ($bannerresponsiveIds as $bannerresponsiveId) {
230
+ $bannerresponsive = Mage::getModel('bannerresponsive/bannerresponsive')->load($bannerresponsiveId);
231
+ $bannerresponsive->delete();
232
+ }
233
+ Mage::getSingleton('adminhtml/session')->addSuccess(
234
+ Mage::helper('adminhtml')->__(
235
+ 'Total of %d record(s) were successfully deleted', count($bannerresponsiveIds)
236
+ )
237
+ );
238
+ } catch (Exception $e) {
239
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
240
+ }
241
+ }
242
+ $this->_redirect('*/*/index');
243
+ }
244
+
245
+ public function massStatusAction()
246
+ {
247
+ $bannerresponsiveIds = $this->getRequest()->getParam('bannerresponsive');
248
+ if(!is_array($bannerresponsiveIds)) {
249
+ Mage::getSingleton('adminhtml/session')->addError($this->__('Please select item(s)'));
250
+ } else {
251
+ try {
252
+ foreach ($bannerresponsiveIds as $bannerresponsiveId) {
253
+ $bannerresponsive = Mage::getSingleton('bannerresponsive/bannerresponsive')
254
+ ->load($bannerresponsiveId)
255
+ ->setStatus($this->getRequest()->getParam('status'))
256
+ ->setIsMassupdate(true)
257
+ ->save();
258
+ }
259
+ $this->_getSession()->addSuccess(
260
+ $this->__('Total of %d record(s) were successfully updated', count($bannerresponsiveIds))
261
+ );
262
+ } catch (Exception $e) {
263
+ $this->_getSession()->addError($e->getMessage());
264
+ }
265
+ }
266
+ $this->_redirect('*/*/index');
267
+ }
268
+
269
+ public function exportCsvAction()
270
+ {
271
+ $fileName = 'bannerresponsive.csv';
272
+ $content = $this->getLayout()->createBlock('bannerresponsive/adminhtml_bannerresponsive_grid')
273
+ ->getCsv();
274
+
275
+ $this->_sendUploadResponse($fileName, $content);
276
+ }
277
+
278
+ public function exportXmlAction()
279
+ {
280
+ $fileName = 'bannerresponsive.xml';
281
+ $content = $this->getLayout()->createBlock('bannerresponsive/adminhtml_bannerresponsive_grid')
282
+ ->getXml();
283
+
284
+ $this->_sendUploadResponse($fileName, $content);
285
+ }
286
+
287
+ protected function _sendUploadResponse($fileName, $content, $contentType='application/octet-stream')
288
+ {
289
+ $response = $this->getResponse();
290
+ $response->setHeader('HTTP/1.1 200 OK','');
291
+ $response->setHeader('Pragma', 'public', true);
292
+ $response->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true);
293
+ $response->setHeader('Content-Disposition', 'attachment; filename='.$fileName);
294
+ $response->setHeader('Last-Modified', date('r'));
295
+ $response->setHeader('Accept-Ranges', 'bytes');
296
+ $response->setHeader('Content-Length', strlen($content));
297
+ $response->setHeader('Content-type', $contentType);
298
+ $response->setBody($content);
299
+ $response->sendResponse();
300
+ die;
301
+ }
302
+ }
app/code/local/Clarion/Bannerresponsive/controllers/Adminhtml/BannerresponsiveController.php ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Clarion_Bannerresponsive_Adminhtml_BannerresponsiveController extends Mage_Adminhtml_Controller_action
4
+ {
5
+
6
+ protected function _initAction() {
7
+ $this->loadLayout()
8
+ ->_setActiveMenu('bannerresponsive/items')
9
+ ->_addBreadcrumb(Mage::helper('adminhtml')->__('Items Manager'), Mage::helper('adminhtml')->__('Item Manager'));
10
+
11
+ return $this;
12
+ }
13
+
14
+ public function indexAction() {
15
+ $this->_initAction()
16
+ ->renderLayout();
17
+ }
18
+
19
+ public function editAction() {
20
+ $id = $this->getRequest()->getParam('id');
21
+ $model = Mage::getModel('bannerresponsive/bannerresponsive')->load($id);
22
+
23
+ if ($model->getId() || $id == 0) {
24
+ $data = Mage::getSingleton('adminhtml/session')->getFormData(true);
25
+ if (!empty($data)) {
26
+ $model->setData($data);
27
+ }
28
+
29
+ Mage::register('bannerresponsive_data', $model);
30
+
31
+ $this->loadLayout();
32
+ $this->_setActiveMenu('bannerresponsive/items');
33
+
34
+ $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item Manager'), Mage::helper('adminhtml')->__('Item Manager'));
35
+ $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item News'), Mage::helper('adminhtml')->__('Item News'));
36
+
37
+ $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
38
+
39
+ $this->_addContent($this->getLayout()->createBlock('bannerresponsive/adminhtml_bannerresponsive_edit'))
40
+ ->_addLeft($this->getLayout()->createBlock('bannerresponsive/adminhtml_bannerresponsive_edit_tabs'));
41
+
42
+ $this->renderLayout();
43
+ } else {
44
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('bannerresponsive')->__('Item does not exist'));
45
+ $this->_redirect('*/*/');
46
+ }
47
+ }
48
+
49
+ public function newAction() {
50
+ $this->_forward('edit');
51
+ }
52
+
53
+
54
+ public function saveAction() {
55
+ if ($data = $this->getRequest()->getPost()) {
56
+
57
+
58
+ if(isset($_FILES['filename']['name']) && $_FILES['filename']['name'] != '') {
59
+ //this way the name is saved in DB
60
+ $data['filename'] = $_FILES['filename']['name'];
61
+
62
+ //Save Image Tag in DB for GRID View
63
+ $imgName = $_FILES['filename']['name'];
64
+ $imgPath = Mage::getBaseUrl('media')."bannerimages/thumbs/".$imgName;
65
+ $data['filethumbgrid'] = '<img src="'.$imgPath.'" border="0" width="75" height="75" />';
66
+ }
67
+
68
+ $model = Mage::getModel('bannerresponsive/bannerresponsive');
69
+ $model->setData($data)
70
+ ->setId($this->getRequest()->getParam('id'));
71
+
72
+ try {
73
+ if ($model->getCreatedTime == NULL || $model->getUpdateTime() == NULL) {
74
+ $model->setCreatedTime(now())
75
+ ->setUpdateTime(now());
76
+ } else {
77
+ $model->setUpdateTime(now());
78
+ }
79
+
80
+ $model->save();
81
+
82
+
83
+ if(isset($_FILES['filename']['name']) && $_FILES['filename']['name'] != '') {
84
+ try {
85
+
86
+ $path = Mage::getBaseDir('media')."/bannerimages".DS ;
87
+ /* Starting upload */
88
+ $uploader = new Varien_File_Uploader('filename');
89
+ // Any extention would work
90
+ $uploader->setAllowedExtensions(array('jpg','JPG','jpeg','gif','GIF','png','PNG'));
91
+ $uploader->setAllowRenameFiles(false);
92
+ $uploader->setFilesDispersion(false);
93
+ // We set media as the upload dir
94
+ $uploader->save($path, $_FILES['filename']['name'] );
95
+
96
+
97
+ //Create Thumbnail and upload
98
+ $imgName = $_FILES['filename']['name'];
99
+ $imgPathFull = $path.$imgName;
100
+ $resizeFolder = "thumbs";
101
+ $imageResizedPath = $path.$resizeFolder.DS.$imgName;
102
+ $imageObj = new Varien_Image($imgPathFull);
103
+ $imageObj->constrainOnly(TRUE);
104
+ $imageObj->keepAspectRatio(TRUE);
105
+ $imageObj->resize(150,150);
106
+ $imageObj->save($imageResizedPath);
107
+
108
+ //Create View Size and upload
109
+ $imgName = $_FILES['filename']['name'];
110
+ $imgPathFull = $path.$imgName;
111
+ $resizeFolder = "medium";
112
+ $imageResizedPath = $path.$resizeFolder.DS.$imgName;
113
+ $imageObj = new Varien_Image($imgPathFull);
114
+ $imageObj->constrainOnly(TRUE);
115
+ $imageObj->keepAspectRatio(TRUE);
116
+ $imageObj->resize(400,400);
117
+ $imageObj->save($imageResizedPath);
118
+
119
+
120
+ } catch (Exception $e) {}
121
+ }
122
+
123
+ //Mage::helper('bannerresponsive')->generateXML();
124
+
125
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('bannerresponsive')->__('Banner was successfully saved'));
126
+ Mage::getSingleton('adminhtml/session')->setFormData(false);
127
+
128
+ if ($this->getRequest()->getParam('back')) {
129
+ $this->_redirect('*/*/edit', array('id' => $model->getId()));
130
+ return;
131
+ }
132
+ $this->_redirect('*/*/');
133
+ return;
134
+ } catch (Exception $e) {
135
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
136
+ Mage::getSingleton('adminhtml/session')->setFormData($data);
137
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
138
+ return;
139
+ }
140
+ }
141
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('bannerresponsive')->__('Unable to find Banner to save'));
142
+ $this->_redirect('*/*/');
143
+ }
144
+
145
+ public function deleteAction() {
146
+ if( $this->getRequest()->getParam('id') > 0 ) {
147
+ try {
148
+ $model = Mage::getModel('bannerresponsive/bannerresponsive');
149
+
150
+ $model->setId($this->getRequest()->getParam('id'))
151
+ ->delete();
152
+
153
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Item was successfully deleted'));
154
+ $this->_redirect('*/*/');
155
+ } catch (Exception $e) {
156
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
157
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
158
+ }
159
+ }
160
+ $this->_redirect('*/*/');
161
+ }
162
+
163
+ public function massDeleteAction() {
164
+ $bannerresponsiveIds = $this->getRequest()->getParam('bannerresponsive');
165
+ if(!is_array($bannerresponsiveIds)) {
166
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Please select item(s)'));
167
+ } else {
168
+ try {
169
+ foreach ($bannerresponsiveIds as $bannerresponsiveId) {
170
+ $bannerresponsive = Mage::getModel('bannerresponsive/bannerresponsive')->load($bannerresponsiveId);
171
+ $bannerresponsive->delete();
172
+ }
173
+ Mage::getSingleton('adminhtml/session')->addSuccess(
174
+ Mage::helper('adminhtml')->__(
175
+ 'Total of %d record(s) were successfully deleted', count($bannerresponsiveIds)
176
+ )
177
+ );
178
+ } catch (Exception $e) {
179
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
180
+ }
181
+ }
182
+ $this->_redirect('*/*/index');
183
+ }
184
+
185
+ public function massStatusAction()
186
+ {
187
+ $bannerresponsiveIds = $this->getRequest()->getParam('bannerresponsive');
188
+ if(!is_array($bannerresponsiveIds)) {
189
+ Mage::getSingleton('adminhtml/session')->addError($this->__('Please select item(s)'));
190
+ } else {
191
+ try {
192
+ foreach ($bannerresponsiveIds as $bannerresponsiveId) {
193
+ $bannerresponsive = Mage::getSingleton('bannerresponsive/bannerresponsive')
194
+ ->load($bannerresponsiveId)
195
+ ->setStatus($this->getRequest()->getParam('status'))
196
+ ->setIsMassupdate(true)
197
+ ->save();
198
+ }
199
+ $this->_getSession()->addSuccess(
200
+ $this->__('Total of %d record(s) were successfully updated', count($bannerresponsiveIds))
201
+ );
202
+ } catch (Exception $e) {
203
+ $this->_getSession()->addError($e->getMessage());
204
+ }
205
+ }
206
+ $this->_redirect('*/*/index');
207
+ }
208
+
209
+ public function exportCsvAction()
210
+ {
211
+ $fileName = 'bannerresponsive.csv';
212
+ $content = $this->getLayout()->createBlock('bannerresponsive/adminhtml_bannerresponsive_grid')
213
+ ->getCsv();
214
+
215
+ $this->_sendUploadResponse($fileName, $content);
216
+ }
217
+
218
+ public function exportXmlAction()
219
+ {
220
+ $fileName = 'bannerresponsive.xml';
221
+ $content = $this->getLayout()->createBlock('bannerresponsive/adminhtml_bannerresponsive_grid')
222
+ ->getXml();
223
+
224
+ $this->_sendUploadResponse($fileName, $content);
225
+ }
226
+
227
+ protected function _sendUploadResponse($fileName, $content, $contentType='application/octet-stream')
228
+ {
229
+ $response = $this->getResponse();
230
+ $response->setHeader('HTTP/1.1 200 OK','');
231
+ $response->setHeader('Pragma', 'public', true);
232
+ $response->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true);
233
+ $response->setHeader('Content-Disposition', 'attachment; filename='.$fileName);
234
+ $response->setHeader('Last-Modified', date('r'));
235
+ $response->setHeader('Accept-Ranges', 'bytes');
236
+ $response->setHeader('Content-Length', strlen($content));
237
+ $response->setHeader('Content-type', $contentType);
238
+ $response->setBody($content);
239
+ $response->sendResponse();
240
+ die;
241
+ }
242
+ }
app/code/local/Clarion/Bannerresponsive/controllers/IndexController.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Clarion_Bannerresponsive_IndexController extends Mage_Core_Controller_Front_Action
3
+ {
4
+ public function indexAction()
5
+ {
6
+
7
+ /*
8
+ * Load an object by id
9
+ * Request looking like:
10
+ * http://site.com/bannerresponsive?id=15
11
+ * or
12
+ * http://site.com/bannerresponsive/id/15
13
+ */
14
+ /*
15
+ $bannerresponsive_id = $this->getRequest()->getParam('id');
16
+
17
+ if($bannerresponsive_id != null && $bannerresponsive_id != '') {
18
+ $bannerresponsive = Mage::getModel('bannerresponsive/bannerresponsive')->load($bannerresponsive_id)->getData();
19
+ } else {
20
+ $bannerresponsive = null;
21
+ }
22
+ */
23
+
24
+ /*
25
+ * If no param we load a the last created item
26
+ */
27
+ /*
28
+ if($bannerresponsive == null) {
29
+ $resource = Mage::getSingleton('core/resource');
30
+ $read= $resource->getConnection('core_read');
31
+ $bannerresponsiveTable = $resource->getTableName('bannerresponsive');
32
+
33
+ $select = $read->select()
34
+ ->from($bannerresponsiveTable,array('bannerresponsive_id','title','content','status'))
35
+ ->where('status',1)
36
+ ->order('created_time DESC') ;
37
+
38
+ $bannerresponsive = $read->fetchRow($select);
39
+ }
40
+ Mage::register('bannerresponsive', $bannerresponsive);
41
+ */
42
+
43
+
44
+ $this->loadLayout();
45
+ $this->renderLayout();
46
+ }
47
+ }
app/code/local/Clarion/Bannerresponsive/etc/adminhtml.xml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <acl>
4
+ <resources>
5
+ <all>
6
+ <title>Allow Everything</title>
7
+ </all>
8
+ <admin>
9
+ <children>
10
+ <system>
11
+ <children>
12
+ <config>
13
+ <children>
14
+ <bannerresponsive>
15
+ <title>bannerresponsive</title>
16
+ </bannerresponsive>
17
+ </children>
18
+ </config>
19
+ </children>
20
+ </system>
21
+ </children>
22
+ </admin>
23
+ </resources>
24
+ </acl>
25
+
26
+ </config>
app/code/local/Clarion/Bannerresponsive/etc/config.xml ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Clarion_Bannerresponsive>
5
+ <version>0.1.0</version>
6
+ </Clarion_Bannerresponsive>
7
+ </modules>
8
+ <frontend>
9
+ <routers>
10
+ <bannerresponsive>
11
+ <use>standard</use>
12
+ <args>
13
+ <module>Clarion_Bannerresponsive</module>
14
+ <frontName>bannerresponsive</frontName>
15
+ </args>
16
+ </bannerresponsive>
17
+ </routers>
18
+ <layout>
19
+ <updates>
20
+ <bannerresponsive>
21
+ <file>bannerresponsive.xml</file>
22
+ </bannerresponsive>
23
+ </updates>
24
+ </layout>
25
+ </frontend>
26
+ <admin>
27
+ <routers>
28
+ <bannerresponsive>
29
+ <use>admin</use>
30
+ <args>
31
+ <module>Clarion_Bannerresponsive</module>
32
+ <frontName>bannerresponsive</frontName>
33
+ </args>
34
+ </bannerresponsive>
35
+ </routers>
36
+ </admin>
37
+ <adminhtml>
38
+ <menu>
39
+ <bannerresponsive module="bannerresponsive">
40
+ <title>Bannerresponsive</title>
41
+ <sort_order>71</sort_order>
42
+ <children>
43
+ <items module="bannerresponsive">
44
+ <title>Manage Items</title>
45
+ <sort_order>0</sort_order>
46
+ <action>bannerresponsive/adminhtml_bannerresponsive</action>
47
+ </items>
48
+ <bannersetting module="bannerresponsive">
49
+ <title>Banner Setting</title>
50
+ <sort_order>10</sort_order>
51
+ <action>adminhtml/system_config/edit/section/bannerresponsive</action>
52
+ </bannersetting>
53
+
54
+ </children>
55
+ </bannerresponsive>
56
+ </menu>
57
+
58
+ <acl>
59
+ <resources>
60
+ <all>
61
+ <title>Allow Everything</title>
62
+ </all>
63
+ <admin>
64
+ <children>
65
+ <system>
66
+ <children>
67
+ <config>
68
+ <children>
69
+ <bannerresponsive>
70
+ <title>Bannerresponsive</title>
71
+ </bannerresponsive>
72
+ </children>
73
+ </config>
74
+ </children>
75
+ </system>
76
+ </children>
77
+ </admin>
78
+ </resources>
79
+ </acl>
80
+
81
+
82
+ <layout>
83
+ <updates>
84
+ <bannerresponsive>
85
+ <file>bannerresponsive.xml</file>
86
+ </bannerresponsive>
87
+ </updates>
88
+ </layout>
89
+ </adminhtml>
90
+ <global>
91
+ <models>
92
+ <bannerresponsive>
93
+ <class>Clarion_Bannerresponsive_Model</class>
94
+ <resourceModel>bannerresponsive_mysql4</resourceModel>
95
+ </bannerresponsive>
96
+ <bannerresponsive_mysql4>
97
+ <class>Clarion_Bannerresponsive_Model_Mysql4</class>
98
+ <entities>
99
+ <bannerresponsive>
100
+ <table>bannerresponsive</table>
101
+ </bannerresponsive>
102
+ </entities>
103
+ </bannerresponsive_mysql4>
104
+ </models>
105
+ <resources>
106
+ <bannerresponsive_setup>
107
+ <setup>
108
+ <module>Clarion_Bannerresponsive</module>
109
+ </setup>
110
+ <connection>
111
+ <use>core_setup</use>
112
+ </connection>
113
+ </bannerresponsive_setup>
114
+ <bannerresponsive_write>
115
+ <connection>
116
+ <use>core_write</use>
117
+ </connection>
118
+ </bannerresponsive_write>
119
+ <bannerresponsive_read>
120
+ <connection>
121
+ <use>core_read</use>
122
+ </connection>
123
+ </bannerresponsive_read>
124
+ </resources>
125
+ <blocks>
126
+ <bannerresponsive>
127
+ <class>Clarion_Bannerresponsive_Block</class>
128
+ </bannerresponsive>
129
+ </blocks>
130
+ <helpers>
131
+ <bannerresponsive>
132
+ <class>Clarion_Bannerresponsive_Helper</class>
133
+ </bannerresponsive>
134
+ </helpers>
135
+ </global>
136
+ </config>
app/code/local/Clarion/Bannerresponsive/etc/system.xml ADDED
@@ -0,0 +1,756 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <clarion translate="label" module="bannerresponsive">
5
+ <label>Responsive Banner Configuration</label>
6
+ <sort_order>100</sort_order>
7
+ </clarion>
8
+ </tabs>
9
+ <sections>
10
+ <bannerresponsive translate="label" module="bannerresponsive">
11
+ <label>Banner Configuration</label>
12
+ <tab>clarion</tab>
13
+ <frontend_type>text</frontend_type>
14
+ <sort_order>777</sort_order>
15
+ <show_in_default>1</show_in_default>
16
+ <show_in_website>1</show_in_website>
17
+ <show_in_store>1</show_in_store>
18
+ <groups>
19
+ <responsive translate="label" module="bannerresponsive">
20
+ <label>Enable or Disable</label>
21
+ <frontend_type>text</frontend_type>
22
+ <sort_order>40</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
+ <blockpostion translate="label">
28
+ <label>Enable:</label>
29
+ <comment></comment>
30
+ <frontend_type>select</frontend_type>
31
+ <sort_order>110</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
+ <can_be_empty>1</can_be_empty>
36
+ <source_model>adminhtml/system_config_source_yesno</source_model>
37
+ <!--<source_model>allcurrency/type</source_model>-->
38
+ </blockpostion>
39
+ </fields>
40
+
41
+ </responsive>
42
+
43
+
44
+
45
+ <modersslidersetting translate="label" module="bannerresponsive">
46
+ <label>Modern slider banner</label>
47
+ <frontend_type>text</frontend_type>
48
+ <sort_order>43</sort_order>
49
+ <show_in_default>1</show_in_default>
50
+ <show_in_website>1</show_in_website>
51
+ <show_in_store>1</show_in_store>
52
+ <fields>
53
+ <nextButton translate="label"> <label>nextButton</label>
54
+ <comment>set true/false</comment>
55
+ <frontend_type>text</frontend_type>
56
+ <sort_order>110</sort_order>
57
+ <show_in_default>1</show_in_default>
58
+ <show_in_website>1</show_in_website>
59
+ <show_in_store>1</show_in_store>
60
+ <can_be_empty>1</can_be_empty>
61
+ <!--<source_model>allcurrency/type</source_model>-->
62
+ </nextButton>
63
+ </fields>
64
+
65
+ <fields>
66
+ <prevButton translate="label">
67
+ <label>prevButton</label>
68
+ <comment>set true/false</comment>
69
+ <frontend_type>text</frontend_type>
70
+ <sort_order>111</sort_order>
71
+ <show_in_default>1</show_in_default>
72
+ <show_in_website>1</show_in_website>
73
+ <show_in_store>1</show_in_store>
74
+ <can_be_empty>1</can_be_empty>
75
+ <!--<source_model>allcurrency/type</source_model>-->
76
+ </prevButton>
77
+ </fields>
78
+
79
+ <fields>
80
+ <animateStartingFrameIn translate="label">
81
+ <label>animateStartingFrameIn</label>
82
+ <comment>set true/false</comment>
83
+ <frontend_type>text</frontend_type>
84
+ <sort_order>112</sort_order>
85
+ <show_in_default>1</show_in_default>
86
+ <show_in_website>1</show_in_website>
87
+ <show_in_store>1</show_in_store>
88
+ <can_be_empty>1</can_be_empty>
89
+ <!--<source_model>allcurrency/type</source_model>-->
90
+ </animateStartingFrameIn>
91
+ </fields>
92
+
93
+ <fields>
94
+ <autoPlay translate="label">
95
+ <label>autoPlay:</label>
96
+ <comment>set true/false</comment>
97
+ <frontend_type>text</frontend_type>
98
+ <sort_order>113</sort_order>
99
+ <show_in_default>1</show_in_default>
100
+ <show_in_website>1</show_in_website>
101
+ <show_in_store>1</show_in_store>
102
+ <can_be_empty>1</can_be_empty>
103
+ <!--<source_model>allcurrency/type</source_model>-->
104
+ </autoPlay>
105
+ </fields>
106
+
107
+ <fields>
108
+ <autoPlayDelay translate="label">
109
+ <label>autoPlayDelay:</label>
110
+ <comment>set speed is mili second</comment>
111
+ <frontend_type>text</frontend_type>
112
+ <sort_order>114</sort_order>
113
+ <show_in_default>1</show_in_default>
114
+ <show_in_website>1</show_in_website>
115
+ <show_in_store>1</show_in_store>
116
+ <can_be_empty>1</can_be_empty>
117
+ <!--<source_model>allcurrency/type</source_model>-->
118
+ </autoPlayDelay>
119
+ </fields>
120
+ <fields>
121
+ <preloader translate="label">
122
+ <label>preloader:</label>
123
+ <comment>set true/false</comment>
124
+ <frontend_type>text</frontend_type>
125
+ <sort_order>115</sort_order>
126
+ <show_in_default>1</show_in_default>
127
+ <show_in_website>1</show_in_website>
128
+ <show_in_store>1</show_in_store>
129
+ <can_be_empty>1</can_be_empty>
130
+ <!--<source_model>allcurrency/type</source_model>-->
131
+ </preloader>
132
+ </fields>
133
+ <fields>
134
+ <pagination translate="label">
135
+ <label>pagination</label>
136
+ <comment>set true/false</comment>
137
+ <frontend_type>text</frontend_type>
138
+ <sort_order>116</sort_order>
139
+ <show_in_default>1</show_in_default>
140
+ <show_in_website>1</show_in_website>
141
+ <show_in_store>1</show_in_store>
142
+ <can_be_empty>1</can_be_empty>
143
+ <!--<source_model>allcurrency/type</source_model>-->
144
+ </pagination>
145
+ </fields>
146
+
147
+ <fields>
148
+
149
+ <aerrowleftmodernimage translate="label">
150
+ <label>Aerrow Left Image</label>
151
+ <frontend_type>image</frontend_type>
152
+ <backend_model>adminhtml/system_config_backend_image</backend_model>
153
+ <upload_dir config="system/filesystem/media" scope_info="1">adam/images</upload_dir>
154
+ <base_url type="media" scope_info="1">adam/images</base_url>
155
+ <sort_order>117</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
+ </aerrowleftmodernimage>
160
+ </fields>
161
+
162
+ <fields>
163
+
164
+ <aerrowrightmodernimage translate="label">
165
+ <label>Aerrow Right Image</label>
166
+ <frontend_type>image</frontend_type>
167
+ <backend_model>adminhtml/system_config_backend_image</backend_model>
168
+ <upload_dir config="system/filesystem/media" scope_info="1">adam/images</upload_dir>
169
+ <base_url type="media" scope_info="1">adam/images</base_url>
170
+ <sort_order>118</sort_order>
171
+ <show_in_default>1</show_in_default>
172
+ <show_in_website>1</show_in_website>
173
+ <show_in_store>1</show_in_store>
174
+ </aerrowrightmodernimage>
175
+ </fields>
176
+
177
+ </modersslidersetting>
178
+
179
+ <bannertypecollection translate="label" module="bannerresponsive">
180
+ <label>Banner Type Selection</label>
181
+ <frontend_type>text</frontend_type>
182
+ <sort_order>41</sort_order>
183
+ <show_in_default>1</show_in_default>
184
+ <show_in_website>1</show_in_website>
185
+ <show_in_store>1</show_in_store>
186
+
187
+ <fields>
188
+ <bannertype translate="label">
189
+ <label>Select Banner Slider Type</label>
190
+ <frontend_type>select</frontend_type>
191
+ <sort_order>111</sort_order>
192
+ <show_in_default>1</show_in_default>
193
+ <show_in_website>1</show_in_website>
194
+ <show_in_store>1</show_in_store>
195
+ <can_be_empty>1</can_be_empty>
196
+ <source_model>bannerresponsive/typebanners</source_model>
197
+ </bannertype>
198
+ </fields>
199
+
200
+
201
+
202
+ </bannertypecollection>
203
+
204
+
205
+ <commonbxslider translate="label" module="bannerresponsive">
206
+ <label>Bx Slider Settings</label>
207
+ <frontend_type>text</frontend_type>
208
+ <sort_order>42</sort_order>
209
+ <show_in_default>1</show_in_default>
210
+ <show_in_website>1</show_in_website>
211
+ <show_in_store>1</show_in_store>
212
+ <fields>
213
+ <bannereffectoptions translate="label">
214
+ <label>Type Of banner</label>
215
+ <frontend_type>select</frontend_type>
216
+ <sort_order>114</sort_order>
217
+ <show_in_default>1</show_in_default>
218
+ <show_in_website>1</show_in_website>
219
+ <show_in_store>1</show_in_store>
220
+ <can_be_empty>1</can_be_empty>
221
+ <source_model>bannerresponsive/bannereffectoption</source_model>
222
+ </bannereffectoptions>
223
+ </fields>
224
+
225
+ </commonbxslider>
226
+
227
+
228
+
229
+ <responsivegeneral translate="label" module="bannerresponsive">>
230
+ <label>General(Bx Slider)</label>
231
+ <frontend_type>text</frontend_type>
232
+ <sort_order>50</sort_order>
233
+ <show_in_default>1</show_in_default>
234
+ <show_in_website>1</show_in_website>
235
+ <show_in_store>1</show_in_store>
236
+
237
+ <fields>
238
+ <speed translate="label">
239
+ <label>speed</label>
240
+ <comment>time in milisecond</comment>
241
+ <frontend_type>text</frontend_type>
242
+ <sort_order>115</sort_order>
243
+ <show_in_default>1</show_in_default>
244
+ <show_in_website>1</show_in_website>
245
+ <show_in_store>1</show_in_store>
246
+ <can_be_empty>1</can_be_empty>
247
+ </speed>
248
+ </fields>
249
+
250
+ <fields>
251
+ <mode translate="label">
252
+ <label>mode</label>
253
+ <comment>fade/horizontal,vertcal</comment>
254
+ <frontend_type>text</frontend_type>
255
+ <sort_order>115</sort_order>
256
+ <show_in_default>1</show_in_default>
257
+ <show_in_website>1</show_in_website>
258
+ <show_in_store>1</show_in_store>
259
+ <can_be_empty>1</can_be_empty>
260
+ </mode>
261
+ </fields>
262
+ <fields>
263
+ <caption translate="label">
264
+ <label>caption</label>
265
+ <comment>true / false</comment>
266
+ <frontend_type>text</frontend_type>
267
+ <sort_order>115</sort_order>
268
+ <show_in_default>1</show_in_default>
269
+ <show_in_website>1</show_in_website>
270
+ <show_in_store>1</show_in_store>
271
+ <can_be_empty>1</can_be_empty>
272
+ </caption>
273
+ </fields>
274
+ <fields>
275
+ <randomStart translate="label">
276
+ <label>randomStart</label>
277
+ <comment>true / false</comment>
278
+ <frontend_type>text</frontend_type>
279
+ <sort_order>116</sort_order>
280
+ <show_in_default>1</show_in_default>
281
+ <show_in_website>1</show_in_website>
282
+ <show_in_store>1</show_in_store>
283
+ <can_be_empty>1</can_be_empty>
284
+ </randomStart>
285
+ </fields>
286
+
287
+
288
+
289
+ <fields>
290
+ <responsive translate="label">
291
+ <label>responsive</label>
292
+ <comment>true / false</comment>
293
+ <frontend_type>text</frontend_type>
294
+ <sort_order>119</sort_order>
295
+ <show_in_default>1</show_in_default>
296
+ <show_in_website>1</show_in_website>
297
+ <show_in_store>1</show_in_store>
298
+ <can_be_empty>1</can_be_empty>
299
+ </responsive>
300
+ </fields>
301
+ <fields>
302
+ <adaptiveheight translate="label">
303
+ <label>adaptiveHeight</label>
304
+ <comment>true/false</comment>
305
+ <frontend_type>text</frontend_type>
306
+ <sort_order>119</sort_order>
307
+ <show_in_default>1</show_in_default>
308
+ <show_in_website>1</show_in_website>
309
+ <show_in_store>1</show_in_store>
310
+ <can_be_empty>1</can_be_empty>
311
+ </adaptiveheight>
312
+ </fields>
313
+ <fields>
314
+ <minslides translate="label">
315
+ <label>minslides</label>
316
+ <comment>integer</comment>
317
+ <frontend_type>text</frontend_type>
318
+ <sort_order>120</sort_order>
319
+ <show_in_default>1</show_in_default>
320
+ <show_in_website>1</show_in_website>
321
+ <show_in_store>1</show_in_store>
322
+ <can_be_empty>1</can_be_empty>
323
+ </minslides>
324
+ </fields>
325
+
326
+ <fields>
327
+ <maxSlides translate="label">
328
+ <label>maxSlides</label>
329
+ <comment>integer</comment>
330
+ <frontend_type>text</frontend_type>
331
+ <sort_order>121</sort_order>
332
+ <show_in_default>1</show_in_default>
333
+ <show_in_website>1</show_in_website>
334
+ <show_in_store>1</show_in_store>
335
+ <can_be_empty>1</can_be_empty>
336
+ </maxSlides>
337
+ </fields>
338
+
339
+ <fields>
340
+ <moveSlides translate="label">
341
+ <label>moveSlides</label>
342
+ <comment>integer</comment>
343
+ <frontend_type>text</frontend_type>
344
+ <sort_order>122</sort_order>
345
+ <show_in_default>1</show_in_default>
346
+ <show_in_website>1</show_in_website>
347
+ <show_in_store>1</show_in_store>
348
+ <can_be_empty>1</can_be_empty>
349
+ </moveSlides>
350
+ </fields>
351
+
352
+
353
+ <fields>
354
+ <slideWidth translate="label">
355
+ <label>slideWidth</label>
356
+ <comment>integer</comment>
357
+ <frontend_type>text</frontend_type>
358
+ <sort_order>123</sort_order>
359
+ <show_in_default>1</show_in_default>
360
+ <show_in_website>1</show_in_website>
361
+ <show_in_store>1</show_in_store>
362
+ <can_be_empty>1</can_be_empty>
363
+ </slideWidth>
364
+ </fields>
365
+ <fields>
366
+ <pager translate="label">
367
+ <label>pager</label>
368
+ <comment>true/false</comment>
369
+ <frontend_type>text</frontend_type>
370
+ <sort_order>124</sort_order>
371
+ <show_in_default>1</show_in_default>
372
+ <show_in_website>1</show_in_website>
373
+ <show_in_store>1</show_in_store>
374
+ <can_be_empty>1</can_be_empty>
375
+ </pager>
376
+ </fields>
377
+
378
+ <fields>
379
+ <pagerType translate="label">
380
+ <label>pagerType</label>
381
+ <comment>short/full</comment>
382
+
383
+ <frontend_type>text</frontend_type>
384
+ <sort_order>125</sort_order>
385
+ <show_in_default>1</show_in_default>
386
+ <show_in_website>1</show_in_website>
387
+ <show_in_store>1</show_in_store>
388
+ <can_be_empty>1</can_be_empty>
389
+ </pagerType>
390
+ </fields>
391
+
392
+ <fields>
393
+ <pagerShortSeparator translate="label">
394
+ <label>pagerShortSeparator</label>
395
+ <comment>' / ' or string</comment>
396
+ <frontend_type>text</frontend_type>
397
+ <sort_order>126</sort_order>
398
+ <show_in_default>1</show_in_default>
399
+ <show_in_website>1</show_in_website>
400
+ <show_in_store>1</show_in_store>
401
+ <can_be_empty>1</can_be_empty>
402
+ </pagerShortSeparator>
403
+ </fields>
404
+ <fields>
405
+ <pager translate="label">
406
+ <label>pager</label>
407
+ <comment>true/false</comment>
408
+ <frontend_type>text</frontend_type>
409
+ <sort_order>127</sort_order>
410
+ <show_in_default>1</show_in_default>
411
+ <show_in_website>1</show_in_website>
412
+ <show_in_store>1</show_in_store>
413
+ <can_be_empty>1</can_be_empty>
414
+ </pager>
415
+ </fields>
416
+
417
+ <fields>
418
+ <pagerType translate="label">
419
+ <label>pagerType</label>
420
+ <comment>short/full</comment>
421
+
422
+ <frontend_type>text</frontend_type>
423
+ <sort_order>128</sort_order>
424
+ <show_in_default>1</show_in_default>
425
+ <show_in_website>1</show_in_website>
426
+ <show_in_store>1</show_in_store>
427
+ <can_be_empty>1</can_be_empty>
428
+ </pagerType>
429
+ </fields>
430
+
431
+ <fields>
432
+ <pagerShortSeparator translate="label">
433
+ <label>pagerShortSeparator</label>
434
+ <comment>' / ' or string</comment>
435
+ <frontend_type>text</frontend_type>
436
+ <sort_order>129</sort_order>
437
+ <show_in_default>1</show_in_default>
438
+ <show_in_website>1</show_in_website>
439
+ <show_in_store>1</show_in_store>
440
+ <can_be_empty>1</can_be_empty>
441
+ </pagerShortSeparator>
442
+ </fields>
443
+
444
+ <fields>
445
+ <controls translate="label">
446
+ <label>controls</label>
447
+ <comment>true/false to controll left right buttuon</comment>
448
+ <frontend_type>text</frontend_type>
449
+ <sort_order>130</sort_order>
450
+ <show_in_default>1</show_in_default>
451
+ <show_in_website>1</show_in_website>
452
+ <show_in_store>1</show_in_store>
453
+ <can_be_empty>1</can_be_empty>
454
+ </controls>
455
+ </fields>
456
+
457
+ <fields>
458
+ <nextText translate="label">
459
+ <label>nextText</label>
460
+ <comment>custom nexttext string</comment>
461
+ <frontend_type>text</frontend_type>
462
+ <sort_order>131</sort_order>
463
+ <show_in_default>1</show_in_default>
464
+ <show_in_website>1</show_in_website>
465
+ <show_in_store>1</show_in_store>
466
+ <can_be_empty>1</can_be_empty>
467
+ </nextText>
468
+ </fields>
469
+
470
+ <fields>
471
+ <prevText translate="label">
472
+ <label>prevText</label>
473
+ <comment>custom prevttext string</comment>
474
+ <frontend_type>text</frontend_type>
475
+ <sort_order>132</sort_order>
476
+ <show_in_default>1</show_in_default>
477
+ <show_in_website>1</show_in_website>
478
+ <show_in_store>1</show_in_store>
479
+ <can_be_empty>1</can_be_empty>
480
+ </prevText>
481
+ </fields>
482
+
483
+
484
+
485
+
486
+ <fields>
487
+ <autoControls translate="label">
488
+ <label>autoControls</label>
489
+ <comment>true / false</comment>
490
+ <frontend_type>text</frontend_type>
491
+ <sort_order>133</sort_order>
492
+ <show_in_default>1</show_in_default>
493
+ <show_in_website>1</show_in_website>
494
+ <show_in_store>1</show_in_store>
495
+ <can_be_empty>1</can_be_empty>
496
+ </autoControls>
497
+ </fields>
498
+ <fields>
499
+ <auto translate="label">
500
+ <label>auto</label>
501
+ <comment>true / false</comment>
502
+ <frontend_type>text</frontend_type>
503
+ <sort_order>134</sort_order>
504
+ <show_in_default>1</show_in_default>
505
+ <show_in_website>1</show_in_website>
506
+ <show_in_store>1</show_in_store>
507
+ <can_be_empty>1</can_be_empty>
508
+ </auto>
509
+ </fields>
510
+
511
+ <fields>
512
+ <pause translate="label">
513
+ <label>pause</label>
514
+ <comment>time in mili second</comment>
515
+ <frontend_type>text</frontend_type>
516
+ <sort_order>135</sort_order>
517
+ <show_in_default>1</show_in_default>
518
+ <show_in_website>1</show_in_website>
519
+ <show_in_store>1</show_in_store>
520
+ <can_be_empty>1</can_be_empty>
521
+ </pause>
522
+ </fields>
523
+
524
+ <fields>
525
+ <autoStart translate="label">
526
+ <label>autoStart</label>
527
+ <frontend_type>text</frontend_type>
528
+ <sort_order>136</sort_order>
529
+ <show_in_default>1</show_in_default>
530
+ <show_in_website>1</show_in_website>
531
+ <show_in_store>1</show_in_store>
532
+ <can_be_empty>1</can_be_empty>
533
+ </autoStart>
534
+ </fields>
535
+
536
+
537
+ <fields>
538
+ <autoDirection translate="label">
539
+ <label>autoDirection</label>
540
+ <comment>prev / next</comment>
541
+ <frontend_type>text</frontend_type>
542
+ <sort_order>137</sort_order>
543
+ <show_in_default>1</show_in_default>
544
+ <show_in_website>1</show_in_website>
545
+ <show_in_store>1</show_in_store>
546
+ <can_be_empty>1</can_be_empty>
547
+ </autoDirection>
548
+ </fields>
549
+ <fields>
550
+ <hidecontrolend translate="label">
551
+ <label>hidecontrolend</label>
552
+ <comment>true / false</comment>
553
+ <frontend_type>text</frontend_type>
554
+ <sort_order>138</sort_order>
555
+ <show_in_default>1</show_in_default>
556
+ <show_in_website>1</show_in_website>
557
+ <show_in_store>1</show_in_store>
558
+ <can_be_empty>1</can_be_empty>
559
+ </hidecontrolend>
560
+ </fields>
561
+ </responsivegeneral>
562
+
563
+
564
+
565
+
566
+ <cameraslider translate="label" module="bannerresponsive">
567
+ <label>Camera Slider Settings</label>
568
+ <frontend_type>text</frontend_type>
569
+ <sort_order>72</sort_order>
570
+ <show_in_default>1</show_in_default>
571
+ <show_in_website>1</show_in_website>
572
+ <show_in_store>1</show_in_store>
573
+ <fields>
574
+ <fx translate="label">
575
+ <label>Banner Effects</label>
576
+ <frontend_type>select</frontend_type>
577
+ <sort_order>114</sort_order>
578
+ <show_in_default>1</show_in_default>
579
+ <show_in_website>1</show_in_website>
580
+ <show_in_store>1</show_in_store>
581
+ <can_be_empty>1</can_be_empty>
582
+ <source_model>bannerresponsive/camerafx</source_model>
583
+ </fx>
584
+ </fields>
585
+ <fields>
586
+ <hights translate="label">
587
+ <label>Banner Height</label>
588
+ <frontend_type>text</frontend_type>
589
+ <sort_order>115</sort_order>
590
+ <show_in_default>1</show_in_default>
591
+ <show_in_website>1</show_in_website>
592
+ <show_in_store>1</show_in_store>
593
+ <can_be_empty>1</can_be_empty>
594
+ </hights>
595
+ </fields>
596
+
597
+
598
+ <fields>
599
+ <loader translate="label">
600
+ <label>Banner Loader Type</label>
601
+ <frontend_type>select</frontend_type>
602
+ <sort_order>116</sort_order>
603
+ <show_in_default>1</show_in_default>
604
+ <show_in_website>1</show_in_website>
605
+ <show_in_store>1</show_in_store>
606
+ <can_be_empty>1</can_be_empty>
607
+ <source_model>bannerresponsive/cameraloader</source_model>
608
+ </loader>
609
+ </fields>
610
+
611
+
612
+ <fields>
613
+ <piePosition translate="label">
614
+ <label>Banner piePosition's</label>
615
+ <frontend_type>select</frontend_type>
616
+ <sort_order>117</sort_order>
617
+ <show_in_default>1</show_in_default>
618
+ <show_in_website>1</show_in_website>
619
+ <show_in_store>1</show_in_store>
620
+ <can_be_empty>1</can_be_empty>
621
+ <source_model>bannerresponsive/camerapieposition</source_model>
622
+ </piePosition>
623
+ </fields>
624
+
625
+
626
+ <fields>
627
+ <pagination translate="label">
628
+ <label>Banner pagination</label>
629
+ <frontend_type>select</frontend_type>
630
+ <comment>True Or False</comment>
631
+ <sort_order>118</sort_order>
632
+ <show_in_default>1</show_in_default>
633
+ <show_in_website>1</show_in_website>
634
+ <show_in_store>1</show_in_store>
635
+ <can_be_empty>1</can_be_empty>
636
+ <source_model>bannerresponsive/truefalseall</source_model>
637
+
638
+ </pagination>
639
+ </fields>
640
+
641
+
642
+ <fields>
643
+ <time translate="label">
644
+ <label>Time</label>
645
+ <comment>//milliseconds between the end of the sliding effect and the start of the nex one</comment>
646
+ <frontend_type>text</frontend_type>
647
+ <sort_order>119</sort_order>
648
+ <show_in_default>1</show_in_default>
649
+ <show_in_website>1</show_in_website>
650
+ <show_in_store>1</show_in_store>
651
+ <can_be_empty>1</can_be_empty>
652
+ </time>
653
+ </fields>
654
+
655
+
656
+ <fields>
657
+ <transPeriod translate="label">
658
+ <label>Time of transperiod</label>
659
+ <comment>lenght of the sliding effect in milliseconds</comment>
660
+ <frontend_type>text</frontend_type>
661
+ <sort_order>120</sort_order>
662
+ <show_in_default>1</show_in_default>
663
+ <show_in_website>1</show_in_website>
664
+ <show_in_store>1</show_in_store>
665
+ <can_be_empty>1</can_be_empty>
666
+ </transPeriod>
667
+ </fields>
668
+
669
+
670
+
671
+ <fields>
672
+ <barPosition translate="label">
673
+ <label>Banner barPosition</label>
674
+ <comment>'bottom', 'left', 'top', 'right'</comment>
675
+ <frontend_type>select</frontend_type>
676
+ <sort_order>122</sort_order>
677
+ <show_in_default>1</show_in_default>
678
+ <show_in_website>1</show_in_website>
679
+ <show_in_store>1</show_in_store>
680
+ <can_be_empty>1</can_be_empty>
681
+ <source_model>bannerresponsive/camerabarposistion</source_model>
682
+ </barPosition>
683
+ </fields>
684
+ <fields>
685
+ <playPause translate="label">
686
+ <label>play/pause buttons</label>
687
+ <frontend_type>select</frontend_type>
688
+ <comment>true or false, to display or not the play/pause buttons</comment>
689
+ <sort_order>123</sort_order>
690
+ <show_in_default>1</show_in_default>
691
+ <show_in_website>1</show_in_website>
692
+ <show_in_store>1</show_in_store>
693
+ <can_be_empty>1</can_be_empty>
694
+ <source_model>bannerresponsive/Truefalseall</source_model>
695
+ <source_model>bannerresponsive/truefalseall</source_model>
696
+
697
+ </playPause>
698
+ </fields>
699
+
700
+
701
+ <fields>
702
+ <thumbnails translate="label">
703
+ <label>thumbnails</label>
704
+ <comment>true, false</comment>
705
+ <frontend_type>select</frontend_type>
706
+ <sort_order>125</sort_order>
707
+ <show_in_default>1</show_in_default>
708
+ <show_in_website>1</show_in_website>
709
+ <show_in_store>1</show_in_store>
710
+ <can_be_empty>1</can_be_empty>
711
+ <source_model>bannerresponsive/truefalseall</source_model>
712
+ </thumbnails>
713
+ </fields>
714
+
715
+ <fields>
716
+ <bardirection translate="label">
717
+ <label>bardirection</label>
718
+ <comment>'leftToRight', 'rightToLeft', 'topToBottom', 'bottomToTop'</comment>
719
+ <frontend_type>select</frontend_type>
720
+ <sort_order>126</sort_order>
721
+ <show_in_default>1</show_in_default>
722
+ <show_in_website>1</show_in_website>
723
+ <show_in_store>1</show_in_store>
724
+ <can_be_empty>1</can_be_empty>
725
+ <source_model>bannerresponsive/camerabardirection</source_model>
726
+ </bardirection>
727
+ </fields>
728
+ <fields>
729
+
730
+ <aerrowimage translate="label">
731
+ <label>Aerrow Image</label>
732
+ <frontend_type>image</frontend_type>
733
+ <backend_model>adminhtml/system_config_backend_image</backend_model>
734
+ <upload_dir config="system/filesystem/media" scope_info="1">adam/images</upload_dir>
735
+ <base_url type="media" scope_info="1">adam/images</base_url>
736
+ <sort_order>127</sort_order>
737
+ <show_in_default>1</show_in_default>
738
+ <show_in_website>1</show_in_website>
739
+ <show_in_store>1</show_in_store>
740
+ </aerrowimage>
741
+ </fields>
742
+
743
+ </cameraslider>
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+ </groups>
752
+
753
+
754
+ </bannerresponsive>
755
+ </sections>
756
+ </config>
app/code/local/Clarion/Bannerresponsive/sql/bannerresponsive_setup/mysql4-install-0.1.0.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+
7
+ $installer->run("
8
+
9
+ -- DROP TABLE IF EXISTS {$this->getTable('bannerresponsive')};
10
+ CREATE TABLE {$this->getTable('bannerresponsive')} (
11
+ `bannerresponsive_id` int(11) unsigned NOT NULL auto_increment,
12
+ `title` varchar(255) NOT NULL default '',
13
+ `orderid` varchar(255) NOT NULL default '',
14
+ `nubersliderbt` varchar(255) NOT NULL default '',
15
+ `filename` varchar(255) NOT NULL default '',
16
+ `content` text NOT NULL default '',
17
+ `status` smallint(6) NOT NULL default '0',
18
+ `bannertype` varchar(255) NOT NULL default '',
19
+ `created_time` datetime NULL,
20
+ `update_time` datetime NULL,
21
+ PRIMARY KEY (`bannerresponsive_id`)
22
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
23
+
24
+ ");
25
+
26
+ $installer->endSetup();
app/design/adminhtml/default/default/layout/bannerresponsive.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <bannerresponsive_adminhtml_bannerresponsive_index>
4
+ <reference name="content">
5
+ <block type="bannerresponsive/adminhtml_bannerresponsive" name="bannerresponsive" />
6
+ </reference>
7
+ </bannerresponsive_adminhtml_bannerresponsive_index>
8
+ </layout>
app/design/frontend/default/default/layout/bannerresponsive.xml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <default>
4
+ <reference name="head">
5
+ <action method="addItem" ifconfig="bannerresponsive/responsive/blockpostion"><type>skin_js</type><name>js/responsiveslider/jquerynocon.js</name></action>
6
+ <action method="addItem" ifconfig="bannerresponsive/responsive/blockpostion"><type>skin_js</type><name>js/responsiveslider/jquery.js</name></action>
7
+
8
+ <!--ction method="addCss" ifconfig="bannerresponsive/bannertypecollection/bannertype" value="modernslide"><stylesheet>css/responsivebanner/sequencejs-theme.modern-slide-in.css</stylesheet></action>
9
+ <action method="addItem" ifconfig="bannerresponsive/responsive/blockpostion"><type>skin_js</type><name>js/responsiveslider/jquerynocon.js</name></action>
10
+ <action method="addItem" ifconfig="bannerresponsive/responsive/blockpostion"><type>skin_js</type><name>js/responsiveslider/jquery.js</name></action>
11
+ <action method="addItem" ifconfig="bannerresponsive/bannertypecollection/bannertype" value="modernslide"><type>skin_js</type><name>js/responsiveslider/jquery.sequence-min.js</name></action>
12
+
13
+ -->
14
+
15
+ </reference>
16
+ </default>
17
+ <bannerresponsive_index_index>
18
+ <reference name="content">
19
+ <block type="bannerresponsive/bannerresponsive" name="bannerresponsive" template="bannerresponsive/bannerresponsive.phtml" />
20
+ </reference>
21
+ </bannerresponsive_index_index>
22
+ </layout>
app/design/frontend/default/default/template/bannerresponsive/bannerresponsive.phtml ADDED
@@ -0,0 +1,366 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * banner module
4
+ * extesnion developing under clarion connect
5
+ */
6
+ ?>
7
+ <?php if($this->helper('bannerresponsive')->Isbannerenable() == 1 ):?>
8
+ <?php if($this->helper('bannerresponsive')->Bannertype()== "bxslider") : ?>
9
+ <?php
10
+ /*
11
+ * added js and css files you can also put this in xml file under refernces head
12
+ */
13
+ ?>
14
+ <script type='text/javascript' src='<?php echo $this->getSkinUrl("js/responsiveslider/jquerynocon.js")?>'></script>
15
+ <script type='text/javascript' src='<?php echo $this->getSkinUrl("js/responsiveslider/jquery.bxslider.min.js")?>'></script>
16
+ <script type='text/javascript' src='<?php echo $this->getSkinUrl("js/responsiveslider/jquery.bxslider.js")?>'></script>
17
+ <link rel='stylesheet' href='<?php echo $this->getSkinUrl("css/responsivebanner/jquery.bxslider.css");?>' type='text/css'/>
18
+ <link rel='stylesheet' href='<?php echo $this->getSkinUrl("css/responsivebanner/stylesresposive.css");?>' type='text/css'/>
19
+ <link rel='stylesheet' href='<?php echo $this->getSkinUrl("css/responsivebanner/jquery.bxslider.css");?>' type='text/css'/>
20
+
21
+ <?php
22
+ /*
23
+ * added js and css files you can also put this in xml file under refernces head
24
+ */
25
+ ?>
26
+ <?php $typebanner = $this->helper('bannerresponsive')->getBannerstyle();?>
27
+ <script type="text/javascript">
28
+ var jq=jQuery.noConflict();
29
+ jq(document).ready(function(){
30
+ <?php
31
+ switch ($typebanner)
32
+ {
33
+ case "Image slideshow with captions":
34
+ ?>
35
+
36
+ jq('.bxsliderthumnail').bxSlider({
37
+ mode:'<?php if($this->mode): echo $this->mode; else: ?>fade<?php endif;?>',
38
+ captions: true,
39
+ pager: <?php if($this->pager): echo $this->pager; else: ?>false<?php endif;?>,
40
+ slideWidth: <?php if($this->slideWidth): echo $this->slideWidth; else: ?>700<?php endif;?>,
41
+ pagerType:'<?php if($this->pagerType): echo $this->pagerType; else: ?>full<?php endif;?>',
42
+ pagerShortSeparator:'<?php if($this->pagerShortSeparator): echo $this->pagerShortSeparator; else: ?>/<?php endif;?>'
43
+ });
44
+ <?php break;
45
+ case "Auto show with start / stop controls":?>
46
+ jq('.bxsliderthumnail').bxSlider({
47
+ speed:<?php if($this->speed): echo $this->speed; else: ?>3000<?php endif;?>,
48
+ autoControls: true,
49
+ autoDirection: '<?php if($this->autoDirection): echo $this->autoDirection; else: ?>next<?php endif;?>',
50
+ auto:<?php if($this->auto): echo $this->auto; else: ?>false<?php endif;?>,
51
+ mode:'<?php if($this->mode): echo $this->mode; else: ?>fade<?php endif;?>',
52
+ pager: <?php if($this->pager): echo $this->pager; else: ?>false<?php endif;?>,
53
+ slideWidth: <?php if($this->slideWidth): echo $this->slideWidth; else: ?>700<?php endif;?>,
54
+ captions: <?php if($this->caption): echo $this->caption; else: ?>false<?php endif;?>,
55
+ pagerType:'<?php if($this->pagerType): echo $this->pagerType; else: ?>full<?php endif;?>',
56
+ pagerShortSeparator:'<?php if($this->pagerShortSeparator): echo $this->pagerShortSeparator; else: ?>/<?php endif;?>'
57
+ });
58
+ <?php break;
59
+ case "Manual show without infinite loop":?>
60
+ jq('.bxsliderthumnail').bxSlider({
61
+ speed:<?php if($this->speed): echo $this->speed; else: ?>3000<?php endif;?>,
62
+ infiniteLoop: false,
63
+ autoDirection: '<?php if($this->autoDirection): echo $this->autoDirection; else: ?>next<?php endif;?>',
64
+ hideControlOnEnd: <?php if($this->hideControlOnEnd): echo $this->hideControlOnEnd; else: ?>false<?php endif;?>,
65
+ auto: <?php if($this->auto): echo $this->auto; else: ?>false<?php endif;?>,
66
+ mode:'<?php if($this->mode): echo $this->mode; else: ?>fade<?php endif;?>',
67
+ slideWidth: <?php if($this->slideWidth): echo $this->slideWidth; else: ?>700<?php endif;?>,
68
+ pager: <?php if($this->pager): echo $this->pager; else: ?>false<?php endif;?>,
69
+ captions: <?php if($this->caption): echo $this->caption; else: ?>false<?php endif;?>,
70
+ pagerType:'<?php if($this->pagerType): echo $this->pagerType; else: ?>full<?php endif;?>',
71
+ pagerShortSeparator:'<?php if($this->pagerShortSeparator): echo $this->pagerShortSeparator; else: ?>/<?php endif;?>'
72
+ });
73
+
74
+ <?php break; case "Slideshow using adaptiveHeight":?>
75
+ jq('.bxsliderthumnail').bxSlider({
76
+ speed:<?php if($this->speed): echo $this->speed; else: ?>3000<?php endif;?>,
77
+ adaptiveHeight: true,
78
+ mode:'<?php if($this->mode): echo $this->mode; else: ?>fade<?php endif;?>',
79
+ autoDirection: '<?php if($this->autoDirection): echo $this->autoDirection; else: ?>next<?php endif;?>',
80
+ auto:<?php if($this->auto): echo $this->auto; else: ?>false<?php endif;?>,
81
+ mode:'<?php if($this->mode): echo $this->mode; else: ?>fade<?php endif;?>',
82
+ slideWidth: <?php if($this->slideWidth): echo $this->slideWidth; else: ?>700<?php endif;?>,
83
+ pager: <?php if($this->pager): echo $this->pager; else: ?>false<?php endif;?>,
84
+ captions: <?php if($this->caption): echo $this->caption; else: ?>false<?php endif;?>,
85
+ pagerType:'<?php if($this->pagerType): echo $this->pagerType; else: ?>full<?php endif;?>',
86
+ pagerShortSeparator:'<?php if($this->pagerShortSeparator): echo $this->pagerShortSeparator; else: ?>/<?php endif;?>'
87
+ });
88
+ <?php break;
89
+ case "Vertical slideshow":?>
90
+ jq('.bxsliderthumnail').bxSlider({
91
+ speed:<?php if($this->speed): echo $this->speed; else: ?>3000<?php endif;?>,
92
+ slideMargin: 5,
93
+ autoDirection: '<?php if($this->autoDirection): echo $this->autoDirection; else: ?>next<?php endif;?>',
94
+ auto:<?php if($this->auto): echo $this->auto; else: ?>false<?php endif;?>,
95
+ mode:'vertical',
96
+ slideWidth: <?php if($this->slideWidth): echo $this->slideWidth; else: ?>700<?php endif;?>,
97
+ pager: <?php if($this->pager): echo $this->pager; else: ?>false<?php endif;?>,
98
+ captions: <?php if($this->caption): echo $this->caption; else: ?>false<?php endif;?>,
99
+ pagerType:'<?php if($this->pagerType): echo $this->pagerType; else: ?>full<?php endif;?>',
100
+ pagerShortSeparator:'<?php if($this->pagerShortSeparator): echo $this->pagerShortSeparator; else: ?>/<?php endif;?>'
101
+ });
102
+ <?php break;
103
+
104
+
105
+
106
+
107
+ case "Custom next / prev control selectors":?>
108
+ jq('.bxsliderthumnail').bxSlider({
109
+ speed:<?php if($this->speed): echo $this->speed; else: ?>3000<?php endif;?>,
110
+ nextSelector: '#slider-next',
111
+ prevSelector: '#slider-prev',
112
+ autoDirection: '<?php if($this->autoDirection): echo $this->autoDirection; else: ?>next<?php endif;?>',
113
+ nextText:'<?php if($this->nexttext): echo $this->nexttext; else: ?>nextdefault<?php endif;?>',
114
+ prevText: '<?php if($this->pretext): echo $this->pretext; else: ?>predefault<?php endif;?>',
115
+ slideWidth: <?php if($this->slideWidth): echo $this->slideWidth; else: ?>700<?php endif;?>,
116
+ auto:<?php if($this->auto): echo $this->auto; else: ?>false<?php endif;?>,
117
+ mode:'<?php if($this->mode): echo $this->mode; else: ?>fade<?php endif;?>',
118
+ captions: <?php if($this->caption): echo $this->caption; else: ?>false<?php endif;?>,
119
+ pagerType:'<?php if($this->pagerType): echo $this->pagerType; else: ?>full<?php endif;?>',
120
+ pagerShortSeparator:'<?php if($this->pagerShortSeparator): echo $this->pagerShortSeparator; else: ?>/<?php endif;?>'
121
+ });
122
+ <?php break;
123
+ case "Thumbnail pager":?>
124
+ jq('.bxsliderthumnail').bxSlider({
125
+ speed:<?php if($this->speed): echo $this->speed; else: ?>3000<?php endif;?>,
126
+ pagerCustom: '#bx-pager',
127
+ autoDirection: '<?php if($this->autoDirection): echo $this->autoDirection; else: ?>next<?php endif;?>',
128
+ auto:<?php if($this->auto): echo $this->auto; else: ?>false<?php endif;?>,
129
+ slideWidth: <?php if($this->slideWidth): echo $this->slideWidth; else: ?>700<?php endif;?>,
130
+ auto:<?php if($this->auto): echo $this->auto; else: ?>false<?php endif;?>,
131
+ mode:'<?php if($this->mode): echo $this->mode; else: ?>fade<?php endif;?>',
132
+ pager: <?php if($this->pager): echo $this->pager; else: ?>false<?php endif;?>,
133
+ captions: <?php if($this->caption): echo $this->caption; else: ?>false<?php endif;?>,
134
+ pagerType:'<?php if($this->pagerType): echo $this->pagerType; else: ?>full<?php endif;?>',
135
+ adaptiveHeight: <?php if($this->adaptiveHeight): echo $this->adaptiveHeight; else: ?>false<?php endif;?>,
136
+ pagerShortSeparator:'<?php if($this->pagerShortSeparator): echo $this->pagerShortSeparator; else: ?>/<?php endif;?>'
137
+ });
138
+
139
+ <?php break;
140
+ default: ?>
141
+ jq('.bxsliderthumnail').bxSlider({
142
+ speed:<?php if($this->speed): echo $this->speed; else: ?>3000<?php endif;?>,
143
+ slideWidth: <?php if($this->slideWidth): echo $this->slideWidth; else: ?>700<?php endif;?>,
144
+ auto:<?php if($this->auto): echo $this->auto; else: ?>false<?php endif;?>,
145
+ mode:'<?php if($this->mode): echo $this->mode; else: ?>fade<?php endif;?>' ,
146
+ pager: <?php if($this->pager): echo $this->pager; else: ?>false<?php endif;?>,
147
+ captions: <?php if($this->caption): echo $this->caption; else: ?>false<?php endif;?>,
148
+ pagerType:'<?php if($this->pagerType): echo $this->pagerType; else: ?>full<?php endif;?>',
149
+ pagerShortSeparator:'<?php if($this->pagerShortSeparator): echo $this->pagerShortSeparator; else: ?>/<?php endif;?>',
150
+ autoDirection: '<?php if($this->autoDirection): echo $this->autoDirection; else: ?>next<?php endif;?>'
151
+ });
152
+ <?php }
153
+ ?>
154
+ });
155
+ </script>
156
+
157
+
158
+
159
+
160
+
161
+ <ul class="bxsliderthumnail">
162
+ <?php
163
+
164
+ $collection = $this->getBannercollection("bxslider")
165
+ ->setOrder('orderid','ASC');
166
+ foreach($collection as $collection1)
167
+ {
168
+ ?>
169
+ <li><img <?php if($collection1['title']) { ?> title="<?php echo $collection1['title'];?>" <?php } ?> src="<?php echo Mage::getBaseUrl("media").'bannerimages/'.$collection1['filename'] ?>"/></li>
170
+
171
+
172
+ <?php } ?>
173
+ </ul>
174
+ <?php if($typebanner == "Thumbnail pager"): ?>
175
+ <div id="bx-pager">
176
+ <?php
177
+ $i=0;
178
+ foreach($collection as $collection1)
179
+ {
180
+ ?>
181
+ <a data-slide-index="<?php echo $i;?>" href=""><img src="<?php echo Mage::getBaseUrl("media").'bannerimages/thumbs/'.$collection1['filename'] ?>"/></li></a>
182
+
183
+
184
+ <?php $i++;} ?>
185
+
186
+ </div>
187
+ <?php elseif($typebanner == "Custom next / prev control selectors"):?>
188
+ <div class="outside">
189
+ <h3>This div is outside of the slider</h3>
190
+ <p><span id="slider-prev"></span> | <span id="slider-next"></span></p>
191
+ </div>
192
+ <?php endif; ?>
193
+ <?php elseif($this->helper('bannerresponsive')->Bannertype()== "modernslide") :?>
194
+ <?php
195
+ /*
196
+ * added js and css files you can also put this in xml file under refernces head
197
+ */?>
198
+
199
+ <script type="text/javascript" src="<?php echo $this->getSkinUrl("js/responsiveslider/jquery.sequence-min.js")?>"></script>
200
+
201
+ <link rel="stylesheet" href="<?php echo $this->getSkinUrl("css/responsivebanner/sequencejs-theme.modern-slide-in.css");?>" type="text/css"/>
202
+
203
+
204
+
205
+ <?php
206
+ /*
207
+ * added js and css files you can also put this in xml file under refernces head
208
+ */?>
209
+
210
+ <?php $collection = $this->getBannercollection("modernslide")
211
+ ->setOrder('orderid','ASC');?>
212
+ <?php
213
+ /*
214
+ * get all admin defined value for modern slider banner
215
+ */
216
+ ?>
217
+
218
+ <script type="text/javascript">
219
+ var jq=jQuery.noConflict();
220
+ jq(document).ready(function(){
221
+ var options = {
222
+ nextButton:<?php if($this->nextButton): echo $this->nextButton; else: ?>true<?php endif;?>,
223
+ prevButton: <?php if($this->prevButton): echo $this->prevButton; else: ?>true<?php endif;?>,
224
+ pagination: <?php if($this->pagination): echo $this->pagination; else: ?>true<?php endif;?>,
225
+ animateStartingFrameIn:<?php if($this->animateStartingFrameI): echo $this->animateStartingFrameI; else: ?>true<?php endif;?>,
226
+ autoPlay:<?php if($this->autoPlay): echo $this->autoPlay; else: ?>true<?php endif;?>,
227
+ autoPlayDelay:<?php if($this->autoPlayDelay): echo $this->autoPlayDelay; else: ?>3000<?php endif;?>,
228
+ preloader: <?php if($this->preloader): echo $this->preloader; else: ?>true<?php endif;?>,
229
+ preloadTheseFrames: [1],
230
+ preloadTheseImages: [
231
+ "images/tn-model1.png",
232
+ "images/tn-model2.png",
233
+ "images/tn-model3.png"
234
+ ]
235
+ };
236
+
237
+ var mySequence = jq("#sequence").sequence(options).data("sequence");
238
+ });
239
+ </script>
240
+ <script>
241
+ if (typeof jQuery == 'undefined'){
242
+ document.write(unescape('%3Cscript src="scripts/jquery-min.js" %3E%3C/script%3E'));
243
+ }
244
+ </script>
245
+
246
+ <div class="sequence-theme">
247
+ <div id="sequence">
248
+
249
+
250
+
251
+ <?php if(Mage::getStoreConfig('bannerresponsive/modersslidersetting/aerrowleftmodernimage')) { ?>
252
+ <img class="sequence-prev" src="<?php echo Mage::getBaseUrl("media").'adam/images/'.Mage::getStoreConfig('bannerresponsive/modersslidersetting/aerrowleftmodernimage');?>" alt="Previous Frame" />
253
+ <?php } else {?>
254
+ <img class="sequence-prev" src="<?php echo $this->getSkinUrl("images/bt-prev.png")?>" alt="Previous Frame" />
255
+ <?php } ?>
256
+
257
+ <?php if(Mage::getStoreConfig('bannerresponsive/modersslidersetting/aerrowrightmodernimage')) { ?>
258
+ <img class="sequence-next" src="<?php echo Mage::getBaseUrl("media").'adam/images/'.Mage::getStoreConfig('bannerresponsive/modersslidersetting/aerrowrightmodernimage');?>" alt="Next Frame" />
259
+ <?php } else {?>
260
+ <img class="sequence-next" src="<?php echo $this->getSkinUrl("images/bt-next.png")?>" alt="Previous Frame" />
261
+ <?php } ?>
262
+
263
+ <ul class="sequence-canvas">
264
+ <?php $i=0;foreach($collection as $collection1)
265
+ { ?><h2 class="title">Built using Sequence.js</h2>
266
+ <li <?php if($i==0):?>class="animate-in" <?php endif;?>>
267
+
268
+ <?php if($collection1['title']):?>
269
+ <h2 class="title"><?php echo $collection1['title']; ?></h2>
270
+ <?php endif;?>
271
+
272
+ <?php if($collection1['content']):?>
273
+ <h3 class="subtitle"><?php echo $collection1['content']; ?></h3>
274
+ <?php endif;?>
275
+ <img class="model" src="<?php echo Mage::getBaseUrl("media").'bannerimages/'.$collection1['filename'] ?>"/></li>
276
+ <?php } ?>
277
+ <!-- <li class="animate-in">
278
+ <h2 class="title">Built using Sequence.js</h2>
279
+ <h3 class="subtitle">The Responsive Slider with Advanced CSS3 Transitions</h3>
280
+ <img class="model" src="http://localhost/corephp/sliders/jquery.bxslider/m/images/model1.png" alt="Model 1" />
281
+ </li>
282
+ -->
283
+
284
+ </ul>
285
+
286
+ <ul class="sequence-pagination">
287
+ <?php foreach($collection as $collection1)
288
+ { ?>
289
+ <li><img style="max-height: 140px !important; " class="model" src="<?php echo Mage::getBaseUrl("media").'bannerimages/'.$collection1['filename'] ?>"/></li>
290
+ <?php } ?>
291
+ </ul>
292
+
293
+ </div>
294
+ </div>
295
+ <?php elseif($this->helper('bannerresponsive')->Bannertype()== "cameraslider") :?>
296
+
297
+
298
+ <?php
299
+ $collection = $this->getBannercollection("cameraslider")
300
+ ->setOrder('orderid','ASC');?>
301
+ <style>
302
+
303
+ #back_to_camera {
304
+ clear: both;
305
+ display: block;
306
+ height: 80px;
307
+ line-height: 40px;
308
+ padding: 20px;
309
+ }
310
+ .fluid_container {
311
+ margin: 0 auto;
312
+ max-width: 1000px;
313
+ width: 90%;
314
+ }
315
+
316
+ .camera_prev > span {background: url("<?php echo Mage::getBaseUrl("media").'adam/images/'.Mage::getStoreConfig('bannerresponsive/cameraslider/aerrowimage');?>") no-repeat 0 0;
317
+ display: block;height: 40px;width: 40px;}
318
+ .camera_next > span{background: url("<?php echo Mage::getBaseUrl("media").'adam/images/'.Mage::getStoreConfig('bannerresponsive/cameraslider/aerrowimage');?>") no-repeat 0 0;display: block;height: 40px;width: 40px;}
319
+ </style>
320
+ <link rel='stylesheet' id='camera-css' href='<?php echo $this->getSkinUrl("css/responsivebanner/camera.css");?>' type='text/css'/>
321
+ <script type='text/javascript' src='<?php echo $this->getSkinUrl("js/scripts/jquery.mobile.customized.min.js")?>'></script>
322
+ <script type='text/javascript' src='<?php echo $this->getSkinUrl("js/scripts/jquery.easing.1.3.js")?>'></script>
323
+ <script type='text/javascript' src='<?php echo $this->getSkinUrl("js/scripts/camera.min.js")?>'></script>
324
+ <script>
325
+ var jq = jQuery.noConflict();
326
+ jq(function(){
327
+
328
+ jq('#camera_wrap_1').camera({
329
+ thumbnails: <?php if(isset($this->thaumbNails)): echo $this->thaumbNails; else: ?>false<?php endif;?>,
330
+ pagination :<?php if(isset($this->paginationcameara)): echo $this->paginationcameara; else: ?>false<?php endif;?>,
331
+ loader: '<?php if(isset($this->loader)): echo $this->loader; else: ?>pie<?php endif;?>',
332
+ height: '<?php if(isset($this->height)): echo $this->height; else: ?>400<?php endif;?>',
333
+ time:'<?php if(isset($this->time)): echo $this->time; else: ?>8000<?php endif;?>',
334
+ piePosition:'<?php if(isset($this->piePosition)): echo $this->hepiePosition; else: ?>rightTop<?php endif;?>',
335
+ barDirection:'<?php if(isset($this->barDirection)): echo $this->barDirection; else: ?>leftToRight<?php endif;?>',
336
+ barPosition:'<?php if(isset($this->barPosition)): echo $this->barPosition; else: ?>bottom<?php endif;?>',
337
+ fx:'<?php if(isset($this->fx)): echo $this->fx; else: ?>bottom<?php endif;?>'
338
+
339
+
340
+ });
341
+
342
+
343
+ });
344
+ </script>
345
+
346
+
347
+
348
+
349
+ <div class="fluid_container">
350
+ <div class="camera_wrap camera_azure_skin" id="camera_wrap_1">
351
+ <?php foreach($collection as $collection1) { ?>
352
+ <div data-thumb="<?php echo Mage::getBaseUrl("media").'bannerimages/thumbs/'.$collection1['filename'] ?>" data-src="<?php echo Mage::getBaseUrl("media").'bannerimages/'.$collection1['filename'] ?>">
353
+ <div class="camera_caption fadeFromBottom">
354
+ <?php if($collection1):?>
355
+ <?php echo $collection1['content']; ?>
356
+ <?php endif;?>
357
+ </div>
358
+ </div>
359
+ <?php } ?>
360
+
361
+ </div><!-- #camera_wrap_1 -->
362
+
363
+
364
+ </div><!-- .fluid_container -->
365
+ <?php endif;?>
366
+ <?php endif;?>
app/design/frontend/default/default/template/bannerresponsive/bannerresponsivecamera.phtml ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * banner module
4
+ * extesnion developing under clarion c
5
+ */
6
+ ?>
7
+ <?php if($this->helper('bannerresponsive')->Isbannerenable() == 1 ):?>
8
+ <?php
9
+ $collection = $this->getBannercollection("cameraslider")
10
+ ->setOrder('orderid','ASC');?>
11
+ <style>
12
+
13
+ #back_to_camera {
14
+ clear: both;
15
+ display: block;
16
+ height: 80px;
17
+ line-height: 40px;
18
+ padding: 20px;
19
+ }
20
+ .fluid_container {
21
+ margin: 0 auto;
22
+ max-width: 1000px;
23
+ width: 90%;
24
+ }
25
+
26
+ .camera_prev > span {background: url("<?php echo Mage::getBaseUrl("media").'adam/images/'.Mage::getStoreConfig('bannerresponsive/cameraslider/aerrowimage');?>") no-repeat 0 0;
27
+ display: block;height: 40px;width: 40px;}
28
+ .camera_next > span{background: url("<?php echo Mage::getBaseUrl("media").'adam/images/'.Mage::getStoreConfig('bannerresponsive/cameraslider/aerrowimage');?>") no-repeat 0 0;display: block;height: 40px;width: 40px;}
29
+ </style>
30
+ <link rel='stylesheet' id='camera-css' href='<?php echo $this->getSkinUrl("css/responsivebanner/camera.css");?>' type='text/css'/>
31
+ <script type='text/javascript' src='<?php echo $this->getSkinUrl("js/scripts/jquery.mobile.customized.min.js")?>'></script>
32
+ <script type='text/javascript' src='<?php echo $this->getSkinUrl("js/scripts/jquery.easing.1.3.js")?>'></script>
33
+ <script type='text/javascript' src='<?php echo $this->getSkinUrl("js/scripts/camera.min.js")?>'></script>
34
+ <script>
35
+ var jq = jQuery.noConflict();
36
+ jq(function(){
37
+
38
+ jq('#camera_wrap_sepeearatecamera').camera({
39
+ thumbnails: <?php if(isset($this->thaumbNails)): echo $this->thaumbNails; else: ?>false<?php endif;?>,
40
+ pagination :<?php if(isset($this->paginationcameara)): echo $this->paginationcameara; else: ?>false<?php endif;?>,
41
+ loader: '<?php if(isset($this->loader)): echo $this->loader; else: ?>pie<?php endif;?>',
42
+ height: '<?php if(isset($this->height)): echo $this->height; else: ?>400<?php endif;?>',
43
+ time:'<?php if(isset($this->time)): echo $this->time; else: ?>8000<?php endif;?>',
44
+ piePosition:'<?php if(isset($this->piePosition)): echo $this->hepiePosition; else: ?>rightTop<?php endif;?>',
45
+ barDirection:'<?php if(isset($this->barDirection)): echo $this->barDirection; else: ?>leftToRight<?php endif;?>',
46
+ barPosition:'<?php if(isset($this->barPosition)): echo $this->barPosition; else: ?>bottom<?php endif;?>',
47
+ fx:'<?php if(isset($this->fx)): echo $this->fx; else: ?>bottom<?php endif;?>'
48
+
49
+
50
+ });
51
+
52
+
53
+ });
54
+ </script>
55
+
56
+
57
+
58
+
59
+ <div class="fluid_container">
60
+ <div class="camera_wrap camera_azure_skin" id="camera_wrap_sepeearatecamera">
61
+ <?php foreach($collection as $collection1) { ?>
62
+ <div data-thumb="<?php echo Mage::getBaseUrl("media").'bannerimages/thumbs/'.$collection1['filename'] ?>" data-src="<?php echo Mage::getBaseUrl("media").'bannerimages/'.$collection1['filename'] ?>">
63
+ <div class="camera_caption fadeFromBottom">
64
+ <?php if($collection1):?>
65
+ <?php echo $collection1['content']; ?>
66
+ <?php endif;?>
67
+ </div>
68
+ </div>
69
+ <?php } ?>
70
+
71
+ </div><!-- #camera_wrap_1 -->
72
+
73
+
74
+ </div><!-- .fluid_container -->
75
+ <?php endif;?>
app/design/frontend/default/default/template/bannerresponsive/bannerresponsivetypmodern.phtml ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * banner module
4
+ * extesnion developing under clarion c
5
+ */
6
+ ?>
7
+ <?php if($this->helper('bannerresponsive')->Isbannerenable() == 1 ):?>
8
+ <?php
9
+ /*
10
+ * added js and css files you can also put this in xml file under refernces head
11
+ */?>
12
+
13
+ <script type="text/javascript" src="<?php echo $this->getSkinUrl("js/responsiveslider/jquery.sequence-min.js")?>"></script>
14
+
15
+ <link rel="stylesheet" href="<?php echo $this->getSkinUrl("css/responsivebanner/sequencejs-theme.modern-slide-in.css");?>" type="text/css"/>
16
+
17
+
18
+
19
+ <?php
20
+ /*
21
+ * added js and css files you can also put this in xml file under refernces head
22
+ */?>
23
+
24
+ <?php $collection = $this->getBannercollection("modernslide")
25
+ ->setOrder('orderid','ASC');?>
26
+ <?php
27
+ /*
28
+ * get all admin defined value for modern slider banner
29
+ */
30
+ ?>
31
+
32
+ <script type="text/javascript">
33
+ var jq=jQuery.noConflict();
34
+ jq(document).ready(function(){
35
+ var options = {
36
+ nextButton:<?php if($this->nextButton): echo $this->nextButton; else: ?>true<?php endif;?>,
37
+ prevButton: <?php if($this->prevButton): echo $this->prevButton; else: ?>true<?php endif;?>,
38
+ pagination: <?php if($this->pagination): echo $this->pagination; else: ?>true<?php endif;?>,
39
+ animateStartingFrameIn:<?php if($this->animateStartingFrameI): echo $this->animateStartingFrameI; else: ?>true<?php endif;?>,
40
+ autoPlay:<?php if($this->autoPlay): echo $this->autoPlay; else: ?>true<?php endif;?>,
41
+ autoPlayDelay:<?php if($this->autoPlayDelay): echo $this->autoPlayDelay; else: ?>3000<?php endif;?>,
42
+ preloader: <?php if($this->preloader): echo $this->preloader; else: ?>true<?php endif;?>,
43
+ preloadTheseFrames: [1],
44
+ preloadTheseImages: [
45
+ "images/tn-model1.png",
46
+ "images/tn-model2.png",
47
+ "images/tn-model3.png"
48
+ ]
49
+ };
50
+
51
+ var mySequence = jq("#sequenceseperate").sequence(options).data("sequenceseperate");
52
+ });
53
+ </script>
54
+ <script>
55
+ if (typeof jQuery == 'undefined'){
56
+ document.write(unescape('%3Cscript src="scripts/jquery-min.js" %3E%3C/script%3E'));
57
+ }
58
+ </script>
59
+
60
+ <div class="sequence-theme" style="clear: both !important;">
61
+ <div id="sequenceseperate">
62
+
63
+
64
+
65
+
66
+ <img class="sequence-prev" src="<?php echo Mage::getBaseUrl("media").'adam/images/'.Mage::getStoreConfig('bannerresponsive/modersslidersetting/aerrowleftmodernimage');?>" alt="Previous Frame" />
67
+ <img class="sequence-next" src="<?php echo Mage::getBaseUrl("media").'adam/images/'.Mage::getStoreConfig('bannerresponsive/modersslidersetting/aerrowrightmodernimage');?>" alt="Next Frame" />
68
+
69
+ <ul class="sequence-canvas">
70
+ <?php $i=0;foreach($collection as $collection1)
71
+ { ?>
72
+ <li <?php if($i==0):?>class="animate-in" <?php endif;?>>
73
+ <?php if($collection1['title']):?><h2 class="title"><?php echo $collection1['title']; ?></h2><?php endif;?>
74
+ <?php if($collection1['content']):?>
75
+ <h3 class="subtitle"><?php echo $collection1['content']; ?></h3>
76
+ <?php endif;?>
77
+ <img class="model" src="<?php echo Mage::getBaseUrl("media").'bannerimages/'.$collection1['filename'] ?>"/></li>
78
+ <?php } ?>
79
+ <!-- <li class="animate-in">
80
+ <h2 class="title">Built using Sequence.js</h2>
81
+ <h3 class="subtitle">The Responsive Slider with Advanced CSS3 Transitions</h3>
82
+ <img class="model" src="http://localhost/corephp/sliders/jquery.bxslider/m/images/model1.png" alt="Model 1" />
83
+ </li>
84
+ -->
85
+
86
+ </ul>
87
+
88
+ <ul class="sequence-pagination">
89
+ <?php foreach($collection as $collection1)
90
+ { ?>
91
+ <li><img style="max-height: 140px !important; " class="model" src="<?php echo Mage::getBaseUrl("media").'bannerimages/'.$collection1['filename'] ?>"/></li>
92
+ <?php } ?>
93
+ </ul>
94
+
95
+ </div>
96
+ </div>
97
+ <?php endif;?>
app/etc/modules/Clarion_Bannerresponsive.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Clarion_Bannerresponsive>
5
+ <active>true</active>
6
+ <codePool>local</codePool>
7
+ </Clarion_Bannerresponsive>
8
+ </modules>
9
+ </config>
media/adam/images/default/bt-next.png ADDED
Binary file
media/adam/images/default/bt-next_1.png ADDED
Binary file
media/adam/images/default/bt-prev.png ADDED
Binary file
media/adam/images/default/bt-prev_1.png ADDED
Binary file
media/adam/images/default/camera_skins.png ADDED
Binary file
media/adam/images/default/leaf.jpg ADDED
Binary file
media/bannerimages/big_bunny_fake.jpg ADDED
Binary file
media/bannerimages/bridge.jpg ADDED
Binary file
media/bannerimages/chakasas.jpg ADDED
Binary file
media/bannerimages/images_1_.jpg ADDED
Binary file
media/bannerimages/medium/big_bunny_fake.jpg ADDED
Binary file
media/bannerimages/medium/bridge.jpg ADDED
Binary file
media/bannerimages/medium/chakasas.jpg ADDED
Binary file
media/bannerimages/medium/road.jpg ADDED
Binary file
media/bannerimages/medium/young-girl-holding-long-vertical-banner-6719737.jpg ADDED
Binary file
media/bannerimages/model2.png ADDED
Binary file
media/bannerimages/model3.png ADDED
Binary file
media/bannerimages/road.jpg ADDED
Binary file
media/bannerimages/s1_1.jpg ADDED
Binary file
media/bannerimages/slider_pic1.jpg ADDED
Binary file
media/bannerimages/thumbs/big_bunny_fake.jpg ADDED
Binary file
media/bannerimages/thumbs/bridge.jpg ADDED
Binary file
media/bannerimages/thumbs/chakasas.jpg ADDED
Binary file
media/bannerimages/thumbs/model2.png ADDED
Binary file
media/bannerimages/thumbs/model3.png ADDED
Binary file
media/bannerimages/thumbs/road.jpg ADDED
Binary file
media/bannerimages/thumbs/s1_1.jpg ADDED
Binary file
media/bannerimages/thumbs/slider_pic1.jpg ADDED
Binary file
media/bannerimages/thumbs/young-girl-holding-long-vertical-banner-6719737.jpg ADDED
Binary file
media/bannerimages/young-girl-holding-long-vertical-banner-6719737.jpg ADDED
Binary file
package.xml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>clarion_responsiveslider</name>
4
+ <version>1.0.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Advanced banner sliders along with bx sliders ,camera sliders and modern sliders.</summary>
10
+ <description>Advanced banner sliders along with bx sliders ,camera sliders and modern sliders .you can select any one sliders as per you there are lot of attributes you can set from admin.&amp;#xD;&#xD;
11
+ this is vast and you can also call individual banner sliders.you can call banner in any cms page for this you need to only put this code &amp;#xD;&#xD;
12
+ {{block type="bannerresponsive/bannerresponsive" name="bannerresponsive" template="bannerresponsive/bannerresponsive.phtml" }}</description>
13
+ <notes>Clarion_Bannersliders 1.0.0 version</notes>
14
+ <authors><author><name>kushagra daharwal</name><user>kushagra</user><email>kushagra.daharwal@clariontechnologies.co.in</email></author></authors>
15
+ <date>2014-03-07</date>
16
+ <time>13:23:17</time>
17
+ <contents><target name="magelocal"><dir name="Clarion"><dir name="Bannerresponsive"><dir name="Block"><dir name="Adminhtml"><dir name="Bannerresponsive"><dir name="Edit"><file name="Form.php" hash="a8439244488a72d4005d0b2d2c45ed14"/><dir name="Tab"><file name="Form.php" hash="ef057e7280c6feabfa3ea025da829787"/></dir><file name="Tabs.php" hash="e45f0ea89376e8ef6a1b38e5b7539220"/></dir><file name="Edit.php" hash="c16a3a425710c4ee361e2269181d15a4"/><file name="Grid.php" hash="8e7a6f1da9867c14cd2faa2620c9a150"/><dir name="Renderer"><file name="Image.php" hash="87c1718cbe9d3839382a23bc78aef900"/></dir></dir><file name="Bannerresponsive.php" hash="939ceb17d18ce8b385cc0001367fb4b3"/><dir name="Entity"><dir name="Helper"><file name="Image.php" hash="79f47f726453cb29a798a8175d1d4cb8"/></dir></dir><dir name="Grid"><dir name="Renderer"><file name="Image - Copy.php" hash="d8c80841c94c104c694bdce80fa21c9b"/><file name="Image.php" hash="d8c80841c94c104c694bdce80fa21c9b"/></dir></dir></dir><file name="Bannerresponsive.php" hash="daca17ac3fd7de66f65795fe3f077c31"/></dir><dir name="Helper"><file name="Data.php" hash="6fb4fdf5b740ba9d57dac4f35f29551e"/></dir><dir name="Model"><file name="Bannereffectoption.php" hash="141fad921b4d4e9ca562d627b71e5d30"/><file name="Bannerresponsive.php" hash="5a3036b5398b02d9565d84c8b87d10b0"/><file name="Bannerslidingoptions.php" hash="b0f5eee6f7e8a0f507df83eb798b4ebb"/><file name="Camerabardirection.php" hash="dbc77622a7860bfe351b3a40fa9df5a7"/><file name="Camerabarposistion.php" hash="6fc31326fba236c5343f73485aa0aba9"/><file name="Camerafx.php" hash="aab6156a00540935fef04dd0cb80715c"/><file name="Cameraloader.php" hash="36557ceace5a0ebb407279f13b22ac18"/><file name="Camerapieposition.php" hash="2f6f89c75de3ad828251d658c898dcb3"/><dir name="Mysql4"><dir name="Bannerresponsive"><file name="Collection.php" hash="3f9b2c3435da13eddcc98df87d6c272c"/></dir><file name="Bannerresponsive.php" hash="731f89ff54873440bdad403c1a771055"/></dir><file name="Status.php" hash="d2b4bd0509e916b757f0f0ca53d9caa7"/><file name="Truefalseall.php" hash="f50b2fcf67bb13745db7cabb621133bc"/><file name="Typebanners.php" hash="17803ad71d3ec498603d509c61447299"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="BannerresponsiveController - Copy.php" hash="5c53d926aeda2e9a52854ad7da85bfbe"/><file name="BannerresponsiveController.php" hash="82cfb0c205b1f23117947edac0e518cc"/></dir><file name="IndexController.php" hash="7ef450ede084b1c46efa8c8a64190286"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6b8c564cdc2e8e19b98142f744e2326c"/><file name="config.xml" hash="35d9d17acea4a841d325e3ad30ecbca6"/><file name="system.xml" hash="dec104d5324d8db4e67168ffb577b2b1"/></dir><dir name="sql"><dir name="bannerresponsive_setup"><file name="mysql4-install-0.1.0.php" hash="6e1d3814fb4d63e347db48c2328d84ed"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Clarion_Bannerresponsive.xml" hash="bcdb9712955963d2cf79b8d85469b265"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="bannerresponsive.xml" hash="24e2872605f3d8b76f80531ef46789c7"/></dir><dir name="template"><dir name="bannerresponsive"><file name="bannerresponsive.phtml" hash="6b413bcd3c36a2f6ccd4dfd41489dd11"/><file name="bannerresponsivecamera.phtml" hash="729b3c4cc5b295a67a67c3cefb431454"/><file name="bannerresponsivetypmodern.phtml" hash="17ec8eb825d7986849aa8ebeca09d101"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="bannerresponsive.xml" hash="25428250da337a0df1ded761b76baa74"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="default"><dir name="default"><dir name="css"><dir name="responsivebanner"><file name="camera.css" hash="31cfc0603c2590c1c39624f954ab9e61"/><dir name="images"><file name="01(1).png" hash="23e1e17bebdf2bdbf6067f63273af438"/><file name="01.jpg" hash="078466c13c3b3df7e8ac8bdebd5cb932"/><file name="01.png" hash="3308da39f4175a19ff40018caea16373"/><file name="02(1).png" hash="8ce7e2e345499243bc4b0950d3460c8a"/><file name="02(2).jpg" hash="9c903d45db2cf24fcff066a6a40a2752"/><file name="02.jpg" hash="47d5c83a16e8028d6e6170df958ba6d9"/><file name="02.png" hash="3cf9122223615d4c0e3d275698f4d85b"/><file name="03(1).png" hash="50f6b3219dbb94ab172681c50f27a4d1"/><file name="03.jpg" hash="9ce9f6a2cc4f17f2e8e2d9dee2d4b4e9"/><file name="03.png" hash="90eb30ef0071544b4175da0f99b7302a"/><file name="04.png" hash="1f74ad2b71860ca4e6912aa00fa6a25a"/><file name="150115-1356942247.png" hash="2192574bb5d11f51f271857a5212e942"/><file name="1_1.jpg" hash="040ab8d89bdc7459813456d3cfc28474"/><file name="1a.png" hash="8fc5703c418b28204d87c276937b1010"/><file name="1b.jpg" hash="f9117fff562054d56c7c1ec8dd87ec61"/><file name="1b.png" hash="b458d793bc38cadb34fc5916e1000b45"/><file name="1c.png" hash="ae83674204da06edc96c7165ef61d1cd"/><file name="216840-0129_1(1).jpg" hash="8a89f627ec891b9bd37d4b6a7fc3e3e9"/><file name="216840-0129_1.jpg" hash="e78bc4449a2380520813529d9c616e83"/><file name="271669-0054_1(1).jpg" hash="c91b8e85ef5f9bc1e4ba4c0c18b9fa11"/><file name="271669-0054_1.jpg" hash="0b4ad6ab349b604c3333a2f0120810ce"/><file name="2a.png" hash="575e004c6f0347407a2d2e01d342318a"/><file name="2b_2.jpg" hash="a9655bcf0d93af155f644554634aa0f8"/><file name="3a.jpg" hash="306f9f9592e78e919db0698d84d84dea"/><file name="3b(1).jpg" hash="b9de9e66051a9f7036a4f874c93bfe36"/><file name="3b.jpg" hash="a607b54efe80fac6bcd426f815c4cc69"/><file name="3bb.jpg" hash="b869ec24ef897d30c7eb2f4fa6daea0e"/><file name="3c.jpg" hash="fb4f2fc8565e0901a9a70250023d1da8"/><file name="428338-0029_1.jpg" hash="677b7a5c2a0e142499d9c0a1d51c3ad1"/><file name="428357-0001_1_1_1.jpg" hash="f82abb28690e90485aa2505ecd4a89a0"/><file name="428374-0023_1_1.jpg" hash="3d5aa8f5ab34f331187ca4e0d0473082"/><file name="428381-0001_1_1.jpg" hash="543edd297336856f260354da08223753"/><file name="428446-0067_1_1_1_1_1.jpg" hash="e3a07d2acdc5b81ce750e0a50f9c3e69"/><file name="428507-0066_1_1.jpg" hash="a3343719142d7915570e6062b4bc7ddc"/><file name="4_3.jpg" hash="92db0a9a528c282c0289fbddb728f679"/><file name="4c.jpg" hash="183e451c53e092518eaf4ee2f063b685"/><file name="546029-0013_1_2.jpg" hash="399e15ce1371ccd26c4e1f607886672c"/><file name="6.jpg" hash="e7ac8dca213f54e3ea24a0420b7393ac"/><file name="677188-0067_1(1).jpg" hash="ebc6ce094442f39efccf1f234dd0141e"/><file name="677188-0067_1.jpg" hash="379617ee8d98c1342f2e2a23f9069b82"/><file name="734198-0056_1_2.jpg" hash="2559fc38601098d9cf7aac8590d0ef8f"/><file name="7e7013467a0aaa9b190144598ee32819.js" hash="65b58d32a03800808f45e9d670377249"/><file name="857055-0115_1_2.jpg" hash="f6d44ea64246d78b7ff054a1f3463e21"/><file name="870044-0032_1_2.jpg" hash="7bf802d4579597424560ca71cda47ef0"/><file name="917397-0134_1_1_1_1.jpg" hash="a1d8da4bf4d08020aedf734f647606b1"/><file name="928172-0484_1.jpg" hash="a068be35ca52a5d004b8af18078c58a5"/><file name="996093-0100_1(1).jpg" hash="a2840bbc35ffe21de3293bbf3d95651a"/><file name="996093-0100_1.jpg" hash="7109557a5f136eb4a1972bc334a6c5da"/><file name="a7629b8024b8ff12739117f186c33375.css" hash="6d2a95b9818d5ae0880c63d2625a7b6a"/><file name="active_bg.png" hash="612a957cd06ea13d497c1e6ebb7d2277"/><file name="apple.png" hash="d7539721a37f2b31172622a6b0043856"/><file name="arrows.png" hash=""/><file name="banner1.jpg" hash="e0d1d28c24647c46e82dba2d60f80d6b"/><file name="banner2.jpg" hash="396bc981763d60416c81f6edf64aaab2"/><file name="banner3.jpg" hash="cab692165094ae47d8b6fecd157803e5"/><file name="bg-sequence.jpg" hash="b48a2495f724c7fbd4a0e398f02259c0"/><file name="bluelogo.png" hash="5f77f4b7921a9a371c17a03cc1107e39"/><file name="brandisimi.png" hash="788e2ec1a3a58e4a2f2cc8c52a92d26a"/><file name="bt-next.png" hash="0c5b4112464e22e295296553180c2521"/><file name="bt-prev.png" hash="390b2c5a06a3913132c57766fc5c2834"/><file name="bullets.png" hash=""/><file name="bx_loader.gif" hash="931bdb6b50816b03206c66921760b246"/><file name="camera_skins.png" hash="44234b21bebe6b318aab47d9e9bbbee9"/><file name="company.png" hash="a10c66ef91959425696acdfbc2c3f1a1"/><file name="controls.png" hash="d9d25372f38c6b242b9b51d5841fe86e"/><file name="css" hash="eccdade94df7d33a51cbaf1610889ffa"/><file name="divider.png" hash="769c10276e1ee812749746a337b7634e"/><file name="f6e62d1da07bb38772c4bacfcef59296.css" hash="0915e59a9bfc9dff7c8250a977968c20"/><file name="ga.js" hash="20cad36e4a2237583e87e2d0c9b2903d"/><file name="hill_road.jpg" hash="2cf1710b8829ea6960d5a85908269141"/><file name="hill_trees.jpg" hash="29912a999a003cb690fee27840b689b3"/><file name="houses.jpg" hash="241ada60afd38f837a2aa4c94a948ec8"/><file name="loading.gif" hash=""/><file name="logo-small.png" hash="6b664b1defb99f6b990d169a3a638b75"/><file name="logo.png" hash="3f32d28a9592ead6459b03dd0c91d0d3"/><file name="logofashion.png" hash="d2092437b394c6ba02210c4e16d5d913"/><file name="me_trees.jpg" hash="b5559ea40855c8dbfadefb140ac5bac2"/><file name="menu.png" hash="8243eb45bf3e3acc79e8f36fe2007027"/><file name="model1.png" hash="962ec8bbc4ea21eb95fb3484a9072fac"/><file name="model2.png" hash="7e9d171e9d19ff2b6de53ea4d8f2997c"/><file name="model3.png" hash="d8f19ad54353f80d87f453eb949f7eb4"/><file name="mountain.jpg" hash="bbd7f2c8863b2d33133dd3afbe014204"/><file name="paintbrush.png" hash="c6aa31b67451030ffb7d49bb8dcf15a6"/><file name="panel.jpg" hash="cc6b5d1d3995e0ef77be642a4c2776cf"/><file name="pause-icon.png" hash="3f60ed4cedfeecf057276b78c3f63ea2"/><file name="payment.gif" hash="d872c1365f432907e9d1c44a8e948bf5"/><file name="phone01_3.jpg" hash="c078161aad685660d2d7e6d542846d8b"/><file name="phone01a_2.jpg" hash="f983291df315596875a9508782cef27c"/><file name="phone03.jpg" hash="1a78109e6cc403e1a76617da61ea17b0"/><file name="phone05_2.jpg" hash="3f3ffdee0ea911ced01ffb723aceffe9"/><file name="phone06_2.jpg" hash="eb4d86093915ec63412957ff3aab3d94"/><file name="phone06a.jpg" hash="fa9f4c20bec3e2392f94d93e68352913"/><file name="phone07a_2.jpg" hash="c812c1b89bd0e218e232afb24185eede"/><file name="phone09_1.jpg" hash="00e7e2150aee257dfbc1f699c1bc86ef"/><file name="phone10.jpg" hash="af16156f4f096fb524425f756aff0c44"/><file name="pic_bg.png" hash="4fd7dd66a9fb76be9f5ba87f81e5619d"/><file name="publisher.png" hash="6d910bf0415436861a230267f9ecfc53"/><file name="responsive.png" hash="0a653c99c85fc2aa1d7ca19eac28d7b0"/><file name="s1_1.jpg" hash="ecec6d97bfadd135d29bf033a37d47a8"/><file name="s1_2.jpg" hash="0b174e6a4d0cede24055c0a66f7a74a8"/><file name="s1_3.jpg" hash="5436fd0118d494322aad4bccbd600559"/><file name="s1_4.png" hash="00fd7df08600fefbb8490454e773344e"/><file name="s3_1.jpg" hash="1e9fdec27c36208e5f3ae594a5b9e532"/><file name="s3_2.png" hash="e722db4f23a33ddaca272e9f9abb134e"/><dir name="sample_slides"><file name="imac.jpg" hash="bb6ef6c557240838dffb0c3db86e5f54"/><file name="info.jpg" hash="a2f951c52cf25a49bf3fdfba4b43a20d"/><file name="iphone.jpg" hash="4379361559b3c0e87d73abfe17ad91fc"/><file name="macbook.jpg" hash="937d3ff84a0f8e2b80b3577748bb308f"/><file name="thumb_about.png" hash="0e03eedd28610d3574300adf14270706"/><file name="thumb_imac.png" hash="fbf82587338f797ad139d5b0159208b3"/><file name="thumb_iphone.png" hash="c8b253b0a77c14d4abdffa85235f148b"/><file name="thumb_macbook.png" hash="28d81446c3f50f13d5a8ed93740f0feb"/></dir><file name="samplemanufacturer.png" hash="850bc0df84417a980a1ddab22bff8f4e"/><file name="samsung.png" hash="4fef0f310242bcf29ff6ac6ddb15e39c"/><file name="sequence-logo.png" hash="a9c0fdd0e96f896c0b14b93e2700507c"/><file name="slider_pic1.jpg" hash="721db89856581a0f85bbac2b42e4c1ca"/><file name="slider_pic2.jpg" hash="e8cd471e7452c6ac3eb8cd083758ab2a"/><file name="soundwave.png" hash="a578315fab89d5edba366a82571c64f3"/><file name="thebrand.png" hash="a078c8bfe43433214d044bfd0f0b76c1"/><file name="tn-model1.png" hash="0b2144fad1ce5f52f858d0bc6ac3cb9a"/><file name="tn-model2.png" hash="50608c6133cead7726f905723b246d57"/><file name="tn-model3.png" hash="0591a4b7534fec2553be2343fa52482c"/><file name="tree_root.jpg" hash="858d2fff7e073eea432ea141c3a534cf"/><file name="trees.jpg" hash="5bf3ff7800d78b9fc6f7401abd8a7b12"/></dir><file name="jquery.bxslider.css" hash="0e97524a87bac1c6538097eb64f64b83"/><file name="sequencejs-theme.modern-slide-in.css" hash="62b1e9f9dce34038ef137768778922c0"/><file name="stylesresposive.css" hash="3e64289cd4f09a94daebaa0839ea0871"/></dir></dir><dir name="js"><dir name="responsiveslider"><file name="jquery.bxslider.js" hash="3f6612a05317aaf468eda198256a2b09"/><file name="jquery.bxslider.min.js" hash="b860635957ed570deb2cf994bd9a4913"/><file name="jquery.easing.min.js" hash="ec64dc8377266f617caf00ebc5067a14"/><file name="jquery.js" hash="64ccc18a39b08bee148cf0db4e6cd1b1"/><file name="jquery.sequence-min.js" hash="44e053ab71ae98f377453d063965bef1"/><file name="jquerynocon.js" hash="3179f2255b046d5f2e9a71e365287bef"/><file name="script.js" hash="6733eec80dca935d94807840811fb794"/><file name="sequencejs-options.modern-slide-in.js" hash="4cfff69ff35ecae53ffb72e9f8886f76"/></dir></dir><dir name="images"><file name="bt-prev.png" hash="390b2c5a06a3913132c57766fc5c2834"/><file name="bt-next.png" hash="0c5b4112464e22e295296553180c2521"/><file name="camera_skins.png" hash="44234b21bebe6b318aab47d9e9bbbee9"/></dir></dir></dir></dir></target><target name="magemedia"><dir name="bannerimages"><file name="big_bunny_fake.jpg" hash="68f5f882e02463438fe4f7eeb8d09877"/><file name="bridge.jpg" hash="08a87b2a0ad8e733fbad7704c766a3f5"/><file name="chakasas.jpg" hash="247a660a04962cf19ab4feca0fefdd7a"/><file name="images_1_.jpg" hash="247a660a04962cf19ab4feca0fefdd7a"/><dir name="medium"><file name="big_bunny_fake.jpg" hash="4d172507df4cdc4e38f831239976546f"/><file name="bridge.jpg" hash="eb344e5219471f47c636c1b1f846d2e5"/><file name="chakasas.jpg" hash="7b39df0d4bc7660472762995d74fb997"/><file name="road.jpg" hash="53994b7a933ef4c078d59833e5b363aa"/><file name="young-girl-holding-long-vertical-banner-6719737.jpg" hash="9270537389bc9e425065b7f3fdd033ae"/></dir><file name="model2.png" hash="7e9d171e9d19ff2b6de53ea4d8f2997c"/><file name="model3.png" hash="d8f19ad54353f80d87f453eb949f7eb4"/><file name="road.jpg" hash="efb0e111c0d3006d539b7fbbc1cf5991"/><file name="s1_1.jpg" hash="ecec6d97bfadd135d29bf033a37d47a8"/><file name="slider_pic1.jpg" hash="721db89856581a0f85bbac2b42e4c1ca"/><dir name="thumbs"><file name="big_bunny_fake.jpg" hash="ec0d987fe9c9d0ae37e815f6a8a18049"/><file name="bridge.jpg" hash="b7133f01f292ed8312338a2f916edea0"/><file name="chakasas.jpg" hash="76c4978e686e7fd15444eaef3b68081d"/><file name="model2.png" hash="cb1195755c430a047955e2c5708be765"/><file name="model3.png" hash="e8a08eedd73d8108eca45d579d8e4c13"/><file name="road.jpg" hash="6a55fe48c897afc9eb910bd5a44bf664"/><file name="s1_1.jpg" hash="248e6587b14b94ab243e6091af002490"/><file name="slider_pic1.jpg" hash="b4229b09fab4646881167cff9ccd35a8"/><file name="young-girl-holding-long-vertical-banner-6719737.jpg" hash="dca722f52fb709f268ef6b91aa9f18a4"/></dir><file name="young-girl-holding-long-vertical-banner-6719737.jpg" hash="a972bb211a908b2ab65be6bef8be6eca"/></dir><dir name="adam"><dir name="images"><dir name="default"><file name="bt-next.png" hash="0c5b4112464e22e295296553180c2521"/><file name="bt-next_1.png" hash="0c5b4112464e22e295296553180c2521"/><file name="bt-prev.png" hash="390b2c5a06a3913132c57766fc5c2834"/><file name="bt-prev_1.png" hash="390b2c5a06a3913132c57766fc5c2834"/><file name="camera_skins.png" hash="44234b21bebe6b318aab47d9e9bbbee9"/><file name="leaf.jpg" hash="4edbd4c8e9ea473b751fd8f47e384297"/></dir></dir></dir></target></contents>
18
+ <compatible/>
19
+ <dependencies><required><php><min>5.1.0</min><max>5.6.0</max></php><package><name>clarion_responsiveslider</name><channel>community</channel><min>1.0.0</min><max>8.0.0</max></package><extension><name>gd</name><min>2.3.0</min><max>2.4</max></extension></required></dependencies>
20
+ </package>
skin/frontend/default/default/css/responsivebanner/camera.css ADDED
@@ -0,0 +1,1067 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**************************
2
+ *
3
+ * GENERAL
4
+ *
5
+ **************************/
6
+ .camera_wrap a, .camera_wrap img,
7
+ .camera_wrap ol, .camera_wrap ul, .camera_wrap li,
8
+ .camera_wrap table, .camera_wrap tbody, .camera_wrap tfoot, .camera_wrap thead, .camera_wrap tr, .camera_wrap th, .camera_wrap td
9
+ .camera_thumbs_wrap a, .camera_thumbs_wrap img,
10
+ .camera_thumbs_wrap ol, .camera_thumbs_wrap ul, .camera_thumbs_wrap li,
11
+ .camera_thumbs_wrap table, .camera_thumbs_wrap tbody, .camera_thumbs_wrap tfoot, .camera_thumbs_wrap thead, .camera_thumbs_wrap tr, .camera_thumbs_wrap th, .camera_thumbs_wrap td {
12
+ background: none;
13
+ border: 0;
14
+ font: inherit;
15
+ font-size: 100%;
16
+ margin: 0;
17
+ padding: 0;
18
+ vertical-align: baseline;
19
+ list-style: none
20
+ }
21
+ .camera_wrap {
22
+ display: none;
23
+ float: left;
24
+ position: relative;
25
+ z-index: 0;
26
+ }
27
+ .camera_wrap img {
28
+ max-width: none!important;
29
+ }
30
+ .camera_fakehover {
31
+ height: 100%;
32
+ min-height: 60px;
33
+ position: relative;
34
+ width: 100%;
35
+ z-index: 1;
36
+ }
37
+ .camera_wrap {
38
+ width: 100%;
39
+ }
40
+ .camera_src {
41
+ display: none;
42
+ }
43
+ .cameraCont, .cameraContents {
44
+ height: 100%;
45
+ position: relative;
46
+ width: 100%;
47
+ z-index: 1;
48
+ }
49
+ .cameraSlide {
50
+ bottom: 0;
51
+ left: 0;
52
+ position: absolute;
53
+ right: 0;
54
+ top: 0;
55
+ width: 100%;
56
+ }
57
+ .cameraContent {
58
+ bottom: 0;
59
+ display: none;
60
+ left: 0;
61
+ position: absolute;
62
+ right: 0;
63
+ top: 0;
64
+ width: 100%;
65
+ }
66
+ .camera_target {
67
+ bottom: 0;
68
+ height: 100%;
69
+ left: 0;
70
+ overflow: hidden;
71
+ position: absolute;
72
+ right: 0;
73
+ text-align: left;
74
+ top: 0;
75
+ width: 100%;
76
+ z-index: 0;
77
+ }
78
+ .camera_overlayer {
79
+ bottom: 0;
80
+ height: 100%;
81
+ left: 0;
82
+ overflow: hidden;
83
+ position: absolute;
84
+ right: 0;
85
+ top: 0;
86
+ width: 100%;
87
+ z-index: 0;
88
+ }
89
+ .camera_target_content {
90
+ bottom: 0;
91
+ left: 0;
92
+ overflow: hidden;
93
+ position: absolute;
94
+ right: 0;
95
+ top: 0;
96
+ z-index: 2;
97
+ }
98
+ .camera_target_content .camera_link {
99
+ background: url(images/blank.gif);
100
+ display: block;
101
+ height: 100%;
102
+ text-decoration: none;
103
+ }
104
+ .camera_loader {
105
+ background: #fff url(images/camera-loader.gif) no-repeat center;
106
+ background: rgba(255, 255, 255, 0.9) url(images/camera-loader.gif) no-repeat center;
107
+ border: 1px solid #ffffff;
108
+ -webkit-border-radius: 18px;
109
+ -moz-border-radius: 18px;
110
+ border-radius: 18px;
111
+ height: 36px;
112
+ left: 50%;
113
+ overflow: hidden;
114
+ position: absolute;
115
+ margin: -18px 0 0 -18px;
116
+ top: 50%;
117
+ width: 36px;
118
+ z-index: 3;
119
+ }
120
+ .camera_bar {
121
+ bottom: 0;
122
+ left: 0;
123
+ overflow: hidden;
124
+ position: absolute;
125
+ right: 0;
126
+ top: 0;
127
+ z-index: 3;
128
+ }
129
+ .camera_thumbs_wrap.camera_left .camera_bar, .camera_thumbs_wrap.camera_right .camera_bar {
130
+ height: 100%;
131
+ position: absolute;
132
+ width: auto;
133
+ }
134
+ .camera_thumbs_wrap.camera_bottom .camera_bar, .camera_thumbs_wrap.camera_top .camera_bar {
135
+ height: auto;
136
+ position: absolute;
137
+ width: 100%;
138
+ }
139
+ .camera_nav_cont {
140
+ height: 65px;
141
+ overflow: hidden;
142
+ position: absolute;
143
+ right: 9px;
144
+ top: 15px;
145
+ width: 120px;
146
+ z-index: 4;
147
+ }
148
+ .camera_caption {
149
+ bottom: 0;
150
+ display: block;
151
+ position: absolute;
152
+ width: 100%;
153
+ }
154
+ .camera_caption > div {
155
+ padding: 10px 20px;
156
+ }
157
+ .camerarelative {
158
+ overflow: hidden;
159
+ position: relative;
160
+ }
161
+ .imgFake {
162
+ cursor: pointer;
163
+ }
164
+ .camera_prevThumbs {
165
+ bottom: 4px;
166
+ cursor: pointer;
167
+ left: 0;
168
+ position: absolute;
169
+ top: 4px;
170
+ visibility: hidden;
171
+ width: 30px;
172
+ z-index: 10;
173
+ }
174
+ .camera_prevThumbs div {
175
+ background: url(images/camera_skins.png) no-repeat -160px 0;
176
+ display: block;
177
+ height: 40px;
178
+ margin-top: -20px;
179
+ position: absolute;
180
+ top: 50%;
181
+ width: 30px;
182
+ }
183
+ .camera_nextThumbs {
184
+ bottom: 4px;
185
+ cursor: pointer;
186
+ position: absolute;
187
+ right: 0;
188
+ top: 4px;
189
+ visibility: hidden;
190
+ width: 30px;
191
+ z-index: 10;
192
+ }
193
+ .camera_nextThumbs div {
194
+ background: url(images/camera_skins.png) no-repeat -190px 0;
195
+ display: block;
196
+ height: 40px;
197
+ margin-top: -20px;
198
+ position: absolute;
199
+ top: 50%;
200
+ width: 30px;
201
+ }
202
+ .camera_command_wrap .hideNav {
203
+ display: none;
204
+ }
205
+ .camera_command_wrap {
206
+ left: 0;
207
+ position: relative;
208
+ right:0;
209
+ z-index: 4;
210
+ }
211
+ .camera_wrap .camera_pag .camera_pag_ul {
212
+ list-style: none;
213
+ margin: 0;
214
+ padding: 0;
215
+ text-align: right;
216
+ }
217
+ .camera_wrap .camera_pag .camera_pag_ul li {
218
+ -webkit-border-radius: 8px;
219
+ -moz-border-radius: 8px;
220
+ border-radius: 8px;
221
+ cursor: pointer;
222
+ display: inline-block;
223
+ height: 16px;
224
+ margin: 20px 5px;
225
+ position: relative;
226
+ text-align: left;
227
+ text-indent: -9999px;
228
+ width: 16px;
229
+ }
230
+ .camera_commands_emboss .camera_pag .camera_pag_ul li {
231
+ -moz-box-shadow:
232
+ 0px 1px 0px rgba(255,255,255,1),
233
+ inset 0px 1px 1px rgba(0,0,0,0.2);
234
+ -webkit-box-shadow:
235
+ 0px 1px 0px rgba(255,255,255,1),
236
+ inset 0px 1px 1px rgba(0,0,0,0.2);
237
+ box-shadow:
238
+ 0px 1px 0px rgba(255,255,255,1),
239
+ inset 0px 1px 1px rgba(0,0,0,0.2);
240
+ }
241
+ .camera_wrap .camera_pag .camera_pag_ul li > span {
242
+ -webkit-border-radius: 5px;
243
+ -moz-border-radius: 5px;
244
+ border-radius: 5px;
245
+ height: 8px;
246
+ left: 4px;
247
+ overflow: hidden;
248
+ position: absolute;
249
+ top: 4px;
250
+ width: 8px;
251
+ }
252
+ .camera_commands_emboss .camera_pag .camera_pag_ul li:hover > span {
253
+ -moz-box-shadow:
254
+ 0px 1px 0px rgba(255,255,255,1),
255
+ inset 0px 1px 1px rgba(0,0,0,0.2);
256
+ -webkit-box-shadow:
257
+ 0px 1px 0px rgba(255,255,255,1),
258
+ inset 0px 1px 1px rgba(0,0,0,0.2);
259
+ box-shadow:
260
+ 0px 1px 0px rgba(255,255,255,1),
261
+ inset 0px 1px 1px rgba(0,0,0,0.2);
262
+ }
263
+ .camera_wrap .camera_pag .camera_pag_ul li.cameracurrent > span {
264
+ -moz-box-shadow: 0;
265
+ -webkit-box-shadow: 0;
266
+ box-shadow: 0;
267
+ }
268
+ .camera_pag_ul li img {
269
+ display: none;
270
+ position: absolute;
271
+ }
272
+ .camera_pag_ul .thumb_arrow {
273
+ border-left: 4px solid transparent;
274
+ border-right: 4px solid transparent;
275
+ border-top: 4px solid;
276
+ top: 0;
277
+ left: 50%;
278
+ margin-left: -4px;
279
+ position: absolute;
280
+ }
281
+ .camera_prev, .camera_next, .camera_commands {
282
+ cursor: pointer;
283
+ height: 40px;
284
+ margin-top: -20px;
285
+ position: absolute;
286
+ top: 50%;
287
+ width: 40px;
288
+ z-index: 2;
289
+ }
290
+ .camera_prev {
291
+ left: 0;
292
+ }
293
+ /*.camera_prev > span {
294
+ background: url(images/camera_skins.png) no-repeat 0 0;
295
+ display: block;
296
+ height: 40px;
297
+ width: 40px;
298
+ }*/
299
+ .camera_next {
300
+ right: 0;
301
+ }
302
+ /*.camera_next > span {
303
+ background: url(images/camera_skins.png) no-repeat -40px 0;
304
+ display: block;
305
+ height: 40px;
306
+ width: 40px;
307
+ }*/
308
+ .camera_commands {
309
+ right: 41px;
310
+ }
311
+ .camera_commands > .camera_play {
312
+ background: url(images/camera_skins.png) no-repeat -80px 0;
313
+ height: 40px;
314
+ width: 40px;
315
+ }
316
+ .camera_commands > .camera_stop {
317
+ background: url(images/camera_skins.png) no-repeat -120px 0;
318
+ display: block;
319
+ height: 40px;
320
+ width: 40px;
321
+ }
322
+ .camera_wrap .camera_pag .camera_pag_ul li {
323
+ -webkit-border-radius: 8px;
324
+ -moz-border-radius: 8px;
325
+ border-radius: 8px;
326
+ cursor: pointer;
327
+ display: inline-block;
328
+ height: 16px;
329
+ margin: 20px 5px;
330
+ position: relative;
331
+ text-indent: -9999px;
332
+ width: 16px;
333
+ }
334
+ .camera_thumbs_cont {
335
+ -webkit-border-bottom-right-radius: 4px;
336
+ -webkit-border-bottom-left-radius: 4px;
337
+ -moz-border-radius-bottomright: 4px;
338
+ -moz-border-radius-bottomleft: 4px;
339
+ border-bottom-right-radius: 4px;
340
+ border-bottom-left-radius: 4px;
341
+ overflow: hidden;
342
+ position: relative;
343
+ width: 100%;
344
+ }
345
+ .camera_commands_emboss .camera_thumbs_cont {
346
+ -moz-box-shadow:
347
+ 0px 1px 0px rgba(255,255,255,1),
348
+ inset 0px 1px 1px rgba(0,0,0,0.2);
349
+ -webkit-box-shadow:
350
+ 0px 1px 0px rgba(255,255,255,1),
351
+ inset 0px 1px 1px rgba(0,0,0,0.2);
352
+ box-shadow:
353
+ 0px 1px 0px rgba(255,255,255,1),
354
+ inset 0px 1px 1px rgba(0,0,0,0.2);
355
+ }
356
+ .camera_thumbs_cont > div {
357
+ float: left;
358
+ width: 100%;
359
+ }
360
+ .camera_thumbs_cont ul {
361
+ overflow: hidden;
362
+ padding: 3px 4px 8px;
363
+ position: relative;
364
+ text-align: center;
365
+ }
366
+ .camera_thumbs_cont ul li {
367
+ display: inline;
368
+ padding: 0 4px;
369
+ }
370
+ .camera_thumbs_cont ul li > img {
371
+ border: 1px solid;
372
+ cursor: pointer;
373
+ margin-top: 5px;
374
+ vertical-align:bottom;
375
+ }
376
+ .camera_clear {
377
+ display: block;
378
+ clear: both;
379
+ }
380
+ .showIt {
381
+ display: none;
382
+ }
383
+ .camera_clear {
384
+ clear: both;
385
+ display: block;
386
+ height: 1px;
387
+ margin: -1px 0 25px;
388
+ position: relative;
389
+ }
390
+ /**************************
391
+ *
392
+ * COLORS & SKINS
393
+ *
394
+ **************************/
395
+ .pattern_1 .camera_overlayer {
396
+ background: url(images/patterns/overlay1.png) repeat;
397
+ }
398
+ .pattern_2 .camera_overlayer {
399
+ background: url(images/patterns/overlay2.png) repeat;
400
+ }
401
+ .pattern_3 .camera_overlayer {
402
+ background: url(images/patterns/overlay3.png) repeat;
403
+ }
404
+ .pattern_4 .camera_overlayer {
405
+ background: url(images/patterns/overlay4.png) repeat;
406
+ }
407
+ .pattern_5 .camera_overlayer {
408
+ background: url(images/patterns/overlay5.png) repeat;
409
+ }
410
+ .pattern_6 .camera_overlayer {
411
+ background: url(images/patterns/overlay6.png) repeat;
412
+ }
413
+ .pattern_7 .camera_overlayer {
414
+ background: url(images/patterns/overlay7.png) repeat;
415
+ }
416
+ .pattern_8 .camera_overlayer {
417
+ background: url(images/patterns/overlay8.png) repeat;
418
+ }
419
+ .pattern_9 .camera_overlayer {
420
+ background: url(images/patterns/overlay9.png) repeat;
421
+ }
422
+ .pattern_10 .camera_overlayer {
423
+ background: url(images/patterns/overlay10.png) repeat;
424
+ }
425
+ .camera_caption {
426
+ color: #fff;
427
+ }
428
+ .camera_caption > div {
429
+ background: #000;
430
+ background: rgba(0, 0, 0, 0.8);
431
+ }
432
+ .camera_wrap .camera_pag .camera_pag_ul li {
433
+ background: #b7b7b7;
434
+ }
435
+ .camera_wrap .camera_pag .camera_pag_ul li:hover > span {
436
+ background: #b7b7b7;
437
+ }
438
+ .camera_wrap .camera_pag .camera_pag_ul li.cameracurrent > span {
439
+ background: #434648;
440
+ }
441
+ .camera_pag_ul li img {
442
+ border: 4px solid #e6e6e6;
443
+ -moz-box-shadow: 0px 3px 6px rgba(0,0,0,.5);
444
+ -webkit-box-shadow: 0px 3px 6px rgba(0,0,0,.5);
445
+ box-shadow: 0px 3px 6px rgba(0,0,0,.5);
446
+ }
447
+ .camera_pag_ul .thumb_arrow {
448
+ border-top-color: #e6e6e6;
449
+ }
450
+ .camera_prevThumbs, .camera_nextThumbs, .camera_prev, .camera_next, .camera_commands, .camera_thumbs_cont {
451
+ background: #d8d8d8;
452
+ background: rgba(216, 216, 216, 0.85);
453
+ }
454
+ .camera_wrap .camera_pag .camera_pag_ul li {
455
+ background: #b7b7b7;
456
+ }
457
+ .camera_thumbs_cont ul li > img {
458
+ border-color: 1px solid #000;
459
+ }
460
+ /*AMBER SKIN*/
461
+ .camera_amber_skin .camera_prevThumbs div {
462
+ background-position: -160px -160px;
463
+ }
464
+ .camera_amber_skin .camera_nextThumbs div {
465
+ background-position: -190px -160px;
466
+ }
467
+ .camera_amber_skin .camera_prev > span {
468
+ background-position: 0 -160px;
469
+ }
470
+ .camera_amber_skin .camera_next > span {
471
+ background-position: -40px -160px;
472
+ }
473
+ .camera_amber_skin .camera_commands > .camera_play {
474
+ background-position: -80px -160px;
475
+ }
476
+ .camera_amber_skin .camera_commands > .camera_stop {
477
+ background-position: -120px -160px;
478
+ }
479
+ /*ASH SKIN*/
480
+ .camera_ash_skin .camera_prevThumbs div {
481
+ background-position: -160px -200px;
482
+ }
483
+ .camera_ash_skin .camera_nextThumbs div {
484
+ background-position: -190px -200px;
485
+ }
486
+ .camera_ash_skin .camera_prev > span {
487
+ background-position: 0 -200px;
488
+ }
489
+ .camera_ash_skin .camera_next > span {
490
+ background-position: -40px -200px;
491
+ }
492
+ .camera_ash_skin .camera_commands > .camera_play {
493
+ background-position: -80px -200px;
494
+ }
495
+ .camera_ash_skin .camera_commands > .camera_stop {
496
+ background-position: -120px -200px;
497
+ }
498
+ /*AZURE SKIN*/
499
+ .camera_azure_skin .camera_prevThumbs div {
500
+ background-position: -160px -240px;
501
+ }
502
+ .camera_azure_skin .camera_nextThumbs div {
503
+ background-position: -190px -240px;
504
+ }
505
+ .camera_azure_skin .camera_prev > span {
506
+ background-position: 0 -240px;
507
+ }
508
+ .camera_azure_skin .camera_next > span {
509
+ background-position: -40px -240px;
510
+ }
511
+ .camera_azure_skin .camera_commands > .camera_play {
512
+ background-position: -80px -240px;
513
+ }
514
+ .camera_azure_skin .camera_commands > .camera_stop {
515
+ background-position: -120px -240px;
516
+ }
517
+ /*BEIGE SKIN*/
518
+ .camera_beige_skin .camera_prevThumbs div {
519
+ background-position: -160px -120px;
520
+ }
521
+ .camera_beige_skin .camera_nextThumbs div {
522
+ background-position: -190px -120px;
523
+ }
524
+ .camera_beige_skin .camera_prev > span {
525
+ background-position: 0 -120px;
526
+ }
527
+ .camera_beige_skin .camera_next > span {
528
+ background-position: -40px -120px;
529
+ }
530
+ .camera_beige_skin .camera_commands > .camera_play {
531
+ background-position: -80px -120px;
532
+ }
533
+ .camera_beige_skin .camera_commands > .camera_stop {
534
+ background-position: -120px -120px;
535
+ }
536
+ /*BLACK SKIN*/
537
+ .camera_black_skin .camera_prevThumbs div {
538
+ background-position: -160px -40px;
539
+ }
540
+ .camera_black_skin .camera_nextThumbs div {
541
+ background-position: -190px -40px;
542
+ }
543
+ .camera_black_skin .camera_prev > span {
544
+ background-position: 0 -40px;
545
+ }
546
+ .camera_black_skin .camera_next > span {
547
+ background-position: -40px -40px;
548
+ }
549
+ .camera_black_skin .camera_commands > .camera_play {
550
+ background-position: -80px -40px;
551
+ }
552
+ .camera_black_skin .camera_commands > .camera_stop {
553
+ background-position: -120px -40px;
554
+ }
555
+ /*BLUE SKIN*/
556
+ .camera_blue_skin .camera_prevThumbs div {
557
+ background-position: -160px -280px;
558
+ }
559
+ .camera_blue_skin .camera_nextThumbs div {
560
+ background-position: -190px -280px;
561
+ }
562
+ .camera_blue_skin .camera_prev > span {
563
+ background-position: 0 -280px;
564
+ }
565
+ .camera_blue_skin .camera_next > span {
566
+ background-position: -40px -280px;
567
+ }
568
+ .camera_blue_skin .camera_commands > .camera_play {
569
+ background-position: -80px -280px;
570
+ }
571
+ .camera_blue_skin .camera_commands > .camera_stop {
572
+ background-position: -120px -280px;
573
+ }
574
+ /*BROWN SKIN*/
575
+ .camera_brown_skin .camera_prevThumbs div {
576
+ background-position: -160px -320px;
577
+ }
578
+ .camera_brown_skin .camera_nextThumbs div {
579
+ background-position: -190px -320px;
580
+ }
581
+ .camera_brown_skin .camera_prev > span {
582
+ background-position: 0 -320px;
583
+ }
584
+ .camera_brown_skin .camera_next > span {
585
+ background-position: -40px -320px;
586
+ }
587
+ .camera_brown_skin .camera_commands > .camera_play {
588
+ background-position: -80px -320px;
589
+ }
590
+ .camera_brown_skin .camera_commands > .camera_stop {
591
+ background-position: -120px -320px;
592
+ }
593
+ /*BURGUNDY SKIN*/
594
+ .camera_burgundy_skin .camera_prevThumbs div {
595
+ background-position: -160px -360px;
596
+ }
597
+ .camera_burgundy_skin .camera_nextThumbs div {
598
+ background-position: -190px -360px;
599
+ }
600
+ .camera_burgundy_skin .camera_prev > span {
601
+ background-position: 0 -360px;
602
+ }
603
+ .camera_burgundy_skin .camera_next > span {
604
+ background-position: -40px -360px;
605
+ }
606
+ .camera_burgundy_skin .camera_commands > .camera_play {
607
+ background-position: -80px -360px;
608
+ }
609
+ .camera_burgundy_skin .camera_commands > .camera_stop {
610
+ background-position: -120px -360px;
611
+ }
612
+ /*CHARCOAL SKIN*/
613
+ .camera_charcoal_skin .camera_prevThumbs div {
614
+ background-position: -160px -400px;
615
+ }
616
+ .camera_charcoal_skin .camera_nextThumbs div {
617
+ background-position: -190px -400px;
618
+ }
619
+ .camera_charcoal_skin .camera_prev > span {
620
+ background-position: 0 -400px;
621
+ }
622
+ .camera_charcoal_skin .camera_next > span {
623
+ background-position: -40px -400px;
624
+ }
625
+ .camera_charcoal_skin .camera_commands > .camera_play {
626
+ background-position: -80px -400px;
627
+ }
628
+ .camera_charcoal_skin .camera_commands > .camera_stop {
629
+ background-position: -120px -400px;
630
+ }
631
+ /*CHOCOLATE SKIN*/
632
+ .camera_chocolate_skin .camera_prevThumbs div {
633
+ background-position: -160px -440px;
634
+ }
635
+ .camera_chocolate_skin .camera_nextThumbs div {
636
+ background-position: -190px -440px;
637
+ }
638
+ .camera_chocolate_skin .camera_prev > span {
639
+ background-position: 0 -440px;
640
+ }
641
+ .camera_chocolate_skin .camera_next > span {
642
+ background-position: -40px -440px;
643
+ }
644
+ .camera_chocolate_skin .camera_commands > .camera_play {
645
+ background-position: -80px -440px;
646
+ }
647
+ .camera_chocolate_skin .camera_commands > .camera_stop {
648
+ background-position: -120px -440px ;
649
+ }
650
+ /*COFFEE SKIN*/
651
+ .camera_coffee_skin .camera_prevThumbs div {
652
+ background-position: -160px -480px;
653
+ }
654
+ .camera_coffee_skin .camera_nextThumbs div {
655
+ background-position: -190px -480px;
656
+ }
657
+ .camera_coffee_skin .camera_prev > span {
658
+ background-position: 0 -480px;
659
+ }
660
+ .camera_coffee_skin .camera_next > span {
661
+ background-position: -40px -480px;
662
+ }
663
+ .camera_coffee_skin .camera_commands > .camera_play {
664
+ background-position: -80px -480px;
665
+ }
666
+ .camera_coffee_skin .camera_commands > .camera_stop {
667
+ background-position: -120px -480px ;
668
+ }
669
+ /*CYAN SKIN*/
670
+ .camera_cyan_skin .camera_prevThumbs div {
671
+ background-position: -160px -520px;
672
+ }
673
+ .camera_cyan_skin .camera_nextThumbs div {
674
+ background-position: -190px -520px;
675
+ }
676
+ .camera_cyan_skin .camera_prev > span {
677
+ background-position: 0 -520px;
678
+ }
679
+ .camera_cyan_skin .camera_next > span {
680
+ background-position: -40px -520px;
681
+ }
682
+ .camera_cyan_skin .camera_commands > .camera_play {
683
+ background-position: -80px -520px;
684
+ }
685
+ .camera_cyan_skin .camera_commands > .camera_stop {
686
+ background-position: -120px -520px ;
687
+ }
688
+ /*FUCHSIA SKIN*/
689
+ .camera_fuchsia_skin .camera_prevThumbs div {
690
+ background-position: -160px -560px;
691
+ }
692
+ .camera_fuchsia_skin .camera_nextThumbs div {
693
+ background-position: -190px -560px;
694
+ }
695
+ .camera_fuchsia_skin .camera_prev > span {
696
+ background-position: 0 -560px;
697
+ }
698
+ .camera_fuchsia_skin .camera_next > span {
699
+ background-position: -40px -560px;
700
+ }
701
+ .camera_fuchsia_skin .camera_commands > .camera_play {
702
+ background-position: -80px -560px;
703
+ }
704
+ .camera_fuchsia_skin .camera_commands > .camera_stop {
705
+ background-position: -120px -560px ;
706
+ }
707
+ /*GOLD SKIN*/
708
+ .camera_gold_skin .camera_prevThumbs div {
709
+ background-position: -160px -600px;
710
+ }
711
+ .camera_gold_skin .camera_nextThumbs div {
712
+ background-position: -190px -600px;
713
+ }
714
+ .camera_gold_skin .camera_prev > span {
715
+ background-position: 0 -600px;
716
+ }
717
+ .camera_gold_skin .camera_next > span {
718
+ background-position: -40px -600px;
719
+ }
720
+ .camera_gold_skin .camera_commands > .camera_play {
721
+ background-position: -80px -600px;
722
+ }
723
+ .camera_gold_skin .camera_commands > .camera_stop {
724
+ background-position: -120px -600px ;
725
+ }
726
+ /*GREEN SKIN*/
727
+ .camera_green_skin .camera_prevThumbs div {
728
+ background-position: -160px -640px;
729
+ }
730
+ .camera_green_skin .camera_nextThumbs div {
731
+ background-position: -190px -640px;
732
+ }
733
+ .camera_green_skin .camera_prev > span {
734
+ background-position: 0 -640px;
735
+ }
736
+ .camera_green_skin .camera_next > span {
737
+ background-position: -40px -640px;
738
+ }
739
+ .camera_green_skin .camera_commands > .camera_play {
740
+ background-position: -80px -640px;
741
+ }
742
+ .camera_green_skin .camera_commands > .camera_stop {
743
+ background-position: -120px -640px ;
744
+ }
745
+ /*GREY SKIN*/
746
+ .camera_grey_skin .camera_prevThumbs div {
747
+ background-position: -160px -680px;
748
+ }
749
+ .camera_grey_skin .camera_nextThumbs div {
750
+ background-position: -190px -680px;
751
+ }
752
+ .camera_grey_skin .camera_prev > span {
753
+ background-position: 0 -680px;
754
+ }
755
+ .camera_grey_skin .camera_next > span {
756
+ background-position: -40px -680px;
757
+ }
758
+ .camera_grey_skin .camera_commands > .camera_play {
759
+ background-position: -80px -680px;
760
+ }
761
+ .camera_grey_skin .camera_commands > .camera_stop {
762
+ background-position: -120px -680px ;
763
+ }
764
+ /*INDIGO SKIN*/
765
+ .camera_indigo_skin .camera_prevThumbs div {
766
+ background-position: -160px -720px;
767
+ }
768
+ .camera_indigo_skin .camera_nextThumbs div {
769
+ background-position: -190px -720px;
770
+ }
771
+ .camera_indigo_skin .camera_prev > span {
772
+ background-position: 0 -720px;
773
+ }
774
+ .camera_indigo_skin .camera_next > span {
775
+ background-position: -40px -720px;
776
+ }
777
+ .camera_indigo_skin .camera_commands > .camera_play {
778
+ background-position: -80px -720px;
779
+ }
780
+ .camera_indigo_skin .camera_commands > .camera_stop {
781
+ background-position: -120px -720px ;
782
+ }
783
+ /*KHAKI SKIN*/
784
+ .camera_khaki_skin .camera_prevThumbs div {
785
+ background-position: -160px -760px;
786
+ }
787
+ .camera_khaki_skin .camera_nextThumbs div {
788
+ background-position: -190px -760px;
789
+ }
790
+ .camera_khaki_skin .camera_prev > span {
791
+ background-position: 0 -760px;
792
+ }
793
+ .camera_khaki_skin .camera_next > span {
794
+ background-position: -40px -760px;
795
+ }
796
+ .camera_khaki_skin .camera_commands > .camera_play {
797
+ background-position: -80px -760px;
798
+ }
799
+ .camera_khaki_skin .camera_commands > .camera_stop {
800
+ background-position: -120px -760px ;
801
+ }
802
+ /*LIME SKIN*/
803
+ .camera_lime_skin .camera_prevThumbs div {
804
+ background-position: -160px -800px;
805
+ }
806
+ .camera_lime_skin .camera_nextThumbs div {
807
+ background-position: -190px -800px;
808
+ }
809
+ .camera_lime_skin .camera_prev > span {
810
+ background-position: 0 -800px;
811
+ }
812
+ .camera_lime_skin .camera_next > span {
813
+ background-position: -40px -800px;
814
+ }
815
+ .camera_lime_skin .camera_commands > .camera_play {
816
+ background-position: -80px -800px;
817
+ }
818
+ .camera_lime_skin .camera_commands > .camera_stop {
819
+ background-position: -120px -800px ;
820
+ }
821
+ /*MAGENTA SKIN*/
822
+ .camera_magenta_skin .camera_prevThumbs div {
823
+ background-position: -160px -840px;
824
+ }
825
+ .camera_magenta_skin .camera_nextThumbs div {
826
+ background-position: -190px -840px;
827
+ }
828
+ .camera_magenta_skin .camera_prev > span {
829
+ background-position: 0 -840px;
830
+ }
831
+ .camera_magenta_skin .camera_next > span {
832
+ background-position: -40px -840px;
833
+ }
834
+ .camera_magenta_skin .camera_commands > .camera_play {
835
+ background-position: -80px -840px;
836
+ }
837
+ .camera_magenta_skin .camera_commands > .camera_stop {
838
+ background-position: -120px -840px ;
839
+ }
840
+ /*MAROON SKIN*/
841
+ .camera_maroon_skin .camera_prevThumbs div {
842
+ background-position: -160px -880px;
843
+ }
844
+ .camera_maroon_skin .camera_nextThumbs div {
845
+ background-position: -190px -880px;
846
+ }
847
+ .camera_maroon_skin .camera_prev > span {
848
+ background-position: 0 -880px;
849
+ }
850
+ .camera_maroon_skin .camera_next > span {
851
+ background-position: -40px -880px;
852
+ }
853
+ .camera_maroon_skin .camera_commands > .camera_play {
854
+ background-position: -80px -880px;
855
+ }
856
+ .camera_maroon_skin .camera_commands > .camera_stop {
857
+ background-position: -120px -880px ;
858
+ }
859
+ /*ORANGE SKIN*/
860
+ .camera_orange_skin .camera_prevThumbs div {
861
+ background-position: -160px -920px;
862
+ }
863
+ .camera_orange_skin .camera_nextThumbs div {
864
+ background-position: -190px -920px;
865
+ }
866
+ .camera_orange_skin .camera_prev > span {
867
+ background-position: 0 -920px;
868
+ }
869
+ .camera_orange_skin .camera_next > span {
870
+ background-position: -40px -920px;
871
+ }
872
+ .camera_orange_skin .camera_commands > .camera_play {
873
+ background-position: -80px -920px;
874
+ }
875
+ .camera_orange_skin .camera_commands > .camera_stop {
876
+ background-position: -120px -920px ;
877
+ }
878
+ /*OLIVE SKIN*/
879
+ .camera_olive_skin .camera_prevThumbs div {
880
+ background-position: -160px -1080px;
881
+ }
882
+ .camera_olive_skin .camera_nextThumbs div {
883
+ background-position: -190px -1080px;
884
+ }
885
+ .camera_olive_skin .camera_prev > span {
886
+ background-position: 0 -1080px;
887
+ }
888
+ .camera_olive_skin .camera_next > span {
889
+ background-position: -40px -1080px;
890
+ }
891
+ .camera_olive_skin .camera_commands > .camera_play {
892
+ background-position: -80px -1080px;
893
+ }
894
+ .camera_olive_skin .camera_commands > .camera_stop {
895
+ background-position: -120px -1080px ;
896
+ }
897
+ /*PINK SKIN*/
898
+ .camera_pink_skin .camera_prevThumbs div {
899
+ background-position: -160px -960px;
900
+ }
901
+ .camera_pink_skin .camera_nextThumbs div {
902
+ background-position: -190px -960px;
903
+ }
904
+ .camera_pink_skin .camera_prev > span {
905
+ background-position: 0 -960px;
906
+ }
907
+ .camera_pink_skin .camera_next > span {
908
+ background-position: -40px -960px;
909
+ }
910
+ .camera_pink_skin .camera_commands > .camera_play {
911
+ background-position: -80px -960px;
912
+ }
913
+ .camera_pink_skin .camera_commands > .camera_stop {
914
+ background-position: -120px -960px ;
915
+ }
916
+ /*PISTACHIO SKIN*/
917
+ .camera_pistachio_skin .camera_prevThumbs div {
918
+ background-position: -160px -1040px;
919
+ }
920
+ .camera_pistachio_skin .camera_nextThumbs div {
921
+ background-position: -190px -1040px;
922
+ }
923
+ .camera_pistachio_skin .camera_prev > span {
924
+ background-position: 0 -1040px;
925
+ }
926
+ .camera_pistachio_skin .camera_next > span {
927
+ background-position: -40px -1040px;
928
+ }
929
+ .camera_pistachio_skin .camera_commands > .camera_play {
930
+ background-position: -80px -1040px;
931
+ }
932
+ .camera_pistachio_skin .camera_commands > .camera_stop {
933
+ background-position: -120px -1040px ;
934
+ }
935
+ /*PINK SKIN*/
936
+ .camera_pink_skin .camera_prevThumbs div {
937
+ background-position: -160px -80px;
938
+ }
939
+ .camera_pink_skin .camera_nextThumbs div {
940
+ background-position: -190px -80px;
941
+ }
942
+ .camera_pink_skin .camera_prev > span {
943
+ background-position: 0 -80px;
944
+ }
945
+ .camera_pink_skin .camera_next > span {
946
+ background-position: -40px -80px;
947
+ }
948
+ .camera_pink_skin .camera_commands > .camera_play {
949
+ background-position: -80px -80px;
950
+ }
951
+ .camera_pink_skin .camera_commands > .camera_stop {
952
+ background-position: -120px -80px;
953
+ }
954
+ /*RED SKIN*/
955
+ .camera_red_skin .camera_prevThumbs div {
956
+ background-position: -160px -1000px;
957
+ }
958
+ .camera_red_skin .camera_nextThumbs div {
959
+ background-position: -190px -1000px;
960
+ }
961
+ .camera_red_skin .camera_prev > span {
962
+ background-position: 0 -1000px;
963
+ }
964
+ .camera_red_skin .camera_next > span {
965
+ background-position: -40px -1000px;
966
+ }
967
+ .camera_red_skin .camera_commands > .camera_play {
968
+ background-position: -80px -1000px;
969
+ }
970
+ .camera_red_skin .camera_commands > .camera_stop {
971
+ background-position: -120px -1000px ;
972
+ }
973
+ /*TANGERINE SKIN*/
974
+ .camera_tangerine_skin .camera_prevThumbs div {
975
+ background-position: -160px -1120px;
976
+ }
977
+ .camera_tangerine_skin .camera_nextThumbs div {
978
+ background-position: -190px -1120px;
979
+ }
980
+ .camera_tangerine_skin .camera_prev > span {
981
+ background-position: 0 -1120px;
982
+ }
983
+ .camera_tangerine_skin .camera_next > span {
984
+ background-position: -40px -1120px;
985
+ }
986
+ .camera_tangerine_skin .camera_commands > .camera_play {
987
+ background-position: -80px -1120px;
988
+ }
989
+ .camera_tangerine_skin .camera_commands > .camera_stop {
990
+ background-position: -120px -1120px ;
991
+ }
992
+ /*TURQUOISE SKIN*/
993
+ .camera_turquoise_skin .camera_prevThumbs div {
994
+ background-position: -160px -1160px;
995
+ }
996
+ .camera_turquoise_skin .camera_nextThumbs div {
997
+ background-position: -190px -1160px;
998
+ }
999
+ .camera_turquoise_skin .camera_prev > span {
1000
+ background-position: 0 -1160px;
1001
+ }
1002
+ .camera_turquoise_skin .camera_next > span {
1003
+ background-position: -40px -1160px;
1004
+ }
1005
+ .camera_turquoise_skin .camera_commands > .camera_play {
1006
+ background-position: -80px -1160px;
1007
+ }
1008
+ .camera_turquoise_skin .camera_commands > .camera_stop {
1009
+ background-position: -120px -1160px ;
1010
+ }
1011
+ /*VIOLET SKIN*/
1012
+ .camera_violet_skin .camera_prevThumbs div {
1013
+ background-position: -160px -1200px;
1014
+ }
1015
+ .camera_violet_skin .camera_nextThumbs div {
1016
+ background-position: -190px -1200px;
1017
+ }
1018
+ .camera_violet_skin .camera_prev > span {
1019
+ background-position: 0 -1200px;
1020
+ }
1021
+ .camera_violet_skin .camera_next > span {
1022
+ background-position: -40px -1200px;
1023
+ }
1024
+ .camera_violet_skin .camera_commands > .camera_play {
1025
+ background-position: -80px -1200px;
1026
+ }
1027
+ .camera_violet_skin .camera_commands > .camera_stop {
1028
+ background-position: -120px -1200px ;
1029
+ }
1030
+ /*WHITE SKIN*/
1031
+ .camera_white_skin .camera_prevThumbs div {
1032
+ background-position: -160px -80px;
1033
+ }
1034
+ .camera_white_skin .camera_nextThumbs div {
1035
+ background-position: -190px -80px;
1036
+ }
1037
+ .camera_white_skin .camera_prev > span {
1038
+ background-position: 0 -80px;
1039
+ }
1040
+ .camera_white_skin .camera_next > span {
1041
+ background-position: -40px -80px;
1042
+ }
1043
+ .camera_white_skin .camera_commands > .camera_play {
1044
+ background-position: -80px -80px;
1045
+ }
1046
+ .camera_white_skin .camera_commands > .camera_stop {
1047
+ background-position: -120px -80px;
1048
+ }
1049
+ /*YELLOW SKIN*/
1050
+ .camera_yellow_skin .camera_prevThumbs div {
1051
+ background-position: -160px -1240px;
1052
+ }
1053
+ .camera_yellow_skin .camera_nextThumbs div {
1054
+ background-position: -190px -1240px;
1055
+ }
1056
+ .camera_yellow_skin .camera_prev > span {
1057
+ background-position: 0 -1240px;
1058
+ }
1059
+ .camera_yellow_skin .camera_next > span {
1060
+ background-position: -40px -1240px;
1061
+ }
1062
+ .camera_yellow_skin .camera_commands > .camera_play {
1063
+ background-position: -80px -1240px;
1064
+ }
1065
+ .camera_yellow_skin .camera_commands > .camera_stop {
1066
+ background-position: -120px -1240px ;
1067
+ }
skin/frontend/default/default/css/responsivebanner/images/01(1).png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/01.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/01.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/02(1).png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/02(2).jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/02.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/02.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/03(1).png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/03.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/03.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/04.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/150115-1356942247.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/1_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/1a.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/1b.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/1b.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/1c.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/216840-0129_1(1).jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/216840-0129_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/271669-0054_1(1).jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/271669-0054_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/2a.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/2b_2.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/3a.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/3b(1).jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/3b.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/3bb.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/3c.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/428338-0029_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/428357-0001_1_1_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/428374-0023_1_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/428381-0001_1_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/428446-0067_1_1_1_1_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/428507-0066_1_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/4_3.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/4c.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/546029-0013_1_2.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/6.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/677188-0067_1(1).jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/677188-0067_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/734198-0056_1_2.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/7e7013467a0aaa9b190144598ee32819.js ADDED
@@ -0,0 +1,12039 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Prototype JavaScript framework, version 1.7
2
+ * (c) 2005-2010 Sam Stephenson
3
+ *
4
+ * Prototype is freely distributable under the terms of an MIT-style license.
5
+ * For details, see the Prototype web site: http://www.prototypejs.org/
6
+ *
7
+ *--------------------------------------------------------------------------*/
8
+
9
+ var Prototype = {
10
+
11
+ Version: '1.7',
12
+
13
+ Browser: (function(){
14
+ var ua = navigator.userAgent;
15
+ var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
16
+ return {
17
+ IE: !!window.attachEvent && !isOpera,
18
+ Opera: isOpera,
19
+ WebKit: ua.indexOf('AppleWebKit/') > -1,
20
+ Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
21
+ MobileSafari: /Apple.*Mobile/.test(ua)
22
+ }
23
+ })(),
24
+
25
+ BrowserFeatures: {
26
+ XPath: !!document.evaluate,
27
+
28
+ SelectorsAPI: !!document.querySelector,
29
+
30
+ ElementExtensions: (function() {
31
+ var constructor = window.Element || window.HTMLElement;
32
+ return !!(constructor && constructor.prototype);
33
+ })(),
34
+ SpecificElementExtensions: (function() {
35
+ if (typeof window.HTMLDivElement !== 'undefined')
36
+ return true;
37
+
38
+ var div = document.createElement('div'),
39
+ form = document.createElement('form'),
40
+ isSupported = false;
41
+
42
+ if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
43
+ isSupported = true;
44
+ }
45
+
46
+ div = form = null;
47
+
48
+ return isSupported;
49
+ })()
50
+ },
51
+
52
+ ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
53
+ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
54
+
55
+ emptyFunction: function() { },
56
+
57
+ K: function(x) { return x }
58
+ };
59
+
60
+ if (Prototype.Browser.MobileSafari)
61
+ Prototype.BrowserFeatures.SpecificElementExtensions = false;
62
+
63
+
64
+ var Abstract = { };
65
+
66
+
67
+ var Try = {
68
+ these: function() {
69
+ var returnValue;
70
+
71
+ for (var i = 0, length = arguments.length; i < length; i++) {
72
+ var lambda = arguments[i];
73
+ try {
74
+ returnValue = lambda();
75
+ break;
76
+ } catch (e) { }
77
+ }
78
+
79
+ return returnValue;
80
+ }
81
+ };
82
+
83
+ /* Based on Alex Arnell's inheritance implementation. */
84
+
85
+ var Class = (function() {
86
+
87
+ var IS_DONTENUM_BUGGY = (function(){
88
+ for (var p in { toString: 1 }) {
89
+ if (p === 'toString') return false;
90
+ }
91
+ return true;
92
+ })();
93
+
94
+ function subclass() {};
95
+ function create() {
96
+ var parent = null, properties = $A(arguments);
97
+ if (Object.isFunction(properties[0]))
98
+ parent = properties.shift();
99
+
100
+ function klass() {
101
+ this.initialize.apply(this, arguments);
102
+ }
103
+
104
+ Object.extend(klass, Class.Methods);
105
+ klass.superclass = parent;
106
+ klass.subclasses = [];
107
+
108
+ if (parent) {
109
+ subclass.prototype = parent.prototype;
110
+ klass.prototype = new subclass;
111
+ parent.subclasses.push(klass);
112
+ }
113
+
114
+ for (var i = 0, length = properties.length; i < length; i++)
115
+ klass.addMethods(properties[i]);
116
+
117
+ if (!klass.prototype.initialize)
118
+ klass.prototype.initialize = Prototype.emptyFunction;
119
+
120
+ klass.prototype.constructor = klass;
121
+ return klass;
122
+ }
123
+
124
+ function addMethods(source) {
125
+ var ancestor = this.superclass && this.superclass.prototype,
126
+ properties = Object.keys(source);
127
+
128
+ if (IS_DONTENUM_BUGGY) {
129
+ if (source.toString != Object.prototype.toString)
130
+ properties.push("toString");
131
+ if (source.valueOf != Object.prototype.valueOf)
132
+ properties.push("valueOf");
133
+ }
134
+
135
+ for (var i = 0, length = properties.length; i < length; i++) {
136
+ var property = properties[i], value = source[property];
137
+ if (ancestor && Object.isFunction(value) &&
138
+ value.argumentNames()[0] == "$super") {
139
+ var method = value;
140
+ value = (function(m) {
141
+ return function() { return ancestor[m].apply(this, arguments); };
142
+ })(property).wrap(method);
143
+
144
+ value.valueOf = method.valueOf.bind(method);
145
+ value.toString = method.toString.bind(method);
146
+ }
147
+ this.prototype[property] = value;
148
+ }
149
+
150
+ return this;
151
+ }
152
+
153
+ return {
154
+ create: create,
155
+ Methods: {
156
+ addMethods: addMethods
157
+ }
158
+ };
159
+ })();
160
+ (function() {
161
+
162
+ var _toString = Object.prototype.toString,
163
+ NULL_TYPE = 'Null',
164
+ UNDEFINED_TYPE = 'Undefined',
165
+ BOOLEAN_TYPE = 'Boolean',
166
+ NUMBER_TYPE = 'Number',
167
+ STRING_TYPE = 'String',
168
+ OBJECT_TYPE = 'Object',
169
+ FUNCTION_CLASS = '[object Function]',
170
+ BOOLEAN_CLASS = '[object Boolean]',
171
+ NUMBER_CLASS = '[object Number]',
172
+ STRING_CLASS = '[object String]',
173
+ ARRAY_CLASS = '[object Array]',
174
+ DATE_CLASS = '[object Date]',
175
+ NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON &&
176
+ typeof JSON.stringify === 'function' &&
177
+ JSON.stringify(0) === '0' &&
178
+ typeof JSON.stringify(Prototype.K) === 'undefined';
179
+
180
+ function Type(o) {
181
+ switch(o) {
182
+ case null: return NULL_TYPE;
183
+ case (void 0): return UNDEFINED_TYPE;
184
+ }
185
+ var type = typeof o;
186
+ switch(type) {
187
+ case 'boolean': return BOOLEAN_TYPE;
188
+ case 'number': return NUMBER_TYPE;
189
+ case 'string': return STRING_TYPE;
190
+ }
191
+ return OBJECT_TYPE;
192
+ }
193
+
194
+ function extend(destination, source) {
195
+ for (var property in source)
196
+ destination[property] = source[property];
197
+ return destination;
198
+ }
199
+
200
+ function inspect(object) {
201
+ try {
202
+ if (isUndefined(object)) return 'undefined';
203
+ if (object === null) return 'null';
204
+ return object.inspect ? object.inspect() : String(object);
205
+ } catch (e) {
206
+ if (e instanceof RangeError) return '...';
207
+ throw e;
208
+ }
209
+ }
210
+
211
+ function toJSON(value) {
212
+ return Str('', { '': value }, []);
213
+ }
214
+
215
+ function Str(key, holder, stack) {
216
+ var value = holder[key],
217
+ type = typeof value;
218
+
219
+ if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') {
220
+ value = value.toJSON(key);
221
+ }
222
+
223
+ var _class = _toString.call(value);
224
+
225
+ switch (_class) {
226
+ case NUMBER_CLASS:
227
+ case BOOLEAN_CLASS:
228
+ case STRING_CLASS:
229
+ value = value.valueOf();
230
+ }
231
+
232
+ switch (value) {
233
+ case null: return 'null';
234
+ case true: return 'true';
235
+ case false: return 'false';
236
+ }
237
+
238
+ type = typeof value;
239
+ switch (type) {
240
+ case 'string':
241
+ return value.inspect(true);
242
+ case 'number':
243
+ return isFinite(value) ? String(value) : 'null';
244
+ case 'object':
245
+
246
+ for (var i = 0, length = stack.length; i < length; i++) {
247
+ if (stack[i] === value) { throw new TypeError(); }
248
+ }
249
+ stack.push(value);
250
+
251
+ var partial = [];
252
+ if (_class === ARRAY_CLASS) {
253
+ for (var i = 0, length = value.length; i < length; i++) {
254
+ var str = Str(i, value, stack);
255
+ partial.push(typeof str === 'undefined' ? 'null' : str);
256
+ }
257
+ partial = '[' + partial.join(',') + ']';
258
+ } else {
259
+ var keys = Object.keys(value);
260
+ for (var i = 0, length = keys.length; i < length; i++) {
261
+ var key = keys[i], str = Str(key, value, stack);
262
+ if (typeof str !== "undefined") {
263
+ partial.push(key.inspect(true)+ ':' + str);
264
+ }
265
+ }
266
+ partial = '{' + partial.join(',') + '}';
267
+ }
268
+ stack.pop();
269
+ return partial;
270
+ }
271
+ }
272
+
273
+ function stringify(object) {
274
+ return JSON.stringify(object);
275
+ }
276
+
277
+ function toQueryString(object) {
278
+ return $H(object).toQueryString();
279
+ }
280
+
281
+ function toHTML(object) {
282
+ return object && object.toHTML ? object.toHTML() : String.interpret(object);
283
+ }
284
+
285
+ function keys(object) {
286
+ if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); }
287
+ var results = [];
288
+ for (var property in object) {
289
+ if (object.hasOwnProperty(property)) {
290
+ results.push(property);
291
+ }
292
+ }
293
+ return results;
294
+ }
295
+
296
+ function values(object) {
297
+ var results = [];
298
+ for (var property in object)
299
+ results.push(object[property]);
300
+ return results;
301
+ }
302
+
303
+ function clone(object) {
304
+ return extend({ }, object);
305
+ }
306
+
307
+ function isElement(object) {
308
+ return !!(object && object.nodeType == 1);
309
+ }
310
+
311
+ function isArray(object) {
312
+ return _toString.call(object) === ARRAY_CLASS;
313
+ }
314
+
315
+ var hasNativeIsArray = (typeof Array.isArray == 'function')
316
+ && Array.isArray([]) && !Array.isArray({});
317
+
318
+ if (hasNativeIsArray) {
319
+ isArray = Array.isArray;
320
+ }
321
+
322
+ function isHash(object) {
323
+ return object instanceof Hash;
324
+ }
325
+
326
+ function isFunction(object) {
327
+ return _toString.call(object) === FUNCTION_CLASS;
328
+ }
329
+
330
+ function isString(object) {
331
+ return _toString.call(object) === STRING_CLASS;
332
+ }
333
+
334
+ function isNumber(object) {
335
+ return _toString.call(object) === NUMBER_CLASS;
336
+ }
337
+
338
+ function isDate(object) {
339
+ return _toString.call(object) === DATE_CLASS;
340
+ }
341
+
342
+ function isUndefined(object) {
343
+ return typeof object === "undefined";
344
+ }
345
+
346
+ extend(Object, {
347
+ extend: extend,
348
+ inspect: inspect,
349
+ toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON,
350
+ toQueryString: toQueryString,
351
+ toHTML: toHTML,
352
+ keys: Object.keys || keys,
353
+ values: values,
354
+ clone: clone,
355
+ isElement: isElement,
356
+ isArray: isArray,
357
+ isHash: isHash,
358
+ isFunction: isFunction,
359
+ isString: isString,
360
+ isNumber: isNumber,
361
+ isDate: isDate,
362
+ isUndefined: isUndefined
363
+ });
364
+ })();
365
+ Object.extend(Function.prototype, (function() {
366
+ var slice = Array.prototype.slice;
367
+
368
+ function update(array, args) {
369
+ var arrayLength = array.length, length = args.length;
370
+ while (length--) array[arrayLength + length] = args[length];
371
+ return array;
372
+ }
373
+
374
+ function merge(array, args) {
375
+ array = slice.call(array, 0);
376
+ return update(array, args);
377
+ }
378
+
379
+ function argumentNames() {
380
+ var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
381
+ .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
382
+ .replace(/\s+/g, '').split(',');
383
+ return names.length == 1 && !names[0] ? [] : names;
384
+ }
385
+
386
+ function bind(context) {
387
+ if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
388
+ var __method = this, args = slice.call(arguments, 1);
389
+ return function() {
390
+ var a = merge(args, arguments);
391
+ return __method.apply(context, a);
392
+ }
393
+ }
394
+
395
+ function bindAsEventListener(context) {
396
+ var __method = this, args = slice.call(arguments, 1);
397
+ return function(event) {
398
+ var a = update([event || window.event], args);
399
+ return __method.apply(context, a);
400
+ }
401
+ }
402
+
403
+ function curry() {
404
+ if (!arguments.length) return this;
405
+ var __method = this, args = slice.call(arguments, 0);
406
+ return function() {
407
+ var a = merge(args, arguments);
408
+ return __method.apply(this, a);
409
+ }
410
+ }
411
+
412
+ function delay(timeout) {
413
+ var __method = this, args = slice.call(arguments, 1);
414
+ timeout = timeout * 1000;
415
+ return window.setTimeout(function() {
416
+ return __method.apply(__method, args);
417
+ }, timeout);
418
+ }
419
+
420
+ function defer() {
421
+ var args = update([0.01], arguments);
422
+ return this.delay.apply(this, args);
423
+ }
424
+
425
+ function wrap(wrapper) {
426
+ var __method = this;
427
+ return function() {
428
+ var a = update([__method.bind(this)], arguments);
429
+ return wrapper.apply(this, a);
430
+ }
431
+ }
432
+
433
+ function methodize() {
434
+ if (this._methodized) return this._methodized;
435
+ var __method = this;
436
+ return this._methodized = function() {
437
+ var a = update([this], arguments);
438
+ return __method.apply(null, a);
439
+ };
440
+ }
441
+
442
+ return {
443
+ argumentNames: argumentNames,
444
+ bind: bind,
445
+ bindAsEventListener: bindAsEventListener,
446
+ curry: curry,
447
+ delay: delay,
448
+ defer: defer,
449
+ wrap: wrap,
450
+ methodize: methodize
451
+ }
452
+ })());
453
+
454
+
455
+
456
+ (function(proto) {
457
+
458
+
459
+ function toISOString() {
460
+ return this.getUTCFullYear() + '-' +
461
+ (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
462
+ this.getUTCDate().toPaddedString(2) + 'T' +
463
+ this.getUTCHours().toPaddedString(2) + ':' +
464
+ this.getUTCMinutes().toPaddedString(2) + ':' +
465
+ this.getUTCSeconds().toPaddedString(2) + 'Z';
466
+ }
467
+
468
+
469
+ function toJSON() {
470
+ return this.toISOString();
471
+ }
472
+
473
+ if (!proto.toISOString) proto.toISOString = toISOString;
474
+ if (!proto.toJSON) proto.toJSON = toJSON;
475
+
476
+ })(Date.prototype);
477
+
478
+
479
+ RegExp.prototype.match = RegExp.prototype.test;
480
+
481
+ RegExp.escape = function(str) {
482
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
483
+ };
484
+ var PeriodicalExecuter = Class.create({
485
+ initialize: function(callback, frequency) {
486
+ this.callback = callback;
487
+ this.frequency = frequency;
488
+ this.currentlyExecuting = false;
489
+
490
+ this.registerCallback();
491
+ },
492
+
493
+ registerCallback: function() {
494
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
495
+ },
496
+
497
+ execute: function() {
498
+ this.callback(this);
499
+ },
500
+
501
+ stop: function() {
502
+ if (!this.timer) return;
503
+ clearInterval(this.timer);
504
+ this.timer = null;
505
+ },
506
+
507
+ onTimerEvent: function() {
508
+ if (!this.currentlyExecuting) {
509
+ try {
510
+ this.currentlyExecuting = true;
511
+ this.execute();
512
+ this.currentlyExecuting = false;
513
+ } catch(e) {
514
+ this.currentlyExecuting = false;
515
+ throw e;
516
+ }
517
+ }
518
+ }
519
+ });
520
+ Object.extend(String, {
521
+ interpret: function(value) {
522
+ return value == null ? '' : String(value);
523
+ },
524
+ specialChar: {
525
+ '\b': '\\b',
526
+ '\t': '\\t',
527
+ '\n': '\\n',
528
+ '\f': '\\f',
529
+ '\r': '\\r',
530
+ '\\': '\\\\'
531
+ }
532
+ });
533
+
534
+ Object.extend(String.prototype, (function() {
535
+ var NATIVE_JSON_PARSE_SUPPORT = window.JSON &&
536
+ typeof JSON.parse === 'function' &&
537
+ JSON.parse('{"test": true}').test;
538
+
539
+ function prepareReplacement(replacement) {
540
+ if (Object.isFunction(replacement)) return replacement;
541
+ var template = new Template(replacement);
542
+ return function(match) { return template.evaluate(match) };
543
+ }
544
+
545
+ function gsub(pattern, replacement) {
546
+ var result = '', source = this, match;
547
+ replacement = prepareReplacement(replacement);
548
+
549
+ if (Object.isString(pattern))
550
+ pattern = RegExp.escape(pattern);
551
+
552
+ if (!(pattern.length || pattern.source)) {
553
+ replacement = replacement('');
554
+ return replacement + source.split('').join(replacement) + replacement;
555
+ }
556
+
557
+ while (source.length > 0) {
558
+ if (match = source.match(pattern)) {
559
+ result += source.slice(0, match.index);
560
+ result += String.interpret(replacement(match));
561
+ source = source.slice(match.index + match[0].length);
562
+ } else {
563
+ result += source, source = '';
564
+ }
565
+ }
566
+ return result;
567
+ }
568
+
569
+ function sub(pattern, replacement, count) {
570
+ replacement = prepareReplacement(replacement);
571
+ count = Object.isUndefined(count) ? 1 : count;
572
+
573
+ return this.gsub(pattern, function(match) {
574
+ if (--count < 0) return match[0];
575
+ return replacement(match);
576
+ });
577
+ }
578
+
579
+ function scan(pattern, iterator) {
580
+ this.gsub(pattern, iterator);
581
+ return String(this);
582
+ }
583
+
584
+ function truncate(length, truncation) {
585
+ length = length || 30;
586
+ truncation = Object.isUndefined(truncation) ? '...' : truncation;
587
+ return this.length > length ?
588
+ this.slice(0, length - truncation.length) + truncation : String(this);
589
+ }
590
+
591
+ function strip() {
592
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
593
+ }
594
+
595
+ function stripTags() {
596
+ return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
597
+ }
598
+
599
+ function stripScripts() {
600
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
601
+ }
602
+
603
+ function extractScripts() {
604
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img'),
605
+ matchOne = new RegExp(Prototype.ScriptFragment, 'im');
606
+ return (this.match(matchAll) || []).map(function(scriptTag) {
607
+ return (scriptTag.match(matchOne) || ['', ''])[1];
608
+ });
609
+ }
610
+
611
+ function evalScripts() {
612
+ return this.extractScripts().map(function(script) { return eval(script) });
613
+ }
614
+
615
+ function escapeHTML() {
616
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
617
+ }
618
+
619
+ function unescapeHTML() {
620
+ return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
621
+ }
622
+
623
+
624
+ function toQueryParams(separator) {
625
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
626
+ if (!match) return { };
627
+
628
+ return match[1].split(separator || '&').inject({ }, function(hash, pair) {
629
+ if ((pair = pair.split('='))[0]) {
630
+ var key = decodeURIComponent(pair.shift()),
631
+ value = pair.length > 1 ? pair.join('=') : pair[0];
632
+
633
+ if (value != undefined) value = decodeURIComponent(value);
634
+
635
+ if (key in hash) {
636
+ if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
637
+ hash[key].push(value);
638
+ }
639
+ else hash[key] = value;
640
+ }
641
+ return hash;
642
+ });
643
+ }
644
+
645
+ function toArray() {
646
+ return this.split('');
647
+ }
648
+
649
+ function succ() {
650
+ return this.slice(0, this.length - 1) +
651
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
652
+ }
653
+
654
+ function times(count) {
655
+ return count < 1 ? '' : new Array(count + 1).join(this);
656
+ }
657
+
658
+ function camelize() {
659
+ return this.replace(/-+(.)?/g, function(match, chr) {
660
+ return chr ? chr.toUpperCase() : '';
661
+ });
662
+ }
663
+
664
+ function capitalize() {
665
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
666
+ }
667
+
668
+ function underscore() {
669
+ return this.replace(/::/g, '/')
670
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
671
+ .replace(/([a-z\d])([A-Z])/g, '$1_$2')
672
+ .replace(/-/g, '_')
673
+ .toLowerCase();
674
+ }
675
+
676
+ function dasherize() {
677
+ return this.replace(/_/g, '-');
678
+ }
679
+
680
+ function inspect(useDoubleQuotes) {
681
+ var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
682
+ if (character in String.specialChar) {
683
+ return String.specialChar[character];
684
+ }
685
+ return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
686
+ });
687
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
688
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
689
+ }
690
+
691
+ function unfilterJSON(filter) {
692
+ return this.replace(filter || Prototype.JSONFilter, '$1');
693
+ }
694
+
695
+ function isJSON() {
696
+ var str = this;
697
+ if (str.blank()) return false;
698
+ str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@');
699
+ str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
700
+ str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
701
+ return (/^[\],:{}\s]*$/).test(str);
702
+ }
703
+
704
+ function evalJSON(sanitize) {
705
+ var json = this.unfilterJSON(),
706
+ cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
707
+ if (cx.test(json)) {
708
+ json = json.replace(cx, function (a) {
709
+ return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
710
+ });
711
+ }
712
+ try {
713
+ if (!sanitize || json.isJSON()) return eval('(' + json + ')');
714
+ } catch (e) { }
715
+ throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
716
+ }
717
+
718
+ function parseJSON() {
719
+ var json = this.unfilterJSON();
720
+ return JSON.parse(json);
721
+ }
722
+
723
+ function include(pattern) {
724
+ return this.indexOf(pattern) > -1;
725
+ }
726
+
727
+ function startsWith(pattern) {
728
+ return this.lastIndexOf(pattern, 0) === 0;
729
+ }
730
+
731
+ function endsWith(pattern) {
732
+ var d = this.length - pattern.length;
733
+ return d >= 0 && this.indexOf(pattern, d) === d;
734
+ }
735
+
736
+ function empty() {
737
+ return this == '';
738
+ }
739
+
740
+ function blank() {
741
+ return /^\s*$/.test(this);
742
+ }
743
+
744
+ function interpolate(object, pattern) {
745
+ return new Template(this, pattern).evaluate(object);
746
+ }
747
+
748
+ return {
749
+ gsub: gsub,
750
+ sub: sub,
751
+ scan: scan,
752
+ truncate: truncate,
753
+ strip: String.prototype.trim || strip,
754
+ stripTags: stripTags,
755
+ stripScripts: stripScripts,
756
+ extractScripts: extractScripts,
757
+ evalScripts: evalScripts,
758
+ escapeHTML: escapeHTML,
759
+ unescapeHTML: unescapeHTML,
760
+ toQueryParams: toQueryParams,
761
+ parseQuery: toQueryParams,
762
+ toArray: toArray,
763
+ succ: succ,
764
+ times: times,
765
+ camelize: camelize,
766
+ capitalize: capitalize,
767
+ underscore: underscore,
768
+ dasherize: dasherize,
769
+ inspect: inspect,
770
+ unfilterJSON: unfilterJSON,
771
+ isJSON: isJSON,
772
+ evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON,
773
+ include: include,
774
+ startsWith: startsWith,
775
+ endsWith: endsWith,
776
+ empty: empty,
777
+ blank: blank,
778
+ interpolate: interpolate
779
+ };
780
+ })());
781
+
782
+ var Template = Class.create({
783
+ initialize: function(template, pattern) {
784
+ this.template = template.toString();
785
+ this.pattern = pattern || Template.Pattern;
786
+ },
787
+
788
+ evaluate: function(object) {
789
+ if (object && Object.isFunction(object.toTemplateReplacements))
790
+ object = object.toTemplateReplacements();
791
+
792
+ return this.template.gsub(this.pattern, function(match) {
793
+ if (object == null) return (match[1] + '');
794
+
795
+ var before = match[1] || '';
796
+ if (before == '\\') return match[2];
797
+
798
+ var ctx = object, expr = match[3],
799
+ pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
800
+
801
+ match = pattern.exec(expr);
802
+ if (match == null) return before;
803
+
804
+ while (match != null) {
805
+ var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1];
806
+ ctx = ctx[comp];
807
+ if (null == ctx || '' == match[3]) break;
808
+ expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
809
+ match = pattern.exec(expr);
810
+ }
811
+
812
+ return before + String.interpret(ctx);
813
+ });
814
+ }
815
+ });
816
+ Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
817
+
818
+ var $break = { };
819
+
820
+ var Enumerable = (function() {
821
+ function each(iterator, context) {
822
+ var index = 0;
823
+ try {
824
+ this._each(function(value) {
825
+ iterator.call(context, value, index++);
826
+ });
827
+ } catch (e) {
828
+ if (e != $break) throw e;
829
+ }
830
+ return this;
831
+ }
832
+
833
+ function eachSlice(number, iterator, context) {
834
+ var index = -number, slices = [], array = this.toArray();
835
+ if (number < 1) return array;
836
+ while ((index += number) < array.length)
837
+ slices.push(array.slice(index, index+number));
838
+ return slices.collect(iterator, context);
839
+ }
840
+
841
+ function all(iterator, context) {
842
+ iterator = iterator || Prototype.K;
843
+ var result = true;
844
+ this.each(function(value, index) {
845
+ result = result && !!iterator.call(context, value, index);
846
+ if (!result) throw $break;
847
+ });
848
+ return result;
849
+ }
850
+
851
+ function any(iterator, context) {
852
+ iterator = iterator || Prototype.K;
853
+ var result = false;
854
+ this.each(function(value, index) {
855
+ if (result = !!iterator.call(context, value, index))
856
+ throw $break;
857
+ });
858
+ return result;
859
+ }
860
+
861
+ function collect(iterator, context) {
862
+ iterator = iterator || Prototype.K;
863
+ var results = [];
864
+ this.each(function(value, index) {
865
+ results.push(iterator.call(context, value, index));
866
+ });
867
+ return results;
868
+ }
869
+
870
+ function detect(iterator, context) {
871
+ var result;
872
+ this.each(function(value, index) {
873
+ if (iterator.call(context, value, index)) {
874
+ result = value;
875
+ throw $break;
876
+ }
877
+ });
878
+ return result;
879
+ }
880
+
881
+ function findAll(iterator, context) {
882
+ var results = [];
883
+ this.each(function(value, index) {
884
+ if (iterator.call(context, value, index))
885
+ results.push(value);
886
+ });
887
+ return results;
888
+ }
889
+
890
+ function grep(filter, iterator, context) {
891
+ iterator = iterator || Prototype.K;
892
+ var results = [];
893
+
894
+ if (Object.isString(filter))
895
+ filter = new RegExp(RegExp.escape(filter));
896
+
897
+ this.each(function(value, index) {
898
+ if (filter.match(value))
899
+ results.push(iterator.call(context, value, index));
900
+ });
901
+ return results;
902
+ }
903
+
904
+ function include(object) {
905
+ if (Object.isFunction(this.indexOf))
906
+ if (this.indexOf(object) != -1) return true;
907
+
908
+ var found = false;
909
+ this.each(function(value) {
910
+ if (value == object) {
911
+ found = true;
912
+ throw $break;
913
+ }
914
+ });
915
+ return found;
916
+ }
917
+
918
+ function inGroupsOf(number, fillWith) {
919
+ fillWith = Object.isUndefined(fillWith) ? null : fillWith;
920
+ return this.eachSlice(number, function(slice) {
921
+ while(slice.length < number) slice.push(fillWith);
922
+ return slice;
923
+ });
924
+ }
925
+
926
+ function inject(memo, iterator, context) {
927
+ this.each(function(value, index) {
928
+ memo = iterator.call(context, memo, value, index);
929
+ });
930
+ return memo;
931
+ }
932
+
933
+ function invoke(method) {
934
+ var args = $A(arguments).slice(1);
935
+ return this.map(function(value) {
936
+ return value[method].apply(value, args);
937
+ });
938
+ }
939
+
940
+ function max(iterator, context) {
941
+ iterator = iterator || Prototype.K;
942
+ var result;
943
+ this.each(function(value, index) {
944
+ value = iterator.call(context, value, index);
945
+ if (result == null || value >= result)
946
+ result = value;
947
+ });
948
+ return result;
949
+ }
950
+
951
+ function min(iterator, context) {
952
+ iterator = iterator || Prototype.K;
953
+ var result;
954
+ this.each(function(value, index) {
955
+ value = iterator.call(context, value, index);
956
+ if (result == null || value < result)
957
+ result = value;
958
+ });
959
+ return result;
960
+ }
961
+
962
+ function partition(iterator, context) {
963
+ iterator = iterator || Prototype.K;
964
+ var trues = [], falses = [];
965
+ this.each(function(value, index) {
966
+ (iterator.call(context, value, index) ?
967
+ trues : falses).push(value);
968
+ });
969
+ return [trues, falses];
970
+ }
971
+
972
+ function pluck(property) {
973
+ var results = [];
974
+ this.each(function(value) {
975
+ results.push(value[property]);
976
+ });
977
+ return results;
978
+ }
979
+
980
+ function reject(iterator, context) {
981
+ var results = [];
982
+ this.each(function(value, index) {
983
+ if (!iterator.call(context, value, index))
984
+ results.push(value);
985
+ });
986
+ return results;
987
+ }
988
+
989
+ function sortBy(iterator, context) {
990
+ return this.map(function(value, index) {
991
+ return {
992
+ value: value,
993
+ criteria: iterator.call(context, value, index)
994
+ };
995
+ }).sort(function(left, right) {
996
+ var a = left.criteria, b = right.criteria;
997
+ return a < b ? -1 : a > b ? 1 : 0;
998
+ }).pluck('value');
999
+ }
1000
+
1001
+ function toArray() {
1002
+ return this.map();
1003
+ }
1004
+
1005
+ function zip() {
1006
+ var iterator = Prototype.K, args = $A(arguments);
1007
+ if (Object.isFunction(args.last()))
1008
+ iterator = args.pop();
1009
+
1010
+ var collections = [this].concat(args).map($A);
1011
+ return this.map(function(value, index) {
1012
+ return iterator(collections.pluck(index));
1013
+ });
1014
+ }
1015
+
1016
+ function size() {
1017
+ return this.toArray().length;
1018
+ }
1019
+
1020
+ function inspect() {
1021
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
1022
+ }
1023
+
1024
+
1025
+
1026
+
1027
+
1028
+
1029
+
1030
+
1031
+
1032
+ return {
1033
+ each: each,
1034
+ eachSlice: eachSlice,
1035
+ all: all,
1036
+ every: all,
1037
+ any: any,
1038
+ some: any,
1039
+ collect: collect,
1040
+ map: collect,
1041
+ detect: detect,
1042
+ findAll: findAll,
1043
+ select: findAll,
1044
+ filter: findAll,
1045
+ grep: grep,
1046
+ include: include,
1047
+ member: include,
1048
+ inGroupsOf: inGroupsOf,
1049
+ inject: inject,
1050
+ invoke: invoke,
1051
+ max: max,
1052
+ min: min,
1053
+ partition: partition,
1054
+ pluck: pluck,
1055
+ reject: reject,
1056
+ sortBy: sortBy,
1057
+ toArray: toArray,
1058
+ entries: toArray,
1059
+ zip: zip,
1060
+ size: size,
1061
+ inspect: inspect,
1062
+ find: detect
1063
+ };
1064
+ })();
1065
+
1066
+ function $A(iterable) {
1067
+ if (!iterable) return [];
1068
+ if ('toArray' in Object(iterable)) return iterable.toArray();
1069
+ var length = iterable.length || 0, results = new Array(length);
1070
+ while (length--) results[length] = iterable[length];
1071
+ return results;
1072
+ }
1073
+
1074
+
1075
+ function $w(string) {
1076
+ if (!Object.isString(string)) return [];
1077
+ string = string.strip();
1078
+ return string ? string.split(/\s+/) : [];
1079
+ }
1080
+
1081
+ Array.from = $A;
1082
+
1083
+
1084
+ (function() {
1085
+ var arrayProto = Array.prototype,
1086
+ slice = arrayProto.slice,
1087
+ _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available
1088
+
1089
+ function each(iterator, context) {
1090
+ for (var i = 0, length = this.length >>> 0; i < length; i++) {
1091
+ if (i in this) iterator.call(context, this[i], i, this);
1092
+ }
1093
+ }
1094
+ if (!_each) _each = each;
1095
+
1096
+ function clear() {
1097
+ this.length = 0;
1098
+ return this;
1099
+ }
1100
+
1101
+ function first() {
1102
+ return this[0];
1103
+ }
1104
+
1105
+ function last() {
1106
+ return this[this.length - 1];
1107
+ }
1108
+
1109
+ function compact() {
1110
+ return this.select(function(value) {
1111
+ return value != null;
1112
+ });
1113
+ }
1114
+
1115
+ function flatten() {
1116
+ return this.inject([], function(array, value) {
1117
+ if (Object.isArray(value))
1118
+ return array.concat(value.flatten());
1119
+ array.push(value);
1120
+ return array;
1121
+ });
1122
+ }
1123
+
1124
+ function without() {
1125
+ var values = slice.call(arguments, 0);
1126
+ return this.select(function(value) {
1127
+ return !values.include(value);
1128
+ });
1129
+ }
1130
+
1131
+ function reverse(inline) {
1132
+ return (inline === false ? this.toArray() : this)._reverse();
1133
+ }
1134
+
1135
+ function uniq(sorted) {
1136
+ return this.inject([], function(array, value, index) {
1137
+ if (0 == index || (sorted ? array.last() != value : !array.include(value)))
1138
+ array.push(value);
1139
+ return array;
1140
+ });
1141
+ }
1142
+
1143
+ function intersect(array) {
1144
+ return this.uniq().findAll(function(item) {
1145
+ return array.detect(function(value) { return item === value });
1146
+ });
1147
+ }
1148
+
1149
+
1150
+ function clone() {
1151
+ return slice.call(this, 0);
1152
+ }
1153
+
1154
+ function size() {
1155
+ return this.length;
1156
+ }
1157
+
1158
+ function inspect() {
1159
+ return '[' + this.map(Object.inspect).join(', ') + ']';
1160
+ }
1161
+
1162
+ function indexOf(item, i) {
1163
+ i || (i = 0);
1164
+ var length = this.length;
1165
+ if (i < 0) i = length + i;
1166
+ for (; i < length; i++)
1167
+ if (this[i] === item) return i;
1168
+ return -1;
1169
+ }
1170
+
1171
+ function lastIndexOf(item, i) {
1172
+ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
1173
+ var n = this.slice(0, i).reverse().indexOf(item);
1174
+ return (n < 0) ? n : i - n - 1;
1175
+ }
1176
+
1177
+ function concat() {
1178
+ var array = slice.call(this, 0), item;
1179
+ for (var i = 0, length = arguments.length; i < length; i++) {
1180
+ item = arguments[i];
1181
+ if (Object.isArray(item) && !('callee' in item)) {
1182
+ for (var j = 0, arrayLength = item.length; j < arrayLength; j++)
1183
+ array.push(item[j]);
1184
+ } else {
1185
+ array.push(item);
1186
+ }
1187
+ }
1188
+ return array;
1189
+ }
1190
+
1191
+ Object.extend(arrayProto, Enumerable);
1192
+
1193
+ if (!arrayProto._reverse)
1194
+ arrayProto._reverse = arrayProto.reverse;
1195
+
1196
+ Object.extend(arrayProto, {
1197
+ _each: _each,
1198
+ clear: clear,
1199
+ first: first,
1200
+ last: last,
1201
+ compact: compact,
1202
+ flatten: flatten,
1203
+ without: without,
1204
+ reverse: reverse,
1205
+ uniq: uniq,
1206
+ intersect: intersect,
1207
+ clone: clone,
1208
+ toArray: clone,
1209
+ size: size,
1210
+ inspect: inspect
1211
+ });
1212
+
1213
+ var CONCAT_ARGUMENTS_BUGGY = (function() {
1214
+ return [].concat(arguments)[0][0] !== 1;
1215
+ })(1,2)
1216
+
1217
+ if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;
1218
+
1219
+ if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;
1220
+ if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;
1221
+ })();
1222
+ function $H(object) {
1223
+ return new Hash(object);
1224
+ };
1225
+
1226
+ var Hash = Class.create(Enumerable, (function() {
1227
+ function initialize(object) {
1228
+ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
1229
+ }
1230
+
1231
+
1232
+ function _each(iterator) {
1233
+ for (var key in this._object) {
1234
+ var value = this._object[key], pair = [key, value];
1235
+ pair.key = key;
1236
+ pair.value = value;
1237
+ iterator(pair);
1238
+ }
1239
+ }
1240
+
1241
+ function set(key, value) {
1242
+ return this._object[key] = value;
1243
+ }
1244
+
1245
+ function get(key) {
1246
+ if (this._object[key] !== Object.prototype[key])
1247
+ return this._object[key];
1248
+ }
1249
+
1250
+ function unset(key) {
1251
+ var value = this._object[key];
1252
+ delete this._object[key];
1253
+ return value;
1254
+ }
1255
+
1256
+ function toObject() {
1257
+ return Object.clone(this._object);
1258
+ }
1259
+
1260
+
1261
+
1262
+ function keys() {
1263
+ return this.pluck('key');
1264
+ }
1265
+
1266
+ function values() {
1267
+ return this.pluck('value');
1268
+ }
1269
+
1270
+ function index(value) {
1271
+ var match = this.detect(function(pair) {
1272
+ return pair.value === value;
1273
+ });
1274
+ return match && match.key;
1275
+ }
1276
+
1277
+ function merge(object) {
1278
+ return this.clone().update(object);
1279
+ }
1280
+
1281
+ function update(object) {
1282
+ return new Hash(object).inject(this, function(result, pair) {
1283
+ result.set(pair.key, pair.value);
1284
+ return result;
1285
+ });
1286
+ }
1287
+
1288
+ function toQueryPair(key, value) {
1289
+ if (Object.isUndefined(value)) return key;
1290
+ return key + '=' + encodeURIComponent(String.interpret(value));
1291
+ }
1292
+
1293
+ function toQueryString() {
1294
+ return this.inject([], function(results, pair) {
1295
+ var key = encodeURIComponent(pair.key), values = pair.value;
1296
+
1297
+ if (values && typeof values == 'object') {
1298
+ if (Object.isArray(values)) {
1299
+ var queryValues = [];
1300
+ for (var i = 0, len = values.length, value; i < len; i++) {
1301
+ value = values[i];
1302
+ queryValues.push(toQueryPair(key, value));
1303
+ }
1304
+ return results.concat(queryValues);
1305
+ }
1306
+ } else results.push(toQueryPair(key, values));
1307
+ return results;
1308
+ }).join('&');
1309
+ }
1310
+
1311
+ function inspect() {
1312
+ return '#<Hash:{' + this.map(function(pair) {
1313
+ return pair.map(Object.inspect).join(': ');
1314
+ }).join(', ') + '}>';
1315
+ }
1316
+
1317
+ function clone() {
1318
+ return new Hash(this);
1319
+ }
1320
+
1321
+ return {
1322
+ initialize: initialize,
1323
+ _each: _each,
1324
+ set: set,
1325
+ get: get,
1326
+ unset: unset,
1327
+ toObject: toObject,
1328
+ toTemplateReplacements: toObject,
1329
+ keys: keys,
1330
+ values: values,
1331
+ index: index,
1332
+ merge: merge,
1333
+ update: update,
1334
+ toQueryString: toQueryString,
1335
+ inspect: inspect,
1336
+ toJSON: toObject,
1337
+ clone: clone
1338
+ };
1339
+ })());
1340
+
1341
+ Hash.from = $H;
1342
+ Object.extend(Number.prototype, (function() {
1343
+ function toColorPart() {
1344
+ return this.toPaddedString(2, 16);
1345
+ }
1346
+
1347
+ function succ() {
1348
+ return this + 1;
1349
+ }
1350
+
1351
+ function times(iterator, context) {
1352
+ $R(0, this, true).each(iterator, context);
1353
+ return this;
1354
+ }
1355
+
1356
+ function toPaddedString(length, radix) {
1357
+ var string = this.toString(radix || 10);
1358
+ return '0'.times(length - string.length) + string;
1359
+ }
1360
+
1361
+ function abs() {
1362
+ return Math.abs(this);
1363
+ }
1364
+
1365
+ function round() {
1366
+ return Math.round(this);
1367
+ }
1368
+
1369
+ function ceil() {
1370
+ return Math.ceil(this);
1371
+ }
1372
+
1373
+ function floor() {
1374
+ return Math.floor(this);
1375
+ }
1376
+
1377
+ return {
1378
+ toColorPart: toColorPart,
1379
+ succ: succ,
1380
+ times: times,
1381
+ toPaddedString: toPaddedString,
1382
+ abs: abs,
1383
+ round: round,
1384
+ ceil: ceil,
1385
+ floor: floor
1386
+ };
1387
+ })());
1388
+
1389
+ function $R(start, end, exclusive) {
1390
+ return new ObjectRange(start, end, exclusive);
1391
+ }
1392
+
1393
+ var ObjectRange = Class.create(Enumerable, (function() {
1394
+ function initialize(start, end, exclusive) {
1395
+ this.start = start;
1396
+ this.end = end;
1397
+ this.exclusive = exclusive;
1398
+ }
1399
+
1400
+ function _each(iterator) {
1401
+ var value = this.start;
1402
+ while (this.include(value)) {
1403
+ iterator(value);
1404
+ value = value.succ();
1405
+ }
1406
+ }
1407
+
1408
+ function include(value) {
1409
+ if (value < this.start)
1410
+ return false;
1411
+ if (this.exclusive)
1412
+ return value < this.end;
1413
+ return value <= this.end;
1414
+ }
1415
+
1416
+ return {
1417
+ initialize: initialize,
1418
+ _each: _each,
1419
+ include: include
1420
+ };
1421
+ })());
1422
+
1423
+
1424
+
1425
+ var Ajax = {
1426
+ getTransport: function() {
1427
+ return Try.these(
1428
+ function() {return new XMLHttpRequest()},
1429
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
1430
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')}
1431
+ ) || false;
1432
+ },
1433
+
1434
+ activeRequestCount: 0
1435
+ };
1436
+
1437
+ Ajax.Responders = {
1438
+ responders: [],
1439
+
1440
+ _each: function(iterator) {
1441
+ this.responders._each(iterator);
1442
+ },
1443
+
1444
+ register: function(responder) {
1445
+ if (!this.include(responder))
1446
+ this.responders.push(responder);
1447
+ },
1448
+
1449
+ unregister: function(responder) {
1450
+ this.responders = this.responders.without(responder);
1451
+ },
1452
+
1453
+ dispatch: function(callback, request, transport, json) {
1454
+ this.each(function(responder) {
1455
+ if (Object.isFunction(responder[callback])) {
1456
+ try {
1457
+ responder[callback].apply(responder, [request, transport, json]);
1458
+ } catch (e) { }
1459
+ }
1460
+ });
1461
+ }
1462
+ };
1463
+
1464
+ Object.extend(Ajax.Responders, Enumerable);
1465
+
1466
+ Ajax.Responders.register({
1467
+ onCreate: function() { Ajax.activeRequestCount++ },
1468
+ onComplete: function() { Ajax.activeRequestCount-- }
1469
+ });
1470
+ Ajax.Base = Class.create({
1471
+ initialize: function(options) {
1472
+ this.options = {
1473
+ method: 'post',
1474
+ asynchronous: true,
1475
+ contentType: 'application/x-www-form-urlencoded',
1476
+ encoding: 'UTF-8',
1477
+ parameters: '',
1478
+ evalJSON: true,
1479
+ evalJS: true
1480
+ };
1481
+ Object.extend(this.options, options || { });
1482
+
1483
+ this.options.method = this.options.method.toLowerCase();
1484
+
1485
+ if (Object.isHash(this.options.parameters))
1486
+ this.options.parameters = this.options.parameters.toObject();
1487
+ }
1488
+ });
1489
+ Ajax.Request = Class.create(Ajax.Base, {
1490
+ _complete: false,
1491
+
1492
+ initialize: function($super, url, options) {
1493
+ $super(options);
1494
+ this.transport = Ajax.getTransport();
1495
+ this.request(url);
1496
+ },
1497
+
1498
+ request: function(url) {
1499
+ this.url = url;
1500
+ this.method = this.options.method;
1501
+ var params = Object.isString(this.options.parameters) ?
1502
+ this.options.parameters :
1503
+ Object.toQueryString(this.options.parameters);
1504
+
1505
+ if (!['get', 'post'].include(this.method)) {
1506
+ params += (params ? '&' : '') + "_method=" + this.method;
1507
+ this.method = 'post';
1508
+ }
1509
+
1510
+ if (params && this.method === 'get') {
1511
+ this.url += (this.url.include('?') ? '&' : '?') + params;
1512
+ }
1513
+
1514
+ this.parameters = params.toQueryParams();
1515
+
1516
+ try {
1517
+ var response = new Ajax.Response(this);
1518
+ if (this.options.onCreate) this.options.onCreate(response);
1519
+ Ajax.Responders.dispatch('onCreate', this, response);
1520
+
1521
+ this.transport.open(this.method.toUpperCase(), this.url,
1522
+ this.options.asynchronous);
1523
+
1524
+ if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
1525
+
1526
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
1527
+ this.setRequestHeaders();
1528
+
1529
+ this.body = this.method == 'post' ? (this.options.postBody || params) : null;
1530
+ this.transport.send(this.body);
1531
+
1532
+ /* Force Firefox to handle ready state 4 for synchronous requests */
1533
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
1534
+ this.onStateChange();
1535
+
1536
+ }
1537
+ catch (e) {
1538
+ this.dispatchException(e);
1539
+ }
1540
+ },
1541
+
1542
+ onStateChange: function() {
1543
+ var readyState = this.transport.readyState;
1544
+ if (readyState > 1 && !((readyState == 4) && this._complete))
1545
+ this.respondToReadyState(this.transport.readyState);
1546
+ },
1547
+
1548
+ setRequestHeaders: function() {
1549
+ var headers = {
1550
+ 'X-Requested-With': 'XMLHttpRequest',
1551
+ 'X-Prototype-Version': Prototype.Version,
1552
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
1553
+ };
1554
+
1555
+ if (this.method == 'post') {
1556
+ headers['Content-type'] = this.options.contentType +
1557
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
1558
+
1559
+ /* Force "Connection: close" for older Mozilla browsers to work
1560
+ * around a bug where XMLHttpRequest sends an incorrect
1561
+ * Content-length header. See Mozilla Bugzilla #246651.
1562
+ */
1563
+ if (this.transport.overrideMimeType &&
1564
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
1565
+ headers['Connection'] = 'close';
1566
+ }
1567
+
1568
+ if (typeof this.options.requestHeaders == 'object') {
1569
+ var extras = this.options.requestHeaders;
1570
+
1571
+ if (Object.isFunction(extras.push))
1572
+ for (var i = 0, length = extras.length; i < length; i += 2)
1573
+ headers[extras[i]] = extras[i+1];
1574
+ else
1575
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value });
1576
+ }
1577
+
1578
+ for (var name in headers)
1579
+ this.transport.setRequestHeader(name, headers[name]);
1580
+ },
1581
+
1582
+ success: function() {
1583
+ var status = this.getStatus();
1584
+ return !status || (status >= 200 && status < 300) || status == 304;
1585
+ },
1586
+
1587
+ getStatus: function() {
1588
+ try {
1589
+ if (this.transport.status === 1223) return 204;
1590
+ return this.transport.status || 0;
1591
+ } catch (e) { return 0 }
1592
+ },
1593
+
1594
+ respondToReadyState: function(readyState) {
1595
+ var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
1596
+
1597
+ if (state == 'Complete') {
1598
+ try {
1599
+ this._complete = true;
1600
+ (this.options['on' + response.status]
1601
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
1602
+ || Prototype.emptyFunction)(response, response.headerJSON);
1603
+ } catch (e) {
1604
+ this.dispatchException(e);
1605
+ }
1606
+
1607
+ var contentType = response.getHeader('Content-type');
1608
+ if (this.options.evalJS == 'force'
1609
+ || (this.options.evalJS && this.isSameOrigin() && contentType
1610
+ && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
1611
+ this.evalResponse();
1612
+ }
1613
+
1614
+ try {
1615
+ (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
1616
+ Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
1617
+ } catch (e) {
1618
+ this.dispatchException(e);
1619
+ }
1620
+
1621
+ if (state == 'Complete') {
1622
+ this.transport.onreadystatechange = Prototype.emptyFunction;
1623
+ }
1624
+ },
1625
+
1626
+ isSameOrigin: function() {
1627
+ var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
1628
+ return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
1629
+ protocol: location.protocol,
1630
+ domain: document.domain,
1631
+ port: location.port ? ':' + location.port : ''
1632
+ }));
1633
+ },
1634
+
1635
+ getHeader: function(name) {
1636
+ try {
1637
+ return this.transport.getResponseHeader(name) || null;
1638
+ } catch (e) { return null; }
1639
+ },
1640
+
1641
+ evalResponse: function() {
1642
+ try {
1643
+ return eval((this.transport.responseText || '').unfilterJSON());
1644
+ } catch (e) {
1645
+ this.dispatchException(e);
1646
+ }
1647
+ },
1648
+
1649
+ dispatchException: function(exception) {
1650
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
1651
+ Ajax.Responders.dispatch('onException', this, exception);
1652
+ }
1653
+ });
1654
+
1655
+ Ajax.Request.Events =
1656
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
1657
+
1658
+
1659
+
1660
+
1661
+
1662
+
1663
+
1664
+
1665
+ Ajax.Response = Class.create({
1666
+ initialize: function(request){
1667
+ this.request = request;
1668
+ var transport = this.transport = request.transport,
1669
+ readyState = this.readyState = transport.readyState;
1670
+
1671
+ if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
1672
+ this.status = this.getStatus();
1673
+ this.statusText = this.getStatusText();
1674
+ this.responseText = String.interpret(transport.responseText);
1675
+ this.headerJSON = this._getHeaderJSON();
1676
+ }
1677
+
1678
+ if (readyState == 4) {
1679
+ var xml = transport.responseXML;
1680
+ this.responseXML = Object.isUndefined(xml) ? null : xml;
1681
+ this.responseJSON = this._getResponseJSON();
1682
+ }
1683
+ },
1684
+
1685
+ status: 0,
1686
+
1687
+ statusText: '',
1688
+
1689
+ getStatus: Ajax.Request.prototype.getStatus,
1690
+
1691
+ getStatusText: function() {
1692
+ try {
1693
+ return this.transport.statusText || '';
1694
+ } catch (e) { return '' }
1695
+ },
1696
+
1697
+ getHeader: Ajax.Request.prototype.getHeader,
1698
+
1699
+ getAllHeaders: function() {
1700
+ try {
1701
+ return this.getAllResponseHeaders();
1702
+ } catch (e) { return null }
1703
+ },
1704
+
1705
+ getResponseHeader: function(name) {
1706
+ return this.transport.getResponseHeader(name);
1707
+ },
1708
+
1709
+ getAllResponseHeaders: function() {
1710
+ return this.transport.getAllResponseHeaders();
1711
+ },
1712
+
1713
+ _getHeaderJSON: function() {
1714
+ var json = this.getHeader('X-JSON');
1715
+ if (!json) return null;
1716
+ json = decodeURIComponent(escape(json));
1717
+ try {
1718
+ return json.evalJSON(this.request.options.sanitizeJSON ||
1719
+ !this.request.isSameOrigin());
1720
+ } catch (e) {
1721
+ this.request.dispatchException(e);
1722
+ }
1723
+ },
1724
+
1725
+ _getResponseJSON: function() {
1726
+ var options = this.request.options;
1727
+ if (!options.evalJSON || (options.evalJSON != 'force' &&
1728
+ !(this.getHeader('Content-type') || '').include('application/json')) ||
1729
+ this.responseText.blank())
1730
+ return null;
1731
+ try {
1732
+ return this.responseText.evalJSON(options.sanitizeJSON ||
1733
+ !this.request.isSameOrigin());
1734
+ } catch (e) {
1735
+ this.request.dispatchException(e);
1736
+ }
1737
+ }
1738
+ });
1739
+
1740
+ Ajax.Updater = Class.create(Ajax.Request, {
1741
+ initialize: function($super, container, url, options) {
1742
+ this.container = {
1743
+ success: (container.success || container),
1744
+ failure: (container.failure || (container.success ? null : container))
1745
+ };
1746
+
1747
+ options = Object.clone(options);
1748
+ var onComplete = options.onComplete;
1749
+ options.onComplete = (function(response, json) {
1750
+ this.updateContent(response.responseText);
1751
+ if (Object.isFunction(onComplete)) onComplete(response, json);
1752
+ }).bind(this);
1753
+
1754
+ $super(url, options);
1755
+ },
1756
+
1757
+ updateContent: function(responseText) {
1758
+ var receiver = this.container[this.success() ? 'success' : 'failure'],
1759
+ options = this.options;
1760
+
1761
+ if (!options.evalScripts) responseText = responseText.stripScripts();
1762
+
1763
+ if (receiver = $(receiver)) {
1764
+ if (options.insertion) {
1765
+ if (Object.isString(options.insertion)) {
1766
+ var insertion = { }; insertion[options.insertion] = responseText;
1767
+ receiver.insert(insertion);
1768
+ }
1769
+ else options.insertion(receiver, responseText);
1770
+ }
1771
+ else receiver.update(responseText);
1772
+ }
1773
+ }
1774
+ });
1775
+
1776
+ Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
1777
+ initialize: function($super, container, url, options) {
1778
+ $super(options);
1779
+ this.onComplete = this.options.onComplete;
1780
+
1781
+ this.frequency = (this.options.frequency || 2);
1782
+ this.decay = (this.options.decay || 1);
1783
+
1784
+ this.updater = { };
1785
+ this.container = container;
1786
+ this.url = url;
1787
+
1788
+ this.start();
1789
+ },
1790
+
1791
+ start: function() {
1792
+ this.options.onComplete = this.updateComplete.bind(this);
1793
+ this.onTimerEvent();
1794
+ },
1795
+
1796
+ stop: function() {
1797
+ this.updater.options.onComplete = undefined;
1798
+ clearTimeout(this.timer);
1799
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
1800
+ },
1801
+
1802
+ updateComplete: function(response) {
1803
+ if (this.options.decay) {
1804
+ this.decay = (response.responseText == this.lastText ?
1805
+ this.decay * this.options.decay : 1);
1806
+
1807
+ this.lastText = response.responseText;
1808
+ }
1809
+ this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
1810
+ },
1811
+
1812
+ onTimerEvent: function() {
1813
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
1814
+ }
1815
+ });
1816
+
1817
+
1818
+ function $(element) {
1819
+ if (arguments.length > 1) {
1820
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
1821
+ elements.push($(arguments[i]));
1822
+ return elements;
1823
+ }
1824
+ if (Object.isString(element))
1825
+ element = document.getElementById(element);
1826
+ return Element.extend(element);
1827
+ }
1828
+
1829
+ if (Prototype.BrowserFeatures.XPath) {
1830
+ document._getElementsByXPath = function(expression, parentElement) {
1831
+ var results = [];
1832
+ var query = document.evaluate(expression, $(parentElement) || document,
1833
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
1834
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
1835
+ results.push(Element.extend(query.snapshotItem(i)));
1836
+ return results;
1837
+ };
1838
+ }
1839
+
1840
+ /*--------------------------------------------------------------------------*/
1841
+
1842
+ if (!Node) var Node = { };
1843
+
1844
+ if (!Node.ELEMENT_NODE) {
1845
+ Object.extend(Node, {
1846
+ ELEMENT_NODE: 1,
1847
+ ATTRIBUTE_NODE: 2,
1848
+ TEXT_NODE: 3,
1849
+ CDATA_SECTION_NODE: 4,
1850
+ ENTITY_REFERENCE_NODE: 5,
1851
+ ENTITY_NODE: 6,
1852
+ PROCESSING_INSTRUCTION_NODE: 7,
1853
+ COMMENT_NODE: 8,
1854
+ DOCUMENT_NODE: 9,
1855
+ DOCUMENT_TYPE_NODE: 10,
1856
+ DOCUMENT_FRAGMENT_NODE: 11,
1857
+ NOTATION_NODE: 12
1858
+ });
1859
+ }
1860
+
1861
+
1862
+
1863
+ (function(global) {
1864
+ function shouldUseCache(tagName, attributes) {
1865
+ if (tagName === 'select') return false;
1866
+ if ('type' in attributes) return false;
1867
+ return true;
1868
+ }
1869
+
1870
+ var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){
1871
+ try {
1872
+ var el = document.createElement('<input name="x">');
1873
+ return el.tagName.toLowerCase() === 'input' && el.name === 'x';
1874
+ }
1875
+ catch(err) {
1876
+ return false;
1877
+ }
1878
+ })();
1879
+
1880
+ var element = global.Element;
1881
+
1882
+ global.Element = function(tagName, attributes) {
1883
+ attributes = attributes || { };
1884
+ tagName = tagName.toLowerCase();
1885
+ var cache = Element.cache;
1886
+
1887
+ if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) {
1888
+ tagName = '<' + tagName + ' name="' + attributes.name + '">';
1889
+ delete attributes.name;
1890
+ return Element.writeAttribute(document.createElement(tagName), attributes);
1891
+ }
1892
+
1893
+ if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
1894
+
1895
+ var node = shouldUseCache(tagName, attributes) ?
1896
+ cache[tagName].cloneNode(false) : document.createElement(tagName);
1897
+
1898
+ return Element.writeAttribute(node, attributes);
1899
+ };
1900
+
1901
+ Object.extend(global.Element, element || { });
1902
+ if (element) global.Element.prototype = element.prototype;
1903
+
1904
+ })(this);
1905
+
1906
+ Element.idCounter = 1;
1907
+ Element.cache = { };
1908
+
1909
+ Element._purgeElement = function(element) {
1910
+ var uid = element._prototypeUID;
1911
+ if (uid) {
1912
+ Element.stopObserving(element);
1913
+ element._prototypeUID = void 0;
1914
+ delete Element.Storage[uid];
1915
+ }
1916
+ }
1917
+
1918
+ Element.Methods = {
1919
+ visible: function(element) {
1920
+ return $(element).style.display != 'none';
1921
+ },
1922
+
1923
+ toggle: function(element) {
1924
+ element = $(element);
1925
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
1926
+ return element;
1927
+ },
1928
+
1929
+ hide: function(element) {
1930
+ element = $(element);
1931
+ element.style.display = 'none';
1932
+ return element;
1933
+ },
1934
+
1935
+ show: function(element) {
1936
+ element = $(element);
1937
+ element.style.display = '';
1938
+ return element;
1939
+ },
1940
+
1941
+ remove: function(element) {
1942
+ element = $(element);
1943
+ element.parentNode.removeChild(element);
1944
+ return element;
1945
+ },
1946
+
1947
+ update: (function(){
1948
+
1949
+ var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){
1950
+ var el = document.createElement("select"),
1951
+ isBuggy = true;
1952
+ el.innerHTML = "<option value=\"test\">test</option>";
1953
+ if (el.options && el.options[0]) {
1954
+ isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION";
1955
+ }
1956
+ el = null;
1957
+ return isBuggy;
1958
+ })();
1959
+
1960
+ var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){
1961
+ try {
1962
+ var el = document.createElement("table");
1963
+ if (el && el.tBodies) {
1964
+ el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>";
1965
+ var isBuggy = typeof el.tBodies[0] == "undefined";
1966
+ el = null;
1967
+ return isBuggy;
1968
+ }
1969
+ } catch (e) {
1970
+ return true;
1971
+ }
1972
+ })();
1973
+
1974
+ var LINK_ELEMENT_INNERHTML_BUGGY = (function() {
1975
+ try {
1976
+ var el = document.createElement('div');
1977
+ el.innerHTML = "<link>";
1978
+ var isBuggy = (el.childNodes.length === 0);
1979
+ el = null;
1980
+ return isBuggy;
1981
+ } catch(e) {
1982
+ return true;
1983
+ }
1984
+ })();
1985
+
1986
+ var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY ||
1987
+ TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY;
1988
+
1989
+ var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {
1990
+ var s = document.createElement("script"),
1991
+ isBuggy = false;
1992
+ try {
1993
+ s.appendChild(document.createTextNode(""));
1994
+ isBuggy = !s.firstChild ||
1995
+ s.firstChild && s.firstChild.nodeType !== 3;
1996
+ } catch (e) {
1997
+ isBuggy = true;
1998
+ }
1999
+ s = null;
2000
+ return isBuggy;
2001
+ })();
2002
+
2003
+
2004
+ function update(element, content) {
2005
+ element = $(element);
2006
+ var purgeElement = Element._purgeElement;
2007
+
2008
+ var descendants = element.getElementsByTagName('*'),
2009
+ i = descendants.length;
2010
+ while (i--) purgeElement(descendants[i]);
2011
+
2012
+ if (content && content.toElement)
2013
+ content = content.toElement();
2014
+
2015
+ if (Object.isElement(content))
2016
+ return element.update().insert(content);
2017
+
2018
+ content = Object.toHTML(content);
2019
+
2020
+ var tagName = element.tagName.toUpperCase();
2021
+
2022
+ if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {
2023
+ element.text = content;
2024
+ return element;
2025
+ }
2026
+
2027
+ if (ANY_INNERHTML_BUGGY) {
2028
+ if (tagName in Element._insertionTranslations.tags) {
2029
+ while (element.firstChild) {
2030
+ element.removeChild(element.firstChild);
2031
+ }
2032
+ Element._getContentFromAnonymousElement(tagName, content.stripScripts())
2033
+ .each(function(node) {
2034
+ element.appendChild(node)
2035
+ });
2036
+ } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf('<link') > -1) {
2037
+ while (element.firstChild) {
2038
+ element.removeChild(element.firstChild);
2039
+ }
2040
+ var nodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts(), true);
2041
+ nodes.each(function(node) { element.appendChild(node) });
2042
+ }
2043
+ else {
2044
+ element.innerHTML = content.stripScripts();
2045
+ }
2046
+ }
2047
+ else {
2048
+ element.innerHTML = content.stripScripts();
2049
+ }
2050
+
2051
+ content.evalScripts.bind(content).defer();
2052
+ return element;
2053
+ }
2054
+
2055
+ return update;
2056
+ })(),
2057
+
2058
+ replace: function(element, content) {
2059
+ element = $(element);
2060
+ if (content && content.toElement) content = content.toElement();
2061
+ else if (!Object.isElement(content)) {
2062
+ content = Object.toHTML(content);
2063
+ var range = element.ownerDocument.createRange();
2064
+ range.selectNode(element);
2065
+ content.evalScripts.bind(content).defer();
2066
+ content = range.createContextualFragment(content.stripScripts());
2067
+ }
2068
+ element.parentNode.replaceChild(content, element);
2069
+ return element;
2070
+ },
2071
+
2072
+ insert: function(element, insertions) {
2073
+ element = $(element);
2074
+
2075
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
2076
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
2077
+ insertions = {bottom:insertions};
2078
+
2079
+ var content, insert, tagName, childNodes;
2080
+
2081
+ for (var position in insertions) {
2082
+ content = insertions[position];
2083
+ position = position.toLowerCase();
2084
+ insert = Element._insertionTranslations[position];
2085
+
2086
+ if (content && content.toElement) content = content.toElement();
2087
+ if (Object.isElement(content)) {
2088
+ insert(element, content);
2089
+ continue;
2090
+ }
2091
+
2092
+ content = Object.toHTML(content);
2093
+
2094
+ tagName = ((position == 'before' || position == 'after')
2095
+ ? element.parentNode : element).tagName.toUpperCase();
2096
+
2097
+ childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
2098
+
2099
+ if (position == 'top' || position == 'after') childNodes.reverse();
2100
+ childNodes.each(insert.curry(element));
2101
+
2102
+ content.evalScripts.bind(content).defer();
2103
+ }
2104
+
2105
+ return element;
2106
+ },
2107
+
2108
+ wrap: function(element, wrapper, attributes) {
2109
+ element = $(element);
2110
+ if (Object.isElement(wrapper))
2111
+ $(wrapper).writeAttribute(attributes || { });
2112
+ else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
2113
+ else wrapper = new Element('div', wrapper);
2114
+ if (element.parentNode)
2115
+ element.parentNode.replaceChild(wrapper, element);
2116
+ wrapper.appendChild(element);
2117
+ return wrapper;
2118
+ },
2119
+
2120
+ inspect: function(element) {
2121
+ element = $(element);
2122
+ var result = '<' + element.tagName.toLowerCase();
2123
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
2124
+ var property = pair.first(),
2125
+ attribute = pair.last(),
2126
+ value = (element[property] || '').toString();
2127
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
2128
+ });
2129
+ return result + '>';
2130
+ },
2131
+
2132
+ recursivelyCollect: function(element, property, maximumLength) {
2133
+ element = $(element);
2134
+ maximumLength = maximumLength || -1;
2135
+ var elements = [];
2136
+
2137
+ while (element = element[property]) {
2138
+ if (element.nodeType == 1)
2139
+ elements.push(Element.extend(element));
2140
+ if (elements.length == maximumLength)
2141
+ break;
2142
+ }
2143
+
2144
+ return elements;
2145
+ },
2146
+
2147
+ ancestors: function(element) {
2148
+ return Element.recursivelyCollect(element, 'parentNode');
2149
+ },
2150
+
2151
+ descendants: function(element) {
2152
+ return Element.select(element, "*");
2153
+ },
2154
+
2155
+ firstDescendant: function(element) {
2156
+ element = $(element).firstChild;
2157
+ while (element && element.nodeType != 1) element = element.nextSibling;
2158
+ return $(element);
2159
+ },
2160
+
2161
+ immediateDescendants: function(element) {
2162
+ var results = [], child = $(element).firstChild;
2163
+ while (child) {
2164
+ if (child.nodeType === 1) {
2165
+ results.push(Element.extend(child));
2166
+ }
2167
+ child = child.nextSibling;
2168
+ }
2169
+ return results;
2170
+ },
2171
+
2172
+ previousSiblings: function(element, maximumLength) {
2173
+ return Element.recursivelyCollect(element, 'previousSibling');
2174
+ },
2175
+
2176
+ nextSiblings: function(element) {
2177
+ return Element.recursivelyCollect(element, 'nextSibling');
2178
+ },
2179
+
2180
+ siblings: function(element) {
2181
+ element = $(element);
2182
+ return Element.previousSiblings(element).reverse()
2183
+ .concat(Element.nextSiblings(element));
2184
+ },
2185
+
2186
+ match: function(element, selector) {
2187
+ element = $(element);
2188
+ if (Object.isString(selector))
2189
+ return Prototype.Selector.match(element, selector);
2190
+ return selector.match(element);
2191
+ },
2192
+
2193
+ up: function(element, expression, index) {
2194
+ element = $(element);
2195
+ if (arguments.length == 1) return $(element.parentNode);
2196
+ var ancestors = Element.ancestors(element);
2197
+ return Object.isNumber(expression) ? ancestors[expression] :
2198
+ Prototype.Selector.find(ancestors, expression, index);
2199
+ },
2200
+
2201
+ down: function(element, expression, index) {
2202
+ element = $(element);
2203
+ if (arguments.length == 1) return Element.firstDescendant(element);
2204
+ return Object.isNumber(expression) ? Element.descendants(element)[expression] :
2205
+ Element.select(element, expression)[index || 0];
2206
+ },
2207
+
2208
+ previous: function(element, expression, index) {
2209
+ element = $(element);
2210
+ if (Object.isNumber(expression)) index = expression, expression = false;
2211
+ if (!Object.isNumber(index)) index = 0;
2212
+
2213
+ if (expression) {
2214
+ return Prototype.Selector.find(element.previousSiblings(), expression, index);
2215
+ } else {
2216
+ return element.recursivelyCollect("previousSibling", index + 1)[index];
2217
+ }
2218
+ },
2219
+
2220
+ next: function(element, expression, index) {
2221
+ element = $(element);
2222
+ if (Object.isNumber(expression)) index = expression, expression = false;
2223
+ if (!Object.isNumber(index)) index = 0;
2224
+
2225
+ if (expression) {
2226
+ return Prototype.Selector.find(element.nextSiblings(), expression, index);
2227
+ } else {
2228
+ var maximumLength = Object.isNumber(index) ? index + 1 : 1;
2229
+ return element.recursivelyCollect("nextSibling", index + 1)[index];
2230
+ }
2231
+ },
2232
+
2233
+
2234
+ select: function(element) {
2235
+ element = $(element);
2236
+ var expressions = Array.prototype.slice.call(arguments, 1).join(', ');
2237
+ return Prototype.Selector.select(expressions, element);
2238
+ },
2239
+
2240
+ adjacent: function(element) {
2241
+ element = $(element);
2242
+ var expressions = Array.prototype.slice.call(arguments, 1).join(', ');
2243
+ return Prototype.Selector.select(expressions, element.parentNode).without(element);
2244
+ },
2245
+
2246
+ identify: function(element) {
2247
+ element = $(element);
2248
+ var id = Element.readAttribute(element, 'id');
2249
+ if (id) return id;
2250
+ do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id));
2251
+ Element.writeAttribute(element, 'id', id);
2252
+ return id;
2253
+ },
2254
+
2255
+ readAttribute: function(element, name) {
2256
+ element = $(element);
2257
+ if (Prototype.Browser.IE) {
2258
+ var t = Element._attributeTranslations.read;
2259
+ if (t.values[name]) return t.values[name](element, name);
2260
+ if (t.names[name]) name = t.names[name];
2261
+ if (name.include(':')) {
2262
+ return (!element.attributes || !element.attributes[name]) ? null :
2263
+ element.attributes[name].value;
2264
+ }
2265
+ }
2266
+ return element.getAttribute(name);
2267
+ },
2268
+
2269
+ writeAttribute: function(element, name, value) {
2270
+ element = $(element);
2271
+ var attributes = { }, t = Element._attributeTranslations.write;
2272
+
2273
+ if (typeof name == 'object') attributes = name;
2274
+ else attributes[name] = Object.isUndefined(value) ? true : value;
2275
+
2276
+ for (var attr in attributes) {
2277
+ name = t.names[attr] || attr;
2278
+ value = attributes[attr];
2279
+ if (t.values[attr]) name = t.values[attr](element, value);
2280
+ if (value === false || value === null)
2281
+ element.removeAttribute(name);
2282
+ else if (value === true)
2283
+ element.setAttribute(name, name);
2284
+ else element.setAttribute(name, value);
2285
+ }
2286
+ return element;
2287
+ },
2288
+
2289
+ getHeight: function(element) {
2290
+ return Element.getDimensions(element).height;
2291
+ },
2292
+
2293
+ getWidth: function(element) {
2294
+ return Element.getDimensions(element).width;
2295
+ },
2296
+
2297
+ classNames: function(element) {
2298
+ return new Element.ClassNames(element);
2299
+ },
2300
+
2301
+ hasClassName: function(element, className) {
2302
+ if (!(element = $(element))) return;
2303
+ var elementClassName = element.className;
2304
+ return (elementClassName.length > 0 && (elementClassName == className ||
2305
+ new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
2306
+ },
2307
+
2308
+ addClassName: function(element, className) {
2309
+ if (!(element = $(element))) return;
2310
+ if (!Element.hasClassName(element, className))
2311
+ element.className += (element.className ? ' ' : '') + className;
2312
+ return element;
2313
+ },
2314
+
2315
+ removeClassName: function(element, className) {
2316
+ if (!(element = $(element))) return;
2317
+ element.className = element.className.replace(
2318
+ new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
2319
+ return element;
2320
+ },
2321
+
2322
+ toggleClassName: function(element, className) {
2323
+ if (!(element = $(element))) return;
2324
+ return Element[Element.hasClassName(element, className) ?
2325
+ 'removeClassName' : 'addClassName'](element, className);
2326
+ },
2327
+
2328
+ cleanWhitespace: function(element) {
2329
+ element = $(element);
2330
+ var node = element.firstChild;
2331
+ while (node) {
2332
+ var nextNode = node.nextSibling;
2333
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
2334
+ element.removeChild(node);
2335
+ node = nextNode;
2336
+ }
2337
+ return element;
2338
+ },
2339
+
2340
+ empty: function(element) {
2341
+ return $(element).innerHTML.blank();
2342
+ },
2343
+
2344
+ descendantOf: function(element, ancestor) {
2345
+ element = $(element), ancestor = $(ancestor);
2346
+
2347
+ if (element.compareDocumentPosition)
2348
+ return (element.compareDocumentPosition(ancestor) & 8) === 8;
2349
+
2350
+ if (ancestor.contains)
2351
+ return ancestor.contains(element) && ancestor !== element;
2352
+
2353
+ while (element = element.parentNode)
2354
+ if (element == ancestor) return true;
2355
+
2356
+ return false;
2357
+ },
2358
+
2359
+ scrollTo: function(element) {
2360
+ element = $(element);
2361
+ var pos = Element.cumulativeOffset(element);
2362
+ window.scrollTo(pos[0], pos[1]);
2363
+ return element;
2364
+ },
2365
+
2366
+ getStyle: function(element, style) {
2367
+ element = $(element);
2368
+ style = style == 'float' ? 'cssFloat' : style.camelize();
2369
+ var value = element.style[style];
2370
+ if (!value || value == 'auto') {
2371
+ var css = document.defaultView.getComputedStyle(element, null);
2372
+ value = css ? css[style] : null;
2373
+ }
2374
+ if (style == 'opacity') return value ? parseFloat(value) : 1.0;
2375
+ return value == 'auto' ? null : value;
2376
+ },
2377
+
2378
+ getOpacity: function(element) {
2379
+ return $(element).getStyle('opacity');
2380
+ },
2381
+
2382
+ setStyle: function(element, styles) {
2383
+ element = $(element);
2384
+ var elementStyle = element.style, match;
2385
+ if (Object.isString(styles)) {
2386
+ element.style.cssText += ';' + styles;
2387
+ return styles.include('opacity') ?
2388
+ element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
2389
+ }
2390
+ for (var property in styles)
2391
+ if (property == 'opacity') element.setOpacity(styles[property]);
2392
+ else
2393
+ elementStyle[(property == 'float' || property == 'cssFloat') ?
2394
+ (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
2395
+ property] = styles[property];
2396
+
2397
+ return element;
2398
+ },
2399
+
2400
+ setOpacity: function(element, value) {
2401
+ element = $(element);
2402
+ element.style.opacity = (value == 1 || value === '') ? '' :
2403
+ (value < 0.00001) ? 0 : value;
2404
+ return element;
2405
+ },
2406
+
2407
+ makePositioned: function(element) {
2408
+ element = $(element);
2409
+ var pos = Element.getStyle(element, 'position');
2410
+ if (pos == 'static' || !pos) {
2411
+ element._madePositioned = true;
2412
+ element.style.position = 'relative';
2413
+ if (Prototype.Browser.Opera) {
2414
+ element.style.top = 0;
2415
+ element.style.left = 0;
2416
+ }
2417
+ }
2418
+ return element;
2419
+ },
2420
+
2421
+ undoPositioned: function(element) {
2422
+ element = $(element);
2423
+ if (element._madePositioned) {
2424
+ element._madePositioned = undefined;
2425
+ element.style.position =
2426
+ element.style.top =
2427
+ element.style.left =
2428
+ element.style.bottom =
2429
+ element.style.right = '';
2430
+ }
2431
+ return element;
2432
+ },
2433
+
2434
+ makeClipping: function(element) {
2435
+ element = $(element);
2436
+ if (element._overflow) return element;
2437
+ element._overflow = Element.getStyle(element, 'overflow') || 'auto';
2438
+ if (element._overflow !== 'hidden')
2439
+ element.style.overflow = 'hidden';
2440
+ return element;
2441
+ },
2442
+
2443
+ undoClipping: function(element) {
2444
+ element = $(element);
2445
+ if (!element._overflow) return element;
2446
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
2447
+ element._overflow = null;
2448
+ return element;
2449
+ },
2450
+
2451
+ clonePosition: function(element, source) {
2452
+ var options = Object.extend({
2453
+ setLeft: true,
2454
+ setTop: true,
2455
+ setWidth: true,
2456
+ setHeight: true,
2457
+ offsetTop: 0,
2458
+ offsetLeft: 0
2459
+ }, arguments[2] || { });
2460
+
2461
+ source = $(source);
2462
+ var p = Element.viewportOffset(source), delta = [0, 0], parent = null;
2463
+
2464
+ element = $(element);
2465
+
2466
+ if (Element.getStyle(element, 'position') == 'absolute') {
2467
+ parent = Element.getOffsetParent(element);
2468
+ delta = Element.viewportOffset(parent);
2469
+ }
2470
+
2471
+ if (parent == document.body) {
2472
+ delta[0] -= document.body.offsetLeft;
2473
+ delta[1] -= document.body.offsetTop;
2474
+ }
2475
+
2476
+ if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
2477
+ if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
2478
+ if (options.setWidth) element.style.width = source.offsetWidth + 'px';
2479
+ if (options.setHeight) element.style.height = source.offsetHeight + 'px';
2480
+ return element;
2481
+ }
2482
+ };
2483
+
2484
+ Object.extend(Element.Methods, {
2485
+ getElementsBySelector: Element.Methods.select,
2486
+
2487
+ childElements: Element.Methods.immediateDescendants
2488
+ });
2489
+
2490
+ Element._attributeTranslations = {
2491
+ write: {
2492
+ names: {
2493
+ className: 'class',
2494
+ htmlFor: 'for'
2495
+ },
2496
+ values: { }
2497
+ }
2498
+ };
2499
+
2500
+ if (Prototype.Browser.Opera) {
2501
+ Element.Methods.getStyle = Element.Methods.getStyle.wrap(
2502
+ function(proceed, element, style) {
2503
+ switch (style) {
2504
+ case 'height': case 'width':
2505
+ if (!Element.visible(element)) return null;
2506
+
2507
+ var dim = parseInt(proceed(element, style), 10);
2508
+
2509
+ if (dim !== element['offset' + style.capitalize()])
2510
+ return dim + 'px';
2511
+
2512
+ var properties;
2513
+ if (style === 'height') {
2514
+ properties = ['border-top-width', 'padding-top',
2515
+ 'padding-bottom', 'border-bottom-width'];
2516
+ }
2517
+ else {
2518
+ properties = ['border-left-width', 'padding-left',
2519
+ 'padding-right', 'border-right-width'];
2520
+ }
2521
+ return properties.inject(dim, function(memo, property) {
2522
+ var val = proceed(element, property);
2523
+ return val === null ? memo : memo - parseInt(val, 10);
2524
+ }) + 'px';
2525
+ default: return proceed(element, style);
2526
+ }
2527
+ }
2528
+ );
2529
+
2530
+ Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
2531
+ function(proceed, element, attribute) {
2532
+ if (attribute === 'title') return element.title;
2533
+ return proceed(element, attribute);
2534
+ }
2535
+ );
2536
+ }
2537
+
2538
+ else if (Prototype.Browser.IE) {
2539
+ Element.Methods.getStyle = function(element, style) {
2540
+ element = $(element);
2541
+ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
2542
+ var value = element.style[style];
2543
+ if (!value && element.currentStyle) value = element.currentStyle[style];
2544
+
2545
+ if (style == 'opacity') {
2546
+ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
2547
+ if (value[1]) return parseFloat(value[1]) / 100;
2548
+ return 1.0;
2549
+ }
2550
+
2551
+ if (value == 'auto') {
2552
+ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
2553
+ return element['offset' + style.capitalize()] + 'px';
2554
+ return null;
2555
+ }
2556
+ return value;
2557
+ };
2558
+
2559
+ Element.Methods.setOpacity = function(element, value) {
2560
+ function stripAlpha(filter){
2561
+ return filter.replace(/alpha\([^\)]*\)/gi,'');
2562
+ }
2563
+ element = $(element);
2564
+ var currentStyle = element.currentStyle;
2565
+ if ((currentStyle && !currentStyle.hasLayout) ||
2566
+ (!currentStyle && element.style.zoom == 'normal'))
2567
+ element.style.zoom = 1;
2568
+
2569
+ var filter = element.getStyle('filter'), style = element.style;
2570
+ if (value == 1 || value === '') {
2571
+ (filter = stripAlpha(filter)) ?
2572
+ style.filter = filter : style.removeAttribute('filter');
2573
+ return element;
2574
+ } else if (value < 0.00001) value = 0;
2575
+ style.filter = stripAlpha(filter) +
2576
+ 'alpha(opacity=' + (value * 100) + ')';
2577
+ return element;
2578
+ };
2579
+
2580
+ Element._attributeTranslations = (function(){
2581
+
2582
+ var classProp = 'className',
2583
+ forProp = 'for',
2584
+ el = document.createElement('div');
2585
+
2586
+ el.setAttribute(classProp, 'x');
2587
+
2588
+ if (el.className !== 'x') {
2589
+ el.setAttribute('class', 'x');
2590
+ if (el.className === 'x') {
2591
+ classProp = 'class';
2592
+ }
2593
+ }
2594
+ el = null;
2595
+
2596
+ el = document.createElement('label');
2597
+ el.setAttribute(forProp, 'x');
2598
+ if (el.htmlFor !== 'x') {
2599
+ el.setAttribute('htmlFor', 'x');
2600
+ if (el.htmlFor === 'x') {
2601
+ forProp = 'htmlFor';
2602
+ }
2603
+ }
2604
+ el = null;
2605
+
2606
+ return {
2607
+ read: {
2608
+ names: {
2609
+ 'class': classProp,
2610
+ 'className': classProp,
2611
+ 'for': forProp,
2612
+ 'htmlFor': forProp
2613
+ },
2614
+ values: {
2615
+ _getAttr: function(element, attribute) {
2616
+ return element.getAttribute(attribute);
2617
+ },
2618
+ _getAttr2: function(element, attribute) {
2619
+ return element.getAttribute(attribute, 2);
2620
+ },
2621
+ _getAttrNode: function(element, attribute) {
2622
+ var node = element.getAttributeNode(attribute);
2623
+ return node ? node.value : "";
2624
+ },
2625
+ _getEv: (function(){
2626
+
2627
+ var el = document.createElement('div'), f;
2628
+ el.onclick = Prototype.emptyFunction;
2629
+ var value = el.getAttribute('onclick');
2630
+
2631
+ if (String(value).indexOf('{') > -1) {
2632
+ f = function(element, attribute) {
2633
+ attribute = element.getAttribute(attribute);
2634
+ if (!attribute) return null;
2635
+ attribute = attribute.toString();
2636
+ attribute = attribute.split('{')[1];
2637
+ attribute = attribute.split('}')[0];
2638
+ return attribute.strip();
2639
+ };
2640
+ }
2641
+ else if (value === '') {
2642
+ f = function(element, attribute) {
2643
+ attribute = element.getAttribute(attribute);
2644
+ if (!attribute) return null;
2645
+ return attribute.strip();
2646
+ };
2647
+ }
2648
+ el = null;
2649
+ return f;
2650
+ })(),
2651
+ _flag: function(element, attribute) {
2652
+ return $(element).hasAttribute(attribute) ? attribute : null;
2653
+ },
2654
+ style: function(element) {
2655
+ return element.style.cssText.toLowerCase();
2656
+ },
2657
+ title: function(element) {
2658
+ return element.title;
2659
+ }
2660
+ }
2661
+ }
2662
+ }
2663
+ })();
2664
+
2665
+ Element._attributeTranslations.write = {
2666
+ names: Object.extend({
2667
+ cellpadding: 'cellPadding',
2668
+ cellspacing: 'cellSpacing'
2669
+ }, Element._attributeTranslations.read.names),
2670
+ values: {
2671
+ checked: function(element, value) {
2672
+ element.checked = !!value;
2673
+ },
2674
+
2675
+ style: function(element, value) {
2676
+ element.style.cssText = value ? value : '';
2677
+ }
2678
+ }
2679
+ };
2680
+
2681
+ Element._attributeTranslations.has = {};
2682
+
2683
+ $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
2684
+ 'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
2685
+ Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
2686
+ Element._attributeTranslations.has[attr.toLowerCase()] = attr;
2687
+ });
2688
+
2689
+ (function(v) {
2690
+ Object.extend(v, {
2691
+ href: v._getAttr2,
2692
+ src: v._getAttr2,
2693
+ type: v._getAttr,
2694
+ action: v._getAttrNode,
2695
+ disabled: v._flag,
2696
+ checked: v._flag,
2697
+ readonly: v._flag,
2698
+ multiple: v._flag,
2699
+ onload: v._getEv,
2700
+ onunload: v._getEv,
2701
+ onclick: v._getEv,
2702
+ ondblclick: v._getEv,
2703
+ onmousedown: v._getEv,
2704
+ onmouseup: v._getEv,
2705
+ onmouseover: v._getEv,
2706
+ onmousemove: v._getEv,
2707
+ onmouseout: v._getEv,
2708
+ onfocus: v._getEv,
2709
+ onblur: v._getEv,
2710
+ onkeypress: v._getEv,
2711
+ onkeydown: v._getEv,
2712
+ onkeyup: v._getEv,
2713
+ onsubmit: v._getEv,
2714
+ onreset: v._getEv,
2715
+ onselect: v._getEv,
2716
+ onchange: v._getEv
2717
+ });
2718
+ })(Element._attributeTranslations.read.values);
2719
+
2720
+ if (Prototype.BrowserFeatures.ElementExtensions) {
2721
+ (function() {
2722
+ function _descendants(element) {
2723
+ var nodes = element.getElementsByTagName('*'), results = [];
2724
+ for (var i = 0, node; node = nodes[i]; i++)
2725
+ if (node.tagName !== "!") // Filter out comment nodes.
2726
+ results.push(node);
2727
+ return results;
2728
+ }
2729
+
2730
+ Element.Methods.down = function(element, expression, index) {
2731
+ element = $(element);
2732
+ if (arguments.length == 1) return element.firstDescendant();
2733
+ return Object.isNumber(expression) ? _descendants(element)[expression] :
2734
+ Element.select(element, expression)[index || 0];
2735
+ }
2736
+ })();
2737
+ }
2738
+
2739
+ }
2740
+
2741
+ else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
2742
+ Element.Methods.setOpacity = function(element, value) {
2743
+ element = $(element);
2744
+ element.style.opacity = (value == 1) ? 0.999999 :
2745
+ (value === '') ? '' : (value < 0.00001) ? 0 : value;
2746
+ return element;
2747
+ };
2748
+ }
2749
+
2750
+ else if (Prototype.Browser.WebKit) {
2751
+ Element.Methods.setOpacity = function(element, value) {
2752
+ element = $(element);
2753
+ element.style.opacity = (value == 1 || value === '') ? '' :
2754
+ (value < 0.00001) ? 0 : value;
2755
+
2756
+ if (value == 1)
2757
+ if (element.tagName.toUpperCase() == 'IMG' && element.width) {
2758
+ element.width++; element.width--;
2759
+ } else try {
2760
+ var n = document.createTextNode(' ');
2761
+ element.appendChild(n);
2762
+ element.removeChild(n);
2763
+ } catch (e) { }
2764
+
2765
+ return element;
2766
+ };
2767
+ }
2768
+
2769
+ if ('outerHTML' in document.documentElement) {
2770
+ Element.Methods.replace = function(element, content) {
2771
+ element = $(element);
2772
+
2773
+ if (content && content.toElement) content = content.toElement();
2774
+ if (Object.isElement(content)) {
2775
+ element.parentNode.replaceChild(content, element);
2776
+ return element;
2777
+ }
2778
+
2779
+ content = Object.toHTML(content);
2780
+ var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
2781
+
2782
+ if (Element._insertionTranslations.tags[tagName]) {
2783
+ var nextSibling = element.next(),
2784
+ fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
2785
+ parent.removeChild(element);
2786
+ if (nextSibling)
2787
+ fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
2788
+ else
2789
+ fragments.each(function(node) { parent.appendChild(node) });
2790
+ }
2791
+ else element.outerHTML = content.stripScripts();
2792
+
2793
+ content.evalScripts.bind(content).defer();
2794
+ return element;
2795
+ };
2796
+ }
2797
+
2798
+ Element._returnOffset = function(l, t) {
2799
+ var result = [l, t];
2800
+ result.left = l;
2801
+ result.top = t;
2802
+ return result;
2803
+ };
2804
+
2805
+ Element._getContentFromAnonymousElement = function(tagName, html, force) {
2806
+ var div = new Element('div'),
2807
+ t = Element._insertionTranslations.tags[tagName];
2808
+
2809
+ var workaround = false;
2810
+ if (t) workaround = true;
2811
+ else if (force) {
2812
+ workaround = true;
2813
+ t = ['', '', 0];
2814
+ }
2815
+
2816
+ if (workaround) {
2817
+ div.innerHTML = '&nbsp;' + t[0] + html + t[1];
2818
+ div.removeChild(div.firstChild);
2819
+ for (var i = t[2]; i--; ) {
2820
+ div = div.firstChild;
2821
+ }
2822
+ }
2823
+ else {
2824
+ div.innerHTML = html;
2825
+ }
2826
+ return $A(div.childNodes);
2827
+ };
2828
+
2829
+ Element._insertionTranslations = {
2830
+ before: function(element, node) {
2831
+ element.parentNode.insertBefore(node, element);
2832
+ },
2833
+ top: function(element, node) {
2834
+ element.insertBefore(node, element.firstChild);
2835
+ },
2836
+ bottom: function(element, node) {
2837
+ element.appendChild(node);
2838
+ },
2839
+ after: function(element, node) {
2840
+ element.parentNode.insertBefore(node, element.nextSibling);
2841
+ },
2842
+ tags: {
2843
+ TABLE: ['<table>', '</table>', 1],
2844
+ TBODY: ['<table><tbody>', '</tbody></table>', 2],
2845
+ TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
2846
+ TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
2847
+ SELECT: ['<select>', '</select>', 1]
2848
+ }
2849
+ };
2850
+
2851
+ (function() {
2852
+ var tags = Element._insertionTranslations.tags;
2853
+ Object.extend(tags, {
2854
+ THEAD: tags.TBODY,
2855
+ TFOOT: tags.TBODY,
2856
+ TH: tags.TD
2857
+ });
2858
+ })();
2859
+
2860
+ Element.Methods.Simulated = {
2861
+ hasAttribute: function(element, attribute) {
2862
+ attribute = Element._attributeTranslations.has[attribute] || attribute;
2863
+ var node = $(element).getAttributeNode(attribute);
2864
+ return !!(node && node.specified);
2865
+ }
2866
+ };
2867
+
2868
+ Element.Methods.ByTag = { };
2869
+
2870
+ Object.extend(Element, Element.Methods);
2871
+
2872
+ (function(div) {
2873
+
2874
+ if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {
2875
+ window.HTMLElement = { };
2876
+ window.HTMLElement.prototype = div['__proto__'];
2877
+ Prototype.BrowserFeatures.ElementExtensions = true;
2878
+ }
2879
+
2880
+ div = null;
2881
+
2882
+ })(document.createElement('div'));
2883
+
2884
+ Element.extend = (function() {
2885
+
2886
+ function checkDeficiency(tagName) {
2887
+ if (typeof window.Element != 'undefined') {
2888
+ var proto = window.Element.prototype;
2889
+ if (proto) {
2890
+ var id = '_' + (Math.random()+'').slice(2),
2891
+ el = document.createElement(tagName);
2892
+ proto[id] = 'x';
2893
+ var isBuggy = (el[id] !== 'x');
2894
+ delete proto[id];
2895
+ el = null;
2896
+ return isBuggy;
2897
+ }
2898
+ }
2899
+ return false;
2900
+ }
2901
+
2902
+ function extendElementWith(element, methods) {
2903
+ for (var property in methods) {
2904
+ var value = methods[property];
2905
+ if (Object.isFunction(value) && !(property in element))
2906
+ element[property] = value.methodize();
2907
+ }
2908
+ }
2909
+
2910
+ var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');
2911
+
2912
+ if (Prototype.BrowserFeatures.SpecificElementExtensions) {
2913
+ if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {
2914
+ return function(element) {
2915
+ if (element && typeof element._extendedByPrototype == 'undefined') {
2916
+ var t = element.tagName;
2917
+ if (t && (/^(?:object|applet|embed)$/i.test(t))) {
2918
+ extendElementWith(element, Element.Methods);
2919
+ extendElementWith(element, Element.Methods.Simulated);
2920
+ extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);
2921
+ }
2922
+ }
2923
+ return element;
2924
+ }
2925
+ }
2926
+ return Prototype.K;
2927
+ }
2928
+
2929
+ var Methods = { }, ByTag = Element.Methods.ByTag;
2930
+
2931
+ var extend = Object.extend(function(element) {
2932
+ if (!element || typeof element._extendedByPrototype != 'undefined' ||
2933
+ element.nodeType != 1 || element == window) return element;
2934
+
2935
+ var methods = Object.clone(Methods),
2936
+ tagName = element.tagName.toUpperCase();
2937
+
2938
+ if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
2939
+
2940
+ extendElementWith(element, methods);
2941
+
2942
+ element._extendedByPrototype = Prototype.emptyFunction;
2943
+ return element;
2944
+
2945
+ }, {
2946
+ refresh: function() {
2947
+ if (!Prototype.BrowserFeatures.ElementExtensions) {
2948
+ Object.extend(Methods, Element.Methods);
2949
+ Object.extend(Methods, Element.Methods.Simulated);
2950
+ }
2951
+ }
2952
+ });
2953
+
2954
+ extend.refresh();
2955
+ return extend;
2956
+ })();
2957
+
2958
+ if (document.documentElement.hasAttribute) {
2959
+ Element.hasAttribute = function(element, attribute) {
2960
+ return element.hasAttribute(attribute);
2961
+ };
2962
+ }
2963
+ else {
2964
+ Element.hasAttribute = Element.Methods.Simulated.hasAttribute;
2965
+ }
2966
+
2967
+ Element.addMethods = function(methods) {
2968
+ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
2969
+
2970
+ if (!methods) {
2971
+ Object.extend(Form, Form.Methods);
2972
+ Object.extend(Form.Element, Form.Element.Methods);
2973
+ Object.extend(Element.Methods.ByTag, {
2974
+ "FORM": Object.clone(Form.Methods),
2975
+ "INPUT": Object.clone(Form.Element.Methods),
2976
+ "SELECT": Object.clone(Form.Element.Methods),
2977
+ "TEXTAREA": Object.clone(Form.Element.Methods),
2978
+ "BUTTON": Object.clone(Form.Element.Methods)
2979
+ });
2980
+ }
2981
+
2982
+ if (arguments.length == 2) {
2983
+ var tagName = methods;
2984
+ methods = arguments[1];
2985
+ }
2986
+
2987
+ if (!tagName) Object.extend(Element.Methods, methods || { });
2988
+ else {
2989
+ if (Object.isArray(tagName)) tagName.each(extend);
2990
+ else extend(tagName);
2991
+ }
2992
+
2993
+ function extend(tagName) {
2994
+ tagName = tagName.toUpperCase();
2995
+ if (!Element.Methods.ByTag[tagName])
2996
+ Element.Methods.ByTag[tagName] = { };
2997
+ Object.extend(Element.Methods.ByTag[tagName], methods);
2998
+ }
2999
+
3000
+ function copy(methods, destination, onlyIfAbsent) {
3001
+ onlyIfAbsent = onlyIfAbsent || false;
3002
+ for (var property in methods) {
3003
+ var value = methods[property];
3004
+ if (!Object.isFunction(value)) continue;
3005
+ if (!onlyIfAbsent || !(property in destination))
3006
+ destination[property] = value.methodize();
3007
+ }
3008
+ }
3009
+
3010
+ function findDOMClass(tagName) {
3011
+ var klass;
3012
+ var trans = {
3013
+ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
3014
+ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
3015
+ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
3016
+ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
3017
+ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
3018
+ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
3019
+ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
3020
+ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
3021
+ "FrameSet", "IFRAME": "IFrame"
3022
+ };
3023
+ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
3024
+ if (window[klass]) return window[klass];
3025
+ klass = 'HTML' + tagName + 'Element';
3026
+ if (window[klass]) return window[klass];
3027
+ klass = 'HTML' + tagName.capitalize() + 'Element';
3028
+ if (window[klass]) return window[klass];
3029
+
3030
+ var element = document.createElement(tagName),
3031
+ proto = element['__proto__'] || element.constructor.prototype;
3032
+
3033
+ element = null;
3034
+ return proto;
3035
+ }
3036
+
3037
+ var elementPrototype = window.HTMLElement ? HTMLElement.prototype :
3038
+ Element.prototype;
3039
+
3040
+ if (F.ElementExtensions) {
3041
+ copy(Element.Methods, elementPrototype);
3042
+ copy(Element.Methods.Simulated, elementPrototype, true);
3043
+ }
3044
+
3045
+ if (F.SpecificElementExtensions) {
3046
+ for (var tag in Element.Methods.ByTag) {
3047
+ var klass = findDOMClass(tag);
3048
+ if (Object.isUndefined(klass)) continue;
3049
+ copy(T[tag], klass.prototype);
3050
+ }
3051
+ }
3052
+
3053
+ Object.extend(Element, Element.Methods);
3054
+ delete Element.ByTag;
3055
+
3056
+ if (Element.extend.refresh) Element.extend.refresh();
3057
+ Element.cache = { };
3058
+ };
3059
+
3060
+
3061
+ document.viewport = {
3062
+
3063
+ getDimensions: function() {
3064
+ return { width: this.getWidth(), height: this.getHeight() };
3065
+ },
3066
+
3067
+ getScrollOffsets: function() {
3068
+ return Element._returnOffset(
3069
+ window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
3070
+ window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
3071
+ }
3072
+ };
3073
+
3074
+ (function(viewport) {
3075
+ var B = Prototype.Browser, doc = document, element, property = {};
3076
+
3077
+ function getRootElement() {
3078
+ if (B.WebKit && !doc.evaluate)
3079
+ return document;
3080
+
3081
+ if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
3082
+ return document.body;
3083
+
3084
+ return document.documentElement;
3085
+ }
3086
+
3087
+ function define(D) {
3088
+ if (!element) element = getRootElement();
3089
+
3090
+ property[D] = 'client' + D;
3091
+
3092
+ viewport['get' + D] = function() { return element[property[D]] };
3093
+ return viewport['get' + D]();
3094
+ }
3095
+
3096
+ viewport.getWidth = define.curry('Width');
3097
+
3098
+ viewport.getHeight = define.curry('Height');
3099
+ })(document.viewport);
3100
+
3101
+
3102
+ Element.Storage = {
3103
+ UID: 1
3104
+ };
3105
+
3106
+ Element.addMethods({
3107
+ getStorage: function(element) {
3108
+ if (!(element = $(element))) return;
3109
+
3110
+ var uid;
3111
+ if (element === window) {
3112
+ uid = 0;
3113
+ } else {
3114
+ if (typeof element._prototypeUID === "undefined")
3115
+ element._prototypeUID = Element.Storage.UID++;
3116
+ uid = element._prototypeUID;
3117
+ }
3118
+
3119
+ if (!Element.Storage[uid])
3120
+ Element.Storage[uid] = $H();
3121
+
3122
+ return Element.Storage[uid];
3123
+ },
3124
+
3125
+ store: function(element, key, value) {
3126
+ if (!(element = $(element))) return;
3127
+
3128
+ if (arguments.length === 2) {
3129
+ Element.getStorage(element).update(key);
3130
+ } else {
3131
+ Element.getStorage(element).set(key, value);
3132
+ }
3133
+
3134
+ return element;
3135
+ },
3136
+
3137
+ retrieve: function(element, key, defaultValue) {
3138
+ if (!(element = $(element))) return;
3139
+ var hash = Element.getStorage(element), value = hash.get(key);
3140
+
3141
+ if (Object.isUndefined(value)) {
3142
+ hash.set(key, defaultValue);
3143
+ value = defaultValue;
3144
+ }
3145
+
3146
+ return value;
3147
+ },
3148
+
3149
+ clone: function(element, deep) {
3150
+ if (!(element = $(element))) return;
3151
+ var clone = element.cloneNode(deep);
3152
+ clone._prototypeUID = void 0;
3153
+ if (deep) {
3154
+ var descendants = Element.select(clone, '*'),
3155
+ i = descendants.length;
3156
+ while (i--) {
3157
+ descendants[i]._prototypeUID = void 0;
3158
+ }
3159
+ }
3160
+ return Element.extend(clone);
3161
+ },
3162
+
3163
+ purge: function(element) {
3164
+ if (!(element = $(element))) return;
3165
+ var purgeElement = Element._purgeElement;
3166
+
3167
+ purgeElement(element);
3168
+
3169
+ var descendants = element.getElementsByTagName('*'),
3170
+ i = descendants.length;
3171
+
3172
+ while (i--) purgeElement(descendants[i]);
3173
+
3174
+ return null;
3175
+ }
3176
+ });
3177
+
3178
+ (function() {
3179
+
3180
+ function toDecimal(pctString) {
3181
+ var match = pctString.match(/^(\d+)%?$/i);
3182
+ if (!match) return null;
3183
+ return (Number(match[1]) / 100);
3184
+ }
3185
+
3186
+ function getPixelValue(value, property, context) {
3187
+ var element = null;
3188
+ if (Object.isElement(value)) {
3189
+ element = value;
3190
+ value = element.getStyle(property);
3191
+ }
3192
+
3193
+ if (value === null) {
3194
+ return null;
3195
+ }
3196
+
3197
+ if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) {
3198
+ return window.parseFloat(value);
3199
+ }
3200
+
3201
+ var isPercentage = value.include('%'), isViewport = (context === document.viewport);
3202
+
3203
+ if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) {
3204
+ var style = element.style.left, rStyle = element.runtimeStyle.left;
3205
+ element.runtimeStyle.left = element.currentStyle.left;
3206
+ element.style.left = value || 0;
3207
+ value = element.style.pixelLeft;
3208
+ element.style.left = style;
3209
+ element.runtimeStyle.left = rStyle;
3210
+
3211
+ return value;
3212
+ }
3213
+
3214
+ if (element && isPercentage) {
3215
+ context = context || element.parentNode;
3216
+ var decimal = toDecimal(value);
3217
+ var whole = null;
3218
+ var position = element.getStyle('position');
3219
+
3220
+ var isHorizontal = property.include('left') || property.include('right') ||
3221
+ property.include('width');
3222
+
3223
+ var isVertical = property.include('top') || property.include('bottom') ||
3224
+ property.include('height');
3225
+
3226
+ if (context === document.viewport) {
3227
+ if (isHorizontal) {
3228
+ whole = document.viewport.getWidth();
3229
+ } else if (isVertical) {
3230
+ whole = document.viewport.getHeight();
3231
+ }
3232
+ } else {
3233
+ if (isHorizontal) {
3234
+ whole = $(context).measure('width');
3235
+ } else if (isVertical) {
3236
+ whole = $(context).measure('height');
3237
+ }
3238
+ }
3239
+
3240
+ return (whole === null) ? 0 : whole * decimal;
3241
+ }
3242
+
3243
+ return 0;
3244
+ }
3245
+
3246
+ function toCSSPixels(number) {
3247
+ if (Object.isString(number) && number.endsWith('px')) {
3248
+ return number;
3249
+ }
3250
+ return number + 'px';
3251
+ }
3252
+
3253
+ function isDisplayed(element) {
3254
+ var originalElement = element;
3255
+ while (element && element.parentNode) {
3256
+ var display = element.getStyle('display');
3257
+ if (display === 'none') {
3258
+ return false;
3259
+ }
3260
+ element = $(element.parentNode);
3261
+ }
3262
+ return true;
3263
+ }
3264
+
3265
+ var hasLayout = Prototype.K;
3266
+ if ('currentStyle' in document.documentElement) {
3267
+ hasLayout = function(element) {
3268
+ if (!element.currentStyle.hasLayout) {
3269
+ element.style.zoom = 1;
3270
+ }
3271
+ return element;
3272
+ };
3273
+ }
3274
+
3275
+ function cssNameFor(key) {
3276
+ if (key.include('border')) key = key + '-width';
3277
+ return key.camelize();
3278
+ }
3279
+
3280
+ Element.Layout = Class.create(Hash, {
3281
+ initialize: function($super, element, preCompute) {
3282
+ $super();
3283
+ this.element = $(element);
3284
+
3285
+ Element.Layout.PROPERTIES.each( function(property) {
3286
+ this._set(property, null);
3287
+ }, this);
3288
+
3289
+ if (preCompute) {
3290
+ this._preComputing = true;
3291
+ this._begin();
3292
+ Element.Layout.PROPERTIES.each( this._compute, this );
3293
+ this._end();
3294
+ this._preComputing = false;
3295
+ }
3296
+ },
3297
+
3298
+ _set: function(property, value) {
3299
+ return Hash.prototype.set.call(this, property, value);
3300
+ },
3301
+
3302
+ set: function(property, value) {
3303
+ throw "Properties of Element.Layout are read-only.";
3304
+ },
3305
+
3306
+ get: function($super, property) {
3307
+ var value = $super(property);
3308
+ return value === null ? this._compute(property) : value;
3309
+ },
3310
+
3311
+ _begin: function() {
3312
+ if (this._prepared) return;
3313
+
3314
+ var element = this.element;
3315
+ if (isDisplayed(element)) {
3316
+ this._prepared = true;
3317
+ return;
3318
+ }
3319
+
3320
+ var originalStyles = {
3321
+ position: element.style.position || '',
3322
+ width: element.style.width || '',
3323
+ visibility: element.style.visibility || '',
3324
+ display: element.style.display || ''
3325
+ };
3326
+
3327
+ element.store('prototype_original_styles', originalStyles);
3328
+
3329
+ var position = element.getStyle('position'),
3330
+ width = element.getStyle('width');
3331
+
3332
+ if (width === "0px" || width === null) {
3333
+ element.style.display = 'block';
3334
+ width = element.getStyle('width');
3335
+ }
3336
+
3337
+ var context = (position === 'fixed') ? document.viewport :
3338
+ element.parentNode;
3339
+
3340
+ element.setStyle({
3341
+ position: 'absolute',
3342
+ visibility: 'hidden',
3343
+ display: 'block'
3344
+ });
3345
+
3346
+ var positionedWidth = element.getStyle('width');
3347
+
3348
+ var newWidth;
3349
+ if (width && (positionedWidth === width)) {
3350
+ newWidth = getPixelValue(element, 'width', context);
3351
+ } else if (position === 'absolute' || position === 'fixed') {
3352
+ newWidth = getPixelValue(element, 'width', context);
3353
+ } else {
3354
+ var parent = element.parentNode, pLayout = $(parent).getLayout();
3355
+
3356
+ newWidth = pLayout.get('width') -
3357
+ this.get('margin-left') -
3358
+ this.get('border-left') -
3359
+ this.get('padding-left') -
3360
+ this.get('padding-right') -
3361
+ this.get('border-right') -
3362
+ this.get('margin-right');
3363
+ }
3364
+
3365
+ element.setStyle({ width: newWidth + 'px' });
3366
+
3367
+ this._prepared = true;
3368
+ },
3369
+
3370
+ _end: function() {
3371
+ var element = this.element;
3372
+ var originalStyles = element.retrieve('prototype_original_styles');
3373
+ element.store('prototype_original_styles', null);
3374
+ element.setStyle(originalStyles);
3375
+ this._prepared = false;
3376
+ },
3377
+
3378
+ _compute: function(property) {
3379
+ var COMPUTATIONS = Element.Layout.COMPUTATIONS;
3380
+ if (!(property in COMPUTATIONS)) {
3381
+ throw "Property not found.";
3382
+ }
3383
+
3384
+ return this._set(property, COMPUTATIONS[property].call(this, this.element));
3385
+ },
3386
+
3387
+ toObject: function() {
3388
+ var args = $A(arguments);
3389
+ var keys = (args.length === 0) ? Element.Layout.PROPERTIES :
3390
+ args.join(' ').split(' ');
3391
+ var obj = {};
3392
+ keys.each( function(key) {
3393
+ if (!Element.Layout.PROPERTIES.include(key)) return;
3394
+ var value = this.get(key);
3395
+ if (value != null) obj[key] = value;
3396
+ }, this);
3397
+ return obj;
3398
+ },
3399
+
3400
+ toHash: function() {
3401
+ var obj = this.toObject.apply(this, arguments);
3402
+ return new Hash(obj);
3403
+ },
3404
+
3405
+ toCSS: function() {
3406
+ var args = $A(arguments);
3407
+ var keys = (args.length === 0) ? Element.Layout.PROPERTIES :
3408
+ args.join(' ').split(' ');
3409
+ var css = {};
3410
+
3411
+ keys.each( function(key) {
3412
+ if (!Element.Layout.PROPERTIES.include(key)) return;
3413
+ if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return;
3414
+
3415
+ var value = this.get(key);
3416
+ if (value != null) css[cssNameFor(key)] = value + 'px';
3417
+ }, this);
3418
+ return css;
3419
+ },
3420
+
3421
+ inspect: function() {
3422
+ return "#<Element.Layout>";
3423
+ }
3424
+ });
3425
+
3426
+ Object.extend(Element.Layout, {
3427
+ PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'),
3428
+
3429
+ COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'),
3430
+
3431
+ COMPUTATIONS: {
3432
+ 'height': function(element) {
3433
+ if (!this._preComputing) this._begin();
3434
+
3435
+ var bHeight = this.get('border-box-height');
3436
+ if (bHeight <= 0) {
3437
+ if (!this._preComputing) this._end();
3438
+ return 0;
3439
+ }
3440
+
3441
+ var bTop = this.get('border-top'),
3442
+ bBottom = this.get('border-bottom');
3443
+
3444
+ var pTop = this.get('padding-top'),
3445
+ pBottom = this.get('padding-bottom');
3446
+
3447
+ if (!this._preComputing) this._end();
3448
+
3449
+ return bHeight - bTop - bBottom - pTop - pBottom;
3450
+ },
3451
+
3452
+ 'width': function(element) {
3453
+ if (!this._preComputing) this._begin();
3454
+
3455
+ var bWidth = this.get('border-box-width');
3456
+ if (bWidth <= 0) {
3457
+ if (!this._preComputing) this._end();
3458
+ return 0;
3459
+ }
3460
+
3461
+ var bLeft = this.get('border-left'),
3462
+ bRight = this.get('border-right');
3463
+
3464
+ var pLeft = this.get('padding-left'),
3465
+ pRight = this.get('padding-right');
3466
+
3467
+ if (!this._preComputing) this._end();
3468
+
3469
+ return bWidth - bLeft - bRight - pLeft - pRight;
3470
+ },
3471
+
3472
+ 'padding-box-height': function(element) {
3473
+ var height = this.get('height'),
3474
+ pTop = this.get('padding-top'),
3475
+ pBottom = this.get('padding-bottom');
3476
+
3477
+ return height + pTop + pBottom;
3478
+ },
3479
+
3480
+ 'padding-box-width': function(element) {
3481
+ var width = this.get('width'),
3482
+ pLeft = this.get('padding-left'),
3483
+ pRight = this.get('padding-right');
3484
+
3485
+ return width + pLeft + pRight;
3486
+ },
3487
+
3488
+ 'border-box-height': function(element) {
3489
+ if (!this._preComputing) this._begin();
3490
+ var height = element.offsetHeight;
3491
+ if (!this._preComputing) this._end();
3492
+ return height;
3493
+ },
3494
+
3495
+ 'border-box-width': function(element) {
3496
+ if (!this._preComputing) this._begin();
3497
+ var width = element.offsetWidth;
3498
+ if (!this._preComputing) this._end();
3499
+ return width;
3500
+ },
3501
+
3502
+ 'margin-box-height': function(element) {
3503
+ var bHeight = this.get('border-box-height'),
3504
+ mTop = this.get('margin-top'),
3505
+ mBottom = this.get('margin-bottom');
3506
+
3507
+ if (bHeight <= 0) return 0;
3508
+
3509
+ return bHeight + mTop + mBottom;
3510
+ },
3511
+
3512
+ 'margin-box-width': function(element) {
3513
+ var bWidth = this.get('border-box-width'),
3514
+ mLeft = this.get('margin-left'),
3515
+ mRight = this.get('margin-right');
3516
+
3517
+ if (bWidth <= 0) return 0;
3518
+
3519
+ return bWidth + mLeft + mRight;
3520
+ },
3521
+
3522
+ 'top': function(element) {
3523
+ var offset = element.positionedOffset();
3524
+ return offset.top;
3525
+ },
3526
+
3527
+ 'bottom': function(element) {
3528
+ var offset = element.positionedOffset(),
3529
+ parent = element.getOffsetParent(),
3530
+ pHeight = parent.measure('height');
3531
+
3532
+ var mHeight = this.get('border-box-height');
3533
+
3534
+ return pHeight - mHeight - offset.top;
3535
+ },
3536
+
3537
+ 'left': function(element) {
3538
+ var offset = element.positionedOffset();
3539
+ return offset.left;
3540
+ },
3541
+
3542
+ 'right': function(element) {
3543
+ var offset = element.positionedOffset(),
3544
+ parent = element.getOffsetParent(),
3545
+ pWidth = parent.measure('width');
3546
+
3547
+ var mWidth = this.get('border-box-width');
3548
+
3549
+ return pWidth - mWidth - offset.left;
3550
+ },
3551
+
3552
+ 'padding-top': function(element) {
3553
+ return getPixelValue(element, 'paddingTop');
3554
+ },
3555
+
3556
+ 'padding-bottom': function(element) {
3557
+ return getPixelValue(element, 'paddingBottom');
3558
+ },
3559
+
3560
+ 'padding-left': function(element) {
3561
+ return getPixelValue(element, 'paddingLeft');
3562
+ },
3563
+
3564
+ 'padding-right': function(element) {
3565
+ return getPixelValue(element, 'paddingRight');
3566
+ },
3567
+
3568
+ 'border-top': function(element) {
3569
+ return getPixelValue(element, 'borderTopWidth');
3570
+ },
3571
+
3572
+ 'border-bottom': function(element) {
3573
+ return getPixelValue(element, 'borderBottomWidth');
3574
+ },
3575
+
3576
+ 'border-left': function(element) {
3577
+ return getPixelValue(element, 'borderLeftWidth');
3578
+ },
3579
+
3580
+ 'border-right': function(element) {
3581
+ return getPixelValue(element, 'borderRightWidth');
3582
+ },
3583
+
3584
+ 'margin-top': function(element) {
3585
+ return getPixelValue(element, 'marginTop');
3586
+ },
3587
+
3588
+ 'margin-bottom': function(element) {
3589
+ return getPixelValue(element, 'marginBottom');
3590
+ },
3591
+
3592
+ 'margin-left': function(element) {
3593
+ return getPixelValue(element, 'marginLeft');
3594
+ },
3595
+
3596
+ 'margin-right': function(element) {
3597
+ return getPixelValue(element, 'marginRight');
3598
+ }
3599
+ }
3600
+ });
3601
+
3602
+ if ('getBoundingClientRect' in document.documentElement) {
3603
+ Object.extend(Element.Layout.COMPUTATIONS, {
3604
+ 'right': function(element) {
3605
+ var parent = hasLayout(element.getOffsetParent());
3606
+ var rect = element.getBoundingClientRect(),
3607
+ pRect = parent.getBoundingClientRect();
3608
+
3609
+ return (pRect.right - rect.right).round();
3610
+ },
3611
+
3612
+ 'bottom': function(element) {
3613
+ var parent = hasLayout(element.getOffsetParent());
3614
+ var rect = element.getBoundingClientRect(),
3615
+ pRect = parent.getBoundingClientRect();
3616
+
3617
+ return (pRect.bottom - rect.bottom).round();
3618
+ }
3619
+ });
3620
+ }
3621
+
3622
+ Element.Offset = Class.create({
3623
+ initialize: function(left, top) {
3624
+ this.left = left.round();
3625
+ this.top = top.round();
3626
+
3627
+ this[0] = this.left;
3628
+ this[1] = this.top;
3629
+ },
3630
+
3631
+ relativeTo: function(offset) {
3632
+ return new Element.Offset(
3633
+ this.left - offset.left,
3634
+ this.top - offset.top
3635
+ );
3636
+ },
3637
+
3638
+ inspect: function() {
3639
+ return "#<Element.Offset left: #{left} top: #{top}>".interpolate(this);
3640
+ },
3641
+
3642
+ toString: function() {
3643
+ return "[#{left}, #{top}]".interpolate(this);
3644
+ },
3645
+
3646
+ toArray: function() {
3647
+ return [this.left, this.top];
3648
+ }
3649
+ });
3650
+
3651
+ function getLayout(element, preCompute) {
3652
+ return new Element.Layout(element, preCompute);
3653
+ }
3654
+
3655
+ function measure(element, property) {
3656
+ return $(element).getLayout().get(property);
3657
+ }
3658
+
3659
+ function getDimensions(element) {
3660
+ element = $(element);
3661
+ var display = Element.getStyle(element, 'display');
3662
+
3663
+ if (display && display !== 'none') {
3664
+ return { width: element.offsetWidth, height: element.offsetHeight };
3665
+ }
3666
+
3667
+ var style = element.style;
3668
+ var originalStyles = {
3669
+ visibility: style.visibility,
3670
+ position: style.position,
3671
+ display: style.display
3672
+ };
3673
+
3674
+ var newStyles = {
3675
+ visibility: 'hidden',
3676
+ display: 'block'
3677
+ };
3678
+
3679
+ if (originalStyles.position !== 'fixed')
3680
+ newStyles.position = 'absolute';
3681
+
3682
+ Element.setStyle(element, newStyles);
3683
+
3684
+ var dimensions = {
3685
+ width: element.offsetWidth,
3686
+ height: element.offsetHeight
3687
+ };
3688
+
3689
+ Element.setStyle(element, originalStyles);
3690
+
3691
+ return dimensions;
3692
+ }
3693
+
3694
+ function getOffsetParent(element) {
3695
+ element = $(element);
3696
+
3697
+ if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
3698
+ return $(document.body);
3699
+
3700
+ var isInline = (Element.getStyle(element, 'display') === 'inline');
3701
+ if (!isInline && element.offsetParent) return $(element.offsetParent);
3702
+
3703
+ while ((element = element.parentNode) && element !== document.body) {
3704
+ if (Element.getStyle(element, 'position') !== 'static') {
3705
+ return isHtml(element) ? $(document.body) : $(element);
3706
+ }
3707
+ }
3708
+
3709
+ return $(document.body);
3710
+ }
3711
+
3712
+
3713
+ function cumulativeOffset(element) {
3714
+ element = $(element);
3715
+ var valueT = 0, valueL = 0;
3716
+ if (element.parentNode) {
3717
+ do {
3718
+ valueT += element.offsetTop || 0;
3719
+ valueL += element.offsetLeft || 0;
3720
+ element = element.offsetParent;
3721
+ } while (element);
3722
+ }
3723
+ return new Element.Offset(valueL, valueT);
3724
+ }
3725
+
3726
+ function positionedOffset(element) {
3727
+ element = $(element);
3728
+
3729
+ var layout = element.getLayout();
3730
+
3731
+ var valueT = 0, valueL = 0;
3732
+ do {
3733
+ valueT += element.offsetTop || 0;
3734
+ valueL += element.offsetLeft || 0;
3735
+ element = element.offsetParent;
3736
+ if (element) {
3737
+ if (isBody(element)) break;
3738
+ var p = Element.getStyle(element, 'position');
3739
+ if (p !== 'static') break;
3740
+ }
3741
+ } while (element);
3742
+
3743
+ valueL -= layout.get('margin-top');
3744
+ valueT -= layout.get('margin-left');
3745
+
3746
+ return new Element.Offset(valueL, valueT);
3747
+ }
3748
+
3749
+ function cumulativeScrollOffset(element) {
3750
+ var valueT = 0, valueL = 0;
3751
+ do {
3752
+ valueT += element.scrollTop || 0;
3753
+ valueL += element.scrollLeft || 0;
3754
+ element = element.parentNode;
3755
+ } while (element);
3756
+ return new Element.Offset(valueL, valueT);
3757
+ }
3758
+
3759
+ function viewportOffset(forElement) {
3760
+ element = $(element);
3761
+ var valueT = 0, valueL = 0, docBody = document.body;
3762
+
3763
+ var element = forElement;
3764
+ do {
3765
+ valueT += element.offsetTop || 0;
3766
+ valueL += element.offsetLeft || 0;
3767
+ if (element.offsetParent == docBody &&
3768
+ Element.getStyle(element, 'position') == 'absolute') break;
3769
+ } while (element = element.offsetParent);
3770
+
3771
+ element = forElement;
3772
+ do {
3773
+ if (element != docBody) {
3774
+ valueT -= element.scrollTop || 0;
3775
+ valueL -= element.scrollLeft || 0;
3776
+ }
3777
+ } while (element = element.parentNode);
3778
+ return new Element.Offset(valueL, valueT);
3779
+ }
3780
+
3781
+ function absolutize(element) {
3782
+ element = $(element);
3783
+
3784
+ if (Element.getStyle(element, 'position') === 'absolute') {
3785
+ return element;
3786
+ }
3787
+
3788
+ var offsetParent = getOffsetParent(element);
3789
+ var eOffset = element.viewportOffset(),
3790
+ pOffset = offsetParent.viewportOffset();
3791
+
3792
+ var offset = eOffset.relativeTo(pOffset);
3793
+ var layout = element.getLayout();
3794
+
3795
+ element.store('prototype_absolutize_original_styles', {
3796
+ left: element.getStyle('left'),
3797
+ top: element.getStyle('top'),
3798
+ width: element.getStyle('width'),
3799
+ height: element.getStyle('height')
3800
+ });
3801
+
3802
+ element.setStyle({
3803
+ position: 'absolute',
3804
+ top: offset.top + 'px',
3805
+ left: offset.left + 'px',
3806
+ width: layout.get('width') + 'px',
3807
+ height: layout.get('height') + 'px'
3808
+ });
3809
+
3810
+ return element;
3811
+ }
3812
+
3813
+ function relativize(element) {
3814
+ element = $(element);
3815
+ if (Element.getStyle(element, 'position') === 'relative') {
3816
+ return element;
3817
+ }
3818
+
3819
+ var originalStyles =
3820
+ element.retrieve('prototype_absolutize_original_styles');
3821
+
3822
+ if (originalStyles) element.setStyle(originalStyles);
3823
+ return element;
3824
+ }
3825
+
3826
+ if (Prototype.Browser.IE) {
3827
+ getOffsetParent = getOffsetParent.wrap(
3828
+ function(proceed, element) {
3829
+ element = $(element);
3830
+
3831
+ if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
3832
+ return $(document.body);
3833
+
3834
+ var position = element.getStyle('position');
3835
+ if (position !== 'static') return proceed(element);
3836
+
3837
+ element.setStyle({ position: 'relative' });
3838
+ var value = proceed(element);
3839
+ element.setStyle({ position: position });
3840
+ return value;
3841
+ }
3842
+ );
3843
+
3844
+ positionedOffset = positionedOffset.wrap(function(proceed, element) {
3845
+ element = $(element);
3846
+ if (!element.parentNode) return new Element.Offset(0, 0);
3847
+ var position = element.getStyle('position');
3848
+ if (position !== 'static') return proceed(element);
3849
+
3850
+ var offsetParent = element.getOffsetParent();
3851
+ if (offsetParent && offsetParent.getStyle('position') === 'fixed')
3852
+ hasLayout(offsetParent);
3853
+
3854
+ element.setStyle({ position: 'relative' });
3855
+ var value = proceed(element);
3856
+ element.setStyle({ position: position });
3857
+ return value;
3858
+ });
3859
+ } else if (Prototype.Browser.Webkit) {
3860
+ cumulativeOffset = function(element) {
3861
+ element = $(element);
3862
+ var valueT = 0, valueL = 0;
3863
+ do {
3864
+ valueT += element.offsetTop || 0;
3865
+ valueL += element.offsetLeft || 0;
3866
+ if (element.offsetParent == document.body)
3867
+ if (Element.getStyle(element, 'position') == 'absolute') break;
3868
+
3869
+ element = element.offsetParent;
3870
+ } while (element);
3871
+
3872
+ return new Element.Offset(valueL, valueT);
3873
+ };
3874
+ }
3875
+
3876
+
3877
+ Element.addMethods({
3878
+ getLayout: getLayout,
3879
+ measure: measure,
3880
+ getDimensions: getDimensions,
3881
+ getOffsetParent: getOffsetParent,
3882
+ cumulativeOffset: cumulativeOffset,
3883
+ positionedOffset: positionedOffset,
3884
+ cumulativeScrollOffset: cumulativeScrollOffset,
3885
+ viewportOffset: viewportOffset,
3886
+ absolutize: absolutize,
3887
+ relativize: relativize
3888
+ });
3889
+
3890
+ function isBody(element) {
3891
+ return element.nodeName.toUpperCase() === 'BODY';
3892
+ }
3893
+
3894
+ function isHtml(element) {
3895
+ return element.nodeName.toUpperCase() === 'HTML';
3896
+ }
3897
+
3898
+ function isDocument(element) {
3899
+ return element.nodeType === Node.DOCUMENT_NODE;
3900
+ }
3901
+
3902
+ function isDetached(element) {
3903
+ return element !== document.body &&
3904
+ !Element.descendantOf(element, document.body);
3905
+ }
3906
+
3907
+ if ('getBoundingClientRect' in document.documentElement) {
3908
+ Element.addMethods({
3909
+ viewportOffset: function(element) {
3910
+ element = $(element);
3911
+ if (isDetached(element)) return new Element.Offset(0, 0);
3912
+
3913
+ var rect = element.getBoundingClientRect(),
3914
+ docEl = document.documentElement;
3915
+ return new Element.Offset(rect.left - docEl.clientLeft,
3916
+ rect.top - docEl.clientTop);
3917
+ }
3918
+ });
3919
+ }
3920
+ })();
3921
+ window.$$ = function() {
3922
+ var expression = $A(arguments).join(', ');
3923
+ return Prototype.Selector.select(expression, document);
3924
+ };
3925
+
3926
+ Prototype.Selector = (function() {
3927
+
3928
+ function select() {
3929
+ throw new Error('Method "Prototype.Selector.select" must be defined.');
3930
+ }
3931
+
3932
+ function match() {
3933
+ throw new Error('Method "Prototype.Selector.match" must be defined.');
3934
+ }
3935
+
3936
+ function find(elements, expression, index) {
3937
+ index = index || 0;
3938
+ var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i;
3939
+
3940
+ for (i = 0; i < length; i++) {
3941
+ if (match(elements[i], expression) && index == matchIndex++) {
3942
+ return Element.extend(elements[i]);
3943
+ }
3944
+ }
3945
+ }
3946
+
3947
+ function extendElements(elements) {
3948
+ for (var i = 0, length = elements.length; i < length; i++) {
3949
+ Element.extend(elements[i]);
3950
+ }
3951
+ return elements;
3952
+ }
3953
+
3954
+
3955
+ var K = Prototype.K;
3956
+
3957
+ return {
3958
+ select: select,
3959
+ match: match,
3960
+ find: find,
3961
+ extendElements: (Element.extend === K) ? K : extendElements,
3962
+ extendElement: Element.extend
3963
+ };
3964
+ })();
3965
+ Prototype._original_property = window.Sizzle;
3966
+ /*!
3967
+ * Sizzle CSS Selector Engine - v1.0
3968
+ * Copyright 2009, The Dojo Foundation
3969
+ * Released under the MIT, BSD, and GPL Licenses.
3970
+ * More information: http://sizzlejs.com/
3971
+ */
3972
+ (function(){
3973
+
3974
+ var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
3975
+ done = 0,
3976
+ toString = Object.prototype.toString,
3977
+ hasDuplicate = false,
3978
+ baseHasDuplicate = true;
3979
+
3980
+ [0, 0].sort(function(){
3981
+ baseHasDuplicate = false;
3982
+ return 0;
3983
+ });
3984
+
3985
+ var Sizzle = function(selector, context, results, seed) {
3986
+ results = results || [];
3987
+ var origContext = context = context || document;
3988
+
3989
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
3990
+ return [];
3991
+ }
3992
+
3993
+ if ( !selector || typeof selector !== "string" ) {
3994
+ return results;
3995
+ }
3996
+
3997
+ var parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context),
3998
+ soFar = selector;
3999
+
4000
+ while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
4001
+ soFar = m[3];
4002
+
4003
+ parts.push( m[1] );
4004
+
4005
+ if ( m[2] ) {
4006
+ extra = m[3];
4007
+ break;
4008
+ }
4009
+ }
4010
+
4011
+ if ( parts.length > 1 && origPOS.exec( selector ) ) {
4012
+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
4013
+ set = posProcess( parts[0] + parts[1], context );
4014
+ } else {
4015
+ set = Expr.relative[ parts[0] ] ?
4016
+ [ context ] :
4017
+ Sizzle( parts.shift(), context );
4018
+
4019
+ while ( parts.length ) {
4020
+ selector = parts.shift();
4021
+
4022
+ if ( Expr.relative[ selector ] )
4023
+ selector += parts.shift();
4024
+
4025
+ set = posProcess( selector, set );
4026
+ }
4027
+ }
4028
+ } else {
4029
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
4030
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
4031
+ var ret = Sizzle.find( parts.shift(), context, contextXML );
4032
+ context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
4033
+ }
4034
+
4035
+ if ( context ) {
4036
+ var ret = seed ?
4037
+ { expr: parts.pop(), set: makeArray(seed) } :
4038
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
4039
+ set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
4040
+
4041
+ if ( parts.length > 0 ) {
4042
+ checkSet = makeArray(set);
4043
+ } else {
4044
+ prune = false;
4045
+ }
4046
+
4047
+ while ( parts.length ) {
4048
+ var cur = parts.pop(), pop = cur;
4049
+
4050
+ if ( !Expr.relative[ cur ] ) {
4051
+ cur = "";
4052
+ } else {
4053
+ pop = parts.pop();
4054
+ }
4055
+
4056
+ if ( pop == null ) {
4057
+ pop = context;
4058
+ }
4059
+
4060
+ Expr.relative[ cur ]( checkSet, pop, contextXML );
4061
+ }
4062
+ } else {
4063
+ checkSet = parts = [];
4064
+ }
4065
+ }
4066
+
4067
+ if ( !checkSet ) {
4068
+ checkSet = set;
4069
+ }
4070
+
4071
+ if ( !checkSet ) {
4072
+ throw "Syntax error, unrecognized expression: " + (cur || selector);
4073
+ }
4074
+
4075
+ if ( toString.call(checkSet) === "[object Array]" ) {
4076
+ if ( !prune ) {
4077
+ results.push.apply( results, checkSet );
4078
+ } else if ( context && context.nodeType === 1 ) {
4079
+ for ( var i = 0; checkSet[i] != null; i++ ) {
4080
+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
4081
+ results.push( set[i] );
4082
+ }
4083
+ }
4084
+ } else {
4085
+ for ( var i = 0; checkSet[i] != null; i++ ) {
4086
+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
4087
+ results.push( set[i] );
4088
+ }
4089
+ }
4090
+ }
4091
+ } else {
4092
+ makeArray( checkSet, results );
4093
+ }
4094
+
4095
+ if ( extra ) {
4096
+ Sizzle( extra, origContext, results, seed );
4097
+ Sizzle.uniqueSort( results );
4098
+ }
4099
+
4100
+ return results;
4101
+ };
4102
+
4103
+ Sizzle.uniqueSort = function(results){
4104
+ if ( sortOrder ) {
4105
+ hasDuplicate = baseHasDuplicate;
4106
+ results.sort(sortOrder);
4107
+
4108
+ if ( hasDuplicate ) {
4109
+ for ( var i = 1; i < results.length; i++ ) {
4110
+ if ( results[i] === results[i-1] ) {
4111
+ results.splice(i--, 1);
4112
+ }
4113
+ }
4114
+ }
4115
+ }
4116
+
4117
+ return results;
4118
+ };
4119
+
4120
+ Sizzle.matches = function(expr, set){
4121
+ return Sizzle(expr, null, null, set);
4122
+ };
4123
+
4124
+ Sizzle.find = function(expr, context, isXML){
4125
+ var set, match;
4126
+
4127
+ if ( !expr ) {
4128
+ return [];
4129
+ }
4130
+
4131
+ for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
4132
+ var type = Expr.order[i], match;
4133
+
4134
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
4135
+ var left = match[1];
4136
+ match.splice(1,1);
4137
+
4138
+ if ( left.substr( left.length - 1 ) !== "\\" ) {
4139
+ match[1] = (match[1] || "").replace(/\\/g, "");
4140
+ set = Expr.find[ type ]( match, context, isXML );
4141
+ if ( set != null ) {
4142
+ expr = expr.replace( Expr.match[ type ], "" );
4143
+ break;
4144
+ }
4145
+ }
4146
+ }
4147
+ }
4148
+
4149
+ if ( !set ) {
4150
+ set = context.getElementsByTagName("*");
4151
+ }
4152
+
4153
+ return {set: set, expr: expr};
4154
+ };
4155
+
4156
+ Sizzle.filter = function(expr, set, inplace, not){
4157
+ var old = expr, result = [], curLoop = set, match, anyFound,
4158
+ isXMLFilter = set && set[0] && isXML(set[0]);
4159
+
4160
+ while ( expr && set.length ) {
4161
+ for ( var type in Expr.filter ) {
4162
+ if ( (match = Expr.match[ type ].exec( expr )) != null ) {
4163
+ var filter = Expr.filter[ type ], found, item;
4164
+ anyFound = false;
4165
+
4166
+ if ( curLoop == result ) {
4167
+ result = [];
4168
+ }
4169
+
4170
+ if ( Expr.preFilter[ type ] ) {
4171
+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
4172
+
4173
+ if ( !match ) {
4174
+ anyFound = found = true;
4175
+ } else if ( match === true ) {
4176
+ continue;
4177
+ }
4178
+ }
4179
+
4180
+ if ( match ) {
4181
+ for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
4182
+ if ( item ) {
4183
+ found = filter( item, match, i, curLoop );
4184
+ var pass = not ^ !!found;
4185
+
4186
+ if ( inplace && found != null ) {
4187
+ if ( pass ) {
4188
+ anyFound = true;
4189
+ } else {
4190
+ curLoop[i] = false;
4191
+ }
4192
+ } else if ( pass ) {
4193
+ result.push( item );
4194
+ anyFound = true;
4195
+ }
4196
+ }
4197
+ }
4198
+ }
4199
+
4200
+ if ( found !== undefined ) {
4201
+ if ( !inplace ) {
4202
+ curLoop = result;
4203
+ }
4204
+
4205
+ expr = expr.replace( Expr.match[ type ], "" );
4206
+
4207
+ if ( !anyFound ) {
4208
+ return [];
4209
+ }
4210
+
4211
+ break;
4212
+ }
4213
+ }
4214
+ }
4215
+
4216
+ if ( expr == old ) {
4217
+ if ( anyFound == null ) {
4218
+ throw "Syntax error, unrecognized expression: " + expr;
4219
+ } else {
4220
+ break;
4221
+ }
4222
+ }
4223
+
4224
+ old = expr;
4225
+ }
4226
+
4227
+ return curLoop;
4228
+ };
4229
+
4230
+ var Expr = Sizzle.selectors = {
4231
+ order: [ "ID", "NAME", "TAG" ],
4232
+ match: {
4233
+ ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
4234
+ CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
4235
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
4236
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
4237
+ TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
4238
+ CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
4239
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
4240
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
4241
+ },
4242
+ leftMatch: {},
4243
+ attrMap: {
4244
+ "class": "className",
4245
+ "for": "htmlFor"
4246
+ },
4247
+ attrHandle: {
4248
+ href: function(elem){
4249
+ return elem.getAttribute("href");
4250
+ }
4251
+ },
4252
+ relative: {
4253
+ "+": function(checkSet, part, isXML){
4254
+ var isPartStr = typeof part === "string",
4255
+ isTag = isPartStr && !/\W/.test(part),
4256
+ isPartStrNotTag = isPartStr && !isTag;
4257
+
4258
+ if ( isTag && !isXML ) {
4259
+ part = part.toUpperCase();
4260
+ }
4261
+
4262
+ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
4263
+ if ( (elem = checkSet[i]) ) {
4264
+ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
4265
+
4266
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
4267
+ elem || false :
4268
+ elem === part;
4269
+ }
4270
+ }
4271
+
4272
+ if ( isPartStrNotTag ) {
4273
+ Sizzle.filter( part, checkSet, true );
4274
+ }
4275
+ },
4276
+ ">": function(checkSet, part, isXML){
4277
+ var isPartStr = typeof part === "string";
4278
+
4279
+ if ( isPartStr && !/\W/.test(part) ) {
4280
+ part = isXML ? part : part.toUpperCase();
4281
+
4282
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
4283
+ var elem = checkSet[i];
4284
+ if ( elem ) {
4285
+ var parent = elem.parentNode;
4286
+ checkSet[i] = parent.nodeName === part ? parent : false;
4287
+ }
4288
+ }
4289
+ } else {
4290
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
4291
+ var elem = checkSet[i];
4292
+ if ( elem ) {
4293
+ checkSet[i] = isPartStr ?
4294
+ elem.parentNode :
4295
+ elem.parentNode === part;
4296
+ }
4297
+ }
4298
+
4299
+ if ( isPartStr ) {
4300
+ Sizzle.filter( part, checkSet, true );
4301
+ }
4302
+ }
4303
+ },
4304
+ "": function(checkSet, part, isXML){
4305
+ var doneName = done++, checkFn = dirCheck;
4306
+
4307
+ if ( !/\W/.test(part) ) {
4308
+ var nodeCheck = part = isXML ? part : part.toUpperCase();
4309
+ checkFn = dirNodeCheck;
4310
+ }
4311
+
4312
+ checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
4313
+ },
4314
+ "~": function(checkSet, part, isXML){
4315
+ var doneName = done++, checkFn = dirCheck;
4316
+
4317
+ if ( typeof part === "string" && !/\W/.test(part) ) {
4318
+ var nodeCheck = part = isXML ? part : part.toUpperCase();
4319
+ checkFn = dirNodeCheck;
4320
+ }
4321
+
4322
+ checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
4323
+ }
4324
+ },
4325
+ find: {
4326
+ ID: function(match, context, isXML){
4327
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
4328
+ var m = context.getElementById(match[1]);
4329
+ return m ? [m] : [];
4330
+ }
4331
+ },
4332
+ NAME: function(match, context, isXML){
4333
+ if ( typeof context.getElementsByName !== "undefined" ) {
4334
+ var ret = [], results = context.getElementsByName(match[1]);
4335
+
4336
+ for ( var i = 0, l = results.length; i < l; i++ ) {
4337
+ if ( results[i].getAttribute("name") === match[1] ) {
4338
+ ret.push( results[i] );
4339
+ }
4340
+ }
4341
+
4342
+ return ret.length === 0 ? null : ret;
4343
+ }
4344
+ },
4345
+ TAG: function(match, context){
4346
+ return context.getElementsByTagName(match[1]);
4347
+ }
4348
+ },
4349
+ preFilter: {
4350
+ CLASS: function(match, curLoop, inplace, result, not, isXML){
4351
+ match = " " + match[1].replace(/\\/g, "") + " ";
4352
+
4353
+ if ( isXML ) {
4354
+ return match;
4355
+ }
4356
+
4357
+ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
4358
+ if ( elem ) {
4359
+ if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
4360
+ if ( !inplace )
4361
+ result.push( elem );
4362
+ } else if ( inplace ) {
4363
+ curLoop[i] = false;
4364
+ }
4365
+ }
4366
+ }
4367
+
4368
+ return false;
4369
+ },
4370
+ ID: function(match){
4371
+ return match[1].replace(/\\/g, "");
4372
+ },
4373
+ TAG: function(match, curLoop){
4374
+ for ( var i = 0; curLoop[i] === false; i++ ){}
4375
+ return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
4376
+ },
4377
+ CHILD: function(match){
4378
+ if ( match[1] == "nth" ) {
4379
+ var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
4380
+ match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
4381
+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
4382
+
4383
+ match[2] = (test[1] + (test[2] || 1)) - 0;
4384
+ match[3] = test[3] - 0;
4385
+ }
4386
+
4387
+ match[0] = done++;
4388
+
4389
+ return match;
4390
+ },
4391
+ ATTR: function(match, curLoop, inplace, result, not, isXML){
4392
+ var name = match[1].replace(/\\/g, "");
4393
+
4394
+ if ( !isXML && Expr.attrMap[name] ) {
4395
+ match[1] = Expr.attrMap[name];
4396
+ }
4397
+
4398
+ if ( match[2] === "~=" ) {
4399
+ match[4] = " " + match[4] + " ";
4400
+ }
4401
+
4402
+ return match;
4403
+ },
4404
+ PSEUDO: function(match, curLoop, inplace, result, not){
4405
+ if ( match[1] === "not" ) {
4406
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
4407
+ match[3] = Sizzle(match[3], null, null, curLoop);
4408
+ } else {
4409
+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
4410
+ if ( !inplace ) {
4411
+ result.push.apply( result, ret );
4412
+ }
4413
+ return false;
4414
+ }
4415
+ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
4416
+ return true;
4417
+ }
4418
+
4419
+ return match;
4420
+ },
4421
+ POS: function(match){
4422
+ match.unshift( true );
4423
+ return match;
4424
+ }
4425
+ },
4426
+ filters: {
4427
+ enabled: function(elem){
4428
+ return elem.disabled === false && elem.type !== "hidden";
4429
+ },
4430
+ disabled: function(elem){
4431
+ return elem.disabled === true;
4432
+ },
4433
+ checked: function(elem){
4434
+ return elem.checked === true;
4435
+ },
4436
+ selected: function(elem){
4437
+ elem.parentNode.selectedIndex;
4438
+ return elem.selected === true;
4439
+ },
4440
+ parent: function(elem){
4441
+ return !!elem.firstChild;
4442
+ },
4443
+ empty: function(elem){
4444
+ return !elem.firstChild;
4445
+ },
4446
+ has: function(elem, i, match){
4447
+ return !!Sizzle( match[3], elem ).length;
4448
+ },
4449
+ header: function(elem){
4450
+ return /h\d/i.test( elem.nodeName );
4451
+ },
4452
+ text: function(elem){
4453
+ return "text" === elem.type;
4454
+ },
4455
+ radio: function(elem){
4456
+ return "radio" === elem.type;
4457
+ },
4458
+ checkbox: function(elem){
4459
+ return "checkbox" === elem.type;
4460
+ },
4461
+ file: function(elem){
4462
+ return "file" === elem.type;
4463
+ },
4464
+ password: function(elem){
4465
+ return "password" === elem.type;
4466
+ },
4467
+ submit: function(elem){
4468
+ return "submit" === elem.type;
4469
+ },
4470
+ image: function(elem){
4471
+ return "image" === elem.type;
4472
+ },
4473
+ reset: function(elem){
4474
+ return "reset" === elem.type;
4475
+ },
4476
+ button: function(elem){
4477
+ return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
4478
+ },
4479
+ input: function(elem){
4480
+ return /input|select|textarea|button/i.test(elem.nodeName);
4481
+ }
4482
+ },
4483
+ setFilters: {
4484
+ first: function(elem, i){
4485
+ return i === 0;
4486
+ },
4487
+ last: function(elem, i, match, array){
4488
+ return i === array.length - 1;
4489
+ },
4490
+ even: function(elem, i){
4491
+ return i % 2 === 0;
4492
+ },
4493
+ odd: function(elem, i){
4494
+ return i % 2 === 1;
4495
+ },
4496
+ lt: function(elem, i, match){
4497
+ return i < match[3] - 0;
4498
+ },
4499
+ gt: function(elem, i, match){
4500
+ return i > match[3] - 0;
4501
+ },
4502
+ nth: function(elem, i, match){
4503
+ return match[3] - 0 == i;
4504
+ },
4505
+ eq: function(elem, i, match){
4506
+ return match[3] - 0 == i;
4507
+ }
4508
+ },
4509
+ filter: {
4510
+ PSEUDO: function(elem, match, i, array){
4511
+ var name = match[1], filter = Expr.filters[ name ];
4512
+
4513
+ if ( filter ) {
4514
+ return filter( elem, i, match, array );
4515
+ } else if ( name === "contains" ) {
4516
+ return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
4517
+ } else if ( name === "not" ) {
4518
+ var not = match[3];
4519
+
4520
+ for ( var i = 0, l = not.length; i < l; i++ ) {
4521
+ if ( not[i] === elem ) {
4522
+ return false;
4523
+ }
4524
+ }
4525
+
4526
+ return true;
4527
+ }
4528
+ },
4529
+ CHILD: function(elem, match){
4530
+ var type = match[1], node = elem;
4531
+ switch (type) {
4532
+ case 'only':
4533
+ case 'first':
4534
+ while ( (node = node.previousSibling) ) {
4535
+ if ( node.nodeType === 1 ) return false;
4536
+ }
4537
+ if ( type == 'first') return true;
4538
+ node = elem;
4539
+ case 'last':
4540
+ while ( (node = node.nextSibling) ) {
4541
+ if ( node.nodeType === 1 ) return false;
4542
+ }
4543
+ return true;
4544
+ case 'nth':
4545
+ var first = match[2], last = match[3];
4546
+
4547
+ if ( first == 1 && last == 0 ) {
4548
+ return true;
4549
+ }
4550
+
4551
+ var doneName = match[0],
4552
+ parent = elem.parentNode;
4553
+
4554
+ if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
4555
+ var count = 0;
4556
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
4557
+ if ( node.nodeType === 1 ) {
4558
+ node.nodeIndex = ++count;
4559
+ }
4560
+ }
4561
+ parent.sizcache = doneName;
4562
+ }
4563
+
4564
+ var diff = elem.nodeIndex - last;
4565
+ if ( first == 0 ) {
4566
+ return diff == 0;
4567
+ } else {
4568
+ return ( diff % first == 0 && diff / first >= 0 );
4569
+ }
4570
+ }
4571
+ },
4572
+ ID: function(elem, match){
4573
+ return elem.nodeType === 1 && elem.getAttribute("id") === match;
4574
+ },
4575
+ TAG: function(elem, match){
4576
+ return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
4577
+ },
4578
+ CLASS: function(elem, match){
4579
+ return (" " + (elem.className || elem.getAttribute("class")) + " ")
4580
+ .indexOf( match ) > -1;
4581
+ },
4582
+ ATTR: function(elem, match){
4583
+ var name = match[1],
4584
+ result = Expr.attrHandle[ name ] ?
4585
+ Expr.attrHandle[ name ]( elem ) :
4586
+ elem[ name ] != null ?
4587
+ elem[ name ] :
4588
+ elem.getAttribute( name ),
4589
+ value = result + "",
4590
+ type = match[2],
4591
+ check = match[4];
4592
+
4593
+ return result == null ?
4594
+ type === "!=" :
4595
+ type === "=" ?
4596
+ value === check :
4597
+ type === "*=" ?
4598
+ value.indexOf(check) >= 0 :
4599
+ type === "~=" ?
4600
+ (" " + value + " ").indexOf(check) >= 0 :
4601
+ !check ?
4602
+ value && result !== false :
4603
+ type === "!=" ?
4604
+ value != check :
4605
+ type === "^=" ?
4606
+ value.indexOf(check) === 0 :
4607
+ type === "$=" ?
4608
+ value.substr(value.length - check.length) === check :
4609
+ type === "|=" ?
4610
+ value === check || value.substr(0, check.length + 1) === check + "-" :
4611
+ false;
4612
+ },
4613
+ POS: function(elem, match, i, array){
4614
+ var name = match[2], filter = Expr.setFilters[ name ];
4615
+
4616
+ if ( filter ) {
4617
+ return filter( elem, i, match, array );
4618
+ }
4619
+ }
4620
+ }
4621
+ };
4622
+
4623
+ var origPOS = Expr.match.POS;
4624
+
4625
+ for ( var type in Expr.match ) {
4626
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
4627
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source );
4628
+ }
4629
+
4630
+ var makeArray = function(array, results) {
4631
+ array = Array.prototype.slice.call( array, 0 );
4632
+
4633
+ if ( results ) {
4634
+ results.push.apply( results, array );
4635
+ return results;
4636
+ }
4637
+
4638
+ return array;
4639
+ };
4640
+
4641
+ try {
4642
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 );
4643
+
4644
+ } catch(e){
4645
+ makeArray = function(array, results) {
4646
+ var ret = results || [];
4647
+
4648
+ if ( toString.call(array) === "[object Array]" ) {
4649
+ Array.prototype.push.apply( ret, array );
4650
+ } else {
4651
+ if ( typeof array.length === "number" ) {
4652
+ for ( var i = 0, l = array.length; i < l; i++ ) {
4653
+ ret.push( array[i] );
4654
+ }
4655
+ } else {
4656
+ for ( var i = 0; array[i]; i++ ) {
4657
+ ret.push( array[i] );
4658
+ }
4659
+ }
4660
+ }
4661
+
4662
+ return ret;
4663
+ };
4664
+ }
4665
+
4666
+ var sortOrder;
4667
+
4668
+ if ( document.documentElement.compareDocumentPosition ) {
4669
+ sortOrder = function( a, b ) {
4670
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
4671
+ if ( a == b ) {
4672
+ hasDuplicate = true;
4673
+ }
4674
+ return 0;
4675
+ }
4676
+
4677
+ var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
4678
+ if ( ret === 0 ) {
4679
+ hasDuplicate = true;
4680
+ }
4681
+ return ret;
4682
+ };
4683
+ } else if ( "sourceIndex" in document.documentElement ) {
4684
+ sortOrder = function( a, b ) {
4685
+ if ( !a.sourceIndex || !b.sourceIndex ) {
4686
+ if ( a == b ) {
4687
+ hasDuplicate = true;
4688
+ }
4689
+ return 0;
4690
+ }
4691
+
4692
+ var ret = a.sourceIndex - b.sourceIndex;
4693
+ if ( ret === 0 ) {
4694
+ hasDuplicate = true;
4695
+ }
4696
+ return ret;
4697
+ };
4698
+ } else if ( document.createRange ) {
4699
+ sortOrder = function( a, b ) {
4700
+ if ( !a.ownerDocument || !b.ownerDocument ) {
4701
+ if ( a == b ) {
4702
+ hasDuplicate = true;
4703
+ }
4704
+ return 0;
4705
+ }
4706
+
4707
+ var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
4708
+ aRange.setStart(a, 0);
4709
+ aRange.setEnd(a, 0);
4710
+ bRange.setStart(b, 0);
4711
+ bRange.setEnd(b, 0);
4712
+ var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
4713
+ if ( ret === 0 ) {
4714
+ hasDuplicate = true;
4715
+ }
4716
+ return ret;
4717
+ };
4718
+ }
4719
+
4720
+ (function(){
4721
+ var form = document.createElement("div"),
4722
+ id = "script" + (new Date).getTime();
4723
+ form.innerHTML = "<a name='" + id + "'/>";
4724
+
4725
+ var root = document.documentElement;
4726
+ root.insertBefore( form, root.firstChild );
4727
+
4728
+ if ( !!document.getElementById( id ) ) {
4729
+ Expr.find.ID = function(match, context, isXML){
4730
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
4731
+ var m = context.getElementById(match[1]);
4732
+ return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
4733
+ }
4734
+ };
4735
+
4736
+ Expr.filter.ID = function(elem, match){
4737
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
4738
+ return elem.nodeType === 1 && node && node.nodeValue === match;
4739
+ };
4740
+ }
4741
+
4742
+ root.removeChild( form );
4743
+ root = form = null; // release memory in IE
4744
+ })();
4745
+
4746
+ (function(){
4747
+
4748
+ var div = document.createElement("div");
4749
+ div.appendChild( document.createComment("") );
4750
+
4751
+ if ( div.getElementsByTagName("*").length > 0 ) {
4752
+ Expr.find.TAG = function(match, context){
4753
+ var results = context.getElementsByTagName(match[1]);
4754
+
4755
+ if ( match[1] === "*" ) {
4756
+ var tmp = [];
4757
+
4758
+ for ( var i = 0; results[i]; i++ ) {
4759
+ if ( results[i].nodeType === 1 ) {
4760
+ tmp.push( results[i] );
4761
+ }
4762
+ }
4763
+
4764
+ results = tmp;
4765
+ }
4766
+
4767
+ return results;
4768
+ };
4769
+ }
4770
+
4771
+ div.innerHTML = "<a href='#'></a>";
4772
+ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
4773
+ div.firstChild.getAttribute("href") !== "#" ) {
4774
+ Expr.attrHandle.href = function(elem){
4775
+ return elem.getAttribute("href", 2);
4776
+ };
4777
+ }
4778
+
4779
+ div = null; // release memory in IE
4780
+ })();
4781
+
4782
+ if ( document.querySelectorAll ) (function(){
4783
+ var oldSizzle = Sizzle, div = document.createElement("div");
4784
+ div.innerHTML = "<p class='TEST'></p>";
4785
+
4786
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
4787
+ return;
4788
+ }
4789
+
4790
+ Sizzle = function(query, context, extra, seed){
4791
+ context = context || document;
4792
+
4793
+ if ( !seed && context.nodeType === 9 && !isXML(context) ) {
4794
+ try {
4795
+ return makeArray( context.querySelectorAll(query), extra );
4796
+ } catch(e){}
4797
+ }
4798
+
4799
+ return oldSizzle(query, context, extra, seed);
4800
+ };
4801
+
4802
+ for ( var prop in oldSizzle ) {
4803
+ Sizzle[ prop ] = oldSizzle[ prop ];
4804
+ }
4805
+
4806
+ div = null; // release memory in IE
4807
+ })();
4808
+
4809
+ if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
4810
+ var div = document.createElement("div");
4811
+ div.innerHTML = "<div class='test e'></div><div class='test'></div>";
4812
+
4813
+ if ( div.getElementsByClassName("e").length === 0 )
4814
+ return;
4815
+
4816
+ div.lastChild.className = "e";
4817
+
4818
+ if ( div.getElementsByClassName("e").length === 1 )
4819
+ return;
4820
+
4821
+ Expr.order.splice(1, 0, "CLASS");
4822
+ Expr.find.CLASS = function(match, context, isXML) {
4823
+ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
4824
+ return context.getElementsByClassName(match[1]);
4825
+ }
4826
+ };
4827
+
4828
+ div = null; // release memory in IE
4829
+ })();
4830
+
4831
+ function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
4832
+ var sibDir = dir == "previousSibling" && !isXML;
4833
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
4834
+ var elem = checkSet[i];
4835
+ if ( elem ) {
4836
+ if ( sibDir && elem.nodeType === 1 ){
4837
+ elem.sizcache = doneName;
4838
+ elem.sizset = i;
4839
+ }
4840
+ elem = elem[dir];
4841
+ var match = false;
4842
+
4843
+ while ( elem ) {
4844
+ if ( elem.sizcache === doneName ) {
4845
+ match = checkSet[elem.sizset];
4846
+ break;
4847
+ }
4848
+
4849
+ if ( elem.nodeType === 1 && !isXML ){
4850
+ elem.sizcache = doneName;
4851
+ elem.sizset = i;
4852
+ }
4853
+
4854
+ if ( elem.nodeName === cur ) {
4855
+ match = elem;
4856
+ break;
4857
+ }
4858
+
4859
+ elem = elem[dir];
4860
+ }
4861
+
4862
+ checkSet[i] = match;
4863
+ }
4864
+ }
4865
+ }
4866
+
4867
+ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
4868
+ var sibDir = dir == "previousSibling" && !isXML;
4869
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
4870
+ var elem = checkSet[i];
4871
+ if ( elem ) {
4872
+ if ( sibDir && elem.nodeType === 1 ) {
4873
+ elem.sizcache = doneName;
4874
+ elem.sizset = i;
4875
+ }
4876
+ elem = elem[dir];
4877
+ var match = false;
4878
+
4879
+ while ( elem ) {
4880
+ if ( elem.sizcache === doneName ) {
4881
+ match = checkSet[elem.sizset];
4882
+ break;
4883
+ }
4884
+
4885
+ if ( elem.nodeType === 1 ) {
4886
+ if ( !isXML ) {
4887
+ elem.sizcache = doneName;
4888
+ elem.sizset = i;
4889
+ }
4890
+ if ( typeof cur !== "string" ) {
4891
+ if ( elem === cur ) {
4892
+ match = true;
4893
+ break;
4894
+ }
4895
+
4896
+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
4897
+ match = elem;
4898
+ break;
4899
+ }
4900
+ }
4901
+
4902
+ elem = elem[dir];
4903
+ }
4904
+
4905
+ checkSet[i] = match;
4906
+ }
4907
+ }
4908
+ }
4909
+
4910
+ var contains = document.compareDocumentPosition ? function(a, b){
4911
+ return a.compareDocumentPosition(b) & 16;
4912
+ } : function(a, b){
4913
+ return a !== b && (a.contains ? a.contains(b) : true);
4914
+ };
4915
+
4916
+ var isXML = function(elem){
4917
+ return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
4918
+ !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML";
4919
+ };
4920
+
4921
+ var posProcess = function(selector, context){
4922
+ var tmpSet = [], later = "", match,
4923
+ root = context.nodeType ? [context] : context;
4924
+
4925
+ while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
4926
+ later += match[0];
4927
+ selector = selector.replace( Expr.match.PSEUDO, "" );
4928
+ }
4929
+
4930
+ selector = Expr.relative[selector] ? selector + "*" : selector;
4931
+
4932
+ for ( var i = 0, l = root.length; i < l; i++ ) {
4933
+ Sizzle( selector, root[i], tmpSet );
4934
+ }
4935
+
4936
+ return Sizzle.filter( later, tmpSet );
4937
+ };
4938
+
4939
+
4940
+ window.Sizzle = Sizzle;
4941
+
4942
+ })();
4943
+
4944
+ ;(function(engine) {
4945
+ var extendElements = Prototype.Selector.extendElements;
4946
+
4947
+ function select(selector, scope) {
4948
+ return extendElements(engine(selector, scope || document));
4949
+ }
4950
+
4951
+ function match(element, selector) {
4952
+ return engine.matches(selector, [element]).length == 1;
4953
+ }
4954
+
4955
+ Prototype.Selector.engine = engine;
4956
+ Prototype.Selector.select = select;
4957
+ Prototype.Selector.match = match;
4958
+ })(Sizzle);
4959
+
4960
+ window.Sizzle = Prototype._original_property;
4961
+ delete Prototype._original_property;
4962
+
4963
+ var Form = {
4964
+ reset: function(form) {
4965
+ form = $(form);
4966
+ form.reset();
4967
+ return form;
4968
+ },
4969
+
4970
+ serializeElements: function(elements, options) {
4971
+ if (typeof options != 'object') options = { hash: !!options };
4972
+ else if (Object.isUndefined(options.hash)) options.hash = true;
4973
+ var key, value, submitted = false, submit = options.submit, accumulator, initial;
4974
+
4975
+ if (options.hash) {
4976
+ initial = {};
4977
+ accumulator = function(result, key, value) {
4978
+ if (key in result) {
4979
+ if (!Object.isArray(result[key])) result[key] = [result[key]];
4980
+ result[key].push(value);
4981
+ } else result[key] = value;
4982
+ return result;
4983
+ };
4984
+ } else {
4985
+ initial = '';
4986
+ accumulator = function(result, key, value) {
4987
+ return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + encodeURIComponent(value);
4988
+ }
4989
+ }
4990
+
4991
+ return elements.inject(initial, function(result, element) {
4992
+ if (!element.disabled && element.name) {
4993
+ key = element.name; value = $(element).getValue();
4994
+ if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
4995
+ submit !== false && (!submit || key == submit) && (submitted = true)))) {
4996
+ result = accumulator(result, key, value);
4997
+ }
4998
+ }
4999
+ return result;
5000
+ });
5001
+ }
5002
+ };
5003
+
5004
+ Form.Methods = {
5005
+ serialize: function(form, options) {
5006
+ return Form.serializeElements(Form.getElements(form), options);
5007
+ },
5008
+
5009
+ getElements: function(form) {
5010
+ var elements = $(form).getElementsByTagName('*'),
5011
+ element,
5012
+ arr = [ ],
5013
+ serializers = Form.Element.Serializers;
5014
+ for (var i = 0; element = elements[i]; i++) {
5015
+ arr.push(element);
5016
+ }
5017
+ return arr.inject([], function(elements, child) {
5018
+ if (serializers[child.tagName.toLowerCase()])
5019
+ elements.push(Element.extend(child));
5020
+ return elements;
5021
+ })
5022
+ },
5023
+
5024
+ getInputs: function(form, typeName, name) {
5025
+ form = $(form);
5026
+ var inputs = form.getElementsByTagName('input');
5027
+
5028
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
5029
+
5030
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
5031
+ var input = inputs[i];
5032
+ if ((typeName && input.type != typeName) || (name && input.name != name))
5033
+ continue;
5034
+ matchingInputs.push(Element.extend(input));
5035
+ }
5036
+
5037
+ return matchingInputs;
5038
+ },
5039
+
5040
+ disable: function(form) {
5041
+ form = $(form);
5042
+ Form.getElements(form).invoke('disable');
5043
+ return form;
5044
+ },
5045
+
5046
+ enable: function(form) {
5047
+ form = $(form);
5048
+ Form.getElements(form).invoke('enable');
5049
+ return form;
5050
+ },
5051
+
5052
+ findFirstElement: function(form) {
5053
+ var elements = $(form).getElements().findAll(function(element) {
5054
+ return 'hidden' != element.type && !element.disabled;
5055
+ });
5056
+ var firstByIndex = elements.findAll(function(element) {
5057
+ return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
5058
+ }).sortBy(function(element) { return element.tabIndex }).first();
5059
+
5060
+ return firstByIndex ? firstByIndex : elements.find(function(element) {
5061
+ return /^(?:input|select|textarea)$/i.test(element.tagName);
5062
+ });
5063
+ },
5064
+
5065
+ focusFirstElement: function(form) {
5066
+ form = $(form);
5067
+ var element = form.findFirstElement();
5068
+ if (element) element.activate();
5069
+ return form;
5070
+ },
5071
+
5072
+ request: function(form, options) {
5073
+ form = $(form), options = Object.clone(options || { });
5074
+
5075
+ var params = options.parameters, action = form.readAttribute('action') || '';
5076
+ if (action.blank()) action = window.location.href;
5077
+ options.parameters = form.serialize(true);
5078
+
5079
+ if (params) {
5080
+ if (Object.isString(params)) params = params.toQueryParams();
5081
+ Object.extend(options.parameters, params);
5082
+ }
5083
+
5084
+ if (form.hasAttribute('method') && !options.method)
5085
+ options.method = form.method;
5086
+
5087
+ return new Ajax.Request(action, options);
5088
+ }
5089
+ };
5090
+
5091
+ /*--------------------------------------------------------------------------*/
5092
+
5093
+
5094
+ Form.Element = {
5095
+ focus: function(element) {
5096
+ $(element).focus();
5097
+ return element;
5098
+ },
5099
+
5100
+ select: function(element) {
5101
+ $(element).select();
5102
+ return element;
5103
+ }
5104
+ };
5105
+
5106
+ Form.Element.Methods = {
5107
+
5108
+ serialize: function(element) {
5109
+ element = $(element);
5110
+ if (!element.disabled && element.name) {
5111
+ var value = element.getValue();
5112
+ if (value != undefined) {
5113
+ var pair = { };
5114
+ pair[element.name] = value;
5115
+ return Object.toQueryString(pair);
5116
+ }
5117
+ }
5118
+ return '';
5119
+ },
5120
+
5121
+ getValue: function(element) {
5122
+ element = $(element);
5123
+ var method = element.tagName.toLowerCase();
5124
+ return Form.Element.Serializers[method](element);
5125
+ },
5126
+
5127
+ setValue: function(element, value) {
5128
+ element = $(element);
5129
+ var method = element.tagName.toLowerCase();
5130
+ Form.Element.Serializers[method](element, value);
5131
+ return element;
5132
+ },
5133
+
5134
+ clear: function(element) {
5135
+ $(element).value = '';
5136
+ return element;
5137
+ },
5138
+
5139
+ present: function(element) {
5140
+ return $(element).value != '';
5141
+ },
5142
+
5143
+ activate: function(element) {
5144
+ element = $(element);
5145
+ try {
5146
+ element.focus();
5147
+ if (element.select && (element.tagName.toLowerCase() != 'input' ||
5148
+ !(/^(?:button|reset|submit)$/i.test(element.type))))
5149
+ element.select();
5150
+ } catch (e) { }
5151
+ return element;
5152
+ },
5153
+
5154
+ disable: function(element) {
5155
+ element = $(element);
5156
+ element.disabled = true;
5157
+ return element;
5158
+ },
5159
+
5160
+ enable: function(element) {
5161
+ element = $(element);
5162
+ element.disabled = false;
5163
+ return element;
5164
+ }
5165
+ };
5166
+
5167
+ /*--------------------------------------------------------------------------*/
5168
+
5169
+ var Field = Form.Element;
5170
+
5171
+ var $F = Form.Element.Methods.getValue;
5172
+
5173
+ /*--------------------------------------------------------------------------*/
5174
+
5175
+ Form.Element.Serializers = (function() {
5176
+ function input(element, value) {
5177
+ switch (element.type.toLowerCase()) {
5178
+ case 'checkbox':
5179
+ case 'radio':
5180
+ return inputSelector(element, value);
5181
+ default:
5182
+ return valueSelector(element, value);
5183
+ }
5184
+ }
5185
+
5186
+ function inputSelector(element, value) {
5187
+ if (Object.isUndefined(value))
5188
+ return element.checked ? element.value : null;
5189
+ else element.checked = !!value;
5190
+ }
5191
+
5192
+ function valueSelector(element, value) {
5193
+ if (Object.isUndefined(value)) return element.value;
5194
+ else element.value = value;
5195
+ }
5196
+
5197
+ function select(element, value) {
5198
+ if (Object.isUndefined(value))
5199
+ return (element.type === 'select-one' ? selectOne : selectMany)(element);
5200
+
5201
+ var opt, currentValue, single = !Object.isArray(value);
5202
+ for (var i = 0, length = element.length; i < length; i++) {
5203
+ opt = element.options[i];
5204
+ currentValue = this.optionValue(opt);
5205
+ if (single) {
5206
+ if (currentValue == value) {
5207
+ opt.selected = true;
5208
+ return;
5209
+ }
5210
+ }
5211
+ else opt.selected = value.include(currentValue);
5212
+ }
5213
+ }
5214
+
5215
+ function selectOne(element) {
5216
+ var index = element.selectedIndex;
5217
+ return index >= 0 ? optionValue(element.options[index]) : null;
5218
+ }
5219
+
5220
+ function selectMany(element) {
5221
+ var values, length = element.length;
5222
+ if (!length) return null;
5223
+
5224
+ for (var i = 0, values = []; i < length; i++) {
5225
+ var opt = element.options[i];
5226
+ if (opt.selected) values.push(optionValue(opt));
5227
+ }
5228
+ return values;
5229
+ }
5230
+
5231
+ function optionValue(opt) {
5232
+ return Element.hasAttribute(opt, 'value') ? opt.value : opt.text;
5233
+ }
5234
+
5235
+ return {
5236
+ input: input,
5237
+ inputSelector: inputSelector,
5238
+ textarea: valueSelector,
5239
+ select: select,
5240
+ selectOne: selectOne,
5241
+ selectMany: selectMany,
5242
+ optionValue: optionValue,
5243
+ button: valueSelector
5244
+ };
5245
+ })();
5246
+
5247
+ /*--------------------------------------------------------------------------*/
5248
+
5249
+
5250
+ Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
5251
+ initialize: function($super, element, frequency, callback) {
5252
+ $super(callback, frequency);
5253
+ this.element = $(element);
5254
+ this.lastValue = this.getValue();
5255
+ },
5256
+
5257
+ execute: function() {
5258
+ var value = this.getValue();
5259
+ if (Object.isString(this.lastValue) && Object.isString(value) ?
5260
+ this.lastValue != value : String(this.lastValue) != String(value)) {
5261
+ this.callback(this.element, value);
5262
+ this.lastValue = value;
5263
+ }
5264
+ }
5265
+ });
5266
+
5267
+ Form.Element.Observer = Class.create(Abstract.TimedObserver, {
5268
+ getValue: function() {
5269
+ return Form.Element.getValue(this.element);
5270
+ }
5271
+ });
5272
+
5273
+ Form.Observer = Class.create(Abstract.TimedObserver, {
5274
+ getValue: function() {
5275
+ return Form.serialize(this.element);
5276
+ }
5277
+ });
5278
+
5279
+ /*--------------------------------------------------------------------------*/
5280
+
5281
+ Abstract.EventObserver = Class.create({
5282
+ initialize: function(element, callback) {
5283
+ this.element = $(element);
5284
+ this.callback = callback;
5285
+
5286
+ this.lastValue = this.getValue();
5287
+ if (this.element.tagName.toLowerCase() == 'form')
5288
+ this.registerFormCallbacks();
5289
+ else
5290
+ this.registerCallback(this.element);
5291
+ },
5292
+
5293
+ onElementEvent: function() {
5294
+ var value = this.getValue();
5295
+ if (this.lastValue != value) {
5296
+ this.callback(this.element, value);
5297
+ this.lastValue = value;
5298
+ }
5299
+ },
5300
+
5301
+ registerFormCallbacks: function() {
5302
+ Form.getElements(this.element).each(this.registerCallback, this);
5303
+ },
5304
+
5305
+ registerCallback: function(element) {
5306
+ if (element.type) {
5307
+ switch (element.type.toLowerCase()) {
5308
+ case 'checkbox':
5309
+ case 'radio':
5310
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
5311
+ break;
5312
+ default:
5313
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
5314
+ break;
5315
+ }
5316
+ }
5317
+ }
5318
+ });
5319
+
5320
+ Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
5321
+ getValue: function() {
5322
+ return Form.Element.getValue(this.element);
5323
+ }
5324
+ });
5325
+
5326
+ Form.EventObserver = Class.create(Abstract.EventObserver, {
5327
+ getValue: function() {
5328
+ return Form.serialize(this.element);
5329
+ }
5330
+ });
5331
+ (function() {
5332
+
5333
+ var Event = {
5334
+ KEY_BACKSPACE: 8,
5335
+ KEY_TAB: 9,
5336
+ KEY_RETURN: 13,
5337
+ KEY_ESC: 27,
5338
+ KEY_LEFT: 37,
5339
+ KEY_UP: 38,
5340
+ KEY_RIGHT: 39,
5341
+ KEY_DOWN: 40,
5342
+ KEY_DELETE: 46,
5343
+ KEY_HOME: 36,
5344
+ KEY_END: 35,
5345
+ KEY_PAGEUP: 33,
5346
+ KEY_PAGEDOWN: 34,
5347
+ KEY_INSERT: 45,
5348
+
5349
+ cache: {}
5350
+ };
5351
+
5352
+ var docEl = document.documentElement;
5353
+ var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl
5354
+ && 'onmouseleave' in docEl;
5355
+
5356
+
5357
+
5358
+ var isIELegacyEvent = function(event) { return false; };
5359
+
5360
+ if (window.attachEvent) {
5361
+ if (window.addEventListener) {
5362
+ isIELegacyEvent = function(event) {
5363
+ return !(event instanceof window.Event);
5364
+ };
5365
+ } else {
5366
+ isIELegacyEvent = function(event) { return true; };
5367
+ }
5368
+ }
5369
+
5370
+ var _isButton;
5371
+
5372
+ function _isButtonForDOMEvents(event, code) {
5373
+ return event.which ? (event.which === code + 1) : (event.button === code);
5374
+ }
5375
+
5376
+ var legacyButtonMap = { 0: 1, 1: 4, 2: 2 };
5377
+ function _isButtonForLegacyEvents(event, code) {
5378
+ return event.button === legacyButtonMap[code];
5379
+ }
5380
+
5381
+ function _isButtonForWebKit(event, code) {
5382
+ switch (code) {
5383
+ case 0: return event.which == 1 && !event.metaKey;
5384
+ case 1: return event.which == 2 || (event.which == 1 && event.metaKey);
5385
+ case 2: return event.which == 3;
5386
+ default: return false;
5387
+ }
5388
+ }
5389
+
5390
+ if (window.attachEvent) {
5391
+ if (!window.addEventListener) {
5392
+ _isButton = _isButtonForLegacyEvents;
5393
+ } else {
5394
+ _isButton = function(event, code) {
5395
+ return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) :
5396
+ _isButtonForDOMEvents(event, code);
5397
+ }
5398
+ }
5399
+ } else if (Prototype.Browser.WebKit) {
5400
+ _isButton = _isButtonForWebKit;
5401
+ } else {
5402
+ _isButton = _isButtonForDOMEvents;
5403
+ }
5404
+
5405
+ function isLeftClick(event) { return _isButton(event, 0) }
5406
+
5407
+ function isMiddleClick(event) { return _isButton(event, 1) }
5408
+
5409
+ function isRightClick(event) { return _isButton(event, 2) }
5410
+
5411
+ function element(event) {
5412
+ event = Event.extend(event);
5413
+
5414
+ var node = event.target, type = event.type,
5415
+ currentTarget = event.currentTarget;
5416
+
5417
+ if (currentTarget && currentTarget.tagName) {
5418
+ if (type === 'load' || type === 'error' ||
5419
+ (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
5420
+ && currentTarget.type === 'radio'))
5421
+ node = currentTarget;
5422
+ }
5423
+
5424
+ if (node.nodeType == Node.TEXT_NODE)
5425
+ node = node.parentNode;
5426
+
5427
+ return Element.extend(node);
5428
+ }
5429
+
5430
+ function findElement(event, expression) {
5431
+ var element = Event.element(event);
5432
+
5433
+ if (!expression) return element;
5434
+ while (element) {
5435
+ if (Object.isElement(element) && Prototype.Selector.match(element, expression)) {
5436
+ return Element.extend(element);
5437
+ }
5438
+ element = element.parentNode;
5439
+ }
5440
+ }
5441
+
5442
+ function pointer(event) {
5443
+ return { x: pointerX(event), y: pointerY(event) };
5444
+ }
5445
+
5446
+ function pointerX(event) {
5447
+ var docElement = document.documentElement,
5448
+ body = document.body || { scrollLeft: 0 };
5449
+
5450
+ return event.pageX || (event.clientX +
5451
+ (docElement.scrollLeft || body.scrollLeft) -
5452
+ (docElement.clientLeft || 0));
5453
+ }
5454
+
5455
+ function pointerY(event) {
5456
+ var docElement = document.documentElement,
5457
+ body = document.body || { scrollTop: 0 };
5458
+
5459
+ return event.pageY || (event.clientY +
5460
+ (docElement.scrollTop || body.scrollTop) -
5461
+ (docElement.clientTop || 0));
5462
+ }
5463
+
5464
+
5465
+ function stop(event) {
5466
+ Event.extend(event);
5467
+ event.preventDefault();
5468
+ event.stopPropagation();
5469
+
5470
+ event.stopped = true;
5471
+ }
5472
+
5473
+
5474
+ Event.Methods = {
5475
+ isLeftClick: isLeftClick,
5476
+ isMiddleClick: isMiddleClick,
5477
+ isRightClick: isRightClick,
5478
+
5479
+ element: element,
5480
+ findElement: findElement,
5481
+
5482
+ pointer: pointer,
5483
+ pointerX: pointerX,
5484
+ pointerY: pointerY,
5485
+
5486
+ stop: stop
5487
+ };
5488
+
5489
+ var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
5490
+ m[name] = Event.Methods[name].methodize();
5491
+ return m;
5492
+ });
5493
+
5494
+ if (window.attachEvent) {
5495
+ function _relatedTarget(event) {
5496
+ var element;
5497
+ switch (event.type) {
5498
+ case 'mouseover':
5499
+ case 'mouseenter':
5500
+ element = event.fromElement;
5501
+ break;
5502
+ case 'mouseout':
5503
+ case 'mouseleave':
5504
+ element = event.toElement;
5505
+ break;
5506
+ default:
5507
+ return null;
5508
+ }
5509
+ return Element.extend(element);
5510
+ }
5511
+
5512
+ var additionalMethods = {
5513
+ stopPropagation: function() { this.cancelBubble = true },
5514
+ preventDefault: function() { this.returnValue = false },
5515
+ inspect: function() { return '[object Event]' }
5516
+ };
5517
+
5518
+ Event.extend = function(event, element) {
5519
+ if (!event) return false;
5520
+
5521
+ if (!isIELegacyEvent(event)) return event;
5522
+
5523
+ if (event._extendedByPrototype) return event;
5524
+ event._extendedByPrototype = Prototype.emptyFunction;
5525
+
5526
+ var pointer = Event.pointer(event);
5527
+
5528
+ Object.extend(event, {
5529
+ target: event.srcElement || element,
5530
+ relatedTarget: _relatedTarget(event),
5531
+ pageX: pointer.x,
5532
+ pageY: pointer.y
5533
+ });
5534
+
5535
+ Object.extend(event, methods);
5536
+ Object.extend(event, additionalMethods);
5537
+
5538
+ return event;
5539
+ };
5540
+ } else {
5541
+ Event.extend = Prototype.K;
5542
+ }
5543
+
5544
+ if (window.addEventListener) {
5545
+ Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;
5546
+ Object.extend(Event.prototype, methods);
5547
+ }
5548
+
5549
+ function _createResponder(element, eventName, handler) {
5550
+ var registry = Element.retrieve(element, 'prototype_event_registry');
5551
+
5552
+ if (Object.isUndefined(registry)) {
5553
+ CACHE.push(element);
5554
+ registry = Element.retrieve(element, 'prototype_event_registry', $H());
5555
+ }
5556
+
5557
+ var respondersForEvent = registry.get(eventName);
5558
+ if (Object.isUndefined(respondersForEvent)) {
5559
+ respondersForEvent = [];
5560
+ registry.set(eventName, respondersForEvent);
5561
+ }
5562
+
5563
+ if (respondersForEvent.pluck('handler').include(handler)) return false;
5564
+
5565
+ var responder;
5566
+ if (eventName.include(":")) {
5567
+ responder = function(event) {
5568
+ if (Object.isUndefined(event.eventName))
5569
+ return false;
5570
+
5571
+ if (event.eventName !== eventName)
5572
+ return false;
5573
+
5574
+ Event.extend(event, element);
5575
+ handler.call(element, event);
5576
+ };
5577
+ } else {
5578
+ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&
5579
+ (eventName === "mouseenter" || eventName === "mouseleave")) {
5580
+ if (eventName === "mouseenter" || eventName === "mouseleave") {
5581
+ responder = function(event) {
5582
+ Event.extend(event, element);
5583
+
5584
+ var parent = event.relatedTarget;
5585
+ while (parent && parent !== element) {
5586
+ try { parent = parent.parentNode; }
5587
+ catch(e) { parent = element; }
5588
+ }
5589
+
5590
+ if (parent === element) return;
5591
+
5592
+ handler.call(element, event);
5593
+ };
5594
+ }
5595
+ } else {
5596
+ responder = function(event) {
5597
+ Event.extend(event, element);
5598
+ handler.call(element, event);
5599
+ };
5600
+ }
5601
+ }
5602
+
5603
+ responder.handler = handler;
5604
+ respondersForEvent.push(responder);
5605
+ return responder;
5606
+ }
5607
+
5608
+ function _destroyCache() {
5609
+ for (var i = 0, length = CACHE.length; i < length; i++) {
5610
+ Event.stopObserving(CACHE[i]);
5611
+ CACHE[i] = null;
5612
+ }
5613
+ }
5614
+
5615
+ var CACHE = [];
5616
+
5617
+ if (Prototype.Browser.IE)
5618
+ window.attachEvent('onunload', _destroyCache);
5619
+
5620
+ if (Prototype.Browser.WebKit)
5621
+ window.addEventListener('unload', Prototype.emptyFunction, false);
5622
+
5623
+
5624
+ var _getDOMEventName = Prototype.K,
5625
+ translations = { mouseenter: "mouseover", mouseleave: "mouseout" };
5626
+
5627
+ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {
5628
+ _getDOMEventName = function(eventName) {
5629
+ return (translations[eventName] || eventName);
5630
+ };
5631
+ }
5632
+
5633
+ function observe(element, eventName, handler) {
5634
+ element = $(element);
5635
+
5636
+ var responder = _createResponder(element, eventName, handler);
5637
+
5638
+ if (!responder) return element;
5639
+
5640
+ if (eventName.include(':')) {
5641
+ if (element.addEventListener)
5642
+ element.addEventListener("dataavailable", responder, false);
5643
+ else {
5644
+ element.attachEvent("ondataavailable", responder);
5645
+ element.attachEvent("onlosecapture", responder);
5646
+ }
5647
+ } else {
5648
+ var actualEventName = _getDOMEventName(eventName);
5649
+
5650
+ if (element.addEventListener)
5651
+ element.addEventListener(actualEventName, responder, false);
5652
+ else
5653
+ element.attachEvent("on" + actualEventName, responder);
5654
+ }
5655
+
5656
+ return element;
5657
+ }
5658
+
5659
+ function stopObserving(element, eventName, handler) {
5660
+ element = $(element);
5661
+
5662
+ var registry = Element.retrieve(element, 'prototype_event_registry');
5663
+ if (!registry) return element;
5664
+
5665
+ if (!eventName) {
5666
+ registry.each( function(pair) {
5667
+ var eventName = pair.key;
5668
+ stopObserving(element, eventName);
5669
+ });
5670
+ return element;
5671
+ }
5672
+
5673
+ var responders = registry.get(eventName);
5674
+ if (!responders) return element;
5675
+
5676
+ if (!handler) {
5677
+ responders.each(function(r) {
5678
+ stopObserving(element, eventName, r.handler);
5679
+ });
5680
+ return element;
5681
+ }
5682
+
5683
+ var i = responders.length, responder;
5684
+ while (i--) {
5685
+ if (responders[i].handler === handler) {
5686
+ responder = responders[i];
5687
+ break;
5688
+ }
5689
+ }
5690
+ if (!responder) return element;
5691
+
5692
+ if (eventName.include(':')) {
5693
+ if (element.removeEventListener)
5694
+ element.removeEventListener("dataavailable", responder, false);
5695
+ else {
5696
+ element.detachEvent("ondataavailable", responder);
5697
+ element.detachEvent("onlosecapture", responder);
5698
+ }
5699
+ } else {
5700
+ var actualEventName = _getDOMEventName(eventName);
5701
+ if (element.removeEventListener)
5702
+ element.removeEventListener(actualEventName, responder, false);
5703
+ else
5704
+ element.detachEvent('on' + actualEventName, responder);
5705
+ }
5706
+
5707
+ registry.set(eventName, responders.without(responder));
5708
+
5709
+ return element;
5710
+ }
5711
+
5712
+ function fire(element, eventName, memo, bubble) {
5713
+ element = $(element);
5714
+
5715
+ if (Object.isUndefined(bubble))
5716
+ bubble = true;
5717
+
5718
+ if (element == document && document.createEvent && !element.dispatchEvent)
5719
+ element = document.documentElement;
5720
+
5721
+ var event;
5722
+ if (document.createEvent) {
5723
+ event = document.createEvent('HTMLEvents');
5724
+ event.initEvent('dataavailable', bubble, true);
5725
+ } else {
5726
+ event = document.createEventObject();
5727
+ event.eventType = bubble ? 'ondataavailable' : 'onlosecapture';
5728
+ }
5729
+
5730
+ event.eventName = eventName;
5731
+ event.memo = memo || { };
5732
+
5733
+ if (document.createEvent)
5734
+ element.dispatchEvent(event);
5735
+ else
5736
+ element.fireEvent(event.eventType, event);
5737
+
5738
+ return Event.extend(event);
5739
+ }
5740
+
5741
+ Event.Handler = Class.create({
5742
+ initialize: function(element, eventName, selector, callback) {
5743
+ this.element = $(element);
5744
+ this.eventName = eventName;
5745
+ this.selector = selector;
5746
+ this.callback = callback;
5747
+ this.handler = this.handleEvent.bind(this);
5748
+ },
5749
+
5750
+ start: function() {
5751
+ Event.observe(this.element, this.eventName, this.handler);
5752
+ return this;
5753
+ },
5754
+
5755
+ stop: function() {
5756
+ Event.stopObserving(this.element, this.eventName, this.handler);
5757
+ return this;
5758
+ },
5759
+
5760
+ handleEvent: function(event) {
5761
+ var element = Event.findElement(event, this.selector);
5762
+ if (element) this.callback.call(this.element, event, element);
5763
+ }
5764
+ });
5765
+
5766
+ function on(element, eventName, selector, callback) {
5767
+ element = $(element);
5768
+ if (Object.isFunction(selector) && Object.isUndefined(callback)) {
5769
+ callback = selector, selector = null;
5770
+ }
5771
+
5772
+ return new Event.Handler(element, eventName, selector, callback).start();
5773
+ }
5774
+
5775
+ Object.extend(Event, Event.Methods);
5776
+
5777
+ Object.extend(Event, {
5778
+ fire: fire,
5779
+ observe: observe,
5780
+ stopObserving: stopObserving,
5781
+ on: on
5782
+ });
5783
+
5784
+ Element.addMethods({
5785
+ fire: fire,
5786
+
5787
+ observe: observe,
5788
+
5789
+ stopObserving: stopObserving,
5790
+
5791
+ on: on
5792
+ });
5793
+
5794
+ Object.extend(document, {
5795
+ fire: fire.methodize(),
5796
+
5797
+ observe: observe.methodize(),
5798
+
5799
+ stopObserving: stopObserving.methodize(),
5800
+
5801
+ on: on.methodize(),
5802
+
5803
+ loaded: false
5804
+ });
5805
+
5806
+ if (window.Event) Object.extend(window.Event, Event);
5807
+ else window.Event = Event;
5808
+ })();
5809
+
5810
+ (function() {
5811
+ /* Support for the DOMContentLoaded event is based on work by Dan Webb,
5812
+ Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */
5813
+
5814
+ var timer;
5815
+
5816
+ function fireContentLoadedEvent() {
5817
+ if (document.loaded) return;
5818
+ if (timer) window.clearTimeout(timer);
5819
+ document.loaded = true;
5820
+ document.fire('dom:loaded');
5821
+ }
5822
+
5823
+ function checkReadyState() {
5824
+ if (document.readyState === 'complete') {
5825
+ document.stopObserving('readystatechange', checkReadyState);
5826
+ fireContentLoadedEvent();
5827
+ }
5828
+ }
5829
+
5830
+ function pollDoScroll() {
5831
+ try { document.documentElement.doScroll('left'); }
5832
+ catch(e) {
5833
+ timer = pollDoScroll.defer();
5834
+ return;
5835
+ }
5836
+ fireContentLoadedEvent();
5837
+ }
5838
+
5839
+ if (document.addEventListener) {
5840
+ document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
5841
+ } else {
5842
+ document.observe('readystatechange', checkReadyState);
5843
+ if (window == top)
5844
+ timer = pollDoScroll.defer();
5845
+ }
5846
+
5847
+ Event.observe(window, 'load', fireContentLoadedEvent);
5848
+ })();
5849
+
5850
+ Element.addMethods();
5851
+
5852
+ /*------------------------------- DEPRECATED -------------------------------*/
5853
+
5854
+ Hash.toQueryString = Object.toQueryString;
5855
+
5856
+ var Toggle = { display: Element.toggle };
5857
+
5858
+ Element.Methods.childOf = Element.Methods.descendantOf;
5859
+
5860
+ var Insertion = {
5861
+ Before: function(element, content) {
5862
+ return Element.insert(element, {before:content});
5863
+ },
5864
+
5865
+ Top: function(element, content) {
5866
+ return Element.insert(element, {top:content});
5867
+ },
5868
+
5869
+ Bottom: function(element, content) {
5870
+ return Element.insert(element, {bottom:content});
5871
+ },
5872
+
5873
+ After: function(element, content) {
5874
+ return Element.insert(element, {after:content});
5875
+ }
5876
+ };
5877
+
5878
+ var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
5879
+
5880
+ var Position = {
5881
+ includeScrollOffsets: false,
5882
+
5883
+ prepare: function() {
5884
+ this.deltaX = window.pageXOffset
5885
+ || document.documentElement.scrollLeft
5886
+ || document.body.scrollLeft
5887
+ || 0;
5888
+ this.deltaY = window.pageYOffset
5889
+ || document.documentElement.scrollTop
5890
+ || document.body.scrollTop
5891
+ || 0;
5892
+ },
5893
+
5894
+ within: function(element, x, y) {
5895
+ if (this.includeScrollOffsets)
5896
+ return this.withinIncludingScrolloffsets(element, x, y);
5897
+ this.xcomp = x;
5898
+ this.ycomp = y;
5899
+ this.offset = Element.cumulativeOffset(element);
5900
+
5901
+ return (y >= this.offset[1] &&
5902
+ y < this.offset[1] + element.offsetHeight &&
5903
+ x >= this.offset[0] &&
5904
+ x < this.offset[0] + element.offsetWidth);
5905
+ },
5906
+
5907
+ withinIncludingScrolloffsets: function(element, x, y) {
5908
+ var offsetcache = Element.cumulativeScrollOffset(element);
5909
+
5910
+ this.xcomp = x + offsetcache[0] - this.deltaX;
5911
+ this.ycomp = y + offsetcache[1] - this.deltaY;
5912
+ this.offset = Element.cumulativeOffset(element);
5913
+
5914
+ return (this.ycomp >= this.offset[1] &&
5915
+ this.ycomp < this.offset[1] + element.offsetHeight &&
5916
+ this.xcomp >= this.offset[0] &&
5917
+ this.xcomp < this.offset[0] + element.offsetWidth);
5918
+ },
5919
+
5920
+ overlap: function(mode, element) {
5921
+ if (!mode) return 0;
5922
+ if (mode == 'vertical')
5923
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
5924
+ element.offsetHeight;
5925
+ if (mode == 'horizontal')
5926
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
5927
+ element.offsetWidth;
5928
+ },
5929
+
5930
+
5931
+ cumulativeOffset: Element.Methods.cumulativeOffset,
5932
+
5933
+ positionedOffset: Element.Methods.positionedOffset,
5934
+
5935
+ absolutize: function(element) {
5936
+ Position.prepare();
5937
+ return Element.absolutize(element);
5938
+ },
5939
+
5940
+ relativize: function(element) {
5941
+ Position.prepare();
5942
+ return Element.relativize(element);
5943
+ },
5944
+
5945
+ realOffset: Element.Methods.cumulativeScrollOffset,
5946
+
5947
+ offsetParent: Element.Methods.getOffsetParent,
5948
+
5949
+ page: Element.Methods.viewportOffset,
5950
+
5951
+ clone: function(source, target, options) {
5952
+ options = options || { };
5953
+ return Element.clonePosition(target, source, options);
5954
+ }
5955
+ };
5956
+
5957
+ /*--------------------------------------------------------------------------*/
5958
+
5959
+ if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
5960
+ function iter(name) {
5961
+ return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
5962
+ }
5963
+
5964
+ instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
5965
+ function(element, className) {
5966
+ className = className.toString().strip();
5967
+ var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
5968
+ return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
5969
+ } : function(element, className) {
5970
+ className = className.toString().strip();
5971
+ var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
5972
+ if (!classNames && !className) return elements;
5973
+
5974
+ var nodes = $(element).getElementsByTagName('*');
5975
+ className = ' ' + className + ' ';
5976
+
5977
+ for (var i = 0, child, cn; child = nodes[i]; i++) {
5978
+ if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
5979
+ (classNames && classNames.all(function(name) {
5980
+ return !name.toString().blank() && cn.include(' ' + name + ' ');
5981
+ }))))
5982
+ elements.push(Element.extend(child));
5983
+ }
5984
+ return elements;
5985
+ };
5986
+
5987
+ return function(className, parentElement) {
5988
+ return $(parentElement || document.body).getElementsByClassName(className);
5989
+ };
5990
+ }(Element.Methods);
5991
+
5992
+ /*--------------------------------------------------------------------------*/
5993
+
5994
+ Element.ClassNames = Class.create();
5995
+ Element.ClassNames.prototype = {
5996
+ initialize: function(element) {
5997
+ this.element = $(element);
5998
+ },
5999
+
6000
+ _each: function(iterator) {
6001
+ this.element.className.split(/\s+/).select(function(name) {
6002
+ return name.length > 0;
6003
+ })._each(iterator);
6004
+ },
6005
+
6006
+ set: function(className) {
6007
+ this.element.className = className;
6008
+ },
6009
+
6010
+ add: function(classNameToAdd) {
6011
+ if (this.include(classNameToAdd)) return;
6012
+ this.set($A(this).concat(classNameToAdd).join(' '));
6013
+ },
6014
+
6015
+ remove: function(classNameToRemove) {
6016
+ if (!this.include(classNameToRemove)) return;
6017
+ this.set($A(this).without(classNameToRemove).join(' '));
6018
+ },
6019
+
6020
+ toString: function() {
6021
+ return $A(this).join(' ');
6022
+ }
6023
+ };
6024
+
6025
+ Object.extend(Element.ClassNames.prototype, Enumerable);
6026
+
6027
+ /*--------------------------------------------------------------------------*/
6028
+
6029
+ (function() {
6030
+ window.Selector = Class.create({
6031
+ initialize: function(expression) {
6032
+ this.expression = expression.strip();
6033
+ },
6034
+
6035
+ findElements: function(rootElement) {
6036
+ return Prototype.Selector.select(this.expression, rootElement);
6037
+ },
6038
+
6039
+ match: function(element) {
6040
+ return Prototype.Selector.match(element, this.expression);
6041
+ },
6042
+
6043
+ toString: function() {
6044
+ return this.expression;
6045
+ },
6046
+
6047
+ inspect: function() {
6048
+ return "#<Selector: " + this.expression + ">";
6049
+ }
6050
+ });
6051
+
6052
+ Object.extend(Selector, {
6053
+ matchElements: function(elements, expression) {
6054
+ var match = Prototype.Selector.match,
6055
+ results = [];
6056
+
6057
+ for (var i = 0, length = elements.length; i < length; i++) {
6058
+ var element = elements[i];
6059
+ if (match(element, expression)) {
6060
+ results.push(Element.extend(element));
6061
+ }
6062
+ }
6063
+ return results;
6064
+ },
6065
+
6066
+ findElement: function(elements, expression, index) {
6067
+ index = index || 0;
6068
+ var matchIndex = 0, element;
6069
+ for (var i = 0, length = elements.length; i < length; i++) {
6070
+ element = elements[i];
6071
+ if (Prototype.Selector.match(element, expression) && index === matchIndex++) {
6072
+ return Element.extend(element);
6073
+ }
6074
+ }
6075
+ },
6076
+
6077
+ findChildElements: function(element, expressions) {
6078
+ var selector = expressions.toArray().join(', ');
6079
+ return Prototype.Selector.select(selector, element || document);
6080
+ }
6081
+ });
6082
+ })();
6083
+
6084
+ // Credit Card Validation Javascript
6085
+ // copyright 12th May 2003, by Stephen Chapman, Felgall Pty Ltd
6086
+
6087
+ // You have permission to copy and use this javascript provided that
6088
+ // the content of the script is not changed in any way.
6089
+
6090
+ function validateCreditCard(s) {
6091
+ // remove non-numerics
6092
+ var v = "0123456789";
6093
+ var w = "";
6094
+ for (i=0; i < s.length; i++) {
6095
+ x = s.charAt(i);
6096
+ if (v.indexOf(x,0) != -1)
6097
+ w += x;
6098
+ }
6099
+ // validate number
6100
+ j = w.length / 2;
6101
+ k = Math.floor(j);
6102
+ m = Math.ceil(j) - k;
6103
+ c = 0;
6104
+ for (i=0; i<k; i++) {
6105
+ a = w.charAt(i*2+m) * 2;
6106
+ c += a > 9 ? Math.floor(a/10 + a%10) : a;
6107
+ }
6108
+ for (i=0; i<k+m; i++) c += w.charAt(i*2+1-m) * 1;
6109
+ return (c%10 == 0);
6110
+ }
6111
+
6112
+
6113
+ /*
6114
+ * Really easy field validation with Prototype
6115
+ * http://tetlaw.id.au/view/javascript/really-easy-field-validation
6116
+ * Andrew Tetlaw
6117
+ * Version 1.5.4.1 (2007-01-05)
6118
+ *
6119
+ * Copyright (c) 2007 Andrew Tetlaw
6120
+ * Permission is hereby granted, free of charge, to any person
6121
+ * obtaining a copy of this software and associated documentation
6122
+ * files (the "Software"), to deal in the Software without
6123
+ * restriction, including without limitation the rights to use, copy,
6124
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
6125
+ * of the Software, and to permit persons to whom the Software is
6126
+ * furnished to do so, subject to the following conditions:
6127
+ *
6128
+ * The above copyright notice and this permission notice shall be
6129
+ * included in all copies or substantial portions of the Software.
6130
+ *
6131
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
6132
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6133
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
6134
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
6135
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
6136
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
6137
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
6138
+ * SOFTWARE.
6139
+ *
6140
+ */
6141
+ var Validator = Class.create();
6142
+
6143
+ Validator.prototype = {
6144
+ initialize : function(className, error, test, options) {
6145
+ if(typeof test == 'function'){
6146
+ this.options = $H(options);
6147
+ this._test = test;
6148
+ } else {
6149
+ this.options = $H(test);
6150
+ this._test = function(){return true};
6151
+ }
6152
+ this.error = error || 'Validation failed.';
6153
+ this.className = className;
6154
+ },
6155
+ test : function(v, elm) {
6156
+ return (this._test(v,elm) && this.options.all(function(p){
6157
+ return Validator.methods[p.key] ? Validator.methods[p.key](v,elm,p.value) : true;
6158
+ }));
6159
+ }
6160
+ }
6161
+ Validator.methods = {
6162
+ pattern : function(v,elm,opt) {return Validation.get('IsEmpty').test(v) || opt.test(v)},
6163
+ minLength : function(v,elm,opt) {return v.length >= opt},
6164
+ maxLength : function(v,elm,opt) {return v.length <= opt},
6165
+ min : function(v,elm,opt) {return v >= parseFloat(opt)},
6166
+ max : function(v,elm,opt) {return v <= parseFloat(opt)},
6167
+ notOneOf : function(v,elm,opt) {return $A(opt).all(function(value) {
6168
+ return v != value;
6169
+ })},
6170
+ oneOf : function(v,elm,opt) {return $A(opt).any(function(value) {
6171
+ return v == value;
6172
+ })},
6173
+ is : function(v,elm,opt) {return v == opt},
6174
+ isNot : function(v,elm,opt) {return v != opt},
6175
+ equalToField : function(v,elm,opt) {return v == $F(opt)},
6176
+ notEqualToField : function(v,elm,opt) {return v != $F(opt)},
6177
+ include : function(v,elm,opt) {return $A(opt).all(function(value) {
6178
+ return Validation.get(value).test(v,elm);
6179
+ })}
6180
+ }
6181
+
6182
+ var Validation = Class.create();
6183
+ Validation.defaultOptions = {
6184
+ onSubmit : true,
6185
+ stopOnFirst : false,
6186
+ immediate : false,
6187
+ focusOnError : true,
6188
+ useTitles : false,
6189
+ addClassNameToContainer: false,
6190
+ containerClassName: '.input-box',
6191
+ onFormValidate : function(result, form) {},
6192
+ onElementValidate : function(result, elm) {}
6193
+ };
6194
+
6195
+ Validation.prototype = {
6196
+ initialize : function(form, options){
6197
+ this.form = $(form);
6198
+ if (!this.form) {
6199
+ return;
6200
+ }
6201
+ this.options = Object.extend({
6202
+ onSubmit : Validation.defaultOptions.onSubmit,
6203
+ stopOnFirst : Validation.defaultOptions.stopOnFirst,
6204
+ immediate : Validation.defaultOptions.immediate,
6205
+ focusOnError : Validation.defaultOptions.focusOnError,
6206
+ useTitles : Validation.defaultOptions.useTitles,
6207
+ onFormValidate : Validation.defaultOptions.onFormValidate,
6208
+ onElementValidate : Validation.defaultOptions.onElementValidate
6209
+ }, options || {});
6210
+ if(this.options.onSubmit) Event.observe(this.form,'submit',this.onSubmit.bind(this),false);
6211
+ if(this.options.immediate) {
6212
+ Form.getElements(this.form).each(function(input) { // Thanks Mike!
6213
+ if (input.tagName.toLowerCase() == 'select') {
6214
+ Event.observe(input, 'blur', this.onChange.bindAsEventListener(this));
6215
+ }
6216
+ if (input.type.toLowerCase() == 'radio' || input.type.toLowerCase() == 'checkbox') {
6217
+ Event.observe(input, 'click', this.onChange.bindAsEventListener(this));
6218
+ } else {
6219
+ Event.observe(input, 'change', this.onChange.bindAsEventListener(this));
6220
+ }
6221
+ }, this);
6222
+ }
6223
+ },
6224
+ onChange : function (ev) {
6225
+ Validation.isOnChange = true;
6226
+ Validation.validate(Event.element(ev),{
6227
+ useTitle : this.options.useTitles,
6228
+ onElementValidate : this.options.onElementValidate
6229
+ });
6230
+ Validation.isOnChange = false;
6231
+ },
6232
+ onSubmit : function(ev){
6233
+ if(!this.validate()) Event.stop(ev);
6234
+ },
6235
+ validate : function() {
6236
+ var result = false;
6237
+ var useTitles = this.options.useTitles;
6238
+ var callback = this.options.onElementValidate;
6239
+ try {
6240
+ if(this.options.stopOnFirst) {
6241
+ result = Form.getElements(this.form).all(function(elm) {
6242
+ if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
6243
+ return true;
6244
+ }
6245
+ return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
6246
+ }, this);
6247
+ } else {
6248
+ result = Form.getElements(this.form).collect(function(elm) {
6249
+ if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
6250
+ return true;
6251
+ }
6252
+ return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
6253
+ }, this).all();
6254
+ }
6255
+ } catch (e) {
6256
+ }
6257
+ if(!result && this.options.focusOnError) {
6258
+ try{
6259
+ Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first().focus()
6260
+ }
6261
+ catch(e){
6262
+ }
6263
+ }
6264
+ this.options.onFormValidate(result, this.form);
6265
+ return result;
6266
+ },
6267
+ reset : function() {
6268
+ Form.getElements(this.form).each(Validation.reset);
6269
+ },
6270
+ isElementInForm : function(elm, form) {
6271
+ var domForm = elm.up('form');
6272
+ if (domForm == form) {
6273
+ return true;
6274
+ }
6275
+ return false;
6276
+ }
6277
+ }
6278
+
6279
+ Object.extend(Validation, {
6280
+ validate : function(elm, options){
6281
+ options = Object.extend({
6282
+ useTitle : false,
6283
+ onElementValidate : function(result, elm) {}
6284
+ }, options || {});
6285
+ elm = $(elm);
6286
+
6287
+ var cn = $w(elm.className);
6288
+ return result = cn.all(function(value) {
6289
+ var test = Validation.test(value,elm,options.useTitle);
6290
+ options.onElementValidate(test, elm);
6291
+ return test;
6292
+ });
6293
+ },
6294
+ insertAdvice : function(elm, advice){
6295
+ var container = $(elm).up('.field-row');
6296
+ if(container){
6297
+ Element.insert(container, {after: advice});
6298
+ } else if (elm.up('td.value')) {
6299
+ elm.up('td.value').insert({bottom: advice});
6300
+ } else if (elm.advaiceContainer && $(elm.advaiceContainer)) {
6301
+ $(elm.advaiceContainer).update(advice);
6302
+ }
6303
+ else {
6304
+ switch (elm.type.toLowerCase()) {
6305
+ case 'checkbox':
6306
+ case 'radio':
6307
+ var p = elm.parentNode;
6308
+ if(p) {
6309
+ Element.insert(p, {'bottom': advice});
6310
+ } else {
6311
+ Element.insert(elm, {'after': advice});
6312
+ }
6313
+ break;
6314
+ default:
6315
+ Element.insert(elm, {'after': advice});
6316
+ }
6317
+ }
6318
+ },
6319
+ showAdvice : function(elm, advice, adviceName){
6320
+ if(!elm.advices){
6321
+ elm.advices = new Hash();
6322
+ }
6323
+ else{
6324
+ elm.advices.each(function(pair){
6325
+ if (!advice || pair.value.id != advice.id) {
6326
+ // hide non-current advice after delay
6327
+ this.hideAdvice(elm, pair.value);
6328
+ }
6329
+ }.bind(this));
6330
+ }
6331
+ elm.advices.set(adviceName, advice);
6332
+ if(typeof Effect == 'undefined') {
6333
+ advice.style.display = 'block';
6334
+ } else {
6335
+ if(!advice._adviceAbsolutize) {
6336
+ new Effect.Appear(advice, {duration : 1 });
6337
+ } else {
6338
+ Position.absolutize(advice);
6339
+ advice.show();
6340
+ advice.setStyle({
6341
+ 'top':advice._adviceTop,
6342
+ 'left': advice._adviceLeft,
6343
+ 'width': advice._adviceWidth,
6344
+ 'z-index': 1000
6345
+ });
6346
+ advice.addClassName('advice-absolute');
6347
+ }
6348
+ }
6349
+ },
6350
+ hideAdvice : function(elm, advice){
6351
+ if (advice != null) {
6352
+ new Effect.Fade(advice, {duration : 1, afterFinishInternal : function() {advice.hide();}});
6353
+ }
6354
+ },
6355
+ updateCallback : function(elm, status) {
6356
+ if (typeof elm.callbackFunction != 'undefined') {
6357
+ eval(elm.callbackFunction+'(\''+elm.id+'\',\''+status+'\')');
6358
+ }
6359
+ },
6360
+ ajaxError : function(elm, errorMsg) {
6361
+ var name = 'validate-ajax';
6362
+ var advice = Validation.getAdvice(name, elm);
6363
+ if (advice == null) {
6364
+ advice = this.createAdvice(name, elm, false, errorMsg);
6365
+ }
6366
+ this.showAdvice(elm, advice, 'validate-ajax');
6367
+ this.updateCallback(elm, 'failed');
6368
+
6369
+ elm.addClassName('validation-failed');
6370
+ elm.addClassName('validate-ajax');
6371
+ if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
6372
+ var container = elm.up(Validation.defaultOptions.containerClassName);
6373
+ if (container && this.allowContainerClassName(elm)) {
6374
+ container.removeClassName('validation-passed');
6375
+ container.addClassName('validation-error');
6376
+ }
6377
+ }
6378
+ },
6379
+ allowContainerClassName: function (elm) {
6380
+ if (elm.type == 'radio' || elm.type == 'checkbox') {
6381
+ return elm.hasClassName('change-container-classname');
6382
+ }
6383
+
6384
+ return true;
6385
+ },
6386
+ test : function(name, elm, useTitle) {
6387
+ var v = Validation.get(name);
6388
+ var prop = '__advice'+name.camelize();
6389
+ try {
6390
+ if(Validation.isVisible(elm) && !v.test($F(elm), elm)) {
6391
+ //if(!elm[prop]) {
6392
+ var advice = Validation.getAdvice(name, elm);
6393
+ if (advice == null) {
6394
+ advice = this.createAdvice(name, elm, useTitle);
6395
+ }
6396
+ this.showAdvice(elm, advice, name);
6397
+ this.updateCallback(elm, 'failed');
6398
+ //}
6399
+ elm[prop] = 1;
6400
+ if (!elm.advaiceContainer) {
6401
+ elm.removeClassName('validation-passed');
6402
+ elm.addClassName('validation-failed');
6403
+ }
6404
+
6405
+ if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
6406
+ var container = elm.up(Validation.defaultOptions.containerClassName);
6407
+ if (container && this.allowContainerClassName(elm)) {
6408
+ container.removeClassName('validation-passed');
6409
+ container.addClassName('validation-error');
6410
+ }
6411
+ }
6412
+ return false;
6413
+ } else {
6414
+ var advice = Validation.getAdvice(name, elm);
6415
+ this.hideAdvice(elm, advice);
6416
+ this.updateCallback(elm, 'passed');
6417
+ elm[prop] = '';
6418
+ elm.removeClassName('validation-failed');
6419
+ elm.addClassName('validation-passed');
6420
+ if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
6421
+ var container = elm.up(Validation.defaultOptions.containerClassName);
6422
+ if (container && !container.down('.validation-failed') && this.allowContainerClassName(elm)) {
6423
+ if (!Validation.get('IsEmpty').test(elm.value) || !this.isVisible(elm)) {
6424
+ container.addClassName('validation-passed');
6425
+ } else {
6426
+ container.removeClassName('validation-passed');
6427
+ }
6428
+ container.removeClassName('validation-error');
6429
+ }
6430
+ }
6431
+ return true;
6432
+ }
6433
+ } catch(e) {
6434
+ throw(e)
6435
+ }
6436
+ },
6437
+ isVisible : function(elm) {
6438
+ while(elm.tagName != 'BODY') {
6439
+ if(!$(elm).visible()) return false;
6440
+ elm = elm.parentNode;
6441
+ }
6442
+ return true;
6443
+ },
6444
+ getAdvice : function(name, elm) {
6445
+ return $('advice-' + name + '-' + Validation.getElmID(elm)) || $('advice-' + Validation.getElmID(elm));
6446
+ },
6447
+ createAdvice : function(name, elm, useTitle, customError) {
6448
+ var v = Validation.get(name);
6449
+ var errorMsg = useTitle ? ((elm && elm.title) ? elm.title : v.error) : v.error;
6450
+ if (customError) {
6451
+ errorMsg = customError;
6452
+ }
6453
+ try {
6454
+ if (Translator){
6455
+ errorMsg = Translator.translate(errorMsg);
6456
+ }
6457
+ }
6458
+ catch(e){}
6459
+
6460
+ advice = '<div class="validation-advice" id="advice-' + name + '-' + Validation.getElmID(elm) +'" style="display:none">' + errorMsg + '</div>'
6461
+
6462
+
6463
+ Validation.insertAdvice(elm, advice);
6464
+ advice = Validation.getAdvice(name, elm);
6465
+ if($(elm).hasClassName('absolute-advice')) {
6466
+ var dimensions = $(elm).getDimensions();
6467
+ var originalPosition = Position.cumulativeOffset(elm);
6468
+
6469
+ advice._adviceTop = (originalPosition[1] + dimensions.height) + 'px';
6470
+ advice._adviceLeft = (originalPosition[0]) + 'px';
6471
+ advice._adviceWidth = (dimensions.width) + 'px';
6472
+ advice._adviceAbsolutize = true;
6473
+ }
6474
+ return advice;
6475
+ },
6476
+ getElmID : function(elm) {
6477
+ return elm.id ? elm.id : elm.name;
6478
+ },
6479
+ reset : function(elm) {
6480
+ elm = $(elm);
6481
+ var cn = $w(elm.className);
6482
+ cn.each(function(value) {
6483
+ var prop = '__advice'+value.camelize();
6484
+ if(elm[prop]) {
6485
+ var advice = Validation.getAdvice(value, elm);
6486
+ if (advice) {
6487
+ advice.hide();
6488
+ }
6489
+ elm[prop] = '';
6490
+ }
6491
+ elm.removeClassName('validation-failed');
6492
+ elm.removeClassName('validation-passed');
6493
+ if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
6494
+ var container = elm.up(Validation.defaultOptions.containerClassName);
6495
+ if (container) {
6496
+ container.removeClassName('validation-passed');
6497
+ container.removeClassName('validation-error');
6498
+ }
6499
+ }
6500
+ });
6501
+ },
6502
+ add : function(className, error, test, options) {
6503
+ var nv = {};
6504
+ nv[className] = new Validator(className, error, test, options);
6505
+ Object.extend(Validation.methods, nv);
6506
+ },
6507
+ addAllThese : function(validators) {
6508
+ var nv = {};
6509
+ $A(validators).each(function(value) {
6510
+ nv[value[0]] = new Validator(value[0], value[1], value[2], (value.length > 3 ? value[3] : {}));
6511
+ });
6512
+ Object.extend(Validation.methods, nv);
6513
+ },
6514
+ get : function(name) {
6515
+ return Validation.methods[name] ? Validation.methods[name] : Validation.methods['_LikeNoIDIEverSaw_'];
6516
+ },
6517
+ methods : {
6518
+ '_LikeNoIDIEverSaw_' : new Validator('_LikeNoIDIEverSaw_','',{})
6519
+ }
6520
+ });
6521
+
6522
+ Validation.add('IsEmpty', '', function(v) {
6523
+ return (v == '' || (v == null) || (v.length == 0) || /^\s+$/.test(v));
6524
+ });
6525
+
6526
+ Validation.addAllThese([
6527
+ ['validate-no-html-tags', 'HTML tags are not allowed', function(v) {
6528
+ return !/<(\/)?\w+/.test(v);
6529
+ }],
6530
+ ['validate-select', 'Please select an option.', function(v) {
6531
+ return ((v != "none") && (v != null) && (v.length != 0));
6532
+ }],
6533
+ ['required-entry', 'This is a required field.', function(v) {
6534
+ return !Validation.get('IsEmpty').test(v);
6535
+ }],
6536
+ ['validate-number', 'Please enter a valid number in this field.', function(v) {
6537
+ return Validation.get('IsEmpty').test(v)
6538
+ || (!isNaN(parseNumber(v)) && /^\s*-?\d*(\.\d*)?\s*$/.test(v));
6539
+ }],
6540
+ ['validate-number-range', 'The value is not within the specified range.', function(v, elm) {
6541
+ if (Validation.get('IsEmpty').test(v)) {
6542
+ return true;
6543
+ }
6544
+
6545
+ var numValue = parseNumber(v);
6546
+ if (isNaN(numValue)) {
6547
+ return false;
6548
+ }
6549
+
6550
+ var reRange = /^number-range-(-?[\d.,]+)?-(-?[\d.,]+)?$/,
6551
+ result = true;
6552
+
6553
+ $w(elm.className).each(function(name) {
6554
+ var m = reRange.exec(name);
6555
+ if (m) {
6556
+ result = result
6557
+ && (m[1] == null || m[1] == '' || numValue >= parseNumber(m[1]))
6558
+ && (m[2] == null || m[2] == '' || numValue <= parseNumber(m[2]));
6559
+ }
6560
+ });
6561
+
6562
+ return result;
6563
+ }],
6564
+ ['validate-digits', 'Please use numbers only in this field. Please avoid spaces or other characters such as dots or commas.', function(v) {
6565
+ return Validation.get('IsEmpty').test(v) || !/[^\d]/.test(v);
6566
+ }],
6567
+ ['validate-digits-range', 'The value is not within the specified range.', function(v, elm) {
6568
+ if (Validation.get('IsEmpty').test(v)) {
6569
+ return true;
6570
+ }
6571
+
6572
+ var numValue = parseNumber(v);
6573
+ if (isNaN(numValue)) {
6574
+ return false;
6575
+ }
6576
+
6577
+ var reRange = /^digits-range-(-?\d+)?-(-?\d+)?$/,
6578
+ result = true;
6579
+
6580
+ $w(elm.className).each(function(name) {
6581
+ var m = reRange.exec(name);
6582
+ if (m) {
6583
+ result = result
6584
+ && (m[1] == null || m[1] == '' || numValue >= parseNumber(m[1]))
6585
+ && (m[2] == null || m[2] == '' || numValue <= parseNumber(m[2]));
6586
+ }
6587
+ });
6588
+
6589
+ return result;
6590
+ }],
6591
+ ['validate-alpha', 'Please use letters only (a-z or A-Z) in this field.', function (v) {
6592
+ return Validation.get('IsEmpty').test(v) || /^[a-zA-Z]+$/.test(v)
6593
+ }],
6594
+ ['validate-code', 'Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {
6595
+ return Validation.get('IsEmpty').test(v) || /^[a-z]+[a-z0-9_]+$/.test(v)
6596
+ }],
6597
+ ['validate-alphanum', 'Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.', function(v) {
6598
+ return Validation.get('IsEmpty').test(v) || /^[a-zA-Z0-9]+$/.test(v)
6599
+ }],
6600
+ ['validate-alphanum-with-spaces', 'Please use only letters (a-z or A-Z), numbers (0-9) or spaces only in this field.', function(v) {
6601
+ return Validation.get('IsEmpty').test(v) || /^[a-zA-Z0-9 ]+$/.test(v)
6602
+ }],
6603
+ ['validate-street', 'Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.', function(v) {
6604
+ return Validation.get('IsEmpty').test(v) || /^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(v)
6605
+ }],
6606
+ ['validate-phoneStrict', 'Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.', function(v) {
6607
+ return Validation.get('IsEmpty').test(v) || /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);
6608
+ }],
6609
+ ['validate-phoneLax', 'Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.', function(v) {
6610
+ return Validation.get('IsEmpty').test(v) || /^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(v);
6611
+ }],
6612
+ ['validate-fax', 'Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.', function(v) {
6613
+ return Validation.get('IsEmpty').test(v) || /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);
6614
+ }],
6615
+ ['validate-date', 'Please enter a valid date.', function(v) {
6616
+ var test = new Date(v);
6617
+ return Validation.get('IsEmpty').test(v) || !isNaN(test);
6618
+ }],
6619
+ ['validate-email', 'Please enter a valid email address. For example johndoe@domain.com.', function (v) {
6620
+ //return Validation.get('IsEmpty').test(v) || /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v)
6621
+ //return Validation.get('IsEmpty').test(v) || /^[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9][\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9\.]{1,30}[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9]@([a-z0-9_-]{1,30}\.){1,5}[a-z]{2,4}$/i.test(v)
6622
+ return Validation.get('IsEmpty').test(v) || /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i.test(v)
6623
+ }],
6624
+ ['validate-emailSender', 'Please use only visible characters and spaces.', function (v) {
6625
+ return Validation.get('IsEmpty').test(v) || /^[\S ]+$/.test(v)
6626
+ }],
6627
+ ['validate-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {
6628
+ var pass=v.strip(); /*strip leading and trailing spaces*/
6629
+ return !(pass.length>0 && pass.length < 6);
6630
+ }],
6631
+ ['validate-admin-password', 'Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.', function(v) {
6632
+ var pass=v.strip();
6633
+ if (0 == pass.length) {
6634
+ return true;
6635
+ }
6636
+ if (!(/[a-z]/i.test(v)) || !(/[0-9]/.test(v))) {
6637
+ return false;
6638
+ }
6639
+ return !(pass.length < 7);
6640
+ }],
6641
+ ['validate-cpassword', 'Please make sure your passwords match.', function(v) {
6642
+ var conf = $('confirmation') ? $('confirmation') : $$('.validate-cpassword')[0];
6643
+ var pass = false;
6644
+ if ($('password')) {
6645
+ pass = $('password');
6646
+ }
6647
+ var passwordElements = $$('.validate-password');
6648
+ for (var i = 0; i < passwordElements.size(); i++) {
6649
+ var passwordElement = passwordElements[i];
6650
+ if (passwordElement.up('form').id == conf.up('form').id) {
6651
+ pass = passwordElement;
6652
+ }
6653
+ }
6654
+ if ($$('.validate-admin-password').size()) {
6655
+ pass = $$('.validate-admin-password')[0];
6656
+ }
6657
+ return (pass.value == conf.value);
6658
+ }],
6659
+ ['validate-url', 'Please enter a valid URL. Protocol is required (http://, https:// or ftp://)', function (v) {
6660
+ v = (v || '').replace(/^\s+/, '').replace(/\s+$/, '');
6661
+ return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))(\.[A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))*)(:(\d+))?(\/[A-Z0-9~](([A-Z0-9_~-]|\.)*[A-Z0-9~]|))*\/?(.*)?$/i.test(v)
6662
+ }],
6663
+ ['validate-clean-url', 'Please enter a valid URL. For example http://www.example.com or www.example.com', function (v) {
6664
+ return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v) || /^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)
6665
+ }],
6666
+ ['validate-identifier', 'Please enter a valid URL Key. For example "example-page", "example-page.html" or "anotherlevel/example-page".', function (v) {
6667
+ return Validation.get('IsEmpty').test(v) || /^[a-z0-9][a-z0-9_\/-]+(\.[a-z0-9_-]+)?$/.test(v)
6668
+ }],
6669
+ ['validate-xml-identifier', 'Please enter a valid XML-identifier. For example something_1, block5, id-4.', function (v) {
6670
+ return Validation.get('IsEmpty').test(v) || /^[A-Z][A-Z0-9_\/-]*$/i.test(v)
6671
+ }],
6672
+ ['validate-ssn', 'Please enter a valid social security number. For example 123-45-6789.', function(v) {
6673
+ return Validation.get('IsEmpty').test(v) || /^\d{3}-?\d{2}-?\d{4}$/.test(v);
6674
+ }],
6675
+ ['validate-zip', 'Please enter a valid zip code. For example 90602 or 90602-1234.', function(v) {
6676
+ return Validation.get('IsEmpty').test(v) || /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(v);
6677
+ }],
6678
+ ['validate-zip-international', 'Please enter a valid zip code.', function(v) {
6679
+ //return Validation.get('IsEmpty').test(v) || /(^[A-z0-9]{2,10}([\s]{0,1}|[\-]{0,1})[A-z0-9]{2,10}$)/.test(v);
6680
+ return true;
6681
+ }],
6682
+ ['validate-date-au', 'Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.', function(v) {
6683
+ if(Validation.get('IsEmpty').test(v)) return true;
6684
+ var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
6685
+ if(!regex.test(v)) return false;
6686
+ var d = new Date(v.replace(regex, '$2/$1/$3'));
6687
+ return ( parseInt(RegExp.$2, 10) == (1+d.getMonth()) ) &&
6688
+ (parseInt(RegExp.$1, 10) == d.getDate()) &&
6689
+ (parseInt(RegExp.$3, 10) == d.getFullYear() );
6690
+ }],
6691
+ ['validate-currency-dollar', 'Please enter a valid $ amount. For example $100.00.', function(v) {
6692
+ // [$]1[##][,###]+[.##]
6693
+ // [$]1###+[.##]
6694
+ // [$]0.##
6695
+ // [$].##
6696
+ return Validation.get('IsEmpty').test(v) || /^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)
6697
+ }],
6698
+ ['validate-one-required', 'Please select one of the above options.', function (v,elm) {
6699
+ var p = elm.parentNode;
6700
+ var options = p.getElementsByTagName('INPUT');
6701
+ return $A(options).any(function(elm) {
6702
+ return $F(elm);
6703
+ });
6704
+ }],
6705
+ ['validate-one-required-by-name', 'Please select one of the options.', function (v,elm) {
6706
+ var inputs = $$('input[name="' + elm.name.replace(/([\\"])/g, '\\$1') + '"]');
6707
+
6708
+ var error = 1;
6709
+ for(var i=0;i<inputs.length;i++) {
6710
+ if((inputs[i].type == 'checkbox' || inputs[i].type == 'radio') && inputs[i].checked == true) {
6711
+ error = 0;
6712
+ }
6713
+
6714
+ if(Validation.isOnChange && (inputs[i].type == 'checkbox' || inputs[i].type == 'radio')) {
6715
+ Validation.reset(inputs[i]);
6716
+ }
6717
+ }
6718
+
6719
+ if( error == 0 ) {
6720
+ return true;
6721
+ } else {
6722
+ return false;
6723
+ }
6724
+ }],
6725
+ ['validate-not-negative-number', 'Please enter a number 0 or greater in this field.', function(v) {
6726
+ if (Validation.get('IsEmpty').test(v)) {
6727
+ return true;
6728
+ }
6729
+ v = parseNumber(v);
6730
+ return !isNaN(v) && v >= 0;
6731
+ }],
6732
+ ['validate-zero-or-greater', 'Please enter a number 0 or greater in this field.', function(v) {
6733
+ return Validation.get('validate-not-negative-number').test(v);
6734
+ }],
6735
+ ['validate-greater-than-zero', 'Please enter a number greater than 0 in this field.', function(v) {
6736
+ if (Validation.get('IsEmpty').test(v)) {
6737
+ return true;
6738
+ }
6739
+ v = parseNumber(v);
6740
+ return !isNaN(v) && v > 0;
6741
+ }],
6742
+ ['validate-state', 'Please select State/Province.', function(v) {
6743
+ return (v!=0 || v == '');
6744
+ }],
6745
+ ['validate-new-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {
6746
+ if (!Validation.get('validate-password').test(v)) return false;
6747
+ if (Validation.get('IsEmpty').test(v) && v != '') return false;
6748
+ return true;
6749
+ }],
6750
+ ['validate-cc-number', 'Please enter a valid credit card number.', function(v, elm) {
6751
+ // remove non-numerics
6752
+ var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');
6753
+ if (ccTypeContainer && typeof Validation.creditCartTypes.get(ccTypeContainer.value) != 'undefined'
6754
+ && Validation.creditCartTypes.get(ccTypeContainer.value)[2] == false) {
6755
+ if (!Validation.get('IsEmpty').test(v) && Validation.get('validate-digits').test(v)) {
6756
+ return true;
6757
+ } else {
6758
+ return false;
6759
+ }
6760
+ }
6761
+ return validateCreditCard(v);
6762
+ }],
6763
+ ['validate-cc-type', 'Credit card number does not match credit card type.', function(v, elm) {
6764
+ // remove credit card number delimiters such as "-" and space
6765
+ elm.value = removeDelimiters(elm.value);
6766
+ v = removeDelimiters(v);
6767
+
6768
+ var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');
6769
+ if (!ccTypeContainer) {
6770
+ return true;
6771
+ }
6772
+ var ccType = ccTypeContainer.value;
6773
+
6774
+ if (typeof Validation.creditCartTypes.get(ccType) == 'undefined') {
6775
+ return false;
6776
+ }
6777
+
6778
+ // Other card type or switch or solo card
6779
+ if (Validation.creditCartTypes.get(ccType)[0]==false) {
6780
+ return true;
6781
+ }
6782
+
6783
+ // Matched credit card type
6784
+ var ccMatchedType = '';
6785
+
6786
+ Validation.creditCartTypes.each(function (pair) {
6787
+ if (pair.value[0] && v.match(pair.value[0])) {
6788
+ ccMatchedType = pair.key;
6789
+ throw $break;
6790
+ }
6791
+ });
6792
+
6793
+ if(ccMatchedType != ccType) {
6794
+ return false;
6795
+ }
6796
+
6797
+ if (ccTypeContainer.hasClassName('validation-failed') && Validation.isOnChange) {
6798
+ Validation.validate(ccTypeContainer);
6799
+ }
6800
+
6801
+ return true;
6802
+ }],
6803
+ ['validate-cc-type-select', 'Card type does not match credit card number.', function(v, elm) {
6804
+ var ccNumberContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_type')) + '_cc_number');
6805
+ if (Validation.isOnChange && Validation.get('IsEmpty').test(ccNumberContainer.value)) {
6806
+ return true;
6807
+ }
6808
+ if (Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer)) {
6809
+ Validation.validate(ccNumberContainer);
6810
+ }
6811
+ return Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer);
6812
+ }],
6813
+ ['validate-cc-exp', 'Incorrect credit card expiration date.', function(v, elm) {
6814
+ var ccExpMonth = v;
6815
+ var ccExpYear = $(elm.id.substr(0,elm.id.indexOf('_expiration')) + '_expiration_yr').value;
6816
+ var currentTime = new Date();
6817
+ var currentMonth = currentTime.getMonth() + 1;
6818
+ var currentYear = currentTime.getFullYear();
6819
+ if (ccExpMonth < currentMonth && ccExpYear == currentYear) {
6820
+ return false;
6821
+ }
6822
+ return true;
6823
+ }],
6824
+ ['validate-cc-cvn', 'Please enter a valid credit card verification number.', function(v, elm) {
6825
+ var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_cid')) + '_cc_type');
6826
+ if (!ccTypeContainer) {
6827
+ return true;
6828
+ }
6829
+ var ccType = ccTypeContainer.value;
6830
+
6831
+ if (typeof Validation.creditCartTypes.get(ccType) == 'undefined') {
6832
+ return false;
6833
+ }
6834
+
6835
+ var re = Validation.creditCartTypes.get(ccType)[1];
6836
+
6837
+ if (v.match(re)) {
6838
+ return true;
6839
+ }
6840
+
6841
+ return false;
6842
+ }],
6843
+ ['validate-ajax', '', function(v, elm) { return true; }],
6844
+ ['validate-data', 'Please use only letters (a-z or A-Z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {
6845
+ if(v != '' && v) {
6846
+ return /^[A-Za-z]+[A-Za-z0-9_]+$/.test(v);
6847
+ }
6848
+ return true;
6849
+ }],
6850
+ ['validate-css-length', 'Please input a valid CSS-length. For example 100px or 77pt or 20em or .5ex or 50%.', function (v) {
6851
+ if (v != '' && v) {
6852
+ return /^[0-9\.]+(px|pt|em|ex|%)?$/.test(v) && (!(/\..*\./.test(v))) && !(/\.$/.test(v));
6853
+ }
6854
+ return true;
6855
+ }],
6856
+ ['validate-length', 'Text length does not satisfy specified text range.', function (v, elm) {
6857
+ var reMax = new RegExp(/^maximum-length-[0-9]+$/);
6858
+ var reMin = new RegExp(/^minimum-length-[0-9]+$/);
6859
+ var result = true;
6860
+ $w(elm.className).each(function(name, index) {
6861
+ if (name.match(reMax) && result) {
6862
+ var length = name.split('-')[2];
6863
+ result = (v.length <= length);
6864
+ }
6865
+ if (name.match(reMin) && result && !Validation.get('IsEmpty').test(v)) {
6866
+ var length = name.split('-')[2];
6867
+ result = (v.length >= length);
6868
+ }
6869
+ });
6870
+ return result;
6871
+ }],
6872
+ ['validate-percents', 'Please enter a number lower than 100.', {max:100}],
6873
+ ['required-file', 'Please select a file', function(v, elm) {
6874
+ var result = !Validation.get('IsEmpty').test(v);
6875
+ if (result === false) {
6876
+ ovId = elm.id + '_value';
6877
+ if ($(ovId)) {
6878
+ result = !Validation.get('IsEmpty').test($(ovId).value);
6879
+ }
6880
+ }
6881
+ return result;
6882
+ }],
6883
+ ['validate-cc-ukss', 'Please enter issue number or start date for switch/solo card type.', function(v,elm) {
6884
+ var endposition;
6885
+
6886
+ if (elm.id.match(/(.)+_cc_issue$/)) {
6887
+ endposition = elm.id.indexOf('_cc_issue');
6888
+ } else if (elm.id.match(/(.)+_start_month$/)) {
6889
+ endposition = elm.id.indexOf('_start_month');
6890
+ } else {
6891
+ endposition = elm.id.indexOf('_start_year');
6892
+ }
6893
+
6894
+ var prefix = elm.id.substr(0,endposition);
6895
+
6896
+ var ccTypeContainer = $(prefix + '_cc_type');
6897
+
6898
+ if (!ccTypeContainer) {
6899
+ return true;
6900
+ }
6901
+ var ccType = ccTypeContainer.value;
6902
+
6903
+ if(['SS','SM','SO'].indexOf(ccType) == -1){
6904
+ return true;
6905
+ }
6906
+
6907
+ $(prefix + '_cc_issue').advaiceContainer
6908
+ = $(prefix + '_start_month').advaiceContainer
6909
+ = $(prefix + '_start_year').advaiceContainer
6910
+ = $(prefix + '_cc_type_ss_div').down('ul li.adv-container');
6911
+
6912
+ var ccIssue = $(prefix + '_cc_issue').value;
6913
+ var ccSMonth = $(prefix + '_start_month').value;
6914
+ var ccSYear = $(prefix + '_start_year').value;
6915
+
6916
+ var ccStartDatePresent = (ccSMonth && ccSYear) ? true : false;
6917
+
6918
+ if (!ccStartDatePresent && !ccIssue){
6919
+ return false;
6920
+ }
6921
+ return true;
6922
+ }]
6923
+ ]);
6924
+
6925
+ function removeDelimiters (v) {
6926
+ v = v.replace(/\s/g, '');
6927
+ v = v.replace(/\-/g, '');
6928
+ return v;
6929
+ }
6930
+
6931
+ function parseNumber(v)
6932
+ {
6933
+ if (typeof v != 'string') {
6934
+ return parseFloat(v);
6935
+ }
6936
+
6937
+ var isDot = v.indexOf('.');
6938
+ var isComa = v.indexOf(',');
6939
+
6940
+ if (isDot != -1 && isComa != -1) {
6941
+ if (isComa > isDot) {
6942
+ v = v.replace('.', '').replace(',', '.');
6943
+ }
6944
+ else {
6945
+ v = v.replace(',', '');
6946
+ }
6947
+ }
6948
+ else if (isComa != -1) {
6949
+ v = v.replace(',', '.');
6950
+ }
6951
+
6952
+ return parseFloat(v);
6953
+ }
6954
+
6955
+ /**
6956
+ * Hash with credit card types which can be simply extended in payment modules
6957
+ * 0 - regexp for card number
6958
+ * 1 - regexp for cvn
6959
+ * 2 - check or not credit card number trough Luhn algorithm by
6960
+ * function validateCreditCard which you can find above in this file
6961
+ */
6962
+ Validation.creditCartTypes = $H({
6963
+ // 'SS': [new RegExp('^((6759[0-9]{12})|(5018|5020|5038|6304|6759|6761|6763[0-9]{12,19})|(49[013][1356][0-9]{12})|(6333[0-9]{12})|(6334[0-4]\d{11})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
6964
+ 'SO': [new RegExp('^(6334[5-9]([0-9]{11}|[0-9]{13,14}))|(6767([0-9]{12}|[0-9]{14,15}))$'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
6965
+ 'SM': [new RegExp('(^(5[0678])[0-9]{11,18}$)|(^(6[^05])[0-9]{11,18}$)|(^(601)[^1][0-9]{9,16}$)|(^(6011)[0-9]{9,11}$)|(^(6011)[0-9]{13,16}$)|(^(65)[0-9]{11,13}$)|(^(65)[0-9]{15,18}$)|(^(49030)[2-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49033)[5-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49110)[1-2]([0-9]{10}$|[0-9]{12,13}$))|(^(49117)[4-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49118)[0-2]([0-9]{10}$|[0-9]{12,13}$))|(^(4936)([0-9]{12}$|[0-9]{14,15}$))'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
6966
+ 'VI': [new RegExp('^4[0-9]{12}([0-9]{3})?$'), new RegExp('^[0-9]{3}$'), true],
6967
+ 'MC': [new RegExp('^5[1-5][0-9]{14}$'), new RegExp('^[0-9]{3}$'), true],
6968
+ 'AE': [new RegExp('^3[47][0-9]{13}$'), new RegExp('^[0-9]{4}$'), true],
6969
+ 'DI': [new RegExp('^6011[0-9]{12}$'), new RegExp('^[0-9]{3}$'), true],
6970
+ 'JCB': [new RegExp('^(3[0-9]{15}|(2131|1800)[0-9]{11})$'), new RegExp('^[0-9]{3,4}$'), true],
6971
+ 'OT': [false, new RegExp('^([0-9]{3}|[0-9]{4})?$'), false]
6972
+ });
6973
+
6974
+ // script.aculo.us builder.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
6975
+
6976
+ // Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
6977
+ //
6978
+ // script.aculo.us is freely distributable under the terms of an MIT-style license.
6979
+ // For details, see the script.aculo.us web site: http://script.aculo.us/
6980
+
6981
+ var Builder = {
6982
+ NODEMAP: {
6983
+ AREA: 'map',
6984
+ CAPTION: 'table',
6985
+ COL: 'table',
6986
+ COLGROUP: 'table',
6987
+ LEGEND: 'fieldset',
6988
+ OPTGROUP: 'select',
6989
+ OPTION: 'select',
6990
+ PARAM: 'object',
6991
+ TBODY: 'table',
6992
+ TD: 'table',
6993
+ TFOOT: 'table',
6994
+ TH: 'table',
6995
+ THEAD: 'table',
6996
+ TR: 'table'
6997
+ },
6998
+ // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
6999
+ // due to a Firefox bug
7000
+ node: function(elementName) {
7001
+ elementName = elementName.toUpperCase();
7002
+
7003
+ // try innerHTML approach
7004
+ var parentTag = this.NODEMAP[elementName] || 'div';
7005
+ var parentElement = document.createElement(parentTag);
7006
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
7007
+ parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
7008
+ } catch(e) {}
7009
+ var element = parentElement.firstChild || null;
7010
+
7011
+ // see if browser added wrapping tags
7012
+ if(element && (element.tagName.toUpperCase() != elementName))
7013
+ element = element.getElementsByTagName(elementName)[0];
7014
+
7015
+ // fallback to createElement approach
7016
+ if(!element) element = document.createElement(elementName);
7017
+
7018
+ // abort if nothing could be created
7019
+ if(!element) return;
7020
+
7021
+ // attributes (or text)
7022
+ if(arguments[1])
7023
+ if(this._isStringOrNumber(arguments[1]) ||
7024
+ (arguments[1] instanceof Array) ||
7025
+ arguments[1].tagName) {
7026
+ this._children(element, arguments[1]);
7027
+ } else {
7028
+ var attrs = this._attributes(arguments[1]);
7029
+ if(attrs.length) {
7030
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
7031
+ parentElement.innerHTML = "<" +elementName + " " +
7032
+ attrs + "></" + elementName + ">";
7033
+ } catch(e) {}
7034
+ element = parentElement.firstChild || null;
7035
+ // workaround firefox 1.0.X bug
7036
+ if(!element) {
7037
+ element = document.createElement(elementName);
7038
+ for(attr in arguments[1])
7039
+ element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
7040
+ }
7041
+ if(element.tagName.toUpperCase() != elementName)
7042
+ element = parentElement.getElementsByTagName(elementName)[0];
7043
+ }
7044
+ }
7045
+
7046
+ // text, or array of children
7047
+ if(arguments[2])
7048
+ this._children(element, arguments[2]);
7049
+
7050
+ return $(element);
7051
+ },
7052
+ _text: function(text) {
7053
+ return document.createTextNode(text);
7054
+ },
7055
+
7056
+ ATTR_MAP: {
7057
+ 'className': 'class',
7058
+ 'htmlFor': 'for'
7059
+ },
7060
+
7061
+ _attributes: function(attributes) {
7062
+ var attrs = [];
7063
+ for(attribute in attributes)
7064
+ attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
7065
+ '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
7066
+ return attrs.join(" ");
7067
+ },
7068
+ _children: function(element, children) {
7069
+ if(children.tagName) {
7070
+ element.appendChild(children);
7071
+ return;
7072
+ }
7073
+ if(typeof children=='object') { // array can hold nodes and text
7074
+ children.flatten().each( function(e) {
7075
+ if(typeof e=='object')
7076
+ element.appendChild(e);
7077
+ else
7078
+ if(Builder._isStringOrNumber(e))
7079
+ element.appendChild(Builder._text(e));
7080
+ });
7081
+ } else
7082
+ if(Builder._isStringOrNumber(children))
7083
+ element.appendChild(Builder._text(children));
7084
+ },
7085
+ _isStringOrNumber: function(param) {
7086
+ return(typeof param=='string' || typeof param=='number');
7087
+ },
7088
+ build: function(html) {
7089
+ var element = this.node('div');
7090
+ $(element).update(html.strip());
7091
+ return element.down();
7092
+ },
7093
+ dump: function(scope) {
7094
+ if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
7095
+
7096
+ var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
7097
+ "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
7098
+ "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
7099
+ "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
7100
+ "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
7101
+ "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
7102
+
7103
+ tags.each( function(tag){
7104
+ scope[tag] = function() {
7105
+ return Builder.node.apply(Builder, [tag].concat($A(arguments)));
7106
+ };
7107
+ });
7108
+ }
7109
+ };
7110
+ // script.aculo.us effects.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
7111
+
7112
+ // Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
7113
+ // Contributors:
7114
+ // Justin Palmer (http://encytemedia.com/)
7115
+ // Mark Pilgrim (http://diveintomark.org/)
7116
+ // Martin Bialasinki
7117
+ //
7118
+ // script.aculo.us is freely distributable under the terms of an MIT-style license.
7119
+ // For details, see the script.aculo.us web site: http://script.aculo.us/
7120
+
7121
+ // converts rgb() and #xxx to #xxxxxx format,
7122
+ // returns self (or first argument) if not convertable
7123
+ String.prototype.parseColor = function() {
7124
+ var color = '#';
7125
+ if (this.slice(0,4) == 'rgb(') {
7126
+ var cols = this.slice(4,this.length-1).split(',');
7127
+ var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
7128
+ } else {
7129
+ if (this.slice(0,1) == '#') {
7130
+ if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
7131
+ if (this.length==7) color = this.toLowerCase();
7132
+ }
7133
+ }
7134
+ return (color.length==7 ? color : (arguments[0] || this));
7135
+ };
7136
+
7137
+ /*--------------------------------------------------------------------------*/
7138
+
7139
+ Element.collectTextNodes = function(element) {
7140
+ return $A($(element).childNodes).collect( function(node) {
7141
+ return (node.nodeType==3 ? node.nodeValue :
7142
+ (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
7143
+ }).flatten().join('');
7144
+ };
7145
+
7146
+ Element.collectTextNodesIgnoreClass = function(element, className) {
7147
+ return $A($(element).childNodes).collect( function(node) {
7148
+ return (node.nodeType==3 ? node.nodeValue :
7149
+ ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
7150
+ Element.collectTextNodesIgnoreClass(node, className) : ''));
7151
+ }).flatten().join('');
7152
+ };
7153
+
7154
+ Element.setContentZoom = function(element, percent) {
7155
+ element = $(element);
7156
+ element.setStyle({fontSize: (percent/100) + 'em'});
7157
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
7158
+ return element;
7159
+ };
7160
+
7161
+ Element.getInlineOpacity = function(element){
7162
+ return $(element).style.opacity || '';
7163
+ };
7164
+
7165
+ Element.forceRerendering = function(element) {
7166
+ try {
7167
+ element = $(element);
7168
+ var n = document.createTextNode(' ');
7169
+ element.appendChild(n);
7170
+ element.removeChild(n);
7171
+ } catch(e) { }
7172
+ };
7173
+
7174
+ /*--------------------------------------------------------------------------*/
7175
+
7176
+ var Effect = {
7177
+ _elementDoesNotExistError: {
7178
+ name: 'ElementDoesNotExistError',
7179
+ message: 'The specified DOM element does not exist, but is required for this effect to operate'
7180
+ },
7181
+ Transitions: {
7182
+ linear: Prototype.K,
7183
+ sinoidal: function(pos) {
7184
+ return (-Math.cos(pos*Math.PI)/2) + .5;
7185
+ },
7186
+ reverse: function(pos) {
7187
+ return 1-pos;
7188
+ },
7189
+ flicker: function(pos) {
7190
+ var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
7191
+ return pos > 1 ? 1 : pos;
7192
+ },
7193
+ wobble: function(pos) {
7194
+ return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
7195
+ },
7196
+ pulse: function(pos, pulses) {
7197
+ return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
7198
+ },
7199
+ spring: function(pos) {
7200
+ return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
7201
+ },
7202
+ none: function(pos) {
7203
+ return 0;
7204
+ },
7205
+ full: function(pos) {
7206
+ return 1;
7207
+ }
7208
+ },
7209
+ DefaultOptions: {
7210
+ duration: 1.0, // seconds
7211
+ fps: 100, // 100= assume 66fps max.
7212
+ sync: false, // true for combining
7213
+ from: 0.0,
7214
+ to: 1.0,
7215
+ delay: 0.0,
7216
+ queue: 'parallel'
7217
+ },
7218
+ tagifyText: function(element) {
7219
+ var tagifyStyle = 'position:relative';
7220
+ if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
7221
+
7222
+ element = $(element);
7223
+ $A(element.childNodes).each( function(child) {
7224
+ if (child.nodeType==3) {
7225
+ child.nodeValue.toArray().each( function(character) {
7226
+ element.insertBefore(
7227
+ new Element('span', {style: tagifyStyle}).update(
7228
+ character == ' ' ? String.fromCharCode(160) : character),
7229
+ child);
7230
+ });
7231
+ Element.remove(child);
7232
+ }
7233
+ });
7234
+ },
7235
+ multiple: function(element, effect) {
7236
+ var elements;
7237
+ if (((typeof element == 'object') ||
7238
+ Object.isFunction(element)) &&
7239
+ (element.length))
7240
+ elements = element;
7241
+ else
7242
+ elements = $(element).childNodes;
7243
+
7244
+ var options = Object.extend({
7245
+ speed: 0.1,
7246
+ delay: 0.0
7247
+ }, arguments[2] || { });
7248
+ var masterDelay = options.delay;
7249
+
7250
+ $A(elements).each( function(element, index) {
7251
+ new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
7252
+ });
7253
+ },
7254
+ PAIRS: {
7255
+ 'slide': ['SlideDown','SlideUp'],
7256
+ 'blind': ['BlindDown','BlindUp'],
7257
+ 'appear': ['Appear','Fade']
7258
+ },
7259
+ toggle: function(element, effect) {
7260
+ element = $(element);
7261
+ effect = (effect || 'appear').toLowerCase();
7262
+ var options = Object.extend({
7263
+ queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
7264
+ }, arguments[2] || { });
7265
+ Effect[element.visible() ?
7266
+ Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
7267
+ }
7268
+ };
7269
+
7270
+ Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
7271
+
7272
+ /* ------------- core effects ------------- */
7273
+
7274
+ Effect.ScopedQueue = Class.create(Enumerable, {
7275
+ initialize: function() {
7276
+ this.effects = [];
7277
+ this.interval = null;
7278
+ },
7279
+ _each: function(iterator) {
7280
+ this.effects._each(iterator);
7281
+ },
7282
+ add: function(effect) {
7283
+ var timestamp = new Date().getTime();
7284
+
7285
+ var position = Object.isString(effect.options.queue) ?
7286
+ effect.options.queue : effect.options.queue.position;
7287
+
7288
+ switch(position) {
7289
+ case 'front':
7290
+ // move unstarted effects after this effect
7291
+ this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
7292
+ e.startOn += effect.finishOn;
7293
+ e.finishOn += effect.finishOn;
7294
+ });
7295
+ break;
7296
+ case 'with-last':
7297
+ timestamp = this.effects.pluck('startOn').max() || timestamp;
7298
+ break;
7299
+ case 'end':
7300
+ // start effect after last queued effect has finished
7301
+ timestamp = this.effects.pluck('finishOn').max() || timestamp;
7302
+ break;
7303
+ }
7304
+
7305
+ effect.startOn += timestamp;
7306
+ effect.finishOn += timestamp;
7307
+
7308
+ if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
7309
+ this.effects.push(effect);
7310
+
7311
+ if (!this.interval)
7312
+ this.interval = setInterval(this.loop.bind(this), 15);
7313
+ },
7314
+ remove: function(effect) {
7315
+ this.effects = this.effects.reject(function(e) { return e==effect });
7316
+ if (this.effects.length == 0) {
7317
+ clearInterval(this.interval);
7318
+ this.interval = null;
7319
+ }
7320
+ },
7321
+ loop: function() {
7322
+ var timePos = new Date().getTime();
7323
+ for(var i=0, len=this.effects.length;i<len;i++)
7324
+ this.effects[i] && this.effects[i].loop(timePos);
7325
+ }
7326
+ });
7327
+
7328
+ Effect.Queues = {
7329
+ instances: $H(),
7330
+ get: function(queueName) {
7331
+ if (!Object.isString(queueName)) return queueName;
7332
+
7333
+ return this.instances.get(queueName) ||
7334
+ this.instances.set(queueName, new Effect.ScopedQueue());
7335
+ }
7336
+ };
7337
+ Effect.Queue = Effect.Queues.get('global');
7338
+
7339
+ Effect.Base = Class.create({
7340
+ position: null,
7341
+ start: function(options) {
7342
+ function codeForEvent(options,eventName){
7343
+ return (
7344
+ (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
7345
+ (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
7346
+ );
7347
+ }
7348
+ if (options && options.transition === false) options.transition = Effect.Transitions.linear;
7349
+ this.options = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
7350
+ this.currentFrame = 0;
7351
+ this.state = 'idle';
7352
+ this.startOn = this.options.delay*1000;
7353
+ this.finishOn = this.startOn+(this.options.duration*1000);
7354
+ this.fromToDelta = this.options.to-this.options.from;
7355
+ this.totalTime = this.finishOn-this.startOn;
7356
+ this.totalFrames = this.options.fps*this.options.duration;
7357
+
7358
+ this.render = (function() {
7359
+ function dispatch(effect, eventName) {
7360
+ if (effect.options[eventName + 'Internal'])
7361
+ effect.options[eventName + 'Internal'](effect);
7362
+ if (effect.options[eventName])
7363
+ effect.options[eventName](effect);
7364
+ }
7365
+
7366
+ return function(pos) {
7367
+ if (this.state === "idle") {
7368
+ this.state = "running";
7369
+ dispatch(this, 'beforeSetup');
7370
+ if (this.setup) this.setup();
7371
+ dispatch(this, 'afterSetup');
7372
+ }
7373
+ if (this.state === "running") {
7374
+ pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
7375
+ this.position = pos;
7376
+ dispatch(this, 'beforeUpdate');
7377
+ if (this.update) this.update(pos);
7378
+ dispatch(this, 'afterUpdate');
7379
+ }
7380
+ };
7381
+ })();
7382
+
7383
+ this.event('beforeStart');
7384
+ if (!this.options.sync)
7385
+ Effect.Queues.get(Object.isString(this.options.queue) ?
7386
+ 'global' : this.options.queue.scope).add(this);
7387
+ },
7388
+ loop: function(timePos) {
7389
+ if (timePos >= this.startOn) {
7390
+ if (timePos >= this.finishOn) {
7391
+ this.render(1.0);
7392
+ this.cancel();
7393
+ this.event('beforeFinish');
7394
+ if (this.finish) this.finish();
7395
+ this.event('afterFinish');
7396
+ return;
7397
+ }
7398
+ var pos = (timePos - this.startOn) / this.totalTime,
7399
+ frame = (pos * this.totalFrames).round();
7400
+ if (frame > this.currentFrame) {
7401
+ this.render(pos);
7402
+ this.currentFrame = frame;
7403
+ }
7404
+ }
7405
+ },
7406
+ cancel: function() {
7407
+ if (!this.options.sync)
7408
+ Effect.Queues.get(Object.isString(this.options.queue) ?
7409
+ 'global' : this.options.queue.scope).remove(this);
7410
+ this.state = 'finished';
7411
+ },
7412
+ event: function(eventName) {
7413
+ if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
7414
+ if (this.options[eventName]) this.options[eventName](this);
7415
+ },
7416
+ inspect: function() {
7417
+ var data = $H();
7418
+ for(property in this)
7419
+ if (!Object.isFunction(this[property])) data.set(property, this[property]);
7420
+ return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
7421
+ }
7422
+ });
7423
+
7424
+ Effect.Parallel = Class.create(Effect.Base, {
7425
+ initialize: function(effects) {
7426
+ this.effects = effects || [];
7427
+ this.start(arguments[1]);
7428
+ },
7429
+ update: function(position) {
7430
+ this.effects.invoke('render', position);
7431
+ },
7432
+ finish: function(position) {
7433
+ this.effects.each( function(effect) {
7434
+ effect.render(1.0);
7435
+ effect.cancel();
7436
+ effect.event('beforeFinish');
7437
+ if (effect.finish) effect.finish(position);
7438
+ effect.event('afterFinish');
7439
+ });
7440
+ }
7441
+ });
7442
+
7443
+ Effect.Tween = Class.create(Effect.Base, {
7444
+ initialize: function(object, from, to) {
7445
+ object = Object.isString(object) ? $(object) : object;
7446
+ var args = $A(arguments), method = args.last(),
7447
+ options = args.length == 5 ? args[3] : null;
7448
+ this.method = Object.isFunction(method) ? method.bind(object) :
7449
+ Object.isFunction(object[method]) ? object[method].bind(object) :
7450
+ function(value) { object[method] = value };
7451
+ this.start(Object.extend({ from: from, to: to }, options || { }));
7452
+ },
7453
+ update: function(position) {
7454
+ this.method(position);
7455
+ }
7456
+ });
7457
+
7458
+ Effect.Event = Class.create(Effect.Base, {
7459
+ initialize: function() {
7460
+ this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
7461
+ },
7462
+ update: Prototype.emptyFunction
7463
+ });
7464
+
7465
+ Effect.Opacity = Class.create(Effect.Base, {
7466
+ initialize: function(element) {
7467
+ this.element = $(element);
7468
+ if (!this.element) throw(Effect._elementDoesNotExistError);
7469
+ // make this work on IE on elements without 'layout'
7470
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
7471
+ this.element.setStyle({zoom: 1});
7472
+ var options = Object.extend({
7473
+ from: this.element.getOpacity() || 0.0,
7474
+ to: 1.0
7475
+ }, arguments[1] || { });
7476
+ this.start(options);
7477
+ },
7478
+ update: function(position) {
7479
+ this.element.setOpacity(position);
7480
+ }
7481
+ });
7482
+
7483
+ Effect.Move = Class.create(Effect.Base, {
7484
+ initialize: function(element) {
7485
+ this.element = $(element);
7486
+ if (!this.element) throw(Effect._elementDoesNotExistError);
7487
+ var options = Object.extend({
7488
+ x: 0,
7489
+ y: 0,
7490
+ mode: 'relative'
7491
+ }, arguments[1] || { });
7492
+ this.start(options);
7493
+ },
7494
+ setup: function() {
7495
+ this.element.makePositioned();
7496
+ this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
7497
+ this.originalTop = parseFloat(this.element.getStyle('top') || '0');
7498
+ if (this.options.mode == 'absolute') {
7499
+ this.options.x = this.options.x - this.originalLeft;
7500
+ this.options.y = this.options.y - this.originalTop;
7501
+ }
7502
+ },
7503
+ update: function(position) {
7504
+ this.element.setStyle({
7505
+ left: (this.options.x * position + this.originalLeft).round() + 'px',
7506
+ top: (this.options.y * position + this.originalTop).round() + 'px'
7507
+ });
7508
+ }
7509
+ });
7510
+
7511
+ // for backwards compatibility
7512
+ Effect.MoveBy = function(element, toTop, toLeft) {
7513
+ return new Effect.Move(element,
7514
+ Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
7515
+ };
7516
+
7517
+ Effect.Scale = Class.create(Effect.Base, {
7518
+ initialize: function(element, percent) {
7519
+ this.element = $(element);
7520
+ if (!this.element) throw(Effect._elementDoesNotExistError);
7521
+ var options = Object.extend({
7522
+ scaleX: true,
7523
+ scaleY: true,
7524
+ scaleContent: true,
7525
+ scaleFromCenter: false,
7526
+ scaleMode: 'box', // 'box' or 'contents' or { } with provided values
7527
+ scaleFrom: 100.0,
7528
+ scaleTo: percent
7529
+ }, arguments[2] || { });
7530
+ this.start(options);
7531
+ },
7532
+ setup: function() {
7533
+ this.restoreAfterFinish = this.options.restoreAfterFinish || false;
7534
+ this.elementPositioning = this.element.getStyle('position');
7535
+
7536
+ this.originalStyle = { };
7537
+ ['top','left','width','height','fontSize'].each( function(k) {
7538
+ this.originalStyle[k] = this.element.style[k];
7539
+ }.bind(this));
7540
+
7541
+ this.originalTop = this.element.offsetTop;
7542
+ this.originalLeft = this.element.offsetLeft;
7543
+
7544
+ var fontSize = this.element.getStyle('font-size') || '100%';
7545
+ ['em','px','%','pt'].each( function(fontSizeType) {
7546
+ if (fontSize.indexOf(fontSizeType)>0) {
7547
+ this.fontSize = parseFloat(fontSize);
7548
+ this.fontSizeType = fontSizeType;
7549
+ }
7550
+ }.bind(this));
7551
+
7552
+ this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
7553
+
7554
+ this.dims = null;
7555
+ if (this.options.scaleMode=='box')
7556
+ this.dims = [this.element.offsetHeight, this.element.offsetWidth];
7557
+ if (/^content/.test(this.options.scaleMode))
7558
+ this.dims = [this.element.scrollHeight, this.element.scrollWidth];
7559
+ if (!this.dims)
7560
+ this.dims = [this.options.scaleMode.originalHeight,
7561
+ this.options.scaleMode.originalWidth];
7562
+ },
7563
+ update: function(position) {
7564
+ var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
7565
+ if (this.options.scaleContent && this.fontSize)
7566
+ this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
7567
+ this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
7568
+ },
7569
+ finish: function(position) {
7570
+ if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
7571
+ },
7572
+ setDimensions: function(height, width) {
7573
+ var d = { };
7574
+ if (this.options.scaleX) d.width = width.round() + 'px';
7575
+ if (this.options.scaleY) d.height = height.round() + 'px';
7576
+ if (this.options.scaleFromCenter) {
7577
+ var topd = (height - this.dims[0])/2;
7578
+ var leftd = (width - this.dims[1])/2;
7579
+ if (this.elementPositioning == 'absolute') {
7580
+ if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
7581
+ if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
7582
+ } else {
7583
+ if (this.options.scaleY) d.top = -topd + 'px';
7584
+ if (this.options.scaleX) d.left = -leftd + 'px';
7585
+ }
7586
+ }
7587
+ this.element.setStyle(d);
7588
+ }
7589
+ });
7590
+
7591
+ Effect.Highlight = Class.create(Effect.Base, {
7592
+ initialize: function(element) {
7593
+ this.element = $(element);
7594
+ if (!this.element) throw(Effect._elementDoesNotExistError);
7595
+ var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
7596
+ this.start(options);
7597
+ },
7598
+ setup: function() {
7599
+ // Prevent executing on elements not in the layout flow
7600
+ if (this.element.getStyle('display')=='none') { this.cancel(); return; }
7601
+ // Disable background image during the effect
7602
+ this.oldStyle = { };
7603
+ if (!this.options.keepBackgroundImage) {
7604
+ this.oldStyle.backgroundImage = this.element.getStyle('background-image');
7605
+ this.element.setStyle({backgroundImage: 'none'});
7606
+ }
7607
+ if (!this.options.endcolor)
7608
+ this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
7609
+ if (!this.options.restorecolor)
7610
+ this.options.restorecolor = this.element.getStyle('background-color');
7611
+ // init color calculations
7612
+ this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
7613
+ this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
7614
+ },
7615
+ update: function(position) {
7616
+ this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
7617
+ return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
7618
+ },
7619
+ finish: function() {
7620
+ this.element.setStyle(Object.extend(this.oldStyle, {
7621
+ backgroundColor: this.options.restorecolor
7622
+ }));
7623
+ }
7624
+ });
7625
+
7626
+ Effect.ScrollTo = function(element) {
7627
+ var options = arguments[1] || { },
7628
+ scrollOffsets = document.viewport.getScrollOffsets(),
7629
+ elementOffsets = $(element).cumulativeOffset();
7630
+
7631
+ if (options.offset) elementOffsets[1] += options.offset;
7632
+
7633
+ return new Effect.Tween(null,
7634
+ scrollOffsets.top,
7635
+ elementOffsets[1],
7636
+ options,
7637
+ function(p){ scrollTo(scrollOffsets.left, p.round()); }
7638
+ );
7639
+ };
7640
+
7641
+ /* ------------- combination effects ------------- */
7642
+
7643
+ Effect.Fade = function(element) {
7644
+ element = $(element);
7645
+ var oldOpacity = element.getInlineOpacity();
7646
+ var options = Object.extend({
7647
+ from: element.getOpacity() || 1.0,
7648
+ to: 0.0,
7649
+ afterFinishInternal: function(effect) {
7650
+ if (effect.options.to!=0) return;
7651
+ effect.element.hide().setStyle({opacity: oldOpacity});
7652
+ }
7653
+ }, arguments[1] || { });
7654
+ return new Effect.Opacity(element,options);
7655
+ };
7656
+
7657
+ Effect.Appear = function(element) {
7658
+ element = $(element);
7659
+ var options = Object.extend({
7660
+ from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
7661
+ to: 1.0,
7662
+ // force Safari to render floated elements properly
7663
+ afterFinishInternal: function(effect) {
7664
+ effect.element.forceRerendering();
7665
+ },
7666
+ beforeSetup: function(effect) {
7667
+ effect.element.setOpacity(effect.options.from).show();
7668
+ }}, arguments[1] || { });
7669
+ return new Effect.Opacity(element,options);
7670
+ };
7671
+
7672
+ Effect.Puff = function(element) {
7673
+ element = $(element);
7674
+ var oldStyle = {
7675
+ opacity: element.getInlineOpacity(),
7676
+ position: element.getStyle('position'),
7677
+ top: element.style.top,
7678
+ left: element.style.left,
7679
+ width: element.style.width,
7680
+ height: element.style.height
7681
+ };
7682
+ return new Effect.Parallel(
7683
+ [ new Effect.Scale(element, 200,
7684
+ { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
7685
+ new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
7686
+ Object.extend({ duration: 1.0,
7687
+ beforeSetupInternal: function(effect) {
7688
+ Position.absolutize(effect.effects[0].element);
7689
+ },
7690
+ afterFinishInternal: function(effect) {
7691
+ effect.effects[0].element.hide().setStyle(oldStyle); }
7692
+ }, arguments[1] || { })
7693
+ );
7694
+ };
7695
+
7696
+ Effect.BlindUp = function(element) {
7697
+ element = $(element);
7698
+ element.makeClipping();
7699
+ return new Effect.Scale(element, 0,
7700
+ Object.extend({ scaleContent: false,
7701
+ scaleX: false,
7702
+ restoreAfterFinish: true,
7703
+ afterFinishInternal: function(effect) {
7704
+ effect.element.hide().undoClipping();
7705
+ }
7706
+ }, arguments[1] || { })
7707
+ );
7708
+ };
7709
+
7710
+ Effect.BlindDown = function(element) {
7711
+ element = $(element);
7712
+ var elementDimensions = element.getDimensions();
7713
+ return new Effect.Scale(element, 100, Object.extend({
7714
+ scaleContent: false,
7715
+ scaleX: false,
7716
+ scaleFrom: 0,
7717
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
7718
+ restoreAfterFinish: true,
7719
+ afterSetup: function(effect) {
7720
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
7721
+ },
7722
+ afterFinishInternal: function(effect) {
7723
+ effect.element.undoClipping();
7724
+ }
7725
+ }, arguments[1] || { }));
7726
+ };
7727
+
7728
+ Effect.SwitchOff = function(element) {
7729
+ element = $(element);
7730
+ var oldOpacity = element.getInlineOpacity();
7731
+ return new Effect.Appear(element, Object.extend({
7732
+ duration: 0.4,
7733
+ from: 0,
7734
+ transition: Effect.Transitions.flicker,
7735
+ afterFinishInternal: function(effect) {
7736
+ new Effect.Scale(effect.element, 1, {
7737
+ duration: 0.3, scaleFromCenter: true,
7738
+ scaleX: false, scaleContent: false, restoreAfterFinish: true,
7739
+ beforeSetup: function(effect) {
7740
+ effect.element.makePositioned().makeClipping();
7741
+ },
7742
+ afterFinishInternal: function(effect) {
7743
+ effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
7744
+ }
7745
+ });
7746
+ }
7747
+ }, arguments[1] || { }));
7748
+ };
7749
+
7750
+ Effect.DropOut = function(element) {
7751
+ element = $(element);
7752
+ var oldStyle = {
7753
+ top: element.getStyle('top'),
7754
+ left: element.getStyle('left'),
7755
+ opacity: element.getInlineOpacity() };
7756
+ return new Effect.Parallel(
7757
+ [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
7758
+ new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
7759
+ Object.extend(
7760
+ { duration: 0.5,
7761
+ beforeSetup: function(effect) {
7762
+ effect.effects[0].element.makePositioned();
7763
+ },
7764
+ afterFinishInternal: function(effect) {
7765
+ effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
7766
+ }
7767
+ }, arguments[1] || { }));
7768
+ };
7769
+
7770
+ Effect.Shake = function(element) {
7771
+ element = $(element);
7772
+ var options = Object.extend({
7773
+ distance: 20,
7774
+ duration: 0.5
7775
+ }, arguments[1] || {});
7776
+ var distance = parseFloat(options.distance);
7777
+ var split = parseFloat(options.duration) / 10.0;
7778
+ var oldStyle = {
7779
+ top: element.getStyle('top'),
7780
+ left: element.getStyle('left') };
7781
+ return new Effect.Move(element,
7782
+ { x: distance, y: 0, duration: split, afterFinishInternal: function(effect) {
7783
+ new Effect.Move(effect.element,
7784
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
7785
+ new Effect.Move(effect.element,
7786
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
7787
+ new Effect.Move(effect.element,
7788
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
7789
+ new Effect.Move(effect.element,
7790
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
7791
+ new Effect.Move(effect.element,
7792
+ { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
7793
+ effect.element.undoPositioned().setStyle(oldStyle);
7794
+ }}); }}); }}); }}); }}); }});
7795
+ };
7796
+
7797
+ Effect.SlideDown = function(element) {
7798
+ element = $(element).cleanWhitespace();
7799
+ // SlideDown need to have the content of the element wrapped in a container element with fixed height!
7800
+ var oldInnerBottom = element.down().getStyle('bottom');
7801
+ var elementDimensions = element.getDimensions();
7802
+ return new Effect.Scale(element, 100, Object.extend({
7803
+ scaleContent: false,
7804
+ scaleX: false,
7805
+ scaleFrom: window.opera ? 0 : 1,
7806
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
7807
+ restoreAfterFinish: true,
7808
+ afterSetup: function(effect) {
7809
+ effect.element.makePositioned();
7810
+ effect.element.down().makePositioned();
7811
+ if (window.opera) effect.element.setStyle({top: ''});
7812
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
7813
+ },
7814
+ afterUpdateInternal: function(effect) {
7815
+ effect.element.down().setStyle({bottom:
7816
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
7817
+ },
7818
+ afterFinishInternal: function(effect) {
7819
+ effect.element.undoClipping().undoPositioned();
7820
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
7821
+ }, arguments[1] || { })
7822
+ );
7823
+ };
7824
+
7825
+ Effect.SlideUp = function(element) {
7826
+ element = $(element).cleanWhitespace();
7827
+ var oldInnerBottom = element.down().getStyle('bottom');
7828
+ var elementDimensions = element.getDimensions();
7829
+ return new Effect.Scale(element, window.opera ? 0 : 1,
7830
+ Object.extend({ scaleContent: false,
7831
+ scaleX: false,
7832
+ scaleMode: 'box',
7833
+ scaleFrom: 100,
7834
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
7835
+ restoreAfterFinish: true,
7836
+ afterSetup: function(effect) {
7837
+ effect.element.makePositioned();
7838
+ effect.element.down().makePositioned();
7839
+ if (window.opera) effect.element.setStyle({top: ''});
7840
+ effect.element.makeClipping().show();
7841
+ },
7842
+ afterUpdateInternal: function(effect) {
7843
+ effect.element.down().setStyle({bottom:
7844
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
7845
+ },
7846
+ afterFinishInternal: function(effect) {
7847
+ effect.element.hide().undoClipping().undoPositioned();
7848
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
7849
+ }
7850
+ }, arguments[1] || { })
7851
+ );
7852
+ };
7853
+
7854
+ // Bug in opera makes the TD containing this element expand for a instance after finish
7855
+ Effect.Squish = function(element) {
7856
+ return new Effect.Scale(element, window.opera ? 1 : 0, {
7857
+ restoreAfterFinish: true,
7858
+ beforeSetup: function(effect) {
7859
+ effect.element.makeClipping();
7860
+ },
7861
+ afterFinishInternal: function(effect) {
7862
+ effect.element.hide().undoClipping();
7863
+ }
7864
+ });
7865
+ };
7866
+
7867
+ Effect.Grow = function(element) {
7868
+ element = $(element);
7869
+ var options = Object.extend({
7870
+ direction: 'center',
7871
+ moveTransition: Effect.Transitions.sinoidal,
7872
+ scaleTransition: Effect.Transitions.sinoidal,
7873
+ opacityTransition: Effect.Transitions.full
7874
+ }, arguments[1] || { });
7875
+ var oldStyle = {
7876
+ top: element.style.top,
7877
+ left: element.style.left,
7878
+ height: element.style.height,
7879
+ width: element.style.width,
7880
+ opacity: element.getInlineOpacity() };
7881
+
7882
+ var dims = element.getDimensions();
7883
+ var initialMoveX, initialMoveY;
7884
+ var moveX, moveY;
7885
+
7886
+ switch (options.direction) {
7887
+ case 'top-left':
7888
+ initialMoveX = initialMoveY = moveX = moveY = 0;
7889
+ break;
7890
+ case 'top-right':
7891
+ initialMoveX = dims.width;
7892
+ initialMoveY = moveY = 0;
7893
+ moveX = -dims.width;
7894
+ break;
7895
+ case 'bottom-left':
7896
+ initialMoveX = moveX = 0;
7897
+ initialMoveY = dims.height;
7898
+ moveY = -dims.height;
7899
+ break;
7900
+ case 'bottom-right':
7901
+ initialMoveX = dims.width;
7902
+ initialMoveY = dims.height;
7903
+ moveX = -dims.width;
7904
+ moveY = -dims.height;
7905
+ break;
7906
+ case 'center':
7907
+ initialMoveX = dims.width / 2;
7908
+ initialMoveY = dims.height / 2;
7909
+ moveX = -dims.width / 2;
7910
+ moveY = -dims.height / 2;
7911
+ break;
7912
+ }
7913
+
7914
+ return new Effect.Move(element, {
7915
+ x: initialMoveX,
7916
+ y: initialMoveY,
7917
+ duration: 0.01,
7918
+ beforeSetup: function(effect) {
7919
+ effect.element.hide().makeClipping().makePositioned();
7920
+ },
7921
+ afterFinishInternal: function(effect) {
7922
+ new Effect.Parallel(
7923
+ [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
7924
+ new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
7925
+ new Effect.Scale(effect.element, 100, {
7926
+ scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
7927
+ sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
7928
+ ], Object.extend({
7929
+ beforeSetup: function(effect) {
7930
+ effect.effects[0].element.setStyle({height: '0px'}).show();
7931
+ },
7932
+ afterFinishInternal: function(effect) {
7933
+ effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
7934
+ }
7935
+ }, options)
7936
+ );
7937
+ }
7938
+ });
7939
+ };
7940
+
7941
+ Effect.Shrink = function(element) {
7942
+ element = $(element);
7943
+ var options = Object.extend({
7944
+ direction: 'center',
7945
+ moveTransition: Effect.Transitions.sinoidal,
7946
+ scaleTransition: Effect.Transitions.sinoidal,
7947
+ opacityTransition: Effect.Transitions.none
7948
+ }, arguments[1] || { });
7949
+ var oldStyle = {
7950
+ top: element.style.top,
7951
+ left: element.style.left,
7952
+ height: element.style.height,
7953
+ width: element.style.width,
7954
+ opacity: element.getInlineOpacity() };
7955
+
7956
+ var dims = element.getDimensions();
7957
+ var moveX, moveY;
7958
+
7959
+ switch (options.direction) {
7960
+ case 'top-left':
7961
+ moveX = moveY = 0;
7962
+ break;
7963
+ case 'top-right':
7964
+ moveX = dims.width;
7965
+ moveY = 0;
7966
+ break;
7967
+ case 'bottom-left':
7968
+ moveX = 0;
7969
+ moveY = dims.height;
7970
+ break;
7971
+ case 'bottom-right':
7972
+ moveX = dims.width;
7973
+ moveY = dims.height;
7974
+ break;
7975
+ case 'center':
7976
+ moveX = dims.width / 2;
7977
+ moveY = dims.height / 2;
7978
+ break;
7979
+ }
7980
+
7981
+ return new Effect.Parallel(
7982
+ [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
7983
+ new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
7984
+ new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
7985
+ ], Object.extend({
7986
+ beforeStartInternal: function(effect) {
7987
+ effect.effects[0].element.makePositioned().makeClipping();
7988
+ },
7989
+ afterFinishInternal: function(effect) {
7990
+ effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
7991
+ }, options)
7992
+ );
7993
+ };
7994
+
7995
+ Effect.Pulsate = function(element) {
7996
+ element = $(element);
7997
+ var options = arguments[1] || { },
7998
+ oldOpacity = element.getInlineOpacity(),
7999
+ transition = options.transition || Effect.Transitions.linear,
8000
+ reverser = function(pos){
8001
+ return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
8002
+ };
8003
+
8004
+ return new Effect.Opacity(element,
8005
+ Object.extend(Object.extend({ duration: 2.0, from: 0,
8006
+ afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
8007
+ }, options), {transition: reverser}));
8008
+ };
8009
+
8010
+ Effect.Fold = function(element) {
8011
+ element = $(element);
8012
+ var oldStyle = {
8013
+ top: element.style.top,
8014
+ left: element.style.left,
8015
+ width: element.style.width,
8016
+ height: element.style.height };
8017
+ element.makeClipping();
8018
+ return new Effect.Scale(element, 5, Object.extend({
8019
+ scaleContent: false,
8020
+ scaleX: false,
8021
+ afterFinishInternal: function(effect) {
8022
+ new Effect.Scale(element, 1, {
8023
+ scaleContent: false,
8024
+ scaleY: false,
8025
+ afterFinishInternal: function(effect) {
8026
+ effect.element.hide().undoClipping().setStyle(oldStyle);
8027
+ } });
8028
+ }}, arguments[1] || { }));
8029
+ };
8030
+
8031
+ Effect.Morph = Class.create(Effect.Base, {
8032
+ initialize: function(element) {
8033
+ this.element = $(element);
8034
+ if (!this.element) throw(Effect._elementDoesNotExistError);
8035
+ var options = Object.extend({
8036
+ style: { }
8037
+ }, arguments[1] || { });
8038
+
8039
+ if (!Object.isString(options.style)) this.style = $H(options.style);
8040
+ else {
8041
+ if (options.style.include(':'))
8042
+ this.style = options.style.parseStyle();
8043
+ else {
8044
+ this.element.addClassName(options.style);
8045
+ this.style = $H(this.element.getStyles());
8046
+ this.element.removeClassName(options.style);
8047
+ var css = this.element.getStyles();
8048
+ this.style = this.style.reject(function(style) {
8049
+ return style.value == css[style.key];
8050
+ });
8051
+ options.afterFinishInternal = function(effect) {
8052
+ effect.element.addClassName(effect.options.style);
8053
+ effect.transforms.each(function(transform) {
8054
+ effect.element.style[transform.style] = '';
8055
+ });
8056
+ };
8057
+ }
8058
+ }
8059
+ this.start(options);
8060
+ },
8061
+
8062
+ setup: function(){
8063
+ function parseColor(color){
8064
+ if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
8065
+ color = color.parseColor();
8066
+ return $R(0,2).map(function(i){
8067
+ return parseInt( color.slice(i*2+1,i*2+3), 16 );
8068
+ });
8069
+ }
8070
+ this.transforms = this.style.map(function(pair){
8071
+ var property = pair[0], value = pair[1], unit = null;
8072
+
8073
+ if (value.parseColor('#zzzzzz') != '#zzzzzz') {
8074
+ value = value.parseColor();
8075
+ unit = 'color';
8076
+ } else if (property == 'opacity') {
8077
+ value = parseFloat(value);
8078
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
8079
+ this.element.setStyle({zoom: 1});
8080
+ } else if (Element.CSS_LENGTH.test(value)) {
8081
+ var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
8082
+ value = parseFloat(components[1]);
8083
+ unit = (components.length == 3) ? components[2] : null;
8084
+ }
8085
+
8086
+ var originalValue = this.element.getStyle(property);
8087
+ return {
8088
+ style: property.camelize(),
8089
+ originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
8090
+ targetValue: unit=='color' ? parseColor(value) : value,
8091
+ unit: unit
8092
+ };
8093
+ }.bind(this)).reject(function(transform){
8094
+ return (
8095
+ (transform.originalValue == transform.targetValue) ||
8096
+ (
8097
+ transform.unit != 'color' &&
8098
+ (isNaN(transform.originalValue) || isNaN(transform.targetValue))
8099
+ )
8100
+ );
8101
+ });
8102
+ },
8103
+ update: function(position) {
8104
+ var style = { }, transform, i = this.transforms.length;
8105
+ while(i--)
8106
+ style[(transform = this.transforms[i]).style] =
8107
+ transform.unit=='color' ? '#'+
8108
+ (Math.round(transform.originalValue[0]+
8109
+ (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
8110
+ (Math.round(transform.originalValue[1]+
8111
+ (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
8112
+ (Math.round(transform.originalValue[2]+
8113
+ (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
8114
+ (transform.originalValue +
8115
+ (transform.targetValue - transform.originalValue) * position).toFixed(3) +
8116
+ (transform.unit === null ? '' : transform.unit);
8117
+ this.element.setStyle(style, true);
8118
+ }
8119
+ });
8120
+
8121
+ Effect.Transform = Class.create({
8122
+ initialize: function(tracks){
8123
+ this.tracks = [];
8124
+ this.options = arguments[1] || { };
8125
+ this.addTracks(tracks);
8126
+ },
8127
+ addTracks: function(tracks){
8128
+ tracks.each(function(track){
8129
+ track = $H(track);
8130
+ var data = track.values().first();
8131
+ this.tracks.push($H({
8132
+ ids: track.keys().first(),
8133
+ effect: Effect.Morph,
8134
+ options: { style: data }
8135
+ }));
8136
+ }.bind(this));
8137
+ return this;
8138
+ },
8139
+ play: function(){
8140
+ return new Effect.Parallel(
8141
+ this.tracks.map(function(track){
8142
+ var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
8143
+ var elements = [$(ids) || $$(ids)].flatten();
8144
+ return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
8145
+ }).flatten(),
8146
+ this.options
8147
+ );
8148
+ }
8149
+ });
8150
+
8151
+ Element.CSS_PROPERTIES = $w(
8152
+ 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
8153
+ 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
8154
+ 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
8155
+ 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
8156
+ 'fontSize fontWeight height left letterSpacing lineHeight ' +
8157
+ 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
8158
+ 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
8159
+ 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
8160
+ 'right textIndent top width wordSpacing zIndex');
8161
+
8162
+ Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
8163
+
8164
+ String.__parseStyleElement = document.createElement('div');
8165
+ String.prototype.parseStyle = function(){
8166
+ var style, styleRules = $H();
8167
+ if (Prototype.Browser.WebKit)
8168
+ style = new Element('div',{style:this}).style;
8169
+ else {
8170
+ String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
8171
+ style = String.__parseStyleElement.childNodes[0].style;
8172
+ }
8173
+
8174
+ Element.CSS_PROPERTIES.each(function(property){
8175
+ if (style[property]) styleRules.set(property, style[property]);
8176
+ });
8177
+
8178
+ if (Prototype.Browser.IE && this.include('opacity'))
8179
+ styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
8180
+
8181
+ return styleRules;
8182
+ };
8183
+
8184
+ if (document.defaultView && document.defaultView.getComputedStyle) {
8185
+ Element.getStyles = function(element) {
8186
+ var css = document.defaultView.getComputedStyle($(element), null);
8187
+ return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
8188
+ styles[property] = css[property];
8189
+ return styles;
8190
+ });
8191
+ };
8192
+ } else {
8193
+ Element.getStyles = function(element) {
8194
+ element = $(element);
8195
+ var css = element.currentStyle, styles;
8196
+ styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
8197
+ results[property] = css[property];
8198
+ return results;
8199
+ });
8200
+ if (!styles.opacity) styles.opacity = element.getOpacity();
8201
+ return styles;
8202
+ };
8203
+ }
8204
+
8205
+ Effect.Methods = {
8206
+ morph: function(element, style) {
8207
+ element = $(element);
8208
+ new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
8209
+ return element;
8210
+ },
8211
+ visualEffect: function(element, effect, options) {
8212
+ element = $(element);
8213
+ var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
8214
+ new Effect[klass](element, options);
8215
+ return element;
8216
+ },
8217
+ highlight: function(element, options) {
8218
+ element = $(element);
8219
+ new Effect.Highlight(element, options);
8220
+ return element;
8221
+ }
8222
+ };
8223
+
8224
+ $w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
8225
+ 'pulsate shake puff squish switchOff dropOut').each(
8226
+ function(effect) {
8227
+ Effect.Methods[effect] = function(element, options){
8228
+ element = $(element);
8229
+ Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
8230
+ return element;
8231
+ };
8232
+ }
8233
+ );
8234
+
8235
+ $w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
8236
+ function(f) { Effect.Methods[f] = Element[f]; }
8237
+ );
8238
+
8239
+ Element.addMethods(Effect.Methods);
8240
+ // script.aculo.us dragdrop.js v1.9.0, Thu Dec 23 16:54:48 -0500 2010
8241
+
8242
+ // Copyright (c) 2005-2010 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
8243
+ //
8244
+ // script.aculo.us is freely distributable under the terms of an MIT-style license.
8245
+ // For details, see the script.aculo.us web site: http://script.aculo.us/
8246
+
8247
+ if(Object.isUndefined(Effect))
8248
+ throw("dragdrop.js requires including script.aculo.us' effects.js library");
8249
+
8250
+ var Droppables = {
8251
+ drops: [],
8252
+
8253
+ remove: function(element) {
8254
+ this.drops = this.drops.reject(function(d) { return d.element==$(element) });
8255
+ },
8256
+
8257
+ add: function(element) {
8258
+ element = $(element);
8259
+ var options = Object.extend({
8260
+ greedy: true,
8261
+ hoverclass: null,
8262
+ tree: false
8263
+ }, arguments[1] || { });
8264
+
8265
+ // cache containers
8266
+ if(options.containment) {
8267
+ options._containers = [];
8268
+ var containment = options.containment;
8269
+ if(Object.isArray(containment)) {
8270
+ containment.each( function(c) { options._containers.push($(c)) });
8271
+ } else {
8272
+ options._containers.push($(containment));
8273
+ }
8274
+ }
8275
+
8276
+ if(options.accept) options.accept = [options.accept].flatten();
8277
+
8278
+ Element.makePositioned(element); // fix IE
8279
+ options.element = element;
8280
+
8281
+ this.drops.push(options);
8282
+ },
8283
+
8284
+ findDeepestChild: function(drops) {
8285
+ deepest = drops[0];
8286
+
8287
+ for (i = 1; i < drops.length; ++i)
8288
+ if (Element.isParent(drops[i].element, deepest.element))
8289
+ deepest = drops[i];
8290
+
8291
+ return deepest;
8292
+ },
8293
+
8294
+ isContained: function(element, drop) {
8295
+ var containmentNode;
8296
+ if(drop.tree) {
8297
+ containmentNode = element.treeNode;
8298
+ } else {
8299
+ containmentNode = element.parentNode;
8300
+ }
8301
+ return drop._containers.detect(function(c) { return containmentNode == c });
8302
+ },
8303
+
8304
+ isAffected: function(point, element, drop) {
8305
+ return (
8306
+ (drop.element!=element) &&
8307
+ ((!drop._containers) ||
8308
+ this.isContained(element, drop)) &&
8309
+ ((!drop.accept) ||
8310
+ (Element.classNames(element).detect(
8311
+ function(v) { return drop.accept.include(v) } ) )) &&
8312
+ Position.within(drop.element, point[0], point[1]) );
8313
+ },
8314
+
8315
+ deactivate: function(drop) {
8316
+ if(drop.hoverclass)
8317
+ Element.removeClassName(drop.element, drop.hoverclass);
8318
+ this.last_active = null;
8319
+ },
8320
+
8321
+ activate: function(drop) {
8322
+ if(drop.hoverclass)
8323
+ Element.addClassName(drop.element, drop.hoverclass);
8324
+ this.last_active = drop;
8325
+ },
8326
+
8327
+ show: function(point, element) {
8328
+ if(!this.drops.length) return;
8329
+ var drop, affected = [];
8330
+
8331
+ this.drops.each( function(drop) {
8332
+ if(Droppables.isAffected(point, element, drop))
8333
+ affected.push(drop);
8334
+ });
8335
+
8336
+ if(affected.length>0)
8337
+ drop = Droppables.findDeepestChild(affected);
8338
+
8339
+ if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
8340
+ if (drop) {
8341
+ Position.within(drop.element, point[0], point[1]);
8342
+ if(drop.onHover)
8343
+ drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
8344
+
8345
+ if (drop != this.last_active) Droppables.activate(drop);
8346
+ }
8347
+ },
8348
+
8349
+ fire: function(event, element) {
8350
+ if(!this.last_active) return;
8351
+ Position.prepare();
8352
+
8353
+ if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
8354
+ if (this.last_active.onDrop) {
8355
+ this.last_active.onDrop(element, this.last_active.element, event);
8356
+ return true;
8357
+ }
8358
+ },
8359
+
8360
+ reset: function() {
8361
+ if(this.last_active)
8362
+ this.deactivate(this.last_active);
8363
+ }
8364
+ };
8365
+
8366
+ var Draggables = {
8367
+ drags: [],
8368
+ observers: [],
8369
+
8370
+ register: function(draggable) {
8371
+ if(this.drags.length == 0) {
8372
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
8373
+ this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
8374
+ this.eventKeypress = this.keyPress.bindAsEventListener(this);
8375
+
8376
+ Event.observe(document, "mouseup", this.eventMouseUp);
8377
+ Event.observe(document, "mousemove", this.eventMouseMove);
8378
+ Event.observe(document, "keypress", this.eventKeypress);
8379
+ }
8380
+ this.drags.push(draggable);
8381
+ },
8382
+
8383
+ unregister: function(draggable) {
8384
+ this.drags = this.drags.reject(function(d) { return d==draggable });
8385
+ if(this.drags.length == 0) {
8386
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
8387
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
8388
+ Event.stopObserving(document, "keypress", this.eventKeypress);
8389
+ }
8390
+ },
8391
+
8392
+ activate: function(draggable) {
8393
+ if(draggable.options.delay) {
8394
+ this._timeout = setTimeout(function() {
8395
+ Draggables._timeout = null;
8396
+ window.focus();
8397
+ Draggables.activeDraggable = draggable;
8398
+ }.bind(this), draggable.options.delay);
8399
+ } else {
8400
+ window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
8401
+ this.activeDraggable = draggable;
8402
+ }
8403
+ },
8404
+
8405
+ deactivate: function() {
8406
+ this.activeDraggable = null;
8407
+ },
8408
+
8409
+ updateDrag: function(event) {
8410
+ if(!this.activeDraggable) return;
8411
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
8412
+ // Mozilla-based browsers fire successive mousemove events with
8413
+ // the same coordinates, prevent needless redrawing (moz bug?)
8414
+ if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
8415
+ this._lastPointer = pointer;
8416
+
8417
+ this.activeDraggable.updateDrag(event, pointer);
8418
+ },
8419
+
8420
+ endDrag: function(event) {
8421
+ if(this._timeout) {
8422
+ clearTimeout(this._timeout);
8423
+ this._timeout = null;
8424
+ }
8425
+ if(!this.activeDraggable) return;
8426
+ this._lastPointer = null;
8427
+ this.activeDraggable.endDrag(event);
8428
+ this.activeDraggable = null;
8429
+ },
8430
+
8431
+ keyPress: function(event) {
8432
+ if(this.activeDraggable)
8433
+ this.activeDraggable.keyPress(event);
8434
+ },
8435
+
8436
+ addObserver: function(observer) {
8437
+ this.observers.push(observer);
8438
+ this._cacheObserverCallbacks();
8439
+ },
8440
+
8441
+ removeObserver: function(element) { // element instead of observer fixes mem leaks
8442
+ this.observers = this.observers.reject( function(o) { return o.element==element });
8443
+ this._cacheObserverCallbacks();
8444
+ },
8445
+
8446
+ notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag'
8447
+ if(this[eventName+'Count'] > 0)
8448
+ this.observers.each( function(o) {
8449
+ if(o[eventName]) o[eventName](eventName, draggable, event);
8450
+ });
8451
+ if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
8452
+ },
8453
+
8454
+ _cacheObserverCallbacks: function() {
8455
+ ['onStart','onEnd','onDrag'].each( function(eventName) {
8456
+ Draggables[eventName+'Count'] = Draggables.observers.select(
8457
+ function(o) { return o[eventName]; }
8458
+ ).length;
8459
+ });
8460
+ }
8461
+ };
8462
+
8463
+ /*--------------------------------------------------------------------------*/
8464
+
8465
+ var Draggable = Class.create({
8466
+ initialize: function(element) {
8467
+ var defaults = {
8468
+ handle: false,
8469
+ reverteffect: function(element, top_offset, left_offset) {
8470
+ var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
8471
+ new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
8472
+ queue: {scope:'_draggable', position:'end'}
8473
+ });
8474
+ },
8475
+ endeffect: function(element) {
8476
+ var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
8477
+ new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
8478
+ queue: {scope:'_draggable', position:'end'},
8479
+ afterFinish: function(){
8480
+ Draggable._dragging[element] = false
8481
+ }
8482
+ });
8483
+ },
8484
+ zindex: 1000,
8485
+ revert: false,
8486
+ quiet: false,
8487
+ scroll: false,
8488
+ scrollSensitivity: 20,
8489
+ scrollSpeed: 15,
8490
+ snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] }
8491
+ delay: 0
8492
+ };
8493
+
8494
+ if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
8495
+ Object.extend(defaults, {
8496
+ starteffect: function(element) {
8497
+ element._opacity = Element.getOpacity(element);
8498
+ Draggable._dragging[element] = true;
8499
+ new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
8500
+ }
8501
+ });
8502
+
8503
+ var options = Object.extend(defaults, arguments[1] || { });
8504
+
8505
+ this.element = $(element);
8506
+
8507
+ if(options.handle && Object.isString(options.handle))
8508
+ this.handle = this.element.down('.'+options.handle, 0);
8509
+
8510
+ if(!this.handle) this.handle = $(options.handle);
8511
+ if(!this.handle) this.handle = this.element;
8512
+
8513
+ if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
8514
+ options.scroll = $(options.scroll);
8515
+ this._isScrollChild = Element.childOf(this.element, options.scroll);
8516
+ }
8517
+
8518
+ Element.makePositioned(this.element); // fix IE
8519
+
8520
+ this.options = options;
8521
+ this.dragging = false;
8522
+
8523
+ this.eventMouseDown = this.initDrag.bindAsEventListener(this);
8524
+ Event.observe(this.handle, "mousedown", this.eventMouseDown);
8525
+
8526
+ Draggables.register(this);
8527
+ },
8528
+
8529
+ destroy: function() {
8530
+ Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
8531
+ Draggables.unregister(this);
8532
+ },
8533
+
8534
+ currentDelta: function() {
8535
+ return([
8536
+ parseInt(Element.getStyle(this.element,'left') || '0'),
8537
+ parseInt(Element.getStyle(this.element,'top') || '0')]);
8538
+ },
8539
+
8540
+ initDrag: function(event) {
8541
+ if(!Object.isUndefined(Draggable._dragging[this.element]) &&
8542
+ Draggable._dragging[this.element]) return;
8543
+ if(Event.isLeftClick(event)) {
8544
+ // abort on form elements, fixes a Firefox issue
8545
+ var src = Event.element(event);
8546
+ if((tag_name = src.tagName.toUpperCase()) && (
8547
+ tag_name=='INPUT' ||
8548
+ tag_name=='SELECT' ||
8549
+ tag_name=='OPTION' ||
8550
+ tag_name=='BUTTON' ||
8551
+ tag_name=='TEXTAREA')) return;
8552
+
8553
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
8554
+ var pos = this.element.cumulativeOffset();
8555
+ this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
8556
+
8557
+ Draggables.activate(this);
8558
+ Event.stop(event);
8559
+ }
8560
+ },
8561
+
8562
+ startDrag: function(event) {
8563
+ this.dragging = true;
8564
+ if(!this.delta)
8565
+ this.delta = this.currentDelta();
8566
+
8567
+ if(this.options.zindex) {
8568
+ this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
8569
+ this.element.style.zIndex = this.options.zindex;
8570
+ }
8571
+
8572
+ if(this.options.ghosting) {
8573
+ this._clone = this.element.cloneNode(true);
8574
+ this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
8575
+ if (!this._originallyAbsolute)
8576
+ Position.absolutize(this.element);
8577
+ this.element.parentNode.insertBefore(this._clone, this.element);
8578
+ }
8579
+
8580
+ if(this.options.scroll) {
8581
+ if (this.options.scroll == window) {
8582
+ var where = this._getWindowScroll(this.options.scroll);
8583
+ this.originalScrollLeft = where.left;
8584
+ this.originalScrollTop = where.top;
8585
+ } else {
8586
+ this.originalScrollLeft = this.options.scroll.scrollLeft;
8587
+ this.originalScrollTop = this.options.scroll.scrollTop;
8588
+ }
8589
+ }
8590
+
8591
+ Draggables.notify('onStart', this, event);
8592
+
8593
+ if(this.options.starteffect) this.options.starteffect(this.element);
8594
+ },
8595
+
8596
+ updateDrag: function(event, pointer) {
8597
+ if(!this.dragging) this.startDrag(event);
8598
+
8599
+ if(!this.options.quiet){
8600
+ Position.prepare();
8601
+ Droppables.show(pointer, this.element);
8602
+ }
8603
+
8604
+ Draggables.notify('onDrag', this, event);
8605
+
8606
+ this.draw(pointer);
8607
+ if(this.options.change) this.options.change(this);
8608
+
8609
+ if(this.options.scroll) {
8610
+ this.stopScrolling();
8611
+
8612
+ var p;
8613
+ if (this.options.scroll == window) {
8614
+ with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
8615
+ } else {
8616
+ p = Position.page(this.options.scroll).toArray();
8617
+ p[0] += this.options.scroll.scrollLeft + Position.deltaX;
8618
+ p[1] += this.options.scroll.scrollTop + Position.deltaY;
8619
+ p.push(p[0]+this.options.scroll.offsetWidth);
8620
+ p.push(p[1]+this.options.scroll.offsetHeight);
8621
+ }
8622
+ var speed = [0,0];
8623
+ if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
8624
+ if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
8625
+ if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
8626
+ if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
8627
+ this.startScrolling(speed);
8628
+ }
8629
+
8630
+ // fix AppleWebKit rendering
8631
+ if(Prototype.Browser.WebKit) window.scrollBy(0,0);
8632
+
8633
+ Event.stop(event);
8634
+ },
8635
+
8636
+ finishDrag: function(event, success) {
8637
+ this.dragging = false;
8638
+
8639
+ if(this.options.quiet){
8640
+ Position.prepare();
8641
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
8642
+ Droppables.show(pointer, this.element);
8643
+ }
8644
+
8645
+ if(this.options.ghosting) {
8646
+ if (!this._originallyAbsolute)
8647
+ Position.relativize(this.element);
8648
+ delete this._originallyAbsolute;
8649
+ Element.remove(this._clone);
8650
+ this._clone = null;
8651
+ }
8652
+
8653
+ var dropped = false;
8654
+ if(success) {
8655
+ dropped = Droppables.fire(event, this.element);
8656
+ if (!dropped) dropped = false;
8657
+ }
8658
+ if(dropped && this.options.onDropped) this.options.onDropped(this.element);
8659
+ Draggables.notify('onEnd', this, event);
8660
+
8661
+ var revert = this.options.revert;
8662
+ if(revert && Object.isFunction(revert)) revert = revert(this.element);
8663
+
8664
+ var d = this.currentDelta();
8665
+ if(revert && this.options.reverteffect) {
8666
+ if (dropped == 0 || revert != 'failure')
8667
+ this.options.reverteffect(this.element,
8668
+ d[1]-this.delta[1], d[0]-this.delta[0]);
8669
+ } else {
8670
+ this.delta = d;
8671
+ }
8672
+
8673
+ if(this.options.zindex)
8674
+ this.element.style.zIndex = this.originalZ;
8675
+
8676
+ if(this.options.endeffect)
8677
+ this.options.endeffect(this.element);
8678
+
8679
+ Draggables.deactivate(this);
8680
+ Droppables.reset();
8681
+ },
8682
+
8683
+ keyPress: function(event) {
8684
+ if(event.keyCode!=Event.KEY_ESC) return;
8685
+ this.finishDrag(event, false);
8686
+ Event.stop(event);
8687
+ },
8688
+
8689
+ endDrag: function(event) {
8690
+ if(!this.dragging) return;
8691
+ this.stopScrolling();
8692
+ this.finishDrag(event, true);
8693
+ Event.stop(event);
8694
+ },
8695
+
8696
+ draw: function(point) {
8697
+ var pos = this.element.cumulativeOffset();
8698
+ if(this.options.ghosting) {
8699
+ var r = Position.realOffset(this.element);
8700
+ pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
8701
+ }
8702
+
8703
+ var d = this.currentDelta();
8704
+ pos[0] -= d[0]; pos[1] -= d[1];
8705
+
8706
+ if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
8707
+ pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
8708
+ pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
8709
+ }
8710
+
8711
+ var p = [0,1].map(function(i){
8712
+ return (point[i]-pos[i]-this.offset[i])
8713
+ }.bind(this));
8714
+
8715
+ if(this.options.snap) {
8716
+ if(Object.isFunction(this.options.snap)) {
8717
+ p = this.options.snap(p[0],p[1],this);
8718
+ } else {
8719
+ if(Object.isArray(this.options.snap)) {
8720
+ p = p.map( function(v, i) {
8721
+ return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this));
8722
+ } else {
8723
+ p = p.map( function(v) {
8724
+ return (v/this.options.snap).round()*this.options.snap }.bind(this));
8725
+ }
8726
+ }}
8727
+
8728
+ var style = this.element.style;
8729
+ if((!this.options.constraint) || (this.options.constraint=='horizontal'))
8730
+ style.left = p[0] + "px";
8731
+ if((!this.options.constraint) || (this.options.constraint=='vertical'))
8732
+ style.top = p[1] + "px";
8733
+
8734
+ if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
8735
+ },
8736
+
8737
+ stopScrolling: function() {
8738
+ if(this.scrollInterval) {
8739
+ clearInterval(this.scrollInterval);
8740
+ this.scrollInterval = null;
8741
+ Draggables._lastScrollPointer = null;
8742
+ }
8743
+ },
8744
+
8745
+ startScrolling: function(speed) {
8746
+ if(!(speed[0] || speed[1])) return;
8747
+ this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
8748
+ this.lastScrolled = new Date();
8749
+ this.scrollInterval = setInterval(this.scroll.bind(this), 10);
8750
+ },
8751
+
8752
+ scroll: function() {
8753
+ var current = new Date();
8754
+ var delta = current - this.lastScrolled;
8755
+ this.lastScrolled = current;
8756
+ if(this.options.scroll == window) {
8757
+ with (this._getWindowScroll(this.options.scroll)) {
8758
+ if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
8759
+ var d = delta / 1000;
8760
+ this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
8761
+ }
8762
+ }
8763
+ } else {
8764
+ this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
8765
+ this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000;
8766
+ }
8767
+
8768
+ Position.prepare();
8769
+ Droppables.show(Draggables._lastPointer, this.element);
8770
+ Draggables.notify('onDrag', this);
8771
+ if (this._isScrollChild) {
8772
+ Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
8773
+ Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
8774
+ Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
8775
+ if (Draggables._lastScrollPointer[0] < 0)
8776
+ Draggables._lastScrollPointer[0] = 0;
8777
+ if (Draggables._lastScrollPointer[1] < 0)
8778
+ Draggables._lastScrollPointer[1] = 0;
8779
+ this.draw(Draggables._lastScrollPointer);
8780
+ }
8781
+
8782
+ if(this.options.change) this.options.change(this);
8783
+ },
8784
+
8785
+ _getWindowScroll: function(w) {
8786
+ var T, L, W, H;
8787
+ with (w.document) {
8788
+ if (w.document.documentElement && documentElement.scrollTop) {
8789
+ T = documentElement.scrollTop;
8790
+ L = documentElement.scrollLeft;
8791
+ } else if (w.document.body) {
8792
+ T = body.scrollTop;
8793
+ L = body.scrollLeft;
8794
+ }
8795
+ if (w.innerWidth) {
8796
+ W = w.innerWidth;
8797
+ H = w.innerHeight;
8798
+ } else if (w.document.documentElement && documentElement.clientWidth) {
8799
+ W = documentElement.clientWidth;
8800
+ H = documentElement.clientHeight;
8801
+ } else {
8802
+ W = body.offsetWidth;
8803
+ H = body.offsetHeight;
8804
+ }
8805
+ }
8806
+ return { top: T, left: L, width: W, height: H };
8807
+ }
8808
+ });
8809
+
8810
+ Draggable._dragging = { };
8811
+
8812
+ /*--------------------------------------------------------------------------*/
8813
+
8814
+ var SortableObserver = Class.create({
8815
+ initialize: function(element, observer) {
8816
+ this.element = $(element);
8817
+ this.observer = observer;
8818
+ this.lastValue = Sortable.serialize(this.element);
8819
+ },
8820
+
8821
+ onStart: function() {
8822
+ this.lastValue = Sortable.serialize(this.element);
8823
+ },
8824
+
8825
+ onEnd: function() {
8826
+ Sortable.unmark();
8827
+ if(this.lastValue != Sortable.serialize(this.element))
8828
+ this.observer(this.element)
8829
+ }
8830
+ });
8831
+
8832
+ var Sortable = {
8833
+ SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
8834
+
8835
+ sortables: { },
8836
+
8837
+ _findRootElement: function(element) {
8838
+ while (element.tagName.toUpperCase() != "BODY") {
8839
+ if(element.id && Sortable.sortables[element.id]) return element;
8840
+ element = element.parentNode;
8841
+ }
8842
+ },
8843
+
8844
+ options: function(element) {
8845
+ element = Sortable._findRootElement($(element));
8846
+ if(!element) return;
8847
+ return Sortable.sortables[element.id];
8848
+ },
8849
+
8850
+ destroy: function(element){
8851
+ element = $(element);
8852
+ var s = Sortable.sortables[element.id];
8853
+
8854
+ if(s) {
8855
+ Draggables.removeObserver(s.element);
8856
+ s.droppables.each(function(d){ Droppables.remove(d) });
8857
+ s.draggables.invoke('destroy');
8858
+
8859
+ delete Sortable.sortables[s.element.id];
8860
+ }
8861
+ },
8862
+
8863
+ create: function(element) {
8864
+ element = $(element);
8865
+ var options = Object.extend({
8866
+ element: element,
8867
+ tag: 'li', // assumes li children, override with tag: 'tagname'
8868
+ dropOnEmpty: false,
8869
+ tree: false,
8870
+ treeTag: 'ul',
8871
+ overlap: 'vertical', // one of 'vertical', 'horizontal'
8872
+ constraint: 'vertical', // one of 'vertical', 'horizontal', false
8873
+ containment: element, // also takes array of elements (or id's); or false
8874
+ handle: false, // or a CSS class
8875
+ only: false,
8876
+ delay: 0,
8877
+ hoverclass: null,
8878
+ ghosting: false,
8879
+ quiet: false,
8880
+ scroll: false,
8881
+ scrollSensitivity: 20,
8882
+ scrollSpeed: 15,
8883
+ format: this.SERIALIZE_RULE,
8884
+
8885
+ // these take arrays of elements or ids and can be
8886
+ // used for better initialization performance
8887
+ elements: false,
8888
+ handles: false,
8889
+
8890
+ onChange: Prototype.emptyFunction,
8891
+ onUpdate: Prototype.emptyFunction
8892
+ }, arguments[1] || { });
8893
+
8894
+ // clear any old sortable with same element
8895
+ this.destroy(element);
8896
+
8897
+ // build options for the draggables
8898
+ var options_for_draggable = {
8899
+ revert: true,
8900
+ quiet: options.quiet,
8901
+ scroll: options.scroll,
8902
+ scrollSpeed: options.scrollSpeed,
8903
+ scrollSensitivity: options.scrollSensitivity,
8904
+ delay: options.delay,
8905
+ ghosting: options.ghosting,
8906
+ constraint: options.constraint,
8907
+ handle: options.handle };
8908
+
8909
+ if(options.starteffect)
8910
+ options_for_draggable.starteffect = options.starteffect;
8911
+
8912
+ if(options.reverteffect)
8913
+ options_for_draggable.reverteffect = options.reverteffect;
8914
+ else
8915
+ if(options.ghosting) options_for_draggable.reverteffect = function(element) {
8916
+ element.style.top = 0;
8917
+ element.style.left = 0;
8918
+ };
8919
+
8920
+ if(options.endeffect)
8921
+ options_for_draggable.endeffect = options.endeffect;
8922
+
8923
+ if(options.zindex)
8924
+ options_for_draggable.zindex = options.zindex;
8925
+
8926
+ // build options for the droppables
8927
+ var options_for_droppable = {
8928
+ overlap: options.overlap,
8929
+ containment: options.containment,
8930
+ tree: options.tree,
8931
+ hoverclass: options.hoverclass,
8932
+ onHover: Sortable.onHover
8933
+ };
8934
+
8935
+ var options_for_tree = {
8936
+ onHover: Sortable.onEmptyHover,
8937
+ overlap: options.overlap,
8938
+ containment: options.containment,
8939
+ hoverclass: options.hoverclass
8940
+ };
8941
+
8942
+ // fix for gecko engine
8943
+ Element.cleanWhitespace(element);
8944
+
8945
+ options.draggables = [];
8946
+ options.droppables = [];
8947
+
8948
+ // drop on empty handling
8949
+ if(options.dropOnEmpty || options.tree) {
8950
+ Droppables.add(element, options_for_tree);
8951
+ options.droppables.push(element);
8952
+ }
8953
+
8954
+ (options.elements || this.findElements(element, options) || []).each( function(e,i) {
8955
+ var handle = options.handles ? $(options.handles[i]) :
8956
+ (options.handle ? $(e).select('.' + options.handle)[0] : e);
8957
+ options.draggables.push(
8958
+ new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
8959
+ Droppables.add(e, options_for_droppable);
8960
+ if(options.tree) e.treeNode = element;
8961
+ options.droppables.push(e);
8962
+ });
8963
+
8964
+ if(options.tree) {
8965
+ (Sortable.findTreeElements(element, options) || []).each( function(e) {
8966
+ Droppables.add(e, options_for_tree);
8967
+ e.treeNode = element;
8968
+ options.droppables.push(e);
8969
+ });
8970
+ }
8971
+
8972
+ // keep reference
8973
+ this.sortables[element.identify()] = options;
8974
+
8975
+ // for onupdate
8976
+ Draggables.addObserver(new SortableObserver(element, options.onUpdate));
8977
+
8978
+ },
8979
+
8980
+ // return all suitable-for-sortable elements in a guaranteed order
8981
+ findElements: function(element, options) {
8982
+ return Element.findChildren(
8983
+ element, options.only, options.tree ? true : false, options.tag);
8984
+ },
8985
+
8986
+ findTreeElements: function(element, options) {
8987
+ return Element.findChildren(
8988
+ element, options.only, options.tree ? true : false, options.treeTag);
8989
+ },
8990
+
8991
+ onHover: function(element, dropon, overlap) {
8992
+ if(Element.isParent(dropon, element)) return;
8993
+
8994
+ if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
8995
+ return;
8996
+ } else if(overlap>0.5) {
8997
+ Sortable.mark(dropon, 'before');
8998
+ if(dropon.previousSibling != element) {
8999
+ var oldParentNode = element.parentNode;
9000
+ element.style.visibility = "hidden"; // fix gecko rendering
9001
+ dropon.parentNode.insertBefore(element, dropon);
9002
+ if(dropon.parentNode!=oldParentNode)
9003
+ Sortable.options(oldParentNode).onChange(element);
9004
+ Sortable.options(dropon.parentNode).onChange(element);
9005
+ }
9006
+ } else {
9007
+ Sortable.mark(dropon, 'after');
9008
+ var nextElement = dropon.nextSibling || null;
9009
+ if(nextElement != element) {
9010
+ var oldParentNode = element.parentNode;
9011
+ element.style.visibility = "hidden"; // fix gecko rendering
9012
+ dropon.parentNode.insertBefore(element, nextElement);
9013
+ if(dropon.parentNode!=oldParentNode)
9014
+ Sortable.options(oldParentNode).onChange(element);
9015
+ Sortable.options(dropon.parentNode).onChange(element);
9016
+ }
9017
+ }
9018
+ },
9019
+
9020
+ onEmptyHover: function(element, dropon, overlap) {
9021
+ var oldParentNode = element.parentNode;
9022
+ var droponOptions = Sortable.options(dropon);
9023
+
9024
+ if(!Element.isParent(dropon, element)) {
9025
+ var index;
9026
+
9027
+ var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
9028
+ var child = null;
9029
+
9030
+ if(children) {
9031
+ var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
9032
+
9033
+ for (index = 0; index < children.length; index += 1) {
9034
+ if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
9035
+ offset -= Element.offsetSize (children[index], droponOptions.overlap);
9036
+ } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
9037
+ child = index + 1 < children.length ? children[index + 1] : null;
9038
+ break;
9039
+ } else {
9040
+ child = children[index];
9041
+ break;
9042
+ }
9043
+ }
9044
+ }
9045
+
9046
+ dropon.insertBefore(element, child);
9047
+
9048
+ Sortable.options(oldParentNode).onChange(element);
9049
+ droponOptions.onChange(element);
9050
+ }
9051
+ },
9052
+
9053
+ unmark: function() {
9054
+ if(Sortable._marker) Sortable._marker.hide();
9055
+ },
9056
+
9057
+ mark: function(dropon, position) {
9058
+ // mark on ghosting only
9059
+ var sortable = Sortable.options(dropon.parentNode);
9060
+ if(sortable && !sortable.ghosting) return;
9061
+
9062
+ if(!Sortable._marker) {
9063
+ Sortable._marker =
9064
+ ($('dropmarker') || Element.extend(document.createElement('DIV'))).
9065
+ hide().addClassName('dropmarker').setStyle({position:'absolute'});
9066
+ document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
9067
+ }
9068
+ var offsets = dropon.cumulativeOffset();
9069
+ Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
9070
+
9071
+ if(position=='after')
9072
+ if(sortable.overlap == 'horizontal')
9073
+ Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
9074
+ else
9075
+ Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
9076
+
9077
+ Sortable._marker.show();
9078
+ },
9079
+
9080
+ _tree: function(element, options, parent) {
9081
+ var children = Sortable.findElements(element, options) || [];
9082
+
9083
+ for (var i = 0; i < children.length; ++i) {
9084
+ var match = children[i].id.match(options.format);
9085
+
9086
+ if (!match) continue;
9087
+
9088
+ var child = {
9089
+ id: encodeURIComponent(match ? match[1] : null),
9090
+ element: element,
9091
+ parent: parent,
9092
+ children: [],
9093
+ position: parent.children.length,
9094
+ container: $(children[i]).down(options.treeTag)
9095
+ };
9096
+
9097
+ /* Get the element containing the children and recurse over it */
9098
+ if (child.container)
9099
+ this._tree(child.container, options, child);
9100
+
9101
+ parent.children.push (child);
9102
+ }
9103
+
9104
+ return parent;
9105
+ },
9106
+
9107
+ tree: function(element) {
9108
+ element = $(element);
9109
+ var sortableOptions = this.options(element);
9110
+ var options = Object.extend({
9111
+ tag: sortableOptions.tag,
9112
+ treeTag: sortableOptions.treeTag,
9113
+ only: sortableOptions.only,
9114
+ name: element.id,
9115
+ format: sortableOptions.format
9116
+ }, arguments[1] || { });
9117
+
9118
+ var root = {
9119
+ id: null,
9120
+ parent: null,
9121
+ children: [],
9122
+ container: element,
9123
+ position: 0
9124
+ };
9125
+
9126
+ return Sortable._tree(element, options, root);
9127
+ },
9128
+
9129
+ /* Construct a [i] index for a particular node */
9130
+ _constructIndex: function(node) {
9131
+ var index = '';
9132
+ do {
9133
+ if (node.id) index = '[' + node.position + ']' + index;
9134
+ } while ((node = node.parent) != null);
9135
+ return index;
9136
+ },
9137
+
9138
+ sequence: function(element) {
9139
+ element = $(element);
9140
+ var options = Object.extend(this.options(element), arguments[1] || { });
9141
+
9142
+ return $(this.findElements(element, options) || []).map( function(item) {
9143
+ return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
9144
+ });
9145
+ },
9146
+
9147
+ setSequence: function(element, new_sequence) {
9148
+ element = $(element);
9149
+ var options = Object.extend(this.options(element), arguments[2] || { });
9150
+
9151
+ var nodeMap = { };
9152
+ this.findElements(element, options).each( function(n) {
9153
+ if (n.id.match(options.format))
9154
+ nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
9155
+ n.parentNode.removeChild(n);
9156
+ });
9157
+
9158
+ new_sequence.each(function(ident) {
9159
+ var n = nodeMap[ident];
9160
+ if (n) {
9161
+ n[1].appendChild(n[0]);
9162
+ delete nodeMap[ident];
9163
+ }
9164
+ });
9165
+ },
9166
+
9167
+ serialize: function(element) {
9168
+ element = $(element);
9169
+ var options = Object.extend(Sortable.options(element), arguments[1] || { });
9170
+ var name = encodeURIComponent(
9171
+ (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
9172
+
9173
+ if (options.tree) {
9174
+ return Sortable.tree(element, arguments[1]).children.map( function (item) {
9175
+ return [name + Sortable._constructIndex(item) + "[id]=" +
9176
+ encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
9177
+ }).flatten().join('&');
9178
+ } else {
9179
+ return Sortable.sequence(element, arguments[1]).map( function(item) {
9180
+ return name + "[]=" + encodeURIComponent(item);
9181
+ }).join('&');
9182
+ }
9183
+ }
9184
+ };
9185
+
9186
+ // Returns true if child is contained within element
9187
+ Element.isParent = function(child, element) {
9188
+ if (!child.parentNode || child == element) return false;
9189
+ if (child.parentNode == element) return true;
9190
+ return Element.isParent(child.parentNode, element);
9191
+ };
9192
+
9193
+ Element.findChildren = function(element, only, recursive, tagName) {
9194
+ if(!element.hasChildNodes()) return null;
9195
+ tagName = tagName.toUpperCase();
9196
+ if(only) only = [only].flatten();
9197
+ var elements = [];
9198
+ $A(element.childNodes).each( function(e) {
9199
+ if(e.tagName && e.tagName.toUpperCase()==tagName &&
9200
+ (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
9201
+ elements.push(e);
9202
+ if(recursive) {
9203
+ var grandchildren = Element.findChildren(e, only, recursive, tagName);
9204
+ if(grandchildren) elements.push(grandchildren);
9205
+ }
9206
+ });
9207
+
9208
+ return (elements.length>0 ? elements.flatten() : []);
9209
+ };
9210
+
9211
+ Element.offsetSize = function (element, type) {
9212
+ return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
9213
+ };
9214
+ // script.aculo.us controls.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
9215
+
9216
+ // Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
9217
+ // (c) 2005-2008 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
9218
+ // (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
9219
+ // Contributors:
9220
+ // Richard Livsey
9221
+ // Rahul Bhargava
9222
+ // Rob Wills
9223
+ //
9224
+ // script.aculo.us is freely distributable under the terms of an MIT-style license.
9225
+ // For details, see the script.aculo.us web site: http://script.aculo.us/
9226
+
9227
+ // Autocompleter.Base handles all the autocompletion functionality
9228
+ // that's independent of the data source for autocompletion. This
9229
+ // includes drawing the autocompletion menu, observing keyboard
9230
+ // and mouse events, and similar.
9231
+ //
9232
+ // Specific autocompleters need to provide, at the very least,
9233
+ // a getUpdatedChoices function that will be invoked every time
9234
+ // the text inside the monitored textbox changes. This method
9235
+ // should get the text for which to provide autocompletion by
9236
+ // invoking this.getToken(), NOT by directly accessing
9237
+ // this.element.value. This is to allow incremental tokenized
9238
+ // autocompletion. Specific auto-completion logic (AJAX, etc)
9239
+ // belongs in getUpdatedChoices.
9240
+ //
9241
+ // Tokenized incremental autocompletion is enabled automatically
9242
+ // when an autocompleter is instantiated with the 'tokens' option
9243
+ // in the options parameter, e.g.:
9244
+ // new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
9245
+ // will incrementally autocomplete with a comma as the token.
9246
+ // Additionally, ',' in the above example can be replaced with
9247
+ // a token array, e.g. { tokens: [',', '\n'] } which
9248
+ // enables autocompletion on multiple tokens. This is most
9249
+ // useful when one of the tokens is \n (a newline), as it
9250
+ // allows smart autocompletion after linebreaks.
9251
+
9252
+ if(typeof Effect == 'undefined')
9253
+ throw("controls.js requires including script.aculo.us' effects.js library");
9254
+
9255
+ var Autocompleter = { };
9256
+ Autocompleter.Base = Class.create({
9257
+ baseInitialize: function(element, update, options) {
9258
+ element = $(element);
9259
+ this.element = element;
9260
+ this.update = $(update);
9261
+ this.hasFocus = false;
9262
+ this.changed = false;
9263
+ this.active = false;
9264
+ this.index = 0;
9265
+ this.entryCount = 0;
9266
+ this.oldElementValue = this.element.value;
9267
+
9268
+ if(this.setOptions)
9269
+ this.setOptions(options);
9270
+ else
9271
+ this.options = options || { };
9272
+
9273
+ this.options.paramName = this.options.paramName || this.element.name;
9274
+ this.options.tokens = this.options.tokens || [];
9275
+ this.options.frequency = this.options.frequency || 0.4;
9276
+ this.options.minChars = this.options.minChars || 1;
9277
+ this.options.onShow = this.options.onShow ||
9278
+ function(element, update){
9279
+ if(!update.style.position || update.style.position=='absolute') {
9280
+ update.style.position = 'absolute';
9281
+ Position.clone(element, update, {
9282
+ setHeight: false,
9283
+ offsetTop: element.offsetHeight
9284
+ });
9285
+ }
9286
+ Effect.Appear(update,{duration:0.15});
9287
+ };
9288
+ this.options.onHide = this.options.onHide ||
9289
+ function(element, update){ new Effect.Fade(update,{duration:0.15}) };
9290
+
9291
+ if(typeof(this.options.tokens) == 'string')
9292
+ this.options.tokens = new Array(this.options.tokens);
9293
+ // Force carriage returns as token delimiters anyway
9294
+ if (!this.options.tokens.include('\n'))
9295
+ this.options.tokens.push('\n');
9296
+
9297
+ this.observer = null;
9298
+
9299
+ this.element.setAttribute('autocomplete','off');
9300
+
9301
+ Element.hide(this.update);
9302
+
9303
+ Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
9304
+ Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
9305
+ },
9306
+
9307
+ show: function() {
9308
+ if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
9309
+ if(!this.iefix &&
9310
+ (Prototype.Browser.IE) &&
9311
+ (Element.getStyle(this.update, 'position')=='absolute')) {
9312
+ new Insertion.After(this.update,
9313
+ '<iframe id="' + this.update.id + '_iefix" '+
9314
+ 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
9315
+ 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
9316
+ this.iefix = $(this.update.id+'_iefix');
9317
+ }
9318
+ if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
9319
+ },
9320
+
9321
+ fixIEOverlapping: function() {
9322
+ Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
9323
+ this.iefix.style.zIndex = 1;
9324
+ this.update.style.zIndex = 2;
9325
+ Element.show(this.iefix);
9326
+ },
9327
+
9328
+ hide: function() {
9329
+ this.stopIndicator();
9330
+ if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
9331
+ if(this.iefix) Element.hide(this.iefix);
9332
+ },
9333
+
9334
+ startIndicator: function() {
9335
+ if(this.options.indicator) Element.show(this.options.indicator);
9336
+ },
9337
+
9338
+ stopIndicator: function() {
9339
+ if(this.options.indicator) Element.hide(this.options.indicator);
9340
+ },
9341
+
9342
+ onKeyPress: function(event) {
9343
+ if(this.active)
9344
+ switch(event.keyCode) {
9345
+ case Event.KEY_TAB:
9346
+ case Event.KEY_RETURN:
9347
+ this.selectEntry();
9348
+ Event.stop(event);
9349
+ case Event.KEY_ESC:
9350
+ this.hide();
9351
+ this.active = false;
9352
+ Event.stop(event);
9353
+ return;
9354
+ case Event.KEY_LEFT:
9355
+ case Event.KEY_RIGHT:
9356
+ return;
9357
+ case Event.KEY_UP:
9358
+ this.markPrevious();
9359
+ this.render();
9360
+ Event.stop(event);
9361
+ return;
9362
+ case Event.KEY_DOWN:
9363
+ this.markNext();
9364
+ this.render();
9365
+ Event.stop(event);
9366
+ return;
9367
+ }
9368
+ else
9369
+ if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
9370
+ (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
9371
+
9372
+ this.changed = true;
9373
+ this.hasFocus = true;
9374
+
9375
+ if(this.observer) clearTimeout(this.observer);
9376
+ this.observer =
9377
+ setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
9378
+ },
9379
+
9380
+ activate: function() {
9381
+ this.changed = false;
9382
+ this.hasFocus = true;
9383
+ this.getUpdatedChoices();
9384
+ },
9385
+
9386
+ onHover: function(event) {
9387
+ var element = Event.findElement(event, 'LI');
9388
+ if(this.index != element.autocompleteIndex)
9389
+ {
9390
+ this.index = element.autocompleteIndex;
9391
+ this.render();
9392
+ }
9393
+ Event.stop(event);
9394
+ },
9395
+
9396
+ onClick: function(event) {
9397
+ var element = Event.findElement(event, 'LI');
9398
+ this.index = element.autocompleteIndex;
9399
+ this.selectEntry();
9400
+ this.hide();
9401
+ },
9402
+
9403
+ onBlur: function(event) {
9404
+ // needed to make click events working
9405
+ setTimeout(this.hide.bind(this), 250);
9406
+ this.hasFocus = false;
9407
+ this.active = false;
9408
+ },
9409
+
9410
+ render: function() {
9411
+ if(this.entryCount > 0) {
9412
+ for (var i = 0; i < this.entryCount; i++)
9413
+ this.index==i ?
9414
+ Element.addClassName(this.getEntry(i),"selected") :
9415
+ Element.removeClassName(this.getEntry(i),"selected");
9416
+ if(this.hasFocus) {
9417
+ this.show();
9418
+ this.active = true;
9419
+ }
9420
+ } else {
9421
+ this.active = false;
9422
+ this.hide();
9423
+ }
9424
+ },
9425
+
9426
+ markPrevious: function() {
9427
+ if(this.index > 0) this.index--;
9428
+ else this.index = this.entryCount-1;
9429
+ //this.getEntry(this.index).scrollIntoView(true); useless
9430
+ },
9431
+
9432
+ markNext: function() {
9433
+ if(this.index < this.entryCount-1) this.index++;
9434
+ else this.index = 0;
9435
+ this.getEntry(this.index).scrollIntoView(false);
9436
+ },
9437
+
9438
+ getEntry: function(index) {
9439
+ return this.update.firstChild.childNodes[index];
9440
+ },
9441
+
9442
+ getCurrentEntry: function() {
9443
+ return this.getEntry(this.index);
9444
+ },
9445
+
9446
+ selectEntry: function() {
9447
+ this.active = false;
9448
+ this.updateElement(this.getCurrentEntry());
9449
+ },
9450
+
9451
+ updateElement: function(selectedElement) {
9452
+ if (this.options.updateElement) {
9453
+ this.options.updateElement(selectedElement);
9454
+ return;
9455
+ }
9456
+ var value = '';
9457
+ if (this.options.select) {
9458
+ var nodes = $(selectedElement).select('.' + this.options.select) || [];
9459
+ if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
9460
+ } else
9461
+ value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
9462
+
9463
+ var bounds = this.getTokenBounds();
9464
+ if (bounds[0] != -1) {
9465
+ var newValue = this.element.value.substr(0, bounds[0]);
9466
+ var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
9467
+ if (whitespace)
9468
+ newValue += whitespace[0];
9469
+ this.element.value = newValue + value + this.element.value.substr(bounds[1]);
9470
+ } else {
9471
+ this.element.value = value;
9472
+ }
9473
+ this.oldElementValue = this.element.value;
9474
+ this.element.focus();
9475
+
9476
+ if (this.options.afterUpdateElement)
9477
+ this.options.afterUpdateElement(this.element, selectedElement);
9478
+ },
9479
+
9480
+ updateChoices: function(choices) {
9481
+ if(!this.changed && this.hasFocus) {
9482
+ this.update.innerHTML = choices;
9483
+ Element.cleanWhitespace(this.update);
9484
+ Element.cleanWhitespace(this.update.down());
9485
+
9486
+ if(this.update.firstChild && this.update.down().childNodes) {
9487
+ this.entryCount =
9488
+ this.update.down().childNodes.length;
9489
+ for (var i = 0; i < this.entryCount; i++) {
9490
+ var entry = this.getEntry(i);
9491
+ entry.autocompleteIndex = i;
9492
+ this.addObservers(entry);
9493
+ }
9494
+ } else {
9495
+ this.entryCount = 0;
9496
+ }
9497
+
9498
+ this.stopIndicator();
9499
+ this.index = 0;
9500
+
9501
+ if(this.entryCount==1 && this.options.autoSelect) {
9502
+ this.selectEntry();
9503
+ this.hide();
9504
+ } else {
9505
+ this.render();
9506
+ }
9507
+ }
9508
+ },
9509
+
9510
+ addObservers: function(element) {
9511
+ Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
9512
+ Event.observe(element, "click", this.onClick.bindAsEventListener(this));
9513
+ },
9514
+
9515
+ onObserverEvent: function() {
9516
+ this.changed = false;
9517
+ this.tokenBounds = null;
9518
+ if(this.getToken().length>=this.options.minChars) {
9519
+ this.getUpdatedChoices();
9520
+ } else {
9521
+ this.active = false;
9522
+ this.hide();
9523
+ }
9524
+ this.oldElementValue = this.element.value;
9525
+ },
9526
+
9527
+ getToken: function() {
9528
+ var bounds = this.getTokenBounds();
9529
+ return this.element.value.substring(bounds[0], bounds[1]).strip();
9530
+ },
9531
+
9532
+ getTokenBounds: function() {
9533
+ if (null != this.tokenBounds) return this.tokenBounds;
9534
+ var value = this.element.value;
9535
+ if (value.strip().empty()) return [-1, 0];
9536
+ var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
9537
+ var offset = (diff == this.oldElementValue.length ? 1 : 0);
9538
+ var prevTokenPos = -1, nextTokenPos = value.length;
9539
+ var tp;
9540
+ for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
9541
+ tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
9542
+ if (tp > prevTokenPos) prevTokenPos = tp;
9543
+ tp = value.indexOf(this.options.tokens[index], diff + offset);
9544
+ if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
9545
+ }
9546
+ return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
9547
+ }
9548
+ });
9549
+
9550
+ Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
9551
+ var boundary = Math.min(newS.length, oldS.length);
9552
+ for (var index = 0; index < boundary; ++index)
9553
+ if (newS[index] != oldS[index])
9554
+ return index;
9555
+ return boundary;
9556
+ };
9557
+
9558
+ Ajax.Autocompleter = Class.create(Autocompleter.Base, {
9559
+ initialize: function(element, update, url, options) {
9560
+ this.baseInitialize(element, update, options);
9561
+ this.options.asynchronous = true;
9562
+ this.options.onComplete = this.onComplete.bind(this);
9563
+ this.options.defaultParams = this.options.parameters || null;
9564
+ this.url = url;
9565
+ },
9566
+
9567
+ getUpdatedChoices: function() {
9568
+ this.startIndicator();
9569
+
9570
+ var entry = encodeURIComponent(this.options.paramName) + '=' +
9571
+ encodeURIComponent(this.getToken());
9572
+
9573
+ this.options.parameters = this.options.callback ?
9574
+ this.options.callback(this.element, entry) : entry;
9575
+
9576
+ if(this.options.defaultParams)
9577
+ this.options.parameters += '&' + this.options.defaultParams;
9578
+
9579
+ new Ajax.Request(this.url, this.options);
9580
+ },
9581
+
9582
+ onComplete: function(request) {
9583
+ this.updateChoices(request.responseText);
9584
+ }
9585
+ });
9586
+
9587
+ // The local array autocompleter. Used when you'd prefer to
9588
+ // inject an array of autocompletion options into the page, rather
9589
+ // than sending out Ajax queries, which can be quite slow sometimes.
9590
+ //
9591
+ // The constructor takes four parameters. The first two are, as usual,
9592
+ // the id of the monitored textbox, and id of the autocompletion menu.
9593
+ // The third is the array you want to autocomplete from, and the fourth
9594
+ // is the options block.
9595
+ //
9596
+ // Extra local autocompletion options:
9597
+ // - choices - How many autocompletion choices to offer
9598
+ //
9599
+ // - partialSearch - If false, the autocompleter will match entered
9600
+ // text only at the beginning of strings in the
9601
+ // autocomplete array. Defaults to true, which will
9602
+ // match text at the beginning of any *word* in the
9603
+ // strings in the autocomplete array. If you want to
9604
+ // search anywhere in the string, additionally set
9605
+ // the option fullSearch to true (default: off).
9606
+ //
9607
+ // - fullSsearch - Search anywhere in autocomplete array strings.
9608
+ //
9609
+ // - partialChars - How many characters to enter before triggering
9610
+ // a partial match (unlike minChars, which defines
9611
+ // how many characters are required to do any match
9612
+ // at all). Defaults to 2.
9613
+ //
9614
+ // - ignoreCase - Whether to ignore case when autocompleting.
9615
+ // Defaults to true.
9616
+ //
9617
+ // It's possible to pass in a custom function as the 'selector'
9618
+ // option, if you prefer to write your own autocompletion logic.
9619
+ // In that case, the other options above will not apply unless
9620
+ // you support them.
9621
+
9622
+ Autocompleter.Local = Class.create(Autocompleter.Base, {
9623
+ initialize: function(element, update, array, options) {
9624
+ this.baseInitialize(element, update, options);
9625
+ this.options.array = array;
9626
+ },
9627
+
9628
+ getUpdatedChoices: function() {
9629
+ this.updateChoices(this.options.selector(this));
9630
+ },
9631
+
9632
+ setOptions: function(options) {
9633
+ this.options = Object.extend({
9634
+ choices: 10,
9635
+ partialSearch: true,
9636
+ partialChars: 2,
9637
+ ignoreCase: true,
9638
+ fullSearch: false,
9639
+ selector: function(instance) {
9640
+ var ret = []; // Beginning matches
9641
+ var partial = []; // Inside matches
9642
+ var entry = instance.getToken();
9643
+ var count = 0;
9644
+
9645
+ for (var i = 0; i < instance.options.array.length &&
9646
+ ret.length < instance.options.choices ; i++) {
9647
+
9648
+ var elem = instance.options.array[i];
9649
+ var foundPos = instance.options.ignoreCase ?
9650
+ elem.toLowerCase().indexOf(entry.toLowerCase()) :
9651
+ elem.indexOf(entry);
9652
+
9653
+ while (foundPos != -1) {
9654
+ if (foundPos == 0 && elem.length != entry.length) {
9655
+ ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
9656
+ elem.substr(entry.length) + "</li>");
9657
+ break;
9658
+ } else if (entry.length >= instance.options.partialChars &&
9659
+ instance.options.partialSearch && foundPos != -1) {
9660
+ if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
9661
+ partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
9662
+ elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
9663
+ foundPos + entry.length) + "</li>");
9664
+ break;
9665
+ }
9666
+ }
9667
+
9668
+ foundPos = instance.options.ignoreCase ?
9669
+ elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
9670
+ elem.indexOf(entry, foundPos + 1);
9671
+
9672
+ }
9673
+ }
9674
+ if (partial.length)
9675
+ ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
9676
+ return "<ul>" + ret.join('') + "</ul>";
9677
+ }
9678
+ }, options || { });
9679
+ }
9680
+ });
9681
+
9682
+ // AJAX in-place editor and collection editor
9683
+ // Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).
9684
+
9685
+ // Use this if you notice weird scrolling problems on some browsers,
9686
+ // the DOM might be a bit confused when this gets called so do this
9687
+ // waits 1 ms (with setTimeout) until it does the activation
9688
+ Field.scrollFreeActivate = function(field) {
9689
+ setTimeout(function() {
9690
+ Field.activate(field);
9691
+ }, 1);
9692
+ };
9693
+
9694
+ Ajax.InPlaceEditor = Class.create({
9695
+ initialize: function(element, url, options) {
9696
+ this.url = url;
9697
+ this.element = element = $(element);
9698
+ this.prepareOptions();
9699
+ this._controls = { };
9700
+ arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
9701
+ Object.extend(this.options, options || { });
9702
+ if (!this.options.formId && this.element.id) {
9703
+ this.options.formId = this.element.id + '-inplaceeditor';
9704
+ if ($(this.options.formId))
9705
+ this.options.formId = '';
9706
+ }
9707
+ if (this.options.externalControl)
9708
+ this.options.externalControl = $(this.options.externalControl);
9709
+ if (!this.options.externalControl)
9710
+ this.options.externalControlOnly = false;
9711
+ this._originalBackground = this.element.getStyle('background-color') || 'transparent';
9712
+ this.element.title = this.options.clickToEditText;
9713
+ this._boundCancelHandler = this.handleFormCancellation.bind(this);
9714
+ this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
9715
+ this._boundFailureHandler = this.handleAJAXFailure.bind(this);
9716
+ this._boundSubmitHandler = this.handleFormSubmission.bind(this);
9717
+ this._boundWrapperHandler = this.wrapUp.bind(this);
9718
+ this.registerListeners();
9719
+ },
9720
+ checkForEscapeOrReturn: function(e) {
9721
+ if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
9722
+ if (Event.KEY_ESC == e.keyCode)
9723
+ this.handleFormCancellation(e);
9724
+ else if (Event.KEY_RETURN == e.keyCode)
9725
+ this.handleFormSubmission(e);
9726
+ },
9727
+ createControl: function(mode, handler, extraClasses) {
9728
+ var control = this.options[mode + 'Control'];
9729
+ var text = this.options[mode + 'Text'];
9730
+ if ('button' == control) {
9731
+ var btn = document.createElement('input');
9732
+ btn.type = 'submit';
9733
+ btn.value = text;
9734
+ btn.className = 'editor_' + mode + '_button';
9735
+ if ('cancel' == mode)
9736
+ btn.onclick = this._boundCancelHandler;
9737
+ this._form.appendChild(btn);
9738
+ this._controls[mode] = btn;
9739
+ } else if ('link' == control) {
9740
+ var link = document.createElement('a');
9741
+ link.href = '#';
9742
+ link.appendChild(document.createTextNode(text));
9743
+ link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
9744
+ link.className = 'editor_' + mode + '_link';
9745
+ if (extraClasses)
9746
+ link.className += ' ' + extraClasses;
9747
+ this._form.appendChild(link);
9748
+ this._controls[mode] = link;
9749
+ }
9750
+ },
9751
+ createEditField: function() {
9752
+ var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
9753
+ var fld;
9754
+ if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
9755
+ fld = document.createElement('input');
9756
+ fld.type = 'text';
9757
+ var size = this.options.size || this.options.cols || 0;
9758
+ if (0 < size) fld.size = size;
9759
+ } else {
9760
+ fld = document.createElement('textarea');
9761
+ fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
9762
+ fld.cols = this.options.cols || 40;
9763
+ }
9764
+ fld.name = this.options.paramName;
9765
+ fld.value = text; // No HTML breaks conversion anymore
9766
+ fld.className = 'editor_field';
9767
+ if (this.options.submitOnBlur)
9768
+ fld.onblur = this._boundSubmitHandler;
9769
+ this._controls.editor = fld;
9770
+ if (this.options.loadTextURL)
9771
+ this.loadExternalText();
9772
+ this._form.appendChild(this._controls.editor);
9773
+ },
9774
+ createForm: function() {
9775
+ var ipe = this;
9776
+ function addText(mode, condition) {
9777
+ var text = ipe.options['text' + mode + 'Controls'];
9778
+ if (!text || condition === false) return;
9779
+ ipe._form.appendChild(document.createTextNode(text));
9780
+ };
9781
+ this._form = $(document.createElement('form'));
9782
+ this._form.id = this.options.formId;
9783
+ this._form.addClassName(this.options.formClassName);
9784
+ this._form.onsubmit = this._boundSubmitHandler;
9785
+ this.createEditField();
9786
+ if ('textarea' == this._controls.editor.tagName.toLowerCase())
9787
+ this._form.appendChild(document.createElement('br'));
9788
+ if (this.options.onFormCustomization)
9789
+ this.options.onFormCustomization(this, this._form);
9790
+ addText('Before', this.options.okControl || this.options.cancelControl);
9791
+ this.createControl('ok', this._boundSubmitHandler);
9792
+ addText('Between', this.options.okControl && this.options.cancelControl);
9793
+ this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
9794
+ addText('After', this.options.okControl || this.options.cancelControl);
9795
+ },
9796
+ destroy: function() {
9797
+ if (this._oldInnerHTML)
9798
+ this.element.innerHTML = this._oldInnerHTML;
9799
+ this.leaveEditMode();
9800
+ this.unregisterListeners();
9801
+ },
9802
+ enterEditMode: function(e) {
9803
+ if (this._saving || this._editing) return;
9804
+ this._editing = true;
9805
+ this.triggerCallback('onEnterEditMode');
9806
+ if (this.options.externalControl)
9807
+ this.options.externalControl.hide();
9808
+ this.element.hide();
9809
+ this.createForm();
9810
+ this.element.parentNode.insertBefore(this._form, this.element);
9811
+ if (!this.options.loadTextURL)
9812
+ this.postProcessEditField();
9813
+ if (e) Event.stop(e);
9814
+ },
9815
+ enterHover: function(e) {
9816
+ if (this.options.hoverClassName)
9817
+ this.element.addClassName(this.options.hoverClassName);
9818
+ if (this._saving) return;
9819
+ this.triggerCallback('onEnterHover');
9820
+ },
9821
+ getText: function() {
9822
+ return this.element.innerHTML.unescapeHTML();
9823
+ },
9824
+ handleAJAXFailure: function(transport) {
9825
+ this.triggerCallback('onFailure', transport);
9826
+ if (this._oldInnerHTML) {
9827
+ this.element.innerHTML = this._oldInnerHTML;
9828
+ this._oldInnerHTML = null;
9829
+ }
9830
+ },
9831
+ handleFormCancellation: function(e) {
9832
+ this.wrapUp();
9833
+ if (e) Event.stop(e);
9834
+ },
9835
+ handleFormSubmission: function(e) {
9836
+ var form = this._form;
9837
+ var value = $F(this._controls.editor);
9838
+ this.prepareSubmission();
9839
+ var params = this.options.callback(form, value) || '';
9840
+ if (Object.isString(params))
9841
+ params = params.toQueryParams();
9842
+ params.editorId = this.element.id;
9843
+ if (this.options.htmlResponse) {
9844
+ var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
9845
+ Object.extend(options, {
9846
+ parameters: params,
9847
+ onComplete: this._boundWrapperHandler,
9848
+ onFailure: this._boundFailureHandler
9849
+ });
9850
+ new Ajax.Updater({ success: this.element }, this.url, options);
9851
+ } else {
9852
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
9853
+ Object.extend(options, {
9854
+ parameters: params,
9855
+ onComplete: this._boundWrapperHandler,
9856
+ onFailure: this._boundFailureHandler
9857
+ });
9858
+ new Ajax.Request(this.url, options);
9859
+ }
9860
+ if (e) Event.stop(e);
9861
+ },
9862
+ leaveEditMode: function() {
9863
+ this.element.removeClassName(this.options.savingClassName);
9864
+ this.removeForm();
9865
+ this.leaveHover();
9866
+ this.element.style.backgroundColor = this._originalBackground;
9867
+ this.element.show();
9868
+ if (this.options.externalControl)
9869
+ this.options.externalControl.show();
9870
+ this._saving = false;
9871
+ this._editing = false;
9872
+ this._oldInnerHTML = null;
9873
+ this.triggerCallback('onLeaveEditMode');
9874
+ },
9875
+ leaveHover: function(e) {
9876
+ if (this.options.hoverClassName)
9877
+ this.element.removeClassName(this.options.hoverClassName);
9878
+ if (this._saving) return;
9879
+ this.triggerCallback('onLeaveHover');
9880
+ },
9881
+ loadExternalText: function() {
9882
+ this._form.addClassName(this.options.loadingClassName);
9883
+ this._controls.editor.disabled = true;
9884
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
9885
+ Object.extend(options, {
9886
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
9887
+ onComplete: Prototype.emptyFunction,
9888
+ onSuccess: function(transport) {
9889
+ this._form.removeClassName(this.options.loadingClassName);
9890
+ var text = transport.responseText;
9891
+ if (this.options.stripLoadedTextTags)
9892
+ text = text.stripTags();
9893
+ this._controls.editor.value = text;
9894
+ this._controls.editor.disabled = false;
9895
+ this.postProcessEditField();
9896
+ }.bind(this),
9897
+ onFailure: this._boundFailureHandler
9898
+ });
9899
+ new Ajax.Request(this.options.loadTextURL, options);
9900
+ },
9901
+ postProcessEditField: function() {
9902
+ var fpc = this.options.fieldPostCreation;
9903
+ if (fpc)
9904
+ $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
9905
+ },
9906
+ prepareOptions: function() {
9907
+ this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
9908
+ Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
9909
+ [this._extraDefaultOptions].flatten().compact().each(function(defs) {
9910
+ Object.extend(this.options, defs);
9911
+ }.bind(this));
9912
+ },
9913
+ prepareSubmission: function() {
9914
+ this._saving = true;
9915
+ this.removeForm();
9916
+ this.leaveHover();
9917
+ this.showSaving();
9918
+ },
9919
+ registerListeners: function() {
9920
+ this._listeners = { };
9921
+ var listener;
9922
+ $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
9923
+ listener = this[pair.value].bind(this);
9924
+ this._listeners[pair.key] = listener;
9925
+ if (!this.options.externalControlOnly)
9926
+ this.element.observe(pair.key, listener);
9927
+ if (this.options.externalControl)
9928
+ this.options.externalControl.observe(pair.key, listener);
9929
+ }.bind(this));
9930
+ },
9931
+ removeForm: function() {
9932
+ if (!this._form) return;
9933
+ this._form.remove();
9934
+ this._form = null;
9935
+ this._controls = { };
9936
+ },
9937
+ showSaving: function() {
9938
+ this._oldInnerHTML = this.element.innerHTML;
9939
+ this.element.innerHTML = this.options.savingText;
9940
+ this.element.addClassName(this.options.savingClassName);
9941
+ this.element.style.backgroundColor = this._originalBackground;
9942
+ this.element.show();
9943
+ },
9944
+ triggerCallback: function(cbName, arg) {
9945
+ if ('function' == typeof this.options[cbName]) {
9946
+ this.options[cbName](this, arg);
9947
+ }
9948
+ },
9949
+ unregisterListeners: function() {
9950
+ $H(this._listeners).each(function(pair) {
9951
+ if (!this.options.externalControlOnly)
9952
+ this.element.stopObserving(pair.key, pair.value);
9953
+ if (this.options.externalControl)
9954
+ this.options.externalControl.stopObserving(pair.key, pair.value);
9955
+ }.bind(this));
9956
+ },
9957
+ wrapUp: function(transport) {
9958
+ this.leaveEditMode();
9959
+ // Can't use triggerCallback due to backward compatibility: requires
9960
+ // binding + direct element
9961
+ this._boundComplete(transport, this.element);
9962
+ }
9963
+ });
9964
+
9965
+ Object.extend(Ajax.InPlaceEditor.prototype, {
9966
+ dispose: Ajax.InPlaceEditor.prototype.destroy
9967
+ });
9968
+
9969
+ Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
9970
+ initialize: function($super, element, url, options) {
9971
+ this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
9972
+ $super(element, url, options);
9973
+ },
9974
+
9975
+ createEditField: function() {
9976
+ var list = document.createElement('select');
9977
+ list.name = this.options.paramName;
9978
+ list.size = 1;
9979
+ this._controls.editor = list;
9980
+ this._collection = this.options.collection || [];
9981
+ if (this.options.loadCollectionURL)
9982
+ this.loadCollection();
9983
+ else
9984
+ this.checkForExternalText();
9985
+ this._form.appendChild(this._controls.editor);
9986
+ },
9987
+
9988
+ loadCollection: function() {
9989
+ this._form.addClassName(this.options.loadingClassName);
9990
+ this.showLoadingText(this.options.loadingCollectionText);
9991
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
9992
+ Object.extend(options, {
9993
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
9994
+ onComplete: Prototype.emptyFunction,
9995
+ onSuccess: function(transport) {
9996
+ var js = transport.responseText.strip();
9997
+ if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
9998
+ throw('Server returned an invalid collection representation.');
9999
+ this._collection = eval(js);
10000
+ this.checkForExternalText();
10001
+ }.bind(this),
10002
+ onFailure: this.onFailure
10003
+ });
10004
+ new Ajax.Request(this.options.loadCollectionURL, options);
10005
+ },
10006
+
10007
+ showLoadingText: function(text) {
10008
+ this._controls.editor.disabled = true;
10009
+ var tempOption = this._controls.editor.firstChild;
10010
+ if (!tempOption) {
10011
+ tempOption = document.createElement('option');
10012
+ tempOption.value = '';
10013
+ this._controls.editor.appendChild(tempOption);
10014
+ tempOption.selected = true;
10015
+ }
10016
+ tempOption.update((text || '').stripScripts().stripTags());
10017
+ },
10018
+
10019
+ checkForExternalText: function() {
10020
+ this._text = this.getText();
10021
+ if (this.options.loadTextURL)
10022
+ this.loadExternalText();
10023
+ else
10024
+ this.buildOptionList();
10025
+ },
10026
+
10027
+ loadExternalText: function() {
10028
+ this.showLoadingText(this.options.loadingText);
10029
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
10030
+ Object.extend(options, {
10031
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
10032
+ onComplete: Prototype.emptyFunction,
10033
+ onSuccess: function(transport) {
10034
+ this._text = transport.responseText.strip();
10035
+ this.buildOptionList();
10036
+ }.bind(this),
10037
+ onFailure: this.onFailure
10038
+ });
10039
+ new Ajax.Request(this.options.loadTextURL, options);
10040
+ },
10041
+
10042
+ buildOptionList: function() {
10043
+ this._form.removeClassName(this.options.loadingClassName);
10044
+ this._collection = this._collection.map(function(entry) {
10045
+ return 2 === entry.length ? entry : [entry, entry].flatten();
10046
+ });
10047
+ var marker = ('value' in this.options) ? this.options.value : this._text;
10048
+ var textFound = this._collection.any(function(entry) {
10049
+ return entry[0] == marker;
10050
+ }.bind(this));
10051
+ this._controls.editor.update('');
10052
+ var option;
10053
+ this._collection.each(function(entry, index) {
10054
+ option = document.createElement('option');
10055
+ option.value = entry[0];
10056
+ option.selected = textFound ? entry[0] == marker : 0 == index;
10057
+ option.appendChild(document.createTextNode(entry[1]));
10058
+ this._controls.editor.appendChild(option);
10059
+ }.bind(this));
10060
+ this._controls.editor.disabled = false;
10061
+ Field.scrollFreeActivate(this._controls.editor);
10062
+ }
10063
+ });
10064
+
10065
+ //**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
10066
+ //**** This only exists for a while, in order to let ****
10067
+ //**** users adapt to the new API. Read up on the new ****
10068
+ //**** API and convert your code to it ASAP! ****
10069
+
10070
+ Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
10071
+ if (!options) return;
10072
+ function fallback(name, expr) {
10073
+ if (name in options || expr === undefined) return;
10074
+ options[name] = expr;
10075
+ };
10076
+ fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
10077
+ options.cancelLink == options.cancelButton == false ? false : undefined)));
10078
+ fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
10079
+ options.okLink == options.okButton == false ? false : undefined)));
10080
+ fallback('highlightColor', options.highlightcolor);
10081
+ fallback('highlightEndColor', options.highlightendcolor);
10082
+ };
10083
+
10084
+ Object.extend(Ajax.InPlaceEditor, {
10085
+ DefaultOptions: {
10086
+ ajaxOptions: { },
10087
+ autoRows: 3, // Use when multi-line w/ rows == 1
10088
+ cancelControl: 'link', // 'link'|'button'|false
10089
+ cancelText: 'cancel',
10090
+ clickToEditText: 'Click to edit',
10091
+ externalControl: null, // id|elt
10092
+ externalControlOnly: false,
10093
+ fieldPostCreation: 'activate', // 'activate'|'focus'|false
10094
+ formClassName: 'inplaceeditor-form',
10095
+ formId: null, // id|elt
10096
+ highlightColor: '#ffff99',
10097
+ highlightEndColor: '#ffffff',
10098
+ hoverClassName: '',
10099
+ htmlResponse: true,
10100
+ loadingClassName: 'inplaceeditor-loading',
10101
+ loadingText: 'Loading...',
10102
+ okControl: 'button', // 'link'|'button'|false
10103
+ okText: 'ok',
10104
+ paramName: 'value',
10105
+ rows: 1, // If 1 and multi-line, uses autoRows
10106
+ savingClassName: 'inplaceeditor-saving',
10107
+ savingText: 'Saving...',
10108
+ size: 0,
10109
+ stripLoadedTextTags: false,
10110
+ submitOnBlur: false,
10111
+ textAfterControls: '',
10112
+ textBeforeControls: '',
10113
+ textBetweenControls: ''
10114
+ },
10115
+ DefaultCallbacks: {
10116
+ callback: function(form) {
10117
+ return Form.serialize(form);
10118
+ },
10119
+ onComplete: function(transport, element) {
10120
+ // For backward compatibility, this one is bound to the IPE, and passes
10121
+ // the element directly. It was too often customized, so we don't break it.
10122
+ new Effect.Highlight(element, {
10123
+ startcolor: this.options.highlightColor, keepBackgroundImage: true });
10124
+ },
10125
+ onEnterEditMode: null,
10126
+ onEnterHover: function(ipe) {
10127
+ ipe.element.style.backgroundColor = ipe.options.highlightColor;
10128
+ if (ipe._effect)
10129
+ ipe._effect.cancel();
10130
+ },
10131
+ onFailure: function(transport, ipe) {
10132
+ alert('Error communication with the server: ' + transport.responseText.stripTags());
10133
+ },
10134
+ onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
10135
+ onLeaveEditMode: null,
10136
+ onLeaveHover: function(ipe) {
10137
+ ipe._effect = new Effect.Highlight(ipe.element, {
10138
+ startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
10139
+ restorecolor: ipe._originalBackground, keepBackgroundImage: true
10140
+ });
10141
+ }
10142
+ },
10143
+ Listeners: {
10144
+ click: 'enterEditMode',
10145
+ keydown: 'checkForEscapeOrReturn',
10146
+ mouseover: 'enterHover',
10147
+ mouseout: 'leaveHover'
10148
+ }
10149
+ });
10150
+
10151
+ Ajax.InPlaceCollectionEditor.DefaultOptions = {
10152
+ loadingCollectionText: 'Loading options...'
10153
+ };
10154
+
10155
+ // Delayed observer, like Form.Element.Observer,
10156
+ // but waits for delay after last key input
10157
+ // Ideal for live-search fields
10158
+
10159
+ Form.Element.DelayedObserver = Class.create({
10160
+ initialize: function(element, delay, callback) {
10161
+ this.delay = delay || 0.5;
10162
+ this.element = $(element);
10163
+ this.callback = callback;
10164
+ this.timer = null;
10165
+ this.lastValue = $F(this.element);
10166
+ Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
10167
+ },
10168
+ delayedListener: function(event) {
10169
+ if(this.lastValue == $F(this.element)) return;
10170
+ if(this.timer) clearTimeout(this.timer);
10171
+ this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
10172
+ this.lastValue = $F(this.element);
10173
+ },
10174
+ onTimerEvent: function() {
10175
+ this.timer = null;
10176
+ this.callback(this.element, $F(this.element));
10177
+ }
10178
+ });
10179
+ // script.aculo.us slider.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
10180
+
10181
+ // Copyright (c) 2005-2008 Marty Haught, Thomas Fuchs
10182
+ //
10183
+ // script.aculo.us is freely distributable under the terms of an MIT-style license.
10184
+ // For details, see the script.aculo.us web site: http://script.aculo.us/
10185
+
10186
+ if (!Control) var Control = { };
10187
+
10188
+ // options:
10189
+ // axis: 'vertical', or 'horizontal' (default)
10190
+ //
10191
+ // callbacks:
10192
+ // onChange(value)
10193
+ // onSlide(value)
10194
+ Control.Slider = Class.create({
10195
+ initialize: function(handle, track, options) {
10196
+ var slider = this;
10197
+
10198
+ if (Object.isArray(handle)) {
10199
+ this.handles = handle.collect( function(e) { return $(e) });
10200
+ } else {
10201
+ this.handles = [$(handle)];
10202
+ }
10203
+
10204
+ this.track = $(track);
10205
+ this.options = options || { };
10206
+
10207
+ this.axis = this.options.axis || 'horizontal';
10208
+ this.increment = this.options.increment || 1;
10209
+ this.step = parseInt(this.options.step || '1');
10210
+ this.range = this.options.range || $R(0,1);
10211
+
10212
+ this.value = 0; // assure backwards compat
10213
+ this.values = this.handles.map( function() { return 0 });
10214
+ this.spans = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
10215
+ this.options.startSpan = $(this.options.startSpan || null);
10216
+ this.options.endSpan = $(this.options.endSpan || null);
10217
+
10218
+ this.restricted = this.options.restricted || false;
10219
+
10220
+ this.maximum = this.options.maximum || this.range.end;
10221
+ this.minimum = this.options.minimum || this.range.start;
10222
+
10223
+ // Will be used to align the handle onto the track, if necessary
10224
+ this.alignX = parseInt(this.options.alignX || '0');
10225
+ this.alignY = parseInt(this.options.alignY || '0');
10226
+
10227
+ this.trackLength = this.maximumOffset() - this.minimumOffset();
10228
+
10229
+ this.handleLength = this.isVertical() ?
10230
+ (this.handles[0].offsetHeight != 0 ?
10231
+ this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
10232
+ (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
10233
+ this.handles[0].style.width.replace(/px$/,""));
10234
+
10235
+ this.active = false;
10236
+ this.dragging = false;
10237
+ this.disabled = false;
10238
+
10239
+ if (this.options.disabled) this.setDisabled();
10240
+
10241
+ // Allowed values array
10242
+ this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
10243
+ if (this.allowedValues) {
10244
+ this.minimum = this.allowedValues.min();
10245
+ this.maximum = this.allowedValues.max();
10246
+ }
10247
+
10248
+ this.eventMouseDown = this.startDrag.bindAsEventListener(this);
10249
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
10250
+ this.eventMouseMove = this.update.bindAsEventListener(this);
10251
+
10252
+ // Initialize handles in reverse (make sure first handle is active)
10253
+ this.handles.each( function(h,i) {
10254
+ i = slider.handles.length-1-i;
10255
+ slider.setValue(parseFloat(
10256
+ (Object.isArray(slider.options.sliderValue) ?
10257
+ slider.options.sliderValue[i] : slider.options.sliderValue) ||
10258
+ slider.range.start), i);
10259
+ h.makePositioned().observe("mousedown", slider.eventMouseDown);
10260
+ });
10261
+
10262
+ this.track.observe("mousedown", this.eventMouseDown);
10263
+ document.observe("mouseup", this.eventMouseUp);
10264
+ $(this.track.parentNode.parentNode).observe("mousemove", this.eventMouseMove);
10265
+
10266
+
10267
+ this.initialized = true;
10268
+ },
10269
+ dispose: function() {
10270
+ var slider = this;
10271
+ Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
10272
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
10273
+ Event.stopObserving(this.track.parentNode.parentNode, "mousemove", this.eventMouseMove);
10274
+ this.handles.each( function(h) {
10275
+ Event.stopObserving(h, "mousedown", slider.eventMouseDown);
10276
+ });
10277
+ },
10278
+ setDisabled: function(){
10279
+ this.disabled = true;
10280
+ this.track.parentNode.className = this.track.parentNode.className + ' disabled';
10281
+ },
10282
+ setEnabled: function(){
10283
+ this.disabled = false;
10284
+ },
10285
+ getNearestValue: function(value){
10286
+ if (this.allowedValues){
10287
+ if (value >= this.allowedValues.max()) return(this.allowedValues.max());
10288
+ if (value <= this.allowedValues.min()) return(this.allowedValues.min());
10289
+
10290
+ var offset = Math.abs(this.allowedValues[0] - value);
10291
+ var newValue = this.allowedValues[0];
10292
+ this.allowedValues.each( function(v) {
10293
+ var currentOffset = Math.abs(v - value);
10294
+ if (currentOffset <= offset){
10295
+ newValue = v;
10296
+ offset = currentOffset;
10297
+ }
10298
+ });
10299
+ return newValue;
10300
+ }
10301
+ if (value > this.range.end) return this.range.end;
10302
+ if (value < this.range.start) return this.range.start;
10303
+ return value;
10304
+ },
10305
+ setValue: function(sliderValue, handleIdx){
10306
+ if (!this.active) {
10307
+ this.activeHandleIdx = handleIdx || 0;
10308
+ this.activeHandle = this.handles[this.activeHandleIdx];
10309
+ this.updateStyles();
10310
+ }
10311
+ handleIdx = handleIdx || this.activeHandleIdx || 0;
10312
+ if (this.initialized && this.restricted) {
10313
+ if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
10314
+ sliderValue = this.values[handleIdx-1];
10315
+ if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
10316
+ sliderValue = this.values[handleIdx+1];
10317
+ }
10318
+ sliderValue = this.getNearestValue(sliderValue);
10319
+ this.values[handleIdx] = sliderValue;
10320
+ this.value = this.values[0]; // assure backwards compat
10321
+
10322
+ this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
10323
+ this.translateToPx(sliderValue);
10324
+
10325
+ this.drawSpans();
10326
+ if (!this.dragging || !this.event) this.updateFinished();
10327
+ },
10328
+ setValueBy: function(delta, handleIdx) {
10329
+ this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
10330
+ handleIdx || this.activeHandleIdx || 0);
10331
+ },
10332
+ translateToPx: function(value) {
10333
+ return Math.round(
10334
+ ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
10335
+ (value - this.range.start)) + "px";
10336
+ },
10337
+ translateToValue: function(offset) {
10338
+ return ((offset/(this.trackLength-this.handleLength) *
10339
+ (this.range.end-this.range.start)) + this.range.start);
10340
+ },
10341
+ getRange: function(range) {
10342
+ var v = this.values.sortBy(Prototype.K);
10343
+ range = range || 0;
10344
+ return $R(v[range],v[range+1]);
10345
+ },
10346
+ minimumOffset: function(){
10347
+ return(this.isVertical() ? this.alignY : this.alignX);
10348
+ },
10349
+ maximumOffset: function(){
10350
+ return(this.isVertical() ?
10351
+ (this.track.offsetHeight != 0 ? this.track.offsetHeight :
10352
+ this.track.style.height.replace(/px$/,"")) - this.alignY :
10353
+ (this.track.offsetWidth != 0 ? this.track.offsetWidth :
10354
+ this.track.style.width.replace(/px$/,"")) - this.alignX);
10355
+ },
10356
+ isVertical: function(){
10357
+ return (this.axis == 'vertical');
10358
+ },
10359
+ drawSpans: function() {
10360
+ var slider = this;
10361
+ if (this.spans)
10362
+ $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
10363
+ if (this.options.startSpan)
10364
+ this.setSpan(this.options.startSpan,
10365
+ $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
10366
+ if (this.options.endSpan)
10367
+ this.setSpan(this.options.endSpan,
10368
+ $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
10369
+ },
10370
+ setSpan: function(span, range) {
10371
+ if (this.isVertical()) {
10372
+ span.style.top = this.translateToPx(range.start);
10373
+ span.style.height = this.translateToPx(range.end - range.start + this.range.start);
10374
+ } else {
10375
+ span.style.left = this.translateToPx(range.start);
10376
+ span.style.width = this.translateToPx(range.end - range.start + this.range.start);
10377
+ }
10378
+ },
10379
+ updateStyles: function() {
10380
+ this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
10381
+ Element.addClassName(this.activeHandle, 'selected');
10382
+ },
10383
+ startDrag: function(event) {
10384
+ if (Event.isLeftClick(event)) {
10385
+ if (!this.disabled){
10386
+ this.active = true;
10387
+
10388
+ var handle = Event.element(event);
10389
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
10390
+ var track = handle;
10391
+ if (track==this.track) {
10392
+ var offsets = Position.cumulativeOffset(this.track);
10393
+ this.event = event;
10394
+ this.setValue(this.translateToValue(
10395
+ (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
10396
+ ));
10397
+ var offsets = Position.cumulativeOffset(this.activeHandle);
10398
+ this.offsetX = (pointer[0] - offsets[0]);
10399
+ this.offsetY = (pointer[1] - offsets[1]);
10400
+ } else {
10401
+ // find the handle (prevents issues with Safari)
10402
+ while((this.handles.indexOf(handle) == -1) && handle.parentNode)
10403
+ handle = handle.parentNode;
10404
+
10405
+ if (this.handles.indexOf(handle)!=-1) {
10406
+ this.activeHandle = handle;
10407
+ this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
10408
+ this.updateStyles();
10409
+
10410
+ var offsets = Position.cumulativeOffset(this.activeHandle);
10411
+ this.offsetX = (pointer[0] - offsets[0]);
10412
+ this.offsetY = (pointer[1] - offsets[1]);
10413
+ }
10414
+ }
10415
+ }
10416
+ Event.stop(event);
10417
+ }
10418
+ },
10419
+ update: function(event) {
10420
+ if (this.active) {
10421
+ if (!this.dragging) this.dragging = true;
10422
+ this.draw(event);
10423
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
10424
+ Event.stop(event);
10425
+ }
10426
+ },
10427
+ draw: function(event) {
10428
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
10429
+ var offsets = Position.cumulativeOffset(this.track);
10430
+ pointer[0] -= this.offsetX + offsets[0];
10431
+ pointer[1] -= this.offsetY + offsets[1];
10432
+ this.event = event;
10433
+ this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
10434
+ if (this.initialized && this.options.onSlide)
10435
+ this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
10436
+ },
10437
+ endDrag: function(event) {
10438
+ if (this.active && this.dragging) {
10439
+ this.finishDrag(event, true);
10440
+ Event.stop(event);
10441
+ }
10442
+ this.active = false;
10443
+ this.dragging = false;
10444
+ },
10445
+ finishDrag: function(event, success) {
10446
+ this.active = false;
10447
+ this.dragging = false;
10448
+ this.updateFinished();
10449
+ },
10450
+ updateFinished: function() {
10451
+ if (this.initialized && this.options.onChange)
10452
+ this.options.onChange(this.values.length>1 ? this.values : this.value, this);
10453
+ this.event = null;
10454
+ }
10455
+ });
10456
+ /**
10457
+ * Magento
10458
+ *
10459
+ * NOTICE OF LICENSE
10460
+ *
10461
+ * This source file is subject to the Academic Free License (AFL 3.0)
10462
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10463
+ * It is also available through the world-wide-web at this URL:
10464
+ * http://opensource.org/licenses/afl-3.0.php
10465
+ * If you did not receive a copy of the license and are unable to
10466
+ * obtain it through the world-wide-web, please send an email
10467
+ * to license@magentocommerce.com so we can send you a copy immediately.
10468
+ *
10469
+ * DISCLAIMER
10470
+ *
10471
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
10472
+ * versions in the future. If you wish to customize Magento for your
10473
+ * needs please refer to http://www.magentocommerce.com for more information.
10474
+ *
10475
+ * @category Varien
10476
+ * @package js
10477
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
10478
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
10479
+ */
10480
+ function popWin(url,win,para) {
10481
+ var win = window.open(url,win,para);
10482
+ win.focus();
10483
+ }
10484
+
10485
+ function setLocation(url){
10486
+ window.location.href = url;
10487
+ }
10488
+
10489
+ function setPLocation(url, setFocus){
10490
+ if( setFocus ) {
10491
+ window.opener.focus();
10492
+ }
10493
+ window.opener.location.href = url;
10494
+ }
10495
+
10496
+ function setLanguageCode(code, fromCode){
10497
+ //TODO: javascript cookies have different domain and path than php cookies
10498
+ var href = window.location.href;
10499
+ var after = '', dash;
10500
+ if (dash = href.match(/\#(.*)$/)) {
10501
+ href = href.replace(/\#(.*)$/, '');
10502
+ after = dash[0];
10503
+ }
10504
+
10505
+ if (href.match(/[?]/)) {
10506
+ var re = /([?&]store=)[a-z0-9_]*/;
10507
+ if (href.match(re)) {
10508
+ href = href.replace(re, '$1'+code);
10509
+ } else {
10510
+ href += '&store='+code;
10511
+ }
10512
+
10513
+ var re = /([?&]from_store=)[a-z0-9_]*/;
10514
+ if (href.match(re)) {
10515
+ href = href.replace(re, '');
10516
+ }
10517
+ } else {
10518
+ href += '?store='+code;
10519
+ }
10520
+ if (typeof(fromCode) != 'undefined') {
10521
+ href += '&from_store='+fromCode;
10522
+ }
10523
+ href += after;
10524
+
10525
+ setLocation(href);
10526
+ }
10527
+
10528
+ /**
10529
+ * Add classes to specified elements.
10530
+ * Supported classes are: 'odd', 'even', 'first', 'last'
10531
+ *
10532
+ * @param elements - array of elements to be decorated
10533
+ * [@param decorateParams] - array of classes to be set. If omitted, all available will be used
10534
+ */
10535
+ function decorateGeneric(elements, decorateParams)
10536
+ {
10537
+ var allSupportedParams = ['odd', 'even', 'first', 'last'];
10538
+ var _decorateParams = {};
10539
+ var total = elements.length;
10540
+
10541
+ if (total) {
10542
+ // determine params called
10543
+ if (typeof(decorateParams) == 'undefined') {
10544
+ decorateParams = allSupportedParams;
10545
+ }
10546
+ if (!decorateParams.length) {
10547
+ return;
10548
+ }
10549
+ for (var k in allSupportedParams) {
10550
+ _decorateParams[allSupportedParams[k]] = false;
10551
+ }
10552
+ for (var k in decorateParams) {
10553
+ _decorateParams[decorateParams[k]] = true;
10554
+ }
10555
+
10556
+ // decorate elements
10557
+ // elements[0].addClassName('first'); // will cause bug in IE (#5587)
10558
+ if (_decorateParams.first) {
10559
+ Element.addClassName(elements[0], 'first');
10560
+ }
10561
+ if (_decorateParams.last) {
10562
+ Element.addClassName(elements[total-1], 'last');
10563
+ }
10564
+ for (var i = 0; i < total; i++) {
10565
+ if ((i + 1) % 2 == 0) {
10566
+ if (_decorateParams.even) {
10567
+ Element.addClassName(elements[i], 'even');
10568
+ }
10569
+ }
10570
+ else {
10571
+ if (_decorateParams.odd) {
10572
+ Element.addClassName(elements[i], 'odd');
10573
+ }
10574
+ }
10575
+ }
10576
+ }
10577
+ }
10578
+
10579
+ /**
10580
+ * Decorate table rows and cells, tbody etc
10581
+ * @see decorateGeneric()
10582
+ */
10583
+ function decorateTable(table, options) {
10584
+ var table = $(table);
10585
+ if (table) {
10586
+ // set default options
10587
+ var _options = {
10588
+ 'tbody' : false,
10589
+ 'tbody tr' : ['odd', 'even', 'first', 'last'],
10590
+ 'thead tr' : ['first', 'last'],
10591
+ 'tfoot tr' : ['first', 'last'],
10592
+ 'tr td' : ['last']
10593
+ };
10594
+ // overload options
10595
+ if (typeof(options) != 'undefined') {
10596
+ for (var k in options) {
10597
+ _options[k] = options[k];
10598
+ }
10599
+ }
10600
+ // decorate
10601
+ if (_options['tbody']) {
10602
+ decorateGeneric(table.select('tbody'), _options['tbody']);
10603
+ }
10604
+ if (_options['tbody tr']) {
10605
+ decorateGeneric(table.select('tbody tr'), _options['tbody tr']);
10606
+ }
10607
+ if (_options['thead tr']) {
10608
+ decorateGeneric(table.select('thead tr'), _options['thead tr']);
10609
+ }
10610
+ if (_options['tfoot tr']) {
10611
+ decorateGeneric(table.select('tfoot tr'), _options['tfoot tr']);
10612
+ }
10613
+ if (_options['tr td']) {
10614
+ var allRows = table.select('tr');
10615
+ if (allRows.length) {
10616
+ for (var i = 0; i < allRows.length; i++) {
10617
+ decorateGeneric(allRows[i].getElementsByTagName('TD'), _options['tr td']);
10618
+ }
10619
+ }
10620
+ }
10621
+ }
10622
+ }
10623
+
10624
+ /**
10625
+ * Set "odd", "even" and "last" CSS classes for list items
10626
+ * @see decorateGeneric()
10627
+ */
10628
+ function decorateList(list, nonRecursive) {
10629
+ if ($(list)) {
10630
+ if (typeof(nonRecursive) == 'undefined') {
10631
+ var items = $(list).select('li')
10632
+ }
10633
+ else {
10634
+ var items = $(list).childElements();
10635
+ }
10636
+ decorateGeneric(items, ['odd', 'even', 'last']);
10637
+ }
10638
+ }
10639
+
10640
+ /**
10641
+ * Set "odd", "even" and "last" CSS classes for list items
10642
+ * @see decorateGeneric()
10643
+ */
10644
+ function decorateDataList(list) {
10645
+ list = $(list);
10646
+ if (list) {
10647
+ decorateGeneric(list.select('dt'), ['odd', 'even', 'last']);
10648
+ decorateGeneric(list.select('dd'), ['odd', 'even', 'last']);
10649
+ }
10650
+ }
10651
+
10652
+ /**
10653
+ * Parse SID and produces the correct URL
10654
+ */
10655
+ function parseSidUrl(baseUrl, urlExt) {
10656
+ var sidPos = baseUrl.indexOf('/?SID=');
10657
+ var sid = '';
10658
+ urlExt = (urlExt != undefined) ? urlExt : '';
10659
+
10660
+ if(sidPos > -1) {
10661
+ sid = '?' + baseUrl.substring(sidPos + 2);
10662
+ baseUrl = baseUrl.substring(0, sidPos + 1);
10663
+ }
10664
+
10665
+ return baseUrl+urlExt+sid;
10666
+ }
10667
+
10668
+ /**
10669
+ * Formats currency using patern
10670
+ * format - JSON (pattern, decimal, decimalsDelimeter, groupsDelimeter)
10671
+ * showPlus - true (always show '+'or '-'),
10672
+ * false (never show '-' even if number is negative)
10673
+ * null (show '-' if number is negative)
10674
+ */
10675
+
10676
+ function formatCurrency(price, format, showPlus){
10677
+ var precision = isNaN(format.precision = Math.abs(format.precision)) ? 2 : format.precision;
10678
+ var requiredPrecision = isNaN(format.requiredPrecision = Math.abs(format.requiredPrecision)) ? 2 : format.requiredPrecision;
10679
+
10680
+ //precision = (precision > requiredPrecision) ? precision : requiredPrecision;
10681
+ //for now we don't need this difference so precision is requiredPrecision
10682
+ precision = requiredPrecision;
10683
+
10684
+ var integerRequired = isNaN(format.integerRequired = Math.abs(format.integerRequired)) ? 1 : format.integerRequired;
10685
+
10686
+ var decimalSymbol = format.decimalSymbol == undefined ? "," : format.decimalSymbol;
10687
+ var groupSymbol = format.groupSymbol == undefined ? "." : format.groupSymbol;
10688
+ var groupLength = format.groupLength == undefined ? 3 : format.groupLength;
10689
+
10690
+ var s = '';
10691
+
10692
+ if (showPlus == undefined || showPlus == true) {
10693
+ s = price < 0 ? "-" : ( showPlus ? "+" : "");
10694
+ } else if (showPlus == false) {
10695
+ s = '';
10696
+ }
10697
+
10698
+ var i = parseInt(price = Math.abs(+price || 0).toFixed(precision)) + "";
10699
+ var pad = (i.length < integerRequired) ? (integerRequired - i.length) : 0;
10700
+ while (pad) { i = '0' + i; pad--; }
10701
+ j = (j = i.length) > groupLength ? j % groupLength : 0;
10702
+ re = new RegExp("(\\d{" + groupLength + "})(?=\\d)", "g");
10703
+
10704
+ /**
10705
+ * replace(/-/, 0) is only for fixing Safari bug which appears
10706
+ * when Math.abs(0).toFixed() executed on "0" number.
10707
+ * Result is "0.-0" :(
10708
+ */
10709
+ var r = (j ? i.substr(0, j) + groupSymbol : "") + i.substr(j).replace(re, "$1" + groupSymbol) + (precision ? decimalSymbol + Math.abs(price - i).toFixed(precision).replace(/-/, 0).slice(2) : "")
10710
+ var pattern = '';
10711
+ if (format.pattern.indexOf('{sign}') == -1) {
10712
+ pattern = s + format.pattern;
10713
+ } else {
10714
+ pattern = format.pattern.replace('{sign}', s);
10715
+ }
10716
+
10717
+ return pattern.replace('%s', r).replace(/^\s\s*/, '').replace(/\s\s*$/, '');
10718
+ };
10719
+
10720
+ function expandDetails(el, childClass) {
10721
+ if (Element.hasClassName(el,'show-details')) {
10722
+ $$(childClass).each(function(item){item.hide()});
10723
+ Element.removeClassName(el,'show-details');
10724
+ }
10725
+ else {
10726
+ $$(childClass).each(function(item){item.show()});
10727
+ Element.addClassName(el,'show-details');
10728
+ }
10729
+ }
10730
+
10731
+ // Version 1.0
10732
+ var isIE = navigator.appVersion.match(/MSIE/) == "MSIE";
10733
+
10734
+ if (!window.Varien)
10735
+ var Varien = new Object();
10736
+
10737
+ Varien.showLoading = function(){
10738
+ Element.show('loading-process');
10739
+ }
10740
+ Varien.hideLoading = function(){
10741
+ Element.hide('loading-process');
10742
+ }
10743
+ Varien.GlobalHandlers = {
10744
+ onCreate: function() {
10745
+ Varien.showLoading();
10746
+ },
10747
+
10748
+ onComplete: function() {
10749
+ if(Ajax.activeRequestCount == 0) {
10750
+ Varien.hideLoading();
10751
+ }
10752
+ }
10753
+ };
10754
+
10755
+ Ajax.Responders.register(Varien.GlobalHandlers);
10756
+
10757
+ /**
10758
+ * Quick Search form client model
10759
+ */
10760
+ Varien.searchForm = Class.create();
10761
+ Varien.searchForm.prototype = {
10762
+ initialize : function(form, field, emptyText){
10763
+ this.form = $(form);
10764
+ this.field = $(field);
10765
+ this.emptyText = emptyText;
10766
+
10767
+ Event.observe(this.form, 'submit', this.submit.bind(this));
10768
+ Event.observe(this.field, 'focus', this.focus.bind(this));
10769
+ Event.observe(this.field, 'blur', this.blur.bind(this));
10770
+ this.blur();
10771
+ },
10772
+
10773
+ submit : function(event){
10774
+ if (this.field.value == this.emptyText || this.field.value == ''){
10775
+ Event.stop(event);
10776
+ return false;
10777
+ }
10778
+ return true;
10779
+ },
10780
+
10781
+ focus : function(event){
10782
+ if(this.field.value==this.emptyText){
10783
+ this.field.value='';
10784
+ }
10785
+
10786
+ },
10787
+
10788
+ blur : function(event){
10789
+ if(this.field.value==''){
10790
+ this.field.value=this.emptyText;
10791
+ }
10792
+ },
10793
+
10794
+ initAutocomplete : function(url, destinationElement){
10795
+ new Ajax.Autocompleter(
10796
+ this.field,
10797
+ destinationElement,
10798
+ url,
10799
+ {
10800
+ paramName: this.field.name,
10801
+ method: 'get',
10802
+ minChars: 2,
10803
+ updateElement: this._selectAutocompleteItem.bind(this),
10804
+ onShow : function(element, update) {
10805
+ if(!update.style.position || update.style.position=='absolute') {
10806
+ update.style.position = 'absolute';
10807
+ Position.clone(element, update, {
10808
+ setHeight: false,
10809
+ offsetTop: element.offsetHeight
10810
+ });
10811
+ }
10812
+ Effect.Appear(update,{duration:0});
10813
+ }
10814
+
10815
+ }
10816
+ );
10817
+ },
10818
+
10819
+ _selectAutocompleteItem : function(element){
10820
+ if(element.title){
10821
+ this.field.value = element.title;
10822
+ }
10823
+ this.form.submit();
10824
+ }
10825
+ }
10826
+
10827
+ Varien.Tabs = Class.create();
10828
+ Varien.Tabs.prototype = {
10829
+ initialize: function(selector) {
10830
+ var self=this;
10831
+ $$(selector+' a').each(this.initTab.bind(this));
10832
+ },
10833
+
10834
+ initTab: function(el) {
10835
+ el.href = 'javascript:void(0)';
10836
+ if ($(el.parentNode).hasClassName('active')) {
10837
+ this.showContent(el);
10838
+ }
10839
+ el.observe('click', this.showContent.bind(this, el));
10840
+ },
10841
+
10842
+ showContent: function(a) {
10843
+ var li = $(a.parentNode), ul = $(li.parentNode);
10844
+ ul.getElementsBySelector('li', 'ol').each(function(el){
10845
+ var contents = $(el.id+'_contents');
10846
+ if (el==li) {
10847
+ el.addClassName('active');
10848
+ contents.show();
10849
+ } else {
10850
+ el.removeClassName('active');
10851
+ contents.hide();
10852
+ }
10853
+ });
10854
+ }
10855
+ }
10856
+
10857
+ Varien.DateElement = Class.create();
10858
+ Varien.DateElement.prototype = {
10859
+ initialize: function(type, content, required, format) {
10860
+ if (type == 'id') {
10861
+ // id prefix
10862
+ this.day = $(content + 'day');
10863
+ this.month = $(content + 'month');
10864
+ this.year = $(content + 'year');
10865
+ this.full = $(content + 'full');
10866
+ this.advice = $(content + 'date-advice');
10867
+ } else if (type == 'container') {
10868
+ // content must be container with data
10869
+ this.day = content.day;
10870
+ this.month = content.month;
10871
+ this.year = content.year;
10872
+ this.full = content.full;
10873
+ this.advice = content.advice;
10874
+ } else {
10875
+ return;
10876
+ }
10877
+
10878
+ this.required = required;
10879
+ this.format = format;
10880
+
10881
+ this.day.addClassName('validate-custom');
10882
+ this.day.validate = this.validate.bind(this);
10883
+ this.month.addClassName('validate-custom');
10884
+ this.month.validate = this.validate.bind(this);
10885
+ this.year.addClassName('validate-custom');
10886
+ this.year.validate = this.validate.bind(this);
10887
+
10888
+ this.setDateRange(false, false);
10889
+ this.year.setAttribute('autocomplete','off');
10890
+
10891
+ this.advice.hide();
10892
+ },
10893
+ validate: function() {
10894
+ var error = false,
10895
+ day = parseInt(this.day.value.replace(/^0*/, '')) || 0,
10896
+ month = parseInt(this.month.value.replace(/^0*/, '')) || 0,
10897
+ year = parseInt(this.year.value) || 0;
10898
+ if (!day && !month && !year) {
10899
+ if (this.required) {
10900
+ error = 'This date is a required value.';
10901
+ } else {
10902
+ this.full.value = '';
10903
+ }
10904
+ } else if (!day || !month || !year) {
10905
+ error = 'Please enter a valid full date.';
10906
+ } else {
10907
+ var date = new Date, countDaysInMonth = 0, errorType = null;
10908
+ date.setYear(year);date.setMonth(month-1);date.setDate(32);
10909
+ countDaysInMonth = 32 - date.getDate();
10910
+ if(!countDaysInMonth || countDaysInMonth>31) countDaysInMonth = 31;
10911
+
10912
+ if (day<1 || day>countDaysInMonth) {
10913
+ errorType = 'day';
10914
+ error = 'Please enter a valid day (1-%d).';
10915
+ } else if (month<1 || month>12) {
10916
+ errorType = 'month';
10917
+ error = 'Please enter a valid month (1-12).';
10918
+ } else {
10919
+ if(day % 10 == day) this.day.value = '0'+day;
10920
+ if(month % 10 == month) this.month.value = '0'+month;
10921
+ this.full.value = this.format.replace(/%[mb]/i, this.month.value).replace(/%[de]/i, this.day.value).replace(/%y/i, this.year.value);
10922
+ var testFull = this.month.value + '/' + this.day.value + '/'+ this.year.value;
10923
+ var test = new Date(testFull);
10924
+ if (isNaN(test)) {
10925
+ error = 'Please enter a valid date.';
10926
+ } else {
10927
+ this.setFullDate(test);
10928
+ }
10929
+ }
10930
+ var valueError = false;
10931
+ if (!error && !this.validateData()){//(year<1900 || year>curyear) {
10932
+ errorType = this.validateDataErrorType;//'year';
10933
+ valueError = this.validateDataErrorText;//'Please enter a valid year (1900-%d).';
10934
+ error = valueError;
10935
+ }
10936
+ }
10937
+
10938
+ if (error !== false) {
10939
+ try {
10940
+ error = Translator.translate(error);
10941
+ }
10942
+ catch (e) {}
10943
+ if (!valueError) {
10944
+ this.advice.innerHTML = error.replace('%d', countDaysInMonth);
10945
+ } else {
10946
+ this.advice.innerHTML = this.errorTextModifier(error);
10947
+ }
10948
+ this.advice.show();
10949
+ return false;
10950
+ }
10951
+
10952
+ // fixing elements class
10953
+ this.day.removeClassName('validation-failed');
10954
+ this.month.removeClassName('validation-failed');
10955
+ this.year.removeClassName('validation-failed');
10956
+
10957
+ this.advice.hide();
10958
+ return true;
10959
+ },
10960
+ validateData: function() {
10961
+ var year = this.fullDate.getFullYear();
10962
+ var date = new Date;
10963
+ this.curyear = date.getFullYear();
10964
+ return (year>=1900 && year<=this.curyear);
10965
+ },
10966
+ validateDataErrorType: 'year',
10967
+ validateDataErrorText: 'Please enter a valid year (1900-%d).',
10968
+ errorTextModifier: function(text) {
10969
+ return text.replace('%d', this.curyear);
10970
+ },
10971
+ setDateRange: function(minDate, maxDate) {
10972
+ this.minDate = minDate;
10973
+ this.maxDate = maxDate;
10974
+ },
10975
+ setFullDate: function(date) {
10976
+ this.fullDate = date;
10977
+ }
10978
+ };
10979
+
10980
+ Varien.DOB = Class.create();
10981
+ Varien.DOB.prototype = {
10982
+ initialize: function(selector, required, format) {
10983
+ var el = $$(selector)[0];
10984
+ var container = {};
10985
+ container.day = Element.select(el, '.dob-day input')[0];
10986
+ container.month = Element.select(el, '.dob-month input')[0];
10987
+ container.year = Element.select(el, '.dob-year input')[0];
10988
+ container.full = Element.select(el, '.dob-full input')[0];
10989
+ container.advice = Element.select(el, '.validation-advice')[0];
10990
+
10991
+ new Varien.DateElement('container', container, required, format);
10992
+ }
10993
+ };
10994
+
10995
+ Varien.dateRangeDate = Class.create();
10996
+ Varien.dateRangeDate.prototype = Object.extend(new Varien.DateElement(), {
10997
+ validateData: function() {
10998
+ var validate = true;
10999
+ if (this.minDate || this.maxValue) {
11000
+ if (this.minDate) {
11001
+ this.minDate = new Date(this.minDate);
11002
+ this.minDate.setHours(0);
11003
+ if (isNaN(this.minDate)) {
11004
+ this.minDate = new Date('1/1/1900');
11005
+ }
11006
+ validate = validate && (this.fullDate >= this.minDate)
11007
+ }
11008
+ if (this.maxDate) {
11009
+ this.maxDate = new Date(this.maxDate)
11010
+ this.minDate.setHours(0);
11011
+ if (isNaN(this.maxDate)) {
11012
+ this.maxDate = new Date();
11013
+ }
11014
+ validate = validate && (this.fullDate <= this.maxDate)
11015
+ }
11016
+ if (this.maxDate && this.minDate) {
11017
+ this.validateDataErrorText = 'Please enter a valid date between %s and %s';
11018
+ } else if (this.maxDate) {
11019
+ this.validateDataErrorText = 'Please enter a valid date less than or equal to %s';
11020
+ } else if (this.minDate) {
11021
+ this.validateDataErrorText = 'Please enter a valid date equal to or greater than %s';
11022
+ } else {
11023
+ this.validateDataErrorText = '';
11024
+ }
11025
+ }
11026
+ return validate;
11027
+ },
11028
+ validateDataErrorText: 'Date should be between %s and %s',
11029
+ errorTextModifier: function(text) {
11030
+ if (this.minDate) {
11031
+ text = text.sub('%s', this.dateFormat(this.minDate));
11032
+ }
11033
+ if (this.maxDate) {
11034
+ text = text.sub('%s', this.dateFormat(this.maxDate));
11035
+ }
11036
+ return text;
11037
+ },
11038
+ dateFormat: function(date) {
11039
+ return (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
11040
+ }
11041
+ });
11042
+
11043
+ Varien.FileElement = Class.create();
11044
+ Varien.FileElement.prototype = {
11045
+ initialize: function (id) {
11046
+ this.fileElement = $(id);
11047
+ this.hiddenElement = $(id + '_value');
11048
+
11049
+ this.fileElement.observe('change', this.selectFile.bind(this));
11050
+ },
11051
+ selectFile: function(event) {
11052
+ this.hiddenElement.value = this.fileElement.getValue();
11053
+ }
11054
+ };
11055
+
11056
+ Validation.addAllThese([
11057
+ ['validate-custom', ' ', function(v,elm) {
11058
+ return elm.validate();
11059
+ }]
11060
+ ]);
11061
+
11062
+ function truncateOptions() {
11063
+ $$('.truncated').each(function(element){
11064
+ Event.observe(element, 'mouseover', function(){
11065
+ if (element.down('div.truncated_full_value')) {
11066
+ element.down('div.truncated_full_value').addClassName('show')
11067
+ }
11068
+ });
11069
+ Event.observe(element, 'mouseout', function(){
11070
+ if (element.down('div.truncated_full_value')) {
11071
+ element.down('div.truncated_full_value').removeClassName('show')
11072
+ }
11073
+ });
11074
+
11075
+ });
11076
+ }
11077
+ Event.observe(window, 'load', function(){
11078
+ truncateOptions();
11079
+ });
11080
+
11081
+ Element.addMethods({
11082
+ getInnerText: function(element)
11083
+ {
11084
+ element = $(element);
11085
+ if(element.innerText && !Prototype.Browser.Opera) {
11086
+ return element.innerText
11087
+ }
11088
+ return element.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g, ' ').strip();
11089
+ }
11090
+ });
11091
+
11092
+ /*
11093
+ if (!("console" in window) || !("firebug" in console))
11094
+ {
11095
+ var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
11096
+ "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
11097
+
11098
+ window.console = {};
11099
+ for (var i = 0; i < names.length; ++i)
11100
+ window.console[names[i]] = function() {}
11101
+ }
11102
+ */
11103
+
11104
+ /**
11105
+ * Executes event handler on the element. Works with event handlers attached by Prototype,
11106
+ * in a browser-agnostic fashion.
11107
+ * @param element The element object
11108
+ * @param event Event name, like 'change'
11109
+ *
11110
+ * @example fireEvent($('my-input', 'click'));
11111
+ */
11112
+ function fireEvent(element, event) {
11113
+ if (document.createEvent) {
11114
+ // dispatch for all browsers except IE before version 9
11115
+ var evt = document.createEvent("HTMLEvents");
11116
+ evt.initEvent(event, true, true ); // event type, bubbling, cancelable
11117
+ return element.dispatchEvent(evt);
11118
+ } else {
11119
+ // dispatch for IE before version 9
11120
+ var evt = document.createEventObject();
11121
+ return element.fireEvent('on' + event, evt)
11122
+ }
11123
+ }
11124
+
11125
+ /**
11126
+ * Returns more accurate results of floating-point modulo division
11127
+ * E.g.:
11128
+ * 0.6 % 0.2 = 0.19999999999999996
11129
+ * modulo(0.6, 0.2) = 0
11130
+ *
11131
+ * @param dividend
11132
+ * @param divisor
11133
+ */
11134
+ function modulo(dividend, divisor)
11135
+ {
11136
+ var epsilon = divisor / 10000;
11137
+ var remainder = dividend % divisor;
11138
+
11139
+ if (Math.abs(remainder - divisor) < epsilon || Math.abs(remainder) < epsilon) {
11140
+ remainder = 0;
11141
+ }
11142
+
11143
+ return remainder;
11144
+ }
11145
+
11146
+ /**
11147
+ * createContextualFragment is not supported in IE9. Adding its support.
11148
+ */
11149
+ if ((typeof Range != "undefined") && !Range.prototype.createContextualFragment)
11150
+ {
11151
+ Range.prototype.createContextualFragment = function(html)
11152
+ {
11153
+ var frag = document.createDocumentFragment(),
11154
+ div = document.createElement("div");
11155
+ frag.appendChild(div);
11156
+ div.outerHTML = html;
11157
+ return frag;
11158
+ };
11159
+ }
11160
+
11161
+ /**
11162
+ * Magento
11163
+ *
11164
+ * NOTICE OF LICENSE
11165
+ *
11166
+ * This source file is subject to the Academic Free License (AFL 3.0)
11167
+ * that is bundled with this package in the file LICENSE_AFL.txt.
11168
+ * It is also available through the world-wide-web at this URL:
11169
+ * http://opensource.org/licenses/afl-3.0.php
11170
+ * If you did not receive a copy of the license and are unable to
11171
+ * obtain it through the world-wide-web, please send an email
11172
+ * to license@magentocommerce.com so we can send you a copy immediately.
11173
+ *
11174
+ * DISCLAIMER
11175
+ *
11176
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
11177
+ * versions in the future. If you wish to customize Magento for your
11178
+ * needs please refer to http://www.magentocommerce.com for more information.
11179
+ *
11180
+ * @category Varien
11181
+ * @package js
11182
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
11183
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
11184
+ */
11185
+ VarienForm = Class.create();
11186
+ VarienForm.prototype = {
11187
+ initialize: function(formId, firstFieldFocus){
11188
+ this.form = $(formId);
11189
+ if (!this.form) {
11190
+ return;
11191
+ }
11192
+ this.cache = $A();
11193
+ this.currLoader = false;
11194
+ this.currDataIndex = false;
11195
+ this.validator = new Validation(this.form);
11196
+ this.elementFocus = this.elementOnFocus.bindAsEventListener(this);
11197
+ this.elementBlur = this.elementOnBlur.bindAsEventListener(this);
11198
+ this.childLoader = this.onChangeChildLoad.bindAsEventListener(this);
11199
+ this.highlightClass = 'highlight';
11200
+ this.extraChildParams = '';
11201
+ this.firstFieldFocus= firstFieldFocus || false;
11202
+ this.bindElements();
11203
+ if(this.firstFieldFocus){
11204
+ try{
11205
+ Form.Element.focus(Form.findFirstElement(this.form))
11206
+ }
11207
+ catch(e){}
11208
+ }
11209
+ },
11210
+
11211
+ submit : function(url){
11212
+ if(this.validator && this.validator.validate()){
11213
+ this.form.submit();
11214
+ }
11215
+ return false;
11216
+ },
11217
+
11218
+ bindElements:function (){
11219
+ var elements = Form.getElements(this.form);
11220
+ for (var row in elements) {
11221
+ if (elements[row].id) {
11222
+ Event.observe(elements[row],'focus',this.elementFocus);
11223
+ Event.observe(elements[row],'blur',this.elementBlur);
11224
+ }
11225
+ }
11226
+ },
11227
+
11228
+ elementOnFocus: function(event){
11229
+ var element = Event.findElement(event, 'fieldset');
11230
+ if(element){
11231
+ Element.addClassName(element, this.highlightClass);
11232
+ }
11233
+ },
11234
+
11235
+ elementOnBlur: function(event){
11236
+ var element = Event.findElement(event, 'fieldset');
11237
+ if(element){
11238
+ Element.removeClassName(element, this.highlightClass);
11239
+ }
11240
+ },
11241
+
11242
+ setElementsRelation: function(parent, child, dataUrl, first){
11243
+ if (parent=$(parent)) {
11244
+ // TODO: array of relation and caching
11245
+ if (!this.cache[parent.id]){
11246
+ this.cache[parent.id] = $A();
11247
+ this.cache[parent.id]['child'] = child;
11248
+ this.cache[parent.id]['dataUrl'] = dataUrl;
11249
+ this.cache[parent.id]['data'] = $A();
11250
+ this.cache[parent.id]['first'] = first || false;
11251
+ }
11252
+ Event.observe(parent,'change',this.childLoader);
11253
+ }
11254
+ },
11255
+
11256
+ onChangeChildLoad: function(event){
11257
+ element = Event.element(event);
11258
+ this.elementChildLoad(element);
11259
+ },
11260
+
11261
+ elementChildLoad: function(element, callback){
11262
+ this.callback = callback || false;
11263
+ if (element.value) {
11264
+ this.currLoader = element.id;
11265
+ this.currDataIndex = element.value;
11266
+ if (this.cache[element.id]['data'][element.value]) {
11267
+ this.setDataToChild(this.cache[element.id]['data'][element.value]);
11268
+ }
11269
+ else{
11270
+ new Ajax.Request(this.cache[this.currLoader]['dataUrl'],{
11271
+ method: 'post',
11272
+ parameters: {"parent":element.value},
11273
+ onComplete: this.reloadChildren.bind(this)
11274
+ });
11275
+ }
11276
+ }
11277
+ },
11278
+
11279
+ reloadChildren: function(transport){
11280
+ var data = eval('(' + transport.responseText + ')');
11281
+ this.cache[this.currLoader]['data'][this.currDataIndex] = data;
11282
+ this.setDataToChild(data);
11283
+ },
11284
+
11285
+ setDataToChild: function(data){
11286
+ if (data.length) {
11287
+ var child = $(this.cache[this.currLoader]['child']);
11288
+ if (child){
11289
+ var html = '<select name="'+child.name+'" id="'+child.id+'" class="'+child.className+'" title="'+child.title+'" '+this.extraChildParams+'>';
11290
+ if(this.cache[this.currLoader]['first']){
11291
+ html+= '<option value="">'+this.cache[this.currLoader]['first']+'</option>';
11292
+ }
11293
+ for (var i in data){
11294
+ if(data[i].value) {
11295
+ html+= '<option value="'+data[i].value+'"';
11296
+ if(child.value && (child.value == data[i].value || child.value == data[i].label)){
11297
+ html+= ' selected';
11298
+ }
11299
+ html+='>'+data[i].label+'</option>';
11300
+ }
11301
+ }
11302
+ html+= '</select>';
11303
+ Element.insert(child, {before: html});
11304
+ Element.remove(child);
11305
+ }
11306
+ }
11307
+ else{
11308
+ var child = $(this.cache[this.currLoader]['child']);
11309
+ if (child){
11310
+ var html = '<input type="text" name="'+child.name+'" id="'+child.id+'" class="'+child.className+'" title="'+child.title+'" '+this.extraChildParams+'>';
11311
+ Element.insert(child, {before: html});
11312
+ Element.remove(child);
11313
+ }
11314
+ }
11315
+
11316
+ this.bindElements();
11317
+ if (this.callback) {
11318
+ this.callback();
11319
+ }
11320
+ }
11321
+ }
11322
+
11323
+ RegionUpdater = Class.create();
11324
+ RegionUpdater.prototype = {
11325
+ initialize: function (countryEl, regionTextEl, regionSelectEl, regions, disableAction, zipEl)
11326
+ {
11327
+ this.countryEl = $(countryEl);
11328
+ this.regionTextEl = $(regionTextEl);
11329
+ this.regionSelectEl = $(regionSelectEl);
11330
+ this.zipEl = $(zipEl);
11331
+ this.config = regions['config'];
11332
+ delete regions.config;
11333
+ this.regions = regions;
11334
+
11335
+ this.disableAction = (typeof disableAction=='undefined') ? 'hide' : disableAction;
11336
+ this.zipOptions = (typeof zipOptions=='undefined') ? false : zipOptions;
11337
+
11338
+ if (this.regionSelectEl.options.length<=1) {
11339
+ this.update();
11340
+ }
11341
+
11342
+ Event.observe(this.countryEl, 'change', this.update.bind(this));
11343
+ },
11344
+
11345
+ _checkRegionRequired: function()
11346
+ {
11347
+ var label, wildCard;
11348
+ var elements = [this.regionTextEl, this.regionSelectEl];
11349
+ var that = this;
11350
+ if (typeof this.config == 'undefined') {
11351
+ return;
11352
+ }
11353
+ var regionRequired = this.config.regions_required.indexOf(this.countryEl.value) >= 0;
11354
+
11355
+ elements.each(function(currentElement) {
11356
+ Validation.reset(currentElement);
11357
+ label = $$('label[for="' + currentElement.id + '"]')[0];
11358
+ if (label) {
11359
+ wildCard = label.down('em') || label.down('span.required');
11360
+ if (!that.config.show_all_regions) {
11361
+ if (regionRequired) {
11362
+ label.up().show();
11363
+ } else {
11364
+ label.up().hide();
11365
+ }
11366
+ }
11367
+ }
11368
+
11369
+ if (label && wildCard) {
11370
+ if (!regionRequired) {
11371
+ wildCard.hide();
11372
+ if (label.hasClassName('required')) {
11373
+ label.removeClassName('required');
11374
+ }
11375
+ } else if (regionRequired) {
11376
+ wildCard.show();
11377
+ if (!label.hasClassName('required')) {
11378
+ label.addClassName('required')
11379
+ }
11380
+ }
11381
+ }
11382
+
11383
+ if (!regionRequired) {
11384
+ if (currentElement.hasClassName('required-entry')) {
11385
+ currentElement.removeClassName('required-entry');
11386
+ }
11387
+ if ('select' == currentElement.tagName.toLowerCase() &&
11388
+ currentElement.hasClassName('validate-select')) {
11389
+ currentElement.removeClassName('validate-select');
11390
+ }
11391
+ } else {
11392
+ if (!currentElement.hasClassName('required-entry')) {
11393
+ currentElement.addClassName('required-entry');
11394
+ }
11395
+ if ('select' == currentElement.tagName.toLowerCase() &&
11396
+ !currentElement.hasClassName('validate-select')) {
11397
+ currentElement.addClassName('validate-select');
11398
+ }
11399
+ }
11400
+ });
11401
+ },
11402
+
11403
+ update: function()
11404
+ {
11405
+ if (this.regions[this.countryEl.value]) {
11406
+ var i, option, region, def;
11407
+
11408
+ def = this.regionSelectEl.getAttribute('defaultValue');
11409
+ if (this.regionTextEl) {
11410
+ if (!def) {
11411
+ def = this.regionTextEl.value.toLowerCase();
11412
+ }
11413
+ this.regionTextEl.value = '';
11414
+ }
11415
+
11416
+ this.regionSelectEl.options.length = 1;
11417
+ for (regionId in this.regions[this.countryEl.value]) {
11418
+ region = this.regions[this.countryEl.value][regionId];
11419
+
11420
+ option = document.createElement('OPTION');
11421
+ option.value = regionId;
11422
+ option.text = region.name.stripTags();
11423
+ option.title = region.name;
11424
+
11425
+ if (this.regionSelectEl.options.add) {
11426
+ this.regionSelectEl.options.add(option);
11427
+ } else {
11428
+ this.regionSelectEl.appendChild(option);
11429
+ }
11430
+
11431
+ if (regionId==def || (region.name && region.name.toLowerCase()==def) ||
11432
+ (region.name && region.code.toLowerCase()==def)
11433
+ ) {
11434
+ this.regionSelectEl.value = regionId;
11435
+ }
11436
+ }
11437
+
11438
+ if (this.disableAction=='hide') {
11439
+ if (this.regionTextEl) {
11440
+ this.regionTextEl.style.display = 'none';
11441
+ }
11442
+
11443
+ this.regionSelectEl.style.display = '';
11444
+ } else if (this.disableAction=='disable') {
11445
+ if (this.regionTextEl) {
11446
+ this.regionTextEl.disabled = true;
11447
+ }
11448
+ this.regionSelectEl.disabled = false;
11449
+ }
11450
+ this.setMarkDisplay(this.regionSelectEl, true);
11451
+ } else {
11452
+ if (this.disableAction=='hide') {
11453
+ if (this.regionTextEl) {
11454
+ this.regionTextEl.style.display = '';
11455
+ }
11456
+ this.regionSelectEl.style.display = 'none';
11457
+ Validation.reset(this.regionSelectEl);
11458
+ } else if (this.disableAction=='disable') {
11459
+ if (this.regionTextEl) {
11460
+ this.regionTextEl.disabled = false;
11461
+ }
11462
+ this.regionSelectEl.disabled = true;
11463
+ } else if (this.disableAction=='nullify') {
11464
+ this.regionSelectEl.options.length = 1;
11465
+ this.regionSelectEl.value = '';
11466
+ this.regionSelectEl.selectedIndex = 0;
11467
+ this.lastCountryId = '';
11468
+ }
11469
+ this.setMarkDisplay(this.regionSelectEl, false);
11470
+ }
11471
+
11472
+ this._checkRegionRequired();
11473
+ // Make Zip and its label required/optional
11474
+ var zipUpdater = new ZipUpdater(this.countryEl.value, this.zipEl);
11475
+ zipUpdater.update();
11476
+ },
11477
+
11478
+ setMarkDisplay: function(elem, display){
11479
+ elem = $(elem);
11480
+ var labelElement = elem.up(0).down('label > span.required') ||
11481
+ elem.up(1).down('label > span.required') ||
11482
+ elem.up(0).down('label.required > em') ||
11483
+ elem.up(1).down('label.required > em');
11484
+ if(labelElement) {
11485
+ inputElement = labelElement.up().next('input');
11486
+ if (display) {
11487
+ labelElement.show();
11488
+ if (inputElement) {
11489
+ inputElement.addClassName('required-entry');
11490
+ }
11491
+ } else {
11492
+ labelElement.hide();
11493
+ if (inputElement) {
11494
+ inputElement.removeClassName('required-entry');
11495
+ }
11496
+ }
11497
+ }
11498
+ }
11499
+ }
11500
+
11501
+ ZipUpdater = Class.create();
11502
+ ZipUpdater.prototype = {
11503
+ initialize: function(country, zipElement)
11504
+ {
11505
+ this.country = country;
11506
+ this.zipElement = $(zipElement);
11507
+ },
11508
+
11509
+ update: function()
11510
+ {
11511
+ // Country ISO 2-letter codes must be pre-defined
11512
+ if (typeof optionalZipCountries == 'undefined') {
11513
+ return false;
11514
+ }
11515
+
11516
+ // Ajax-request and normal content load compatibility
11517
+ if (this.zipElement != undefined) {
11518
+ this._setPostcodeOptional();
11519
+ } else {
11520
+ Event.observe(window, "load", this._setPostcodeOptional.bind(this));
11521
+ }
11522
+ },
11523
+
11524
+ _setPostcodeOptional: function()
11525
+ {
11526
+ this.zipElement = $(this.zipElement);
11527
+ if (this.zipElement == undefined) {
11528
+ return false;
11529
+ }
11530
+
11531
+ // find label
11532
+ var label = $$('label[for="' + this.zipElement.id + '"]')[0];
11533
+ if (label != undefined) {
11534
+ var wildCard = label.down('em') || label.down('span.required');
11535
+ }
11536
+
11537
+ // Make Zip and its label required/optional
11538
+ if (optionalZipCountries.indexOf(this.country) != -1) {
11539
+ while (this.zipElement.hasClassName('required-entry')) {
11540
+ this.zipElement.removeClassName('required-entry');
11541
+ }
11542
+ if (wildCard != undefined) {
11543
+ wildCard.hide();
11544
+ }
11545
+ } else {
11546
+ this.zipElement.addClassName('required-entry');
11547
+ if (wildCard != undefined) {
11548
+ wildCard.show();
11549
+ }
11550
+ }
11551
+ }
11552
+ }
11553
+
11554
+ /**
11555
+ * Magento
11556
+ *
11557
+ * NOTICE OF LICENSE
11558
+ *
11559
+ * This source file is subject to the Academic Free License (AFL 3.0)
11560
+ * that is bundled with this package in the file LICENSE_AFL.txt.
11561
+ * It is also available through the world-wide-web at this URL:
11562
+ * http://opensource.org/licenses/afl-3.0.php
11563
+ * If you did not receive a copy of the license and are unable to
11564
+ * obtain it through the world-wide-web, please send an email
11565
+ * to license@magentocommerce.com so we can send you a copy immediately.
11566
+ *
11567
+ * DISCLAIMER
11568
+ *
11569
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
11570
+ * versions in the future. If you wish to customize Magento for your
11571
+ * needs please refer to http://www.magentocommerce.com for more information.
11572
+ *
11573
+ * @category Mage
11574
+ * @package js
11575
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
11576
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
11577
+ */
11578
+
11579
+ var Translate = Class.create();
11580
+ Translate.prototype = {
11581
+ initialize: function(data){
11582
+ this.data = $H(data);
11583
+ },
11584
+
11585
+ translate : function(){
11586
+ var args = arguments;
11587
+ var text = arguments[0];
11588
+
11589
+ if(this.data.get(text)){
11590
+ return this.data.get(text);
11591
+ }
11592
+ return text;
11593
+ },
11594
+ add : function() {
11595
+ if (arguments.length > 1) {
11596
+ this.data.set(arguments[0], arguments[1]);
11597
+ } else if (typeof arguments[0] =='object') {
11598
+ $H(arguments[0]).each(function (pair){
11599
+ this.data.set(pair.key, pair.value);
11600
+ }.bind(this));
11601
+ }
11602
+ }
11603
+ }
11604
+
11605
+ /**
11606
+ * Magento
11607
+ *
11608
+ * NOTICE OF LICENSE
11609
+ *
11610
+ * This source file is subject to the Academic Free License (AFL 3.0)
11611
+ * that is bundled with this package in the file LICENSE_AFL.txt.
11612
+ * It is also available through the world-wide-web at this URL:
11613
+ * http://opensource.org/licenses/afl-3.0.php
11614
+ * If you did not receive a copy of the license and are unable to
11615
+ * obtain it through the world-wide-web, please send an email
11616
+ * to license@magentocommerce.com so we can send you a copy immediately.
11617
+ *
11618
+ * DISCLAIMER
11619
+ *
11620
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
11621
+ * versions in the future. If you wish to customize Magento for your
11622
+ * needs please refer to http://www.magentocommerce.com for more information.
11623
+ *
11624
+ * @category Mage
11625
+ * @package js
11626
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
11627
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
11628
+ */
11629
+ // old school cookie functions grabbed off the web
11630
+
11631
+ if (!window.Mage) var Mage = {};
11632
+
11633
+ Mage.Cookies = {};
11634
+ Mage.Cookies.expires = null;
11635
+ Mage.Cookies.path = '/';
11636
+ Mage.Cookies.domain = null;
11637
+ Mage.Cookies.secure = false;
11638
+ Mage.Cookies.set = function(name, value){
11639
+ var argv = arguments;
11640
+ var argc = arguments.length;
11641
+ var expires = (argc > 2) ? argv[2] : Mage.Cookies.expires;
11642
+ var path = (argc > 3) ? argv[3] : Mage.Cookies.path;
11643
+ var domain = (argc > 4) ? argv[4] : Mage.Cookies.domain;
11644
+ var secure = (argc > 5) ? argv[5] : Mage.Cookies.secure;
11645
+ document.cookie = name + "=" + escape (value) +
11646
+ ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
11647
+ ((path == null) ? "" : ("; path=" + path)) +
11648
+ ((domain == null) ? "" : ("; domain=" + domain)) +
11649
+ ((secure == true) ? "; secure" : "");
11650
+ };
11651
+
11652
+ Mage.Cookies.get = function(name){
11653
+ var arg = name + "=";
11654
+ var alen = arg.length;
11655
+ var clen = document.cookie.length;
11656
+ var i = 0;
11657
+ var j = 0;
11658
+ while(i < clen){
11659
+ j = i + alen;
11660
+ if (document.cookie.substring(i, j) == arg)
11661
+ return Mage.Cookies.getCookieVal(j);
11662
+ i = document.cookie.indexOf(" ", i) + 1;
11663
+ if(i == 0)
11664
+ break;
11665
+ }
11666
+ return null;
11667
+ };
11668
+
11669
+ Mage.Cookies.clear = function(name) {
11670
+ if(Mage.Cookies.get(name)){
11671
+ document.cookie = name + "=" +
11672
+ "; expires=Thu, 01-Jan-70 00:00:01 GMT";
11673
+ }
11674
+ };
11675
+
11676
+ Mage.Cookies.getCookieVal = function(offset){
11677
+ var endstr = document.cookie.indexOf(";", offset);
11678
+ if(endstr == -1){
11679
+ endstr = document.cookie.length;
11680
+ }
11681
+ return unescape(document.cookie.substring(offset, endstr));
11682
+ };
11683
+
11684
+ /*! jQuery v1.7.2 jquery.com | jquery.org/license */
11685
+ (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"<!doctype html>":"")+"<html><body>"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&f.type(b)==="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bZ(a,c,d,e,"*",g));return l}function bY(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?1:0,g=4;if(d>0){if(c!=="border")for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,"padding"+bx[e]))||0),c==="margin"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0;return d+"px"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,"padding"+bx[e]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+"px"}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?b.outerHTML=a.outerHTML:c!=="input"||a.type!=="checkbox"&&a.type!=="radio"?c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute("_submit_attached"),b.removeAttribute("_change_attached"))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c,i[c][d])}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.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):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.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=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d=="object"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?n(g):h==="function"&&(!a.unique||!p.has(g))&&c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&&f<=l&&(l--,f<=m&&m--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&p.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return!!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement("div"),q=c.documentElement;p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="<div "+n+"display:block;'><div style='"+t+"0;display:block;overflow:hidden;'></div></div>"+"<table "+n+"' cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="<table><tr><td style='"+t+"0;display:none'></td><td>t</td></tr></table>",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="<div style='width:5px;'></div>",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,"parsedAttrs")){g=j.attributes;for(i=g.length;k<i;k++)h=g[k].name,h.indexOf("data-")===0&&(h=f.camelCase(h.substring(5)),l(j,h,m[h]));f._data(j,"parsedAttrs",!0)}}return m}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!";return f.access(this,function(c){if(c===b){m=this.triggerHandler("getData"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));return m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler("setData"+e,d),f.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length<d)return f.queue(this[0],a);return c===b?this:this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return 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){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise(c)}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);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{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._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,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.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,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++)e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,""),a.removeAttribute(v?e:c),h&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.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,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.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):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.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;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(
11686
+ a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&&G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!=="click")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++)s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&r.push(s);r.length&&j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(this,c);return 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){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),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(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],g);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=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.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){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.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){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return 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(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return 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)}}),f.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){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9||d===11){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")[\\s/>]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={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,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f
11687
+ .clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,function(a,b){b.src?f.ajax({type:"GET",global:!1,url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1></$2>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]==="<table>"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&&f.nodeName(h,"script")&&(!h.type||be.test(h.type)))e.push(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName("script"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bp=/alpha\([^)]*\)/i,bq=/opacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\-+]?(?:\d*\.)?\d+$/i,bt=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,bu=/^([\-+])=([\-+.\de]+)/,bv=/^margin/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Top","Right","Bottom","Left"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[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","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),(e===""&&f.css(d,"display")==="none"||!f.contains(d.ownerDocument.documentElement,d))&&f._data(d,"olddisplay",cu(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ct("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(ct("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o,p,q;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]);if((k=f.cssHooks[g])&&"expand"in k){l=k.expand(a[g]),delete a[g];for(i in l)i in a||(a[i]=l[i])}}for(g in a){h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cu(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cm.test(h)?(q=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),q?(f._data(this,"toggle"+i,q==="show"?"hide":"show"),j[q]()):j[h]()):(m=cn.exec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?"":"px"),p!=="px"&&(f.style(this,i,(o||1)+p),n=(o||1)/j.cur()*n,f.style(this,i,n+p)),m[1]&&(o=(m[1]==="-="?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:ct("show",1),slideUp:ct("hide",1),slideToggle:ct("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a){return a},swing:function(a){return-Math.cos(a*Math.PI)/2+.5}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cq||cr(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){f._data(e.elem,"fxshow"+e.prop)===b&&(e.options.hide?f._data(e.elem,"fxshow"+e.prop,e.start):e.options.show&&f._data(e.elem,"fxshow"+e.prop,e.end))},h()&&f.timers.push(h)&&!co&&(co=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cq||cr(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(cp.concat.apply([],cp),function(a,b){b.indexOf("margin")&&(f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)})}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cv,cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?cv=function(a,b,c,d){try{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a))return d?{top:d.top,left:d.left}:{top:0,left:0};var g=b.body,h=cy(b),i=c.clientTop||g.clientTop||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&&c.scrollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&&c.scrollLeft||g.scrollLeft,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.currentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&&a!==h&&a!==c){if(f.support.fixedPosition&&j.position==="fixed")break;d=i?i.getComputedStyle(a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&&(k+=a.offsetTop,l+=a.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(a.nodeName))&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),j=d}if(j.position==="relative"||j.position==="static")k+=h.offsetTop,l+=h.offsetLeft;f.support.fixedPosition&&j.position==="fixed"&&(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)});var c=this[0],d=c&&c.ownerDocument;if(!d)return null;if(c===d.body)return f.offset.bodyOffset(c);return cv(c,d,d.documentElement)},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
11688
+ jQuery.noConflict();
11689
+ "function"!==typeof Object.create&&(Object.create=function(f){function h(){}h.prototype=f;return new h});
11690
+ (function(f,h,k,l){var m={init:function(a,b){this.$elem=f(b);this.options=f.extend({},f.fn.owlCarousel.options,this.$elem.data(),a);this.userOptions=a;this.loadContent()},loadContent:function(){var a=this;"function"===typeof a.options.beforeInit&&a.options.beforeInit.apply(this,[a.$elem]);"string"===typeof a.options.jsonPath?f.getJSON(a.options.jsonPath,function(b){if("function"===typeof a.options.jsonSuccess)a.options.jsonSuccess.apply(this,[b]);else{var e="",c;for(c in b.owl)e+=b.owl[c].item;a.$elem.html(e)}a.logIn()}):
11691
+ a.logIn()},logIn:function(a){this.$elem.data("owl-originalStyles",this.$elem.attr("style")).data("owl-originalClasses",this.$elem.attr("class"));this.$elem.css({opacity:0});this.orignalItems=this.options.items;this.checkBrowser();this.wrapperWidth=0;this.checkVisible;this.setVars()},setVars:function(){if(0===this.$elem.children().length)return!1;this.baseClass();this.eventTypes();this.$userItems=this.$elem.children();this.itemsAmount=this.$userItems.length;this.wrapItems();this.$owlItems=this.$elem.find(".owl-item");
11692
+ this.$owlWrapper=this.$elem.find(".owl-wrapper");this.playDirection="next";this.prevItem=0;this.prevArr=[0];this.currentItem=0;this.customEvents();this.onStartup()},onStartup:function(){this.updateItems();this.calculateAll();this.buildControls();this.updateControls();this.response();this.moveEvents();this.stopOnHover();this.owlStatus();!1!==this.options.transitionStyle&&this.transitionTypes(this.options.transitionStyle);!0===this.options.autoPlay&&(this.options.autoPlay=5E3);this.play();this.$elem.find(".owl-wrapper").css("display",
11693
+ "block");this.$elem.is(":visible")?this.$elem.css("opacity",1):this.watchVisibility();this.onstartup=!1;this.eachMoveUpdate();"function"===typeof this.options.afterInit&&this.options.afterInit.apply(this,[this.$elem])},eachMoveUpdate:function(){!0===this.options.lazyLoad&&this.lazyLoad();!0===this.options.autoHeight&&this.autoHeight();this.onVisibleItems();"function"===typeof this.options.afterAction&&this.options.afterAction.apply(this,[this.$elem])},updateVars:function(){"function"===typeof this.options.beforeUpdate&&
11694
+ this.options.beforeUpdate.apply(this,[this.$elem]);this.watchVisibility();this.updateItems();this.calculateAll();this.updatePosition();this.updateControls();this.eachMoveUpdate();"function"===typeof this.options.afterUpdate&&this.options.afterUpdate.apply(this,[this.$elem])},reload:function(a){var b=this;setTimeout(function(){b.updateVars()},0)},watchVisibility:function(){var a=this;if(!1===a.$elem.is(":visible"))a.$elem.css({opacity:0}),clearInterval(a.autoPlayInterval),clearInterval(a.checkVisible);
11695
+ else return!1;a.checkVisible=setInterval(function(){a.$elem.is(":visible")&&(a.reload(),a.$elem.animate({opacity:1},200),clearInterval(a.checkVisible))},500)},wrapItems:function(){this.$userItems.wrapAll('<div class="owl-wrapper">').wrap('<div class="owl-item"></div>');this.$elem.find(".owl-wrapper").wrap('<div class="owl-wrapper-outer">');this.wrapperOuter=this.$elem.find(".owl-wrapper-outer");this.$elem.css("display","block")},baseClass:function(){var a=this.$elem.hasClass(this.options.baseClass),
11696
+ b=this.$elem.hasClass(this.options.theme);a||this.$elem.addClass(this.options.baseClass);b||this.$elem.addClass(this.options.theme)},updateItems:function(){if(!1===this.options.responsive)return!1;if(!0===this.options.singleItem)return this.options.items=this.orignalItems=1,this.options.itemsCustom=!1,this.options.itemsDesktop=!1,this.options.itemsDesktopSmall=!1,this.options.itemsTablet=!1,this.options.itemsTabletSmall=!1,this.options.itemsMobile=!1;var a=f(this.options.responsiveBaseWidth).width();
11697
+ a>(this.options.itemsDesktop[0]||this.orignalItems)&&(this.options.items=this.orignalItems);if("undefined"!==typeof this.options.itemsCustom&&!1!==this.options.itemsCustom){this.options.itemsCustom.sort(function(a,b){return a[0]-b[0]});for(var b in this.options.itemsCustom)"undefined"!==typeof this.options.itemsCustom[b]&&this.options.itemsCustom[b][0]<=a&&(this.options.items=this.options.itemsCustom[b][1])}else a<=this.options.itemsDesktop[0]&&!1!==this.options.itemsDesktop&&(this.options.items=
11698
+ this.options.itemsDesktop[1]),a<=this.options.itemsDesktopSmall[0]&&!1!==this.options.itemsDesktopSmall&&(this.options.items=this.options.itemsDesktopSmall[1]),a<=this.options.itemsTablet[0]&&!1!==this.options.itemsTablet&&(this.options.items=this.options.itemsTablet[1]),a<=this.options.itemsTabletSmall[0]&&!1!==this.options.itemsTabletSmall&&(this.options.items=this.options.itemsTabletSmall[1]),a<=this.options.itemsMobile[0]&&!1!==this.options.itemsMobile&&(this.options.items=this.options.itemsMobile[1]);
11699
+ this.options.items>this.itemsAmount&&!0===this.options.itemsScaleUp&&(this.options.items=this.itemsAmount)},response:function(){var a=this,b;if(!0!==a.options.responsive)return!1;var e=f(h).width();a.resizer=function(){f(h).width()!==e&&(!1!==a.options.autoPlay&&clearInterval(a.autoPlayInterval),clearTimeout(b),b=setTimeout(function(){e=f(h).width();a.updateVars()},a.options.responsiveRefreshRate))};f(h).resize(a.resizer)},updatePosition:function(){this.jumpTo(this.currentItem);!1!==this.options.autoPlay&&
11700
+ this.checkAp()},appendItemsSizes:function(){var a=this,b=0,e=a.itemsAmount-a.options.items;a.$owlItems.each(function(c){var d=f(this);d.css({width:a.itemWidth}).data("owl-item",Number(c));if(0===c%a.options.items||c===e)c>e||(b+=1);d.data("owl-roundPages",b)})},appendWrapperSizes:function(){var a=0,a=this.$owlItems.length*this.itemWidth;this.$owlWrapper.css({width:2*a,left:0});this.appendItemsSizes()},calculateAll:function(){this.calculateWidth();this.appendWrapperSizes();this.loops();this.max()},
11701
+ calculateWidth:function(){this.itemWidth=Math.round(this.$elem.width()/this.options.items)},max:function(){var a=-1*(this.itemsAmount*this.itemWidth-this.options.items*this.itemWidth);this.options.items>this.itemsAmount?this.maximumPixels=a=this.maximumItem=0:(this.maximumItem=this.itemsAmount-this.options.items,this.maximumPixels=a);return a},min:function(){return 0},loops:function(){this.positionsInArray=[0];this.pagesInArray=[];for(var a=0,b=0,e=0;e<this.itemsAmount;e++)if(b+=this.itemWidth,this.positionsInArray.push(-b),
11702
+ !0===this.options.scrollPerPage){var c=f(this.$owlItems[e]).data("owl-roundPages");c!==a&&(this.pagesInArray[a]=this.positionsInArray[e],a=c)}},buildControls:function(){if(!0===this.options.navigation||!0===this.options.pagination)this.owlControls=f('<div class="owl-controls"/>').toggleClass("clickable",!this.browser.isTouch).appendTo(this.$elem);!0===this.options.pagination&&this.buildPagination();!0===this.options.navigation&&this.buildButtons()},buildButtons:function(){var a=this,b=f('<div class="owl-buttons"/>');
11703
+ a.owlControls.append(b);a.buttonPrev=f("<div/>",{"class":"owl-prev",html:a.options.navigationText[0]||""});a.buttonNext=f("<div/>",{"class":"owl-next",html:a.options.navigationText[1]||""});b.append(a.buttonPrev).append(a.buttonNext);b.on("touchstart.owlControls mousedown.owlControls",'div[class^="owl"]',function(a){a.preventDefault()});b.on("touchend.owlControls mouseup.owlControls",'div[class^="owl"]',function(b){b.preventDefault();f(this).hasClass("owl-next")?a.next():a.prev()})},buildPagination:function(){var a=
11704
+ this;a.paginationWrapper=f('<div class="owl-pagination"/>');a.owlControls.append(a.paginationWrapper);a.paginationWrapper.on("touchend.owlControls mouseup.owlControls",".owl-page",function(b){b.preventDefault();Number(f(this).data("owl-page"))!==a.currentItem&&a.goTo(Number(f(this).data("owl-page")),!0)})},updatePagination:function(){if(!1===this.options.pagination)return!1;this.paginationWrapper.html("");for(var a=0,b=this.itemsAmount-this.itemsAmount%this.options.items,e=0;e<this.itemsAmount;e++)if(0===
11705
+ e%this.options.items){a+=1;if(b===e)var c=this.itemsAmount-this.options.items;var d=f("<div/>",{"class":"owl-page"}),g=f("<span></span>",{text:!0===this.options.paginationNumbers?a:"","class":!0===this.options.paginationNumbers?"owl-numbers":""});d.append(g);d.data("owl-page",b===e?c:e);d.data("owl-roundPages",a);this.paginationWrapper.append(d)}this.checkPagination()},checkPagination:function(){var a=this;if(!1===a.options.pagination)return!1;a.paginationWrapper.find(".owl-page").each(function(b,
11706
+ e){f(this).data("owl-roundPages")===f(a.$owlItems[a.currentItem]).data("owl-roundPages")&&(a.paginationWrapper.find(".owl-page").removeClass("active"),f(this).addClass("active"))})},checkNavigation:function(){if(!1===this.options.navigation)return!1;!1===this.options.rewindNav&&(0===this.currentItem&&0===this.maximumItem?(this.buttonPrev.addClass("disabled"),this.buttonNext.addClass("disabled")):0===this.currentItem&&0!==this.maximumItem?(this.buttonPrev.addClass("disabled"),this.buttonNext.removeClass("disabled")):
11707
+ this.currentItem===this.maximumItem?(this.buttonPrev.removeClass("disabled"),this.buttonNext.addClass("disabled")):0!==this.currentItem&&this.currentItem!==this.maximumItem&&(this.buttonPrev.removeClass("disabled"),this.buttonNext.removeClass("disabled")))},updateControls:function(){this.updatePagination();this.checkNavigation();this.owlControls&&(this.options.items>=this.itemsAmount?this.owlControls.hide():this.owlControls.show())},destroyControls:function(){this.owlControls&&this.owlControls.remove()},
11708
+ next:function(a){if(this.isTransition)return!1;this.currentItem+=!0===this.options.scrollPerPage?this.options.items:1;if(this.currentItem>this.maximumItem+(!0==this.options.scrollPerPage?this.options.items-1:0))if(!0===this.options.rewindNav)this.currentItem=0,a="rewind";else return this.currentItem=this.maximumItem,!1;this.goTo(this.currentItem,a)},prev:function(a){if(this.isTransition)return!1;this.currentItem=!0===this.options.scrollPerPage&&0<this.currentItem&&this.currentItem<this.options.items?
11709
+ 0:this.currentItem-(!0===this.options.scrollPerPage?this.options.items:1);if(0>this.currentItem)if(!0===this.options.rewindNav)this.currentItem=this.maximumItem,a="rewind";else return this.currentItem=0,!1;this.goTo(this.currentItem,a)},goTo:function(a,b,e){var c=this;if(c.isTransition)return!1;"function"===typeof c.options.beforeMove&&c.options.beforeMove.apply(this,[c.$elem]);a>=c.maximumItem?a=c.maximumItem:0>=a&&(a=0);c.currentItem=c.owl.currentItem=a;if(!1!==c.options.transitionStyle&&"drag"!==
11710
+ e&&1===c.options.items&&!0===c.browser.support3d)return c.swapSpeed(0),!0===c.browser.support3d?c.transition3d(c.positionsInArray[a]):c.css2slide(c.positionsInArray[a],1),c.afterGo(),c.singleItemTransition(),!1;a=c.positionsInArray[a];!0===c.browser.support3d?(c.isCss3Finish=!1,!0===b?(c.swapSpeed("paginationSpeed"),setTimeout(function(){c.isCss3Finish=!0},c.options.paginationSpeed)):"rewind"===b?(c.swapSpeed(c.options.rewindSpeed),setTimeout(function(){c.isCss3Finish=!0},c.options.rewindSpeed)):
11711
+ (c.swapSpeed("slideSpeed"),setTimeout(function(){c.isCss3Finish=!0},c.options.slideSpeed)),c.transition3d(a)):!0===b?c.css2slide(a,c.options.paginationSpeed):"rewind"===b?c.css2slide(a,c.options.rewindSpeed):c.css2slide(a,c.options.slideSpeed);c.afterGo()},jumpTo:function(a){"function"===typeof this.options.beforeMove&&this.options.beforeMove.apply(this,[this.$elem]);a>=this.maximumItem||-1===a?a=this.maximumItem:0>=a&&(a=0);this.swapSpeed(0);!0===this.browser.support3d?this.transition3d(this.positionsInArray[a]):
11712
+ this.css2slide(this.positionsInArray[a],1);this.currentItem=this.owl.currentItem=a;this.afterGo()},afterGo:function(){this.prevArr.push(this.currentItem);this.prevItem=this.owl.prevItem=this.prevArr[this.prevArr.length-2];this.prevArr.shift(0);this.prevItem!==this.currentItem&&(this.checkPagination(),this.checkNavigation(),this.eachMoveUpdate(),!1!==this.options.autoPlay&&this.checkAp());"function"===typeof this.options.afterMove&&this.prevItem!==this.currentItem&&this.options.afterMove.apply(this,
11713
+ [this.$elem])},stop:function(){this.apStatus="stop";clearInterval(this.autoPlayInterval)},checkAp:function(){"stop"!==this.apStatus&&this.play()},play:function(){var a=this;a.apStatus="play";if(!1===a.options.autoPlay)return!1;clearInterval(a.autoPlayInterval);a.autoPlayInterval=setInterval(function(){a.next(!0)},a.options.autoPlay)},swapSpeed:function(a){"slideSpeed"===a?this.$owlWrapper.css(this.addCssSpeed(this.options.slideSpeed)):"paginationSpeed"===a?this.$owlWrapper.css(this.addCssSpeed(this.options.paginationSpeed)):
11714
+ "string"!==typeof a&&this.$owlWrapper.css(this.addCssSpeed(a))},addCssSpeed:function(a){return{"-webkit-transition":"all "+a+"ms ease","-moz-transition":"all "+a+"ms ease","-o-transition":"all "+a+"ms ease",transition:"all "+a+"ms ease"}},removeTransition:function(){return{"-webkit-transition":"","-moz-transition":"","-o-transition":"",transition:""}},doTranslate:function(a){return{"-webkit-transform":"translate3d("+a+"px, 0px, 0px)","-moz-transform":"translate3d("+a+"px, 0px, 0px)","-o-transform":"translate3d("+
11715
+ a+"px, 0px, 0px)","-ms-transform":"translate3d("+a+"px, 0px, 0px)",transform:"translate3d("+a+"px, 0px,0px)"}},transition3d:function(a){this.$owlWrapper.css(this.doTranslate(a))},css2move:function(a){this.$owlWrapper.css({left:a})},css2slide:function(a,b){var e=this;e.isCssFinish=!1;e.$owlWrapper.stop(!0,!0).animate({left:a},{duration:b||e.options.slideSpeed,complete:function(){e.isCssFinish=!0}})},checkBrowser:function(){var a=k.createElement("div");a.style.cssText=" -moz-transform:translate3d(0px, 0px, 0px); -ms-transform:translate3d(0px, 0px, 0px); -o-transform:translate3d(0px, 0px, 0px); -webkit-transform:translate3d(0px, 0px, 0px); transform:translate3d(0px, 0px, 0px)";
11716
+ var a=a.style.cssText.match(/translate3d\(0px, 0px, 0px\)/g),a=null!==a&&1===a.length,b=/MSIE ([0-9]+)/.exec(navigator.userAgent);null!==b&&10==b[1]?a=!0:(b=/Trident.*rv[ :]*([0-9]+)/.exec(navigator.userAgent),null!==b&&11<=b[1]&&(a=!0));this.browser={support3d:a,isTouch:"ontouchstart"in h||navigator.msMaxTouchPoints}},moveEvents:function(){if(!1!==this.options.mouseDrag||!1!==this.options.touchDrag)this.gestures(),this.disabledEvents()},eventTypes:function(){var a=["s","e","x"];this.ev_types={};
11717
+ !0===this.options.mouseDrag&&!0===this.options.touchDrag?a=["touchstart.owl mousedown.owl","touchmove.owl mousemove.owl","touchend.owl touchcancel.owl mouseup.owl"]:!1===this.options.mouseDrag&&!0===this.options.touchDrag?a=["touchstart.owl","touchmove.owl","touchend.owl touchcancel.owl"]:!0===this.options.mouseDrag&&!1===this.options.touchDrag&&(a=["mousedown.owl","mousemove.owl","mouseup.owl"]);this.ev_types.start=a[0];this.ev_types.move=a[1];this.ev_types.end=a[2]},disabledEvents:function(){this.$elem.on("dragstart.owl",
11718
+ function(a){a.preventDefault()});this.$elem.on("mousedown.disableTextSelect",function(a){return f(a.target).is("input, textarea, select, option")})},gestures:function(){function a(a){return a.touches?{x:a.touches[0].pageX,y:a.touches[0].pageY}:a.pageX!==l?{x:a.pageX,y:a.pageY}:{x:a.clientX,y:a.clientY}}function b(a){"on"===a?(f(k).on(d.ev_types.move,e),f(k).on(d.ev_types.end,c)):"off"===a&&(f(k).off(d.ev_types.move),f(k).off(d.ev_types.end))}function e(b){b=b.originalEvent||b||h.event;d.newPosX=a(b).x-
11719
+ g.offsetX;d.newPosY=a(b).y-g.offsetY;d.newRelativeX=d.newPosX-g.relativePos;"function"===typeof d.options.startDragging&&!0!==g.dragging&&0!==d.newRelativeX&&(g.dragging=!0,d.options.startDragging.apply(d,[d.$elem]));if(8<d.newRelativeX||-8>d.newRelativeX&&!0===d.browser.isTouch)b.preventDefault?b.preventDefault():b.returnValue=!1,g.sliding=!0;(10<d.newPosY||-10>d.newPosY)&&!1===g.sliding&&f(k).off("touchmove.owl");d.newPosX=Math.max(Math.min(d.newPosX,d.newRelativeX/5),d.maximumPixels+d.newRelativeX/
11720
+ 5);!0===d.browser.support3d?d.transition3d(d.newPosX):d.css2move(d.newPosX)}function c(a){a=a.originalEvent||a||h.event;a.target=a.target||a.srcElement;g.dragging=!1;!0!==d.browser.isTouch&&d.$owlWrapper.removeClass("grabbing");d.dragDirection=0>d.newRelativeX?d.owl.dragDirection="left":d.owl.dragDirection="right";if(0!==d.newRelativeX){var c=d.getNewPosition();d.goTo(c,!1,"drag");if(g.targetElement===a.target&&!0!==d.browser.isTouch){f(a.target).on("click.disable",function(b){b.stopImmediatePropagation();
11721
+ b.stopPropagation();b.preventDefault();f(a.target).off("click.disable")});var c=f._data(a.target,"events").click,e=c.pop();c.splice(0,0,e)}}b("off")}var d=this,g={offsetX:0,offsetY:0,baseElWidth:0,relativePos:0,position:null,minSwipe:null,maxSwipe:null,sliding:null,dargging:null,targetElement:null};d.isCssFinish=!0;d.$elem.on(d.ev_types.start,".owl-wrapper",function(c){c=c.originalEvent||c||h.event;if(3===c.which)return!1;if(!(d.itemsAmount<=d.options.items)){if(!1===d.isCssFinish&&!d.options.dragBeforeAnimFinish||
11722
+ !1===d.isCss3Finish&&!d.options.dragBeforeAnimFinish)return!1;!1!==d.options.autoPlay&&clearInterval(d.autoPlayInterval);!0===d.browser.isTouch||d.$owlWrapper.hasClass("grabbing")||d.$owlWrapper.addClass("grabbing");d.newPosX=0;d.newRelativeX=0;f(this).css(d.removeTransition());var e=f(this).position();g.relativePos=e.left;g.offsetX=a(c).x-e.left;g.offsetY=a(c).y-e.top;b("on");g.sliding=!1;g.targetElement=c.target||c.srcElement}})},getNewPosition:function(){var a;a=this.closestItem();a>this.maximumItem?
11723
+ a=this.currentItem=this.maximumItem:0<=this.newPosX&&(this.currentItem=a=0);return a},closestItem:function(){var a=this,b=!0===a.options.scrollPerPage?a.pagesInArray:a.positionsInArray,e=a.newPosX,c=null;f.each(b,function(d,g){e-a.itemWidth/20>b[d+1]&&e-a.itemWidth/20<g&&"left"===a.moveDirection()?(c=g,a.currentItem=!0===a.options.scrollPerPage?f.inArray(c,a.positionsInArray):d):e+a.itemWidth/20<g&&e+a.itemWidth/20>(b[d+1]||b[d]-a.itemWidth)&&"right"===a.moveDirection()&&(!0===a.options.scrollPerPage?
11724
+ (c=b[d+1]||b[b.length-1],a.currentItem=f.inArray(c,a.positionsInArray)):(c=b[d+1],a.currentItem=d+1))});return a.currentItem},moveDirection:function(){var a;0>this.newRelativeX?(a="right",this.playDirection="next"):(a="left",this.playDirection="prev");return a},customEvents:function(){var a=this;a.$elem.on("owl.next",function(){a.next()});a.$elem.on("owl.prev",function(){a.prev()});a.$elem.on("owl.play",function(b,e){a.options.autoPlay=e;a.play();a.hoverStatus="play"});a.$elem.on("owl.stop",function(){a.stop();
11725
+ a.hoverStatus="stop"});a.$elem.on("owl.goTo",function(b,e){a.goTo(e)});a.$elem.on("owl.jumpTo",function(b,e){a.jumpTo(e)})},stopOnHover:function(){var a=this;!0===a.options.stopOnHover&&!0!==a.browser.isTouch&&!1!==a.options.autoPlay&&(a.$elem.on("mouseover",function(){a.stop()}),a.$elem.on("mouseout",function(){"stop"!==a.hoverStatus&&a.play()}))},lazyLoad:function(){if(!1===this.options.lazyLoad)return!1;for(var a=0;a<this.itemsAmount;a++){var b=f(this.$owlItems[a]);if("loaded"!==b.data("owl-loaded")){var e=
11726
+ b.data("owl-item"),c=b.find(".lazyOwl"),d;"string"!==typeof c.data("src")?b.data("owl-loaded","loaded"):(b.data("owl-loaded")===l&&(c.hide(),b.addClass("loading").data("owl-loaded","checked")),(d=!0===this.options.lazyFollow?e>=this.currentItem:!0)&&e<this.currentItem+this.options.items&&c.length&&this.lazyPreload(b,c))}}},lazyPreload:function(a,b){function e(){f+=1;d.completeImg(b.get(0))||!0===h?c():100>=f?setTimeout(e,100):c()}function c(){a.data("owl-loaded","loaded").removeClass("loading");b.removeAttr("data-src");
11727
+ "fade"===d.options.lazyEffect?b.fadeIn(400):b.show();"function"===typeof d.options.afterLazyLoad&&d.options.afterLazyLoad.apply(this,[d.$elem])}var d=this,f=0;if("DIV"===b.prop("tagName")){b.css("background-image","url("+b.data("src")+")");var h=!0}else b[0].src=b.data("src");e()},autoHeight:function(){function a(){d+=1;e.completeImg(c.get(0))?b():100>=d?setTimeout(a,100):e.wrapperOuter.css("height","")}function b(){var a=f(e.$owlItems[e.currentItem]).height();e.wrapperOuter.css("height",a+"px");
11728
+ e.wrapperOuter.hasClass("autoHeight")||setTimeout(function(){e.wrapperOuter.addClass("autoHeight")},0)}var e=this,c=f(e.$owlItems[e.currentItem]).find("img");if(c.get(0)!==l){var d=0;a()}else b()},completeImg:function(a){return!a.complete||"undefined"!==typeof a.naturalWidth&&0==a.naturalWidth?!1:!0},onVisibleItems:function(){!0===this.options.addClassActive&&this.$owlItems.removeClass("active");this.visibleItems=[];for(var a=this.currentItem;a<this.currentItem+this.options.items;a++)this.visibleItems.push(a),
11729
+ !0===this.options.addClassActive&&f(this.$owlItems[a]).addClass("active");this.owl.visibleItems=this.visibleItems},transitionTypes:function(a){this.outClass="owl-"+a+"-out";this.inClass="owl-"+a+"-in"},singleItemTransition:function(){var a=this;a.isTransition=!0;var b=a.outClass,e=a.inClass,c=a.$owlItems.eq(a.currentItem),d=a.$owlItems.eq(a.prevItem),f=Math.abs(a.positionsInArray[a.currentItem])+a.positionsInArray[a.prevItem],h=Math.abs(a.positionsInArray[a.currentItem])+a.itemWidth/2;a.$owlWrapper.addClass("owl-origin").css({"-webkit-transform-origin":h+
11730
+ "px","-moz-perspective-origin":h+"px","perspective-origin":h+"px"});d.css({position:"relative",left:f+"px"}).addClass(b).on("webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend",function(){a.endPrev=!0;d.off("webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend");a.clearTransStyle(d,b)});c.addClass(e).on("webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend",function(){a.endCurrent=!0;c.off("webkitAnimationEnd oAnimationEnd MSAnimationEnd animationend");a.clearTransStyle(c,
11731
+ e)})},clearTransStyle:function(a,b){a.css({position:"",left:""}).removeClass(b);this.endPrev&&this.endCurrent&&(this.$owlWrapper.removeClass("owl-origin"),this.isTransition=this.endCurrent=this.endPrev=!1)},owlStatus:function(){this.owl={userOptions:this.userOptions,baseElement:this.$elem,userItems:this.$userItems,owlItems:this.$owlItems,currentItem:this.currentItem,prevItem:this.prevItem,visibleItems:this.visibleItems,isTouch:this.browser.isTouch,browser:this.browser,dragDirection:this.dragDirection}},
11732
+ clearEvents:function(){this.$elem.off(".owl owl mousedown.disableTextSelect");f(k).off(".owl owl");f(h).off("resize",this.resizer)},unWrap:function(){0!==this.$elem.children().length&&(this.$owlWrapper.unwrap(),this.$userItems.unwrap().unwrap(),this.owlControls&&this.owlControls.remove());this.clearEvents();this.$elem.attr("style",this.$elem.data("owl-originalStyles")||"").attr("class",this.$elem.data("owl-originalClasses"))},destroy:function(){this.stop();clearInterval(this.checkVisible);this.unWrap();
11733
+ this.$elem.removeData()},reinit:function(a){a=f.extend({},this.userOptions,a);this.unWrap();this.init(a,this.$elem)},addItem:function(a,b){var e;if(!a)return!1;if(0===this.$elem.children().length)return this.$elem.append(a),this.setVars(),!1;this.unWrap();e=b===l||-1===b?-1:b;e>=this.$userItems.length||-1===e?this.$userItems.eq(-1).after(a):this.$userItems.eq(e).before(a);this.setVars()},removeItem:function(a){if(0===this.$elem.children().length)return!1;a=a===l||-1===a?-1:a;this.unWrap();this.$userItems.eq(a).remove();
11734
+ this.setVars()}};f.fn.owlCarousel=function(a){return this.each(function(){if(!0===f(this).data("owl-init"))return!1;f(this).data("owl-init",!0);var b=Object.create(m);b.init(a,this);f.data(this,"owlCarousel",b)})};f.fn.owlCarousel.options={items:5,itemsCustom:!1,itemsDesktop:[1199,4],itemsDesktopSmall:[979,3],itemsTablet:[768,2],itemsTabletSmall:!1,itemsMobile:[479,1],singleItem:!1,itemsScaleUp:!1,slideSpeed:200,paginationSpeed:800,rewindSpeed:1E3,autoPlay:!1,stopOnHover:!1,navigation:!1,navigationText:["prev",
11735
+ "next"],rewindNav:!0,scrollPerPage:!1,pagination:!0,paginationNumbers:!1,responsive:!0,responsiveRefreshRate:200,responsiveBaseWidth:h,baseClass:"owl-carousel",theme:"owl-theme",lazyLoad:!1,lazyFollow:!0,lazyEffect:"fade",autoHeight:!1,jsonPath:!1,jsonSuccess:!1,dragBeforeAnimFinish:!0,mouseDrag:!0,touchDrag:!0,addClassActive:!1,transitionStyle:!1,beforeUpdate:!1,afterUpdate:!1,beforeInit:!1,afterInit:!1,beforeMove:!1,afterMove:!1,afterAction:!1,startDragging:!1,afterLazyLoad:!1}})(jQuery,window,
11736
+ document);
11737
+ /*
11738
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
11739
+ *
11740
+ * Uses the built in easing capabilities added In jQuery 1.1
11741
+ * to offer multiple easing options
11742
+ *
11743
+ * TERMS OF USE - jQuery Easing
11744
+ *
11745
+ * Open source under the BSD License.
11746
+ *
11747
+ * Copyright © 2008 George McGinley Smith
11748
+ * All rights reserved.
11749
+ *
11750
+ * Redistribution and use in source and binary forms, with or without modification,
11751
+ * are permitted provided that the following conditions are met:
11752
+ *
11753
+ * Redistributions of source code must retain the above copyright notice, this list of
11754
+ * conditions and the following disclaimer.
11755
+ * Redistributions in binary form must reproduce the above copyright notice, this list
11756
+ * of conditions and the following disclaimer in the documentation and/or other materials
11757
+ * provided with the distribution.
11758
+ *
11759
+ * Neither the name of the author nor the names of contributors may be used to endorse
11760
+ * or promote products derived from this software without specific prior written permission.
11761
+ *
11762
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
11763
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
11764
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
11765
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
11766
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
11767
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
11768
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
11769
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
11770
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
11771
+ *
11772
+ */
11773
+
11774
+ // t: current time, b: begInnIng value, c: change In value, d: duration
11775
+ jQuery.easing['jswing'] = jQuery.easing['swing'];
11776
+
11777
+ jQuery.extend( jQuery.easing,
11778
+ {
11779
+ def: 'easeOutQuad',
11780
+ swing: function (x, t, b, c, d) {
11781
+ //alert(jQuery.easing.default);
11782
+ return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
11783
+ },
11784
+ easeInQuad: function (x, t, b, c, d) {
11785
+ return c*(t/=d)*t + b;
11786
+ },
11787
+ easeOutQuad: function (x, t, b, c, d) {
11788
+ return -c *(t/=d)*(t-2) + b;
11789
+ },
11790
+ easeInOutQuad: function (x, t, b, c, d) {
11791
+ if ((t/=d/2) < 1) return c/2*t*t + b;
11792
+ return -c/2 * ((--t)*(t-2) - 1) + b;
11793
+ },
11794
+ easeInCubic: function (x, t, b, c, d) {
11795
+ return c*(t/=d)*t*t + b;
11796
+ },
11797
+ easeOutCubic: function (x, t, b, c, d) {
11798
+ return c*((t=t/d-1)*t*t + 1) + b;
11799
+ },
11800
+ easeInOutCubic: function (x, t, b, c, d) {
11801
+ if ((t/=d/2) < 1) return c/2*t*t*t + b;
11802
+ return c/2*((t-=2)*t*t + 2) + b;
11803
+ },
11804
+ easeInQuart: function (x, t, b, c, d) {
11805
+ return c*(t/=d)*t*t*t + b;
11806
+ },
11807
+ easeOutQuart: function (x, t, b, c, d) {
11808
+ return -c * ((t=t/d-1)*t*t*t - 1) + b;
11809
+ },
11810
+ easeInOutQuart: function (x, t, b, c, d) {
11811
+ if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
11812
+ return -c/2 * ((t-=2)*t*t*t - 2) + b;
11813
+ },
11814
+ easeInQuint: function (x, t, b, c, d) {
11815
+ return c*(t/=d)*t*t*t*t + b;
11816
+ },
11817
+ easeOutQuint: function (x, t, b, c, d) {
11818
+ return c*((t=t/d-1)*t*t*t*t + 1) + b;
11819
+ },
11820
+ easeInOutQuint: function (x, t, b, c, d) {
11821
+ if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
11822
+ return c/2*((t-=2)*t*t*t*t + 2) + b;
11823
+ },
11824
+ easeInSine: function (x, t, b, c, d) {
11825
+ return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
11826
+ },
11827
+ easeOutSine: function (x, t, b, c, d) {
11828
+ return c * Math.sin(t/d * (Math.PI/2)) + b;
11829
+ },
11830
+ easeInOutSine: function (x, t, b, c, d) {
11831
+ return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
11832
+ },
11833
+ easeInExpo: function (x, t, b, c, d) {
11834
+ return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
11835
+ },
11836
+ easeOutExpo: function (x, t, b, c, d) {
11837
+ return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
11838
+ },
11839
+ easeInOutExpo: function (x, t, b, c, d) {
11840
+ if (t==0) return b;
11841
+ if (t==d) return b+c;
11842
+ if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
11843
+ return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
11844
+ },
11845
+ easeInCirc: function (x, t, b, c, d) {
11846
+ return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
11847
+ },
11848
+ easeOutCirc: function (x, t, b, c, d) {
11849
+ return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
11850
+ },
11851
+ easeInOutCirc: function (x, t, b, c, d) {
11852
+ if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
11853
+ return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
11854
+ },
11855
+ easeInElastic: function (x, t, b, c, d) {
11856
+ var s=1.70158;var p=0;var a=c;
11857
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
11858
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
11859
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
11860
+ return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
11861
+ },
11862
+ easeOutElastic: function (x, t, b, c, d) {
11863
+ var s=1.70158;var p=0;var a=c;
11864
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
11865
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
11866
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
11867
+ return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
11868
+ },
11869
+ easeInOutElastic: function (x, t, b, c, d) {
11870
+ var s=1.70158;var p=0;var a=c;
11871
+ if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
11872
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
11873
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
11874
+ if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
11875
+ return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
11876
+ },
11877
+ easeInBack: function (x, t, b, c, d, s) {
11878
+ if (s == undefined) s = 1.70158;
11879
+ return c*(t/=d)*t*((s+1)*t - s) + b;
11880
+ },
11881
+ easeOutBack: function (x, t, b, c, d, s) {
11882
+ if (s == undefined) s = 1.70158;
11883
+ return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
11884
+ },
11885
+ easeInOutBack: function (x, t, b, c, d, s) {
11886
+ if (s == undefined) s = 1.70158;
11887
+ if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
11888
+ return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
11889
+ },
11890
+ easeInBounce: function (x, t, b, c, d) {
11891
+ return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
11892
+ },
11893
+ easeOutBounce: function (x, t, b, c, d) {
11894
+ if ((t/=d) < (1/2.75)) {
11895
+ return c*(7.5625*t*t) + b;
11896
+ } else if (t < (2/2.75)) {
11897
+ return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
11898
+ } else if (t < (2.5/2.75)) {
11899
+ return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
11900
+ } else {
11901
+ return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
11902
+ }
11903
+ },
11904
+ easeInOutBounce: function (x, t, b, c, d) {
11905
+ if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
11906
+ return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
11907
+ }
11908
+ });
11909
+
11910
+ /*
11911
+ *
11912
+ * TERMS OF USE - EASING EQUATIONS
11913
+ *
11914
+ * Open source under the BSD License.
11915
+ *
11916
+ * Copyright © 2001 Robert Penner
11917
+ * All rights reserved.
11918
+ *
11919
+ * Redistribution and use in source and binary forms, with or without modification,
11920
+ * are permitted provided that the following conditions are met:
11921
+ *
11922
+ * Redistributions of source code must retain the above copyright notice, this list of
11923
+ * conditions and the following disclaimer.
11924
+ * Redistributions in binary form must reproduce the above copyright notice, this list
11925
+ * of conditions and the following disclaimer in the documentation and/or other materials
11926
+ * provided with the distribution.
11927
+ *
11928
+ * Neither the name of the author nor the names of contributors may be used to endorse
11929
+ * or promote products derived from this software without specific prior written permission.
11930
+ *
11931
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
11932
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
11933
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
11934
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
11935
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
11936
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
11937
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
11938
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
11939
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
11940
+ *
11941
+ */
11942
+
11943
+ (function(jQuery){
11944
+ jQuery.fn.extend({
11945
+ accordion: function() {
11946
+ return this.each(function() {
11947
+
11948
+ var listObject = jQuery(this),
11949
+ elementDataKey = 'accordiated',
11950
+ activeClassName = 'active',
11951
+ activationEffect = 'slideToggle',
11952
+ panelSelector = 'ul, div',
11953
+ activationEffectSpeed = 'fast',
11954
+ itemSelector = 'li';
11955
+
11956
+ if(listObject.data(elementDataKey))
11957
+ return false;
11958
+
11959
+ jQuery.each(listObject.find('ul, li>div'), function(){
11960
+ jQuery(this).data(elementDataKey, true);
11961
+ jQuery(this).hide();
11962
+ });
11963
+
11964
+ jQuery.each(listObject.find('span.opener'), function(){
11965
+ jQuery(this).click(function(e){
11966
+ activate(this, activationEffect);
11967
+ return void(0);
11968
+ });
11969
+
11970
+ jQuery(this).bind('activate-node', function(){
11971
+ listObject.find( panelSelector ).not(jQuery(this).parents()).not(jQuery(this).siblings()).slideUp( activationEffectSpeed );
11972
+ activate(this,'slideDown');
11973
+ });
11974
+ });
11975
+
11976
+ var active = (location.hash)?listObject.find('a[href=\'' + location.hash + '\']')[0]:listObject.find('li.current a')[0];
11977
+
11978
+ if(active){
11979
+ activate(active, false);
11980
+ }
11981
+
11982
+ function activate(el,effect){
11983
+
11984
+ jQuery(el).parent( itemSelector ).siblings().removeClass(activeClassName).children( panelSelector ).slideUp( activationEffectSpeed );
11985
+
11986
+ jQuery(el).siblings( panelSelector )[(effect || activationEffect)](((effect == "show")?activationEffectSpeed:false),function(){
11987
+
11988
+ if(jQuery(el).siblings( panelSelector ).is(':visible')){
11989
+ jQuery(el).parents( itemSelector ).not(listObject.parents()).addClass(activeClassName);
11990
+ } else {
11991
+ jQuery(el).parent( itemSelector ).removeClass(activeClassName);
11992
+ }
11993
+
11994
+ if(effect == 'show'){
11995
+ jQuery(el).parents( itemSelector ).not(listObject.parents()).addClass(activeClassName);
11996
+ }
11997
+
11998
+ jQuery(el).parents().show();
11999
+
12000
+ });
12001
+
12002
+ }
12003
+
12004
+ });
12005
+ }
12006
+ });
12007
+ })(jQuery);
12008
+
12009
+ jQuery(function($) {
12010
+
12011
+ // $(".accordion li.parent").each(function(){
12012
+ // $(this).append('<span class="opener new">&nbsp;</span>');
12013
+ // });
12014
+
12015
+ $('.accordion').accordion();
12016
+
12017
+ $('.accordion').each(function(index){
12018
+ var activeItems = $(this).find('li.active');
12019
+ activeItems.each(function(i){
12020
+ $(this).children('ul').css('display', 'block');
12021
+ if (i == activeItems.length - 1)
12022
+ {
12023
+ $(this).addClass("current");
12024
+ }
12025
+ });
12026
+ });
12027
+
12028
+ });
12029
+
12030
+ (function($){$.tools=$.tools||{version:'latest'};$.tools.tabs={conf:{tabs:'a',current:'current',onBeforeClick:null,onClick:null,effect:'default',initialEffect:false,initialIndex:0,event:'click',rotate:false,slideUpSpeed:400,slideDownSpeed:400,history:false},addEffect:function(a,b){j[a]=b}};var j={'default':function(i,a){this.getPanes().hide().eq(i).show();a.call()},fade:function(i,a){var b=this.getConf(),speed=b.fadeOutSpeed,panes=this.getPanes();if(speed){panes.fadeOut(speed)}else{panes.hide()}panes.eq(i).fadeIn(b.fadeInSpeed,a)},slide:function(i,a){var b=this.getConf();this.getPanes().slideUp(b.slideUpSpeed);this.getPanes().eq(i).slideDown(b.slideDownSpeed,a)},ajax:function(i,a){this.getPanes().eq(0).load(this.getTabs().eq(i).attr("href"),a)}};var k,w;$.tools.tabs.addEffect("horizontal",function(i,b){if(k)return;var c=this.getPanes().eq(i),currentPane=this.getCurrentPane();w||(w=this.getPanes().eq(0).width());k=true;c.show();currentPane.animate({width:0},{step:function(a){c.css("width",w-a)},complete:function(){$(this).hide();b.call();k=false}});if(!currentPane.length){b.call();k=false}});function Tabs(d,f,g){var h=this,trigger=d.add(this),tabs=d.find(g.tabs),panes=f.jquery?f:d.children(f),current;if(!tabs.length){tabs=d.children()}if(!panes.length){panes=d.parent().find(f)}if(!panes.length){panes=$(f)}$.extend(this,{click:function(i,e){var a=tabs.eq(i),firstRender=!d.data('tabs');if(typeof i=='string'&&i.replace("#","")){a=tabs.filter("[href*=\""+i.replace("#","")+"\"]");i=Math.max(tabs.index(a),0)}if(g.rotate){var b=tabs.length-1;if(i<0){return h.click(b,e)}if(i>b){return h.click(0,e)}}if(!a.length){if(current>=0){return h}i=g.initialIndex;a=tabs.eq(i)}if(i===current){return h}e=e||$.Event();e.type="onBeforeClick";trigger.trigger(e,[i]);if(e.isDefaultPrevented()){return}var c=firstRender?g.initialEffect&&g.effect||'default':g.effect;j[c].call(h,i,function(){current=i;e.type="onClick";trigger.trigger(e,[i])});tabs.removeClass(g.current);a.addClass(g.current);return h},getConf:function(){return g},getTabs:function(){return tabs},getPanes:function(){return panes},getCurrentPane:function(){return panes.eq(current)},getCurrentTab:function(){return tabs.eq(current)},getIndex:function(){return current},next:function(){return h.click(current+1)},prev:function(){return h.click(current-1)},destroy:function(){tabs.off(g.event).removeClass(g.current);panes.find("a[href^=\"#\"]").off("click.T");return h}});$.each("onBeforeClick,onClick".split(","),function(i,b){if($.isFunction(g[b])){$(h).on(b,g[b])}h[b]=function(a){if(a){$(h).on(b,a)}return h}});if(g.history&&$.fn.history){$.tools.history.init(tabs);g.event='history'}tabs.each(function(i){$(this).on(g.event,function(e){h.click(i,e);return e.preventDefault()})});panes.find("a[href^=\"#\"]").on("click.T",function(e){h.click($(this).attr("href"),e)});if(location.hash&&g.tabs=="a"&&d.find("[href=\""+location.hash+"\"]").length){h.click(location.hash)}else{if(g.initialIndex===0||g.initialIndex>0){h.click(g.initialIndex)}}}$.fn.tabs=function(a,b){var c=this.data("tabs");if(c){c.destroy();this.removeData("tabs")}if($.isFunction(b)){b={onBeforeClick:b}}b=$.extend({},$.tools.tabs.conf,b);this.each(function(){c=new Tabs($(this),a,b);$(this).data("tabs",c)});return b.api?c:this}})(jQuery);
12031
+ /*
12032
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
12033
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
12034
+ *
12035
+ * Copyright (c) 2010 "Cowboy" Ben Alman
12036
+ * Dual licensed under the MIT and GPL licenses.
12037
+ * http://benalman.com/about/license/
12038
+ */
12039
+ (function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
skin/frontend/default/default/css/responsivebanner/images/857055-0115_1_2.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/870044-0032_1_2.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/917397-0134_1_1_1_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/928172-0484_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/996093-0100_1(1).jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/996093-0100_1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/a7629b8024b8ff12739117f186c33375.css ADDED
@@ -0,0 +1,9403 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Reset %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
3
+
4
+ * { margin:0; padding:0; }
5
+ html { font-size:16px; /* Fix for Opera */ }
6
+ body { font:75%/150% Arial, Helvetica, sans-serif; background-color:#fff; color:#333; text-align:center; }
7
+ #root-wrapper {}
8
+
9
+ img { border:0; vertical-align:top; max-width:100%; }
10
+
11
+ a { color:#888; text-decoration:none; }
12
+ a:hover { text-decoration:none; color:#ca0413; }
13
+ :focus { outline:0; }
14
+
15
+ /* Headings */
16
+ h1,h2,h3,
17
+ h4,h5,h6 { margin:0 0 10px; font-weight:normal; }
18
+ h1 { font-size:2.6666em; line-height:1.25em; /*32px, 40px*/ margin-bottom:20px; }
19
+ h2 { font-size:2em; line-height:1.25em; /*24px, 30px*/ }
20
+ h3 { font-size:1.6666em; line-height:1.2em; /*20px, 24px*/ }
21
+ h4 { font-size:1.3333em; line-height:1.25em; /*16px, 20px*/ }
22
+ h5 { font-size:1.1666em; line-height:1.1428em; /*14px, 16px*/ }
23
+ h6 { font-size:1em; line-height:1.1666em; /*12px, 14px*/ }
24
+
25
+ /* Forms */
26
+ form { display:inline; }
27
+ fieldset { border:0; }
28
+ legend { display:none; }
29
+
30
+ /* Table */
31
+ table { border:0; border-collapse:collapse; border-spacing:0; empty-cells:show; font-size:100%; }
32
+ caption,th,td { vertical-align:top; text-align:left; font-weight:normal; }
33
+
34
+ /* Content */
35
+ strong { font-weight:bold; }
36
+ address { font-style:normal; }
37
+ cite { font-style:normal; }
38
+ q,
39
+ blockquote { quotes:none; }
40
+ q:before,
41
+ q:after { content:''; }
42
+ small,big { font-size:1em; }
43
+ sup { font-size:1em; vertical-align:top; }
44
+
45
+ /* Lists */
46
+ ul,ol { list-style:none; }
47
+
48
+ /* Tools */
49
+ .hidden { display:block !important; border:0 !important; margin:0 !important; padding:0 !important; font-size:0 !important; line-height:0 !important; width:0 !important; height:0 !important; overflow:hidden !important; }
50
+ .nobr { white-space:nowrap !important; }
51
+ .wrap { white-space:normal !important; }
52
+ .a-left { text-align:left !important; }
53
+ .a-center { text-align:center !important; }
54
+ .a-right { text-align:right !important; }
55
+ .v-top { vertical-align:top; }
56
+ .v-middle { vertical-align:middle; }
57
+ .f-left,
58
+ .left { float:left !important; }
59
+ .f-right,
60
+ .right { float:right !important; }
61
+ .f-none { float:none !important; }
62
+ .f-fix { float:left; width:100%; min-height:147px; position:relative; }
63
+ .no-display { display:none; }
64
+ .no-margin { margin:0 !important; }
65
+ .no-padding { padding:0 !important; }
66
+ .no-bg { background:none !important; }
67
+
68
+
69
+
70
+ /* Layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
71
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
72
+
73
+ .wrapper {}
74
+ .page { text-align:left; background-repeat:repeat; background-position:center top; }
75
+ .page-print { background:#fff; padding:20px; text-align:left; }
76
+ .page-empty { background:#fff; padding:20px; text-align:left; }
77
+ .page-popup { padding:20px; text-align:left; background:#fff; }
78
+
79
+ .main-container { background-repeat:repeat; background-position:center top; }
80
+ .main { padding:20px 0; min-height:370px; }
81
+ /* Decrease padding on home page */
82
+ body.cms-index-index .main,
83
+ body.cms-index-defaultindex .main { padding-top:20px; padding-bottom:20px; }
84
+
85
+ /* Base Columns */
86
+ .col-left { float:left; }
87
+ .col-main { float:left; }
88
+ .col-right { float:right; }
89
+
90
+ /* 1 Column Layout */
91
+ .col1-layout .col-main {}
92
+
93
+ /* 2 Columns Layout */
94
+ .col2-left-layout .col-main { float:right; }
95
+ .col2-right-layout .col-main {}
96
+
97
+ /* 3 Columns Layout */
98
+ .col3-layout .col-main {}
99
+ .col3-layout .col-wrapper { float:left; }
100
+ .col3-layout .col-wrapper .col-main { float:right; }
101
+
102
+ /* Content Columns */
103
+ .col2-set .col-1 { float:left; width:49%; }
104
+ .col2-set .col-2 { float:right; width:49%; }
105
+ .col2-set .col-narrow { width:33%; }
106
+ .col2-set .col-wide { width:65%; }
107
+
108
+ .col3-set .col-1 { float:left; width:32%; }
109
+ .col3-set .col-2 { float:left; width:32%; margin-left:2%; }
110
+ .col3-set .col-3 { float:right; width:32%; }
111
+
112
+ .col4-set .col-1 { float:left; width:23.5%; }
113
+ .col4-set .col-2 { float:left; width:23.5%; margin:0 2%; }
114
+ .col4-set .col-3 { float:left; width:23.5%; }
115
+ .col4-set .col-4 { float:right; width:23.5%; }
116
+
117
+
118
+
119
+ /* Global Styles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
120
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
121
+
122
+ /* Form Elements
123
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
124
+ */
125
+ /* Basic
126
+ -------------------------------------------------------------- */
127
+ input, select, textarea, button {
128
+ font:12px/15px Arial, Helvetica, sans-serif;
129
+ vertical-align:middle;
130
+ }
131
+ /* Fix: remove default formatting on iOS (e.g. rounded corners) */
132
+ input.input-text, textarea { -webkit-appearance:none; }
133
+ input.input-text, select, textarea {
134
+ background:#fff;
135
+ border:1px solid #ddd;
136
+ color:#888;
137
+
138
+ /* Box model */
139
+ -webkit-box-sizing: border-box;
140
+ -moz-box-sizing: border-box;
141
+ box-sizing: border-box;
142
+
143
+ /* Remove default formatting, fix for iOS (rounded corners and shadow) */
144
+ -webkit-border-radius:0px;
145
+ border-radius:0px;
146
+ -webkit-box-shadow:none;
147
+ box-shadow:none;
148
+ }
149
+ input.input-text{
150
+ height: 36px;
151
+ }
152
+ select {
153
+ height:36px;
154
+ padding:8px;
155
+ text-overflow:ellipsis;
156
+ }
157
+ select.multiselect {
158
+ height: auto;
159
+ }
160
+ input.input-text, textarea {
161
+ padding:8px;
162
+ text-overflow:ellipsis;
163
+ }
164
+
165
+ select option { padding-right:10px; padding-left:5px; }
166
+ select.multiselect option { border-bottom:1px solid #eee; padding:2px 5px; }
167
+ select.multiselect option:last-child { border-bottom:0; }
168
+ textarea { overflow:auto; }
169
+ input.radio { margin-right:3px; }
170
+ input.checkbox { margin-right:3px; }
171
+ input.qty { width:3em !important; text-align:center; }
172
+
173
+ /* Active and others
174
+ -------------------------------------------------------------- */
175
+ input.input-text:hover, select:hover, textarea:hover,
176
+ input.input-text:focus, select:focus, textarea:focus { border-color:#aaa; color:#333; outline:none; }
177
+ input.input-text:disabled,
178
+ select:disabled,
179
+ textarea:disabled {}
180
+
181
+
182
+ /* Buttons
183
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
184
+ */
185
+ button.button::-moz-focus-inner { padding:0; border:0; } /* FF Fix */
186
+ button.button {
187
+ -webkit-border-fit:lines; /* <- Safari & Google Chrome Fix */
188
+ overflow:visible; width:auto; border:0; padding:0; margin:0; background:transparent; cursor:pointer;
189
+ }
190
+ button.button span {
191
+ float:left;
192
+ display:block;
193
+ padding:0;
194
+ font-size:12px;
195
+ text-align:center;
196
+ white-space:nowrap;
197
+ background-color:#ddd;
198
+ color:#333;
199
+
200
+ transition: color 300ms ease-in-out, background-color 300ms ease-in-out;
201
+ -moz-transition: color 300ms ease-in-out, background-color 300ms ease-in-out;
202
+ -webkit-transition: color 300ms ease-in-out, background-color 300ms ease-in-out;
203
+ -o-transition: color 300ms ease-in-out, background-color 300ms ease-in-out;
204
+ }
205
+ button.button:hover span { background-color:#333; color:#fff; }
206
+ button.button span span { padding:0 25px; height:45px; line-height:45px; }
207
+
208
+ /* Smaller button - for inline display with input boxes
209
+ -------------------------------------------------------------- */
210
+ button.button.btn-inline span span,
211
+ .product-view .box-tags .form-add button.button span span { padding:0 10px; line-height:36px; height:36px; }
212
+
213
+ /* Big button: Add to cart (product view) & Proceed to checkout
214
+ -------------------------------------------------------------- */
215
+ /*.product-view .btn-cart span,
216
+ button.btn-checkout span {}*/
217
+ .product-view .btn-cart span span,
218
+ button.btn-checkout span span { padding:5px 25px; font-size:1.1666em; /*14px*/ }
219
+
220
+
221
+ /* Form
222
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
223
+ */
224
+ p.control input.checkbox,
225
+ p.control input.radio { margin-right:6px; }
226
+
227
+ /* Form lists */
228
+ /* Grouped fields */
229
+ .form-list li { margin:0 0 8px; }
230
+ .form-list label { float:left; font-weight:bold; position:relative; z-index:0; margin:0 0 2px 0; }
231
+ .form-list label.required {}
232
+ .form-list label.required em { float:right; font-style:normal; position:absolute; top:0; right:-8px; }
233
+ .form-list li.control label { float:none; }
234
+ .form-list li.control input.radio,
235
+ .form-list li.control input.checkbox { margin-right:6px; }
236
+ .form-list li.control .input-box { clear:none; display:inline; width:auto; }
237
+ .form-list .input-box { display:block; clear:both; }
238
+ .form-list .field { float:left; width:275px; margin-bottom:5px; }
239
+ .form-list input.input-text { width:262px; /*244px;*/ }
240
+ .form-list textarea { width:244px; height:10em; }
241
+ .form-list select { width:262px; }
242
+ .form-list li.wide .input-box { /*width:535px;*/ }
243
+ .form-list li.wide input.input-text { /*width:529px;*/ }
244
+ .form-list li.wide textarea { /*width:529px;*/ }
245
+ .form-list li.wide select { /*width:535px;*/ }
246
+ .form-list li.additional-row { border-top:1px solid #e5e5e5; margin-top:10px; }
247
+ .form-list li.additional-row .btn-remove { float:right; margin:5px 0 0; }
248
+ .form-list .input-range input.input-text { width:74px; }
249
+ /* Customer */
250
+ .form-list .customer-name-prefix .input-box,
251
+ .form-list .customer-name-suffix .input-box,
252
+ .form-list .customer-name-prefix-suffix .input-box,
253
+ .form-list .customer-name-prefix-middlename .input-box,
254
+ .form-list .customer-name-middlename-suffix .input-box,
255
+ .form-list .customer-name-prefix-middlename-suffix .input-box { width:auto; }
256
+
257
+ .form-list .name-prefix { width:65px; }
258
+ .form-list .name-prefix select { width:55px; }
259
+ .form-list .name-prefix input.input-text { width:49px; }
260
+
261
+ .form-list .name-suffix { width:65px; }
262
+ .form-list .name-suffix select { width:55px; }
263
+ .form-list .name-suffix input.input-text { width:49px; }
264
+
265
+ .form-list .name-middlename { width:70px; }
266
+ .form-list .name-middlename input.input-text { width:49px; }
267
+
268
+ .form-list .customer-name-prefix-middlename-suffix .name-firstname,
269
+ .form-list .customer-name-prefix-middlename .name-firstname { width:140px; }
270
+ .form-list .customer-name-prefix-middlename-suffix .name-firstname input.input-text,
271
+ .form-list .customer-name-prefix-middlename .name-firstname input.input-text { width:124px; }
272
+ .form-list .customer-name-prefix-middlename-suffix .name-lastname { width:205px; }
273
+ .form-list .customer-name-prefix-middlename-suffix .name-lastname input.input-text { width:189px; }
274
+
275
+ .form-list .customer-name-prefix-suffix .name-firstname { width:210px; }
276
+ .form-list .customer-name-prefix-suffix .name-lastname { width:205px; }
277
+ .form-list .customer-name-prefix-suffix .name-firstname input.input-text,
278
+ .form-list .customer-name-prefix-suffix .name-lastname input.input-text { width:189px; }
279
+
280
+ .form-list .customer-name-prefix .name-firstname,
281
+ .form-list .customer-name-middlename .name-firstname { width:210px; }
282
+
283
+ .form-list .customer-name-suffix .name-lastname,
284
+ .form-list .customer-name-middlename .name-firstname,
285
+ .form-list .customer-name-middlename-suffix .name-firstname,
286
+ .form-list .customer-name-middlename-suffix .name-lastname { width:205px; }
287
+
288
+ .form-list .customer-name-prefix .name-firstname input.input-text,
289
+ .form-list .customer-name-suffix .name-lastname input.input-text,
290
+ .form-list .customer-name-middlename .name-firstname input.input-text,
291
+ .form-list .customer-name-middlename-suffix .name-firstname input.input-text,
292
+ .form-list .customer-name-middlename-suffix .name-lastname input.input-text { width:189px; }
293
+
294
+ .form-list .customer-dob .dob-month,
295
+ .form-list .customer-dob .dob-day,
296
+ .form-list .customer-dob .dob-year { float:left; width:85px; }
297
+ .form-list .customer-dob input.input-text { display:block; width:74px; }
298
+ .form-list .customer-dob label { font-size:10px; font-weight:normal; }
299
+ .form-list .customer-dob .dob-day,
300
+ .form-list .customer-dob .dob-month { width:60px; }
301
+ .form-list .customer-dob .dob-day input.input-text,
302
+ .form-list .customer-dob .dob-month input.input-text { width:46px; }
303
+ .form-list .customer-dob .dob-year { width:140px; }
304
+ .form-list .customer-dob .dob-year input.input-text { width:134px; }
305
+
306
+ /* Orders and Returns form
307
+ -------------------------------------------------------------- */
308
+ #oar_widget_orders_and_returns_form .buttons-set button { float: left; }
309
+ #oar_widget_orders_and_returns_form .buttons-set .required { text-align: left; }
310
+
311
+ /* Fieldset
312
+ -------------------------------------------------------------- */
313
+ /* Common styles for fieldsets and blocks in Multiple Addresses Checkout and Generic Info Set */
314
+ .fieldset,
315
+ .multiple-checkout .col2-set,
316
+ .multiple-checkout .col3-set,
317
+ .info-set {
318
+ margin:0 0 10px;
319
+ padding:0;
320
+ }
321
+ .fieldset .legend,
322
+ .multiple-checkout .col2-set h2.legend,
323
+ .info-set h2.legend {}
324
+
325
+ /* Buttons set
326
+ -------------------------------------------------------------- */
327
+ .buttons-set { clear:both; margin:10px 0; }
328
+ .buttons-set button.button { float:right; margin-right:5px; margin-bottom:5px; }
329
+ .buttons-set p.required { margin:0 5px 5px 0; }
330
+
331
+ .contacts-index-index .buttons-set { float:left; margin-top:-10px; }
332
+ .contacts-index-index .buttons-set .required { text-align:left; }
333
+
334
+ .buttons-set .back-link { float:left; margin-bottom:5px; }
335
+ .buttons-set .back-link a { display:block; line-height:36px; /* Icon size */ }
336
+ .buttons-set .back-link small {
337
+ display:inline-block;
338
+ margin-right:5px;
339
+ width:36px;
340
+ height:36px;
341
+ text-indent:-9999px;
342
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
343
+ background-position:-107px -107px;
344
+ }
345
+ .buttons-set .back-link:hover small {
346
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
347
+ background-position:-107px -157px;
348
+ }
349
+
350
+ /* Form Validation
351
+ -------------------------------------------------------------- */
352
+ .validation-advice { clear:both; font-size:0.9166em; line-height:1em; color:#ee001c; margin-top:5px; }
353
+ .validation-failed { border:1px solid #ee001c !important; background:#fff !important; }
354
+ .validation-passed {}
355
+
356
+ /* Required */
357
+ p.required { font-size:0.8333em; /*10px*/ text-align:right; }
358
+ p.required,
359
+ .product-options dt label.required em,
360
+ .form-list label.required em { color:#ee001c; }
361
+
362
+ /* Expiration date and CVV number validation fix */
363
+ .v-fix { float:left; }
364
+ .v-fix .validation-advice { display:block; width:12em; margin-right:-12em; position:relative; }
365
+
366
+ /* Specific buttons set
367
+ -------------------------------------------------------------- */
368
+
369
+ /* Log in */
370
+ .account-login .buttons-set button span span,
371
+ /* Create account */
372
+ .account-create .buttons-set button span span,
373
+ /* Forgot password */
374
+ .customer-account-forgotpassword .buttons-set button span span,
375
+ /* Orders and Returns form */
376
+ #oar_widget_orders_and_returns_form .buttons-set button span span,
377
+ /* Contact us */
378
+ .contacts-index-index .buttons-set .button span span
379
+ {
380
+ min-width: 120px;
381
+ }
382
+
383
+
384
+ /* Global Messages
385
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
386
+ */
387
+ .success { color:#3d6611; font-weight:bold; }
388
+ .error { color:#ee001c; font-weight:bold; }
389
+ .notice { color:#ccc; }
390
+
391
+ .messages,
392
+ .messages ul { list-style:none !important; margin:0; padding:0; }
393
+ .messages { overflow:hidden; margin:0 0 10px; }
394
+ .messages li { margin:0 0 1%; }
395
+ .messages > li:last-child { margin-bottom:0; }
396
+ .messages li li { margin:0; }
397
+ .messages a { text-decoration:underline; }
398
+ .catalog-category-view .messages { margin-top:15px; margin-bottom:15px; }
399
+ .cms-index-index .messages,
400
+ .cms-home .messages { margin:20px 0 20px; }
401
+
402
+ .error-msg,
403
+ .success-msg,
404
+ .note-msg,
405
+ .notice-msg {
406
+ background-position:25px center !important;
407
+ background-repeat:no-repeat !important;
408
+ padding:25px 25px 25px 80px !important;
409
+ font-size:12px !important;
410
+ }
411
+ .error-msg {
412
+ border-color:#c02230;
413
+ background-color:#F5DAD3;
414
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/i_msg-error.png);
415
+ color:#c02230;
416
+ }
417
+ .success-msg {
418
+ border-color:#296a23;
419
+ background-color:#e9ffca;
420
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/i_msg-success.png);
421
+ color:#296a23;
422
+ }
423
+ .note-msg,
424
+ .notice-msg {
425
+ border-color:#7c622a;
426
+ background-color:#FDEDA4;
427
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/i_msg-note.png);
428
+ color:#7c622a;
429
+ }
430
+
431
+
432
+ /* BreadCrumbs
433
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
434
+ */
435
+ .breadcrumbs li { display:inline; font-size:0.9166em; /*11px*/ }
436
+ .breadcrumbs a { display:block; float:left; }
437
+ .breadcrumbs li span {
438
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/pix.png) 0 -129px no-repeat;
439
+ width:7px;
440
+ height:5px;
441
+ margin:6px 4px 0;
442
+ display:block;
443
+ float:left;
444
+ text-indent:-9999px;
445
+ overflow:hidden;
446
+ }
447
+ .breadcrumbs li strong { font-weight:normal; display:block; }
448
+
449
+
450
+ /* Page Heading
451
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
452
+ */
453
+ .page-title h1,
454
+ .page-title h2 { margin-bottom:0; }
455
+ .page-title { margin-bottom:20px; }
456
+ /*.category-title { margin-bottom:10px; }*/
457
+
458
+ /* Links in page title */
459
+ .page-title .separator { margin:0 3px; }
460
+ .page-title .separator,
461
+ .page-title .link-reorder,
462
+ .page-title .link-rss,
463
+ .page-title .link-print { font-weight:normal; display:inline-block; margin-top:10px; }
464
+ .page-title .link-rss { float:right; margin-top:15px; }
465
+
466
+ /* Title with buttons */
467
+ .title-buttons { text-align:right; }
468
+ .title-buttons button { margin-left:1em; }
469
+ .title-buttons h1,
470
+ .title-buttons h2,
471
+ .title-buttons h3,
472
+ .title-buttons h4,
473
+ .title-buttons h5,
474
+ .title-buttons h6 { float:left; text-align:left; /* TRICKY: align left as opposition to other elements */ }
475
+
476
+ /* Buttons - adjust the height of heading buttons in customer account (required for the Address Book) */
477
+ .my-account .title-buttons button span span {
478
+ height:35px;
479
+ line-height:35px;
480
+ }
481
+
482
+
483
+ /* Toolbar: pager and sorter
484
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
485
+ */
486
+
487
+ /* Sorter
488
+ -------------------------------------------------------------- */
489
+ .sorter { padding:5px 0; }
490
+
491
+ /* View mode */
492
+ .sorter .view-mode { float:right; }
493
+ .sorter .view-mode label { margin-right:5px; }
494
+ .sorter .view-mode .grid,
495
+ .sorter .view-mode .list {
496
+ display:inline-block;
497
+ vertical-align:middle;
498
+
499
+ margin:0 0 0 1px;
500
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/pix.png);
501
+ background-repeat:no-repeat;
502
+ text-indent:-9999px;
503
+ overflow:hidden;
504
+ }
505
+ .sorter .view-mode .grid { background-position:0 -207px; }
506
+ .sorter .view-mode .list { background-position:-30px -207px; margin-left:-5px; }
507
+ .sorter .view-mode a.grid:hover { background-position:0 -237px; }
508
+ .sorter .view-mode a.list:hover { background-position:-30px -237px; }
509
+
510
+ /*.sorter .view-mode .grid { background-position:0 -277px; }
511
+ .sorter .view-mode .list { background-position:-30px -277px; margin-left:-5px; }
512
+ .sorter .view-mode a.grid:hover { background-position:0 -307px; }
513
+ .sorter .view-mode a.list:hover { background-position:-30px -307px; }*/
514
+ /* Currently selected mode icon */
515
+ /*.sorter .view-mode span.grid,
516
+ .sorter .view-mode span.list {}*/
517
+
518
+ /* Sort by */
519
+ .sorter .sort-by { float:left; margin-right:10px; padding-right:3px; background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/link-separator.png) right center no-repeat; }
520
+ .sorter .sort-by .category-asc,
521
+ .sorter .sort-by .category-desc {
522
+ display:inline-block;
523
+ text-indent:-9999px;
524
+ overflow:hidden;
525
+ }
526
+ .sorter .sort-by .category-asc { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/pix.png) 0 -87px no-repeat transparent; }
527
+ .sorter .sort-by .category-desc { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/pix.png) -60px -87px no-repeat transparent; }
528
+ .sorter .sort-by .category-asc:hover { background-position:-30px -87px; }
529
+ .sorter .sort-by .category-desc:hover { background-position:-90px -87px; }
530
+
531
+ /* Pager
532
+ -------------------------------------------------------------- */
533
+ .pager { margin:10px 0; padding:5px 0; border-top:1px solid #e5e5e5; border-bottom:1px solid #e5e5e5; }
534
+ .pager .pages { float:right; vertical-align:middle; /* Vertical align to fix positionning issue */ }
535
+ .pager .pages strong,
536
+ .pager .pages span { float:left; margin-right:5px; font-weight:normal; }
537
+ .pager .pages ol { display:inline-block; vertical-align:middle; }
538
+ .pager .pages li { float:left; margin:0 0 0 1px; display:block; text-align:center; }
539
+ .pager .pages li a { display:block; background-color:transparent; color:inherit; }
540
+
541
+ .pager .pages li a.previous,
542
+ .pager .pages li a.next {
543
+ text-indent:-9999px;
544
+ overflow:hidden;
545
+ }
546
+
547
+ /* Toolbar. Pager and sorter inside toolbar
548
+ -------------------------------------------------------------- */
549
+ .toolbar {
550
+ border-top:1px solid #e5e5e5;
551
+ border-bottom:1px solid #e5e5e5;
552
+ margin-bottom:-1px; /* To cover the top line of the products grid/list */
553
+
554
+ /* Move up to cover adjacent lines/elements */
555
+ position:relative;
556
+ z-index:1;
557
+ }
558
+
559
+ /* Pager inside toolbar - align center */
560
+ .toolbar .pager { margin:0; border-bottom:none; border-top:1px dashed #e5e5e5; text-align:center; }
561
+ .toolbar .pager .pages { display:inline-block; float:none; }
562
+
563
+ /* Bottom toolbar */
564
+ .toolbar-bottom { margin-top:10px; }
565
+ .toolbar-bottom .toolbar { border-bottom:none; }
566
+ .toolbar-bottom .toolbar .pager { border-top:none; }
567
+ .toolbar-bottom .sorter { display:none; }
568
+
569
+ /* Common styles for toolbar elements
570
+ -------------------------------------------------------------- */
571
+
572
+ /* Size */
573
+ .sorter,
574
+ .pager { line-height:36px; } /* Important: the same as the height of the form elements */
575
+ .sorter .view-mode .grid,
576
+ .sorter .view-mode .list,
577
+ .sorter .sort-by .category-asc,
578
+ .sorter .sort-by .category-desc,
579
+ .pager .pages li { width:30px; height:30px; line-height:30px; }
580
+
581
+ /* Amount */
582
+ .pager .amount,
583
+ .sorter .amount { float:left; padding-right:10px; margin-right:10px; background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/link-separator.png) right center no-repeat; }
584
+
585
+ /* Limiter */
586
+ .pager .limiter,
587
+ .sorter .limiter { float:left; margin-right:15px; }
588
+
589
+ /* All elements - vertical spacing */
590
+ .pager .amount,
591
+ .pager .limiter,
592
+ .pager .pages,
593
+ .sorter .amount,
594
+ .sorter .limiter,
595
+ .sorter .view-mode,
596
+ .sorter .sort-by { padding-top:5px; padding-bottom:5px; }
597
+
598
+
599
+ /* Data Table
600
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
601
+ */
602
+ .data-table { width:100%; }
603
+ .data-table th,
604
+ .data-table td { padding:10px; }
605
+ .data-table thead { background:none; border-bottom:1px solid #e5e5e5; }
606
+ .data-table thead th { font-weight:bold; vertical-align:bottom; border-right: none; }
607
+ .data-table thead th.wrap { white-space:normal; }
608
+
609
+ .data-table tr.odd td,
610
+ .data-table tr.odd th { border-right:1px solid #f5f5f5;}
611
+ .data-table tr.odd td.last { border-right:none; }
612
+ .data-table tr.odd {}
613
+ .data-table tr.odd.last { border-bottom:#eee solid 1px; }
614
+
615
+ .data-table tr.even td,
616
+ .data-table tr.even th { border-right:1px solid #f5f5f5; }
617
+ .data-table tr.even td.last { border-right:none; }
618
+ .data-table tr.even { background-color:#fbfbfb; }
619
+
620
+ .data-table tbody tr:hover {}
621
+ .data-table tbody tr.product-shop-row:hover { background-color:#fff; } /*TODO:?*/
622
+ .data-table tbody.odd {}
623
+ .data-table tbody.odd td { border-width:0 1px; }
624
+ .data-table tbody.odd tr.last { border-bottom:#e5e5e5 solid 1px; }
625
+ .data-table tbody.even { background-color:#f5f5f5; }
626
+ .data-table tbody.even td { border-width:0 1px; }
627
+ .data-table tbody.odd tr.border td,
628
+ .data-table tbody.even tr.border td {}
629
+ .data-table th .tax-flag { /*white-space:nowrap;*/ font-weight:normal; }
630
+
631
+ /* Additional classes for mobile devices
632
+ -------------------------------------------------------------- */
633
+ /* Cell title */
634
+ .data-table .cell-label { display:none; }
635
+
636
+
637
+ /* Shopping cart total summary row expandable to details
638
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
639
+ */
640
+ tr.summary-total { cursor:pointer; }
641
+ tr.summary-total td {}
642
+ tr.summary-total .summary-collapse { float:right; text-align:right; padding-left:20px; background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/bkg_collapse.gif) 0 4px no-repeat; cursor:pointer; }
643
+ tr.show-details .summary-collapse { background-position:0 -53px; }
644
+ tr.show-details td {}
645
+ tr.summary-details td { font-size:11px; background-color:#f5f5f5; color:#777; padding:2px 5px !important; }
646
+ tr.summary-details-first td { border-top:1px solid #d5d5d5; }
647
+ tr.summary-details-excluded { font-style:italic; }
648
+
649
+
650
+ /* Shopping cart tax info
651
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
652
+ */
653
+ .cart-tax-info { display:block; }
654
+ .cart-tax-info,
655
+ .cart-tax-info .cart-price { padding-right:20px; }
656
+ .cart-tax-total { display:block; padding-right:20px; background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/bkg_collapse.gif) 100% 4px no-repeat; cursor:pointer; }
657
+ .cart-tax-info .price,
658
+ .cart-tax-total .price { display:inline !important; font-weight:normal !important; }
659
+ .cart-tax-total-expanded { background-position:100% -53px; }
660
+
661
+
662
+ /* Misc
663
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
664
+ */
665
+ .link-cart { font-weight:bold; }
666
+ .link-reorder { font-weight:bold; }
667
+ .link-print { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/i_print.gif) 0 center no-repeat; padding:2px 0 2px 25px; }
668
+ .link-rss { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/i_rss.gif) 0 center no-repeat; padding-left:16px; white-space:nowrap; }
669
+
670
+ .cards-list dt { margin:5px 0 0; }
671
+ .cards-list .offset { padding:2px 0 2px 20px; }
672
+
673
+ .separator { margin:0 3px; font-weight:normal; color:#e5e5e5; }
674
+ .divider { clear:both; display:block; font-size:0; line-height:0; height:1px; margin:10px 0; background:#e5e5e5; text-indent:-9999em; overflow:hidden; }
675
+
676
+ /* Global site notices
677
+ -------------------------------------------------------------- */
678
+ /* Obsolete: */
679
+ /*.global-site-notice { border:1px solid #cfcfcf; border-width:0 0 1px; background:#f5f5f5; font-size:12px; line-height:1.25; text-align:center; color:#2f2f2f; }
680
+ .global-site-notice .notice-inner { width:860px; margin:0 auto; padding:12px 0 12px 80px; background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/i_notice.gif) 20px 25px no-repeat; text-align:left; }
681
+ .global-site-notice .notice-inner p { margin:0; border:1px dotted #cccc73; padding:10px; }
682
+ .global-site-notice .notice-inner .actions { padding-top:10px; }*/
683
+
684
+ .global-site-notice { background:#f5f5f5; color:#333; }
685
+ .global-site-notice .notice-inner { max-width:66%; margin:0 auto; padding:10px 0 10px 80px; background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/i_notice.gif) 20px center no-repeat; text-align:left; }
686
+ .global-site-notice .notice-inner p { width:80%; margin:0; padding:10px 10px 10px 0; display:inline-block; vertical-align:middle; }
687
+ .global-site-notice .notice-inner .actions { display:inline-block; vertical-align:middle; }
688
+
689
+ /* Cookie Notice */
690
+ .notice-cookie {}
691
+
692
+ /* Noscript Notice */
693
+ .noscript {}
694
+
695
+ /* Demo Notice */
696
+ .demo-notice { margin:0; padding:6px 10px; background:#d75f07; font-size:12px; line-height:1.15; border:0; text-align:center; color:#fff; }
697
+ .demo-notice .notice-inner { width:auto; padding:0; background:none; text-align:center; }
698
+ .demo-notice .notice-inner p { padding:0; border:0; }
699
+
700
+
701
+ /* Buttons remove/close and edit
702
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
703
+ */
704
+
705
+ /* Common styles for buttons
706
+ -------------------------------------------------------------- */
707
+ .btn-remove,
708
+ .btn-remove2,
709
+ .btn-edit,
710
+ .tool-tip .btn-close a {
711
+ display:block;
712
+ width:17px;
713
+ height:17px;
714
+ font-size:0;
715
+ line-height:0;
716
+ text-indent:-999em;
717
+ overflow:hidden;
718
+ }
719
+
720
+ .btn-remove,
721
+ .btn-remove2,
722
+ .tool-tip .btn-close a {
723
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/pix.png) 0 -150px no-repeat;
724
+ }
725
+ .btn-remove:hover,
726
+ .btn-remove2:hover,
727
+ .tool-tip .btn-close a:hover { background-position: -17px -150px; }
728
+ .btn-remove:active,
729
+ .btn-remove2:active,
730
+ .tool-tip .btn-close a:focus { background-position: -34px -150px; }
731
+
732
+ /* Button edit
733
+ -------------------------------------------------------------- */
734
+ .btn-edit { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/pix.png) 0 -167px no-repeat; margin:0 5px 0 0; }
735
+ .btn-edit:hover { background-position: -17px -167px; }
736
+ .btn-edit:active { background-position: -34px -167px; }
737
+
738
+
739
+
740
+ /* Class: std %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
741
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
742
+ /* Styles for admin-controlled content */
743
+
744
+ .std .subtitle { padding:0; }
745
+ .std ol.ol { list-style:decimal outside; padding-left:1.5em; }
746
+ .std dl dt { font-weight:bold; }
747
+ .std dl dd { margin:0 0 10px; }
748
+ .std dl,
749
+ .std p,
750
+ .std address,
751
+ .std blockquote { margin:0 0 1em; padding:0; }
752
+
753
+
754
+ /* Lists
755
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
756
+ */
757
+
758
+ /* Unordered lists
759
+ -------------------------------------------------------------- */
760
+ /* Common basic styling */
761
+ ul.bullet,
762
+ ul.disc { margin:0 0 1em; padding:0; }
763
+
764
+ /* Disc */
765
+ ul.disc { list-style:disc outside none; padding-left:1.5em; }
766
+ ul.disc li { background-image:none; padding-left:0; }
767
+
768
+ /* Bullet */
769
+ ul.bullet { list-style:none outside none; }
770
+ ul.bullet li {
771
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/cck/list/bullet.png) 0 0 no-repeat;
772
+ padding-left:25px;
773
+ transition: background-position 150ms ease-out;
774
+ -moz-transition: background-position 150ms ease-out;
775
+ -webkit-transition: background-position 150ms ease-out;
776
+ -o-transition: background-position 150ms ease-out;
777
+ }
778
+ ul.bullet li:hover { background-position:3px 0; }
779
+
780
+ /* Different bullets. IMPORTANT: use together with class "bullet" */
781
+ ul.list1 li { background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/cck/list/list1.png); }
782
+ ul.list2 li { background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/cck/list/list2.png); }
783
+ ul.list11 li { background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/cck/list/list11.png); }
784
+ ul.list12 li { background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/cck/list/list12.png); }
785
+ ul.list13 li { background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/cck/list/list13.png); }
786
+
787
+ /* Separator */
788
+ ul .separator {
789
+ border-bottom:1px solid #fff;
790
+ margin:8px 1px;
791
+ overflow:hidden;
792
+ }
793
+
794
+ /* Nested unordered lists
795
+ -------------------------------------------------------------- */
796
+ ul.bullet ul,
797
+ ul.disc ul { margin-top:0.5em; margin-bottom:0.5em; }
798
+ ul.bullet ul li,
799
+ ul.disc ul li { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/cck/list/bullet-small.png) 0 0 no-repeat; padding-left:1.5em; }
800
+
801
+
802
+ /* Lists inside ".std"
803
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
804
+ */
805
+ /* Unordered list without any bullets */
806
+ .std ul.no-bullets { list-style:none outside none !important; padding-left:0 !important; }
807
+ .std ul.no-bullets li { background-image:none !important; padding-left:0 !important; }
808
+
809
+ /* Ordered lists */
810
+ .std ol { list-style:decimal outside; margin:10px 0; padding:0 0 0 1.5em; }
811
+ .std ol ol,
812
+ .std ul ol,
813
+ .std ol ul { margin:0.5em 0; }
814
+
815
+
816
+ /* Misc
817
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
818
+ */
819
+ .std dt { font-weight:bold; }
820
+ .std dd { padding:0 0 0 1.5em; }
821
+ .std blockquote { font-style:italic; padding:0 0 0 1.5em; }
822
+ .std address { font-style:normal; }
823
+ .std b,
824
+ .std strong { font-weight:bold; }
825
+ .std i,
826
+ .std em { font-style:italic; }
827
+
828
+
829
+ /* Override std styles for selected elements
830
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
831
+ */
832
+ .std .products-grid p { margin-bottom:0; }
833
+
834
+
835
+
836
+ /* Header %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
837
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
838
+
839
+ /* Header
840
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
841
+ */
842
+ .header-container,
843
+ .header-container2,
844
+ .header-container3 { background-repeat:repeat; background-position:center top; background-attachment: scroll; }
845
+ .header { padding:0; }
846
+
847
+ /* Misc header elements
848
+ -------------------------------------------------------------- */
849
+ .header .item {}
850
+ .header .item-left { float:left; margin-right:20px; }
851
+ .header .item-right { float:right; margin-left:20px; }
852
+
853
+ .header .welcome-msg {}
854
+ .header .login-msg {}
855
+ .header .login-msg a {}
856
+ .header .login-msg a:hover {}
857
+
858
+
859
+ /* Header top
860
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
861
+ */
862
+ .header-top .lang-switcher,
863
+ .header-top .currency-switcher { margin:0; }
864
+
865
+
866
+ /* Logo
867
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
868
+ */
869
+ .header .logo-wrapper { margin:10px 0; }
870
+ .header .logo { display:inline-block; max-width:220px; margin:0; text-decoration:none !important; }
871
+ .header .logo strong { position:absolute; top:-999em; left:-999em; width:0; height:0; font-size:0; line-height:0; text-indent:-999em; overflow:hidden; }
872
+
873
+
874
+ /* User menu, top links
875
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
876
+ */
877
+ .user-menu {
878
+ float:right;
879
+ margin:10px 0 10px 10px;
880
+ }
881
+ #mini-cart { float:right; }
882
+ .top-links { float:right; }
883
+
884
+ /* Set floating because there can be more than one list of links. */
885
+ .top-links ul { float:right; }
886
+
887
+
888
+ /* Quick search
889
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
890
+ */
891
+ .header-top-search-wrapper { float:left; margin:10px 0; } /* Deprecated class */
892
+ #search_mini_form { clear:both; display:block; }
893
+ .form-search { position:relative; }
894
+ .form-search label { float:left; margin:3px 4px 0 0; display:none; }
895
+ .form-search .input-text {
896
+ display: block;
897
+ height:36px;
898
+ line-height:36px; /*IE8*/
899
+ padding:0px 35px 0 7px; /*0 0 0 5px;*/
900
+ color:#bbb;
901
+ background-color:#fff;
902
+ overflow:hidden;
903
+ text-overflow:ellipsis;
904
+ }
905
+
906
+ /* Button */
907
+ .form-search .button {
908
+ position:absolute;
909
+ right:0;
910
+ top:0;
911
+ }
912
+ .form-search .button span {
913
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png) no-repeat transparent;
914
+ background-position:-57px -108px; /* -57px -107px; */
915
+ width:34px;
916
+ height:34px;
917
+ opacity:0.3;
918
+ filter:alpha(opacity=30);
919
+ margin:1px;
920
+ }
921
+ .form-search .button:hover span { opacity:1; filter:alpha(opacity=100); background-color:transparent; }
922
+ .form-search .button span span { background:none; display:none; }
923
+
924
+ /* Search autocomplete */
925
+ .form-search .search-autocomplete {
926
+ left:0 !important; /*Fix for IE*/
927
+ top:42px !important;
928
+ position:relative;
929
+ z-index:4100 !important;
930
+ }
931
+ .form-search .search-autocomplete ul {
932
+ background-color:#fff;
933
+ text-align:left;
934
+ padding:3px;
935
+ }
936
+ .form-search .search-autocomplete li { padding:3px 5px; cursor:pointer; line-height: 24px; }
937
+ .form-search .search-autocomplete li:hover {}
938
+ .form-search .search-autocomplete li .amount { float:right; padding-left:5px; }
939
+
940
+ /* Quick search: skins
941
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
942
+ */
943
+ /* Search: small box
944
+ -------------------------------------------------------------- */
945
+ .search-wrapper-small .form-search .input-text {
946
+ height:28px;
947
+ line-height:28px; /*IE8*/
948
+ }
949
+ .search-wrapper-small .form-search .button span {
950
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png) no-repeat transparent;
951
+ background-position: -61px -111px; /*-59px -109px*/
952
+ width:28px;
953
+ height:28px;
954
+ }
955
+ .search-wrapper-small .form-search .search-autocomplete { top:30px !important; }
956
+
957
+ /* Search: inline
958
+ -------------------------------------------------------------- */
959
+ .search-wrapper-inline #search_mini_form { display: inline-block; vertical-align: middle; }
960
+
961
+
962
+ /* Quick search: positions
963
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
964
+ */
965
+ /* Search: centered
966
+ -------------------------------------------------------------- */
967
+ .search-wrapper-centered .form-search {
968
+ margin:0 auto;
969
+ width:90%;
970
+ }
971
+ .search-wrapper-centered .form-search .input-text {
972
+ float:right;
973
+ width:100%;
974
+ }
975
+
976
+
977
+ /* Mini-cart
978
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
979
+ */
980
+ #mini-cart { position:relative; }
981
+ .after-mini-cart { clear:both; }
982
+
983
+ /* Mini-cart Heading
984
+ -------------------------------------------------------------- */
985
+ #mini-cart .dropdown-toggle {}
986
+
987
+ /* Deprecated: */
988
+ #mini-cart .dropdown-toggle .icon-cart {
989
+ width:14px;
990
+ max-height:32px;
991
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/pix.png) 0px -205px no-repeat;
992
+ }
993
+ #mini-cart .dropdown-toggle .summary {}
994
+ #mini-cart .dropdown-toggle .amount {}
995
+ #mini-cart .dropdown-toggle .subtotal {}
996
+ /* Fix icon positioning */
997
+ /*#mini-cart .dropdown-toggle .icon { padding:0; width:36px; height:36px; }*/
998
+
999
+ /* Mini-cart content
1000
+ -------------------------------------------------------------- */
1001
+ #mini-cart .dropdown-menu {
1002
+ width:300px;
1003
+ padding:25px;
1004
+ text-align:left; /* Because cart can be aligned center */
1005
+ }
1006
+
1007
+ #mini-cart .dropdown-menu .inner {}
1008
+ #mini-cart .dropdown-menu .incl-tax { display:block; padding-bottom:10px; text-align:right; }
1009
+ #mini-cart .dropdown-menu .empty { padding:10px 0; }
1010
+ #mini-cart .block-subtitle { padding:0; margin:0 0 10px; }
1011
+ #mini-cart .product-name {}
1012
+ #mini-cart .btn-remove,
1013
+ #mini-cart .btn-edit { float:right; }
1014
+ #mini-cart .product-details strong { font-weight:normal; }
1015
+ #mini-cart .actions { margin:10px 0 0; padding:0; border:none; text-align:left; }
1016
+ #mini-cart .actions button { float:left; margin-right:1px; }
1017
+ #mini-cart .truncated { margin-left:3px; }
1018
+
1019
+
1020
+ /* Mini-cart on hover
1021
+ -------------------------------------------------------------- */
1022
+ /* TODO
1023
+ #mini-cart:hover .block-content { display:block; }
1024
+ #mini-cart.hover:hover .block-content { display:none; }*/ /*Override (remove) default :hover behavior, if JS is enabled*/
1025
+
1026
+
1027
+ /* Block: Recently Compared (dropdown)
1028
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1029
+ */
1030
+ .quick-compare {
1031
+ float:right;
1032
+ position:relative;
1033
+ margin:0;
1034
+ padding:0;
1035
+ border:none;
1036
+ }
1037
+ .quick-compare .dropdown-toggle {}
1038
+ .quick-compare .dropdown-menu {
1039
+ width:300px;
1040
+ padding:25px;
1041
+ text-align:left; /* Because cart can be aligned center */
1042
+ }
1043
+
1044
+ .quick-compare .dropdown-menu .empty { padding:10px 0; }
1045
+ .quick-compare .dropdown-menu .item { padding:3px 0; }
1046
+ .quick-compare .dropdown-menu .item .product-name { padding-right:20px; }
1047
+ .quick-compare .btn-remove { float:right; }
1048
+ .quick-compare .actions {
1049
+ border-top:1px dotted #e5e5e5;
1050
+ margin:5px 0 0;
1051
+ padding:5px 0 0;
1052
+ text-align:right;
1053
+ }
1054
+ .quick-compare .actions a { float:right; }
1055
+ .quick-compare .actions button { float:left; }
1056
+
1057
+ /* Block on hover
1058
+ -------------------------------------------------------------- */
1059
+ .header .block-compare:hover .block-content { display:block; }
1060
+
1061
+
1062
+
1063
+ /* Sidebar %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1064
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
1065
+
1066
+ /* Blocks
1067
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1068
+ */
1069
+ .block { margin:0 0 10px; }
1070
+ .block .block-title {}
1071
+ .block .block-title strong { font-weight:inherit; }
1072
+ .block .block-title a { text-decoration:none !important; }
1073
+ .block .block-subtitle { margin:5px 0 10px; padding:0; font-size:1em; font-weight:bold; }
1074
+ .block .block-content { padding:10px 5px; }
1075
+ .block .block-content li.item { padding:5px 0; }
1076
+ .block .block-content li.item .product-name {}
1077
+ .block .btn-remove { float:right; }
1078
+ .block .btn-edit { float:right; }
1079
+ .block .actions { margin:5px 0 0 0; padding:5px 0 0; border-top:1px dotted #e5e5e5; text-align:right; }
1080
+ .block .actions a { float:left; }
1081
+
1082
+
1083
+ /* Block lists
1084
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1085
+ */
1086
+ .block-viewed .block-content ol,
1087
+ .block-compare .block-content ol,
1088
+ .block-compared .block-content ol {
1089
+ list-style: outside disc none;
1090
+ padding-left: 20px;
1091
+ }
1092
+ .block-viewed .block-content ol li,
1093
+ .block-compare .block-content ol li,
1094
+ .block-compared .block-content ol li {
1095
+ padding: 3px 0;
1096
+ }
1097
+
1098
+ /* Mini Products List
1099
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1100
+ */
1101
+ .mini-products-list li { padding:5px 0; }
1102
+ .mini-products-list .product-image { float:left; width:50px; }
1103
+ .mini-products-list .product-details { margin-left:69px; }
1104
+ .mini-products-list .product-details h4 { font-size:1em; font-weight:bold; margin:0; }
1105
+
1106
+ /* Common styling for mini list and cross-sell list */
1107
+ .mini-products-list .product-image,
1108
+ .cart .crosssell .product-image { padding:3px; border:1px solid #e5e5e5; }
1109
+ .mini-products-list .product-image:hover,
1110
+ .cart .crosssell .product-image:hover { border-color:#999; }
1111
+
1112
+
1113
+ /* Block: Account
1114
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1115
+ */
1116
+ .block-account .block-title {}
1117
+ .block-account .block-content { padding: 10px 0; }
1118
+ .block-account .block-content ul { list-style: outside disc none; padding-left: 25px; }
1119
+ .block-account li > * {
1120
+ padding:4px;
1121
+ display:block;
1122
+ text-transform:uppercase;
1123
+ }
1124
+ .block-account li strong { font-weight:normal; }
1125
+
1126
+
1127
+
1128
+ /* Block: Layered Navigation
1129
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1130
+ */
1131
+
1132
+ .block-layered-nav .block-content { padding:0; }
1133
+ .block-layered-nav .block-subtitle { display:none; margin-bottom:0; }
1134
+
1135
+ /* List of filters */
1136
+ .block-layered-nav dl { padding-left:10px; padding-top:10px; }
1137
+ .block-layered-nav dt { font-weight:bold; padding:0; }
1138
+ .block-layered-nav dd { padding:5px 0 10px 5px; }
1139
+ .block-layered-nav dd.last { border-bottom:none; }
1140
+
1141
+ /* Current filters */
1142
+ .block-layered-nav .currently { margin:10px 0; }
1143
+ .block-layered-nav .currently .block-subtitle { display:block; padding:10px 10px 0; font-weight:normal; }
1144
+ .block-layered-nav .currently ol { padding:10px; }
1145
+ .block-layered-nav .currently ol li { margin-bottom:4px; }
1146
+ .block-layered-nav .currently .label { margin-right:4px; color:#d90000; }
1147
+ .block-layered-nav .currently .btn-remove { float:right; margin-left:5px; }
1148
+ .block-layered-nav .actions { margin:0; }
1149
+ .block-layered-nav .actions a { float:right; }
1150
+
1151
+ /* List items */
1152
+ .block-layered-nav dd li,
1153
+ .block-layered-nav .currently ol li {
1154
+ line-height:1.5em;
1155
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/bullet.png) 3px 5px no-repeat;
1156
+ padding-left:15px;
1157
+ transition: background-position 150ms ease-out;
1158
+ -moz-transition: background-position 150ms ease-out;
1159
+ -webkit-transition: background-position 150ms ease-out;
1160
+ -o-transition: background-position 150ms ease-out;
1161
+ }
1162
+ .block-layered-nav dd li:hover,
1163
+ .block-layered-nav .currently ol li:hover { background-position:6px 5px; }
1164
+
1165
+
1166
+ /* Block: Wishlist
1167
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1168
+ */
1169
+ .block-wishlist li.item .btn-remove { margin-left:5px; }
1170
+
1171
+
1172
+ /* Block: Related
1173
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1174
+ */
1175
+
1176
+ /* Ccommon styles for all types of the block */
1177
+ .block-related .block-subtitle {
1178
+ display:none;
1179
+ position:absolute;
1180
+ padding:1em 0;
1181
+ margin:-20px 0 0;
1182
+ border-top:1px solid #e5e5e5;
1183
+ border-bottom:1px solid #e5e5e5;
1184
+ font-weight:normal;
1185
+ z-index:1;
1186
+ }
1187
+ .block-related:hover .block-subtitle { display:block; padding:8px; background-color:#fff; }
1188
+
1189
+ /* Block: Related. Single product slider
1190
+ -------------------------------------------------------------- */
1191
+ .block-related-slider input.checkbox { float:left; margin:7px 5px 0 0; }
1192
+
1193
+
1194
+ /* Block: Related. Simple thumbnails slider
1195
+ -------------------------------------------------------------- */
1196
+ .block-related-thumbnails .product-image {
1197
+ float:left;
1198
+ margin-bottom:10px;
1199
+ }
1200
+ .block-related-thumbnails .product-details {
1201
+ margin-left:110px;
1202
+ }
1203
+ .block-related-thumbnails .product-details > * { margin-bottom:5px; }
1204
+ .block-related-thumbnails .product-name,
1205
+ .block-related-thumbnails .related-add-to-wishlist { font-size:1em; line-height:1.25em; font-family:inherit; font-weight:inherit; display:inline-block; }
1206
+ .block-related-thumbnails .price-box { font-size:1em; line-height:1.25em; }
1207
+ .block-related-thumbnails .checkbox { float:left; margin:2px 5px 0 0; }
1208
+
1209
+
1210
+ /* Block: Compare Products
1211
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1212
+ */
1213
+ .compare-table { border:0; }
1214
+ .compare-table .btn-remove { float:right; }
1215
+ .compare-table tbody tr:hover { background-color:#e5e5e5; }
1216
+
1217
+ .compare-table .product-shop-row { border-bottom:1px solid #ccc; }
1218
+ .compare-table .product-shop-row th,
1219
+ .compare-table .product-shop-row td { border-color:#eee !important; }
1220
+ .compare-table tr.add-to-row { background-color:#fff; border-top:1px solid #ccc; }
1221
+ .compare-table tr.add-to-row:hover { background-color:#fff; } /* Cover background applied on tr hover */
1222
+ .compare-table tr.add-to-row td { text-align:left; }
1223
+ .compare-table tr.first td { text-align:left; }
1224
+ .compare-table tr.first td .product-name { font-family:inherit; font-size:1.1666em; font-weight:bold; margin:10px 0; }
1225
+ .compare-table tr.first td .ratings { width:145px; margin:10px 0; }
1226
+ .compare-table .price-box { margin:10px 0; line-height:15px; }
1227
+
1228
+ /* Changes after setting text-align:left */
1229
+ .compare-table .product-image img { display:block; margin:0 auto; }
1230
+ .compare-table .add-to-links { margin-top:5px; }
1231
+ .compare-table .add-to-links li { float:none; }
1232
+ .compare-table a.link-wishlist { overflow:visible; text-indent:0; background:none; display:inline; border:none; }
1233
+
1234
+
1235
+ /* Block: Recently Viewed
1236
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1237
+ */
1238
+ .block-viewed {}
1239
+
1240
+
1241
+ /* Block: Recently Compared
1242
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1243
+ */
1244
+ .block-compared {}
1245
+
1246
+
1247
+ /* Block: Poll
1248
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1249
+ */
1250
+ .block-poll .block-subtitle { font-weight:normal; }
1251
+ .block-poll input.radio { float:left; margin:1px -18px 0 0; }
1252
+ .block-poll .label { display:block; margin-left:18px; }
1253
+ .block-poll li { padding:3px 9px; }
1254
+ .block-poll .answer { font-weight:bold; }
1255
+ .block-poll .votes { float:right; margin-left:10px; }
1256
+
1257
+
1258
+ /* Block: Tags
1259
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1260
+ */
1261
+ .block-tags .block-content .tags-list { background:none; border:0; font-size:12px; }
1262
+ .block-tags .tags-list a {}
1263
+ .block-tags .tags-list a:hover {}
1264
+ .block-tags .actions { text-align:right; }
1265
+ .block-tags .actions a { float:none; }
1266
+
1267
+
1268
+ /* Block: Subscribe
1269
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1270
+ */
1271
+ .block-subscribe .input-box { margin-top: 5px; }
1272
+ .block-subscribe input { width:155px; }
1273
+ .block-subscribe .actions button.button { float:none; }
1274
+
1275
+
1276
+ /* Block: Reorder
1277
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1278
+ */
1279
+ .block-reorder input.checkbox { float:left; margin:2px -20px 0 0; }
1280
+ .block-reorder .product-name { margin-left:20px; }
1281
+ .block-reorder .validation-advice { margin:3px 9px 7px; }
1282
+
1283
+
1284
+ /* Block: Banner
1285
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1286
+ */
1287
+ .block-banner {}
1288
+ .block-banner .block-content { text-align:center; }
1289
+
1290
+
1291
+ /* Block: Login
1292
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1293
+ */
1294
+ .block-login label { font-weight:bold; color:#666; }
1295
+ .block-login input.input-text { display:block; width:167px; margin:3px 0; }
1296
+
1297
+ /* Paypal
1298
+ -------------------------------------------------------------- */
1299
+ .sidebar .paypal-logo { display:block; margin:10px 0; text-align:center; }
1300
+ .sidebar .paypal-logo a { float:none; }
1301
+
1302
+
1303
+ /* Block: vertical main menu
1304
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1305
+ */
1306
+ .block-vertnav .block-content {
1307
+ padding-left:0;
1308
+ padding-right:0;
1309
+ }
1310
+
1311
+
1312
+
1313
+ /* Category view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1314
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
1315
+
1316
+ .category-title h1 {}
1317
+ .category-image { width:100%; overflow:hidden; margin:10px 0; text-align:center; }
1318
+ .category-image img {}
1319
+ .category-description { margin:20px 0; position:relative; }
1320
+
1321
+ /* Negative top margin: to cover bottom border of the category title */
1322
+ .category-products { margin:-1px 0 10px; }
1323
+
1324
+
1325
+ /* Common styles for View Types: List & Grid
1326
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1327
+ */
1328
+ .products-list .product-name,
1329
+ .products-grid .product-name,
1330
+ h3.product-name {
1331
+ /* Sizes are modified for different number of columns */
1332
+ font-size:1.3333em; line-height:1.25em; /*16px 20px*/
1333
+ }
1334
+
1335
+ .products-list .price-box.map-info a,
1336
+ .products-grid .price-box.map-info a { margin-left:3px; }
1337
+
1338
+ /* Product image
1339
+ -------------------------------------------------------------- */
1340
+ /* Product alternative image */
1341
+ .products-list .product-image .alt-img,
1342
+ .products-grid .product-image .alt-img {
1343
+ position:absolute;
1344
+ top:0;
1345
+ left:0;
1346
+ display: none;
1347
+ }
1348
+
1349
+ /* Fix possible glitches during animation */
1350
+ .products-list .product-image img,
1351
+ .category-products-grid .product-image img /* Grid only in category view */
1352
+ {
1353
+ -moz-transform: translateZ(0);
1354
+ }
1355
+
1356
+
1357
+ /* View Type: List
1358
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1359
+ */
1360
+ .products-list .item {
1361
+ border-top:1px solid #e5e5e5;
1362
+ padding-top:20px;
1363
+ padding-bottom:20px;
1364
+ background-color:#fff;
1365
+ position:relative; /* For hover effect */
1366
+
1367
+ transition: box-shadow 0ms ease-in;
1368
+ -moz-transition: box-shadow 0ms ease-in;
1369
+ -webkit-transition: box-shadow 0ms ease-in;
1370
+ -o-transition: box-shadow 0ms ease-in;
1371
+ }
1372
+ .products-list .product-shop {}
1373
+ .products-list .product-shop-inner { border-right:1px solid #e5e5e5; padding-right:15px }
1374
+ .products-list .right-column { float:right; }
1375
+
1376
+ .products-list .product-name { margin:0 0 15px; }
1377
+ .products-list .product-image-wrapper {}
1378
+ .products-list .product-image { display:block; position:relative; margin-left:auto; margin-right:auto; }
1379
+ .products-list .price-box { margin:0 0 15px; font-size:1.3333em; line-height:1.25em; }
1380
+ .products-list .ratings { margin:10px 0; }
1381
+ .products-list .desc { margin:15px 0px; }
1382
+ .products-list .link-learn {}
1383
+ .products-list .btn-cart { width:100%; max-width:180px; }
1384
+ .products-list .button span { float:none; }
1385
+ .products-list .availability { float:none; margin:15px 0; }
1386
+ .products-list .add-to-links { margin:15px 0 0; }
1387
+
1388
+ /* Hover effect
1389
+ -------------------------------------------------------------- */
1390
+ .products-list.hover-effect .item:hover {
1391
+ margin-left:-1%;
1392
+ margin-right:-1%;
1393
+ padding-left:1%;
1394
+ padding-right:1%;
1395
+ z-index:10;
1396
+ box-shadow:0 0 20px rgba(0,0,0,0.2);
1397
+ border-color:transparent;
1398
+
1399
+ transition: box-shadow 400ms ease-out;
1400
+ -moz-transition: box-shadow 400ms ease-out;
1401
+ -webkit-transition: box-shadow 400ms ease-out;
1402
+ -o-transition: box-shadow 400ms ease-out;
1403
+ }
1404
+
1405
+
1406
+ /* View Type: Grid
1407
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1408
+ */
1409
+
1410
+ /* Products grid: basic styles
1411
+ (common for all types of product grids)
1412
+ -------------------------------------------------------------- */
1413
+ .products-grid {}
1414
+ .products-grid .item {
1415
+ padding-top:20px;
1416
+ padding-bottom:20px;
1417
+ position:relative; /* For hover effect */
1418
+ }
1419
+ .products-grid .product-name { margin:15px 0 0; }
1420
+ .products-grid .product-image-wrapper { margin:0 auto; position:relative; }
1421
+ .products-grid .product-image { display:block; }
1422
+ .products-grid .price-box { margin:5px 0 10px; font-size:1em; }
1423
+ .products-grid .ratings { margin:10px 0; }
1424
+ .products-grid .actions { margin:10px 0 0; }
1425
+ .products-grid .availability { float:none; margin:5px 0; }
1426
+ .products-grid .add-to-links { margin:10px 0 0; }
1427
+
1428
+ /* Price: old/special */
1429
+ /*.products-grid .old-price,
1430
+ .products-grid .special-price { display: inline-block; }
1431
+ .products-grid .old-price { margin-right: 2px; }
1432
+ .products-grid .special-price { margin-left: 2px; }*/
1433
+
1434
+
1435
+ /* Grid: additional styles
1436
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1437
+ */
1438
+ /* Equal height of items (buttons displayed at the bottom of items)
1439
+ -------------------------------------------------------------- */
1440
+ .products-grid.equal-height .item .actions { position:absolute; bottom:15px; }
1441
+
1442
+ /* Remove equal height */
1443
+ .products-grid.auto-height .item .actions { position:static; bottom:auto; } /* Deprecated */
1444
+
1445
+ /* Display grid item elements only on hover
1446
+ -------------------------------------------------------------- */
1447
+ .products-grid .item .display-onhover { display:none; }
1448
+
1449
+ /* Display grid item elements only on hover: fade-in (for sliders) */
1450
+ .products-grid .item .visible-onhover {
1451
+ visibility:hidden;
1452
+ opacity:0;
1453
+ transition: visibility 0s ease-in-out 600ms, opacity 300ms ease-in-out 300ms;
1454
+ -moz-transition: visibility 0s ease-in-out 600ms, opacity 300ms ease-in-out 300ms;
1455
+ -webkit-transition: visibility 0s ease-in-out 600ms, opacity 300ms ease-in-out 300ms;
1456
+ -o-transition: visibility 0s ease-in-out 600ms, opacity 300ms ease-in-out 300ms;
1457
+ }
1458
+ .products-grid .item:hover .visible-onhover {
1459
+ visibility:visible;
1460
+ opacity:1;
1461
+ transition: visibility 0s ease-in-out 0s, opacity 300ms ease-in-out 100ms;
1462
+ -moz-transition: visibility 0s ease-in-out 0s, opacity 300ms ease-in-out 100ms;
1463
+ -webkit-transition: visibility 0s ease-in-out 0s, opacity 300ms ease-in-out 100ms;
1464
+ -o-transition: visibility 0s ease-in-out 0s, opacity 300ms ease-in-out 100ms;
1465
+ }
1466
+
1467
+ /* Product name in a single line
1468
+ -------------------------------------------------------------- */
1469
+ .products-grid.single-line-name .product-name {
1470
+ overflow: hidden;
1471
+ white-space: nowrap;
1472
+ text-overflow: ellipsis;
1473
+ }
1474
+ .products-grid.single-line-name .item:hover .product-name {
1475
+ overflow: visible;
1476
+ white-space: normal;
1477
+ }
1478
+
1479
+ /* Align to the center
1480
+ -------------------------------------------------------------- */
1481
+ .products-grid.centered .item { text-align: center; }
1482
+ .products-grid.centered .item .ratings .rating-box,
1483
+ .products-grid.centered .item .btn-cart { margin-left: 0; margin-right: 0; }
1484
+ .products-grid.centered .item .ratings { display: inline-block; margin-bottom: 0; /* Remove margin from inline-block */ }
1485
+ .products-grid.centered .item .ratings .rating-box { display: inline-block; vertical-align: middle; float: none; /* Remove default float */ }
1486
+ .products-grid.centered .item .ratings .amount { display: inline-block; vertical-align: middle; margin-left: 3px; }
1487
+ .products-grid.centered .item input.checkbox { float: none; }
1488
+
1489
+ .products-grid.centered .item .actions .add-to-links li { float: none; margin:0; }
1490
+ /*.products-grid.centered .item .actions .add-to-links li:last-child { margin-right:0; }*/
1491
+
1492
+
1493
+ /* Grid: only in category view
1494
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1495
+ */
1496
+ .category-products-grid .item {
1497
+ border-top:1px solid #e5e5e5;
1498
+ border-left:none;
1499
+ border-right:none;
1500
+ zoom:1;
1501
+
1502
+ padding-top:2%;
1503
+ padding-left:1%;
1504
+ padding-right:1%;
1505
+ background-color:#fff;
1506
+
1507
+ transition: box-shadow 0ms ease-in;
1508
+ -moz-transition: box-shadow 0ms ease-in;
1509
+ -webkit-transition: box-shadow 0ms ease-in;
1510
+ -o-transition: box-shadow 0ms ease-in;
1511
+ }
1512
+
1513
+ /* Hover effect
1514
+ -------------------------------------------------------------- */
1515
+ .category-products-grid.hover-effect .item:hover {
1516
+ margin-left:-1%;
1517
+ margin-right:-1%;
1518
+ padding-left:2%;
1519
+ padding-right:2%;
1520
+ z-index:10;
1521
+ box-shadow:0 0 20px rgba(0,0,0,0.2);
1522
+ border-color:transparent;
1523
+
1524
+ transition: box-shadow 400ms ease-out;
1525
+ -moz-transition: box-shadow 400ms ease-out;
1526
+ -webkit-transition: box-shadow 400ms ease-out;
1527
+ -o-transition: box-shadow 400ms ease-out;
1528
+ }
1529
+
1530
+
1531
+ /* Grid: override grid elements to change size
1532
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1533
+ */
1534
+ /* Product name
1535
+ -------------------------------------------------------------- */
1536
+ .products-grid.size-s .product-name {
1537
+ font-size:1.1666em; /*14px*/
1538
+ line-height:1.2307em; /*16px*/
1539
+ }
1540
+ .products-grid.size-xs .product-name {
1541
+ font-size:1em; /*12px*/
1542
+ line-height:1.25em;/*15px*/
1543
+ }
1544
+
1545
+ /* Buttons
1546
+ -------------------------------------------------------------- */
1547
+ .products-grid.size-s .item button.btn-cart span span {
1548
+ padding:7px 15px;
1549
+ height:auto;
1550
+ line-height:2em;
1551
+ }
1552
+ .products-grid.size-xs .item button.btn-cart span span {
1553
+ padding:3px 8px;
1554
+ height:auto;
1555
+ line-height:2em;
1556
+ }
1557
+
1558
+ /* Product labels
1559
+ -------------------------------------------------------------- */
1560
+ .products-grid.size-s .sticker { width:45px; height:45px; font-size:1em; }
1561
+ .products-grid.size-s .item:hover .sticker { width:50px; height:50px; }
1562
+ .products-grid.size-xs .sticker { width:40px; height:40px; font-size:0.9166em; /*11px*/ }
1563
+ .products-grid.size-xs .item:hover .sticker { width:45px; height:45px; }
1564
+
1565
+
1566
+
1567
+ /* Product view elements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1568
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
1569
+
1570
+ /* Rating
1571
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1572
+ */
1573
+ .ratings,
1574
+ .no-rating { line-height:1.0833em; margin:15px 0 15px; }
1575
+ .ratings a { line-height:1.0833em; }
1576
+ .ratings strong { float:left; margin:1px 5px 0 0; }
1577
+ .ratings .rating-links .separator {
1578
+ display:inline-block;
1579
+ text-indent:-9999px;
1580
+ width:1px;
1581
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/bg-separator1.gif) no-repeat;
1582
+ }
1583
+ .ratings dt {}
1584
+ .ratings dd {}
1585
+ .rating-box { width:69px; height:13px; font-size:0; line-height:0; background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/rating.png) 0 0 repeat-x; text-indent:-999em; overflow:hidden; }
1586
+ .rating-box .rating { float:left; height:13px; background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/rating.png) 0 100% repeat-x; }
1587
+ .ratings .rating-box { float:left; margin-right:8px; }
1588
+ .ratings .amount { white-space:nowrap; font-size:10px; text-transform:uppercase; }
1589
+
1590
+ .ratings-table th,
1591
+ .ratings-table td { line-height:1.1666em; /*14px*/ padding:3px 0; }
1592
+ .ratings-table th { padding-right:8px; }
1593
+
1594
+
1595
+ /* Availability
1596
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1597
+ */
1598
+ /* Availability - with details */
1599
+ .availability-only { margin:15px 0; }
1600
+ a.availability-only { cursor:pointer; }
1601
+ .availability-only strong { font-weight:normal; }
1602
+ .availability-only .caret { margin-left:8px; opacity:1; filter:alpha(opacity=100); }
1603
+
1604
+ .availability-only-details { width:100%; margin:-10px auto 20px; }
1605
+ .availability-only-details thead { border-bottom:1px solid #e5e5e5; }
1606
+ .availability-only-details th { padding:4px 12px; font-weight:bold; }
1607
+ .availability-only-details td { padding:1px 12px; border-right:1px solid #f5f5f5; }
1608
+ .availability-only-details td.last { border-right:none; }
1609
+
1610
+ /* Product increments */
1611
+ .product-pricing { line-height:1.25em; /* TODO:15px */ }
1612
+ .extrahint-wrapper .product-pricing { padding:10px; background-color:#f5f5f5; }
1613
+ .product-options-bottom .product-pricing { clear:left; }
1614
+
1615
+
1616
+ /* Alerts
1617
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1618
+ */
1619
+ .alert-price,
1620
+ .alert-stock { margin:15px 0; padding:2px 0 2px 25px; line-height:15px; }
1621
+ .alert-price { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/icons.png) 0 -120px no-repeat; }
1622
+ .alert-stock { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/icons.png) 0 -160px no-repeat; }
1623
+
1624
+
1625
+ /* Product Prices
1626
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1627
+ */
1628
+ .price { white-space:nowrap !important; }
1629
+
1630
+ .price-box { margin: 0; }
1631
+ .price-box .price {}
1632
+ .price-box .price-label {}
1633
+
1634
+ /* Common labels */
1635
+ .old-price .price-label,
1636
+ .special-price .price-label { white-space:nowrap; }
1637
+ .old-price .price-label { display:none; }
1638
+
1639
+ /* Regular price */
1640
+ .regular-price {}
1641
+ .regular-price .price {}
1642
+
1643
+ /* Old price */
1644
+ .old-price { margin:0; }
1645
+ .old-price .price { text-decoration:line-through; }
1646
+
1647
+ /* Special price */
1648
+ .special-price { margin:0; padding:0; }
1649
+ .special-price .price,
1650
+ .special-price .price-label { color:#ee001c !important; /* Override other color changes */ }
1651
+ .special-price .price-excluding-tax .price {}
1652
+
1653
+ /* Minimal price (as low as) */
1654
+ .minimal-price { margin:0 0 5px; }
1655
+ .minimal-price .price {}
1656
+ .minimal-price .price-label { white-space:nowrap; }
1657
+
1658
+ .minimal-price-link { display:block; }
1659
+ .minimal-price-link .label {}
1660
+ .minimal-price-link .price { color:#ee001c; }
1661
+
1662
+ /* Excluding tax */
1663
+ .price-excluding-tax { display:block; }
1664
+ .price-excluding-tax .label { white-space:nowrap; }
1665
+ .price-excluding-tax .price { font-weight:normal; }
1666
+
1667
+ /* Including tax */
1668
+ .price-including-tax { display:block; }
1669
+ .price-including-tax .label { white-space:nowrap; }
1670
+ .price-including-tax .price {}
1671
+
1672
+ /* Configured price */
1673
+ .configured-price { margin:0; }
1674
+ .configured-price .price-label { font-weight:bold; white-space:nowrap; }
1675
+ .configured-price .price { font-weight:bold; }
1676
+
1677
+ /* FPT */
1678
+ .weee { display:block; font-size:11px; }
1679
+ .weee .price { font-size:11px; font-weight:normal; }
1680
+
1681
+ /* Excl tax (for order tables) */
1682
+ .price-excl-tax { display:block; }
1683
+ .price-excl-tax .label { display:block; white-space:nowrap; }
1684
+ .price-excl-tax .price { display:block; }
1685
+
1686
+ /* Incl tax (for order tables) */
1687
+ .price-incl-tax { display:block; }
1688
+ .price-incl-tax .label { display:block; white-space:nowrap; }
1689
+ .price-incl-tax .price { display:block; font-weight:bold; }
1690
+
1691
+ /* Price range */
1692
+ .price-from { margin:0; }
1693
+ .price-from .price-label { white-space:nowrap; }
1694
+
1695
+ .price-to { margin:0; }
1696
+ .price-to .price-label { white-space:nowrap; }
1697
+
1698
+ /* Price notice next to the options */
1699
+ .price-notice { margin-left:5px; }
1700
+ .price-notice .price { padding-left:3px; }
1701
+
1702
+ /* Price as configured */
1703
+ .price-as-configured .price-label { font-size:1.1666em; font-weight:bold; text-transform:uppercase; white-space:nowrap; color:inherit; }
1704
+
1705
+ .price-box-bundle .price-box { margin:0 !important; padding:0 !important; border:none !important; }
1706
+
1707
+
1708
+ /* Tier Prices
1709
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1710
+ */
1711
+ .tier-prices { margin:0 0 10px; padding-left: 10px; }
1712
+ .tier-prices li { line-height:15px; background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/bullet.png) 0 4px no-repeat; padding:0 0 0 11px; margin:3px 0; }
1713
+ .tier-prices .benefit { color:#ee001c; font-weight:normal; }
1714
+
1715
+ .tier-prices-grouped li { padding:2px 0; }
1716
+ .tier-prices-grouped li .price { font-weight:bold; }
1717
+
1718
+
1719
+ /* Add-to links
1720
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1721
+ */
1722
+ .add-to-links .separator { display:none; }
1723
+ .add-to-links li { float:left; }
1724
+
1725
+ .addto-gaps-right li { margin-right:10px; } /* Add gaps at the right side of links */
1726
+
1727
+ /* Add-to links as icons (with no text).
1728
+ Deprecated (will be removed in the next update).
1729
+ -------------------------------------------------------------- */
1730
+ .addto-icons a.link-wishlist,
1731
+ .addto-icons a.link-compare,
1732
+ .addto-icons a.email-friend {
1733
+ display:block;
1734
+ padding:0;
1735
+ margin:0;
1736
+ width:27px;
1737
+ height:27px;
1738
+ text-indent:-9999em;
1739
+ overflow:hidden;
1740
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/pix.png) no-repeat;
1741
+ background-color:#fff;
1742
+ /*border:1px solid #f5f5f5;*/
1743
+ }
1744
+ .addto-icons a.link-wishlist:hover,
1745
+ .addto-icons a.link-compare:hover,
1746
+ .addto-icons a.email-friend:hover { background-color:#fff; }
1747
+
1748
+ .addto-icons a.link-wishlist { background-position:-27px 0; }
1749
+ .addto-icons a.link-wishlist:hover { background-position:-27px -27px; }
1750
+
1751
+ .addto-icons a.link-compare { background-position:0 0; }
1752
+ .addto-icons a.link-compare:hover { background-position:0 -27px; }
1753
+
1754
+ .addto-icons a.email-friend { background-position:-54px 0; }
1755
+ .addto-icons a.email-friend:hover { background-position: -54px -27px; }
1756
+
1757
+ /* If displayed in a group: add margin between icons */
1758
+ .add-to-links.addto-icons .link-compare,
1759
+ .add-to-links.addto-icons .email-friend { margin-left:3px; }
1760
+
1761
+ /* If displayed on product image */
1762
+ .addto-icons.addto-onimage {
1763
+ float:right;
1764
+ margin-top:-31px; /* Move up: height (29px) + 2 additional pixels */
1765
+ position:relative;
1766
+ z-index:1;
1767
+ padding-bottom:4px; /* Use padding to cover the image below icons. */
1768
+ padding-right:4px;
1769
+ }
1770
+
1771
+ /* Add-to links: simple icons (with no text)
1772
+ -------------------------------------------------------------- */
1773
+ .addto-links-icons {}
1774
+
1775
+ /* If displayed in a group: add margin between icons */
1776
+ .add-to-links.addto-links-icons .link-compare { margin-left:3px; }
1777
+
1778
+ /* If displayed on product image */
1779
+ .addto-links-icons.addto-onimage {
1780
+ float:right;
1781
+ margin-top:-40px; /* Move up */
1782
+ position:relative;
1783
+ z-index:1;
1784
+ padding-bottom:4px; /* Use padding to cover the bottom part of the product image below icons */
1785
+ padding-right:4px;
1786
+ }
1787
+
1788
+
1789
+ /* Add to Cart box
1790
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1791
+ */
1792
+ .add-to-cart .qty-wrapper {}
1793
+ .add-to-cart .qty { text-align:center; margin-right:10px; }
1794
+ .add-to-cart .button { margin-right:10px; }
1795
+
1796
+ .product-view .add-to-cart { float:left; }
1797
+ .product-view .paypal-wrapper { float:left; }
1798
+ .product-view .paypal-wrapper .paypal-logo { margin:0; padding:5px 0 0; text-align:right; }
1799
+ .product-view .paypal-wrapper .paypal-logo .paypal-or { clear:both; display:block; margin:5px 60px 5px 0; }
1800
+
1801
+ /* Magento's default */
1802
+ .add-to-cart .paypal-logo { clear:left; margin:0; padding:10px 0 0; text-align:right; }
1803
+ .add-to-cart .paypal-logo .paypal-or { clear:both; display:block; margin:5px 60px 5px 0; }
1804
+
1805
+ /* Box floating right
1806
+ -------------------------------------------------------------- */
1807
+ .add-to-cart.right {}
1808
+ .add-to-cart.right label { margin-left:10px; }
1809
+ .add-to-cart.right .button { margin-right:0; }
1810
+
1811
+ /* Messages
1812
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1813
+ */
1814
+ #messages_product_view { margin: 0 auto; width: 98%; }
1815
+
1816
+
1817
+
1818
+ /* Product page %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1819
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
1820
+
1821
+ /* Basic layout
1822
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1823
+ */
1824
+ /* 1 Column Layout
1825
+ -------------------------------------------------------------- */
1826
+ /* Stretch content area (full page width) */
1827
+ .catalog-product-view .col1-layout .col-main { margin-left:0; margin-right:0; width:100%; }
1828
+
1829
+ /* 3 Columns Layout
1830
+ -------------------------------------------------------------- */
1831
+ /* Uncomment if you're using 3-column layout on product page */
1832
+ /*.catalog-product-view .col3-layout .product-img-column,
1833
+ .catalog-product-view .col3-layout .product-shop,
1834
+ .catalog-product-view .col3-layout .product-secondary-column,
1835
+ .catalog-product-view .col3-layout .box-additional { float: none; width: 100%; }
1836
+ .catalog-product-view .col3-layout .img-box .product-image { margin: 0 auto; width: 57%; }*/
1837
+
1838
+
1839
+ /* Main sections of product page
1840
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1841
+ */
1842
+ /* Generic wrapper for product page collaterals */
1843
+ .product-view .box-additional { margin-top:20px; }
1844
+ .product-view .box-tabs {}
1845
+ .product-view .box-sidebar {}
1846
+ .product-view .box-up-sell {}
1847
+
1848
+
1849
+ /* Product images
1850
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1851
+ */
1852
+ .product-view .product-img-column {
1853
+ float:left; margin-bottom:10px;
1854
+ position:relative; /* Stickers are positioned relative to this container. TODO: move to the stylesheet with sticker styles. */
1855
+ }
1856
+ .col3-layout .product-view .product-img-column { float:none; margin:0 auto; }
1857
+
1858
+
1859
+ /* Product primary column
1860
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1861
+ */
1862
+ .product-view .product-shop { float:left; }
1863
+ .product-view .product-shop .product-name { margin:0 0 1.6666em; /*20px*/ }
1864
+ .product-view .product-shop .product-name h1 { margin:0; }
1865
+ .product-view .product-shop .ratings-table { margin:15px 0 5px; }
1866
+
1867
+
1868
+ /* Product secondary Column
1869
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1870
+ */
1871
+ .product-view .product-secondary-column .inner { padding-top:1px; padding-bottom:10px; /* Stop collapsing margins */ }
1872
+
1873
+
1874
+ /* Product primary column's elements
1875
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1876
+ */
1877
+ .product-view .short-description { margin:15px 0; line-height:1.25em; /*15px*/ }
1878
+ .product-view .short-description ul { margin-top:5px; margin-bottom:5px; }
1879
+
1880
+ /* Add-to links */
1881
+ .product-view .action-box { margin:20px 0; }
1882
+
1883
+ /* Add-to links in different places of the product page */
1884
+ .product-view .add-to-links li { margin-right: 10px; }
1885
+
1886
+ /* Other elements */
1887
+ .extrahint-wrapper { margin-bottom:15px; }
1888
+
1889
+ /* Downloadable product
1890
+ -------------------------------------------------------------- */
1891
+ .product-type-data .item-options { clear: both; }
1892
+ .product-type-data .item-options dt { float:none; margin:0 0 5px; }
1893
+ /* The same style as "item-options" in cart */
1894
+ .product-type-data .item-options dd { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/bullet.png) 3px 4px no-repeat; padding-left:15px; }
1895
+
1896
+ /* Additional information table
1897
+ -------------------------------------------------------------- */
1898
+ .product-view .data-table th { font-weight:bold; }
1899
+
1900
+
1901
+ /* Prices - common for product view and MAP popup
1902
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1903
+ */
1904
+ /* Prices on product page and MSRP */
1905
+ .product-view .product-shop .price-box .price-including-tax .price { font-size:18px; }
1906
+ .product-view .product-shop .price-box .price-excluding-tax .price { font-size:inherit; }
1907
+
1908
+ /* Main price (prominent) */
1909
+ .product-view .product-shop .price-box .regular-price .price,
1910
+ .product-view .product-shop .price-box .special-price .price,
1911
+ .product-view .product-shop .price-box .special-price .price-label,
1912
+ .product-view .product-shop .price-box .old-price .price,
1913
+ .product-view .product-shop .price-box .old-price .price-label,
1914
+ .product-view .product-shop .price-box .price-including-tax .price,
1915
+ .product-view .product-options-bottom .price-box .regular-price .price,
1916
+ .product-view .price-as-configured .price,
1917
+ .map-popup-price .regular-price .price,
1918
+ .product-view .price-box.map-info .old-price .price { font-size:1.6666em; /*20px*/ }
1919
+
1920
+ /* Old price */
1921
+ .product-view .product-shop .price-box .old-price .price-label { white-space:nowrap; display:none; }
1922
+
1923
+ /* MSRP price (only in MSRP box) */
1924
+ .map-popup-msrp .price { display:block; /* Move price below the label */ }
1925
+
1926
+ /* Move MSRP links below the price */
1927
+ .product-view .product-shop .price-box.map-info .old-price { display:block; }
1928
+
1929
+ /* Special price */
1930
+ .product-view .price-box .special-price { white-space:nowrap; /*Chrome*/ }
1931
+ .product-view .price-box .special-price .price-label { white-space:nowrap; }
1932
+ .product-view .price-box .special-price .price-including-tax,
1933
+ .product-view .price-box .special-price .price-excluding-tax { padding:0 0 0 15px; }
1934
+
1935
+ /* Price box inside "Add-to-cart" box or inside product options box */
1936
+ .product-view .add-to-box .price-box,
1937
+ .product-options-bottom .price-box { float:left; margin:18px 15px 10px 0; padding:0; }
1938
+
1939
+
1940
+ /* Main containers (e.g. for add-to-cart, product options)
1941
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1942
+ */
1943
+ /* Product type specific data */
1944
+ .product-view .product-type-data { margin:15px 0 0; }
1945
+
1946
+ /* Lower part of the container */
1947
+ .product-view .container1-wrapper,
1948
+ .product-view .container2-wrapper,
1949
+ .product-view .add-to-box {
1950
+ padding:0 0 15px;
1951
+ margin:0 0 15px;
1952
+ border-bottom:1px solid #e5e5e5;
1953
+ }
1954
+
1955
+ /* Button container */
1956
+ .product-view .add-to-box {
1957
+ margin-top:15px;
1958
+ }
1959
+
1960
+ /* Background color for main containers */
1961
+ /*.product-view .product-type-data,
1962
+ .container1-wrapper,
1963
+ .container2-wrapper,
1964
+ .product-view .add-to-box {}*/
1965
+
1966
+
1967
+ /* Other elements
1968
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1969
+ */
1970
+ /* Unordered list in product description (for lists with no bullet class) */
1971
+ .product-view .short-description .std ul,
1972
+ .product-view .box-tabs .std ul { list-style:none outside none; }
1973
+ .product-view .short-description .std ul li,
1974
+ .product-view .box-tabs .std ul li { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/cck/list/bullet.png) 0 0 no-repeat; padding-left:25px; }
1975
+
1976
+ /* Margin for list in long description */
1977
+ .product-view .box-tabs .std ul { margin-bottom:1em; }
1978
+
1979
+ /* If unordered list has "disc" class, override */
1980
+ .product-view .short-description .std ul.disc,
1981
+ .product-view .box-tabs .std ul.disc { list-style:disc outside none; padding-left:1.5em; }
1982
+ .product-view .short-description .std ul.disc li,
1983
+ .product-view .box-tabs .std ul.disc li { background-image:none; padding-left:0; }
1984
+
1985
+
1986
+ /* Product options
1987
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1988
+ */
1989
+ .product-options { position:relative; margin-bottom:15px; }
1990
+ .product-options dt { font-weight:normal; }
1991
+ .product-options dt label { display:inline-block; font-weight:bold; }
1992
+ .product-options dt label.required em { float:right; margin-left:3px; }
1993
+ .product-options dd .qty-holder { display:block; padding:5px 0 0; }
1994
+ .product-options dd .qty-holder label { vertical-align:middle; }
1995
+ .product-options dt .qty-disabled { background:none; border:0; padding:3px; }
1996
+ .product-options dd { margin:3px 0 10px; }
1997
+ .product-options dl.last dd.last { border-bottom:0; }
1998
+ .product-options dd input.input-text { width:100%; /*98%*/ }
1999
+ .product-options dd input.datetime-picker { width:150px; }
2000
+ .product-options dd .time-picker { display:-moz-inline-box; display:inline-block; padding:2px 0; vertical-align:middle; }
2001
+ .product-options dd textarea { width:100%; /*width:92%;*/ height:8em; }
2002
+ .product-options dd select { width:100%; }
2003
+ .product-options dd .multiselect option { border-bottom:1px dotted #d9e5ee; padding:2px 4px; }
2004
+ .product-options ul.options-list { margin-right:5px; }
2005
+ .product-options ul.options-list li { line-height:1.5; padding:2px 0; }
2006
+ .product-options ul.options-list input.radio { float:left; }
2007
+ .product-options ul.options-list input.checkbox { float:left; }
2008
+ .product-options ul.options-list .label { display:block; margin-left:18px; }
2009
+ .product-options ul.options-list label { font-weight:normal; }
2010
+ .product-options ul.validation-failed { padding:0 7px; }
2011
+ .product-options p.note { margin:0; font-size:0.9166em; }
2012
+ .product-options p.required { position:absolute; right:0; top:-15px; }
2013
+
2014
+ /* Override form colors */
2015
+ /* .product-options dd select,
2016
+ .product-options dd .input-text,
2017
+ .product-options dd textarea,
2018
+ .product-options ul.options-list { color:#888; border-color:#ddd; }
2019
+ .product-options dd select:hover,
2020
+ .product-options dd select:focus,
2021
+ .product-options dd textarea:hover,
2022
+ .product-options dd textarea:focus,
2023
+ .product-options ul.options-list:hover { color:#333; border-color:#aaa; }*/
2024
+
2025
+ /*bottom*/
2026
+ .product-options-bottom { margin-top:20px; }
2027
+ .product-options-bottom .tier-prices { margin:0 0 10px; padding:0; border:0; background:0; }
2028
+ .product-options-bottom .tier-prices li { background:0; padding:2px 0; }
2029
+ .product-options-bottom .price-box .price-as-configured {}
2030
+ .product-options-bottom .price-label {}
2031
+ .product-options-bottom .price-tax { float:left; }
2032
+ .product-shop .product-options-bottom { margin:0; }
2033
+ .product-shop .product-options-bottom .price-label { float:none; padding-right:0; }
2034
+ .product-shop .product-options-bottom .price-tax { float:none; }
2035
+ .product-shop .product-options-bottom .add-to-cart-box { clear:both; float:left; padding-top:12px; }
2036
+
2037
+
2038
+ /* Grouped Product
2039
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2040
+ */
2041
+ .product-view .grouped-items-table { margin:0; clear:both; }
2042
+ .product-view .grouped-items-table thead th { font-weight:bold; }
2043
+ .product-view .grouped-items-table .price-box { margin:0; padding:0; border:0; }
2044
+ .product-view .grouped-items-table .price-box .price-including-tax .price { font-size:15px; }
2045
+
2046
+ .product-view .grouped-items-table td { vertical-align:middle; }
2047
+ .product-view .grouped-items-table .price-box .regular-price .price { font-size:14px; }
2048
+
2049
+
2050
+ /* Product collateral blocks
2051
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2052
+ */
2053
+ /* Hide first h2 heading (which is the same as tab text) */
2054
+ .box-tabs .panel > h2:first-child { display:none; }
2055
+
2056
+
2057
+ /* Block: Tags
2058
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2059
+ */
2060
+ .product-view .box-tags .product-tags { display:block; margin:0 0 25px; }
2061
+ .product-view .box-tags .product-tags li { display:inline; padding:0 7px; border-right:1px solid #e5e5e5; }
2062
+ .product-view .box-tags .product-tags li.first { padding-left:0; }
2063
+ .product-view .box-tags .product-tags li.last { padding-right:0; border-right:0; }
2064
+ .product-view .box-tags .form-add label { display:block; font-weight:bold; margin:0 0 5px; }
2065
+ .product-view .box-tags .form-add .input-box { float:left; margin:0 5px 5px 0; }
2066
+ .product-view .box-tags .form-add input.input-text { width:auto; }
2067
+ .product-view .box-tags .note { margin:3px 0 0; font-size:0.9166em; /*11px*/ }
2068
+
2069
+
2070
+ /* Block: Reviews
2071
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2072
+ */
2073
+ .product-view .box-reviews { margin-top:15px; }
2074
+ .product-view .box-reviews dl { margin:0 0 15px; }
2075
+ .product-view .box-reviews dt .heading { font-weight:normal; font-size:1.5em; margin-right:10px; }
2076
+ .product-view .box-reviews dt span { font-weight:bold; }
2077
+ .product-view .box-reviews dt a { font-size:18px; margin-right:8px; }
2078
+ .product-view .box-reviews dd { margin:0 0 15px 15px; padding-bottom:15px; border-bottom:1px dashed #e5e5e5; }
2079
+ .product-view .box-reviews dd .date { display:block; margin-top:3px; font-style:italic; }
2080
+ .product-view .box-reviews .ratings-table { margin:5px 0; }
2081
+
2082
+ .product-view .box-reviews .form-add {}
2083
+ .product-view .box-reviews .form-add h2 { text-transform:uppercase; }
2084
+ .product-view .box-reviews .form-add h3 { font-size:1em; font-weight:normal; margin-bottom:0; }
2085
+ .product-view .box-reviews .form-add h3 span { font-weight:bold; }
2086
+ .product-view .box-reviews .form-add h4 { font-size:1em; font-weight:normal; }
2087
+ .product-view .box-reviews .form-add h3,
2088
+ .product-view .box-reviews .form-add h4 { font-family:inherit; }
2089
+ .product-view .box-reviews .form-add .form-list { margin:15px 0 0; }
2090
+ .product-view .box-reviews .form-add .form-list .input-box {}
2091
+ .product-view .box-reviews .form-add .form-list input.input-text { width:100%; max-width:340px; }
2092
+ .product-view .box-reviews .form-add .form-list textarea { width:100%; max-width:500px; }
2093
+ .product-view .box-reviews .buttons-set button.button { float:left; margin-left:0; }
2094
+
2095
+ .product-view .box-reviews .form-add .data-table { max-width:176px; }
2096
+ .product-view .box-reviews .form-add .data-table th,
2097
+ .product-view .box-reviews .form-add .data-table td { text-align:center; line-height:1em; }
2098
+ .product-view .box-reviews .form-add .data-table td .radio { margin:0; }
2099
+
2100
+
2101
+ /* Send a Friend
2102
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2103
+ */
2104
+ .send-friend .form-list li p { margin:0 15px 0 0; }
2105
+ .send-friend .form-list .field { margin-bottom:8px; }
2106
+ .send-friend .form-list textarea { width:100%; }
2107
+ .send-friend .buttons-set .limit { float:right; margin:0 7px; }
2108
+
2109
+
2110
+
2111
+ /* Content Styles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2112
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
2113
+
2114
+ .product-name { margin:0; font-weight:normal; font-size:1em; }
2115
+ /* Product Tags */
2116
+ .tags-list li { display:inline; }
2117
+
2118
+ /* Advanced Search */
2119
+ .advanced-search-summary { padding:20px; margin:10px 0; }
2120
+ .advanced-search-summary ul { float:left; margin:0 4% 10px 0; width:46%; }
2121
+ .advanced-search-summary li { margin:0 0 2px 0; font-size:1.25em; }
2122
+ .advanced-search-summary strong { margin:0 5px 0 0; }
2123
+ .advanced-search-summary p { clear:both; float:left; display:block; margin:20px 0 0; }
2124
+
2125
+ /* Advanced Search - form */
2126
+ .advanced-search .form-list label { padding-right:10px; width:140px; }
2127
+ .advanced-search .form-list .input-box,
2128
+ .advanced-search .form-list .input-range {
2129
+ clear:none;
2130
+ float:left; /* Complex form fields (e.g. price range) require floating for correct layout */
2131
+ }
2132
+
2133
+ .catalogsearch-advanced-index .fieldset { margin-bottom:3px; }
2134
+ .catalogsearch-advanced-index .buttons-set { padding-left:0; }
2135
+ .catalogsearch-advanced-index .buttons-set button.button { float:left; margin:0; }
2136
+ .catalogsearch-advanced-index .buttons-set button.button span span { padding-left:60px; padding-right:68px; }
2137
+
2138
+ /* Sitemap */
2139
+ .page-sitemap .links { float:right; margin:0 0 5px; text-align:center; }
2140
+ .page-sitemap .links a { text-decoration:none; position:relative; }
2141
+ .page-sitemap .sitemap { margin:15px; }
2142
+ .page-sitemap .sitemap li { margin:3px 0; }
2143
+ .page-sitemap .sitemap li.level-0 { margin:10px 0 0; font-weight:bold; }
2144
+ .page-sitemap .sitemap li.level-0 a {}
2145
+ .page-sitemap .pager { clear:both; }
2146
+
2147
+ /* RSS */
2148
+ .rss-title h1 { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/i_rss-big.png) 0 center no-repeat; padding-left:30px; }
2149
+ .rss-table .link-rss { display:block; }
2150
+
2151
+
2152
+
2153
+ /* Shopping Cart %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2154
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
2155
+
2156
+ /* Checkout Types
2157
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2158
+ */
2159
+ .cart .page-title .checkout-types li { margin:0 0 5px; }
2160
+ .cart .title-buttons .checkout-types { float:right; }
2161
+ .cart .title-buttons .checkout-types li { float:left; margin:0 0 5px 5px; }
2162
+
2163
+
2164
+ /* Shopping Cart Table
2165
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2166
+ */
2167
+ .cart-table thead tr { border-bottom:1px solid #e5e5e5; }
2168
+ .cart-table th.last { border-right:none; }
2169
+
2170
+ .cart-table .product-image { width:168px; display:block; }
2171
+ .cart-table .product-name { margin:0 0 10px; font-weight:normal; font-size:1.6666em; line-height:1.2em; /*20px, 24px*/ }
2172
+ .cart-table .item-msg { margin:5px 0; font-size:0.9166em; font-weight:bold; color:#ee001c; }
2173
+ .cart-table tfoot td { padding:5px 10px; border:none; }
2174
+
2175
+ /* Table bottom - buttons
2176
+ -------------------------------------------------------------- */
2177
+ .cart-table tfoot td.last { padding:15px 0 0; border-bottom:1px solid #eee; }
2178
+ .cart-table tfoot button { padding:0; margin:0 0 15px 10px; }
2179
+ .cart-table .btn-continue { float:left; margin-left:0; }
2180
+ .cart-table .btn-update,
2181
+ .cart-table .btn-empty { float:right; }
2182
+
2183
+
2184
+ /* Cart Collateral blocks
2185
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2186
+ */
2187
+ .cart-collaterals { margin-top:2%; /* Percentage value to keep the same margin as between columns */ }
2188
+ .cart .cart-left-column > *,
2189
+ .cart .cart-right-column > * { margin-bottom:20px; }
2190
+ .cart .cart-right-column { float:right; }
2191
+
2192
+
2193
+ /* Cross-sell
2194
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2195
+ */
2196
+ .cart .crosssell .product-image { float:left; }
2197
+ .cart .crosssell .product-details { margin-left:85px; }
2198
+ .cart .crosssell .btn-cart { float:left; margin-right:10px; }
2199
+ .cart .crosssell .add-to-links { float:left; margin:12px 0 0; }
2200
+ .cart .crosssell .price-box { margin:7px 0; }
2201
+ .cart .crosssell li.item { padding:20px 0; }
2202
+ .cart .crosssell li.item.odd { margin-left:0; clear:left; }
2203
+ .cart .crosssell li.item.even { margin-right:0; float:right; }
2204
+
2205
+ /*
2206
+ -------------------------------------------------------------- */
2207
+ .cart-wide-box .crosssell li.item { float:left; width:265px; min-height:109px; }
2208
+ .cart-wide-box .crosssell li.item.odd { padding-right:20px; border-right:1px solid #eee; }
2209
+ .cart-wide-box .crosssell li.item.even { padding-left:20px; }
2210
+
2211
+
2212
+ /* Common styles: Cross-sell, Discount Codes, Estimate Shipping
2213
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2214
+ */
2215
+ .cart .discount .buttons-set,
2216
+ .cart .shipping .buttons-set { margin:10px 0 0; border:0; padding:0; text-align:left; }
2217
+ .cart .discount .buttons-set button.button,
2218
+ .cart .shipping .buttons-set button.button { float:none; margin-left:0; }
2219
+
2220
+
2221
+ /* Discount Codes (coupons)
2222
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2223
+ */
2224
+ .cart .discount label { display:block; margin:0 0 5px; }
2225
+ .cart .discount .input-box {}
2226
+ .cart .discount input.input-text { width:100%; }
2227
+
2228
+
2229
+ /* Estimate Shipping
2230
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2231
+ */
2232
+ .cart .shipping input.input-text,
2233
+ .cart .shipping select { width:100%; }
2234
+ .cart .shipping p { margin-bottom:10px; }
2235
+ .cart .shipping .sp-methods { margin:10px 0 0; }
2236
+
2237
+
2238
+ /* Shopping Cart Totals
2239
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2240
+ */
2241
+ .cart .totals { background-color:#f5f5f5; }
2242
+ .cart .totals-inner { padding:20px; }
2243
+ .cart .totals table { width:100%; }
2244
+ .cart .totals td { padding:1px 0px 1px 7px; }
2245
+ .cart .totals tr.last td {}
2246
+ .cart .totals tfoot th { padding:5px 15px 5px 7px; }
2247
+ .cart .totals tfoot td { padding-bottom:5px; }
2248
+ .cart .totals tfoot th strong,
2249
+ .cart .totals tfoot td strong { font-size:16px; }
2250
+ /*.cart .totals tfoot .price { color:#B31F5A; } */
2251
+ .cart .totals .checkout-types { text-align:right; }
2252
+ .cart .totals .checkout-types li { clear:both; margin:10px 0; }
2253
+
2254
+
2255
+ /* Cart static blocks
2256
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2257
+ */
2258
+
2259
+ /* Item Options and Options Tool Tip
2260
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2261
+ */
2262
+ .item-options { line-height:15px; }
2263
+ .item-options dt { white-space:nowrap; float:left; margin-right:7px; }
2264
+ .item-options dd { padding-left:11px; margin:0 0 2px; }
2265
+
2266
+ /* Item options in cart/checkout tables */
2267
+ .data-table .item-options dt {
2268
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/bullet.png) 0 4px no-repeat;
2269
+ padding-left:10px;
2270
+ white-space:normal; /* Override 'nowrap' */
2271
+ }
2272
+ .data-table .item-options { margin:0 0 0 10px; }
2273
+
2274
+ /* Options Tool Tip
2275
+ -------------------------------------------------------------- */
2276
+ .truncated { cursor:help; display:inline-block; }
2277
+ .truncated a.dots { cursor:help; }
2278
+ .truncated a.details { cursor:help; text-decoration:none; border-bottom:1px dotted #ccc; }
2279
+ .truncated .truncated_full_value { position:relative; z-index:999; }
2280
+ .truncated .truncated_full_value .item-options { position:absolute; top:-99999em; left:-99999em; z-index:999; padding:8px; min-width:100px; }
2281
+ .truncated .truncated_full_value .item-options > p { font-weight:bold; margin-bottom:2px; }
2282
+ .truncated .show .item-options { top:-20px; left:50%; }
2283
+ .col-left .truncated .show .item-options { left:15px; top:7px; }
2284
+ .col-right .truncated .show .item-options { left:-240px; top:7px; }
2285
+
2286
+
2287
+
2288
+ /* Checkout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2289
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
2290
+
2291
+ /********** < Common Checkout Styles */
2292
+ /* Shipping and Payment methods */
2293
+ .sp-methods dt { font-weight:bold; margin:15px 0 0; }
2294
+ .sp-methods dd { margin: 3px 0 15px; }
2295
+ .sp-methods dd li { margin: 5px 0; }
2296
+ .sp-methods .price { font-weight:bold; }
2297
+ .sp-methods .form-list { padding:10px 10px 10px 30px; }
2298
+ .sp-methods select.month { width:150px; margin-right:10px; }
2299
+ .sp-methods select.year { width:96px; }
2300
+ .sp-methods input.cvv { width:3em !important; }
2301
+
2302
+ .sp-methods .checkmo-list li {}
2303
+ .sp-methods .checkmo-list label { padding-right:10px; }
2304
+ .sp-methods .checkmo-list address { float:left; }
2305
+
2306
+ .sp-methods .centinel-logos a { margin-right:3px; }
2307
+ .sp-methods .centinel-logos img { vertical-align:middle; }
2308
+
2309
+ .please-wait { float:right; margin-right:5px; }
2310
+ .please-wait img { vertical-align:middle; }
2311
+ .cvv-what-is-this { cursor:help; margin-left:5px; }
2312
+
2313
+ /* Tooltip */
2314
+ .tool-tip { background-color:#fff; padding:10px; position:absolute; z-index:9999; }
2315
+ .tool-tip .btn-close a { margin:0 0 0 auto; }
2316
+ .tool-tip .tool-tip-content { padding:5px; }
2317
+
2318
+ /* Gift Messages */
2319
+ .gift-messages { margin:30px 0 10px; }
2320
+ .gift-messages-form { border:1px solid #e5e5e5; padding:20px; position:relative; }
2321
+ .gift-messages-form p { margin-bottom:10px; }
2322
+ .gift-messages-form label { float:none !important; position:static !important; }
2323
+ .gift-messages-form .item { margin:0 0 10px; }
2324
+ .gift-messages-form .item .product-img-box { float:left; width:75px; }
2325
+ .gift-messages-form .item .product-image { margin:0 0 7px; }
2326
+ .gift-messages-form .item .number { margin:0; font-weight:bold; text-align:center; }
2327
+ .gift-messages-form .item .details { margin-left:90px; }
2328
+
2329
+ .gift-message-link { display:block; background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/bkg_collapse.gif) 0 4px no-repeat; padding-left:20px; }
2330
+ .gift-message-link.expanded { background-position:0 -53px; }
2331
+ .gift-message-row .btn-close { float:right; padding:0 7px 0px; }
2332
+ .gift-message dt strong { font-weight:bold; color:#666; }
2333
+ .gift-message dd { margin:5px 0 0; font-size:13px; }
2334
+ .order-gift-message { margin:15px 0; }
2335
+
2336
+ /* Checkout Agreements */
2337
+ .checkout-agreements { padding:0 60px 20px; }
2338
+ .checkout-agreements li { margin:0 0 20px; }
2339
+ .checkout-agreements .agree { margin-top: 5px; }
2340
+ .checkout-agreements .agree input.checkbox { margin-right:6px; }
2341
+ .checkout-agreements .agree label { font-weight:bold; }
2342
+ .opc .checkout-agreements { padding:15px 30px; }
2343
+
2344
+ .checkout-agreements .agreement-content { max-height:250px; overflow:auto; padding-right:30px; }
2345
+
2346
+ /* Centinel */
2347
+ .centinel {}
2348
+ .centinel .authentication { border:1px solid #ddd; background:#fff; }
2349
+ .centinel .authentication iframe { width:99%; height:400px; background:transparent !important; margin:0 !important; padding:0 !important; border:0 !important; }
2350
+
2351
+ /* Generic Info Set */
2352
+ /* For more styles see Multiple Addresses Checkout */
2353
+ .info-set .data-table .item-options { margin:5px 0 0; }
2354
+ /********** Common Checkout Styles > */
2355
+
2356
+
2357
+ /* Other */
2358
+ .block-progress .block-title { background:none; border:0; padding:10px 0;}
2359
+ .block-progress .block-title strong { font-family:inherit; text-transform:none; font-weight:normal; }
2360
+ .block-progress .block-content { background:none; padding:0; margin-top:10px; border:none; }
2361
+ .block-progress dt {
2362
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/checkout-progress.png) 0 5px no-repeat;
2363
+ line-height:18px;
2364
+ margin:0 0 5px;
2365
+ padding:6px 0 6px 30px;
2366
+ font-weight:bold;
2367
+ }
2368
+ .block-progress dd {
2369
+ line-height:15px;
2370
+ border-top:0 none;
2371
+ margin:0 0 6px;
2372
+ padding:8px 10px;
2373
+ }
2374
+ .block-progress dt.complete { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/checkout-progress-done.png) 0 5px no-repeat; }
2375
+ .block-progress dt.complete .separator {}
2376
+ .block-progress dt.complete a { font-weight:normal; }
2377
+ .block-progress dd.complete {}
2378
+ .block-progress p { margin:0; }
2379
+
2380
+ .opc .buttons-set { margin-top:0; padding-top:2em; }
2381
+ .opc .buttons-set p.required { margin:0; padding:0 0 10px; }
2382
+ .opc .buttons-set.disabled button.button { display:none; }
2383
+ .opc .buttons-set .please-wait { height:28px; line-height:28px; }
2384
+ .opc .ul { list-style:disc outside; padding-left:18px; }
2385
+
2386
+ .opc { position:relative; }
2387
+ .opc .section { margin:0 0 10px; padding:0; }
2388
+
2389
+ .opc .step-title { background:#f5f5f5; padding:10px; text-align:right; }
2390
+ .opc .step-title .number { float:left; background:#fff; padding:8px 12px; margin:0 8px 0 0; font-size:1.3333em; }
2391
+ .opc .step-title h2 { float:left; margin:0; color:#999; font-size:1.3333em; line-height:2.125em; }
2392
+ .opc .step-title a { display:none; float:right; margin-top:6px; }
2393
+
2394
+ .opc .section.allow { cursor:pointer; }
2395
+ .opc .section.allow.active { cursor:auto; }
2396
+ .opc .allow .step-title { background:#f5f5f5; }
2397
+ .opc .allow .step-title:hover { background-color:#e5e5e5; }
2398
+ .opc .allow .step-title h2 { color:#333; }
2399
+ .opc .allow .step-title a { display:block; }
2400
+
2401
+ .opc .active .step-title { background-color:#e5e5e5; cursor:default; }
2402
+ .opc .active .step-title .number { color:#fff; background-color:#333; }
2403
+ .opc .active .step-title h2 {}
2404
+ .opc .active .step-title a { display:none; }
2405
+
2406
+ .opc .step { padding:10px 20px; margin-top:10px; position:relative; }
2407
+ .opc .step .tool-tip { right:30px; }
2408
+
2409
+ #opc-login .col-1 {}
2410
+ #opc-login .col-2 {}
2411
+ #opc-login h3 { margin-top:10px; }
2412
+ #opc-login h4 { font-family:inherit; font-weight:normal; }
2413
+ #opc-login .form-list { margin:15px 0 15px; }
2414
+ #opc-login .form-list li { margin:0 0 3px;}
2415
+ #opc-login .buttons-set { padding:0; }
2416
+
2417
+ .opc .gift-messages-form { border:1px solid #e5e5e5; border-width:1px 0;}
2418
+ .opc .gift-messages-form .inner-box { overflow:visible; }
2419
+
2420
+ #opc-review .step { padding:0; }
2421
+ #opc-review .item-options { margin:5px 0 0; }
2422
+ #opc-review .buttons-set { border:0; padding:15px 30px; }
2423
+ #opc-review .buttons-set p { margin:0; line-height:28px; }
2424
+ #opc-review .buttons-set .please-wait { height:28px; line-height:28px; }
2425
+ #opc-review .authentication { margin:0 auto; width:570px; }
2426
+ #opc-review .warning-message { color:#222; font-weight:bold; text-align:center; padding:10px 10px 0; }
2427
+
2428
+
2429
+ /* Common styles for: Multiple Addresses Checkout and Generic Info Set
2430
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2431
+ */
2432
+ .multiple-checkout h2,
2433
+ .info-set h2 { font-weight:bold; margin:0 0 10px; }
2434
+ .multiple-checkout h3,
2435
+ .multiple-checkout h4,
2436
+ .info-set h3,
2437
+ .info-set h4 { font-size:15px; font-weight:bold; }
2438
+ .multiple-checkout h2 a,
2439
+ .multiple-checkout h3 a,
2440
+ .multiple-checkout h4 a,
2441
+ .info-set h2 a,
2442
+ .info-set h3 a,
2443
+ .info-set h4 a { font-size:12px; font-weight:normal; }
2444
+
2445
+ .multiple-checkout .data-table .product-name,
2446
+ .info-set .data-table .product-name { font-size:13px; margin:0 0 5px; }
2447
+ .multiple-checkout .col2-set h2.legend,
2448
+ .info-set h2.legend { font-weight:normal; }
2449
+ .multiple-checkout .col2-set h3.legend,
2450
+ .info-set h3.legend { color:#ce001a; margin:0 0 10px; }
2451
+ .multiple-checkout .col2-set .divider,
2452
+ .info-set .divider { margin:0 -20px; padding:25px 0; position:relative; }
2453
+ .multiple-checkout .box,
2454
+ .info-set .box { margin:0 0 15px; }
2455
+
2456
+
2457
+
2458
+ /* Multiple Addresses Checkout
2459
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2460
+ */
2461
+ .checkout-progress { padding:0 110px; margin:-11px 0 25px; }
2462
+ .checkout-progress li { float:left; width:19%; margin:0 1px 0 0; padding-top:5px; border-top:10px solid #d5d5d5; text-align:center; color:#bbb; }
2463
+ .checkout-progress li.active { border-top-color:#ce001a; color:#ce001a; }
2464
+
2465
+ .multiple-checkout .page-title { border-bottom:1px solid #e5e5e5; padding-bottom:5px; }
2466
+ .multiple-checkout .buttons-set { border-top:1px solid #e5e5e5; margin-top:40px; padding-top:15px; }
2467
+
2468
+ /* Styles similar to cart-table */
2469
+ .multiple-checkout .data-table thead tr { border-bottom:1px solid #bbb; }
2470
+ .multiple-checkout .data-table thead th { padding:10px; font-weight:normal; }
2471
+
2472
+ .multiple-checkout .gift-messages { margin:15px 0 0; }
2473
+ .multiple-checkout .tool-tip { top:50%; margin-top:-120px; right:10px; }
2474
+
2475
+ .multiple-checkout .col2-set .col-1 { width:32%; }
2476
+ .multiple-checkout p.actions { margin-bottom:10px; }
2477
+
2478
+ .multiple-checkout .place-order .please-wait { margin-top:10px; }
2479
+ .multiple-checkout .place-order .grand-total { font-size:1.5em; text-align:right; }
2480
+ .multiple-checkout .place-order .grand-total .inner div { display:inline; }
2481
+ .multiple-checkout .place-order .grand-total big { display:inline; margin-right:20px; }
2482
+
2483
+ /* Step 1 */
2484
+ #multiship-addresses-table td { padding:10px; }
2485
+
2486
+ /* Step 2 */
2487
+ .checkout-multishipping-shipping .box-sp-methods { border:1px solid #e5e5e5; padding:15px; margin-bottom:0; position:relative; }
2488
+
2489
+
2490
+
2491
+ /* My Account %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2492
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
2493
+
2494
+ /* Account Login/Create Pages
2495
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2496
+ */
2497
+ .account-login .new-users,
2498
+ .account-login .registered-users { margin-bottom:20px; }
2499
+ .account-login p { margin-bottom:20px; }
2500
+ .account-login p.required { margin:0; }
2501
+ .account-login .buttons-set { clear:none; padding:0; margin:0; }
2502
+
2503
+ /* Account Login/Create box elements - login page and checkout page */
2504
+ .account-login .buttons-set button,
2505
+ #opc-login .buttons-set button { float:left; margin-left:0; }
2506
+ .account-login .buttons-set a,
2507
+ #opc-login .buttons-set a { float:right !important; margin:4px 0 0; }
2508
+
2509
+
2510
+ /* My Account Dashboard
2511
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2512
+ */
2513
+ .my-account {}
2514
+ .my-account .title-buttons .link-rss { float:none; margin:0; }
2515
+
2516
+ /********** < Dashboard */
2517
+ .dashboard .welcome-msg { margin:0 0 1.6666em; }
2518
+ .dashboard .welcome-msg .hello { font-size:1.6666em; line-height:1.2em; /*20px, 24px*/ }
2519
+ .dashboard .welcome-msg .hello strong { font-weight: normal; }
2520
+ .dashboard .col-1,
2521
+ .dashboard .col-2 { margin-bottom:1.5em; }
2522
+
2523
+ /* General Box */
2524
+ .box-account { margin:0 0 2.5em; }
2525
+ .box-account .box-head { border-bottom:1px solid #e5e5e5; margin:0 0 10px; padding-bottom:5px; }
2526
+ .box-account .box-head a { float:right; margin-top:10px; }
2527
+ .box-account .box-head h2 { float:left; margin:0; background-position:0 0; background-repeat:no-repeat; }
2528
+ .box-account.box-info .col-1 { border-right:1px solid #e5e5e5; }
2529
+ .box-account.box-info .col-1 .box { padding-right:10px; }
2530
+
2531
+ .dashboard .box .box-title { padding:0 0 2px; margin:0 0 10px; text-align:right; border-bottom:1px solid #e5e5e5; }
2532
+ .dashboard .box .box-title h3,
2533
+ .dashboard .box .box-title h4 { float:left; margin:0; }
2534
+
2535
+ /* Block: Recent Orders */
2536
+ .dashboard .box-recent .box-head h2 {}
2537
+
2538
+ /* Block: Account Information */
2539
+ .dashboard .box-info .box-head h2 {}
2540
+ .dashboard .box-info h4 { font-weight:normal; text-transform:uppercase; }
2541
+
2542
+ /* Block: Reviews */
2543
+ .dashboard .box-reviews .box-head h2 {}
2544
+ .dashboard .box-reviews .number { float:left; font-size:1.3333em; line-height:1.25em; padding:0 10px; }
2545
+ .dashboard .box-reviews .details { margin-left:38px; }
2546
+ .dashboard .box-reviews li.item { margin:0 0 7px; }
2547
+ .dashboard .box-reviews li.item.last { margin:0; }
2548
+ .dashboard .box-reviews .ratings { margin:5px 0 0; }
2549
+
2550
+ /* Block: Tags */
2551
+ .dashboard .box-tags .box-head h2 {}
2552
+ .dashboard .box-tags .number { float:left; font-size:1.3333em; line-height:1.25em; padding:0 10px; }
2553
+ .dashboard .box-tags .details { margin-left:38px; }
2554
+ .dashboard .box-tags .tags { margin:5px 0 0; }
2555
+ .dashboard .box-tags li.item { margin:0 0 7px; }
2556
+ .dashboard .box-tags li.item.last { margin:0; }
2557
+ .dashboard .box-tags .tags strong,
2558
+ .dashboard .box-tags .tags ul,
2559
+ .dashboard .box-tags .tags ul li { display:inline; }
2560
+ /********** Dashboard > */
2561
+
2562
+ /* Add left padding if icons are displayed in headings */
2563
+ /*.box-account .box-head h2,
2564
+ .order-items h2,
2565
+ .order-about h2 { padding-left:38px; }*/
2566
+
2567
+
2568
+ /* Address Book
2569
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2570
+ */
2571
+ .addresses-list h3 { font-weight:normal; }
2572
+ .addresses-list address { margin-bottom:10px; }
2573
+ .addresses-list .link-remove:hover { color:#ee001c; }
2574
+ .addresses-list .separator { margin:0 3px; }
2575
+ .addresses-list .addresses-primary .item { padding:15px; margin:0 0 10px; background-color:#f5f5f5; }
2576
+ .addresses-list li.empty { background:none; border:0; padding:0; }
2577
+ .addresses-list li.empty p { color:#555; }
2578
+ .addresses-list .addresses-additional .item { padding:15px; margin:0 0 10px; border:1px solid #e5e5e5; }
2579
+
2580
+ .my-account .pager { margin-bottom:20px; }
2581
+
2582
+
2583
+ /* Order View
2584
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2585
+ */
2586
+ .order-info { margin:20px 0 10px; }
2587
+ .order-info dt,
2588
+ .order-info dd,
2589
+ .order-info li,
2590
+ .order-info li a { float:left; }
2591
+
2592
+ .order-info dt { font-weight:bold; }
2593
+ .order-info li { margin-right:1px; }
2594
+ .order-info dt,
2595
+ .order-info li.current,
2596
+ .order-info li a { padding:10px; }
2597
+ .order-info dt { padding-left:0; }
2598
+
2599
+ .order-info li a { background-color:#f8f8f8; }
2600
+ .order-info li a:hover,
2601
+ .order-info li.current { background-color:#e5e5e5; }
2602
+
2603
+ /* Date */
2604
+ .order-date { margin:15px 0; color:#ee001c; clear:both; }
2605
+
2606
+
2607
+ /*
2608
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2609
+ */
2610
+ .order-info-box { margin:0 0 10px; padding:20px; }
2611
+ .order-info-box .col-1 { border-right:#e5e5e5 solid 1px; }
2612
+ .order-info-box h2 {}
2613
+ .order-info-box .box-payment p { margin:0 0 3px; }
2614
+ .order-info-box .box-payment th { font-weight:bold; padding-right:7px; }
2615
+
2616
+ .order-items .data-table { margin-bottom:20px; }
2617
+ .order-items .data-table td { padding:5px 9px; }
2618
+ .order-items .data-table .grand_total { font-size:1.3333em; }
2619
+ /* Grand total color */
2620
+ .order-items .data-table .grand_total .last,
2621
+ .order-items .data-table .grand_total_incl .last {}
2622
+
2623
+ .order-items { width:100%; }
2624
+ .order-items .product-name { margin:0 0 3px; font-size:12px; }
2625
+ .order-items .link-print { font-weight:normal; }
2626
+ .order-items p .link-print { float:none; }
2627
+
2628
+ .order-items h2,
2629
+ .order-about h2 { margin:15px 0; }
2630
+
2631
+ .order-items h3.table-caption { font-size:13px; font-weight:bold; }
2632
+ .order-items h2.table-caption a,
2633
+ .order-items h2.sub-title a {
2634
+ font-size:12px;
2635
+ font-weight:normal;
2636
+ text-transform:none;
2637
+ }
2638
+ .order-items .order-links { text-align: right; }
2639
+ .order-items .order-comments h2 {}
2640
+
2641
+ .order-details h2 {}
2642
+ .order-details h2 .separator { color:#999; font-size:12px; }
2643
+
2644
+ .order-about { margin:0 0 15px; padding:5px 30px; }
2645
+ .order-about dt { font-weight:bold; }
2646
+ .order-about dd { font-size:12px; margin-bottom:15px; }
2647
+
2648
+ .tracking-table { margin:0 0 15px; }
2649
+ .tracking-table th { width:20%; font-weight:bold; white-space:nowrap; }
2650
+ .tracking-table th,
2651
+ .tracking-table td { padding:5px 9px; }
2652
+
2653
+ .tracking-table-popup { width:100%; }
2654
+ .tracking-table-popup th { font-weight:bold; white-space:nowrap; }
2655
+ .tracking-table-popup th,
2656
+ .tracking-table-popup td { padding:1px 8px; }
2657
+
2658
+
2659
+ /* Order Print Pages
2660
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2661
+ */
2662
+ .page-print .print-head { margin:0 0 15px; }
2663
+ .page-print .print-head .logo { float:left; }
2664
+ .page-print .print-head address { float:left; margin-left:15px; }
2665
+ .page-print h1 { font-size:16px; font-weight:bold; }
2666
+ .page-print h2,
2667
+ .page-print h3 { font-size:13px; font-weight:bold; }
2668
+ .page-print h2.h2 { font-size:16px; font-weight:bold; }
2669
+ .page-print .order-date { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/bkg_divider1.gif) 0 100% repeat-x; padding:0 0 10px; margin:0 0 10px; }
2670
+ .page-print .col2-set { margin:0 0 10px; }
2671
+ /* Price Rewrites */
2672
+ .page-print .gift-message-link { display:none; }
2673
+ .page-print .price-excl-tax,
2674
+ .page-print .price-incl-tax { display:block; white-space:nowrap; }
2675
+ .page-print .cart-price,
2676
+ .page-print .price-excl-tax .label,
2677
+ .page-print .price-incl-tax .label,
2678
+ .page-print .price-excl-tax .price,
2679
+ .page-print .price-incl-tax .price { display:inline; }
2680
+
2681
+
2682
+ /* My Wishlist
2683
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2684
+ */
2685
+ .my-wishlist .product-image { display:block; margin:0 0 5px; min-width:113px; max-width:140px; }
2686
+ .my-wishlist .product-name { margin-bottom:10px; }
2687
+ .my-wishlist .description { margin-bottom:10px; }
2688
+ .my-wishlist textarea { display:block; width:97%; height:70px; border:1px solid #e5e5e5; }
2689
+ .my-wishlist .price-box { margin-bottom:5px; }
2690
+ .my-wishlist .add-to-cart-alt { margin-bottom:10px; }
2691
+ .my-wishlist .buttons-set { margin-top:2em; }
2692
+ .my-wishlist .buttons-set button.button { float:none; }
2693
+ #wishlist-table .add-to-links { white-space:nowrap; }
2694
+
2695
+ .my-wishlist .data-table tr.even { background:#f8f8f8; }
2696
+ .my-wishlist .btn-cart { margin:10px 0 5px; }
2697
+
2698
+
2699
+ /* My Tags
2700
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2701
+ */
2702
+ .my-tag-edit { float:left; margin:0 0 10px; }
2703
+ .my-tag-edit .btn-remove { float:right; margin:5px 0 0 5px; }
2704
+ #my-tags-table { clear:both; }
2705
+ #my-tags-table td { padding:10px; }
2706
+ #my-tags-table .add-to-links { white-space:nowrap; }
2707
+
2708
+
2709
+ /* My Reviews TODO:deprecated
2710
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2711
+ */
2712
+ #my-reviews-table td { padding:10px; }
2713
+ .product-review .product-img-box { float:left; width:140px; }
2714
+ .product-review .product-img-box .product-image { display:block; width:125px; height:125px; }
2715
+ .product-review .product-img-box .label { margin:0 0 8px; }
2716
+ .product-review .product-img-box .ratings .rating-box { float:none; display:block; margin:0 0 10px; }
2717
+ .product-review .product-details { margin:0 20px 20px 155px; }
2718
+ .product-review .product-name { font-size:18px; margin:0 0 18px; }
2719
+ .product-review h3 { font-size:12px; margin:15px 0 5px; }
2720
+ .product-review .ratings-table { margin:0 0 15px; }
2721
+ .product-review dt { font-weight:bold; }
2722
+ .product-review dd { font-size:12px; margin:5px 0 0; }
2723
+
2724
+
2725
+ /* Billing Agreements
2726
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2727
+ */
2728
+ .billing-agreements .form-list li select { float:left; }
2729
+ .billing-agreements .form-list li button.button { float:left; margin-left:10px; }
2730
+ .billing-agreements .table-caption { font-weight:bold; font-size:13px; }
2731
+
2732
+
2733
+
2734
+ /* Popups %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2735
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
2736
+
2737
+ /* Remember Me Popup
2738
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2739
+ */
2740
+ .window-overlay { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/window_overlay.png) repeat; background:rgba(0, 0, 0, 0.35); position:absolute; top:0; left:0; width:100%; height:100%; z-index:9999; }
2741
+
2742
+ .remember-me label { float:none; margin:0 6px; }
2743
+ .remember-me-popup { left:50%; top:50%; position:absolute; margin:-85px 0 0 -200px; width:400px; z-index:10000; }
2744
+ .remember-me-popup .remember-me-popup-head { position:relative; }
2745
+ /*.remember-me-popup .remember-me-popup-head .remember-me-popup-close { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/btn_window_close.gif) no-repeat; display:block; position:absolute; top:7px; right:7px; height:15px; width:15px; text-indent:-9999em; }
2746
+ .remember-me-popup .remember-me-popup-body a { display:inline-block; height:19px; border:1px solid #de5400; background:#f18200; padding:0 8px; font:bold 12px/19px Arial, Helvetica, sans-serif; text-align:center; text-decoration:none; white-space:nowrap; color:#fff; }*/
2747
+ /* Additionally remove the button */
2748
+ .remember-me-popup .remember-me-popup-close-button { display:none; }
2749
+
2750
+
2751
+ /* MAP Popup
2752
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2753
+ */
2754
+ .cart-msrp-totals { color:red; font-size:12px !important; text-align:right; text-transform:uppercase;}
2755
+ .map-cart-sidebar-total { color:red; display:block; text-align:left;
2756
+ overflow:hidden;
2757
+ text-overflow:ellipsis;
2758
+ white-space:nowrap;
2759
+ text-transform:lowercase;
2760
+ width:55px;
2761
+ line-height:15px;
2762
+ padding:2px 8px;
2763
+ }
2764
+ .map-cart-sidebar-total:hover {
2765
+ overflow:visible;
2766
+ white-space:normal;
2767
+ background-color:#fff;
2768
+ box-shadow:1px 1px 5px rgba(0, 0, 0, 0.2);
2769
+ }
2770
+ .map-popup { margin:10px 0 0; position:absolute; width:300px; z-index:100; }
2771
+ .map-popup-heading { width:240px; }
2772
+ .map-popup-heading h2 {
2773
+ margin:0;
2774
+ overflow:hidden;
2775
+ white-space:nowrap;
2776
+ word-wrap: break-word;
2777
+ text-align:left;
2778
+ text-overflow:ellipsis;
2779
+ }
2780
+ .map-popup-arrow { display:none; /*border-color:transparent transparent #fff transparent; border-style:solid; border-width:10px; position:absolute; left:50%; top:-20px;*/ }
2781
+ .map-popup-content { overflow:hidden; text-align:left; width:270px; }
2782
+ .map-popup-checkout { display:inline; float:right; text-align:right; }
2783
+ .map-popup-checkout span { display:block; padding-right:30px; }
2784
+ .map-popup-checkout .paypal-logo { margin:0 0 5px; }
2785
+ .map-popup-price .price-box,
2786
+ .map-popup-price .price-box .special-price { margin:0; padding:0; }
2787
+ .map-popup-price { margin:5px 0 0; }
2788
+ .map-popup-text { clear:right; margin:0 15px; padding:15px 0; text-align:left; word-wrap:break-word; }
2789
+ .map-popup-only-text { border-top:1px solid #eee; }
2790
+
2791
+
2792
+ /* Common styles for: Remember Me Popup and MAP Popup
2793
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2794
+ */
2795
+ .remember-me-popup,
2796
+ .map-popup { background:#fff; text-align:left; /* + Common shadow styles for multiple items */ }
2797
+ .remember-me-popup h3,
2798
+ .map-popup-heading { border-bottom:1px solid #e5e5e5; padding:12px 45px 12px 15px; }
2799
+ .remember-me-popup h3,
2800
+ .map-popup-heading h2 { font-size:1.5em; /*18px*/ }
2801
+ .remember-me-popup .remember-me-popup-body,
2802
+ .map-popup-content { padding:15px; }
2803
+ .remember-me-popup .remember-me-popup-head .remember-me-popup-close,
2804
+ .map-popup-close { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/pix.png) 0 -150px no-repeat; display:block; position:absolute; top:11px; right:15px; height:17px; width:17px; text-indent:-9999em; }
2805
+ .remember-me-popup .remember-me-popup-head .remember-me-popup-close:hover,
2806
+ .map-popup-close:hover { background-position:-17px -150px; }
2807
+ .remember-me-popup .remember-me-popup-head .remember-me-popup-close:active,
2808
+ .map-popup-close:active { background-position:-34px -150px; }
2809
+
2810
+ /* Other
2811
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2812
+ */
2813
+ .calendar { z-index:200; }
2814
+
2815
+
2816
+
2817
+ /* Footer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2818
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
2819
+
2820
+ .footer-container,
2821
+ .footer-container2 { background-repeat:repeat; background-position:center top; background-attachment: scroll; }
2822
+ .footer {
2823
+ width:960px;
2824
+ margin:0 auto;
2825
+ padding:0;
2826
+ text-align:left;
2827
+ }
2828
+ .footer .item-left { float:left; margin-right:20px; }
2829
+ .footer .item-right { float:right; margin-left:20px; }
2830
+
2831
+ /* Footer elements */
2832
+ .footer .heading,
2833
+ #subscribe-form label { margin-bottom:0.625em; font-size:1.3333em; font-weight:normal; }
2834
+
2835
+
2836
+ /* Footer top
2837
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2838
+ */
2839
+ .footer-top {}
2840
+
2841
+
2842
+ /* Footer primary
2843
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2844
+ */
2845
+ .footer-primary {}
2846
+
2847
+ /* Primary footer additional
2848
+ -------------------------------------------------------------- */
2849
+ .footer-primary-top-spacing {
2850
+ padding-top:20px;
2851
+ padding-bottom:20px;
2852
+ border-bottom:1px solid;
2853
+ border-color:#eee;
2854
+ border-color:rgba(0,0,0, 0.05);
2855
+ }
2856
+ .footer-primary-bottom-spacing {
2857
+ border-top:1px solid;
2858
+ border-color:#eee;
2859
+ border-color:rgba(0,0,0, 0.05);
2860
+ padding-top:20px;
2861
+ padding-bottom:20px;
2862
+ }
2863
+
2864
+
2865
+ /* Footer secondary
2866
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2867
+ */
2868
+ .footer-secondary {}
2869
+
2870
+
2871
+ /* Footer bottom
2872
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2873
+ */
2874
+ .footer-bottom-container {}
2875
+ .footer-bottom {
2876
+ padding-top:10px; /* To counterbalance the bottom margin of footer elements */
2877
+ }
2878
+
2879
+
2880
+ /* Footer elements
2881
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2882
+ */
2883
+
2884
+ /* Newsletter form
2885
+ -------------------------------------------------------------- */
2886
+ #subscribe-form {}
2887
+ #subscribe-form form { display:block; }
2888
+ #subscribe-form label { float:left; margin:0 5px 0 0; line-height:36px; font-weight:normal; position: relative; }
2889
+ #subscribe-form .input-box { float:left; margin:0 5px 5px 0; position:relative; }
2890
+ #subscribe-form .input-box .validation-advice {
2891
+ padding:10px 0;
2892
+ margin:0;
2893
+ width:140%;
2894
+ position:absolute;
2895
+ top:-103%;
2896
+ left:-20%;
2897
+ text-align:center;
2898
+ background-color:#fff;
2899
+ background-color:rgba(255,255,255,0.9);
2900
+ z-index:1;
2901
+ }
2902
+ #subscribe-form .input-text {
2903
+ float:left;
2904
+ width:auto;
2905
+ }
2906
+ #subscribe-form .input-text.validation-failed {}
2907
+ #subscribe-form .button { float:left; }
2908
+
2909
+ /* Social services
2910
+ -------------------------------------------------------------- */
2911
+ .social-links span.icon { margin-bottom:3px; }
2912
+
2913
+ /* Other elements
2914
+ -------------------------------------------------------------- */
2915
+ .footer-copyright { font-size:0.9166em; /*11px*/ line-height:1.3636em; margin-bottom:10px; margin-left:10px; }
2916
+
2917
+ /* Scroll to top button
2918
+ -------------------------------------------------------------- */
2919
+ #scroll-to-top {
2920
+ display:none;
2921
+ position:fixed;
2922
+ width:50px;
2923
+ height:50px;
2924
+ bottom:30px;
2925
+ right:30px;
2926
+ z-index:9999;
2927
+ text-indent:-9999px;
2928
+ border-radius:50%;
2929
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png) -200px -100px no-repeat #e5e5e5;
2930
+ }
2931
+ #scroll-to-top:hover {
2932
+ background-position:-200px -150px;
2933
+ background-color:#333;
2934
+ }
2935
+
2936
+
2937
+
2938
+ /* CMS pages and elements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2939
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
2940
+
2941
+ /* CMS pages
2942
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2943
+ */
2944
+ /* Home page */
2945
+ body.cms-index-index .breadcrumbs { display:none; }
2946
+
2947
+
2948
+ /* Magento widgets
2949
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2950
+ */
2951
+ .widget-new-products .products-grid .item,
2952
+ .widget-viewed .products-grid .item,
2953
+ .widget-compared .products-grid .item { float: left; max-width: 165px; padding: 0 10px 15px; }
2954
+
2955
+ .widget-new-products .products-list,
2956
+ .widget-viewed .products-list,
2957
+ .widget-compared .products-list { list-style-type: none; padding: 0; }
2958
+
2959
+ .widget-new-products .products-list .product-image,
2960
+ .widget-viewed .products-list .product-image,
2961
+ .widget-compared .products-list .product-image { float: left; }
2962
+
2963
+
2964
+
2965
+ /* Clear %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2966
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
2967
+ .clear { clear:both; font-size:0; line-height:0; height:0; } /* Additional simple clearing */
2968
+ .clearer:after,
2969
+ .header-container:after,
2970
+ .header-container .top-container:after,
2971
+ .header:after,
2972
+ .header .quick-access:after,
2973
+ #nav:after,
2974
+ .main:after,
2975
+ .footer:after,
2976
+ .footer-container .bottom-container:after,
2977
+ .col-main:after,
2978
+ .col2-set:after,
2979
+ .col3-set:after,
2980
+ .col3-layout .product-options-bottom .price-box:after,
2981
+ .col4-set:after,
2982
+ .search-autocomplete li:after,
2983
+ .block .block-content:after,
2984
+ .block .actions:after,
2985
+ .block li.item:after,
2986
+ .block-poll li:after,
2987
+ .block-layered-nav .currently li:after,
2988
+ .page-title:after,
2989
+ .products-grid:after,
2990
+ .products-list li.item:after,
2991
+ .box-account .box-head:after,
2992
+ .dashboard .box .box-title:after,
2993
+ .box-reviews li.item:after,
2994
+ .box-tags li.item:after,
2995
+ .pager:after,
2996
+ .sorter:after,
2997
+ .ratings:after,
2998
+ .add-to-box:after,
2999
+ .add-to-cart:after,
3000
+ .product-essential:after,
3001
+ .product-view .box-tags .form-add:after,
3002
+ .product-view .product-shop .short-description:after,
3003
+ .product-view .box-description:after,
3004
+ .product-options .options-list li:after,
3005
+ .product-options-bottom:after,
3006
+ .product-review:after,
3007
+ .cart:after,
3008
+ .cart-collaterals:after,
3009
+ .cart .crosssell li.item:after,
3010
+ .opc .step-title:after,
3011
+ .checkout-progress:after,
3012
+ .multiple-checkout .place-order:after,
3013
+ .group-select li:after,
3014
+ .form-list li:after,
3015
+ .form-list .field:after,
3016
+ .buttons-set:after,
3017
+ .page-print .print-head:after,
3018
+ .advanced-search-summary:after,
3019
+ .gift-messages-form .item:after,
3020
+ .send-friend .form-list li p:after,
3021
+
3022
+ /* Additional clearing */
3023
+ .my-account .order-info:after,
3024
+ #mini-cart .mini-products-list li.item:after,
3025
+ .block-related-thumbnails .product:after,
3026
+ .cart .crosssell:after,
3027
+ .section-line:after,
3028
+ .section-title:after
3029
+
3030
+ { display:block; content:"."; clear:both; font-size:0; line-height:0; height:0; overflow:hidden; }
3031
+
3032
+ /**
3033
+ * Magento
3034
+ *
3035
+ * NOTICE OF LICENSE
3036
+ *
3037
+ * This source file is subject to the Academic Free License (AFL 3.0)
3038
+ * that is bundled with this package in the file LICENSE_AFL.txt.
3039
+ * It is also available through the world-wide-web at this URL:
3040
+ * http://opensource.org/licenses/afl-3.0.php
3041
+ * If you did not receive a copy of the license and are unable to
3042
+ * obtain it through the world-wide-web, please send an email
3043
+ * to license@magentocommerce.com so we can send you a copy immediately.
3044
+ *
3045
+ * DISCLAIMER
3046
+ *
3047
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
3048
+ * versions in the future. If you wish to customize Magento for your
3049
+ * needs please refer to http://www.magentocommerce.com for more information.
3050
+ *
3051
+ * @category design
3052
+ * @package base_default
3053
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
3054
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
3055
+ */
3056
+
3057
+ /* Widgets =============================================================================== */
3058
+ .widget { display:inline; }
3059
+ .widget .widget-title { clear:both; padding:15px 0 0; margin:0 0 7px; }
3060
+ .widget .widget-title h2 { font-size:15px; font-weight:bold; color:#e25203; }
3061
+
3062
+ .widget .mini-products-images-list .product-image { display:block; width:76px; height:76px; border:1px solid #a9a9a9; margin:0 auto; }
3063
+ .widget .mini-products-images-list li.item { float:left; width:77px; height:77px; }
3064
+
3065
+ /* Widget: Catalog New Proructs List */
3066
+ .widget-new-products { display:block; }
3067
+ .col-main .widget-new-products { margin:7px 0; }
3068
+ .widget-new-products .products-grid .product-image,
3069
+ .widget-new-products .products-list .product-image { width:85px; height:85px; }
3070
+ .widget-new-products .products-list .product-shop { margin-left:100px; }
3071
+ .sidebar .widget-new-products .block { font-size:11px; line-height:1.25; }
3072
+ .sidebar .widget-new-products .block-title strong { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/base/default/images/widgets/i_widget-new.gif) 0 1px no-repeat; padding-left:21px; color:#dc5033; }
3073
+
3074
+ /* Widget: Recently Viewed Proructs */
3075
+ .widget-viewed { display:block; }
3076
+ .col-main .widget-viewed { margin:7px 0; }
3077
+ .widget-viewed .products-grid .product-image,
3078
+ .widget-viewed .products-list .product-image { width:85px; height:85px; }
3079
+ .widget-viewed .products-list .product-shop { margin-left:100px; }
3080
+ .sidebar .widget-viewed .block { font-size:11px; line-height:1.25; }
3081
+ .sidebar .widget-viewed .block-title strong { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/base/default/images/widgets/i_block-list.gif) 0 0 no-repeat; padding-left:21px; }
3082
+
3083
+ /* Widget: Recently Compared Proructs */
3084
+ .widget-compared { display:block;}
3085
+ .col-main .widget-compared { margin:7px 0; }
3086
+ .widget-compared .products-grid .product-image,
3087
+ .widget-compared .products-list .product-image { width:85px; height:85px; }
3088
+ .widget-compared .products-list .product-shop { margin-left:100px; }
3089
+ .sidebar .widget-compared .block { font-size:11px; line-height:1.25; }
3090
+ .sidebar .widget-compared .block-title strong { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/base/default/images/widgets/i_block-list.gif) 0 0 no-repeat; padding-left:21px; }
3091
+
3092
+ /* Widget: CMS Static Block */
3093
+ .widget-static-block {}
3094
+ .sidebar .widget-static-block { display:block; margin:0 0 15px; }
3095
+
3096
+ /* Widgets: Links Common Styles */
3097
+ .top-container .widget a { padding:0 0 0 7px; }
3098
+
3099
+ .bottom-container .widget a { padding:0 3px; }
3100
+
3101
+ /* Widget: Catalog Product Link */
3102
+ .widget-product-link-inline { display:inline; }
3103
+
3104
+ .col-main .widget-product-link { display:block; text-align:right; margin:7px 0; }
3105
+ .col-main .widget-product-link a { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/base/default/images/widgets/i_widget-link.gif) 100% 4px no-repeat; padding-right:15px; }
3106
+
3107
+ .sidebar .widget-product-link { display:block; margin:0 0 15px; padding:0 10px; }
3108
+ .sidebar .widget-product-link a { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/base/default/images/widgets/i_widget-link.gif) 100% 4px no-repeat; padding:0 15px 0 0; }
3109
+
3110
+ /* Widget: Catalog Category Link */
3111
+ .widget-category-link-inline { display:inline; }
3112
+
3113
+ .col-main .widget-category-link { display:block; text-align:right; margin:7px 0; }
3114
+ .col-main .widget-category-link a { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/base/default/images/widgets/i_widget-link.gif) 100% 4px no-repeat; padding-right:15px; }
3115
+
3116
+ .sidebar .widget-category-link { display:block; margin:0 0 15px; padding:0 10px; }
3117
+ .sidebar .widget-category-link a { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/base/default/images/widgets/i_widget-link.gif) 100% 4px no-repeat; padding:0 15px 0 0; }
3118
+
3119
+ /* Widget: CMS Page Link */
3120
+ .widget-cms-link-inline { display:inline; }
3121
+
3122
+ .col-main .widget-cms-link { display:block; text-align:right; margin:7px 0; }
3123
+ .col-main .widget-cms-link a { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/base/default/images/widgets/i_widget-link.gif) 100% 4px no-repeat; padding-right:15px; }
3124
+
3125
+ .sidebar .widget-cms-link { display:block; margin:0 0 15px; padding:0 10px; }
3126
+ .sidebar .widget-cms-link a { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/base/default/images/widgets/i_widget-link.gif) 100% 4px no-repeat; padding:0 15px 0 0; }
3127
+ /* ======================================================================================= */
3128
+
3129
+ /*
3130
+ * Itemslider - based on Owl Carousel
3131
+ *
3132
+ * IMPORTANT: Flexslider was replaced by Owl Carousel.
3133
+ * Deprecated styles for Flexslider are not needed any more and can be found inside this file: itemslider-old.css
3134
+ */
3135
+
3136
+
3137
+
3138
+ /* Owl Carousel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3139
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
3140
+
3141
+ /* Necessary styles (Core Owl Carousel CSS File v1.24)
3142
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3143
+ */
3144
+
3145
+ /* clearfix */
3146
+ .owl-carousel .owl-wrapper:after {
3147
+ content: ".";
3148
+ display: block;
3149
+ clear: both;
3150
+ visibility: hidden;
3151
+ line-height: 0;
3152
+ height: 0;
3153
+ }
3154
+ /* display none until init */
3155
+ .owl-carousel{
3156
+ display: none;
3157
+ position: relative;
3158
+ width: 100%;
3159
+ -ms-touch-action: pan-y;
3160
+ }
3161
+ .owl-carousel .owl-wrapper{
3162
+ display: none;
3163
+ position: relative;
3164
+ -webkit-transform: translate3d(0px, 0px, 0px);
3165
+ }
3166
+ .owl-carousel .owl-wrapper-outer{
3167
+ overflow: hidden;
3168
+ position: relative;
3169
+ width: 100%;
3170
+ }
3171
+ .owl-carousel .owl-wrapper-outer.autoHeight{
3172
+ -webkit-transition: height 500ms ease-in-out;
3173
+ -moz-transition: height 500ms ease-in-out;
3174
+ -ms-transition: height 500ms ease-in-out;
3175
+ -o-transition: height 500ms ease-in-out;
3176
+ transition: height 500ms ease-in-out;
3177
+ }
3178
+
3179
+ .owl-carousel .owl-item{
3180
+ float: left;
3181
+ }
3182
+ .owl-controls .owl-page,
3183
+ .owl-controls .owl-buttons div{
3184
+ cursor: pointer;
3185
+ }
3186
+ .owl-controls {
3187
+ -webkit-user-select: none;
3188
+ -khtml-user-select: none;
3189
+ -moz-user-select: none;
3190
+ -ms-user-select: none;
3191
+ user-select: none;
3192
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
3193
+ }
3194
+
3195
+ /* mouse grab icon */
3196
+ .grabbing {
3197
+ cursor:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/grabbing.png) 8 8, move;
3198
+ }
3199
+
3200
+ /* fix */
3201
+ .owl-carousel .owl-wrapper,
3202
+ .owl-carousel .owl-item{
3203
+ -webkit-backface-visibility: hidden;
3204
+ -moz-backface-visibility: hidden;
3205
+ -ms-backface-visibility: hidden;
3206
+ -webkit-transform: translate3d(0,0,0);
3207
+ -moz-transform: translate3d(0,0,0);
3208
+ -ms-transform: translate3d(0,0,0);
3209
+ }
3210
+
3211
+ /* CSS3 Transitions */
3212
+
3213
+ .owl-origin {
3214
+ -webkit-perspective: 1200px;
3215
+ -webkit-perspective-origin-x : 50%;
3216
+ -webkit-perspective-origin-y : 50%;
3217
+ -moz-perspective : 1200px;
3218
+ -moz-perspective-origin-x : 50%;
3219
+ -moz-perspective-origin-y : 50%;
3220
+ perspective : 1200px;
3221
+ }
3222
+ /* fade */
3223
+ .owl-fade-out {
3224
+ z-index: 10;
3225
+ -webkit-animation: fadeOut .7s both ease;
3226
+ -moz-animation: fadeOut .7s both ease;
3227
+ animation: fadeOut .7s both ease;
3228
+ }
3229
+ .owl-fade-in {
3230
+ -webkit-animation: fadeIn .7s both ease;
3231
+ -moz-animation: fadeIn .7s both ease;
3232
+ animation: fadeIn .7s both ease;
3233
+ }
3234
+ /* backSlide */
3235
+ .owl-backSlide-out {
3236
+ -webkit-animation: backSlideOut 1s both ease;
3237
+ -moz-animation: backSlideOut 1s both ease;
3238
+ animation: backSlideOut 1s both ease;
3239
+ }
3240
+ .owl-backSlide-in {
3241
+ -webkit-animation: backSlideIn 1s both ease;
3242
+ -moz-animation: backSlideIn 1s both ease;
3243
+ animation: backSlideIn 1s both ease;
3244
+ }
3245
+ /* goDown */
3246
+ .owl-goDown-out {
3247
+ -webkit-animation: scaleToFade .7s ease both;
3248
+ -moz-animation: scaleToFade .7s ease both;
3249
+ animation: scaleToFade .7s ease both;
3250
+ }
3251
+ .owl-goDown-in {
3252
+ -webkit-animation: goDown .6s ease both;
3253
+ -moz-animation: goDown .6s ease both;
3254
+ animation: goDown .6s ease both;
3255
+ }
3256
+ /* scaleUp */
3257
+ .owl-fadeUp-in {
3258
+ -webkit-animation: scaleUpFrom .5s ease both;
3259
+ -moz-animation: scaleUpFrom .5s ease both;
3260
+ animation: scaleUpFrom .5s ease both;
3261
+ }
3262
+
3263
+ .owl-fadeUp-out {
3264
+ -webkit-animation: scaleUpTo .5s ease both;
3265
+ -moz-animation: scaleUpTo .5s ease both;
3266
+ animation: scaleUpTo .5s ease both;
3267
+ }
3268
+ /* Keyframes */
3269
+ /*empty*/
3270
+ @-webkit-keyframes empty {
3271
+ 0% {opacity: 1}
3272
+ }
3273
+ @-moz-keyframes empty {
3274
+ 0% {opacity: 1}
3275
+ }
3276
+ @keyframes empty {
3277
+ 0% {opacity: 1}
3278
+ }
3279
+ @-webkit-keyframes fadeIn {
3280
+ 0% { opacity:0; }
3281
+ 100% { opacity:1; }
3282
+ }
3283
+ @-moz-keyframes fadeIn {
3284
+ 0% { opacity:0; }
3285
+ 100% { opacity:1; }
3286
+ }
3287
+ @keyframes fadeIn {
3288
+ 0% { opacity:0; }
3289
+ 100% { opacity:1; }
3290
+ }
3291
+ @-webkit-keyframes fadeOut {
3292
+ 0% { opacity:1; }
3293
+ 100% { opacity:0; }
3294
+ }
3295
+ @-moz-keyframes fadeOut {
3296
+ 0% { opacity:1; }
3297
+ 100% { opacity:0; }
3298
+ }
3299
+ @keyframes fadeOut {
3300
+ 0% { opacity:1; }
3301
+ 100% { opacity:0; }
3302
+ }
3303
+ @-webkit-keyframes backSlideOut {
3304
+ 25% { opacity: .5; -webkit-transform: translateZ(-500px); }
3305
+ 75% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
3306
+ 100% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(-200%); }
3307
+ }
3308
+ @-moz-keyframes backSlideOut {
3309
+ 25% { opacity: .5; -moz-transform: translateZ(-500px); }
3310
+ 75% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
3311
+ 100% { opacity: .5; -moz-transform: translateZ(-500px) translateX(-200%); }
3312
+ }
3313
+ @keyframes backSlideOut {
3314
+ 25% { opacity: .5; transform: translateZ(-500px); }
3315
+ 75% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
3316
+ 100% { opacity: .5; transform: translateZ(-500px) translateX(-200%); }
3317
+ }
3318
+ @-webkit-keyframes backSlideIn {
3319
+ 0%, 25% { opacity: .5; -webkit-transform: translateZ(-500px) translateX(200%); }
3320
+ 75% { opacity: .5; -webkit-transform: translateZ(-500px); }
3321
+ 100% { opacity: 1; -webkit-transform: translateZ(0) translateX(0); }
3322
+ }
3323
+ @-moz-keyframes backSlideIn {
3324
+ 0%, 25% { opacity: .5; -moz-transform: translateZ(-500px) translateX(200%); }
3325
+ 75% { opacity: .5; -moz-transform: translateZ(-500px); }
3326
+ 100% { opacity: 1; -moz-transform: translateZ(0) translateX(0); }
3327
+ }
3328
+ @keyframes backSlideIn {
3329
+ 0%, 25% { opacity: .5; transform: translateZ(-500px) translateX(200%); }
3330
+ 75% { opacity: .5; transform: translateZ(-500px); }
3331
+ 100% { opacity: 1; transform: translateZ(0) translateX(0); }
3332
+ }
3333
+ @-webkit-keyframes scaleToFade {
3334
+ to { opacity: 0; -webkit-transform: scale(.8); }
3335
+ }
3336
+ @-moz-keyframes scaleToFade {
3337
+ to { opacity: 0; -moz-transform: scale(.8); }
3338
+ }
3339
+ @keyframes scaleToFade {
3340
+ to { opacity: 0; transform: scale(.8); }
3341
+ }
3342
+ @-webkit-keyframes goDown {
3343
+ from { -webkit-transform: translateY(-100%); }
3344
+ }
3345
+ @-moz-keyframes goDown {
3346
+ from { -moz-transform: translateY(-100%); }
3347
+ }
3348
+ @keyframes goDown {
3349
+ from { transform: translateY(-100%); }
3350
+ }
3351
+
3352
+ @-webkit-keyframes scaleUpFrom {
3353
+ from { opacity: 0; -webkit-transform: scale(1.5); }
3354
+ }
3355
+ @-moz-keyframes scaleUpFrom {
3356
+ from { opacity: 0; -moz-transform: scale(1.5); }
3357
+ }
3358
+ @keyframes scaleUpFrom {
3359
+ from { opacity: 0; transform: scale(1.5); }
3360
+ }
3361
+
3362
+ @-webkit-keyframes scaleUpTo {
3363
+ to { opacity: 0; -webkit-transform: scale(1.5); }
3364
+ }
3365
+ @-moz-keyframes scaleUpTo {
3366
+ to { opacity: 0; -moz-transform: scale(1.5); }
3367
+ }
3368
+ @keyframes scaleUpTo {
3369
+ to { opacity: 0; transform: scale(1.5); }
3370
+ }
3371
+
3372
+
3373
+ /* Additional styles for Owl Carousel
3374
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3375
+ */
3376
+ /* Preloading images */
3377
+ .owl-item.loading {
3378
+ min-height: 60px;
3379
+ background: url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/ajax-loader.gif) no-repeat center center;
3380
+ }
3381
+
3382
+ /* Pagination */
3383
+ .owl-pagination { text-align: center; z-index: 1; /* z-index to show above other items */ }
3384
+
3385
+
3386
+
3387
+ /* Itemslider %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3388
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
3389
+
3390
+ .itemslider { margin-bottom: 20px; }
3391
+
3392
+ /* Items */
3393
+ .itemslider .item { padding-left:10px; padding-right:10px; }
3394
+
3395
+ /* Lazy loading */
3396
+ .itemslider .owl-item.loading { background-position: center 40px; }
3397
+ .itemslider .owl-item.loading .product-image { min-height: 70px; }
3398
+
3399
+ /**
3400
+ * Generic interface elements
3401
+ */
3402
+
3403
+
3404
+
3405
+ /* Owl Carousel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3406
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
3407
+
3408
+ /* Generic arrows 1
3409
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3410
+ */
3411
+ .slider-arrows1 .owl-controls .owl-buttons { position:absolute; }
3412
+ .slider-arrows1 .owl-controls .owl-buttons div {
3413
+ float:left;
3414
+ display:block;
3415
+ width:30px;
3416
+ height:30px;
3417
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/slider-arrows.png);
3418
+ background-repeat:no-repeat;
3419
+ background-color:#e5e5e5;
3420
+ cursor:pointer;
3421
+ text-decoration:none;
3422
+ text-indent:-9999px;
3423
+ overflow:hidden;
3424
+ transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3425
+ -moz-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3426
+ -webkit-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3427
+ -o-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3428
+ }
3429
+
3430
+ .slider-arrows1 .owl-controls.clickable .owl-buttons div:hover { background-color:#333; }
3431
+ .slider-arrows1 .owl-controls .owl-buttons div.disabled { opacity:0.4; filter:alpha(opacity=40); cursor:default; }
3432
+ .slider-arrows1 .owl-controls.clickable .owl-buttons div.disabled:hover { background-color:#e5e5e5; /* Must be the same as default color */ }
3433
+
3434
+ .slider-arrows1 .owl-controls .owl-buttons .owl-prev { background-position:-10px -10px; margin-right:1px; }
3435
+ .slider-arrows1 .owl-controls.clickable .owl-buttons .owl-prev:hover { background-position:-10px -60px; }
3436
+ .slider-arrows1 .owl-controls.clickable .owl-buttons .owl-prev.disabled:hover { background-position:-10px -10px; /* Same as default */ }
3437
+
3438
+ .slider-arrows1 .owl-controls .owl-buttons .owl-next { background-position:-60px -10px; }
3439
+ .slider-arrows1 .owl-controls.clickable .owl-buttons .owl-next:hover { background-position:-60px -60px; }
3440
+ .slider-arrows1 .owl-controls.clickable .owl-buttons .owl-next.disabled:hover { background-position:-60px -10px; /* Same as default */ }
3441
+
3442
+ /* Position */
3443
+ .slider-arrows1-pos-top-right .owl-controls .owl-buttons { top:-40px; right:0px; }
3444
+ .slider-arrows1-pos-top-left .owl-controls .owl-buttons { top:-40px; left:0px; }
3445
+
3446
+
3447
+ /* Generic arrows 2
3448
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3449
+ */
3450
+ .slider-arrows2 .owl-controls .owl-buttons div {
3451
+ position:absolute;
3452
+ display:block;
3453
+ width:50px;
3454
+ height:50px;
3455
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/slider-arrows.png);
3456
+ background-repeat:no-repeat;
3457
+ background-color:#fff;
3458
+ cursor:pointer;
3459
+ text-decoration:none;
3460
+ text-indent:-9999px;
3461
+ overflow:hidden;
3462
+ transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3463
+ -moz-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3464
+ -webkit-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3465
+ -o-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3466
+ /* Fix: opacity transition disabled for Firefox to prevent possible glitches during animation */
3467
+
3468
+ opacity:0;
3469
+ filter:alpha(opacity=0);
3470
+ }
3471
+ .slider-arrows2:hover .owl-controls .owl-buttons div { opacity:1; filter:alpha(opacity=100); }
3472
+
3473
+ .slider-arrows2 .owl-controls.clickable .owl-buttons div:hover { background-color:#000; }
3474
+ .slider-arrows2 .owl-controls .owl-buttons .owl-prev { background-position:-2px 0; left:0; top:44%; }
3475
+ .slider-arrows2 .owl-controls.clickable .owl-buttons .owl-prev:hover { background-position:-2px -50px; }
3476
+ .slider-arrows2 .owl-controls .owl-buttons .owl-next { background-position:-48px 0; right:0; top:44%; }
3477
+ .slider-arrows2 .owl-controls.clickable .owl-buttons .owl-next:hover { background-position:-48px -50px; }
3478
+
3479
+
3480
+ /* Generic arrows 3
3481
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3482
+ */
3483
+ .slider-arrows3 .owl-controls .owl-buttons div {
3484
+ position:absolute;
3485
+ display:block;
3486
+ width:30px;
3487
+ height:30px;
3488
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/slider-arrows.png);
3489
+ background-repeat:no-repeat;
3490
+ background-color:#fff;
3491
+ cursor:pointer;
3492
+ text-decoration:none;
3493
+ text-indent:-999px;
3494
+ overflow:hidden;
3495
+ transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3496
+ -moz-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3497
+ -webkit-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3498
+ -o-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3499
+ }
3500
+
3501
+ .slider-arrows3 .owl-controls.clickable .owl-buttons div:hover { background-color:#000; }
3502
+ .slider-arrows3 .owl-controls .owl-buttons div.disabled { opacity:0.4; filter:alpha(opacity=40); cursor:default; }
3503
+ .slider-arrows3 .owl-controls.clickable .owl-buttons div.disabled:hover { background-color:#fff; /* Must be the same as default color */ }
3504
+
3505
+ .slider-arrows3 .owl-controls .owl-buttons .owl-prev { background-position:-10px -10px; top:30%; left:-32px; }
3506
+ .slider-arrows3 .owl-controls.clickable .owl-buttons .owl-prev:hover { background-position:-10px -60px; }
3507
+ .slider-arrows3 .owl-controls.clickable .owl-buttons .owl-prev.disabled:hover { background-position:-10px -10px; /* Same as default */ }
3508
+
3509
+ .slider-arrows3 .owl-controls .owl-buttons .owl-next { background-position:-60px -10px; top:30%; right:-32px; }
3510
+ .slider-arrows3 .owl-controls.clickable .owl-buttons .owl-next:hover { background-position:-60px -60px; }
3511
+ .slider-arrows3 .owl-controls.clickable .owl-buttons .owl-next.disabled:hover { background-position:-60px -10px; /* Same as default */ }
3512
+
3513
+ /* Position */
3514
+
3515
+
3516
+ /* Generic pagination 1
3517
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3518
+ */
3519
+ .slider-pagination1 .owl-controls .owl-page {
3520
+ display: inline-block;
3521
+ vertical-align: middle;
3522
+ zoom: 1;
3523
+ *display: inline;/*IE7 life-saver */
3524
+ }
3525
+ .slider-pagination1 .owl-controls .owl-page span {
3526
+ display: block;
3527
+ width: 12px;
3528
+ height: 12px;
3529
+ margin: 7px 7px;
3530
+ -webkit-border-radius: 20px;
3531
+ -moz-border-radius: 20px;
3532
+ border-radius: 20px;
3533
+ background-color:#eee;
3534
+ transition: background-color 300ms ease-in-out;
3535
+ -moz-transition: background-color 300ms ease-in-out;
3536
+ -webkit-transition: background-color 300ms ease-in-out;
3537
+ -o-transition: background-color 300ms ease-in-out;
3538
+ }
3539
+ .slider-pagination1 .owl-controls.clickable .owl-page:hover span { background-color:#000; }
3540
+ .slider-pagination1 .owl-controls .owl-page.active span { background-color:#ccc; }
3541
+
3542
+
3543
+ /* Generic pagination 2
3544
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3545
+ */
3546
+ .slider-pagination2 .owl-controls .owl-page {
3547
+ display: inline-block;
3548
+ vertical-align: middle;
3549
+ zoom: 1;
3550
+ *display: inline;/*IE7 life-saver */
3551
+ }
3552
+ .slider-pagination2 .owl-controls .owl-page span {
3553
+ display: block;
3554
+ -webkit-border-radius: 20px;
3555
+ -moz-border-radius: 20px;
3556
+ border-radius: 20px;
3557
+ background-color:#fff;
3558
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
3559
+ width:10px;
3560
+ height:10px;
3561
+ margin:8px;
3562
+ transition: background-color 300ms ease-in-out;
3563
+ -moz-transition: background-color 300ms ease-in-out;
3564
+ -webkit-transition: background-color 300ms ease-in-out;
3565
+ -o-transition: background-color 300ms ease-in-out;
3566
+ /* transition: width 300ms ease-in-out, height 300ms ease-in-out, margin 300ms ease-in-out, background-color 300ms ease-in-out;
3567
+ -moz-transition: width 300ms ease-in-out, height 300ms ease-in-out, margin 300ms ease-in-out, background-color 300ms ease-in-out;
3568
+ -webkit-transition: width 300ms ease-in-out, height 300ms ease-in-out, margin 300ms ease-in-out, background-color 300ms ease-in-out;
3569
+ -o-transition: width 300ms ease-in-out, height 300ms ease-in-out, margin 300ms ease-in-out, background-color 300ms ease-in-out;*/
3570
+ }
3571
+ .slider-pagination2 .owl-controls.clickable .owl-page:hover span,
3572
+ .slider-pagination2 .owl-controls .owl-page.active span {
3573
+ width:16px;
3574
+ height:16px;
3575
+ margin:5px;
3576
+ }
3577
+ .slider-pagination2 .owl-controls .owl-page.active {
3578
+ cursor:default;
3579
+ }
3580
+
3581
+
3582
+ /* Pagination position
3583
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3584
+ */
3585
+ .pagination-pos-bottom-centered { padding-bottom: 50px; /* Additional space for bottom pagination */ }
3586
+ .pagination-pos-bottom-centered .owl-pagination { padding: 10px 0; text-align: center; position: absolute; width: 100%; }
3587
+ .pagination-pos-bottom-right .owl-pagination { padding: 10px 0; float: right; }
3588
+ .pagination-pos-bottom-left .owl-pagination { padding: 10px 0; float: left; }
3589
+
3590
+ /* Over the slider */
3591
+ .pagination-pos-over-bottom-centered .owl-pagination { text-align: center; margin-top: -35px; position: absolute; width: 100%; }
3592
+ .pagination-pos-over-bottom-right .owl-pagination { position:absolute; bottom:3.5%; right:1.5%; }
3593
+ .pagination-pos-over-bottom-left .owl-pagination { position:absolute; bottom:3.5%; left:1.5%; }
3594
+
3595
+
3596
+
3597
+
3598
+
3599
+ /* Deprecated classes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3600
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
3601
+
3602
+ /* Simple directional arrows
3603
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3604
+ */
3605
+
3606
+ .gen-direction-arrows1 a.previous,
3607
+ .gen-direction-arrows1 a.next {
3608
+ display:block;
3609
+ width:30px;
3610
+ height:30px;
3611
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/slider-arrows.png);
3612
+ background-repeat:no-repeat;
3613
+ background-color:#e5e5e5;
3614
+ transition: background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3615
+ -moz-transition: background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3616
+ -webkit-transition: background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3617
+ -o-transition: background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3618
+ }
3619
+
3620
+ .gen-direction-arrows1 a.previous { background-position:-10px -10px; }
3621
+ .gen-direction-arrows1 a.previous:hover { background-position:-10px -60px; background-color:#333; }
3622
+
3623
+ .gen-direction-arrows1 a.next { background-position:-60px -10px; }
3624
+ .gen-direction-arrows1 a.next:hover { background-position:-60px -60px; background-color:#333; }
3625
+
3626
+
3627
+ /* Generic arrows 1
3628
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3629
+ */
3630
+
3631
+ /* Default style: small, outside the slider
3632
+ -------------------------------------------------------------- */
3633
+ .gen-slider-arrows1 .direction-nav li { float:left; }
3634
+ .gen-slider-arrows1 .direction-nav a {
3635
+ display:block;
3636
+ width:30px;
3637
+ height:30px;
3638
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/slider-arrows.png);
3639
+ background-repeat:no-repeat;
3640
+ background-color:#e5e5e5;
3641
+ cursor:pointer;
3642
+ text-decoration:none;
3643
+ text-indent:-999px;
3644
+ overflow:hidden;
3645
+ transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3646
+ -moz-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3647
+ -webkit-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3648
+ -o-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3649
+ }
3650
+
3651
+ .gen-slider-arrows1 .direction-nav a:hover { background-color:#333; }
3652
+ .gen-slider-arrows1 .direction-nav a.disabled { opacity:0.4; filter:alpha(opacity=40); cursor:default; }
3653
+ .gen-slider-arrows1 .direction-nav a.disabled:hover { background-color:#e5e5e5; /* Must be the same as default color */ }
3654
+
3655
+ .gen-slider-arrows1 .direction-nav .prev { background-position:-10px -10px; margin-right:1px; }
3656
+ .gen-slider-arrows1 .direction-nav .prev:hover { background-position:-10px -60px; }
3657
+ .gen-slider-arrows1 .direction-nav .prev.disabled:hover { background-position:-10px -10px; /* Same as default */ }
3658
+
3659
+ .gen-slider-arrows1 .direction-nav .next { background-position:-60px -10px; }
3660
+ .gen-slider-arrows1 .direction-nav .next:hover { background-position:-60px -60px; }
3661
+ .gen-slider-arrows1 .direction-nav .next.disabled:hover { background-position:-60px -10px; /* Same as default */ }
3662
+
3663
+ /* Positioning:
3664
+ -------------------------------------------------------------- */
3665
+ .gen-slider-arrows1-pos-top-right .direction-nav { position:absolute; top:-40px; right:0px; }
3666
+ .gen-slider-arrows1-pos-top-left .direction-nav { position:absolute; top:-40px; left:0px; }
3667
+
3668
+
3669
+ /* Generic arrows 2
3670
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3671
+ */
3672
+
3673
+ /* Default style: large, on slider, split
3674
+ -------------------------------------------------------------- */
3675
+ .gen-slider-arrows2 .direction-nav { height:0; }
3676
+ .gen-slider-arrows2 .direction-nav a {
3677
+ position:absolute;
3678
+ display:block;
3679
+ width:50px;
3680
+ height:50px;
3681
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/slider-arrows.png);
3682
+ background-repeat:no-repeat;
3683
+ background-color:#fff;
3684
+ cursor:pointer;
3685
+ text-decoration:none;
3686
+ text-indent:-999px;
3687
+ overflow:hidden;
3688
+ transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3689
+ -moz-transition: opacity 0ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3690
+ -webkit-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3691
+ -o-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3692
+ /* Fix: opacity transition disabled for Firefox to prevent possible glitches during animation */
3693
+
3694
+ opacity:0;
3695
+ filter:alpha(opacity=0);
3696
+ }
3697
+ .gen-slider-arrows2:hover .direction-nav a { opacity:1; filter:alpha(opacity=100); }
3698
+ .gen-slider-arrows2:hover .direction-nav a.disabled { opacity:0.4; filter:alpha(opacity=40); }
3699
+
3700
+ .gen-slider-arrows2 .direction-nav a:hover { background-color:#333; }
3701
+ .gen-slider-arrows2 .direction-nav a.disabled { cursor:default; }
3702
+ .gen-slider-arrows2 .direction-nav a.disabled:hover { background-color:#fff; /* Must be the same as default color */ }
3703
+
3704
+ .gen-slider-arrows2 .direction-nav .prev { background-position:0 0; left:1.5%; top:45%; }
3705
+ .gen-slider-arrows2 .direction-nav .prev:hover { background-position:0 -50px; }
3706
+ .gen-slider-arrows2 .direction-nav .prev.disabled:hover { background-position:0 0; }
3707
+
3708
+ .gen-slider-arrows2 .direction-nav .next { background-position:-50px 0; right:1.5%; top:45%; }
3709
+ .gen-slider-arrows2 .direction-nav .next:hover { background-position:-50px -50px; }
3710
+ .gen-slider-arrows2 .direction-nav .next.disabled:hover { background-position:-50px 0; /* Same as default */ }
3711
+
3712
+ /* Style: only background image
3713
+ -------------------------------------------------------------- */
3714
+ .gen-slider-arrows2-style1 .direction-nav a {
3715
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/slideshow-arrows-solid.png);
3716
+ background-color:transparent !important;
3717
+ }
3718
+
3719
+
3720
+ /* Generic arrows 3
3721
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3722
+ */
3723
+
3724
+ /* Default style: at the left and the right side of the slider
3725
+ -------------------------------------------------------------- */
3726
+ .gen-slider-arrows3 .direction-nav a {
3727
+ position:absolute;
3728
+ display:block;
3729
+ width:30px;
3730
+ height:30px;
3731
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/slider-arrows.png);
3732
+ background-repeat:no-repeat;
3733
+ background-color:#fff;
3734
+ cursor:pointer;
3735
+ text-decoration:none;
3736
+ text-indent:-999px;
3737
+ overflow:hidden;
3738
+ transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3739
+ -moz-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3740
+ -webkit-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3741
+ -o-transition: opacity 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
3742
+ }
3743
+
3744
+ .gen-slider-arrows3 .direction-nav a:hover { background-color:#333; }
3745
+ .gen-slider-arrows3 .direction-nav a.disabled { opacity:0.4; filter:alpha(opacity=40); cursor:default; }
3746
+ .gen-slider-arrows3 .direction-nav a.disabled:hover { background-color:#fff; /* Must be the same as default color */ }
3747
+
3748
+ .gen-slider-arrows3 .direction-nav .prev { background-position:-10px -10px; top:22px; left:-32px; }
3749
+ .gen-slider-arrows3 .direction-nav .prev:hover { background-position:-10px -60px; }
3750
+ .gen-slider-arrows3 .direction-nav .prev.disabled:hover { background-position:-10px -10px; /* Same as default */ }
3751
+
3752
+ .gen-slider-arrows3 .direction-nav .next { background-position:-60px -10px; top:22px; right:-32px; }
3753
+ .gen-slider-arrows3 .direction-nav .next:hover { background-position:-60px -60px; }
3754
+ .gen-slider-arrows3 .direction-nav .next.disabled:hover { background-position:-60px -10px; /* Same as default */ }
3755
+
3756
+ /* Style: long (high) buttons
3757
+ -------------------------------------------------------------- */
3758
+ .gen-slider-arrows3-style1 .direction-nav a { height:75px; }
3759
+ .gen-slider-arrows3-style1 .direction-nav .prev { background-position:-10px 13px; top:0; left:-32px; }
3760
+ .gen-slider-arrows3-style1 .direction-nav .prev:hover { background-position:-10px -37px; }
3761
+ .gen-slider-arrows3-style1 .direction-nav .prev.disabled:hover { background-position:-10px 13px; /* Same as default */ }
3762
+
3763
+ .gen-slider-arrows3-style1 .direction-nav .next { background-position:-60px 13px; top:0; right:-32px; }
3764
+ .gen-slider-arrows3-style1 .direction-nav .next:hover { background-position:-60px -37px; }
3765
+ .gen-slider-arrows3-style1 .direction-nav .next.disabled:hover { background-position:-60px 13px; /* Same as default */ }
3766
+
3767
+
3768
+ /* Generic pager 1
3769
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3770
+ */
3771
+
3772
+ /* Default style:
3773
+ -------------------------------------------------------------- */
3774
+ .gen-slider-pager1 .control-nav { text-align:center; }
3775
+ .gen-slider-pager1 .control-nav li { float:left; margin-left:3px; }
3776
+ .gen-slider-pager1 .control-nav li:first-child { margin-left:0; }
3777
+
3778
+ .gen-slider-pager1 .control-nav a {
3779
+ display:block;
3780
+ width:20px;
3781
+ height:20px;
3782
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/pager.png);
3783
+ background-repeat:no-repeat;
3784
+ background-color:transparent;
3785
+ cursor:pointer;
3786
+ text-decoration:none;
3787
+ text-indent:-999px;
3788
+ overflow:hidden;
3789
+ }
3790
+ .gen-slider-pager1 .control-nav a:hover { background-position:0 -60px; }
3791
+ .gen-slider-pager1 .control-nav a.active { background-position:0 -30px; cursor:default; }
3792
+ .gen-slider-pager1 .control-nav a.active:hover {}
3793
+
3794
+ /* Style: small
3795
+ -------------------------------------------------------------- */
3796
+ .gen-slider-pager1-style1 .control-nav li { margin-left:0; }
3797
+ .gen-slider-pager1-style1 .control-nav a { background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/pager-small.png); }
3798
+
3799
+
3800
+ /* Positioning:
3801
+ -------------------------------------------------------------- */
3802
+ .gen-slider-pager1-pos-bottom-right .control-nav { position:absolute; bottom:4.4526%; right:1.5%; }
3803
+ .gen-slider-pager1-pos-bottom-left .control-nav { position:absolute; bottom:4.4526%; left:1.5%; }
3804
+
3805
+ /* Additional pager positioning for slider-arrows1 */
3806
+ .gen-slider-arrows1-pos-top-right-pager .control-nav { position:absolute; top:-33px; right:71px; }
3807
+
3808
+
3809
+
3810
+ /* Generic pager 2
3811
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3812
+ */
3813
+
3814
+ /* Default style:
3815
+ -------------------------------------------------------------- */
3816
+ .gen-slider-pager2 .control-nav { text-align:center; }
3817
+ .gen-slider-pager2 .control-nav li { float:left; }
3818
+ .gen-slider-pager2 .control-nav a {
3819
+ display:block;
3820
+ width:10px;
3821
+ height:10px;
3822
+ margin:8px;
3823
+ background-color:#fff;
3824
+ cursor:pointer;
3825
+ text-decoration:none;
3826
+ text-indent:-9999px;
3827
+ overflow:hidden;
3828
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
3829
+ border-radius: 50%;
3830
+ }
3831
+ .gen-slider-pager2 .control-nav a:hover { background-color:#000; }
3832
+ .gen-slider-pager2 .control-nav a.active {
3833
+ cursor:default;
3834
+ width:16px;
3835
+ height:16px;
3836
+ margin:5px;
3837
+ }
3838
+
3839
+
3840
+
3841
+
3842
+ /**
3843
+ * Brands
3844
+ */
3845
+
3846
+
3847
+
3848
+ /* On product page
3849
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3850
+ */
3851
+ .box-brand a {
3852
+ margin:0 auto;
3853
+ display:block;
3854
+ }
3855
+ .box-brand img {
3856
+ margin:0 auto;
3857
+ display:block;
3858
+ }
3859
+ .box-brand .brand-name {}
3860
+ .box-brand .brand-name .label {}
3861
+
3862
+
3863
+ /* Brand slider
3864
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3865
+ */
3866
+ .brand-slider .item {
3867
+ padding-bottom: 20px;
3868
+ padding-top: 20px;
3869
+ text-align: center;
3870
+ }
3871
+ .brand-slider .owl-item.loading { min-height:60px; }
3872
+
3873
+
3874
+ /* Brand in secondary column on product page
3875
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3876
+ */
3877
+ .product-secondary-column .box-brand .attribute {
3878
+ font-size:1.25em;
3879
+ font-weight:bold;
3880
+ line-height:1.2em;
3881
+ margin:10px 0;
3882
+ text-align:center;
3883
+ }
3884
+ /**
3885
+ * Ultra Slideshow
3886
+ */
3887
+
3888
+
3889
+
3890
+ /* Slideshow wrapper
3891
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3892
+ */
3893
+ .the-slideshow-wrapper {}
3894
+ .the-slideshow-wrapper:after { display:block; content:"."; clear:both; font-size:0; line-height:0; height:0; overflow:hidden; }
3895
+
3896
+
3897
+ /* Slideshow
3898
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3899
+ */
3900
+ .the-slideshow { margin:0 auto; }
3901
+ .the-slideshow .slides { display: none; }
3902
+
3903
+
3904
+ /* Banners
3905
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3906
+ */
3907
+ .the-slideshow-banners {
3908
+ -webkit-backface-visibility: hidden; /* Fix possible glitches during animation */
3909
+ margin-bottom:0.1%; /* Important: a little bit bigger than slideshow bottom margin to avoid jumping on slide transition */
3910
+ }
3911
+ .the-slideshow-banners .banner { position:relative; /* Container for caption */ }
3912
+ .the-slideshow-banners a.banner, /* Backward compatibility, link could have "banner" class */
3913
+ .the-slideshow-banners .banner a { display:block; }
3914
+
3915
+ /* Additional effects
3916
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3917
+ */
3918
+ .the-slideshow .fade-on-slideshow-hover,
3919
+ .the-slideshow-wrapper .fade-on-slideshow-wrapper-hover {
3920
+ transition: opacity 300ms ease-in-out;
3921
+ -moz-transition: opacity 300ms ease-in-out;
3922
+ -webkit-transition: opacity 300ms ease-in-out;
3923
+ -o-transition: opacity 300ms ease-in-out;
3924
+ }
3925
+ .the-slideshow:hover .fade-on-slideshow-hover,
3926
+ .the-slideshow-wrapper:hover .fade-on-slideshow-wrapper-hover {
3927
+ opacity:0.75;
3928
+ filter:alpha(opacity=75);
3929
+ }
3930
+
3931
+ /**
3932
+ * Itemgrid
3933
+ */
3934
+
3935
+
3936
+
3937
+ .itemgrid .item {
3938
+ float:left;
3939
+ padding-left:1%;
3940
+ padding-right:1%;
3941
+ }
3942
+
3943
+
3944
+ /* Itemgrid: different numbers of columns
3945
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3946
+ */
3947
+ /* Clear every first item in each row (row: group of n items) */
3948
+
3949
+ /* Item grid: 1 column */
3950
+ .itemgrid-1col .item { width:98%; }
3951
+
3952
+ /* Item grid: 2 columns */
3953
+ .itemgrid-2col .item { width:48%; }
3954
+ .itemgrid-2col .item:nth-child(2n+1) { clear:left; }
3955
+
3956
+ /* Item grid: 3 columns */
3957
+ .itemgrid-3col .item { width:31.3333%; }
3958
+ .itemgrid-3col .item:nth-child(3n+1) { clear:left; }
3959
+
3960
+ /* Item grid: 4 columns */
3961
+ .itemgrid-4col .item { width:23%; }
3962
+ .itemgrid-4col .item:nth-child(4n+1) { clear:left; }
3963
+ .itemgrid-4col .item.dop { width:48%; }
3964
+
3965
+ /* Item grid: 5 columns */
3966
+ .itemgrid-5col .item { width:18%; }
3967
+ .itemgrid-5col .item:nth-child(5n+1) { clear:left; }
3968
+
3969
+ /* Item grid: 6 columns */
3970
+ .itemgrid-6col .item { width:14.6666%; }
3971
+ .itemgrid-6col .item:nth-child(6n+1) { clear:left; }
3972
+
3973
+ /* Item grid: 7 columns */
3974
+ .itemgrid-7col .item { width:12.2857%; }
3975
+ .itemgrid-7col .item:nth-child(7n+1) { clear:left; }
3976
+
3977
+ /* Item grid: 8 columns */
3978
+ .itemgrid-8col .item { width:10.5%; }
3979
+ .itemgrid-8col .item:nth-child(8n+1) { clear:left; }
3980
+
3981
+ /*
3982
+ * Accordions and collapsible blocks
3983
+ */
3984
+
3985
+
3986
+
3987
+ /* Accordion %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3988
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
3989
+
3990
+ .accordion {
3991
+ padding:0;
3992
+ margin:0;
3993
+ list-style-type:none;
3994
+ }
3995
+ .accordion ul {
3996
+ float:left;
3997
+ display:block;
3998
+ width:100%;
3999
+ padding:0;
4000
+ margin:0;
4001
+ }
4002
+ .accordion li {
4003
+ float:left;
4004
+ display:block;
4005
+ width:100% !important;
4006
+ padding:0 !important;
4007
+ margin:0;
4008
+ list-style-type:none;
4009
+ cursor:pointer;
4010
+ position:relative;
4011
+ }
4012
+
4013
+ .accordion li.active {}
4014
+ .accordion li.current {}
4015
+ .accordion li a {
4016
+ display:block;
4017
+ padding:15px 10px;
4018
+ font-size: 1.1666em; /*14px*/
4019
+ line-height: 1.2857em; /*18px*/
4020
+ }
4021
+ .accordion li li a { padding-left:20px; }
4022
+ .accordion li li li a { padding-left:40px; }
4023
+ .accordion li li li li a { padding-left:60px; }
4024
+
4025
+ /* Space for openner if item has children.
4026
+ Space has to be a few pixels wider than openner */
4027
+ .accordion li.parent > a { padding-right:54px; }
4028
+
4029
+ /* Opener
4030
+ -------------------------------------------------------------- */
4031
+ .accordion .opener {
4032
+ position:absolute;
4033
+ right:0;
4034
+ top:0;
4035
+ display:block;
4036
+ cursor:pointer;
4037
+
4038
+ width:49px;
4039
+ height:49px;
4040
+ background: url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener.png) center center no-repeat;
4041
+ }
4042
+ .accordion .opener:hover {
4043
+ background-color:rgba(0,0,0, 0.05);
4044
+ }
4045
+
4046
+ /* Active */
4047
+ .accordion li.active > .opener {
4048
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-active.png);
4049
+ }
4050
+
4051
+
4052
+ /* Accordion - Style 1
4053
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4054
+ */
4055
+ /* Padding
4056
+ -------------------------------------------------------------- */
4057
+ .accordion-style1 li a { padding:5px 10px; }
4058
+ .accordion-style1 li li a { padding-left:20px; }
4059
+ .accordion-style1 li li li a { padding-left:35px; }
4060
+ .accordion-style1 li li li li a { padding-left:50px; }
4061
+
4062
+ /* Space for openner if item has children.
4063
+ Space has to be a few pixels wider than openner */
4064
+ .accordion-style1 li.parent > a { padding-right:33px; }
4065
+
4066
+ /* Misc
4067
+ -------------------------------------------------------------- */
4068
+ .accordion-style1 li a {
4069
+ border-bottom-color:#eee;
4070
+ border-bottom:1px solid rgba(0,0,0,0.06);
4071
+ font-size:1em; /*12px*/
4072
+ line-height:1.5em; /*18px*/
4073
+ }
4074
+ .accordion-style1 li a:hover {
4075
+ background-color:rgba(0,0,0, 0.03);
4076
+ }
4077
+
4078
+ /* Opener
4079
+ -------------------------------------------------------------- */
4080
+ .accordion-style1 .opener {
4081
+ width:28px;
4082
+ height:28px;
4083
+ /*background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-small.png);*/
4084
+ background-color:rgba(0,0,0, 0.03);
4085
+ }
4086
+ .accordion-style1 .opener:hover {
4087
+ background-color:rgba(0,0,0, 0.10);
4088
+ background-image: url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-w.png);
4089
+ }
4090
+
4091
+ /* Active */
4092
+ /*.accordion-style1 li.active > .opener {
4093
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-small-active.png);
4094
+ }*/
4095
+ .accordion-style1 li.active > .opener:hover {
4096
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-active-w.png);
4097
+ }
4098
+
4099
+
4100
+
4101
+ /* Collapsible %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4102
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
4103
+
4104
+ .collapsible { position:relative; }
4105
+ .collapsible .block-title {
4106
+ padding-top:8px;
4107
+ padding-right:35px; /* Space for opener */
4108
+ padding-bottom:8px;
4109
+ border-bottom:1px solid #f2f2f2;
4110
+ border-color:rgba(0,0,0, 0.05);
4111
+ margin-bottom:0.625em; /*10px*/
4112
+
4113
+ font-size:1.3333em; /*16px*/
4114
+ line-height:1.25em; /*20px*/
4115
+ font-weight:normal;
4116
+ }
4117
+
4118
+ .collapsible .block-content,
4119
+ .collapsible .block-content > * {
4120
+ margin-top:0; /* Prevent animation jumping */
4121
+ }
4122
+
4123
+ /* Opener
4124
+ -------------------------------------------------------------- */
4125
+ .collapsible .opener {
4126
+ position:absolute;
4127
+ right:0;
4128
+ top:2px;
4129
+ display:block;
4130
+ cursor:pointer;
4131
+
4132
+ width:30px;
4133
+ height:30px;
4134
+ background-color:#f2f2f2; /*IE*/
4135
+ background-color:rgba(0,0,0, 0.05);
4136
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener.png);
4137
+ background-position:center center;
4138
+ background-repeat:no-repeat;
4139
+ /*border-radius:50%;*/
4140
+ }
4141
+ .collapsible .opener:hover {
4142
+ background-color:#e5e5e5; /*IE*/
4143
+ background-color:rgba(0,0,0, 0.1);
4144
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-w.png);
4145
+ }
4146
+ .collapsible.active .opener {
4147
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-active.png);
4148
+ }
4149
+ .collapsible.active .opener:hover {
4150
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-active-w.png);
4151
+ }
4152
+
4153
+ /* Mobile accordion
4154
+ -------------------------------------------------------------- */
4155
+ .mobile-collapsible { position: static; }
4156
+
4157
+ /*
4158
+ * Navigation menu
4159
+ */
4160
+
4161
+
4162
+
4163
+ /* Sidebar menu (vertical, for sidebars)
4164
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4165
+ */
4166
+ .vertnav-side {
4167
+ float:left;
4168
+ width:100%;
4169
+ }
4170
+
4171
+
4172
+ /* Mobile menu (vertical, in the header)
4173
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4174
+ */
4175
+
4176
+ /* Mobile menu trigger. Shares style with the 1st level links from the default menu
4177
+ -------------------------------------------------------------- */
4178
+ #mobnav { display:none; }
4179
+ #mobnav-trigger {
4180
+ display:block;
4181
+ padding:0 15px;
4182
+ }
4183
+
4184
+ /* Mobile menu icon */
4185
+ #mobnav-trigger .trigger-icon {
4186
+ display:block;
4187
+ float:left;
4188
+ width:23px;
4189
+ padding-top:18px;
4190
+ margin:0 8px 0 0;
4191
+ }
4192
+ #mobnav-trigger .trigger-icon .line {
4193
+ display:block;
4194
+ background-color:#fff;
4195
+ height:3px;
4196
+ margin-bottom:2px;
4197
+ }
4198
+
4199
+ /* Mobile menu elements
4200
+ -------------------------------------------------------------- */
4201
+ .nav-container .vertnav-top { /* Added wrapper-class to make selector more specific and prevent overriding */
4202
+ display:none;
4203
+ margin-top:0 !important;
4204
+ }
4205
+ .vertnav-top.mobile {
4206
+ display:block; /* Visible even when collapsed (to show bottom border) */
4207
+
4208
+ overflow:hidden;
4209
+ height:auto;
4210
+ max-height:0px;
4211
+ transition: max-height 500ms ease-in-out 0s;
4212
+ -moz-transition: max-height 500ms ease-in-out 0s;
4213
+ -webkit-transition: max-height 500ms ease-in-out 0s;
4214
+ -o-transition: max-height 500ms ease-in-out 0s;
4215
+ }
4216
+ .vertnav-top.mobile.show {
4217
+ max-height:9999px;
4218
+ transition: max-height 500ms ease-in-out 0s;
4219
+ -moz-transition: max-height 500ms ease-in-out 0s;
4220
+ -webkit-transition: max-height 500ms ease-in-out 0s;
4221
+ -o-transition: max-height 500ms ease-in-out 0s;
4222
+ }
4223
+
4224
+ .vertnav-top li a {
4225
+ font-size:16px; /*1.3333em*/
4226
+ line-height:18px; /*1.125em*/
4227
+ }
4228
+ /* 3rd-level items - smaller font, no transform */
4229
+ .vertnav-top li li li a {
4230
+ font-size:1.1666em; /*16px*/
4231
+ text-transform:none;
4232
+ }
4233
+
4234
+ /* Drop-down menu (horizontal)
4235
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4236
+ */
4237
+ #nav {
4238
+ position:relative; /* Drop-down box position is relative to this element */
4239
+ z-index:2000;
4240
+ -webkit-transform: translateZ(0); /* Fix possible glitches during animation */
4241
+ }
4242
+ #nav.mobile { display:none; } /* Hide on mobile */
4243
+ #nav .opener { display:none; }
4244
+
4245
+ /* All levels
4246
+ -------------------------------------------------------------- */
4247
+ #nav li { text-align:left; }
4248
+ #nav li a { display:block; text-decoration:none; }
4249
+ #nav li a span { display:block; white-space:nowrap; }
4250
+ #nav li ul a span { white-space:normal; }
4251
+
4252
+ /* 1st level only
4253
+ -------------------------------------------------------------- */
4254
+ #nav > li { float:left; }
4255
+ #nav > li.last { padding-right:0; }
4256
+ #nav > li > a { display:block; padding:0 12px; -webkit-tap-highlight-color: transparent; }
4257
+ #nav > li > a > span { display: inline-block; }
4258
+
4259
+ /* Drop-down boxes:
4260
+ wide: 2nd-level category drop-down box + custom block drop-down box
4261
+ classic: custom block drop-down box
4262
+ -------------------------------------------------------------- */
4263
+ #nav .level0-wrapper {
4264
+ position:absolute;
4265
+ left:-10000px;
4266
+ background-color:#fff;
4267
+ width:100%;
4268
+ /* Uncomment to fix possible glitches during animation in webkit browsers */
4269
+ /*-webkit-transform: translateZ(0);*/
4270
+ }
4271
+ /* Inner wrapper for additional padding */
4272
+ #nav .level0-wrapper2 {
4273
+ padding:2%;
4274
+ }
4275
+ #nav .level0-wrapper2:before,
4276
+ #nav .level0-wrapper2:after { display: table; line-height: 0; content: ""; }
4277
+ #nav .level0-wrapper2:after { clear: both; }
4278
+
4279
+ /*#nav .level0-wrapper {
4280
+ position:absolute;
4281
+ top:49px;
4282
+ background-color:#fff;
4283
+ width:96%;
4284
+ padding:2%;
4285
+
4286
+ left:0;
4287
+ visibility:hidden;
4288
+ opacity:0;
4289
+ transition: visibility 0s ease-in-out 450ms, opacity 300ms ease-in-out 150ms;
4290
+ -moz-transition: visibility 0s ease-in-out 450ms, opacity 300ms ease-in-out 150ms;
4291
+ -webkit-transition: visibility 0s ease-in-out 450ms, opacity 300ms ease-in-out 150ms;
4292
+ -o-transition: visibility 0s ease-in-out 450ms, opacity 300ms ease-in-out 150ms;
4293
+ }
4294
+ #nav > li:hover .level0-wrapper {
4295
+ visibility:visible;
4296
+ opacity:1;
4297
+ transition-delay:150ms;
4298
+ -moz-transition-delay:150ms;
4299
+ -webkit-transition-delay:150ms;
4300
+ -o-transition-delay:150ms;
4301
+ }*/
4302
+
4303
+
4304
+ /* Home link
4305
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4306
+ */
4307
+ /* item with "feature" class */
4308
+ #nav a.level-top.feature { margin:0; /* Remove default margins */ }
4309
+
4310
+ /* Icon inside item */
4311
+ #nav li a.level-top .icon {
4312
+ padding: 3px;
4313
+ margin: 0;
4314
+ float: none;
4315
+ display: inline-block;
4316
+ vertical-align: middle;
4317
+ background-color:transparent !important; /* Remove default colors */
4318
+ }
4319
+ #nav li:hover a.level-top .icon { padding: 3px; }
4320
+
4321
+ /* Single icon as home link
4322
+ -------------------------------------------------------------- */
4323
+ #nav #homelink-icon { margin-left: 12px; /* The same as side padding of top-level items */ }
4324
+ #nav #homelink-icon a.level-top {
4325
+ padding-left: 5px;
4326
+ padding-right: 5px;
4327
+ background: none !important; box-shadow: none !important; border: none !important;
4328
+ }
4329
+
4330
+
4331
+ /* Additional elements in the drop-down menu
4332
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4333
+ */
4334
+
4335
+ /* Static blocks displayed as a drop-down in the main menu
4336
+ -------------------------------------------------------------- */
4337
+ /* Custom menu item */
4338
+ #nav .nav-custom-link > a { cursor:default; }
4339
+
4340
+ /* Remove 'relative' positioning from custom 'li' (custom block have to be positioned relative to #nav) */
4341
+ #nav .nav-custom-link { position:static; }
4342
+
4343
+ /* Static block's content - basic formatting */
4344
+ #nav .nav-custom-link .header-nav-dropdown-wrapper { padding:2%; }
4345
+ #nav .nav-custom-link .header-nav-dropdown-wrapper p { margin:10px 0; }
4346
+ #nav .nav-custom-link .header-nav-dropdown-wrapper .heading { margin:10px 0; }
4347
+
4348
+ /* Caret
4349
+ -------------------------------------------------------------- */
4350
+ #nav a.level-top .caret {
4351
+ display:inline-block;
4352
+ width:0;
4353
+ height:0;
4354
+ margin-bottom:2px;
4355
+ margin-left: 2px;
4356
+ vertical-align:middle;
4357
+ content:"";
4358
+ border-style:solid solid none;
4359
+ border-width:4px 4px 0;
4360
+ border-color:#333 transparent transparent;
4361
+ }
4362
+
4363
+ /* Number of products in category
4364
+ -------------------------------------------------------------- */
4365
+ /* Sidebar menu */
4366
+ .vertnav .number {
4367
+ margin-left: 3px;
4368
+ color: #aaa;
4369
+ }
4370
+ /* Main menu */
4371
+ #nav .number {
4372
+ display: inline;
4373
+ margin-left: 3px;
4374
+ }
4375
+ #nav ul li .number {
4376
+ color: #aaa;
4377
+ }
4378
+
4379
+ /* Other
4380
+ -------------------------------------------------------------- */
4381
+ .nav .itemslider { margin-top:0; margin-bottom:0; }
4382
+ .nav .itemslider .item { padding-bottom:0; }
4383
+
4384
+
4385
+ /* Category labels
4386
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4387
+ */
4388
+ .cat-label {
4389
+ padding:2px 4px;
4390
+ font-family:Arial, Helvetica, sans-serif;
4391
+ font-size:11px;
4392
+ font-weight:normal;
4393
+ line-height:18px;
4394
+ text-transform:none;
4395
+ text-shadow:none;
4396
+
4397
+ transition: color 450ms ease-in-out, background-color 450ms ease-in-out;
4398
+ -moz-transition: color 450ms ease-in-out, background-color 450ms ease-in-out;
4399
+ -webkit-transition: color 450ms ease-in-out, background-color 450ms ease-in-out;
4400
+ -o-transition: color 450ms ease-in-out, background-color 450ms ease-in-out;
4401
+ }
4402
+ li > a:hover > span > .cat-label {
4403
+ transition-duration: 100ms;
4404
+ -moz-transition-duration: 100ms;
4405
+ -webkit-transition-duration: 100ms;
4406
+ -o-transition-duration: 100ms;
4407
+ }
4408
+
4409
+ /* 1st level
4410
+ -------------------------------------------------------------- */
4411
+ li.level0 > a > span { position:relative; }
4412
+ li.level0 > a > span > .cat-label {
4413
+ position:absolute;
4414
+ top:-14px;
4415
+ right:0;
4416
+ padding:0 6px;
4417
+
4418
+ font-size:14px;
4419
+ line-height:22px;
4420
+ }
4421
+
4422
+ /* Add pin (only 1st level) */
4423
+ li.level0 > a > span > .pin-bottom:before {
4424
+ position:absolute;
4425
+ right:6px;
4426
+ top:22px;
4427
+ width:0;
4428
+ height:0;
4429
+ content:"";
4430
+ border-style:solid;
4431
+ border-width:4px;
4432
+ border-color:transparent;
4433
+
4434
+ transition: border-color 450ms ease-in-out;
4435
+ -moz-transition: border-color 450ms ease-in-out;
4436
+ -webkit-transition: border-color 450ms ease-in-out;
4437
+ -o-transition: border-color 450ms ease-in-out;
4438
+ }
4439
+ li.level0 > a:hover > span > .pin-bottom:before {
4440
+ transition-duration: 100ms;
4441
+ -moz-transition-duration: 100ms;
4442
+ -webkit-transition-duration: 100ms;
4443
+ -o-transition-duration: 100ms;
4444
+ }
4445
+
4446
+ /* 2nd level
4447
+ -------------------------------------------------------------- */
4448
+ li.level1 > a > span > .cat-label {
4449
+ display:inline-block !important;
4450
+ padding:0 4px;
4451
+ margin-left:2px;
4452
+ vertical-align:middle;
4453
+ }
4454
+
4455
+ /* 3rd level
4456
+ -------------------------------------------------------------- */
4457
+ li.level2 > a > span > .cat-label {
4458
+ display:inline-block !important;
4459
+ padding:0 4px;
4460
+ margin-left:2px;
4461
+ }
4462
+
4463
+ /* Category labels inside mobile menu / vertical menu
4464
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4465
+ */
4466
+ ul.vertnav li > a > span > .cat-label {
4467
+ position:static;
4468
+ display:inline-block !important;
4469
+ padding:0 4px;
4470
+ margin-left:2px;
4471
+ }
4472
+
4473
+ /* Hide pin */
4474
+ ul.vertnav li > a > span > .pin-bottom:before {
4475
+ display:none;
4476
+ }
4477
+
4478
+ /* Label size: all levels
4479
+ -------------------------------------------------------------- */
4480
+ ul.vertnav li > a > span > .cat-label {
4481
+ font-size:inherit;
4482
+ line-height:inherit;
4483
+ }
4484
+ ul.vertnav-top li > a > span > .cat-label {
4485
+ font-size:14px;
4486
+ line-height:18px;
4487
+ }
4488
+
4489
+
4490
+ /* Category blocks
4491
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4492
+ */
4493
+ .nav-block { margin-top:0; margin-bottom:1%; }
4494
+ .nav-block-top {}
4495
+ .nav-block-bottom {}
4496
+ .nav-block-center { margin-top:10px; }
4497
+ .nav-block-right { margin-top:10px; }
4498
+
4499
+ .nav-block-level1-top { margin-bottom:10px; }
4500
+ .nav-block-level1-bottom { margin-top:10px; }
4501
+
4502
+ /* Section line (separator) is lighter than other lines
4503
+ -------------------------------------------------------------- */
4504
+ .nav-block .section-line { border-color:#eee; }
4505
+
4506
+
4507
+ /* Common styles for main menu (horizontal + mobile vertical + mobile menu trigger)
4508
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4509
+ */
4510
+
4511
+ /* horizontal + mobile menu trigger */
4512
+ #mobnav-trigger,
4513
+ #nav > li > a { font-size:16px; /*1.3333em*/ }
4514
+
4515
+
4516
+ /* Size, height etc.
4517
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4518
+ */
4519
+
4520
+ /* Mobile menu trigger
4521
+ -------------------------------------------------------------- */
4522
+ #mobnav-trigger {
4523
+ line-height:49px;
4524
+ }
4525
+
4526
+ /* Main menu - horizontal
4527
+ -------------------------------------------------------------- */
4528
+ /* Top-level item */
4529
+ #nav > li > a
4530
+ {
4531
+ line-height:49px;
4532
+ }
4533
+
4534
+ /* Drop-down box position relative to menu bar */
4535
+ #nav .level0-wrapper,
4536
+ #nav.classic ul.level0 /* For classic style menu */
4537
+ {
4538
+ top:100%;
4539
+ }
4540
+
4541
+ /**
4542
+ * Wide drop-down menu
4543
+ */
4544
+
4545
+
4546
+
4547
+ /* 1st level only
4548
+ -------------------------------------------------------------- */
4549
+ #nav > li:hover > a { position: relative; z-index: 1; /* Pull up above drop-down box */ }
4550
+
4551
+ /* 2nd level only
4552
+ -------------------------------------------------------------- */
4553
+ /* 2nd-level links block: with subcategory title and a list of child categories */
4554
+ #nav ul.level0 > li {
4555
+ display:inline-block;
4556
+ float:none;
4557
+ vertical-align:top;
4558
+ padding-top:0;
4559
+ padding-bottom:15px;
4560
+ }
4561
+ #nav ul.level0 > li > a {
4562
+ margin-bottom:10px;
4563
+ font-size:16px;
4564
+ line-height:18px;
4565
+ }
4566
+
4567
+ /* 2nd level+
4568
+ -------------------------------------------------------------- */
4569
+ #nav ul li { /*float:none;*/ margin-bottom:1px; }
4570
+ #nav ul li a { float:none; }
4571
+
4572
+ /* 3rd level only
4573
+ -------------------------------------------------------------- */
4574
+ #nav ul.level1 { position:static; }
4575
+ #nav ul.level1 > li {
4576
+ float:none;
4577
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/bullet.png) 3px 6px no-repeat;
4578
+ padding-left:15px;
4579
+ transition: background-position 150ms ease-out;
4580
+ -moz-transition: background-position 150ms ease-out;
4581
+ -webkit-transition: background-position 150ms ease-out;
4582
+ -o-transition: background-position 150ms ease-out;
4583
+ }
4584
+ #nav ul.level1 > li:hover { background-position:6px 6px; }
4585
+
4586
+ /* 4th level
4587
+ -------------------------------------------------------------- */
4588
+ #nav ul.level2 { margin:7px 0; padding:0; position:static; }
4589
+ #nav ul.level2 a { font-size:0.9166em; line-height:1.2727em; /*11px 14px*/ opacity:0.6; }
4590
+ #nav li.level2:hover ul.level2 a {
4591
+ opacity:1;
4592
+ transition: opacity 150ms ease-out;
4593
+ -moz-transition: opacity 150ms ease-out;
4594
+ -webkit-transition: opacity 150ms ease-out;
4595
+ -o-transition: opacity 150ms ease-out;
4596
+ }
4597
+
4598
+ /* 4rd level+
4599
+ -------------------------------------------------------------- */
4600
+ #nav ul ul ul li { background:none; padding-left:0; }
4601
+
4602
+ /**
4603
+ * Infortis themes styles
4604
+ */
4605
+
4606
+
4607
+
4608
+ /* Layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4609
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
4610
+
4611
+ /* Basic layout
4612
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4613
+ */
4614
+ .section-container {}
4615
+ .section { padding:10px 0; }
4616
+ .section-space { padding:10px; }
4617
+
4618
+
4619
+ /* Helper classes
4620
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4621
+ */
4622
+
4623
+ /* Magento default helper classes
4624
+ -------------------------------------------------------------- */
4625
+
4626
+ /* Layout helper classes
4627
+ -------------------------------------------------------------- */
4628
+ .margin-top { margin-top:20px; }
4629
+ .margin-bottom { margin-bottom:20px; }
4630
+ .padding-top { padding-top:20px; }
4631
+ .padding-bottom { padding-bottom:20px; }
4632
+ .float-left { float:left; } /*deprecated*/
4633
+ .float-right { float:right; } /*deprecated*/
4634
+
4635
+
4636
+
4637
+ /* Minor components %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4638
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
4639
+
4640
+ /* Caret
4641
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4642
+ */
4643
+ .caret {
4644
+ display:inline-block;
4645
+ width:0;
4646
+ height:0;
4647
+ margin-bottom:2px;
4648
+ vertical-align:middle;
4649
+ content:"";
4650
+ border-style:solid solid none;
4651
+ border-width:4px 4px 0;
4652
+ border-color:#333 transparent transparent;
4653
+ }
4654
+ .dropdown .caret {
4655
+ opacity:0.3;
4656
+ filter:alpha(opacity=30);
4657
+ }
4658
+ .dropdown:hover .caret {
4659
+ opacity:1;
4660
+ filter:alpha(opacity=100);
4661
+ }
4662
+
4663
+
4664
+ /* Product labels (stickers)
4665
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4666
+ */
4667
+
4668
+ /* Positionning
4669
+ -------------------------------------------------------------- */
4670
+ .sticker-wrapper {
4671
+ position:absolute;
4672
+ transition: all 150ms ease-in-out;
4673
+ -moz-transition: all 150ms ease-in-out;
4674
+ -webkit-transition: all 150ms ease-in-out;
4675
+ -o-transition: all 150ms ease-in-out;
4676
+ }
4677
+ .product-view .sticker-wrapper { z-index:99; /* On product page z-index greater than Cloud Zoom image */ }
4678
+ .product-view .product-img-column { position:relative; } /* Stickers are positioned relative to this container */
4679
+
4680
+ .sticker-wrapper.top-right { top:-3px; right:-3px; }
4681
+ .sticker-wrapper.bottom-right { bottom:-3px; right:-3px; }
4682
+ .sticker-wrapper.bottom-left { bottom:-3px; left:-3px; }
4683
+ .sticker-wrapper.top-left { top:-3px; left:-3px; }
4684
+
4685
+ /* Appearence
4686
+ -------------------------------------------------------------- */
4687
+ .sticker {
4688
+ width:60px;
4689
+ height:60px;
4690
+ border-radius:50%;
4691
+
4692
+ font-size:1.1666em;
4693
+ line-height:1em;
4694
+ font-weight:bold;
4695
+ text-align:center;
4696
+ display:table-cell;
4697
+ vertical-align:middle;
4698
+
4699
+ transition: all 150ms ease-in-out;
4700
+ -moz-transition: all 150ms ease-in-out;
4701
+ -webkit-transition: all 150ms ease-in-out;
4702
+ -o-transition: all 150ms ease-in-out;
4703
+ }
4704
+
4705
+ /* Colors */
4706
+ .sticker.new { background-color:#5BD2EC; color:#fff; }
4707
+ .sticker.sale { background-color:#F12B63; color:#fff; }
4708
+
4709
+ /* Effects */
4710
+ .item:hover .sticker { width:65px; height:65px; }
4711
+ .item:hover .sticker-wrapper.top-right,
4712
+ .item:hover .sticker-wrapper.top-left { }
4713
+ .item:hover .sticker-wrapper.top-right { }
4714
+ .item:hover .sticker-wrapper.top-left { }
4715
+
4716
+ /*Sizes*/
4717
+ .sticker.size-s { width:45px; height:45px; font-size:1em; }
4718
+ .item:hover .sticker.size-s { width:50px; height:50px; }
4719
+ .sticker.size-xs { width:40px; height:40px; font-size:0.9166em; /*11px*/ }
4720
+ .item:hover .sticker.size-xs { width:45px; height:45px; }
4721
+
4722
+
4723
+
4724
+ /* CMS pages and custom content %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4725
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
4726
+
4727
+ /* Video (embed)
4728
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4729
+ */
4730
+ /* "videoWrapper" - depracated class, left for backward compatibility */
4731
+ .video-wrapper,
4732
+ .videoWrapper {
4733
+ position: relative;
4734
+ padding-bottom: 56.25%; /* 16:9 */
4735
+ padding-top: 25px;
4736
+ height: 0;
4737
+ }
4738
+ .video-wrapper iframe,
4739
+ .video-wrapper object,
4740
+ .video-wrapper embed,
4741
+ .videoWrapper iframe,
4742
+ .videoWrapper object,
4743
+ .videoWrapper embed {
4744
+ position: absolute;
4745
+ top: 0;
4746
+ left: 0;
4747
+ width: 100%;
4748
+ height: 100%;
4749
+ }
4750
+
4751
+
4752
+ /* Page banners
4753
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4754
+ */
4755
+ .page-banners .banner a { display:block; }
4756
+ .page-banners .banner a img { display:block; margin:0 auto; }
4757
+
4758
+ /* depracated styles, left for backward compatibility: */
4759
+ .page-banners .banner { margin-bottom:2%; }
4760
+
4761
+
4762
+ /* Landing pages
4763
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4764
+ */
4765
+ .landing-page {}
4766
+ .horizontal-section,
4767
+ .vertical-section { display:block; margin-top:0; margin-bottom:10px; position:relative; }
4768
+ .horizontal-section { margin-top:10px; }
4769
+ .landing-page .center-block { display:block; margin:0 auto; }
4770
+
4771
+
4772
+ /* Caption
4773
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4774
+ */
4775
+ .caption {
4776
+ display:block;
4777
+ position:absolute;
4778
+ bottom:0;
4779
+ width:80%;
4780
+ margin:6%;
4781
+ padding:0;
4782
+ }
4783
+
4784
+ /* Caption position
4785
+ -------------------------------------------------------------- */
4786
+ .caption.top {
4787
+ top:0;
4788
+ bottom:auto;
4789
+ width:80%;
4790
+ }
4791
+ .caption.top-right {
4792
+ top:0;
4793
+ bottom:auto;
4794
+ right:0;
4795
+ width:58%;
4796
+ }
4797
+ .caption.bottom-right {
4798
+ right:0;
4799
+ width:58%;
4800
+ }
4801
+
4802
+ /* Caption elements
4803
+ -------------------------------------------------------------- */
4804
+ .caption > * {
4805
+ float:left;
4806
+ display:inline-block;
4807
+ margin-bottom:1px;
4808
+ }
4809
+ .caption .heading {
4810
+ padding:0.25em;
4811
+ margin-bottom:0.2em;
4812
+ font-size:2.8em;
4813
+ line-height:1em;
4814
+ font-weight:normal;
4815
+ }
4816
+ .caption p {
4817
+ clear:left;
4818
+ padding:0.25em 0.5em;
4819
+ margin-bottom:1px;
4820
+ font-size: 1.3333em;
4821
+ line-height:1em;
4822
+ }
4823
+ .caption button {
4824
+ clear:left;
4825
+ }
4826
+
4827
+ /* Caption layout
4828
+ -------------------------------------------------------------- */
4829
+ .caption.centered {
4830
+ text-align: center;
4831
+ }
4832
+ .caption.centered > * {
4833
+ display:inline-block;
4834
+ float: none;
4835
+ }
4836
+
4837
+ /* Floating (text alignment) */
4838
+ .caption.right > * { text-align:right; float:right !important; }
4839
+
4840
+ /* Caption additional styles
4841
+ -------------------------------------------------------------- */
4842
+ /* Width */
4843
+ .caption.full-width { width:88%; margin:6%; }
4844
+ .caption.narrow { width:38%; }
4845
+
4846
+ /* Prevent from hiding elements of the caption on narrow screens */
4847
+ .caption .permanent { display:inline-block !important; }
4848
+
4849
+ /* Skin
4850
+ -------------------------------------------------------------- */
4851
+ .caption .heading,
4852
+ .caption p {
4853
+ transition: color 450ms ease-in-out, background-color 450ms ease-in-out;
4854
+ -moz-transition: color 450ms ease-in-out, background-color 450ms ease-in-out;
4855
+ -webkit-transition: color 450ms ease-in-out, background-color 450ms ease-in-out;
4856
+ -o-transition: color 450ms ease-in-out, background-color 450ms ease-in-out;
4857
+ }
4858
+ a:hover .caption .heading,
4859
+ a:hover .caption p {
4860
+ transition: color 200ms ease-in-out, background-color 200ms ease-in-out;
4861
+ -moz-transition: color 200ms ease-in-out, background-color 200ms ease-in-out;
4862
+ -webkit-transition: color 200ms ease-in-out, background-color 200ms ease-in-out;
4863
+ -o-transition: color 200ms ease-in-out, background-color 200ms ease-in-out;
4864
+ }
4865
+
4866
+ /* Dark + white text */
4867
+ .caption.dark1 .heading,
4868
+ .caption.dark1 p { background-color:rgba(0,0,0, 0.35); color:#fff; }
4869
+ a:hover .caption.dark1 .heading,
4870
+ a:hover .caption.dark1 p { background-color:rgba(0,0,0, 0.7); color:#fff; }
4871
+
4872
+ /* Dark + white text */
4873
+ .caption.dark2 .heading,
4874
+ .caption.dark2 p { background-color:rgba(0,0,0, 0.5); color:#fff; }
4875
+ a:hover .caption.dark2 .heading,
4876
+ a:hover .caption.dark2 p { background-color:rgba(0,0,0, 0.8); color:#fff; }
4877
+
4878
+ /* Dark + white text */
4879
+ .caption.dark3 .heading,
4880
+ .caption.dark3 p { background-color:rgba(0,0,0, 0.65); color:#fff; }
4881
+ a:hover .caption.dark3 .heading,
4882
+ a:hover .caption.dark3 p { background-color:rgba(0,0,0, 1); color:#fff; }
4883
+
4884
+ /* Light + black text */
4885
+ .caption.light1 .heading,
4886
+ .caption.light1 p { background-color:rgba(255,255,255, 0.35); color:#000; }
4887
+ a:hover .caption.light1 .heading,
4888
+ a:hover .caption.light1 p { background-color:rgba(255,255,255, 0.7); color:#000; }
4889
+
4890
+ /* Light + black text */
4891
+ .caption.light2 .heading,
4892
+ .caption.light2 p { background-color:rgba(255,255,255, 0.6); color:#000; }
4893
+ a:hover .caption.light2 .heading,
4894
+ a:hover .caption.light2 p { background-color:rgba(255,255,255, 0.85); color:#000; }
4895
+
4896
+ /* Light + black text */
4897
+ .caption.light3 .heading,
4898
+ .caption.light3 p { background-color:rgba(255,255,255, 0.8); color:#000; }
4899
+ a:hover .caption.light3 .heading,
4900
+ a:hover .caption.light3 p { background-color:rgba(255,255,255, 1); color:#000; }
4901
+
4902
+
4903
+ /* Other
4904
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4905
+ */
4906
+ /* Disable transitions, fade effect applied with JS */
4907
+ .fade-on-hover {
4908
+ transition: none;
4909
+ -moz-transition: none;
4910
+ -webkit-transition: none;
4911
+ -o-transition: none;
4912
+ }
4913
+ /**
4914
+ * Theme Content Construction Kit
4915
+ */
4916
+
4917
+
4918
+
4919
+ /* Layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4920
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
4921
+
4922
+ /* Vertically centered content
4923
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4924
+ */
4925
+ .v-centered-content {
4926
+ display:table;
4927
+ }
4928
+ .v-centered-content .v-center {
4929
+ display:table-cell;
4930
+ vertical-align:middle;
4931
+ }
4932
+
4933
+
4934
+ /* Heading of a content section
4935
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4936
+ */
4937
+ .section-title { clear:both; margin:0; display:block; }
4938
+ .section-title.padding-right { padding-right:80px !important; }
4939
+
4940
+ /* Horizontal line */
4941
+ .section-line {
4942
+ clear:both;
4943
+ display:block;
4944
+ font-size:0;
4945
+ line-height:0;
4946
+ height:0;
4947
+ margin:0 0 10px;
4948
+ padding:10px 0 0;
4949
+ background:none;
4950
+ border-bottom:1px solid #e5e5e5;
4951
+ text-indent:-9999em;
4952
+ overflow:hidden;
4953
+ }
4954
+
4955
+
4956
+ /* Custom sidebars
4957
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4958
+ */
4959
+ .custom-sidebar-right { float:right !important; }
4960
+ .custom-sidebar-right .inner {
4961
+ padding-left:10px;
4962
+ border-left:1px solid #e5e5e5;
4963
+ }
4964
+
4965
+ .custom-sidebar-left { float:left !important; }
4966
+ .custom-sidebar-left .inner {
4967
+ padding-right:10px;
4968
+ border-right:1px solid #e5e5e5;
4969
+ }
4970
+
4971
+
4972
+
4973
+ /* Vertical links %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4974
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
4975
+
4976
+ .links > li,
4977
+ .links > li > a { line-height:3em; } /* line-height:36px; */ /*2.6666em = 32px;*/
4978
+ .links > li > a { padding:0 0.5833em; } /* padding:0 7px; */
4979
+ .links > li.label { padding-right:0.5833em; } /* 7px */
4980
+
4981
+ /* Basic links, no separators
4982
+ -------------------------------------------------------------- */
4983
+ .links > li { float:left; }
4984
+ .links > li > a { display:block; }
4985
+
4986
+ /* Links with separators (at the right side)
4987
+ -------------------------------------------------------------- */
4988
+ .links-wrapper-separators .links > li { margin-left:-1px; }
4989
+ .links-wrapper-separators .links > li > a {
4990
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/link-separator.png);
4991
+ background-position:right center;
4992
+ background-repeat:no-repeat;
4993
+ }
4994
+ .links-wrapper-separators .links > li.last > a { background-image:none; }
4995
+ .links-wrapper-separators .links > li.hide-separator > a { background-image:none; }
4996
+ .links-wrapper-separators .links > li.separator-left > a { background-position:left center; }
4997
+
4998
+ /* Links with separators (at the left side)
4999
+ -------------------------------------------------------------- */
5000
+ .links-wrapper-separators-left .links > li { margin-left:-1px; }
5001
+ .links-wrapper-separators-left .links > li > a {
5002
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/link-separator.png);
5003
+ background-position:left center;
5004
+ background-repeat:no-repeat;
5005
+ }
5006
+ .links-wrapper-separators-left .links > li.first > a { background-image:none; }
5007
+ .links-wrapper-separators-left .links > li.hide-separator > a { background-image:none; }
5008
+ .links-wrapper-separators-left .links > li.separator-right > a { background-position:right center; }
5009
+
5010
+
5011
+
5012
+
5013
+ /* Misc %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5014
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
5015
+
5016
+ /* Link with an arrow */
5017
+ a.go {
5018
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/cck/bullet.png) 97% 50% no-repeat;
5019
+ padding-right:17px;
5020
+ display:inline !important;
5021
+ }
5022
+
5023
+ /**
5024
+ * Drop-down
5025
+ */
5026
+
5027
+
5028
+
5029
+ /* Dropdown box %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5030
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
5031
+
5032
+ .dropdown { position:relative; }
5033
+ .dropdown:hover { z-index:4000; }
5034
+
5035
+ /* Dropdown toggle
5036
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5037
+ */
5038
+ .dropdown-toggle {
5039
+ display:block;
5040
+ cursor:default;
5041
+ }
5042
+
5043
+ /* Inside Dropdown-toggle
5044
+ -------------------------------------------------------------- */
5045
+ .dropdown-toggle * { display:inline-block; }
5046
+ .dropdown-toggle .label { padding-right:2px; }
5047
+ .dropdown-toggle .value {}
5048
+ .dropdown-toggle .dropdown-icon {
5049
+ width:18px;
5050
+ text-indent:-9999px;
5051
+ background-position:0 50%;
5052
+ background-repeat:no-repeat;
5053
+ }
5054
+ .dropdown-toggle .img-caret {
5055
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/dropdown/arrow-dropdown.png) 100% 50% no-repeat;
5056
+ width:10px;
5057
+ text-indent:-9999px;
5058
+ }
5059
+
5060
+ /* Predefined icons
5061
+ -------------------------------------------------------------- */
5062
+ .dropdown-toggle .icon.first { margin-left:-5px; }
5063
+ .dropdown-toggle .icon.close-to-text { margin-right:-8px; }
5064
+
5065
+
5066
+ /* Cover 'dropdown-toggle' (and 'dropdown-menu' shadow) with additional inner div
5067
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5068
+ */
5069
+ .dropdown-toggle.cover > div { padding:0 10px; cursor:default; }
5070
+ .open > .dropdown-toggle.cover > div { background-color:#fff; }
5071
+ /*.dropdown:hover .dropdown-toggle.cover > div,*/
5072
+ .open > .dropdown-toggle.cover > div {
5073
+ z-index:4001;
5074
+ position:relative;
5075
+ }
5076
+
5077
+
5078
+ /* Dropdown menu
5079
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5080
+ */
5081
+ .dropdown-menu {
5082
+ display:none;
5083
+ position:absolute;
5084
+ top:100%;
5085
+ left:0;
5086
+ z-index:4000;
5087
+ padding:20px;
5088
+ min-width:130px;
5089
+ line-height:1.5em;
5090
+ text-align:left;
5091
+
5092
+ list-style:none;
5093
+ background-color:#fff;
5094
+ }
5095
+ .dropdown-menu.left-hand {
5096
+ left:auto;
5097
+ right:0;
5098
+ }
5099
+
5100
+ /* When dropdown menu is an unordered list
5101
+ -------------------------------------------------------------- */
5102
+ /* Everything is inline-block, except links */
5103
+ .dropdown-menu > li * { display:inline-block; }
5104
+ .dropdown-menu > li > a { display:block; }
5105
+
5106
+ .dropdown-menu > li { white-space:nowrap; }
5107
+ .dropdown-menu > li .label { margin-right:8px; }
5108
+ .dropdown-menu .dropdown-icon {
5109
+ width:18px;
5110
+ text-indent:-9999px;
5111
+ background-position:0 50%;
5112
+ background-repeat:no-repeat;
5113
+ }
5114
+
5115
+
5116
+ /* Clickable
5117
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5118
+ */
5119
+ .clickable-dropdown {}
5120
+
5121
+ /**
5122
+ * Icons and "feature" box
5123
+ */
5124
+
5125
+
5126
+
5127
+ /* Icon %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5128
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
5129
+
5130
+ div.icon, /*backward compatibility*/
5131
+ span.icon {
5132
+ background-color:#999;
5133
+ background-position:0 0;
5134
+ background-repeat:no-repeat;
5135
+ border-radius:50%;
5136
+
5137
+ vertical-align:middle;
5138
+ display:inline-block;
5139
+ width:30px;
5140
+ height:30px;
5141
+ padding:3px;
5142
+ }
5143
+ div.icon.large, /*backward compatibility*/
5144
+ span.icon.large {
5145
+ width:50px;
5146
+ height:50px;
5147
+ padding:5px;
5148
+ }
5149
+
5150
+ /* Hover */
5151
+ .icon-hover:hover /* Info: was more specific: span.icon-hover:hover */
5152
+ {
5153
+ background-color:#333;
5154
+ }
5155
+
5156
+
5157
+ /* Icons: single characters (letters, numbers etc.)
5158
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5159
+ */
5160
+ /* "i-number" - class name for backward compatibility */
5161
+ .icon.i-number,
5162
+ .icon.i-char {
5163
+ font-size: 16px;
5164
+ line-height: 30px;
5165
+ font-weight: bold;
5166
+ text-align: center;
5167
+ color: #fff;
5168
+ font-family: Arial, Helvetica, sans-serif;
5169
+ }
5170
+ .icon.large.i-number,
5171
+ .icon.large.i-char {
5172
+ font-size: 20px;
5173
+ line-height: 50px;
5174
+ font-weight: normal;
5175
+ }
5176
+
5177
+
5178
+
5179
+ /* Feature - box with icons, images, text etc. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5180
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
5181
+
5182
+ /* Basic styles */
5183
+ .feature { margin:10px 0; }
5184
+ .feature:after { display:block; content:"."; clear:both; font-size:0; line-height:0; height:0; overflow:hidden; }
5185
+ .feature.first { margin-top:0; }
5186
+ .feature.last { margin-bottom:0; }
5187
+
5188
+ /* With top/bottom border line */
5189
+ .feature.top-border { border-top:1px solid #f5f5f5; padding-top:10px; }
5190
+ .feature.bottom-border { border-bottom:1px solid #f5f5f5; padding-bottom:10px; }
5191
+
5192
+ /* Wrapper with top/bottom line
5193
+ -------------------------------------------------------------- */
5194
+ .feature-wrapper.top-border {
5195
+ border-top:1px solid #f5f5f5;
5196
+ margin-top:20px;
5197
+ padding-top:20px;
5198
+ }
5199
+ .feature-wrapper.bottom-border {
5200
+ border-bottom:1px solid #f5f5f5;
5201
+ margin-bottom:20px;
5202
+ padding-bottom:20px;
5203
+ }
5204
+
5205
+
5206
+ /* Feature headings
5207
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5208
+ */
5209
+ .feature .heading {
5210
+ font-size:1.3333em; /*16px*/
5211
+ line-height:1.25em; /*20px*/
5212
+ margin-bottom:0.625em; /*10px*/
5213
+ font-weight:normal;
5214
+ }
5215
+ .feature .above-heading {
5216
+ margin:0 0 5px;
5217
+ font-size:11px;
5218
+ line-height:1.4545em; /*16px*/
5219
+ text-transform:uppercase;
5220
+ color:#888;
5221
+ }
5222
+ .feature .below-heading {
5223
+ font-size:1em;
5224
+ font-style:italic;
5225
+ line-height:1.3333em; /*16px*/
5226
+ color:#888;
5227
+ }
5228
+
5229
+
5230
+ /* Feature icons
5231
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5232
+ */
5233
+ .feature .icon { float:left; }
5234
+
5235
+ /* Feature icons vertically centered */
5236
+ .feature.v-centered-content .v-center .icon {
5237
+ margin:0 5px 0 0;
5238
+ }
5239
+
5240
+ /* Feature icons styles: */
5241
+
5242
+ /* Default icon
5243
+ -------------------------------------------------------------- */
5244
+ .feature .icon { margin:0 15px 10px 0; max-width:30px; max-height:30px; }
5245
+ .feature span.icon { padding:3px; }
5246
+
5247
+ /* Small icon
5248
+ -------------------------------------------------------------- */
5249
+ .feature.small .icon { margin:0 10px 10px 0; max-width:18px; max-height:18px; }
5250
+ .feature.small span.icon { padding:0; }
5251
+
5252
+ /* Small icon: icons with predefined background image */
5253
+ .feature.small span.icon.list1 {
5254
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/cck/list/list1.png);
5255
+ width:18px; height:18px;
5256
+ }
5257
+ .feature.small span.icon.list2 {
5258
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/_shared/cck/list/list2.png);
5259
+ width:18px; height:18px;
5260
+ }
5261
+
5262
+ /* Large icon
5263
+ -------------------------------------------------------------- */
5264
+ .feature.large .icon { margin:0 15px 10px 0; max-width:50px; max-height:50px; }
5265
+ .feature.large span.icon { padding:5px; }
5266
+
5267
+
5268
+ /* Indented feature
5269
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5270
+ */
5271
+ .feature.indent .icon { margin-bottom:0; }
5272
+
5273
+ /* Default
5274
+ -------------------------------------------------------------- */
5275
+ .feature.indent { padding-left:51px; }
5276
+ .feature.indent .icon { margin-left:-51px; }
5277
+
5278
+ /* Small
5279
+ -------------------------------------------------------------- */
5280
+ .feature.small.indent { padding-left:28px; }
5281
+ .feature.small.indent .icon { margin-left:-28px; }
5282
+
5283
+ /* Large
5284
+ -------------------------------------------------------------- */
5285
+ .feature.large.indent { padding-left:75px; }
5286
+ .feature.large.indent .icon { margin-left:-75px; }
5287
+
5288
+
5289
+ /* Feature centered
5290
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5291
+ */
5292
+ .feature.centered { text-align: center; }
5293
+ .feature.centered .icon {
5294
+ float: none;
5295
+ margin: 0 0 10px;
5296
+ }
5297
+
5298
+ /* Feature: additional styles
5299
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5300
+ */
5301
+ /* Auto-size: allow for big icons. IMPORTANT: don't use "span" tag together with "icon" in this selector! */
5302
+ .feature .icon.auto-size { width: auto; max-width: none; height: auto; max-height: none; }
5303
+
5304
+
5305
+
5306
+ /* Utility classes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5307
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
5308
+
5309
+ /* Icon without background color */
5310
+ .icon.no-bg-color { background-color: transparent; }
5311
+ .icon.force-no-bg-color { background-color: transparent !important; }
5312
+
5313
+ /* Shapes */
5314
+ .icon.circle { border-radius: 50%; }
5315
+ .icon.rounded { border-radius: 5px; }
5316
+ .icon.square { border-radius: 0; }
5317
+
5318
+ /* All icons square (deprecated) */
5319
+ .icon-wrapper-square span.icon { border-radius: 0; }
5320
+
5321
+ /* Auto-size: allow for big icons */
5322
+ .icon.auto-size { width: auto; max-width: none; height: auto; max-height: none; }
5323
+
5324
+
5325
+
5326
+ /* Transitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5327
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
5328
+
5329
+ span.icon-hover,
5330
+ .feature-icon-hover span.icon {
5331
+ transition: color 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
5332
+ -moz-transition: color 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
5333
+ -webkit-transition: color 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
5334
+ -o-transition: color 300ms ease-in-out, background-color 300ms ease-in-out, background-position 300ms ease-in-out;
5335
+ }
5336
+
5337
+ /**
5338
+ * Generic tabs
5339
+ */
5340
+
5341
+
5342
+
5343
+ /* Basic styles
5344
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5345
+ */
5346
+
5347
+ /* Tabs
5348
+ -------------------------------------------------------------- */
5349
+ /* Total height of the tab bar should be the same as in block titles */
5350
+ .gen-tabs .tabs li { float:left; margin:0; }
5351
+ .gen-tabs .tabs a {
5352
+ display:block;
5353
+ padding:0 10px;
5354
+ text-decoration:none;
5355
+ outline:none;
5356
+ }
5357
+
5358
+ /* Tab panels
5359
+ -------------------------------------------------------------- */
5360
+ .gen-tabs .tabs-panels { padding:15px 0; }
5361
+ .gen-tabs .tabs-panels .panel {}
5362
+
5363
+ /* Accordion
5364
+ -------------------------------------------------------------- */
5365
+ .gen-tabs .acctab {
5366
+ display:none;
5367
+ padding:0 0.5em;
5368
+ margin-bottom:1px;
5369
+ font-weight:normal;
5370
+ }
5371
+ .gen-tabs .acctab:hover { cursor:pointer; }
5372
+
5373
+ /* Accordion mode enabled */
5374
+ .gen-tabs.accor .tabs { display:none; }
5375
+ .gen-tabs.accor .acctab { display:block; }
5376
+ .gen-tabs.accor .tabs-panels { padding-top:0; }
5377
+ .gen-tabs.accor .tabs-panels .panel { display:none; margin:0 0 10px; padding:15px; }
5378
+
5379
+
5380
+ /* Default skin
5381
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5382
+ */
5383
+ .gen-tabs .tabs a {
5384
+ color:#333;
5385
+ background-color:#eee;
5386
+ line-height:3em;
5387
+ }
5388
+ .gen-tabs .tabs a:hover,
5389
+ .gen-tabs .tabs a:focus { background-color:#e5e5e5; }
5390
+ .gen-tabs .tabs a.current { background-color:#ddd; }
5391
+
5392
+ /* Accordion
5393
+ -------------------------------------------------------------- */
5394
+ .gen-tabs .acctab {
5395
+ font-size:1.5em;
5396
+ line-height:2.7777em;
5397
+ background-color:#f5f5f5;
5398
+ color:#333;
5399
+ }
5400
+ .gen-tabs .acctab:hover,
5401
+ .gen-tabs .acctab:focus,
5402
+ .gen-tabs .acctab.current { background-color:#e5e5e5; }
5403
+ .gen-tabs.accor .tabs-panels .panel { border-bottom:1px solid #e5e5e5; }
5404
+
5405
+
5406
+ /* Tabs - skin 1: with thin borders
5407
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5408
+ */
5409
+ .gen-tabs-style1 .tabs a {
5410
+ font-size:1.3333em;
5411
+ color:#333;
5412
+ background-color:#eee;
5413
+ border:1px solid transparent;
5414
+ border-bottom:none;
5415
+ }
5416
+ .gen-tabs-style1 .tabs a:hover,
5417
+ .gen-tabs-style1 .tabs a:focus { background-color:#e5e5e5; border-color:#e5e5e5; }
5418
+ .gen-tabs-style1 .tabs a.current {
5419
+ background-color:#fff;
5420
+ border-color:#e5e5e5;
5421
+ border-bottom:1px solid transparent;
5422
+ margin-bottom:-1px;
5423
+
5424
+ /* Make a little bit higher than other tabs */
5425
+ padding-top:4px;
5426
+ margin-top:-4px;
5427
+ }
5428
+ .gen-tabs-style1 .tabs-panels { border-top:1px solid #e5e5e5; }
5429
+ .gen-tabs-style1.accor .tabs-panels { border-top:none; }
5430
+
5431
+
5432
+ /* Tabs - skin 2: with shadow (obsolete, will be removed in next updates)
5433
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5434
+ */
5435
+ .gen-tabs-style2 .tabs a { font-size:1.3333em; }
5436
+ .gen-tabs-style2 .tabs a.current {
5437
+ box-shadow:0 0 10px rgba(0,0,0, 0.15);
5438
+ position:relative;
5439
+ z-index:1;
5440
+
5441
+ /* Make a little bit higher thatn other tabs */
5442
+ padding-top:4px;
5443
+ margin-top:-4px;
5444
+ }
5445
+ .gen-tabs-style2 .tabs-panels {
5446
+ background-color:#fff;
5447
+ position:relative;
5448
+ z-index:2;
5449
+ }
5450
+ /**
5451
+ * Theme icons
5452
+ */
5453
+
5454
+
5455
+
5456
+ /* Predefined icons
5457
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5458
+ */
5459
+ /* Wishlist */
5460
+ .icon.i-wishlist {
5461
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5462
+ background-position:-7px -7px;
5463
+ }
5464
+ .icon.i-wishlist-w {
5465
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5466
+ background-position:-7px -57px;
5467
+ }
5468
+
5469
+ /* bw */
5470
+ .icon.i-wishlist-bw {
5471
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5472
+ background-position:-7px -7px;
5473
+ }
5474
+ .icon-hover:hover.i-wishlist-bw,
5475
+ .feature-icon-hover:hover .icon.i-wishlist-bw {
5476
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5477
+ background-position:-7px -57px;
5478
+ }
5479
+
5480
+ /* wb */
5481
+ .icon.i-wishlist-wb {
5482
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5483
+ background-position:-7px -57px;
5484
+ }
5485
+ .icon-hover:hover.i-wishlist-wb,
5486
+ .feature-icon-hover:hover .icon.i-wishlist-wb {
5487
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5488
+ background-position:-7px -7px;
5489
+ }
5490
+
5491
+ /* Compare */
5492
+ .icon.i-compare {
5493
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5494
+ background-position:-57px -7px;
5495
+ }
5496
+ .icon.i-compare-w {
5497
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5498
+ background-position:-57px -57px;
5499
+ }
5500
+
5501
+ /* bw */
5502
+ .icon.i-compare-bw {
5503
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5504
+ background-position:-57px -7px;
5505
+ }
5506
+ .icon-hover:hover.i-compare-bw,
5507
+ .feature-icon-hover:hover .icon.i-compare-bw,
5508
+ .open > .dropdown-toggle.cover .icon.i-compare-bw
5509
+ {
5510
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5511
+ background-position:-57px -57px;
5512
+ }
5513
+
5514
+ /* wb */
5515
+ .icon.i-compare-wb {
5516
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5517
+ background-position:-57px -57px;
5518
+ }
5519
+ .icon-hover:hover.i-compare-wb,
5520
+ .feature-icon-hover:hover .icon.i-compare-wb,
5521
+ .open > .dropdown-toggle.cover .icon.i-compare-wb
5522
+ {
5523
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5524
+ background-position:-57px -7px;
5525
+ }
5526
+
5527
+ /* Share/recommend */
5528
+ .icon.i-recommend {
5529
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5530
+ background-position:-107px -7px;
5531
+ }
5532
+ .icon.i-recommend-w {
5533
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5534
+ background-position:-107px -57px;
5535
+ }
5536
+
5537
+ /* bw */
5538
+ .icon.i-recommend-bw {
5539
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5540
+ background-position:-107px -7px;
5541
+ }
5542
+ .icon-hover:hover.i-recommend-bw,
5543
+ .feature-icon-hover:hover .icon.i-recommend-bw {
5544
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5545
+ background-position:-107px -57px;
5546
+ }
5547
+
5548
+ /* wb */
5549
+ .icon.i-recommend-wb {
5550
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5551
+ background-position:-107px -57px;
5552
+ }
5553
+ .icon-hover:hover.i-recommend-wb,
5554
+ .feature-icon-hover:hover .icon.i-recommend-wb {
5555
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5556
+ background-position:-107px -7px;
5557
+ }
5558
+
5559
+ /* Low stock */
5560
+ .icon.i-lowstock {
5561
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5562
+ background-position:-157px -7px;
5563
+ }
5564
+ .icon.i-lowstock-w {
5565
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5566
+ background-position:-157px -57px;
5567
+ }
5568
+
5569
+ /* bw */
5570
+ .icon.i-lowstock-bw {
5571
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5572
+ background-position:-157px -7px;
5573
+ }
5574
+ .icon-hover:hover.i-lowstock-bw,
5575
+ .feature-icon-hover:hover .icon.i-lowstock-bw {
5576
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5577
+ background-position:-157px -57px;
5578
+ }
5579
+
5580
+ /* wb */
5581
+ .icon.i-lowstock-wb {
5582
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5583
+ background-position:-157px -57px;
5584
+ }
5585
+ .icon-hover:hover.i-lowstock-wb,
5586
+ .feature-icon-hover:hover .icon.i-lowstock-wb {
5587
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5588
+ background-position:-157px -7px;
5589
+ }
5590
+
5591
+
5592
+
5593
+ /* Cart */
5594
+ .icon.i-cart {
5595
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5596
+ background-position:-457px -7px;
5597
+ }
5598
+ .icon.i-cart-w {
5599
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5600
+ background-position:-457px -57px;
5601
+ }
5602
+
5603
+ /* bw */
5604
+ .icon.i-cart-bw {
5605
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5606
+ background-position:-457px -7px;
5607
+ }
5608
+ .icon-hover:hover.i-cart-bw,
5609
+ .feature-icon-hover:hover .icon.i-cart-bw,
5610
+ .open > .dropdown-toggle.cover .icon.i-cart-bw
5611
+ {
5612
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5613
+ background-position:-457px -57px;
5614
+ }
5615
+
5616
+ /* wb */
5617
+ .icon.i-cart-wb {
5618
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5619
+ background-position:-457px -57px;
5620
+ }
5621
+ .icon-hover:hover.i-cart-wb,
5622
+ .feature-icon-hover:hover .icon.i-cart-wb,
5623
+ .open > .dropdown-toggle.cover .icon.i-cart-wb
5624
+ {
5625
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5626
+ background-position:-457px -7px;
5627
+ }
5628
+
5629
+ /* Row 2
5630
+ -------------------------------------------------------------- */
5631
+
5632
+ /* Home */
5633
+ .icon.i-home {
5634
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5635
+ background-position:-7px -107px;
5636
+ }
5637
+ .icon.i-home-w {
5638
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5639
+ background-position:-7px -157px;
5640
+ }
5641
+
5642
+ /* bw */
5643
+ .icon.i-home-bw {
5644
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5645
+ background-position:-7px -107px;
5646
+ }
5647
+ .icon-hover:hover.i-home-bw,
5648
+ .feature-icon-hover:hover .icon.i-home-bw {
5649
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5650
+ background-position:-7px -157px;
5651
+ }
5652
+
5653
+ /* wb */
5654
+ .icon.i-home-wb {
5655
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5656
+ background-position:-7px -157px;
5657
+ }
5658
+ .icon-hover:hover.i-home-wb,
5659
+ .feature-icon-hover:hover .icon.i-home-wb {
5660
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5661
+ background-position:-7px -107px;
5662
+ }
5663
+
5664
+ /* Left */
5665
+ .icon.i-left {
5666
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5667
+ background-position:-107px -107px;
5668
+ }
5669
+ .icon.i-left-w {
5670
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5671
+ background-position:-107px -157px;
5672
+ }
5673
+
5674
+ /* bw */
5675
+ .icon.i-left-bw {
5676
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5677
+ background-position:-107px -107px;
5678
+ }
5679
+ .icon-hover:hover.i-left-bw,
5680
+ .feature-icon-hover:hover .icon.i-left-bw {
5681
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5682
+ background-position:-107px -157px;
5683
+ }
5684
+
5685
+ /* wb */
5686
+ .icon.i-left-wb {
5687
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5688
+ background-position:-107px -157px;
5689
+ }
5690
+ .icon-hover:hover.i-left-wb,
5691
+ .feature-icon-hover:hover .icon.i-left-wb {
5692
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5693
+ background-position:-107px -107px;
5694
+ }
5695
+
5696
+ /* Right */
5697
+ .icon.i-right {
5698
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5699
+ background-position:-157px -107px;
5700
+ }
5701
+ .icon.i-right-w {
5702
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5703
+ background-position:-157px -157px;
5704
+ }
5705
+
5706
+ /* bw */
5707
+ .icon.i-right-bw {
5708
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5709
+ background-position:-157px -107px;
5710
+ }
5711
+ .icon-hover:hover.i-right-bw,
5712
+ .feature-icon-hover:hover .icon.i-right-bw {
5713
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5714
+ background-position:-157px -157px;
5715
+ }
5716
+
5717
+ /* wb */
5718
+ .icon.i-right-wb {
5719
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5720
+ background-position:-157px -157px;
5721
+ }
5722
+ .icon-hover:hover.i-right-wb,
5723
+ .feature-icon-hover:hover .icon.i-right-wb {
5724
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5725
+ background-position:-157px -107px;
5726
+ }
5727
+
5728
+ /* Top */
5729
+ .icon.i-top {
5730
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5731
+ background-position:-207px -107px;
5732
+ }
5733
+ .icon.i-top-w {
5734
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5735
+ background-position:-207px -157px;
5736
+ }
5737
+
5738
+ /* bw */
5739
+ .icon.i-top-bw {
5740
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5741
+ background-position:-207px -107px;
5742
+ }
5743
+ .icon-hover:hover.i-top-bw,
5744
+ .feature-icon-hover:hover .icon.i-top-bw {
5745
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5746
+ background-position:-207px -157px;
5747
+ }
5748
+
5749
+ /* wb */
5750
+ .icon.i-top-wb {
5751
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5752
+ background-position:-207px -157px;
5753
+ }
5754
+ .icon-hover:hover.i-top-wb,
5755
+ .feature-icon-hover:hover .icon.i-top-wb {
5756
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5757
+ background-position:-207px -107px;
5758
+ }
5759
+
5760
+ /* Bottom */
5761
+ .icon.i-bottom {
5762
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5763
+ background-position:-257px -107px;
5764
+ }
5765
+ .icon.i-bottom-w {
5766
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5767
+ background-position:-257px -157px;
5768
+ }
5769
+
5770
+ /* bw */
5771
+ .icon.i-bottom-bw {
5772
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5773
+ background-position:-257px -107px;
5774
+ }
5775
+ .icon-hover:hover.i-bottom-bw,
5776
+ .feature-icon-hover:hover .icon.i-bottom-bw {
5777
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5778
+ background-position:-257px -157px;
5779
+ }
5780
+
5781
+ /* wb */
5782
+ .icon.i-bottom-wb {
5783
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5784
+ background-position:-257px -157px;
5785
+ }
5786
+ .icon-hover:hover.i-bottom-wb,
5787
+ .feature-icon-hover:hover .icon.i-bottom-wb {
5788
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite.png);
5789
+ background-position:-257px -107px;
5790
+ }
5791
+
5792
+ /**
5793
+ * Social icons
5794
+ */
5795
+
5796
+
5797
+
5798
+ /* Contact icons
5799
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5800
+ */
5801
+
5802
+ /* TODO: */
5803
+
5804
+ /* Phone */
5805
+ .icon.i-telephone {
5806
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5807
+ background-position:-7px -7px;
5808
+ }
5809
+ .icon.i-telephone-w {
5810
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5811
+ background-position:-7px -57px;
5812
+ }
5813
+
5814
+ /* Mobile */
5815
+ .icon.i-mobile {
5816
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5817
+ background-position:-57px -7px;
5818
+ }
5819
+ .icon.i-mobile-w {
5820
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5821
+ background-position:-57px -57px;
5822
+ }
5823
+
5824
+ /* Skype */
5825
+ .icon.i-skype {
5826
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5827
+ background-position:-107px -7px;
5828
+ }
5829
+ .icon.i-skype-w {
5830
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5831
+ background-position:-107px -57px;
5832
+ }
5833
+
5834
+ /* Letter */
5835
+ .icon.i-letter {
5836
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5837
+ background-position:-157px -7px;
5838
+ }
5839
+ .icon.i-letter-w {
5840
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5841
+ background-position:-157px -57px;
5842
+ }
5843
+
5844
+ /* Location */
5845
+ .icon.i-location {
5846
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5847
+ background-position:-207px -7px;
5848
+ }
5849
+ .icon.i-location-w {
5850
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5851
+ background-position:-207px -57px;
5852
+ }
5853
+
5854
+
5855
+ /* Row 2
5856
+ -------------------------------------------------------------- */
5857
+ /* Twitter */
5858
+ .icon.i-twitter {
5859
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5860
+ background-position:-7px -107px;
5861
+ }
5862
+ .icon.i-twitter-w {
5863
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5864
+ background-position:-7px -157px;
5865
+ }
5866
+
5867
+ /* Facebook */
5868
+ .icon.i-facebook {
5869
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5870
+ background-position:-57px -107px;
5871
+ }
5872
+ .icon.i-facebook-w {
5873
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5874
+ background-position:-57px -157px;
5875
+ }
5876
+
5877
+ /* Google plus */
5878
+ .icon.i-googleplus {
5879
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5880
+ background-position:-107px -107px;
5881
+ }
5882
+ .icon.i-googleplus-w {
5883
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5884
+ background-position:-107px -157px;
5885
+ }
5886
+
5887
+ /* Youtube */
5888
+ .icon.i-youtube {
5889
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5890
+ background-position:-157px -107px;
5891
+ }
5892
+ .icon.i-youtube-w {
5893
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5894
+ background-position:-157px -157px;
5895
+ }
5896
+
5897
+ /* Vimeo */
5898
+ .icon.i-vimeo {
5899
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5900
+ background-position:-207px -107px;
5901
+ }
5902
+ .icon.i-vimeo-w {
5903
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5904
+ background-position:-207px -157px;
5905
+ }
5906
+
5907
+ /* Wordpress */
5908
+ .icon.i-wordpress {
5909
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5910
+ background-position:-257px -107px;
5911
+ }
5912
+ .icon.i-wordpress-w {
5913
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5914
+ background-position:-257px -157px;
5915
+ }
5916
+
5917
+ /* Pinterest */
5918
+ .icon.i-pinterest {
5919
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5920
+ background-position:-307px -107px;
5921
+ }
5922
+ .icon.i-pinterest-w {
5923
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5924
+ background-position:-307px -157px;
5925
+ }
5926
+
5927
+ /* Linked in */
5928
+ .icon.i-linkedin {
5929
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5930
+ background-position:-357px -107px;
5931
+ }
5932
+ .icon.i-linkedin-w {
5933
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5934
+ background-position:-357px -157px;
5935
+ }
5936
+
5937
+ /* Blogger */
5938
+ .icon.i-blogger {
5939
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5940
+ background-position:-407px -107px;
5941
+ }
5942
+ .icon.i-blogger-w {
5943
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5944
+ background-position:-407px -157px;
5945
+ }
5946
+
5947
+ /* Envato */
5948
+ .icon.i-envato {
5949
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5950
+ background-position:-457px -107px;
5951
+ }
5952
+ .icon.i-envato-w {
5953
+ background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social.png);
5954
+ background-position:-457px -157px;
5955
+ }
5956
+
5957
+ /**
5958
+ * Common styles
5959
+ */
5960
+
5961
+
5962
+
5963
+ /* Common styles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5964
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
5965
+
5966
+ /* Sizes
5967
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5968
+ */
5969
+ .header-top,
5970
+ .header .dropdown { line-height:3em; } /* line-height:36px; */
5971
+ .header .dropdown { max-height:3em; } /* Set static height to improve layout of inline elements */
5972
+
5973
+
5974
+ /* Blocks
5975
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5976
+ */
5977
+ /**/
5978
+ .sidebar .block:first-child { margin-top:6px; } /* To align with page title */
5979
+ .cms-index-index .sidebar .block:first-child { margin-top:0; } /* Remove margin on home page */
5980
+
5981
+
5982
+ /* Headings
5983
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5984
+ */
5985
+
5986
+ /* Page Heading
5987
+ -------------------------------------------------------------- */
5988
+ .my-account .page-title,
5989
+ .category-title { border-bottom:1px solid #e5e5e5; }
5990
+
5991
+ /* Block titles and section headings
5992
+ -------------------------------------------------------------- */
5993
+ /* Sidebar blocks */
5994
+ .block .block-title,
5995
+
5996
+ /* Section title */
5997
+ .section-title,
5998
+
5999
+ /* Cart */
6000
+ .cart .crosssell h2,
6001
+ .cart .discount h2,
6002
+ .cart .shipping h2
6003
+ {
6004
+ /* padding:13px 0 7px; */ /*TODO*/
6005
+ padding-top:7px;
6006
+ padding-bottom:7px;
6007
+ border-bottom:1px solid #e5e5e5;
6008
+ font-weight:normal;
6009
+ font-size:1.5em; /*18px*/
6010
+ line-height:1.2222em; /*22px*/
6011
+ }
6012
+
6013
+ /* Secondary headings
6014
+ -------------------------------------------------------------- */
6015
+ /* Log in */
6016
+ .account-login h2,
6017
+
6018
+ /* Checkout log in */
6019
+ #opc-login h3,
6020
+
6021
+ /* Fieldset and multiple checkout */
6022
+ .fieldset .legend,
6023
+ .multiple-checkout .col2-set h2.legend,
6024
+ .info-set h2.legend
6025
+ {
6026
+ font-size:1.5em; /*18px*/
6027
+ line-height:1.3333em; /*24px*/
6028
+ font-weight:normal;
6029
+ text-transform:uppercase;
6030
+ border-bottom:1px solid #e5e5e5;
6031
+ padding-bottom:10px;
6032
+ }
6033
+
6034
+ /* Account headings
6035
+ -------------------------------------------------------------- */
6036
+ /* Primary */
6037
+ .box-account .box-head h2,
6038
+ .order-items h2.table-caption,
6039
+ .order-items h2.sub-title,
6040
+ .order-items .order-comments h2 {}
6041
+
6042
+ /* Secondary */
6043
+ .dashboard .box .box-title h3,
6044
+ .dashboard .box .box-title h4,
6045
+ .order-info-box h2 {}
6046
+
6047
+ /* Other headings
6048
+ -------------------------------------------------------------- */
6049
+ /* Page title */
6050
+ .category-title,
6051
+
6052
+ /* Account */
6053
+ .my-account .page-title,
6054
+ .box-account .box-head,
6055
+ .dashboard .box .box-title
6056
+ {
6057
+ border-color:#e5e5e5;
6058
+ }
6059
+
6060
+
6061
+
6062
+ /* Colors %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6063
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
6064
+
6065
+ /* Borders
6066
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6067
+ */
6068
+
6069
+ /* Elements with horizontal border - normal
6070
+ -------------------------------------------------------------- */
6071
+ /* CMS */
6072
+ .section-line,
6073
+
6074
+ /* Misc */
6075
+ .toolbar
6076
+ { border-color:#e5e5e5; }
6077
+
6078
+ /* Elements with horizontal border - lighter
6079
+ -------------------------------------------------------------- */
6080
+ /* Product page - Add-to-cart area */
6081
+ .product-view .product-type-data,
6082
+ .product-view .product-type-data .price-box,
6083
+ .container1-wrapper,
6084
+ .container2-wrapper,
6085
+ .product-view .add-to-box,
6086
+
6087
+ /* Product grid/list */
6088
+ .category-products-grid .item,
6089
+ .products-list li.item,
6090
+
6091
+ /* Pop-ups */
6092
+ .remember-me-popup h3,
6093
+ .map-popup-heading
6094
+ {
6095
+ border-color:#f5f5f5;
6096
+ }
6097
+
6098
+ /* Elements with vertical border - normal
6099
+ -------------------------------------------------------------- */
6100
+ /* Product page */
6101
+ .custom-sidebar-right .inner,
6102
+ .custom-sidebar-left .inner
6103
+ {
6104
+ border-color:#e5e5e5;
6105
+ }
6106
+
6107
+ /* Elements with vertical border - lighter
6108
+ -------------------------------------------------------------- */
6109
+ /* Product grid/list */
6110
+ .products-list .product-shop-inner
6111
+ {
6112
+ border-color:#f5f5f5;
6113
+ }
6114
+
6115
+ /* Elements with darker border
6116
+ -------------------------------------------------------------- */
6117
+ /* Cart */
6118
+ .data-table thead,
6119
+ .cart-table thead tr,
6120
+
6121
+ /* Availability */
6122
+ .availability-only-details thead
6123
+ {
6124
+ border-color:#e5e5e5; /*Currently the same color as other borders*/
6125
+ }
6126
+
6127
+
6128
+ /* Background colors
6129
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6130
+ */
6131
+
6132
+ /* Elements with light gray background
6133
+ -------------------------------------------------------------- */
6134
+ /* Product page - increaments */
6135
+ .extrahint-wrapper .product-pricing,
6136
+
6137
+ /* Account */
6138
+ .addresses-list .addresses-primary .item,
6139
+ .order-info-box,
6140
+
6141
+ /* Advanced search */
6142
+ .advanced-search-summary,
6143
+
6144
+ /* Checkout */
6145
+ .opc .gift-messages-form
6146
+ {
6147
+ background-color:#f5f5f5;
6148
+ }
6149
+
6150
+
6151
+ /* Text color
6152
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6153
+ */
6154
+
6155
+ /* Elements with lighter text
6156
+ -------------------------------------------------------------- */
6157
+ /* Product grid/list */
6158
+ .products-list .ratings,
6159
+ .products-grid .ratings,
6160
+ .products-list .ratings a,
6161
+ .products-grid .ratings a,
6162
+
6163
+ /* Breadcrumbs */
6164
+ .breadcrumbs li,
6165
+ .breadcrumbs a,
6166
+
6167
+ /* Layered nav */
6168
+ .block-layered-nav dd li,
6169
+
6170
+ /* Product page */
6171
+ .block-related-simple .related-add-to-wishlist,
6172
+ .block-related-thumbnails .related-add-to-wishlist,
6173
+
6174
+ /* Availability */
6175
+ .availability,
6176
+
6177
+ /* Reviews */
6178
+ .product-view .box-reviews dd .date,
6179
+
6180
+ /* Product options */
6181
+ .item-options dd,
6182
+ .product-options p.note,
6183
+
6184
+ /* Prices */
6185
+ .price-notice .price,
6186
+
6187
+ /* MSRP price and old price */
6188
+ .old-price,
6189
+ .product-view .price-box .old-price .price,
6190
+ #map-popup-msrp,
6191
+ .map-popup-msrp .price
6192
+ {
6193
+ color:#aaa;
6194
+ }
6195
+
6196
+
6197
+ /* Forms
6198
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6199
+ */
6200
+ /* Product options form colors
6201
+ -------------------------------------------------------------- */
6202
+ .product-options dd select,
6203
+ .product-options dd .input-text,
6204
+ .product-options dd textarea,
6205
+ .product-options ul.options-list { color:#888; }
6206
+ .product-options dd select:hover,
6207
+ .product-options dd select:focus,
6208
+ .product-options dd textarea:hover,
6209
+ .product-options dd textarea:focus,
6210
+ .product-options ul.options-list:hover { color:#333; }
6211
+
6212
+
6213
+ /* Selected interface icons:
6214
+ text color - icons on hover: toolbar icons, pager, prev/next slide etc.
6215
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6216
+ */
6217
+
6218
+ /* Hover item color */
6219
+ /* Toolbar */
6220
+ .sorter .view-mode a:hover,
6221
+ .sorter .sort-by .category-asc:hover,
6222
+ .sorter .sort-by .category-desc:hover,
6223
+ .pager .pages li a:hover,
6224
+
6225
+ /* Add-to links */
6226
+ .add-to-links.addto-icons a:hover,
6227
+
6228
+ /* Slider arrows */
6229
+ .gen-slider-arrows1 .direction-nav a:hover,
6230
+ .gen-slider-arrows2 .direction-nav a:hover,
6231
+ .gen-slider-arrows3 .direction-nav a:hover,
6232
+
6233
+ /* Lightbox */
6234
+ #cboxPrevious:hover,
6235
+ #cboxNext:hover,
6236
+ #cboxClose:hover,
6237
+
6238
+ /* Scroll to top button */
6239
+ #scroll-to-top:hover
6240
+ {
6241
+ color:#fff; /*Color of text*/
6242
+ }
6243
+
6244
+
6245
+
6246
+ /* Fonts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6247
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
6248
+
6249
+ /* Price on product page and MSRP
6250
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6251
+ */
6252
+ .product-view .price-box .price,
6253
+ .map-popup-price .price,
6254
+ .map-popup-msrp .price { font-family:Verdana, Geneva, sans-serif; }
6255
+
6256
+
6257
+
6258
+ /* Effects %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6259
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
6260
+
6261
+ /* Shadows: for pop-ups, drop-downs etc.
6262
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6263
+ */
6264
+ /* IE version included */
6265
+ #nav .level0-wrapper,
6266
+ #nav.classic .parent > ul,
6267
+
6268
+ /* Mini cart */
6269
+ #mini-cart .block-content,
6270
+ .truncated .truncated_full_value .item-options,
6271
+
6272
+ /* Compare drop-down */
6273
+ .header .block-compare .block-content,
6274
+
6275
+ /* Search autocomplete */
6276
+ .header .form-search .search-autocomplete ul,
6277
+
6278
+ /* Dropdown */
6279
+ .open > .dropdown-toggle.cover,
6280
+ .dropdown-menu,
6281
+
6282
+ /* Pop-ups and tooltips */
6283
+ .remember-me-popup,
6284
+ .map-popup,
6285
+ .tool-tip,
6286
+ #subscribe-form .input-box .validation-advice
6287
+ {
6288
+ -moz-box-shadow:0 2px 10px rgba(0,0,0, 0.15);
6289
+ -webkit-box-shadow:0 2px 10px rgba(0,0,0, 0.15);
6290
+ box-shadow:0 2px 10px rgba(0,0,0, 0.15);
6291
+ }
6292
+
6293
+
6294
+ /* Transitions
6295
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6296
+ */
6297
+
6298
+ /* Links and other selected elements
6299
+ -------------------------------------------------------------- */
6300
+ /* IMPORTANT: link transitions should be placed before other transitions */
6301
+ a,
6302
+ #mobnav-trigger .trigger-icon .line,
6303
+ .accordion .opener /*Main menu accordion*/
6304
+ {
6305
+ transition: color 450ms ease-in-out, background-color 450ms ease-in-out;
6306
+ -moz-transition: color 450ms ease-in-out, background-color 450ms ease-in-out;
6307
+ -webkit-transition: color 450ms ease-in-out, background-color 450ms ease-in-out;
6308
+ -o-transition: color 450ms ease-in-out, background-color 450ms ease-in-out;
6309
+ }
6310
+ a:hover,
6311
+ #mobnav-trigger:hover .trigger-icon .line,
6312
+ .accordion .opener:hover
6313
+ {
6314
+ transition-duration: 100ms;
6315
+ -moz-transition-duration: 100ms;
6316
+ -webkit-transition-duration: 100ms;
6317
+ -o-transition-duration: 100ms;
6318
+ }
6319
+
6320
+ /* Opacity
6321
+ -------------------------------------------------------------- */
6322
+ /*
6323
+ .form-search .button span
6324
+ {
6325
+ transition: opacity 450ms ease-in-out;
6326
+ -moz-transition: opacity 450ms ease-in-out;
6327
+ -webkit-transition: opacity 450ms ease-in-out;
6328
+ -o-transition: opacity 450ms ease-in-out;
6329
+ }
6330
+ .form-search .button:hover span
6331
+ {
6332
+ transition-duration: 100ms;
6333
+ -moz-transition-duration: 100ms;
6334
+ -webkit-transition-duration: 100ms;
6335
+ -o-transition-duration: 100ms;
6336
+ }
6337
+ */
6338
+ .form-search .button span {
6339
+ transition: opacity 300ms ease-in-out;
6340
+ -moz-transition: opacity 300ms ease-in-out;
6341
+ -webkit-transition: opacity 300ms ease-in-out;
6342
+ -o-transition: opacity 300ms ease-in-out;
6343
+ }
6344
+
6345
+ /* Interface icons: toolbar icons, pager, prev/next slide etc.
6346
+ -------------------------------------------------------------- */
6347
+ .sorter .view-mode .grid,
6348
+ .sorter .view-mode .list,
6349
+ .sorter .sort-by .category-asc,
6350
+ .sorter .sort-by .category-desc,
6351
+
6352
+ /* Back link */
6353
+ .buttons-set .back-link small,
6354
+
6355
+ /* Add-to links */
6356
+ .add-to-links.addto-icons a,
6357
+
6358
+ /* Accordion and collapsible: opener */
6359
+ .accordion-style1 .opener,
6360
+ .accordion-style1 .opener:hover, /*Override: .accordion .opener:hover */
6361
+ .collapsible .opener,
6362
+
6363
+ /* Scroll to top */
6364
+ #scroll-to-top
6365
+ {
6366
+ transition: background-color 300ms ease-in-out, background-position 300ms ease-in-out;
6367
+ -moz-transition: background-color 300ms ease-in-out, background-position 300ms ease-in-out;
6368
+ -webkit-transition: background-color 300ms ease-in-out, background-position 300ms ease-in-out;
6369
+ -o-transition: background-color 300ms ease-in-out, background-position 300ms ease-in-out;
6370
+ }
6371
+
6372
+ /* Accordions, tabs & other components
6373
+ -------------------------------------------------------------- */
6374
+ /* TODO: del
6375
+ .gen-tabs .tabs a,
6376
+ .gen-tabs .acctab,
6377
+ .opc .step-title
6378
+ {
6379
+ transition: color 300ms ease-in-out, background-color 300ms ease-in-out, border-color 300ms ease-in-out;
6380
+ -moz-transition: color 300ms ease-in-out, background-color 300ms ease-in-out, border-color 300ms ease-in-out;
6381
+ -webkit-transition: color 300ms ease-in-out, background-color 300ms ease-in-out, border-color 300ms ease-in-out;
6382
+ -o-transition: color 300ms ease-in-out, background-color 300ms ease-in-out, border-color 300ms ease-in-out;
6383
+ }
6384
+ */
6385
+
6386
+ /* Carets
6387
+ -------------------------------------------------------------- */
6388
+ #nav a.level-top .caret {
6389
+ transition: border-top-color 450ms ease-in-out;
6390
+ -moz-transition: border-top-color 450ms ease-in-out;
6391
+ -webkit-transition: border-top-color 450ms ease-in-out;
6392
+ -o-transition: border-top-color 450ms ease-in-out;
6393
+ }
6394
+ #nav > li:hover a.level-top .caret {
6395
+ transition-duration: 100ms;
6396
+ -moz-transition-duration: 100ms;
6397
+ -webkit-transition-duration: 100ms;
6398
+ -o-transition-duration: 100ms;
6399
+ }
6400
+
6401
+ /* Elements with animated color, background color and borders
6402
+ -------------------------------------------------------------- */
6403
+ /* Forms */
6404
+ input.input-text, select, textarea,
6405
+ .product-options ul.options-list,
6406
+
6407
+ /* Product image thumbnails */
6408
+ .product-view .product-img-box .more-views .thumbnails li a,
6409
+
6410
+ /* Product mini-lists */
6411
+ .mini-products-list .product-image,
6412
+ .cart .crosssell .product-image,
6413
+
6414
+ /* Tabs & accordion */
6415
+ .gen-tabs .tabs a,
6416
+ .gen-tabs .acctab,
6417
+
6418
+ /* OPC accordion */
6419
+ .opc .step-title
6420
+ {
6421
+ transition: color 300ms ease-in-out, background-color 300ms ease-in-out, border-color 300ms ease-in-out;
6422
+ -moz-transition: color 300ms ease-in-out, background-color 300ms ease-in-out, border-color 300ms ease-in-out;
6423
+ -webkit-transition: color 300ms ease-in-out, background-color 300ms ease-in-out, border-color 300ms ease-in-out;
6424
+ -o-transition: color 300ms ease-in-out, background-color 300ms ease-in-out, border-color 300ms ease-in-out;
6425
+ }
6426
+
6427
+
6428
+ /* Shadow for the main containers
6429
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6430
+ */
6431
+
6432
+ /* Elements which have backgr. color can be marked with "show-bg". They will drop shadow if "shadow" class was added to the containing block. */
6433
+ .drop-shadow,
6434
+ .shadow .show-bg,
6435
+
6436
+ /* Conditional shadow for main menu bar */
6437
+ .shadow .nav-bar-drop-shadow #mobnav-trigger,
6438
+ .shadow .nav-bar-drop-shadow .vertnav-top,
6439
+ .shadow .nav-bar-drop-shadow #nav
6440
+ {
6441
+ -moz-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1);
6442
+ -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1);
6443
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1);
6444
+ }
6445
+
6446
+ /**
6447
+ * WARNING: do not edit this file. It was generated automatically, your changes will be overwritten and lost.
6448
+ * 2014-01-23 17:13:45 */
6449
+
6450
+
6451
+
6452
+
6453
+
6454
+
6455
+
6456
+ body {
6457
+ color: #333333;
6458
+ font-size: 12px;
6459
+
6460
+ background-color: #f5f5f5;
6461
+ }
6462
+ a
6463
+ {
6464
+ color: #333333;
6465
+ }
6466
+ a:hover,
6467
+ .vertnav-side li.current > a
6468
+ {
6469
+ color: #3ec2df;
6470
+ }
6471
+
6472
+ .caret {
6473
+ border-top-color: #333333;
6474
+ }
6475
+
6476
+
6477
+ button.button span
6478
+ {
6479
+ background-color: #eeeeee;
6480
+ color: #333333;
6481
+ }
6482
+ button.button:hover span
6483
+ {
6484
+ background-color: #5bd2ec;
6485
+ color: #ffffff;
6486
+ }
6487
+
6488
+ .product-view .btn-cart span,
6489
+ button.btn-checkout span
6490
+ {
6491
+ background-color: #333333;
6492
+ color: #ffffff;
6493
+ }
6494
+ .product-view .btn-cart:hover span,
6495
+ button.btn-checkout:hover span
6496
+ {
6497
+ background-color: #5bd2ec;
6498
+ color: #ffffff;
6499
+ }
6500
+
6501
+
6502
+
6503
+ /* Default icon */
6504
+ /* Toolbar */
6505
+ .sorter .view-mode a,
6506
+ .sorter .sort-by .category-asc,
6507
+ .sorter .sort-by .category-desc,
6508
+ .pager .pages li a,
6509
+
6510
+ /* Back link */
6511
+ .buttons-set .back-link small,
6512
+
6513
+ /* Add-to links */
6514
+
6515
+ /* Simple icons (product grid) */
6516
+ .add-to-links.addto-icons a, /*Deprecated*/
6517
+
6518
+ /* Other with standard icons */
6519
+ .add-to-links span.icon,
6520
+
6521
+ /* Slider arrows */
6522
+ .slider-arrows1 .owl-controls .owl-buttons div,
6523
+ .slider-arrows1 .owl-controls.clickable .owl-buttons div.disabled:hover,
6524
+ .slider-arrows2 .owl-controls .owl-buttons div,
6525
+ .slider-arrows3 .owl-controls .owl-buttons div,
6526
+ .slider-arrows3 .owl-controls.clickable .owl-buttons div.disabled:hover,
6527
+
6528
+ /* deprecated */
6529
+ .gen-slider-arrows1 .direction-nav a, /* Sliders */
6530
+ .gen-slider-arrows1 .direction-nav a.disabled:hover,
6531
+ .gen-slider-arrows2 .direction-nav a, /* Slideshow */
6532
+ .gen-slider-arrows2 .direction-nav a.disabled:hover,
6533
+ .gen-slider-arrows3 .direction-nav a, /* Cloud Zoom */
6534
+ .gen-slider-arrows3 .direction-nav a.disabled:hover,
6535
+
6536
+ /* Slider pagination */
6537
+ .slider-pagination1 .owl-controls .owl-page span,
6538
+ .slider-pagination2 .owl-controls .owl-page span,
6539
+
6540
+ /* Lightbox */
6541
+ #cboxPrevious,
6542
+ #cboxNext,
6543
+ #cboxClose,
6544
+
6545
+ /* Accordion and collapsible: opener */
6546
+ .accordion-style1 .opener,
6547
+ .collapsible .opener,
6548
+
6549
+ /* Scroll to top */
6550
+ #scroll-to-top
6551
+ {
6552
+ background-color: #f5f5f5;
6553
+ }
6554
+
6555
+
6556
+ /* Hover icon */
6557
+ /* Toolbar */
6558
+ .sorter .view-mode a:hover,
6559
+ .sorter .sort-by .category-asc:hover,
6560
+ .sorter .sort-by .category-desc:hover,
6561
+ .pager .pages li a:hover,
6562
+
6563
+ /* Back link */
6564
+ .buttons-set .back-link:hover small,
6565
+
6566
+ /* Add-to links */
6567
+
6568
+ /* Simple icons (product grid) */
6569
+ .add-to-links.addto-icons a:hover, /*Deprecated*/
6570
+
6571
+ /* Other with standard icons */
6572
+ .add-to-links span.icon-hover:hover,
6573
+ .add-to-links .feature-icon-hover:hover span.icon,
6574
+
6575
+ /* Slider arrows */
6576
+ .slider-arrows1 .owl-controls.clickable .owl-buttons div:hover,
6577
+ .slider-arrows2 .owl-controls.clickable .owl-buttons div:hover,
6578
+ .slider-arrows3 .owl-controls.clickable .owl-buttons div:hover,
6579
+
6580
+ /* deprecated */
6581
+ .gen-slider-arrows1 .direction-nav a:hover,
6582
+ .gen-slider-arrows2 .direction-nav a:hover,
6583
+ .gen-slider-arrows3 .direction-nav a:hover,
6584
+
6585
+ /* Slider pagination */
6586
+ .slider-pagination1 .owl-controls.clickable .owl-page:hover span,
6587
+ .slider-pagination2 .owl-controls.clickable .owl-page:hover span,
6588
+
6589
+
6590
+ /* Lightbox */
6591
+ #cboxPrevious:hover,
6592
+ #cboxNext:hover,
6593
+ #cboxClose:hover,
6594
+
6595
+ /* Accordion and collapsible: opener */
6596
+ .accordion-style1 .opener:hover,
6597
+ .collapsible .opener:hover,
6598
+
6599
+ /* Scroll to top */
6600
+ #scroll-to-top:hover
6601
+ {
6602
+ background-color: #000000;
6603
+ }
6604
+
6605
+
6606
+ /* Active icon */
6607
+ /* Slider pagination */
6608
+ .slider-pagination1 .owl-controls .owl-page.active span,
6609
+ .slider-pagination1 .owl-controls.clickable .owl-page.active:hover span, /* Active state overrides hover state */
6610
+ .slider-pagination2 .owl-controls .owl-page.active span,
6611
+ .slider-pagination2 .owl-controls.clickable .owl-page.active:hover span, /* Active state overrides hover state */
6612
+
6613
+ .sorter .view-mode span.grid,
6614
+ .sorter .view-mode span.list,
6615
+ .pager .pages li.current
6616
+ {
6617
+ background-color: #e5e5e5;
6618
+ }
6619
+
6620
+
6621
+ span.icon
6622
+ {
6623
+ background-color: #de2666;
6624
+ }
6625
+ span.icon-hover:hover,
6626
+ .feature-icon-hover:hover span.icon
6627
+ {
6628
+ background-color: #5bd2ec;
6629
+ }
6630
+
6631
+
6632
+
6633
+ .links > li > a:hover {
6634
+ background-color: #de2666;
6635
+ color: #ffffff !important;
6636
+ }
6637
+
6638
+
6639
+ .sticker.new {
6640
+ background-color: #3ec2df;
6641
+ color: #ffffff;
6642
+ }
6643
+ .sticker.sale {
6644
+ background-color: #f12b63;
6645
+ color: #ffffff;
6646
+ }
6647
+
6648
+
6649
+
6650
+ /*.price-box .price*/
6651
+ .price-box .regular-price .price,
6652
+ .price-box .minimal-price .price { color: #00a9c7; }
6653
+
6654
+
6655
+ .additional-bg-color,
6656
+ .block-layered-nav .currently,
6657
+ .cart .totals
6658
+ {
6659
+ background-color: #f5f5f5;
6660
+ }
6661
+
6662
+
6663
+
6664
+ /* Custom content class */
6665
+ .main-font,
6666
+
6667
+ /* Headings */
6668
+ h1, h2, h3, h4, h5,
6669
+ .section-title,
6670
+ .products-list .product-name,
6671
+ .products-grid .product-name,
6672
+ h3.product-name, /*TODO:remove*/
6673
+
6674
+ /* Generic */
6675
+ .feature .heading,
6676
+ .accordion .heading,
6677
+
6678
+ /* Main menu */
6679
+ #mobnav-trigger,
6680
+ #nav > li > a,
6681
+ #nav.wide ul.level0 > li > a,
6682
+ .vertnav-top li a,
6683
+
6684
+ /* Block headings */
6685
+ .block .block-title,
6686
+
6687
+ /* Checkout headings */
6688
+ #opc-login h3,
6689
+
6690
+ /* Multiple checkout */
6691
+ /*.fieldset .legend,
6692
+ .multiple-checkout .col2-set h2.legend,
6693
+ .info-set h2.legend,*/
6694
+
6695
+ /* Account */
6696
+ .box-account .box-head h2,
6697
+ .order-items h2.table-caption,
6698
+ .order-items h2.sub-title,
6699
+ .order-items .order-comments h2,
6700
+
6701
+ /* Product page */
6702
+ .product-view .box-reviews dt .heading,
6703
+ .gen-tabs .tabs a,
6704
+
6705
+ /* Footer headings */
6706
+ .footer .heading,
6707
+ #subscribe-form label,
6708
+
6709
+ /* Captions */
6710
+ .caption .heading
6711
+ {
6712
+ font-family: "Bitter", georgia, serif;
6713
+
6714
+
6715
+ }
6716
+
6717
+
6718
+
6719
+
6720
+
6721
+
6722
+
6723
+ .wrapper
6724
+ {
6725
+ border-top-color: #333333;
6726
+
6727
+ background-color: #ffffff;
6728
+
6729
+ }
6730
+
6731
+
6732
+
6733
+ .header-container
6734
+ {
6735
+
6736
+ }
6737
+ .header
6738
+ {
6739
+
6740
+ }
6741
+ .header a {
6742
+ }
6743
+ .header a:hover {
6744
+ }
6745
+
6746
+ .header-container3
6747
+ {
6748
+
6749
+ }
6750
+
6751
+ .header .caret {
6752
+ border-top-color: #333333;
6753
+ }
6754
+
6755
+
6756
+ .form-search .input-text
6757
+ {
6758
+ background-color: #ffffff;
6759
+ border-color: #dddddd;
6760
+ color: #bbbbbb;
6761
+ }
6762
+ .form-search .input-text:hover,
6763
+ .form-search .input-text:focus
6764
+ {
6765
+ background-color: #ffffff;
6766
+ border-color: #333333;
6767
+ color: #333333;
6768
+ }
6769
+
6770
+
6771
+
6772
+ .header .dropdown-menu,
6773
+ .header .open > .dropdown-toggle.cover > div,
6774
+ .header .truncated .truncated_full_value .item-options,
6775
+ .header .form-search .search-autocomplete
6776
+ {
6777
+ background-color: #ffffff;
6778
+
6779
+ color: #333333;
6780
+ }
6781
+
6782
+ .header .dropdown-menu a,
6783
+ .header .open > .dropdown-toggle.cover > div a,
6784
+ .header .form-search .search-autocomplete li
6785
+ {
6786
+ color: #333333;
6787
+ }
6788
+ .header .dropdown-menu a:hover,
6789
+ .header .open > .dropdown-toggle.cover > div a:hover,
6790
+ .header .form-search .search-autocomplete li:hover
6791
+ {
6792
+ color: #aaaaaa;
6793
+ }
6794
+
6795
+ .header .open > .dropdown-toggle.cover > div .caret {
6796
+ border-top-color: #333333;
6797
+ }
6798
+
6799
+
6800
+
6801
+
6802
+ .header-top-container
6803
+ {
6804
+
6805
+
6806
+ }
6807
+
6808
+ .header-top
6809
+ {
6810
+
6811
+
6812
+ }
6813
+ .header-top a
6814
+ {
6815
+ }
6816
+ .header-top a:hover
6817
+ {
6818
+ }
6819
+
6820
+
6821
+
6822
+
6823
+ .header-primary-container
6824
+ {
6825
+
6826
+ }
6827
+ .header-primary
6828
+ {
6829
+ padding-top: 10px;
6830
+ padding-bottom: 10px;
6831
+ }
6832
+
6833
+
6834
+
6835
+
6836
+
6837
+
6838
+
6839
+ #nav .level0-wrapper,
6840
+ #nav.classic ul
6841
+ {
6842
+ background-color: #ffffff;
6843
+
6844
+ color: #333333;
6845
+ }
6846
+
6847
+ #nav ul li a
6848
+ {
6849
+ color: #333333;
6850
+ }
6851
+ #nav ul li a:hover
6852
+ {
6853
+ color: #00a9c7;
6854
+ }
6855
+
6856
+
6857
+
6858
+ .cat-label-label1 {
6859
+ background-color: #5bd2ec;
6860
+ color: #ffffff;
6861
+ }
6862
+ .cat-label-label2 {
6863
+ background-color: #d52462;
6864
+ color: #ffffff;
6865
+ }
6866
+
6867
+ li.level0 > a > span > .cat-label-label1.pin-bottom:before {
6868
+ border-top-color: #5bd2ec;
6869
+ }
6870
+ li.level0 > a > span > .cat-label-label2.pin-bottom:before {
6871
+ border-top-color: #d52462;
6872
+ }
6873
+
6874
+ li > a:hover > span > .cat-label,
6875
+ #nav li.level0:hover > a > span > .cat-label /* Top-level category label is highlighted on item hover, not on link hover */
6876
+ {
6877
+ background-color: #ff7214;
6878
+ }
6879
+ li.level0 > a:hover > span > .pin-bottom:before,
6880
+ #nav li.level0:hover > a > span > .pin-bottom:before
6881
+ {
6882
+ border-top-color: #ff7214;
6883
+ }
6884
+
6885
+
6886
+
6887
+ #mobnav
6888
+ {
6889
+ color: #333333;
6890
+ }
6891
+ #mobnav-trigger
6892
+ {
6893
+ background-color: #f8f8f8;
6894
+ color: #333333;
6895
+ }
6896
+
6897
+ #mobnav-trigger:hover
6898
+ {
6899
+ background-color: #5bd2ec;
6900
+ color: #ffffff;
6901
+ }
6902
+
6903
+ #mobnav-trigger.active
6904
+ {
6905
+ background-color: #5bd2ec;
6906
+ color: #ffffff;
6907
+ }
6908
+
6909
+ #mobnav-trigger .trigger-icon .line {
6910
+ background-color: #333333;
6911
+ }
6912
+ #mobnav-trigger:hover .trigger-icon .line {
6913
+ background-color: #ffffff;
6914
+ }
6915
+ #mobnav-trigger.active .trigger-icon .line {
6916
+ background-color: #ffffff;
6917
+ }
6918
+
6919
+
6920
+
6921
+ .nav-container
6922
+ {
6923
+
6924
+
6925
+ }
6926
+
6927
+
6928
+ #nav,
6929
+ .vertnav-top li a
6930
+ {
6931
+ background-color: #f8f8f8;
6932
+ color: #333333;
6933
+ }
6934
+ #nav > li > a
6935
+ {
6936
+ color: #333333;
6937
+ }
6938
+
6939
+ #nav > li:hover > a,
6940
+ .vertnav-top li > a:hover
6941
+ {
6942
+ background-color: #5bd2ec;
6943
+ color: #ffffff;
6944
+ }
6945
+
6946
+ .cms-index-index #nav #nav-home > a,
6947
+ #nav > li.active > a,
6948
+ .vertnav-top li.current > a
6949
+ {
6950
+ background-color: #333333;
6951
+ color: #ffffff;
6952
+ }
6953
+
6954
+
6955
+
6956
+ #nav > li > a,
6957
+ #mobnav-trigger
6958
+ {
6959
+ font-size:16px;
6960
+ text-transform:uppercase;
6961
+ }
6962
+
6963
+ #nav.wide ul.level0 > li > a
6964
+ {
6965
+ font-size:16px;
6966
+ text-transform:uppercase;
6967
+ }
6968
+
6969
+
6970
+
6971
+ .vertnav-top > li > a
6972
+ {
6973
+ font-size:16px;
6974
+ text-transform:uppercase;
6975
+ }
6976
+
6977
+ .vertnav-top ul.level0 > li > a
6978
+ {
6979
+ font-size:16px;
6980
+ text-transform:uppercase;
6981
+ }
6982
+
6983
+
6984
+
6985
+
6986
+ .vertnav-top > li.first > a { margin-top:1px; }
6987
+ .vertnav-top li a { margin-bottom:1px; }
6988
+ .vertnav-top { background-color: #eeeeee; }
6989
+
6990
+
6991
+
6992
+
6993
+ .vertnav-top li .opener {
6994
+ background: url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener.png) center center no-repeat;
6995
+ }
6996
+ .vertnav-top li:hover > .opener {
6997
+ background-image: url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-w.png);
6998
+ }
6999
+ .vertnav-top li:hover > .opener:hover {
7000
+ background-image: url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener.png);
7001
+ }
7002
+
7003
+ .vertnav-top li.active > .opener {
7004
+ background-image: url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-active.png);
7005
+ }
7006
+ .vertnav-top li.active:hover > a:hover + .opener {
7007
+ background-image: url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-active-w.png);
7008
+ }
7009
+ .vertnav-top li.active:hover > a + .opener:hover {
7010
+ background-image: url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-active.png);
7011
+ }
7012
+
7013
+ .vertnav-top li.current > .opener,
7014
+ .vertnav-top li.current > .opener:hover {
7015
+ background-image: url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-w.png);
7016
+ }
7017
+ .vertnav-top li.active.current > a + .opener,
7018
+ .vertnav-top li.active.current:hover > a + .opener {
7019
+ background-image: url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-active-w.png);
7020
+ }
7021
+ .vertnav-top li.active.current > a + .opener:hover {
7022
+ background-image: url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/infortis/ultra-megamenu/opener-active-w.png);
7023
+ }
7024
+
7025
+ #nav > li.parent > a .caret {
7026
+ border-top-color: #333333;
7027
+ }
7028
+ #nav > li.parent:hover > a .caret {
7029
+ border-top-color: #ffffff;
7030
+ }
7031
+ #nav > li.parent.active > a .caret {
7032
+ border-top-color: #ffffff;
7033
+ }
7034
+
7035
+
7036
+
7037
+ #nav,
7038
+ .vertnav-top
7039
+ {
7040
+ border-bottom:5px solid #333333;
7041
+ }
7042
+
7043
+ #nav > li { border-bottom:5px solid transparent; margin-bottom:-5px; }
7044
+ #nav.classic ul.level0,
7045
+ #nav .level0-wrapper { top:54px; }
7046
+
7047
+
7048
+
7049
+ .main-container
7050
+ {
7051
+
7052
+
7053
+ }
7054
+ .main
7055
+ {
7056
+ }
7057
+
7058
+ .truncated .item-options
7059
+ {
7060
+ background-color: #ffffff;
7061
+ }
7062
+
7063
+
7064
+
7065
+
7066
+
7067
+ .category-products-grid .item,
7068
+ .products-list .item
7069
+ {
7070
+ }
7071
+ .category-products-grid .item:hover,
7072
+ .products-list .item:hover
7073
+ {
7074
+ }
7075
+
7076
+
7077
+
7078
+
7079
+ span.icon.icon-color-productview
7080
+ {
7081
+ background-color: #eeeeee;
7082
+ }
7083
+ .feature-icon-hover:hover span.icon.icon-color-productview
7084
+ {
7085
+ background-color: #5bd2ec;
7086
+ }
7087
+
7088
+
7089
+
7090
+ .gen-tabs .tabs
7091
+ {
7092
+ }
7093
+
7094
+ .gen-tabs .tabs a
7095
+ {
7096
+ background-color: #eeeeee;
7097
+ color: #333333;
7098
+ }
7099
+
7100
+ .gen-tabs .tabs a:hover,
7101
+ .gen-tabs .tabs a:focus
7102
+ {
7103
+ background-color: #e5e5e5;
7104
+ color: #333333;
7105
+ }
7106
+
7107
+ .gen-tabs .tabs a.current
7108
+ {
7109
+ background-color: #ffffff;
7110
+ color: #00a9c7;
7111
+ }
7112
+
7113
+ .gen-tabs .acctab
7114
+ {
7115
+ background-color: #f5f5f5;
7116
+ color: #333333;
7117
+ }
7118
+
7119
+ .gen-tabs .acctab:hover,
7120
+ .gen-tabs .acctab:focus,
7121
+ .gen-tabs .acctab.current {
7122
+ background-color: #eeeeee;
7123
+ color: #00a9c7;
7124
+ }
7125
+
7126
+ .gen-tabs .tabs-panels
7127
+ {
7128
+ background-color: #ffffff;
7129
+ }
7130
+
7131
+
7132
+
7133
+
7134
+
7135
+ /* Slider arrows */
7136
+ .the-slideshow .owl-controls .owl-buttons div,
7137
+
7138
+ /* Slider pagination */
7139
+ .the-slideshow.slider-pagination1 .owl-controls .owl-page span,
7140
+
7141
+ /* For pagination2 default color overrides color of active state and hover state */
7142
+ .the-slideshow.slider-pagination2 .owl-controls .owl-page span,
7143
+ .the-slideshow.slider-pagination2 .owl-controls .owl-page.active span,
7144
+ .the-slideshow.slider-pagination2 .owl-controls.clickable .owl-page.active:hover span
7145
+ {
7146
+ background-color: #ffffff;
7147
+ }
7148
+
7149
+
7150
+ /* Slider arrows */
7151
+ .the-slideshow .owl-controls.clickable .owl-buttons div:hover,
7152
+
7153
+ /* Slider pagination */
7154
+ .the-slideshow.slider-pagination1 .owl-controls.clickable .owl-page:hover span,
7155
+ .the-slideshow.slider-pagination2 .owl-controls.clickable .owl-page:hover span
7156
+ {
7157
+ background-color: #000000;
7158
+ }
7159
+
7160
+
7161
+ .the-slideshow.slider-pagination1 .owl-controls .owl-page.active span,
7162
+ .the-slideshow.slider-pagination1 .owl-controls.clickable .owl-page.active:hover span /* Active state overrides hover state */
7163
+ {
7164
+ background-color: #ff391c;
7165
+ }
7166
+
7167
+
7168
+
7169
+
7170
+ .footer-container
7171
+ {
7172
+ background-color: #f5f5f5;
7173
+ }
7174
+ .footer
7175
+ {
7176
+
7177
+ }
7178
+
7179
+ .footer a
7180
+ {
7181
+ }
7182
+ .footer a:hover
7183
+ {
7184
+ }
7185
+
7186
+
7187
+ .footer button.button span
7188
+ {
7189
+ background-color: #e5e5e5;
7190
+ color: #555555;
7191
+ }
7192
+ .footer button.button:hover span
7193
+ {
7194
+ background-color: #a5db00;
7195
+ color: #ffffff;
7196
+ }
7197
+
7198
+
7199
+ .footer span.icon
7200
+ {
7201
+ background-color: #de2666;
7202
+ }
7203
+ .footer span.icon-hover:hover,
7204
+ .footer .feature-icon-hover:hover span.icon
7205
+ {
7206
+ background-color: #444444;
7207
+ }
7208
+
7209
+
7210
+
7211
+ /* Back link */
7212
+ .footer .buttons-set .back-link small,
7213
+
7214
+ /* Slider arrows */
7215
+ .footer .slider-arrows1 .owl-controls .owl-buttons div,
7216
+ .footer .slider-arrows1 .owl-controls.clickable .owl-buttons div.disabled:hover,
7217
+ .footer .slider-arrows2 .owl-controls .owl-buttons div,
7218
+ .footer .slider-arrows3 .owl-controls .owl-buttons div,
7219
+ .footer .slider-arrows3 .owl-controls.clickable .owl-buttons div.disabled:hover,
7220
+
7221
+ /* deprecated */
7222
+ .footer .gen-slider-arrows1 .direction-nav a, /* Sliders */
7223
+ .footer .gen-slider-arrows1 .direction-nav a.disabled:hover,
7224
+ .footer .gen-slider-arrows2 .direction-nav a, /* Slideshow */
7225
+ .footer .gen-slider-arrows2 .direction-nav a.disabled:hover,
7226
+ .footer .gen-slider-arrows3 .direction-nav a, /* Cloud Zoom */
7227
+ .footer .gen-slider-arrows3 .direction-nav a.disabled:hover,
7228
+
7229
+ /* Slider pagination */
7230
+ .footer .slider-pagination1 .owl-controls .owl-page span,
7231
+ .footer .slider-pagination2 .owl-controls .owl-page span,
7232
+
7233
+ /* Accordion and collapsible: opener */
7234
+ .footer .accordion-style1 .opener,
7235
+ .footer .collapsible .opener
7236
+ {
7237
+ background-color: #f5f5f5;
7238
+ }
7239
+
7240
+ /* Back link */
7241
+ .footer .buttons-set .back-link:hover small,
7242
+
7243
+ /* Slider arrows */
7244
+ .footer .slider-arrows1 .owl-controls.clickable .owl-buttons div:hover,
7245
+ .footer .slider-arrows2 .owl-controls.clickable .owl-buttons div:hover,
7246
+ .footer .slider-arrows3 .owl-controls.clickable .owl-buttons div:hover,
7247
+
7248
+ /* deprecated */
7249
+ .footer .gen-slider-arrows1 .direction-nav a:hover,
7250
+ .footer .gen-slider-arrows2 .direction-nav a:hover,
7251
+ .footer .gen-slider-arrows3 .direction-nav a:hover,
7252
+
7253
+ /* Slider pagination */
7254
+ .footer .slider-pagination1 .owl-controls.clickable .owl-page:hover span,
7255
+ .footer .slider-pagination2 .owl-controls.clickable .owl-page:hover span,
7256
+
7257
+ /* Accordion and collapsible: opener */
7258
+ .footer .accordion-style1 .opener:hover,
7259
+ .footer .collapsible .opener:hover
7260
+ {
7261
+ background-color: #5bd2ec;
7262
+ }
7263
+
7264
+
7265
+ .footer-top-container
7266
+ {
7267
+ background-color: #ffffff;
7268
+
7269
+
7270
+ }
7271
+ .footer-top
7272
+ {
7273
+
7274
+ }
7275
+ .footer-top a
7276
+ {
7277
+ }
7278
+ .footer-top a:hover
7279
+ {
7280
+ }
7281
+
7282
+
7283
+ .footer-primary-container
7284
+ {
7285
+ background-color: transparent;
7286
+
7287
+ padding-top: 30px;
7288
+
7289
+ padding-bottom: 10px;
7290
+ }
7291
+ .footer-primary
7292
+ {
7293
+ background-color: #ffffff;
7294
+
7295
+ }
7296
+ .footer-primary a
7297
+ {
7298
+ }
7299
+ .footer-primary a:hover
7300
+ {
7301
+ }
7302
+
7303
+
7304
+ .footer-secondary-container
7305
+ {
7306
+
7307
+
7308
+ }
7309
+ .footer-secondary
7310
+ {
7311
+
7312
+ }
7313
+ .footer-secondary a
7314
+ {
7315
+ }
7316
+ .footer-secondary a:hover
7317
+ {
7318
+ }
7319
+
7320
+
7321
+ .footer-bottom-container
7322
+ {
7323
+ background-color: rgba(0, 0, 0, 0.05);
7324
+ }
7325
+ .footer-bottom
7326
+ {
7327
+ background-color: transparent;
7328
+
7329
+ color: #888888;
7330
+ }
7331
+ .footer-bottom a
7332
+ {
7333
+ color: #555555;
7334
+ }
7335
+ .footer-bottom a:hover
7336
+ {
7337
+ color: #de2666;
7338
+ }
7339
+
7340
+
7341
+
7342
+
7343
+ .social-links span.icon {
7344
+ background-color: #bbbbbb;
7345
+ }
7346
+ .social-links span.icon-hover:hover {
7347
+ background-color: #ff7214;
7348
+ }
7349
+
7350
+ /**
7351
+ * Override CSS components
7352
+ */
7353
+
7354
+
7355
+
7356
+ /* Itemslider %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7357
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7358
+
7359
+ /* Buttons aligned at the bottom */
7360
+ .itemslider.equal-height .item { position: static; padding-bottom: 50px; }
7361
+ .itemslider.equal-height .actions { position: absolute; bottom: 0; }
7362
+
7363
+ /**
7364
+ * Override modules
7365
+ */
7366
+
7367
+
7368
+
7369
+ /* Megamenu %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7370
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7371
+
7372
+ /* Home link
7373
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7374
+ */
7375
+ #nav #nav-home a.level-top .icon,
7376
+ #nav #homelink-icon a.level-top .icon {
7377
+ margin-top: -2px;
7378
+ }
7379
+ /**
7380
+ * Theme-specific styles
7381
+ */
7382
+
7383
+
7384
+
7385
+ /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7386
+ Override/extend styles.css %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7387
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7388
+
7389
+ /* Layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7390
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7391
+
7392
+ .wrapper { border-top-style:solid; border-top-width:5px; }
7393
+ .main { padding:30px 0 40px; }
7394
+
7395
+ /* Additional margin for main sidebars
7396
+ -------------------------------------------------------------- */
7397
+ .col-left > * { margin-right: 15px; }
7398
+ .col-right > * { margin-left: 15px; }
7399
+
7400
+
7401
+
7402
+ /* Global Styles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7403
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7404
+
7405
+ /* Form
7406
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7407
+ */
7408
+ /* Fieldset
7409
+ -------------------------------------------------------------- */
7410
+ /* Common styles for fieldsets and blocks in Multiple Addresses Checkout and Generic Info Set */
7411
+ .fieldset,
7412
+ .multiple-checkout .col2-set,
7413
+ .multiple-checkout .col3-set,
7414
+ .info-set {
7415
+ margin:0 0 10px;
7416
+ padding:0 15px 15px;
7417
+ }
7418
+ .fieldset .legend,
7419
+ .multiple-checkout .col2-set h2.legend,
7420
+ .info-set h2.legend {
7421
+ margin:0 -15px 10px -15px;
7422
+ padding-left:15px; padding-right:15px;
7423
+ }
7424
+
7425
+ /* Buttons set
7426
+ -------------------------------------------------------------- */
7427
+ .buttons-set { margin:10px 15px; }
7428
+ /* Note: buttons and "required" have equal right margin */
7429
+ .buttons-set button.button { margin-left:0; margin-right:5px; margin-bottom:5px; }
7430
+ .buttons-set p.required { margin:0 5px 5px 0; }
7431
+
7432
+
7433
+
7434
+ /* Page Heading
7435
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7436
+ */
7437
+ .page-title h1,
7438
+ .page-title h2 { margin:0; min-height:1.3125em; /* 42px. Has to ba aligned with ".block .block-title" */ }
7439
+ .category-title { margin-bottom:0; }
7440
+
7441
+
7442
+ /* Global Messages
7443
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7444
+ */
7445
+ .note-msg.empty-catalog {
7446
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/empty-catalog.png) 10px 10px no-repeat transparent !important;
7447
+ color:inherit;
7448
+ min-height:70px;
7449
+ padding:40px 20px 40px 160px !important;
7450
+ }
7451
+
7452
+
7453
+ /* BreadCrumbs
7454
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7455
+ */
7456
+ .breadcrumbs { line-height:1.5em; /*18px*/ margin:0 0 5px; }
7457
+ /* Breadcrumbs on product page */
7458
+ .catalog-product-view .breadcrumbs { margin-bottom:10px; }
7459
+
7460
+
7461
+
7462
+ /* Header %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7463
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7464
+
7465
+ /* Line breaker */
7466
+ .user-menu .line-break-after { clear:both; margin-bottom: 1px; }
7467
+
7468
+ /* Quick search: skins
7469
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7470
+ */
7471
+ /* Search: inline
7472
+ -------------------------------------------------------------- */
7473
+ .search-wrapper-inline .form-search .input-text { min-width: 180px; }
7474
+
7475
+
7476
+ /* Quick search: positions
7477
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7478
+ */
7479
+ /* Position 0 */
7480
+ .search-wrapper-p0 { float: right; }
7481
+ .search-wrapper-p0 .form-search .input-text { min-width: 220px; }
7482
+
7483
+ /* Position 1 - right side of top links */
7484
+ .search-wrapper-p1 { float: right; }
7485
+ .search-wrapper-p1 .form-search .input-text { min-width: 220px; }
7486
+
7487
+ /* Position 2 - right side of top links */
7488
+ .search-wrapper-p2 { float: right; }
7489
+ .search-wrapper-p2 .form-search .input-text { min-width: 220px; }
7490
+
7491
+ /* Position 3 - right side of top links */
7492
+ .search-wrapper-p3 { float: right; }
7493
+ .search-wrapper-p3 .form-search .input-text { min-width: 220px; }
7494
+
7495
+ /* Position 4 - right side of top links */
7496
+ .search-wrapper-p4 { float: right; }
7497
+ .search-wrapper-p4 .form-search .input-text { min-width: 220px; }
7498
+
7499
+ /* Position 5 - right side of top links */
7500
+ .search-wrapper-p5 { float: right; }
7501
+ .search-wrapper-p5 .form-search .input-text { min-width: 220px; }
7502
+
7503
+
7504
+ /* Mini-cart
7505
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7506
+ */
7507
+ /*#mini-cart { margin-bottom:-8px; }*/
7508
+
7509
+
7510
+
7511
+ /* Sidebar %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7512
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7513
+
7514
+ /* Block lists
7515
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7516
+ */
7517
+ .block-viewed .block-content ol,
7518
+ .block-compare .block-content ol,
7519
+ .block-compared .block-content ol {
7520
+ padding-left: 0;
7521
+ list-style: none;
7522
+ }
7523
+ .block-viewed .block-content li.item,
7524
+ .block-compare .block-content li.item,
7525
+ .block-compared .block-content li.item {
7526
+ background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/bullet.png) no-repeat 0 10px;
7527
+ padding-left:10px;
7528
+ }
7529
+
7530
+
7531
+ /* Block: Related
7532
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7533
+ */
7534
+ /* Align block title with the tabs on product page */
7535
+ .block-related .section-title { padding-top: 19px; }
7536
+ .block-related-thumbnails .owl-wrapper { margin-top:15px; }
7537
+
7538
+
7539
+ /* Block: Account
7540
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7541
+ */
7542
+ .block-account .block-title { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/ic-account.png) 5px 2px no-repeat; padding-left:42px !important; }
7543
+ .block-account .block-content { padding:10px 0 0; }
7544
+ .block-account li > * { padding: 2px; }
7545
+ .block-account li.current strong { font-weight:bold; }
7546
+
7547
+
7548
+
7549
+ /* Category view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7550
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7551
+ .products-grid .item { -webkit-tap-highlight-color: transparent; }
7552
+
7553
+
7554
+
7555
+ /* Product view elements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7556
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7557
+
7558
+ /* Availability
7559
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7560
+ */
7561
+ .availability { float:right; margin:15px 0; }
7562
+
7563
+
7564
+
7565
+ /* Product page %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7566
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7567
+
7568
+ /* Prices
7569
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7570
+ */
7571
+ /* Bundle product */
7572
+ .price-box-bundle {
7573
+ border-bottom:1px solid #e5e5e5;
7574
+ margin:-10px 0 15px; /* Move up to align with the main price box */
7575
+ padding-bottom:15px;
7576
+ }
7577
+
7578
+
7579
+ /* Main containers
7580
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7581
+ */
7582
+ /* Margin before price box */
7583
+ .product-view .space-before-avail { margin:0 0 15px; height:0; line-height:0; }
7584
+
7585
+ /* Upper part of the container */
7586
+ .product-view .product-type-data > .price-box {
7587
+ border-top-style:solid;
7588
+ border-top-width:1px;
7589
+ margin:15px 0 0;
7590
+ padding:10px 0;
7591
+ }
7592
+
7593
+ /* Other
7594
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7595
+ */
7596
+ /* Add to cart button */
7597
+ .product-view .btn-cart span span { padding:5px 40px; }
7598
+
7599
+ /* Reviews */
7600
+ .product-view .box-reviews .buttons-set { margin-left:0; margin-right:0; }
7601
+
7602
+
7603
+ /* New elements
7604
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7605
+ */
7606
+ .product-view .sku { margin: 15px 0; }
7607
+ .product-view .sku span { font-weight: bold; }
7608
+
7609
+
7610
+ /* Product type specific data
7611
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7612
+ */
7613
+ .product-view .is-type-grouped .availability { margin-top:0; margin-bottom:0; }
7614
+ .product-view .grouped-items-table input.input-text { height: 26px; padding:4px; /* Decrease default height and padding */ }
7615
+
7616
+
7617
+
7618
+ /* My Account %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7619
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7620
+
7621
+ /*.my-account .pager { margin: -1px 0 20px; }*/
7622
+
7623
+
7624
+
7625
+ /* Footer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7626
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7627
+
7628
+ /* Footer primary
7629
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7630
+ */
7631
+ .footer-primary .section { padding-top: 20px; padding-bottom: 20px; }
7632
+
7633
+
7634
+
7635
+
7636
+
7637
+ /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7638
+ Misc %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7639
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7640
+
7641
+ /* Accordion & Collapsible %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7642
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7643
+
7644
+ /* Accordion - Style 1
7645
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7646
+ */
7647
+ .accordion-style1 li a {
7648
+ border-bottom-color:#eee;
7649
+ border-bottom:1px solid rgba(0,0,0,0.06);
7650
+ }
7651
+ .accordion-style1 li a:hover {
7652
+ background-color:rgba(0,0,0, 0.03);
7653
+ }
7654
+
7655
+ /* Opener
7656
+ -------------------------------------------------------------- */
7657
+ .accordion-style1 .opener {
7658
+ background-color:rgba(0,0,0, 0.03);
7659
+ }
7660
+
7661
+
7662
+
7663
+ /* Other modifications %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7664
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7665
+
7666
+ /* Nav container:
7667
+ with outline (if nav container has background color) or without outline (stretched)
7668
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7669
+ */
7670
+ /* With outline
7671
+ -------------------------------------------------------------- */
7672
+ /* Add top and bottom margin */
7673
+ .nav.has-outline > .grid-full { margin-top: 1%; margin-bottom: 1%; }
7674
+ .nav.has-outline #mobnav { margin-bottom: 0; } /* Trigger has no bottom margin */
7675
+
7676
+ /* Without outline
7677
+ -------------------------------------------------------------- */
7678
+ /* If menu stretched, no top and bottom margin. Important: added "container" class to make the selector more specific */
7679
+ .container.nav.stretched > .grid-full { margin-top: 0; margin-bottom: 0; }
7680
+ /*.nav > .grid-full { float:left; }*/
7681
+
7682
+
7683
+ /* Cart
7684
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7685
+ */
7686
+ /* Collateral boxes - stretch */
7687
+ .cart-left-column .grid-full,
7688
+ .cart-right-column .grid-full { width:100%; }
7689
+
7690
+
7691
+ /* Interface icons
7692
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7693
+ */
7694
+
7695
+ /* Icons with no background
7696
+ -------------------------------------------------------------- */
7697
+ /* Toolbar */
7698
+ .sorter .view-mode a,
7699
+ .sorter .sort-by .category-asc,
7700
+ .sorter .sort-by .category-desc,
7701
+ .pager .pages li a,
7702
+
7703
+ /* Add-to links */
7704
+ .add-to-links.addto-icons a,
7705
+
7706
+ /* Slider arrows (for zoom thumbnails) */
7707
+ .slider-arrows3 .owl-controls .owl-buttons div,
7708
+ .slider-arrows3 .owl-controls.clickable .owl-buttons div.disabled:hover,
7709
+
7710
+ /* Deprecated */
7711
+ .gen-slider-arrows3 .direction-nav a,
7712
+ .gen-slider-arrows3 .direction-nav a.disabled:hover
7713
+ {
7714
+ background-color:transparent;
7715
+ }
7716
+
7717
+ /* Other icons
7718
+ -------------------------------------------------------------- */
7719
+ /* Add-to links icons in product grid */
7720
+ .products-grid .addto-links-icons span.icon { border-radius: 0; }
7721
+
7722
+ /* Pager */
7723
+ .pager .pages li a { background-color:#f5f5f5; }
7724
+
7725
+ /* Add-to links */
7726
+ .addto-links-icons span.icon,
7727
+ .add-to-links.addto-icons a, /* Obsolete */
7728
+
7729
+ /* Slideshow directional arrows */
7730
+ .gen-slider-arrows2 .direction-nav a,
7731
+ .gen-slider-arrows2 .direction-nav a.disabled:hover { background-color:#fff; }
7732
+
7733
+
7734
+
7735
+
7736
+
7737
+ /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7738
+ Built-in static blocks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7739
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7740
+
7741
+ /* Deprecated: Header top - help block */
7742
+ .header-top .phone { background:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/ic-phone.png) 0 center no-repeat; padding:0 0 0 24px; }
7743
+
7744
+ .block_category_above_collection { margin:10px 0; }
7745
+ .block_category_below_collection { margin:10px 0; }
7746
+ .block_category_above_empty_collection { margin:10px 0; }
7747
+
7748
+ /*.block_product_primary_bottom {}
7749
+ .block_product_secondary_bottom {}
7750
+ .block_product_replace_related {}
7751
+ .block_product_replace_upsell {}
7752
+
7753
+ .block_cart_below_totals {}
7754
+ .block_cart_below_table {}*/
7755
+
7756
+ .block_mini_cart_above_products { margin:0 0 10px; }
7757
+
7758
+ .block_opc_below_progress { margin:15px 0; }
7759
+
7760
+ .block_cms_page_top { margin:0 0 15px; }
7761
+
7762
+ /*.block_header_top_left {}
7763
+ .block_header_top_left2 {}
7764
+ .block_header_top_right {}
7765
+ .block_header_top_right2 {}
7766
+
7767
+ .block_footer_primary_bottom_left {}
7768
+ .block_footer_primary_bottom_right {}*/
7769
+ .block_footer_payment { margin-right:10px; margin-bottom:10px; margin-left:20px; }
7770
+
7771
+ /* Sample block content
7772
+ -------------------------------------------------------------- */
7773
+ .sample-block {
7774
+ color:#999;
7775
+ margin-top:10px;
7776
+ padding: 0 !important;
7777
+ transition: color 300ms ease-in-out, background-color 300ms ease-in-out;
7778
+ -moz-transition: color 300ms ease-in-out, background-color 300ms ease-in-out;
7779
+ -webkit-transition: color 300ms ease-in-out, background-color 300ms ease-in-out;
7780
+ -o-transition: color 300ms ease-in-out, background-color 300ms ease-in-out;
7781
+ }
7782
+ .sample-block:hover { color:#333; }
7783
+
7784
+
7785
+
7786
+ /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7787
+ High-resolution-ready (retina-ready) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7788
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
7789
+
7790
+ @media
7791
+ only screen and (-webkit-min-device-pixel-ratio: 1.5),
7792
+ only screen and ( min--moz-device-pixel-ratio: 1.5),
7793
+ only screen and ( -o-min-device-pixel-ratio: 3/2),
7794
+ only screen and ( -ms-min-device-pixel-ratio: 1.5),
7795
+ only screen and ( min-device-pixel-ratio: 1.5)
7796
+ {
7797
+
7798
+ /* Rating */
7799
+ .rating-box,
7800
+ .rating-box .rating { background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/img/rating@2x.png); background-size:14px 43px; }
7801
+
7802
+ /* Theme icons
7803
+ -------------------------------------------------------------- */
7804
+ /* To top */
7805
+ #scroll-to-top,
7806
+
7807
+ /* Search button */
7808
+ .header .form-search .button span,
7809
+
7810
+ /* All icons from icons-theme.css */
7811
+ /* Row 1: */
7812
+ .icon.i-wishlist,
7813
+ .icon.i-wishlist-w,
7814
+ .icon.i-wishlist-bw,
7815
+ .icon.i-wishlist-wb,
7816
+
7817
+ .icon.i-compare,
7818
+ .icon.i-compare-w,
7819
+ .icon.i-compare-bw,
7820
+ .icon.i-compare-wb,
7821
+
7822
+ .icon.i-recommend,
7823
+ .icon.i-recommend-w,
7824
+ .icon.i-recommend-bw,
7825
+ .icon.i-recommend-wb,
7826
+
7827
+ .icon.i-lowstock,
7828
+ .icon.i-lowstock-w,
7829
+ .icon.i-lowstock-bw,
7830
+ .icon.i-lowstock-wb,
7831
+
7832
+ .icon.i-cart,
7833
+ .icon.i-cart-w,
7834
+ .icon.i-cart-bw,
7835
+ .icon.i-cart-wb,
7836
+
7837
+ /* Row 2: */
7838
+ .icon.i-home,
7839
+ .icon.i-home-w,
7840
+ .icon.i-home-bw,
7841
+ .icon.i-home-wb,
7842
+
7843
+ .icon.i-left,
7844
+ .icon.i-left-w,
7845
+ .icon.i-left-bw,
7846
+ .icon.i-left-wb,
7847
+
7848
+ .icon.i-right,
7849
+ .icon.i-right-w,
7850
+ .icon.i-right-bw,
7851
+ .icon.i-right-wb,
7852
+
7853
+ .icon.i-top,
7854
+ .icon.i-top-w,
7855
+ .icon.i-top-bw,
7856
+ .icon.i-top-wb,
7857
+
7858
+ .icon.i-bottom,
7859
+ .icon.i-bottom-w,
7860
+ .icon.i-bottom-bw,
7861
+ .icon.i-bottom-wb /* Last selector without trailing coma */
7862
+
7863
+ { background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite@2x.png); background-size:500px 200px; }
7864
+
7865
+
7866
+ /* All icons from icons-social.css
7867
+ -------------------------------------------------------------- */
7868
+ /* Row 1: */
7869
+ .icon.i-telephone,
7870
+ .icon.i-telephone-w,
7871
+
7872
+ .icon.i-mobile,
7873
+ .icon.i-mobile-w,
7874
+
7875
+ .icon.i-skype,
7876
+ .icon.i-skype-w,
7877
+
7878
+ .icon.i-letter,
7879
+ .icon.i-letter-w,
7880
+
7881
+ .icon.i-location,
7882
+ .icon.i-location-w,
7883
+
7884
+ /* Row 2: */
7885
+ .icon.i-twitter,
7886
+ .icon.i-twitter-w,
7887
+
7888
+ .icon.i-facebook,
7889
+ .icon.i-facebook-w,
7890
+
7891
+ .icon.i-googleplus,
7892
+ .icon.i-googleplus-w,
7893
+
7894
+ .icon.i-youtube,
7895
+ .icon.i-youtube-w,
7896
+
7897
+ .icon.i-vimeo,
7898
+ .icon.i-vimeo-w,
7899
+
7900
+ .icon.i-wordpress,
7901
+ .icon.i-wordpress-w,
7902
+
7903
+ .icon.i-pinterest,
7904
+ .icon.i-pinterest-w,
7905
+
7906
+ .icon.i-linkedin,
7907
+ .icon.i-linkedin-w,
7908
+
7909
+ .icon.i-blogger,
7910
+ .icon.i-blogger-w,
7911
+
7912
+ .icon.i-envato,
7913
+ .icon.i-envato-w /* Last selector without trailing coma */
7914
+
7915
+ { background-image:url(http://ultimo.infortis-themes.com/demo/skin/frontend/ultimo/default/images/sprite-icons-social@2x.png); background-size:500px 200px; }
7916
+
7917
+ } /* end: media query */
7918
+
7919
+ /*
7920
+ * 12-column grid system
7921
+ */
7922
+
7923
+
7924
+
7925
+ /* Container */
7926
+ .container {
7927
+ margin-left:auto;
7928
+ margin-right:auto;
7929
+ }
7930
+ .nested-container {
7931
+ width:102%;
7932
+ margin-left:-1%;
7933
+ }
7934
+
7935
+ /* Grid units */
7936
+ .grid12-1,
7937
+ .grid12-2,
7938
+ .grid12-3,
7939
+ .grid12-4,
7940
+ .grid12-5,
7941
+ .grid12-6,
7942
+ .grid12-7,
7943
+ .grid12-8,
7944
+ .grid12-9,
7945
+ .grid12-10,
7946
+ .grid12-11,
7947
+ .grid12-12,
7948
+ .grid-full, /* Alias for full-width unit */
7949
+
7950
+ /* Special grid units */
7951
+ .grid-col2-sidebar,
7952
+ .grid-col2-main
7953
+ {
7954
+ /*position:relative;*/
7955
+ display:inline;
7956
+ float:left;
7957
+ margin-left:1%;
7958
+ margin-right:1%;
7959
+ }
7960
+
7961
+ /* Basic grid units width */
7962
+ .grid12-1 { width:6.33%; }
7963
+ .grid12-2 { width:14.66%; }
7964
+ .grid12-3 { width:23%; }
7965
+ .grid12-4 { width:31.33%; }
7966
+ .grid12-5 { width:39.67%; }
7967
+ .grid12-6 { width:48%; }
7968
+ .grid12-7 { width:56.33%; }
7969
+ .grid12-8 { width:64.67%; }
7970
+ .grid12-9 { width:73%; }
7971
+ .grid12-10 { width:81.33%; }
7972
+ .grid12-11 { width:89.67%; }
7973
+ .grid12-12,
7974
+ .grid-full { width:98%; }
7975
+
7976
+ /* Grid units without left gutter (margin) */
7977
+ .no-left-gutter.grid12-1 { margin-left:0; width:7.33%; }
7978
+ .no-left-gutter.grid12-2 { margin-left:0; width:15.66%; }
7979
+ .no-left-gutter.grid12-3 { margin-left:0; width:24%; }
7980
+ .no-left-gutter.grid12-4 { margin-left:0; width:32.33%; }
7981
+ .no-left-gutter.grid12-5 { margin-left:0; width:40.67%; }
7982
+ .no-left-gutter.grid12-6 { margin-left:0; width:49%; }
7983
+ .no-left-gutter.grid12-7 { margin-left:0; width:57.33%; }
7984
+ .no-left-gutter.grid12-8 { margin-left:0; width:65.67%; }
7985
+ .no-left-gutter.grid12-9 { margin-left:0; width:74%; }
7986
+ .no-left-gutter.grid12-10 { margin-left:0; width:82.33%; }
7987
+ .no-left-gutter.grid12-11 { margin-left:0; width:90.67%; }
7988
+ .no-left-gutter.grid12-12,
7989
+ .no-left-gutter.grid-full { margin-left:0; width:99%; }
7990
+
7991
+ /* Grid units without right gutter (margin) */
7992
+ .no-right-gutter.grid12-1 { margin-right:0; width:7.33%; }
7993
+ .no-right-gutter.grid12-2 { margin-right:0; width:15.66%; }
7994
+ .no-right-gutter.grid12-3 { margin-right:0; width:24%; }
7995
+ .no-right-gutter.grid12-4 { margin-right:0; width:32.33%; }
7996
+ .no-right-gutter.grid12-5 { margin-right:0; width:40.67%; }
7997
+ .no-right-gutter.grid12-6 { margin-right:0; width:49%; }
7998
+ .no-right-gutter.grid12-7 { margin-right:0; width:57.33%; }
7999
+ .no-right-gutter.grid12-8 { margin-right:0; width:65.67%; }
8000
+ .no-right-gutter.grid12-9 { margin-right:0; width:74%; }
8001
+ .no-right-gutter.grid12-10 { margin-right:0; width:82.33%; }
8002
+ .no-right-gutter.grid12-11 { margin-right:0; width:90.67%; }
8003
+ .no-right-gutter.grid12-12,
8004
+ .no-right-gutter.grid-full { margin-right:0; width:99%; }
8005
+
8006
+ /* Grid units without any gutter (margin) */
8007
+ .no-gutter.grid12-1 { margin-left:0; margin-right:0; width:8.33%; }
8008
+ .no-gutter.grid12-2 { margin-left:0; margin-right:0; width:16.66%; }
8009
+ .no-gutter.grid12-3 { margin-left:0; margin-right:0; width:25%; }
8010
+ .no-gutter.grid12-4 { margin-left:0; margin-right:0; width:33.33%; }
8011
+ .no-gutter.grid12-5 { margin-left:0; margin-right:0; width:41.67%; }
8012
+ .no-gutter.grid12-6 { margin-left:0; margin-right:0; width:50%; }
8013
+ .no-gutter.grid12-7 { margin-left:0; margin-right:0; width:58.33%; }
8014
+ .no-gutter.grid12-8 { margin-left:0; margin-right:0; width:66.67%; }
8015
+ .no-gutter.grid12-9 { margin-left:0; margin-right:0; width:75%; }
8016
+ .no-gutter.grid12-10 { margin-left:0; margin-right:0; width:83.33%; }
8017
+ .no-gutter.grid12-11 { margin-left:0; margin-right:0; width:91.67%; }
8018
+ .no-gutter.grid12-12,
8019
+ .no-gutter.grid-full { margin-left:0; margin-right:0; width:100%; }
8020
+
8021
+ /* Special grid units: basic structure of pages with 1 and 2 sidebars
8022
+ -------------------------------------------------------------- */
8023
+ /* 2 columns: fixed-width sidebar unit and fluid main unit.
8024
+ Sidebar unit has the same width for all screen sizes equal or greater than 1280px.
8025
+ Width of the main unit is fluid.
8026
+ */
8027
+ .grid-col2-sidebar { width:23%; }
8028
+ .grid-col2-main { width:73%; }
8029
+
8030
+ /* Another 2 columns inside ".grid-col2-main": fixed-width sidebar unit and fluid main unit */
8031
+ .grid-col3-sidebar { width:31.52%; }
8032
+ .grid-col3-main { width:65.90%; }
8033
+
8034
+ /* Vertically aligned grid
8035
+ -------------------------------------------------------------- */
8036
+ .v-grid-container {
8037
+ display:table;
8038
+ width:100%;
8039
+ }
8040
+ .v-grid {
8041
+ float:none;
8042
+ display:table-cell;
8043
+ vertical-align:middle;
8044
+ }
8045
+
8046
+ /* Utility classes
8047
+ -------------------------------------------------------------- */
8048
+ /* Units with no gutter (margin): alpha - first unit in a row, omega - last unit in a row */
8049
+ .alpha { margin-left:0; }
8050
+ .omega { margin-right:0; }
8051
+
8052
+ /* Hide element if screen width is lower than the width specified in the class name */
8053
+ .hide-below-1680 { display:none !important; }
8054
+ .hide-below-1440 { display:none !important; }
8055
+ .hide-below-1360 { display:none !important; }
8056
+ .hide-below-1280 { display:none !important; }
8057
+
8058
+ /* Container: stretched, without side margin
8059
+ -------------------------------------------------------------- */
8060
+ /* Remove padding from stretched container (it is added for narrow screens via media queries) */
8061
+ .container.stretched { width:96%; padding-left:0; padding-right:0; }
8062
+
8063
+ /* Stretch inner grid unit (full width) */
8064
+ .container.stretched > .grid-full { width:100%; margin-left:0; margin-right:0; }
8065
+
8066
+ /* Grid units container: clears floats
8067
+ (place grid units inside "div" with this class)
8068
+ -------------------------------------------------------------- */
8069
+ .grid-container { *zoom: 1; clear: both; }
8070
+ .grid-container:before,
8071
+ .grid-container:after { display: table; line-height: 0; content: ""; }
8072
+ .grid-container:after { clear: both; }
8073
+
8074
+ /* Grid unit container: clears floats and adds vertical margin between units
8075
+ -------------------------------------------------------------- */
8076
+ .grid-container-spaced { *zoom: 1; clear: both; }
8077
+ .grid-container-spaced:before,
8078
+ .grid-container-spaced:after { display: table; line-height: 0; content: ""; }
8079
+ .grid-container-spaced:after { clear: both; }
8080
+ .grid-container-spaced .grid12-1,
8081
+ .grid-container-spaced .grid12-2,
8082
+ .grid-container-spaced .grid12-3,
8083
+ .grid-container-spaced .grid12-4,
8084
+ .grid-container-spaced .grid12-5,
8085
+ .grid-container-spaced .grid12-6,
8086
+ .grid-container-spaced .grid12-7,
8087
+ .grid-container-spaced .grid12-8,
8088
+ .grid-container-spaced .grid12-9,
8089
+ .grid-container-spaced .grid12-10,
8090
+ .grid-container-spaced .grid12-11,
8091
+ .grid-container-spaced .grid12-12,
8092
+ .grid-container-spaced .grid-full
8093
+ {
8094
+ margin-bottom: 2%;
8095
+ }
8096
+
8097
+ /* Grid presentation
8098
+ -------------------------------------------------------------- */
8099
+ .show-grid [class*="grid12-"] {
8100
+ background-color: #eee;
8101
+ text-align: center;
8102
+ min-height: 40px;
8103
+ line-height: 40px;
8104
+ transition: all 300ms ease-in-out;
8105
+ -moz-transition: all 300ms ease-in-out;
8106
+ -webkit-transition: all 300ms ease-in-out;
8107
+ -o-transition: all 300ms ease-in-out;
8108
+ }
8109
+ .show-grid [class*="grid12-"]:hover {
8110
+ background-color: #F08080;
8111
+ }
8112
+
8113
+ /**
8114
+ * WARNING: do not edit this file. It was generated automatically, your changes will be overwritten and lost.
8115
+ * 2014-01-23 15:05:51 */
8116
+
8117
+
8118
+
8119
+
8120
+
8121
+
8122
+ /* Grid container
8123
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8124
+ */
8125
+
8126
+
8127
+
8128
+ .container {
8129
+ width:96%;
8130
+
8131
+ max-width: 960px;
8132
+ }
8133
+
8134
+ .lte-ie8 .container { max-width:1200px; }
8135
+
8136
+
8137
+
8138
+
8139
+
8140
+
8141
+
8142
+
8143
+
8144
+
8145
+
8146
+
8147
+
8148
+
8149
+
8150
+
8151
+
8152
+
8153
+
8154
+
8155
+
8156
+
8157
+
8158
+ /* Desktop - design for a width of 1280px
8159
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8160
+ */
8161
+
8162
+ /* 1280px <= width */
8163
+
8164
+ @media only screen and (min-width: 1280px) {
8165
+
8166
+ .container { max-width: 1200px; }
8167
+
8168
+ /* Special grid units */
8169
+ .grid-col2-sidebar { width: 20.41%; }
8170
+ .grid-col2-main { width: 75.58%; }
8171
+ .grid-col3-sidebar { width:27.01%; }
8172
+ .grid-col3-main { width:70.34%; }
8173
+
8174
+ /* Hide */
8175
+ .hide-below-1280 { display:inherit !important; }
8176
+ }
8177
+
8178
+
8179
+
8180
+
8181
+
8182
+
8183
+ /* Design for a width of less than 1024 px
8184
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8185
+ */
8186
+
8187
+ /* width < 1024px */
8188
+ @media only screen and (max-width: 1023px) {
8189
+
8190
+ /* Hide */
8191
+ .hide-below-1024 { display:none !important; }
8192
+ }
8193
+
8194
+
8195
+
8196
+
8197
+
8198
+ /* Tablet (Portrait) - design for a width of 768px
8199
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8200
+ */
8201
+
8202
+ /* 768px <= width < 960px */
8203
+ @media only screen and (min-width: 768px) and (max-width: 959px) {
8204
+
8205
+ .container { max-width:737px; }
8206
+
8207
+ /* Hide */
8208
+ .hide-below-960 { display:none !important; }
8209
+ }
8210
+
8211
+
8212
+
8213
+
8214
+
8215
+ /* All mobile - design for a width of less than 768px
8216
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8217
+ */
8218
+
8219
+ /* width < 768px */
8220
+ @media only screen and (max-width: 767px) {
8221
+
8222
+ /* Grid units below 768px screen size are 100% wide with no margin. Padding compensates lack of margin. */
8223
+ .container { width:92%; padding-left:2%; padding-right:2%; }
8224
+ .nested-container { width:100%; margin-left:auto; }
8225
+
8226
+ /* Nav container with outline (if nav container has background color).
8227
+ Apply the same vertical margins, as container's side padding. */
8228
+ .nav.has-outline > .grid-full { margin-top: 2%; margin-bottom: 2%; }
8229
+
8230
+ /* Below 768px all grid units are stretched (full width) and stack vertically */
8231
+ .grid12-1,
8232
+ .grid12-2,
8233
+ .grid12-3,
8234
+ .grid12-4,
8235
+ .grid12-5,
8236
+ .grid12-6,
8237
+ .grid12-7,
8238
+ .grid12-8,
8239
+ .grid12-9,
8240
+ .grid12-10,
8241
+ .grid12-11,
8242
+ .grid12-12,
8243
+ .grid-full,
8244
+
8245
+ .grid-col2-sidebar,
8246
+ .grid-col2-main,
8247
+ .grid-col3-sidebar,
8248
+ .grid-col3-main
8249
+ {
8250
+ width:100% !important; /* Added "!important" to override units with "no-gutter" */
8251
+ margin-left:0;
8252
+ margin-right:0;
8253
+ }
8254
+
8255
+ /* Vertically aligned grid
8256
+ -------------------------------------------------------------- */
8257
+ .v-grid-container { display:block; }
8258
+ .v-grid { float:inherit; display:block; width:100%; }
8259
+ }
8260
+
8261
+
8262
+
8263
+
8264
+
8265
+ /* Mobile (Landscape) - design for a width of 480px
8266
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8267
+ */
8268
+
8269
+ /* 480px <= width < 768px */
8270
+ @media only screen and (min-width: 480px) and (max-width: 767px) {
8271
+
8272
+ .container { max-width:440px; }
8273
+
8274
+ /* Hide */
8275
+ .hide-below-960 { display:none !important; }
8276
+ .hide-below-768 { display:none !important; }
8277
+
8278
+ /* Deprecated: persistent grid units (will be removed in the next update)
8279
+ -------------------------------------------------------------- */
8280
+ /* Half */
8281
+ .persistent-grid2-1 { width:48%; margin-left:1%; margin-right:1%; }
8282
+
8283
+ /* One-third + two-thirds */
8284
+ .persistent-grid3-1 { width:31.33%; margin-left:1%; margin-right:1%; }
8285
+ .persistent-grid3-2 { width:64.67%; margin-left:1%; margin-right:1%; }
8286
+
8287
+ /* One-fourth + two-fourths + three-fourths */
8288
+ .persistent-grid4-1 { width:23%; margin-left:1%; margin-right:1%; }
8289
+ .persistent-grid4-2 { width:48%; margin-left:1%; margin-right:1%; }
8290
+ .persistent-grid4-3 { width:73%; margin-left:1%; margin-right:1%; }
8291
+
8292
+ /* Mobile grid (for browser viewport between 480px and 768px):
8293
+ Below 768px all grid units are stretched (full width) and stack vertically.
8294
+ The "mobile-grid" class forces narrow grid units to stay narrow,
8295
+ but the width is increased to avoid too small columns.
8296
+ -------------------------------------------------------------- */
8297
+ .mobile-grid.grid12-1 { width:14.66% !important; margin-left:1%; margin-right:1%; } /* 1/12 turns into 1/6 */
8298
+ .mobile-grid.grid12-2 { width:31.33% !important; margin-left:1%; margin-right:1%; } /* 1/6 turns into 1/3 */
8299
+ .mobile-grid.grid12-3 { width:48% !important; margin-left:1%; margin-right:1%; } /* 1/4 turns into 1/2 */
8300
+
8301
+ /* Force other grid units to take half of the available width */
8302
+ .mobile-grid-half { width:48% !important; margin-left:1%; margin-right:1%; }
8303
+
8304
+ }
8305
+
8306
+
8307
+
8308
+
8309
+
8310
+ /* Mobile (Landscape, iPhone 4 Portrait) - design for a width of 640px
8311
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8312
+ */
8313
+ /* 640px <= width < 768px */
8314
+ @media only screen and (min-width: 640px) and (max-width: 767px) {
8315
+
8316
+ .container { max-width:590px; }
8317
+ }
8318
+
8319
+
8320
+
8321
+
8322
+
8323
+ /* Design for a width of less than 480px (small mobile)
8324
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8325
+ */
8326
+
8327
+ /* width < 480px */
8328
+ @media only screen and (max-width: 479px) {
8329
+
8330
+ /* Stretch containers to full width and add side padding */
8331
+ .container { max-width:none !important; width:94%; padding-left:3%; padding-right:3%; }
8332
+
8333
+ /* Nav container with outline (if nav container has background color).
8334
+ Apply the same vertical margins, as container's side padding. */
8335
+ .nav.has-outline > .grid-full { margin-top: 3%; margin-bottom: 3%; }
8336
+
8337
+ }
8338
+
8339
+
8340
+
8341
+
8342
+
8343
+ /* Mobile (Portrait) - design for a width of 320px
8344
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8345
+ */
8346
+
8347
+ /* 320px <= width < 480px */
8348
+ @media only screen and (min-width: 320px) and (max-width: 479px) {
8349
+
8350
+ /* .container { max-width:301px; } */
8351
+
8352
+ /* Hide */
8353
+ .hide-below-960 { display:none !important; }
8354
+ .hide-below-768 { display:none !important; }
8355
+ .hide-below-480 { display:none !important; }
8356
+ }
8357
+
8358
+
8359
+
8360
+
8361
+
8362
+ /* Mobile (Portrait) - design for a width of less than 320px
8363
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8364
+ */
8365
+
8366
+ /* width < 320px */
8367
+ @media only screen and (max-width: 319px) {
8368
+
8369
+ /* .container { max-width:226px; } */
8370
+
8371
+ .container { max-width:none !important; width:92%; padding-left:4%; padding-right:4%; }
8372
+
8373
+ /* Nav container with outline (if nav container has background color).
8374
+ Apply the same vertical margins, as container's side padding. */
8375
+ .nav.has-outline > .grid-full { margin-top: 4%; margin-bottom: 4%; }
8376
+
8377
+ /* Hide */
8378
+ .hide-below-960 { display:none !important; }
8379
+ .hide-below-768 { display:none !important; }
8380
+ .hide-below-480 { display:none !important; }
8381
+ .hide-below-320 { display:none !important; }
8382
+ }
8383
+
8384
+
8385
+ /**
8386
+ * WARNING: do not edit this file. It was generated automatically, your changes will be overwritten and lost.
8387
+ * To override or extend default CSS styles use custom.css file (refer to the user guide for details).
8388
+ * 2014-01-23 21:22:21 */
8389
+
8390
+
8391
+
8392
+
8393
+
8394
+
8395
+
8396
+
8397
+
8398
+
8399
+
8400
+
8401
+
8402
+
8403
+
8404
+
8405
+
8406
+
8407
+
8408
+
8409
+
8410
+
8411
+
8412
+ /* Desktop, laptop - design for a width of 1280px
8413
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8414
+ */
8415
+
8416
+ /* 1280px <= width */
8417
+
8418
+ @media only screen and (min-width: 1280px) {
8419
+
8420
+ /* Header
8421
+ -------------------------------------------------------------- */
8422
+ .header .logo { max-width:350px; }
8423
+
8424
+ /* Cart
8425
+ -------------------------------------------------------------- */
8426
+ .cart-table .product-image { max-width:110px; }
8427
+
8428
+ /* Product page
8429
+ -------------------------------------------------------------- */
8430
+ .product-view .sticker { width:80px; height:80px; }
8431
+
8432
+ /* Misc
8433
+ -------------------------------------------------------------- */
8434
+ /* Mini cart */
8435
+ .after-mini-cart { clear:none; }
8436
+
8437
+ /* Item grid
8438
+ -------------------------------------------------------------- */
8439
+ /* Item grid: 2 columns */
8440
+ .itemgrid-adaptive.itemgrid-2col .item { width:31.3333%; clear:none !important; }
8441
+ .itemgrid-adaptive.itemgrid-2col .item:nth-child(3n+1) { clear:left !important; }
8442
+
8443
+ /* Item grid: 3 columns */
8444
+ .itemgrid-adaptive.itemgrid-3col .item { width:23%; clear:none !important; }
8445
+ .itemgrid-adaptive.itemgrid-3col .item:nth-child(4n+1) { clear:left !important; }
8446
+
8447
+ /* Item grid: 4 columns */
8448
+ .itemgrid-adaptive.itemgrid-4col .item { width:18%; clear:none !important; }
8449
+ .itemgrid-adaptive.itemgrid-4col .item:nth-child(5n+1) { clear:left !important; }
8450
+
8451
+ /* Item grid: 5 columns */
8452
+ .itemgrid-adaptive.itemgrid-5col .item { width:14.6666%; clear:none !important; }
8453
+ .itemgrid-adaptive.itemgrid-5col .item:nth-child(6n+1) { clear:left !important; }
8454
+
8455
+ /* Item grid: 6 columns */
8456
+ .itemgrid-adaptive.itemgrid-6col .item { width:12.2857%; clear:none !important; }
8457
+ .itemgrid-adaptive.itemgrid-6col .item:nth-child(7n+1) { clear:left !important; }
8458
+
8459
+ /* Item grid: 7 columns */
8460
+ .itemgrid-adaptive.itemgrid-7col .item { width:10.5%; clear:none !important; }
8461
+ .itemgrid-adaptive.itemgrid-7col .item:nth-child(8n+1) { clear:left !important; }
8462
+
8463
+ /* Cloud zoom
8464
+ -------------------------------------------------------------- */
8465
+ .itemslider-thumbnails.count-4,
8466
+ .itemslider-thumbnails.count-5,
8467
+ .itemslider-thumbnails.count-multi { max-width:316px; } /*4*/
8468
+
8469
+ /* Direction navigation */
8470
+ .itemslider-thumbnails.count-4 .direction-nav { display:none; }
8471
+
8472
+ /* Slideshow caption
8473
+ -------------------------------------------------------------- */
8474
+ .caption .heading { font-size:3.3em; }
8475
+ .caption p { font-size:1.6666em; }
8476
+
8477
+ }
8478
+
8479
+
8480
+
8481
+
8482
+
8483
+
8484
+ /* Design for a width of 960-1280 px
8485
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8486
+ */
8487
+
8488
+ /* 960px <= width < 1280px */
8489
+ @media only screen and (min-width: 960px) and (max-width: 1279px) {
8490
+
8491
+ /* Cart
8492
+ -------------------------------------------------------------- */
8493
+ .cart-table .product-image { max-width:80px; }
8494
+
8495
+ /* Product page
8496
+ -------------------------------------------------------------- */
8497
+ .product-view .sticker { width:80px; height:80px; }
8498
+ }
8499
+
8500
+
8501
+
8502
+
8503
+
8504
+ /* Mobile, small old desktop - design for a width of less than 960px
8505
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8506
+ */
8507
+
8508
+ /* width < 960px */
8509
+ @media only screen and (max-width: 959px) {
8510
+
8511
+ /* Products grid: override size of elements (values like size-s)
8512
+ -------------------------------------------------------------- */
8513
+ /* Product labels */
8514
+ .products-grid .sticker { width:45px; height:45px; font-size:1em; }
8515
+ .products-grid .item:hover .sticker { width:50px; height:50px; }
8516
+
8517
+ /* Misc
8518
+ -------------------------------------------------------------- */
8519
+ /* Scroll to top button */
8520
+ #scroll-to-top { display:none !important; }
8521
+
8522
+ /* Hide Sign Up link in Top Links */
8523
+ #link-sign-up { display:none; }
8524
+
8525
+ /* Hide amount. Note: has to be defined after aligning ".amount" center */
8526
+ .toolbar .sorter .amount { display:none !important; }
8527
+ }
8528
+
8529
+
8530
+
8531
+ /* Tablet (Portrait) - design for a width of 768px
8532
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8533
+ */
8534
+
8535
+ /* 768px <= width < 960px */
8536
+ @media only screen and (min-width: 768px) and (max-width: 959px) {
8537
+
8538
+ /* Default Magento classes
8539
+ -------------------------------------------------------------- */
8540
+ .nobr { white-space:normal !important; }
8541
+
8542
+ /* Cart
8543
+ -------------------------------------------------------------- */
8544
+ .cart-table .product-name { font-size:1em; font-family: inherit; }
8545
+ .cart-table .product-image { max-width:80px; }
8546
+
8547
+ /* Product page
8548
+ -------------------------------------------------------------- */
8549
+ /* Related - simple */
8550
+ .block-related-thumbnails .product-details {
8551
+ margin-left:0;
8552
+ margin-bottom:10px;
8553
+ clear:left;
8554
+ }
8555
+
8556
+ /* Cloud zoom
8557
+ -------------------------------------------------------------- */
8558
+ /* Shrink the slider if to many thumbnails */
8559
+ .itemslider-thumbnails.count-3,
8560
+ .itemslider-thumbnails.count-4,
8561
+ .itemslider-thumbnails.count-5,
8562
+ .itemslider-thumbnails.count-multi { max-width:158px !important; } /*2*/
8563
+
8564
+ /* Direction navigation */
8565
+ .itemslider-thumbnails.count-3 .direction-nav,
8566
+ .itemslider-thumbnails.count-4 .direction-nav,
8567
+ .itemslider-thumbnails.count-5 .direction-nav,
8568
+ .itemslider-thumbnails.count-multi .direction-nav { display:block; }
8569
+
8570
+ /* Thumbnails */
8571
+ .img-box .thumbnails.show-all.auto-adjust-width .item { max-width: 32%; }
8572
+
8573
+ /* Slideshow caption
8574
+ -------------------------------------------------------------- */
8575
+ .caption .heading { font-size:2.0833em; }
8576
+ .caption p { font-size:1.1666em; }
8577
+ .caption button.button span span {
8578
+ height: 35px;
8579
+ line-height: 35px;
8580
+ padding: 0 15px;
8581
+ }
8582
+
8583
+ }
8584
+
8585
+
8586
+ /* All desktop - design for a width of 768px and wider
8587
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8588
+ */
8589
+
8590
+ /* 768px <= width */
8591
+ @media only screen and (min-width: 768px) {
8592
+
8593
+ /* Mobile accordion
8594
+ -------------------------------------------------------------- */
8595
+ .mobile-collapsible .block-title { border-bottom:none; } /* Hide line when not on mobile */
8596
+ .mobile-collapsible .opener { display:none !important; } /* Always hide when not on mobile */
8597
+ .mobile-collapsible .block-content { display:block !important; } /* Always show when not on mobile */
8598
+ /* See also: always make the container "relative" when ON mobile */
8599
+ }
8600
+
8601
+
8602
+ /* All mobile - design for a width of less than 768px
8603
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8604
+ */
8605
+
8606
+ /* width < 768px */
8607
+ @media only screen and (max-width: 767px) {
8608
+
8609
+ /* Grid and basic layout
8610
+ -------------------------------------------------------------- */
8611
+
8612
+ /* Margin for basic Magento columns */
8613
+ .col-main,
8614
+ .col-left,
8615
+ .col-right
8616
+ {
8617
+ margin-bottom:30px;
8618
+ }
8619
+
8620
+ /* Product view:
8621
+ margin for all grid units */
8622
+ .product-view .grid12-1,
8623
+ .product-view .grid12-2,
8624
+ .product-view .grid12-3,
8625
+ .product-view .grid12-4,
8626
+ .product-view .grid12-5,
8627
+ .product-view .grid12-6,
8628
+ .product-view .grid12-7,
8629
+ .product-view .grid12-8,
8630
+ .product-view .grid12-9,
8631
+ .product-view .grid12-10,
8632
+ .product-view .grid12-11,
8633
+
8634
+ /* deprecated */
8635
+ .product-view .grid4-1,
8636
+ .product-view .grid4-2,
8637
+ .product-view .grid4-3,
8638
+ .product-view .grid2-1
8639
+ /* end:deprecated */
8640
+ {
8641
+ margin-bottom:30px;
8642
+ }
8643
+
8644
+ /* Remove additional margin for main sidebars */
8645
+ .col-left > * { margin-right: 0; }
8646
+ .col-right > * { margin-left: 0; }
8647
+
8648
+ /* Magento utility classes
8649
+ -------------------------------------------------------------- */
8650
+ .nobr { white-space:normal !important; }
8651
+
8652
+ /* Forms
8653
+ -------------------------------------------------------------- */
8654
+ .form-list .field,
8655
+ .form-list input.input-text,
8656
+ .form-list textarea,
8657
+ .form-list select,
8658
+ .form-list li.wide .input-box,
8659
+ .form-list li.wide input.input-text,
8660
+ .form-list li.wide textarea,
8661
+ .form-list li.wide select { max-width:100%; }
8662
+
8663
+ /* Tables
8664
+ -------------------------------------------------------------- */
8665
+ .data-table thead .nobr { white-space:normal !important; }
8666
+ .data-table th,
8667
+ .data-table td { padding:5px; }
8668
+
8669
+ /* Data tables formatting
8670
+ -------------------------------------------------------------- */
8671
+
8672
+ /* Basic formatting */
8673
+ .cart .data-table thead,
8674
+ .my-wishlist .data-table thead,
8675
+ .my-account .data-table thead,
8676
+ .order-review .data-table thead { display:none; }
8677
+
8678
+ .cart .data-table tbody,
8679
+ .my-wishlist .data-table tbody,
8680
+ .my-account .data-table tbody,
8681
+ .order-review .data-table tbody { background:transparent !important; }
8682
+
8683
+ .cart .data-table tr,
8684
+ .cart .data-table td,
8685
+ .my-wishlist .data-table tr,
8686
+ .my-wishlist .data-table td,
8687
+ .my-account .data-table tr,
8688
+ .my-account .data-table td,
8689
+ .order-review .data-table tr,
8690
+ .order-review .data-table td { border:none !important; background:transparent !important; display:block; width:100%; text-align:left !important; }
8691
+
8692
+ .cart .data-table tr,
8693
+ .my-wishlist .data-table tr,
8694
+ .my-account .data-table tr,
8695
+ .order-review .data-table tr { border-bottom:1px solid #e5e5e5 !important; margin-bottom:20px; }
8696
+
8697
+ /* Highlight first cell in table footer */
8698
+ .my-account .data-table tfoot tr td:first-child,
8699
+ .order-review .data-table tfoot tr td:first-child { font-weight:bold; }
8700
+
8701
+ /* Show cell label */
8702
+ .data-table .cell-label {
8703
+ display:inline-block;
8704
+ width:30%;
8705
+ min-width:100px;
8706
+ max-width:140px;
8707
+ margin-right:10px;
8708
+ font-weight:bold;
8709
+ }
8710
+
8711
+ /* Header
8712
+ -------------------------------------------------------------- */
8713
+
8714
+ /* Global notices */
8715
+ .global-site-notice .notice-inner { background:none; padding:10px 0; text-align:center; }
8716
+ .global-site-notice .notice-inner p { width:100%; padding:0 0 10px; }
8717
+ .global-site-notice .notice-inner .actions { padding-bottom:5px; }
8718
+
8719
+ /* Logo
8720
+ -------------------------------------------------------------- */
8721
+ .header .logo-wrapper { text-align:center; }
8722
+ .header .logo { width:70%; margin-left:auto; margin-right:auto; }
8723
+
8724
+ /* Quick search
8725
+ -------------------------------------------------------------- */
8726
+
8727
+ /* Search: mobile (search bar layout for narrow screens)
8728
+ -------------------------------------------------------------- */
8729
+ .search-wrapper-mobile {
8730
+ display: block; /* To override possible inline styles */
8731
+ clear: both;
8732
+ width: 100%;
8733
+ margin: 10px 0;
8734
+ /*float: none;*/
8735
+ }
8736
+ .search-wrapper-mobile .form-search {
8737
+ width: 100%;
8738
+ max-width: 440px;
8739
+ margin-left: auto;
8740
+ margin-right: auto;
8741
+ }
8742
+ .search-wrapper-mobile .form-search .input-text {
8743
+ width: 100%;
8744
+ min-width: 100%; /* Cancel minimum width */
8745
+ }
8746
+
8747
+ /* Search: header inline
8748
+ -------------------------------------------------------------- */
8749
+ /* Note: added .header class to override other selectors */
8750
+ .header .search-wrapper-inline {
8751
+ display: block;
8752
+ clear: both;
8753
+ width: 100%;
8754
+ margin: 10px auto;
8755
+ }
8756
+ /* If wrapper is an .item, then remove side margins */
8757
+ .header .item.search-wrapper-inline { margin-left:auto; margin-right:auto; }
8758
+
8759
+ .search-wrapper-inline #search_mini_form { display: block; }
8760
+ .search-wrapper-inline .form-search .input-text { width:100%; }
8761
+
8762
+ /* Other
8763
+ -------------------------------------------------------------- */
8764
+ /* User menu (Top Links) */
8765
+ .user-menu { width:100%; margin-left:0; margin-right:0; }
8766
+
8767
+ /* Top links */
8768
+ .top-links { float:left; }
8769
+
8770
+ /* Mini cart */
8771
+ .after-mini-cart { clear:none; } /* Deprecated */
8772
+
8773
+ /* Line breaker - disable on narrow screens */
8774
+ .user-menu .line-break-after { clear:none; }
8775
+
8776
+ /* Footer
8777
+ -------------------------------------------------------------- */
8778
+
8779
+ /* Footer elements - align center */
8780
+
8781
+ .footer .mobile-inline-container { text-align:center; }
8782
+ .footer .mobile-inline-container > * { float:none; display:inline-block; margin-left:5px; margin-right:5px; }
8783
+
8784
+ .footer-primary-top-spacing,
8785
+ .footer-primary-bottom-spacing,
8786
+ .footer-top .links,
8787
+ .footer-bottom { text-align:center; }
8788
+
8789
+ .footer-primary-top-spacing .item,
8790
+ .footer-primary-bottom-spacing .item,
8791
+ #subscribe-form,
8792
+ .footer-bottom .item,
8793
+ .footer-top .links li { float:none; display:inline-block; }
8794
+ .footer-top .item { float:none; }
8795
+
8796
+ /* Simplify links */
8797
+ .footer .links-wrapper-separators .links li a,
8798
+ .footer .links-wrapper-separators-left .links li a { background-image:none; }
8799
+
8800
+ /* Footer elements */
8801
+ .footer-primary-bottom-spacing .item { width:100%; margin:0; }
8802
+ .footer-bottom .item { margin-left:5px; margin-right:5px; }
8803
+
8804
+ /* Copyright - remove space */
8805
+ .footer-copyright { margin-left:0; }
8806
+
8807
+ /* Primary and secondary section: additional inner padding */
8808
+ .footer-primary > .grid-full > .section,
8809
+ .footer-secondary > .grid-full > .section { padding:15px 10px; }
8810
+
8811
+ /* Layered navigation
8812
+ -------------------------------------------------------------- */
8813
+ .block-layered-nav dd li,
8814
+ .block-layered-nav .currently ol li { line-height:2.3333em; background-position:3px 10px; }
8815
+ .block-layered-nav dd li:hover,
8816
+ .block-layered-nav .currently ol li:hover { background-position:6px 10px; }
8817
+
8818
+ /* Toolbar
8819
+ -------------------------------------------------------------- */
8820
+
8821
+ /* All elements - align center and increase vertical spacing */
8822
+ .pager,
8823
+ .sorter { text-align:center; }
8824
+ .pager .amount,
8825
+ .pager .limiter,
8826
+ .pager .pages,
8827
+ .sorter .amount,
8828
+ .sorter .limiter,
8829
+ .sorter .view-mode,
8830
+ .sorter .sort-by { display:inline-block; float:none; padding-top:0; padding-bottom:0; }
8831
+
8832
+ .toolbar .sort-by,
8833
+ .toolbar .sorter .amount { border-right:none; }
8834
+
8835
+ .sorter .per-page,
8836
+ .pager .per-page { display:none; }
8837
+
8838
+ /* Category view
8839
+ -------------------------------------------------------------- */
8840
+
8841
+ .note-msg.empty-catalog {
8842
+ background-position:center 10px !important;
8843
+ color:inherit;
8844
+ padding:150px 10px 10px !important;
8845
+ text-align:center;
8846
+ }
8847
+
8848
+ /* Page heading with RSS link */
8849
+ .page-title { position:relative; }
8850
+ .page-title .link-rss { float:none; display:block; position:static; margin:10px 0 0; }
8851
+
8852
+ /* Products list
8853
+ -------------------------------------------------------------- */
8854
+ .products-list .product-shop-inner { padding-right:0; border-right:none; }
8855
+
8856
+ /* Products grid: override size of elements (values like size-s)
8857
+ -------------------------------------------------------------- */
8858
+ /* Product name */
8859
+ .products-grid .product-name {
8860
+ font-size:1.1666em; /*14px*/
8861
+ line-height:1.2307em; /*16px*/
8862
+ }
8863
+ /* Buttons */
8864
+ .products-grid .item button.btn-cart span span {
8865
+ padding:7px 15px;
8866
+ height:auto;
8867
+ line-height:2em;
8868
+ }
8869
+
8870
+ /* Product page
8871
+ -------------------------------------------------------------- */
8872
+
8873
+ /* Wrapper for collaterals - remove top margin (grid units already have bottom margin) */
8874
+ .product-view .box-additional { margin-top:0; }
8875
+
8876
+ /* Related: remove bottom margin */
8877
+ .block-related-slider { margin-bottom:0; }
8878
+
8879
+ /* Sidebar */
8880
+ .product-view .custom-sidebar-right .inner { padding-left:0; border-left:none; }
8881
+ .product-view .custom-sidebar-left .inner { padding-right:0; border-right:none; }
8882
+
8883
+ /* Add-to links */
8884
+ .product-view .add-to-links { text-align: center; }
8885
+ .product-view .add-to-links li { float: none; display: inline-block; }
8886
+
8887
+ /* Cart
8888
+ -------------------------------------------------------------- */
8889
+
8890
+ /* Buttons below table: align center */
8891
+ .cart-table tfoot tr.first td { text-align:center !important; padding:0; margin-bottom:20px; }
8892
+ .cart-table tfoot button { display:inline-block; float:none !important; margin:0 0 3px; padding:0; }
8893
+
8894
+ /* One Page Checkout
8895
+ -------------------------------------------------------------- */
8896
+
8897
+ /* Step title - link "edit" */
8898
+ .opc .allow .step-title a { display:none; }
8899
+
8900
+ /* Form */
8901
+ /*.opc form fieldset { display:table-column-group; }*/
8902
+
8903
+ /* Account
8904
+ -------------------------------------------------------------- */
8905
+ .my-wishlist .product-image { max-width:none; }
8906
+
8907
+ /* Items slider
8908
+ -------------------------------------------------------------- */
8909
+ .control-nav.control-paging { display:none; } /* Deprecated */
8910
+
8911
+ /* If only one item exists */
8912
+ .itemslider.single-item .slides > li { margin: 0 auto; } /* Deprecated */
8913
+
8914
+ /* Slideshow
8915
+ -------------------------------------------------------------- */
8916
+
8917
+ /* Slideshow navigation: move buttons to the top right corner */
8918
+ .the-slideshow-wrapper .slider-arrows2 .owl-controls .owl-buttons .owl-prev { top:10px; right:60px; left:auto; }
8919
+ .the-slideshow-wrapper .slider-arrows2 .owl-controls .owl-buttons .owl-next { top:10px; right:10px; left:auto; }
8920
+
8921
+ /* Deprecated */
8922
+ .the-slideshow .direction-nav .prev { top:4%; right:63px; left:auto; }
8923
+ .the-slideshow .direction-nav .next { top:4%; right:2%; }
8924
+
8925
+ /* Pagination */
8926
+ .the-slideshow-wrapper .owl-pagination { display: none; }
8927
+
8928
+ /* Slideshow caption */
8929
+ /* Shrink font, hide all elements except heading */
8930
+ .caption > * { display:none !important; }
8931
+ .caption .heading { display:inline-block !important; font-size:2.0833em; margin-bottom:1px; }
8932
+ .caption p { font-size:1.1666em; margin-bottom:1px; }
8933
+ .caption button.button span span {
8934
+ height: 30px;
8935
+ line-height: 30px;
8936
+ padding: 0 10px;
8937
+ }
8938
+
8939
+ /* Cloud Zoom
8940
+ -------------------------------------------------------------- */
8941
+ /* Hide zoom */
8942
+ .cloud-zoom-big,
8943
+ .cloud-zoom-lens { display:none !important; }
8944
+ .cloud-zoom-lens { cursor:default !important; }
8945
+
8946
+ /* Thumbnails */
8947
+ .img-box .thumbnails.show-all.auto-adjust-width .item { max-width: 16%; }
8948
+
8949
+ /* Lightbox
8950
+ -------------------------------------------------------------- */
8951
+ #cboxTitle,
8952
+ #cboxCurrent { display:none !important; }
8953
+
8954
+ /* Accordion
8955
+ -------------------------------------------------------------- */
8956
+ .accordion-style1 li a {
8957
+ padding:15px 10px;
8958
+ font-size: 1.1666em; /*14px*/
8959
+ line-height: 1.2857em; /*18px*/
8960
+ }
8961
+ /* Space for openner if item has children. It has to be a few pixels wider than openner */
8962
+ .accordion-style1 li.parent > a { padding-right:53px; }
8963
+ .accordion-style1 .opener { width:48px; height:48px; }
8964
+
8965
+ /* Mobile accordion
8966
+ -------------------------------------------------------------- */
8967
+ .mobile-collapsible .block-content { display:none; } /* Hide on mobile */
8968
+ .mobile-collapsible { position:relative; } /* Always make "relative" when not on mobile (to avoid flickering on CSS transitions) */
8969
+
8970
+ }
8971
+ /* end: width < 768px */
8972
+
8973
+
8974
+ /* Mobile (Landscape) - design for a width of 480px
8975
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8976
+ */
8977
+
8978
+ /* 480px <= width < 768px */
8979
+ @media only screen and (min-width: 480px) and (max-width: 767px) {
8980
+
8981
+ /* Category view
8982
+ -------------------------------------------------------------- */
8983
+ .products-list .product-shop,
8984
+ .products-list .right-column,
8985
+ .products-list .product-image-wrapper { width:48%; margin-left:1%; margin-right:1%; }
8986
+
8987
+ /* Cloud zoom
8988
+ -------------------------------------------------------------- */
8989
+ /* Broaden the slider if at least 4 thumbnails */
8990
+ .itemslider-thumbnails.count-4,
8991
+ .itemslider-thumbnails.count-5,
8992
+ .itemslider-thumbnails.count-multi { max-width:316px; } /*4*/
8993
+
8994
+ /* Direction navigation */
8995
+ .itemslider-thumbnails.count-4 .direction-nav { display:none; }
8996
+
8997
+ /* Shrink and align center the main image */
8998
+ .img-box .product-image { width:60.4651%; /*364px*/ }
8999
+
9000
+ }
9001
+ /* end: 480px <= width < 768px */
9002
+
9003
+
9004
+ /* Design for a width of 640px
9005
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9006
+ */
9007
+
9008
+ /* 640px <= width < 768px */
9009
+ @media only screen and (min-width: 640px) and (max-width: 767px) {
9010
+
9011
+ /* Item grid
9012
+ -------------------------------------------------------------- */
9013
+
9014
+ .itemgrid.itemgrid-adaptive .item { width:31.3333%; clear:none !important; }
9015
+ .itemgrid.itemgrid-adaptive .item:nth-child(3n+1) { clear:left !important; }
9016
+ }
9017
+ /* end: 640px <= width < 768px */
9018
+
9019
+
9020
+ /* Design for a width of less than 640px
9021
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9022
+ */
9023
+
9024
+ /* width < 640px */
9025
+ @media only screen and (max-width: 639px) {
9026
+
9027
+ h1 { font-size:2em; line-height:1.25em; /*24px, 30px*/ }
9028
+ h2 { font-size:1.6666em; line-height:1.2em; /*20px, 24px*/ }
9029
+ h3 { font-size:1.3333em; line-height:1.25em; /*16px, 20px*/ }
9030
+ h4 { font-size:1.1666em; line-height:1.1428em; /*14px, 16px*/ }
9031
+ h5 { font-size:1em; line-height:1em; /*12px, 12px*/ }
9032
+ h6 { font-size:1em; line-height:1em; /*12px, 12px*/ }
9033
+
9034
+
9035
+
9036
+ /* Cloud zoom
9037
+ -------------------------------------------------------------- */
9038
+ /* Thumbnails */
9039
+ .img-box .thumbnails.show-all.auto-adjust-width .item { max-width: 19%; }
9040
+ }
9041
+ /* end: width < 640px */
9042
+
9043
+
9044
+ /* Design for a width of 480px
9045
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9046
+ */
9047
+
9048
+ /* 480 <= width < 640px */
9049
+ @media only screen and (min-width: 480px) and (max-width: 639px) {
9050
+
9051
+ /* Item grid
9052
+ -------------------------------------------------------------- */
9053
+
9054
+ .itemgrid.itemgrid-adaptive .item { width:48%; clear:none !important; }
9055
+ .itemgrid.itemgrid-adaptive .item:nth-child(2n+1) { clear:left !important; }
9056
+ }
9057
+ /* end: 480 <= width < 640px */
9058
+
9059
+
9060
+ /* Design for a width of less than 480px (small mobile)
9061
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9062
+ */
9063
+
9064
+ /* width < 480px */
9065
+ @media only screen and (max-width: 479px) {
9066
+
9067
+
9068
+
9069
+ /* Products grid
9070
+ -------------------------------------------------------------- */
9071
+ .products-grid.category-products-grid.hover-effect .item .add-to-links, /* To override "display-onhover" */
9072
+ .products-grid .item .add-to-links { display: none !important; }
9073
+
9074
+ /* Buttons
9075
+ -------------------------------------------------------------- */
9076
+ /* Button checkout + button "Add to cart" on product page */
9077
+ button.btn-checkout span span,
9078
+ .product-view .btn-cart span span { padding:5px 10px; }
9079
+
9080
+ /* Grid elements
9081
+ -------------------------------------------------------------- */
9082
+ .col2-set .col-1,
9083
+ .col2-set .col-2 { width:100%; }
9084
+
9085
+ /* Header
9086
+ -------------------------------------------------------------- */
9087
+
9088
+ /* Mini cart */
9089
+ #mini-cart .dropdown-toggle { -moz-box-shadow:none !important; -webkit-box-shadow:none !important; box-shadow:none !important; }
9090
+
9091
+ #mini-cart .dropdown-toggle.cover > div { background-color: transparent; color: inherit; }
9092
+ #mini-cart .dropdown-toggle span.icon { transition:none; }
9093
+ #mini-cart .dropdown-toggle .name { display:none; }
9094
+
9095
+ #mini-cart .dropdown-toggle .caret { display:none !important; }
9096
+ #mini-cart .dropdown-menu { display:none !important; }
9097
+ #mini-cart.hide-empty-cart { display:none !important; }
9098
+
9099
+ /* Quick compare dropdown */
9100
+ #quick-compare .dropdown-toggle { -moz-box-shadow:none !important; -webkit-box-shadow:none !important; box-shadow:none !important; }
9101
+
9102
+ #quick-compare .dropdown-toggle.cover > div { background-color: transparent; color: inherit; }
9103
+ #quick-compare .dropdown-toggle span.icon { transition:none; }
9104
+ #quick-compare .dropdown-toggle .name { display:none; }
9105
+
9106
+ #quick-compare .dropdown-toggle .caret { display:none !important; }
9107
+ #quick-compare .dropdown-menu { display:none !important; }
9108
+ #quick-compare.is-empty { display:none !important; }
9109
+
9110
+ /* Header elements - align center
9111
+ -------------------------------------------------------------- */
9112
+
9113
+ .header .mobile-inline-container { text-align:center; }
9114
+ .header .mobile-inline-container > * { float:none; display:inline-block; margin-left:5px; margin-right:5px; }
9115
+
9116
+ /* Links */
9117
+ .header .links { text-align:center; }
9118
+ .header .links li { float:none; display:inline-block; }
9119
+
9120
+ /* Header top */
9121
+ .header-top { text-align:center; }
9122
+ .header-top .item { float:none; display:inline-block; margin-left:5px; margin-right:5px; }
9123
+
9124
+ /* Inside user menu */
9125
+ .user-menu { text-align:center; }
9126
+ .user-menu > *,
9127
+ .user-menu .links, /*Some blocks of links may be deeper than one level*/
9128
+ .dropdown { float:none !important; display:inline-block !important; }
9129
+
9130
+ /* previous:
9131
+ .user-menu { text-align:center; }
9132
+ .user-menu .top-links { float:none; }
9133
+ #mini-cart,
9134
+ .user-menu .links,
9135
+ .user-menu .links li { float:none; display:inline-block; }
9136
+ */
9137
+
9138
+ /* Simplify horizontal links */
9139
+ .header .links-wrapper-separators .links li a,
9140
+ .header .links-wrapper-separators-left .links li a { background-image:none; }
9141
+
9142
+ /* Products list
9143
+ -------------------------------------------------------------- */
9144
+ .products-list .item { margin-bottom:20px; }
9145
+ .products-list .item:first-child { margin-top:1px; /* Move item down to uncover the border of the toolbar */ }
9146
+ .products-list .product-image { margin-bottom:20px; }
9147
+
9148
+ /* Products list: disable hover effect
9149
+ -------------------------------------------------------------- */
9150
+ /* Cancel "hover effect" styles: apply the same styles which item has without "hover effect" */
9151
+ .products-list.hover-effect .item { border-top: none; }
9152
+ .products-list.hover-effect .item:hover {
9153
+ margin-left:0;
9154
+ margin-right:0;
9155
+ padding-left:0;
9156
+ padding-right:0;
9157
+ box-shadow: none !important;
9158
+ }
9159
+
9160
+ /* Products grid: override size of elements (values like size-xs)
9161
+ -------------------------------------------------------------- */
9162
+ /* Product labels */
9163
+ .products-grid .sticker { width:40px; height:40px; font-size:0.9166em; }
9164
+ .products-grid .item:hover .sticker { width:45px; height:45px; }
9165
+
9166
+ /* Product page
9167
+ -------------------------------------------------------------- */
9168
+
9169
+ /* Reviews */
9170
+ .product-view .box-reviews .form-add .data-table th,
9171
+ .product-view .box-reviews .form-add .data-table td { padding:6px 1px; }
9172
+ .product-view .box-reviews .form-add .form-list input.input-text,
9173
+ .product-view .box-reviews .form-add .form-list textarea { width:90%; }
9174
+
9175
+ /* Add-to links */
9176
+ .product-view .add-to-links { text-align: inherit; }
9177
+
9178
+ /* Toolbar
9179
+ -------------------------------------------------------------- */
9180
+
9181
+ .toolbar .limiter { display:none; }
9182
+ .sorter .view-mode { display:none; }
9183
+ .sorter .sort-by { background:none; margin-right:0; margin-left:0; padding-right:0; padding-left:0; } /* Remove right divider */
9184
+
9185
+ /* Pages */
9186
+ .pager .pages li { display:none; }
9187
+ .pager .pages li.previous,
9188
+ .pager .pages li.current,
9189
+ .pager .pages li.next { display:block; }
9190
+
9191
+ /* Account
9192
+ -------------------------------------------------------------- */
9193
+
9194
+ /* Account info + Order info */
9195
+ /*
9196
+ .box-account.box-info .col-1,
9197
+ .order-info-box .col-1 { border-right:none; }
9198
+ .box-account.box-info .col-1 .box,
9199
+ .order-info-box .col-1 .box { padding-right:0; }
9200
+ */
9201
+
9202
+ .my-account .col2-set .col-1 { border-right:none; margin-bottom:20px; }
9203
+ .my-account .col2-set .col-1 .box { padding-right:0; }
9204
+
9205
+ /* Order details */
9206
+ .order-items .sub-title .separator { display:none; }
9207
+
9208
+ /* Checkout
9209
+ -------------------------------------------------------------- */
9210
+ .opc .step-title h2 { font-size:1em; line-height:2.8333em; }
9211
+
9212
+ /* Footer
9213
+ -------------------------------------------------------------- */
9214
+ #subscribe-form label {
9215
+ display: inline-block;
9216
+ float: none;
9217
+ line-height: 1em;
9218
+ margin: 15px 0 2px;
9219
+ }
9220
+ #subscribe-form .input-box {
9221
+ display: inline-block;
9222
+ float: none;
9223
+ margin: 5px 0;
9224
+ position: relative;
9225
+ width: 100%;
9226
+ }
9227
+ #subscribe-form .input-text { width:100%; max-width:100%; }
9228
+ #subscribe-form .button {
9229
+ display: inline-block;
9230
+ float: none;
9231
+ }
9232
+
9233
+ /* Slideshow
9234
+ -------------------------------------------------------------- */
9235
+ .the-slideshow .control-nav { display:none; } /* Deprecated */
9236
+
9237
+ /* Slideshow caption */
9238
+ /* Shrink font. Hide all elements, even with class "permanent" (except heading with "permanent") */
9239
+ .caption > *,
9240
+ .caption .heading,
9241
+ .caption .permanent { display:none !important; }
9242
+ .caption .heading.permanent { display:inline-block !important; }
9243
+
9244
+ .caption .heading { font-size:1.3333em; }
9245
+ .caption p { font-size:1em; }
9246
+
9247
+ /* Itemslider
9248
+ -------------------------------------------------------------- */
9249
+ /* Pagination */
9250
+ .itemslider .owl-pagination { display: none; }
9251
+
9252
+ /* Cloud zoom
9253
+ -------------------------------------------------------------- */
9254
+ #zoom-btn { display:none; }
9255
+
9256
+ /* Thumbnails */
9257
+ .img-box .thumbnails.show-all.auto-adjust-width .item { max-width: 24%; }
9258
+
9259
+ }
9260
+ /* end: width < 480px */
9261
+
9262
+
9263
+ /* Design for a width of 320px (mobile - portrait)
9264
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9265
+ */
9266
+
9267
+ /* 320px <= width < 480px */
9268
+ @media only screen and (min-width: 320px) and (max-width: 479px) {
9269
+
9270
+ /* Item grid
9271
+ -------------------------------------------------------------- */
9272
+
9273
+ .itemgrid.itemgrid-adaptive .item { width:48%; clear:none !important; }
9274
+ .itemgrid.itemgrid-adaptive .item:nth-child(2n+1) { clear:left !important; }
9275
+
9276
+ /* Cloud zoom
9277
+ -------------------------------------------------------------- */
9278
+ /* Shrink the slider if to many thumbnails */
9279
+ .itemslider-thumbnails.count-3,
9280
+ .itemslider-thumbnails.count-4,
9281
+ .itemslider-thumbnails.count-5,
9282
+ .itemslider-thumbnails.count-multi { max-width:237px; } /*3*/ /*{ max-width:158px; }*/ /*2*/
9283
+
9284
+ /* Direction navigation */
9285
+ .itemslider-thumbnails.count-3 .direction-nav,
9286
+ .itemslider-thumbnails.count-4 .direction-nav,
9287
+ .itemslider-thumbnails.count-5 .direction-nav,
9288
+ .itemslider-thumbnails.count-multi .direction-nav { display:block; }
9289
+
9290
+ }
9291
+ /* end: 320px <= width < 480px */
9292
+
9293
+
9294
+ /* Design for a width of less than 320px
9295
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9296
+ */
9297
+
9298
+ /* width < 320px */
9299
+ @media only screen and (max-width: 319px) {
9300
+
9301
+
9302
+ /* Disable hover effect
9303
+ -------------------------------------------------------------- */
9304
+ /* Cancel "hover effect" styles: apply the same styles which item has without "hover effect" */
9305
+ .category-products-grid.hover-effect .item { border-top: none; }
9306
+ .category-products-grid.hover-effect .item:hover {
9307
+ margin-left:0;
9308
+ margin-right:0;
9309
+ padding-left:1%;
9310
+ padding-right:1%;
9311
+ box-shadow: none !important;
9312
+ }
9313
+
9314
+ /* Show elements normally displayed only on hover */
9315
+ .category-products-grid.hover-effect .item .display-onhover { display:block !important; }
9316
+
9317
+ /* Show full name even if enabled: display name in single line */
9318
+ .products-grid.single-line-name .item .product-name { overflow: visible; white-space: normal; }
9319
+
9320
+ /* Spaces between items */
9321
+ .category-products-grid.hover-effect .item { margin-bottom: 20px; }
9322
+
9323
+
9324
+ /* Product page
9325
+ -------------------------------------------------------------- */
9326
+ /* Related - thumbnails */
9327
+ .block-related-thumbnails .product-details {
9328
+ margin-left:0;
9329
+ margin-bottom:10px;
9330
+ clear:left;
9331
+ }
9332
+ .block-related-thumbnails .product-details .price-box { display: inline-block; margin-right:5px; }
9333
+ .block-related-thumbnails .product-details .related-add-to-wishlist { display: inline-block; }
9334
+
9335
+ /* Item grid
9336
+ -------------------------------------------------------------- */
9337
+ /* Always show 1 column */
9338
+ /* Important: added ".itemgrid" class to override other styles */
9339
+ .itemgrid.itemgrid-adaptive .item { width:98%; clear:none !important; }
9340
+
9341
+ /* Cloud zoom
9342
+ -------------------------------------------------------------- */
9343
+ /* Thumbnails */
9344
+ .img-box .thumbnails.show-all.auto-adjust-width .item { max-width: 32%; }
9345
+
9346
+ /* Slideshow
9347
+ -------------------------------------------------------------- */
9348
+ .the-slideshow-wrapper .owl-buttons { display: none; }
9349
+
9350
+ .the-slideshow .direction-nav { display:none; } /* Deprecated */
9351
+
9352
+ }
9353
+ /* end: width < 320px */
9354
+
9355
+
9356
+ /* Design for a width of 240px (small mobile)
9357
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9358
+ */
9359
+
9360
+ /* 240px <= width < 320px */
9361
+ @media only screen and (min-width: 240px) and (max-width: 319px) {
9362
+
9363
+ /* Cloud zoom
9364
+ -------------------------------------------------------------- */
9365
+ /* Shrink the slider if to many thumbnails */
9366
+ .itemslider-thumbnails.count-3,
9367
+ .itemslider-thumbnails.count-4,
9368
+ .itemslider-thumbnails.count-5,
9369
+ .itemslider-thumbnails.count-multi { max-width:158px; } /*2*/
9370
+
9371
+ }
9372
+ /* end: 240px <= width < 320px */
9373
+
9374
+
9375
+ /* Design for a width of lass than 240px
9376
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9377
+ */
9378
+
9379
+ /* width < 240px */
9380
+ @media only screen and (max-width: 239px) {
9381
+
9382
+ /* Cloud zoom
9383
+ -------------------------------------------------------------- */
9384
+ /* Shrink the slider if to many thumbnails */
9385
+ .itemslider-thumbnails.count-2,
9386
+ .itemslider-thumbnails.count-3,
9387
+ .itemslider-thumbnails.count-4,
9388
+ .itemslider-thumbnails.count-5,
9389
+ .itemslider-thumbnails.count-multi { max-width:79px !important; } /*1*/
9390
+
9391
+ /* Direction navigation */
9392
+ .itemslider-thumbnails.count-2 .direction-nav,
9393
+ .itemslider-thumbnails.count-3 .direction-nav,
9394
+ .itemslider-thumbnails.count-4 .direction-nav,
9395
+ .itemslider-thumbnails.count-5 .direction-nav,
9396
+ .itemslider-thumbnails.count-multi .direction-nav { display:block; }
9397
+
9398
+ }
9399
+ /* end: width < 240px */
9400
+
9401
+
9402
+
9403
+ /*Additional custom CSS*/
skin/frontend/default/default/css/responsivebanner/images/active_bg.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/apple.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/banner1.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/banner2.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/banner3.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/bg-sequence.jpg ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/bluelogo.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/brandisimi.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/bt-next.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/bt-prev.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/bx_loader.gif ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/camera_skins.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/company.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/controls.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/css ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ @font-face {
2
+ font-family: 'Bitter';
3
+ font-style: normal;
4
+ font-weight: 400;
5
+ src: local('Bitter-Regular'), url(http://themes.googleusercontent.com/static/fonts/bitter/v5/SHIcXhdd5RknatSgOzyEkA.woff) format('woff');
6
+ }
skin/frontend/default/default/css/responsivebanner/images/divider.png ADDED
Binary file
skin/frontend/default/default/css/responsivebanner/images/f6e62d1da07bb38772c4bacfcef59296.css ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Magento
3
+ *
4
+ * NOTICE OF LICENSE
5
+ *
6
+ * This source file is subject to the Academic Free License (AFL 3.0)
7
+ * that is bundled with this package in the file LICENSE_AFL.txt.
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/afl-3.0.php
10
+ * If you did not receive a copy of the license and are unable to
11
+ * obtain it through the world-wide-web, please send an email
12
+ * to license@magentocommerce.com so we can send you a copy immediately.
13
+ *
14
+ * DISCLAIMER
15
+ *
16
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
17
+ * versions in the future. If you wish to customize Magento for your
18
+ * needs please refer to http://www.magentocommerce.com for more information.
19
+ *
20
+ * @category design
21
+ * @package default_default
22
+ * @copyright Copyright (c) 2011 Magento Inc. (http://www.magentocommerce.com)
23
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
24
+ */
25
+ * { background:none !important; text-align:left !important; }
26
+ html { margin:0 !important; padding:0 !important; }
27
+ body { background:#fff !important; font-size:9pt !important; padding:0 !important; margin:10px !important; }
28
+ a { color:#2976c9 !important; }
29
+ th,td { color:#2f2f2f !important; border-color:#ccc !important; }
30
+
31
+ .header-container,
32
+ .nav-container,
33
+ .footer-container,
34
+ .pager,
35
+ .toolbar,
36
+ .actions,
37
+ .buttons-set { display:none !important; }
38
+
39
+ .page-print .data-table .cart-tax-total { background-position:100% -54px; }
40
+ .page-print .data-table .cart-tax-info { display:block !important; }
41
+
skin/frontend/default/default/css/responsivebanner/images/ga.js ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function(){var aa=encodeURIComponent,ba=Infinity,ca=setTimeout,da=isNaN,m=Math,ea=decodeURIComponent;function ha(a,b){return a.name=b}
2
+ var n="push",ia="test",ja="slice",p="replace",ka="load",la="floor",ma="charAt",na="value",q="indexOf",oa="match",pa="port",qa="createElement",ra="path",r="name",g="getTime",u="host",v="toString",w="length",x="prototype",sa="clientWidth",y="split",ta="stopPropagation",ua="scope",z="location",va="search",A="protocol",wa="clientHeight",xa="href",B="substring",ya="apply",za="navigator",C="join",D="toLowerCase",E;function Aa(a,b){switch(b){case 0:return""+a;case 1:return 1*a;case 2:return!!a;case 3:return 1E3*a}return a}function Ba(a){return"function"==typeof a}function Ca(a){return void 0!=a&&-1<(a.constructor+"")[q]("String")}function F(a,b){return void 0==a||"-"==a&&!b||""==a}function Da(a){if(!a||""==a)return"";for(;a&&-1<" \n\r\t"[q](a[ma](0));)a=a[B](1);for(;a&&-1<" \n\r\t"[q](a[ma](a[w]-1));)a=a[B](0,a[w]-1);return a}function Ea(){return m.round(2147483647*m.random())}function Fa(){}
3
+ function G(a,b){if(aa instanceof Function)return b?encodeURI(a):aa(a);H(68);return escape(a)}function I(a){a=a[y]("+")[C](" ");if(ea instanceof Function)try{return ea(a)}catch(b){H(17)}else H(68);return unescape(a)}var Ga=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,!!d):a.attachEvent&&a.attachEvent("on"+b,c)},Ha=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,!!d):a.detachEvent&&a.detachEvent("on"+b,c)};
4
+ function Ia(a,b){if(a){var c=J[qa]("script");c.type="text/javascript";c.async=!0;c.src=a;c.id=b;var d=J.getElementsByTagName("script")[0];d.parentNode.insertBefore(c,d);return c}}function K(a){return a&&0<a[w]?a[0]:""}function L(a){var b=a?a[w]:0;return 0<b?a[b-1]:""}var Ja=function(){this.prefix="ga.";this.R={}};Ja[x].set=function(a,b){this.R[this.prefix+a]=b};Ja[x].get=function(a){return this.R[this.prefix+a]};Ja[x].contains=function(a){return void 0!==this.get(a)};function Ka(a){0==a[q]("www.")&&(a=a[B](4));return a[D]()}function La(a,b){var c,d={url:a,protocol:"http",host:"",path:"",d:new Ja,anchor:""};if(!a)return d;c=a[q]("://");0<=c&&(d.protocol=a[B](0,c),a=a[B](c+3));c=a[va]("/|\\?|#");if(0<=c)d.host=a[B](0,c)[D](),a=a[B](c);else return d.host=a[D](),d;c=a[q]("#");0<=c&&(d.anchor=a[B](c+1),a=a[B](0,c));c=a[q]("?");0<=c&&(Na(d.d,a[B](c+1)),a=a[B](0,c));d.anchor&&b&&Na(d.d,d.anchor);a&&"/"==a[ma](0)&&(a=a[B](1));d.path=a;return d}
5
+ function Oa(a,b){function c(a){var b=(a.hostname||"")[y](":")[0][D](),c=(a[A]||"")[D](),c=1*a[pa]||("http:"==c?80:"https:"==c?443:"");a=a.pathname||"";0==a[q]("/")||(a="/"+a);return[b,""+c,a]}var d=b||J[qa]("a");d.href=J[z][xa];var e=(d[A]||"")[D](),f=c(d),Be=d[va]||"",k=e+"//"+f[0]+(f[1]?":"+f[1]:"");0==a[q]("//")?a=e+a:0==a[q]("/")?a=k+a:a&&0!=a[q]("?")?0>a[y]("/")[0][q](":")&&(a=k+f[2][B](0,f[2].lastIndexOf("/"))+"/"+a):a=k+f[2]+(a||Be);d.href=a;e=c(d);return{protocol:(d[A]||"")[D](),host:e[0],
6
+ port:e[1],path:e[2],Oa:d[va]||"",url:a||""}}function Na(a,b){function c(b,c){a.contains(b)||a.set(b,[]);a.get(b)[n](c)}for(var d=Da(b)[y]("&"),e=0;e<d[w];e++)if(d[e]){var f=d[e][q]("=");0>f?c(d[e],"1"):c(d[e][B](0,f),d[e][B](f+1))}}function Pa(a,b){if(F(a)||"["==a[ma](0)&&"]"==a[ma](a[w]-1))return"-";var c=J.domain;return a[q](c+(b&&"/"!=b?b:""))==(0==a[q]("http://")?7:0==a[q]("https://")?8:0)?"0":a};var Qa=0;function Ra(a,b,c){1<=Qa||1<=100*m.random()||ld()||(a=["utmt=error","utmerr="+a,"utmwv=5.4.7","utmn="+Ea(),"utmsp=1"],b&&a[n]("api="+b),c&&a[n]("msg="+G(c[B](0,100))),M.w&&a[n]("aip=1"),Sa(a[C]("&")),Qa++)};var Ta=0,Ua={};function N(a){return Va("x"+Ta++,a)}function Va(a,b){Ua[a]=!!b;return a}
7
+ var Wa=N(),Xa=Va("anonymizeIp"),Ya=N(),$a=N(),ab=N(),bb=N(),O=N(),P=N(),cb=N(),db=N(),eb=N(),fb=N(),gb=N(),hb=N(),ib=N(),jb=N(),kb=N(),lb=N(),nb=N(),ob=N(),pb=N(),qb=N(),rb=N(),sb=N(),tb=N(),ub=N(),vb=N(),wb=N(),xb=N(),yb=N(),zb=N(),Ab=N(),Bb=N(),Cb=N(),Db=N(),Eb=N(),Fb=N(!0),Gb=Va("currencyCode"),Hb=Va("page"),Ib=Va("title"),Jb=N(),Kb=N(),Lb=N(),Mb=N(),Nb=N(),Ob=N(),Pb=N(),Qb=N(),Rb=N(),Q=N(!0),Sb=N(!0),Tb=N(!0),Ub=N(!0),Vb=N(!0),Wb=N(!0),Zb=N(!0),$b=N(!0),ac=N(!0),bc=N(!0),cc=N(!0),R=N(!0),dc=N(!0),
8
+ ec=N(!0),fc=N(!0),gc=N(!0),hc=N(!0),ic=N(!0),jc=N(!0),S=N(!0),kc=N(!0),lc=N(!0),mc=N(!0),nc=N(!0),oc=N(!0),pc=N(!0),qc=N(!0),rc=Va("campaignParams"),sc=N(),tc=Va("hitCallback"),uc=N();N();var vc=N(),wc=N(),xc=N(),yc=N(),zc=N(),Ac=N(),Bc=N(),Cc=N(),Dc=N(),Ec=N(),Fc=N(),Gc=N(),Hc=N(),Ic=N();N();var Mc=N(),Nc=N(),Oc=N(),Oe=Va("uaName"),Pe=Va("uaDomain"),Qe=Va("uaPath");var Re=function(){function a(a,c,d){T($[x],a,c,d)}a("_createTracker",$[x].r,55);a("_getTracker",$[x].oa,0);a("_getTrackerByName",$[x].u,51);a("_getTrackers",$[x].pa,130);a("_anonymizeIp",$[x].aa,16);a("_forceSSL",$[x].la,125);a("_getPlugin",Pc,120)},Se=function(){function a(a,c,d){T(U[x],a,c,d)}Qc("_getName",$a,58);Qc("_getAccount",Wa,64);Qc("_visitCode",Q,54);Qc("_getClientInfo",ib,53,1);Qc("_getDetectTitle",lb,56,1);Qc("_getDetectFlash",jb,65,1);Qc("_getLocalGifPath",wb,57);Qc("_getServiceMode",
9
+ xb,59);V("_setClientInfo",ib,66,2);V("_setAccount",Wa,3);V("_setNamespace",Ya,48);V("_setAllowLinker",fb,11,2);V("_setDetectFlash",jb,61,2);V("_setDetectTitle",lb,62,2);V("_setLocalGifPath",wb,46,0);V("_setLocalServerMode",xb,92,void 0,0);V("_setRemoteServerMode",xb,63,void 0,1);V("_setLocalRemoteServerMode",xb,47,void 0,2);V("_setSampleRate",vb,45,1);V("_setCampaignTrack",kb,36,2);V("_setAllowAnchor",gb,7,2);V("_setCampNameKey",ob,41);V("_setCampContentKey",tb,38);V("_setCampIdKey",nb,39);V("_setCampMediumKey",
10
+ rb,40);V("_setCampNOKey",ub,42);V("_setCampSourceKey",qb,43);V("_setCampTermKey",sb,44);V("_setCampCIdKey",pb,37);V("_setCookiePath",P,9,0);V("_setMaxCustomVariables",yb,0,1);V("_setVisitorCookieTimeout",cb,28,1);V("_setSessionCookieTimeout",db,26,1);V("_setCampaignCookieTimeout",eb,29,1);V("_setReferrerOverride",Jb,49);V("_setSiteSpeedSampleRate",Dc,132);a("_trackPageview",U[x].Fa,1);a("_trackEvent",U[x].F,4);a("_trackPageLoadTime",U[x].Ea,100);a("_trackSocial",U[x].Ga,104);a("_trackTrans",U[x].Ia,
11
+ 18);a("_sendXEvent",U[x].t,78);a("_createEventTracker",U[x].ia,74);a("_getVersion",U[x].qa,60);a("_setDomainName",U[x].B,6);a("_setAllowHash",U[x].va,8);a("_getLinkerUrl",U[x].na,52);a("_link",U[x].link,101);a("_linkByPost",U[x].ua,102);a("_setTrans",U[x].za,20);a("_addTrans",U[x].$,21);a("_addItem",U[x].Y,19);a("_clearTrans",U[x].ea,105);a("_setTransactionDelim",U[x].Aa,82);a("_setCustomVar",U[x].wa,10);a("_deleteCustomVar",U[x].ka,35);a("_getVisitorCustomVar",U[x].ra,50);a("_setXKey",U[x].Ca,83);
12
+ a("_setXValue",U[x].Da,84);a("_getXKey",U[x].sa,76);a("_getXValue",U[x].ta,77);a("_clearXKey",U[x].fa,72);a("_clearXValue",U[x].ga,73);a("_createXObj",U[x].ja,75);a("_addIgnoredOrganic",U[x].W,15);a("_clearIgnoredOrganic",U[x].ba,97);a("_addIgnoredRef",U[x].X,31);a("_clearIgnoredRef",U[x].ca,32);a("_addOrganic",U[x].Z,14);a("_clearOrganic",U[x].da,70);a("_cookiePathCopy",U[x].ha,30);a("_get",U[x].ma,106);a("_set",U[x].xa,107);a("_addEventListener",U[x].addEventListener,108);a("_removeEventListener",
13
+ U[x].removeEventListener,109);a("_addDevId",U[x].V);a("_getPlugin",Pc,122);a("_setPageGroup",U[x].ya,126);a("_trackTiming",U[x].Ha,124);a("_initData",U[x].v,2);a("_setVar",U[x].Ba,22);V("_setSessionTimeout",db,27,3);V("_setCookieTimeout",eb,25,3);V("_setCookiePersistence",cb,24,1);a("_setAutoTrackOutbound",Fa,79);a("_setTrackOutboundSubdomains",Fa,81);a("_setHrefExamineLimit",Fa,80)};function Pc(a){var b=this.plugins_;if(b)return b.get(a)}
14
+ var T=function(a,b,c,d){a[b]=function(){try{return void 0!=d&&H(d),c[ya](this,arguments)}catch(a){throw Ra("exc",b,a&&a[r]),a;}}},Qc=function(a,b,c,d){U[x][a]=function(){try{return H(c),Aa(this.a.get(b),d)}catch(e){throw Ra("exc",a,e&&e[r]),e;}}},V=function(a,b,c,d,e){U[x][a]=function(f){try{H(c),void 0==e?this.a.set(b,Aa(f,d)):this.a.set(b,e)}catch(Be){throw Ra("exc",a,Be&&Be[r]),Be;}}},Te=function(a,b){return{type:b,target:a,stopPropagation:function(){throw"aborted";}}};var Rc=RegExp(/(^|\.)doubleclick\.net$/i),Sc=function(a,b){return Rc[ia](J[z].hostname)?!0:"/"!==b?!1:0!=a[q]("www.google.")&&0!=a[q](".google.")&&0!=a[q]("google.")||-1<a[q]("google.org")?!1:!0},Tc=function(a){var b=a.get(bb),c=a.c(P,"/");Sc(b,c)&&a[ta]()};var Zc=function(){var a={},b={},c=new Uc;this.g=function(a,b){c.add(a,b)};var d=new Uc;this.e=function(a,b){d.add(a,b)};var e=!1,f=!1,Be=!0;this.T=function(){e=!0};this.j=function(a){this[ka]();this.set(sc,a,!0);a=new Vc(this);e=!1;d.cb(this);e=!0;b={};this.n();a.Ja()};this.load=function(){e&&(e=!1,this.Ka(),Wc(this),f||(f=!0,c.cb(this),Xc(this),Wc(this)),e=!0)};this.n=function(){if(e)if(f)e=!1,Xc(this),e=!0;else this[ka]()};this.get=function(c){Ua[c]&&this[ka]();return void 0!==b[c]?b[c]:a[c]};this.set=
15
+ function(c,d,e){Ua[c]&&this[ka]();e?b[c]=d:a[c]=d;Ua[c]&&this.n()};this.Za=function(b){a[b]=this.b(b,0)+1};this.b=function(a,b){var c=this.get(a);return void 0==c||""===c?b:1*c};this.c=function(a,b){var c=this.get(a);return void 0==c?b:c+""};this.Ka=function(){if(Be){var b=this.c(bb,""),c=this.c(P,"/");Sc(b,c)||(a[O]=a[hb]&&""!=b?Yc(b):1,Be=!1)}}};Zc[x].stopPropagation=function(){throw"aborted";};
16
+ var Vc=function(a){var b=this;this.q=0;var c=a.get(tc);this.Ua=function(){0<b.q&&c&&(b.q--,b.q||c())};this.Ja=function(){!b.q&&c&&ca(c,10)};a.set(uc,b,!0)};function $c(a,b){b=b||[];for(var c=0;c<b[w];c++){var d=b[c];if(""+a==d||0==d[q](a+"."))return d}return"-"}
17
+ var bd=function(a,b,c){c=c?"":a.c(O,"1");b=b[y](".");if(6!==b[w]||ad(b[0],c))return!1;c=1*b[1];var d=1*b[2],e=1*b[3],f=1*b[4];b=1*b[5];if(!(0<=c&&0<d&&0<e&&0<f&&0<=b))return!1;a.set(Q,c);a.set(Vb,d);a.set(Wb,e);a.set(Zb,f);a.set($b,b);return!0},cd=function(a){var b=a.get(Q),c=a.get(Vb),d=a.get(Wb),e=a.get(Zb),f=a.b($b,1);return[a.b(O,1),void 0!=b?b:"-",c||"-",d||"-",e||"-",f][C](".")},dd=function(a){return[a.b(O,1),a.b(cc,0),a.b(R,1),a.b(dc,0)][C](".")},ed=function(a,b,c){c=c?"":a.c(O,"1");var d=
18
+ b[y](".");if(4!==d[w]||ad(d[0],c))d=null;a.set(cc,d?1*d[1]:0);a.set(R,d?1*d[2]:10);a.set(dc,d?1*d[3]:a.get(ab));return null!=d||!ad(b,c)},fd=function(a,b){var c=G(a.c(Tb,"")),d=[],e=a.get(Fb);if(!b&&e){for(var f=0;f<e[w];f++){var Be=e[f];Be&&1==Be[ua]&&d[n](f+"="+G(Be[r])+"="+G(Be[na])+"=1")}0<d[w]&&(c+="|"+d[C]("^"))}return c?a.b(O,1)+"."+c:null},gd=function(a,b,c){c=c?"":a.c(O,"1");b=b[y](".");if(2>b[w]||ad(b[0],c))return!1;b=b[ja](1)[C](".")[y]("|");0<b[w]&&a.set(Tb,I(b[0]));if(1>=b[w])return!0;
19
+ b=b[1][y](-1==b[1][q](",")?"^":",");for(c=0;c<b[w];c++){var d=b[c][y]("=");if(4==d[w]){var e={};ha(e,I(d[1]));e.value=I(d[2]);e.scope=1;a.get(Fb)[d[0]]=e}}return!0},hd=function(a,b){var c=Ue(a,b);return c?[a.b(O,1),a.b(ec,0),a.b(fc,1),a.b(gc,1),c][C]("."):""},Ue=function(a){function b(b,e){if(!F(a.get(b))){var f=a.c(b,""),f=f[y](" ")[C]("%20"),f=f[y]("+")[C]("%20");c[n](e+"="+f)}}var c=[];b(ic,"utmcid");b(nc,"utmcsr");b(S,"utmgclid");b(kc,"utmgclsrc");b(lc,"utmdclid");b(mc,"utmdsid");b(jc,"utmccn");
20
+ b(oc,"utmcmd");b(pc,"utmctr");b(qc,"utmcct");return c[C]("|")},id=function(a,b,c){c=c?"":a.c(O,"1");b=b[y](".");if(5>b[w]||ad(b[0],c))return a.set(ec,void 0),a.set(fc,void 0),a.set(gc,void 0),a.set(ic,void 0),a.set(jc,void 0),a.set(nc,void 0),a.set(oc,void 0),a.set(pc,void 0),a.set(qc,void 0),a.set(S,void 0),a.set(kc,void 0),a.set(lc,void 0),a.set(mc,void 0),!1;a.set(ec,1*b[1]);a.set(fc,1*b[2]);a.set(gc,1*b[3]);Ve(a,b[ja](4)[C]("."));return!0},Ve=function(a,b){function c(a){return(a=b[oa](a+"=(.*?)(?:\\|utm|$)"))&&
21
+ 2==a[w]?a[1]:void 0}function d(b,c){c?(c=e?I(c):c[y]("%20")[C](" "),a.set(b,c)):a.set(b,void 0)}-1==b[q]("=")&&(b=I(b));var e="2"==c("utmcvr");d(ic,c("utmcid"));d(jc,c("utmccn"));d(nc,c("utmcsr"));d(oc,c("utmcmd"));d(pc,c("utmctr"));d(qc,c("utmcct"));d(S,c("utmgclid"));d(kc,c("utmgclsrc"));d(lc,c("utmdclid"));d(mc,c("utmdsid"))},ad=function(a,b){return b?a!=b:!/^\d+$/[ia](a)};var Uc=function(){this.filters=[]};Uc[x].add=function(a,b){this.filters[n]({name:a,s:b})};Uc[x].cb=function(a){try{for(var b=0;b<this.filters[w];b++)this.filters[b].s.call(W,a)}catch(c){}};function jd(a){100!=a.get(vb)&&a.get(Q)%1E4>=100*a.get(vb)&&a[ta]()}function kd(a){ld(a.get(Wa))&&a[ta]()}function md(a){"file:"==J[z][A]&&a[ta]()}function Ge(a){He()&&a[ta]()}function nd(a){a.get(Ib)||a.set(Ib,J.title,!0);a.get(Hb)||a.set(Hb,J[z].pathname+J[z][va],!0)};var od=new function(){var a=[];this.set=function(b){a[b]=!0};this.Xa=function(){for(var b=[],c=0;c<a[w];c++)a[c]&&(b[m[la](c/6)]=b[m[la](c/6)]^1<<c%6);for(c=0;c<b[w];c++)b[c]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"[ma](b[c]||0);return b[C]("")+"~"}};function H(a){od.set(a)};var W=window,J=document,ld=function(a){var b=W._gaUserPrefs;if(b&&b.ioo&&b.ioo()||a&&!0===W["ga-disable-"+a])return!0;try{var c=W.external;if(c&&c._gaUserPrefs&&"oo"==c._gaUserPrefs)return!0}catch(d){}return!1},He=function(){return W[za]&&"preview"==W[za].loadPurpose},We=function(a,b){ca(a,b)},pd=function(a){var b=[],c=J.cookie[y](";");a=RegExp("^\\s*"+a+"=\\s*(.*?)\\s*$");for(var d=0;d<c[w];d++){var e=c[d][oa](a);e&&b[n](e[1])}return b},X=function(a,b,c,d,e,f){e=ld(e)?!1:Sc(d,c)?!1:He()?!1:!0;if(e){if(b&&
22
+ 0<=W[za].userAgent[q]("Firefox")){b=b[p](/\n|\r/g," ");e=0;for(var Be=b[w];e<Be;++e){var k=b.charCodeAt(e)&255;if(10==k||13==k)b=b[B](0,e)+"?"+b[B](e+1)}}b&&2E3<b[w]&&(b=b[B](0,2E3),H(69));a=a+"="+b+"; path="+c+"; ";f&&(a+="expires="+(new Date((new Date)[g]()+f)).toGMTString()+"; ");d&&(a+="domain="+d+";");J.cookie=a}};var qd,rd,sd=function(){if(!qd){var a={},b=W[za],c=W.screen;a.Q=c?c.width+"x"+c.height:"-";a.P=c?c.colorDepth+"-bit":"-";a.language=(b&&(b.language||b.browserLanguage)||"-")[D]();a.javaEnabled=b&&b.javaEnabled()?1:0;a.characterSet=J.characterSet||J.charset||"-";try{var d;var e=J.documentElement,f=J.body,Be=f&&f[sa]&&f[wa],b=[];e&&e[sa]&&e[wa]&&("CSS1Compat"===J.compatMode||!Be)?b=[e[sa],e[wa]]:Be&&(b=[f[sa],f[wa]]);d=0>=b[0]||0>=b[1]?"":b[C]("x");a.Wa=d}catch(k){H(135)}qd=a}},td=function(){sd();for(var a=
23
+ qd,b=W[za],a=b.appName+b.version+a.language+b.platform+b.userAgent+a.javaEnabled+a.Q+a.P+(J.cookie?J.cookie:"")+(J.referrer?J.referrer:""),b=a[w],c=W.history[w];0<c;)a+=c--^b++;return Yc(a)},ud=function(a){sd();var b=qd;a.set(Lb,b.Q);a.set(Mb,b.P);a.set(Pb,b.language);a.set(Qb,b.characterSet);a.set(Nb,b.javaEnabled);a.set(Rb,b.Wa);if(a.get(ib)&&a.get(jb)){if(!(b=rd)){var c,d,e;d="ShockwaveFlash";if((b=(b=W[za])?b.plugins:void 0)&&0<b[w])for(c=0;c<b[w]&&!e;c++)d=b[c],-1<d[r][q]("Shockwave Flash")&&
24
+ (e=d.description[y]("Shockwave Flash ")[1]);else{d=d+"."+d;try{c=new ActiveXObject(d+".7"),e=c.GetVariable("$version")}catch(f){}if(!e)try{c=new ActiveXObject(d+".6"),e="WIN 6,0,21,0",c.AllowScriptAccess="always",e=c.GetVariable("$version")}catch(Be){}if(!e)try{c=new ActiveXObject(d),e=c.GetVariable("$version")}catch(k){}e&&(e=e[y](" ")[1][y](","),e=e[0]+"."+e[1]+" r"+e[2])}b=e?e:"-"}rd=b;a.set(Ob,rd)}else a.set(Ob,"-")};var vd=function(a){if(Ba(a))this.s=a;else{var b=a[0],c=b.lastIndexOf(":"),d=b.lastIndexOf(".");this.h=this.i=this.l="";-1==c&&-1==d?this.h=b:-1==c&&-1!=d?(this.i=b[B](0,d),this.h=b[B](d+1)):-1!=c&&-1==d?(this.l=b[B](0,c),this.h=b[B](c+1)):c>d?(this.i=b[B](0,d),this.l=b[B](d+1,c),this.h=b[B](c+1)):(this.i=b[B](0,d),this.h=b[B](d+1));this.k=a[ja](1);this.Ma=!this.l&&"_require"==this.h;this.J=!this.i&&!this.l&&"_provide"==this.h}},Y=function(){T(Y[x],"push",Y[x][n],5);T(Y[x],"_getPlugin",Pc,121);T(Y[x],
25
+ "_createAsyncTracker",Y[x].Sa,33);T(Y[x],"_getAsyncTracker",Y[x].Ta,34);this.I=new Ja;this.p=[]};E=Y[x];E.Na=function(a,b,c){var d=this.I.get(a);if(!Ba(d))return!1;b.plugins_=b.plugins_||new Ja;b.plugins_.set(a,new d(b,c||{}));return!0};E.push=function(a){var b=Z.Va[ya](this,arguments),b=Z.p.concat(b);for(Z.p=[];0<b[w]&&!Z.O(b[0])&&!(b.shift(),0<Z.p[w]););Z.p=Z.p.concat(b);return 0};E.Va=function(a){for(var b=[],c=0;c<arguments[w];c++)try{var d=new vd(arguments[c]);d.J?this.O(d):b[n](d)}catch(e){}return b};
26
+ E.O=function(a){try{if(a.s)a.s[ya](W);else if(a.J)this.I.set(a.k[0],a.k[1]);else{var b="_gat"==a.i?M:"_gaq"==a.i?Z:M.u(a.i);if(a.Ma){if(!this.Na(a.k[0],b,a.k[2])){if(!a.Pa){var c=Oa(""+a.k[1]);var d=c[A],e=J[z][A];var f;if(f="https:"==d||d==e?!0:"http:"!=d?!1:"http:"==e){var Be;t:{var k=Oa(J[z][xa]);if(!(c.Oa||0<=c.url[q]("?")||0<=c[ra][q]("://")||c[u]==k[u]&&c[pa]==k[pa]))for(var s="http:"==c[A]?80:443,t=M.S,b=0;b<t[w];b++)if(c[u]==t[b][0]&&(c[pa]||s)==(t[b][1]||s)&&0==c[ra][q](t[b][2])){Be=!0;break t}Be=
27
+ !1}f=Be&&!ld()}f&&(a.Pa=Ia(c.url))}return!0}}else a.l&&(b=b.plugins_.get(a.l)),b[a.h][ya](b,a.k)}}catch(Za){}};E.Sa=function(a,b){return M.r(a,b||"")};E.Ta=function(a){return M.u(a)};var yd=function(){function a(a,b,c,d){void 0==f[a]&&(f[a]={});void 0==f[a][b]&&(f[a][b]=[]);f[a][b][c]=d}function b(a,b,c){if(void 0!=f[a]&&void 0!=f[a][b])return f[a][b][c]}function c(a,b){if(void 0!=f[a]&&void 0!=f[a][b]){f[a][b]=void 0;var c=!0,d;for(d=0;d<Be[w];d++)if(void 0!=f[a][Be[d]]){c=!1;break}c&&(f[a]=void 0)}}function d(a){var b="",c=!1,d,e;for(d=0;d<Be[w];d++)if(e=a[Be[d]],void 0!=e){c&&(b+=Be[d]);for(var c=[],f=void 0,ga=void 0,ga=0;ga<e[w];ga++)if(void 0!=e[ga]){f="";ga!=mb&&void 0==
28
+ e[ga-1]&&(f+=ga[v]()+Za);for(var Cd=e[ga],Jc="",Yb=void 0,Kc=void 0,Lc=void 0,Yb=0;Yb<Cd[w];Yb++)Kc=Cd[ma](Yb),Lc=Ma[Kc],Jc+=void 0!=Lc?Lc:Kc;f+=Jc;c[n](f)}b+=k+c[C](t)+s;c=!1}else c=!0;return b}var e=this,f=[],Be=["k","v"],k="(",s=")",t="*",Za="!",Ma={"'":"'0"};Ma[s]="'1";Ma[t]="'2";Ma[Za]="'3";var mb=1;e.Ra=function(a){return void 0!=f[a]};e.A=function(){for(var a="",b=0;b<f[w];b++)void 0!=f[b]&&(a+=b[v]()+d(f[b]));return a};e.Qa=function(a){if(void 0==a)return e.A();for(var b=a.A(),c=0;c<f[w];c++)void 0==
29
+ f[c]||a.Ra(c)||(b+=c[v]()+d(f[c]));return b};e.f=function(b,c,d){if(!wd(d))return!1;a(b,"k",c,d);return!0};e.o=function(b,c,d){if(!xd(d))return!1;a(b,"v",c,d[v]());return!0};e.getKey=function(a,c){return b(a,"k",c)};e.N=function(a,c){return b(a,"v",c)};e.L=function(a){c(a,"k")};e.M=function(a){c(a,"v")};T(e,"_setKey",e.f,89);T(e,"_setValue",e.o,90);T(e,"_getKey",e.getKey,87);T(e,"_getValue",e.N,88);T(e,"_clearKey",e.L,85);T(e,"_clearValue",e.M,86)};function wd(a){return"string"==typeof a}
30
+ function xd(a){return!("number"==typeof a||void 0!=Number&&a instanceof Number)||m.round(a)!=a||da(a)||a==ba?!1:!0};var zd=function(a){var b=W.gaGlobal;a&&!b&&(W.gaGlobal=b={});return b},Ad=function(){var a=zd(!0).hid;null==a&&(a=Ea(),zd(!0).hid=a);return a},Dd=function(a){a.set(Kb,Ad());var b=zd();if(b&&b.dh==a.get(O)){var c=b.sid;c&&(a.get(ac)?H(112):H(132),a.set(Zb,c),a.get(Sb)&&a.set(Wb,c));b=b.vid;a.get(Sb)&&b&&(b=b[y]("."),a.set(Q,1*b[0]),a.set(Vb,1*b[1]))}};var Ed,Fd=function(a,b,c,d){var e=a.c(bb,""),f=a.c(P,"/");d=void 0!=d?d:a.b(cb,0);a=a.c(Wa,"");X(b,c,f,e,a,d)},Xc=function(a){var b=a.c(bb,"");a.b(O,1);var c=a.c(P,"/"),d=a.c(Wa,"");X("__utma",cd(a),c,b,d,a.get(cb));X("__utmb",dd(a),c,b,d,a.get(db));X("__utmc",""+a.b(O,1),c,b,d);var e=hd(a,!0);e?X("__utmz",e,c,b,d,a.get(eb)):X("__utmz","",c,b,"",-1);(e=fd(a,!1))?X("__utmv",e,c,b,d,a.get(cb)):X("__utmv","",c,b,"",-1)},Wc=function(a){var b=a.b(O,1);if(!bd(a,$c(b,pd("__utma"))))return a.set(Ub,!0),!1;
31
+ var c=!ed(a,$c(b,pd("__utmb")));a.set(bc,c);id(a,$c(b,pd("__utmz")));gd(a,$c(b,pd("__utmv")));Ed=!c;return!0},Gd=function(a){Ed||0<pd("__utmb")[w]||(X("__utmd","1",a.c(P,"/"),a.c(bb,""),a.c(Wa,""),1E4),0==pd("__utmd")[w]&&a[ta]())};var h=0,Jd=function(a){void 0==a.get(Q)?Hd(a):a.get(Ub)&&!a.get(Mc)?Hd(a):a.get(bc)&&Id(a)},Kd=function(a){a.get(hc)&&!a.get(ac)&&(Id(a),a.set(fc,a.get($b)))},Hd=function(a){h++;1<h&&H(137);var b=a.get(ab);a.set(Sb,!0);a.set(Q,Ea()^td(a)&2147483647);a.set(Tb,"");a.set(Vb,b);a.set(Wb,b);a.set(Zb,b);a.set($b,1);a.set(ac,!0);a.set(cc,0);a.set(R,10);a.set(dc,b);a.set(Fb,[]);a.set(Ub,!1);a.set(bc,!1)},Id=function(a){h++;1<h&&H(137);a.set(Wb,a.get(Zb));a.set(Zb,a.get(ab));a.Za($b);a.set(ac,!0);a.set(cc,
32
+ 0);a.set(R,10);a.set(dc,a.get(ab));a.set(bc,!1)};var Ld="daum:q eniro:search_word naver:query pchome:q images.google:q google:q yahoo:p yahoo:q msn:q bing:q aol:query aol:q lycos:q lycos:query ask:q netscape:query cnn:query about:terms mamma:q voila:rdata virgilio:qs live:q baidu:wd alice:qs yandex:text najdi:q seznam:q rakuten:qt biglobe:q goo.ne:MT wp:szukaj onet:qt yam:k kvasir:q ozu:q terra:query rambler:query conduit:q babylon:q search-results:q avg:q comcast:q incredimail:q startsiden:q go.mail.ru:q search.centrum.cz:q 360.cn:q".split(" "),
33
+ Sd=function(a){if(a.get(kb)&&!a.get(Mc)){var b;b=!F(a.get(ic))||!F(a.get(nc))||!F(a.get(S))||!F(a.get(lc));for(var c={},d=0;d<Md[w];d++){var e=Md[d];c[e]=a.get(e)}(d=a.get(rc))?(H(149),e=new Ja,Na(e,d),d=e):d=La(J[z][xa],a.get(gb)).d;if("1"!=L(d.get(a.get(ub)))||!b)if(d=Xe(a,d)||Qd(a),d||b||!a.get(ac)||(Pd(a,void 0,"(direct)",void 0,void 0,void 0,"(direct)","(none)",void 0,void 0),d=!0),d&&(a.set(hc,Rd(a,c)),b="(direct)"==a.get(nc)&&"(direct)"==a.get(jc)&&"(none)"==a.get(oc),a.get(hc)||a.get(ac)&&
34
+ !b))a.set(ec,a.get(ab)),a.set(fc,a.get($b)),a.Za(gc)}},Xe=function(a,b){function c(c,d){d=d||"-";var e=L(b.get(a.get(c)));return e&&"-"!=e?I(e):d}var d=L(b.get(a.get(nb)))||"-",e=L(b.get(a.get(qb)))||"-",f=L(b.get(a.get(pb)))||"-",Be=L(b.get("gclsrc"))||"-",k=L(b.get("dclid"))||"-",s=c(ob,"(not set)"),t=c(rb,"(not set)"),Za=c(sb),Ma=c(tb);if(F(d)&&F(f)&&F(k)&&F(e))return!1;var mb=!F(f)&&!F(Be),mb=F(e)&&(!F(k)||mb),Xb=F(Za);if(mb||Xb){var Bd=Nd(a),Bd=La(Bd,!0);(Bd=Od(a,Bd))&&!F(Bd[1]&&!Bd[2])&&(mb&&
35
+ (e=Bd[0]),Xb&&(Za=Bd[1]))}Pd(a,d,e,f,Be,k,s,t,Za,Ma);return!0},Qd=function(a){var b=Nd(a),c=La(b,!0);(b=!(void 0!=b&&null!=b&&""!=b&&"0"!=b&&"-"!=b&&0<=b[q]("://")))||(b=c&&-1<c[u][q]("google")&&c.d.contains("q")&&"cse"==c[ra]);if(b)return!1;if((b=Od(a,c))&&!b[2])return Pd(a,void 0,b[0],void 0,void 0,void 0,"(organic)","organic",b[1],void 0),!0;if(b||!a.get(ac))return!1;t:{for(var b=a.get(Bb),d=Ka(c[u]),e=0;e<b[w];++e)if(-1<d[q](b[e])){a=!1;break t}Pd(a,void 0,d,void 0,void 0,void 0,"(referral)",
36
+ "referral",void 0,"/"+c[ra]);a=!0}return a},Od=function(a,b){for(var c=a.get(zb),d=0;d<c[w];++d){var e=c[d][y](":");if(-1<b[u][q](e[0][D]())){var f=b.d.get(e[1]);if(f&&(f=K(f),!f&&-1<b[u][q]("google.")&&(f="(not provided)"),!e[3]||-1<b.url[q](e[3]))){t:{for(var c=f,d=a.get(Ab),c=I(c)[D](),Be=0;Be<d[w];++Be)if(c==d[Be]){c=!0;break t}c=!1}return[e[2]||e[0],f,c]}}}return null},Pd=function(a,b,c,d,e,f,Be,k,s,t){a.set(ic,b);a.set(nc,c);a.set(S,d);a.set(kc,e);a.set(lc,f);a.set(jc,Be);a.set(oc,k);a.set(pc,
37
+ s);a.set(qc,t)},Md=[jc,ic,S,lc,nc,oc,pc,qc],Rd=function(a,b){function c(a){a=(""+a)[y]("+")[C]("%20");return a=a[y](" ")[C]("%20")}function d(c){var d=""+(a.get(c)||"");c=""+(b[c]||"");return 0<d[w]&&d==c}if(d(S)||d(lc))return H(131),!1;for(var e=0;e<Md[w];e++){var f=Md[e],Be=b[f]||"-",f=a.get(f)||"-";if(c(Be)!=c(f))return!0}return!1},Td=RegExp(/^https?:\/\/(www\.)?google(\.com?)?(\.[a-z]{2}t?)?\/?$/i),Nd=function(a){a=Pa(a.get(Jb),a.get(P));try{if(Td[ia](a))return H(136),a+"?q="}catch(b){H(145)}return a};var Ud,Vd,Wd=function(a){Ud=a.c(S,"");Vd=a.c(kc,"")},Xd=function(a){var b=a.c(S,""),c=a.c(kc,"");b!=Ud&&(-1<c[q]("ds")?a.set(mc,void 0):!F(Ud)&&-1<Vd[q]("ds")&&a.set(mc,Ud))};var Zd=function(a){Yd(a,J[z][xa])?(a.set(Mc,!0),H(12)):a.set(Mc,!1)},Yd=function(a,b){if(!a.get(fb))return!1;var c=La(b,a.get(gb)),d=K(c.d.get("__utma")),e=K(c.d.get("__utmb")),f=K(c.d.get("__utmc")),Be=K(c.d.get("__utmx")),k=K(c.d.get("__utmz")),s=K(c.d.get("__utmv")),c=K(c.d.get("__utmk"));if(Yc(""+d+e+f+Be+k+s)!=c){d=I(d);e=I(e);f=I(f);Be=I(Be);f=$d(d+e+f+Be,k,s,c);if(!f)return!1;k=f[0];s=f[1]}if(!bd(a,d,!0))return!1;ed(a,e,!0);id(a,k,!0);gd(a,s,!0);ae(a,Be,!0);return!0},ce=function(a,b,c){var d;
38
+ d=cd(a)||"-";var e=dd(a)||"-",f=""+a.b(O,1)||"-",Be=be(a)||"-",k=hd(a,!1)||"-";a=fd(a,!1)||"-";var s=Yc(""+d+e+f+Be+k+a),t=[];t[n]("__utma="+d);t[n]("__utmb="+e);t[n]("__utmc="+f);t[n]("__utmx="+Be);t[n]("__utmz="+k);t[n]("__utmv="+a);t[n]("__utmk="+s);d=t[C]("&");if(!d)return b;e=b[q]("#");if(c)return 0>e?b+"#"+d:b+"&"+d;c="";f=b[q]("?");0<e&&(c=b[B](e),b=b[B](0,e));return 0>f?b+"?"+d+c:b+"&"+d+c},$d=function(a,b,c,d){for(var e=0;3>e;e++){for(var f=0;3>f;f++){if(d==Yc(a+b+c))return H(127),[b,c];
39
+ var Be=b[p](/ /g,"%20"),k=c[p](/ /g,"%20");if(d==Yc(a+Be+k))return H(128),[Be,k];Be=Be[p](/\+/g,"%20");k=k[p](/\+/g,"%20");if(d==Yc(a+Be+k))return H(129),[Be,k];try{var s=b[oa]("utmctr=(.*?)(?:\\|utm|$)");if(s&&2==s[w]&&(Be=b[p](s[1],G(I(s[1]))),d==Yc(a+Be+c)))return H(139),[Be,c]}catch(t){}b=I(b)}c=I(c)}};var de="|",fe=function(a,b,c,d,e,f,Be,k,s){var t=ee(a,b);t||(t={},a.get(Cb)[n](t));t.id_=b;t.affiliation_=c;t.total_=d;t.tax_=e;t.shipping_=f;t.city_=Be;t.state_=k;t.country_=s;t.items_=t.items_||[];return t},ge=function(a,b,c,d,e,f,Be){a=ee(a,b)||fe(a,b,"",0,0,0,"","","");var k;t:{if(a&&a.items_){k=a.items_;for(var s=0;s<k[w];s++)if(k[s].sku_==c){k=k[s];break t}}k=null}s=k||{};s.transId_=b;s.sku_=c;s.name_=d;s.category_=e;s.price_=f;s.quantity_=Be;k||a.items_[n](s);return s},ee=function(a,b){for(var c=
40
+ a.get(Cb),d=0;d<c[w];d++)if(c[d].id_==b)return c[d];return null};var he,ie=function(a){if(!he){var b;b=J[z].hash;var c=W[r],d=/^#?gaso=([^&]*)/;if(c=(b=(b=b&&b[oa](d)||c&&c[oa](d))?b[1]:K(pd("GASO")))&&b[oa](/^(?:!([-0-9a-z.]{1,40})!)?([-.\w]{10,1200})$/i))Fd(a,"GASO",""+b,0),M._gasoDomain=a.get(bb),M._gasoCPath=a.get(P),a=c[1],Ia("https://www.google.com/analytics/web/inpage/pub/inpage.js?"+(a?"prefix="+a+"&":"")+Ea(),"_gasojs");he=!0}};var ae=function(a,b,c){c&&(b=I(b));c=a.b(O,1);b=b[y](".");2>b[w]||!/^\d+$/[ia](b[0])||(b[0]=""+c,Fd(a,"__utmx",b[C]("."),void 0))},be=function(a,b){var c=$c(a.get(O),pd("__utmx"));"-"==c&&(c="");return b?G(c):c},Ye=function(a){try{var b=La(J[z][xa],!1),c=ea(L(b.d.get("utm_referrer")))||"";c&&a.set(Jb,c);var d=ea(K(b.d.get("utm_expid")))||"";d&&(d=d[y](".")[0],a.set(Oc,""+d))}catch(e){H(146)}},l=function(a){var b=W.gaData&&W.gaData.expId;b&&a.set(Oc,""+b)};var ke=function(a,b){var c=m.min(a.b(Dc,0),100);if(a.b(Q,0)%100>=c)return!1;c=Ze()||$e();if(void 0==c)return!1;var d=c[0];if(void 0==d||d==ba||da(d))return!1;0<d?af(c)?b(je(c)):b(je(c[ja](0,1))):Ga(W,"load",function(){ke(a,b)},!1);return!0},me=function(a,b,c,d){var e=new yd;e.f(14,90,b[B](0,500));e.f(14,91,a[B](0,150));e.f(14,92,""+le(c));void 0!=d&&e.f(14,93,d[B](0,500));e.o(14,90,c);return e},af=function(a){for(var b=1;b<a[w];b++)if(da(a[b])||a[b]==ba||0>a[b])return!1;return!0},le=function(a){return da(a)||
41
+ 0>a?0:5E3>a?10*m[la](a/10):5E4>a?100*m[la](a/100):41E5>a?1E3*m[la](a/1E3):41E5},je=function(a){for(var b=new yd,c=0;c<a[w];c++)b.f(14,c+1,""+le(a[c])),b.o(14,c+1,a[c]);return b},Ze=function(){var a=W.performance||W.webkitPerformance;if(a=a&&a.timing){var b=a.navigationStart;if(0==b)H(133);else return[a.loadEventStart-b,a.domainLookupEnd-a.domainLookupStart,a.connectEnd-a.connectStart,a.responseStart-a.requestStart,a.responseEnd-a.responseStart,a.fetchStart-b,a.domInteractive-b,a.domContentLoadedEventStart-
42
+ b]}},$e=function(){if(W.top==W){var a=W.external,b=a&&a.onloadT;a&&!a.isValidLoadTime&&(b=void 0);2147483648<b&&(b=void 0);0<b&&a.setPageReadyTime();return void 0==b?void 0:[b]}};var cf=function(a){if(a.get(Sb))try{var b;t:{var c=pd(a.get(Oe)||"_ga");if(c&&!(1>c[w])){for(var d=[],e=0;e<c[w];e++){var f;var Be=c[e][y]("."),k=Be.shift();if(("GA1"==k||"1"==k)&&1<Be[w]){var s=Be.shift()[y]("-");1==s[w]&&(s[1]="1");s[0]*=1;s[1]*=1;f={Ya:s,$a:Be[C](".")}}else f=void 0;f&&d[n](f)}if(1==d[w]){b=d[0].$a;break t}if(0!=d[w]){var t=a.get(Pe)||a.get(bb),d=bf(d,(0==t[q](".")?t.substr(1):t)[y](".")[w],0);if(1==d[w]){b=d[0].$a;break t}var Za=a.get(Qe)||a.get(P);(c=Za)?(1<c[w]&&"/"==c[ma](c[w]-
43
+ 1)&&(c=c.substr(0,c[w]-1)),0!=c[q]("/")&&(c="/"+c),Za=c):Za="/";d=bf(d,"/"==Za?1:Za[y]("/")[w],1);b=d[0].$a;break t}}b=void 0}if(b){var Ma=(""+b)[y](".");2==Ma[w]&&/[0-9.]/[ia](Ma)&&(H(114),a.set(Q,Ma[0]),a.set(Vb,Ma[1]),a.set(Sb,!1))}}catch(mb){H(115)}},bf=function(a,b,c){for(var d=[],e=[],f=128,Be=0;Be<a[w];Be++){var k=a[Be];if(k.Ya[c]==b)d[n](k);else if(k.Ya[c]==f)e[n](k);else k.Ya[c]<f&&(e=[k],f=k.Ya[c])}return 0<d[w]?d:e};var U=function(a,b,c){function d(a){return function(b){if((b=b.get(Nc)[a])&&b[w])for(var c=Te(e,a),d=0;d<b[w];d++)b[d].call(e,c)}}var e=this;this.a=new Zc;this.get=function(a){return this.a.get(a)};this.set=function(a,b,c){this.a.set(a,b,c)};this.set(Wa,b||"UA-XXXXX-X");this.set($a,a||"");this.set(Ya,c||"");this.set(ab,m.round((new Date)[g]()/1E3));this.set(P,"/");this.set(cb,63072E6);this.set(eb,15768E6);this.set(db,18E5);this.set(fb,!1);this.set(yb,50);this.set(gb,!1);this.set(hb,!0);this.set(ib,
44
+ !0);this.set(jb,!0);this.set(kb,!0);this.set(lb,!0);this.set(ob,"utm_campaign");this.set(nb,"utm_id");this.set(pb,"gclid");this.set(qb,"utm_source");this.set(rb,"utm_medium");this.set(sb,"utm_term");this.set(tb,"utm_content");this.set(ub,"utm_nooverride");this.set(vb,100);this.set(Dc,1);this.set(Ec,!1);this.set(wb,"/__utm.gif");this.set(xb,1);this.set(Cb,[]);this.set(Fb,[]);this.set(zb,Ld[ja](0));this.set(Ab,[]);this.set(Bb,[]);this.B("auto");this.set(Jb,J.referrer);Ye(this.a);this.set(Nc,{hit:[],
45
+ load:[]});this.a.g("0",Zd);this.a.g("1",Wd);this.a.g("2",Jd);this.a.g("3",cf);this.a.g("4",Sd);this.a.g("5",Xd);this.a.g("6",Kd);this.a.g("7",d("load"));this.a.g("8",ie);this.a.e("A",kd);this.a.e("B",md);this.a.e("C",Ge);this.a.e("D",Jd);this.a.e("E",jd);this.a.e("F",Tc);this.a.e("G",ne);this.a.e("H",Gd);this.a.e("I",nd);this.a.e("J",ud);this.a.e("K",Dd);this.a.e("L",l);this.a.e("M",d("hit"));this.a.e("N",oe);this.a.e("O",pe);0===this.get(ab)&&H(111);this.a.T();this.H=void 0};E=U[x];
46
+ E.m=function(){var a=this.get(Db);a||(a=new yd,this.set(Db,a));return a};E.La=function(a){for(var b in a){var c=a[b];a.hasOwnProperty(b)&&this.set(b,c,!0)}};E.K=function(a){if(this.get(Ec))return!1;var b=this,c=ke(this.a,function(c){b.set(Hb,a,!0);b.t(c)});this.set(Ec,c);return c};E.Fa=function(a){a&&Ca(a)?(H(13),this.set(Hb,a,!0)):"object"===typeof a&&null!==a&&this.La(a);this.H=a=this.get(Hb);this.a.j("page");this.K(a)};
47
+ E.F=function(a,b,c,d,e){if(""==a||!wd(a)||""==b||!wd(b)||void 0!=c&&!wd(c)||void 0!=d&&!xd(d))return!1;this.set(wc,a,!0);this.set(xc,b,!0);this.set(yc,c,!0);this.set(zc,d,!0);this.set(vc,!!e,!0);this.a.j("event");return!0};E.Ha=function(a,b,c,d,e){var f=this.a.b(Dc,0);1*e===e&&(f=e);if(this.a.b(Q,0)%100>=f)return!1;c=1*(""+c);if(""==a||!wd(a)||""==b||!wd(b)||!xd(c)||da(c)||0>c||0>f||100<f||void 0!=d&&(""==d||!wd(d)))return!1;this.t(me(a,b,c,d));return!0};
48
+ E.Ga=function(a,b,c,d){if(!a||!b)return!1;this.set(Ac,a,!0);this.set(Bc,b,!0);this.set(Cc,c||J[z][xa],!0);d&&this.set(Hb,d,!0);this.a.j("social");return!0};E.Ea=function(){this.set(Dc,10);this.K(this.H)};E.Ia=function(){this.a.j("trans")};E.t=function(a){this.set(Eb,a,!0);this.a.j("event")};E.ia=function(a){this.v();var b=this;return{_trackEvent:function(c,d,e){H(91);b.F(a,c,d,e)}}};E.ma=function(a){return this.get(a)};
49
+ E.xa=function(a,b){if(a)if(Ca(a))this.set(a,b);else if("object"==typeof a)for(var c in a)a.hasOwnProperty(c)&&this.set(c,a[c])};E.addEventListener=function(a,b){var c=this.get(Nc)[a];c&&c[n](b)};E.removeEventListener=function(a,b){for(var c=this.get(Nc)[a],d=0;c&&d<c[w];d++)if(c[d]==b){c.splice(d,1);break}};E.qa=function(){return"5.4.7"};E.B=function(a){this.get(hb);a="auto"==a?Ka(J.domain):a&&"-"!=a&&"none"!=a?a[D]():"";this.set(bb,a)};E.va=function(a){this.set(hb,!!a)};
50
+ E.na=function(a,b){return ce(this.a,a,b)};E.link=function(a,b){if(this.a.get(fb)&&a){var c=ce(this.a,a,b);J[z].href=c}};E.ua=function(a,b){this.a.get(fb)&&a&&a.action&&(a.action=ce(this.a,a.action,b))};
51
+ E.za=function(){this.v();var a=this.a,b=J.getElementById?J.getElementById("utmtrans"):J.utmform&&J.utmform.utmtrans?J.utmform.utmtrans:null;if(b&&b[na]){a.set(Cb,[]);for(var b=b[na][y]("UTM:"),c=0;c<b[w];c++){b[c]=Da(b[c]);for(var d=b[c][y](de),e=0;e<d[w];e++)d[e]=Da(d[e]);"T"==d[0]?fe(a,d[1],d[2],d[3],d[4],d[5],d[6],d[7],d[8]):"I"==d[0]&&ge(a,d[1],d[2],d[3],d[4],d[5],d[6])}}};E.$=function(a,b,c,d,e,f,Be,k){return fe(this.a,a,b,c,d,e,f,Be,k)};E.Y=function(a,b,c,d,e,f){return ge(this.a,a,b,c,d,e,f)};
52
+ E.Aa=function(a){de=a||"|"};E.ea=function(){this.set(Cb,[])};E.wa=function(a,b,c,d){var e=this.a;if(0>=a||a>e.get(yb))a=!1;else if(!b||!c||128<b[w]+c[w])a=!1;else{1!=d&&2!=d&&(d=3);var f={};ha(f,b);f.value=c;f.scope=d;e.get(Fb)[a]=f;a=!0}a&&this.a.n();return a};E.ka=function(a){this.a.get(Fb)[a]=void 0;this.a.n()};E.ra=function(a){return(a=this.a.get(Fb)[a])&&1==a[ua]?a[na]:void 0};E.Ca=function(a,b,c){this.m().f(a,b,c)};E.Da=function(a,b,c){this.m().o(a,b,c)};
53
+ E.sa=function(a,b){return this.m().getKey(a,b)};E.ta=function(a,b){return this.m().N(a,b)};E.fa=function(a){this.m().L(a)};E.ga=function(a){this.m().M(a)};E.ja=function(){return new yd};E.W=function(a){a&&this.get(Ab)[n](a[D]())};E.ba=function(){this.set(Ab,[])};E.X=function(a){a&&this.get(Bb)[n](a[D]())};E.ca=function(){this.set(Bb,[])};E.Z=function(a,b,c,d,e){if(a&&b){a=[a,b[D]()][C](":");if(d||e)a=[a,d,e][C](":");d=this.get(zb);d.splice(c?0:d[w],0,a)}};E.da=function(){this.set(zb,[])};
54
+ E.ha=function(a){this.a[ka]();var b=this.get(P),c=be(this.a);this.set(P,a);this.a.n();ae(this.a,c);this.set(P,b)};E.ya=function(a,b){if(0<a&&5>=a&&Ca(b)&&""!=b){var c=this.get(Fc)||[];c[a]=b;this.set(Fc,c)}};E.V=function(a){a=""+a;if(a[oa](/^[A-Za-z0-9]{1,5}$/)){var b=this.get(Ic)||[];b[n](a);this.set(Ic,b)}};E.v=function(){this.a[ka]()};E.Ba=function(a){a&&""!=a&&(this.set(Tb,a),this.a.j("var"))};var ne=function(a){"trans"!==a.get(sc)&&500<=a.b(cc,0)&&a[ta]();if("event"===a.get(sc)){var b=(new Date)[g](),c=a.b(dc,0),d=a.b(Zb,0),c=m[la]((b-(c!=d?c:1E3*c))/1E3*1);0<c&&(a.set(dc,b),a.set(R,m.min(10,a.b(R,0)+c)));0>=a.b(R,0)&&a[ta]()}},pe=function(a){"event"===a.get(sc)&&a.set(R,m.max(0,a.b(R,10)-1))};var qe=function(){var a=[];this.add=function(b,c,d){d&&(c=G(""+c));a[n](b+"="+c)};this.toString=function(){return a[C]("&")}},re=function(a,b){(b||2!=a.get(xb))&&a.Za(cc)},se=function(a,b){b.add("utmwv","5.4.7");b.add("utms",a.get(cc));b.add("utmn",Ea());var c=J[z].hostname;F(c)||b.add("utmhn",c,!0);c=a.get(vb);100!=c&&b.add("utmsp",c,!0)},te=function(a,b){b.add("utmht",(new Date)[g]());b.add("utmac",Da(a.get(Wa)));a.get(Oc)&&b.add("utmxkey",a.get(Oc),!0);a.get(vc)&&b.add("utmni",1);var c=a.get(Ic);
55
+ c&&0<c[w]&&b.add("utmdid",c[C]("."));ff(a,b);!1!==a.get(Xa)&&(a.get(Xa)||M.w)&&b.add("aip",1);M.bb||(M.bb=a.get(Wa));(1<M.ab()||M.bb!=a.get(Wa))&&b.add("utmmt",1);b.add("utmu",od.Xa())},ue=function(a,b){for(var c=a.get(Fc)||[],d=[],e=1;e<c[w];e++)c[e]&&d[n](e+":"+G(c[e][p](/%/g,"%25")[p](/:/g,"%3A")[p](/,/g,"%2C")));d[w]&&b.add("utmpg",d[C](","))},ff=function(a,b){function c(a,b){b&&d[n](a+"="+b+";")}var d=[];c("__utma",cd(a));c("__utmz",hd(a,!1));c("__utmv",fd(a,!0));c("__utmx",be(a));b.add("utmcc",
56
+ d[C]("+"),!0)},ve=function(a,b){a.get(ib)&&(b.add("utmcs",a.get(Qb),!0),b.add("utmsr",a.get(Lb)),a.get(Rb)&&b.add("utmvp",a.get(Rb)),b.add("utmsc",a.get(Mb)),b.add("utmul",a.get(Pb)),b.add("utmje",a.get(Nb)),b.add("utmfl",a.get(Ob),!0))},we=function(a,b){a.get(lb)&&a.get(Ib)&&b.add("utmdt",a.get(Ib),!0);b.add("utmhid",a.get(Kb));b.add("utmr",Pa(a.get(Jb),a.get(P)),!0);b.add("utmp",G(a.get(Hb),!0),!0)},xe=function(a,b){for(var c=a.get(Db),d=a.get(Eb),e=a.get(Fb)||[],f=0;f<e[w];f++){var Be=e[f];Be&&
57
+ (c||(c=new yd),c.f(8,f,Be[r]),c.f(9,f,Be[na]),3!=Be[ua]&&c.f(11,f,""+Be[ua]))}F(a.get(wc))||F(a.get(xc),!0)||(c||(c=new yd),c.f(5,1,a.get(wc)),c.f(5,2,a.get(xc)),e=a.get(yc),void 0!=e&&c.f(5,3,e),e=a.get(zc),void 0!=e&&c.o(5,1,e));c?b.add("utme",c.Qa(d),!0):d&&b.add("utme",d.A(),!0)},ye=function(a,b,c){var d=new qe;re(a,c);se(a,d);d.add("utmt","tran");d.add("utmtid",b.id_,!0);d.add("utmtst",b.affiliation_,!0);d.add("utmtto",b.total_,!0);d.add("utmttx",b.tax_,!0);d.add("utmtsp",b.shipping_,!0);d.add("utmtci",
58
+ b.city_,!0);d.add("utmtrg",b.state_,!0);d.add("utmtco",b.country_,!0);xe(a,d);ve(a,d);we(a,d);(b=a.get(Gb))&&d.add("utmcu",b,!0);c||(ue(a,d),te(a,d));return d[v]()},ze=function(a,b,c){var d=new qe;re(a,c);se(a,d);d.add("utmt","item");d.add("utmtid",b.transId_,!0);d.add("utmipc",b.sku_,!0);d.add("utmipn",b.name_,!0);d.add("utmiva",b.category_,!0);d.add("utmipr",b.price_,!0);d.add("utmiqt",b.quantity_,!0);xe(a,d);ve(a,d);we(a,d);(b=a.get(Gb))&&d.add("utmcu",b,!0);c||(ue(a,d),te(a,d));return d[v]()},
59
+ Ae=function(a,b){var c=a.get(sc);if("page"==c)c=new qe,re(a,b),se(a,c),xe(a,c),ve(a,c),we(a,c),b||(ue(a,c),te(a,c)),c=[c[v]()];else if("event"==c)c=new qe,re(a,b),se(a,c),c.add("utmt","event"),xe(a,c),ve(a,c),we(a,c),b||(ue(a,c),te(a,c)),c=[c[v]()];else if("var"==c)c=new qe,re(a,b),se(a,c),c.add("utmt","var"),!b&&te(a,c),c=[c[v]()];else if("trans"==c)for(var c=[],d=a.get(Cb),e=0;e<d[w];++e){c[n](ye(a,d[e],b));for(var f=d[e].items_,Be=0;Be<f[w];++Be)c[n](ze(a,f[Be],b))}else"social"==c?b?c=[]:(c=new qe,
60
+ re(a,b),se(a,c),c.add("utmt","social"),c.add("utmsn",a.get(Ac),!0),c.add("utmsa",a.get(Bc),!0),c.add("utmsid",a.get(Cc),!0),xe(a,c),ve(a,c),we(a,c),ue(a,c),te(a,c),c=[c[v]()]):"feedback"==c?b?c=[]:(c=new qe,re(a,b),se(a,c),c.add("utmt","feedback"),c.add("utmfbid",a.get(Gc),!0),c.add("utmfbpr",a.get(Hc),!0),xe(a,c),ve(a,c),we(a,c),ue(a,c),te(a,c),c=[c[v]()]):c=[];return c},oe=function(a){var b,c=a.get(xb),d=a.get(uc),e=d&&d.Ua,f=0;if(0==c||2==c){var Be=a.get(wb)+"?";b=Ae(a,!0);for(var k=0,s=b[w];k<
61
+ s;k++)Sa(b[k],e,Be,!0),f++}if(1==c||2==c)for(b=Ae(a),k=0,s=b[w];k<s;k++)try{Sa(b[k],e),f++}catch(t){t&&Ra(t[r],void 0,t.message)}d&&(d.q=f)};var Ce=function(a){ha(this,"len");this.message=a+"-8192"},De=function(a){ha(this,"ff2post");this.message=a+"-2036"},Sa=function(a,b,c,d){b=b||Fa;if(d||2036>=a[w])gf(a,b,c);else if(8192>=a[w]){if(0<=W[za].userAgent[q]("Firefox")&&![].reduce)throw new De(a[w]);hf(a,b)||Ee(a,b)}else throw new Ce(a[w]);},gf=function(a,b,c){c=c||("https:"==J[z][A]||M.G?"https://ssl.google-analytics.com":"http://www.google-analytics.com")+"/__utm.gif?";var d=new Image(1,1);d.src=c+a;d.onload=function(){d.onload=null;d.onerror=
62
+ null;b()};d.onerror=function(){d.onload=null;d.onerror=null;b()}},hf=function(a,b){var c,d=("https:"==J[z][A]||M.G?"https://ssl.google-analytics.com":"http://www.google-analytics.com")+"/p/__utm.gif",e=W.XDomainRequest;if(e)c=new e,c.open("POST",d);else if(e=W.XMLHttpRequest)e=new e,"withCredentials"in e&&(c=e,c.open("POST",d,!0),c.setRequestHeader("Content-Type","text/plain"));if(c)return c.onreadystatechange=function(){4==c.readyState&&(b(),c=null)},c.send(a),!0},Ee=function(a,b){if(J.body){a=aa(a);
63
+ try{var c=J[qa]('<iframe name="'+a+'"></iframe>')}catch(d){c=J[qa]("iframe"),ha(c,a)}c.height="0";c.width="0";c.style.display="none";c.style.visibility="hidden";var e=J[z],e=("https:"==J[z][A]||M.G?"https://ssl.google-analytics.com":"http://www.google-analytics.com")+"/u/post_iframe.html#"+aa(e[A]+"//"+e[u]+"/favicon.ico"),f=function(){c.src="";c.parentNode&&c.parentNode.removeChild(c)};Ga(W,"beforeunload",f);var Be=!1,k=0,s=function(){if(!Be){try{if(9<k||c.contentWindow[z][u]==J[z][u]){Be=!0;f();
64
+ Ha(W,"beforeunload",f);b();return}}catch(a){}k++;ca(s,200)}};Ga(c,"load",s);J.body.appendChild(c);c.src=e}else We(function(){Ee(a,b)},100)};var $=function(){this.G=this.w=!1;this.C={};this.D=[];this.U=0;this.S=[["www.google-analytics.com","","/plugins/"]];this._gasoCPath=this._gasoDomain=this.bb=void 0;Re();Se()};E=$[x];E.oa=function(a,b){return this.r(a,void 0,b)};E.r=function(a,b,c){b&&H(23);c&&H(67);void 0==b&&(b="~"+M.U++);a=new U(b,a,c);M.C[b]=a;M.D[n](a);return a};E.u=function(a){a=a||"";return M.C[a]||M.r(void 0,a)};E.pa=function(){return M.D[ja](0)};E.ab=function(){return M.D[w]};E.aa=function(){this.w=!0};
65
+ E.la=function(){this.G=!0};var Fe=function(a){if("prerender"==J.webkitVisibilityState)return!1;a();return!0};var M=new $;var Ie=W._gat;Ie&&Ba(Ie._getTracker)?M=Ie:W._gat=M;var Z=new Y;(function(a){if(!Fe(a)){H(123);var b=!1,c=function(){!b&&Fe(a)&&(b=!0,Ha(J,"webkitvisibilitychange",c))};Ga(J,"webkitvisibilitychange",c)}})(function(){var a=W._gaq,b=!1;if(a&&Ba(a[n])&&(b="[object Ar