$(document).ready(function () {

  var _sf_startpt=(new Date()).getTime()

  getLatestStats(); 
  getRetailers();
  
  homepageTabClick($('.retailers-tab-active'));

  $('.retailers-tab').click(function() { homepageTabClick(this) });
  $('#overall-countries-number').text($('.retailers-tab').length);
  $('#slideshow').data('position', 1);

  $('#slideshow').data('intervalId', setInterval("advanceSlideshow ()", 10000));  
  $(".bulletpoint").click(bulletpointClick);
  $("a.current-language").removeAttr('href');
  $("a.current-language").css('cursor', 'default');
  
  var source = window.location.href.match(/adwords_../);
  source = (source == null ? '' : source);
  $("#firefox-version").click(function() {
    $('#download-button').attr('href', 'http://www.getinvisiblehand.com/redirect/firefox/' + source);
    $('#download-button').css('background-image', 'url(http://www.getinvisiblehand.com/images/button-download-' + currentLanguage() + '.png)')
  });
  $("#chrome-version").click(function() {
    $('#download-button').attr('href', 'http://www.getinvisiblehand.com/redirect/chrome/' + source);
    $('#download-button').css('background-image', 'url(http://www.getinvisiblehand.com/images/button-chrome-download-' + currentLanguage() + '.png)');    
  });
  $("#ie-version").click(function() {
    $('#download-button').attr('href', 'http://www.getinvisiblehand.com/redirect/ie/' + source);
    $('#download-button').css('background-image', 'url(http://www.getinvisiblehand.com/images/button-ie-download-' + currentLanguage() + '.png)');    
  });
  $("#safari-version").click(function() {
    $('#download-button').attr('href', 'http://www.getinvisiblehand.com/redirect/safari');
    $('#download-button').css('background-image', 'url(http://www.getinvisiblehand.com/images/button-safari-download-' + currentLanguage() + '.png)');    
  });
  $("#opera-version").click(function() {
    $('#download-button').attr('href', 'http://www.getinvisiblehand.com/redirect/opera');
    $('#download-button').css('background-image', 'url(http://www.getinvisiblehand.com/images/button-opera-download-' + currentLanguage() + '.png)');    
  });
  
  if (navigator.userAgent.toLowerCase().indexOf('msie') > -1)
    $("#ie-version").click();
  if (navigator.userAgent.toLowerCase().indexOf('safari') > -1)
    $("#safari-version").click();
  // make sure this one goes AFTER safari check since Chrome identifies itself as Safari
  if ( (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) && (navigator.userAgent.toLowerCase().indexOf('chromeframe') < 0) )
    $("#chrome-version").click();
  if (navigator.userAgent.toLowerCase().indexOf('opera') > -1)
    $("#opera-version").click();
});

function currentLanguage() {
  switch($('a.current-language').text()) {
    case 'English': return 'en'; break;
    case 'Deutsch': return 'de'; break;
    default: return 'en'
  }  
}

function bulletpointClick() {
  if ($(this).hasClass('bulletpoint-current')) {
    return;    
  }
  clearInterval($('#slideshow').data('intervalId'));
  var newPos = $(this).prevAll().length + 1;
  advanceSlideshow(newPos);
}

function advanceSlideshow(nextPos) {
  var pos = $('#slideshow').data('position');
  var country = currentCountry();
  if (!nextPos)
    nextPos = (pos < 4) ? pos + 1 : 1;
  $('#slideshow').data('position', nextPos);
  var offset = (-387 * (nextPos - 1)).toString() + 'px'; 
  $('#slideshow').animate({backgroundPosition: '0 ' + offset}, 500, function() {
    $(bulletpoints[nextPos-1]).addClass('bulletpoint-current');  
    $(slidetexts[nextPos-1]).removeClass('invisible');    
  });  
  var bulletpoints = $('#bulletpoints').children();
  var slidetexts = $('#slide-container').children('.slide-text');
  $(bulletpoints[pos-1]).removeClass('bulletpoint-current');
  $(slidetexts[pos-1]).addClass('invisible');
}

function getLatestStats() {
  var code_fields = $('.retailers-tab').children('input');
  for (var i=0; i < code_fields.length; i++) {
    var code = $(code_fields[i]).attr('country');
    if (code == 'GB') code = 'uk'; // I should have thought about this. Ugly.
    var address = 'http://reports.invisiblehand.co.uk/total_savings/' + code + '?callback=?';
    var doAjax = function(c) {
      $.getJSON(address, {}, function(data) {                
        if (c == 'uk') c = 'GB'; // Very ugly. What I was thinking about?
        $('#stats').data('stats' + c, data);
        updateStats();
        })
    }
    doAjax(code);
  }
}

function getRetailers() {
  replaceRetailerImages('https://scrapers.invisiblehand.co.uk/images/products?callback=?', '.retailer-logo');
  getRetailersCount('https://scrapers.invisiblehand.co.uk/retailers_count?callback=?');
}

