var fetchingName = "";
var nextNameToFetch = "";
var fetchedNames = new Object();
var fetchedEvents = new Object();

function EventifyInit () {
  $("#search_button").hide();
  $("#event_name").bind("keyup", eventNameChanged);
  $(".javascript_enabled").show();
  $(".noscript").hide();
  
  $("#submit_button").bind("click", submitEvent);
  $("#submit_button").bind("keyup", submitEventKey);
  
  // Edit form
  $("#name_holder").hide();
  $("#edit_name").bind("click", showNameEdit);
  $("#show_group").bind("click", showGroup);
  $("#hide_group").bind("click", hideGroup);
  $("#select_venue").bind("click", selectVenue);
  $("#show_cost_free").bind("click", costFree);
  $("#show_cost").bind("click", costNotFree);
  $("#reset_cost").bind("click", costReset);
  $("#custom_url_suggestion").bind("click", SuggestCustomURL);
  $("#name").bind("keyup", updateSuggestedURL);
  $("#start_date").bind("change", updateSuggestedURL);
  $("#end_date").bind("change", updateSuggestedURL);
  $("#show_formatting_help").bind("click", showFormattingHelp);
  $("#hide_formatting_help").bind("click", hideFormattingHelp);
}
$(document).ready(EventifyInit);

function submitEventKey (e)
{
  if (e.keyCode == 13 || e.keyCode == 32)
  {
    submitEvent();
  }
}
var submitting_event = false;
function submitEvent ()
{
  var eventName = $("#event_name").val();
  
  if (eventName == "")
  {
    alert("Please enter a name for the event.");
    return false;
  }
  
  if (submitting_event) { return; }
  submitting_event = true;
  ev = new Object();
  ev.event_id = 0;
  ev.name = eventName;
  ev.description = '';
  $.post("/api/create/event", ev, function (data) {
	//console.log(data);
	//return;
    window.location = "/eventify/submit/"+data.event_id+"?message=created";
  }, "json");
}

function eventNameSubmit ()
{
  var eventName = $("#event_name").val();
  
  if (eventName == "")
  {
    alert("Please enter a name for the event.");
  } else
  {
    submitEvent();
  }
  return false;
}

function eventNameChanged ()
{
  var newName = $("#event_name").val();
  var fetchName = false;
  if (newName.length >= 3)
  {
    fetchName = true;
  } else
  {
    showSimilarEvents([]);
  }
  if (fetchName)
  {
    getSimilarEvents(newName);
    //console.log("Fetching: " + newName);
  } else
  {
    //console.log("Not fetching: "+newName);
  }
}

function getSimilarEvents (eventName)
{
  if (fetchingName == "")
  {
    fetchingName = eventName;
    if (fetchedNames[fetchingName])
    {
      showSimilarEvents(fetchedNames[fetchingName]);
      fetchingName = "";
    } else
    {
      $.getJSON("/api/get/events?event_name=*"+fetchingName+"*&sort_by=starttime&order=DESC&upcoming=false&markdown=true", function (data) {
	//console.log(data);
        fetchedNames[fetchingName] = data.events;
        showSimilarEvents(fetchedNames[fetchingName]);
        fetchingName = "";
        if (nextNameToFetch != "")
        {
          getSimilarEvents(nextNameToFetch);
          nextNameToFetch = "";
        }
      });
    }
  } else
  {
    nextNameToFetch = eventName;
  }
}

