

$(document).ready(function(){
  generate_map();
  personal_calendar();
  validate_club();
});

function generate_map(){
  var wineries = {
    map: '',
    locations: {
      delorimier: {lat: 38.707917069285756, lng: -122.87831100, title: 'deLorimier Winery', logo: {src: 'http://delorimierwinery.mivlio.com/images/delorimier_winery_logo_sm.gif', height: '65', width: '167'}, address: '2001 Highway 128 Geyserville, CA 95441'},
      wilson:     {lat: 38.63925706911577,  lng: -122.900959,   title: 'Wilson Winery', logo: {src: 'http://wilsonwinery.mivlio.com/images/wilson_winery_logo_sm.gif', height: '48', width: '130'}, address: '1960 Dry Creek Road Healdsburg, CA 95448'},
      mazzocco:   {lat: 38.656717103037614, lng: -122.89870737, title: 'Mazzocco Winery', logo: {src: 'http://mazzoccowinery.mivlio.com/images/mazzocco_winery_logo_sm.gif', height: '39', width: '150'}, address: '1400 Lytton Springs Rd Healdsburg, CA 95448'},
      matrix:     {lat: 38.57304331895433,  lng: -122.87550915, title: 'Matrix Winery', logo: {src: 'http://matrixwinery.mivlio.com/images/matrix_winery_logo_sm.gif', height: '41', width: '130'}, address: '3291 Westside Rd Healdsburg, CA 95448'},
      jaxonkeys:  {lat: 39.01269007004423,  lng: -123.129319,   title: 'Jaxon Keys Winery', logo: {src: 'http://jaxonkeyswinery.mivlio.com/images/jaxonkeys_winery_logo_sm.gif', height: '47', width: '199'}, address: '10400 South Hwy. 101 Hopland, CA 95449'}
    }
  }

  var el = $('#map_canvas').get(0);
  if(el == undefined){ return; }

  var location = wineries.locations[el.className];
  var icon = 'http://google-maps-icons.googlecode.com/files/winery.png';
  var map = new google.maps.Map(document.getElementById("map_canvas"), {
    zoom: 14,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    center: new google.maps.LatLng(location.lat, location.lng)
  });
  var marker = new google.maps.Marker({
    position: new google.maps.LatLng(location.lat, location.lng),
    map: map,
    flat: true,
    title: location.title,
    icon: icon
  });
  var html_content = '<div class="gmap-infow">';
  html_content += '<img src="'+ location.logo.src +'" alt="'+ location.title +'" height="'+ location.logo.height +'" width="'+ location.logo.width +'"/>';
  html_content += '<p>'+ location.address +'</p></div>';

  var infoW = new google.maps.InfoWindow({content: html_content});

  google.maps.event.addListener(marker, 'click', function() {
    infoW.open(map, marker);
  });

}

function personal_calendar(){
  var cal = $('#cal_canvas');
  if(cal.length == 0){ return; }

  wcalendar.init(cal.get(0).className);
}

