var o_navigator = navigator.userAgent.toLowerCase();
var isMacIE = (o_navigator.indexOf("msie 5")>-1&&o_navigator.indexOf("mac")>-1) ? 1 : 0;
var isPCIE = (o_navigator.indexOf("msie")>-1&&!isMacIE&&o_navigator.indexOf("opera")==-1) ? 1 : 0;
var isOpera = o_navigator.indexOf("opera")>-1 ? 1 : 0;
var isKHTML = o_navigator.indexOf("khtml")>-1 ? 1 : 0;
var mArray = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var dArray = new Array("Su","Mo","Tu","We","Th","Fr","Sa");
var datesArray = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var today = new Date(); //todays date
var cD = today.getDay(); //current day of week 0-6
var cT = today.getDate(); //current day 1-31
var cM = today.getMonth(); //current month 0-11
var cMDs = datesArray[cM]; //number of days in current month
var cY = today.getFullYear(); //js method not used here//current Year
var newT = cT; //cal selected date
var newM = cM; //cal selected month
var newY = cY; //cal selected year
var newDs = cMDs; //days for selected Month
var newD = cD; //day of week
var numCalendars = 2; //number of calendars you want to create
var calDirection = "horizontal"; //put "horizontal" or "vertical"
var calopen = 0; //boolean set state of iframe "0" closed "1" open;
var o_windowparent = top; //set parent frame
var o_input = 0;
var o_month = 0; var o_date = 0;
var o_iframecal = 0;
var o_from;var o_to;var v_from;var v_to;
var d_makefrom=0; var d_maketo=0;var s_lang="us";
var o_currentDate = false;
var i_firstMonth = cM;
var i_sfirstYear = cY; var i_sfirstMonth = cM;
var i_ofirstYear = cY; var i_ofirstMonth = cM;
var b_calinit = 0;
var o_row = null;
var i_numcal = 0;
var o_calbody = null; //where to write the calendar
var s_jscall = (isPCIE)? "parent." : "";
var s_closecal = "
";
var b_date331 = 0;
var a_input = 0;
var o_parent;
var s_inputtype = "object"; //for text input or select list input
var a_v_input = null;
var clear=null;
var divdis=null;
function findFirstDay(){
firstDay = new Date();
firstDay.setDate(1);
firstDay.setMonth(newM);
firstDay.setFullYear(newY);
return firstDay.getDay();
}
function check331(d_date){
i_date331 = Math.floor((d_date-today)/86400000);
b_check331 = (i_date331>330) ? 1 : 0;
return b_check331;
}
function vm_setupCal(){
i_numcal = 0;
vm_makeCal(cM);
}
function preventClose(evt){
if(isKHTML||isOpera)evt.stopPropagation();
}
function ty_makeDate(which){
d_makedate = new Date(newY,newM,which);
b_date331 = check331(d_makedate);
if((cT>which && cM == newM && cY == newY)||b_date331){
s_makeDate = "";
s_makeDate+= which;
}else{
if(d_makefrom||d_maketo){
s_makeDate = ((d_makedate.toString()==d_makefrom.toString())||(d_makedate.toString()==d_maketo.toString())) ? " " : (d_makedate>d_makefrom&&d_makedate" : "";
}else{
s_makeDate = " ";
}
s_makeDate+= "";
s_makeDate+= which;
s_makeDate+=" ";
}
s_makeDate+=" \n";
return s_makeDate;
}
function ty_maketr(what){
s_tr = "\n";
s_tr+= what;
s_tr+= " \n";
return s_tr;
}
function ty_changeMonths(which){
i_numcal = 0;
o_calbody.innerHTML ="";
if(which < 0){
which=11;
newY--;
}
vm_makeCal(which);
}
function vm_makeCal(whichMonth){
b_calinit = 1;
o_cal= "";
o_caltr="";o_caltd="";
newM = whichMonth;
if(newM < cM) newY = cY+1;
if (newM>=12){
newM=whichMonth-12;
newY++;
}
if(i_numcal==0){
i_firstMonth = newM
switch(s_inputtype){
case "object":
i_ofirstMonth = newM;
i_ofirstYear = newY;
break;
default:
i_sfirstMonth = newM;
i_sfirstYear = newY;
}
}
newDs = datesArray[newM];
isLeap = (newY % 4 == 0 && (newY % 100 !=0 || newY % 400 ==0 )) ? 1:0
if (newM==1) newDs=newDs+isLeap;
newD = findFirstDay();
countDay = newD;
s_calclass = (calDirection=="vertical")? "calTableV" : "calTableH";
o_cal+="\n";
o_caltr+= "\n";
o_caltd+= "";
o_caltd+= mArray[newM]+" "+newY;
o_caltd+= " ";
o_caltr+=o_caltd;
o_caltr+=" \n";
o_cal+=o_caltr;
o_caltd = "";
for(i=0;i < dArray.length;i++){
o_caltd+="";
o_caltd+=dArray[i];
o_caltd+=" \n";
}
o_caltr = ty_maketr(o_caltd);
o_cal+=o_caltr;
o_caltd = "";
i_calRows = 0;
for (d=1;d<=newDs;d++){
if(d==1)for(bd=0;bd < newD;bd++)o_caltd += " \n";
o_caltd += ty_makeDate(d);
countDay++;
if(countDay==7){
countDay=0;
o_caltr = ty_maketr(o_caltd);
o_cal+=o_caltr;
o_caltd = "";
i_calRows++
}
if(d==newDs && countDay!=0){
for (bd=countDay;bd < 7;bd++) o_caltd += " \n";
o_caltr = ty_maketr(o_caltd);
o_cal+=o_caltr;
o_caltd ="";
i_calRows++
}
}
if(i_calRows < 6){
o_caltd = "";
for(bd=0;bd < 7;bd++) o_caltd += " \n";
o_caltr = ty_maketr(o_caltd);
o_cal+= o_caltr;
}
o_cal+="
";
o_calbody.innerHTML += (i_numcal==0) ? (newM==cM&&newY==cY) ? s_closecal+" " : s_closecal+"previous month " : "";
o_calbody.innerHTML += o_cal;
i_numcal++;
if(i_numcal==numCalendars&&!(newM==cM-1)&&!b_date331)o_calbody.innerHTML+= "next month "
if(i_numcal < numCalendars)vm_makeCal(newM+1);
else if (i_firstMonth > newM){
newY--;
}
}
function ty_setDate(whatMonth,whatDate,whatTD,whatYear){
o_currentDate = whatTD;
o_currentDate.className = "calDateSel";
if(typeof(o_input)=="object"){
var Month=whatMonth+1;
var Year=whatYear;
var Day=whatDate;
Month=Month.toString().length>1?Month:"0"+Month;
Year=Year.toString().length>1?Year:"0"+Year;
Day=Day.toString().length>1?Day:"0"+Day;
//o_input.value = (s_lang=="us") ? Month+"/"+Day+"/"+Year : Day+"/"+Month+"/"+Year;
o_input.value=Day+"/"+Month+"/"+Year;
if(o_input.value!='')
document.getElementById(clear).innerHTML='';
if(divdis!=null)
document.getElementById(divdis).style.display='none';
//o_input.onchange();
//maintainState(o_input);
}else{
document.getElementById(a_v_input[0]).selectedIndex = whatMonth;
document.getElementById(a_v_input[1]).selectedIndex = whatDate-1;
adjDate(document.getElementById(a_v_input[0]).form);
}
closeCal();
}
function hideCalendar(){
o_caldiv.style.display = "none"
if(o_parent) o_parent.className = "cbrow"
}
function splitDate(s_input, s_mode){
this.delimitor = (s_input.indexOf("/")>-1) ? "/" : (s_input.indexOf(".")>-1) ? "." : (s_input.indexOf("-")>-1) ? "-" : (s_input.indexOf(",")>-1) ? "," : "/";
a_input = s_input.split(this.delimitor);
this.date = -1;this.month = -1;this.year = -1;
if(a_input.length==3&&!isNaN(a_input[0])&&!isNaN(a_input[1])&&!isNaN(a_input[2])){
//this.month = (s_mode=="us") ? parseInt(a_input[0],10)-1 : parseInt(a_input[1],10)-1;
this.month = (s_mode=="us") ? parseInt(a_input[1],10)-1 : parseInt(a_input[0],10)-1;
this.date = (s_mode=="us") ? parseInt(a_input[0],10) : parseInt(a_input[1],10);
this.year = a_input[2];
if(this.month>11||this.month<0)this.month=-1;
if(this.date>31||this.month<0)this.date=-1;
i_yrlength = this.year.toString().length;
if(i_yrlength==2)this.year = "20"+this.year;//fix this in the next 96 years...
if(i_yrlength<1||i_yrlength==3||this.year";
s_iecalcss = " ";
o_califrame = document.getElementById("calframe");
calframe.document.open();
calframe.document.write(""+s_iecalcss+"");
calframe.document.close();
}
i_numcal = 0;
if(isPCIE)document.getElementById("calframe").className="calframe";
o_calbody = (isPCIE) ? calframe.document.getElementById(s_cal) : document.getElementById(s_cal);
o_calbody.innerHTML="";
o_udate = (typeof(o_input)=="object") ? new splitDate(o_input.value,'us') : new splitDate(buildDate(o_input),'us') ;
a_from = s_from.split("|");
v_from = (a_from.length==1) ? new splitDate(document.getElementById(s_from).value,s_mode) : new splitDate(buildDate(s_from),s_mode);
a_to = s_to.split("|");
v_to = (a_to.length==2) ? new splitDate(buildDate(s_to),s_mode) : (document.getElementById(s_to)) ? new splitDate(document.getElementById(s_to).value,s_mode) : new splitDate("",s_mode);
d_makefrom = (v_from.month!=-1) ? new Date(v_from.year,v_from.month,v_from.date) : 0;
d_maketo = (v_to.month!=-1) ? new Date(v_to.year,v_to.month,v_to.date) : 0;
switch(b_calinit){
case 0:
if(o_udate.month!=-1&&o_udate.year!=-1&&o_udate.date!=-1){
newY=o_udate.year;
newM=o_udate.month;
newD=o_udate.date;
vm_makeCal(o_udate.month);
}else if(o_udate!=document.getElementById(s_from)&&d_makefrom){
newY=v_from.year;
newM=v_from.month;
newD=v_from.date;
vm_makeCal(v_from.month);
}else if(o_udate!=document.getElementById(s_to)&&d_maketo){
newY=v_to.year;
newM=v_to.month;
newD=v_to.date;
vm_makeCal(v_to.month);
}else{
newY=cY;newM=cM;newD=cD;
vm_makeCal(cM);
}
break;
default:
switch(s_inputtype){
case "object":
newM = i_ofirstMonth;
newY = i_ofirstYear;
break;
default:
newM = i_sfirstMonth;
newY = i_sfirstYear;
}
vm_makeCal(newM);
}
s_lastinputtype = typeof(o_input);
}
function openCal(v_input,s_from,s_to,s_cal,s_parent,s_mode,s_caldir){
//alert('1111');
if(o_parent) o_parent.className = "cbrow";//(s_inputtype=="object") ? "cbcalrow" : "cbrow";
clearTimeout(t_calcloser);
s_inputtype = typeof(v_input);
a_v_input = null;
if(s_inputtype!="object") a_v_input = v_input.split("|");
calopen = 0;
o_caldiv = document.getElementById(s_cal);
o_caldiv.style.display = "block";
o_caldiv.className = "calboxon";
makeCalendar(v_input,s_from,s_to,s_mode,s_cal);
//get objects
o_inputright = (s_inputtype!="object") ? document.getElementById(a_v_input[1]) : v_input;
o_parent = document.getElementById(s_parent);
o_cal = document.getElementById(s_cal);
o_parent.className+=" cbrowon";
i_calx = parseInt(o_inputright.offsetParent.offsetLeft)+parseInt(o_inputright.offsetParent.offsetWidth);
//alert('tagName:'+o_parent.tagName+'|tagName:'+o_parent.offsetParent.tagName);
i_caly = parseInt(o_parent.offsetParent.offsetTop)+(parseInt(o_parent.offsetParent.offsetHeight)/2)-(parseInt(o_cal.offsetParent.offsetHeight)/2);
o_cal.style.top = (i_caly>0) ? i_caly+"px" : "0px";
o_cal.style.left = i_calx+"px";
setTimeout("calopen = 1",10);
}
function openCaltable(v_input,s_from,s_to,s_cal,s_parent,s_mode,s_caldir,clearinner,divdisin){
if(o_parent) o_parent.className = "cbrow";//(s_inputtype=="object") ? "cbcalrow" : "cbrow";
clearTimeout(t_calcloser);
s_inputtype = typeof(v_input);
a_v_input = null;
clear=clearinner;
if(divdisin!=undefined)
{divdis=divdisin;}
if(s_inputtype!="object") a_v_input = v_input.split("|");
calopen = 0;
o_caldiv = document.getElementById(s_cal);
o_caldiv.style.display = "block";
o_caldiv.className = "calboxon";
makeCalendar(v_input,s_from,s_to,s_mode,s_cal);
//get objects
o_inputright = (s_inputtype!="object") ? document.getElementById(a_v_input[1]) : v_input;
o_parent = document.getElementById(s_parent);
o_cal = document.getElementById(s_cal);
o_parent.className+=" cbrowon";
//if(isPCIE)
//{
// i_calx = parseInt(getFinParent(o_inputright).offsetLeft)+parseInt(getFinParent(o_inputright).offsetWidth);
//}
//else
//{
// i_calx = parseInt(getFinParent(o_inputright).offsetLeft)+parseInt(getFinParent(o_inputright).offsetWidth)-256;
//}
//i_calx = parseInt(getElementPos(o_inputright).x)+o_inputright.offsetWidth;
i_calx = parseInt(getElementPos(o_inputright).x);
i_caly = parseInt(getElementPos(o_inputright).y);
//getFinParent(o_cal);
//alert('111111111111');
//return;
//alert('tagName:'+o_parent.tagName+'|tagName:'+getFinParent(o_parent).tagName+"|tagName:"+getFinParent(o_cal).tagName);
//alert('offsetTop:'+getFinParent(o_parent).offsetTop+'|offsetHeight:'+getFinParent(o_parent).offsetHeight+'|offsetHeight:'+getFinParent(o_cal).offsetHeight);
//i_caly = parseInt(getFinParent(o_parent).offsetTop)+(parseInt(getFinParent(o_parent).offsetHeight)/2)-(parseInt(getFinParent(o_cal).offsetHeight)/2);
//alert("i_calx:"+getFinParent(o_inputright).offsetLeft+"|i_caly:"+getFinParent(o_parent).offsetTop);
//alert("x:"+o_inputright.offsetLeft+"|y:"+o_parent.offsetTop);
o_cal.style.top = (i_caly>0) ? i_caly+"px" : "0px";
o_cal.style.left = i_calx+"px";
//alert(o_cal.style.top+"|"+o_cal.style.left);
setTimeout("calopen = 1",10);
}
function closeCal(){
if(o_caldiv&&calopen)t_calcloser = setTimeout("hideCalendar()",500);
calopen=0;
}
function getFinParent(childelement)
{
var parentelement;
var tmp;
parentelement=childelement.offsetParent;
var s='';
while(parentelement!=null)
{
tmp=parentelement;
s+=tmp.tagName;
// if(tmp.tagName.toLowerCase() == "table")
// {
// return tmp.offsetParent;
// }
parentelement=parentelement.offsetParent;
}
alert('s:'+s);
return tmp;
}
function getElementPos(elementId) {
var ua = navigator.userAgent.toLowerCase();
var isOpera = (ua.indexOf('opera') != -1);
var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof
var el = elementId;
if(el.parentNode ==null || el.style.display == 'none')
{
return false;
}
var pos = [];
var box;
if(el.getBoundingClientRect) //IE
{
box = el.getBoundingClientRect();
var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);return {x:box.left + scrollLeft, y:box.top + scrollTop};
}
else if(document.getBoxObjectFor) // gecko
{
box = document.getBoxObjectFor(el);
var borderLeft = (el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0;
var borderTop = (el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0;
pos = [box.x - borderLeft, box.y - borderTop];
}
else // safari & opera
{
pos = [el.offsetLeft, el.offsetTop];
parent = el.offsetParent;
if (parent != el) {
while (parent) {
pos[0] += parent.offsetLeft;
pos[1] += parent.offsetTop;
parent = parent.offsetParent;
}
}
if (ua.indexOf('opera') != -1|| ( ua.indexOf('safari') != -1 && el.style.position == 'absolute' ))
{
pos[0] -= document.body.offsetLeft;
pos[1] -= document.body.offsetTop;
}
}
if (el.parentNode) {
parent = el.parentNode;
}else {
parent = null;
}
while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML')
{ // account for any scrolled ancestors
pos[0] -= parent.scrollLeft;
pos[1] -= parent.scrollTop;
if (parent.parentNode){
parent = parent.parentNode;
}
else{
parent = null;
}
}
return {x:pos[0], y:pos[1]};
}
window.onclick=closeCal;
window.document.onclick=closeCal;