// JavaScript Document

// dateFormat accepts this values:

// 0: dd/mm/yyyy
// 1: mm/dd/yyyy
// 2: mm/dd/yy
// 3: dd monthName yyyy

var _Calendars = new Array();

function _initCalc(calname,title,allowAllDates,startDate,endDate,weekendType,altStartDate,dateFormat) {
	document.getElementById(calname+"_textbox").onclick = _toggleCal;
	var isReload = false;
	var seekValue = "";
	try {
		var reloadHidden = document.getElementById("hdnPageReload").value.toString();
		if (reloadHidden == "1") {
			isReload = true;
			//document.title = "Reload";
		}
	} catch(err) {
	}
	document.getElementById(calname+"_icon").onclick = _toggleCal;
	document.getElementById(calname+"_lastm").onclick = _lastMonth;
	document.getElementById(calname+"_nextm").onclick = _nextMonth;
	document.getElementById(calname+"_month").onclick = _callMonths;
	document.getElementById(calname+"_year").onclick = _callYears;
	document.getElementById(calname+"_monthsclose").onclick = _closeMonths;
	for (var m = 0;m<12;m++) {
		document.getElementById(calname+"_m"+m).onclick = _clickMonthItem;
	}
	var tempcal = new Object();
	tempcal._format = dateFormat;
	tempcal._title = title;
	if (typeof altStartDate == "string" && altStartDate != null) {
		tempcal._date = new Date(altStartDate);
		tempcal._seldate = new Date(altStartDate);
		tempcal._today = new Date(altStartDate);
	} else {
		tempcal._date = new Date();
		tempcal._seldate = new Date();
		tempcal._today = new Date();
	}
	document.getElementById(calname+"_title").innerHTML = tempcal._title;
	if (isReload) {
		var relString = document.getElementById(calname+"_textbox").value.toString();
		if (relString.length>0 && relString!="" && relString!="null" && relString!=null) {
		    relString = _deFormatDate(relString, tempcal._format);
			var relDay = relString.substr(0,2);
			var relMonth = relString.substr(3,2);
			var relYear = relString.substr(6);
			tempcal._seldate = new Date(relMonth+"/"+relDay+"/"+relYear+" 12:00:00");
		} else {
			tempcal._seldate = new Date();
			var mtxt = (tempcal._seldate.getMonth()+1)+"";
			if (mtxt.length==1) mtxt = "0"+mtxt;
			var dtxt = tempcal._seldate.getDate()+"";
			if (dtxt.length==1) dtxt = "0"+dtxt;
			document.getElementById(calname+"_textbox").value = _formatDate(dtxt + "/" + mtxt + "/" + tempcal._seldate.getFullYear(), tempcal._format);
		}
	}
	tempcal._name = calname;
	if (typeof allowAllDates != "undefined" && allowAllDates != null && !allowAllDates) {
		// Set limits
		tempcal._limited = true;
		if (startDate != null) tempcal._limitStart = new Date(startDate); else {
			tempcal._limitStart = new Date();
			tempcal._limitStart.setHours(12);
			tempcal._limitStart.setMinutes(0);
			tempcal._limitStart.setSeconds(0);
			tempcal._limitStart.setMilliseconds(0);
		}
		if (endDate != null) tempcal._limitEnd = new Date(endDate); else {
			tempcal._limitEnd = new Date();
			tempcal._limitEnd.setHours(12);
			tempcal._limitEnd.setMinutes(0);
			tempcal._limitEnd.setSeconds(0);
			tempcal._limitEnd.setMilliseconds(0);
		}
	} else {
		tempcal._limited = false;
	}
	if (weekendType != null && typeof weekendType != "undefined" && weekendType == 1) {
		// 0 (default) - Friday / Saturday
		// 1 - Saturday / Sunday
		tempcal._weekend = 1;
	} else {
		tempcal._weekend = 0;
	}
	var hidethem = document.getElementById(calname+"_textbox").getAttribute("hide");
	if (hidethem != null) {
		tempcal._hide = hidethem.toString().split(",");
	} else {
		tempcal._hide = null;
	}
	if (!isReload) {
		var mtxt = (tempcal._seldate.getMonth()+1)+"";
		if (mtxt.length==1) mtxt = "0"+mtxt;
		var dtxt = tempcal._seldate.getDate()+"";
		if (dtxt.length==1) dtxt = "0"+dtxt;
		document.getElementById(calname+"_textbox").value = _formatDate( dtxt + "/" + mtxt + "/" + tempcal._seldate.getFullYear(), tempcal._format);
	}
	_Calendars.push(tempcal);
	document.onmousedown = _docClick;
}

