function setLiveCountry(shippingInfo,state, recalculate){
  if (!recalculate) {
    recalculate = false;
  }
  var country = $("#country").find("option:selected").val()
  var stateArr = state.split("|");
  $("#state").html("");
  stateFlag = true;
  for(n in stateArr) {
    stateVal = stateArr[n].split(":");
    if (stateVal[0] == country) {
      stateFlag = false;
      if (shippingInfo && shippingInfo['state'] && shippingInfo['state'] == stateVal[1]) {
        var selected = 'selected';
      } else {
        var selected = '';
      }
      $("#state").append($('<option '+selected+'></option>').val(stateVal[1]).html(stateVal[2]));
    }
  }
  if (stateFlag) {
    $("#state").addClass("positionHide");
    $("#stateInput").removeClass("positionHide");
    if (shippingInfo && shippingInfo['state']) {
      $("#stateInput").val(shippingInfo['state']);
    }
  } else {
    $("#state").removeClass("positionHide");
    $("#stateInput").addClass("positionHide");
  }
  if(recalculate) {
    recalculateShipping();
  }
}



$(document).ready(function(){
  var checkoutEnabled = false;
  var shippingInfo = new Array();
  if ($("#shippingSessionInfo").text() && $("#shippingSessionInfo").text() == 1) {
    $.ajax({
      type: "post",
      url: "/cart/get-session-shipping",
      dataType: 'json',
      success: function(res){
        shippingInfo = res.mes;
        setCountry(shippingInfo,state);
        setState(shippingInfo,state);
        setDefaultData(shippingInfo);
      }
    });
  } else {
    setCountry(shippingInfo,state);
    setState(shippingInfo,state);
  }

  // fix for IE
  $("#state, #stateInput, #zip").change(function(){});

  $("#state, #stateInput, #zip").live('change',function(){
    checkoutEnabled = false;
    recalculateShipping();
  });

  // fix for IE
  $("#stateInput, #zip").keyup(function(){});
  $("#stateInput, #zip").live('keyup',function(){
    checkoutEnabled = false;
  });

  // fix for IE
  $("#country").change(function(){});
  // select state
  $("#country").live('change',function(){
    setLiveCountry(shippingInfo,state, true);
  });


  // Calculate shipping options
  $("#calculateShipping").click(recalculateShipping = function(){
    var countryCode = $("#country option:selected").val();
    var stateCode = $("#state option:selected").val();
    if (!stateCode) {
      stateCode = $("#stateInput").val();
    }
    var zipCode = $("#zip").val();
    zipCode = zipCode.replace(" ", "");
    zipCode = zipCode.replace("-", "");

    if ($(".zip_error")) {
      $(".zip_error").remove();
    }
    if ($(".validateSet")) {
      $(".validateSet").each(function(){
        $(this).removeClass("validateSet");
      });
    }


    //check if US zip is 5dig
    if(countryCode=='US' && !(/^\d{5}$/.test(zipCode))){
      $('#zip').addClass("validateSet");
      $('#zip').parent().append('<div class="zip_error">Enter valid code.</div>');
      return;
    }
    //check if Canada zip is ANANAN format
    else if(countryCode=='CA' && (zipCode.length!='6' || !(/([a-zA-Z]){1}\d{1}([a-zA-Z]){1}\d{1}([a-zA-Z]){1}\d{1}/.test(zipCode)))){
      $('#zip').addClass("validateSet");
      $('#zip').parent().append('<div class="zip_error">Enter valid code.</div>');
      return;
    }

    if (zipCode.length < '1') {
      $('#zip').addClass("validateSet");
      $('#zip').parent().append('<div class="zip_error">Enter valid code.</div>');
      return;
    }

    if (stateCode.length < '1') {
      $('#stateInput').addClass("validateSet");
      $('#stateInput').parent().append('<div class="zip_error">Please enter valid state</div>');
      return;
    }

    $('div#shipping-options').html('<div id="loader"></div>');
    $.ajax({
      type: "post",
      url: "/cart/shipping",
      data: "data[state]="+stateCode+"&data[zipcode]="+zipCode+"&data[country]="+countryCode,
      dataType: 'json',
      success: function(res){
        if (res.status == 1 && (res.mes['ground'] != undefined || res.mes['twoday'] != undefined || res.mes['oneday'] != undefined)) {
          if (res.mes.world) {
            alert("Due to cost, we cannot offer free shipping to this location.  Thank you for your understanding.");
          }
          setShippingRes(countryCode,res.mes,shippingInfo);
        } else {
          $("#loader").remove();
          if (res.mes) alert(res.mes);
        }
      }
    });
  });


  // checkout
  $("#checkoutBtn").click(function(){
    if (checkoutEnabled) {
      $(this).parent().append("<div id='loader'></div>")
      location.href = '/checkout';
    } else {
      alert("Please enter your shipping info and under 'estimate shipping'. Fill the form completely, and click 'calculate shipping options'");
    }
  });

  // change shipping opt
  $(".shipping-opt").live("click", function(){
    var cost = $(this).attr('cost');
    var type = $(this).val();
    var taxes = $(this).attr('taxes');
    $("#shipping-add").text(cost);
    var discount = $("#discount-add").text();
    var val = strtofloat(cost) + strtofloat($('#sub-total').text());
    if (discount) {
      val =  val - ((val * discount) / 100);
    }

    if (taxes && taxes != 0) {
      val = val + ((val * taxes) / 100);
      $(".taxes").remove();
      $(".shopping-cart-total-block .content").prepend('<div class="field taxes"><div class="title">Sales tax:</div><div class="value"><span>'+taxes+' %</span></div></div>');
    } else {
      $(".taxes").remove();
    }

    $("#total").text(val.toFixed(2));

    $('div#shipping-options').append('<div id="loader"></div>');
    // set shipping info to session
    $.ajax({
      type: "post",
      url: "/cart/set-shipping-info",
      data: "data[type]="+type+"&data[cost]="+cost,
      dataType: 'json',
      success: function(res){
        if (res.status == 1) {
          checkoutEnabled = true;
        } else {
          checkoutEnabled = false;
        }
        $("#loader").remove();
      }
    });
  });



});



