var _map;
var _mapMarkers = new Array();
var _mapMarkerIds = new Array(); // required to reference markers outside of map.  format: m{location_id}, e.g., m12
var _itemsPerPage = 3;
var _maxEvents = 50; // max per result set
var _xmlDoc;
var _pageNav; // not used?
var _browser; // not used?
var _activeId; // for toggleLink
var _filterManager;

function initPage(params)
{
  try
  {
    _filterManager = new FilterManager(params);

    if(!params && window.location.hash.length > 1)
    {
      _filterManager.setParamsFromUrl();
    }

    _filterManager.setFilterOptions();
  }
  catch(e)
  {
    // okay
  }

  // register event listener for toggle id
  Event.observe(document.body,'click',toggleLink);
}

function initMap()
{
  // initalize map
  if (GBrowserIsCompatible())
  {
    _map = new GMap2($('map'));
    _map.addControl(new GLargeMapControl());
    _map.addControl(new GMapTypeControl());
    _map.setCenter(new GLatLng(37.090240,-95.712891), 3, G_NORMAL_MAP); // center, zoom?, map type?
  }
}

function initSearchField()
{
  var q = $('filter_q');
  q.className = 'filter-search gray';
  q.value = 'phrase or keyword';

  var handleBlur = function()
  {
    var q = $('filter_q');
    if(q.value == '')
    {
      q.className = 'filter-search gray';
      q.value = 'phrase or keyword';
    }
  }

  var clear = function()
  {
    if(q.className != 'filter-search')
    {
      q.className = 'filter-search';
      q.value = '';
    }
  }

  Event.observe('filter_q','focus',clear);
  Event.observe('filter_q','blur',handleBlur);
}

function getToday()
{
  var d = new Date();
  var s = d.getFullYear() + '-' + padString((d.getMonth() + 1),'0',2) + '-' + padString(d.getDate(),'0',2);

  return s;
}

function toTime(stringDate)
{
  var d = stringDate.split('-');
  var dt = new Date();
  dt.setYear(parseInt(d[0]),10);
  dt.setMonth(parseInt(d[1],10) - 1);
  dt.setDate(parseInt(d[2],10));
  return dt.getTime();
}

function padString(str,padChar,length)
{
  str = "" + str;
  while(str.length < length)
  {
    str = padChar + str;
  }

  return str;
}

function determineUpcomingOnly(inputDate)
{
  var today = toTime(getToday());
  var eventDate = toTime(inputDate);
  if(eventDate != "" && eventDate >= today)
  {
    return true;
  }
  else
  {
    return false;
  }
}

function filterEvents(showAll,upcomingOnly,id)
{
  if(showAll == null || showAll === "")
  {
    showAll = false;
  }
  if(upcomingOnly == null || upcomingOnly === "")
  {
    upcomingOnly = null;
  }
  if(!id)
  {
    id = "";
  }

  var q = $F('filter_q');
  if(q == 'phrase or keyword') { q = ''; }

  var params = {};
  params.eventDate = $F('filter_event_date');
  params.typeId = $F('filter_type_id');
  params.locationId = $F('filter_location_id');
  params.query = q;
  params.showAll = showAll;

  // if user specifies a criterion other than date, upcomingOnly is false - unless upcomingOnly is explicitly set to true
  if(upcomingOnly != true && (params.typeId != "" || params.locationId != "" ||params.query != ""))
  {
    upcomingOnly = false;
  }

  // show upcoming only for current and future dates -- unless upcomingOnly is already specified
  if(upcomingOnly == null || upcomingOnly === "")
  {
    params.upcomingOnly = determineUpcomingOnly($F('filter_event_date'));
  }
  else
  {
    params.upcomingOnly = upcomingOnly;
  }

  // if id is set, navigate to events page with parameters set
  if(id != "")
  {
    _filterManager.setParams(params);
    window.location.href = '/events/#' + _filterManager.getUrlParams();
    return;
  }

  _filterManager.setParams(params);
  _filterManager.navigate();

  var trackerUrl = '/internallinks/schedules/' + _filterManager.getParams('URL_GA');
  cqpTracker._trackPageview(trackerUrl);

  getEventData(_filterManager.getParams('URL'));
}


function clearFilters()
{
  $('filter_event_date').selectedIndex = 0;
  $('filter_type_id').selectedIndex = 0;
  $('filter_location_id').selectedIndex = 0;
}