function _callMonths() {
	var mycalname = this.id.substr(0,this.id.indexOf("_"));
	var months = document.getElementById(mycalname + "_months");
	months.style.display = "block";
	months.style.left = YKM.getRealX(document.getElementById(mycalname+"_table"))+10;
	months.style.top = YKM.getRealY(document.getElementById(mycalname+"_table"))+40;
	var years = document.getElementById(mycalname + "_years");
	years.style.display = "none";
}

function _callYears() {
	var mycalname = this.id.substr(0,this.id.indexOf("_"));
	var years = document.getElementById(mycalname + "_years");
	var months = document.getElementById(mycalname + "_months");
	months.style.display = "none";
	years.style.display = "block";
	years.style.left = YKM.getRealX(document.getElementById(mycalname+"_table"))+50;
	years.style.top = YKM.getRealY(document.getElementById(mycalname+"_table"))+40;
	// Fill range of +/- 3 years
	for (var i in _Calendars) {
		if (_Calendars[i]._name == mycalname) {
			var thiscal = i;
			break;
		}
	}
	years.innerHTML = "<img src='/en/img/icon_close.gif' id='"+mycalname+"_monthsclose' onclick='javascript:_closeYears(this);'>";
	for (var y = (_Calendars[thiscal]._date.getFullYear() - 3); y<=(_Calendars[thiscal]._date.getFullYear() + 3);y++) {
		years.innerHTML += "<a href='javascript:_clickYearItem(\""+mycalname+"\","+y+");'>"+y+"</a><br>"
	}
}

function _closeMonths() {
	var mycalname = this.id.substr(0,this.id.indexOf("_"));
	var months = document.getElementById(mycalname + "_months");
	months.style.display = "none";
}

function _closeYears(who) {
	var mycalname = who.id.substr(0,who.id.indexOf("_"));
	var years = document.getElementById(mycalname + "_years");
	years.style.display = "none";
}

function _toggleCal(calparam) {
	var mycalname = this.id.substr(0,this.id.indexOf("_"));
	for (var i in _Calendars) {
		if (_Calendars[i]._name == mycalname) {
			var thiscal = _Calendars[i];
			break;
		}
	}
	var caltbl = document.getElementById(mycalname+"_table");
	if (caltbl.style.display != "block") {
		caltbl.style.display = "block";
		caltbl.style.left = (YKM.getRealX(this) - caltbl.offsetWidth - 5) + "px";
		caltbl.style.top = YKM.getRealY(this) + "px";
		// Hide the necessary items
		if (thiscal._hide != null) {
			for (var i = 0; i < thiscal._hide.length; i++) {
				document.getElementById(thiscal._hide[i]).style.display = "none";
			}
		}
		_fillCalendar(mycalname,false);
	} else {
		caltbl.style.display = "none";
		document.getElementById(mycalname+"_months").style.display = "none";
		// Reveal the necessary items
		if (thiscal._hide != null) {
			for (var i = 0; i < thiscal._hide.length; i++) {
				document.getElementById(thiscal._hide[i]).style.display = "";
			}
		}
	}
}


function _deFormatDate(date,format)
{
    // 0: dd/mm/yyyy
    // 1: mm/dd/yyyy
    // 2: mm/dd/yy
    // 3: dd monthName yyyy
    
    var deFormatedDate = "";
    
    switch(format)
    {
        case 0: deFormatedDate = date; break;   
        case 1: deFormatedDate = date.substr(3,2) + "/" + date.substr(0,2) + "/" + date.substr(6); break; 
        case 2: deFormatedDate = date.substr(3,2) + "/" + date.substr(0,2) + "/" + (new Date()).getFullYear().toString().substr(0,2) + date.substr(8); break;  
        case 3: deFormatedDate = date; break;  
    }
    return deFormatedDate;
}

function _formatDate(date,format)
{
    // 0: dd/mm/yyyy
    // 1: mm/dd/yyyy
    // 2: mm/dd/yy
    // 3: dd monthName yyyy
    var day = date.substr(0,2);
    var month = date.substr(3,2);
    var year = date.substr(6);
    
    var formatedDate = "";
    
    switch(format)
    {
        case 0: formatedDate = date; break;   
        case 1: formatedDate = month + "/" + day + "/" + date.substr(6); break; 
        case 2: formatedDate = month + "/" + day + "/" + date.substr(8); break;  
        case 3: formatedDate = day + " " + _monthName(month,0) + " " + date.substr(6); break;  
    }
    return formatedDate;
}