function setShippingRes(countryCode, msg, shippingInfo){
  //only US supports 3 types of delivery
  var shipOptions = new Array();
  if(countryCode=='US' && !msg['onlyGroud']) {
    if(msg['ground'] != undefined) {
      if(msg['ground'] == '0.00') {
        shipOptions[1] = new Array();
        shipOptions[1]['cost'] = '0.00';
        shipOptions[1]['text'] = 'Ground <b>Free!</b>';
        shipOptions[1]['value'] = 'ground';
      }
      else {
        shipOptions[1] = new Array();
        shipOptions[1]['cost'] = msg['ground'];
        shipOptions[1]['text'] = 'Ground $'+msg['ground'];
        shipOptions[1]['value'] = 'ground';
      }
    }
    if(msg['twoday'] != undefined) {
      if(msg['twoday'] == '0.00') {
        shipOptions[2] = new Array();
        shipOptions[2]['cost'] = '0.00';
        shipOptions[2]['text'] = 'Two Day Air <b>Free!</b>';
        shipOptions[2]['value'] = 'twoday';
      }
      else {
        shipOptions[2] = new Array();
        shipOptions[2]['cost'] = msg['twoday'];
        shipOptions[2]['text'] = 'Two Day Air $'+msg['twoday'];
        shipOptions[2]['value'] = 'twoday';
      }
    }
    if(msg['oneday'] != undefined) {
      if(msg['oneday'] == '0.00') {
        shipOptions[3] = new Array();
        shipOptions[3]['cost'] = '0.00';
        shipOptions[3]['text'] = 'Next Day Air <b>Free!</b>';
        shipOptions[3]['value'] = 'oneday';
      }
      else {
        shipOptions[3] = new Array();
        shipOptions[3]['cost'] = msg['oneday'];
        shipOptions[3]['text'] = 'Next Day Air $'+msg['oneday'];
        shipOptions[3]['value'] = 'oneday';
      }
    }
  }
  //all other contries support only 1 type of delivery called ground here
  else {
    if(msg['ground'] != 'null') {
      if(msg['ground'] == '0.00') {
        shipOptions[1] = new Array();
        shipOptions[1]['cost'] ='0.00';
        if (msg['freight']) {
          shipOptions[1]['text'] = 'Freight <b>Free!</b>';
        } else {
          shipOptions[1]['text'] = 'Ground <b>Free!</b>';
        }
        shipOptions[1]['value'] = 'ground';
      }
      else {
        shipOptions[1] = new Array();
        shipOptions[1]['cost'] = msg['ground'];
        if (msg['freight']) {
          shipOptions[1]['text'] = 'Freight $'+msg['ground']+'';
        } else {
          shipOptions[1]['text'] = 'Delivery $'+msg['ground']+'';
        }
        shipOptions[1]['value'] = 'ground';
      }
    }
  }

  $('div#shipping-options').html("");
  for (n in shipOptions){
    if (shippingInfo['shippingType'] && shippingInfo['shippingType'] == shipOptions[n]['value']) {
      var checked = 'checked';
    } else {
      var checked = '';
    }
    $('div#shipping-options').append('<input '+checked+' class="shipping-opt" type="radio" taxes="'+msg['taxes']+'" cost="'+shipOptions[n]['cost']+'" name="shipping-type" value="'+shipOptions[n]['value']+'"/> '+shipOptions[n]['text']+'<br />');
  }


  if (!shippingInfo['shippingType']){
    $('div#shipping-options').find('input:radio:first').attr("checked","checked");
  }


  
  $('div#shipping-options').find('input:radio').each(function(){
    if ($(this).attr("checked")) {
      $(this).click();
      checkoutEnabled = true;
    }
  });
}

