// +------------------------------------------------------------+
// |                   Lyered Popup Calendar                    |
// +------------------------------------------------------------+
// | Last Modified:             14-Aprc-2007                    |
// | Web Site:                  http://www.b2netsolutions.com   |
// | Creator:                   Victor Yunevich aka Veter       |
// | EMail:                     victor@b2netsolutions.com       |
// +------------------------------------------------------------+
// |       Copyright 2007  B2NetSolutions                .      |
// +------------------------------------------------------------+

// default settings
var showMonths = 20;
var fontFace="verdana";
var fontSize=9;

var titleHeight=23;
var dayWidth=24;
var dayDigits=1;

var titleColor="#6b87b6";
var daysColor="#ffffff";
var bodyColor="#ffffff";
var dayColor="#fff";
var dayHoverColor="#d7dce8";
var currentDayColor="#000";
var footColor="#cccccc";
var monthsBorderColor="#d7dce8";
var borderColor="#6b87b6";

var titleFontColor = "#fff";
var daysFontColor = "#3b80da";
var dayFontColor = "#000000";
var currentDayFontColor = "#cc0000";
var inactiveDayFontColor = "#ccc";
var footFontColor = "#333333";

var calFormat = "yyyy/mm/dd";

var weekDay = 0;

// ------

// codes
var calWidth=200, calHeight=200, calOffsetX=-200, calOffsetY=16;
var calWin=null;
var winX=0, winY=0;
var cal="cal";
var cals=new Array();
var currentCal=null;

var yxMonths=new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var yxDays=new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
var yxLinks=new Array("[close]", "[clear]");

var nav=navigator.userAgent.toLowerCase();;
var isOpera=(nav.indexOf("opera")!=-1)?true:false;
var isOpera5=(nav.indexOf("opera 5")!=-1 || nav.indexOf("opera/5")!=-1)?true:false;
var isOpera6=(isOpera && parseInt(navigator.appVersion)>=6)?true:false;
var isN6=(nav.indexOf("gecko")!=-1);
var isN4=(document.layers)?true:false;
var isMac=(nav.indexOf("mac")!=-1);
var isIE=(document.all && !isOpera && (!isMac || navigator.appVersion.indexOf("MSIE 4")==-1))?true:false;


function addCalendar(name, title, field, form) {
	cals[cals.length] = new calOBJ(name, title, field, form);
}


function getDayName(y,m,d) {
	var wd=new Date(y,m,d);
	return yxDays[wd.getDay()].substring(0,3);
}

function getMonthFromName(m3) {
	for (var i = 0; i < yxMonths.length; i++) {
		if (yxMonths[i].toLowerCase().substring(0,3) == m3.toLowerCase()) {
			return i;
		}
	}

	return 0;
}

function getDateNumbers(date) {
	var y, m, d;

	var yIdx = calFormat.search(/yyyy/i);
	var mIdx = calFormat.search(/mm/i);
	var m3Idx = calFormat.search(/mon/i);
	var dIdx = calFormat.search(/dd/i);

	y=date.substring(yIdx,yIdx+4)-0;
	if (mIdx != -1) {
		m=date.substring(mIdx,mIdx+2)-1;
	}
	else {
		var m = getMonthFromName(date.substring(m3Idx,m3Idx+3));
	}
	d=date.substring(dIdx,dIdx+2)-0;

	return new Array(y,m,d);
}

function lastDay(d) {
	var yy=d.getFullYear(), mm=d.getMonth();
	for (var i=31; i>=28; i--) {
		var nd=new Date(yy,mm,i);
		if (mm == nd.getMonth()) {
			return i;
		}
	}
}

function firstDay(d) {
	var yy=d.getFullYear(), mm=d.getMonth();
	var fd=new Date(yy,mm,1);
	return fd.getDay();
}

function dayDisplay(i) {
	if (dayDigits == 0) {
		return yxDays[i];
	}
	else {
		return yxDays[i].substring(0,dayDigits);
	}
}

