
window.addEvent('domready', function(){
	if (initmap==true) {load();}
	$$('input.DatePicker').each( function(el){
		new DatePicker(el);
	});
	if ( load_homepage || load_list ){
		checkUrlVars();
		if ( getHashVar('s') && getHashVar('e') ){
			if ( load_homepage ){
				loadPartyMarkers(getHashVar('s'),getHashVar('e'),getHashVar('g'));
			}else{
				loadPartyList(getHashVar('s'),getHashVar('e'),getHashVar('g'));
			}$('slider_minmax_gutter_l').value = getHashVar('s');
			$('slider_minmax_gutter_r').value = getHashVar('e');
			$('slider_genres').value = getHashVar('g');
		}else{
			if ( load_homepage ){
				loadPartyMarkers($('slider_minmax_gutter_l').value,$('slider_minmax_gutter_r').value,$('slider_genres').value);
			}else{
				loadPartyList($('slider_minmax_gutter_l').value,$('slider_minmax_gutter_r').value,$('slider_genres').value);
			}
		}
	}
	
	pageLoader();
});

function changeMapFilter(){

	if(!validateDate($('slider_minmax_gutter_l').value)){$('slider_minmax_gutter_l').value=start_date;}
	if(!validateDate($('slider_minmax_gutter_r').value)){$('slider_minmax_gutter_r').value=end_date;}

	isBiggerDate($('slider_minmax_gutter_l').value, $('slider_minmax_gutter_r').value);

	if ( load_homepage ){
	loadPartyMarkers($('slider_minmax_gutter_l').value,$('slider_minmax_gutter_r').value,$('slider_genres').value);
	}else{
	loadPartyList($('slider_minmax_gutter_l').value,$('slider_minmax_gutter_r').value,$('slider_genres').value);
	}
	setHashVar('s', $('slider_minmax_gutter_l').value);
	setHashVar('e', $('slider_minmax_gutter_r').value);
	setHashVar('g', $('slider_genres').value);
	goToHashURL();
}

function isBiggerDate(date1, date2){
	var datesplit1 = date1.split('-');
	var datesplit2 = date2.split('-');
	var dateObj1 = new Date();
	var dateObj2 = new Date();
	dateObj1.setFullYear(datesplit1[2],datesplit1[1],datesplit1[0]);
	dateObj2.setFullYear(datesplit2[2],datesplit2[1],datesplit2[0]);
	if (dateObj1>=dateObj2) {
		dateObj2 = dateObj1;
		dateObj2.setDate(dateObj2.getDate()+1);
		var curr_day = dateObj2.getDate();
		var curr_month = dateObj2.getMonth();
		var curr_year = dateObj2.getFullYear();
		if ((curr_day+"").length==1) {curr_day="0"+curr_day;}
		if ((curr_month+"").length==1) {curr_month="0"+curr_month;}
		$('slider_minmax_gutter_r').value = curr_day+"-"+curr_month+"-"+curr_year;
	}
}

function validateDate(date){
	var datesplit = date.split('-');
	if (!isInteger(datesplit[0])) {return false;}
	if (!isInteger(datesplit[1])) {return false;}
	if (!isInteger(datesplit[2])) {return false;}
	if (datesplit[0].length>2) {return false;}
	if (datesplit[1].length>2) {return false;}
	if (datesplit[2].length>4) {return false;}
	return true;
}

function isInteger (s){
	var i;
	if (isEmpty(s))
	if (isInteger.arguments.length == 1) return 0;
	else return (isInteger.arguments[1] == true);
	for (i = 0; i < s.length; i++){
		var c = s.charAt(i);
		if (!isDigit(c)) return false;
	}
	return true;
}

function isEmpty(s){
	return ((s == null) || (s.length == 0))
}

function isDigit (c){
	return ((c >= "0") && (c <= "9"))
}


