// Title: Tigra Calendar
// URL: http://www.softcomplex.com/products/tigra_calendar/
// Version: 3.4 (European date format)
// Date: 07/12/2007
// Note: Permission given to use this script in ANY kind of applications if
//    header lines are left unchanged.
// Note: Script consists of two files: calendar?.js and calendar.html

// if two digit year input dates after this year considered 20 century.
var NUM_CENTYEAR = 30;
// is time input control required by default
var BUL_TIMECOMPONENT = false;
// are year scrolling buttons required by default
var BUL_YEARSCROLL = true;

var calendars = [];
var RE_NUM = /^\-?\d+$/;

function calendar1(obj_target, sContainerID) {

	// assigning methods
	this.gen_date = cal_gen_date1;
	this.gen_time = cal_gen_time1;
	this.gen_tsmp = cal_gen_tsmp1;
	this.prs_date = cal_prs_date1;
	this.prs_time = cal_prs_time1;
	this.prs_tsmp = cal_prs_tsmp1;
	this.popup    = cal_popup1;
	this.PaintDates = PaintDates;
	this.containerid = sContainerID;

	// validate input parameters
	if (!obj_target)
		return cal_error("Error calling the calendar: no target control specified");
	if (obj_target.value == null)
		return cal_error("Error calling the calendar: parameter specified is not valid target control");
	this.target = obj_target;
	this.time_comp = BUL_TIMECOMPONENT;
	this.year_scroll = BUL_YEARSCROLL;
	
	// register in global collections
	this.id = calendars.length;
	calendars[this.id] = this;
}

function PaintDates(sCalendarObjectName)
{
	var date_month = dt_current.getMonth()+1;
	date_month = ( date_month.toString().length == 2 ) ? date_month : "0"+date_month;
	var date_year = dt_current.getFullYear();
	
	
	
	var sBoard = '<div class="block_calendar">'
	+ '<div class="block_calendar_head"><div>'
	+ '<table cellspacing="0" cellpadding="0" border="0" class="block_calendar_head_table"><tr>'
	+ '<td class="cal_td" nowrap><a class="cal_td_a" href="javascript:set_datetime('+dt_prev_month.valueOf()+')"><img src="'+STR_ICONPATH+'calendar_prev.png" border="0" alt="חודש קודם"></a></td>'
	+ '<td class="cal_td" align="center" width="100%"><a href="shows.php?date=00/'+date_month+'/'+date_year+'" class="lnk_calendar_month">הצגות ב'+ARR_MONTHS[dt_current.getMonth()]+' '+dt_current.getFullYear()+'<a/></td>'
	+ '<td class="cal_td" nowrap><a class="cal_td_a" href="javascript:set_datetime('+dt_next_month.valueOf()+')"><img src="'+STR_ICONPATH+'calendar_next.png" border="0" alt="חודש הבא"></a></td>'
	+ '</tr></table>'
	+ '</div></div>'
	+ '<div class="block_calendar_body"><div>'
	+ '<table cellspacing="0" cellpadding="0" border="0" class="block_calendar_body_table">'
	+ '<tr>';
	// print weekdays titles
	for (var n=0; n<7; n++)
		sBoard = sBoard + '<td class="cal_dayofweek" align="center">'+ARR_WEEKDAYS[(NUM_WEEKSTART+n)%7]+'</td>';
		sBoard = sBoard + '</tr>';
		// print calendar table
		var dt_current_day = new Date(dt_firstday);
		while (dt_current_day.getMonth() == dt_current.getMonth() || dt_current_day.getMonth() == dt_firstday.getMonth()) 
		{
			// print row heder
			sBoard = sBoard + '<tr>';
			for (var n_current_wday=0; n_current_wday<7; n_current_wday++) 
			{
				if (dt_current_day.getDate() == dt_selected.getDate() && dt_current_day.getMonth() == dt_selected.getMonth() && dt_current_day.getFullYear() == dt_selected.getFullYear())
				{
					// today
					sBoard = sBoard + '<td class="cal_today" id="cal_cell_'+dt_current_day.getFullYear()+'_'+dt_current_day.getDate()+'_'+dt_current_day.getMonth()+'" align="center" width="14%">';
				}
				else if (dt_current_day.getDay() == 5 || dt_current_day.getDay() == 6)
				{
					// weekend days
					sBoard = sBoard + '<td class="cal_weekend" id="cal_cell_'+dt_current_day.getFullYear()+'_'+dt_current_day.getDate()+'_'+dt_current_day.getMonth()+'" lign="center" width="14%">';
				}
				else
				{
				 // print working days of current month
					sBoard = sBoard + '<td class="cal_normal" id="cal_cell_'+dt_current_day.getFullYear()+'_'+dt_current_day.getDate()+'_'+dt_current_day.getMonth()+'" align="center" width="14%">';
				}
				
				//var date_day = dt_current_day.getDate();
				//date_day = ( date_day.toString().length == 2 ) ? date_day : "0"+date_day;
				
				sBoard = sBoard + '<a href="javascript:set_datetime('+dt_current_day.valueOf() +', true);">';
				//sBoard = sBoard + '<a href="shows.php?date='+date_day+'/'+date_month+'/'+date_year+'" onclick="return set_datetime('+dt_current_day.valueOf() +', true);">';
				
				
				
				if (dt_current_day.getMonth() == this.dt_current.getMonth())
				{
					// print days of current month
					sBoard = sBoard + '<font color="#000000">';
				}
				else
				{
					// print days of other months
					sBoard = sBoard + '<font color="#cccccc">';
				}
				//
				sBoard = sBoard + dt_current_day.getDate()+'</font></a></td>';
				dt_current_day.setDate(dt_current_day.getDate()+1);
			}
			// print row footer
			sBoard = sBoard + '</tr>';
		}
		if (obj_caller && obj_caller.time_comp) 
		{
			sBoard = sBoard + '<form onsubmit="javascript:set_datetime('+dt_current.valueOf()+', true)" name="cal"><tr><td class="cal_td" colspan="7" bgcolor="#505050"><font color="White" face="tahoma, verdana" size="2">Time: <input type="text" name="time" value="'+obj_caller.gen_time(this.dt_current)+'" size="8" maxlength="8"></font></td></tr></form>';
			document.forms['cal'].elements['time'].focus();
		}
		
		sBoard = sBoard + '</table>'
		+ '</div></div></div>';
		
	document.getElementById(this.containerid).innerHTML = sBoard;
}

