function kk_getAnchorPosition(anchorname) {
var useWindow=false;
var coordinates=new Object();
var x=0;
var y=0;
var use_gebi=false;
var use_css=false;
var use_layers=false;
if (document.getElementById) {use_gebi=true;}
else if (document.all) {use_css=true;}
else if (document.layers) {use_layers=true;}
if (use_gebi&&document.all) {
x=kk_AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
y=kk_AnchorPosition_getPageOffsetTop(document.all[anchorname]);
}
else if (use_gebi) {
var o=document.getElementById(anchorname);
x=o.offsetLeft;
y=o.offsetTop;
}
else if (use_css) {
x=kk_AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
y=kk_AnchorPosition_getPageOffsetTop(document.all[anchorname]);
}
else if (use_layers) {
var found=0;
for (var i=0;i<document.anchors.length;i++) {
if (document.anchors[i].name==anchorname) {
found=1;
break;
}
}
if (found==0) {coordinates.x=0;coordinates.y=0;return coordinates;}
x=document.anchors[i].x;
y=document.anchors[i].y;
}
else {coordinates.x=0;coordinates.y=0;return coordinates;}
coordinates.x=x;
coordinates.y=y;
return coordinates;
}

function kk_getAnchorWindowPosition(anchorname) {
var coordinates=kk_getAnchorPosition(anchorname);
var x=0;
var y=0;
if (document.getElementById) {
if (isNaN(window.screenX)) {
x=coordinates.x-document.body.scrollLeft+window.screenLeft;
y=coordinates.y-document.body.scrollTop+window.screenTop;
}
else {
x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
}
}
else if (document.all) {
x=coordinates.x-document.body.scrollLeft+window.screenLeft;
y=coordinates.y-document.body.scrollTop+window.screenTop;
}
else if (document.layers) {
x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
}
coordinates.x=x;
coordinates.y=y;
return coordinates;
}

function kk_AnchorPosition_getPageOffsetLeft (el) {
var ol=el.offsetLeft;
while ((el=el.offsetParent)!=null) {ol+=el.offsetLeft;}
return ol;
}

function kk_AnchorPosition_getWindowOffsetLeft (el) {
var scrollamount=document.body.scrollLeft;
return kk_AnchorPosition_getPageOffsetLeft(el)-scrollamount;
}	

function kk_AnchorPosition_getPageOffsetTop (el) {
var ot=el.offsetTop;
while((el=el.offsetParent)!=null) {ot+=el.offsetTop;}
return ot;
}

function kk_AnchorPosition_getWindowOffsetTop (el) {
var scrollamount=document.body.scrollTop;
return kk_AnchorPosition_getPageOffsetTop(el)-scrollamount;
}

function kk_PopupWindow_getXYPosition(anchorname) {
var coordinates;
if (this.type=="WINDOW") {coordinates=kk_getAnchorWindowPosition(anchorname);}
else {coordinates=kk_getAnchorPosition(anchorname);}
this.x=coordinates.x;
this.y=coordinates.y;
}

function kk_PopupWindow_setSize(width,height) {
this.width=width;
this.height=height;
}

function kk_PopupWindow_populate(contents) {
this.contents=contents;
this.populated=false;
}

function kk_PopupWindow_refresh() {
if (this.divName!=null) {
if (this.use_gebi) {document.getElementById(this.divName).innerHTML=this.contents;}
else if (this.use_css) {document.all[this.divName].innerHTML=this.contents;}
else if (this.use_layers) {
var d=document.layers[this.divName];
d.document.open();
d.document.writeln(this.contents);
d.document.close();
}
}
else {
if (this.popupWindow!=null&&!this.popupWindow.closed) {
this.popupWindow.document.open();
this.popupWindow.document.writeln(this.contents);
this.popupWindow.document.close();
}
}
}

