var rootdir="calendar/"      // directory to CSS file
var globalLang=""								// WARNING: if this is not empty, then it takes precedence

var now=new Date();
var currDay=now.getDate();
var currMonth=now.getMonth();
var currYear=now.getFullYear();
var w=230		// win width in px
var h=260		// win height in px
var calWin=false
var targetEltс;
var months,weekdays,lang,corr,nowStr,formatStr;
var monthsBG=new Array("Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември")
var monthsEN=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var weekdaysBG=new Array("Пн","Вт","Ср","Чт","Пт","Сб","Нд");
var weekdaysEN=new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
var popUpWin=false;

function openCalendar(target,format,lan){

	if (target==undefined){
		alert("Wrong parameter count for function 'openCalendar()'.\nUsage:\n\topenCalendar(target[,format[,mode]])")
		return
	}
	else if (typeof(target)!="object"){
		alert("Incorrect parameter type for first argument to function 'openCalendar()'.\n\nObject reference expected !")
		return
	}
	else if (target.type==undefined){
		alert("First argument to function 'openCalendar()' is not a reference to form control !")
		return
	}
	if (calWin!=false && !calWin.closed){
		calWin.close()
	}
	lan = globalLang!="" ? globalLang : lan;
	targetElt=target;
	if (typeof(event)!="object"){
		x=target.offsetLeft
		y=target.offsetTop
		x=window.screen.left+x+20
		y=window.screen.top+x+100
	}
	else {
		x=event.x
		y=event.y
		x=window.screenLeft+x+20							// +document.body.scrollLeft
		y=window.screenTop+y+20								// +document.body.scrollTop
	}
	formatStr= format==undefined ? "YYYY-MM-DD" : format;
	if (screen.width-x <= w+50){
		x=x-w-20;
	}
	if (screen.height-y <= h+50){
		y=y-h-20;
	}
	setLanguage(lan);
	calWin=window.open("","","left="+x+",top="+y+",width="+w+",height="+h+",toolbar=0,status=0,scrollbars=0")
	writeCalendar(currMonth,currYear);
}