function calTitle(d) {
	var yy=d.getFullYear(), mm=yxMonths[d.getMonth()];
	var s;

	s="<tr align='center'><td colspan='7' style='color:"+titleFontColor+"' height='"+titleHeight+"'><nobr><b>"+mm+" "+yy+"</b></nobr></td></tr><tr align='center' bgcolor='"+daysColor+"'>";

	for (var i=weekDay; i<weekDay+7; i++) {
		s+="<td width='"+dayWidth+"' valign='bottom' style='font-weight:bold;color:"+daysFontColor+"'>"+dayDisplay(i)+"</td>";
	}

	s+="</tr>";

	return s;
}

function calHeader() {
	return "<table align='center' border='0' cellspacing='0' cellpadding='0' bgcolor='"+titleColor+"'><tr><td>\n<table cellspacing='0' cellpadding='0' border='0' style='border-left:1px solid "+monthsBorderColor+";border-bottom:1px solid "+monthsBorderColor+"'>";
}

function calFooter() {
	return "</table>\n</td></tr></table>";
}

function calBody(d,day,name) {
	var s="", dayCount=1, fd=firstDay(d), ld=lastDay(d);
	var now= new Date();
	var curYear = now.getFullYear();
	var curMonth = now.getMonth();
	var curDay = now.getDate();

	if (weekDay > 0 && fd == 0) {
		fd = 7;
	}

	for (var i=0; i<6; i++) {
		s+="<tr height='20' align='center' bgcolor='"+bodyColor+"'>";
		for (var j=weekDay; j<weekDay+7; j++) {
			if (i*7+j<fd || dayCount>ld) {
				s+="<td>&nbsp;</td>";
			}
			else {
				var	dateColor = dayFontColor;
				if (dayCount==day) {
					dateColor = currentDayFontColor;
				}
				if (dayCount<curDay && cY==curYear && cM==curMonth+1){
					s+="<td style='color:"+inactiveDayFontColor+";font-weight:bold'>"+(dayCount++)+"</td>";
				} else {
					s+="<td onmouseover='this.style.background=\""+dayHoverColor+"\"' onmouseout='this.style.background=\""+dayColor+"\"' onclick='setfdate("+dayCount+","+cM+","+cY+",\""+name+"\")' style='color:"+dateColor+";cursor:pointer;font-weight:bold'>"+(dayCount++)+"</td>";
				}

			}
		}
		s+="</tr>";
	}

	return s;
}


function checkBrowser(){
	this.ver=navigator.appVersion
	this.dom=document.getElementById?1:0
	this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
	this.ie4=(document.all && !this.dom)?1:0;
	this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
	this.ns4=(document.layers && !this.dom)?1:0;
	this.bw=(this.ie5 || this.ie4 || this.ns4 || this.ns5)
	return this
}

var bw=new checkBrowser()

var curnum = 0;		
var prevpos = 0;
var calcont = '';		
var caldiv = '';		
var caltab = '';		
var prevlink = '';		
var nextlink = '';		
var datefield = '';		
		

function getPosition(box){
	var	curleft = box.style.left;
	return curleft.substr(0,curleft.search('[^p]*$')-1);
}

function nextMos(){
	
	var tabWidth = caltab.offsetWidth;
	curv = getPosition(caldiv);
	if(curnum==0){
		prevpos=curv;
	}
	curnum +=26;	
	pos = curv - 26;
	if(pos<=-1 && curnum<=169 && (pos+tabWidth)>=333){
		caldiv.style.left = pos + 'px';
		setTimeout('nextMos()','1');
	} else {
		var rest = curv-prevpos + 169;
		if(rest>0 && (pos+tabWidth)>=320){
			pos = curv - rest;
			caldiv.style.left = pos + 'px';
		}
		curnum = 0;
	}
	if((pos+tabWidth)<=320){
		nextlink.style.display='none';
	}
	prevlink.style.display='inline';

}