function loadPartyList(start,end,genre){
	showLoading();
	var request = new Request.HTML({
		url: '/markerloader/list/'+start+'/'+end+'/'+genre+'.html',
		onComplete: function(html){
			$('ajax_list').set('text', '');
			$('ajax_list').adopt(html);
			hideLoading();
		}}).send();
}var DatePicker = new Class({

	/* set and create the date picker text box */
	initialize: function(dp){

		// Options defaults
		this.dayChars = 1; // number of characters in day names abbreviation
		this.dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
		this.daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
		this.format = 'mm/dd/yyyy';
		this.monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
		this.startDay = 7; // 1 = week starts on Monday, 7 = week starts on Sunday
		this.yearOrder = 'asc';
		this.yearRange = 10;
		this.yearStart = (new Date().getFullYear());


		// Finds the entered date, or uses the current date
		if(dp.value != ''){
			var splitdate=dp.value.split('-');
			var newdate=splitdate[2]+'/'+splitdate[1]+'/'+splitdate[0];
			dp.then = new Date(newdate);
			dp.today = new Date();
		}else{
			dp.then = dp.today = new Date();
		}// Set beginning time and today, remember the original
		dp.oldYear = dp.year = dp.then.getFullYear();
		dp.oldMonth = dp.month = dp.then.getMonth();
		dp.oldDay = dp.then.getDate();
		dp.nowYear = dp.today.getFullYear();
		dp.nowMonth = dp.today.getMonth();
		dp.nowDay = dp.today.getDate();

		// Pull the rest of the options from the alt attr
		if(dp.alt){
			options = JSON.decode(dp.alt);
		}else{
			options = [];
		}dp.options ={
			monthNames: (options.monthNames && options.monthNames.length == 12 ? options.monthNames : this.monthNames) || this.monthNames, 
			daysInMonth: (options.daysInMonth && options.daysInMonth.length == 12 ? options.daysInMonth : this.daysInMonth) || this.daysInMonth, 
			dayNames: (options.dayNames && options.dayNames.length == 7 ? options.dayNames : this.dayNames) || this.dayNames,
			startDay : options.startDay || this.startDay,
			dayChars : options.dayChars || this.dayChars, 
			format: options.format || this.format,
			yearStart: options.yearStart || this.yearStart,
			yearRange: options.yearRange || this.yearRange,
			yearOrder: options.yearOrder || this.yearOrder
		};
		dp.setProperties({'id':dp.getProperty('name'), 'readonly':true});
		dp.container = false;
		dp.calendar = false;
		dp.interval = null;
		dp.active = false;
		dp.onclick = dp.onfocus = this.create.pass(dp, this);
	},

	/* create the calendar */
	create: function(dp){
		if (dp.calendar) return false;

		// Hide select boxes while calendar is up
		if(window.ie6){
			$$('select').addClass('dp_hide');
		}/* create the outer container */
		dp.container = new Element('div',{'class':'dp_container'}).injectBefore(dp);
		
		/* create timers */
		dp.container.onmouseover = dp.onmouseover = function(){
			$clear(dp.interval);
		};
		dp.container.onmouseout = dp.onmouseout = function(){
			dp.interval = setInterval(function(){
				if (!dp.active) this.remove(dp);
			}.bind(this), 500);
		}.bind(this);
		
		/* create the calendar */
		dp.calendar = new Element('div',{'class':'dp_cal'}).injectInside(dp.container);
		
		/* create the date object */
		var date = new Date();
		
		/* create the date object */
		if (dp.month && dp.year){
			date.setFullYear(dp.year, dp.month, 1);
		}else{
			dp.month = date.getMonth();
			dp.year = date.getFullYear();
			date.setDate(1);
		}dp.year % 4 == 0 ? dp.options.daysInMonth[1] = 29 : dp.options.daysInMonth[1] = 28;
		
		/* set the day to first of the month */
		var firstDay = (1-(7+date.getDay()-dp.options.startDay)%7);
		
		
		
		/* create the month select box */
		monthSel = new Element('select',{'id':dp.id + '_monthSelect'});
		for (var m = 0; m < dp.options.monthNames.length; m++){
			monthSel.options[m] = new Option(dp.options.monthNames[m], m);
			if (dp.month == m) monthSel.options[m].selected = true;
		}/* create the year select box */
		yearSel = new Element('select',{'id':dp.id + '_yearSelect'});
		i = 0;
		dp.options.yearStart ? dp.options.yearStart : dp.options.yearStart = date.getFullYear();
		if (dp.options.yearOrder == 'desc'){
			for (var y = dp.options.yearStart; y > (dp.options.yearStart - dp.options.yearRange - 1); y--){
				yearSel.options[i] = new Option(y, y);
				if (dp.year == y) yearSel.options[i].selected = true;
				i++;
			}}else{
			for (var y = dp.options.yearStart; y < (dp.options.yearStart + dp.options.yearRange + 1); y++){
				yearSel.options[i] = new Option(y, y);
				if (dp.year == y) yearSel.options[i].selected = true;
				i++;
			}}/* start creating calendar */
		calTable = new Element('table');
		calTableThead = new Element('thead');
		calSelRow = new Element('tr');
		calSelCell = new Element('th',{'colspan':'7'});
		monthSel.injectInside(calSelCell);
		yearSel.injectInside(calSelCell);
		calSelCell.injectInside(calSelRow);
		calSelRow.injectInside(calTableThead);
		calTableTbody = new Element('tbody');
		
		/* create day names */
		calDayNameRow = new Element('tr');
		for (var i = 0; i < dp.options.dayNames.length; i++){
			calDayNameCell = new Element('th');
			calDayNameCell.appendText(dp.options.dayNames[(dp.options.startDay+i)%7].substr(0, dp.options.dayChars)); 
			calDayNameCell.injectInside(calDayNameRow);
		}calDayNameRow.injectInside(calTableTbody);
		
		/* create the day cells */
		while (firstDay <= dp.options.daysInMonth[dp.month]){
			calDayRow = new Element('tr');
			for (i = 0; i < 7; i++){
				if ((firstDay <= dp.options.daysInMonth[dp.month]) && (firstDay > 0)){
					calDayCell = new Element('td',{'class':dp.id + '_calDay', 'axis':dp.year + '|' + (parseInt(dp.month) + 1) + '|' + firstDay}).appendText(firstDay).injectInside(calDayRow);
				}else{
					calDayCell = new Element('td',{'class':'dp_empty'}).appendText(' ').injectInside(calDayRow);
				}// Show the previous day
				if ( (firstDay == dp.oldDay) && (dp.month == dp.oldMonth ) && (dp.year == dp.oldYear) ){
					calDayCell.addClass('dp_selected');
				}// Show today
				if ( (firstDay == dp.nowDay) && (dp.month == dp.nowMonth ) && (dp.year == dp.nowYear) ){
					calDayCell.addClass('dp_today');
				}firstDay++;
			}calDayRow.injectInside(calTableTbody);
		}/* table into the calendar div */
		calTableThead.injectInside(calTable);
		calTableTbody.injectInside(calTable);
		calTable.injectInside(dp.calendar);
		
		/* set the onmouseover events for all calendar days */
		$$('td.' + dp.id + '_calDay').each(function(el){
			el.onmouseover = function(){
				el.addClass('dp_roll');
			}.bind(this);
		}.bind(this));
		
		/* set the onmouseout events for all calendar days */
		$$('td.' + dp.id + '_calDay').each(function(el){
			el.onmouseout = function(){
				el.removeClass('dp_roll');
			}.bind(this);
		}.bind(this));
		
		/* set the onclick events for all calendar days */
		$$('td.' + dp.id + '_calDay').each(function(el){
			el.onclick = function(){
				ds = el.axis.split('|');
				dp.value = this.formatValue(dp, ds[0], ds[1], ds[2]);
				changeMapFilter();
				this.remove(dp);
			}.bind(this);
		}.bind(this));
		
		/* set the onchange event for the month & year select boxes */
		monthSel.onfocus = function(){ dp.active = true; };
		monthSel.onchange = function(){
			dp.month = monthSel.value;
			dp.year = yearSel.value;
			this.remove(dp);
			this.create(dp);
		}.bind(this);
		
		yearSel.onfocus = function(){ dp.active = true; };
		yearSel.onchange = function(){
			dp.month = monthSel.value;
			dp.year = yearSel.value;
			this.remove(dp);
			this.create(dp);
		}.bind(this);
	},
	
	/* Format the returning date value according to the selected formation */
	formatValue: function(dp, year, month, day){
		/* setup the date string variable */
		var dateStr = '';
		
		/* check the length of day */
		if (day < 10) day = '0' + day;
		if (month < 10) month = '0' + month;
		
		/* check the format & replace parts // thanks O'Rey */
		dateStr = dp.options.format.replace( /dd/i, day ).replace( /mm/i, month ).replace( /yyyy/i, year );
		dp.month = dp.oldMonth = '' + (month - 1) + '';
		dp.year = dp.oldYear = year;
		dp.oldDay = day;
		
		/* return the date string value */
		return dateStr;
	},
	
	/* Remove the calendar from the page */
	remove: function(dp){
		$clear(dp.interval);
		dp.active = false;
		if (window.opera) dp.container.empty();
		else if (dp.container) dp.container.destroy();
		dp.calendar = false;
		dp.container = false;
		$$('select.dp_hide').removeClass('dp_hide');
	}});