/*                All content copyright © 2005,2006 Tatler Software.                   */
/*                                                                                     */ 
/*     Permission granted to use as an input control on Customer's web site when       */
/*     implemented in conjunction with QLR Manager report objects.                     */

/* The arguments passed to openCalendar() from the button or HREF used to launch it:   */
/*                                                                                     */          
/* event  = Used to capture screen position of image or button clicked to position     */
/*          popup for Netscape 4.x. Alway use event (without quotes).                  */
/* layer  = Layer id for Netscape 4.x if form inside a layer. If no layer, use an      */
/*          "" (empty string) or 0 as the argument.                                    */
/* form   = The form name containing the date input element.                           */
/* field  = The name of the element the popup calendar should read an initial value    */
/*          from (if present) or update after a date selection.                        */
/* format = The date format to read from the text input and apply when selected from   */
/*          the popup calendar.                                                        */
/*          - mmddyy                                                                   */
/*          - mmddyyyy                                                                 */ 
/*          - ddmmyy                                                                   */
/*          - ddmmyyyy                                                                 */
/*          - yyyymmdd                                                                 */ 
/* delim  = This is the expected separator used when reading the date value from       */
/*          the text input and applying the date, eg. "/","-",".", etc. It must be     */
/*          a character that is not a letter or number. If no delimiter is desired,    */
/*          use an "" (empty string) or 0 as the argument.                             */
/* title  = The value displayed in the title bar to associate the calendar with a      */
/*          specific input field. If no value is provided, the input field name will   */
/*          be used with "_" replaced with a space.                                    */
/* footer = The footer is the area beneath the calendar table that displays the date   */
/*          format and "Today" button. Any value for this argument, 1, "yes", etc.     */
/*          will display the footer. Use "" (empty string) or 0 to hide the footer.    */
/* nopad  = Any value for this argument, 1,"yes", etc. will prevent single digit days  */
/*          and months from being padded with a leading 0.  For example, 1/1/2005      */
/*          will be written to the text input instead of the default 01/01/2005.       */ 
/* copy   = Copy date value into another form element (usually a hidden element) when  */
/*          applied. This argument specifies the target form element as                */
/*          "document.form.element" and must be enclosed in quotes. For example,       */
/*          "document.subForm.start_date" may reference a hidden form element.         */
/* asdb   = Copy the displayed date value to the element defined with the "copy"       */
/*          argument in the default database format of yyyy-dd-mm. Any value for this  */
/*          argument, 1,"yes", etc. will copy the date in database format. Use ""      */
/*            (empty string) or 0 to copy the date as it is displayed.                 */ 
/*                                                                                     */
/* NOTE:  The above instructions can be removed from the production version to reduce  */
/*        download time.                                                               */

