// Login form submit
function loginForm()
{
	var loginEmail = $('#grutivityLogin input[name="Login_Email"]').val();
	var loginPassword = $('#grutivityLogin input[name="Login_Password"]').val();
	if (loginEmail == '') {
		$('#grutivityLogin input[name="Login_Email"]').addClass('formError');
		return false;
		}
	if (loginPassword == '') {
		$('#grutivityLogin input[name="Login_Password"]').addClass('formError');
		return false;
		}
}

$(window).resize(function() {
	// var featureHeight = $(window).height() - 40 - 50 - 80; /* 40 for menu, 50 for padding, 80 for toolbars */
	// $('.feature .featureScroll').css('max-height', featureHeight);
		
	// Get Window Dimensions
    var maskHeight = $(window).height();
    var maskWidth = $(window).width();
    // Set Dialog Position
	var currentScroll = window.pageYOffset;
    var dialogTop =  currentScroll + 60;
    var dialogLeft = (maskWidth/2) - ($('.dialog:visible').width()/2);
    if (dialogLeft < 10) { dialogLeft = 10; }
    $('.dialog').css({top:dialogTop, left:dialogLeft});

});

// Profile Tabs
$('.leftTabs li a').live('click', function () {
	// var tab = $(this).attr('class').replace('-tab','');
	var tab = $(this).attr('class');
	$('.leftContent').hide(); $('#' + tab).show();
	$('.leftTabs li').removeClass('selected');
	$(this).parent().addClass('selected');
});

//
// DIALOGS //
//
// dialogOpen('leaveGroupDialog', style);
// dialogClose('leaveGroupDialog'); styles = 'modal' or 'lightbox'
//
// Dialog Close Button Action
$('.dialogClose, #dialogOverlay').live('click', function () {
	dialogClose();
});

$(window).bind('scroll', function () {
	var currentScroll = window.pageYOffset;
	var windowEnd = $(window).height();
	var documentEnd = $(document).height();
	var actualLocation = currentScroll + windowEnd;
	// if (actualLocation == documentEnd) { console.log('currentLocation: ', 'End of document...'); }
	if ((actualLocation + 300) >= documentEnd) { console.log('currentLocation: ', 'End of document...'); $(window).unbind('scroll'); }
});

// Open Dialog
function dialogOpen(dialogId, style) {
	if(style == 'modal') { $('#dialogOverlay').addClass('modal').fadeIn(); }
	if(style == 'lightbox') { $('#dialogOverlay').addClass('lightbox').fadeIn(); }
	var dialog = '#'+dialogId;
	// Get Window Dimensions
    var maskHeight = $(window).height();
    var maskWidth = $(window).width();
    // Set Dialog Position
	var currentScroll = window.pageYOffset;
    var dialogTop =  currentScroll + 60;
    var dialogLeft = (maskWidth/2) - ($(dialog).width()/2);
    $(dialog).css({top:dialogTop, left:dialogLeft}).show();	
	$(dialog).fadeIn();
}
// Close Dialog
function dialogClose(dialogId) {
	$('#dialogOverlay').hide();
	$('.dialog').hide();
	$('#dialogOverlay').removeClass();
	$('body').removeClass('noScroll');
	if ( $(document).height() > $(window).height() ) { 
		$('.CenterContainer, #CenterContainer').attr('style','padding: 0px;');
	}
}
// Escape to exit dialog
$(document).keyup(function(e) {
  if (e.keyCode == 13) {  }     // enter
  if (e.keyCode == 27) {
		dialogClose();
  	}
});

UTIL.parseLink = function(str) {
	if (str.search('http') > -1 && str.search('//') > -1) {
		str = '<a href="'+str+'" target="_blank">'+str+'</a>';
	}
	return str;
}