function kk_PopupWindow_showPopup(anchorname) {
this.getXYPosition(anchorname);
this.x+=this.offsetX;
this.y+=this.offsetY;
if (!this.populated&&(this.contents!="")) {
this.populated=true;
this.refresh();
}
if (this.divName!=null) {
if (this.use_gebi) {
document.getElementById(this.divName).style.left=this.x;
document.getElementById(this.divName).style.top=this.y;
document.getElementById(this.divName).style.visibility="visible";
}
else if (this.use_css) {
document.all[this.divName].style.left=this.x;
document.all[this.divName].style.top=this.y;
document.all[this.divName].style.visibility="visible";
}
else if (this.use_layers) {
document.layers[this.divName].left=this.x;
document.layers[this.divName].top=this.y;
document.layers[this.divName].visibility="visible";
}
}
else {
if (this.popupWindow==null || this.popupWindow.closed) {
if (screen&&screen.availHeight) {
if ((this.y+this.height)>screen.availHeight) {this.y=screen.availHeight-this.height;}
}
if (screen&&screen.availWidth) {
if ((this.x+this.width)>screen.availWidth) {this.x=screen.availWidth-this.width;}
}
this.popupWindow=window.open("about:blank","window_"+anchorname,"toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,resizable,alwaysRaised,dependent,titlebar=no,width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+"");
}
this.refresh();
}
}

function kk_PopupWindow_hidePopup() {
if (this.divName!=null) {
if (this.use_gebi) {document.getElementById(this.divName).style.visibility="hidden";}
else if (this.use_css) {document.all[this.divName].style.visibility="hidden";}
else if (this.use_layers) {document.layers[this.divName].visibility="hidden";}
}
else {
if (this.popupWindow&&!this.popupWindow.closed) {
this.popupWindow.close();
this.popupWindow=null;
}
}
}

function kk_PopupWindow_isClicked(e) {
if (this.divName!=null) {
if (this.use_layers) {
var clickX=e.pageX;
var clickY=e.pageY;
var t=document.layers[this.divName];
if ((clickX>t.left)&&(clickX<t.left+t.clip.width)&&(clickY>t.top)&&(clickY<t.top+t.clip.height)) {return true;}
else {return false;}
}
else if (document.all) {
var t=window.event.srcElement;
while (t.parentElement!=null) {
if (t.id==this.divName) {return true;}
t=t.parentElement;
}
return false;
}
else if (this.use_gebi) {
var t=e.originalTarget;
while (t.parentNode!=null) {
if (t.id==this.divName) {return true;}
t=t.parentNode;
}
return false;
}
return false;
}
return false;
}

function kk_PopupWindow_hideIfNotClicked(e) {
if (this.autoHideEnabled&&!this.isClicked(e)) {this.hidePopup();}
}

function kk_PopupWindow_autoHide() {this.autoHideEnabled=true;}

function kk_PopupWindow_hidePopupWindows(e) {
for (var i=0;i<popupWindowObjects.length;i++) {
if (popupWindowObjects[i]!=null) {
var p=popupWindowObjects[i];
p.hideIfNotClicked(e);
}
}
}

function kk_PopupWindow_attachListener() {
if (document.layers) {document.captureEvents(Event.MOUSEUP);}
window.popupWindowOldEventListener=document.onmouseup;
if (window.popupWindowOldEventListener!=null) {document.onmouseup=new Function("window.popupWindowOldEventListener();kk_PopupWindow_hidePopupWindows();");}
else {document.onmouseup=kk_PopupWindow_hidePopupWindows;}
}

function kk_PopupWindow() {
if (!window.popupWindowIndex) {window.popupWindowIndex=0;}
if (!window.popupWindowObjects) {window.popupWindowObjects=new Array();}
if (!window.listenerAttached) {
window.listenerAttached=true;
kk_PopupWindow_attachListener();
}
this.index=popupWindowIndex++;
popupWindowObjects[this.index]=this;
this.divName=null;
this.popupWindow=null;
this.width=0;
this.height=0;
this.populated=false;
this.visible=false;
this.autoHideEnabled=false;
this.contents="";
if (arguments.length>0) {
this.type="DIV";
this.divName=arguments[0];
}
else {this.type="WINDOW";}
this.use_gebi=false;
this.use_css=false;
this.use_layers=false;
if (document.getElementById) {this.use_gebi=true;}
else if (document.all) {this.use_css=true;}
else if (document.layers) {this.use_layers=true;}
else {this.type="WINDOW";}
this.offsetX=0;
this.offsetY=0;
this.getXYPosition=kk_PopupWindow_getXYPosition;
this.populate =kk_PopupWindow_populate;
this.refresh=kk_PopupWindow_refresh;
this.showPopup=kk_PopupWindow_showPopup;
this.hidePopup=kk_PopupWindow_hidePopup;
this.setSize=kk_PopupWindow_setSize;
this.isClicked=kk_PopupWindow_isClicked;
this.autoHide=kk_PopupWindow_autoHide;
this.hideIfNotClicked=kk_PopupWindow_hideIfNotClicked;
}

function kk_CalendarPopup() {
var newCalendar;
if (arguments.length>0) {newCalendar=new kk_PopupWindow(arguments[0]);}
else {
newCalendar=new kk_PopupWindow();
newCalendar.setSize(150,175);
}
newCalendar.offsetX=-152;
newCalendar.offsetY=25;
newCalendar.autoHide();
newCalendar.monthNames=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
newCalendar.dayHeaders=new Array("S","M","T","W","T","F","S");
newCalendar.returnFunction="tmpReturnFunction";
newCalendar.todayLabel="Today";
newCalendar.weekStartDay=0;
newCalendar.setReturnFunction=kk_CalendarPopup_setReturnFunction;
newCalendar.tmpReturnFunction=kk_CalendarPopup_tmpReturnFunction;
newCalendar.setTodayLabel=kk_CalendarPopup_setTodayLabel;
newCalendar.setMonthNames=kk_CalendarPopup_setMonthNames;
newCalendar.setDayHeaders=kk_CalendarPopup_setDayHeaders;
newCalendar.setWeekStartDay=kk_CalendarPopup_setWeekStartDay;
newCalendar.showCalendar=kk_CalendarPopup_showCalendar;
newCalendar.hideCalendar=kk_CalendarPopup_hideCalendar;
newCalendar.getStyles=kk_CalendarPopup_getStyles;
newCalendar.refreshCalendar=kk_CalendarPopup_refreshCalendar;
newCalendar.getCalendar=kk_CalendarPopup_getCalendar;
return newCalendar;
}

function kk_CalendarPopup_tmpReturnFunction(y,m,d) {alert('Use setReturnFunction() to define which function will get the clicked results!');}

function kk_CalendarPopup_setReturnFunction(name) {this.returnFunction=name;}

function kk_CalendarPopup_setTodayLabel(name) {this.todayLabel=name;}

function kk_CalendarPopup_setMonthNames() {
for (var i=0;i<arguments.length;i++) {this.monthNames[i]=arguments[i];}
}

function kk_CalendarPopup_setDayHeaders() {
for (var i=0;i<arguments.length;i++) {this.dayHeaders[i]=arguments[i];}
}

function kk_CalendarPopup_setWeekStartDay(day) {this.weekStartDay=day;}

function kk_CalendarPopup_hideCalendar() {
if (arguments.length>0) {window.popupWindowObjects[arguments[0]].hidePopup();}
else {this.hidePopup();}
}

function kk_CalendarPopup_refreshCalendar(index) {
var calObject=window.popupWindowObjects[index];
if (arguments.length>1) {calObject.populate(calObject.getCalendar(arguments[1],arguments[2]));}
else {calObject.populate(calObject.getCalendar());}
calObject.refresh();
}

function kk_CalendarPopup_showCalendar(anchorname) {
if (arguments.length>1) {this.populate(this.getCalendar(arguments[1],arguments[2]));}
else {this.populate(this.getCalendar());}
this.showPopup(anchorname);
}

function kk_CalendarPopup_getStyles() {
var result="";
result+="<STYLE>\n";
result+="TD.cal {font-family:arial; font-size: 8pt;}\n";
result+="TD.calmonth {font-family:arial; font-size: 8pt; text-align: right;}\n";
result+="TD.caltoday {font-family:arial; font-size: 8pt; text-align: right; color: white; background-color:#C0C0C0; border-width:1; border-type:solid; border-color:#800000;}\n";
result+="A.todaylink {font-family:arial; font-size: 8pt; height: 20px; color: black;}\n";
result+="A.cal {text-decoration:none; color:#000000;}\n";
result+="A.calthismonth {text-decoration:none; color:#000000;}\n";
result+="A.calothermonth {text-decoration:none; color:#808080;}\n";
result+="</STYLE>\n";
return result;
}

function kk_CalendarPopup_getCalendar() {
var now=new Date();
if (arguments.length>0) {
var paramValue=arguments[0];
if (typeof(paramValue)=="string") {
if (paramValue.charAt(0)=='0') {var month=parseInt(paramValue.substring(1,2));}
else {var month=parseInt(paramValue);}
}
else var month=paramValue;
}
else {var month=now.getMonth()+1;}
if (arguments.length>1) {var year=parseInt(arguments[1]);}
else {var year=now.getFullYear();}
var daysinmonth= new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
if (((year%4==0)&&(year%100!=0))||(year%400==0)) {
daysinmonth[2]=29;
}
var current_month=new Date(year,month-1,1);
var display_year=year;
var display_month=month;
var display_date=1;
var weekday= current_month.getDay();
var offset=0;
if (weekday>=this.weekStartDay) {offset=weekday-this.weekStartDay;}
else {offset=7-this.weekStartDay+weekday;}
if (offset>0) {
display_month--;
if (display_month<1) {display_month=12;display_year--;}
display_date=daysinmonth[display_month]-offset+1;
}
var next_month=month+1;
var next_month_year=year;
if (next_month>12) {next_month=1;next_month_year++;}
var last_month=month-1;
var last_month_year=year;
if (last_month<1) {last_month=12;last_month_year--;}
var date_class;
var result="";
if (this.type=="WINDOW") {var windowref="window.opener.";}
else {var windowref="";}
if (this.type=="WINDOW") {
result+="<HTML><HEAD><TITLE>Calendar</TITLE>"+this.getStyles()+"</HEAD><BODY MARGINWIDTH=0 MARGINHEIGHT=0 TOPMARGIN=0 RIGHTMARGIN=0 LEFTMARGIN=0>\n";
result+='<CENTER><TABLE WIDTH=100% BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>\n';
}
else {
result+='<TABLE WIDTH=144 BORDER=1 BORDERWIDTH=1 BORDERCOLOR="#808080" CELLSPACING=0 CELLPADDING=1>\n';
result+='<TR><TD ALIGN=CENTER>\n';
result+='<CENTER>\n';
result+='<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>\n';
}
result+='<TR BGCOLOR="#C0C0C0">\n';
result+='	<TD BGCOLOR="#C0C0C0" CLASS="cal" WIDTH=22 ALIGN=CENTER VALIGN=MIDDLE><B><A CLASS="cal" HREF="javascript:'+windowref+'kk_CalendarPopup_refreshCalendar('+this.index+','+last_month+','+last_month_year+');">&lt;&lt;</A></B></TD>\n';
result+='	<TD BGCOLOR="#C0C0C0" CLASS="cal" WIDTH=100 ALIGN=CENTER>'+this.monthNames[month-1]+' '+year+'</TD>\n';
result+='	<TD BGCOLOR="#C0C0C0" CLASS="cal" WIDTH=22 ALIGN=CENTER VALIGN=MIDDLE><B><A CLASS="cal" HREF="javascript:'+windowref+'kk_CalendarPopup_refreshCalendar('+this.index+','+next_month+','+next_month_year+');">&gt;&gt;</A></B></TD>\n';
result+='</TR></TABLE>\n';
result+='<TABLE WIDTH=120 BORDER=0 CELLSPACING=1 CELLPADDING=0 ALIGN=CENTER>\n';
result+='<TR>\n';
result+='	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>'+this.dayHeaders[(this.weekStartDay)%7]+'</TD>\n';
result+='	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>'+this.dayHeaders[(this.weekStartDay+1)%7]+'</TD>\n';
result+='	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>'+this.dayHeaders[(this.weekStartDay+2)%7]+'</TD>\n';
result+='	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>'+this.dayHeaders[(this.weekStartDay+3)%7]+'</TD>\n';
result+='	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>'+this.dayHeaders[(this.weekStartDay+4)%7]+'</TD>\n';
result+='	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>'+this.dayHeaders[(this.weekStartDay+5)%7]+'</TD>\n';
result+='	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>'+this.dayHeaders[(this.weekStartDay+6)%7]+'</TD>\n';
result+='</TR>\n';
result+='<TR><TD COLSPAN=7 ALIGN=CENTER></TD></TR>\n';
for (var row=1;row<=6;row++) {
result+='<TR>\n';
for (var col=1;col<=7;col++) {
if (display_month==month) {date_class="calthismonth";}
else {date_class="calothermonth";}
if ((display_month==now.getMonth()+1)&&(display_date==now.getDate())&&(display_year==now.getFullYear())) {
td_class="caltoday";
}
else {td_class="calmonth";}
result+='	<TD CLASS="'+td_class+'"><A HREF="javascript:'+windowref+this.returnFunction+'('+display_year+','+display_month+','+display_date+');'+windowref+'kk_CalendarPopup_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">'+display_date+'</A></TD>\n';
display_date++;
if (display_date>daysinmonth[display_month]) {
display_date=1;
display_month++;
}
if (display_month>12) {
display_month=1;
display_year++;
}
}
result+='</TR>';
}
result+='<TR><TD COLSPAN=7 ALIGN=CENTER></TD></TR>\n';
result+='<TR>\n';
result+='	<TD COLSPAN=7 ALIGN=CENTER>\n';
result+='		<A CLASS="todaylink" HREF="javascript:'+windowref+this.returnFunction+'(\''+now.getFullYear()+'\',\''+(now.getMonth()+1)+'\',\''+now.getDate()+'\');'+windowref+'kk_CalendarPopup_hideCalendar(\''+this.index+'\');">'+this.todayLabel+'</A>\n';
result+='		<BR>\n';
result+='	</TD></TR></TABLE></CENTER></TD></TR></TABLE>\n';
if (this.type=="WINDOW") {
result+="</BODY></HTML>\n";
}
return result;
}