wcalendar = {
  feed: [],
  init: function(winery){
    this.get_xml_feed(winery);
  },

  get_xml_feed: function(winery){
    var calendars = {
      wilson: 'http://www.google.com/calendar/feeds/wilsonartisanwines.com_djkgjtcnpe6hsi2eov3kt8fs9k%40group.calendar.google.com/public/full',
      delorimier: 'http://www.google.com/calendar/feeds/wilsonartisanwines.com_nsik9pmtfog3j1d2a79i46vclo%40group.calendar.google.com/public/full',
      mazzocco: 'http://www.google.com/calendar/feeds/wilsonartisanwines.com_eq6d9ts2etnuce7jpcr07752u0%40group.calendar.google.com/public/full',
      matrix: 'http://www.google.com/calendar/feeds/wilsonartisanwines.com_vvefkqidcld6o42dr2btcci5k8%40group.calendar.google.com/public/full',
      jaxonkeys: 'http://www.google.com/calendar/feeds/wilsonartisanwines.com_e3n5u2fnkrrktpc168rk4skgu0%40group.calendar.google.com/public/full',
      global: 'http://www.google.com/calendar/feeds/events%40wilsonartisanwines.com/public/full'
    }
    //'start-min':  wcalendar.iso_date_now()
    var params = {'singleevents': true, 'max-results': 9999, orderby: 'starttime', sortorder: 'ascending'}

    $.getJSON(calendars[winery] + "?alt=json-in-script&callback=?", params, function(data){
      wcalendar.data = data;

      if(data){
        $.each(data.feed.entry, function(i, entry){
          var event = {};
          event.title   = entry['title']['$t'];
          event.content = wcalendar.auto_link(entry['content']['$t']);
          event.where   = entry['gd$where'][0]['valueString'];
          event.when    = {start: entry['gd$when'][0]['startTime'], end: entry['gd$when'][0]['endTime']}
          event.pdate   = wcalendar.parse_date(event.when)

          wcalendar.feed.push(event);
        });
      }else{
        $('#cal_canvas').text('No events data found.');
      }

      wcalendar.show();
    });

  },

  parse_date: function(date){
    if(date.start === undefined){ return undefined }
    var start  = date.start.replace(/\.\d+(-\d+:\d+.)?/, '');
    var end    = date.end.replace(/\.\d+(-\d+:\d+.)?/, '');
    var tstart = Date.parse(start).toString('t').replace(/\sPM/,'pm').replace(/\sAM/,'am');
    var tend   = Date.parse(end).toString('t').replace(/\sPM/,'pm').replace(/\sAM/,'am');

    return Date.parse(start).toString('dddd, MMMM d ') + ' - ' + tstart + ' to ' + tend;

  },

  show: function(){
    $.each(this.feed, function(){
      var html = $('#cal-template .event').clone();
      html.find('.title').html(this.title);
      html.find('.where').html(this.where);
      html.find('.description').html(this.content);

      if(this.when.start !== undefined){
        html.find('.when').html(this.pdate);
      }

      $('#cal_canvas').append(html);
    });
  },

  auto_link: function(content){
    return content.replace(/(https?:\/\/)([^\s<]+)/g, '<a href="$1$2">$2</a>')
  },

  iso_date_now: function(){
    var d = new Date();
    function pad(n){return n<10 ? '0'+n : n}
    return d.getFullYear() + '-'
           + pad(d.getMonth()+1) + '-'
           + pad(d.getDay() + 'T00:00:00');
  }

}

function validate_club(){
  var cm = $('#new_club_member');
  if(cm.length == 0){ return }
  
  $('#club_member_birth_1i').addClass('required').addClass('validAge');
  $('#same_address').click(function(){
    if(this.checked){
      $('input, select', '#business_address').attr('disabled', 'disabled');
    }else{
      $('input, select', '#business_address').removeAttr('disabled');
    }
  });
  $('#mclubs .club').change(function(){
    $('#mclubs .variant').each(function(){
      this.checked = false;
    });
  });

  $.validator.addMethod('validAge', function(){
    var cyear  = (new Date()).getFullYear();
    var year = parseInt($('#club_member_birth_1i').val());
    if((cyear - year) < 21){
      return false;
    }
    return true;
  }, 'You must be at least 21');

  $.validator.addMethod('validVariant', function(){
    var chked = $('#mclubs .club:checked'),
        tr = chked.parents('tr');

    if( chked.length == 0 ){
      return false;
    }

    if( tr.find('input[type="radio"]').length > 2 && tr.find('.variant:checked').length == 0 ){
      return false;
    }

    return true;

  }, 'Please select a club and wine type');


  $.metadata.setType("attr", "validate");
  $('#new_club_member').validate({

    submitHandler: function(form){
      $('.form-actions input').attr('disabled', 'true');
      $('.submit-cart img').show();
      form.submit();
    }
  });
}