UTIL.toSQLDate = function(date) 
{
	year = String(date.getFullYear());
	month = String(date.getMonth() + 1);
	if (month.length == 1) {
		month = "0" + month;
	}
	day = String(date.getDate());
	if (day.length == 1) {
		day = "0" + day;
	}
	hour = String(date.getHours());
	if (hour.length == 1) {
		hour = "0" + hour;
	}
	min = String(date.getMinutes());
	if (min.length == 1) {
		min = "0" + min;
	}
	sec = String(date.getSeconds());
	if (sec.length == 1) {
		sec = "0" + sec;
	}
	return year + '-' + month + '-' + day + ' ' + hour + ':' + min + ':' + sec;
}

UTIL.toJSDate = function(mysql_string)
{ 
   if(typeof mysql_string === 'string')
   {
      var t = mysql_string.split(/[- :]/);

      //when t[3], t[4] and t[5] are missing they defaults to zero
      return new Date(t[0], t[1] - 1, t[2], (t[3] - 1) || 0, t[4] || 0, t[5] || 0);          
   }

   return null;   
}

UTIL.renderUserInfo = function(cbfunc) {
	$('#UserImage').attr('src',user.data.info.img);
	$('#UserName').html('<b>Hi,</b> ' + user.data.info.FirstName);
	if (user.data.info.FbUid == 0) {
		$('.FacebookConnect').slideDown().fadeIn();
	}
	if (cbfunc && typeof (cbfunc) === 'function') { cbfunc(); }	
}

// Return number of days for that month
UTIL.getNumDays = function(month, year) {
	var nums = [31,28,31,30,31,30,31,31,30,31,30,31];
	// Check for leap year 
	if (month === 1 && (year % 4) === 0) {
		return 29;
	}
	return nums[month];
}

// Return short form of the day of the week
UTIL.getDay = function(day) {
	var days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
	return days[day];
}

// Return long form of the day of the week
UTIL.getLongDay = function(day) {
	var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
	return days[day];
}

// Return month of the year
UTIL.getMonth = function(month) {
	var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
	return months[month];
}

// Return month of the year
UTIL.getLongMonth = function(month) {
	var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
	return months[month];
}

UTIL.getWeekHeader = function() {
	var dayNames = '<tr align="center">';
	for (i = 0; i < 7; i++) {
		dayNames += '<td>'+UTIL.getDay(i)+'</td>';
	}
	dayNames += '</tr>';
	return dayNames;
}

UTIL.getCalendarMonth = function(date) {
	// create calendar array to store everything
	calendar.day = new Array();
	
	// create date to year and month provided
	var curDate   = new Date();
	var curMonth  = new Date(date.getFullYear(), date.getMonth(), 1);
	var prevMonth = new Date(date.getFullYear(), date.getMonth()-1, 1);
	var nextMonth = new Date(date.getFullYear(), date.getMonth()+1, 1);

	// calculate previous month days that are showing
	var prevEnd = UTIL.getNumDays(prevMonth.getMonth(), prevMonth.getFullYear());
	var prevStart = prevEnd - curMonth.getDay() + 1;
	var prev = prevStart;
	// Calculates and adds padding for beginning dates
	for (i = 0; i < curMonth.getDay(); i++) {
		calendar.day.push({ Day : prevStart, Id : 'prev' + prevStart++, Events : new Array(), addClass: 'previousMonth' });
	}
	
	// Adds the rest of the days in
	for (i = 1; i <= UTIL.getNumDays(curMonth.getMonth(), curMonth.getFullYear()); i++) {
		var addClass = 'activeMonth';
		if (i === curDate.getDate() && curDate.getMonth() === curMonth.getMonth()) { addClass += ' currentDay'; }
		calendar.day.push({ Day : i, Id : 'cur' + i, Events : new Array(), addClass : addClass});
	}
	
	var j = 1;
	for (i = calendar.day.length; i < 42; i++) {
		calendar.day.push({ Day : j, Id : 'next' + j++, Events : new Array(), addClass : 'nextMonth'});
	}
	// Loop through and add events to calendar
	for (event in group.data.events) {
		// create date from millis string in database
		var new_date = UTIL.toJSDate(group.data.events[event].StartDate);

		// reassign that date back to the event
		group.data.events[event].TrueDate = new_date;
		
		// if event is in current month and year then add to array
		if (new_date.getMonth() === curMonth.getMonth() && new_date.getFullYear() === curMonth.getFullYear()) {
			calendar.day[new_date.getDate() + curMonth.getDay() - 1].Events.push(group.data.events[event]);
		} 
		// if event is in the next month, offset month and year to calculate
		else if (new_date.getMonth() === nextMonth.getMonth() && new_date.getFullYear() === nextMonth.getFullYear()) {
			var offset = curMonth.getDay() + UTIL.getNumDays(curMonth.getMonth(),curMonth.getFullYear()) + new_date.getDate() - 1;
			if (offset < 42) {
				calendar.day[offset].Events.push(group.data.events[event]);
			}
		} 
		// if event is in the previous month, offset month and year to calculate
		else if (new_date.getMonth() === prevMonth.getMonth() && new_date.getFullYear() === prevMonth.getFullYear()) {
			var showing = new_date.getDate() - prev;
			// make sure we are only putting into the calendar events that are showing
			if (showing > -1) {
				calendar.day[showing].Events.push(group.data.events[event]);
			}
		}
	}
	calendar.header = UTIL.getWeekHeader();
	calendar.month = UTIL.getLongMonth(curMonth.getMonth());
	calendar.year = curMonth.getFullYear();
	UTIL.currentYear = curMonth.getFullYear();
	UTIL.currentMonth = curMonth.getMonth();
	return calendar;
}