function strtofloat(str)
{
  if (str.indexOf(",")!= -1) {
    str = str.replace(",",".");
  }
  var result = parseFloat(str);
  if (isNaN(result)) {
    result = 0.0;
  }
  return result;
}


function setCountry(shippingInfo,state){
  if (!shippingInfo['country']) {
    shippingInfo['country'] = 'US';
  }
  var countryArr = country.split("|");
  for(n in countryArr) {
    countryVal = countryArr[n].split(":");
    if (shippingInfo['country'] && shippingInfo['country'] == countryVal[0]) {
      var selected = 'selected';
    } else {
      var selected = '';
    }
    $("#country").append($('<option '+selected+'></option>').val(countryVal[0]).html(countryVal[1]));
  }
  setLiveCountry(shippingInfo,state);
  country_change($("#country"),shippingInfo);
  
}

function setState(shippingInfo,state){
  if (shippingInfo['state']) {
    $("#stateInput").val(shippingInfo['state']);
  }
  setLiveCountry(shippingInfo,state);
}


/**
 * if isset shipping session set selected data
 */
function setDefaultData(shippingInfo) {
  $("#zip").val(shippingInfo['zipcode']);
  $("#calculateShipping").click();
}




function country_change(e,shippingInfo){
  var country = e.find("option:selected").val()
  var stateArr = state.split("|");
  $("#state").html("");
  stateFlag = true;
  for(n in stateArr) {
    stateVal = stateArr[n].split(":");
    if (stateVal[0] == country) {
      stateFlag = false;
      if (shippingInfo['state'] && shippingInfo['state'] == stateVal[1]) {
        var selected = 'selected';
      } else {
        var selected = '';
      }
      $("#state").append($('<option '+selected+'></option>').val(stateVal[1]).html(stateVal[2]));
    }
  }
  if (stateFlag) {
    $("#state").addClass("positionHide");
    $("#stateInput").removeClass("positionHide");
    if (shippingInfo['state']) {
      $("#stateInput").val(shippingInfo['state']);
    }
  } else {
    $("#state").removeClass("positionHide");
    $("#stateInput").addClass("positionHide");
  }
}