function _monthName(number, type) {
	// Type 0 - Short month
	// Type 1 - Long month
	
	if(number.length == 1) number = "0" + number;
	
	switch (number) {
		case "01": return ((type == 0)?"ינו":"ינואר"); break;
		case "02": return ((type == 0)?"פבר":"פברואר"); break;
		case "03": return ((type == 0)?"מרץ":"מרץ"); break;
		case "04": return ((type == 0)?"אפר":"אפריל"); break;
		case "05": return ((type == 0)?"מאי":"מאי"); break;
		case "06": return ((type == 0)?"יונ":"יוני"); break;
		case "07": return ((type == 0)?"יול":"יולי"); break;
		case "08": return ((type == 0)?"אוג":"אוגוסט"); break;
		case "09": return ((type == 0)?"ספט":"ספטמבר"); break;
		case "10": return ((type == 0)?"אוק":"אוקטובר"); break;
		case "11": return ((type == 0)?"נוב":"נובמבר"); break;
		case "12": return ((type == 0)?"דצמ":"דצמבר"); break;
	}
}

function _daysInMonth(month, year) {
	switch (month) {
		case 0: return 31; break;
		case 1: return ((year % 4 == 0)?29:28); break;
		case 2: return 31; break;
		case 3: return 30; break;
		case 4: return 31; break;
		case 5: return 30; break;
		case 6: return 31; break;
		case 7: return 31; break;
		case 8: return 30; break;
		case 9: return 31; break;
		case 10: return 30; break;
		case 11: return 31; break;
	}
}

function _nextMonth() {
	var calname = this.id.substr(0,this.id.indexOf("_"));
	for (var i in _Calendars) {
		if (_Calendars[i]._name == calname) {
			var thiscal = i;
			break;
		}
	}
	var thism = _Calendars[i]._date.getMonth() + 1;
	var thisy = _Calendars[i]._date.getFullYear();
	var thisd = _Calendars[i]._date.getDate();
	if (thism > 11) {
		thism = 0;
		thisy++;
	}
	_Calendars[i]._date.setFullYear(thisy,thism,thisd);
	_fillCalendar(calname,true);
}

function _lastMonth() {
	var calname = this.id.substr(0,this.id.indexOf("_"));
	for (var i in _Calendars) {
		if (_Calendars[i]._name == calname) {
			var thiscal = i;
			break;
		}
	}
	var thism = _Calendars[i]._date.getMonth() - 1;
	var thisy = _Calendars[i]._date.getFullYear();
	var thisd = _Calendars[i]._date.getDate();
	if (thism < 0) {
		thism = 11;
		thisy--;
	}
	_Calendars[i]._date.setFullYear(thisy,thism,thisd);
	_fillCalendar(calname,true);
}

function _dateEqual(d1,d2) {
	if (d1.getDate() == d2.getDate() && d1.getMonth() == d2.getMonth() && d1.getFullYear() == d2.getFullYear()) return true; else return false;
}

function _dateWithin(d,d1,d2) {
	d.setHours(12);
	d.setMinutes(0);
	d.setSeconds(0);
	d1.setHours(12);
	d1.setMinutes(0);
	d1.setSeconds(0);
	d2.setHours(12);
	d2.setMinutes(0);
	d2.setSeconds(0);
	if (d.valueOf() >= d1.valueOf() && d.valueOf() <= d2.valueOf()) var r = true; else var r = false;
	return r;
}

