TNTFrance - Version 1.0

Version Notes

Extension officielle vous permettant de proposer les services TNT à vos clients.

Download this release

Release Info

Developer Magento Core Team
Extension TNTFrance
Version 1.0
Comparing to
See all releases


Version 1.0

Files changed (39) hide show
  1. app/code/community/Infostrates/Tnt/Block/Onepage/Shipping/Method/Available.php +69 -0
  2. app/code/community/Infostrates/Tnt/Block/Onepage/Shipping/Method/Available/Item.php +6 -0
  3. app/code/community/Infostrates/Tnt/Block/Sales/Impression.php +16 -0
  4. app/code/community/Infostrates/Tnt/Block/Sales/Order/Shipment/View.php +100 -0
  5. app/code/community/Infostrates/Tnt/Block/Sales/Shipment/Grid.php +103 -0
  6. app/code/community/Infostrates/Tnt/Helper/Data.php +5 -0
  7. app/code/community/Infostrates/Tnt/Model/Shipping/Carrier/Tnt.php +427 -0
  8. app/code/community/Infostrates/Tnt/Model/Shipping/Carrier/Tnt/Source/Labelformat.php +16 -0
  9. app/code/community/Infostrates/Tnt/Model/Shipping/Carrier/Tnt/Source/Method.php +38 -0
  10. app/code/community/Infostrates/Tnt/controllers/Sales/ImpressionController.php +135 -0
  11. app/code/community/Infostrates/Tnt/controllers/Sales/Order/ShipmentController.php +193 -0
  12. app/code/community/Infostrates/Tnt/controllers/TntController.php +170 -0
  13. app/code/community/Infostrates/Tnt/etc/config.xml +196 -0
  14. app/code/community/Infostrates/Tnt/etc/system.xml +272 -0
  15. app/code/community/Infostrates/Tnt/sql/tnt_setup/mysql4-uninstall-1.0.0.php +11 -0
  16. app/design/adminhtml/default/tnt/template/sales/order/invoice/create/form.phtml +85 -0
  17. app/design/adminhtml/default/tnt/template/sales/order/invoice/create/tracking.phtml +90 -0
  18. app/design/adminhtml/default/tnt/template/sales/order/shipment/create/form.phtml +113 -0
  19. app/design/frontend/default/default/layout/tnt.xml +25 -0
  20. app/design/frontend/default/default/template/tnt/form/failure.phtml +14 -0
  21. app/design/frontend/default/default/template/tnt/onepage/shipping_method.phtml +21 -0
  22. app/design/frontend/default/default/template/tnt/onepage/shipping_method/available.phtml +134 -0
  23. app/etc/modules/Infostrates_Tnt.xml +24 -0
  24. js/tnt/jquery_162.js +19 -0
  25. media/pdf_bt/100000053.pdf +0 -0
  26. media/pdf_bt/100000054.pdf +0 -0
  27. media/pdf_bt/100000055.pdf +0 -0
  28. media/pdf_bt/index.html +0 -0
  29. package.xml +18 -0
  30. skin/adminhtml/default/tnt/images/calendar.gif +0 -0
  31. skin/frontend/default/default/css/tnt/jquery.superbox.css +26 -0
  32. skin/frontend/default/default/css/tnt/tnt.css +20 -0
  33. skin/frontend/default/default/images/tnt/tnt_j.png +0 -0
  34. skin/frontend/default/default/images/tnt/tnt_jd.png +0 -0
  35. skin/frontend/default/default/images/tnt/tnt_jz.png +0 -0
  36. skin/frontend/default/default/images/tnt/tnt_sure_we_can.png +0 -0
  37. skin/frontend/default/default/images/tnt/tnt_t.png +0 -0
  38. skin/frontend/default/default/js/tnt/jquery.superbox.js +585 -0
  39. skin/frontend/default/default/js/tnt/tnt.js +141 -0