// State table
//
// To edit the list, just delete a line or add a line.  Order is important.  The order
// displayed is the order it appears on the drop down.
//
var state = '\
US:AK:Alaska|\
US:AL:Alabama|\
US:AR:Arkansas|\
US:AS:American Samoa|\
US:AZ:Arizona|\
US:CA:California|\
US:CO:Colorado|\
US:CT:Connecticut|\
US:DC:D.C.|\
US:DE:Delaware|\
US:FL:Florida|\
US:FM:Micronesia|\
US:GA:Georgia|\
US:GU:Guam|\
US:HI:Hawaii|\
US:IA:Iowa|\
US:ID:Idaho|\
US:IL:Illinois|\
US:IN:Indiana|\
US:KS:Kansas|\
US:KY:Kentucky|\
US:LA:Louisiana|\
US:MA:Massachusetts|\
US:MD:Maryland|\
US:ME:Maine|\
US:MH:Marshall Islands|\
US:MI:Michigan|\
US:MN:Minnesota|\
US:MO:Missouri|\
US:MP:Marianas|\
US:MS:Mississippi|\
US:MT:Montana|\
US:NC:North Carolina|\
US:ND:North Dakota|\
US:NE:Nebraska|\
US:NH:New Hampshire|\
US:NJ:New Jersey|\
US:NM:New Mexico|\
US:NV:Nevada|\
US:NY:New York|\
US:OH:Ohio|\
US:OK:Oklahoma|\
US:OR:Oregon|\
US:PA:Pennsylvania|\
US:PR:Puerto Rico|\
US:PW:Palau|\
US:RI:Rhode Island|\
US:SC:South Carolina|\
US:SD:South Dakota|\
US:TN:Tennessee|\
US:TX:Texas|\
US:UT:Utah|\
US:VA:Virginia|\
US:VI:Virgin Islands|\
US:VT:Vermont|\
US:WA:Washington|\
US:WI:Wisconsin|\
US:WV:West Virginia|\
US:WY:Wyoming|\
US:AA:Military Americas|\
US:AE:Military Europe/ME/Canada|\
US:AP:Military Pacific|\
CA:AB:Alberta|\
CA:MB:Manitoba|\
CA:AB:Alberta|\
CA:BC:British Columbia|\
CA:MB:Manitoba|\
CA:NB:New Brunswick|\
CA:NL:Newfoundland and Labrador|\
CA:NS:Nova Scotia|\
CA:NT:Northwest Territories|\
CA:NU:Nunavut|\
CA:ON:Ontario|\
CA:PE:Prince Edward Island|\
CA:QC:Quebec|\
CA:SK:Saskatchewan|\
CA:YT:Yukon Territory|\
AU:AAT:Australian Antarctic Territory|\
AU:ACT:Australian Capital Territory|\
AU:NT:Northern Territory|\
AU:NSW:New South Wales|\
AU:QLD:Queensland|\
AU:SA:South Australia|\
AU:TAS:Tasmania|\
AU:VIC:Victoria|\
AU:WA:Western Australia|\
BR:AC:Acre|\
BR:AL:Alagoas|\
BR:AM:Amazonas|\
BR:AP:Amapa|\
BR:BA:Baia|\
BR:CE:Ceara|\
BR:DF:Distrito Federal|\
BR:ES:Espirito Santo|\
BR:FN:Fernando de Noronha|\
BR:GO:Goias|\
BR:MA:Maranhao|\
BR:MG:Minas Gerais|\
BR:MS:Mato Grosso do Sul|\
BR:MT:Mato Grosso|\
BR:PA:Para|\
BR:PB:Paraiba|\
BR:PE:Pernambuco|\
BR:PI:Piaui|\
BR:PR:Parana|\
BR:RJ:Rio de Janeiro|\
BR:RN:Rio Grande do Norte|\
BR:RO:Rondonia|\
BR:RR:Roraima|\
BR:RS:Rio Grande do Sul|\
BR:SC:Santa Catarina|\
BR:SE:Sergipe|\
BR:SP:Sao Paulo|\
BR:TO:Tocatins|\
NL:DR:Drente|\
NL:FL:Flevoland|\
NL:FR:Friesland|\
NL:GL:Gelderland|\
NL:GR:Groningen|\
NL:LB:Limburg|\
NL:NB:Noord Brabant|\
NL:NH:Noord Holland|\
NL:OV:Overijssel|\
NL:UT:Utrecht|\
NL:ZH:Zuid Holland|\
NL:ZL:Zeeland|\
GB:AVON:Avon|\
GB:BEDS:Bedfordshire|\
GB:BERKS:Berkshire|\
GB:BUCKS:Buckinghamshire|\
GB:CAMBS:Cambridgeshire|\
GB:CHESH:Cheshire|\
GB:CLEVE:Cleveland|\
GB:CORN:Cornwall|\
GB:CUMB:Cumbria|\
GB:DERBY:Derbyshire|\
GB:DEVON:Devon|\
GB:DORSET:Dorset|\
GB:DURHAM:Durham|\
GB:ESSEX:Essex|\
GB:GLOUS:Gloucestershire|\
GB:GLONDON:Greater London|\
GB:GMANCH:Greater Manchester|\
GB:HANTS:Hampshire|\
GB:HERWOR:Hereford & Worcestershire|\
GB:HERTS:Hertfordshire|\
GB:HUMBER:Humberside|\
GB:IOM:Isle of Man|\
GB:IOW:Isle of Wight|\
GB:KENT:Kent|\
GB:LANCS:Lancashire|\
GB:LEICS:Leicestershire|\
GB:LINCS:Lincolnshire|\
GB:MERSEY:Merseyside|\
GB:NORF:Norfolk|\
GB:NHANTS:Northamptonshire|\
GB:NTHUMB:Northumberland|\
GB:NOTTS:Nottinghamshire|\
GB:OXON:Oxfordshire|\
GB:SHROPS:Shropshire|\
GB:SOM:Somerset|\
GB:STAFFS:Staffordshire|\
GB:SUFF:Suffolk|\
GB:SURREY:Surrey|\
GB:SUSS:Sussex|\
GB:WARKS:Warwickshire|\
GB:WMID:West Midlands|\
GB:WILTS:Wiltshire|\
GB:YORK:Yorkshire|\
EI:CO ANTRIM:County Antrim|\
EI:CO ARMAGH:County Armagh|\
EI:CO DOWN:County Down|\
EI:CO FERMANAGH:County Fermanagh|\
EI:CO DERRY:County Londonderry|\
EI:CO TYRONE:County Tyrone|\
EI:CO CAVAN:County Cavan|\
EI:CO DONEGAL:County Donegal|\
EI:CO MONAGHAN:County Monaghan|\
EI:CO DUBLIN:County Dublin|\
EI:CO CARLOW:County Carlow|\
EI:CO KILDARE:County Kildare|\
EI:CO KILKENNY:County Kilkenny|\
EI:CO LAOIS:County Laois|\
EI:CO LONGFORD:County Longford|\
EI:CO LOUTH:County Louth|\
EI:CO MEATH:County Meath|\
EI:CO OFFALY:County Offaly|\
EI:CO WESTMEATH:County Westmeath|\
EI:CO WEXFORD:County Wexford|\
EI:CO WICKLOW:County Wicklow|\
EI:CO GALWAY:County Galway|\
EI:CO MAYO:County Mayo|\
EI:CO LEITRIM:County Leitrim|\
EI:CO ROSCOMMON:County Roscommon|\
EI:CO SLIGO:County Sligo|\
EI:CO CLARE:County Clare|\
EI:CO CORK:County Cork|\
EI:CO KERRY:County Kerry|\
EI:CO LIMERICK:County Limerick|\
EI:CO TIPPERARY:County Tipperary|\
EI:CO WATERFORD:County Waterford|\
';