function cal_popup1 (str_datetime) {
	if (str_datetime)
		dt_current = this.prs_tsmp(str_datetime);
	else 
		dt_selected = this.dt_current = this.prs_tsmp(this.target.value);

	if (!str_datetime) return;

	num_id = this.id;
	re_urlSel = dt_selected.valueOf();
	re_urlCur = dt_current.valueOf();
	LoadCalendar();
	this.PaintDates(this.containerid);
}

// timestamp generating function
function cal_gen_tsmp1 (dt_datetime) {
	return(this.gen_date(dt_datetime) + ' ' + this.gen_time(dt_datetime));
}

// date generating function
function cal_gen_date1 (dt_datetime) {
	return (
		(dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate() + "-"
		+ (dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "-"
		+ dt_datetime.getFullYear()
	);
}
// time generating function
function cal_gen_time1 (dt_datetime) {
	return (
		(dt_datetime.getHours() < 10 ? '0' : '') + dt_datetime.getHours() + ":"
		+ (dt_datetime.getMinutes() < 10 ? '0' : '') + (dt_datetime.getMinutes()) + ":"
		+ (dt_datetime.getSeconds() < 10 ? '0' : '') + (dt_datetime.getSeconds())
	);
}

// timestamp parsing function
function cal_prs_tsmp1 (str_datetime) {
	// if no parameter specified return current timestamp
	if (!str_datetime)
		return (new Date());

	// if positive integer treat as milliseconds from epoch
	if (RE_NUM.exec(str_datetime))
		return new Date(str_datetime);
		
	// else treat as date in string format
	var arr_datetime = str_datetime.split(' ');
	return this.prs_time(arr_datetime[1], this.prs_date(arr_datetime[0]));
}

// date parsing function
function cal_prs_date1 (str_date) {

	var arr_date = str_date.split('-');

	if (arr_date.length != 3) return cal_error ("Invalid date format: '" + str_date + "'.\nFormat accepted is dd-mm-yyyy.");
	if (!arr_date[0]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo day of month value can be found.");
	if (!RE_NUM.exec(arr_date[0])) return cal_error ("Invalid day of month value: '" + arr_date[0] + "'.\nAllowed values are unsigned integers.");
	if (!arr_date[1]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo month value can be found.");
	if (!RE_NUM.exec(arr_date[1])) return cal_error ("Invalid month value: '" + arr_date[1] + "'.\nAllowed values are unsigned integers.");
	if (!arr_date[2]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo year value can be found.");
	if (!RE_NUM.exec(arr_date[2])) return cal_error ("Invalid year value: '" + arr_date[2] + "'.\nAllowed values are unsigned integers.");

	var dt_date = new Date();
	dt_date.setDate(1);

	if (arr_date[1] < 1 || arr_date[1] > 12) return cal_error ("Invalid month value: '" + arr_date[1] + "'.\nAllowed range is 01-12.");
	dt_date.setMonth(arr_date[1]-1);
	 
	if (arr_date[2] < 100) arr_date[2] = Number(arr_date[2]) + (arr_date[2] < NUM_CENTYEAR ? 2000 : 1900);
	dt_date.setFullYear(arr_date[2]);

	var dt_numdays = new Date(arr_date[2], arr_date[1], 0);
	dt_date.setDate(arr_date[0]);
	if (dt_date.getMonth() != (arr_date[1]-1)) return cal_error ("Invalid day of month value: '" + arr_date[0] + "'.\nAllowed range is 01-"+dt_numdays.getDate()+".");

	return (dt_date)
}

// time parsing function
function cal_prs_time1 (str_time, dt_date) {

	if (!dt_date) return null;
	var arr_time = String(str_time ? str_time : '').split(':');

	if (!arr_time[0]) dt_date.setHours(0);
	else if (RE_NUM.exec(arr_time[0]))
		if (arr_time[0] < 24) dt_date.setHours(arr_time[0]);
		else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed range is 00-23.");
	else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed values are unsigned integers.");
	
	if (!arr_time[1]) dt_date.setMinutes(0);
	else if (RE_NUM.exec(arr_time[1]))
		if (arr_time[1] < 60) dt_date.setMinutes(arr_time[1]);
		else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed range is 00-59.");
	else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed values are unsigned integers.");

	if (!arr_time[2]) dt_date.setSeconds(0);
	else if (RE_NUM.exec(arr_time[2]))
		if (arr_time[2] < 60) dt_date.setSeconds(arr_time[2]);
		else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed range is 00-59.");
	else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed values are unsigned integers.");

	dt_date.setMilliseconds(0);
	return dt_date;
}

function cal_error (str_message) {
	alert (str_message);
	return null;
}



function LoadCalendar()
						{
							if (obj_caller && obj_caller.year_scroll) {
								// get same date in the previous year
								dt_prev_year = new Date(dt_current);
								dt_prev_year.setFullYear(dt_prev_year.getFullYear() - 1);
								if (dt_prev_year.getDate() != dt_current.getDate())
									dt_prev_year.setDate(0);
								
								// get same date in the next year
								dt_next_year = new Date(dt_current);
								dt_next_year.setFullYear(dt_next_year.getFullYear() + 1);
								if (dt_next_year.getDate() != dt_current.getDate())
									dt_next_year.setDate(0);
							}

							// get same date in the previous month
							dt_prev_month = new Date(dt_current);
							if (dt_prev_month.getMonth()) {
								dt_prev_month.setMonth(dt_prev_month.getMonth() - 1);
								if (dt_prev_month.getDate() != dt_current.getDate())
									dt_prev_month.setDate(0);
							}
							else {
								dt_prev_month.setFullYear(dt_prev_month.getFullYear() - 1);
								dt_prev_month.setMonth(11);
							}

							// get same date in the next month
							dt_next_month = new Date(dt_current);
							dt_next_month.setMonth(dt_next_month.getMonth() + 1);
							if (dt_next_month.getDate() != dt_current.getDate())
								dt_next_month.setDate(0);

							// get first day to display in the grid for current month
							dt_firstday = new Date(dt_current);
							dt_firstday.setDate(1);
							dt_firstday.setDate(1 - (7 + dt_firstday.getDay() - NUM_WEEKSTART) % 7);
						}

						// function passing selected date to calling window
						function set_datetime(n_datetime, b_close) {
						
							if (!obj_caller) return;
							
							var dt_datetime = obj_caller.prs_time((document.cal ? document.cal.time.value : ''),	new Date(n_datetime));
							//alert(dt_datetime);
							
							if (!dt_datetime) return;
							
							if (b_close) {
							
								obj_caller.target.value = (document.cal
									? obj_caller.gen_tsmp(dt_datetime)
									: obj_caller.gen_date(dt_datetime)
								);
								//
								ShowEvents(dt_datetime.getDate(), dt_datetime.getMonth(), dt_datetime.getFullYear()) // print the events
								
								obj_caller.popup(dt_datetime.valueOf());
								ShowEventsInCalendar();
								ShowSelectedEventsInCalendar();
								
								//window.close();
							}
							else 
							{
								obj_caller.popup(dt_datetime.valueOf());
								ShowEventsInCalendar();
								ShowSelectedEventsInCalendar();
							}
							
						}
						function ShowEvents(nDay, nMonth, nYear)
						{
							nMonth++;
							var sEvents = "";
							/*
							if( ( nDay - 9 ) <= 0 )
							nDay = "0"+nDay;
							if( ( nMonth - 9 ) <= 0 )
							nMonth = "0"+nMonth;
							//
							document.location.href='shows.php?date='+nDay+'/'+nMonth+'/'+dt_current.getFullYear()+'';
							*/	
							
							for(var nYearIndex=1;nYearIndex<arrEvents.length;nYearIndex++)
							{
								if(arrEvents[nYearIndex] != undefined)
								{
									
									if (arrEvents_years[nYearIndex] == nYear)
									{
										if(arrEvents[nYearIndex][nMonth]!=undefined)
										{
											
											if(arrEvents[nYearIndex][nMonth][nDay]!=undefined)
											{
												
												
													
													GoToEvents(nDay, nMonth, nYear);
												
												/*
												sEvents = sEvents + '<font class="CalendarDate">'+arrEvents[nMonth][nDay][0][0]+'</font>';
												sEvents = sEvents + '<div style="padding-top:5px"></div>';
												for(var nEventIndex=0;nEventIndex<arrEvents[nMonth][nDay].length;nEventIndex++)
												{
													sEvents = sEvents + '<a href="ProjectEvent.asp?id='+arrEvents[nMonth][nDay][nEventIndex][EVENT_ID]+'" class="CalendarTitle">'+arrEvents[nMonth][nDay][nEventIndex][EVENT_TITLE]+'</a><BR>';
			//										sEvents = sEvents + '<font class="CalendarSubTitle">'+arrEvents[nMonth][nDay][nEventIndex][EVENT_SUBTITLE]+'</font><BR>';
													sEvents = sEvents + '<font class="ArticleText">'+arrEvents[nMonth][nDay][nEventIndex][EVENT_TIZER]+'</font><BR>';
													sEvents = sEvents + '<div style="padding-top:5px"></div>';
												}
												*/
											}
											else
											{
												alert("לא נימצאו מופעים בתאריך: "+nDay+"/"+nMonth+"/"+nYear);
												//return false;
											}
											//document.getElementById("today_events").innerHTML = sEvents;
										}
										else
										{
											alert("לא נימצאו מופעים בתאריך: "+nDay+"/"+nMonth+"/"+nYear);
											//return false;
										}
										return;
									}
								}
							}
							return false;
						}
						function GoToEvents(nDay, nMonth, nYear)
						{
							var sEvents = "";
							if( ( nDay - 9 ) <= 0 )
							nDay = "0"+nDay;
							if( ( nMonth - 9 ) <= 0 )
							nMonth = "0"+nMonth;
							//
							document.location.href='shows.php?date='+nDay+'/'+nMonth+'/'+nYear+'';
							/*	
							if(arrEvents[nMonth]!=undefined)
							{
								if(arrEvents[nMonth][nDay]!=undefined)
								{
									sEvents = sEvents + '<font class="CalendarDate">'+arrEvents[nMonth][nDay][0][0]+'</font>';
									sEvents = sEvents + '<div style="padding-top:5px"></div>';
									for(var nEventIndex=0;nEventIndex<arrEvents[nMonth][nDay].length;nEventIndex++)
									{
										sEvents = sEvents + '<a href="ProjectEvent.asp?id='+arrEvents[nMonth][nDay][nEventIndex][EVENT_ID]+'" class="CalendarTitle">'+arrEvents[nMonth][nDay][nEventIndex][EVENT_TITLE]+'</a><BR>';
//										sEvents = sEvents + '<font class="CalendarSubTitle">'+arrEvents[nMonth][nDay][nEventIndex][EVENT_SUBTITLE]+'</font><BR>';
										sEvents = sEvents + '<font class="ArticleText">'+arrEvents[nMonth][nDay][nEventIndex][EVENT_TIZER]+'</font><BR>';
										sEvents = sEvents + '<div style="padding-top:5px"></div>';
									}
								}
								
								document.getElementById("today_events").innerHTML = sEvents;
							}
							*/
						}
						function ShowEventsInCalendar()
						{
							for(var nYearIndex=1;nYearIndex<arrEvents.length;nYearIndex++)
							{
								if(arrEvents[nYearIndex]!=undefined)
								{
								
									for(var nMonthIndex=1;nMonthIndex<arrEvents[nYearIndex].length;nMonthIndex++)
									{
										if(arrEvents[nYearIndex][nMonthIndex]!=undefined)
										{
											
											for(var nDayIndex=1;nDayIndex<arrEvents[nYearIndex][nMonthIndex].length;nDayIndex++)
											{
												if(arrEvents[nYearIndex][nMonthIndex][nDayIndex]!=undefined)
												{
													for(var nEventIndex=1;nEventIndex<arrEvents[nYearIndex][nMonthIndex].length;nEventIndex++)
													{
														
														if(document.getElementById("cal_cell_"+arrEvents_years[nYearIndex]+"_"+nDayIndex+"_"+(nMonthIndex-1))!=undefined)
														{
															
															//document.getElementById("cal_cell_"+nDayIndex+"_"+(nMonthIndex-1)).style.fontWeight = "bold";
															//document.getElementById("cal_cell_"+nDayIndex+"_"+(nMonthIndex-1)).style.color = "black";
															document.getElementById("cal_cell_"+arrEvents_years[nYearIndex]+"_"+nDayIndex+"_"+(nMonthIndex-1)).className= "cal_event";
														}
													}
												}
											}
											
										}
									}
								}
							}
						}
						
						function ShowSelectedEventsInCalendar()
						{
							for(var nMonthIndex=1;nMonthIndex<arrSelectedEvents.length;nMonthIndex++)
							{
								if(arrSelectedEvents[nMonthIndex]!=undefined)
								{
									for(var nDayIndex=1;nDayIndex<arrSelectedEvents[nMonthIndex].length;nDayIndex++)
									{
										if(arrSelectedEvents[nMonthIndex][nDayIndex]!=undefined)
										{
											for(var nEventIndex=1;nEventIndex<arrSelectedEvents[nMonthIndex].length;nEventIndex++)
											{
												if(document.getElementById("cal_cell_"+nDayIndex+"_"+(nMonthIndex-1))!=undefined)
												{
													//document.getElementById("cal_cell_"+nDayIndex+"_"+(nMonthIndex-1)).style.fontWeight = "bold";
													//document.getElementById("cal_cell_"+nDayIndex+"_"+(nMonthIndex-1)).style.color = "black";
													//document.getElementById("cal_cell_"+nDayIndex+"_"+(nMonthIndex-1)).className= "cal_selectedevent"
												}
											}
										}
									}
								}
							}
						}