function getHoursAndMinutes (d)
{
  var h = d.getHours();
  h = h > 12 ? h-12 : h;
  h = h == 0 ? 12 : h;
  var m = d.getMinutes();
  m = m < 10 ? "0" + m : m;
  return h + ":" + m + (d.getHours() >= 12 ? "pm" : "am");
}
function showSimilarEvents (events)
{
  var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
  $("#similar_events").html(" ");
  $.each(events, function (index, val) {
    fetchedEvents[val.event_id] = val;
    
    var str = "";
    var date = new Date(val.starttime*1000);
    var today = new Date();
    d = date;
    var strDate = months[date.getMonth()] + " " + date.getDate();
    
    dow = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
    months = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
    start_time = getHoursAndMinutes(d);
    end_time = getHoursAndMinutes(new Date(val.endtime*1000));
    var header = dow[d.getDay()];
    
    if (d.getMonth() === today.getMonth() && d.getDate() === today.getDate() && d.getFullYear() === today.getFullYear())
    {
      header = "TODAY";
    } else
    if (d.getTime() > today.getTime() && d.getTime() < today.getTime() + 86400*2000)
    {
      tmrw = new Date(today.getTime() + 86400*1000);
      if (d.getMonth() === tmrw.getMonth() && d.getDate() === tmrw.getDate() && d.getFullYear() === tmrw.getFullYear())
      {
        header = "TMRW";
      }
    }
    
    var classes = ["eventDateLabel"];
    if (header == "TODAY")
    {
      classes.push("eventDateLabelToday");
    } else
    if (header == "TMRW")
    {
      classes.push("eventDateLabelTomorrow");
    } else
    if (d.getTime() > (new Date()).getTime())
    {
      classes.push("eventDateLabelFuture");
    } else
    {
      classes.push("eventDateLabelPast");
    }

	var venue_name = val ? (val.venue && val.venue.name ? val.venue.name : (val.venue_name ? val.venue_name : 'TBD')) : 'TBD';
    
    str = "";
    
    str += '<div class="eventBlock grid_3 alpha">';
    str += '  <div class="eventDate">';
    str += '    <div class="'+classes.join(" ")+'">'+header+'</div>';
    str += '    <div class="eventDateDay">'+d.getDate()+'</div>';
    str += '    <div class="eventDateMonth">'+months[d.getMonth()]+'</div>';
    str += '  </div>';
    str += '  <div class="eventInfo">';
    str += '    <h4 class="eventTitle"><a href="/event/view/'+val.event_id+'">'+val.name+'</a></h4>';
    str += '    <p>'+start_time+' - '+end_time+' at '+venue_name+'</p>';
    str += '  </div>';
    str += '</div>';
    str += '<div class="grid_2 omega">';
    str += '  <input type="button" class="btn" style="float: right; margin: 0px 0px 0px 12px;" onclick="javascript: copyEvent('+val.event_id+');" value="Copy to new event" />';
    str += '</div>';
    
    //str = strDate + ": " + val.name;
    //str += " <a href=\""+val.event_url+"\">View Event</a> | ";
    //str += " <a href=\"#\" class=\"copylink"+val.event_id+"\">Copy to New</a>";
    
    var div = $("<div>");
    div.html(str);
    $("#similar_events").append(div);
    $(".copylink"+val.event_id).bind("click", function () { copyEvent(val.event_id); return false;});
  });
}

function copyEvent (event_id)
{
  var ev = fetchedEvents[event_id];
  ev.event_id = 0;
  ev.description = ev.markdown;
  tag_ids = [];
  for (var i=0; i<ev.tags.length; i++)
  {
    tag_ids[tag_ids.length] = ev.tags[i].tag_id;
  }
  ev.tag_ids = tag_ids.join(",");
  $.post("/api/create/event", ev, function (data) {
    window.location = "/eventify/submit/"+data.event_id;
  }, "json");
}

function SuggestCustomURL()
{
  var url = GetCustomURL();
  if (url)
  {
    $("#custom_url").val(url);
  }
  return false;
}
function GetCustomURL()
{
    var url = $("#name").val().toLowerCase();
    var months = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];
    
    url = url.replace(/\s/g, "-");
    url = url.replace(/[^a-z^0-9^\-]/g, "-");
    url = url.replace(/\-\-\-\-\-/g, "-");
    url = url.replace(/\-\-/g, "-");
    url = url.replace(/\-\-/g, "-");
    url = url.replace(/\-\-/g, "-");
    
    if (url == "") { return false; }
    
    var d = $("#start_date").val();
    var event_date = new Date(d);
    url += "-"+months[event_date.getMonth()]+"-"+event_date.getDate()+"-"+event_date.getFullYear();
    
    return url;
}

function updateSuggestedURL ()
{
  $("#custom_url_suggestion").html("Click here to set the URL to "+GetCustomURL());
}

function showNameEdit ()
{
  $("#name_holder").show();
  $("#title_holder").hide();
  $("#name").focus();
  return false;
}

function showFormattingHelp ()
{
  $("#formatting_help").show();
  $("#show_formatting_help").hide();
  $("#hide_formatting_help").show();
  return false;
}

function hideFormattingHelp ()
{
  $("#formatting_help").hide();
  $("#show_formatting_help").show();
  $("#hide_formatting_help").hide();
  return false;
}

function showGroup ()
{
  $("#group_info").show();
  $("#group_question_holder").hide();
  $("#group_selector").click();
  return false;
}

function hideGroup ()
{
  $("#group_question_holder").hide();
  return false;
}

function selectVenue ()
{
  $("#venue_start").hide();
  $("#venue_info").show();
  $("#venue_selector").click();
  return false;
}

function costNotFree ()
{
  $("#cost_question").hide();
  $("#cost_info").show();
  return false;
}

function costFree ()
{
  $("#cost_question").hide();
  $("#cost_free").show();
  return false;
}

function costReset ()
{
  $("#cost_question").show();
  $("#cost_free").hide();
  $("#cost_info").hide();
  return false;
}

