Iglobal_Main - Version 1.5.0

Version Notes

New Features:

Import State/Region with 2 digit region code.

Import the same shipping method that the customer sees in the iGlobal checkout.

Allow changing which product attributes are sent to iglobal

Save the customer Notes onto the order

Download this release

Release Info

Developer Brian Olsen
Extension Iglobal_Main
Version 1.5.0
Comparing to
See all releases


Code changes from version 1.4.0 to 1.5.0

app/code/community/Iglobal/Stores/Helper/Data.php CHANGED
@@ -53,10 +53,10 @@ class Iglobal_Stores_Helper_Data extends Mage_Core_Helper_Abstract
53
  $weight = $item->getWeight();
54
  }
55
  $dimensions = array(
56
- 'weight' => $this->units2lbs($weight, $product->getAttributeText('ig_weight_units')),
57
- 'length' => $this->dim2inch($product->getIgLength(), $dim),
58
- 'width' => $this->dim2inch($product->getIgWidth(), $dim),
59
- 'height' => $this->dim2inch($product->getIgHeight(), $dim),
60
  );
61
  return $dimensions;
62
  }
@@ -85,7 +85,15 @@ class Iglobal_Stores_Helper_Data extends Mage_Core_Helper_Abstract
85
  'itemURL' => $product->getProductUrl(),
86
  'imageURL' => str_replace("http:", "https:", Mage::helper('catalog/image')->init($product, 'thumbnail')),
87
  'itemDescriptionLong' => $optionList,
88
- 'countryOfOrigin' => $product->getCountryOfManufacture(),
 
 
 
 
 
 
 
 
89
  ) + $this->getDimensions($product, $item);
90
  return $details;
91
  }
@@ -209,6 +217,13 @@ class Iglobal_Stores_Helper_Data extends Mage_Core_Helper_Abstract
209
  return $this->_files;
210
  }
211
 
 
 
 
 
 
 
 
212
  protected function _getConfigValue($key, $store)
213
  {
214
  return Mage::getStoreConfig(self::XML_CONFIG_PATH . $key, $store = '');
53
  $weight = $item->getWeight();
54
  }
55
  $dimensions = array(
56
+ 'weight' => $this->units2lbs($this->getProductAttribute($product, 'weight'), $product->getAttributeText('ig_weight_units')),
57
+ 'length' => $this->dim2inch($this->getProductAttribute($product, 'length'), $dim),
58
+ 'width' => $this->dim2inch($this->getProductAttribute($product, 'width'), $dim),
59
+ 'height' => $this->dim2inch($this->getProductAttribute($product, 'height'), $dim),
60
  );
61
  return $dimensions;
62
  }
85
  'itemURL' => $product->getProductUrl(),
86
  'imageURL' => str_replace("http:", "https:", Mage::helper('catalog/image')->init($product, 'thumbnail')),
87
  'itemDescriptionLong' => $optionList,
88
+ 'countryOfOrigin' => $this->getProductAttribute($product, 'country_of_origin'),
89
+ 'itemBrand' => $this->getProductAttribute($product, 'brand'),
90
+ 'itemCategory' => $this->getProductAttribute($product, 'category'),
91
+ 'itemHSCode' => $this->getProductAttribute($product, 'hs_code'),
92
+ 'itemCustomization' => $this->getProductAttribute($product, 'customization'),
93
+ 'itemColor' => $this->getProductAttribute($product, 'color'),
94
+ 'itemMaterial' => $this->getProductAttribute($product, 'material'),
95
+ 'status' => $this->getProductAttribute($product, 'status'),
96
+ 'nonShippable' => (bool)$this->getProductAttribute($product, 'non_shippable'),
97
  ) + $this->getDimensions($product, $item);
98
  return $details;
99
  }
217
  return $this->_files;
218
  }
219
 
220
+ protected function getProductAttribute($product, $attributeName) {
221
+ $value = Mage::getStoreconfig('iglobal_integration/ig_item_attribute/' . $attributeName);
222
+ if($value) {
223
+ return $product->getData($value);
224
+ }
225
+ return null;
226
+ }
227
  protected function _getConfigValue($key, $store)
228
  {
229
  return Mage::getStoreConfig(self::XML_CONFIG_PATH . $key, $store = '');
app/code/community/Iglobal/Stores/Model/Configoptions.php CHANGED
@@ -1,15 +1,17 @@
1
  <?php
2
 
3
- class Iglobal_Stores_Model_ConfigOptions
4
  {
5
  public function toOptionArray()
6
  {
7
- return array(
8
- array('value'=>1, 'label'=>Mage::helper('stores')->__('Hello')),
9
- array('value'=>2, 'label'=>Mage::helper('stores')->__('Goodbye')),
10
- array('value'=>3, 'label'=>Mage::helper('stores')->__('Yes')),
11
- array('value'=>4, 'label'=>Mage::helper('stores')->__('No')),
12
- );
 
 
13
  }
14
 
15
  }
1
  <?php
2
 
3
+ class Iglobal_Stores_Model_ConfigOptions extends Mage_Eav_Model_Entity_Attribute_Source_Store
4
  {
5
  public function toOptionArray()
6
  {
7
+ $collection = Mage::getResourceModel('catalog/product_attribute_collection')->load();
8
+ $options = array(array('value'=> null, 'label'=> '- Not mapped -' ));
9
+ foreach($collection as $attr) {
10
+ if($attr->getIsVisible()) {
11
+ $options[] = array('value' => $attr->getAttributeCode(), 'label' => $attr->getFrontendLabel());
12
+ }
13
+ }
14
+ return $options;
15
  }
16
 
17
  }
app/code/community/Iglobal/Stores/Model/Observer.php CHANGED
@@ -69,9 +69,9 @@ class Iglobal_Stores_Model_Observer
69
  foreach ($orders as $order) {
70
  $magentoOrders[$order->getIgOrderNumber()] = $order;
71
  }
72
-
73
  //get array with all orders in past
74
- $data = Mage::getModel('stores/rest')->getAllOrdersSinceDate('20151006');
75
  foreach ($data->orders as $igOrder)
76
  {
77
 
69
  foreach ($orders as $order) {
70
  $magentoOrders[$order->getIgOrderNumber()] = $order;
71
  }
72
+ $date = date("Ymd", strtotime("-1 week"));
73
  //get array with all orders in past
74
+ $data = Mage::getModel('stores/rest')->getAllOrdersSinceDate($date);
75
  foreach ($data->orders as $igOrder)
76
  {
77
 
app/code/community/Iglobal/Stores/Model/Order.php CHANGED
@@ -29,8 +29,8 @@ class Iglobal_Stores_Model_Order extends Mage_Core_Model_Abstract
29
  $order->hold();
30
  $order->addStatusHistoryComment("Order Set to {$status} by iGlobal", false);
31
  $order->save();
32
- } elseif ($status == self::STATUS_IN_PROCESS && $order->canUnHold()) {
33
- $order->unHold();
34
  $order->addStatusHistoryComment("Order Set to {$status} by iGlobal", false);
35
  $order->save();
36
  }
@@ -78,7 +78,25 @@ class Iglobal_Stores_Model_Order extends Mage_Core_Model_Abstract
78
  Mage::unregister('shipping_methodtitle');
79
  return $order;
80
  }
81
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  protected function setContactInfo()
83
  {
84
  //set customer info
@@ -102,27 +120,6 @@ class Iglobal_Stores_Model_Order extends Mage_Core_Model_Abstract
102
  $street = array($street, $this->iglobal_order->address2);
103
  }
104
 
105
- $region = Mage::getModel('directory/region')
106
- ->loadbyName($this->iglobal_order->state, $this->iglobal_order->countryCode);
107
- if (!$region->getId())
108
- {
109
- // Lookup region from iGlobalstores
110
- $regionId = $this->rest->getRegionId(
111
- $this->iglobal_order->countryCode,
112
- $this->iglobal_order->state,
113
- $this->iglobal_order_id);
114
- $region->load($regionId->magentoRegionId);
115
- if (!$region->getId())
116
- {
117
- // Create a new region
118
- $region->setData(array(
119
- 'country_id' => $this->iglobal_order->countryCode,
120
- 'defalt_name' => $this->iglobal_order->state
121
- ))->save();
122
-
123
- }
124
- }
125
-
126
  $addressData = array(
127
  'firstname' => $name_first,
128
  'lastname' => $name_last,
@@ -131,9 +128,9 @@ class Iglobal_Stores_Model_Order extends Mage_Core_Model_Abstract
131
  'postcode' => $this->iglobal_order->zip,
132
  'telephone' => $this->iglobal_order->phone,
133
  'region' => $this->iglobal_order->state,
134
- 'region_id' => $region->getId(),
135
  'country_id' => $this->iglobal_order->countryCode,
136
- 'company' => '',//$this->iglobal_order->company,
137
  );
138
 
139
  if (!empty($this->iglobal_order->billingAddress1)) {
@@ -158,9 +155,10 @@ class Iglobal_Stores_Model_Order extends Mage_Core_Model_Abstract
158
  'city' => $this->iglobal_order->billingCity,
159
  'postcode' => $this->iglobal_order->billingZip,
160
  'telephone' => $this->iglobal_order->billingPhone,
161
- 'region' => $this->iglobal_order->state,
162
- 'region_id' => $region->getId(),
163
  'country_id' => $this->iglobal_order->billingCountryCode,
 
164
  );
165
 
166
  } else {
@@ -206,7 +204,7 @@ class Iglobal_Stores_Model_Order extends Mage_Core_Model_Abstract
206
  }
207
  foreach($extra as $item)
208
  {
209
- $this->quote->removeItem($item->getId());
210
  }
211
  }
212
 
@@ -254,11 +252,14 @@ class Iglobal_Stores_Model_Order extends Mage_Core_Model_Abstract
254
  $carrierMethod = 'default';
255
  }
256
  $shipper = $shippers[$carrierMethod];
257
-
 
 
 
258
  //Add things to the register so they can be used by the shipping method
259
  Mage::register('shipping_cost', $this->iglobal_order->shippingTotal);
260
  Mage::register('shipping_carriertitle', $shipper[0]);
261
- Mage::register('shipping_methodtitle', $shipper[1]);
262
  $shippingAddress->setCollectShippingRates(true)
263
  ->collectShippingRates()
264
  ->setShippingMethod('excellence_excellence');
@@ -291,9 +292,14 @@ class Iglobal_Stores_Model_Order extends Mage_Core_Model_Abstract
291
  $service = Mage::getModel('stores/service_quote', $this->quote);
292
  $service->submitAll();
293
  $order = $service->getOrder();
 
 
 
 
 
 
 
294
 
295
- // cleaning up
296
- Mage::getSingleton('checkout/session')->clear();
297
 
298
  $id = $order->getEntityId();
299
 
@@ -347,6 +353,25 @@ class Iglobal_Stores_Model_Order extends Mage_Core_Model_Abstract
347
  }
348
  }
349
  $this->checkStatus($order);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
350
  } catch (Exception $e) {
351
  $order->addStatusHistoryComment('iGlobal Invoicer: Exception occurred during automatically invoicing. Exception message: '.$e->getMessage(), false);
352
  $order->save();
29
  $order->hold();
30
  $order->addStatusHistoryComment("Order Set to {$status} by iGlobal", false);
31
  $order->save();
32
+ } elseif ($status == self::STATUS_IN_PROCESS && $order->canUnhold()) {
33
+ $order->unhold();
34
  $order->addStatusHistoryComment("Order Set to {$status} by iGlobal", false);
35
  $order->save();
36
  }
78
  Mage::unregister('shipping_methodtitle');
79
  return $order;
80
  }
81
+ protected function regionId($state, $countryCode){
82
+ $region = Mage::getModel('directory/region')->loadbyName($state, $countryCode);
83
+ if (!$region->getId())
84
+ {
85
+ // Lookup region from iGlobalstores
86
+ $regionId = $this->rest->getRegionId($countryCode, $state, $this->iglobal_order_id);
87
+ $region->load($regionId->magentoRegionId);
88
+ if (!$region->getId())
89
+ {
90
+ try {
91
+ // Create a new region
92
+ $region->setData(array('country_id' => $countryCode, 'code'=> $regionId->isoCode,'default_name' => $state))->save();
93
+ } catch (Exception $e) {
94
+ return null;
95
+ }
96
+ }
97
+ }
98
+ return $region->getId();
99
+ }
100
  protected function setContactInfo()
101
  {
102
  //set customer info
120
  $street = array($street, $this->iglobal_order->address2);
121
  }