function getEventData(params,callback)
{
  if(!callback)
  {
    callback = function() { };
  }

  $('loading').style.display = 'block';

  // clear markers if there are already markers
  if(_mapMarkerIds.length > 0)
  {
    clearMarkers();
  }

  // get data from ruby method
  if(!params)
  {
    params = Form.serialize('event-filter');
    // params are: filter[event_date], filter[event_type_id], filter[event_location_id], filter[q]
  }

  var url = '/events/filter?format=xml&type=location&' + params;
  new Ajax.Request(url,
    {
      method : 'get',
      onSuccess : function(transport)
        {
          //addMarkers(transport.responseText);
          initEvents(transport.responseText);
          callback();
        },
      onFailure : function()
        {
          $('events').innerHTML = '<p class="error">There was a problem retrieving events from the server.  <a href="javascript:filterEvents();">Try again</a></p>';
        }
    }
  );
}

function getAllEventData(page)
{
  $('events').innerHTML = '<p class="loading">Loading...</p>';
  var params = _filterManager.getParams('URL');
  _filterManager.setFilterOptions(); // this is in case the user changed any options without applying the changes while browsing
  params += '&filter[show_all]=true';
  var callback = function() { navigateEvents(page) }
  getEventData(params,callback);
}

function initEvents(xmltext)
{
  _xmlDoc = GXml.parse(xmltext);
  var e = _xmlDoc.getElementsByTagName('event');

  // handle errors
  if(!_xmlDoc || !e)
  {
    $('events').innerHTML = '<p class="error">Sorry, but there was a problem getting events from the server.  <a href="javascript:filterEvents();">Try again</a></p>';
  }
  else if(e.length <= 0)
  {
    // if it is not a search and date specified is today, display special message
    if($F('filter_event_date') == getToday() && !_filterManager.isSearch())
    {
      $('events').innerHTML = '<div class="event-header"><h2>Upcoming Events</h2></div><p>There are no more upcoming events for today.<br /><br /><a href="javascript:filterEvents(false,false);">See past events for today</a> or choose another day from the pulldown above.</p>';
    }
    else
    {
      $('events').innerHTML = '<p class="none-found">No events found.  Please try searching again with different criteria.</p>';
    }
  }
  else
  {
    var t = _xmlDoc.getElementsByTagName('events')[0].getAttribute('search_type')
    if(t == "event_id")
    {
      mode = "SINGLE"
    }
    else
    {
      mode = "BROWSE"
    }
    showEvents(_xmlDoc,1,_itemsPerPage,mode);
  }

  $('loading').style.display = 'none';
}

function showEvents(eventXml,page,itemsPerPage,mode)
{
  if(!mode)
  {
    mode = "NONE"
  }

  var e = eventXml.getElementsByTagName('event');
  var html = "";
  var i;

  var start = itemsPerPage * (page - 1);
  var end = start + itemsPerPage;

  if(end > e.length)
  {
    end = e.length;
  }

  for(i = start; i < end; i++)
  {
    html += getEventHtml(e[i],"PAGE");
  }

  var numberOfEvents = parseInt(eventXml.getElementsByTagName('events')[0].getAttribute('result_size'),10);
  var totalResultSize = parseInt(eventXml.getElementsByTagName('events')[0].getAttribute('total_result_size'),10);
  var upcomingOnly = eventXml.getElementsByTagName('events')[0].getAttribute('upcoming_only');

  // let user toggle between getting upcoming or all events
  // determine showAll
  var showAll;
  if(e.length > _maxEvents) { showAll = "true"; }
  else { showAll = "false"; }

  var toggle;
  if(upcomingOnly == "true") { toggle = "false"; }
  else { toggle = "true" }

  var link = "javascript:filterEvents(" + showAll + "," +  toggle + ");";

  var today = toTime(getToday());
  var eventDate = toTime($F('filter_event_date'));

  if(upcomingOnly == "true")
  {
    heading = '<h2>Upcoming Events</h2>';

    // only allow toggle for today
    if(eventDate == today)
    {
      heading = '<p><a href="' + link + '">Show me past and upcoming events</a></p>' + heading;
    }
  }
  else
  {
    heading = '<h2>All Events</h2>';

    // show toggle link only if date is today or in the future and if it is not a search (by any criterion other than date)
    if(eventDate == today && !_filterManager.isSearch())
    {
      heading = '<p><a href="' + link + '">Show me upcoming events only</a></p>' + heading;
    }
  }

  html = '<div class="event-header">' + heading + '</div>' + html;

  html += getEventNavigation(page,itemsPerPage,numberOfEvents);

  // depending on mode, add additional HTML
  if(mode == "SINGLE")
  {
    html += '<p class="see-more"><a href="/events/">View more events &raquo;</a></p>';
  }

  // if more events are available, offer option to see them if on last page -- unless all events are already shown
  if(end == e.length && totalResultSize > _maxEvents && numberOfEvents <= _maxEvents)
  {
    var txt = 'Showing the first ' + _maxEvents + ' events.  <a href="javascript:getAllEventData(' + page + ')">See more &raquo;</a>';
    html += '<p class="see-more">' + txt + '</p>';
  }

  // add HTML
  $('events').innerHTML = html;

  // clear markers if any
  if(_mapMarkerIds.length > 0)
  {
    clearMarkers();
  }

  // add event markers
  addMarkers(eventXml,start,end);
}

