// FRONTEND: EVENTS JAVASCRIPT
// 2010 Peter Zavoruev <pete@plan5.net>

$(window).load(function(){
    
    // modal window x,y position
    function modalPos()
    {
      // resize the wrapper
      $('#modal_wrapper').css('height', $(document).height()+'px');
      // resize the wrapper
      $('#modal_wrapper').css('width', $(document).width()+'px');
      // move the window
    	var x = $(window).height() - 625;
    	x = x < 2 ? 2 : x;
    	$('#modal_window').css('margin-top', ((x/2)-1) + 'px');
    }
    
    // load event list
    function eventList(context){
      today = (context == 'latest') ? context : context.text();
      $.ajax({
        url: '/index-ajax.php',
        data: { q: '/events.php', action: 'getEvents', day: today, month: (currentMonth+1), year: currentYear },
        dataType: 'json',
        type: 'GET',
        cache: false,
        success: function(data) {
          $('#events_wrapper li').remove();
          if(data.errorCode == 0){
            for(sEvent in data.events){
              $('#events_wrapper ul').append(data.events[sEvent].preview);
            }
            $('#events_wrapper ul').data('events', data.events);
          } else {
            $('#events_wrapper ul').append('<li><b>No events for this day</b></li>');
          }
          // scroller
          $('#events_wrapper').jScrollPane({showArrows: true, scrollbarWidth: 20});
        }
      });
    }

    // month names
    var monthNames = new Array(12);
        monthNames[0]  = "January";
        monthNames[1]  = "February";
        monthNames[2]  = "March";
        monthNames[3]  = "April";
        monthNames[4]  = "May";
        monthNames[5]  = "June";
        monthNames[6]  = "July";
        monthNames[7]  = "August";
        monthNames[8]  = "September";
        monthNames[9]  = "October";
        monthNames[10] = "November";
        monthNames[11] = "December";

    // CALENDAR
    function loadCalendar(month, year){
      var dteMonth = new Date(year,month);
      // get first day of the month
      var firstDay = dteMonth.getDay(dteMonth);
      firstDay = (firstDay == 0) ? 6 : (firstDay-1);
      // get number of days in the month     
      var intDaysInMonth = 28;
      var blnDateFound = false;
      while (!blnDateFound){
        dteMonth.setDate(intDaysInMonth+1);
        var intNewMonth = dteMonth.getMonth();
        if(intNewMonth != month){
          blnDateFound = true;
        }else{
          intDaysInMonth++;
        }
      }
      // print calendar
      $('#events_calendar_days li').remove();
      $('#events_sidebar_calendar h4').text(monthNames[month] + ' ' + year);
      for(var i = 1; i <= firstDay; i++){
        $('#events_calendar_days').append('<li class="empty"></li>'); 
      }
      for(var i = 1; i <= intDaysInMonth; i++){
        $('#events_calendar_days').append('<li>'+i+'</li>'); 
      }
      // calendar height
      if((firstDay == 5 && intDaysInMonth > 30) || (firstDay == 6 && intDaysInMonth > 28)){
        $('#events_sidebar_calendar_wrapper').addClass('big');
      } else {
        $('#events_sidebar_calendar_wrapper').removeClass('big');
      }
    }

    // calendar init
    var date = new Date();
    var currentMonth = date.getMonth();
    var currentYear = date.getFullYear();
    var currentDay = date.getDate();
    loadCalendar(currentMonth, currentYear);
    eventList('latest');

    // previous month
    $('#events_sidebar_calendar_left').bind('click', function(){
      currentMonth = currentMonth > 0 ? --currentMonth : 11;
      currentYear = currentMonth == 11 ? --currentYear : currentYear;
      loadCalendar(currentMonth, currentYear);
    });
    // next month
    $('#events_sidebar_calendar_right').bind('click', function(){
      currentMonth = currentMonth < 11 ? ++currentMonth : 0;
      currentYear = currentMonth == 0 ? ++currentYear : currentYear;
      loadCalendar(currentMonth, currentYear);
    });
    
    // show events for a single day
    $('#events_sidebar_calendar li').live('click', function(){
      eventList($(this));
    });
    
    // single event
    $('#events_wrapper h4, #events_wrapper .image_preview').live('click', function(){
      var event_index = $('#events_wrapper ul li').index($(this).parent());
      var events_data = $('#events_wrapper ul').data('events');
      var events = {};
      // store data
      $('body').data('active_event', events_data[event_index]);
      events['id'] = $(this).parent().attr('rel').replace('event_', '');
      events['date'] = $(this).parent().find('.event_date').text();
      events['fulltext'] = events_data[event_index].fulltext;
      events['price'] = events_data[event_index].price;
      events['title'] = events_data[event_index].title;

      // open modal window
      eventModal(events);
    });
    
    // display modal window
    function eventModal(events){
      // modal window
      $('body').append('<div id="modal_wrapper"><div id="modal_window"><span id="modal_close"></span></div></div>');
      // ad to any button
      $('#modal_window').append('<div id="event_share"><a class="add_to_any_bt" href="http://www.addtoany.com/share_save"><img src="http://static.addtoany.com/buttons/share_save_106_16.gif" width="106" height="16" border="0" alt="Share/Bookmark"/></a></div>');
      a2a.init('page', {
           target: '.add_to_any_bt',
           linkurl: window.location,
           linkname: events['title'] + ' @ molton house'
       });
      // event navigation
      $('#modal_window').append('<div id="event_navigation"><span>Previous event</span> | <span>Next event</span></div>');
      // event header
      $('#modal_window').append('<h1 id="event_title">'+events['date']+'</h1>');
      // event fulltext wrapper
      $('#modal_window').append('<div id="event_details_wrapper"></div>');
      // events guestlist
      $('#event_details_wrapper').append('<div id="event_guestlist_wrapper" class="clear"><img src="/assets/templates/default/images/bt_getontheguestlist.png" width="215" height="29" title="Get on the Guestlist" id="toggle_guestlist" /></div>');
      // guestlist main
      $('#event_guestlist_wrapper').append('<form id="guestlist"><label>Name</label><label>Surname</label><label>Email</label><div class="clear"></div><ul><li class="guest"><input type="text" name="firstname" /><input type="text" name="secondname" /><input type="text" name="email" /><span id="plusone">Add</span></li></ul><span id="guestlist_submit">Submit</span><div class="clear"><br /></div></form>');
      $('#guestlist').data('event_id', events['id']);
      // guestlist +1
      $('#plusone').data('form', '<li><input type="text" name="firstname" /><input type="text" name="secondname" /><span class="minusone">Remove</span></li>');
      // add to calendar
      $('#event_details_wrapper').append('<div id="event_save"><img src="/assets/templates/default/images/cal_map.png" width="600" height="52" title="Add to calendar" usemap="#cal_map" /></div>');
      // event fulltext
      $('#event_details_wrapper').append('<div id="event_details">'+events['fulltext']+'</div>');
      // event price
      if( events['price'] != ''){
        $('#event_details_wrapper').append('<div id="event_price">Admission: '+events['price']+'</div>');
      }
      // append hash to the url
      location.hash = '#'+events['id'];
      modalPos();
    }
    
    // plus one
    $('#plusone').live('click', function(){
      $('#guestlist ul').append($('#plusone').data('form'));
    });
    
    // minus one
    $('.minusone').live('click', function(){
      $(this).parent().remove();
    });
    
    // toggle guestlist
    $('#toggle_guestlist').live('click', function(){
      $('#guestlist').toggle();
    });
    
    // modal window close
    $('#modal_close').live('click', function(){
      $('#modal_wrapper').remove();
    });
    
    // guestlist submit
    $('#guestlist_submit:not(.inactive)').live('click', function(){
      // validate
      var valid = true;
      $('#guestlist input').each(function(){
        if($(this).val().length  == 0) valid = false;
      });
      var email_pattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
      if( ! email_pattern.test($('#guestlist input[name="email"]').val())) valid = false;
      if(valid == false){
        alert('Please fill out the form before submitting.');
        return false;
      }
      
      var guests = $('#guestlist').serialize();
      $('#guestlist_submit').text('Submitting...').addClass('loading').addClass('inactive');
      $.ajax({
        url: '/index-ajax.php',
        data: { q: '/events.php', action: 'insertGuests', guests: guests, event_id: $('#guestlist').data('event_id') },
        dataType: 'json',
        type: 'GET',
        success: function(data) {
          if(data.errorCode == 0){
            $('#guestlist_submit').text('Submitted!').removeClass('loading');
          }
        }
      });
    });
    
    
    // add event to calendar
    $('#cal_outlook, #cal_google, #cal_yahoo, #cal_ical').live('click', function(){
      var calendar_type = $(this).attr('id');
      var event_data = $('body').data('active_event');
      var title = escape(event_data['title']);
      // #"+event_data['id']
      var details = escape(event_data['shorttext']+"\nFor details, link here: http://moltonhouse.com/events/");
      var url = escape('http://moltonhouse.com/events/');
      var time_start = event_data['time_start'];
      var time_end = event_data['time_end'];
      var duration = event_data['duration'];
      var location = escape('Molton House');
      var street = escape('43 South Molton Street');
      var ccp = escape('London W1K 5RS');
      var tel = escape('+44 (0)20 7493 1688');
        // google calendar
      if(calendar_type == 'cal_google'){
        window.open('http://www.google.com/calendar/render?action=TEMPLATE&text='+title+'&dates='+time_start+'/'+time_end+'&details='+details+'&location='+location+'. '+street+'. '+ccp+'. Telephone: '+tel+'&trp=true&output=xml','Google Calendar');
        // yahoo calendar
      } else if (calendar_type == 'cal_yahoo'){
        window.open('http://calendar.yahoo.com/?v=60&TITLE='+ title+'&DESC='+details+'&ST='+time_start+'&DUR='+ duration+'&URL='+url+'&in_loc='+location+'&in_st='+street+'&in_csz='+ccp+'&in_ph='+ tel+'&TYPE=31','Yahoo! Calendar');
        //outlook & ical
      } else {
        window.open('http://moltonhouse.com/index-ajax.php?q=/events.php&action=calendar&id='+event_data['id']+'&DTSTART='+ time_start +'&DTEND='+ time_end+'&SUMMARY='+title+ '&DESCRIPTION='+details+ '&LOCATION='+ location+'. '+street+'. '+ccp+'. Telephone: ' +tel, 'Calendar');
      }
      return false;
    });
    
    
    // next/previous event
    $('#event_navigation span').live('click', function(){
      $.ajax({
        url: '/index-ajax.php',
        data: { q: '/events.php', action: 'getEvent', direction: $('#event_navigation span').index($(this)), event_id: $('#guestlist').data('event_id') },
        dataType: 'json',
        type: 'GET',
        success: function(data) {
          if(data.errorCode == 0){
            // store data
            $('body').data('active_event', data.events);
            // modal window header
            $('#event_title').text(data.events['date']);
            // event fulltext
            $('#event_details').html(data.events['fulltext']);
            // event price
            if( data.events['price'] != ''){
              $('#event_price').text('Admission: '+data.events['price']);
            }
            $('#guestlist').data('event_id', data.events['id']);
            // append hash to the url
            location.hash = '#'+data.events['id'];
            // add to any button
            a2a.init('page', {
                 target: '.add_to_any_bt',
                 linkurl: window.location,
                 linkname: data.events['title'] + ' @ molton house'
             });
          }
        }
      });
    });
    
    
    // onload show event
    if(location.hash.length > 0){
      var event_id = parseInt(location.hash.replace('#', ''));
      $.ajax({
        url: '/index-ajax.php',
        data: { q: '/events.php', action: 'getEvent', event_id: event_id },
        dataType: 'json',
        type: 'GET',
        success: function(data) {
          if(data.errorCode == 0){
            // open modal window
            eventModal(data.events);
          }
        }
      });
    }


});