// Country data table
//
//
// To edit the list, just delete a line or add a line.  Order is important.  The order
// displayed is the order it appears on the drop down.
//
var country = '\
AF:Afghanistan|\
AL:Albania|\
DZ:Algeria|\
AS:American Samoa|\
AD:Andorra|\
AO:Angola|\
AI:Anguilla|\
AQ:Antarctica|\
AG:Antigua and Barbuda|\
AR:Argentina|\
AM:Armenia|\
AW:Aruba|\
AU:Australia|\
AT:Austria|\
AZ:Azerbaijan|\
AP:Azores|\
BS:Bahamas|\
BH:Bahrain|\
BD:Bangladesh|\
BB:Barbados|\
BY:Belarus|\
BE:Belgium|\
BZ:Belize|\
BJ:Benin|\
BM:Bermuda|\
BT:Bhutan|\
BO:Bolivia|\
BA:Bosnia And Herzegowina|\
XB:Bosnia-Herzegovina|\
BW:Botswana|\
BV:Bouvet Island|\
BR:Brazil|\
IO:British Indian Ocean Territory|\
VG:British Virgin Islands|\
BN:Brunei Darussalam|\
BG:Bulgaria|\
BF:Burkina Faso|\
BI:Burundi|\
KH:Cambodia|\
CM:Cameroon|\
CA:Canada|\
CV:Cape Verde|\
KY:Cayman Islands|\
CF:Central African Republic|\
TD:Chad|\
CL:Chile|\
CN:China|\
CX:Christmas Island|\
CC:Cocos (Keeling) Islands|\
CO:Colombia|\
KM:Comoros|\
CG:Congo|\
CD:Congo, The Democratic Republic O|\
CK:Cook Islands|\
XE:Corsica|\
CR:Costa Rica|\
CI:Cote d` Ivoire (Ivory Coast)|\
HR:Croatia|\
CU:Cuba|\
CY:Cyprus|\
CZ:Czech Republic|\
DK:Denmark|\
DJ:Djibouti|\
DM:Dominica|\
DO:Dominican Republic|\
TP:East Timor|\
EC:Ecuador|\
EG:Egypt|\
SV:El Salvador|\
GQ:Equatorial Guinea|\
ER:Eritrea|\
EE:Estonia|\
ET:Ethiopia|\
FK:Falkland Islands (Malvinas)|\
FO:Faroe Islands|\
FJ:Fiji|\
FI:Finland|\
FR:France (Includes Monaco)|\
FX:France, Metropolitan|\
GF:French Guiana|\
PF:French Polynesia|\
TA:French Polynesia (Tahiti)|\
TF:French Southern Territories|\
GA:Gabon|\
GM:Gambia|\
GE:Georgia|\
DE:Germany|\
GH:Ghana|\
GI:Gibraltar|\
GR:Greece|\
GL:Greenland|\
GD:Grenada|\
GP:Guadeloupe|\
GU:Guam|\
GT:Guatemala|\
GN:Guinea|\
GW:Guinea-Bissau|\
GY:Guyana|\
HT:Haiti|\
HM:Heard And Mc Donald Islands|\
VA:Holy See (Vatican City State)|\
HN:Honduras|\
HK:Hong Kong|\
HU:Hungary|\
IS:Iceland|\
IN:India|\
ID:Indonesia|\
IR:Iran|\
IQ:Iraq|\
IE:Ireland|\
EI:Ireland (Eire)|\
IL:Israel|\
IT:Italy|\
JM:Jamaica|\
JP:Japan|\
JO:Jordan|\
KZ:Kazakhstan|\
KE:Kenya|\
KI:Kiribati|\
KP:Korea, Democratic People\'S Repub|\
KW:Kuwait|\
KG:Kyrgyzstan|\
LA:Laos|\
LV:Latvia|\
LB:Lebanon|\
LS:Lesotho|\
LR:Liberia|\
LY:Libya|\
LI:Liechtenstein|\
LT:Lithuania|\
LU:Luxembourg|\
MO:Macao|\
MK:Macedonia|\
MG:Madagascar|\
ME:Madeira Islands|\
MW:Malawi|\
MY:Malaysia|\
MV:Maldives|\
ML:Mali|\
MT:Malta|\
MH:Marshall Islands|\
MQ:Martinique|\
MR:Mauritania|\
MU:Mauritius|\
YT:Mayotte|\
MX:Mexico|\
FM:Micronesia, Federated States Of|\
MD:Moldova, Republic Of|\
MC:Monaco|\
MN:Mongolia|\
MS:Montserrat|\
MA:Morocco|\
MZ:Mozambique|\
MM:Myanmar (Burma)|\
NA:Namibia|\
NR:Nauru|\
NP:Nepal|\
NL:Netherlands|\
AN:Netherlands Antilles|\
NC:New Caledonia|\
NZ:New Zealand|\
NI:Nicaragua|\
NE:Niger|\
NG:Nigeria|\
NU:Niue|\
NF:Norfolk Island|\
MP:Northern Mariana Islands|\
NO:Norway|\
OM:Oman|\
PK:Pakistan|\
PW:Palau|\
PS:Palestinian Territory, Occupied|\
PA:Panama|\
PG:Papua New Guinea|\
PY:Paraguay|\
PE:Peru|\
PH:Philippines|\
PN:Pitcairn|\
PL:Poland|\
PT:Portugal|\
PR:Puerto Rico|\
QA:Qatar|\
RE:Reunion|\
RO:Romania|\
RU:Russian Federation|\
RW:Rwanda|\
KN:Saint Kitts And Nevis|\
SM:San Marino|\
ST:Sao Tome and Principe|\
SA:Saudi Arabia|\
SN:Senegal|\
XS:Serbia-Montenegro|\
SC:Seychelles|\
SL:Sierra Leone|\
SG:Singapore|\
SK:Slovak Republic|\
SI:Slovenia|\
SB:Solomon Islands|\
SO:Somalia|\
ZA:South Africa|\
GS:South Georgia And The South Sand|\
KR:South Korea|\
ES:Spain|\
LK:Sri Lanka|\
NV:St. Christopher and Nevis|\
SH:St. Helena|\
LC:St. Lucia|\
PM:St. Pierre and Miquelon|\
VC:St. Vincent and the Grenadines|\
SD:Sudan|\
SR:Suriname|\
SJ:Svalbard And Jan Mayen Islands|\
SZ:Swaziland|\
SE:Sweden|\
CH:Switzerland|\
SY:Syrian Arab Republic|\
TW:Taiwan|\
TJ:Tajikistan|\
TZ:Tanzania|\
TH:Thailand|\
TG:Togo|\
TK:Tokelau|\
TO:Tonga|\
TT:Trinidad and Tobago|\
XU:Tristan da Cunha|\
TN:Tunisia|\
TR:Turkey|\
TM:Turkmenistan|\
TC:Turks and Caicos Islands|\
TV:Tuvalu|\
UG:Uganda|\
UA:Ukraine|\
AE:United Arab Emirates|\
GB:United Kingdom|\
US:United States|\
UM:United States Minor Outlying Isl|\
UY:Uruguay|\
UZ:Uzbekistan|\
VU:Vanuatu|\
XV:Vatican City|\
VE:Venezuela|\
VN:Vietnam|\
VI:Virgin Islands (U.S.)|\
WF:Wallis and Furuna Islands|\
EH:Western Sahara|\
WS:Western Samoa|\
YE:Yemen|\
YU:Yugoslavia|\
ZR:Zaire|\
ZM:Zambia|\
ZW:Zimbabwe|\
';