function clearMarkers()
{
  // clear current markers
  _map.clearOverlays();

  // empty out arrays
  _mapMarkers = new Array();
  _mapMarkerIds = new Array();
}

function createMarker(point,html)
{
  var marker = new GMarker(point);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });

  return marker;
}

function showMarker(id)
{
  GEvent.trigger(_mapMarkers[id],"click");
}

function addMarkers(xml,start,end)
{
  var e = xml.getElementsByTagName('event');
  var i;
  if(!start)
  {
    start = 0;
  }
  if(!end)
  {
    start = e.length;
  }

  // variables to calculate center of markers on map
  var maxLng;
  var minLng;
  var maxLat;
  var minLat;

  for(i = start; i < end; i++)
  {
    // take data and add markers to map
    var loc = e[i].getElementsByTagName('location')[0];
    if(!loc || loc.getAttribute('lat') == '' || loc.getAttribute('lng') == '')
    {
      continue;
    }

    // do not create an extra marker if there's already an event at the same place
    // var locationId = loc.getAttribute('id');
    var eventId = e[i].getAttribute('id');
      // create new marker
      var lat = parseFloat(loc.getAttribute('lat'));
      var lng = parseFloat(loc.getAttribute('lng'));
      var point = new GLatLng(lat, lng);
      var html = getEventHtml(e[i],'MAP');
      var marker = createMarker(point, html);
      var id = 'm' + eventId;
      _mapMarkers[id] = marker;
      _mapMarkerIds.push(id);
      _map.addOverlay(_mapMarkers[id]);

      // init if not initialized with values from data
      if(maxLng == null)
      {
        maxLng = lng;
        minLng = lng;
        maxLat = lat;
        minLat = lat;
      }

      // update max/min lat/lng
      maxLat = Math.max(maxLat, lat);
      minLat = Math.min(minLat, lat);
      maxLng = Math.max(maxLng, lng);
      minLng = Math.min(minLng, lng);
  }

  if(_mapMarkerIds.length > 0)
  {
    var centerLng = minLng + ((maxLng - minLng) / 2);
    var centerLat = minLat + ((maxLat - minLat) / 2);
    var centerPoint = new GLatLng(centerLat,centerLng);
    var zoomLevel = getZoomLevel({ "lat" : minLat, "lng" : minLng },{ "lat" : maxLat, "lng" : maxLng });
    _map.setCenter(centerPoint,zoomLevel);
  }
}

function getDistance(point1,point2)
{
  /* formula and implementation from
   * http://www.movable-type.co.uk/scripts/latlong.html
   */

  lat2 = point2.lat;
  lat1 = point1.lat;
  lon2 = point2.lng;
  lon1 = point1.lng;

  Number.prototype.toRad = function() {  // convert degrees to radians
  return this * Math.PI / 180;
  }

  var R = 6371; // km
  var dLat = (lat2-lat1).toRad();
  var dLon = (lon2-lon1).toRad();
  var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
          Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
          Math.sin(dLon/2) * Math.sin(dLon/2);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  var d = R * c;

  d = d / 1.609344; // to miles

  return d;
}

