/**
* @author katrink
*/

// eigene Adresse
var actHost = '/en/where-to-buy/';
// Pfad zu den Markenbildern
var imgPath = 'http://product-locator.storck.us';
// Live-Url (wegen Maps API Key)
var liveUrl = 'http://product-locator.storck.us'

// Requests an Durchschleifer-PHP
var urlBrands = actHost+'json.php?action=brands';
var urlGroups = actHost+'json.php?action=groups';
var urlProducts = actHost+'json.php?action=products';
var urlResult = actHost+'json.php?action=stores';

// Enthaelt Pfade zu den Markenbildern
var imgArray = new Object();
// ID der gewaehlten Marke
var selectedBrand = '';

function ajaxEventHandler(url,params,callbackFunc) {
  $.ajax({
    type: "GET",
    url: encodeURI(url+params),
    dataType: "json",
    timeout: 30000,
    error: function (XMLHttpRequest, textStatus, errorThrown) {
      noResult("The Webservice is temporarily not available.");
      hideOverlay();
    },
    success: function(data,textStatus){
      if (textStatus!="error"){
        callbackFunc(data);
      }
    },
    complete: function (XMLHttpRequest, textStatus) { }
  });
}

// JSON-Daten mit Markendaten abfragen
function getBrands(){
  showOverlay();
  ajaxEventHandler(urlBrands, '', showBrands);
}

// JSON-Daten mit Produktsorten-Daten abfragen
function getGroups(brandId){
  showOverlay();
  ajaxEventHandler(urlGroups+'&brand='+brandId, '', showGroups);
}

// JSON-Daten mit Produktgroessen-Daten abfragen
function getProductSizes(groupId){
  showOverlay();
  ajaxEventHandler(urlProducts+'&group='+groupId, '', showProducts);
}

/* Anzeige der einzelnen Marken
* inkl. Fokus-Event für Auswahl einer Marke
* und getGroups-Callback nach Auswahl.
*/
function showBrands(json){

  var html = '';
  $.each(json.brands.brand, function(entryIndex, entry){
    html += '<div>\n\
    <input type="radio" name="locBrands" id="brand'+entry['id']+'"/>\n\
    <label for="brand'+entry['id']+'" class="locBrandImg"><img src="'+imgPath+entry['imagepath']+'"/></label>\n\
    </div>';
    // Markenbilder-Array befuellen
    imgArray[entry['id']] = imgPath+entry['imagepath'];
  });

  $('.locBrands').html(html);



  if(jQuery.browser.safari || (jQuery.browser.mozilla && parseInt(jQuery.browser.version, 10) >= 2  )){
    $('.locBrands input').change(function(){
      var that = this;
      $('.locBrands input').removeAttr('checked');
      $(that).attr('checked', 'checked');
      var brandId = $(that).attr('id');
      brandId = selectedBrand = brandId.substr(5)
      getGroups(brandId);
    });
    if(preSelect != ''){
      $('#brand'+preSelect).trigger('change');
    }
  }else{
    $('.locBrands input').focus(function(){
      var that = this;
      $('.locBrands input').removeAttr('checked');
      $(that).attr('checked', 'checked');
      var brandId = $(that).attr('id');
      brandId = selectedBrand = brandId.substr(5)
      getGroups(brandId);
    });
    if(preSelect != ''){
      $('#brand'+preSelect).trigger('focus');
    }
  }
  hideOverlay();
}

function showGroups(json){
  var html = '';
  if (json.groups.group.length != undefined) {
    $.each(json.groups.group, function(entryIndex, entry){
      if(entryIndex==0){
        preSelected = 'selected="selected" ';
        getProductSizes(entry['id']);
        $('#prodName').text(entry['name']);
      }else{
        preSelected = '';
      }
      html += '<option '+preSelected+'value="' + entry['id'] + '">' + entry['name'] + '</option>';
    });
  } else {

    html += '<option selected="selected" value="' + json.groups.group['id'] + '">' + json.groups.group['name'] + '</option>';
    getProductSizes(json.groups.group['id']);
    $('#prodName').text(json.groups.group['name']);
  }
  $('#prodNameSelect').html(html);
  $('#prodNameSelect').change(function(){
    $("#prodNameSelect option").each(function () {
      if ($(this).attr('selected') == true) {
        var groupId;
        groupId = $(this).val();
        if (groupId != false) {
          getProductSizes(groupId);
        }
      }
    });
    setText('prodName', this)
  });

  //hideOverlay();
}

function showProducts(json){
  var html = '<option selected="selected" value="">All sizes</option>';
  if (json.length != undefined) {

    $.each(json, function(entryIndex, entry){

      if (entryIndex == 0) {
        //preSelected = 'selected="selected" ';
        preSelected = '';
        //$('#prodSize').text(entry.product['name']);
        $('#prodSize').text('All sizes');
      }
      else {
        preSelected = '';
      }
      html += '<option '+preSelected+'value="' + entry.product['code'] + '">' + entry.product['name'] + '</option>';
    });
  } else {

    html += '<option value="' + json.product['code'] + '">' + json.product['name'] + '</option>';
    //$('#prodSize').text(json.products.product['name']);
    $('#prodSize').text('All sizes');

  }

  $('#prodSizeSelect').html(html);

  $('#prodSizeSelect').change(function(){
    setText('prodSize', this)
  });

  $('#locError').hide();

  hideOverlay();
}