UTIL.getUpcomingEvent = function (events) {
	var dia = new Date();
	var closest = 0;
	var eve = {};
	for(i in events) {
		var start = UTIL.toJSDate(events[i].StartDate);
		if(start < closest && start > dia.getTime()) {
			closest = start;
			eve = events[i];
		} else if (closest == 0 && start > dia.getTime()) {
			closest = start;
			eve = events[i];
		}
	}
	if (closest == 0) { return 0; }
	eve.time = renderTimeString(closest);
	eve.day = closest.getDate();
	eve.month = UTIL.getMonth(closest.getMonth());
	eve.dayName = UTIL.getDay(closest.getDay());
	return eve;
}

// Local Storage Support
function supportsLocalStorage() {
	try { return 'localStorage' in window && window['localStorage'] !== null; } catch (e) { console.log('supportsLocalStorage: ', 'fail'); return false; }
	try { localStorage.setItem('quotaCheck','true'); } catch (e) { localstorage.clear(); return; }
}

// Render User Menu
UTIL.renderUserMenu = function(cbfunc) {
	USER.getUserGroups(function (response) {
		if (user.data.groups == null) return;
		var new_groups = new Array();
		$.each(user.data.groups, function() {
			if (this.numAlerts > 0) {
				new_groups.unshift(this);
			} else {
				new_groups.push(this);
			}		
		});
		var tot = 0;
		user.data.groups = new_groups;
		$.each(new_groups, function() {
			tot += this.numAlerts;
		});
		if (tot > 0) {
			$('#TotalNotifications').html(tot);
			$('#TotalNotifications').show();
			$('#TotalNotifications').parents('li').addClass('ListCount');
			
		} else {
			$('#TotalNotifications').html('');
			$('#TotalNotifications').hide();
			$('#TotalNotifications').parents('li').removeClass('ListCount');		
		}
		$('#userMenuGroups').empty();
		$('#userMenuGroups-tmpl').tmpl(user.data).appendTo('#userMenuGroups');
	})
	if (cbfunc && typeof (cbfunc) === 'function') { cbfunc(); }	
}

UTIL.checkLS = function(ls, cbfunc) {
	if (supportsLocalStorage()) {
		if (localStorage.getItem(ls) && localStorage.getItem(ls) != 'null') {
			if (cbfunc && typeof (cbfunc) === 'function') { cbfunc(JSON.parse(localStorage.getItem(ls))); }
		}
	}
}