function _fillCalendar(calname,refill) {
	// Find the calendar
	for (var i in _Calendars) {
		if (_Calendars[i]._name == calname) {
			var thiscal = i;
			break;
		}
	}
	var bydate = (refill)?_Calendars[thiscal]._date:_Calendars[thiscal]._seldate;
	document.getElementById(calname+"_month").innerHTML = _monthName((bydate.getMonth()+1).toString());
	document.getElementById(calname+"_year").innerHTML = bydate.getFullYear();
	var totalDays = _daysInMonth(bydate.getMonth(),bydate.getFullYear());
	var thisDay = 1;
	var tempdate = new Date(bydate.getFullYear(),bydate.getMonth(),1,12,0,0,0);
	var thisDOW = tempdate.getDay();
	var started = false;
	for (var r=0;r<6;r++) {
		for (var c=0;c<7;c++) {
			var thiscell = document.getElementById(calname+"_r"+r+"c"+c);
			switch (_Calendars[thiscal]._weekend) {
				case 0: if (c==5 || c==6) var thisDayType = "calWeekend"; else var thisDayType = "calItem"; break;
				case 1: if (c==0 || c==6) var thisDayType = "calWeekend"; else var thisDayType = "calItem"; break;
			}
			if (started) {
				if (thisDay<=totalDays) {
					var tempdate = new Date(bydate.getFullYear(),bydate.getMonth(),thisDay,12,0,0,0);
					if (_Calendars[thiscal]._limited) {
						// There is a date limiter
						if (_dateWithin(tempdate,_Calendars[thiscal]._limitStart,_Calendars[thiscal]._limitEnd)) {
							// Date is within the limit
							thiscell.innerHTML = "<a href='javascript:_clickCalItem(\""+calname+"\","+bydate.getFullYear()+","+bydate.getMonth()+","+thisDay+");'>"+thisDay+"</a>";
							if (_dateEqual(tempdate,_Calendars[thiscal]._seldate)) {
								thiscell.className = thisDayType + " calSelectedDate";
							} else if (_dateEqual(tempdate,_Calendars[thiscal]._today)) {
								thiscell.className = "calToday";
							} else {
								thiscell.className = thisDayType;
							}
						} else {
							// Date is out the limits
							thiscell.className = "calDisabled";
							thiscell.innerHTML = ""+thisDay;
						}
					} else {
						// No date limits
						thiscell.innerHTML = "<a href='javascript:_clickCalItem(\""+calname+"\","+bydate.getFullYear()+","+bydate.getMonth()+","+thisDay+");'>"+thisDay+"</a>";
						if (_dateEqual(tempdate,_Calendars[thiscal]._seldate)) {
							thiscell.className = thisDayType + " calSelectedDate";
						} else if (_dateEqual(tempdate,_Calendars[thiscal]._today)) {
							thiscell.className = "calToday";
						} else {
							thiscell.className = thisDayType;
						}
					}
					thisDay++;
				} else {
					thiscell.innerHTML = "&nbsp;";
					thiscell.className = thisDayType;
				}
			} else {
				if (!started && c == thisDOW) {
					started = true;
					var tempdate = new Date(bydate.getFullYear(),bydate.getMonth(),thisDay,12,0,0,0);
					if (_Calendars[thiscal]._limited) {
						if (_dateWithin(tempdate,_Calendars[thiscal]._limitStart,_Calendars[thiscal]._limitEnd)) {
							thiscell.innerHTML = "<a href='javascript:_clickCalItem(\""+calname+"\","+bydate.getFullYear()+","+bydate.getMonth()+","+thisDay+");'>"+thisDay+"</a>";
							if (_dateEqual(tempdate,_Calendars[thiscal]._seldate)) {
								thiscell.className = thisDayType + " calSelectedDate";
							} else if (_dateEqual(tempdate,_Calendars[thiscal]._today)) {
								thiscell.className = "calToday";
							} else {
								thiscell.className = thisDayType;
							}
						} else {
							thiscell.className = "calDisabled";
							thiscell.innerHTML = ""+thisDay;
						}
					} else {
						thiscell.innerHTML = "<a href='javascript:_clickCalItem(\""+calname+"\","+bydate.getFullYear()+","+bydate.getMonth()+","+thisDay+");'>"+thisDay+"</a>";
						if (_dateEqual(tempdate,_Calendars[thiscal]._seldate)) {
							thiscell.className = thisDayType + " calSelectedDate";
						} else if (_dateEqual(tempdate,_Calendars[thiscal]._today)) {
							thiscell.className = "calToday";
						} else {
							thiscell.className = thisDayType;
						}
					}
					thisDay++;
				} else {
					thiscell.innerHTML = "&nbsp;";
					thiscell.className = thisDayType;
				}
			}
		}
	}
}

function _forceDate(whichcal,date) {
	if (typeof whichcal == "string") {
		for (var i in _Calendars) {
			if (_Calendars[i]._name == whichcal) {
				var myc = _Calendars[i];
				break;
			}
		}
	} else {
		var myc = whichcal;
	}
	if (typeof date == "string") {
		var dd = new Date(date);
	} else {
		var dd = date;
	}
	dd.setHours(12);
	dd.setMinutes(0);
	dd.setSeconds(0);
	dd.setMilliseconds(0);
	myc._seldate = dd;
	if (myc._limited) {
		myc._limitStart = dd;
	}
	var mtxt = (myc._seldate.getMonth()+1)+"";
	if (mtxt.length==1) mtxt = "0"+mtxt;
	var dtxt = myc._seldate.getDate()+"";
	if (dtxt.length==1) dtxt = "0"+dtxt;
	document.getElementById(myc._name+"_textbox").value = _formatDate(dtxt + "/" + mtxt + "/" + myc._seldate.getFullYear(),myc._format);
}


