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 = "
closeSelect a Date:
"; 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_caltr+=o_caltd; o_caltr+="\n"; o_cal+=o_caltr; o_caltd = ""; for(i=0;i < dArray.length;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_caltd+= mArray[newM]+" "+newY; o_caltd+= "
"; o_caltd+=dArray[i]; o_caltd+="   
"; 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;