function prevMos(){
	var pos = 0;
	curv = getPosition(caldiv);
	
	if(curnum==0){
		prevpos=curv;
	}	
	curnum +=26;	
	pos = curv - (-26);
	if(pos<=-1 && curnum<=169){
		caldiv.style.left = pos + 'px';
		setTimeout('prevMos()',0);
	} else {
		var rest = curv-prevpos - 169;
		if(rest<0 && rest>-50){
			pos = curv - rest;
			caldiv.style.left = pos + 'px';
			if(pos>=-2){
				prevlink.style.display='none';
			}
		}
		curnum = 0;
	}
	if(pos>=-2){
		prevlink.style.display='none';
	}
	nextlink.style.display='inline';
}

function setfdate(sday,smo,sy,name){
	jd = get2Digits(sday);
	jm = get2Digits(smo);
	datefield.value= jd+"-"+jm+"-"+sy;
	calcont.style.visibility='hidden';
}

function showCal(name) {
	calcont = bw.dom?document.getElementById('cont' + name):bw.ie4?document.all['cont' + name]:bw.ns4?eval(nest+'document.cont'+name):0;;
	caldiv = bw.dom?document.getElementById('call' + name):bw.ie4?document.all['call' + name]:bw.ns4?eval(nest+'document.call'+name):0;;
	caltab = bw.dom?document.getElementById('mtab' + name):bw.ie4?document.all['mtab' + name]:bw.ns4?eval(nest+'document.mtab'+name):0;;
	prevlink = bw.dom?document.getElementById('prev' + name):bw.ie4?document.all['prev' + name]:bw.ns4?eval(nest+'document.prev'+name):0;;
	nextlink = bw.dom?document.getElementById('next' + name):bw.ie4?document.all['next' + name]:bw.ns4?eval(nest+'document.next'+name):0;;
	datefield = bw.dom?document.getElementById(name):bw.ie4?document.all[name]:bw.ns4?eval(nest+'document.'+name):0;;
	calcont.style.visibility='visible';
}

function closeCal(name) {
	calcont.style.visibility='hidden';
}

function createCal(name) {
	var d=new Date();

	cY=d.getFullYear();
	cM=d.getMonth();
	dd=d.getDate();


	document.write("<div id='cont"+ name +"' style='background:#fff;position:absolute;border:1px solid "+borderColor+"; width:336px; overflow:hidden; z-index:1; visibility:hidden'>");
	document.write("<div id='call"+ name +"' style='position:relative;left:-2px;width:20000px'><table id='mtab"+ name +"' border='0' cellspacing='0' cellpadding='0'><tr>");
	for(i=0;i<=showMonths;i++){
		d=new Date(cY,cM);
		cY=d.getFullYear();
		cM=cM+1;
		if(cM>12){cM=1;}
		if(i==0){
			dd=dd;
		} else {
			dd = 0;
		}

		var calendar=calHeader()+calTitle(d)+calBody(d,dd,name)+calFooter();
		document.write('<td>' + calendar + '</td>');
	}

	document.write("</tr></table></div><table width='95%' align='center' border='0' cellspacing='0' cellpadding='0'><tr><td  width='33%'>&nbsp;<a id='prev"+ name +"' style='display:none'  href='javascript:prevMos()'>Prev</a><td height='25' align='center'><a href='javascript:closeCal(\""+ name +"\")'>close</a></td><td width='33%' align='right'><a id='next"+ name +"'  href='javascript:nextMos()'>Next</a></td></tr></table></div>");

}

function get2Digits(n) {
	return ((n<10)?"0":"")+n;
}


function getCurrentDate() {
	var date=calFormat, d = new Date();
	date = date.replace(/yyyy/i, d.getFullYear());
	date = date.replace(/mm/i, get2Digits(d.getMonth()+1));
	date = date.replace(/dd/i, get2Digits(d.getDate()));

	return date;
}