122
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  $addressData = array(
124
  'firstname' => $name_first,
125
  'lastname' => $name_last,
128
  'postcode' => $this->iglobal_order->zip,
129
  'telephone' => $this->iglobal_order->phone,
130
  'region' => $this->iglobal_order->state,
131
+ 'region_id' => $this->regionId($this->iglobal_order->state, $this->iglobal_order->countryCode),
132
  'country_id' => $this->iglobal_order->countryCode,
133
+ 'company' => $this->iglobal_order->company,
134
  );
135
 
136
  if (!empty($this->iglobal_order->billingAddress1)) {
155
  'city' => $this->iglobal_order->billingCity,
156
  'postcode' => $this->iglobal_order->billingZip,
157
  'telephone' => $this->iglobal_order->billingPhone,
158
+ 'region' => $this->iglobal_order->billingState,
159
+ 'region_id' => $this->regionId($this->iglobal_order->billingState, $this->iglobal_order->billingCountryCode),
160
  'country_id' => $this->iglobal_order->billingCountryCode,
161
+ 'company' => $this->iglobal_order->company,
162
  );
163
 
164
  } else {
204
  }
205
  foreach($extra as $item)
206
  {
207
+ // $this->quote->removeItem($item->getId());
208
  }
209
  }
210
 
252
  $carrierMethod = 'default';
253
  }
254
  $shipper = $shippers[$carrierMethod];
255
+ $shippingMethod = $shipper[1];
256
+ if($this->iglobal_order->customerSelectedShippingName) {
257
+ $shippingMethod = $this->iglobal_order->customerSelectedShippingName;
258
+ }
259
  //Add things to the register so they can be used by the shipping method
260
  Mage::register('shipping_cost', $this->iglobal_order->shippingTotal);
261
  Mage::register('shipping_carriertitle', $shipper[0]);
262
+ Mage::register('shipping_methodtitle', $shippingMethod);
263
  $shippingAddress->setCollectShippingRates(true)
264
  ->collectShippingRates()
265
  ->setShippingMethod('excellence_excellence');
292
  $service = Mage::getModel('stores/service_quote', $this->quote);
293
  $service->submitAll();
294
  $order = $service->getOrder();
295
+ if($order) {
296
+ // cleaning up
297
+ Mage::getSingleton('checkout/session')->clear();
298
+ } else {
299
+ $this->quote->setIsActive(1)->save();
300
+ return;
301
+ }
302
 
 
 
303
 
304
  $id = $order->getEntityId();
305
 
353
  }
354
  }
355
  $this->checkStatus($order);