function getZoomLevel(point1,point2)
{
  /* from
   * http://www.codedblog.com/2007/09/28/how-to-auto-zoom-and-auto-center-google-maps/
   */
  var m = getDistance(point1,point2);
  var z = 0;

  if(m < 0.2) z = 16
  else if(m < 0.5) z = 15
  else if(m < 1) z = 14
  else if(m < 2) z = 13
  else if(m < 3) z = 12
  else if(m < 7) z = 11
  else if(m < 15) z = 10
  else if(m < 27) z = 9
  else if(m < 51) z = 8
  else if(m < 100) z = 7
  else if(m < 198) z = 6
  else if(m < 393) z = 5
  else if(m < 780) z = 4
  else z = 3
  return z;
}

function sizeMap()
{
  var pageWidth;
  var pageHeight;

  // this portion from http://www.howtocreate.co.uk/tutorials/javascript/browserwindow
  if( typeof( window.innerWidth ) == 'number' )
  {
    //Non-IE
    pageWidth = window.innerWidth;
    pageHeight = window.innerHeight;
  }
  else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
  {
    //IE 6+ in 'standards compliant mode'
    pageWidth = document.documentElement.clientWidth;
    pageHeight = document.documentElement.clientHeight;
  }
  else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
  {
    //IE 4 compatible
    pageWidth = document.body.clientWidth;
    pageHeight = document.body.clientHeight;
  }

  // minimum height for map
  var newMapHeight = pageHeight - 280;
  if(newMapHeight < 500)
  {
    newMapHeight = 500;
  }

  //$('map').style.width = (pageWidth - 440) + 'px';
  $('map').style.height = newMapHeight + 'px'; // orig: 280 but it was too much

  //$('events').style.width = (pageWidth - parseInt($('map').style.width,10)) + 'px';
  $('events').style.height = $('map').style.height;
}

function getEventHtml(eventData,mode,options)
{
  if(!options)
  {
    options = null;
  }

  // fields common to both types
  var title = GXml.value(eventData.getElementsByTagName('title')[0]);
  var eventDate = GXml.value(eventData.getElementsByTagName('event_date')[0]);
  var eventTime = GXml.value(eventData.getElementsByTagName('event_time')[0]);
  var location = GXml.value(eventData.getElementsByTagName('address')[0]);
  var html;

  if (mode == "MAP")
  {
    html = '<div class="map-info"><h1>' + title + '</h1><p class="date">' + eventDate + '</p><p><span class="time">' + eventTime + '</span> at <span class="location">' + location + '</span></div>';
  }

  else
  {
    // mode == "PAGE"
    // additional fields for page view
    var eventId = eventData.getAttribute('id');
    var type = GXml.value(eventData.getElementsByTagName('type')[0]);
    var typeId = eventData.getElementsByTagName('type')[0].getAttribute('id');
    var description = GXml.value(eventData.getElementsByTagName('description')[0]);
    var contact = GXml.value(eventData.getElementsByTagName('contact')[0]);
    var notes = GXml.value(eventData.getElementsByTagName('notes')[0]);
    var eventUrl = GXml.value(eventData.getElementsByTagName('url')[0]);
    var locationId;
    var locationUrl;

    if(eventData.getElementsByTagName('location').length > 0)
    {
      locationId = eventData.getElementsByTagName('location')[0].getAttribute('id');
    }

    if(locationId && locationId != "")
    {
      locationUrl = 'javascript:showMarker(\'m' + eventId + '\')';
    }

    // implement MODE to not show address when browsing by location; hide date when browsing by date, etc.

    html = '<div class="event">';
    html += '<div class="link-to-event"><a href="javascript:toggleLink(' + eventId + ')">Link</a></div>';
    html += '<div class="link-container"><div style="display:none;" id="link' + eventId + '" class="display-link"><input type="text" onfocus="this.select();" value="http://innovation.cq.com/events/' + eventId + '" /></div>';
    html += '</div>';
    html += '<h1>';

    if(locationUrl && locationUrl != "")
    {
      html += '<a href="' + locationUrl + '">' + title + '</a>';
    }
    else
    {
      html += title;
    }

    html += '</h1>';

    if (description != '') {
      html += '<p class="description">' + description + '</p>';
    }

    html += '<p class="date-time"><span class="date">' + eventDate + '</span> | <span class="time">' + eventTime + '</span>';

    if (options != null && options.showCategory && options.showCategory == true)
    {
      var typeUrl = '/events/browse/type/' + typeId;
      html += ' <span class="category"><a href="' + typeUrl + '">' + type + '</a></span>';
    }

    html += '</p>';

    if (location != '')
    {
      html += '<p class="location">' + location + '</p>';
    }

    if (contact != '')
    {
      html += '<p class="contact">' + contact + '</p>';
    }

    if (notes != '')
    {
      html += '<p class="notes">' + notes + '</p>';
    }

    if (eventUrl != '')
    {
      html += '<p class="link"><a href="http://' + eventUrl + '" target="_blank">' + eventUrl + '</a></p>';
    }

    html += '</div>';
  }

  return html;
}

