// globals
var _caldataurls = ['/Portals/53724/webinar-tracks-events.html', '/Portals/53724/network-training-events.html'];
var _eventData = {};
var _currentmonth
var _monthnamesshort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var _datenames = ['1st', '2nd', '3rd', '4th', '5th', '6th', '7th', '8th', '9th', '0th', '1th', '2th', '3th'];

var _eventsvisible = [];
var _eventswrapper;
var _displayeventsin = 'div#brighton_col2 div.pad';
var _calendarelm = '#calendar';
var _titleselector = 'H2';
var _dateselector = 'H3';

// parses data display divs for calendar items, puts reference to them in an array
function getData($srcElm, data){
 var data = (data)?data:{};

 $srcElm.children().each(function(){
  $this = $(this);
  var rawdate = $(_dateselector, $this).text();
  var cleandate = cleanDate(rawdate, true)
  var date = new Date(cleandate);
  //alert(cleandate + ' : ' + date);
  
  data = logevent(data, date, $this);
 }); 
 return data
}
// adds the jq elm to data object for the date, in an array
function logevent(data, date, $elm){
  // make sure there is an array at the date in data
  var y = date.getFullYear();
  if(!data['_'+y]) data['_'+y] = {};
  var m = date.getMonth();
  if(!data['_'+y]['_'+m]) data['_'+y]['_'+m] = {};
  var d = date.getDate()
  if(!data['_'+y]['_'+m]['_'+d]) data['_'+y]['_'+m]['_'+d] = [];
  // add jq elm to data object
  data['_'+y]['_'+m]['_'+d].push($elm);
  return data
}
// writes html for a month's calendar in the jq elm for using the classname and data provided
function writeCal(selector, month, classname, data){
 var $elm = $(selector);
  //alert(data.length);
  $('table', $elm).remove();
  var mymonth = new Date(month);
  _currentmonth = month;
  var d = 1;
  var m = mymonth.getMonth();
  var y = mymonth.getFullYear();
  var sd = dayOfFirst(m,y);
  var td = daysInMonth(m,y);
  var $tb = $('<table>', {
   'class':classname,
   'cellspacing':"0",
   'cellpadding':"0",
   'border':"0"}).appendTo($elm);
   $tb.append('<thead><tr><th><a class="prev">&lt;</a></th><th class="monthname" colspan="5">' + _monthnamesshort[m] + ' ' + y + ' </th><th><a class="next">&gt;</a></th></tr></thead>');
   $tb = $tb.append('<tbody><tr><td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td></tr></tbody>').children().last();
   var $tr = $('<tr>', {'class':'first'}).appendTo($tb);
   for(j=0; j<sd; j++){
    $tr.append('<td>', {'class':'empty'});
   }
   $('a.prev,', $elm).click(function(){
    _currentmonth.setMonth(_currentmonth.getMonth() - 1);
	writeCal(selector, _currentmonth, classname, data);
   });
   $('a.next,', $elm).click(function(){
    _currentmonth.setMonth(_currentmonth.getMonth() + 1);
	writeCal(selector, _currentmonth, classname, data);
   });
   var mhasevents = (data['_'+y] && data['_'+y]['_'+m])?true:false;
   for(d=1; d <=td; d++){
     mymonth.setDate(d)
	 var dhasevents = false;
	 var click = false;
	 cellclassname = '';
	 if(mhasevents){
	  dhasevents = (data['_'+y]['_'+m]['_'+d])? data['_'+y]['_'+m]['_'+d] : false;
	  if(dhasevents){
	   cellclassname = 'hasevent';
	   click = function(){
             var events = $(this).data('event');
             showEvents(events); 
	   }  
          }
	 }
	 
	 var dod = mymonth.getDay();
	 if(dod == 6){
	  $tr.append('<td class="' + cellclassname + ' last">' + d + '</td>');
	 }else if(dod == 0){
	  var rowclassname = (d + 6 >= td)? 'last' : '';
	  $tr = $('<tr>', {'class':rowclassname}).appendTo($tb);
	  $tr.append('<td class="' + cellclassname + '">' + d + '</td>');
	 }else{
	  $tr.append('<td class="' + cellclassname + '">' + d + '</td>');
	 }
	 if(click){
	  $tr.children().last().click(click);
	  $tr.children().last().data('event', data['_'+y]['_'+m]['_'+d]);
	 }
   }
}
// show the events
function showEvents(events){
 if(_eventsvisible.length){ hideEvents() }else{  ;}
 for(i=0; i<events.length; i++){
   _eventsvisible.push(events[i].show());
 }
 _eventswrapper.show();
 $_calendarelm = $(_calendarelm);
// var t = $_calendarelm.position().top;
// _eventswrapper.css({'top':t});
 _eventswrapper.offset({'top':$_calendarelm.offset().top})
}
// hide the events
function hideEvents(hidewrapper){
 var $event;
 while($event = _eventsvisible.pop()){
  $event.hide();
 }
 if(hidewrapper){
  _eventswrapper.hide();
 }
}
// show the markup 
function showCalMarkup($from, $to){
 $mu  = $('<div>');
 $from.children().each(function(){
   var me = $(this)
   if(me.is(_titleselector)){
    $mu.append('<div class="calItem">');
   }
   $mu.children().last().append(me.clone());
 });
 $to.append('<textarea class="calDataPop"><div id="calItems">' + $mu.html() + '</div></textarea>');
}
// create link for showmarkup if logged in
function caldatacapture(){
 if($('#hsnav').length){
  var $datadisplay = $('#caldatadisplay');
  $('<a class="calGetDataBtn">Click to Copy Calendar Data</a>').appendTo($datadisplay).click(function(){
   $('#caldatadisplay textarea').remove();
   var $datasrc = $('table#caldata tr td')
   showCalMarkup($datasrc, $datadisplay);
  });
 }
}

// loads data and fires write calendar
var _dataurl_length = _caldataurls.length
var _dataurls_loaded = 0;

function loadCalData(){
 _eventswrapper = $('<div id="calItems"></div>');
 for(i = 0; i< _dataurl_length; i++){
  jQuery.get( _caldataurls[i], finishLoadCalData);
 }
}
function finishLoadCalData(content){
 
 $(content).children().appendTo(_eventswrapper);
 _dataurls_loaded ++;
 if(_dataurls_loaded == _dataurl_length){
  $('<a id="closebtn"/>').appendTo(_eventswrapper).click(hideEvents);
  mydata = getData(_eventswrapper);
  writeCal(_calendarelm, new Date(), 'mycal small', mydata);
  $(_displayeventsin).append(_eventswrapper);
 }
}
// date utils
function daysInMonth(iMonth, iYear){
 return 32 - new Date(iYear, iMonth, 32).getDate();
}
function dayOfFirst(iMonth, iYear){
 var d = new Date(iYear, iMonth, 1);
 return d.getDay()
}
function cleanDate(date, alerts){
 for(var i=0; i<_datenames.length; i++){
  var t = _datenames[i];
  var u = t.charAt(0)
  //alert(t + ' ' + u + ' ' + date) 
  newdate = replace(date, t, u)
  if(date != newdate){
   date = newdate;
   break;
  }
 }
 return date
}
function replace(s, t, u) {
  /*
  **  Replace a token in a string
  **    s  string to be processed
  **    t  token to be found and removed
  **    u  token to be inserted
  **  returns new String
  */
  i = s.indexOf(t);
  r = "";
  if (i == -1) return s;
  r += s.substring(0,i) + u;
  if ( i + t.length < s.length)
    r += replace(s.substring(i + t.length, s.length), t, u);
  return r;
  }