356
+
357
+ // add customer notes
358
+ if($this->iglobal_order->notes){
359
+ foreach ($this->iglobal_order->notes as $note) {
360
+ if($note->customerNote) {
361
+ $order->addStatusHistoryComment($note->note, false);
362
+ }
363
+ }
364
+ }
365
+ $extraNote = "";
366
+ if($this->iglobal_order->birthDate) {
367
+ $extraNote .= "Birthdate: " . $this->iglobal_order->birthDate . "\n";
368
+ }
369
+ if($this->iglobal_order->nationalIdentifier) {
370
+ $extraNote .= "National Identifier: " . $this->iglobal_order->nationalIdentifier . "\n";
371
+ }
372
+ if($extraNote) {
373
+ $order->addStatusHistoryComment($extraNote, false);
374
+ }
375
  } catch (Exception $e) {
376
  $order->addStatusHistoryComment('iGlobal Invoicer: Exception occurred during automatically invoicing. Exception message: '.$e->getMessage(), false);
377
  $order->save();
app/code/community/Iglobal/Stores/Model/Rest.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  class Iglobal_Stores_Model_Rest extends Mage_Core_Model_Abstract
4
  {
5
- protected $_entryPoint = 'https://api.iglobalstores.com/v1/';
6
  protected $_store = 3; // default store ID
7
  protected $_key = '';
8
 
@@ -38,36 +38,36 @@ class Iglobal_Stores_Model_Rest extends Mage_Core_Model_Abstract
38
  public function getAllOrders()
39
  {
40
  $data = array('sinceDate'=>'20100101');
41
- return $this->callApi('orderNumbers', $data);
42
  }
43
 
44
  public function getAllOrdersSinceDate($data)
45
  {
46
  $data = array('sinceDate'=>$data);
47
- return $this->callApi('orderNumbers', $data);
48
  }
49
 
50
  public function getOrder($order)
51
  {
52
  $data = array('orderId' => $order);
53
- return $this->callApi('orderDetail', $data);
54
  }
55
 
56
  public function sendMagentoOrderId($igc_order_id, $magento_order_id) {
57
  $data = array('orderId' => $igc_order_id, 'merchantOrderId' => $magento_order_id);
58
- return $this->callApi('updateMerchantOrderId', $data);
59
  }
60
 
61
  public function createTempCart(array $data)
62
  {
63
- return $this->callApi('createTempCart', $data);
64
  }
65
 
66
  public function getRegionId($countryId, $region, $orderid)
67
  {
68
  $data = array('countryCode'=> $countryId,'region'=> $region, 'orderId' => $orderid);
69
  return $this->callApi(
70
- 'magento-region',
71
  $data,
72
  array("serviceToken" => "31ae7155-5b9e-461f-8353-9a8c3f8ae35974ffec3a-88dc-4acb-8420-270df7967338")
73
  );
2
 
3
  class Iglobal_Stores_Model_Rest extends Mage_Core_Model_Abstract
4
  {
5
+ protected $_entryPoint = 'https://api.iglobalstores.com/';
6
  protected $_store = 3; // default store ID
7
  protected $_key = '';
8
 
38
  public function getAllOrders()
39
  {
40
  $data = array('sinceDate'=>'20100101');
41
+ return $this->callApi('v1/orderNumbers', $data);
42
  }
43
 
44
  public function getAllOrdersSinceDate($data)
45
  {
46
  $data = array('sinceDate'=>$data);
47
+ return $this->callApi('v1/orderNumbers', $data);
48
  }
49
 
50
  public function getOrder($order)
51
  {
52
  $data = array('orderId' => $order);
53
+ return $this->callApi('v2/orderDetail', $data);
54
  }
55
 
56
  public function sendMagentoOrderId($igc_order_id, $magento_order_id) {
57
  $data = array('orderId' => $igc_order_id, 'merchantOrderId' => $magento_order_id);
58
+ return $this->callApi('v1/updateMerchantOrderId', $data);
59
  }
60
 
61
  public function createTempCart(array $data)
62
  {
63
+ return $this->callApi('v1/createTempCart', $data);
64
  }
65
 
66
  public function getRegionId($countryId, $region, $orderid)
67
  {
68
  $data = array('countryCode'=> $countryId,'region'=> $region, 'orderId' => $orderid);
69
  return $this->callApi(
70
+ 'v1/magento-region',
71
  $data,
72
  array("serviceToken" => "31ae7155-5b9e-461f-8353-9a8c3f8ae35974ffec3a-88dc-4acb-8420-270df7967338")
73
  );
app/code/community/Iglobal/Stores/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Iglobal_Stores>
5
- <version>1.4.0</version>
6
  <currencies>
7
  <AED></AED>
8
  <ARS>&amp;#8371;</ARS>
@@ -315,6 +315,13 @@
315
  <igc_dev>
316
  <dev_on>0</dev_on>
317
  </igc_dev>
 
 
 
 
 
 
 
318
  </iglobal_integration>
319
 
320
  <general>
@@ -366,7 +373,7 @@
366
  <crontab>
367
  <jobs>
368
  <iglobal_order_update>
369
- <schedule><cron_expr>* */4 * * *</cron_expr></schedule>
370
  <run><model>stores/observer::orderRec</model></run>
371
  </iglobal_order_update>
372
  </jobs>
2
  <config>
3
  <modules>
4
  <Iglobal_Stores>
5
+ <version>1.5.0</version>
6
  <currencies>
7
  <AED></AED>
8
  <ARS>&amp;#8371;</ARS>
315
  <igc_dev>
316
  <dev_on>0</dev_on>
317
  </igc_dev>
318
+ <ig_item_attribute>
319
+ <weight>weight</weight>
320
+ <length>ig_length</length>
321
+ <width>ig_width</width>
322
+ <height>ig_height</height>
323
+ <country_of_origin>country_of_manufacture</country_of_origin>
324
+ </ig_item_attribute>
325
  </iglobal_integration>
326
 
327
  <general>
373
  <crontab>
374
  <jobs>
375
  <iglobal_order_update>
376
+ <schedule><cron_expr>*/30 * * * *</cron_expr></schedule>
377
  <run><model>stores/observer::orderRec</model></run>
378
  </iglobal_order_update>
379
  </jobs>
app/code/community/Iglobal/Stores/etc/system.xml CHANGED
@@ -3,7 +3,7 @@
3
  <config>
4
  <tabs>
5
  <iglobal translate="label" module="stores">
6
- <label>iGlobal Stores Configuration</label>
7
  <sort_order>150</sort_order>
8
  </iglobal>
9
  </tabs>
@@ -37,7 +37,7 @@
37
 
38
  <sections>
39
  <iglobal_integration translate="label" module="stores">
40
- <label>iGlobal Integration Options</label>
41
  <tab>iglobal</tab>
42
  <frontend_type>text</frontend_type>
43
  <sort_order>1000</sort_order>
@@ -107,7 +107,7 @@
107
 
108
  <ice>
109
  <label>ICE script</label>
110
- <comment>Paste the provided link here. Please Be sure to include "https://" at the begining.</comment>
111
  <frontend_type>text</frontend_type>
112
  <sort_order>50</sort_order>
113
  <show_in_default>1</show_in_default>
@@ -259,7 +259,7 @@
259
  </welcome_mat_css>
260
 
261
  <flag_parent>
262
- <label>Flag postition selector</label>
263
  <comment>Enter the code provided to customize the location of the Welcome Mat flag, or leave blank to use the default location.</comment>
264
  <frontend_type>text</frontend_type>
265
  <sort_order>40</sort_order>
@@ -270,7 +270,7 @@
270
  </flag_parent>
271
 
272
  <!-- <flag_method>
273
- <label>Flag attachement method</label>
274
  <comment>Enter the code provided to customize the location of the Welcome Mat flag, or leave blank to use the default location.</comment>
275
  <frontend_type>select</frontend_type>
276
  <source_model>iglobal_stores/system_config_source_dropdown_method</source_model>
@@ -319,7 +319,134 @@
319
  </fields>
320
 
321
  </igmat>
322
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
323
  <igjq translate="label">
324
  <label>jQuery Settings</label>
325
  <frontend_type>text</frontend_type>
3
  <config>
4
  <tabs>
5
  <iglobal translate="label" module="stores">
6
+ <label>iGlobal Stores</label>
7
  <sort_order>150</sort_order>
8
  </iglobal>
9
  </tabs>
37
 
38
  <sections>
39
  <iglobal_integration translate="label" module="stores">
40
+ <label>iGlobal Integration</label>
41
  <tab>iglobal</tab>
42
  <frontend_type>text</frontend_type>
43
  <sort_order>1000</sort_order>
107
 
108
  <ice>
109
  <label>ICE script</label>
110
+ <comment>Paste the provided link here. Please Be sure to include "https://" at the beginning.</comment>
111
  <frontend_type>text</frontend_type>
112
  <sort_order>50</sort_order>
113
  <show_in_default>1</show_in_default>
259
  </welcome_mat_css>
260
 
261
  <flag_parent>
262
+ <label>Flag position selector</label>
263
  <comment>Enter the code provided to customize the location of the Welcome Mat flag, or leave blank to use the default location.</comment>
264
  <frontend_type>text</frontend_type>
265
  <sort_order>40</sort_order>
270
  </flag_parent>
271
 
272
  <!-- <flag_method>
273
+ <label>Flag attachment method</label>
274
  <comment>Enter the code provided to customize the location of the Welcome Mat flag, or leave blank to use the default location.</comment>
275
  <frontend_type>select</frontend_type>
276
  <source_model>iglobal_stores/system_config_source_dropdown_method</source_model>
319
  </fields>
320
 
321
  </igmat>
322
+ <ig_item_attribute translate="label">
323
+ <label>Cart Item Attribute Mapping</label>
324
+ <comment><![CDATA[ <div style="padding:10px;background-color:#fff;border:1px solid #ddd;margin-bottom:7px;">Map your existing and/or custom fields back to iGlobal for added product info and custom rules built around your store.</div>]]></comment>
325
+ <frontend_type>text</frontend_type>
326
+ <sort_order>19</sort_order>
327
+ <show_in_default>1</show_in_default>
328
+ <show_in_website>1</show_in_website>
329
+ <show_in_store>1</show_in_store>
330
+ <fields>
331
+ <weight translate="label">
332
+ <label>Weight</label>
333
+ <frontend_type>select</frontend_type>
334
+ <source_model>stores/configoptions</source_model>
335
+ <sort_order>1</sort_order>
336
+ <show_in_default>1</show_in_default>
337
+ <show_in_website>1</show_in_website>
338
+ <show_in_store>1</show_in_store>
339
+ </weight>
340
+ <length translate="label">
341
+ <label>Length</label>
342
+ <frontend_type>select</frontend_type>
343
+ <source_model>stores/configoptions</source_model>
344
+ <sort_order>2</sort_order>
345
+ <show_in_default>1</show_in_default>
346
+ <show_in_website>1</show_in_website>
347
+ <show_in_store>1</show_in_store>
348
+ </length>
349
+ <width translate="label">
350
+ <label>Width</label>
351
+ <frontend_type>select</frontend_type>
352
+ <source_model>stores/configoptions</source_model>
353
+ <sort_order>3</sort_order>
354
+ <show_in_default>1</show_in_default>
355
+ <show_in_website>1</show_in_website>
356
+ <show_in_store>1</show_in_store>
357
+ </width>
358
+ <height translate="label">
359
+ <label>Height</label>
360
+ <frontend_type>select</frontend_type>
361
+ <source_model>stores/configoptions</source_model>
362
+ <sort_order>4</sort_order>
363
+ <show_in_default>1</show_in_default>
364
+ <show_in_website>1</show_in_website>
365
+ <show_in_store>1</show_in_store>
366
+ </height>
367
+ <country_of_origin translate="label">
368
+ <label>Country of origin</label>
369
+ <frontend_type>select</frontend_type>
370
+ <source_model>stores/configoptions</source_model>
371
+ <sort_order>5</sort_order>
372
+ <show_in_default>1</show_in_default>
373
+ <show_in_website>1</show_in_website>
374
+ <show_in_store>1</show_in_store>
375
+ </country_of_origin>
376
+ <category translate="label">
377
+ <label>Category</label>
378
+ <frontend_type>select</frontend_type>
379
+ <source_model>stores/configoptions</source_model>
380
+ <sort_order>6</sort_order>
381
+ <show_in_default>1</show_in_default>
382
+ <show_in_website>1</show_in_website>
383
+ <show_in_store>1</show_in_store>
384
+ </category>
385
+ <brand translate="label">
386
+ <label>Brand</label>
387
+ <frontend_type>select</frontend_type>
388
+ <source_model>stores/configoptions</source_model>
389
+ <sort_order>13</sort_order>
390
+ <show_in_default>1</show_in_default>
391
+ <show_in_website>1</show_in_website>
392
+ <show_in_store>1</show_in_store>
393
+ </brand>
394
+ <hs_code translate="label">
395
+ <label>HS code</label>
396
+ <frontend_type>select</frontend_type>
397
+ <source_model>stores/configoptions</source_model>
398
+ <sort_order>8</sort_order>
399
+ <show_in_default>1</show_in_default>
400
+ <show_in_website>1</show_in_website>
401
+ <show_in_store>1</show_in_store>
402
+ </hs_code>
403
+ <customization translate="label">
404
+ <label>Customization</label>
405
+ <frontend_type>select</frontend_type>
406
+ <source_model>stores/configoptions</source_model>
407
+ <sort_order>14</sort_order>
408
+ <show_in_default>1</show_in_default>
409
+ <show_in_website>1</show_in_website>
410
+ <show_in_store>1</show_in_store>
411
+ </customization>
412
+ <color translate="label">
413
+ <label>Color</label>
414
+ <frontend_type>select</frontend_type>
415
+ <source_model>stores/configoptions</source_model>
416
+ <sort_order>10</sort_order>
417
+ <show_in_default>1</show_in_default>
418
+ <show_in_website>1</show_in_website>
419
+ <show_in_store>1</show_in_store>
420
+ </color>
421
+ <material translate="label">
422
+ <label>Material</label>
423
+ <frontend_type>select</frontend_type>
424
+ <source_model>stores/configoptions</source_model>
425
+ <sort_order>11</sort_order>
426
+ <show_in_default>1</show_in_default>
427
+ <show_in_website>1</show_in_website>
428
+ <show_in_store>1</show_in_store>
429
+ </material>
430
+ <status translate="label">
431
+ <label>Status</label>
432
+ <frontend_type>select</frontend_type>
433
+ <source_model>stores/configoptions</source_model>
434
+ <sort_order>12</sort_order>
435
+ <show_in_default>1</show_in_default>
436
+ <show_in_website>1</show_in_website>
437
+ <show_in_store>1</show_in_store>
438
+ </status>
439
+ <non_shippable translate="label">
440
+ <label>Non Shippable</label>
441
+ <frontend_type>select</frontend_type>
442
+ <source_model>stores/configoptions</source_model>
443
+ <sort_order>7</sort_order>
444
+ <show_in_default>1</show_in_default>
445
+ <show_in_website>1</show_in_website>
446
+ <show_in_store>1</show_in_store>
447
+ </non_shippable>
448
+ </fields>
449
+ </ig_item_attribute>
450
  <igjq translate="label">
451
  <label>jQuery Settings</label>
452
  <frontend_type>text</frontend_type>
app/etc/modules/Iglobal_Ship.xml DELETED
@@ -1,9 +0,0 @@
1
- <?xml version="1.0"?>
2
- <config>
3
- <modules>
4
- <Iglobal_Ship>
5
- <active>true</active>
6
- <codePool>community</codePool>
7
- </Iglobal_Ship>
8
- </modules>
9
- </config>
 
 
 
 
 
 
 
 
 
app/etc/modules/Iglobal_Stores.xml DELETED
@@ -1,14 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <config>
3
- <modules>
4
- <Iglobal_Stores>
5
-
6
- <!-- Whether our module is active: true or false -->
7
- <active>true</active>
8
-
9
- <!-- Which code pool to use: core, community or local -->
10
- <codePool>community</codePool>
11
-
12
- </Iglobal_Stores>
13
- </modules>
14
- </config>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/iGlobal/ig_welcome_mat_default.css CHANGED
@@ -2,40 +2,73 @@
2
  /* Authored by iGlobal Stores (www.iglobalstores.com) */
3
 
4
  /* Google Fonts - If you're using your own fonts, you can remove these */
5
- @font-face { font-family: 'PT Sans'; font-style: normal; font-weight: 400; src: local('PT Sans'), local('PTSans-Regular'), url(http://themes.googleusercontent.com/static/fonts/ptsans/v5/7YGmE4Ls5b94ct65u07hVQLUuEpTyoUstqEm5AMlJo4.woff) format('woff'); }
6
- @font-face { font-family: 'PT Sans'; font-style: normal; font-weight: 700; src: local('PT Sans Bold'), local('PTSans-Bold'), url(http://themes.googleusercontent.com/static/fonts/ptsans/v5/0XxGQsSc1g4rdRdjJKZrNL3hpw3pgy2gAi-Ip7WPMi0.woff) format('woff'); }
7
 
8
  /* igFlag controls the placement of the country flag on your website */
9
  #igFlag { width: 30px; }
10
- #igFlag img { max-width: 25px; margin-bottom: -3px; cursor: pointer; margin-left: 5px; }
 
 
 
11
 
12
  /* Begin Modal Styles */
13
- #igSplashElement { position: fixed; width: 600px; background-color: #fff; -webkit-box-shadow: 0px 0px 60px 0px rgba(0, 0, 0, 0.5); box-shadow: 0px 0px 60px 0px rgba(0, 0, 0, 0.5); font-family: 'PT Sans','Helvetica Neue', Helvetica, Arial, sans-serif; /* Set your preferred font here */ color: #666; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  .closeButton { position: absolute; top: 3px; right: 3px; }
15
- .close { cursor: pointer; }
16
- .igModalHeader { width: 560px; background-color: #fff; text-align: center; color: #999; overflow: auto; padding: 20px; }
17
- .logoWrapper { float: left; width: 180px; } /* If your logo is wider than 180px, you may wish to widen this and decrease the width of the .messageWrapper */
18
- .messageWrapper { float: right; width: 380px; margin-right: -20px;}
19
- .modalLogo { float: left; margin: 10px; width: 170px; }
20
- .igModalHeader img.headerFlag { max-width: 50px; margin-top: -15px; }
21
- .headerZero { margin-bottom: 8px; }
22
- .headerOne { font-size: 30px; padding-left: 0.5em; color: #0068AC; /* Set the color of your choice here */ text-transform: uppercase; }
 
23
  .headerTwo { color: #999; margin-top: 7px; font-size: 12px; }
24
- .igModalBody { text-align: center; background-color: white; width: 100%; min-height: 320px; }
25
- .countryDropDownWrapper { width: 250px; min-height: 25px; -webkit-border-radius: 10px; border-radius: 10px; border: 2px solid #0068AC; /* Set the color of your choice here */ margin: 0 auto; padding: 0; cursor: pointer; }
26
- #countrySelect { position: relative; height: 35px; padding: 7px 10px; margin: 0px; font-size: 14px; line-height: 14px; color: #333 !important; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; -o-user-select: none; user-select: none; background: none !important; border: 0 !important; -webkit-appearance: none; -moz-appearance: window; appearance: none; ms-appearance: none; overflow: hidden; }
 
 
27
  select::-ms-expand { display: none; }
28
- ul.featureList { padding: 20px; margin: 0; -webkit-padding-start: 0; background-color: #999; color: #e8e8e8; }
29
- ul.featureList li { list-style-type: none; padding: 10px 20px; font-size: 18px; }
30
- ul.featureList li strong { color: white; }
31
- ul.featureList li img { padding-top: 5px; max-width: 80px; margin-bottom: -15px; }
32
- .igWelcomeCTAButton { background: white; width: 100%; height: 100px;}
33
- .igWelcomeCTAButton button { width: 225px; height: 50px; -webkit-border-radius: 3px; border-radius: 3px; color: white; margin: 20px auto; border: none; font-size: 20px; font-weight: normal; background-color: #596069; opacity: 1; text-shadow: none; float: none;}
 
 
 
 
 
 
 
34
 
35
  @media screen and (max-width: 600px) { /* Responsive design sets a width of 400px for all devices <= 600px */
36
- #igSplashElement { width: 400px; margin-left: -200px !important; }
37
- .igModalHeader { width: 360px; }
38
- .logoWrapper { float: none; width: auto; }
39
- .modalLogo { float: none; margin: 10px auto; }
40
  .messageWrapper { clear: both; }
41
- }
2
  /* Authored by iGlobal Stores (www.iglobalstores.com) */
3
 
4
  /* Google Fonts - If you're using your own fonts, you can remove these */
5
+ @import 'https://fonts.googleapis.com/css?family=Material+Icons';
6
+ @import 'https://fonts.googleapis.com/css?family=Roboto:100,300,400,400i,500,700,900';
7
 
8
  /* igFlag controls the placement of the country flag on your website */
9
  #igFlag { width: 30px; }
10
+ #igFlag img { max-width: 25px; margin-bottom: -3px; cursor: pointer; margin-left: 5px;}
11
+
12
+ /* Background blur effect */
13
+ body.welcome-mat-blur > *:not(#igSplashElement) { -webkit-filter: blur(8px); -moz-filter: blur(8px); -o-filter: blur(8px); -ms-filter: blur(8px); filter: blur(8px); }
14
 
15
  /* Begin Modal Styles */
16
+ #igSplashElement {
17
+ position: absolute;
18
+ max-width: 500px;
19
+ background-color: #fff;
20
+ top: 50%;
21
+ left: 50%;
22
+ width: 100%;
23
+ -webkit-box-shadow: 0px 0px 60px 0px rgba(0, 0, 0, 0.5);
24
+ box-shadow: 0px 0px 60px 0px rgba(0, 0, 0, 0.5);
25
+ color: rgba(0,0,0,.87);
26
+ font-size: 14px;
27
+ font-family: 'Roboto', Helvetica, Arial, sans-serif;
28
+ /* The CSS below is for the opening and closing animation */
29
+ -webkit-transform: translateY(20%) translateX(-50%);
30
+ -moz-transform: translateY(20%) translateX(-50%);
31
+ -ms-transform: translateY(20%) translateX(-50%);
32
+ transform: translateY(20%) translateX(-50%);
33
+ opacity: 0;
34
+ -webkit-transition: all 0.3s;
35
+ -moz-transition: all 0.3s;
36
+ transition: all 0.3s;
37
+ z-index: 2001;
38
+ }
39
  .closeButton { position: absolute; top: 3px; right: 3px; }
40
+ .close { padding: 5px 8px; background: #eee; text-align: right; }
41
+ .close i { cursor: pointer; }
42
+ .igModalHeader {background-color: #fff;text-align: center;color: rgba(0,0,0,.87);box-sizing: border-box;}
43
+ .logoWrapper { width: 100%; padding: 30px; text-align: center; float: none; border-bottom: 1px solid #eee; box-sizing: border-box; }
44
+ .messageWrapper { width: 100%; padding: 30px 30px 10px; box-sizing: border-box; }
45
+ .modalLogo { max-width: 100%; max-height: 160px; display: inline;}
46
+ .igModalHeader img.headerFlag {max-width: 50px;position: absolute;left: 5px;top: 5px;}
47
+ .headerZero { margin-bottom: 8px; font-size: 30px; font-weight: 600; margin-top:0; }
48
+ .headerOne {font-size: 30px;padding-left: 0.5em; /* Set the color of your choice here */text-transform: uppercase;font-weight: 600;}
49
  .headerTwo { color: #999; margin-top: 7px; font-size: 12px; }
50
+ .countryP { font-size: 16px; text-transform: uppercase; }
51
+ .igModalBody {background-color: white;width: 100%;}
52
+ .countryDropDownWrapper {width: 100%;min-height: 25px;-webkit-border-radius: 2px;border-radius: 2px;background: #eee;border: 0px; /* Set the color of your choice here */margin: 0 auto;padding: 0px;cursor: pointer;position: relative;}
53
+ .countryDropDownWrapper i { position: absolute; right: 10px; top: 10px; color: rgba(0,0,0,.3); }
54
+ #countrySelect { width:100%; position: relative; box-shadow: 0px 0px 0px; padding: 10px 15px;margin: 0px;font-size: 14px;line-height: 14px;color: #333 !important;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;-o-user-select: none;user-select: none;background: none !important;border: 0 !important;-webkit-appearance: none;-moz-appearance: window;appearance: none;ms-appearance: none;overflow: hidden;height: 44px;text-align: center;text-align-last: center;}
55
  select::-ms-expand { display: none; }
56
+ ul.featureList { padding: 30px; margin: 20px 0px 30px; background-color: #eee; display: none !important; }
57
+ ul.featureList li { list-style-type: none; padding: 5px 0px; }
58
+ ul.featureList li i { position: relative; top: 6px; }
59
+ .igWelcomeCTAButton { width: 100%;padding: 0px 30px 30px; box-sizing: border-box;}
60
+ .igWelcomeCTAButton button {width: 100%;height: 44px;-webkit-border-radius: 2px;border-radius: 2px;color: white;margin: 0 auto;border: none;font-size: 14px;font-weight: normal; background-color: #333;opacity: 1;text-shadow: none;float: none;text-transform: uppercase;text-align: center;}
61
+ .igWelcomeCTAButton button:hover { color: white; background-color: #666; opacity: 1; }
62
+ .modal-open {
63
+ -webkit-transform: translateY(-50%) translateX(-50%) !important;
64
+ -moz-transform: translateY(-50%) translateX(-50%) !important;
65
+ -ms-transform: translateY(-50%) translateX(-50%) !important;
66
+ transform: translateY(-50%) translateX(-50%) !important;
67
+ opacity: 1 !important;
68
+ }
69
 
70
  @media screen and (max-width: 600px) { /* Responsive design sets a width of 400px for all devices <= 600px */
71
+ #igSplashElement { width: 95%; top: 10px; }
72
+ .igModalHeader { width: 100%; }
 
 
73
  .messageWrapper { clear: both; }
74
+ }
js/iGlobal/ig_welcome_mat_default.js CHANGED
@@ -1,6 +1,6 @@
1
  // iGlobal Welcome Mat Script
2
  // Authored by iGlobal Stores (www.iglobalstores.com)
3
- // Copyright iGlobal Stores 2013
4
 
5
  //
6
  // Store specific settings
@@ -15,7 +15,11 @@ var ig_logoUrl = ig_vars.storeLogo || "http://iglobalstores.com/images/iglobal-s
15
  var ig_flagLocation = ig_vars.flag_parent || "body";
16
  var ig_flagMethod = ig_vars.flag_method || "prepend";
17
  var ig_flagCode = ig_vars.flag_code || '<div id="igFlag"></div>';
 
 
 
18
  // Can set to existing $ on page, or can include Jquery here, and set igJq to jquery-no-conflict
 
19
  igJq = jQuery;
20
 
21
  igJq(function(){
@@ -36,16 +40,7 @@ igJq(function(){
36
  }
37
  });
38
 
39
- //
40
- // END Store specific settings
41
- //
42
-
43
- ///////////////////////////////////////////////////////////////////////////////
44
-
45
- //
46
- // Begin jquery jsonp plugin
47
- //
48
- /*
49
  * jQuery JSONP Core Plugin 2.4.0 (2012-08-21)
50
  *
51
  * https://github.com/jaubourg/jquery-jsonp
@@ -55,508 +50,21 @@ igJq(function(){
55
  * This document is licensed as free software under the terms of the
56
  * MIT License: http://www.opensource.org/licenses/mit-license.php
57
  */
58
- ( function( igJq ) {
59
-
60
- // ###################### UTILITIES ##
61
-
62
- // Noop
63
- function noop() {
64
- }
65
-
66
- // Generic callback
67
- function genericCallback( data ) {
68
- lastValue = [ data ];
69
- }
70
-
71
- // Call if defined
72
- function callIfDefined( method , object , parameters ) {
73
- return method && method.apply( object.context || object , parameters );
74
- }
75
-
76
- // Give joining character given url
77
- function qMarkOrAmp( url ) {
78
- return /\?/ .test( url ) ? "&" : "?";
79
- }
80
-
81
- var // String constants (for better minification)
82
- STR_ASYNC = "async",
83
- STR_CHARSET = "charset",
84
- STR_EMPTY = "",
85
- STR_ERROR = "error",
86
- STR_INSERT_BEFORE = "insertBefore",
87
- STR_JQUERY_JSONP = "_jqjsp",
88
- STR_ON = "on",
89
- STR_ON_CLICK = STR_ON + "click",
90
- STR_ON_ERROR = STR_ON + STR_ERROR,
91
- STR_ON_LOAD = STR_ON + "load",
92
- STR_ON_READY_STATE_CHANGE = STR_ON + "readystatechange",
93
- STR_READY_STATE = "readyState",
94
- STR_REMOVE_CHILD = "removeChild",
95
- STR_SCRIPT_TAG = "<script>",
96
- STR_SUCCESS = "success",
97
- STR_TIMEOUT = "timeout",
98
-
99
- // Window
100
- win = window,
101
- // Deferred
102
- Deferred = igJq.Deferred,
103
- // Head element
104
- head = igJq( "head" )[ 0 ] || document.documentElement,
105
- // Page cache
106
- pageCache = {},
107
- // Counter
108
- count = 0,
109
- // Last returned value
110
- lastValue,
111
-
112
- // ###################### DEFAULT OPTIONS ##
113
- xOptionsDefaults = {
114
- //beforeSend: undefined,
115
- //cache: false,
116
- callback: STR_JQUERY_JSONP,
117
- //callbackParameter: undefined,
118
- //charset: undefined,
119
- //complete: undefined,
120
- //context: undefined,
121
- //data: "",
122
- //dataFilter: undefined,
123
- //error: undefined,
124
- //pageCache: false,
125
- //success: undefined,
126
- //timeout: 0,
127
- //traditional: false,
128
- url: location.href
129
- },
130
-
131
- // opera demands sniffing :/
132
- opera = win.opera,
133
-
134
- // IE < 10
135
- oldIE = !!igJq( "<div>" ).html( "<!--[if IE]><i><![endif]-->" ).find("i").length;
136
-
137
- // ###################### MAIN FUNCTION ##
138
- function jsonp( xOptions ) {
139
-
140
- // Build data with default
141
- xOptions = igJq.extend( {} , xOptionsDefaults , xOptions );
142
-
143
- // References to xOptions members (for better minification)
144
- var successCallback = xOptions.success,
145
- errorCallback = xOptions.error,
146
- completeCallback = xOptions.complete,
147
- dataFilter = xOptions.dataFilter,
148
- callbackParameter = xOptions.callbackParameter,
149
- successCallbackName = xOptions.callback,
150
- cacheFlag = xOptions.cache,
151
- pageCacheFlag = xOptions.pageCache,
152
- charset = xOptions.charset,
153
- url = xOptions.url,
154
- data = xOptions.data,
155
- timeout = xOptions.timeout,
156
- pageCached,
157
-
158
- // Abort/done flag
159
- done = 0,
160
-
161
- // Life-cycle functions
162
- cleanUp = noop,
163
-
164
- // Support vars
165
- supportOnload,
166
- supportOnreadystatechange,
167
-
168
- // Request execution vars
169
- firstChild,
170
- script,
171
- scriptAfter,
172
- timeoutTimer;
173
-
174
- // If we have Deferreds:
175
- // - substitute callbacks
176
- // - promote xOptions to a promise
177
- Deferred && Deferred(function( defer ) {
178
- defer.done( successCallback ).fail( errorCallback );
179
- successCallback = defer.resolve;
180
- errorCallback = defer.reject;
181
- }).promise( xOptions );
182
-
183
- // Create the abort method
184
- xOptions.abort = function() {
185
- !( done++ ) && cleanUp();
186
- };
187
-
188
- // Call beforeSend if provided (early abort if false returned)
189
- if ( callIfDefined( xOptions.beforeSend , xOptions , [ xOptions ] ) === !1 || done ) {
190
- return xOptions;
191
- }
192
-
193
- // Control entries
194
- url = url || STR_EMPTY;
195
- data = data ? ( (typeof data) == "string" ? data : igJq.param( data , xOptions.traditional ) ) : STR_EMPTY;
196
-
197
- // Build final url
198
- url += data ? ( qMarkOrAmp( url ) + data ) : STR_EMPTY;
199
-
200
- // Add callback parameter if provided as option
201
- callbackParameter && ( url += qMarkOrAmp( url ) + encodeURIComponent( callbackParameter ) + "=?" );
202
-
203
- // Add anticache parameter if needed
204
- !cacheFlag && !pageCacheFlag && ( url += qMarkOrAmp( url ) + "_" + ( new Date() ).getTime() + "=" );
205
-
206
- // Replace last ? by callback parameter
207
- url = url.replace( /=\?(&|$)/ , "=" + successCallbackName + "$1" );
208
-
209
- // Success notifier
210
- function notifySuccess( json ) {
211
-
212
- if ( !( done++ ) ) {
213
-
214
- cleanUp();
215
- // Pagecache if needed
216
- pageCacheFlag && ( pageCache [ url ] = { s: [ json ] } );
217
- // Apply the data filter if provided
218
- dataFilter && ( json = dataFilter.apply( xOptions , [ json ] ) );
219
- // Call success then complete
220
- callIfDefined( successCallback , xOptions , [ json , STR_SUCCESS, xOptions ] );
221
- callIfDefined( completeCallback , xOptions , [ xOptions , STR_SUCCESS ] );
222
-
223
- }
224
- }
225
-
226
- // Error notifier
227
- function notifyError( type ) {
228
-
229
- if ( !( done++ ) ) {
230
-
231
- // Clean up
232
- cleanUp();
233
- // If pure error (not timeout), cache if needed
234
- pageCacheFlag && type != STR_TIMEOUT && ( pageCache[ url ] = type );
235
- // Call error then complete
236
- callIfDefined( errorCallback , xOptions , [ xOptions , type ] );
237
- callIfDefined( completeCallback , xOptions , [ xOptions , type ] );
238
-
239
- }
240
- }
241
-
242
- // Check page cache
243
- if ( pageCacheFlag && ( pageCached = pageCache[ url ] ) ) {
244
-
245
- pageCached.s ? notifySuccess( pageCached.s[ 0 ] ) : notifyError( pageCached );
246
-
247
- } else {
248
-
249
- // Install the generic callback
250
- // (BEWARE: global namespace pollution ahoy)
251
- win[ successCallbackName ] = genericCallback;
252
-
253
- // Create the script tag
254
- script = igJq( STR_SCRIPT_TAG )[ 0 ];
255
- script.id = STR_JQUERY_JSONP + count++;
256
-
257
- // Set charset if provided
258
- if ( charset ) {
259
- script[ STR_CHARSET ] = charset;
260
- }
261
-
262
- opera && opera.version() < 11.60 ?
263
- // onerror is not supported: do not set as async and assume in-order execution.
264
- // Add a trailing script to emulate the event
265
- ( ( scriptAfter = igJq( STR_SCRIPT_TAG )[ 0 ] ).text = "document.getElementById('" + script.id + "')." + STR_ON_ERROR + "()" )
266
- :
267
- // onerror is supported: set the script as async to avoid requests blocking each others
268
- ( script[ STR_ASYNC ] = STR_ASYNC )
269
-
270
- ;
271
-
272
- // Internet Explorer: event/htmlFor trick
273
- if ( oldIE ) {
274
- script.htmlFor = script.id;
275
- script.event = STR_ON_CLICK;
276
- }
277
-
278
- // Attached event handlers
279
- script[ STR_ON_LOAD ] = script[ STR_ON_ERROR ] = script[ STR_ON_READY_STATE_CHANGE ] = function ( result ) {
280
-
281
- // Test readyState if it exists
282
- if ( !script[ STR_READY_STATE ] || !/i/.test( script[ STR_READY_STATE ] ) ) {
283
-
284
- try {
285
-
286
- script[ STR_ON_CLICK ] && script[ STR_ON_CLICK ]();
287
-
288
- } catch( _ ) {}
289
-
290
- result = lastValue;
291
- lastValue = 0;
292
- result ? notifySuccess( result[ 0 ] ) : notifyError( STR_ERROR );
293
-
294
- }
295
- };
296
-
297
- // Set source
298
- script.src = url;
299
-
300
- // Re-declare cleanUp function
301
- cleanUp = function( i ) {
302
- timeoutTimer && clearTimeout( timeoutTimer );
303
- script[ STR_ON_READY_STATE_CHANGE ] = script[ STR_ON_LOAD ] = script[ STR_ON_ERROR ] = null;
304
- head[ STR_REMOVE_CHILD ]( script );
305
- scriptAfter && head[ STR_REMOVE_CHILD ]( scriptAfter );
306
- };
307
-
308
- // Append main script
309
- head[ STR_INSERT_BEFORE ]( script , ( firstChild = head.firstChild ) );
310
-
311
- // Append trailing script if needed
312
- scriptAfter && head[ STR_INSERT_BEFORE ]( scriptAfter , firstChild );
313
-
314
- // If a timeout is needed, install it
315
- timeoutTimer = timeout > 0 && setTimeout( function() {
316
- notifyError( STR_TIMEOUT );
317
- } , timeout );
318
-
319
- }
320
 
321
- return xOptions;
322
- }
323
-
324
- // ###################### SETUP FUNCTION ##
325
- jsonp.setup = function( xOptions ) {
326
- igJq.extend( xOptionsDefaults , xOptions );
327
- };
328
-
329
- // ###################### INSTALL in jQuery ##
330
- igJq.jsonp = jsonp;
331
-
332
- } )( igJq );
333
- //
334
- // End jquery jsonp plugin
335
- //
336
-
337
- //
338
- // Begin embedded easyModal.js
339
- //
340
  /**
341
  * easyModal.js v1.1.0
342
  * A minimal jQuery modal that works with your CSS.
343
  * Author: Flavius Matis - http://flaviusmatis.github.com/
344
  * URL: https://github.com/flaviusmatis/easyModal.js
345
  */
 
346
 
347
- (function(igJq){
348
-
349
- var methods = {
350
- init : function(options) {
351
-
352
- var defaults = {
353
- top: '100',
354
- autoOpen: false,
355
- overlayOpacity: 0.5,
356
- overlayColor: '#000',
357
- overlayClose: true,
358
- overlayParent: 'body',
359
- closeOnEscape: true,
360
- closeButtonClass: '.close',
361
- onOpen: false,
362
- onClose: false
363
- };
364
-
365
- options = igJq.extend(defaults, options);
366
-
367
- return this.each(function() {
368
-
369
- var o = options;
370
-
371
- var $overlay = igJq('<div class="lean-overlay"></div>');
372
-
373
- $overlay.css({
374
- 'display': 'none',
375
- 'position': 'fixed',
376
- 'z-index': 2000,
377
- 'top': 0,
378
- 'left': 0,
379
- 'height': 100 + '%',
380
- 'width': 100+ '%',
381
- 'background': o.overlayColor,
382
- 'opacity': o.overlayOpacity
383
- }).appendTo(o.overlayParent);
384
-
385
- var $modal = igJq(this);
386
-
387
- $modal.css({
388
- 'display': 'none',
389
- 'position' : 'absolute',
390
- 'z-index': 2001,
391
- 'left' : 50 + '%',
392
- 'top' : parseInt(o.top) > -1 ? o.top + 'px' : 50 + '%'
393
- });
394
-
395
- $modal.bind('openModal', function(){
396
- igJq(this).css({
397
- 'display' : 'block',
398
- 'margin-left' : -($modal.outerWidth()/2) + 'px',
399
- 'margin-top' : (parseInt(o.top) > -1 ? 0 : -($modal.outerHeight()/2)) + 'px'
400
- });
401
- $overlay.fadeIn(200, function(){
402
- if (o.onOpen && typeof (o.onOpen) === 'function') {
403
- // onOpen callback receives as argument the modal window
404
- o.onOpen($modal[0]);
405
- }
406
- });
407
- });
408
-
409
- $modal.bind('closeModal', function(){
410
- igJq(this).css('display', 'none');
411
- $overlay.fadeOut(200, function(){
412
- if (o.onClose && typeof(o.onClose) === 'function') {
413
- // onClose callback receives as argument the modal window
414
- o.onClose($modal[0]);
415
- }
416
- });
417
- });
418
-
419
- // Close on overlay click
420
- $overlay.click(function() {
421
- if (o.overlayClose)
422
- $modal.trigger('closeModal');
423
- });
424
-
425
- igJq(document).keydown(function(e) {
426
- // ESCAPE key pressed
427
- if (o.closeOnEscape && e.keyCode == 27) {
428
- $modal.trigger('closeModal');
429
- }
430
- });
431
-
432
- // Close when button pressed
433
- $modal.on('click', o.closeButtonClass, function(e) {
434
- $modal.trigger('closeModal');
435
- e.preventDefault();
436
- });
437
-
438
- // Automatically open modal if option set
439
- if (o.autoOpen)
440
- $modal.trigger('openModal');
441
-
442
- });
443
-
444
- }
445
- };
446
-
447
- igJq.fn.easyModal = function(method) {
448
-
449
- // Method calling logic
450
- if (methods[method]) {
451
- return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
452
- } else if (typeof method === 'object' || ! method) {
453
- return methods.init.apply(this, arguments);
454
- } else {
455
- igJq.error('Method ' + method + ' does not exist on jQuery.easyModal');
456
- }
457
-
458
- };
459
-
460
- })(igJq);
461
- //
462
- // End embedded easyModal.js
463
- //
464
-
465
-
466
- //
467
- // Begin embedded jquery cookie plugin, for readying and writing cookies easily
468
- //
469
- (function (factory) {
470
- if (typeof define === 'function' && define.amd) {
471
- // AMD. Register as anonymous module.
472
- define(['jquery'], factory);
473
- } else {
474
- // Browser globals.
475
- factory(igJq);
476
- }
477
- }(function (igJq) {
478
-
479
- var pluses = /\+/g;
480
-
481
- function raw(s) {
482
- return s;
483
- }
484
-
485
- function decoded(s) {
486
- return decodeURIComponent(s.replace(pluses, ' '));
487
- }
488
-
489
- function converted(s) {
490
- if (s.indexOf('"') === 0) {
491
- // This is a quoted cookie as according to RFC2068, unescape
492
- s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
493
- }
494
- try {
495
- return config.json ? JSON.parse(s) : s;
496
- } catch(er) {}
497
- }
498
 
499
- var config = igJq.cookie = function (key, value, options) {
500
-
501
- // write
502
- if (value !== undefined) {
503
- options = igJq.extend({}, config.defaults, options);
504
-
505
- if (typeof options.expires === 'number') {
506
- var days = options.expires, t = options.expires = new Date();
507
- t.setDate(t.getDate() + days);
508
- }
509
-
510
- value = config.json ? JSON.stringify(value) : String(value);
511
-
512
- return (document.cookie = [
513
- config.raw ? key : encodeURIComponent(key),
514
- '=',
515
- config.raw ? value : encodeURIComponent(value),
516
- options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
517
- options.path ? '; path=' + options.path : '',
518
- options.domain ? '; domain=' + options.domain : '',
519
- options.secure ? '; secure' : ''
520
- ].join(''));
521
- }
522
-
523
- // read
524
- var decode = config.raw ? raw : decoded;
525
- var cookies = document.cookie.split('; ');
526
- var result = key ? undefined : {};
527
- for (var i = 0, l = cookies.length; i < l; i++) {
528
- var parts = cookies[i].split('=');
529
- var name = decode(parts.shift());
530
- var cookie = decode(parts.join('='));
531
-
532
- if (key && key === name) {
533
- result = converted(cookie);
534
- break;
535
- }
536
-
537
- if (!key) {
538
- result[name] = converted(cookie);
539
- }
540
- }
541
-
542
- return result;
543
- };
544
-
545
- config.defaults = {};
546
-
547
- igJq.removeCookie = function (key, options) {
548
- if (igJq.cookie(key) !== undefined) {
549
- // Must not alter options, thus extending a fresh object...
550
- igJq.cookie(key, '', igJq.extend({}, options, { expires: -1 }));
551
- return true;
552
- }
553
- return false;
554
- };
555
-
556
- }));
557
- //
558
- // End embedded jquery cookie plugin, for readying and writing cookies easily
559
- //
560
 
561
 
562
  //
@@ -566,12 +74,12 @@ igJq(function(){
566
  function ig_getParameterByName(name) {
567
  name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
568
  var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
569
- results = regex.exec(location.search);
570
  return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
571
  }
572
 
573
  function ig_createSplashHtml() {
574
- var ig_splashHtml = '<div id="igSplashElement" style="display:none;">';
575
  ig_splashHtml += ig_createSplashContentsHtml();
576
  ig_splashHtml += '</div><!--/#igSplashElement -->';
577
  return ig_splashHtml;
@@ -579,60 +87,59 @@ function ig_createSplashHtml() {
579
 
580
  function ig_createSplashContentsHtml() { // Feel free to edit the HTML below to match your site
581
  var ig_splashHtml = '' +
582
- '<img src="https://d1vyngmisxigjx.cloudfront.net/images/close-square.png" alt="Close" class="closeButton close" />' +
583
- '<div class="igModalHeader">' +
584
- '<div class="logoWrapper">' +
585
- '<img class="modalLogo" src="'+ig_logoUrl+'" alt="" />' +
586
- '</div><!--/.logoWrapper -->' +
587
- '<div class="messageWrapper">' +
588
- '<p class="headerZero">Thanks for visiting us from</p>' +
589
- '<img src="https://d1vyngmisxigjx.cloudfront.net/images/flags/96x64/'+((ig_country)?ig_country.toUpperCase():'undefined')+'.png" alt="Flag of '+ig_countries[ig_country]+'" class="headerFlag">' +
590
- '<span class="headerOne">' +ig_countries[ig_country]+'</span><!--/.headerOne-->' +
591
- '<p class="countryP" style="font-size: 12px;">Not in '+ig_countries[ig_country]+'? Please select your country below.</p> ' +
592
- '<div class="countryDropDownWrapper">' +
593
- '<select id="countrySelect" class=".coreUISelect" onchange="ig_countrySelected();"> ' +
594
- '<option value="">Select your country</option>';
595
-
596
- for(var countryCode in ig_countries){
597
- ig_splashHtml += '<option '+((countryCode===ig_country)?'selected="selected" ':'')+'value="'+countryCode+'">'+ig_countries[countryCode]+'</option>';
598
- }
599
-
600
- ig_splashHtml += '' +
601
- '</select>' +
602
- '</div><!--/.countryDropDownWrapper -->' +
603
- '</div><!--/.messageWrapper -->' +
604
- '</div><!--/.igModalHeader -->' +
605
- '<div class="igModalBody">';
 
 
606
 
607
  if (ig_isDomesticCountry()) {
608
- //Don't show international shopping features
609
- ig_splashHtml += '' +
610
- '<ul class="featureList">' +
611
- '<div class="igFeatureHeader">Welcome to our website!</div>' +
612
- '</ul>';
613
  } else {
614
- //Show international shopping features
615
- ig_splashHtml += ''+
616
- '<ul class="featureList">' +
617
- '<div class="igFeatureHeader">We offer the following services to shoppers in ' +ig_countries[ig_country]+'.</div>' +
618
- '<li><img src="https://d1vyngmisxigjx.cloudfront.net/images/currencies-icon.png" alt="Your Currency"> See totals and pay in <strong>your currency</strong>' +
619
- '</li>' +
620
- '<li><img src="https://d1vyngmisxigjx.cloudfront.net/images/payment-methods-icon.png" alt="Multiple Payment Methods"> <strong>Multiple payment methods</strong> available' +
621
- '</li>' +
622
- '<li><img src="https://d1vyngmisxigjx.cloudfront.net/images/prepay-duty-tax-icon.png" alt="Prepay Duties and Taxes"> Option to <strong>prepay duties and taxes</strong>' +
623
- '</li>' +
624
- '<li><img src="https://d1vyngmisxigjx.cloudfront.net/images/shipping-icon.png" alt="Shipping Options"> <strong>Multiple shipping options</strong> available' +
625
- '</li>' +
626
- '</ul>';
627
  }
628
 
629
  ig_splashHtml += '' +
630
- '<div class="igWelcomeCTAButton">' +
631
- '<button class="close">Start Shopping</button>' +
632
- '</div><!--/.igWelcomeCTAButton -->' +
633
- '</div><!--/.igModalBody -->' +
634
- '<div class="igModalFooter">' +
635
- '</div><!--/.igModalFooter-->';
636
 
637
  return ig_splashHtml;
638
  }
@@ -651,39 +158,42 @@ function ig_showTheSplash() {
651
 
652
  //init easyModal.js modal, after modal content was placed on the page (line above)
653
  igJq("#igSplashElement").easyModal({
654
- onClose: function(myModal){
655
- //on close, let's remove the modal contents and the modal smokescreen created by easyModal.js
656
- igJq("#igSplashElement").remove();
657
- igJq(".lean-overlay").remove();
658
- }
 
 
659
  });
660
 
661
  //Fire the modal!
662
  igJq("#igSplashElement").trigger('openModal');
 
 
663
 
664
  //Set cookie for Splash shown
665
  if (ig_validateCountryCode(igJq.cookie("igCountry"))) { // Only set the splashShown cookie, if there is a valid countryCookie
666
- igJq.cookie('igSplash', 'igSplash', { expires: 7, path: '/', domain: ig_cookieDomain });
667
  }
668
  }
669
-
670
  function ig_createNestContents() {
671
- return '<img onclick="ig_showTheSplash();" src="https://d1vyngmisxigjx.cloudfront.net/images/flags/96x64/'+((ig_country)?ig_country.toUpperCase():'US')+'.png" class="igWelcomeFlagHeader" alt="Select your country." />';
672
  }
673
 
674
  function ig_placeNestHtml() {
675
  igJq(function(){
676
- if (igJq("#igFlag")) {
677
- igJq("#igFlag").html(ig_createNestContents());
678
- }
679
  });
680
  }
681
 
682
  function ig_setCountry(country) {
683
  ig_country = country;
684
  if (ig_country) {
685
- //Set country cookie
686
- igJq.cookie('igCountry', ig_country, { expires: 365, path: '/', domain: ig_cookieDomain });
687
  }
688
  ig_placeNestHtml();
689
  }
@@ -700,9 +210,9 @@ function ig_validateCountryCode(countryCode) {
700
  //Return the country code if valid, return null if not valid
701
  var countryDisplayName = ig_countries[countryCode];
702
  if (typeof countryDisplayName !== 'undefined' && countryDisplayName) {
703
- return countryCode;
704
  } else {
705
- return null;
706
  }
707
  }
708
 
@@ -722,37 +232,31 @@ function ig_detectCountryCallbackError() { // Error handling method for when the
722
 
723
  function ig_detectCountry() {
724
  igJq.jsonp({
725
- url: 'https://iprecon.iglobalstores.com/iGlobalIp.js?p=igcCallback',
726
- callback:'igcCallback',
727
- success: function(json, textStatus, xOptions){ig_detectCountryCallback(json);},
728
- error: function(){ig_detectCountryCallbackError();}
729
  });
730
  }
731
 
732
  function ig_pingIglobal() {
733
- try { // Don't break if this doesn't work
734
- if (!ig_countryParam) {//Only ping iGlobal for real visitors, not url parameter testing
735
- igJq.ajax({//we do not need to trap errors like 503's, for this call
736
- dataType: "jsonp",
737
- url: 'https://iprecon.iglobalstores.com/ping.js?s='+ig_storeId+'&c='+((ig_country)?ig_country:'')
738
- });
739
- }
740
- } catch (err) {
741
- // do nothing
742
  }
 
 
 
743
  }
744
 
745
- //function ig_errorPingIglobal() {
746
- // console.log("Couldn't update iGlobal");
747
- //}
748
-
749
  function ig_finishLoading() {
750
  ig_placeNestHtml();
751
  if (!ig_isDomesticCountry() && (!ig_splashCookie || !ig_country || ig_countryParam)) {
752
- igJq(ig_showTheSplash); //Schedule Showing the Splash
753
  }
754
- //Removed to avoid circular onReady dependency with iCE Script
755
- // ig_alertIceOfCountryChange();
756
  ig_pingIglobal();
757
  }
758
 
@@ -777,3 +281,39 @@ if (!ig_country) {
777
  } else { // else go with whatever country we have, even no country
778
  ig_finishLoading();
779
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  // iGlobal Welcome Mat Script
2
  // Authored by iGlobal Stores (www.iglobalstores.com)
3
+ // Copyright iGlobal Stores 2016
4
 
5
  //
6
  // Store specific settings
15
  var ig_flagLocation = ig_vars.flag_parent || "body";
16
  var ig_flagMethod = ig_vars.flag_method || "prepend";
17
  var ig_flagCode = ig_vars.flag_code || '<div id="igFlag"></div>';
18
+ var ig_nestElementId = "igFlag";
19
+ //
20
+ // Set internal JQuery Variable
21
  // Can set to existing $ on page, or can include Jquery here, and set igJq to jquery-no-conflict
22
+ //
23
  igJq = jQuery;
24
 
25
  igJq(function(){
40
  }
41
  });
42
 
43
+ /**
 
 
 
 
 
 
 
 
 
44
  * jQuery JSONP Core Plugin 2.4.0 (2012-08-21)
45
  *
46
  * https://github.com/jaubourg/jquery-jsonp
50
  * This document is licensed as free software under the terms of the
51
  * MIT License: http://www.opensource.org/licenses/mit-license.php
52
  */
53
+ !function(e){function t(){}function n(e){r=[e]}function c(e,t,n){return e&&e.apply(t.context||t,n)}function i(e){return/\?/.test(e)?"&":"?"}function o(o){function m(e){V++||(W(),L&&(I[N]={s:[e]}),A&&(e=A.apply(o,[e])),c(R,o,[e,k,o]),c(z,o,[o,k]))}function F(e){V++||(W(),L&&e!=x&&(I[N]=e),c(U,o,[o,e]),c(z,o,[o,e]))}o=e.extend({},q,o);var S,$,_,J,P,R=o.success,U=o.error,z=o.complete,A=o.dataFilter,G=o.callbackParameter,H=o.callback,K=o.cache,L=o.pageCache,M=o.charset,N=o.url,O=o.data,Q=o.timeout,V=0,W=t;return w&&w(function(e){e.done(R).fail(U),R=e.resolve,U=e.reject}).promise(o),o.abort=function(){!V++&&W()},c(o.beforeSend,o,[o])===!1||V?o:(N=N||l,O=O?"string"==typeof O?O:e.param(O,o.traditional):l,N+=O?i(N)+O:l,G&&(N+=i(N)+encodeURIComponent(G)+"=?"),!K&&!L&&(N+=i(N)+"_"+(new Date).getTime()+"="),N=N.replace(/=\?(&|$)/,"="+H+"$1"),L&&(S=I[N])?S.s?m(S.s[0]):F(S):(C[H]=n,_=e(j)[0],_.id=f+T++,M&&(_[u]=M),B&&B.version()<11.6?(J=e(j)[0]).text="document.getElementById('"+_.id+"')."+h+"()":_[a]=a,D&&(_.htmlFor=_.id,_.event=p),_[y]=_[h]=_[g]=function(e){if(!_[v]||!/i/.test(_[v])){try{_[p]&&_[p]()}catch(t){}e=r,r=0,e?m(e[0]):F(s)}},_.src=N,W=function(e){P&&clearTimeout(P),_[g]=_[y]=_[h]=null,E[b](_),J&&E[b](J)},E[d](_,$=E.firstChild),J&&E[d](J,$),P=Q>0&&setTimeout(function(){F(x)},Q)),o)}var r,a="async",u="charset",l="",s="error",d="insertBefore",f="_jqjsp",m="on",p=m+"click",h=m+s,y=m+"load",g=m+"readystatechange",v="readyState",b="removeChild",j="<script>",k="success",x="timeout",C=window,w=e.Deferred,E=e("head")[0]||document.documentElement,I={},T=0,q={callback:f,url:location.href},B=C.opera,D=!!e("<div>").html("<!--[if IE]><i><![endif]-->").find("i").length;o.setup=function(t){e.extend(q,t)},e.jsonp=o}(igJq);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  /**
56
  * easyModal.js v1.1.0
57
  * A minimal jQuery modal that works with your CSS.
58
  * Author: Flavius Matis - http://flaviusmatis.github.com/
59
  * URL: https://github.com/flaviusmatis/easyModal.js
60
  */
61
+ !function(o){var e={init:function(e){var n={top:"100",autoOpen:!1,overlayOpacity:.7,overlayColor:"#9aa0a3",overlayClose:!0,overlayParent:"body",closeOnEscape:!0,closeButtonClass:".close",onOpen:!1,onClose:!1};return e=o.extend(n,e),this.each(function(){var n=e,t=o('<div class="lean-overlay"></div>');t.css({display:"none",position:"fixed","z-index":2e3,top:0,left:0,height:"100%",width:"100%",background:n.overlayColor,opacity:n.overlayOpacity}).appendTo(n.overlayParent);var a=o(this);a.css({opacity:"0"}),a.bind("openModal",function(){o(this).css({opacity:"1"}),t.fadeIn(200,function(){n.onOpen&&"function"==typeof n.onOpen&&n.onOpen(a[0])})}),a.bind("closeModal",function(){o(this).css("opacity","0"),t.fadeOut(200,function(){n.onClose&&"function"==typeof n.onClose&&n.onClose(a[0])})}),t.click(function(){n.overlayClose&&a.trigger("closeModal")}),o(document).keydown(function(o){n.closeOnEscape&&27==o.keyCode&&a.trigger("closeModal")}),a.on("click",n.closeButtonClass,function(o){a.trigger("closeModal"),o.preventDefault()}),n.autoOpen&&a.trigger("openModal")})}};o.fn.easyModal=function(n){return e[n]?e[n].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof n&&n?void o.error("Method "+n+" does not exist on jQuery.easyModal"):e.init.apply(this,arguments)}}(igJq);
62
 
63
+ /**
64
+ * Begin embedded jquery cookie plugin, for readying and writing cookies easily
65
+ */
66
+ !function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(igJq)}(function(e){function n(e){return e}function o(e){return decodeURIComponent(e.replace(t," "))}function i(e){0===e.indexOf('"')&&(e=e.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return r.json?JSON.parse(e):e}catch(n){}}var t=/\+/g,r=e.cookie=function(t,c,a){if(void 0!==c){if(a=e.extend({},r.defaults,a),"number"==typeof a.expires){var f=a.expires,u=a.expires=new Date;u.setDate(u.getDate()+f)}return c=r.json?JSON.stringify(c):String(c),document.cookie=[r.raw?t:encodeURIComponent(t),"=",r.raw?c:encodeURIComponent(c),a.expires?"; expires="+a.expires.toUTCString():"",a.path?"; path="+a.path:"",a.domain?"; domain="+a.domain:"",a.secure?"; secure":""].join("")}for(var d=r.raw?n:o,p=document.cookie.split("; "),s=t?void 0:{},m=0,x=p.length;x>m;m++){var g=p[m].split("="),l=d(g.shift()),v=d(g.join("="));if(t&&t===l){s=i(v);break}t||(s[l]=i(v))}return s};r.defaults={},e.removeCookie=function(n,o){return void 0!==e.cookie(n)?(e.cookie(n,"",e.extend({},o,{expires:-1})),!0):!1}});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
 
70
  //
74
  function ig_getParameterByName(name) {
75
  name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
76
  var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
77
+ results = regex.exec(location.search);
78
  return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
79
  }
80
 
81
  function ig_createSplashHtml() {
82
+ var ig_splashHtml = '<div id="igSplashElement" class="modal-open" style="opacity: 0;">';
83
  ig_splashHtml += ig_createSplashContentsHtml();
84
  ig_splashHtml += '</div><!--/#igSplashElement -->';
85
  return ig_splashHtml;
87
 
88
  function ig_createSplashContentsHtml() { // Feel free to edit the HTML below to match your site
89
  var ig_splashHtml = '' +
90
+ '<div class="close">' +
91
+ '<i class="material-icons">&#xE14C;</i>' +
92
+ '</div>' +
93
+ '<div class="igModalHeader">' +
94
+ '<div class="logoWrapper">' +
95
+ '<img class="modalLogo" src="'+ig_logoUrl+'" alt="" />' +
96
+ '</div><!--/.logoWrapper -->' +
97
+ '<div class="messageWrapper">' +
98
+ '<p class="headerZero">Hello!</p>' +
99
+ '<p class="countryP">Select your country</p> ' +
100
+ '<div class="countryDropDownWrapper">' +
101
+ '<img src="https://d1vyngmisxigjx.cloudfront.net/images/flags/96x64/'+((ig_country)?ig_country.toUpperCase():'undefined')+'.png" alt="Flag of '+ig_countries[ig_country]+'" class="headerFlag">' +
102
+ '<i class="material-icons">&#xE313;</i>' +
103
+ '<select id="countrySelect" class=".coreUISelect" onchange="ig_countrySelected();"> ' +
104
+ '<option value="">Select your country</option>';
105
+
106
+ for(var countryCode in ig_countries){
107
+ ig_splashHtml += '<option '+((countryCode===ig_country)?'selected="selected" ':'')+'value="'+countryCode+'">'+ig_countries[countryCode]+'</option>';
108
+ }
109
+
110
+ ig_splashHtml += '' +
111
+ '</select>' +
112
+ '</div><!--/.countryDropDownWrapper -->' +
113
+ '</div><!--/.messageWrapper -->' +
114
+ '</div><!--/.igModalHeader -->' +
115
+ '<div class="igModalBody">';
116
 
117
  if (ig_isDomesticCountry()) {
118
+ //Don't show international shopping features
119
+
 
 
 
120
  } else {
121
+ //Show international shopping features
122
+ ig_splashHtml += ''+
123
+ '<ul class="featureList">' +
124
+ '<div class="igFeatureHeader">We offer the following services to shoppers in ' +ig_countries[ig_country]+'.</div>' +
125
+ '<li><i class="material-icons">&#xE263;</i> See totals and pay in your currency' +
126
+ '</li>' +
127
+ '<li><i class="material-icons">&#xE870;</i> Multiple payment methods available' +
128
+ '</li>' +
129
+ '<li><i class="material-icons">&#xE065;</i> Option to prepay duties and taxes' +
130
+ '</li>' +
131
+ '<li><i class="material-icons">&#xE539;</i> Multiple shipping options available' +
132
+ '</li>' +
133
+ '</ul>';
134
  }
135
 
136
  ig_splashHtml += '' +
137
+ '<div class="igWelcomeCTAButton">' +
138
+ '<button class="close">Start Shopping</button>' +
139
+ '</div><!--/.igWelcomeCTAButton -->' +
140
+ '</div><!--/.igModalBody -->' +
141
+ '<div class="igModalFooter">' +
142
+ '</div><!--/.igModalFooter-->';
143
 
144
  return ig_splashHtml;
145
  }
158
 
159
  //init easyModal.js modal, after modal content was placed on the page (line above)
160
  igJq("#igSplashElement").easyModal({
161
+ onClose: function(myModal){
162
+ //on close, let's remove the modal contents and the modal smokescreen created by easyModal.js
163
+ igJq("#igSplashElement").remove();
164
+ igJq(".lean-overlay").remove();
165
+ igJq("body").removeClass("welcome-mat-blur welcome-mat-open");
166
+ igJq("#igSplashElement").removeClass("modal-open");
167
+ }
168
  });
169
 
170
  //Fire the modal!
171
  igJq("#igSplashElement").trigger('openModal');
172
+ igJq("body").addClass("welcome-mat-blur welcome-mat-open");
173
+ igJq("#igSplashElement").addClass("modal-open");
174
 
175
  //Set cookie for Splash shown
176
  if (ig_validateCountryCode(igJq.cookie("igCountry"))) { // Only set the splashShown cookie, if there is a valid countryCookie
177
+ igJq.cookie('igSplash', 'igSplash', { expires: 7, path: '/', domain: ig_cookieDomain });
178
  }
179
  }
 
180
  function ig_createNestContents() {
181
+ return '<img onclick="ig_showTheSplash();" src="https://d1vyngmisxigjx.cloudfront.net/images/flags/96x64/'+((ig_country)?ig_country.toUpperCase():'undefined')+'.png" class="igWelcomeFlagHeader" alt="Select your country." />';
182
  }
183
 
184
  function ig_placeNestHtml() {
185
  igJq(function(){
186
+ if (igJq("#"+ig_nestElementId)) {
187
+ igJq("#"+ig_nestElementId).html(ig_createNestContents());
188
+ }
189
  });
190
  }
191
 
192
  function ig_setCountry(country) {
193
  ig_country = country;
194
  if (ig_country) {
195
+ //Set country cookie
196
+ igJq.cookie('igCountry', ig_country, { expires: 365, path: '/', domain: ig_cookieDomain });
197
  }
198
  ig_placeNestHtml();
199
  }
210
  //Return the country code if valid, return null if not valid
211
  var countryDisplayName = ig_countries[countryCode];
212
  if (typeof countryDisplayName !== 'undefined' && countryDisplayName) {
213
+ return countryCode;
214
  } else {
215
+ return null;
216
  }
217
  }
218
 
232
 
233
  function ig_detectCountry() {
234
  igJq.jsonp({
235
+ url: 'https://iprecon.iglobalstores.com/iGlobalIp.js?p=igcCallback',
236
+ callback:'igcCallback',
237
+ success: function(json, textStatus, xOptions){ig_detectCountryCallback(json);},
238
+ error: function(){ig_detectCountryCallbackError();}
239
  });
240
  }
241
 
242
  function ig_pingIglobal() {
243
+ try { // Don't break if this doesn't work
244
+ if (!ig_countryParam) {//Only ping iGlobal for real visitors, not url parameter testing
245
+ igJq.ajax({//we do not need to trap errors like 503's, for this call
246
+ dataType: "jsonp",
247
+ url: 'https://iprecon.iglobalstores.com/ping.js?s='+ig_storeId+'&c='+((ig_country)?ig_country:'')
248
+ });
 
 
 
249
  }
250
+ } catch (err) {
251
+ // do nothing
252
+ }
253
  }
254
 
 
 
 
 
255
  function ig_finishLoading() {
256
  ig_placeNestHtml();
257
  if (!ig_isDomesticCountry() && (!ig_splashCookie || !ig_country || ig_countryParam)) {
258
+ igJq(ig_showTheSplash); //Schedule Showing the Splash
259
  }
 
 
260
  ig_pingIglobal();
261
  }
262
 
281
  } else { // else go with whatever country we have, even no country
282
  ig_finishLoading();
283
  }
284
+
285
+ // Redirect to int'l checkout if country is changed on domestic page
286
+ function ig_countryRedirect(selectedCountry){
287
+ if(ig_domesticCountryCodes.indexOf(selectedCountry) == -1){
288
+ ig_setCountry(selectedCountry);
289
+ window.location.pathname = window.location.pathname.replace("/checkout/onepage/", "/iglobal/checkout/");
290
+ }
291
+ }
292
+
293
+ // check for change in shipping country on domestic checkout page.
294
+ igJq(document).ready(function(){
295
+ billing_select = igJq("select[id *= 'billing:country_id']");
296
+ shipping_select = igJq("select[id *= 'shipping:country_id']");
297
+ rdo_same_as_billing = igJq("input[id *= 'billing:use_for_shipping_yes']");
298
+
299
+ // check for redirect if country selected and billing is same as shipping
300
+ igJq("select[id *= 'billing:country_id']").change(function(){
301
+ if(igJq(this).val() && rdo_same_as_billing.checked === true){
302
+ ig_countryRedirect(igJq(this).val());
303
+ }
304
+ });
305
+
306
+ //change in shipping country
307
+ igJq("select[id *= 'shipping:country_id']").change(function(){
308
+ if(igJq(this).val()){
309
+ ig_countryRedirect(igJq(this).val());
310
+ }
311
+ });
312
+
313
+ // same as shipping button is checked
314
+ igJq(rdo_same_as_billing).change(function(){
315
+ if(this.checked === true && billing_select.val()){
316
+ ig_countryRedirect(billing_select.val());
317
+ }
318
+ });
319
+ });
package.xml CHANGED
@@ -1,45 +1,46 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Iglobal_Main</name>
4
- <version>1.4.0</version>
5
  <stability>stable</stability>
6
  <license>OSL</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Leverage iGlobal Stores' technology for international eCommerce</summary>
10
  <description>International eCommerce Done Right&#xD;
11
- Thanks for checking out the iGlobal Stores extension for Magento Community Edition! This extension gives you access to the many features of iGlobal Stores services. For more information on this extension and iGlobal's services, please visit http://www.iglobalstores.com/magento&#xD;
12
- &#xD;
13
- &#xD;
14
  Improved Global Conversion Rates - Direct international visitors to the iGlobal checkout to keep your conversion rates at their highest&#xD;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  &#xD;
16
- Worldwide Geolocation- Automatically detect international visitors (by IP address) and show them a welcome mat, letting them know about all the ways you make ordering easy for them&#xD;
17
- &#xD;
18
- Duty, Tax, VAT? Done. - Calculate customs, duties, taxes and VAT and let your customers prepay them right in the checkout!&#xD;
19
- &#xD;
20
- Your Shipping Carriers - Work with the shipping carriers of your choice, at your rates.&#xD;
21
- &#xD;
22
- Direct Shipping to the World- Ship directly from your warehouse to anywhere in the world with iGlobal Stores' easy print and ship technology. We'll take care of the paperwork&#xD;
23
- &#xD;
24
- Their Currency - Show customers their order totals in their local currency, making the buying decision that much easier&#xD;
25
- &#xD;
26
- Your Payment Processor or Ours - Use your own payment processor or leverage the integrated payment system to settle in foreign currencies - it's up to you.&#xD;
27
  &#xD;
28
- Before You Install&#xD;
29
- The iGlobal Stores extension will have limited use for stores that are not set up with an iGlobal Stores account. In order to accept orders internationally through iGlobal Stores, please contact us at 1-800-942-0721, at www.iglobalstores.com or at info@iglobalstores.com.</description>
30
- <notes>New Features:&#xD;
31
- Mobile responsive iframe&#xD;
32
- Send address info for logged in users to the checkout.&#xD;
33
- Send product country of manufacture to iGlobal&#xD;
34
  &#xD;
 
35
  &#xD;
36
- Improvements:&#xD;
37
- Removed extra ajax call to fetch config values&#xD;
38
- Allow disabling iframe while still using the iglobal checkout</notes>
39
- <authors><author><name>Matt Flamm</name><user>mattflamm</user><email>matt@iglobalstores.com</email></author><author><name>Brian Olsen</name><user>brianolsen</user><email>brian@iglobalstores.com</email></author></authors>
40
- <date>2015-12-07</date>
41
- <time>22:35:46</time>
42
- <contents><target name="mageetc"><dir name="modules"><file name="Iglobal_Stores.xml" hash="56839ad045b6a99f97564de63ebed700"/><file name="Iglobal_Ship.xml" hash="6d40f1c84e29bb7d8b70eadd77a03917"/></dir></target><target name="magecommunity"><dir name="Iglobal"><dir name="Ship"><dir name="Block"><file name="Ship.php" hash="a802b4d42e72997ec4ab466dec75b743"/></dir><dir name="Helper"><file name="Data.php" hash="fe9f074c1cb74260fa134efa94eb67c9"/></dir><dir name="Model"><dir name="Carrier"><file name="Excellence.php" hash="d1814260e342346b74d7ff3543499d4f"/></dir></dir><dir name="controllers"><file name="IndexController.php" hash="3355a75caf30f4ff96499da3d8a4102a"/></dir><dir name="etc"><file name="config.xml" hash="adecbc76332ffb4b0f8918d3166c655c"/><file name="system.xml" hash="fea6b2ed9b7fdf5748cb57e53fe1301b"/></dir></dir><dir name="Stores"><dir name="Block"><file name="Ajax.php" hash="5d288c6bc298db3bdc86adcdd036bdd6"/><file name="Cart.php" hash="a162e67a8c445b911dd25897e4d886a3"/><file name="Includes.php" hash="8214ef5eae6a83e2909f8ebeee6ea1f7"/><file name="Link.php" hash="69b0efcc8d2ffd6ca9daed407260d793"/></dir><dir name="Helper"><file name="Configoptions.php" hash="b129e55b21f845a20d6e7fdb3b532be3"/><file name="Data.php" hash="aa6a697c4382dd36680c592228e57a5d"/><file name="Url.php" hash="e430471ab463e1fc7812c4a96d5f3208"/></dir><dir name="Model"><file name="Configoptions.php" hash="56a5c17a3e71079ecf574fd4a0e69011"/><dir name="International"><file name="International.php" hash="c0d897eafe1fe60f725147c5e8789131"/></dir><file name="Observer.php" hash="9b1aaebfc83c9aca25f4d711f10fede5"/><file name="Order.php" hash="42558f6c350618879c00fdf5583797c2"/><dir name="Payment"><file name="Iglobal.php" hash="9ac8f8d81b8f8d547831ad6db8a1c7fc"/><file name="Iglobalcreditcard.php" hash="f2f5cf4507a128fadc95071951ca2a41"/><file name="Iglobalpaypal.php" hash="3a566289db82b177ce6b52ce205728f6"/></dir><dir name="Resource"><file name="Setup.php" hash="f725924af461644af75a455210097a53"/></dir><file name="Rest.php" hash="0b3fd2a4bffc0a4a5e8aca28ad3fce5f"/><dir name="Service"><file name="Quote.php" hash="bae0e5a710b9e3aa1427bb78a08fbfd8"/></dir><file name="Tax.php" hash="9645d04415913bea333b5aba99b1909c"/></dir><dir name="controllers"><file name="AjaxController.php" hash="62228ca95872788a18256bbf20839a07"/><file name="CheckoutController.php" hash="dc79a1b3d6734051ea0081f272432911"/><file name="SuccessController.php" hash="ed6df1368ce185de7bf6c557e55d2339"/></dir><dir name="etc"><file name="adminhtml.xml" hash="7f10c9724b1294a506df47cf569bc9e6"/><file name="config.xml" hash="4acf4539f3e24e0af387c69832dd651e"/><file name="system.xml" hash="a69d4f11b37f4ea3197978240cbe5eda"/></dir><dir name="sql"><dir name="iglobal_stores_setup"><file name="mysql4-install-0.1.0.php" hash="72c543090fe27608e582d22494b65d75"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="51e83dd266d7b232d42f03cac66350df"/><file name="mysql4-upgrade-0.1.1-0.1.2.php" hash="4dc024ad63d7a7ea20697ddef4b60a29"/><file name="mysql4-upgrade-0.1.2-0.1.3.php" hash="51e83dd266d7b232d42f03cac66350df"/><file name="mysql4-upgrade-0.1.3-1.0.0.php" hash="829b7c08d5bce22b5c1750a3d72e21ca"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="iglobal.xml" hash="6df6f5f0aceab891d0cd13061a3b5e55"/></dir><dir name="template"><dir name="iglobal"><dir name="sales"><dir name="order"><dir name="view"><file name="info.phtml" hash="06280040dd9521efcd36c12779648108"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="iglobal.xml" hash="d49680762997b0480aaaeae331dc4695"/></dir><dir name="template"><dir name="iglobal"><dir name="checkout"><dir name="cart"><dir name="item"><dir name="configure"><file name="updatecart.phtml" hash="9eaac8c650b6986db7c0a5005966c4ee"/></dir></dir></dir><dir name="onepage"><file name="link.phtml" hash="12a68b6580f9441bc0400b72c66b8358"/></dir></dir><dir name="stores"><file name="cart.phtml" hash="6afb67cae6995499ad5d13bbf56b1b0a"/><file name="igcincludes.phtml" hash="43752aafba25bc795f9f708c0d470181"/></dir></dir></dir></dir></dir></dir></target><target name="mage"><dir name="js"><dir name="iGlobal"><file name="ig_welcome_mat_default.css" hash="b71a0e407204ad9c8c2158910c3600a7"/><file name="ig_welcome_mat_default.js" hash="3406af1dd7347050f19cd755aae21e62"/><file name="igc.cs.magento_default_ice.js" hash="eb2507a442883dda09975301455877a7"/><dir><dir name="jquery"><file name="jquery.js" hash="6903c661e9db496b11e737478528318f"/><file name="jquery.noconflict.js" hash="09bfdd3b964eb2b17b5d6caa1d20a607"/></dir></dir></dir></dir></target></contents>
43
  <compatible/>
44
  <dependencies><required><php><min>5.2.0</min><max>7.0.7</max></php></required></dependencies>
45
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Iglobal_Main</name>
4
+ <version>1.5.0</version>
5
  <stability>stable</stability>
6
  <license>OSL</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Leverage iGlobal Stores' technology for international eCommerce</summary>
10
  <description>International eCommerce Done Right&#xD;
11
+ Thanks for checking out the iGlobal Stores extension for Magento Community Edition! This extension gives you access to the many features of iGlobal Stores services. For more information on this extension and iGlobal's services, please visit http://www.iglobalstores.com/magento&#xD;
12
+ &#xD;
13
+ &#xD;
14
  Improved Global Conversion Rates - Direct international visitors to the iGlobal checkout to keep your conversion rates at their highest&#xD;
15
+ &#xD;
16
+ Worldwide Geolocation- Automatically detect international visitors (by IP address) and show them a welcome mat, letting them know about all the ways you make ordering easy for them&#xD;
17
+ &#xD;
18
+ Duty, Tax, VAT? Done. - Calculate customs, duties, taxes and VAT and let your customers prepay them right in the checkout!&#xD;
19
+ &#xD;
20
+ Your Shipping Carriers - Work with the shipping carriers of your choice, at your rates.&#xD;
21
+ &#xD;
22
+ Direct Shipping to the World- Ship directly from your warehouse to anywhere in the world with iGlobal Stores' easy print and ship technology. We'll take care of the paperwork&#xD;
23
+ &#xD;
24
+ Their Currency - Show customers their order totals in their local currency, making the buying decision that much easier&#xD;
25
+ &#xD;
26
+ Your Payment Processor or Ours - Use your own payment processor or leverage the integrated payment system to settle in foreign currencies - it's up to you.&#xD;
27
+ &#xD;
28
+ Before You Install&#xD;
29
+ The iGlobal Stores extension will have limited use for stores that are not set up with an iGlobal Stores account. In order to accept orders internationally through iGlobal Stores, please contact us at 1-800-942-0721, at www.iglobalstores.com or at info@iglobalstores.com.</description>
30
+ <notes>New Features:&#xD;
31
  &#xD;
32
+ Import State/Region with 2 digit region code.&#xD;
 
 
 
 
 
 
 
 
 
 
33
  &#xD;
34
+ Import the same shipping method that the customer sees in the iGlobal checkout.&#xD;
 
 
 
 
 
35
  &#xD;
36
+ Allow changing which product attributes are sent to iglobal&#xD;
37
  &#xD;
38
+ Save the customer Notes onto the order&#xD;
39
+ </notes>
40
+ <authors><author><name>Brian Olsen</name><user>brianolsen</user><email>brian@iglobalstores.com</email></author></authors>
41
+ <date>2017-02-22</date>
42
+ <time>16:51:03</time>
43
+ <contents><target name="mageetc"><dir name="."><file name="Iglobal_Stores.xml" hash=""/><file name="Iglobal_Ship.xml" hash=""/></dir></target><target name="magecommunity"><dir name="Iglobal"><dir name="Ship"><dir name="Block"><file name="Ship.php" hash="a802b4d42e72997ec4ab466dec75b743"/></dir><dir name="Helper"><file name="Data.php" hash="fe9f074c1cb74260fa134efa94eb67c9"/></dir><dir name="Model"><dir name="Carrier"><file name="Excellence.php" hash="d1814260e342346b74d7ff3543499d4f"/></dir></dir><dir name="controllers"><file name="IndexController.php" hash="3355a75caf30f4ff96499da3d8a4102a"/></dir><dir name="etc"><file name="config.xml" hash="adecbc76332ffb4b0f8918d3166c655c"/><file name="system.xml" hash="fea6b2ed9b7fdf5748cb57e53fe1301b"/></dir></dir><dir name="Stores"><dir name="Block"><file name="Ajax.php" hash="5d288c6bc298db3bdc86adcdd036bdd6"/><file name="Cart.php" hash="a162e67a8c445b911dd25897e4d886a3"/><file name="Includes.php" hash="8214ef5eae6a83e2909f8ebeee6ea1f7"/><file name="Link.php" hash="69b0efcc8d2ffd6ca9daed407260d793"/></dir><dir name="Helper"><file name="Configoptions.php" hash="b129e55b21f845a20d6e7fdb3b532be3"/><file name="Data.php" hash="4b4d51e05c6565a4413d68a9ef3ae555"/><file name="Url.php" hash="e430471ab463e1fc7812c4a96d5f3208"/></dir><dir name="Model"><file name="Configoptions.php" hash="2cbd3eb8357f80c2de5a48f32709b1c5"/><dir name="International"><file name="International.php" hash="c0d897eafe1fe60f725147c5e8789131"/></dir><file name="Observer.php" hash="8bca52293f76cab0c92e8e30ada75662"/><file name="Order.php" hash="f880f8edd039bcfa878804b9c03a02ba"/><dir name="Payment"><file name="Iglobal.php" hash="9ac8f8d81b8f8d547831ad6db8a1c7fc"/><file name="Iglobalcreditcard.php" hash="f2f5cf4507a128fadc95071951ca2a41"/><file name="Iglobalpaypal.php" hash="3a566289db82b177ce6b52ce205728f6"/></dir><dir name="Resource"><file name="Setup.php" hash="f725924af461644af75a455210097a53"/></dir><file name="Rest.php" hash="98750cee4441854556cd5fe283e4e13e"/><dir name="Service"><file name="Quote.php" hash="bae0e5a710b9e3aa1427bb78a08fbfd8"/></dir><file name="Tax.php" hash="9645d04415913bea333b5aba99b1909c"/></dir><dir name="controllers"><file name="AjaxController.php" hash="62228ca95872788a18256bbf20839a07"/><file name="CheckoutController.php" hash="dc79a1b3d6734051ea0081f272432911"/><file name="SuccessController.php" hash="ed6df1368ce185de7bf6c557e55d2339"/></dir><dir name="etc"><file name="adminhtml.xml" hash="7f10c9724b1294a506df47cf569bc9e6"/><file name="config.xml" hash="58c4052642509193411c33d9bfad627d"/><file name="system.xml" hash="c916869addc050f6b2e4d7b01cc7a6b2"/></dir><dir name="sql"><dir name="iglobal_stores_setup"><file name="mysql4-install-0.1.0.php" hash="72c543090fe27608e582d22494b65d75"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="51e83dd266d7b232d42f03cac66350df"/><file name="mysql4-upgrade-0.1.1-0.1.2.php" hash="4dc024ad63d7a7ea20697ddef4b60a29"/><file name="mysql4-upgrade-0.1.2-0.1.3.php" hash="51e83dd266d7b232d42f03cac66350df"/><file name="mysql4-upgrade-0.1.3-1.0.0.php" hash="829b7c08d5bce22b5c1750a3d72e21ca"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="iglobal.xml" hash="6df6f5f0aceab891d0cd13061a3b5e55"/></dir><dir name="template"><dir name="iglobal"><dir name="sales"><dir name="order"><dir name="view"><file name="info.phtml" hash="06280040dd9521efcd36c12779648108"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="iglobal.xml" hash="d49680762997b0480aaaeae331dc4695"/></dir><dir name="template"><dir name="iglobal"><dir name="checkout"><dir name="cart"><dir name="item"><dir name="configure"><file name="updatecart.phtml" hash="9eaac8c650b6986db7c0a5005966c4ee"/></dir></dir></dir><dir name="onepage"><file name="link.phtml" hash="12a68b6580f9441bc0400b72c66b8358"/></dir></dir><dir name="stores"><file name="cart.phtml" hash="6afb67cae6995499ad5d13bbf56b1b0a"/><file name="igcincludes.phtml" hash="43752aafba25bc795f9f708c0d470181"/></dir></dir></dir></dir></dir></dir></target><target name="mage"><dir name="js"><dir name="iGlobal"><file name="ig_welcome_mat_default.css" hash="71fd2550937bb39f4669e0da861b5e9a"/><file name="ig_welcome_mat_default.js" hash="0e36108bb586c79c00a6f5499575f42d"/><file name="igc.cs.magento_default_ice.js" hash="eb2507a442883dda09975301455877a7"/><dir name="jquery"><file name="jquery.js" hash="6903c661e9db496b11e737478528318f"/><file name="jquery.noconflict.js" hash="09bfdd3b964eb2b17b5d6caa1d20a607"/></dir></dir></dir></target></contents>
 
44
  <compatible/>
45
  <dependencies><required><php><min>5.2.0</min><max>7.0.7</max></php></required></dependencies>
46
  </package>