function writeCalendar(month,year){
	var chDate=new Date(year,month,1);
	var weekDay=chDate.getDay();
	var thisMonth=month;
	var boundDate=new Date(year,month-1,1);
		prYear=boundDate.getFullYear()
		prMonth=boundDate.getMonth()
	var boundDate=new Date(year,month+1,1);
		nxYear=boundDate.getFullYear()
		nxMonth=boundDate.getMonth()
	var html =""
	html = "<html><title>"+months[currMonth]+", "+currYear+"</title>"
		 + "<meta http-equiv='Content-Type' content='type=text/html;charset=utf-8'>"
		 + "<link rel='stylesheet' href='"+rootdir+"/calendar.css'>"
		 + "<body style='overflow:hidden'>"
	html += "<table width='100%' class='header'><tr><th align='right' colspan='3'>"+months[month]+", "+year+"</th></tr></table>"
		 + "<hr size=1><table width='100%' class='cal_table'  height='60%'><tr align='center'>"; 
	var classStr=""
	var nowSty="";
	if (corr==1 && weekDay==0) {
		weekDay=7;
	}
	for (i=0;i<=6;i++){
		if ((corr==1 && (i==5||i==6)) || (corr==0 && (i==0||i==6))){
			classStr="sundays";
		}
		else {
			classStr="weekdays"
		}
		html += "<td class='"+classStr+"'>"+weekdays[i]+"</td>";
	}
	html += "</tr>"
	d=0;
	html += "<tr align='center'>"
	for (i=0; i<weekDay-corr;i++){
		html += "<td>&nbsp;</td>";
		d++;
	}
	c=0
	for (i=1; i<=7-d; i++){
		chDate=new Date(year,month,i)
		if (chDate.getDay()==0 || chDate.getDay()==6){
			classStr="sundates";
		}
		else {
			classStr="weekdates"
		}
		if (i== currDay && month==currMonth && year==currYear) {
			nowSty="style='font-weight:bold'"
		}
		else {
			nowSty=""
		}
		html += "<td onclick='opener.giveDate("+i+","+month+","+year+")' class='"+classStr+"' "+nowSty+">"+i+"</td>";
		c=i;
	}
	html += "</tr>"
	for (j=0,i=c+1; i<=31; i++,j++){
		chDate=new Date(year,month,i)
		thisMonth = chDate.getMonth()
		if (chDate.getDay()==0 || chDate.getDay()==6){
			classStr="sundates";
		}
		else {
			classStr="weekdates"
		}
		if (thisMonth == month){
			if (j%7==0){
				html += "</tr><tr class='dates' align='center'>"
			}
			if (i== currDay && month==currMonth && year==currYear) {
				nowSty="style='font-weight:bold'"
			}
			else {
				nowSty=""
			}
			html += "<td onclick='opener.giveDate("+i+","+month+","+year+")' class='"+classStr+"' "+nowSty+">"+i+"</td>"
		}
	}
	html += "</tr><tr><td colspan='7' height='10%'></tr></table><hr size=1 height=1><table width='100%' class='nav_table' cellpadding=4 cellspacing=0>"
		 + "<tr bgcolor='#DCDCDC'><td width='40%' class='nav' align='left' onclick='opener.writeCalendar("+prMonth+","+prYear+")'>"+months[prMonth]+","+prYear.toString().substr(2)+"</td>"
		 + "<td width='20%' class='nav_now' align='center' onclick='opener.writeCalendar("+currMonth+","+currYear+")'>"+nowStr+"</td>"
		 + "<td width='40%' class='nav' align='right' onclick='opener.writeCalendar("+nxMonth+","+nxYear+")'>"+months[nxMonth]+","+nxYear.toString().substr(2)+"</td>"
		 + "</tr>"
		 + "<tr><td width='40%' class='nav' align='left' onclick='opener.writeCalendar("+month+","+(year-1)+")'><b>&lt;</b> "+(year-1)+"</td>"
		 + "<td width='20%' class='nav_now' align='center'>&nbsp;</td>"
		 + "<td width='40%' class='nav' align='right' onclick='opener.writeCalendar("+month+","+(year+1)+")'>"+(year+1)+" <b>&gt;</b></td>"
		 +"</tr></table></body></html>"
	
	var calDoc=calWin.document.open("text/html");
	calWin.document.write(html)
	calWin.document.title=months[month]+", "+year
	calWin.document.close()

}

function giveDate(day,month,year){
	targetElt.value=formatDate(day,month+1,year)
	calWin.close()
}

function setLanguage(lang){			// EN,BG
	if (lang=="BG" || lang=="bg"){
		months=monthsBG;
		weekdays=weekdaysBG;
		lang="BG";
		corr=1
		nowStr="Днес"
	}
	else {
		months=monthsEN;
		weekdays=weekdaysEN;
		lang="EN";
		corr=0
		nowStr="Now"
	}
}

function formatDate(day,month,year){
	var chunks=new Array()
	var re=new RegExp("([^a-zA-Z]+)","g")
	if (formatStr.indexOf("/")!=-1){
		sep="/";
		formatStr=formatStr.replace("/","-")
	}
	else {
		if ((arr = re.exec(formatStr)) != null){
			sep=arr[1];
		}
		else {
			sep = "-"
		}
	}
	formatStr=formatStr.replace(re,"-")
	temp=formatStr.toLowerCase()
	
	fday = day<10 ? "0"+day : day
	fmonth = month<10 ? "0"+month : month
	syear = year.toString().substr(2)
	var dateStr=""
	switch (temp){
		case "dd-mm-yyyy":
			dateStr = fday+sep+fmonth+sep+year
		break;
		case "dd-mm-yy":
			dateStr = fday+sep+fmonth+sep+syear
		break;
		case "d-m-yyyy":
			dateStr = day+sep+month+sep+year
		break;
		case "d-m-yy":
			dateStr = day+sep+month+sep+syear
		break;
		case "yyyy-mm-dd":
			dateStr = year+sep+fmonth+sep+fday
		break;
		case "yyyy-m-d":
			dateStr = year+sep+month+sep+day
		break;
		case "yy-mm-dd":
			dateStr = syear+sep+fmonth+sep+fday
		break;
		case "yy-m-d":
			dateStr = syear+sep+month+sep+day
		break;
		default:
			sep= "-"
			dateStr = year+sep+fmonth+sep+fday
		break
	}
	return dateStr;
}

