// edit: calendar
// --------------

var arr_months = new Array ( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' );
var week_days = new Array ( 'S', 'M', 'T', 'W', 'T', 'F', 'S' );
var week_days_long = new Array ( 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' );
var week_days_short = new Array ( 'S', 'M', 'T', 'W', 'T', 'F', 'S' );

// calendar: function
function openCalendar ( actual, id, kind, detail ) {
	// calendar: set basic vars
	// date is dd/mm/yyyy
  	var kind = kind;
	
	var weekStart = 1; // day week starts from (normally 0 or 1)
	var startDate = ( actual == "00-00-0000" || actual == '' ? new Date ( ) : str2dt ( actual ) );
	var todayDate = new Date ( );
	
  	var thisDate = new Date ( );
    var today = thisDate.getDate ( ) + '-' + ( thisDate.getMonth ( ) + 1 ) + '-' + thisDate.getFullYear ( );
  
	// calendar: populate navigation buttons	
	var prevMonth = new Date ( startDate );
	prevMonth.setMonth ( startDate.getMonth ( ) - 1 );
	
	var nextMonth = new Date ( startDate );
	nextMonth.setMonth ( startDate.getMonth ( ) + 1 );
	
	var firstDayMonth = new Date ( startDate );
	firstDayMonth.setDate ( 1 );
	firstDayMonth.setDate( 1 - ( 7 + firstDayMonth.getDay ( ) - weekStart ) %7 );
	
	var lastDay = new Date ( nextMonth );
	lastDay.setDate ( 0 );
	
	// calendar: set this year
	var thisYear = new Date ( );
	var thisFullYear = thisYear.getFullYear ( );
	
	// html generation (feel free to tune it for your particular application)
	// print calendar header
	var str_buffer = new String ( );
	
  	str_buffer += "<table class=\"table_event_calendar\">"
	+ "<tbody>"
	+ "<tr>"
	+ "<td class=\"main\">"
    + "<table class=\"basic sub_calendar\">"
  	+ "<tbody>";
  	
  	if ( detail != 'true' ) {
  		str_buffer += "<tr>"
		+ "<td class=\"h_left\">"
		+ "<a href=\"javascript:jumpMonth('" + dt2dtstr ( prevMonth ) + "','" + id + "','"+detail+"');\">&lt;&lt;</a>"
		+ "</td>"
		+ "<td class=\"h_center\" colspan=\"5\">" + arr_months[ startDate.getMonth ( ) ] + " " + startDate.getFullYear ( )
		+ "</td>"
		+ "<td class=\"h_right\">"
		+ "<a href=\"javascript:jumpMonth('" + dt2dtstr ( nextMonth ) + "','" + id + "','"+detail+"');\">&gt;&gt;</a>"
		+ "</td>"
		+ "</tr>";
	}
	
	var dt_current_day = new Date ( firstDayMonth );
	
	// weekday titles
	str_buffer += "<tr>\n";
	
	for (var n=0; n<7; n++) {
		str_buffer += "<td class=\"weekdays\">";
    
		if ( detail == 'true' ) {
			str_buffer += week_days_short[ ( weekStart + n ) % 7 ];
		} else {
			str_buffer += week_days[ ( weekStart + n ) %7 ];
		}
		
		str_buffer += "</td>";
	}
	
	str_buffer += "</tr>"
	
	// build week rows	
	while ( dt_current_day.getMonth() == startDate.getMonth() || dt_current_day.getMonth() == firstDayMonth.getMonth() ) {				
		str_buffer += "<tr>\n";
		
		for ( n_current_wday=0; n_current_wday<7; n_current_wday++ ) {			
			// different table colors for different dates
			// 1) current date 2) weekend days 3) working days      
     
			// active
			if ( detail == 'true' && Events[ dt2dtstr ( dt_current_day ) ] == 'true' ) {
				str_buffer += "<td class=\"active\" valign=\"top\">";
			} else if ( dt_current_day.getMonth ( ) != startDate.getMonth ( ) ) {
				str_buffer += "<td class=\"exclude\" valign=\"top\">";
			//} //else if ( detail == 'true' ) {
			//	str_buffer += "<td class=\"olddate\" valign=\"top\">";
			} else {
				// unselectabel
				if ( dt_current_day.getMonth ( ) < todayDate.getMonth ( ) || dt_current_day.getFullYear ( ) < todayDate.getFullYear ( ) ) {
					str_buffer += "<td class=\"olddate\" valign=\"top\">";
				}
				// unselectabel 2
				else if ( dt_current_day.getDate ( ) < todayDate.getDate ( ) && dt_current_day.getMonth ( ) <= todayDate.getMonth ( ) ) {
					str_buffer += "<td class=\"olddate\" valign=\"top\">";
				}
				// select current date
				else if ( dt_current_day.getDate() == todayDate.getDate() && dt_current_day.getMonth() == todayDate.getMonth() ) {
					str_buffer += "<td class=\"current\" valign=\"top\">";
				} 
				// select weekends
				else if ( dt_current_day.getDay ( ) == 0 || dt_current_day.getDay ( ) == 6) {
					str_buffer += "<td class=\"weekend\" valign=\"top\">";
				}           
				// select regular days
				else {
					str_buffer += "<td class=\"regular\" valign=\"top\">";
				}
			}
			
			if ( detail == 'true' ) {
				if ( Events[ dt2dtstr ( dt_current_day ) ] == 'true' ) {
					str_buffer += "<a href=\"javascript:event_redirect('" + dt2dtstr ( dt_current_day ) + "');\" title=\"\">" + dt_current_day.getDate()  + "</a>";	  
					str_buffer += "</td>\n";
				} else {
					str_buffer += "<a>" + dt_current_day.getDate() + "</a></td>\n";
				}
			} else {
				if ( dt_current_day.getMonth ( ) != startDate.getMonth ( ) ) {
					str_buffer += "</td>\n";
				} else if ( dt_current_day.getMonth ( ) < todayDate.getMonth ( ) || dt_current_day.getFullYear ( ) < todayDate.getFullYear ( ) ) {
					str_buffer += dt_current_day.getDate() + "</td>";
				} else if ( dt_current_day.getDate ( ) < todayDate.getDate ( ) && dt_current_day.getMonth ( ) <= todayDate.getMonth ( ) ) {
					str_buffer += dt_current_day.getDate() + "</td>";
				} else {
					str_buffer += "<a href=\"javascript:add_date('" + arr_months[ dt_current_day.getMonth() ] + ' ' + dt_current_day.getDate() + "','" + ( dt_current_day.getMonth() + 1 ) + '-' + dt_current_day.getDate() + '-' + dt_current_day.getFullYear() + "');\">" + dt_current_day.getDate() + "</a></td>\n";
				}
			}
		
			dt_current_day.setDate(dt_current_day.getDate()+1);
		}
		
	
		str_buffer += "</tr>\n";
	}
	
	var current_year = startDate.getFullYear ( );
	var current_month = startDate.getMonth ( );	
	
	str_buffer += "</tbody>"
  	+ "</table>"
	+ "</td>"
	+ "</tr>"
    + "</tbody>"
	+ "</table>";
	
	if ( kind == 'return' ) {
		return str_buffer;
	} else {
	  	document.write ( str_buffer );
	}
}

function load_dates ( date ) {
	new_date = date.split('-');
	add_date ( '' + arr_months[ ( new_date['0'] - 1 ) ] + ' ' + new_date['1'] + '','' + new_date['0'] + '-' + new_date['1'] + '-' + new_date['2'] + ''); 
}

function add_date ( show, key ) {	
	if ( document.getElementById ( key ) ) {
		remove_date ( key );
	} else {
		var objID = document.getElementById('event_dates');
		if ( objID.style.display == 'none' ) {
			objID.style.display = '';
		}
		objID.innerHTML += '<span id="' + key + '"><input type="hidden" name="event[]" value="' + key + '" />' + show
		+ ' (<a href="javascript:remove_date(\'' + key + '\')" title="">x</a>)<br /></span>';
	}
}

function remove_date ( key ) {  
	var objID = document.getElementById( key );
	objID.style.display = 'none';
	objID.innerHTML = '';
	objID.id = '';
}

// calendar: support functions
function str2dt (str_datetime) {
	var re_date = /^(\d+)\-(\d+)\-(\d+)$/;
	if (!re_date.exec(str_datetime)) {
		return alert("Invalid Datetime format: "+ re_date);
	}
	return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1, RegExp.$4, RegExp.$5, RegExp.$6));
}

function dt2dtstr (dt_datetime) {
	return ( new String (
	 	dt_datetime.getDate()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getFullYear()+"")
	);
}

// calendar: jump
function jumpMonth ( n_actual, n_id, n_detail ) {    
  	var objID = document.getElementById('calendar_screen');
  	objID.innerHTML = openCalendar ( n_actual, n_id, 'return', n_detail );
}

function changeDate ( date, id ) {
	field = new Array ( 'day', 'month', 'year' );
  
	new_date = date.split('-');
  	my_cnt = new_date.length;
  
  	for ( x = 0; x < my_cnt; x++ ) {
  		if ( new_date[ x ].length == '1' ) {
    		new_date[ x ] = '0' + new_date[ x ];
    	}
  		document.getElementById(id + '_' + field[x]).value = new_date[ x ];
 	}
}