var calendars=[];function openCalendar(event,layer,form,field,format,delim,title,footer,nopad,copy,asdb){var ok=document.getElementById||document.all||document.layers;if(!ok)return errMsg("Sorry, your browser is not capable of using this popup calendar.\nPlease consider a browser upgrade or enter the date manually.");var c,p,x,y,w,h,s,cd,el,id,dt,tt,fm,dl,dt,dd,mm,yy,sp;el=(layer)?document.layers[layer].document.forms[form].elements[field]:document.forms[form].elements[field];if(!el)return errMsg("The form and field arguments do not\nreference a valid text input element.");id=field.replace(/[^\w]/g,"").substr(0,30);tt=(title)?title:field.replace(/r000/i,'').replace(/_/g,' ');s=(el.value)?el.value.replace(/^\s+/,'').replace(/\s+$/,''):"";dl=delim;cd=new Date();if(s){fm=format.toLowerCase();sp=(s.match(/\D/));dt=getDateStr(s,fm,sp);dd=(dt&&dt.dd)?dt.dd:0;mm=(dt&&dt.mm)?dt.mm:0;yy=(dt)?(dt.yyyy)?(dt.yyyy.length<4)?padYear(dt.yyyy):dt.yyyy:(dt.yy)?(dt.yy.length<4)?padYear(dt.yy):dt.yy:0:0;if(dt&&dd&&mm&&yy){cd.setFullYear(yy);cd.setMonth(dt.mm-1);cd.setDate(dt.dd);}}c=calendars[id];p=event.target;x=(document.layers)?(event&&event.screenX)?event.screenX-150:100:null;y=(document.layers&&event&&event.screenY);y=(y)?(screen.height)?(screen.height&&(y>screen.height/2))?y-240:y+20:50:null;w=(c)?c.w:190;h=(c)?c.h:(footer&&footer!=0)?188:167;dt=cd.valueOf();calendar={p:p,x:x,y:y,w:w,h:h,dt:dt,el:el,id:id,tt:tt,ft:footer,fm:format,dl:dl,np:nopad,cp:copy,db:asdb,get:getDateStr,set:setDateStr,win:calWindow,pos:setPos};calendars[id]=calendar;calWindow(calendar);}function getDateStr(s,fm,dl,dt,id,np){var obj=new Object();if(dt){if(id)calendars[id].dt=dt;dt=new Date(+dt);var yy=dt.getFullYear();yy=(fm.indexOf("yyyy")==-1)?yy.toString().substr(2):yy;var mm=dt.getMonth()+1;mm=(mm<10&&!np)?'0'+mm:mm;var dd=dt.getDate();dd=(dd<10&&!np)?'0'+dd:dd;fm=fm.replace(/(mm+)/,mm+dl).replace(/(dd+)/,dd+dl).replace(/(yy+)/,yy+dl);return fm.substr(0,fm.lastIndexOf(dl));}fm=fm.replace(/(mm+)/,'$1'+dl).replace(/(dd+)/,'$1'+dl).replace(/(yy+)/,'$1'+dl);fm=fm.split(dl,3);if(dl){s=s.split(dl);for(i in fm)obj[fm[i]]=s[i];}else for(i in fm){obj[fm[i]]=s.substr(0,fm[i].length);s=s.substr(fm[i].length);}return obj;}function setDateStr(id){var cal=calendars[id];var hid=eval(cal.cp);cal.el.value=getDateStr(0,cal.fm,cal.dl,cal.dt,0,cal.np);if(cal.cp){if(hid&&cal.db)hid.value=getDateStr(0,"yyyymmdd","-",cal.dt);else hid.value=cal.el.value;}}function errMsg(msg){alert(msg);return false;}function getPos(el){var offset=new Array(0,0);while(el){offset[0]+=el.offsetLeft;offset[1]+=el.offsetTop;el=el.offsetParent;}return offset;}function setPos(cal){if(cal){var xy=getPos(calFrm);cal.x=xy[0]+"px";cal.y=xy[1]+"px";}}function padYear(yr){while(yr.length<3)yr="0"+yr;return "2"+yr;}function getScroll(){var pge=(window.pageYOffset||window.pageYOffset==0);var bdy=(document.body||document.documentElement);var xy=(pge)?{x:window.pageXOffset,y:window.pageYOffset}:(bdy)?{x:bdy.scrollLeft,y:bdy.scrollTop}:0;return xy;}function calWindow(cal){if(document.layers)window["calWin"+cal.id]=window.open(cal.p,'calWin'+cal.id,'width='+cal.w+',height='+cal.h+',status=0,resizable=1,screenX='+cal.x+',screenY='+cal.y+',left='+cal.x+',top='+cal.y);else{var calWin=frames["calWin"];if(!calWin||(calWin&&!calWin.calRdy))return;var xy=getPos(cal.el);calFrm=(document.getElementById)?document.getElementById("calWin"):(document.all)?document.all["calWin"]:0;if(calFrm&&calWin.initCal){var bdy=(document.body||document.documentElement);var hgt=((bdy&&bdy.clientHeight)||window.innerHeight);var wid=((bdy&&bdy.clientWidth)||window.innerWidth);var pos=(hgt&&xy[1]);var flp=(pos&&(xy[1]-getScroll().y>209&&xy[1]-getScroll().y+cal.el.offsetHeight+209>hgt));var pgY=(pos)?(flp)?xy[1]-209:xy[1]+cal.el.offsetHeight+1:200;xy[0]=xy[0]-getScroll().x+192>wid&&wid+getScroll().x-192||xy[0];calFrm.style.left=(cal&&cal.x)?cal.x:(xy[0])?xy[0]+"px":"200px";calFrm.style.top=(cal&&cal.y)?cal.y:pgY+"px";calFrm.style.visibility="visible";setTimeout("calWin.initCal('"+cal.id+"',1)",1);}}return false;}