function getRetailersCount(address) {
  $.getJSON(address, {}, function(data) {        
    $('#overall-retailers-number').text(data.retailers_count);    
  });
}

function replaceRetailerImages(address, css_class)
{
  $.getJSON(address, {}, function(data) {        
    $('#retailers').data('retailers', data.retailers);
    var counters = {};
    for (var i=0; i< data.retailers.length; i++) {
      var region = data.retailers[i].region;
      if (region == 'UK')
        region = 'GB'; // No, I can't write code like that... it's impossible...
      counters[region] = (counters[region] |= 0) + 1;
    }
    var retailersTabs = $('.retailers-tab');
    for (i = 0; i < retailersTabs.length; i++) {      
      var country = $(retailersTabs[i]).children("input[type='hidden']").attr('country');      
      //$($('#more-retailers-' + country)).find('.retailers-in-country').text((counters[country] || '') + ' ');
    }
    if ($('#supported-retailers').length > 0) {
      var original_div = $($(css_class)[0]);
      var div = original_div.clone();
      $(css_class).remove();
      for (var i=0; i < data.retailers.length; i++) {
        var region = data.retailers[i].region;
        if (region == 'UK')
          region = 'GB'; // Aaaaaaaaaaaaaaah!        
        var newdiv = div.clone();
        var imageTag = $('<img />');
        imageTag.attr('src', 'http://scrapers.invisiblehand.co.uk' + data.retailers[i].image);
        $('img', newdiv).replaceWith(imageTag);
        $('a', newdiv).attr('href', data.retailers[i].url);        
        var doUpdate = function(r, d) {
          setTimeout(function() {$('#retailers-logos-' + r + ' .retailerslist_endplaceholder').before(d)}, 500);
        }
        doUpdate(region, newdiv);
      }
    }
  });	
}

function updateStats() {
  var country = currentCountry();
  var data = $('#stats').data('stats' + country);
  if (data == undefined)
    return;
  $('#total-savings-figure').html(commaFormatted(data.total, 10));
  $('#average-saving-figure').html(commaFormatted(data.average, 3, true));
}

// http://www.web-source.net/web_development/currency_formatting.htm
// modified by E. Shadchnev
function commaFormatted(amount, fieldSize, decimals) {
	var delimiter = ","; // replace comma if desired 
	if (decimals)
	  var i = Math.round(amount * 100) / 100;
	else
	  var i = Math.round(amount);
	if(isNaN(i)) { return ''; }
	i = Math.abs(i);
	if (decimals) {
	  var res = i.toString();
	  if (res.match(/\.\d$/)) { res = res + '0'};
	  return currency() + res;
  }
	var n = new String(i);
	var a = [];
	while(n.length > 3)
	{
		var nn = n.substr(n.length-3);
		a.unshift(nn);
		n = n.substr(0,n.length-3);
	}
	if(n.length > 0) { a.unshift(n); }
	n = currency() + a.join(delimiter);
	return n;
}

function currency() {
  switch (currentCountry()) 
  {
    case 'US':
      return '$';
    case 'GB':
      return '&pound;';
    case 'DE':
      return '&euro;'
    default:
      return '?'
  }    
}

function currentCountry() {
  return $('.retailers-tab-active').children("input[type='hidden']").attr('country');
}

function homepageTabClick(tab) {
  $(tab).siblings('.retailers-tab').removeClass('retailers-tab-active');
  $(tab).siblings('.retailers-tab').addClass('retailers-tab-inactive');
  $(tab).removeClass('retailers-tab-inactive');
  $(tab).addClass('retailers-tab-active');
  var country = currentCountry();
  $('#airlines-logos-' + country).siblings().addClass('invisible');
  $('#airlines-list-' + country).siblings().addClass('invisible');
  $('#retailers-logos-' + country).siblings().addClass('invisible');
  $('#airlines-logos-' + country).removeClass('invisible');
  $('#airlines-list-' + country).removeClass('invisible');
  $('#retailers-logos-' + country).removeClass('invisible');
  $('#more-retailers-' + country).removeClass('invisible');

  updateStats();
  /*
  The following lines work around an IE7 bug which causes #retailers-summary to not to be drawn
  after a tab is clicked. Anything that forces IE7 to rerender the element (e.g. css update) helps.
  I hate Internet Explorer.  
  */
  $('#retailers-summary').css('overflow', 'hidden');
  $('#supported-retailers h2').css('overflow', 'hidden');
}

function submitEmail() {
  var email = $('#sign-up-input').val();
  if (email == ''){
    $.prompt("Oops, it looks like you forgot enter your email address! Please enter it and try again.");
    return;
  }
    
  if (isValidEmail(email)) {
    $.post('http://www.getinvisiblehand.com/user_emails?callback=?', {email: email})    
    $.prompt("Thanks for your interest!");
  } else {
    $.prompt("Sorry, '" + email + "' does not look like a valid email address. Typo?");
  }
}

function isValidEmail(email) {
	return /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email);
}