function checkForm(){
  $('#locError').text('').hide();
  var errorMessage = '';
  var brandId = '';
  var groupId = '';
  var productId = '';
  var zipCode = '';
  var radius = '';


  // Check if brand is selected
  $('.locBrands input').each(function(){
    if($(this).attr('checked') == true){
      brandId = $(this).attr('id').substr(5)
    }
  })
  if(brandId == ''){
    errorMessage += 'Please select a brand. ';
  }

  // Check if product is selected
  if($('#prodNameSelect').children('option:selected').val() != false){
    groupId = $('#prodNameSelect').children('option:selected').val();
  }else{
    errorMessage += 'Please select a product. ';
  }

  // Check if zip code is a 5 digit number
  if($('#zipCode').val().match(/^[0-9]{5}$/)){
    zipCode = $('#zipCode').val();
  }else{
    errorMessage += 'Please enter a zip code. ';
  }

  // Get radius
  radius = $('#radiusSelect').children('option:selected').val();

  //Get product size
  if($('#prodSizeSelect').children('option:selected').val() !== false){
    productId = $('#prodSizeSelect').children('option:selected').val();
  }else{
    errorMessage += 'Please select a product size. ';
  }

  if(errorMessage != ''){
    $('#locError').text(errorMessage).show();
  }else{
    showOverlay();
    ajaxEventHandler(urlResult, '&brand='+brandId+'&product='+productId+'&group='+groupId+'&zip='+zipCode+'&radius='+radius, showResult);

  }
  return false;
}

function showResult(json){
  if(json.stores.store == undefined){
    $('#locError').text('No retailers could be found. Please try a new search.').show();
  }else{
    $('.locContent').hide();
    $('.locContentResult').show();
    $('.locContentResult .locHl img').attr('src',imgArray[selectedBrand]);
    var html = '';
    if (json.stores.store.length != undefined) {

      $.each(json.stores.store, function(entryIndex, entry){

        if ((entryIndex % 2) == 0) {
          cellClass = 'even';
          imgMap = 'karte_hell.jpg';
        }
        else {
          cellClass = 'odd';
          imgMap = 'karte_dunkel.jpg';
        }

        html += '<tr class="' + cellClass + '">\n\
        <td cellspacing="0" cellpadding="0" class="center">\n\
        <a href="'+liveUrl+entry['maplink']+'"><img src="/inet_superglobal/images/sl_liste/' +imgMap +'"/></a>\n\
        </td>\n\
        <td class="left">' +
        entry['name'] +
        '</td>\n\
        <td class="left">'
        +entry['address'] +', ' +entry['city'] +', ' +entry['state'] +' '+ entry['zip'] +
        '</td>\n\
        <td class="left">' +
        entry['phone'] +
        '</td>\n\
        <td class="right">' +
        entry['distance'] +
        '</td>\n\
        </tr>';
      });
    }else{
      html += '<tr class="even">\n\
      <td cellspacing="0" cellpadding="0" class="center">\n\
      <a href="'+liveUrl+json.stores.store['maplink']+'"><img src="/inet_superglobal/images/sl_liste/karte_hell.jpg"/></a>\n\
      </td>\n\
      <td class="left">' +
      json.stores.store['name'] +
      '</td>\n\
      <td class="left">'
      +json.stores.store['address'] +', ' +json.stores.store['city'] +', ' +json.stores.store['state'] +' '+ json.stores.store['zip'] +
      '</td>\n\
      <td class="left">' +
      json.stores.store['phone'] +
      '</td>\n\
      <td class="right">' +
      json.stores.store['distance'] +
      '</td>\n\
      </tr>';
    }
    $('#locResults tbody').html(html);
  }

  $('#locResults tbody a').click(function(){
    tb_show('', '#TB_inline?height=475&width=480&inlineId=locatorMaps', false);
    $("#locatorIframe").html('<iframe src="'+$(this).attr("href")+'" scrolling="no"  frameborder="0" width="480" height="430" name="MapsIFrameContext"></iframe>');
    return false;
  });

  hideOverlay();
}

function noResult(message){
  $('.locContent').html('<h2 class="locHl">'+message+'</h2>')
}

function showOverlay(){

  var height=$(".locContent").innerHeight();
  $("#locWait").children().css({ display:"block"});
  $("#locOverlay").css({ opacity: "0.5",left:"0px",height:height});
  $("#locWait").css({ opacity: "1",left:"0px",height:height});

}

function hideOverlay(){
  $("#locOverlay").css({ left:"-2000px",height:"1px"});
  $("#locWait").css({ left:"-2000px",height:"1px"});
  $("#locWait").children().css({ display:"none"});
}

function setText(a, b){
  x = $('#'+a);
  if (x) {
    text= $(b).children('option:selected').text();
    x.text(text);
  }
}


var preSelect = '';
$(document).ready(function(){

  if(document.location.search != ''){
    var urlParams = document.location.search.split('&');
    $.each(urlParams, function(n){
      if(urlParams[n].match('brandid=')){
        preSelect = urlParams[n].split('=');
        preSelect = preSelect['1'];
      }
    });
  }

  getBrands();

  $('#locSearchForm').submit(function(){
    checkForm();
    return false;
  });

  $('#locNewSearch').click(function(){
    $('.locContent').toggle();
    $('.locContentResult').toggle();
    return false;
  })

});