function _clickCalItem(calname,y,m,d) {
	var caltbl = document.getElementById(calname+"_table");
//	_calHideAllCals(caltbl)
	_calHideAllCals(document.body);
	for (var i in _Calendars) {
		if (_Calendars[i]._name == calname) {
			var thiscal = i;
			break;
		}
	}
	_Calendars[thiscal]._seldate = new Date(y,m,d,12,0,0,0);
	_Calendars[thiscal]._date = new Date(y,m,d,12,0,0,0);
	var caltxt = document.getElementById(calname+"_textbox");
	var mtxt = (_Calendars[thiscal]._date.getMonth()+1)+"";
	if (mtxt.length==1) mtxt = "0"+mtxt;
	var dtxt = _Calendars[thiscal]._date.getDate()+"";
	if (dtxt.length==1) dtxt = "0"+dtxt;
	caltxt.value = _formatDate(dtxt + "/" + mtxt + "/" + _Calendars[thiscal]._date.getFullYear(),_Calendars[thiscal]._format);
	// Check special
	if (caltxt.getAttribute("special")=="force") {
		var mytarget = caltxt.getAttribute("tgt");
		_forceDate(mytarget,_Calendars[thiscal]._seldate);
	}
}

function _clickMonthItem() {
	var calname = this.id.substr(0,this.id.indexOf("_"));
	var mnum = this.id.substr(this.id.indexOf("_")+2);
	for (var i in _Calendars) {
		if (_Calendars[i]._name == calname) {
			var thiscal = i;
			break;
		}
	}
	_Calendars[thiscal]._date = new Date(_Calendars[thiscal]._date.getFullYear(),mnum,_Calendars[thiscal]._date.getDate(),12,0,0,0);
	document.getElementById(calname+"_months").style.display = "none";
	_fillCalendar(calname,true);
}

function _clickYearItem(calname,year) {
	for (var i in _Calendars) {
		if (_Calendars[i]._name == calname) {
			var thiscal = i;
			break;
		}
	}
	_Calendars[thiscal]._date = new Date(year,_Calendars[thiscal]._date.getMonth(),_Calendars[thiscal]._date.getDate(),12,0,0,0);
	document.getElementById(calname+"_years").style.display = "none";
	_fillCalendar(calname,true);
}

function _doNothing() {
}

function _docClick(e) {
	if (typeof e == "undefined" || e == null) {
		var source = event.srcElement;
	} else {
		var source = e.target;
	}
	var isone = false;
	for (var i=0;i<_Calendars.length;i++) {
		var ct = document.getElementById(_Calendars[i]._name+"_table"); 
		var cm = document.getElementById(_Calendars[i]._name+"_months"); 
		var cy = document.getElementById(_Calendars[i]._name+"_years"); 
		if (YKM.isChildOf(source,ct) || YKM.isChildOf(source,cm) || YKM.isChildOf(source,cy)) {
			isone = true; break;
		}
	}
	if (!isone) {
		_calHideAllCals(source);
	}
}

function _calHideAllCals(src) {
	for (var i=0;i<_Calendars.length;i++) {
		var ct = document.getElementById(_Calendars[i]._name+"_table"); 
		var cm = document.getElementById(_Calendars[i]._name+"_months"); 
		var cy = document.getElementById(_Calendars[i]._name+"_years"); 
		var tb = document.getElementById(_Calendars[i]._name+"_textbox"); 
		var ic = document.getElementById(_Calendars[i]._name+"_icon"); 
		if (!(YKM.isChildOf(src,ct) || YKM.isChildOf(src,cm) || YKM.isChildOf(src,cy) || src == tb || src == ic)) {
			ct.style.display = "none";
			cm.style.display = "none";
			cy.style.display = "none";
		} else {
		}
		if (_Calendars[i]._hide != null) {
			for (var j = 0; j < _Calendars[i]._hide.length; j++) {
				document.getElementById(_Calendars[i]._hide[j]).style.display = "";
			}
		}
	}
}