function navigateEvents(p)
{
  if(!p || isNaN(p) || p <= 0)
  {
    p = 1;
  }

  showEvents(_xmlDoc,p,_itemsPerPage);
}

function getEventNavigation(page,itemsPerPage,resultSize)
{
  // number of pages
  numberOfPages = Math.floor(resultSize / itemsPerPage);

  if(numberOfPages > 1 && resultSize % itemsPerPage > 0)
  {
    numberOfPages++;
  }

  if(numberOfPages <= 1)
  {
    return "";
  }

  var x;
  var nav = '<div class="event-navigation">';

  if(page > 1)
  {
    nav += '<span class="prev">';
  }

  if(page > 2)
  {
    nav += ' <a href="javascript:navigateEvents(1)">&laquo; First</a> ';
  }

  if(page > 1)
  {
    nav += '<a href="javascript:navigateEvents(' + (page - 1) + ')">&lsaquo; Previous</a> &nbsp; ';
  }

  if(page > 1)
  {
    nav += '</span>';
  }

  if(numberOfPages > 10)
  {
    start = page - 5;
    end = page + 4;

    if(start < 1)
    {
      start = 1;
    }
    if(end < (start + 9))
    {
      end = start + 9;
    }
    if(end > numberOfPages)
    {
      end = numberOfPages;
    }
  }
  else
  {
    start = 1;
    end = numberOfPages;
  }

  nav += '<span class="pagination">';
  for(x = start; x <= end; x++)
  {
    if(x == page)
    {
      nav += '<strong>' + x + '</strong> &nbsp;';
    }
    else
    {
      nav += '<a href="javascript:navigateEvents(' + x + ')">' + x + '</a> &nbsp;';
    }
  }
  nav += '</span>';

  if(numberOfPages > 1 && page < numberOfPages)
  {
    nav += '<span class="next">';
  }

  if(numberOfPages > 1 && page < numberOfPages)
  {
    nav += ' <a href="javascript:navigateEvents(' + (page + 1) + ')">Next &rsaquo;</a> ';
  }

  if(numberOfPages > 1 && page < (numberOfPages - 1))
  {
    nav += ' <a href="javascript:navigateEvents(' + numberOfPages + ')">Last &raquo;</a> ';
  }

  if(numberOfPages > 1 && page < numberOfPages)
  {
    nav += '</span>';
  }


  nav += '</div>';

  return nav;
}

function toggleLink(id)
{
  if(!id) { return; }
  if( typeof(id) != "number" ) // ie, an event is the id
  {
    var target = id.element();
    var c = target.parentNode.className;
    if(c == 'link-to-event' || c == 'link-container' || c == 'display-link')
    {
      return;
    }

    if (_activeId != null & !isNaN(_activeId))
    {
      id = _activeId;
    }
    else
    {
      return;
    }
  }

  var divId = 'link' + id;
  if($(divId).style.display == 'none')
  {
    $(divId).style.display = 'block';
    // hide currently active one if there is one
    if(_activeId != null && !isNaN(_activeId))
    {
      $('link' + _activeId).style.display = 'none';
    }
    _activeId = id;
  }
  else
  {
    $(divId).style.display = 'none';
    _activeId = null;
  }
}