app/code/community/Infostrates/Tnt/Block/Onepage/Shipping/Method/Available.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Infostrates_Tnt_Block_Onepage_Shipping_Method_Available extends Mage_Checkout_Block_Onepage_Shipping_Method_Available
3
+ {
4
+ protected $_itemRenders = array();
5
+
6
+ public function __construct()
7
+ {
8
+ parent::__construct();
9
+
10
+ //Rendu par défaut
11
+ $this->addItemRender(
12
+ 'default',
13
+ 'tnt/onepage_shipping_method_available',
14
+ 'tnt/onepage/shipping_method/available/default.phtml'
15
+ );
16
+ }
17
+
18
+ /**
19
+ * Ajoute une correspondance dans la table des rendus des modes de livraison.
20
+ * Cela permet de personnaliser l'affichage d'un mode de livraison parmi la
21
+ * liste des modes proposés lors du passage d'une commande.
22
+ * @param string $type
23
+ * @param string $block
24
+ * @param string $template
25
+ * @return LaPoste_SoColissimoSimplicite_Block_Onepage_Shipping_Method_Available
26
+ */
27
+ public function addItemRender($type, $block, $template)
28
+ {
29
+ $this->_itemRenders[$type] = array(
30
+ 'block' => $block,
31
+ 'template' => $template,
32
+ 'blockInstance' => null
33
+ );
34
+ return $this;
35
+ }
36
+
37
+ /**
38
+ * Retourne le renderer approprié selon le mode de livraison.
39
+ * Le renderer par défaut est "default".
40
+ * @param string $type exemples : default|socolissimosimplicite
41
+ * @return array
42
+ */
43
+ public function getItemRenderer($type)
44
+ {
45
+ if (!isset($this->_itemRenders[$type])) {
46
+ $type = 'default';
47
+ }
48
+ if (is_null($this->_itemRenders[$type]['blockInstance'])) {
49
+ $this->_itemRenders[$type]['blockInstance'] = $this->getLayout()
50
+ ->createBlock($this->_itemRenders[$type]['block'])
51
+ ->setTemplate($this->_itemRenders[$type]['template'])
52
+ ->setRenderedBlock($this);
53
+ }
54
+
55
+ return $this->_itemRenders[$type]['blockInstance'];
56
+ }
57
+
58
+ /**
59
+ * Retourne le code html du mode de livraison donné.
60
+ * @param Mage_Shipping_Model_Carrier_Abstract $item
61
+ * @return string
62
+ */
63
+ public function getItemHtml($item)
64
+ {
65
+ //le code html retourné dépend du mode de livraison
66
+ $renderer = $this->getItemRenderer($item->getMethod())->setRate($item);
67
+ return $renderer->toHtml();
68
+ }
69
+ }
app/code/community/Infostrates/Tnt/Block/Onepage/Shipping/Method/Available/Item.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+ class Infostrates_Tnt_Block_Onepage_Shipping_Method_Available_Item
3
+ extends Mage_Checkout_Block_Onepage_Shipping_Method_Available
4
+ {
5
+
6
+ }
app/code/community/Infostrates/Tnt/Block/Sales/Impression.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Infostrates_Tnt_Block_Sales_Impression extends Mage_Adminhtml_Block_Widget_Grid_Container
4
+ {
5
+
6
+
7
+ public function __construct()
8
+ {
9
+ $this->_blockGroup = 'tnt';
10
+ $this->_controller = 'sales_shipment';
11
+ $this->_headerText = Mage::helper('tnt')->__('Suivi des expéditions TNT');
12
+ parent::__construct();
13
+ $this->_removeButton('add');
14
+ }
15
+
16
+ }
app/code/community/Infostrates/Tnt/Block/Sales/Order/Shipment/View.php ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Infostrates_Tnt_Block_Sales_Order_Shipment_View extends Mage_Adminhtml_Block_Widget_Form_Container
3
+ {
4
+
5
+ public function __construct()
6
+ {
7
+ $this->_objectId = 'shipment_id';
8
+ $this->_controller = 'sales_order_shipment';
9
+ $this->_mode = 'view';
10
+
11
+ parent::__construct();
12
+
13
+ $this->_removeButton('reset');
14
+ $this->_removeButton('delete');
15
+ $this->_updateButton('save', 'label', Mage::helper('sales')->__('Send Tracking Information'));
16
+ $this->_updateButton('save', 'onclick', "setLocation('".$this->getEmailUrl()."')");
17
+
18
+ //Ajout de l'impression de l'étiquette
19
+ $_order = $this->getShipment()->getOrder();
20
+
21
+ $_shippingMethod = explode("_",$_order->getShippingMethod());
22
+ if ($_shippingMethod[0] == 'tnt') {
23
+ $this->_addButton('etiquette', array(
24
+ 'label' => Mage::helper('tnt')->__('Etiquette TNT'),
25
+ 'class' => 'save',
26
+ 'onclick' => 'window.open(\'' . $this->getPrintTntUrl() . '\')'
27
+ )
28
+ );
29
+ }
30
+
31
+ if ($this->getShipment()->getId()) {
32
+ $this->_addButton('print', array(
33
+ 'label' => Mage::helper('sales')->__('Print'),
34
+ 'class' => 'save',
35
+ 'onclick' => 'setLocation(\''.$this->getPrintUrl().'\')'
36
+ )
37
+ );
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Retrieve shipment model instance
43
+ *
44
+ * @return Mage_Sales_Model_Order_Shipment
45
+ */
46
+ public function getShipment()
47
+ {
48
+ return Mage::registry('current_shipment');
49
+ }
50
+
51
+ public function getHeaderText()
52
+ {
53
+ if ($this->getShipment()->getEmailSent()) {
54
+ $emailSent = Mage::helper('sales')->__('Shipment email sent');
55
+ }
56
+ else {
57
+ $emailSent = Mage::helper('sales')->__('Shipment email not sent');
58
+ }
59
+
60
+ $header = Mage::helper('sales')->__('Shipment #%s (%s)', $this->getShipment()->getIncrementId(), $emailSent);
61
+ return $header;
62
+ }
63
+
64
+ public function getBackUrl()
65
+ {
66
+ return $this->getUrl(
67
+ '*/sales_order/view',
68
+ array(
69
+ 'order_id' => $this->getShipment()->getOrderId(),
70
+ 'active_tab'=> 'order_shipments'
71
+ ));
72
+ }
73
+
74
+ public function getEmailUrl()
75
+ {
76
+ return $this->getUrl('*/sales_order_shipment/email', array('shipment_id' => $this->getShipment()->getId()));
77
+ }
78
+
79
+ public function getPrintUrl()
80
+ {
81
+ return $this->getUrl('*/*/print', array(
82
+ 'invoice_id' => $this->getShipment()->getId()
83
+ ));
84
+ }
85
+
86
+ public function getPrintTntUrl()
87
+ {
88
+ return $this->getUrl('tnt/sales_impression/print', array(
89
+ 'shipment_id' => $this->getShipment()->getId()
90
+ ));
91
+ }
92
+
93
+ public function updateBackButtonUrl($flag)
94
+ {
95
+ if ($flag) {
96
+ return $this->_updateButton('back', 'onclick', 'setLocation(\'' . $this->getUrl('*/sales_shipment/') . '\')');
97
+ }
98
+ return $this;
99
+ }
100
+ }
app/code/community/Infostrates/Tnt/Block/Sales/Shipment/Grid.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Infostrates_Tnt_Block_Sales_Shipment_Grid extends Mage_Adminhtml_Block_Widget_Grid
4
+ {
5
+
6
+ public function __construct()
7
+ {
8
+ parent::__construct();
9
+ $this->setId('sales_shipment_grid');
10
+ $this->setDefaultSort('order_created_at');
11
+ $this->setDefaultDir('DESC');
12
+ }
13
+
14
+ /**
15
+ * Retrieve collection class
16
+ *
17
+ * @return string
18
+ */
19
+ protected function _getCollectionClass()
20
+ {
21
+ return 'sales/order_shipment_grid_collection';
22
+ }
23
+
24
+ protected function _prepareCollection()
25
+ {
26
+ $collection = Mage::getResourceModel($this->_getCollectionClass());
27
+ $collection->distinct(true);
28
+ $collection->getSelect()->columns(array('shipment_created_at' => 'main_table.created_at'));
29
+ $collection->getSelect()->join(array('ost' => $collection->getTable('sales/shipment_track')), 'main_table.entity_id = ost.parent_id');
30
+ $collection->addFieldToFilter('ost.carrier_code', array('like' => 'tnt%'));
31
+ $collection->getSelect()->group('main_table.entity_id');
32
+ $this->setCollection($collection);
33
+ return parent::_prepareCollection();
34
+ }
35
+
36
+ protected function _prepareColumns()
37
+ {
38
+ $this->addColumn('increment_id', array(
39
+ 'header' => Mage::helper('sales')->__('Shipment #'),
40
+ 'index' => 'increment_id',
41
+ 'type' => 'text',
42
+ ));
43
+
44
+ $this->addColumn('shipment_created_at', array(
45
+ 'header' => Mage::helper('sales')->__('Date Shipped'),
46
+ 'index' => 'shipment_created_at',
47
+ 'type' => 'datetime',
48
+ ));
49
+
50
+ $this->addColumn('order_increment_id', array(
51
+ 'header' => Mage::helper('sales')->__('Order #'),
52
+ 'index' => 'order_increment_id',
53
+ 'type' => 'number',
54
+ ));
55
+
56
+ $this->addColumn('order_created_at', array(
57
+ 'header' => Mage::helper('sales')->__('Order Date'),
58
+ 'index' => 'order_created_at',
59
+ 'type' => 'datetime',
60
+ ));
61
+
62
+ $this->addColumn('shipping_name', array(
63
+ 'header' => Mage::helper('sales')->__('Ship to Name'),
64
+ 'index' => 'shipping_name',
65
+ ));
66
+
67
+ $this->addColumn('total_qty', array(
68
+ 'header' => Mage::helper('sales')->__('Total Qty'),
69
+ 'index' => 'total_qty',
70
+ 'type' => 'number',
71
+ ));
72
+
73
+ return parent::_prepareColumns();
74
+ }
75
+
76
+ public function getRowUrl($row)
77
+ {
78
+ if (!Mage::getSingleton('admin/session')->isAllowed('sales/order/shipment')) {
79
+ return false;
80
+ }
81
+ }
82
+
83
+ protected function _prepareMassaction()
84
+ {
85
+ $this->setMassactionIdField('entity_id');
86
+ $this->getMassactionBlock()->setFormFieldName('shipment_ids');
87
+ $this->getMassactionBlock()->setUseSelectAll(false);
88
+
89
+ // Impression des étiquettes
90
+ $this->getMassactionBlock()->addItem('pdfshipments_order', array(
91
+ 'label'=> Mage::helper('sales')->__('Imprimer les étiquettes'),
92
+ 'url' => $this->getUrl('tnt/sales_impression/printMass'),
93
+ ));
94
+
95
+ return $this;
96
+ }
97
+
98
+ public function getGridUrl()
99
+ {
100
+ return $this->getUrl('*/*/*', array('_current' => true));
101
+ }
102
+
103
+ }
app/code/community/Infostrates/Tnt/Helper/Data.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+ class Infostrates_Tnt_Helper_Data extends Mage_Core_Helper_Abstract
3
+ {
4
+
5
+ }
app/code/community/Infostrates/Tnt/Model/Shipping/Carrier/Tnt.php ADDED
@@ -0,0 +1,427 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Infostrates_Tnt_Model_Shipping_Carrier_Tnt extends Mage_Usa_Model_Shipping_Carrier_Abstract implements Mage_Shipping_Model_Carrier_Interface
4
+ {
5
+
6
+ protected $_code = 'tnt';
7
+ protected $_request = null;
8
+ protected $_result = null;
9
+ protected $_gatewayUrl = 'http://www.tnt.fr/service/?wsdl';
10
+
11
+ public function collectRates(Mage_Shipping_Model_Rate_Request $request)
12
+ {
13
+ $quote = Mage::getSingleton('checkout/session')->getQuote();
14
+
15
+ if (!$this->getConfigFlag('active') || $quote->getShippingAddress()->getCountryId() != 'FR') {
16
+ return false;
17
+ }
18
+
19
+ if( date('D') == 'Sat' ) {
20
+ $date = date('Y-m-d', mktime(0, 0, 0, date("m") , date("d")+2, date("Y")));
21
+
22
+ } elseif( date('D') == 'Sun' ) {
23
+ $date = date('Y-m-d', mktime(0, 0, 0, date("m") , date("d")+1, date("Y")));
24
+ } else {
25
+ $date = date('Y-m-d');
26
+ }
27
+ //vérification des informations du compte saisies dans l'admin
28
+ $sender = array('zipCode' => $this->getConfigData('code_postal'), 'city' => $this->getConfigData('ville'));
29
+ $receiver = array('zipCode' => $this->getConfigData('code_postal'), 'city' => $this->getConfigData('ville'));
30
+ $feasi_params = array('shippingDate' => $date, 'accountNumber' => $this->getConfigData('account'), 'sender' => $sender, 'receiver' => $receiver );
31
+ $feasi_result = Mage::getModel('tnt/shipping_carrier_tnt')->_tnt_feasibility( $feasi_params );
32
+
33
+ if( is_string($feasi_result) ) {
34
+ return false;
35
+ }
36
+
37
+ $this->setRequest($request);
38
+
39
+ //checker la feasibility des services choisis par les commercant via le webservice
40
+ $r = $this->_rawRequest;
41
+
42
+ $allMethods = Mage::getModel('tnt/shipping_carrier_tnt_source_method')->toOptionArray();
43
+
44
+ //version Lite
45
+ $allowedMethods = explode(",", "JZ,J,JD");
46
+ //version Full
47
+ //$allowedMethods = explode(",", $this->getConfigData('allowed_methods'));
48
+
49
+ $servicesDispos = array();
50
+
51
+ foreach ($allMethods as $oneMethod) {
52
+ //si la methode est choisie par le commercant
53
+ if( in_array($oneMethod['value'], $allowedMethods) ) {
54
+ if( $oneMethod['value'] == 'JD' ||
55
+ (!preg_match("/Z/", $oneMethod['value']) && $quote->getShippingAddress()->getCompany() != '') ||
56
+ (preg_match("/Z/", $oneMethod['value']) && $quote->getShippingAddress()->getCompany() == '') ) {
57
+ $servicesDispos[] = array("serviceCode" => $oneMethod['value'], "serviceLabel" => $oneMethod['label'], "serviceDescription" => $oneMethod['description'], "serviceLien" => $oneMethod['lien'], "serviceLogo" => $oneMethod['logo']);
58
+ }
59
+ }
60
+ }
61
+ $this->_result = $this->_parseTntFeasibilityResponse($servicesDispos);
62
+
63
+ return $this->getResult();
64
+ }
65
+
66
+ public function setRequest(Mage_Shipping_Model_Rate_Request $request)
67
+ {
68
+ $this->_request = $request;
69
+
70
+ $r = new Varien_Object();
71
+
72
+ if ($request->getLimitMethod()) {
73
+ $r->setService($request->getLimitMethod());
74
+ }
75
+
76
+ if ($request->getTntAccount()) {
77
+ $r->setTntAccount($request->getTntAccount());
78
+ } else {
79
+ $r->setTntAccount($this->getConfigData('account'));
80
+ }
81
+
82
+ if ($request->getExpZipCode()) {
83
+ $r->setExpZipCode($request->getExpZipCode());
84
+ } else {
85
+ $r->setExpZipCode(Mage::getStoreConfig('carriers/tnt/code_postal', $this->getStore()));
86
+ }
87
+
88
+ if ($request->getExpCity()) {
89
+ $r->setExpCity($request->getExpCity());
90
+ } else {
91
+ $r->setExpCity(Mage::getStoreConfig('carriers/tnt/ville', $this->getStore()));
92
+ }
93
+
94
+ if ($request->getDestPostcode()) {
95
+ $r->setDestPostcode($request->getDestPostcode());
96
+ } else {
97
+ }
98
+
99
+ if ($request->getDestCity()) {
100
+ $r->setDestCity($request->getDestCity());
101
+ } else {
102
+ }
103
+
104
+ $this->_rawRequest = $r;
105
+
106
+ return $this;
107
+ }
108
+
109
+ public function getResult()
110
+ {
111
+ return $this->_result;
112
+ }
113
+
114
+ //permet de requeter le WS
115
+ protected function ws_tnt_communication($fonction, $parametres) {
116
+ $url = $this->getConfigData('gateway_url');
117
+ $username = $this->getConfigData('identifiant');
118
+ $password = $this->getConfigData('mdp');
119
+
120
+ $authheader = sprintf('
121
+ <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
122
+ <wsse:UsernameToken>
123
+ <wsse:Username>%s</wsse:Username>
124
+ <wsse:Password>%s</wsse:Password>
125
+ </wsse:UsernameToken>
126
+ </wsse:Security>', htmlspecialchars($username), htmlspecialchars( $password ));
127
+
128
+ $authvars = new SoapVar($authheader, XSD_ANYXML);
129
+ $header = new SoapHeader("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security", $authvars);
130
+
131
+ $soap = new SoapClient($url, array('trace'=>1));
132
+ $soap->__setSOAPHeaders(array($header));
133
+
134
+ try {
135
+ if($fonction == 'feasibility') {
136
+ $result = $soap->feasibility( array('parameters' => $parametres) );
137
+ }
138
+ if($fonction == 'dropOffPoints') {
139
+ $result = $soap->dropOffPoints($parametres);
140
+ }
141
+ if($fonction == 'citiesGuide') {
142
+ $result = $soap->citiesGuide($parametres);
143
+ }
144
+ if($fonction == 'expeditionCreation') {
145
+ $result = $soap->expeditionCreation( $parametres );
146
+ }
147
+ } catch (Exception $e) {
148
+ $result = $e->getMessage();
149
+ }
150
+
151
+ return $result;
152
+ }
153
+
154
+ /*
155
+ * Test de feasibility via le WS
156
+ * $params = array(params,array sender,array receiver)
157
+ */
158
+ public function _tnt_feasibility($params)
159
+ {
160
+ $debugData = array();
161
+ $fonction = 'feasibility';
162
+ $results = array();
163
+
164
+ $result = $this->ws_tnt_communication($fonction, $params);
165
+
166
+ if( is_string($result) ) {
167
+ $debugData['result'] = array('error' => $result);
168
+ $results = $result;
169
+ } else {
170
+ $nb = count($result->Service);
171
+
172
+ if ($nb > 1) {
173
+ // Cas où une liste de services est renvoyée
174
+ foreach ($result->Service as $Service) {
175
+ $results[] = array("serviceCode" => $Service->serviceCode, "serviceLabel" => $Service->serviceLabel." (".$Service->dueDate.")");
176
+ }
177
+ } elseif($nb == 1) {
178
+ $Service = $result->Service;
179
+ $results[] = array("serviceCode" => $Service->serviceCode, "serviceLabel" => $Service->serviceLabel." (".$Service->dueDate.")");
180
+ } else {
181
+ // Cas où aucun service n'est renvoyé
182
+ }
183
+ }
184
+
185
+ $this->_debug($debugData);
186
+
187
+ return $results;
188
+ }
189
+
190
+ //Retourne les services choisis par le commercant
191
+ protected function _parseTntFeasibilityResponse($servicesDispos)
192
+ {
193
+ $already_showed = array();
194
+
195
+ $result = Mage::getModel('shipping/rate_result');
196
+ $rate = Mage::getModel('shipping/rate_result_method');
197
+ $totalCart = Mage::getModel('checkout/session')->getQuote()->getGrandTotal();
198
+
199
+ $items = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();
200
+ $shipping_weight = 0;
201
+ foreach($items as $item) {
202
+ $shipping_weight += ($item->getWeight() * $item->getQty()) ;
203
+ }
204
+
205
+ if (empty($servicesDispos)) {
206
+ $error = Mage::getModel('shipping/rate_result_error');
207
+ $error->setCarrier($this->_code);
208
+ $error->setCarrierTitle($this->getConfigData('title'));
209
+ $error->setErrorMessage($this->getConfigData('specificerrmsg'));
210
+ $result->append($error);
211
+ } else {
212
+ foreach ($servicesDispos as $m) {
213
+ if(in_array($m['serviceLabel'],$already_showed)) { continue; } else { $already_showed[] = $m['serviceLabel']; }
214
+
215
+ $rate = Mage::getModel('shipping/rate_result_method');
216
+ $rate->setCarrier($this->_code);
217
+ $rate->setCarrierTitle($this->getConfigData('title'));
218
+ $rate->setMethod( $m['serviceCode'] );
219
+ $rate->setMethodTitle( $m['serviceLabel'] );
220
+ $rate->setMethodDescription( $m['serviceDescription']."|||".$m['serviceLien']."|||".$m['serviceLogo'] );
221
+
222
+ if( $this->getConfigData($m['serviceCode'].'_free') != 0 && $this->getConfigData($m['serviceCode'].'_free') <= $totalCart ) {
223
+ $rate->setPrice( '0' );
224
+ } else {
225
+ $table = split("[:,]" , $this->getConfigData($m['serviceCode'].'_amount'));
226
+ $tarifTrouve=true;
227
+ //si le commercant choisi un forfait plutot qu'une table de correspondance poids:prix
228
+ if(count($table) == 1) {
229
+ $tarif = $table[0];
230
+ } else {
231
+ for ($i = 0; $i < sizeof($table); $i+=2) {
232
+ if ($shipping_weight > $table[$i])
233
+ continue;
234
+ if (($shipping_weight <= $table[$i]) AND $tarifTrouve) {
235
+ $tarif=$table[$i+1];
236
+ $tarifTrouve=false;
237
+ }
238
+ }
239
+ }
240
+
241
+ $rate->setPrice( $tarif );
242
+ }
243
+
244
+ $result->append($rate);
245
+ }
246
+ }
247
+
248
+ return $result;
249
+ }
250
+
251
+ //Récupération des villes en fonction du CP via le WS
252
+ public function _tnt_citiesGuide($cp)
253
+ {
254
+ $debugData = array();
255
+ $fonction = 'citiesGuide';
256
+ $city = '';
257
+
258
+ $parametres = array('zipCode' => $cp);
259
+
260
+ $result = $this->ws_tnt_communication($fonction, $parametres);
261
+
262
+ if( is_string($result) ) {
263
+ $debugData['result'] = array('error' => $result);
264
+ $city = $result;
265
+ } else {
266
+ if( isset($result->City) && count($result->City) > 1 ) {
267
+ foreach ($result->City as $City) {
268
+ $city[] = array("name" => $City->name, "zipCode" => $City->zipCode);
269
+ }
270
+ } elseif( isset($result->City) && count($result->City) > 0 ) {
271
+ $City = $result->City;
272
+ $city[] = array("name" => $City->name, "zipCode" => $City->zipCode);
273
+ } else {
274
+ // Cas où aucune ville n'est renvoyée
275
+ $city = "Le code postal de votre adresse de livraison n'est pas correct.";
276
+ }
277
+ }
278
+
279
+ $this->_debug($debugData);
280
+
281
+ return $city;
282
+ }
283
+
284
+ //Récupération des points relais pour l'CP/ville par defaut via le WS
285
+ public function _tnt_dropOffPoints($cp,$ville)
286
+ {
287
+ $debugData = array();
288
+ $fonction = 'dropOffPoints';
289
+ $pointsDispos = array();
290
+
291
+ $parametres = array('zipCode' => $cp, 'city' => $ville);
292
+
293
+ $result = $this->ws_tnt_communication($fonction, $parametres);
294
+
295
+ if( is_string($result) ) {
296
+ $debugData['result'] = array('error' => $result);
297
+ $pointsDispos = $result;
298
+ } else {
299
+ if (isset($result->DropOffPoint) && count($result->DropOffPoint) > 1) {
300
+ foreach ($result->DropOffPoint as $Point) {
301
+ $pointsDispos[] = array("xETTCode" => $Point->xETTCode,
302
+ "name" => $Point->name,
303
+ "address1" => $Point->address1,
304
+ "zipCode" => $Point->zipCode,
305
+ "city" => $Point->city,
306
+ "geolocalisationUrl" => $Point->geolocalisationUrl,
307
+ "openingHours" => array( "monday" => $Point->openingHours->monday,
308
+ "tuesday" => $Point->openingHours->tuesday,
309
+ "wednesday" => $Point->openingHours->wednesday,
310
+ "thursday" => $Point->openingHours->thursday,
311
+ "friday" => $Point->openingHours->friday,
312
+ "saturday" => $Point->openingHours->saturday,
313
+ "sunday" => $Point->openingHours->sunday
314
+ ));
315
+ }
316
+ } elseif(isset($result->DropOffPoint) && count($result->DropOffPoint) == 1) {
317
+ $Point = $result->DropOffPoint;
318
+ $pointsDispos[] = array("xETTCode" => $Point->xETTCode,
319
+ "name" => $Point->name,
320
+ "address1" => $Point->address1,
321
+ "zipCode" => $Point->zipCode,
322
+ "city" => $Point->city,
323
+ "geolocalisationUrl" => $Point->geolocalisationUrl,
324
+ "openingHours" => array( "monday" => $Point->openingHours->monday,
325
+ "tuesday" => $Point->openingHours->tuesday,
326
+ "wednesday" => $Point->openingHours->wednesday,
327
+ "thursday" => $Point->openingHours->thursday,
328
+ "friday" => $Point->openingHours->friday,
329
+ "saturday" => $Point->openingHours->saturday,
330
+ "sunday" => $Point->openingHours->sunday
331
+ ));
332
+ } else {
333
+ // Cas où aucun PR n'est renvoyé
334
+ }
335
+ }
336
+
337
+ $this->_debug($debugData);
338
+
339
+ return $pointsDispos;
340
+ }
341
+
342
+ //Création d'une expé via le WS
343
+ public function _tnt_exp_crea($params)
344
+ {
345
+ $debugData = array();
346
+ $fonction = 'expeditionCreation';
347
+ $parcels = array();
348
+
349
+ $result = $this->ws_tnt_communication($fonction, $params);
350
+
351
+ if( is_string($result) ) {
352
+ $debugData['result'] = array('error' => $result);
353
+ $parcels = $result;
354
+ } else {
355
+ $parcels['pdfLabels'] = $result->Expedition->PDFLabels;
356
+
357
+ if( count($result->Expedition->parcelResponses) > 1 ) {
358
+ foreach ($result->Expedition->parcelResponses as $parcelResponses) {
359
+ $parcels[] = array("sequenceNumber" => $parcelResponses->sequenceNumber,
360
+ "parcelNumber" => $parcelResponses->parcelNumber,
361
+ "trackingURL" => $parcelResponses->trackingURL);
362
+ }
363
+ } elseif( count($result->Expedition->parcelResponses) > 0 ) {
364
+ $parcelResponses = $result->Expedition->parcelResponses;
365
+ $parcels[] = array("sequenceNumber" => $parcelResponses->sequenceNumber,
366
+ "parcelNumber" => $parcelResponses->parcelNumber,
367
+ "trackingURL" => $parcelResponses->trackingURL);
368
+ } else {
369
+ // Cas où aucune expé n'est renvoyée
370
+ }
371
+ }
372
+
373
+ $this->_debug($debugData);
374
+
375
+ return $parcels;
376
+ }
377
+
378
+ public function getAllowedMethods() {
379
+ $allowed = explode(',', $this->getConfigData('allowed_methods'));
380
+ $arr = array();
381
+ foreach ($allowed as $k) {
382
+ $arr[$k] = $this->getCode('method', $k);
383
+ }
384
+ return $arr;
385
+ }
386
+
387
+
388
+ public function isTrackingAvailable()
389
+ {
390
+ return true;
391
+ }
392
+
393
+ public function getTrackingInfo($tracking_number)
394
+ {
395
+ $tracking_result = $this->getTracking($tracking_number);
396
+
397
+ if ($tracking_result instanceof Mage_Shipping_Model_Tracking_Result)
398
+ {
399
+ if ($trackings = $tracking_result->getAllTrackings())
400
+ {
401
+ return $trackings[0];
402
+ }
403
+ }
404
+ elseif (is_string($tracking_result) && !empty($tracking_result))
405
+ {
406
+ return $tracking_result;
407
+ }
408
+
409
+ return false;
410
+ }
411
+
412
+ protected function getTracking($tracking_number)
413
+ {
414
+ $tracking_url = $this->getConfigData('tracking_url').$tracking_number;
415
+
416
+ $tracking_result = Mage::getModel('shipping/tracking_result');
417
+
418
+ $tracking_status = Mage::getModel('shipping/tracking_result_status');
419
+ $tracking_status->setCarrier($this->_code)
420
+ ->setCarrierTitle($this->getConfigData('title'))
421
+ ->setTracking($tracking_number)
422
+ ->setUrl($tracking_url);
423
+ $tracking_result->append($tracking_status);
424
+
425
+ return $tracking_result;
426
+ }
427
+ }
app/code/community/Infostrates/Tnt/Model/Shipping/Carrier/Tnt/Source/Labelformat.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Infostrates_Tnt_Model_Shipping_Carrier_Tnt_Source_Labelformat
4
+ {
5
+ public function toOptionArray()
6
+ {
7
+ return array(
8
+ array(
9
+ 'value'=>'STDA4',
10
+ 'label'=>Mage::helper('tnt')->__('Impression A4 standard')),
11
+ array(
12
+ 'value'=>'THERMAL',
13
+ 'label'=>Mage::helper('tnt')->__('Impression pour imprimante thermique'))
14
+ );
15
+ }
16
+ }
app/code/community/Infostrates/Tnt/Model/Shipping/Carrier/Tnt/Source/Method.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Infostrates_Tnt_Model_Shipping_Carrier_Tnt_Source_Method
4
+ {
5
+ public function toOptionArray()
6
+ {
7
+ return array(
8
+ array(
9
+ 'value'=>'JZ',
10
+ 'label'=>Mage::helper('tnt')->__('TNT 24h à Domicile : Votre colis livré demain matin chez vous.'),
11
+ 'description'=>Mage::helper('tnt')->__("Livraison en main propre contre signature, en 24h après expédition de votre commande, et avant 13h*, du lundi au samedi* de 8H à 13H**. En cas d'absence ou d'impossibilité de livraison, le colis est déposé dans le Relais Colis® le plus proche, et vous pouvez le retirer le jour même dès 14h.<br />
12
+ <span class='rem1'>* Livraison le samedi uniquement dans les principales agglomérations. Pas de livraison les dimanches et jours fériés.** ou en début d'après-midi dans les zones rurales.</span>"),
13
+ 'lien'=> 'http://www.tnt.fr/BtoC/page_domicile.html',
14
+ 'logo'=> 'tnt_jz.png'),
15
+ /*array(
16
+ 'value'=>'T',
17
+ 'label'=>Mage::helper('tnt')->__('10:00 Express au bureau'),
18
+ 'description'=>Mage::helper('tnt')->__("Colis livré avant 10 heures (ou en fin de matinée dans les zones rurales), le lendemain de sa prise en charge par TNT, en France métropolitaine.
19
+ En cas d'impossibilité de livrer le destinataire, livraison automatique le jour même dans le Relais Colis® le plus proche."),
20
+ 'lien'=> "",
21
+ 'logo'=> 'tnt_t.png'),*/
22
+ array(
23
+ 'value'=>'J',
24
+ 'label'=>Mage::helper('tnt')->__("TNT 24h Entreprise : Votre colis livré demain matin à l'adresse indiquée."),
25
+ 'description'=>Mage::helper('tnt')->__("Livraison en main propre contre signature, en 24h après expédition de votre commande, et avant 13h*, du lundi au vendredi de 8H à 13H**. En cas d'absence ou d'impossibilité de livraison, le colis est retourné à l'agence TNT de distribution en attente de vos instructions.<br />
26
+ <span class='rem1'>*Pas de livraison les samedis, dimanches et jours fériés.** ou en début d'après-midi dans les zones rurales.</span>"),
27
+ 'lien'=> "",
28
+ 'logo'=> 'tnt_j.png'),
29
+ array(
30
+ 'value'=>'JD',
31
+ 'label'=>Mage::helper('tnt')->__('TNT 24h en Relais Colis® : Votre colis livré demain matin dans le Relais Colis® de votre choix.'),
32
+ 'description'=>Mage::helper('tnt')->__("Livraison en 24h, après expédition de votre commande, dans l'un des 4000 Relais Colis® partout en France métropolitaine. Retrait possible dés 14h et distribution après vérification d’une pièce d'identité et contre signature.<br />
33
+ <span class='rem1'>* Livraison le samedi uniquement dans les principales agglomérations. Pas de livraison les dimanches et jours fériés.** ou en début d'après-midi dans les zones rurales.</span>"),
34
+ 'lien'=> "http://www.tnt.fr/BtoC/page_relais-colis.html",
35
+ 'logo'=> 'tnt_jd.png'),
36
+ );
37
+ }
38
+ }
app/code/community/Infostrates/Tnt/controllers/Sales/ImpressionController.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Infostrates_Tnt_Sales_ImpressionController extends Mage_Adminhtml_Controller_Action
4
+ {
5
+ /**
6
+ * Additional initialization
7
+ *
8
+ */
9
+ protected function _construct()
10
+ {
11
+ $this->setUsedModuleName('Infostrates_Tnt');
12
+ }
13
+
14
+
15
+ /**
16
+ * Shipping grid
17
+ */
18
+ public function indexAction()
19
+ {
20
+ $this->loadLayout()
21
+ ->_setActiveMenu('sales/tnt')
22
+ ->_addContent($this->getLayout()->createBlock('tnt/sales_impression'))
23
+ ->renderLayout();
24
+ }
25
+
26
+ public function getConfigData($field)
27
+ {
28
+ $path = 'carriers/tnt/'.$field;
29
+ return Mage::getStoreConfig($path, Mage::app()->getStore());
30
+ }
31
+
32
+ protected function _processDownload($resource, $resourceType)
33
+ {
34
+ $helper = Mage::helper('downloadable/download');
35
+
36
+ $helper->setResource($resource, $resourceType);
37
+
38
+ $fileName = $helper->getFilename();
39
+ $contentType = $helper->getContentType();
40
+
41
+ $this->getResponse()
42
+ ->setHttpResponseCode(200)
43
+ ->setHeader('Pragma', 'public', true)
44
+ ->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true)
45
+ ->setHeader('Content-type', $contentType, true);
46
+
47
+ if ($fileSize = $helper->getFilesize()) {
48
+ $this->getResponse()
49
+ ->setHeader('Content-Length', $fileSize);
50
+ }
51
+
52
+ if ($contentDisposition = $helper->getContentDisposition()) {
53
+ $this->getResponse()
54
+ ->setHeader('Content-Disposition', $contentDisposition . '; filename='.$fileName);
55
+ }
56
+
57
+ $this->getResponse()
58
+ ->clearBody();
59
+ $this->getResponse()
60
+ ->sendHeaders();
61
+
62
+ $helper->output();
63
+ }
64
+
65
+ protected function getEtiquetteUrl($shipmentsIds)
66
+ {
67
+ //On récupère les infos d'expédition
68
+ if (is_array($shipmentsIds))
69
+ {
70
+ $path = Mage::getBaseDir('media').'/pdf_bt/';
71
+ $pdfDocs = array();
72
+
73
+ for ($i = 0; $i < count($shipmentsIds); $i++)
74
+ {
75
+ $shipmentId = Mage::getModel('sales/order_shipment_track')->load($shipmentsIds[$i])->getParentId();
76
+ $orderNum = Mage::getModel('sales/order_shipment')->load($shipmentId)->getOrder()->getRealOrderId();
77
+
78
+ // Array of the pdf files need to be merged
79
+ $pdfDocs[] = $path.$orderNum.'.pdf';
80
+ }
81
+
82
+ $filename = $path."tnt_pdf.pdf";
83
+
84
+ $cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$filename ";
85
+ //Add each pdf file to the end of the command
86
+ for($i=0; $i<count($pdfDocs);$i++) {
87
+ $cmd .= $pdfDocs[$i]." ";
88
+ }
89
+ $result = shell_exec($cmd);
90
+ $filename = "tnt_pdf.pdf";
91
+ }
92
+ else
93
+ {
94
+ $shipmentId = $shipmentsIds;
95
+
96
+ $orderNum = Mage::getModel('sales/order_shipment')->load($shipmentId)->getOrder()->getRealOrderId();
97
+
98
+ $filename = $orderNum.'.pdf';
99
+ };
100
+ return $filename;
101
+ }
102
+
103
+ public function printMassAction()
104
+ {
105
+ $path = Mage::getBaseUrl('media').'pdf_bt/';
106
+ $shipmentsIds = $this->getRequest()->getPost('shipment_ids');
107
+
108
+ try {
109
+ $filename = $this->getEtiquetteUrl($shipmentsIds);
110
+
111
+ $this->_processDownload($path.$filename, 'url');
112
+ exit(0);
113
+ } catch (Mage_Core_Exception $e) {
114
+ $this->_getSession()->addError(Mage::helper('tnt')->__('Impossible de récupérer les BT : '.$filename));
115
+ }
116
+ return $this->_redirectReferer();
117
+ }
118
+
119
+ public function printAction()
120
+ {
121
+ $path = Mage::getBaseUrl('media').'pdf_bt/';
122
+ $shipmentId = $this->getRequest()->getParam('shipment_id');
123
+
124
+ try {
125
+ $filename = $this->getEtiquetteUrl($shipmentId);
126
+
127
+ $this->_processDownload($path.$filename, 'url');
128
+ exit(0);
129
+ } catch (Mage_Core_Exception $e) {
130
+ $this->_getSession()->addError(Mage::helper('tnt')->__('Impossible de récupérer le BT : '.$filename));
131
+ }
132
+ return $this->_redirectReferer();
133
+ }
134
+
135
+ }
app/code/community/Infostrates/Tnt/controllers/Sales/Order/ShipmentController.php ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once 'Mage/Adminhtml/controllers/Sales/Order/ShipmentController.php';
3
+ class Infostrates_Tnt_Sales_Order_ShipmentController extends Mage_Adminhtml_Sales_Order_ShipmentController
4
+ {
5
+
6
+ /**
7
+ * Save shipment
8
+ * We can save only new shipment. Existing shipments are not editable
9
+ */
10
+
11
+ public function getConfigData($field)
12
+ {
13
+ $path = 'carriers/tnt/'.$field;
14
+ return Mage::getStoreConfig($path, Mage::app()->getStore());
15
+ }
16
+
17
+ public function dateFR( $dateUS ) {
18
+ $tmp = explode('-',$dateUS);
19
+
20
+ $dateFR = $tmp[2].'-'.$tmp[1].'-'.$tmp[0];
21
+
22
+ return $dateFR;
23
+ }
24
+
25
+ public function saveAction()
26
+ {
27
+ $data = $this->getRequest()->getPost('shipment');
28
+
29
+ try {
30
+
31
+ if ($shipment = $this->_initShipment()) {
32
+
33
+ $_order = $shipment->getOrder();
34
+
35
+ $_shippingMethod = explode("_",$_order->getShippingMethod());
36
+
37
+ //Expédition via TNT on créé une expé. et on récupère le tracking num via le WS.
38
+ if ($_shippingMethod[0] == 'tnt') {
39
+
40
+ // On met en place les paramètres de la requète pour l'expédition
41
+ $send_city = $this->getConfigData('ville');
42
+
43
+ $rec_typeid = '';
44
+ $rec_name = '';
45
+
46
+ if($_shippingMethod['1'] == "A" || $_shippingMethod['1'] == "T" || $_shippingMethod['1'] == "M" || $_shippingMethod['1'] == "J") {
47
+ $rec_type = 'ENTERPRISE';
48
+ $rec_name = trim($_order->getShippingAddress()->getCompany());
49
+ } elseif($_shippingMethod['1'] == "AZ" || $_shippingMethod['1'] == "TZ" || $_shippingMethod['1'] == "MZ" || $_shippingMethod['1'] == "JZ") {
50
+ $rec_type = 'INDIVIDUAL';
51
+ } else {
52
+ $rec_type = 'DROPOFFPOINT';
53
+ $extt = explode(' ',trim($_order->getShippingAddress()->getCompany()));
54
+ $rec_typeid = end($extt);
55
+ $rec_name = str_replace($rec_typeid, '', $_order->getShippingAddress()->getCompany());
56
+ }
57
+
58
+ $rec_address = $_order->getShippingAddress()->getStreet();
59
+ if (!isset($rec_address[1]))
60
+ {
61
+ $rec_address[1] = '';
62
+ }
63
+
64
+ $nb_colis = $this->getRequest()->getPost('nb_colis');
65
+ $date_expe = $this->dateFR( $this->getRequest()->getPost('shippingDate') );
66
+
67
+ $parcelsRequest = array();
68
+
69
+ $poids_restant = $_order->getWeight();
70
+ for($i=1;$i<=$nb_colis;$i++) {
71
+ if($i == $nb_colis) {
72
+ if( $poids_restant > $this->getConfigData('max_package_weight') ) {
73
+ $parcelWeight = $this->getConfigData('max_package_weight');
74
+ } else {
75
+ $parcelWeight = $poids_restant;
76
+ }
77
+ } else {
78
+ $parcelWeight = $this->getConfigData('max_package_weight');
79
+ $poids_restant = $poids_restant - $parcelWeight;
80
+ }
81
+
82
+ if($parcelWeight < 0) {
83
+ $parcelWeight = 1;
84
+ }
85
+
86
+ $parcelsRequest[] = array('sequenceNumber'=>$i,'customerReference' => $_order->getRealOrderId(), 'weight' => $parcelWeight);
87
+ }
88
+
89
+ $rec_city = $_order->getShippingAddress()->getCity();
90
+
91
+ $sender = array('zipCode' => $this->getConfigData('code_postal'), 'city' => $send_city);
92
+ $receiver = array('zipCode' => $_order->getShippingAddress()->getPostcode(), 'city' => $rec_city, 'type' => $rec_type);
93
+ $feasi_params = array('shippingDate' => $date_expe, 'accountNumber' => $this->getConfigData('account'), 'sender' => $sender, 'receiver' => $receiver );
94
+ $feasi_result = Mage::getModel('tnt/shipping_carrier_tnt')->_tnt_feasibility( $feasi_params );
95
+
96
+ if( is_string($feasi_result) ) {
97
+ Throw new Exception( $feasi_result );
98
+ }
99
+
100
+ $params = array('parameters' => array( 'shippingDate' => $date_expe,
101
+ 'accountNumber' => $this->getConfigData('account'),
102
+ 'sender' => array( 'name' => $this->getConfigData('raison_sociale'),
103
+ 'address1' => $this->getConfigData('adresse'),
104
+ 'address2' => $this->getConfigData('adresse2'),
105
+ 'zipCode' => $this->getConfigData('code_postal'),
106
+ 'city' => $send_city
107
+ ),
108
+ 'receiver' => array( 'type' => $rec_type,
109
+ 'typeId' => $rec_typeid,
110
+ 'name' => $rec_name,
111
+ 'address1' => $rec_address[0],
112
+ 'address2' => $rec_address[1],
113
+ 'zipCode' => $_order->getShippingAddress()->getPostcode(),
114
+ 'city' => $rec_city,
115
+ 'contactLastName' => substr($_order->getShippingAddress()->getLastname(),0,12),
116
+ 'contactFirstName' => substr($_order->getShippingAddress()->getFirstname(),0,19),
117
+ 'emailAddress' => $_order->getShippingAddress()->getEmail(),
118
+ 'phoneNumber' => $_order->getShippingAddress()->getTelephone()
119
+ ),
120
+ 'serviceCode' => $_shippingMethod[1],
121
+ 'quantity' => $nb_colis,
122
+ 'parcelsRequest' => $parcelsRequest,
123
+ 'labelFormat' => $this->getConfigData('label_format')
124
+ )
125
+ );
126
+
127
+
128
+ $parcels = Mage::getModel('tnt/shipping_carrier_tnt')->_tnt_exp_crea($params);
129
+
130
+ if( is_string($parcels) ) {
131
+ Throw new Exception( $this->__($parcels) );
132
+ }
133
+
134
+ //on créé le fichier PDF
135
+ $path = Mage::getBaseDir('media').'/pdf_bt/';
136
+ $filename = $_order->getRealOrderId().".pdf";
137
+
138
+ if($parcels['pdfLabels'] && !file_exists($path.$filename)) {
139
+ if( $handle = fopen($path.$filename, 'x+') ) {
140
+ fwrite($handle, $parcels['pdfLabels']);
141
+ fclose($handle);
142
+ } else {
143
+ Throw new Exception( $this->__("Impossible de créer le BT. Vérifiez que le repertoire /media/pdf_bt/ à les droits en écriture.") );
144
+ }
145
+ }
146
+
147
+ foreach($parcels as $parcel) {
148
+ if(is_array($parcel)) {
149
+ $track = Mage::getModel('sales/order_shipment_track')
150
+ ->setNumber($parcel['parcelNumber'])
151
+ ->setCarrier('TNT')
152
+ ->setCarrierCode($_shippingMethod[0])
153
+ ->setTitle('TNT')
154
+ ->setPopup(1);
155
+ $shipment->addTrack($track);
156
+ }
157
+ }
158
+ }
159
+
160
+ $shipment->register();
161
+ $comment = '';
162
+ if (!empty($data['comment_text'])) {
163
+ $shipment->addComment($data['comment_text'], isset($data['comment_customer_notify']));
164
+ $comment = $data['comment_text'];
165
+ }
166
+
167
+ if (!empty($data['send_email'])) {
168
+ $shipment->setEmailSent(true);
169
+ }
170
+
171
+ $shipment->getCreatedAt($date_expe);
172
+ $shipment->getUpdatedAt($date_expe);
173
+
174
+ $this->_saveShipment($shipment);
175
+ $shipment->sendEmail(!empty($data['send_email']), $comment);
176
+ $this->_getSession()->addSuccess($this->__('Shipment was successfully created.'));
177
+ $this->_redirect('adminhtml/sales_order/view', array('order_id' => $shipment->getOrderId()));
178
+ return;
179
+
180
+ }else {
181
+ $this->_forward('noRoute');
182
+ return;
183
+ }
184
+ }
185
+ catch (Mage_Core_Exception $e) {
186
+ $this->_getSession()->addError($e->getMessage());
187
+ }
188
+ catch (Exception $e) {
189
+ $this->_getSession()->addError($this->__('Can not save shipment: '.$e->getMessage()));
190
+ }
191
+ $this->_redirect('*/*/new', array('order_id' => $this->getRequest()->getParam('order_id')));
192
+ }
193
+ }
app/code/community/Infostrates/Tnt/controllers/TntController.php ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once ('app/code/core/Mage/Core/Controller/Front/Action.php');
3
+
4
+ class Infostrates_Tnt_TntController extends Mage_Core_Controller_Front_Action {
5
+
6
+ public function indexAction() {
7
+ $zipcode = $this->getRequest ()->getParam ( 'zipcode' );
8
+ $zipcode = trim(urldecode($zipcode));
9
+ $zipcode = mb_convert_encoding($zipcode,'UTF-8');
10
+
11
+ if (empty ( $zipcode )) {
12
+ Mage::log ( 'TNTRelais: No zip code - error message' );
13
+ echo '<ul class="messages"><li class="error-msg"><ul><li>' . Mage::helper ( 'tnt' )->__ ( 'Le code postal est obligatoire !' ) . '</li></ul></li></ul>';
14
+ } else {
15
+
16
+ $results = Mage::getModel('tnt/shipping_carrier_tnt')->_tnt_citiesGuide($zipcode);
17
+
18
+ if ( !is_array($results) ) {
19
+ echo '<ul class="messages"><li class="error-msg"><ul><li>' . Mage::helper ( 'tnt' )->__ ( $results ) . '</li></ul></li></ul>';
20
+ } else {
21
+
22
+ $points = array();
23
+
24
+ foreach ($results as $result) {
25
+ $points[] = Mage::getModel('tnt/shipping_carrier_tnt')->_tnt_dropOffPoints($result['zipCode'], $result['name']);
26
+ }
27
+
28
+ if ( !is_array($points) ) {
29
+ echo '<ul class="messages"><li class="error-msg"><ul><li>' . Mage::helper ( 'tnt' )->__ ( $points ) . '</li></ul></li></ul>';
30
+ } else {
31
+ $this->filterPoints ( $points );
32
+ }
33
+ }
34
+ }
35
+ }
36
+
37
+ /**
38
+ * liste les PR retournés par le WS
39
+ * @param Array $tnt_items
40
+ * @return string
41
+ */
42
+ private function filterPoints($tnt_items) {
43
+
44
+ toFirePHP($tnt_items);
45
+
46
+ $offset = 1;
47
+ $allReadyIn = array();
48
+ $html = '<label>' . Mage::helper ( 'tnt' )->__ ( 'Choisissez votre point relais pour la livraison' ) . ': </label><ul>';
49
+ foreach ( $tnt_items as $tmp_items ) {
50
+ foreach( $tmp_items as $item ) {
51
+ if( !in_array($item['xETTCode'], $allReadyIn) ) {
52
+ $allReadyIn[] = $item['xETTCode'];
53
+ if ($offset <= 15) {
54
+ $html.= '<li>
55
+ <input name="tnt_relais" type="radio" id="tnt_relais'.$offset.'" class="radio" value="'.$item['address1'].'&&&'.$item['name'].' '.$item['xETTCode'].'&&&'.$item['zipCode'].'&&&'.$item['city'].'" />
56
+ <label for="tnt_relais'.$offset.'">
57
+ <span class="s1">'.$item['name'].' : '.$item['address1'].' - '.$item['zipCode'].' - '.$item['city'].'</span>
58
+ <span class="s2"> <a href="'.$item['geolocalisationUrl'].'" target="_blank">voir</a></span>
59
+ </label>
60
+ </li>';
61
+ }
62
+ ++ $offset;
63
+ }
64
+ }
65
+ }
66
+ $html.='</ul>';
67
+ echo $html;
68
+ }
69
+
70
+ /**
71
+ * Update les données d'expédition du client par celles du PR
72
+ *
73
+ * @return string
74
+ */
75
+ public function changeshippingaddressAction() {
76
+ if ($shipping = $this->getRequest()->getParams( array ('street', 'description', 'postcode', 'city') )) {
77
+
78
+ $current = Mage::getSingleton ( 'checkout/session' )->getQuote ();
79
+ Mage::register ( 'current_quote', $current );
80
+ $address = $current->getShippingAddress ();
81
+
82
+ ( string ) $postcode = $shipping ['postcode'];
83
+ if (substr ( $postcode, 0, 2 ) == 20) {
84
+ $regioncode = substr ( $postcode, 0, 3 );
85
+ switch ($regioncode) {
86
+ case 202 :
87
+ $regioncode = '2B';
88
+ break;
89
+ default:
90
+ $regioncode = '2A';
91
+ break;
92
+ }
93
+
94
+ } else {
95
+
96
+ $regioncode = substr ( $postcode, 0, 2 );
97
+ }
98
+ Mage::app ()->getLocale ()->setLocaleCode ( 'en_US' );
99
+ $region = Mage::getModel ( 'directory/region' )->loadByCode ( $regioncode, $address->getCountryId () );
100
+ $regionname = $region->getDefaultName ();
101
+ $regionid = $region->getRegionId ();
102
+ $address->setRegion ( $regionname );
103
+ $address->setRegionId ( $regionid );
104
+ $address->setPostcode ( $postcode );
105
+ $address->setStreet ( urldecode ( $shipping ['street'] ) );
106
+ $address->setCity ( urldecode ( $shipping ['city'] ) );
107
+ $address->setCompany ( trim(urldecode ( $shipping ['description'] )) );
108
+ $address->save ();
109
+ $current->setShippingAddress ( $address );
110
+ $current->save ();
111
+ }
112
+ }
113
+
114
+ public function villeAction() {
115
+ $zipcode = $this->getRequest ()->getParam ( 'zipcode' );
116
+ $zipcode = trim(urldecode($zipcode));
117
+ $zipcode = mb_convert_encoding($zipcode,'UTF-8');
118
+
119
+ //je stock les infos de l'adresse de livraison au cas ou
120
+ $street = $this->getRequest ()->getParam ( 'address' );
121
+ $street = trim(urldecode($street));
122
+ $street = mb_convert_encoding($street,'UTF-8');
123
+
124
+ $city = $this->getRequest ()->getParam ( 'city' );
125
+ $city = trim(urldecode($city));
126
+ $city = mb_convert_encoding($city,'UTF-8');
127
+
128
+ $company = $this->getRequest ()->getParam ( 'company' );
129
+ $company = trim(urldecode($company));
130
+ $company = mb_convert_encoding($company,'UTF-8');
131
+
132
+ if (empty ( $zipcode )) {
133
+ Mage::log ( 'TNTCheck CP/Villes: No zip code - error message' );
134
+ echo '<ul class="messages"><li class="error-msg"><ul><li>' . Mage::helper ( 'tnt' )->__ ( 'Le code postal est obligatoire !' ) . '</li></ul></li></ul>';
135
+ } else {
136
+ $allVilles = Mage::getModel('tnt/shipping_carrier_tnt')->_tnt_citiesGuide($zipcode);
137
+
138
+ if ( !is_array($allVilles) ) {
139
+ echo '<ul class="messages"><li class="error-msg"><ul><li>' . Mage::helper ( 'tnt' )->__ ( $allVilles ) . '</li></ul></li></ul>';
140
+ } else {
141
+ $this->filterVilles ( $allVilles, $street, $zipcode, $city, $company );
142
+ }
143
+ }
144
+ }
145
+
146
+ private function filterVilles($allVilles, $street, $zipcode, $city, $company) {
147
+ $offset = 0;
148
+ $html = '';
149
+
150
+ if(count($allVilles) > 1) {
151
+ $html.= '<label>' . Mage::helper ( 'tnt' )->__ ( 'Choisissez précisemment la ville de livraison' ) . ': </label><ul>';
152
+ foreach ( $allVilles as $ville ) {
153
+ ++ $offset;
154
+ if ($offset <= 10) {
155
+ $html.= '<li>
156
+ <input name="tnt_ville" type="radio" id="tnt_ville'.$offset.'" class="radio" value="'.$street.'&&&'.$company.'&&&'.$zipcode.'&&&'.$ville['name'].'" />
157
+ <label for="tnt_ville'.$offset.'">
158
+ <span class="s1">'.$ville['name'].'</span>
159
+ </label>
160
+ </li>';
161
+ }
162
+ }
163
+ $html.='</ul>';
164
+ } else {
165
+ $html.= '<input name="tnt_ville" type="radio" id="tnt_ville1" class="radio" value="'.$street.'&&&'.$company.'&&&'.$zipcode.'&&&'.$allVilles[0]['name'].'" checked="checked" style="display:none;" />';
166
+ }
167
+ echo $html;
168
+ }
169
+ }
170
+ ?>
app/code/community/Infostrates/Tnt/etc/config.xml ADDED
@@ -0,0 +1,196 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+ <modules>
5
+ <Infostrates_Tnt>
6
+ <version>1.0</version>
7
+ <depends>
8
+ <Mage_Adminhtml />
9
+ <Mage_Shipping />
10
+ </depends>
11
+ </Infostrates_Tnt>
12
+ </modules>
13
+ <global>
14
+ <resources>
15
+ <tnt_setup>
16
+ <setup>
17
+ <module>Infostrates_Tnt</module>
18
+ </setup>
19
+ <connection>
20
+ <use>core_setup</use>
21
+ </connection>
22
+ </tnt_setup>
23
+ <tnt_write>
24
+ <connection>
25
+ <use>core_write</use>
26
+ </connection>
27
+ </tnt_write>
28
+ <tnt_read>
29
+ <connection>
30
+ <use>core_read</use>
31
+ </connection>
32
+ </tnt_read>
33
+ </resources>
34
+ <blocks>
35
+ <tnt>
36
+ <class>Infostrates_Tnt_Block</class>
37
+ </tnt>
38
+ <adminhtml>
39
+ <rewrite>
40
+ <sales_order_shipment_view>Infostrates_Tnt_Block_Sales_Order_Shipment_View</sales_order_shipment_view>
41
+ </rewrite>
42
+ </adminhtml>
43
+ </blocks>
44
+ <helpers>
45
+ <tnt>
46
+ <class>Infostrates_Tnt_Helper</class>
47
+ </tnt>
48
+ </helpers>
49
+ <models>
50
+ <tnt>
51
+ <class>Infostrates_Tnt_Model</class>
52
+ </tnt>
53
+ </models>
54
+ <sales>
55
+ <shipping>
56
+ <carriers>
57
+ <tnt>
58
+ <class>Infostrates_Tnt_Model_Shipping_Carrier_Tnt</class>
59
+ </tnt>
60
+ </carriers>
61
+ </shipping>
62
+ <tax>
63
+ <methods>
64
+ <tntzipcode>
65
+ <class>Infostrates_Tnt_Model_Tax_Tntzipcode</class>
66
+ </tntzipcode>
67
+ </methods>
68
+ </tax>
69
+ </sales>
70
+ <rewrite>
71
+ <infostrates_tnt_sales_order_shipment>
72
+ <from><![CDATA[#^/.*sales_order_shipment/save/#]]></from>
73
+ <to>/tnt/sales_order_shipment/save/</to>
74
+ </infostrates_tnt_sales_order_shipment>
75
+ </rewrite>
76
+ </global>
77
+ <adminhtml>
78
+ <menu>
79
+ <sales translate="title" module="tnt">
80
+ <title>Sales</title>
81
+ <sort_order>20</sort_order>
82
+ <depends><module>Mage_Sales</module></depends>
83
+ <children>
84
+ <tnt translate="title" module="sales">
85
+ <title>TNT</title>
86
+ <sort_order>31</sort_order>
87
+ <children>
88
+ <impression translate="title" module="sales">
89
+ <title>Suivi des expéditions TNT</title>
90
+ <action>tnt/sales_impression</action>
91
+ <sort_order>10</sort_order>
92
+ </impression>
93
+ </children>
94
+ </tnt>
95
+ </children>
96
+ </sales>
97
+ </menu>
98
+ <acl>
99
+ <resources>
100
+ <admin>
101
+ <children>
102
+ <sales translate="title" module="sales">
103
+ <title>Sales</title>
104
+ <sort_order>20</sort_order>
105
+ <children>
106
+ <tnt translate="title" module="sales">
107
+ <title>TNT</title>
108
+ <sort_order>31</sort_order>
109
+ <children>
110
+ <impression translate="title" module="sales">
111
+ <title>Suivi des expéditions TNT</title>
112
+ <sort_order>10</sort_order>
113
+ </impression>
114
+ </children>
115
+ </tnt>
116
+ </children>
117
+ </sales>
118
+ </children>
119
+ </admin>
120
+ </resources>
121
+ </acl>
122
+ </adminhtml>
123
+ <stores>
124
+ <admin>
125
+ <design>
126
+ <theme>
127
+ <default>tnt</default>
128
+ </theme>
129
+ </design>
130
+ </admin>
131
+ </stores>
132
+ <admin>
133
+ <routers>
134
+ <tnt>
135
+ <use>admin</use>
136
+ <args>
137
+ <module>Infostrates_Tnt</module>
138
+ <frontName>tnt</frontName>
139
+ </args>
140
+ </tnt>
141
+ </routers>
142
+ </admin>
143
+ <frontend>
144
+ <layout>
145
+ <updates>
146
+ <tnt module="Infostrates_Tnt">
147
+ <file>tnt.xml</file>
148
+ </tnt>
149
+ </updates>
150
+ </layout>
151
+ <routers>
152
+ <tnt>
153
+ <use>standard</use>
154
+ <args>
155
+ <module>Infostrates_Tnt</module>
156
+ <frontName>tnt</frontName>
157
+ </args>
158
+ </tnt>
159
+ </routers>
160
+ <translate>
161
+ <modules>
162
+ <Infostrates_Tnt>
163
+ <files>
164
+ <default>Infostrates_Tnt.csv</default>
165
+ </files>
166
+ </Infostrates_Tnt>
167
+ </modules>
168
+ </translate>
169
+ </frontend>
170
+
171
+ <default>
172
+ <carriers>
173
+ <tnt>
174
+ <active>0</active>
175
+ <title>TNT</title>
176
+ <gateway_url>http://www.tnt.fr/service/?wsdl</gateway_url>
177
+ <account>06324676</account>
178
+ <identifiant>webservices@tnt.fr</identifiant>
179
+ <mdp>test</mdp>
180
+ <max_package_weight>20</max_package_weight>
181
+ <allowed_methods>T,JZ,JD,J</allowed_methods>
182
+ <label_format>STDA4</label_format>
183
+ <tracking_url>http://www.tnt.fr/public/suivi_colis/recherche/visubontransport.do?bonTransport=</tracking_url>
184
+ <J_amount>10:23.90,20:52.30,1000:99</J_amount>
185
+ <JZ_amount>10:23.90,20:52.30,1000:99</JZ_amount>
186
+ <JD_amount>10:23.90,20:52.30,1000:99</JD_amount>
187
+ <J_free>0</J_free>
188
+ <JZ_free>0</JZ_free>
189
+ <JD_free>0</JD_free>
190
+ <sallowspecific>0</sallowspecific>
191
+ <model>tnt/shipping_carrier_tnt</model>
192
+ <specificerrmsg>Ce mode d'expédition n'est pas disponible. Si vous souhaitez l'utiliser contactez nous.</specificerrmsg>
193
+ </tnt>
194
+ </carriers>
195
+ </default>
196
+ </config>
app/code/community/Infostrates/Tnt/etc/system.xml ADDED
@@ -0,0 +1,272 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+ <sections>
5
+ <carriers>
6
+ <groups>
7
+ <tnt translate="label" module="usa">
8
+ <label>TNT</label>
9
+ <frontend_type>text</frontend_type>
10
+ <sort_order>12</sort_order>
11
+ <show_in_default>1</show_in_default>
12
+ <show_in_website>1</show_in_website>
13
+ <show_in_store>1</show_in_store>
14
+ <fields>
15
+ <active translate="label">
16
+ <label>Enabled</label>
17
+ <frontend_type>select</frontend_type>
18
+ <source_model>adminhtml/system_config_source_yesno</source_model>
19
+ <sort_order>1</sort_order>
20
+ <show_in_default>1</show_in_default>
21
+ <show_in_website>1</show_in_website>
22
+ <show_in_store>0</show_in_store>
23
+ </active>
24
+ <title translate="label">
25
+ <label>Title</label>
26
+ <frontend_type>text</frontend_type>
27
+ <sort_order>1</sort_order>
28
+ <show_in_default>1</show_in_default>
29
+ <show_in_website>1</show_in_website>
30
+ <show_in_store>1</show_in_store>
31
+ <validate>required-entry</validate>
32
+ </title>
33
+ <gateway_url translate="label">
34
+ <label>Gateway URL</label>
35
+ <frontend_type>text</frontend_type>
36
+ <sort_order>2</sort_order>
37
+ <show_in_default>1</show_in_default>
38
+ <show_in_website>1</show_in_website>
39
+ <show_in_store>0</show_in_store>
40
+ <validate>required-entry</validate>
41
+ </gateway_url>
42
+ <tracking_url translate="label comment">
43
+ <label>URL de tracking TNT</label>
44
+ <frontend_type>text</frontend_type>
45
+ <sort_order>2</sort_order>
46
+ <show_in_default>1</show_in_default>
47
+ <show_in_website>1</show_in_website>
48
+ <show_in_store>0</show_in_store>
49
+ <validate>required-entry</validate>
50
+ </tracking_url>
51
+ <account translate="label comment">
52
+ <label>Numéro de compte client TNT</label>
53
+ <frontend_type>text</frontend_type>
54
+ <sort_order>3</sort_order>
55
+ <show_in_default>1</show_in_default>
56
+ <show_in_website>1</show_in_website>
57
+ <show_in_store>0</show_in_store>
58
+ <validate>required-entry</validate>
59
+ <comment>Uniquement des chiffres</comment>
60
+ </account>
61
+ <identifiant translate="label comment">
62
+ <label>Identifiant MyTNT</label>
63
+ <frontend_type>text</frontend_type>
64
+ <sort_order>4</sort_order>
65
+ <show_in_default>1</show_in_default>
66
+ <show_in_website>1</show_in_website>
67
+ <show_in_store>0</show_in_store>
68
+ <validate>required-entry</validate>
69
+ <comment>Adresse email</comment>
70
+ </identifiant>
71
+ <mdp translate="label comment">
72
+ <label>Mot de passe MyTNT</label>
73
+ <frontend_type>text</frontend_type>
74
+ <sort_order>5</sort_order>
75
+ <show_in_default>1</show_in_default>
76
+ <show_in_website>1</show_in_website>
77
+ <show_in_store>0</show_in_store>
78
+ <validate>required-entry</validate>
79
+ </mdp>
80
+ <raison_sociale translate="label comment">
81
+ <label>Raison sociale</label>
82
+ <frontend_type>text</frontend_type>
83
+ <sort_order>6</sort_order>
84
+ <show_in_default>1</show_in_default>
85
+ <show_in_website>1</show_in_website>
86
+ <show_in_store>0</show_in_store>
87
+ <validate>required-entry</validate>
88
+ </raison_sociale>
89
+ <adresse translate="label comment">
90
+ <label>Adresse d'expédition</label>
91
+ <frontend_type>text</frontend_type>
92
+ <sort_order>7</sort_order>
93
+ <show_in_default>1</show_in_default>
94
+ <show_in_website>1</show_in_website>
95
+ <show_in_store>0</show_in_store>
96
+ <validate>required-entry</validate>
97
+ </adresse>
98
+ <adresse2 translate="label comment">
99
+ <label>Complément d'adresse d'expédition</label>
100
+ <frontend_type>text</frontend_type>
101
+ <sort_order>8</sort_order>
102
+ <show_in_default>1</show_in_default>
103
+ <show_in_website>1</show_in_website>
104
+ <show_in_store>0</show_in_store>
105
+ </adresse2>
106
+ <code_postal translate="label comment">
107
+ <label>Code postal</label>
108
+ <frontend_type>text</frontend_type>
109
+ <sort_order>9</sort_order>
110
+ <show_in_default>1</show_in_default>
111
+ <show_in_website>1</show_in_website>
112
+ <show_in_store>0</show_in_store>
113
+ <validate>required-entry</validate>
114
+ </code_postal>
115
+ <ville translate="label comment">
116
+ <label>Ville</label>
117
+ <frontend_type>text</frontend_type>
118
+ <sort_order>10</sort_order>
119
+ <show_in_default>1</show_in_default>
120
+ <show_in_website>1</show_in_website>
121
+ <show_in_store>0</show_in_store>
122
+ <validate>required-entry</validate>
123
+ </ville>
124
+ <max_package_weight translate="label">
125
+ <label>Poids Maximum par colis (pour les colis plus lourds, contactez TNT Express)</label>
126
+ <frontend_type>text</frontend_type>
127
+ <sort_order>11</sort_order>
128
+ <show_in_default>1</show_in_default>
129
+ <show_in_website>1</show_in_website>
130
+ <show_in_store>0</show_in_store>
131
+ </max_package_weight>
132
+ <allowed_methods translate="label">
133
+ <label>Allowed Methods</label>
134
+ <frontend_type>multiselect</frontend_type>
135
+ <source_model>tnt/shipping_carrier_tnt_source_method</source_model>
136
+ <sort_order>16</sort_order>
137
+ <show_in_default>1</show_in_default>
138
+ <show_in_website>1</show_in_website>
139
+ <show_in_store>0</show_in_store>
140
+ <can_be_empty>1</can_be_empty>
141
+ </allowed_methods>
142
+ <label_format>
143
+ <label>Format d'étiquette</label>
144
+ <frontend_type>select</frontend_type>
145
+ <source_model>tnt/shipping_carrier_tnt_source_labelformat</source_model>
146
+ <sort_order>16</sort_order>
147
+ <show_in_default>1</show_in_default>
148
+ <show_in_website>1</show_in_website>
149
+ <show_in_store>0</show_in_store>
150
+ </label_format>
151
+ <JZ_amount>
152
+ <label>TNT 24h à Domicile</label>
153
+ <frontend_type>text</frontend_type>
154
+ <sort_order>23</sort_order>
155
+ <show_in_default>1</show_in_default>
156
+ <show_in_website>1</show_in_website>
157
+ <show_in_store>0</show_in_store>
158
+ <validate>required-entry</validate>
159
+ <comment>Soit un montant unique ex : 15.99. Soit au format poids/prix ex : 10:23.90,20:52.30,1000:99</comment>
160
+ </JZ_amount>
161
+ <JZ_free>
162
+ <label>Minimum d'achat pour TNT 24h à Domicile offert</label>
163
+ <frontend_type>text</frontend_type>
164
+ <sort_order>24</sort_order>
165
+ <show_in_default>1</show_in_default>
166
+ <show_in_website>1</show_in_website>
167
+ <show_in_store>0</show_in_store>
168
+ <validate>required-entry</validate>
169
+ <comment>ex : 150</comment>
170
+ </JZ_free>
171
+ <J_amount>
172
+ <label>TNT 24h Entreprise</label>
173
+ <frontend_type>text</frontend_type>
174
+ <sort_order>31</sort_order>
175
+ <show_in_default>1</show_in_default>
176
+ <show_in_website>1</show_in_website>
177
+ <show_in_store>0</show_in_store>
178
+ <validate>required-entry</validate>
179
+ <comment>Soit un montant unique ex : 15.99. Soit au format poids/prix ex : 10:23.90,20:52.30,1000:99</comment>
180
+ </J_amount>
181
+ <J_free>
182
+ <label>Minimum d'achat pour TNT 24h Entreprise offert</label>
183
+ <frontend_type>text</frontend_type>
184
+ <sort_order>32</sort_order>
185
+ <show_in_default>1</show_in_default>
186
+ <show_in_website>1</show_in_website>
187
+ <show_in_store>0</show_in_store>
188
+ <validate>required-entry</validate>
189
+ <comment>ex : 150</comment>
190
+ </J_free>
191
+ <JD_amount>
192
+ <label>TNT 24h en Relais Colis®</label>
193
+ <frontend_type>text</frontend_type>
194
+ <sort_order>33</sort_order>
195
+ <show_in_default>1</show_in_default>
196
+ <show_in_website>1</show_in_website>
197
+ <show_in_store>0</show_in_store>
198
+ <validate>required-entry</validate>
199
+ <comment>Soit un montant unique ex : 15.99. Soit au format poids/prix ex : 10:23.90,20:52.30,1000:99</comment>
200
+ </JD_amount>
201
+ <JD_free>
202
+ <label>Minimum d'achat pour TNT 24h en Relais Colis® offert</label>
203
+ <frontend_type>text</frontend_type>
204
+ <sort_order>34</sort_order>
205
+ <show_in_default>1</show_in_default>
206
+ <show_in_website>1</show_in_website>
207
+ <show_in_store>0</show_in_store>
208
+ <validate>required-entry</validate>
209
+ <comment>ex : 150</comment>
210
+ </JD_free>
211
+ <specificerrmsg translate="label">
212
+ <label>Displayed Error Message</label>
213
+ <frontend_type>textarea</frontend_type>
214
+ <sort_order>80</sort_order>
215
+ <show_in_default>1</show_in_default>
216
+ <show_in_website>1</show_in_website>
217
+ <show_in_store>1</show_in_store>
218
+ <validate>required-entry</validate>
219
+ </specificerrmsg>
220
+ <sallowspecific translate="label">
221
+ <label>Ship to Applicable Countries</label>
222
+ <frontend_type>select</frontend_type>
223
+ <sort_order>90</sort_order>
224
+ <frontend_class>shipping-applicable-country</frontend_class>
225
+ <source_model>adminhtml/system_config_source_shipping_allspecificcountries</source_model>
226
+ <show_in_default>1</show_in_default>
227
+ <show_in_website>1</show_in_website>
228
+ <show_in_store>0</show_in_store>
229
+ </sallowspecific>
230
+ <specificcountry translate="label">
231
+ <label>Ship to Specific Countries</label>
232
+ <frontend_type>multiselect</frontend_type>
233
+ <sort_order>91</sort_order>
234
+ <source_model>adminhtml/system_config_source_country</source_model>
235
+ <show_in_default>1</show_in_default>
236
+ <show_in_website>1</show_in_website>
237
+ <show_in_store>0</show_in_store>
238
+ <can_be_empty>1</can_be_empty>
239
+ </specificcountry>
240
+ <showmethod translate="label">
241
+ <label>Show Method if Not Applicable</label>
242
+ <frontend_type>select</frontend_type>
243
+ <sort_order>92</sort_order>
244
+ <frontend_class>shipping-skip-hide</frontend_class>
245
+ <source_model>adminhtml/system_config_source_yesno</source_model>
246
+ <show_in_default>1</show_in_default>
247
+ <show_in_website>1</show_in_website>
248
+ <show_in_store>0</show_in_store>
249
+ </showmethod>
250
+ <debug translate="label">
251
+ <label>Debug</label>
252
+ <frontend_type>select</frontend_type>
253
+ <source_model>adminhtml/system_config_source_yesno</source_model>
254
+ <sort_order>92</sort_order>
255
+ <show_in_default>1</show_in_default>
256
+ <show_in_website>1</show_in_website>
257
+ <show_in_store>0</show_in_store>
258
+ </debug>
259
+ <sort_order translate="label">
260
+ <label>Sort Order</label>
261
+ <frontend_type>text</frontend_type>
262
+ <sort_order>100</sort_order>
263
+ <show_in_default>1</show_in_default>
264
+ <show_in_website>1</show_in_website>
265
+ <show_in_store>0</show_in_store>
266
+ </sort_order>
267
+ </fields>
268
+ </tnt>
269
+ </groups>
270
+ </carriers>
271
+ </sections>
272
+ </config>
app/code/community/Infostrates/Tnt/sql/tnt_setup/mysql4-uninstall-1.0.0.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $installer = $this;
3
+
4
+ $installer->startSetup();
5
+
6
+ $installer->run("
7
+ DELETE FROM {$this->getTable('core/config_data')} WHERE path like 'carriers/tnt/%';
8
+ DELETE FROM {$this->getTable('core/resource')} WHERE code like 'tnt_setup';
9
+ ");
10
+
11
+ $installer->endSetup();
app/design/adminhtml/default/tnt/template/sales/order/invoice/create/form.phtml ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form id="edit_form" method="post" action="<?php echo $this->getSaveUrl() ?>">
2
+ <?php echo $this->getBlockHtml('formkey')?>
3
+ <?php $_order = $this->getInvoice()->getOrder() ?>
4
+ <?php echo $this->getChildHtml('order_info') ?>
5
+ <?php if (!$_order->getIsVirtual()): ?>
6
+ <div class="box-left">
7
+ <?php else: ?>
8
+ <div class="box-right">
9
+ <?php endif; ?>
10
+
11
+ <div class="entry-edit">
12
+ <div class="entry-edit-head">
13
+ <h4 class="icon-head head-payment-method"><?php echo Mage::helper('sales')->__('Payment Information') ?></h4>
14
+ </div>
15
+ <fieldset>
16
+ <div><?php echo $this->getChildHtml('order_payment') ?></div>
17
+ <div><?php echo Mage::helper('sales')->__('Order was placed using %s', $_order->getOrderCurrencyCode()) ?></div>
18
+ </fieldset>
19
+ </div>
20
+ </div>
21
+ <?php if (!$_order->getIsVirtual()): ?>
22
+ <div class="box-right">
23
+ <!--Shipping Address-->
24
+ <div class="entry-edit">
25
+ <div class="entry-edit-head">
26
+ <h4 class="icon-head head-shipping-method"><?php echo Mage::helper('sales')->__('Shipping Information') ?></h4>
27
+ </div>
28
+ <fieldset>
29
+ <div>
30
+ <strong><?php echo $_order->getShippingDescription() ?></strong>
31
+ <?php echo $this->helper('sales')->__('Total Shipping Charges'); ?>:
32
+
33
+ <?php if ($this->helper('tax')->displayShippingPriceIncludingTax()): ?>
34
+ <?php $_excl = $this->displayShippingPriceInclTax($_order); ?>
35
+ <?php else: ?>
36
+ <?php $_excl = $this->displayPriceAttribute('shipping_amount', false, ' '); ?>
37
+ <?php endif; ?>
38
+ <?php $_incl = $this->displayShippingPriceInclTax($_order); ?>
39
+
40
+ <?php echo $_excl; ?>
41
+ <?php if ($this->helper('tax')->displayShippingBothPrices() && $_incl != $_excl): ?>
42
+ (<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
43
+ <?php endif; ?>
44
+ </div>
45
+ <?php $_order = Mage::registry('current_invoice')->getOrder(); ?>
46
+ <?php $_shippingMethod = $_order->getShippingCarrier()->getCarrierCode(); ?>
47
+ <?php if ($this->canCreateShipment() && $this->canShipPartiallyItem()
48
+ && $_shippingMethod != 'tnt'): ?>
49
+ <p class="nm">
50
+ <label for="invoice_do_shipment" class="normal"><?php echo Mage::helper('sales')->__('Create Shipment') ?></label>
51
+ <input type="checkbox" name="invoice[do_shipment]" id="invoice_do_shipment" value="1" onclick="if ( this.checked==true ) { document.getElementById('tracking').style.display = 'block'} else { document.getElementById('tracking').style.display = 'none' }"<?php echo $this->hasInvoiceShipmentTypeMismatch()?' disabled="disabled"':'' ?> />
52
+ </p>
53
+ <?php if ($this->hasInvoiceShipmentTypeMismatch()): ?>
54
+ <small><?php echo $this->__('Some items in this order have different invoice and shipment types. You can create shipment only after the invoice is created.') ?></small>
55
+ <?php endif; ?>
56
+ <?php endif; ?>
57
+ <div id="tracking" style="display:none;"><?php echo $this->getChildHtml('tracking',false) ?></div>
58
+ </fieldset>
59
+ </div>
60
+ </div>
61
+ <?php endif; ?>
62
+ <div class="clear"></div>
63
+
64
+ <div class="entry-edit">
65
+ <div class="entry-edit-head">
66
+ <?php
67
+ $_itemsGridLabel = $this->getForcedShipmentCreate()?'Items to Invoice and Ship':'Items to Invoice';
68
+ ?>
69
+ <h4 class="icon-head head-products"><?php echo Mage::helper('sales')->__('%s', $_itemsGridLabel) ?></h4>
70
+ </div>
71
+ </div>
72
+ <div id="invoice_item_container">
73
+ <?php echo $this->getChildHtml('order_items') ?>
74
+ </div>
75
+ </form>
76
+ <script>
77
+ /*forced creating of shipment*/
78
+ var forcedShipmentCreate = <?php echo $this->getForcedShipmentCreate() ?>;
79
+ var shipmentElement = $('invoice_do_shipment');
80
+ if (forcedShipmentCreate && shipmentElement) {
81
+ shipmentElement.checked = true;
82
+ shipmentElement.disabled = true;
83
+ document.getElementById('tracking').style.display = 'block';
84
+ }
85
+ </script>
app/design/adminhtml/default/tnt/template/sales/order/invoice/create/tracking.phtml ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript">
2
+ var trackingControl = {};
3
+ trackingControl = {
4
+ index : 0,
5
+ add : function () {
6
+ this.index++;
7
+ var data = {index:this.index};
8
+ Element.insert($('track_row_container'), {bottom: this.template.evaluate(data)});
9
+ $('trackingC' + this.index).disabled = false;
10
+ $('trackingT' + this.index).disabled = false;
11
+ $('trackingN' + this.index).disabled = false;
12
+ this.bindCurrierOnchange();
13
+ },
14
+ deleteRow : function(event) {
15
+ var row = Event.findElement(event, 'tr');
16
+ if (row) {
17
+ row.parentNode.removeChild(row)
18
+ }
19
+ },
20
+ bindCurrierOnchange : function() {
21
+ var elems = $('tracking_numbers_table').select('.select');
22
+ elems.each(function (elem) {
23
+ if (!elem.onchangeBound) {
24
+ elem.onchangeBound = true;
25
+ elem.valueInput = $(elem.parentNode.parentNode).select('.number-title')[0];
26
+ elem.observe('change', this.currierOnchange);
27
+ }
28
+ }.bind(this));
29
+ },
30
+ currierOnchange : function(event) {
31
+ var elem = Event.element(event);
32
+ var option = elem.options[elem.selectedIndex];
33
+ if (option.value && option.value != 'custom') {
34
+ elem.valueInput.value = option.text;
35
+ }
36
+ else {
37
+ elem.valueInput.value = '';
38
+ }
39
+ }
40
+ }
41
+ </script>
42
+ <?php $_order = Mage::registry('current_invoice')->getOrder(); ?>
43
+ <?php $_shippingMethod = $_order->getShippingCarrier()->getCarrierCode(); ?>
44
+
45
+ <div class="grid">
46
+ <table cellspacing="0" class="data" id="tracking_numbers_table">
47
+ <?php if ($_shippingMethod == 'tnt') : ?>
48
+ <div><?php echo $this->helper('tnt')->__('Le numéro de tracking sera ajouté automatiquement'); ?></div>
49
+ <?php else: ?>
50
+ <col width="100" />
51
+ <col />
52
+ <col />
53
+ <col width="80" />
54
+ <thead>
55
+ <tr class="headings">
56
+ <th><?php echo Mage::helper('sales')->__('Carrier') ?></th>
57
+ <th><?php echo Mage::helper('sales')->__('Title') ?></th>
58
+ <th><?php echo Mage::helper('sales')->__('Number') ?></th>
59
+ <th class="last"><?php echo Mage::helper('sales')->__('Action') ?></th>
60
+ </tr>
61
+ </thead>
62
+ <tfoot>
63
+ <tr>
64
+ <td colspan="4" class="a-center last" style="padding:8px;"><?php echo $this->getChildHtml('add_button') ?></td>
65
+ </tr>
66
+ </tfoot>
67
+ <tbody id="track_row_container">
68
+ <tr id="track_row_template" class="template no-display">
69
+
70
+ <td>
71
+ <select name="tracking[__index__][carrier_code]" id="trackingC__index__" class="select carrier" style="width:110px;" disabled="disabled">
72
+ <?php foreach ($this->getCarriers() as $_code=>$_name): ?>
73
+ <option value="<?php echo $_code ?>"><?php echo $_name ?></option>
74
+ <?php endforeach; ?>
75
+ </select>
76
+ </td>
77
+ <td><input class="input-text number-title" type="text" name="tracking[__index__][title]" id="trackingT__index__" value="" disabled="disabled" /></td>
78
+ <td><input class="input-text" type="text" name="tracking[__index__][number]" id="trackingN__index__" value="" disabled="disabled" /></td>
79
+ <td class="last"><a href="#" onclick="trackingControl.deleteRow(event);return false"><?php echo $this->__('Delete') ?></a></td>
80
+
81
+ </tr>
82
+ </tbody>
83
+ <?php endif; ?>
84
+ </table>
85
+ </div>
86
+ <script type="text/javascript">
87
+ //<![CDATA[
88
+ trackingControl.template = new Template('<tr>' + $('track_row_template').innerHTML.replace(/__index__/g, '#{index}') + '<\/tr>');
89
+ //]]>
90
+ </script>
app/design/adminhtml/default/tnt/template/sales/order/shipment/create/form.phtml ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form id="edit_form" method="post" action="<?php echo $this->getSaveUrl() ?>">
2
+ <?php echo $this->getBlockHtml('formkey')?>
3
+ <?php $_order = $this->getShipment()->getOrder() ?>
4
+ <?php $_shippingMethod = explode("_",$_order->getShippingMethod()); ?>
5
+ <?php echo $this->getChildHtml('order_info') ?>
6
+
7
+
8
+ <div class="box-left">
9
+ <!--Billing Address-->
10
+ <div class="entry-edit">
11
+ <div class="entry-edit-head">
12
+ <h4 class="icon-head head-payment-method"><?php echo Mage::helper('sales')->__('Payment Information') ?></h4>
13
+ </div>
14
+ <fieldset>
15
+ <div><?php echo $this->getPaymentHtml() ?></div>
16
+ <div><?php echo Mage::helper('sales')->__('Order was placed using %s', $_order->getOrderCurrencyCode()) ?></div>
17
+ </fieldset>
18
+ </div>
19
+ </div>
20
+ <div class="box-right">
21
+ <!--Shipping Address-->
22
+ <div class="entry-edit">
23
+ <div class="entry-edit-head">
24
+ <h4 class="icon-head head-shipping-method"><?php echo Mage::helper('sales')->__('Shipping Information') ?></h4>
25
+ </div>
26
+ <fieldset>
27
+ <div>
28
+ <strong><?php echo $_order->getShippingDescription() ?></strong>
29
+ <?php echo $this->helper('sales')->__('Total Shipping Charges'); ?>:
30
+
31
+ <?php if ($this->helper('tax')->displayShippingPriceIncludingTax()): ?>
32
+ <?php $_excl = $this->displayShippingPriceInclTax($_order); ?>
33
+ <?php else: ?>
34
+ <?php $_excl = $this->displayPriceAttribute('shipping_amount', false, ' '); ?>
35
+ <?php endif; ?>
36
+ <?php $_incl = $this->displayShippingPriceInclTax($_order); ?>
37
+
38
+ <?php echo $_excl; ?>
39
+ <?php if ($this->helper('tax')->displayShippingBothPrices() && $_incl != $_excl): ?>
40
+ (<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
41
+ <?php endif; ?>
42
+ </div>
43
+ <?php Mage::Log($_shippingMethod[0]); ?>
44
+
45
+ <?php
46
+ $corse = '0';
47
+ $entreprise = '0';
48
+ $checkCP = substr($_order->getShippingAddress()->getPostcode(),0,3);
49
+ if( $checkCP == '200' || $checkCP == '201' || $checkCP == '202' ) {
50
+ $corse = '1';
51
+ }
52
+ if($_shippingMethod[1] == 'A' || $_shippingMethod[1] == 'T' || $_shippingMethod[1] == 'M' || $_shippingMethod[1] == 'J') {
53
+ $entreprise = '1';
54
+ } ?>
55
+
56
+ <?php if (($_shippingMethod[0] == 'tnt')) : ?>
57
+ <div><?php echo $this->helper('tnt')->__('Le numéro de tracking TNT sera ajouté automatiquement'); ?></div>
58
+ <div><label><?php echo $this->helper('tnt')->__("Date d'expédition"); ?></label>&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" id="shippingDate" name="shippingDate" value="<?php echo date('d-m-Y'); ?>" class="input-text" />&nbsp;<img title="Date d'exédition" id="sd_trig" alt="" src="<?php echo $this->getSkinUrl().'images/calendar.gif'; ?>" style="cursor: pointer; height: 15px; vertical-align: middle; width: 15px;" /></div>
59
+ <div><label><?php echo $this->helper('tnt')->__('Nombre de colis à expédier'); ?></label>&nbsp;&nbsp;&nbsp;&nbsp;<select id="nb_colis" name="nb_colis" onchange="checkNbColis();"><?php for($i=1;$i<=10;$i++) { ?><option value="<?php echo $i; ?>"><?php echo $i; ?></option><?php } ?></select></div>
60
+ <div><i>* le poids de chaque colis ne doit pas dépasser 20 kg</i></div>
61
+
62
+ <script type="text/javascript">
63
+ //<![CDATA[
64
+ Calendar.setup({
65
+ inputField: "shippingDate",
66
+ ifFormat: "%d-%m-%Y",
67
+ showsTime: false,
68
+ button: "sd_trig",
69
+ align: "Bl",
70
+ singleClick : true
71
+ });
72
+
73
+ function checkNbColis() {
74
+ if($("nb_colis").value > 4) {
75
+ alert('Attention, la livraison de plus de 4 colis engendre un coût supplémentaire.');
76
+ }
77
+ }
78
+
79
+ var message = "";
80
+ var corse = <?php echo $corse; ?>;
81
+ var entreprise = <?php echo $entreprise; ?>;
82
+
83
+ if(corse == '1') {
84
+ message+= "Attention, la livraison en Corse engendre un coût et un délai supplémentaire.\n";
85
+ }
86
+
87
+ if(entreprise == '1') {
88
+ message+= "Attention, la livraison le samedi en entreprise engendre un coût et un délai supplémentaire.";
89
+ }
90
+
91
+ if(message != '') {
92
+ alert(message);
93
+ }
94
+
95
+ //]]>
96
+ </script>
97
+ <?php else: ?>
98
+ <div><?php echo $this->getChildHtml('shipment_tracking') ?></div>
99
+ <?php endif; ?>
100
+ </fieldset>
101
+ </div>
102
+ </div>
103
+ <div class="clear"></div>
104
+
105
+ <div class="entry-edit">
106
+ <div class="entry-edit-head">
107
+ <h4 class="icon-head head-products"><?php echo Mage::helper('sales')->__('Items to Ship') ?></h4>
108
+ </div>
109
+ </div>
110
+ <div id="ship_items_container">
111
+ <?php echo $this->getItemsHtml() ?>
112
+ </div>
113
+ </form>
app/design/frontend/default/default/layout/tnt.xml ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <default>
4
+ <reference name="head">
5
+ <action method="addJs"><script>tnt/jquery_162.js</script></action>
6
+ <action method="addItem"><type>skin_js</type><script>js/tnt/tnt.js</script></action>
7
+ <action method="addItem"><type>skin_js</type><script>js/tnt/jquery.superbox.js</script></action>
8
+ <action method="addItem"><type>skin_css</type><name>css/tnt/tnt.css</name><params/></action>
9
+ <action method="addItem"><type>skin_css</type><name>css/tnt/jquery.superbox.css</name><params/></action>
10
+ </reference>
11
+ </default>
12
+
13
+ <checkout_onepage_index>
14
+ <reference name="checkout.onepage.shipping_method">
15
+ <action method="setTemplate"><template>tnt/onepage/shipping_method.phtml</template></action>
16
+ <block type="checkout/onepage_shipping_method_available" name="checkout.onepage.shipping_method.available" as="available" template="tnt/onepage/shipping_method/available.phtml" />
17
+ </reference>
18
+ </checkout_onepage_index>
19
+
20
+ <checkout_onepage_shippingmethod>
21
+ <remove name="right"/>
22
+ <remove name="left"/>
23
+ <block type="checkout/onepage_shipping_method_available" name="root" output="toHtml" template="tnt/onepage/shipping_method/available.phtml" />
24
+ </checkout_onepage_shippingmethod>
25
+ </layout>
app/design/frontend/default/default/template/tnt/form/failure.phtml ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Infostrates_Tnt
4
+ *
5
+ * @category Infostrates
6
+ * @package Infostrates_Tnt
7
+ * @copyright Copyright (c) 2011 Infostrates
8
+ * @author Infostrates (http://www.infostrates.fr)
9
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
10
+ */
11
+ ?>
12
+ <h1><?php echo $this->__('Une erreur technique a été rencontrée') ?></h1>
13
+
14
+ <p><?php echo $this->__('Merci de soumettre votre commande ultérieurement') ?></p>
app/design/frontend/default/default/template/tnt/onepage/shipping_method.phtml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form id="co-shipping-method-form" action="">
2
+ <div id="checkout-shipping-method-load">
3
+ <?php echo $this->getChildHtml('available') ?>
4
+ </div>
5
+ <script type="text/javascript">
6
+ //<![CDATA[
7
+ var shippingMethod = new ShippingMethod('co-shipping-method-form', "<?php echo $this->getUrl('checkout/onepage/saveShippingMethod') ?>");
8
+ //]]>
9
+ </script>
10
+ <div id="onepage-checkout-shipping-method-additional-load">
11
+ <?php echo $this->getChildHtml('additional') ?>
12
+ </div>
13
+ <div class="buttons-set" id="shipping-method-buttons-container">
14
+ <p class="back-link"><a href="#" onclick="checkout.back(); return false;"><small>&laquo; </small><?php echo $this->__('Back') ?></a></p>
15
+ <button type="button" class="button" onclick="shippingMethodTnt('<?php echo substr(Mage::getUrl('tnt/tnt/changeshippingaddress'),0,-1)?>')"><span><span><?php echo $this->__('Continue') ?></span></span></button>
16
+ <span id="shipping-method-please-wait" class="please-wait" style="display:none;">
17
+ <img src="<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif') ?>" alt="<?php echo $this->__('Loading next step...') ?>" title="<?php echo $this->__('Loading next step...') ?>" class="v-middle" /> <?php echo $this->__('Loading next step...') ?>
18
+ </span>
19
+ </div>
20
+ </form>
21
+
app/design/frontend/default/default/template/tnt/onepage/shipping_method/available.phtml ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (!($_shippingRateGroups = $this->getShippingRates())): ?>
2
+ <p><?php echo $this->__('Sorry, no quotes are available for this order at this time.') ?></p>
3
+ <?php else: ?>
4
+ <script type="text/javascript">
5
+ jQuery(function(){
6
+ jQuery.superbox.settings = {
7
+ boxId: "superbox",
8
+ boxClasses: "",
9
+ overlayOpacity: .8,
10
+ boxWidth: "700",
11
+ boxHeight: "450",
12
+ loadTxt: "Chargement ...",
13
+ closeTxt: "Fermer",
14
+ prevTxt: "Précédent",
15
+ nextTxt: "Suivant"
16
+ };
17
+ jQuery.superbox();
18
+ });
19
+ </script>
20
+ <dl class="sp-methods">
21
+ <?php $_sole = count($_shippingRateGroups) == 1;
22
+
23
+ $quote = Mage::getSingleton('checkout/session')->getQuote();
24
+ $cp = $quote->getShippingAddress()->getPostcode();
25
+
26
+ foreach ($_shippingRateGroups as $code => $_rates): ?>
27
+ <dt><?php echo $this->getCarrierName($code) ?></dt>
28
+ <dd>
29
+ <?php /*if( $this->getCarrierName($code) == 'TNT' ) { ?>
30
+ <div style="position: absolute; right: 10px; text-align:center;font-size:10px;"><img src="<?php echo $this->getSkinUrl("images/tnt/tnt_sure_we_can.png"); ?>" alt="" /><br /><!-- a href="http://www.tnt.fr/BtoC/page_domicile_relais-colis.html" target="_blank">En savoir plus</a--></div>
31
+ <?php }*/?>
32
+ <ul>
33
+ <?php $_sole = $_sole && count($_rates) == 1;
34
+ foreach ($_rates as $_rate): ?>
35
+ <li>
36
+ <?php if ($_rate->getErrorMessage()): ?>
37
+ <ul class="messages"><li class="error-msg"><ul><li><?php echo $_rate->getErrorMessage() ?></li></ul></li></ul>
38
+ <?php else: ?>
39
+ <?php if( preg_match('/tnt_/', $_rate->getCode()) == 0 ) { ?>
40
+
41
+ <?php if ($_sole) : ?>
42
+ <span class="no-display"><input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>" checked="checked" /></span>
43
+ <?php else: ?>
44
+ <input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>"<?php if($_rate->getCode()===$this->getAddressShippingMethod()) echo ' checked="checked"' ?> class="radio" />
45
+ <?php endif; ?>
46
+ <label for="s_method_<?php echo $_rate->getCode() ?>"><?php echo $_rate->getMethodTitle() ?>
47
+ <?php $_excl = $this->getShippingPrice($_rate->getPrice(), $this->helper('tax')->displayShippingPriceIncludingTax()); ?>
48
+ <?php $_incl = $this->getShippingPrice($_rate->getPrice(), true); ?>
49
+ <?php echo $_excl; ?>
50
+ <?php if ($this->helper('tax')->displayShippingBothPrices() && $_incl != $_excl): ?>
51
+ (<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
52
+ <?php endif; ?>
53
+ </label>
54
+
55
+ <?php } ?>
56
+
57
+ <?php //je filtre les envois TNT vers les entreprises si le champ company n'est pas renseigné
58
+ if( (($_rate->getCode() == 'tnt_AZ' || $_rate->getCode() == 'tnt_TZ' || $_rate->getCode() == 'tnt_MZ' || $_rate->getCode() == 'tnt_JZ')
59
+ && $quote->getShippingAddress()->getCompany() == '')
60
+ || (($_rate->getCode() == 'tnt_A' || $_rate->getCode() == 'tnt_T' || $_rate->getCode() == 'tnt_M' || $_rate->getCode() == 'tnt_J')
61
+ && $quote->getShippingAddress()->getCompany() != '' )
62
+ || $_rate->getCode() == 'tnt_JD' ) { ?>
63
+
64
+
65
+ <?php if ($_sole) : ?>
66
+ <span class="no-display"><input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>" checked="checked" /></span>
67
+ <?php else: ?>
68
+ <input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>"<?php //if($_rate->getCode()===$this->getAddressShippingMethod()) echo ' checked="checked"' ?> class="radio" onClick="radioCheck()" />
69
+ <?php endif; ?>
70
+
71
+ <label for="s_method_<?php echo $_rate->getCode() ?>"><?php echo $_rate->getMethodTitle() ?>
72
+ <?php $_excl = $this->getShippingPrice($_rate->getPrice(), $this->helper('tax')->displayShippingPriceIncludingTax()); ?>
73
+ <?php $_incl = $this->getShippingPrice($_rate->getPrice(), true); ?>
74
+ <?php echo $_excl; ?>
75
+ <?php if ($this->helper('tax')->displayShippingBothPrices() && $_incl != $_excl): ?>
76
+ (<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
77
+ <?php endif; ?>
78
+ </label>
79
+ <?php if($_rate->getMethodDescription() != '') {
80
+ $tmp_desc = explode('|||', $_rate->getMethodDescription()); ?>
81
+ &nbsp;<a style="display:none;" href="#" onclick="moreinfos('<?php echo $_rate->getCode(); ?>');" class="moreInfos more_<?php echo $_rate->getCode(); ?>">+ d'infos</a>
82
+ &nbsp;<a style="display:none;" href="#" onclick="moreinfos('<?php echo $_rate->getCode(); ?>');" class="moreInfos less_<?php echo $_rate->getCode(); ?>" style="display:none;">- d'infos</a>
83
+ <?php } ?>
84
+ <div id="tnt_description_<?php echo $_rate->getCode(); ?>" style="display:block;" class="tnt_description">
85
+ <img src="<?php echo $this->getSkinUrl("images/tnt/".$tmp_desc['2']); ?>" alt="<?php echo $_rate->getMethodTitle() ?>" style="float:left;margin-right:10px;" />
86
+ <span>
87
+ <?php echo $tmp_desc['0']; ?>
88
+ <?php if( $tmp_desc['1'] != '' ) { ?>
89
+ &nbsp;<a href="<?php echo $tmp_desc['1']; ?>" rel="superbox[iframe]" class="moreInfos">+ d'infos</a>
90
+ <?php } ?>
91
+ </span>
92
+ <div style="clear:both;"></div>
93
+ </div>
94
+ <?php } ?>
95
+ <?php
96
+ if($_rate->getCode() == 'tnt_JD') { ?>
97
+ <div id="tnt_pr" style="display:none" >
98
+ <label>Choisissez le code postal de votre point relais : </label><br /><br />
99
+ <div class="input-box">
100
+ <input id="relais_zipcode" name="relais_zipcode" type="text" class="input-text required-entry" value="<?php echo $cp; ?>"/><span class="required">*</span>
101
+ </div>
102
+ <button class="form-button" onclick="fetchPoint('<?php echo substr(Mage::getUrl('tnt/tnt/index'),0,-1)?>','suggestion') " type="button">
103
+ <span>Chercher</span>
104
+ </button>
105
+ <span id="loadingpointswait" style="display:none;">
106
+ <img src="<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif') ?>" alt="" class="v-middle" /> <?php echo $this->__('Chargement des points relais...') ?>
107
+ </span>
108
+ <div id="suggestion"></div>
109
+ </div>
110
+ <?php } ?>
111
+ <?php endif ?>
112
+ </li>
113
+ <?php endforeach; ?>
114
+ </ul>
115
+ <?php if( $this->getCarrierName($code) == 'TNT') { ?>
116
+ <div id="tnt_cp" style="display:none" >
117
+ <div id="villes"></div>
118
+ <div class="input-box">
119
+ <input id="address" name="address" type="hidden" value="<?php echo $quote->getShippingAddress()->getStreet(1).' '.$quote->getShippingAddress()->getStreet(2); ?>"/>
120
+ <input id="zipcode" name="zipcode" type="hidden" value="<?php echo $cp; ?>"/>
121
+ <input id="city" name="city" type="hidden" value="<?php echo $quote->getShippingAddress()->getCity(); ?>"/>
122
+ <input id="company" name="company" type="hidden" value="<?php echo $quote->getShippingAddress()->getcompany(); ?>"/>
123
+ <input id="city_url" name="city_url" type="hidden" value="<?php echo substr(Mage::getUrl('tnt/tnt/ville'),0,-1); ?>"/>
124
+ </div>
125
+ <span id="loadingvilleswait" style="display:none;">
126
+ <img src="<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif') ?>" alt="" class="v-middle" /> <?php echo $this->__('Vérification des informations...') ?>
127
+ </span>
128
+ </div>
129
+ <div class="conditions_tnt">* La livraison de vos colis en Express dépend de la réactivité de votre e-commerçant.</div>
130
+ <?php } ?>
131
+ </dd>
132
+ <?php endforeach; ?>
133
+ </dl>
134
+ <?php endif; ?>
app/etc/modules/Infostrates_Tnt.xml ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Infostrates_Tnt
5
+ *
6
+ * @category Infostrates
7
+ * @package Infostrates_Tnt
8
+ * @copyright Copyright (c) 2011 Infostrates
9
+ * @author Infostrates (http://www.infostrates.fr)
10
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11
+ */
12
+ -->
13
+ <config>
14
+ <modules>
15
+ <Infostrates_Tnt>
16
+ <active>true</active>
17
+ <codePool>community</codePool>
18
+ <depends>
19
+ <Mage_Shipping/>
20
+ <Mage_Checkout/>
21
+ </depends>
22
+ </Infostrates_Tnt>
23
+ </modules>
24
+ </config>
js/tnt/jquery_162.js ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * jQuery JavaScript Library v1.6.2
3
+ * http://jquery.com/
4
+ *
5
+ * Copyright 2011, John Resig
6
+ * Dual licensed under the MIT or GPL Version 2 licenses.
7
+ * http://jquery.org/license
8
+ *
9
+ * Includes Sizzle.js
10
+ * http://sizzlejs.com/
11
+ * Copyright 2011, The Dojo Foundation
12
+ * Released under the MIT, BSD, and GPL Licenses.
13
+ *
14
+ * Date: Thu Jun 30 14:16:56 2011 -0400
15
+ */
16
+ (function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(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 bZ(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 bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bC.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(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===bR,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=bX(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bX(a,c,d,e,"*",g));return l}function bW(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bN),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 bA(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bv:bw;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bg(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(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(R.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 V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}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=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,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=n.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.6.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.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(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.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();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&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(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;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},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,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){if(H)return H.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,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){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.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="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.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:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([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&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=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=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},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"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return 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(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},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._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:|^on/,v,w;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},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(o);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(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");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(o);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+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.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.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),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=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},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},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.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}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.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=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?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}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},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.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)}})),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 x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.
17
+ shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},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.preventDefault)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()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){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)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),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".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){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=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.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 k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={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(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?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,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.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(l?l.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||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());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(V(c[0])||V(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),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.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 X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be=/^\s*<!(?:\[CDATA\[|\-\-)/,bf={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,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},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){return this.each(function(){f(this).wrapAll(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(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());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){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},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"&&bc.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?bg(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bm)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=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
18
+ )}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1></$2>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bl(k[i]);else bl(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bd.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bn=/alpha\([^)]*\)/i,bo=/opacity=([^)]*)/,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","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;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c)),h="number"),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(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bA(a,b,d);f.swap(a,bu,function(){e=bA(a,b,d)});return e}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.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;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,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.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.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(bL,"")).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||bM.test(this.nodeName)||bG.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(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(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?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),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?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),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._Deferred(),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=bF.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.done,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(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.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]!=="*"?", */*; 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=bX(bS,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){status<2?w(-1,z):f.error(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)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.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(ca,l),b.url===j&&(e&&(k=k.replace(ca,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 cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,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,cb&&delete cd[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),m.text=h.responseText;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=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("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._data(d,"olddisplay",cs(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(cr("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].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(cr("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){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){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;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),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?(j=cs(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cr("show",1),slideUp:cr("hide",1),slideToggle:cr("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,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),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,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cn||cp(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cl&&(co?(cl=!0,g=function(){cl&&(co(g),e.tick())},co(g)):cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||cp(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=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.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var ct=/^t(?:able|d|h)$/i,cu=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cv(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!ct.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.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=cu.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&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
19
+ jQuery.noConflict();
media/pdf_bt/100000053.pdf ADDED
Binary file
media/pdf_bt/100000054.pdf ADDED
Binary file
media/pdf_bt/100000055.pdf ADDED
Binary file
media/pdf_bt/index.html ADDED
File without changes
package.xml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>TNTFrance</name>
4
+ <version>1.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Extension officielle vous permettant de proposer les services TNT &#xE0; vos clients.</summary>
10
+ <description>Extension officielle vous permettant de proposer les services TNT &#xE0; vos clients.</description>
11
+ <notes>Extension officielle vous permettant de proposer les services TNT &#xE0; vos clients.</notes>
12
+ <authors><author><name>Infostrates</name><user>auto-converted</user><email>magento@infostrates.fr</email></author></authors>
13
+ <date>2011-09-28</date>
14
+ <time>13:38:34</time>
15
+ <contents><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="tnt"><dir name="images"><file name="calendar.gif" hash="b1468e5239504974c689eea5d93f86d4"/></dir></dir></dir></dir><dir name="frontend"><dir name="default"><dir name="default"><dir name="css"><dir name="tnt"><file name="jquery.superbox.css" hash="abe8def38710a3d6d9170fd476ff6171"/><file name="tnt.css" hash="1c7d5ca9b5e159fcc73e5d74fe1d4b5e"/></dir></dir><dir name="images"><dir name="tnt"><file name="tnt_j.png" hash="bef92c96f478f8a172e5bf89f45675c2"/><file name="tnt_jd.png" hash="c5c58a007c17b36b9688eceb6375b6c4"/><file name="tnt_jz.png" hash="c52e691241670692f2642f41d0dbba51"/><file name="tnt_sure_we_can.png" hash="6e609b1dfea22cc59b5f1699857cbc58"/><file name="tnt_t.png" hash="58348232c798883b70d008b98da8d0ec"/></dir></dir><dir name="js"><dir name="tnt"><file name="jquery.superbox.js" hash="30228a5235fa735bdfb03130cc64ddbe"/><file name="tnt.js" hash="6c855097fff8537b1140b34712f97308"/></dir></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="tnt"><dir name="template"><dir name="sales"><dir name="order"><dir name="invoice"><dir name="create"><file name="form.phtml" hash="39a5685c507a02242ba2145e5a2d2efe"/><file name="tracking.phtml" hash="a03541d8ca4f4061e74a37fe33f4a75a"/></dir></dir><dir name="shipment"><dir name="create"><file name="form.phtml" hash="91a77c8b3ea59ee8e03d483c963dd422"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="tnt.xml" hash="7cc99229a82575959c3621fc5366a130"/></dir><dir name="template"><dir name="tnt"><dir name="form"><file name="failure.phtml" hash="0e75f6a5b51dc97568f3407c58be480d"/></dir><dir name="onepage"><dir name="shipping_method"><file name="available.phtml" hash="bc71dcea59151f93e196e675a4cf5999"/></dir><file name="shipping_method.phtml" hash="ec7ad924d51398d83d6854ad24f7ca16"/></dir></dir></dir></dir></dir></dir></target><target name="magecommunity"><dir name="Infostrates"><dir name="Tnt"><dir name="Block"><dir name="Onepage"><dir name="Shipping"><dir name="Method"><dir name="Available"><file name="Item.php" hash="c8c409dbee12a674b2a4581c82d1e943"/></dir><file name="Available.php" hash="c562905c3044c29513dc360a3dde51e0"/></dir></dir></dir><dir name="Sales"><dir name="Order"><dir name="Shipment"><file name="View.php" hash="805c992e53d98f35f3103364ecf4ff46"/></dir></dir><dir name="Shipment"><file name="Grid.php" hash="919bdf105047de5eb681672b621f12c4"/></dir><file name="Impression.php" hash="27b9e6d6bec0641025980ad9c5757711"/></dir></dir><dir name="controllers"><dir name="Sales"><dir name="Order"><file name="ShipmentController.php" hash="722827c5369a79877bd938c6fea8a2aa"/></dir><file name="ImpressionController.php" hash="4c473103f0fb6e51da3b12752360aaec"/></dir><file name="TntController.php" hash="10ec3fedbbee22f62f356bd7ea8ff5f2"/></dir><dir name="etc"><file name="config.xml" hash="f6b6f804157bdffd66a36d8456fcc306"/><file name="system.xml" hash="a47f1a812748fbb799728a8144d021f3"/></dir><dir name="Helper"><file name="Data.php" hash="d4893de82f6c207dfcb81acdebe3f713"/></dir><dir name="Model"><dir name="Shipping"><dir name="Carrier"><dir name="Tnt"><dir name="Source"><file name="Labelformat.php" hash="0d2e00d5e51cd296ac4fd13a5881c028"/><file name="Method.php" hash="b1b01b8bf8ffbcd48251061ca7a6c615"/></dir></dir><file name="Tnt.php" hash="996aa5b0f54a5844e124e130baec9e55"/></dir></dir></dir><dir name="sql"><dir name="tnt_setup"><file name="mysql4-uninstall-1.0.0.php" hash="fc57204f9bb108e3b708b95a6cbc066f"/></dir></dir></dir></dir></target><target name="mage"><dir name="js"><dir name="tnt"><file name="jquery_162.js" hash="8752b76fb981b68e7283ef4341a1c29a"/></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Infostrates_Tnt.xml" hash="2176fa2b98c129841599ac0cf2b96d87"/></dir></target><target name="magemedia"><dir name="pdf_bt"><file name="100000053.pdf" hash="a492dc252221628fda3a88d6cf54b4fb"/><file name="100000054.pdf" hash="cda4a785d15995af79ef711f64fe19e1"/><file name="100000055.pdf" hash="b7b91ec4a27923b91d29fc7d086acf5d"/><file name="index.html" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir></target></contents>
16
+ <compatible/>
17
+ <dependencies/>
18
+ </package>
skin/adminhtml/default/tnt/images/calendar.gif ADDED
Binary file
skin/frontend/default/default/css/tnt/jquery.superbox.css ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Base Superbox Styles */
2
+ #superbox-overlay{position:fixed;top:0;left:0;z-index:9998;width:100%;height:100%;}
3
+ #superbox-wrapper{position:fixed;z-index:9999;top:0;left:0;display:table;width:100%;height:100%;}
4
+ #superbox-container{position:relative;display:table-cell;width:100%;height:100%;margin:0;padding:0;vertical-align:middle;}
5
+ #superbox{margin:0 auto;padding:0;}
6
+ #superbox-container .loading{margin:0;text-align:center;}
7
+
8
+ /* IE7 */
9
+ *:first-child+html #superbox-container{position:absolute;top:50%;left:0;display:block;height:auto;}
10
+ *:first-child+html #superbox{position:relative;top:-50%;display:block;}
11
+ /* IE6 - Thanks to Thickbox for IE expressions */
12
+ * html #superbox-container{position:absolute;top:50%;left:0;display:block;height:auto;}
13
+ * html #superbox{position:relative;top:-50%;display:block;}
14
+ * html #superbox-overlay{position:absolute;height:expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight + 'px' : document.body.offsetHeight + 'px');}
15
+ * html #superbox-wrapper{position:absolute;margin-top:expression(0 - parseInt(this.offsetHeight / 2) + (document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');}
16
+
17
+ /* Default Theme */
18
+ #superbox-overlay{background:#000;}
19
+ #superbox-container .loading{text-align:center;font-size:40px;color:#fff;}
20
+ #superbox{padding:10px;background:#fff;outline:0;}
21
+ #superbox-innerbox{padding:10px 0;}
22
+ #superbox.image{text-align:center;}
23
+ #superbox .close,
24
+ #superbox .nextprev{overflow:hidden;margin:0;padding:1px;}
25
+ #superbox .close a:focus,
26
+ #superbox .nextprev a:focus{outline:1px dotted;}
skin/frontend/default/default/css/tnt/tnt.css ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .one-page-checkout .active .box-no-padding{ padding:15px 20px;}
2
+ .one-page-checkout .active .box-no-padding dt{ clear:both;}
3
+
4
+ #tnt_pr, #tnt_cp { padding-left:25px;}
5
+ #tnt_pr .input-box{ float:left; margin-right:20px; }
6
+
7
+ #checkout-shipping-method-load dd{padding:0 0 10px; min-height:90px;}
8
+
9
+ #tnt_pr #suggestion{overflow:hidden;padding:10px 0 10px 10px; clear:both;}
10
+ #tnt_pr #suggestion input{ vertical-align:top; margin-top:1px; float:left; clear:both;}
11
+ #tnt_pr #suggestion label{ float:left; font-size: 11px; }
12
+ #tnt_pr #suggestion label .s1{ display:inline-block; width:500px;padding:0 10px 0 0;float:left;}
13
+ #tnt_pr #suggestion label .s2{display:inline-block; width:50px;float:left;}
14
+ #tnt_pr #suggestion label a{ float:left;}
15
+
16
+ .conditions_tnt { font-size:11px; font-weight: bold; font-style: italic; }
17
+
18
+ .moreInfos { font-style: italic; font-size: 10px; }
19
+ .tnt_description { font-size: 10px; margin-top: 5px; margin-bottom: 10px; width: 600px; }
20
+ .tnt_description .rem1 { font-style: italic; }
skin/frontend/default/default/images/tnt/tnt_j.png ADDED
Binary file
skin/frontend/default/default/images/tnt/tnt_jd.png ADDED
Binary file
skin/frontend/default/default/images/tnt/tnt_jz.png ADDED
Binary file
skin/frontend/default/default/images/tnt/tnt_sure_we_can.png ADDED
Binary file
skin/frontend/default/default/images/tnt/tnt_t.png ADDED
Binary file
skin/frontend/default/default/js/tnt/jquery.superbox.js ADDED
@@ -0,0 +1,585 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery SuperBox! 0.9.2-dev
3
+ * Copyright (c) 2009 Pierre Bertet (pierrebertet.net)
4
+ * Licensed under the MIT (MIT-LICENSE.txt)
5
+ *
6
+ * TODO :
7
+ * - Document.load if init is before </body> against IE crash.
8
+ * - Animations
9
+ * - Image / Gallery mode : display a legend
10
+ */
11
+ ;(function($) {
12
+
13
+ // Local variables
14
+ var $curLink, $overlay, $wrapper, $container, $superbox, $closeBtn, $loading, $nextprev, $nextBtn, $prevBtn, settings,
15
+
16
+ // Default settings
17
+ defaultSettings = {
18
+ boxId: "superbox",
19
+ boxClasses: "",
20
+ overlayOpacity: .8,
21
+ boxWidth: "600",
22
+ boxHeight: "400",
23
+ loadTxt: "Loading...",
24
+ closeTxt: "Close",
25
+ prevTxt: "Previous",
26
+ nextTxt: "Next",
27
+ beforeOpen: function(){},
28
+ afterOpen: function(){}
29
+ },
30
+
31
+ galleryGroups = {},
32
+ galleryMode = false,
33
+ hideElts = $([]),
34
+ isWaiting = false;
35
+
36
+ // Init dispatcher
37
+ $.superbox = function() {
38
+
39
+ // Settings
40
+ settings = $.extend({}, defaultSettings, $.superbox.settings);
41
+
42
+ // If IE6, select elements to hide
43
+ if ($.browser.msie && $.browser.version < 7) {
44
+ hideElts = hideElts.add("select");
45
+ }
46
+
47
+ // Do not init SuperBox! twice
48
+ if ($.superbox.mainInit !== true) {
49
+
50
+ // Create base elements
51
+ createElements();
52
+
53
+ // Init global events (left / right, echap)
54
+ initGlobalEvents();
55
+
56
+ $.superbox.mainInit = true;
57
+ }
58
+
59
+ // Dispatch types
60
+ dispatch();
61
+ };
62
+
63
+ // Dispatch types
64
+ function dispatch() {
65
+
66
+ // Match all superbox links
67
+ $("a[rel^=superbox],area[rel^=superbox]").each(function() {
68
+
69
+ // Optimisation
70
+ var $this = $(this),
71
+ relAttr = $this.attr("rel"),
72
+
73
+ // Match first argument. Ex: superbox[gallery#my_id.my_class][my_gallery] > gallery#my_id.my_class
74
+ firstArg = relAttr.match(/^superbox\[([^\]]+)\]/)[1],
75
+
76
+ // Match type. Ex: superbox[gallery#my_id.my_class][my_gallery] > gallery
77
+ type = firstArg.match(/^([^#\.]+)/)[1],
78
+
79
+ // Match additionnal classes or IDs (#xxx.yyy.zzz)
80
+ boxCurrentAttrs = firstArg.replace(type, "").match(/([#\.][^#\.\]]+)/g) || [],
81
+
82
+ // Box ID and classes
83
+ newBoxId = settings.boxId,
84
+ newBoxClasses = settings.boxClasses;
85
+
86
+ // Prevent multiple inits
87
+ if ($this.data("superbox_init")) { return; }
88
+ $this.data("superbox_init", true);
89
+
90
+ // Additionnal rel settings
91
+ this._relSettings = relAttr.replace("superbox["+ type + boxCurrentAttrs.join("") +"]", "");
92
+
93
+ // Redefine settings
94
+ $.each(boxCurrentAttrs, function(i, val) { // each class or id
95
+ if (val.substr(0,1) == "#") {
96
+ newBoxId = val.substr(1);
97
+
98
+ } else if (val.substr(0,1) == ".") {
99
+ newBoxClasses += " " + val.substr(1);
100
+ }
101
+ });
102
+
103
+ // Call type method
104
+ if (type.search(/^image|gallery|iframe|content|ajax$/) != -1) {
105
+ $this.superbox(type, {boxId: newBoxId, boxClasses: newBoxClasses});
106
+ }
107
+ });
108
+ };
109
+
110
+ /*-- Superbox Method --*/
111
+ $.fn.superbox = function(type, curSettings) {
112
+
113
+ $.superbox[type](this, $.extend({}, settings, curSettings));
114
+
115
+ this.click(function(e) {
116
+ e.preventDefault();
117
+ $curLink = this;
118
+ });
119
+ };
120
+
121
+ /*-- Types --*/
122
+ $.extend($.superbox, {
123
+
124
+ // Wait... (loading)
125
+ wait: function(callback) {
126
+
127
+ isWaiting = true;
128
+
129
+ prepareBox();
130
+
131
+ // Loading anim
132
+ initLoading(function() {
133
+
134
+ // Execute callback after animation
135
+ callback();
136
+ });
137
+ },
138
+
139
+ // Custom SuperBox!
140
+ open: function(content, curSettings) {
141
+
142
+ curSettings = $.extend({}, settings, curSettings);
143
+
144
+ // Launch load animation
145
+ if (!isWaiting) {
146
+ $.superbox.wait(function(){
147
+ $.superbox.open(content, curSettings);
148
+ });
149
+ return;
150
+ }
151
+
152
+ // Specified dimensions
153
+ $superbox.width( curSettings.boxWidth+"px" );
154
+ $innerbox.height( curSettings.boxHeight+"px" );
155
+
156
+ // Set Id and Classes
157
+ $superbox.attr("id", curSettings.boxId).attr("class", curSettings.boxClasses);
158
+
159
+ // Append content
160
+ $(content).appendTo($innerbox);
161
+
162
+ // Show box
163
+ showBox(curSettings);
164
+
165
+ // Stop waiting
166
+ isWaiting = false;
167
+ },
168
+
169
+ // Close SuperBox!
170
+ close: function() {
171
+
172
+ hideBox();
173
+ $overlay.fadeOut(300, function() {
174
+
175
+ // Show hidden elements for IE6
176
+ hideElts.show();
177
+ });
178
+ galleryMode = false;
179
+ },
180
+
181
+ // Image
182
+ image: function($elt, curSettings, isGallery) {
183
+
184
+ // On click event
185
+ $elt.click(function() {
186
+
187
+ galleryMode = !!isGallery;
188
+
189
+ $.superbox.wait(function() {
190
+
191
+ var relSettings = getRelSettings($elt.get(0)),
192
+ dimensions = false;
193
+
194
+ // Extra settings
195
+ if (!!relSettings) {
196
+
197
+ var relDimensions;
198
+
199
+ if (galleryMode) {
200
+ relDimensions = relSettings[1];
201
+
202
+ } else {
203
+ relDimensions = relSettings[0];
204
+ }
205
+
206
+ if (!!relDimensions) {
207
+ dimensions = relDimensions.split("x");
208
+ }
209
+ }
210
+
211
+ // Image
212
+ var $curImg = $('<img src="'+ $elt.attr("href") +'" title="'+ ($elt.attr("title") || $elt.text()) +'" />');
213
+
214
+ // On image load
215
+ $curImg.load(function() {
216
+
217
+ // Image box dimensions
218
+ if (!!dimensions && dimensions[0] != "") {
219
+ var boxWidth = dimensions[0] - 0;
220
+ } else {
221
+ // image width + $innerbox padding
222
+ var boxWidth = $curImg.width() + ($innerbox.css("paddingLeft").slice(0,-2)-0) + ($innerbox.css("paddingRight").slice(0,-2)-0);
223
+ }
224
+ if (!!dimensions && dimensions[1] != "") {
225
+ var boxHeight = dimensions[1] - 0;
226
+ } else {
227
+ var boxHeight = $curImg.height();
228
+ }
229
+
230
+ var localSettings = $.extend({}, curSettings, {
231
+ boxClasses: (galleryMode? "gallery " : "image ") + curSettings.boxClasses,
232
+ boxWidth: boxWidth,
233
+ boxHeight: boxHeight,
234
+ beforeOpen: function() {
235
+ if (galleryMode) {
236
+ // "Prev / Next" buttons
237
+ nextPrev($elt, relSettings[0]);
238
+ }
239
+ }
240
+ });
241
+
242
+ // Open SuperBox!
243
+ $.superbox.open($curImg, localSettings);
244
+ });
245
+
246
+ // Append image to SuperBox! (to trigger loading)
247
+ $curImg.appendTo($innerbox);
248
+ });
249
+
250
+ });
251
+ },
252
+
253
+ // Gallery
254
+ gallery: function($elt, curSettings) {
255
+
256
+ // Extra settings
257
+ var extraSettings = getRelSettings($elt.get(0));
258
+
259
+ // Create group
260
+ if(!galleryGroups[extraSettings[0]]) {
261
+ galleryGroups[extraSettings[0]] = [];
262
+ }
263
+
264
+ // Add element to current group
265
+ galleryGroups[extraSettings[0]].push($elt);
266
+
267
+ $elt.data("superboxGroupKey", galleryGroups[extraSettings[0]].length - 1);
268
+
269
+ // Image Box
270
+ $.superbox["image"]($elt, curSettings, true);
271
+ },
272
+
273
+ // iframe
274
+ iframe: function($elt, curSettings) {
275
+
276
+ // On click event
277
+ $elt.click(function() {
278
+
279
+ $.superbox.wait(function() {
280
+
281
+ // Extra settings
282
+ var extraSettings = getRelSettings($elt.get(0));
283
+
284
+ // Dimensions
285
+ var dims = false;
286
+ if (extraSettings) {
287
+ dims = extraSettings[0].split("x");
288
+ }
289
+
290
+ var localSettings = $.extend({}, curSettings, {
291
+ boxClasses: "iframe " + curSettings.boxClasses,
292
+ boxWidth: dims[0] || curSettings.boxWidth,
293
+ boxHeight: dims[1] || curSettings.boxHeight
294
+ });
295
+
296
+ // iframe element
297
+ var $iframe = $('<iframe title="'+ $elt.text() +'" src="'+ $elt.attr("href") +'" name="'+ $elt.attr("href") +'" frameborder="0" scrolling="auto" width="'+ curSettings.boxWidth +'" height="'+ curSettings.boxHeight +'"></iframe>');
298
+
299
+ // On iframe load
300
+ $iframe.one("load", function() {
301
+
302
+ // Open SuperBox!
303
+ $.superbox.open($iframe, localSettings);
304
+ });
305
+
306
+ // Append iframe to SuperBox! (to trigger loading)
307
+ $iframe.appendTo($innerbox);
308
+ });
309
+
310
+ });
311
+ },
312
+
313
+ // Content
314
+ content: function($elt, curSettings) {
315
+
316
+ // On click event
317
+ $elt.click(function() {
318
+
319
+ $.superbox.wait(function() {
320
+
321
+ // Extra settings
322
+ var extraSettings = getRelSettings($elt.get(0));
323
+
324
+ // Dimensions
325
+ var dims = false;
326
+ if (extraSettings) {
327
+ dims = extraSettings[0].split("x");
328
+ }
329
+
330
+ // Specific settings
331
+ var localSettings = $.extend({}, curSettings, {
332
+ boxClasses: "content " + curSettings.boxClasses,
333
+ boxWidth: dims[0] || curSettings.boxWidth,
334
+ boxHeight: dims[1] || curSettings.boxHeight
335
+ });
336
+
337
+ // Open SuperBox!
338
+ $.superbox.open($($elt.attr('href')).clone().show(), localSettings);
339
+ });
340
+
341
+ });
342
+ },
343
+
344
+ // Ajax
345
+ ajax: function($elt, curSettings) {
346
+
347
+ // On click event
348
+ $elt.click(function() {
349
+
350
+ $.superbox.wait(function() {
351
+
352
+ // Extra settings
353
+ var extraSettings = getRelSettings($elt.get(0));
354
+
355
+ // Dimensions
356
+ var dims = false;
357
+ if (extraSettings && extraSettings[1]) {
358
+ dims = extraSettings[1].split("x");
359
+ }
360
+
361
+ // Extend default dimension settings
362
+ var localSettings = $.extend({}, curSettings, {
363
+ boxClasses: "ajax " + curSettings.boxClasses,
364
+ boxWidth: dims[0] || curSettings.boxWidth,
365
+ boxHeight: dims[1] || curSettings.boxHeight
366
+ });
367
+
368
+ // Get Ajax URL + ID
369
+ var splitUrl = extraSettings[0].split("#");
370
+ var ajaxUrl = splitUrl[0];
371
+ var anchor = splitUrl[1] || false;
372
+
373
+ $.get( ajaxUrl, function(data) {
374
+
375
+ // Get a specific element (by ID)?
376
+ if (anchor !== false) {
377
+ data = $(data).find("#" + anchor);
378
+ }
379
+
380
+ // Open SuperBox!
381
+ $.superbox.open(data, localSettings);
382
+ });
383
+ });
384
+ });
385
+ }
386
+ });
387
+
388
+ // Get extra settings in rel attribute
389
+ function getRelSettings(elt) {
390
+ return elt._relSettings.match(/([^\[\]]+)/g);
391
+ };
392
+
393
+ // Next / Previous
394
+ function nextPrev($elt, group) {
395
+
396
+ $nextprev.show();
397
+
398
+ galleryMode = true;
399
+
400
+ var nextKey = $elt.data("superboxGroupKey") + 1,
401
+ prevKey = nextKey - 2;
402
+
403
+ // Next
404
+ if (galleryGroups[group][nextKey]) {
405
+ $nextBtn.removeClass("disabled").unbind("click").bind("click", function() {
406
+ galleryGroups[group][nextKey].click();
407
+ });
408
+
409
+ } else {
410
+ $nextBtn.addClass("disabled").unbind("click");
411
+ }
412
+
413
+ // Prev
414
+ if (galleryGroups[group][prevKey]) {
415
+ $prevBtn.removeClass("disabled").unbind("click").bind("click", function() {
416
+ galleryGroups[group][prevKey].click();
417
+ });
418
+
419
+ } else {
420
+ $prevBtn.addClass("disabled").unbind("click");
421
+ }
422
+
423
+ // Keys shortcuts
424
+ $(document)
425
+ .unbind("keydown.superbox_np")
426
+ .bind("keydown.superbox_np", function(e) {
427
+
428
+ // Left/right arrows
429
+ if (e.keyCode == 39) {
430
+ $nextBtn.click();
431
+
432
+ } else if (e.keyCode == 37) {
433
+ $prevBtn.click();
434
+ }
435
+ });
436
+ };
437
+
438
+ // Hide Box
439
+ function hideBox() {
440
+
441
+ if (!!$curLink) {
442
+ $curLink.focus();
443
+ }
444
+
445
+ $(document).unbind("keydown.spbx_close").unbind("keydown.superbox_np");
446
+ $loading.hide();
447
+ $nextprev.hide();
448
+ $wrapper.hide().css({position: "fixed", top: 0});
449
+ $innerbox.empty();
450
+ $curLink = null;
451
+ };
452
+
453
+ // "Loading..."
454
+ function initLoading(callback) {
455
+
456
+ // Keys shortcuts
457
+ $(document)
458
+ .unbind("keydown.spbx_close")
459
+ .bind("keydown.spbx_close",function(e) {
460
+
461
+ // Escape
462
+ if (e.keyCode == 27) {
463
+ $.superbox.close();
464
+ }
465
+ });
466
+
467
+ var loading = function() {
468
+
469
+ // IE6
470
+ if($.browser.msie && $.browser.version < 7) {
471
+ $wrapper.css({position: "absolute", top:"50%"});
472
+ }
473
+
474
+ // Hide elements for IE6
475
+ hideElts.hide();
476
+
477
+ $loading.show();
478
+ callback();
479
+ };
480
+
481
+ if (galleryMode) {
482
+ $overlay.css("opacity", settings.overlayOpacity).show();
483
+ loading();
484
+ }
485
+ else {
486
+ $overlay.css("opacity", 0).show().fadeTo(300, settings.overlayOpacity, loading);
487
+ }
488
+ };
489
+
490
+ // "Prepare" box : Show $superbox with top:-99999px;
491
+ function prepareBox() {
492
+ $wrapper.show();
493
+ $innerbox.empty();
494
+ $superbox.css({position: "absolute", top: "-99999px"});
495
+ };
496
+
497
+ // Display box
498
+ function showBox(curSettings) {
499
+
500
+ curSettings = $.extend({}, settings, curSettings);
501
+
502
+ // Stop "Loading..."
503
+ $loading.hide();
504
+
505
+ // Show $superbox
506
+ $superbox.css({position: "static", top: 0, opacity: 0});
507
+
508
+ // IE6 and IE7
509
+ if ($.browser.msie && $.browser.version < 8) {
510
+ $superbox.css({position: "relative", top:"-50%"});
511
+
512
+ // IE6
513
+ if ($.browser.msie && $.browser.version < 7) {
514
+ $wrapper.css({position: "absolute", top:"50%"});
515
+ }
516
+ }
517
+
518
+ // Position absolute if image height > window height
519
+ if ( $(window).height() < $wrapper.height() ) {
520
+ $wrapper.css({position: "absolute", top: ($wrapper.offset().top + 10) + "px"});
521
+ }
522
+
523
+ curSettings.beforeOpen();
524
+
525
+ $superbox.fadeTo(300, 1, function(){
526
+ curSettings.afterOpen();
527
+ }).focus();
528
+ };
529
+
530
+ // Create base elements (overlay, wrapper, box, loading)
531
+ function createElements() {
532
+
533
+ // Overlay (background)
534
+ $overlay = $('<div id="superbox-overlay"/>').appendTo("body").hide();
535
+
536
+ // Wrapper
537
+ $wrapper = $('<div id="superbox-wrapper"/>').appendTo("body").hide();
538
+
539
+ // Box container
540
+ $container = $('<div id="superbox-container"/>').appendTo($wrapper);
541
+
542
+ // Box
543
+ $superbox = $('<div id="superbox" tabindex="0"/>').appendTo($container);
544
+
545
+ // Inner box
546
+ $innerbox = $('<div id="superbox-innerbox"/>').appendTo($superbox);
547
+
548
+ // "Next / Previous"
549
+ $nextprev = $('<p class="nextprev"/>').appendTo($superbox).hide();
550
+ $prevBtn = $('<a class="prev" tabindex="0" role="button"><strong><span>'+ settings.prevTxt +'</span></strong></a>').appendTo($nextprev);
551
+ $nextBtn = $('<a class="next" tabindex="0" role="button"><strong><span>'+ settings.nextTxt +'</span></strong></a>').appendTo($nextprev);
552
+
553
+ // Add close button
554
+ $closeBtn = $('<p class="close"><a tabindex="0" role="button"><strong><span>'+ settings.closeTxt +'</span></strong></a></p>').prependTo($superbox).find("a");
555
+
556
+ // "Loading..."
557
+ $loading = $('<p class="loading">'+ settings.loadTxt +'</p>').appendTo($container).hide();
558
+ };
559
+
560
+ // Init global events : close (echap), keyboard access (focus + enter)
561
+ function initGlobalEvents() {
562
+
563
+ // Hide on click
564
+ $overlay.add($wrapper).add($closeBtn).click(function() {
565
+ $.superbox.close();
566
+ });
567
+
568
+ // Remove "hide on click" on superbox
569
+ $superbox.click(function(e) {
570
+ e.stopPropagation();
571
+ });
572
+
573
+ // Opera already click on "focus + enter"
574
+ if (!window.opera) {
575
+
576
+ // Keyboard (focus + enter)
577
+ $prevBtn.add($closeBtn).add($nextBtn).keypress(function(e) {
578
+ if (e.keyCode === 13) {
579
+ $(this).click();
580
+ }
581
+ });
582
+ }
583
+ }
584
+
585
+ })(jQuery);
skin/frontend/default/default/js/tnt/tnt.js ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function moreinfos(infos) {
2
+ if( jQuery('#tnt_description_'+infos).is(":visible") ) {
3
+ jQuery('#tnt_description_'+infos).hide();
4
+ jQuery('.more_'+infos).show();
5
+ jQuery('.less_'+infos).hide();
6
+ } else {
7
+ jQuery('.more_'+infos).hide();
8
+ jQuery('.less_'+infos).show();
9
+ jQuery('#tnt_description_'+infos).show();
10
+ }
11
+ }
12
+
13
+ function radioCheck(){
14
+ if ($('s_method_tnt_JD') && $("s_method_tnt_JD").checked){
15
+ $("tnt_pr").show();
16
+ $("tnt_cp").hide();
17
+ } else {
18
+ if($("tnt_pr")) { $("tnt_pr").hide(); }
19
+
20
+ fetchVille($("city_url").value, 'villes');
21
+ $("tnt_cp").show();
22
+ }
23
+ }
24
+
25
+ function fetchPoint(url,area){
26
+ var zipcode = escape($("relais_zipcode").value);
27
+ new Ajax.Request(url,{
28
+ method:'post',
29
+ parameters:{zipcode:zipcode},
30
+ onLoading:function(){
31
+ $("loadingpointswait").show();
32
+ },
33
+ onComplete:function(){
34
+ $("loadingpointswait").hide();
35
+ },
36
+ onSuccess:function(transport){
37
+ $(area).update(transport.responseText);
38
+ }
39
+ });
40
+ }
41
+
42
+ function fetchVille(url,area){
43
+ var address = escape($("address").value);
44
+ var zipcode = escape($("zipcode").value);
45
+ var city = escape($("city").value);
46
+ var company = escape($("company").value);
47
+
48
+ new Ajax.Request(url,{
49
+ method:'post',
50
+ parameters:{address:address,zipcode:zipcode,city:city,company:company},
51
+ onLoading:function(){
52
+ $("loadingvilleswait").show();
53
+ },
54
+ onComplete:function(){
55
+ $("loadingvilleswait").hide();
56
+ },
57
+ onSuccess:function(transport){
58
+ $(area).update(transport.responseText);
59
+ }
60
+ });
61
+ }
62
+
63
+ function shippingMethodTnt(url){
64
+
65
+ if($("s_method_tnt_JD") && $("s_method_tnt_JD").checked){
66
+ var radioGrp = document['forms']['co-shipping-method-form']['tnt_relais'];
67
+ if (radioGrp){
68
+ for(i=0; i < radioGrp.length; i++){
69
+ if (radioGrp[i].checked == true) {
70
+ var radioValue = radioGrp[i].value;
71
+ }
72
+ }
73
+ }
74
+
75
+ var shippingstring = new Array();
76
+ if(radioValue){
77
+ shippingstring=radioValue.split("&&&");
78
+ }
79
+ else {
80
+ alert ("Vous devez choisir une adresse de livraison");
81
+ return false;
82
+ }
83
+
84
+ var street = shippingstring[0];
85
+ var description = shippingstring[1];
86
+ var postcode = shippingstring[2];
87
+ var city = shippingstring[3];
88
+ new Ajax.Request(url,{
89
+ method:'post',
90
+ parameters:{street:street,description:description,postcode:postcode,city:city}
91
+ });
92
+
93
+ }
94
+
95
+ if( ($("s_method_tnt_AZ") && $("s_method_tnt_AZ").checked)
96
+ || ($("s_method_tnt_TZ") && $("s_method_tnt_TZ").checked)
97
+ || ($("s_method_tnt_MZ") && $("s_method_tnt_MZ").checked)
98
+ || ($("s_method_tnt_JZ") && $("s_method_tnt_JZ").checked)
99
+ || ($("s_method_tnt_A") && $("s_method_tnt_A").checked)
100
+ || ($("s_method_tnt_T") && $("s_method_tnt_T").checked)
101
+ || ($("s_method_tnt_M") && $("s_method_tnt_M").checked)
102
+ || ($("s_method_tnt_J") && $("s_method_tnt_J").checked) ){
103
+ var radioGrp = document['forms']['co-shipping-method-form']['tnt_ville'];
104
+
105
+ if (radioGrp){
106
+ for(i=0; i < radioGrp.length; i++){
107
+ if (radioGrp[i].checked == true) {
108
+ var radioValue = radioGrp[i].value;
109
+ }
110
+ }
111
+ }
112
+
113
+ if(!radioValue && $("tnt_ville1").checked){
114
+ var radioValue = $("tnt_ville1").value;
115
+ }
116
+
117
+ var shippingstring = new Array();
118
+ if(radioValue){
119
+ shippingstring=radioValue.split("&&&");
120
+ }
121
+ else {
122
+ alert ("Vous devez choisir une ville de livraison");
123
+ return false;
124
+ }
125
+
126
+ var street = shippingstring[0];
127
+ var description = shippingstring[1];
128
+ var postcode = shippingstring[2];
129
+ var city = shippingstring[3];
130
+ new Ajax.Request(url,{
131
+ method:'post',
132
+ parameters:{street:street,description:description,postcode:postcode,city:city}
133
+ });
134
+ }
135
+
136
+ shippingMethod.save();
137
+ }
138
+
139
+ jQuery(function() {
140
+ jQuery('input[type="radio"]').removeAttr('checked');
141
+ });