var FilterManager = Class.create({

initialize: function(params)
  {
    if(!params || params == "")
    {
      this.params = {}
    }
    else
    {
      this.params = params;
    }

    this.fieldIds = {
      "eventDate" : "filter_event_date",
      "typeId" : "filter_type_id",
      "locationId" : "filter_location_id",
      "query" : "filter_q"
      }
  },

parseParams: function(str)
  {
    // string: eventDate=?&typeId=?&locationId=?&query=?
    var params = {}
    var d;
    str = str.split('&');

    for(i = 0; i < str.length; i++)
    {
      d = str[i].split('=');
      params[d[0]] = d[1] || "";
    }

    params.eventDate = params.eventDate || "";
    params.typeId = params.typeId || "";
    params.locationId = params.locationId || "";
    params.query = params.query || "";
    params.upcomingOnly = params.upcomingOnly || "";

    return params;
  },

setFilterOptions: function()
  {
    if(this.params.eventDate != "")
    {
      var eventDateIndex = this.findIndex(this.fieldIds.eventDate,this.params.eventDate);
    }
    else
    {
      var eventDateIndex = 0;
    }

    if(this.params.typeId != "")
    {
      var typeIndex = this.findIndex(this.fieldIds.typeId,this.params.typeId);
    }
    else
    {
      var typeIndex = 0;
    }

    if(this.params.locationId != "")
    {
      var locIndex = this.findIndex(this.fieldIds.locationId,this.params.locationId);
    }
    else
    {
      var locIndex = 0;
    }

    if(eventDateIndex != null && eventDateIndex >= 0)
    {
      $(this.fieldIds.eventDate).selectedIndex = eventDateIndex;
    }

    if(typeIndex != null && typeIndex >= 0)
    {
      $(this.fieldIds.typeId).selectedIndex = typeIndex;
    }

    if(locIndex != null && locIndex >= 0)
    {
      $(this.fieldIds.locationId).selectedIndex = locIndex;
    }

    if(this.params.query != null)
    {
      $(this.fieldIds.query).value = this.params.query;
    }

  },

setParams: function(params)
  {
    this.params = params;
  },

setParamsFromUrl: function()
  {
    if(window.location.hash != '')
    {
      var p = window.location.hash.substring(1,window.location.hash.length);
      params = this.parseParams(p);
      this.setParams(params);
    }
  },

getParams: function(mode)
  {
    if(!mode || mode == "")
    {
      mode = 'JSON';
    }

    if(mode == 'URL')
    {
      var str = 'filter[event_date]=' + (this.params.eventDate || "");
      str += '&filter[location_id]='  + (this.params.locationId || "");
      str += '&filter[type_id]=' + (this.params.typeId || "");
      str += '&filter[q]=' + (this.params.query || "");
      str += '&filter[upcoming_only]=' + (this.params.upcomingOnly || "");
      return str;
    }
    else if(mode == 'URL_GA')
    {
      // google analytics
      var str = '';

      var eventDate = this.params.eventDate || "all";
      if(eventDate == "") eventDate = "all";

      var typeId = this.params.typeId || "all";
      if(typeId == "") typeId = "all";

      var locationId = this.params.locationId || "all";
      if(locationId == "") locationId = "all";

      var query = this.params.query || "none";
      if(query == "") query = "none";

      str += eventDate + '/' + typeId + '/' + locationId;
      if(query != "none")
      {
        str += '/search/' + encodeURIComponent(query);
      }
      return str;
    }
    else
    {
      // mode == JSON
      return this.params;
    }
  },

findIndex: function(field,option)
  {
    //console.log("Finding option: " + option + " in field " + field);
    var f = $(field).options;
    for(i = 0; i < f.length; i++)
    {
      if(f[i].value == option)
      {
        return i;
      }
    }

  if(option == 0)
  {
    return 0;
  }
  else
  {
    return -1;
  }

  },

setUrlParams: function()
  {
    window.location.replace('http://' + window.location.host + window.location.pathname + '#' + this.getUrlParams());
  },

setUpcomingOnly: function(value)
  {
    this.params.upcomingOnly = value;
  },

getUrlParams: function()
  {
    return 'eventDate=' + this.params.eventDate + '&typeId=' + this.params.typeId + '&locationId=' + this.params.locationId + '&query=' + this.params.query;
  },

navigate: function()
  {
    this.setUrlParams();
    this.setFilterOptions();
  },

isSearch: function()
  {
    if(this.params.typeId != "" || this.params.locationId != "" || this.params.query != "")
    {
      return true;
    }
    else
    {
      return false;
    }
  },

clearOptions: function()
  {
    $(this.fieldIds.eventDate).selectedIndex = 0;
    $(this.fieldIds.typeId).selectedIndex = 0;
    $(this.fieldIds.locationId).selectedIndex = 0;
    $(this.fieldIds.query).value = "";
  }

});
