From: Subject: grid Date: Mon, 10 Mar 2008 11:51:11 -0500 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_0000_01C882A5.09428BF0" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 This is a multi-part message in MIME format. ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: file://C:\Documents and Settings\Tapps\My Documents\tapps grid\grid.html grid
------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/searchimages/book-btn.gif R0lGODlhSwAVAOYAAAAAAP///wAAmYRRHoZTIOWgXeWjY+WmaOWpbeWrcuWtduWveuWxfN6reOWx feWyf0xDOv/x4+3k2/vy6f/58+WIMeWJM+WLNuWLN+WNOuWPPuWPP+WSQ+WUSOWXTeWaUuWaU+Wd WOWgXuWobf/bu//hxv/s2v/s2//x5P/17P+sZ/+tZ/+saP+taP+wbf+xbf+wbv+xbv+0dP+0df+1 df+4ff+5ff+4fv+5fv+9hv++hv+9h/++h//DkP/EkP/Dkf/Ekf/Imv/Jmv/Im//Jm//Opf/Ppf/O pv/Ppv/UsP/VsP/Usf/Vsf/au//avP/bvP/gxv/gx//hx//l0P/m0P/m0f/r2v/w4//59P/l0f/r 2//w5P/17f/07P/48//07f/49PDw8EBAQDw8PP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5 BAEAAGQALAAAAABLABUAAAf/gBINg4SFhoeIiYqLjIgTDRWRkpOUlZaXmJmalg8NFiorLSugK6Wl oqalKqCko6Qsqqyqs7SmKqitprCrrqUWnRcwLy7CMC4uL8bGx8cxMM/HL84xzDHDxC7OxsnHytjd y8Taz9DJ0BgEDRkzMjPs7jM07u3t8vD3+PE09PHw7fj/7u3rZ4+GPXwZ0mnAgePGDRs2cECcWGNi xIk4akiM+BBiRoYMb1SEWJGhxo4Wa4xEaRGiww3pOPDgoWMmjxw5ZtasSZOnz5w5d+ikSTTnTKM7 heqomWOpzadCdS7dySFdhx4/fGD14UOAVwE/sGL9AQSI1h5iu/oI26PsDwFa/9+i/UF3rlyxdYGA BYK2L1euWDuk80CksGEhAoYIGSJg8RDDkCELIBKk8GMiiR8nDnLZMubIQoggjkxatId0IJAYOXIE CZIjAo4YQSKgiGqvrll7nU37tQAjs4sIeG1k+GrcwL+6xt3aOO3dwKMj+ZAuBJMlSpYkYaLkq9ck 3ZMsEZBdwHYBTJKgRy/+unf26JkIWJIe/fjz3Od3V5I+fZL//IWQjghNPEGCgU2QIEATTjQhwBNO CNDggwqS4OCEXjXoxIECkODhggpOaGCIT3jXxIUMZnjgEyxaWEA6BkAh44xQCCBjFDbWKKONJeRo I446yliCjlH0uOOOUuxYZP+OM+Y4JJFRRCmjAekckAUVU1ChZRXeUVGFl15d+aVXXlIhQBVTCLAl l2iyOQWXAmSZpVdVwKkmm2bSqeWeXx6QzghaBKqFFVqYIKgVJlhB6KCENnqCoiYkaiijWjy6qKKQ JsroopMGqiilmIZqBQLpJIDCFldsoeqqq6aqagRXpHrqFijESquqtboqq6q2usoqqxGg+mqqwf6q agLpKJACFymk0IWzyzYr7bPPSmvtstU2S22zX3Tx7BcpgKttF8xaW2222oorrQLpLEABFu++CwYF FHjxLhZeYIFvvvryS++879qrb7xegIHFvAbPmy+98cI7sMEE4+swvQuk48A7xRhnnDEDGnfs8ccg X8xxyBiPjDEBggyg8sost+zyyzDHLPPMLkMQRhhj5Kzzzjz37PPPQActdM9iBAIAOw== ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/searchimages/citytab_on.gif R0lGODlhFQAdALMAALq6ukNERIeHh+zt7crLy9vc3GVmZnZ3dxERETMzMyIiIpiYmKmpqS9PlwAA AP3+/iwAAAAAFQAdAAAEiLDJSattL+vNt+xg94XkM5bgiXLqqrWuicXeTGfnAAyPXo4ERAJRIAQe AUFqZjA8EgJdIWEgEB6EAm6WxBYAjgVCIXA8EIBtppsBI5UOt/r9OCzc3YAh8ZodAgMKd2ZdZQd9 GQUKDoBuB3FgDIgrZTxzKAGSkzcynJc3MC6hK6MopT82oKk0DREAOw== ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/searchimages/addresstab_off.gif R0lGODlhJAAdANUAAJOt6Vh+1MnW9N/n+FqA1+nv+tTe9lh80VJ1xX2d5Vd80Ym59r7N8Yek5Ymm 6Y2+95216kFltF2E3WeL3YW19VR4yKi97HOV5D5hr1R2yfT3/am+7ztdqluC2TlapVyD3F2F31J1 xoCu8n6s8TZXoVyC21l/1lN4yIOx9ERouDVVn1uC3FZ7zld7z1V5zFd7zlZ6z1p/11Z6zmmO41d6 z6m97tPe9dTe9bPF7ll91FN3yFV5y1Z7zy9Pl////16G4SH5BAAAAAAALAAAAAAkAB0AAAb/QJ9w SCwaj8ikcslsOp9QZG9KrVqv2Ozox+16v+AwOCUSm89hMnqNVrPf4AgKTu/K6/U7Hh6hdC8OXjOB XIN4GH5cBj6EPw4+XY+HiT8aBRtcDgCQjps/CRcJn4SAMz+DF1wYC1wJPhsCPxsaA5CztT8GBQYA lgIXtAM/AwUFqasgIBsGDhogBhuPzzXSBgIJBgw1Pq4OGyAaNRAXIBwLEh8CBQzcBjUNPhIGFvAf 7vLzNR8QuxMNugkkmPuwYp2FAhAEMIDgI93ChjcslBCAA4KBBAwm+GhwY8IAieY6XNjYQeGmWh1O +uhgw0KHBho0QPDow8YEdgUSdPCwIAaBoJ9ATcTw6TOoCaA/iyZFSoBngKdPTUCFmmOq1atXPTxQ oOAA169gu3L1KrYsWK9kSTzg8YIHjxY8ZNCAC6MFDBYs3Mpwy+LuixctANPoyyOvWrZu4cqlaxev Xr5+AQsmbPjBjh0uLme+zHkzZs+eNYvOrOKBDh0nTpw+XWH16QyrW7terVoH7NOlEegOEUK3798I evsWDly4cBVZkitPHgQAOw== ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/searchimages/ziptab_off.gif R0lGODlhEgAdANUAAI299oW19Ymm6Yej5enu+luB2am97VJ1xVqA19Tf9z9hsFN3yF2E4J627Fd9 0d/n+L7O8kJltDtdqjlaplh+1Iq69lh80Yi49vT3/YCu8n6s8TZXoVyD3Fl+01N4yFyE3dPd9YOy 9FJ1xkRouDVVnluC3FV4zFZ7zld7z36d5nOW5V6F32mO41Z6z1d6z1d7zlyC27HD6zdYo4/A94Kw 81p/15uy5ae76Vl91HKT4HKU4lZ7z1V5yy9Pl////16G4SwAAAAAEgAdAAAG8UCfcEgsGo/IpHJp 7Dmf0OhT86tar9jfKJPtWrde74gW7kbIZWwklFaz21ZFoKoS2H8CVldebSQIPj8JKXtzVgkJeCwq KSkqcRdWAj4NPz4CBhgPGJArnhAEKwyXBgmjAp4SFx8fOpQcHD4DpR+yrBIVHDCgMBwlsgYEOT4p sLgFBSBDBcAEmsgFExUI1NQ11Tcg1dTSOBQd3x3gFDYx3hToMgAOFu0WDvDt8ewW6ig7Oy0n9y47 L/gnAp7YAOBevn07+v3bIXAgAB4QIZqISDHihhkLFnjIqHFjx4wePJCYceCAiJInS6JUeYCElJdR ggAAOw== ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/searchimages/landmarktab_off.gif R0lGODlhLQAdANUAAFJ1xVd90dTe9lN3yN/m+FyE3oej5EJmtVh+1JOt6XOW5VqA11d80Ymm6erv +1uB2Yq69mmO452166i97I6+9oW19dPd9fT3/T5hr1R3yam+7r7O8lyC3F6F38nW9FV4yztdqjla pVp/14Cu8n6s8TZXoVN4yFl/11yC24Ox9Iel5jVVnluD3FZ7z1d7z1Z6z1Z7zld6z36e51Z6zld7 zqi866i97WeL3Vd6zrLF7ll91Ii39lV5yy9Pl////16G4SwAAAAALQAdAAAG/0CfcEgsGo/IpHLJ bDqf0Kg02atar9isdssl/b7gsHhMLpMPI7N6zf6h2/C4Oy2vmw8pu36M3/u/fX97GBVfMgpwCjJy DRFihF8CGnAaAnI+DY+FP5JgCg2Ih40/EQ2VP6CNMoulrKARmJ9gGDuRkz8KFwQ+CgIODhs/Hr+W PgS6uwoEuxINPg7OCRcJszsdHQI21woSCpiSNgIFmKeY4R3kEQQa0bAOHgXXHSA7LAXZBQXKOT4q 2eHjVADsN1CFh2E2VPjI5+OCg3z5QEDggELABA4sJhC44cOAgBoTBKC4IGGDyI4hOXT0cYPABAM+ WKDwIYEki5sSH6CwIMQCzNtjCT7WEPCAHwELDzoOTSpNVw6YD5IaqOEg6oMQEBacWMC1a1cRW7lu 3SpCbFmuZc+e/doVK4K3cOPKnUsXro66cLEyCLCX714GgAHzDeBXsOHAhwn/RVyCwosWMFrMaNHi MeQYNFrggOGCRowYL15kdgEj8gwXL1C7cNGC9YsYp100fmyasmUYmDVz9gxadOvSklWnZu0a9urG PD7wWJ6cOXPlzp9Dj07d+YcPjQcMMGFCe4bvAzJ03669fAbv4b2bEF9effsVFADIn0+/vv37+O+v 4MK/v38rQQAAOw== ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/searchimages/airporttab_off.gif R0lGODlhIAAdANUAAOnv+1h+1Im59nOW5FJ0xYil6LzN8VuB2Y2+99Pd9YW19VN2yai97cnW9Iek 5vT3/Yej436e55206lR4yKm+712F31N3yFmA11yE3lyE3Vh80d/n+XGS3lJ1xYCu8n6s8VyC3FN4 yIOx9H2c412E31Z7zlV5zFh+09Te9ld7z1Z6z9Tf91d7zlyD22mO46i861Z6zld6zld6z9Te93mY 3am+7ZSu61Z5zImm6Vd80VV5y1qA11Z7zy9Pl////16G4SH5BAAAAAAALAAAAAAgAB0AAAb/QJ9w SCwaj8ikcslsOp/InnRKrVqv1M9vy+16v+BtzxMum7njsxqcXrvFove7F5ev6fa7gosbbHEueWh7 Pzg+K1srEXKGg1sUAA9/LgMRES59iz8ROFsRlRQ+mj0CWw2hiz44kKqHojYPAAY/KwArGz6zP6QV FQ8FMzUkqgwAOIYkKBTKjTMNI4a9JKQYI7kADRk+DgwoGQ4+GSjdDAXh49/hGRmkLRIADAYALdsv KC3gHPANBhIPIChe4PPRAkQLUgcMJDhgjYMPCC8WQvCx4QEHCA98SDiQ4MUBDg8WHiC1o+SFkihR Tkx5MqXLHaQCBDghsyZNmTQS3JR54mbPepoyeyDIoSGH0aJGjyYlupTpUaRCZfBQwaMqixQxeJTg cXVrVRUlwvJIQRWG16hTq3LFqnWt16lht5LlYbaqUB0m8OK9oaOv3r558/r1K7ivUAsWQiAOMQGx 48aKHVtYENlCY8dCO2gmQEBzB86eQ28W7bkzltOorQQBADs= ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/searchimages/calendar.gif R0lGODlhDwAPALMAAN7d3d7e3ero6c7OzuLi4ubm5trZ2tbV1d7e3urp6dLR0ezr68zMzDOZ/wAA AAAAACH5BAAAAAAALAAAAAAPAA8AAARO0MlJq1s46yy3x923SUkilGiaSEXTtK8LFxLh2g2uSwEQ IEAfAgAASgwuZEPJlBxcz0Z0KlFYr9irZODiNrxgCcM1bpTPYoZ6zVZb3pMIADs= ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/searchimages/gobutton.gif R0lGODlhZAAaANUAADVPdDthmDNXiEVomWiLxY6brFqDuqq0wWh5kUpzqFd9teLl6ENqo+Te5ThS k5Skt1l0qTlmoSVMlGuXyQQEBktbcS5YkMXK0mOGv0ZkjF6Kvy1VjmiBoKCtuz5bhdPX3FpqgXSE mFd0l197syQ3UNvc5MLGyzNOkYiSn7e+yPHy9E9slsnR2n6NpEhvoFNuonSQrW2Qyl9/xS1FZWWV wObO4yRKgl9xiU95rkFfne/w8T9KjnuP0OTj3wAAAP///yH5BAAAAAAALAAAAABkABoAAAb/QArF RxwSfUZjcclkKpFNqNR5lD6TVexR66TUKLaMx5MRmM/otHrNbrvf8LgA0PBZIjbJRsLv+/+AgYKD hIWGhxIedQwGMjExGASPkTEElJCSmJOZl52cn5uhmqOeoqWkoDEDdQM0PBMaGhOwshMGtbGzubS6 uL69wLzCu7u3wcW/w8kaCXUJE5AYlRgGkAoKGBjX2QoGBAQG3uAKlt3f4dzk2gbZ7JXh5ero2urb 9Onp5+z039nTBs18JKChYISkEQYxvFjxAsKLhhBWrBiBAQIEhBZHRBxwUaPGARxHPETY8BtCkg01 XoSQIcPFhQ8lWlwRciQGjywHUER40GAz/wo5DECIFS6WixUPWLCAMeCB0w4PXLjg0AGGCxwcnD5g 6iKBiA4sLnDIyvRBBxwaDFzLWiCDUxFHky4N8PVBAbNun8KoexWHCLkwEiggaixCCaCNCJhjloHF jwUqOnj48KPygQFIfzyQ2KJyZQ4ZVlCG7KGDZgCVVwgW2pkFAMohPFx4XNnDA88/SqD23KK1ywGO IXdwEWuxglU+GNCQcS0WjgEIHgMQsWI3ADIuPCz40dZDgR8oTHAHcOBHijEAZoMA8YOFhwRpM3wv QKLyjBuPSVDm4GGGfQD4XTDDdfNhJsJjFTDUDQ6DaaAADgws4mCDOODwwm0XACAGfgvM8P/eCtH9 kCEAKfyAgHgtzKDCDyCQ4cGKM6DwwwEedJOAByWGUEF+t9E3GwIAsNchAN8doCGO3InxnYAZXFNh cWhFCNSTGlSoAAQy/nCDBwLImMIMGWRXnogAALBdBTr8UEF0H2i4An7giVfAAA8OoN0PHZiWgn5a zrAdCACEQKYH5aGgoZkmjvEdi3QmgMMtFd6CXA7XGBCpAQNksF2bRHp2HmqUZejfD2mmOJ8HC4Xo GQddJXAjbuDV98MMo3p4qmyeoTAqAAO4oOkPH2QwQALh4EAsQKsgpoCr4STAwABwFjDDbB0UwEGn 0QkIJ3gDzhbCAC94x52sHvSqgAtskiD/HgL4fXAfsGV6219lKLTFJgBdecAedx4waGyxCSSbg7Gr ufocADJeQMKfAMyxXX0KC5qmCfGamEEA5HH7gwq8VuhBZ3ueyZ6AMhrpp5YA7KjCgB546YELA2C8 ZAauFkxssgEwMLCzDEglwAzRmSArCWWq+oPQ38m48rQoz0EZCNny6kIAApiGwtDsXV1iirUGerSH ANxmqADoZetBzq4ywICjAdQRQM1qB4xUeuCx9wHUAFgtJAmzVfDnDCWmAMAKo5IgYwHlBhAAriAE CPTRKhcNb6cd3HAD0yjcENoDTBcgwLAJRMCAsRG07UMAEIruagAceObuopWh1mGtK1aw/7XXlT0g JODgKR6BnbUXqeGKlbVw3W00ClBiZQISr1nrlbUpQNprO1t6AxS8ncPaLpTeVAHGC5ABAuQj4AEH IpgxFgDrZ4C+BwAgcNcY6E8HWgARuMCAAO1zsAKX8ikAkBS3gvcJQATlSx8HyMcf74DvOmpTndrW Zrqc5cBVpXuWGRInAMWZIQAD6CBIPhhCESrOgyIkoeIoCMISgjAAFlicGXpFtReecIYlPNsGuSSA tWUwdPlLQNso8LIETG1YRwSJ4vQHwmctkQFPBCHMpBizADCxVzHr1RGnaEUoYnGJWbwiF8eYRSda cWo9O6IRFXeYgTEgAnCM4xvjKEc62rkRjnO8Yx31qMc88tGPfQykHg/jACE6QG0rRGTOoKjIRkJx kYmMJCQn6UhJVpKSj7ykJjMZgBLYIQIWCKUFNrCBUJKylKQ0ZSpPOcpSthKVrmRlKl/ZSlXC0pa1 pOUsZRnLVfZyAwLA3g5scIIcCOAEDnDACZapTGQ2E5nLhKYzo9nMZFKTmc+sZjaxec1pMpOb3/Sm NK35TQ/UoAc1KEENatCAHrjznfCMpzznSc962vOe+MwnOmsQBAA7 ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/layout-common.css .calendar .nav { BACKGROUND: url(../menuarrow.gif) no-repeat 100% 100% } .calendar TFOOT .ttip .error { COLOR: #c20 } .calendar TFOOT TR.time TD { PADDING-RIGHT: 0px; BORDER-TOP: 1px solid; PADDING-LEFT: 0px; = PADDING-BOTTOM: 0px; PADDING-TOP: 0px } .calendar TFOOT TR.time TD.timetext { TEXT-ALIGN: center } .calendar TFOOT TR.time TABLE TD { BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: = 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-TOP: 0px; = BORDER-BOTTOM: 0px } .calendar TFOOT TR.time TD.hilite { BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: = 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-TOP: 0px; = BORDER-BOTTOM: 0px } .calendar TFOOT TR.time TD.active { BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: = 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-TOP: 0px; = BORDER-BOTTOM: 0px } .calendar TFOOT TR.time TD.hour { BORDER-RIGHT: 1px solid; PADDING-RIGHT: 1px; PADDING-LEFT: 3px; = FONT-WEIGHT: bold; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; TEXT-ALIGN: = right } .calendar TFOOT TR.time TD.minute { BORDER-RIGHT: 1px solid; PADDING-RIGHT: 1px; PADDING-LEFT: 3px; = FONT-WEIGHT: bold; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; TEXT-ALIGN: = right } .calendar TFOOT TR.time TD.colon { FONT-WEIGHT: bold; BACKGROUND: none transparent scroll repeat 0% 0%; = TEXT-ALIGN: center } .calendar TFOOT TR.time TD.ampm { TEXT-ALIGN: center } .calendar-time-scroller { BORDER-RIGHT: 1px solid; BORDER-LEFT: 1px solid } .calendar-time-scroller .up { BACKGROUND: url(../scroller-up.gif) no-repeat 50% 50%; WIDTH: 11px; = HEIGHT: 0.5em } .calendar-time-scroller .down { BACKGROUND: url(../scroller-down.gif) no-repeat 50% 50%; WIDTH: 11px; = HEIGHT: 0.5em } .calendar .combo { BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; DISPLAY: none; = FONT-SIZE: 90%; LEFT: 0px; BORDER-LEFT: 1px solid; WIDTH: 4em; CURSOR: = default; BORDER-BOTTOM: 1px solid; POSITION: absolute; TOP: 0px } .calendar { Z-INDEX: 100 } .calendar .combo .label { PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; = PADDING-TOP: 1px; TEXT-ALIGN: center } .calendar .combo .label-IEfix { PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; = PADDING-TOP: 1px; TEXT-ALIGN: center } .calendar .combo .label-IEfix { WIDTH: 4em } .calendar .combo .disabled { COLOR: #888 } .calendar .history { WIDTH: 18em } .calendar .history .label { TEXT-ALIGN: center } .calendar .history .label-IEfix { WIDTH: 18em } ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/layouts/layout-2d.css @import url( layout-common.css ); DIV.calendar { POSITION: relative } .calendar { BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 11px; = BORDER-LEFT: 1px solid; CURSOR: default; BORDER-BOTTOM: 1px solid; = FONT-FAMILY: tahoma,verdana,sans-serif } .calendar TABLE { BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 11px; = BORDER-LEFT: 1px solid; CURSOR: default; BORDER-BOTTOM: 1px solid; = FONT-FAMILY: tahoma,verdana,sans-serif } .calendar .button { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; = PADDING-TOP: 2px; TEXT-ALIGN: center } .calendar .nav { =09 } .calendar THEAD .title { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; = PADDING-BOTTOM: 2px; PADDING-TOP: 2px; TEXT-ALIGN: center } .calendar THEAD .headrow { =09 } .calendar THEAD .name { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; = PADDING-TOP: 2px; BORDER-BOTTOM: 1px solid; TEXT-ALIGN: center } .calendar THEAD .weekend { =09 } .calendar THEAD .hilite { BORDER-RIGHT: 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: 1px solid; = PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; BORDER-LEFT: 1px solid; = PADDING-TOP: 1px; BORDER-BOTTOM: 1px solid } .calendar THEAD .active { PADDING-RIGHT: 0px; PADDING-LEFT: 2px; PADDING-BOTTOM: 0px; = PADDING-TOP: 2px } .calendar THEAD .daynames { =09 } .calendar TBODY .day { PADDING-RIGHT: 4px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; WIDTH: 2em; = PADDING-TOP: 2px; TEXT-ALIGN: right } .calendar TBODY .othermonth { FONT-SIZE: 80% } .calendar TBODY .oweekend { =09 } .calendar TABLE .wn { BORDER-RIGHT: 1px solid; PADDING-RIGHT: 3px; PADDING-LEFT: 2px; = PADDING-BOTTOM: 2px; PADDING-TOP: 2px } .calendar TBODY .rowhilite TD { =09 } .calendar TBODY .rowhilite TD.wn { =09 } .calendar TBODY TD.hilite { BORDER-RIGHT: 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: 1px solid; = PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; BORDER-LEFT: 1px solid; = PADDING-TOP: 1px; BORDER-BOTTOM: 1px solid } .calendar TBODY TD.active { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 0px; = PADDING-TOP: 2px } .calendar TBODY TD.selected { BORDER-RIGHT: 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: 1px solid; = PADDING-LEFT: 1px; FONT-WEIGHT: bold; PADDING-BOTTOM: 1px; BORDER-LEFT: = 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: 1px solid } .calendar TBODY TD.weekend { =09 } .calendar TBODY TD.today { FONT-WEIGHT: bold } .calendar TBODY .disabled { COLOR: #999 } .calendar TBODY .emptycell { VISIBILITY: hidden } .calendar TBODY .emptyrow { DISPLAY: none } .calendar TFOOT .footrow { TEXT-ALIGN: center } .calendar TFOOT .ttip { PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; = PADDING-TOP: 2px } .calendar TFOOT .hilite { BORDER-RIGHT: 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: 1px solid; = PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; BORDER-LEFT: 1px solid; = PADDING-TOP: 1px; BORDER-BOTTOM: 1px solid } .calendar TFOOT .active { PADDING-RIGHT: 0px; PADDING-LEFT: 2px; PADDING-BOTTOM: 0px; = PADDING-TOP: 2px } .calendar .combo .active { BORDER-TOP: 1px solid; FONT-WEIGHT: bold; BORDER-BOTTOM: 1px solid } ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/searchimages/winter.css @import url( layouts/layout-2d.css ); .calendar { BORDER-LEFT-COLOR: #476ed5; BORDER-BOTTOM-COLOR: #476ed5; COLOR: #000; = BORDER-TOP-COLOR: #476ed5; BACKGROUND-COLOR: #ffffff; = BORDER-RIGHT-COLOR: #476ed5 } .calendar TABLE { BORDER-LEFT-COLOR: #476ed5; BORDER-BOTTOM-COLOR: #476ed5; COLOR: #000; = BORDER-TOP-COLOR: #476ed5; BACKGROUND-COLOR: #ffffff; = BORDER-RIGHT-COLOR: #476ed5 } .calendar .nav { BACKGROUND-COLOR: #ffffff } .calendar THEAD .title { COLOR: #000000; BACKGROUND-COLOR: #ffffff } .calendar THEAD .headrow { COLOR: #000000; BACKGROUND-COLOR: #ffffff } .calendar THEAD .daynames { BACKGROUND-COLOR: #e9bd58 } .calendar THEAD .name { BORDER-LEFT-COLOR: #ffffff; BORDER-BOTTOM-COLOR: #ffffff; COLOR: #000; = BORDER-TOP-COLOR: #ffffff; BORDER-RIGHT-COLOR: #ffffff } .calendar THEAD .weekend { COLOR: #a66 } .calendar THEAD .hilite { BORDER-LEFT-COLOR: #04f; BORDER-BOTTOM-COLOR: #04f; COLOR: #000; = BORDER-TOP-COLOR: #04f; BACKGROUND-COLOR: #ffffff; BORDER-RIGHT-COLOR: = #04f } .calendar THEAD .active { BACKGROUND-COLOR: #77c } .calendar TBODY .day { COLOR: #456 } .calendar TBODY .othermonth { COLOR: #bbb } .calendar TBODY .oweekend { COLOR: #fbb } .calendar TABLE .wn { BORDER-LEFT-COLOR: #000; BORDER-BOTTOM-COLOR: #000; BORDER-TOP-COLOR: = #000; BACKGROUND-COLOR: #bdf; BORDER-RIGHT-COLOR: #000 } .calendar TBODY .rowhilite TD { BACKGROUND-COLOR: #def } .calendar TBODY .rowhilite TD.wn { BACKGROUND-COLOR: #eef } .calendar TBODY TD.hilite { BORDER-LEFT-COLOR: #bbb; BORDER-BOTTOM-COLOR: #bbb; BORDER-TOP-COLOR: = #bbb; BACKGROUND-COLOR: #ffffff; BORDER-RIGHT-COLOR: #bbb } .calendar TBODY TD.active { BACKGROUND-COLOR: #ffffff } .calendar TBODY TD.selected { BORDER-LEFT-COLOR: #000; BORDER-BOTTOM-COLOR: #000; COLOR: #000; = BORDER-TOP-COLOR: #000; BACKGROUND-COLOR: #fff; BORDER-RIGHT-COLOR: #000 } .calendar TBODY TD.weekend { COLOR: #a66 } .calendar TBODY TD.today { COLOR: #000000 } .calendar TBODY .disabled { COLOR: #999 } .calendar TFOOT .footrow { COLOR: #fff; BACKGROUND-COLOR: #556 } .calendar TFOOT .ttip { BORDER-LEFT-COLOR: #556; BORDER-BOTTOM-COLOR: #556; COLOR: #445; = BORDER-TOP-COLOR: #556; BACKGROUND-COLOR: #ffffff; BORDER-RIGHT-COLOR: = #556 } .calendar TFOOT .hilite { BORDER-LEFT-COLOR: #ffffff; BORDER-BOTTOM-COLOR: #ffffff; COLOR: #000; = BORDER-TOP-COLOR: #ffffff; BACKGROUND-COLOR: #ffffff; = BORDER-RIGHT-COLOR: #ffffff } .calendar TFOOT .active { BACKGROUND-COLOR: #ffffff } .calendar .combo { BORDER-LEFT-COLOR: #ffffff; BORDER-BOTTOM-COLOR: #ffffff; COLOR: = #ffffff; BORDER-TOP-COLOR: #ffffff; BACKGROUND-COLOR: #ffffff; = BORDER-RIGHT-COLOR: #ffffff } .calendar .combo .hilite { BACKGROUND-COLOR: #ffffff } .calendar .combo .active { BORDER-LEFT-COLOR: #ffffff; BORDER-BOTTOM-COLOR: #ffffff; = BORDER-TOP-COLOR: #ffffff; BACKGROUND-COLOR: #ffffff; = BORDER-RIGHT-COLOR: #ffffff } .calendar TFOOT TR.time TD { BORDER-LEFT-COLOR: #000; BORDER-BOTTOM-COLOR: #000; BORDER-TOP-COLOR: = #000; BORDER-RIGHT-COLOR: #000 } .calendar TFOOT TR.time TD.hour { BORDER-LEFT-COLOR: #ffffff; BORDER-BOTTOM-COLOR: #ffffff; = BORDER-TOP-COLOR: #ffffff; BORDER-RIGHT-COLOR: #ffffff } .calendar TFOOT TR.time TD.minute { BORDER-LEFT-COLOR: #ffffff; BORDER-BOTTOM-COLOR: #ffffff; = BORDER-TOP-COLOR: #ffffff; BORDER-RIGHT-COLOR: #ffffff } .calendar TFOOT TR.time TD.hilite { BACKGROUND-COLOR: #ffffff } .calendar TFOOT TR.time TD.active { BACKGROUND-COLOR: #ffffff } ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/searchimages/searchform.css .FormText { FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR: #000000; FONT-FAMILY: = Verdana, Arial, Helvetica, sans-serif } .SearchBoxBorder { BORDER-RIGHT: #2f4f97 1px solid; BACKGROUND-IMAGE: url(bg.gif); = BORDER-LEFT: #2f4f97 1px solid; WIDTH: 150px; BORDER-BOTTOM: #2f4f97 1px = solid } .TopSearchFieldHolder { PADDING-RIGHT: 5px; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: = 8pt; PADDING-BOTTOM: 3px; WIDTH: 128px; COLOR: #000000; PADDING-TOP: = 8px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif } .TopSearchFieldHolder A:link { FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR: #3333cc; FONT-FAMILY: = Verdana, Arial, Helvetica, sans-serif } .TopSearchFieldHolder A:hover { FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR: #3333cc; FONT-FAMILY: = Verdana, Arial, Helvetica, sans-serif } .TopSearchFieldHolder A:visited { FONT-WEIGHT: normal; FONT-SIZE: 8pt; COLOR: #3399ff; FONT-FAMILY: = Verdana, Arial, Helvetica, sans-serif } .SearchFieldHolder { PADDING-RIGHT: 5px; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: = 8pt; PADDING-BOTTOM: 3px; WIDTH: 128px; COLOR: #000000; PADDING-TOP: = 0px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif } .loginField { BORDER-RIGHT: #0e284b 1px solid; BORDER-TOP: #0e284b 1px solid; = PADDING-LEFT: 3px; FONT-SIZE: 9pt; BACKGROUND-IMAGE: url(input_bg.gif); = MARGIN: 1px 0px 3px; BORDER-LEFT: #0e284b 1px solid; WIDTH: 100px; = COLOR: #0e284b; PADDING-TOP: 2px; BORDER-BOTTOM: #0e284b 1px solid; = BACKGROUND-REPEAT: repeat-x; FONT-FAMILY: Verdana, Arial, Helvetica, = sans-serif; HEIGHT: 20px } .loginFieldsmaller { BORDER-RIGHT: #0e284b 1px solid; BORDER-TOP: #0e284b 1px solid; = PADDING-LEFT: 3px; FONT-SIZE: 9pt; BACKGROUND-IMAGE: url(input_bg.gif); = MARGIN: 1px 0px 3px; BORDER-LEFT: #0e284b 1px solid; WIDTH: 80px; COLOR: = #0e284b; PADDING-TOP: 2px; BORDER-BOTTOM: #0e284b 1px solid; = BACKGROUND-REPEAT: repeat-x; FONT-FAMILY: Verdana, Arial, Helvetica, = sans-serif; HEIGHT: 20px } .Pulldown { BORDER-RIGHT: #0e284b 1px solid; BORDER-TOP: #0e284b 1px solid; = PADDING-LEFT: 3px; FONT-SIZE: 9pt; MARGIN: 1px 0px 3px; BORDER-LEFT: = #0e284b 1px solid; WIDTH: 60px; COLOR: #0e284b; BORDER-BOTTOM: #0e284b = 1px solid; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif } .PulldownState { BORDER-RIGHT: #0e284b 1px solid; BORDER-TOP: #0e284b 1px solid; = PADDING-LEFT: 3px; FONT-SIZE: 9pt; MARGIN: 1px 0px 3px; BORDER-LEFT: = #0e284b 1px solid; WIDTH: 80px; COLOR: #0e284b; BORDER-BOTTOM: #0e284b = 1px solid; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif } .loginFieldZipCode { BORDER-RIGHT: #0e284b 1px solid; BORDER-TOP: #0e284b 1px solid; = PADDING-LEFT: 3px; FONT-SIZE: 9pt; BACKGROUND-IMAGE: url(input_bg.gif); = MARGIN: 1px 0px 3px; BORDER-LEFT: #0e284b 1px solid; WIDTH: 90px; COLOR: = #0e284b; PADDING-TOP: 2px; BORDER-BOTTOM: #0e284b 1px solid; = BACKGROUND-REPEAT: repeat-x; FONT-FAMILY: Verdana, Arial, Helvetica, = sans-serif; HEIGHT: 20px } .GoButtonHolder { PADDING-RIGHT: 0px; PADDING-LEFT: 14px; PADDING-BOTTOM: 0px; WIDTH: = 120px; PADDING-TOP: 5px } ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: application/x-js Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/searchimages/utils.js /*=0A= * The Zapatec DHTML utils library=0A= *=0A= * Copyright (c) 2004 by Zapatec, Inc.=0A= * http://www.zapatec.com=0A= * 1700 MLK Way, Berkeley, California,=0A= * 94709, U.S.A.=0A= * All rights reserved.=0A= *=0A= *=0A= * Various utility functions=0A= */=0A= /// define the global Zapatec namespace=0A= var Zapatec =3D {};=0A= =0A= /// define the Utils namespace=0A= Zapatec.Utils =3D {};=0A= =0A= /// Retrieves the absolute position (relative to ) of a given = element.=0A= ///=0A= /// @param el [HTMLElement] reference to the element.=0A= /// @return [object] { x, y } containing the position.=0A= Zapatec.Utils.getAbsolutePos =3D function(el) {=0A= var SL =3D 0, ST =3D 0;=0A= var is_div =3D /^div$/i.test(el.tagName);=0A= if (is_div && el.scrollLeft)=0A= SL =3D el.scrollLeft;=0A= if (is_div && el.scrollTop)=0A= ST =3D el.scrollTop;=0A= var r =3D { x: el.offsetLeft - SL, y: el.offsetTop - ST };=0A= if (el.offsetParent) {=0A= var tmp =3D this.getAbsolutePos(el.offsetParent);=0A= r.x +=3D tmp.x;=0A= r.y +=3D tmp.y;=0A= }=0A= return r;=0A= };=0A= =0A= /// Modify the position of a box to fit in browser's view. This = function will=0A= /// modify the passed object itself, so it doesn't need to return a = value.=0A= ///=0A= /// @param [object] box { x, y, width, height } specifying the area.=0A= Zapatec.Utils.fixBoxPosition =3D function(box) {=0A= if (box.x < 0)=0A= box.x =3D 0;=0A= if (box.y < 0)=0A= box.y =3D 0;=0A= var cp =3D Zapatec.Utils.createElement("div");=0A= var s =3D cp.style;=0A= s.position =3D "absolute";=0A= s.right =3D s.bottom =3D s.width =3D s.height =3D "0px";=0A= window.document.body.appendChild(cp);=0A= var br =3D Zapatec.Utils.getAbsolutePos(cp);=0A= window.document.body.removeChild(cp);=0A= if (Zapatec.is_ie) {=0A= br.y +=3D window.document.body.scrollTop;=0A= br.x +=3D window.document.body.scrollLeft;=0A= } else {=0A= br.y +=3D window.scrollY;=0A= br.x +=3D window.scrollX;=0A= }=0A= var tmp =3D box.x + box.width - br.x;=0A= if (tmp > 0) box.x -=3D tmp;=0A= tmp =3D box.y + box.height - br.y;=0A= if (tmp > 0) box.y -=3D tmp;=0A= };=0A= =0A= /// Determines if an event is related to a certain element. This is a = poor=0A= /// substitute for some events that are missing from DOM since forever = (like=0A= /// onenter, onleave, which MSIE provides). Basically onmouseover and=0A= /// onmouseout are fired even if the mouse was already in the element = but moved=0A= /// from text to a blank area, so in order not to close a popup element = when=0A= /// onmouseout occurs in this situation, one would need to first check = if the=0A= /// event is not related to that popup element:=0A= ///=0A= /// \code=0A= /// function handler_onMouseOut(event) {=0A= /// if (!Zapatec.Utils.isRelated(this, event)) {=0A= /// /// can safely hide it now=0A= /// this.style.display =3D "none";=0A= /// }=0A= /// }=0A= /// \endcode=0A= ///=0A= /// @param el [HTMLElement] reference to the element to check the event = against=0A= /// @param evt [Event] reference to the Event object=0A= /// @return [boolean] true if the event is related to the element=0A= Zapatec.Utils.isRelated =3D function (el, evt) {=0A= evt || (evt =3D window.event);=0A= var related =3D evt.relatedTarget;=0A= if (!related) {=0A= var type =3D evt.type;=0A= if (type =3D=3D "mouseover") {=0A= related =3D evt.fromElement;=0A= } else if (type =3D=3D "mouseout") {=0A= related =3D evt.toElement;=0A= }=0A= }=0A= try {=0A= while (related) {=0A= if (related =3D=3D el) {=0A= return true;=0A= }=0A= related =3D related.parentNode;=0A= }=0A= } catch(e) {};=0A= return false;=0A= };=0A= =0A= /// Remove a certain [CSS] class from the given element.=0A= /// @param el [HTMLElement] reference to the element.=0A= /// @param className [string] the class to remove.=0A= Zapatec.Utils.removeClass =3D function(el, className) {=0A= if (!(el && el.className)) {=0A= return;=0A= }=0A= var cls =3D el.className.split(" ");=0A= var ar =3D [];=0A= for (var i =3D cls.length; i > 0;) {=0A= if (cls[--i] !=3D className) {=0A= ar[ar.length] =3D cls[i];=0A= }=0A= }=0A= el.className =3D ar.join(" ");=0A= };=0A= =0A= /// Appends a certain [CSS] class to the given element.=0A= /// @param el [HTMLElement] reference to the element.=0A= /// @param className [string] the class to append.=0A= Zapatec.Utils.addClass =3D function(el, className) {=0A= Zapatec.Utils.removeClass(el, className);=0A= el.className +=3D " " + className;=0A= };=0A= =0A= /// Retrieves the current target element for some event (useful when = bubbling).=0A= /// This function is not actually very useful, but it's legacy from the = old calendar code.=0A= /// @param ev [Event] the event object.=0A= /// @return [HTMLElement] window.event.srcElement for MSIE, = ev.currentTarget for other browsers.=0A= Zapatec.Utils.getElement =3D function(ev) {=0A= if (Zapatec.is_ie) {=0A= return window.event.srcElement;=0A= } else {=0A= return ev.currentTarget;=0A= }=0A= };=0A= =0A= /// Retrieves the target element for some event (useful when bubbling).=0A= /// This function is not actually very useful, but it's legacy from the = old calendar code.=0A= /// @param ev [Event] the event object.=0A= /// @return [HTMLElement] window.event.srcElement for MSIE, ev.target = for other browsers.=0A= Zapatec.Utils.getTargetElement =3D function(ev) {=0A= if (Zapatec.is_ie) {=0A= return window.event.srcElement;=0A= } else {=0A= return ev.target;=0A= }=0A= };=0A= =0A= /// Stops bubbling and propagation of some event.=0A= /// @param ev [Event] the event object=0A= /// @return false=0A= Zapatec.Utils.stopEvent =3D function(ev) {=0A= ev || (ev =3D window.event);=0A= if (Zapatec.is_ie) {=0A= ev.cancelBubble =3D true;=0A= ev.returnValue =3D false;=0A= } else {=0A= ev.preventDefault();=0A= ev.stopPropagation();=0A= }=0A= return false;=0A= };=0A= =0A= /// Adds an event handler to a certain element. This function adds a = handler=0A= /// using the DOM2 addEventListener (or attachEvent for MSIE). Doing = this=0A= /// means that you can add multiple handlers for the same element and = same=0A= /// event name, and they will be called in order.=0A= ///=0A= /// WARNING: for really old browsers that don't support attachEvent nor=0A= /// addEventListener, it falls back to the default way: el.onclick =3D = func.=0A= /// This means that you CANNOT add multiple handlers in those browsers, = as a=0A= /// new one will override the old one.=0A= ///=0A= /// @param el [HTMLElement] reference to the element.=0A= /// @param evname [string] the event name, excluding the "on" prefix.=0A= /// @param func event handler function.=0A= Zapatec.Utils.addEvent =3D function(el, evname, func) {=0A= if (el.attachEvent) { // IE=0A= el.attachEvent("on" + evname, func);=0A= } else if (el.addEventListener) { // Gecko / W3C=0A= el.addEventListener(evname, func, true);=0A= } else {=0A= el["on" + evname] =3D func;=0A= }=0A= };=0A= =0A= /// Removes an event handler added with Zapatec.Utils.removeEvent(). The=0A= /// prototype scheme is the same.=0A= Zapatec.Utils.removeEvent =3D function(el, evname, func) {=0A= if (el.detachEvent) { // IE=0A= el.detachEvent("on" + evname, func);=0A= } else if (el.removeEventListener) { // Gecko / W3C=0A= el.removeEventListener(evname, func, true);=0A= } else {=0A= el["on" + evname] =3D null;=0A= }=0A= };=0A= =0A= /// Create an element of a certain type using document.createElement(). = A=0A= /// function was needed in order to add some common attributes to all = created=0A= /// elements, but also in order to be able to use it in XHTML too (Gecko = and=0A= /// other W3C-compliant browsers).=0A= ///=0A= /// This function will create an element of the given type and set = certain=0A= /// properties to it: unselectable for IE, and the CSS = "-moz-user-select" for=0A= /// Gecko, in order to make the element unselectable in these browsers.=0A= /// Optionally, if the second argument is passed, it will appendChild() = the=0A= /// newly created element to its parent.=0A= ///=0A= /// @param type [string] the tag name of the new element.=0A= /// @param parent [HTMLElement, optional] a parent for the new element.=0A= /// @return [HTMLElement] reference to the new element.=0A= Zapatec.Utils.createElement =3D function(type, parent) {=0A= var el =3D null;=0A= if (window.self.document.createElementNS)=0A= // use the XHTML namespace; IE won't normally get here unless=0A= // _they_ "fix" the DOM2 implementation.=0A= el =3D = window.self.document.createElementNS("http://www.w3.org/1999/xhtml", = type);=0A= else=0A= el =3D window.self.document.createElement(type);=0A= if (typeof parent !=3D "undefined")=0A= parent.appendChild(el);=0A= if (Zapatec.is_ie)=0A= el.setAttribute("unselectable", true);=0A= if (Zapatec.is_gecko)=0A= el.style.setProperty("-moz-user-select", "none", "");=0A= return el;=0A= };=0A= =0A= // Cookie management=0A= =0A= /// Sets a cooke given certain specifications. It overrides any existing=0A= /// cookie with the same name.=0A= ///=0A= /// @param name [string] the cookie name.=0A= /// @param value [string] the cookie value.=0A= /// @param domain [string, optional] the cookie domain.=0A= /// @param path [string, optional] the cookie path.=0A= /// @param exp_days [number, optional] number of days of cookie validity.=0A= Zapatec.Utils.writeCookie =3D function(name, value, domain, path, = exp_days) {=0A= value =3D escape(value);=0A= var ck =3D name + "=3D" + value, exp;=0A= if (domain)=0A= ck +=3D ";domain=3D" + domain;=0A= if (path)=0A= ck +=3D ";path=3D" + path;=0A= if (exp_days) {=0A= exp =3D new Date();=0A= exp.setTime(exp_days * 86400000 + exp.getTime());=0A= ck +=3D ";expires=3D" + exp.toGMTString();=0A= }=0A= document.cookie =3D ck;=0A= };=0A= =0A= /** =0A= * Retrieves the value of a cookie.=0A= * =0A= * @param name [string] the cookie name=0A= * @return [string or null] a string with the cookie value, or null if = it can't be found.=0A= */=0A= Zapatec.Utils.getCookie =3D function(name) {=0A= var re =3D new RegExp("(^|;\\s*)" + name + "\\s*=3D(.*?)(;|$)");=0A= if (re.test(document.cookie)) {=0A= var value =3D RegExp.$2;=0A= value =3D unescape(value);=0A= return (value);=0A= }=0A= return null;=0A= };=0A= =0A= /** =0A= * Given an object, create a string suitable for saving the object in a = cookie.=0A= * This is similar to serialization. WARNING: it does not support nested=0A= * objects.=0A= * =0A= * @param obj [Object] reference to the object to serialize.=0A= * @return [string] the serialized object.=0A= */=0A= Zapatec.Utils.makePref =3D function(obj) {=0A= function stringify(val) {=0A= if (typeof val =3D=3D "object" && !val)=0A= return "null";=0A= else if (typeof val =3D=3D "number" || typeof val =3D=3D "boolean")=0A= return val;=0A= else if (typeof val =3D=3D "string")=0A= return '"' + val.replace(/\22/, "\\22") + '"';=0A= else return null;=0A= };=0A= var txt =3D "", i;=0A= for (i in obj)=0A= txt +=3D (txt ? ",'" : "'") + i + "':" + stringify(obj[i]);=0A= return txt;=0A= };=0A= =0A= /** =0A= * The reverse of Zapatec.Utils.makePref(), this function unserializes = the=0A= * given string and creates an object from it.=0A= * =0A= * @param txt [string] the serialized value.=0A= * @return [Object] a new object if it was created successfully or null = otherwise.=0A= */=0A= Zapatec.Utils.loadPref =3D function(txt) {=0A= var obj =3D null;=0A= try {=0A= eval("obj=3D{" + txt + "}");=0A= } catch(e) {}=0A= return obj;=0A= };=0A= =0A= /** =0A= * Merges the values of the source object into the destination object.=0A= * =0A= * @param dest [Object] the destination object.=0A= * @param src [Object] the source object.=0A= */=0A= Zapatec.Utils.mergeObjects =3D function(dest, src) {=0A= for (var i in src)=0A= dest[i] =3D src[i];=0A= };=0A= =0A= // based on the WCH idea=0A= // http://www.aplus.co.yu/WCH/code3/WCH.js=0A= =0A= /// \defgroup WCH functions=0A= //@{=0A= =0A= Zapatec.Utils.__wch_id =3D 0; /**< [number, static] used to create ID-s = for the WCH objects */=0A= =0A= /** =0A= * Create an WCH object. This function does nothing if the browser is = not=0A= * IE5.5 or IE6.0. A WCH object is one of the most bizarre tricks to = avoid a=0A= * notorious IE bug: IE normally shows "windowed controls" on top of any = HTML=0A= * elements, regardless of any z-index that might be specified in CSS. = This=0A= * technique is described at: http://www.aplus.co.yu/WCH/=0A= *=0A= * A "WCH object" is actually an HTMLIFrame element having a certain "CSS=0A= * filter" (proprietary MSIE extension) that forces opacity zero. This = object,=0A= * displayed on top of a windowed control such as a select box, will = completely=0A= * hide the select box, allowing us to place other HTMLElement objects = above.=0A= *=0A= * WCH stands for "Windowed Controls Hider".=0A= * =0A= * @return [HTMLIFrame or null] a new WCH object if the browser is = "supported", null otherwise.=0A= */=0A= Zapatec.Utils.createWCH =3D function() {=0A= var f =3D null;=0A= if (Zapatec.is_ie && !Zapatec.is_ie5) {=0A= var filter =3D = 'filter:progid:DXImageTransform.Microsoft.alpha(style=3D0,opacity=3D0);';=0A= var id =3D "WCH" + (++Zapatec.Utils.__wch_id);=0A= window.self.document.body.insertAdjacentHTML=0A= ('beforeEnd', '');=0A= f =3D window.self.document.getElementById(id);=0A= }=0A= return f;=0A= };=0A= =0A= /** =0A= * Configure a given WCH object to be displayed on top of the given = element.=0A= * Optionally, a second element can be passed, and in this case it will = setup=0A= * the WCH object to cover both elements.=0A= * =0A= * @param f [HTMLIFrame] the WCH object=0A= * @param el [HTMLElement] the element to cover.=0A= * @param el2 [HTMLElement, optional] another element to cover.=0A= */=0A= Zapatec.Utils.setupWCH_el =3D function(f, el, el2) {=0A= if (f) {=0A= var pos =3D Zapatec.Utils.getAbsolutePos(el),=0A= X1 =3D pos.x,=0A= Y1 =3D pos.y,=0A= X2 =3D X1 + el.offsetWidth,=0A= Y2 =3D Y1 + el.offsetHeight;=0A= if (el2) {=0A= var p2 =3D Zapatec.Utils.getAbsolutePos(el2),=0A= XX1 =3D p2.x,=0A= YY1 =3D p2.y,=0A= XX2 =3D XX1 + el2.offsetWidth,=0A= YY2 =3D YY1 + el2.offsetHeight;=0A= if (X1 > XX1)=0A= X1 =3D XX1;=0A= if (Y1 > YY1)=0A= Y1 =3D YY1;=0A= if (X2 < XX2)=0A= X2 =3D XX2;=0A= if (Y2 < YY2)=0A= Y2 =3D YY2;=0A= }=0A= Zapatec.Utils.setupWCH(f, X1, Y1, X2-X1, Y2-Y1);=0A= }=0A= };=0A= =0A= /** =0A= * Configure a WCH object to cover a certain part of the screen.=0A= * =0A= * @param f [HTMLIFrame] the WCH object.=0A= * @param x [number] the X coordinate.=0A= * @param y [number] the Y coordinate.=0A= * @param w [number] the width of the area.=0A= * @param h [number] the height of the area.=0A= */=0A= Zapatec.Utils.setupWCH =3D function(f, x, y, w, h) {=0A= if (f) {=0A= var s =3D f.style;=0A= (typeof x !=3D "undefined") && (s.left =3D x + "px");=0A= (typeof y !=3D "undefined") && (s.top =3D y + "px");=0A= (typeof w !=3D "undefined") && (s.width =3D w + "px");=0A= (typeof h !=3D "undefined") && (s.height =3D h + "px");=0A= s.visibility =3D "visible";=0A= }=0A= };=0A= =0A= /** =0A= * Hide a WCH object.=0A= * =0A= * @param f [HTMLIFrame] object to hide.=0A= */=0A= Zapatec.Utils.hideWCH =3D function(f) {=0A= if (f)=0A= f.style.visibility =3D "hidden";=0A= };=0A= =0A= //@}=0A= =0A= /** =0A= * Destroys the given element (remove it from the DOM tree) if it's not = null=0A= * and it's parent is not null.=0A= * =0A= * @param el [HTMLElement] the element to destroy.=0A= */=0A= Zapatec.Utils.destroy =3D function(el) {=0A= if (el && el.parentNode)=0A= el.parentNode.removeChild(el);=0A= };=0A= =0A= /** =0A= * Opens a new window at a certain URL and having some properties.=0A= * =0A= * @param url [string] the URL to open a new window to.=0A= * @param windowName [string] the name of the new window (as for target = attribute).=0A= * @param width [number] the width of the new window in pixels.=0A= * @param height [number] the height of the new window in pixels.=0A= * @param scrollbars [string] "yes" or "no" for scrollbars.=0A= * =0A= * @return [object] the new window=0A= */=0A= Zapatec.Utils.newCenteredWindow =3D function(url, windowName, width, = height, scrollbars){=0A= var leftPosition =3D 0;=0A= var topPosition =3D 0;=0A= if (screen.width)=0A= leftPosition =3D (screen.width - width)/2;=0A= if (screen.height)=0A= topPosition =3D (screen.height - height)/2;=0A= var winArgs =3D=0A= 'height=3D' + height +=0A= ',width=3D' + width +=0A= ',top=3D' + topPosition +=0A= ',left=3D' + leftPosition +=0A= ',scrollbars=3D' + scrollbars +=0A= ',resizable';=0A= var win =3D window.open(url,windowName,winArgs);=0A= return win;=0A= };=0A= =0A= /** =0A= * Given a reference to a select element, this function will select the = option=0A= * having the given value and optionally will call the default handler = for=0A= * "onchange".=0A= * =0A= * @param sel [HTMLSelectElement] reference to the SELECT element.=0A= * @param val [string] the value that we should select.=0A= * @param call_default [boolean] true if the default onchange should be = called.=0A= */=0A= Zapatec.Utils.selectOption =3D function(sel, val, call_default) {=0A= var a =3D sel.options, i, o;=0A= for (i =3D a.length; --i >=3D 0;) {=0A= o =3D a[i];=0A= o.selected =3D (o.val =3D=3D val);=0A= }=0A= sel.value =3D val;=0A= if (call_default) {=0A= if (typeof sel.onchange =3D=3D "function")=0A= sel.onchange();=0A= else if (typeof sel.onchange =3D=3D "string")=0A= eval(sel.onchange);=0A= }=0A= };=0A= =0A= /** =0A= * A more flexible way to get the "nextSibling" of a given element. If = the=0A= * "tag" argument is passed, then this function will return the next = sibling=0A= * that has a certain tag. Otherwise it will simply return = el.nextSibling.=0A= * =0A= * @param el [HTMLElement] reference to the anchor element.=0A= * @param tag [string] the tag name of the returned node.=0A= * =0A= * @return [HTMLElement or null] el.nextSibling if tag is not passed, or = the=0A= * first element after el having the specified tag. Null is returned if = no=0A= * element could be found.=0A= */=0A= Zapatec.Utils.getNextSibling =3D function(el, tag) {=0A= el =3D el.nextSibling;=0A= if (!tag)=0A= return el;=0A= tag =3D tag.toLowerCase();=0A= while (el && (el.nodeType !=3D 1 || el.tagName.toLowerCase() !=3D tag))=0A= el =3D el.nextSibling;=0A= return el;=0A= };=0A= =0A= /** =0A= * Similar to Zapatec.Utils.getNextSibling(), this function will return = the=0A= * first child of the given element that has a specified tag.=0A= * =0A= * @param el [HTMLElement] reference to the anchor element.=0A= * @param tag [string] the tag name of the returned node.=0A= * =0A= * @return [HTMLElement] reference to the found node, or null if none = could be=0A= * found.=0A= */=0A= Zapatec.Utils.getFirstChild =3D function(el, tag) {=0A= el =3D el.firstChild;=0A= if (!tag)=0A= return el;=0A= tag =3D tag.toLowerCase();=0A= if (el.nodeType =3D=3D 1 && el.tagName.toLowerCase() =3D=3D tag)=0A= return el;=0A= return Zapatec.Utils.getNextSibling(el, tag);=0A= };=0A= =0A= Zapatec.Utils._ids =3D {}; /**< [number, static] maintains a list of = generated IDs */=0A= =0A= /** =0A= * Generates an unique ID, for a certain code (let's say "class"). If = the=0A= * optional "id" argument is passed, then it just returns the id for = that code=0A= * (no generation). This function is sometimes useful when we need to = create=0A= * elements and be able to access them later by ID.=0A= * =0A= * @param code [string] the class of ids. User defined, can be anything.=0A= * @param id [string, optional] specify if the ID is already known.=0A= * =0A= * @return [string] the unique ID=0A= */=0A= Zapatec.Utils.generateID =3D function(code, id) {=0A= if (typeof id =3D=3D "undefined") {=0A= if (typeof this._ids[code] =3D=3D "undefined")=0A= this._ids[code] =3D 0;=0A= id =3D ++this._ids[code];=0A= }=0A= return "zapatec-" + code + "-" + id;=0A= };=0A= =0A= /**=0A= * Add a tooltip to the specified element.=0A= *=0A= * Function that adds a custom tooltip for an element. The "target" is = the=0A= * element to where the tooltip should be added to, and the "tooltip" is = a DIV=0A= * that contains the tooltip text. Optionally, the tooltip DIV can have = the=0A= * "title" attribute set; if so, its value will be displayed highlighted = as=0A= * the title of the tooltip.=0A= *=0A= * @param target reference to or ID of the target element=0A= * @param tooltip reference to or ID of the tooltip content element=0A= */=0A= =0A= Zapatec.Utils.addTooltip =3D function(target, tooltip) {=0A= return new Zapatec.Tooltip(target, tooltip);=0A= };=0A= =0A= =0A= // Browser sniffing=0A= =0A= /// detect Opera browser=0A= Zapatec.is_opera =3D /opera/i.test(navigator.userAgent);=0A= =0A= /// detect a special case of "web browser"=0A= Zapatec.is_ie =3D ( /msie/i.test(navigator.userAgent) && = !Zapatec.is_opera );=0A= =0A= /// detect IE5.0/Win=0A= Zapatec.is_ie5 =3D ( Zapatec.is_ie && /msie = 5\.0/i.test(navigator.userAgent) );=0A= =0A= /// detect IE for Macintosh=0A= Zapatec.is_mac_ie =3D ( /msie.*mac/i.test(navigator.userAgent) && = !Zapatec.is_opera );=0A= =0A= /// detect KHTML-based browsers=0A= Zapatec.is_khtml =3D /Konqueror|Safari|KHTML/i.test(navigator.userAgent);=0A= =0A= /// detect Konqueror=0A= Zapatec.is_konqueror =3D /Konqueror/i.test(navigator.userAgent);=0A= =0A= /// detect Gecko=0A= Zapatec.is_gecko =3D /Gecko/i.test(navigator.userAgent);=0A= ------=_NextPart_000_0000_01C882A5.09428BF0 Content-Type: application/x-js Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/Documents%20and%20Settings/Tapps/My%20Documents/tapps%20grid/searchimages/calendar.js /*=0A= * The Zapatec DHTML Calendar=0A= *=0A= * Copyright (c) 2004 by Zapatec, Inc.=0A= * http://www.zapatec.com=0A= * 1700 MLK Way, Berkeley, California,=0A= * 94709, U.S.A.=0A= * All rights reserved.=0A= *=0A= * Main Calendar file. Creates a popup or flat calendar with various = options.=0A= *=0A= * Original version written by Mihai Bazon,=0A= * http://www.bazon.net/mishoo/calendar.epl=0A= */=0A= =0A= // $Id: calendar.js,v 1.16 2005/05/05 05:04:09 dror Exp $=0A= =0A= /**=0A= * The Calendar object constructor. Call it, for example, like this:=0A= *=0A= * \code=0A= * // the following function is called when a date is clicked=0A= * function selFunc(cal) {=0A= * alert(cal.date);=0A= * }=0A= * // the following function is called when the calendar should be = closed=0A= * function closeFunc(cal) {=0A= * cal.destroy();=0A= * }=0A= * var cal =3D new Zapatec.Calendar(1, new Date(), selFunc, closeFunc);=0A= * \endcode=0A= *=0A= * The above creates a new Calendar object. The Calendar isn't displayed=0A= * instantly; using the "cal" variable, the programmer can now set = certain=0A= * configuration variables, hook his own event handlers and then display = the=0A= * calendar using Zapatec.Calendar.create().=0A= *=0A= * @param firstDayOfWeek [int] the first day of week (0 for Sun, 1 for = Mon, ...)=0A= * @param dateStr [string or Date] a string to be the default date, or a = reference to a Date object=0A= * @param onSelected [function] this function will be called when a date = is selected=0A= * @param onClose [function] this is called when the calendar should be = closed=0A= */=0A= Zapatec.Calendar =3D function (firstDayOfWeek, dateStr, onSelected, = onClose) {=0A= // member variables=0A= this.activeDiv =3D null;=0A= this.currentDateEl =3D null;=0A= this.getDateStatus =3D null;=0A= this.getDateToolTip =3D null;=0A= this.getDateText =3D null;=0A= this.timeout =3D null;=0A= this.onSelected =3D onSelected || null;=0A= this.onClose =3D onClose || null;=0A= this.onFDOW =3D null;=0A= this.dragging =3D false;=0A= this.hidden =3D false;=0A= this.minYear =3D 1970;=0A= this.maxYear =3D 2050;=0A= this.minMonth =3D 0;=0A= this.maxMonth =3D 11;=0A= this.dateFormat =3D Zapatec.Calendar.i18n("DEF_DATE_FORMAT");=0A= this.ttDateFormat =3D Zapatec.Calendar.i18n("TT_DATE_FORMAT");=0A= this.historyDateFormat =3D "%B %d, %Y";=0A= this.isPopup =3D true;=0A= this.weekNumbers =3D true;=0A= this.noGrab =3D false;=0A= if (Zapatec.Calendar.prefs.fdow || (Zapatec.Calendar.prefs.fdow =3D=3D = 0)) {=0A= this.firstDayOfWeek =3D parseInt(Zapatec.Calendar.prefs.fdow, 10);=0A= }=0A= else {=0A= var fd =3D 0;=0A= if (typeof firstDayOfWeek =3D=3D "number") {=0A= fd =3D firstDayOfWeek;=0A= } else if (typeof Zapatec.Calendar._FD =3D=3D 'number') {=0A= fd =3D Zapatec.Calendar._FD;=0A= }=0A= this.firstDayOfWeek =3D fd;=0A= }=0A= this.showsOtherMonths =3D false;=0A= this.dateStr =3D dateStr;=0A= this.ar_days =3D null;=0A= this.showsTime =3D false;=0A= this.sortOrder =3D "asc"; //Sort for multiple dates in ascending order=0A= this.time24 =3D true;=0A= this.yearStep =3D 2;=0A= this.hiliteToday =3D true;=0A= this.multiple =3D null;=0A= // HTML elements=0A= this.table =3D null;=0A= this.element =3D null;=0A= this.tbody =3D null;=0A= this.firstdayname =3D null;=0A= // Combo boxes=0A= this.monthsCombo =3D null; // months=0A= this.hilitedMonth =3D null;=0A= this.activeMonth =3D null;=0A= this.yearsCombo =3D null; // years=0A= this.hilitedYear =3D null;=0A= this.activeYear =3D null;=0A= this.histCombo =3D null; // history=0A= this.hilitedHist =3D null;=0A= // Information=0A= this.dateClicked =3D false;=0A= =0A= // one-time initializations=0A= Zapatec.Calendar._initSDN();=0A= };=0A= =0A= /**=0A= * \internal This function is called from the constructor, only once, to=0A= * initialize some internal arrays containing translation strings. It = is also=0A= * called from the calendar wizard in order to reconfigure the calendar = with a=0A= * language different than the initially selected one.=0A= */=0A= Zapatec.Calendar._initSDN =3D function() {=0A= if (typeof Zapatec.Calendar._TT._SDN =3D=3D "undefined") {=0A= // table of short day names=0A= if (typeof Zapatec.Calendar._TT._SDN_len =3D=3D "undefined")=0A= Zapatec.Calendar._TT._SDN_len =3D 3;=0A= var ar =3D [];=0A= for (var i =3D 8; i > 0;) {=0A= ar[--i] =3D Zapatec.Calendar._TT._DN[i].substr(0, = Zapatec.Calendar._TT._SDN_len);=0A= }=0A= Zapatec.Calendar._TT._SDN =3D ar;=0A= // table of short month names=0A= if (typeof Zapatec.Calendar._TT._SMN_len =3D=3D "undefined")=0A= Zapatec.Calendar._TT._SMN_len =3D 3;=0A= ar =3D [];=0A= for (var i =3D 12; i > 0;) {=0A= ar[--i] =3D Zapatec.Calendar._TT._MN[i].substr(0, = Zapatec.Calendar._TT._SMN_len);=0A= }=0A= Zapatec.Calendar._TT._SMN =3D ar;=0A= }=0A= };=0A= =0A= /**=0A= * Translate a string according to the currently loaded language table. = The=0A= * \em type variable can be null or missing, or can have one of the = following=0A= * values: "dn", "sdn", "mn", "smn".=0A= *=0A= * -# if \em type is null or missing, the given \em str will be looked = up in=0A= * the translation table. If a value is found, it is returned. = Otherwise,=0A= * the string is looked up in the English table (if present). If = still not=0A= * found, the value of \em str itself is returned.=0A= * -# if \em type is passed, then the value of \em str is looked up in = one of=0A= * the following internal arrays, depending on the value of \em type:=0A= * - DN (day name)=0A= * - SDN (short day name)=0A= * - MN (month name)=0A= * - SMN (short month name)=0A= *=0A= * @param str [string] ID of translation text (can be the English text)=0A= * @param type [string, optional] domain to search through=0A= *=0A= * @return the translation according to the current language.=0A= */=0A= Zapatec.Calendar.i18n =3D function(str, type) {=0A= var tr =3D '';=0A= if (!type) {=0A= // normal _TT request=0A= if (Zapatec.Calendar._TT)=0A= tr =3D Zapatec.Calendar._TT[str];=0A= if (!tr && Zapatec.Calendar._TT_en)=0A= tr =3D Zapatec.Calendar._TT_en[str];=0A= } else switch(type) {=0A= case "dn" : tr =3D Zapatec.Calendar._TT._DN[str]; break;=0A= case "sdn" : tr =3D Zapatec.Calendar._TT._SDN[str]; break;=0A= case "mn" : tr =3D Zapatec.Calendar._TT._MN[str]; break;=0A= case "smn" : tr =3D Zapatec.Calendar._TT._SMN[str]; break;=0A= }=0A= if (!tr) tr =3D "" + str;=0A= return tr;=0A= };=0A= =0A= // ** constants=0A= =0A= /// "static", needed for event handlers.=0A= Zapatec.Calendar._C =3D null;=0A= =0A= /// preferences=0A= Zapatec.Calendar.prefs =3D {=0A= fdow : null, /**< when NULL we will use the options passed at = Zapatec.Calendar.setup */=0A= history : "", /**< keeps the history as one big string */=0A= sortOrder : "asc", /**< Sort order for multiple dates. Ascending by = default */=0A= hsize : 9 /**< maximum history size (number of stored items) */=0A= };=0A= =0A= // BEGIN: CALENDAR STATIC FUNCTIONS=0A= =0A= /**=0A= * Writes the preferences cookie.=0A= */=0A= Zapatec.Calendar.savePrefs =3D function() {=0A= // FIXME: should we make the domain, path and expiration time = configurable?=0A= // I guess these defaults are right though..=0A= Zapatec.Utils.writeCookie("ZP_CAL", Zapatec.Utils.makePref(this.prefs), = null, '/', 30);=0A= };=0A= =0A= /**=0A= * Loads the preference cookie and merges saved prefs to = Zapatec.Calendar.prefs.=0A= */=0A= Zapatec.Calendar.loadPrefs =3D function() {=0A= var txt =3D Zapatec.Utils.getCookie("ZP_CAL"), tmp;=0A= if (txt) {=0A= tmp =3D Zapatec.Utils.loadPref(txt);=0A= if (tmp)=0A= Zapatec.Utils.mergeObjects(this.prefs, tmp);=0A= }=0A= // FIXME: DEBUG!=0A= //this.prefs.history =3D "1979/03/08,1976/12/28,1978/08/31,1998/09/21";=0A= //this.prefs.history =3D null;=0A= };=0A= =0A= /**=0A= * \internal Adds a set of events to make some element behave like a = button.=0A= *=0A= * @param el [HTMLElement] reference to your element.=0A= */=0A= Zapatec.Calendar._add_evs =3D function(el) {=0A= var C =3D Zapatec.Calendar;=0A= Zapatec.Utils.addEvent(el, "mouseover", C.dayMouseOver);=0A= Zapatec.Utils.addEvent(el, "mousedown", C.dayMouseDown);=0A= Zapatec.Utils.addEvent(el, "mouseout", C.dayMouseOut);=0A= if (Zapatec.is_ie)=0A= Zapatec.Utils.addEvent(el, "dblclick", C.dayMouseDblClick);=0A= };=0A= =0A= /**=0A= * \internal This function undoes what Zapatec.Calendar._add_evs did, = therefore=0A= * unregisters the event handlers.=0A= *=0A= * @param el [HTMLElement] reference to your element.=0A= */=0A= Zapatec.Calendar._del_evs =3D function(el) {=0A= var C =3D this;=0A= Zapatec.Utils.removeEvent(el, "mouseover", C.dayMouseOver);=0A= Zapatec.Utils.removeEvent(el, "mousedown", C.dayMouseDown);=0A= Zapatec.Utils.removeEvent(el, "mouseout", C.dayMouseOut);=0A= if (Zapatec.is_ie)=0A= Zapatec.Utils.removeEvent(el, "dblclick", C.dayMouseDblClick);=0A= };=0A= =0A= /**=0A= * Given an HTML element, this function determines if it's part of the = "months"=0A= * combo box and if so it returns the element containing the month name.=0A= *=0A= * @param el [HTMLElement] some element (usually that triggered onclick)=0A= * @return [HTMLElement] element with the month=0A= */=0A= Zapatec.Calendar.findMonth =3D function(el) {=0A= if (typeof el.month !=3D "undefined") {=0A= return el;=0A= } else if (el.parentNode && typeof el.parentNode.month !=3D = "undefined") {=0A= return el.parentNode;=0A= }=0A= return null;=0A= };=0A= =0A= /** Similar to findMonth() but for the history combo. */=0A= Zapatec.Calendar.findHist =3D function(el) {=0A= if (typeof el.histDate !=3D "undefined") {=0A= return el;=0A= } else if (el.parentNode && typeof el.parentNode.histDate !=3D = "undefined") {=0A= return el.parentNode;=0A= }=0A= return null;=0A= };=0A= =0A= /** Similar to the above functions, but for the years combo. */=0A= Zapatec.Calendar.findYear =3D function(el) {=0A= if (typeof el.year !=3D "undefined") {=0A= return el;=0A= } else if (el.parentNode && typeof el.parentNode.year !=3D "undefined") = {=0A= return el.parentNode;=0A= }=0A= return null;=0A= };=0A= =0A= /**=0A= * This function displays the months combo box. It doesn't need any = parameters=0A= * because it uses the static _C variable which maintains a reference to = the=0A= * last calendar that was clicked in the page.=0A= */=0A= Zapatec.Calendar.showMonthsCombo =3D function () {=0A= var cal =3D Zapatec.Calendar._C;=0A= if (!cal) {=0A= return false;=0A= }=0A= var cd =3D cal.activeDiv;=0A= var mc =3D cal.monthsCombo;=0A= var date =3D cal.date,=0A= MM =3D cal.date.getMonth(),=0A= YY =3D cal.date.getFullYear(),=0A= min =3D (YY =3D=3D cal.minYear),=0A= max =3D (YY =3D=3D cal.maxYear);=0A= for (var i =3D mc.firstChild; i; i =3D i.nextSibling) {=0A= var m =3D i.month;=0A= Zapatec.Utils.removeClass(i, "hilite");=0A= Zapatec.Utils.removeClass(i, "active");=0A= Zapatec.Utils.removeClass(i, "disabled");=0A= i.disabled =3D false;=0A= if ((min && m < cal.minMonth) ||=0A= (max && m > cal.maxMonth)) {=0A= Zapatec.Utils.addClass(i, "disabled");=0A= i.disabled =3D true;=0A= }=0A= if (m =3D=3D MM)=0A= Zapatec.Utils.addClass(cal.activeMonth =3D i, "active");=0A= }=0A= var s =3D mc.style;=0A= s.display =3D "block";=0A= if (cd.navtype < 0)=0A= s.left =3D cd.offsetLeft + "px";=0A= else {=0A= var mcw =3D mc.offsetWidth;=0A= if (typeof mcw =3D=3D "undefined")=0A= // Konqueror brain-dead techniques=0A= mcw =3D 50;=0A= s.left =3D (cd.offsetLeft + cd.offsetWidth - mcw) + "px";=0A= }=0A= s.top =3D (cd.offsetTop + cd.offsetHeight) + "px";=0A= cal.updateWCH(mc);=0A= };=0A= =0A= /**=0A= * Same as the above, this function displays the history combo box for = the=0A= * active calendar.=0A= */=0A= Zapatec.Calendar.showHistoryCombo =3D function() {=0A= var cal =3D Zapatec.Calendar._C, a, h, i, cd, hc, s, tmp, div;=0A= if (!cal)=0A= return false;=0A= hc =3D cal.histCombo;=0A= while (hc.firstChild)=0A= hc.removeChild(hc.lastChild);=0A= if (Zapatec.Calendar.prefs.history) {=0A= a =3D Zapatec.Calendar.prefs.history.split(/,/);=0A= i =3D 0;=0A= while (tmp =3D a[i++]) {=0A= tmp =3D tmp.split(/\//);=0A= h =3D Zapatec.Utils.createElement("div");=0A= h.className =3D Zapatec.is_ie ? "label-IEfix" : "label";=0A= h.histDate =3D new Date(parseInt(tmp[0], 10), parseInt(tmp[1], 10)-1, = parseInt(tmp[2], 10),=0A= tmp[3] ? parseInt(tmp[3], 10) : 0,=0A= tmp[4] ? parseInt(tmp[4], 10) : 0);=0A= = h.appendChild(window.document.createTextNode(h.histDate.print(cal.history= DateFormat)));=0A= hc.appendChild(h);=0A= if (h.histDate.dateEqualsTo(cal.date))=0A= Zapatec.Utils.addClass(h, "active");=0A= }=0A= }=0A= cd =3D cal.activeDiv;=0A= s =3D hc.style;=0A= s.display =3D "block";=0A= s.left =3D Math.floor(cd.offsetLeft + = (cd.offsetWidth-hc.offsetWidth)/2) + "px";=0A= s.top =3D (cd.offsetTop + cd.offsetHeight) + "px";=0A= cal.updateWCH(hc);=0A= };=0A= =0A= /**=0A= * Displays the years combo box for the active calendar. The "fwd" = parameter=0A= * tells it if it should display future (right) or past (left) years.=0A= *=0A= * @param fwd [boolean] true if it's for the right combo (future), false=0A= * otherwise.=0A= */=0A= Zapatec.Calendar.showYearsCombo =3D function (fwd) {=0A= var cal =3D Zapatec.Calendar._C;=0A= if (!cal) {=0A= return false;=0A= }=0A= var cd =3D cal.activeDiv;=0A= var yc =3D cal.yearsCombo;=0A= if (cal.hilitedYear) {=0A= Zapatec.Utils.removeClass(cal.hilitedYear, "hilite");=0A= }=0A= if (cal.activeYear) {=0A= Zapatec.Utils.removeClass(cal.activeYear, "active");=0A= }=0A= cal.activeYear =3D null;=0A= var Y =3D cal.date.getFullYear() + (fwd ? 1 : -1);=0A= var yr =3D yc.firstChild;=0A= var show =3D false;=0A= for (var i =3D 12; i > 0; --i) {=0A= if (Y >=3D cal.minYear && Y <=3D cal.maxYear) {=0A= yr.firstChild.data =3D Y;=0A= yr.year =3D Y;=0A= yr.style.display =3D "block";=0A= show =3D true;=0A= } else {=0A= yr.style.display =3D "none";=0A= }=0A= yr =3D yr.nextSibling;=0A= Y +=3D fwd ? cal.yearStep : -cal.yearStep;=0A= }=0A= if (show) {=0A= var s =3D yc.style;=0A= s.display =3D "block";=0A= if (cd.navtype < 0)=0A= s.left =3D cd.offsetLeft + "px";=0A= else {=0A= var ycw =3D yc.offsetWidth;=0A= if (typeof ycw =3D=3D "undefined")=0A= // Konqueror brain-dead techniques=0A= ycw =3D 50;=0A= s.left =3D (cd.offsetLeft + cd.offsetWidth - ycw) + "px";=0A= }=0A= s.top =3D (cd.offsetTop + cd.offsetHeight) + "px";=0A= }=0A= cal.updateWCH(yc);=0A= };=0A= =0A= // event handlers=0A= =0A= /**=0A= * This is an event handler that gets called when the mouse button is = released=0A= * upon the document. The name (tableMouseUp) is because of historic = reasons=0A= * (in the initial calendar versions this event was triggered by the = calendar=0A= * table, but now it's the document who does it).=0A= *=0A= * This function does a number of things. It determines which is the = element=0A= * that was actually clicked. Note that the "mouseup" event usually = means=0A= * "something was clicked"; it's "mouseup" who fires the "onclick" = event, not=0A= * "mousedown" ;-). So, if the clicked element is a member of one of = the combo=0A= * boxes such as month, year or history, then the appropriate action is = taken=0A= * (switch month, year or go to history date).=0A= *=0A= * Also, the Zapatec.Calendar.cellClick() function is called, which = further=0A= * examines the target element and might do other things.=0A= *=0A= * Finally, this handler deregisters itself (it's automatically enabled = at=0A= * "mousedown" on document), stops the event propagation, sets the = static _C=0A= * variable to \em null (meaning "no calendar is currently in use").=0A= *=0A= * @param ev [Event] the event object=0A= * @return false=0A= */=0A= Zapatec.Calendar.tableMouseUp =3D function(ev) {=0A= var cal =3D Zapatec.Calendar._C;=0A= if (!cal) {=0A= return false;=0A= }=0A= if (cal.timeout) {=0A= clearTimeout(cal.timeout);=0A= }=0A= var el =3D cal.activeDiv;=0A= if (!el) {=0A= return false;=0A= }=0A= var target =3D Zapatec.Utils.getTargetElement(ev);=0A= ev || (ev =3D window.event);=0A= Zapatec.Utils.removeClass(el, "active");=0A= if (target =3D=3D el || target.parentNode =3D=3D el) {=0A= Zapatec.Calendar.cellClick(el, ev);=0A= }=0A= var mon =3D Zapatec.Calendar.findMonth(target);=0A= var date =3D null;=0A= if (mon) {=0A= if (!mon.disabled) {=0A= date =3D new Date(cal.date);=0A= if (mon.month !=3D date.getMonth()) {=0A= date.setMonth(mon.month);=0A= cal.setDate(date);=0A= cal.dateClicked =3D false;=0A= cal.callHandler();=0A= }=0A= }=0A= } else {=0A= var year =3D Zapatec.Calendar.findYear(target);=0A= if (year) {=0A= date =3D new Date(cal.date);=0A= if (year.year !=3D date.getFullYear()) {=0A= date.setFullYear(year.year);=0A= cal.setDate(date);=0A= cal.dateClicked =3D false;=0A= cal.callHandler();=0A= }=0A= } else {=0A= var hist =3D Zapatec.Calendar.findHist(target);=0A= if (hist && !hist.histDate.dateEqualsTo(cal.date)) {=0A= //(date =3D new Date(cal.date)).setDateOnly(hist.histDate);=0A= date =3D new Date(hist.histDate);=0A= cal._init(cal.firstDayOfWeek, cal.date =3D date);=0A= cal.dateClicked =3D false;=0A= cal.callHandler();=0A= cal.updateHistory();=0A= }=0A= }=0A= }=0A= Zapatec.Utils.removeEvent(window.document, "mouseup", = Zapatec.Calendar.tableMouseUp);=0A= Zapatec.Utils.removeEvent(window.document, "mouseover", = Zapatec.Calendar.tableMouseOver);=0A= Zapatec.Utils.removeEvent(window.document, "mousemove", = Zapatec.Calendar.tableMouseOver);=0A= cal._hideCombos();=0A= Zapatec.Calendar._C =3D null;=0A= return Zapatec.Utils.stopEvent(ev);=0A= };=0A= =0A= /**=0A= * Event handler that gets called when the end-user moves the mouse over = the=0A= * document.=0A= *=0A= * This function is pretty complicated too. It adds hover/active state = class=0A= * to elements that are highlighted and/or clicked. It determines = whether one=0A= * is trying to modify the time by "drag'n'drop" (the original interface=0A= * implemented by the calendar). Finally, it determines if the=0A= * mouse is over combo box items, also adding/removing hover states and = setting=0A= * some calendar variables with reference to the element involved.=0A= *=0A= * @param ev=0A= *=0A= * @return=0A= */=0A= Zapatec.Calendar.tableMouseOver =3D function (ev) {=0A= var cal =3D Zapatec.Calendar._C;=0A= if (!cal) {=0A= return;=0A= }=0A= var el =3D cal.activeDiv;=0A= var target =3D Zapatec.Utils.getTargetElement(ev);=0A= if (target =3D=3D el || target.parentNode =3D=3D el) {=0A= Zapatec.Utils.addClass(el, "hilite active");=0A= Zapatec.Utils.addClass(el.parentNode, "rowhilite");=0A= } else {=0A= if (typeof el.navtype =3D=3D "undefined" ||=0A= (el.navtype !=3D 50 && ((el.navtype =3D=3D 0 && !cal.histCombo) || = Math.abs(el.navtype) > 2)))=0A= Zapatec.Utils.removeClass(el, "active");=0A= Zapatec.Utils.removeClass(el, "hilite");=0A= Zapatec.Utils.removeClass(el.parentNode, "rowhilite");=0A= }=0A= ev || (ev =3D window.event);=0A= if (el.navtype =3D=3D 50 && target !=3D el) {=0A= var pos =3D Zapatec.Utils.getAbsolutePos(el);=0A= var w =3D el.offsetWidth;=0A= var x =3D ev.clientX;=0A= var dx;=0A= var decrease =3D true;=0A= if (x > pos.x + w) {=0A= dx =3D x - pos.x - w;=0A= decrease =3D false;=0A= } else=0A= dx =3D pos.x - x;=0A= =0A= if (dx < 0) dx =3D 0;=0A= var range =3D el._range;=0A= var current =3D el._current;=0A= var date =3D cal.date;=0A= var pm =3D (date.getHours() >=3D 12);=0A= var old =3D el.firstChild.data; // old value of the element=0A= var count =3D Math.floor(dx / 10) % range.length;=0A= for (var i =3D range.length; --i >=3D 0;)=0A= if (range[i] =3D=3D current)=0A= break;=0A= while (count-- > 0)=0A= if (decrease) {=0A= if (--i < 0) {=0A= i =3D range.length - 1;=0A= }=0A= } else if ( ++i >=3D range.length ) {=0A= i =3D 0;=0A= }=0A= =0A= //ALLOWED TIME CHECK=0A= if (cal.getDateStatus) { =0A= //Current time is changing, check with the callback to see if it's in = range of allowed times=0A= // Fills the "minute" and "hour" variables with the time that user = wants to set, to pass them to the dateStatusHandler for verification.=0A= // As the script passes hours in 24 format, we need to convert input = values if they are not in the needed format.=0A= var minute =3D null; // minutes to be passed=0A= var hour =3D null; // hours to be passed=0A= var new_date =3D new Date(date); // as we pass date element to the = handler, we need to create new one and fill it with new minutes or hours = (depending on what had changed)=0A= // if "ampm" was clicked=0A= if (el.className.indexOf("ampm", 0) !=3D -1) {=0A= minute =3D date.getMinutes(); // minutes didn't change=0A= // if the "ampm" value has changed we need to correct hours (add = 12 or exclude 12 or set it to zero)=0A= if (old !=3D range[i]) {=0A= hour =3D (range[i] =3D=3D "pm") ? ((date.getHours() =3D=3D 0) ? = (12) : (date.getHours() + 12)) : (date.getHours() - 12);=0A= } else {=0A= hour =3D date.getHours();=0A= }=0A= // updates our new Date object that will be passed to the handler=0A= new_date.setHours(hour);=0A= }=0A= // if hours were clicked=0A= if (el.className.indexOf("hour", 0) !=3D -1) {=0A= minute =3D date.getMinutes(); // minutes didn't change=0A= hour =3D (!cal.time24) ? ((pm) ? ((range[i] !=3D 12) ? = (parseInt(range[i], 10) + 12) : (12)) : ((range[i] !=3D 12) ? (range[i]) = : (0))) : (range[i]); // new value of hours=0A= new_date.setHours(hour);=0A= }=0A= // if minutes were clicked=0A= if (el.className.indexOf("minute", 0) !=3D -1) {=0A= hour =3D date.getHours(); // hours didn't change=0A= minute =3D range[i]; // new value of minutes=0A= new_date.setMinutes(minute);=0A= }=0A= }=0A= var status =3D false;=0A= // if the handler is set, we pass new values and retrieve result in = "status" variable=0A= if (cal.getDateStatus) {=0A= status =3D cal.getDateStatus(new_date, date.getFullYear(), = date.getMonth(), date.getDate(), parseInt(hour, 10), parseInt(minute, = 10));=0A= }=0A= // if time is enabled, we set new value=0A= if (status =3D=3D false) {=0A= if ( !((!cal.time24) && (range[i] =3D=3D "pm") && (hour > 23)) ) {=0A= el.firstChild.data =3D range[i];=0A= }=0A= }=0A= cal.onUpdateTime();=0A= //END OF ALLOWED TIME CHECK=0A= }=0A= var mon =3D Zapatec.Calendar.findMonth(target);=0A= if (mon) {=0A= if (!mon.disabled) {=0A= if (mon.month !=3D cal.date.getMonth()) {=0A= if (cal.hilitedMonth) {=0A= Zapatec.Utils.removeClass(cal.hilitedMonth, "hilite");=0A= }=0A= Zapatec.Utils.addClass(mon, "hilite");=0A= cal.hilitedMonth =3D mon;=0A= } else if (cal.hilitedMonth) {=0A= Zapatec.Utils.removeClass(cal.hilitedMonth, "hilite");=0A= }=0A= }=0A= } else {=0A= if (cal.hilitedMonth) {=0A= Zapatec.Utils.removeClass(cal.hilitedMonth, "hilite");=0A= }=0A= var year =3D Zapatec.Calendar.findYear(target);=0A= if (year) {=0A= if (year.year !=3D cal.date.getFullYear()) {=0A= if (cal.hilitedYear) {=0A= Zapatec.Utils.removeClass(cal.hilitedYear, "hilite");=0A= }=0A= Zapatec.Utils.addClass(year, "hilite");=0A= cal.hilitedYear =3D year;=0A= } else if (cal.hilitedYear) {=0A= Zapatec.Utils.removeClass(cal.hilitedYear, "hilite");=0A= }=0A= } else {=0A= if (cal.hilitedYear) {=0A= Zapatec.Utils.removeClass(cal.hilitedYear, "hilite");=0A= }=0A= var hist =3D Zapatec.Calendar.findHist(target);=0A= if (hist) {=0A= if (!hist.histDate.dateEqualsTo(cal.date)) {=0A= if (cal.hilitedHist) {=0A= Zapatec.Utils.removeClass(cal.hilitedHist, "hilite");=0A= }=0A= Zapatec.Utils.addClass(hist, "hilite");=0A= cal.hilitedHist =3D hist;=0A= } else if (cal.hilitedHist) {=0A= Zapatec.Utils.removeClass(cal.hilitedHist, "hilite");=0A= }=0A= } else if (cal.hilitedHist) {=0A= Zapatec.Utils.removeClass(cal.hilitedHist, "hilite");=0A= }=0A= }=0A= }=0A= return Zapatec.Utils.stopEvent(ev);=0A= };=0A= =0A= /**=0A= * This is a simple function that stops a "mousedown" related to the = calendar's=0A= * table element. This helps avoiding text selection in certain = browsers (most=0A= * notably, Safari, since Mozilla already has a better way).=0A= *=0A= * @param ev [Event] the Event object=0A= * @return false=0A= */=0A= Zapatec.Calendar.tableMouseDown =3D function (ev) {=0A= if (Zapatec.Utils.getTargetElement(ev) =3D=3D = Zapatec.Utils.getElement(ev)) {=0A= return Zapatec.Utils.stopEvent(ev);=0A= }=0A= };=0A= =0A= /**=0A= * \defgroup dndmove Drag'n'drop (move calendar) functions=0A= *=0A= * Contains some functions that implement calendar "drag'n'drop" = facility which=0A= * allows one to move the calendar around the browser's view.=0A= */=0A= //@{=0A= /**=0A= * Called at mouseover and/or mousemove on document, this function = repositions=0A= * the calendar according to the current mouse position.=0A= *=0A= * @param ev [Event] The Event object=0A= * @return false=0A= */=0A= Zapatec.Calendar.calDragIt =3D function (ev) {=0A= ev || (ev =3D window.event);=0A= var cal =3D Zapatec.Calendar._C;=0A= if (!(cal && cal.dragging)) {=0A= return false;=0A= }=0A= var posX =3D ev.clientX + window.document.body.scrollLeft;=0A= var posY =3D ev.clientY + window.document.body.scrollTop;=0A= cal.hideShowCovered();=0A= var st =3D cal.element.style, L =3D posX - cal.xOffs, T =3D posY - = cal.yOffs;=0A= st.left =3D L + "px";=0A= st.top =3D T + "px";=0A= Zapatec.Utils.setupWCH(cal.WCH, L, T);=0A= return Zapatec.Utils.stopEvent(ev);=0A= };=0A= =0A= /**=0A= * Gets called when the drag and drop operation is finished; thus, at=0A= * "onmouseup". This function unregisters D'n'D event handlers and calls=0A= * Zapatec.Calendar.hideShowCovered() which repaints as appropriate any=0A= * "windowed controls" that might have been hidden by the end user = moving the=0A= * calendar. (note, this is only for IE5; for IE5.5 there are = better--albeit=0A= * uglier--workarounds).=0A= *=0A= * @param ev [Event] the event object=0A= * @return false=0A= */=0A= Zapatec.Calendar.calDragEnd =3D function (ev) {=0A= var cal =3D Zapatec.Calendar._C;=0A= if (!cal) {=0A= return false;=0A= }=0A= cal.dragging =3D false;=0A= Zapatec.Utils.removeEvent(window.document, "mousemove", = Zapatec.Calendar.calDragIt);=0A= Zapatec.Utils.removeEvent(window.document, "mouseover", = Zapatec.Calendar.calDragIt);=0A= Zapatec.Utils.removeEvent(window.document, "mouseup", = Zapatec.Calendar.calDragEnd);=0A= Zapatec.Calendar.tableMouseUp(ev);=0A= cal.hideShowCovered();=0A= };=0A= //@}=0A= =0A= /**=0A= * Called when the mouse button is pressed upon a button. The name of = this=0A= * function is so for historical reasons; currently, this function is = used for=0A= * \em any type of buttons used in the calendar, not only "days".=0A= *=0A= * This function does quite some things. It checks if the clicked cell = is the=0A= * title bar or the status bar, in which case it starts the calendar = dragging=0A= * mechanism (cal._dragStart()). If the cell is a time part, then it = registers=0A= * Zapatec.Calendar.tableMouseOver() event handler on the document. If = the=0A= * cell is a "navigation" button (next/prev year or month, or today) = then a=0A= * timeout is created that will show the appropriate combo box if the = button is=0A= * not quickly depressed.=0A= *=0A= * @param ev [Event] the event object=0A= * @return false=0A= */=0A= Zapatec.Calendar.dayMouseDown =3D function(ev) {=0A= var el =3D Zapatec.Utils.getElement(ev);=0A= if (el.disabled) {=0A= return false;=0A= }=0A= var cal =3D el.calendar;=0A= cal.activeDiv =3D el;=0A= Zapatec.Calendar._C =3D cal;=0A= if (el.navtype !=3D 300) {=0A= if (el.navtype =3D=3D 50) {=0A= el._current =3D el.firstChild.data;=0A= Zapatec.Utils.addEvent(window.document, "mousemove", = Zapatec.Calendar.tableMouseOver);=0A= } else=0A= Zapatec.Utils.addEvent(window.document, Zapatec.is_ie5 ? "mousemove" = : "mouseover", Zapatec.Calendar.tableMouseOver);=0A= Zapatec.Utils.addClass(el, "hilite active");=0A= Zapatec.Utils.addEvent(window.document, "mouseup", = Zapatec.Calendar.tableMouseUp);=0A= } else if (cal.isPopup) {=0A= cal._dragStart(ev);=0A= }=0A= if (el.navtype =3D=3D -1 || el.navtype =3D=3D 1) {=0A= if (cal.timeout) clearTimeout(cal.timeout);=0A= cal.timeout =3D setTimeout("Zapatec.Calendar.showMonthsCombo()", 250);=0A= } else if (el.navtype =3D=3D -2 || el.navtype =3D=3D 2) {=0A= if (cal.timeout) clearTimeout(cal.timeout);=0A= cal.timeout =3D setTimeout((el.navtype > 0) ? = "Zapatec.Calendar.showYearsCombo(true)" : = "Zapatec.Calendar.showYearsCombo(false)", 250);=0A= } else if (el.navtype =3D=3D 0 && Zapatec.Calendar.prefs.history) {=0A= if (cal.timeout) clearTimeout(cal.timeout);=0A= cal.timeout =3D setTimeout("Zapatec.Calendar.showHistoryCombo()", 250);=0A= } else {=0A= cal.timeout =3D null;=0A= }=0A= return Zapatec.Utils.stopEvent(ev);=0A= };=0A= =0A= /**=0A= * For IE5 we can't make unselectable elements, but we can void the = selection=0A= * immediately after the double click event :D. This function is a = double=0A= * click handler which does exactly that. Uses IE-specific functions.=0A= */=0A= Zapatec.Calendar.dayMouseDblClick =3D function(ev) {=0A= Zapatec.Calendar.cellClick(Zapatec.Utils.getElement(ev), ev || = window.event);=0A= if (Zapatec.is_ie)=0A= window.document.selection.empty();=0A= };=0A= =0A= /**=0A= * This function gets called at "onmouseover" events that trigger on any = kind=0A= * of button, like dates, navigation buttons, etc. Basically, the = function=0A= * computes and caches the tooltip (if it's a date cell for instance) and=0A= * displays it in the status bar. If the cell is not a navigation = button, it=0A= * will also add "rowhilite" class to the containing TR element.=0A= *=0A= * @param ev [Event] the event object.=0A= * @return false=0A= */=0A= Zapatec.Calendar.dayMouseOver =3D function(ev) {=0A= var el =3D Zapatec.Utils.getElement(ev),=0A= caldate =3D el.caldate;=0A= if (caldate)=0A= caldate =3D new Date(caldate[0], caldate[1], caldate[2]);=0A= if (Zapatec.Utils.isRelated(el, ev) || Zapatec.Calendar._C || = el.disabled) {=0A= return false;=0A= }=0A= if (el.ttip) {=0A= if (el.ttip.substr(0, 1) =3D=3D "_") {=0A= el.ttip =3D caldate.print(el.calendar.ttDateFormat) + = el.ttip.substr(1);=0A= }=0A= el.calendar.showHint(el.ttip);=0A= }=0A= if (el.navtype !=3D 300) {=0A= Zapatec.Utils.addClass(el, "hilite");=0A= if (caldate) {=0A= Zapatec.Utils.addClass(el.parentNode, "rowhilite");=0A= }=0A= }=0A= return Zapatec.Utils.stopEvent(ev);=0A= };=0A= =0A= /**=0A= * Gets called when the mouse leaves a button. This function "undoes" = what=0A= * dayMouseOver did, that is, it removes the "rowhilite" class from the=0A= * containing TR and restores the status bar display to read "Select = date".=0A= *=0A= * @param ev [Event] the event object.=0A= * @return false=0A= */=0A= Zapatec.Calendar.dayMouseOut =3D function(ev) {=0A= var el =3D Zapatec.Utils.getElement(ev);=0A= if (Zapatec.Utils.isRelated(el, ev) || Zapatec.Calendar._C || = el.disabled)=0A= return false;=0A= Zapatec.Utils.removeClass(el, "hilite");=0A= if (el.caldate)=0A= Zapatec.Utils.removeClass(el.parentNode, "rowhilite");=0A= if (el.calendar)=0A= el.calendar.showHint(Zapatec.Calendar.i18n("SEL_DATE"));=0A= return Zapatec.Utils.stopEvent(ev);=0A= };=0A= =0A= /**=0A= * The generic "click" handler. This function handles actions on any = kind of=0A= * buttons that appear inside our calendar. It determines the button = type by=0A= * querying \em el.navtype. The following types of objects are = supported:=0A= *=0A= * - Date cells (navtype is undefined). The function will select that = date,=0A= * add appropriate class names and remove them from the previously = selected=0A= * date. If the date in the calendar \em has \em changed, it calls the=0A= * calendar's onSelect handler (see the constructor). If multiple = dates is=0A= * enabled, it will not unselect previously selected date but rather = maintain=0A= * an array of dates which will be avaliable to the onSelect or onClose=0A= * handler.=0A= * - The Close button (navtype =3D=3D 200). If this is clicked, then the=0A= * calendar's onClose handler is called immediately.=0A= * - The Today button (navtype =3D=3D 0). The calendar will jump to the = "today"=0A= * date and time, unless it's already there.=0A= * - The About button (navtype =3D=3D 400). It will display an alert = with the=0A= * "about message", as defined in the translation file.=0A= * - Previous year (navtype =3D=3D -2)=0A= * - Previous month (navtype =3D=3D -1)=0A= * - Next month (navtype =3D=3D 1)=0A= * - Next year (navtype =3D=3D 2)=0A= * - Day names (navtype =3D=3D 100). If any of them is clicked, the = calendar will=0A= * display that day as the first day of week. It calls the "onFDOW" = event=0A= * handler if defined.=0A= * - Time parts (navtype =3D=3D 50). If any of them is clicked, this = function will=0A= * determine if it's a click or shift-click, and will take the = appropriate=0A= * action (simple click means add 1, shift-click means substract 1 = from that=0A= * time part). Then it calls onUpdateTime() to refresh the display.=0A= * - Time scroll buttons (navtype =3D=3D 201 or navtype =3D=3D 202). If = such buttons=0A= * are clicked, the time part involved is determined and it is = incremented or=0A= * decremented with the current step (default: 5). 201 is for "add", = 202 for=0A= * "substract".=0A= *=0A= * @param el [HTMLElement] the object being clicked on=0A= * @param ev [Event] the event object=0A= */=0A= Zapatec.Calendar.cellClick =3D function(el, ev) {=0A= var cal =3D el.calendar;=0A= var closing =3D false;=0A= var newdate =3D false;=0A= var date =3D null;=0A= if (typeof el.navtype =3D=3D "undefined") {=0A= if (cal.currentDateEl) {=0A= Zapatec.Utils.removeClass(cal.currentDateEl, "selected");=0A= Zapatec.Utils.addClass(el, "selected");=0A= closing =3D (cal.currentDateEl =3D=3D el);=0A= if (!closing) {=0A= cal.currentDateEl =3D el;=0A= }=0A= }=0A= cal.date.setDateOnly(new Date(el.caldate[0], el.caldate[1], = el.caldate[2]));=0A= date =3D cal.date;=0A= var other_month =3D !(cal.dateClicked =3D !el.otherMonth);=0A= if (!other_month && cal.multiple)=0A= cal._toggleMultipleDate(new Date(date));=0A= newdate =3D true;=0A= // a date was clicked=0A= if (other_month)=0A= cal._init(cal.firstDayOfWeek, date);=0A= cal.onSetTime();=0A= } else {=0A= if (el.navtype =3D=3D 200) {=0A= Zapatec.Utils.removeClass(el, "hilite");=0A= cal.callCloseHandler();=0A= return;=0A= }=0A= date =3D new Date(cal.date);=0A= if (el.navtype =3D=3D 0)=0A= date.setDateOnly(new Date()); // TODAY=0A= // unless "today" was clicked, we assume no date was clicked so=0A= // the selected handler will know not to close the calenar when=0A= // in single-click mode.=0A= // cal.dateClicked =3D (el.navtype =3D=3D 0);=0A= cal.dateClicked =3D false;=0A= var year =3D date.getFullYear();=0A= var mon =3D date.getMonth();=0A= function setMonth(m) {=0A= var day =3D date.getDate();=0A= var max =3D date.getMonthDays(m);=0A= if (day > max) {=0A= date.setDate(max);=0A= }=0A= date.setMonth(m);=0A= };=0A= switch (el.navtype) {=0A= case 400:=0A= Zapatec.Utils.removeClass(el, "hilite");=0A= var text =3D Zapatec.Calendar.i18n("ABOUT");=0A= if (typeof text !=3D "undefined") {=0A= text +=3D cal.showsTime ? Zapatec.Calendar.i18n("ABOUT_TIME") : "";=0A= } else {=0A= // FIXME: this should be removed as soon as lang files get updated!=0A= text =3D "Help and about box text is not translated into this = language.\n" +=0A= "If you know this language and you feel generous please update\n" +=0A= "the corresponding file in \"lang\" subdir to match = calendar-en.js\n" +=0A= "and send it back to to get it into the = distribution ;-)\n\n" +=0A= "Thank you!\n" +=0A= "http://www.zapatec.com\n";=0A= }=0A= alert(text);=0A= return;=0A= case -2:=0A= if (year > cal.minYear) {=0A= date.setFullYear(year - 1);=0A= }=0A= break;=0A= case -1:=0A= if (mon > 0) {=0A= setMonth(mon - 1);=0A= } else if (year-- > cal.minYear) {=0A= date.setFullYear(year);=0A= setMonth(11);=0A= }=0A= break;=0A= case 1:=0A= if (mon < 11) {=0A= setMonth(mon + 1);=0A= } else if (year < cal.maxYear) {=0A= date.setFullYear(year + 1);=0A= setMonth(0);=0A= }=0A= break;=0A= case 2:=0A= if (year < cal.maxYear) {=0A= date.setFullYear(year + 1);=0A= }=0A= break;=0A= case 100:=0A= cal.setFirstDayOfWeek(el.fdow);=0A= Zapatec.Calendar.prefs.fdow =3D cal.firstDayOfWeek;=0A= Zapatec.Calendar.savePrefs();=0A= if (cal.onFDOW)=0A= cal.onFDOW(cal.firstDayOfWeek);=0A= return;=0A= case 50:=0A= var range =3D el._range;=0A= var current =3D el.firstChild.data;=0A= var pm =3D (date.getHours() >=3D 12);=0A= for (var i =3D range.length; --i >=3D 0;)=0A= if (range[i] =3D=3D current)=0A= break;=0A= if (ev && ev.shiftKey) {=0A= if (--i < 0) {=0A= i =3D range.length - 1;=0A= }=0A= } else if ( ++i >=3D range.length ) {=0A= i =3D 0;=0A= }=0A= =0A= //ALLOWED TIME CHECK=0A= if (cal.getDateStatus) { //Current time is changing, check with the = callback to see if it's in range=0A= // Fills "minute" and "hour" variables with the time that user wants = to set, to pass them to the dateStatusHandler.=0A= // As the script passes hours in 24 format, we need to convert = inputed values if they are not in the needed format =0A= var minute =3D null; // minutes to be passed=0A= var hour =3D null; // hours to be passed=0A= // as we pass date element to the handler, we need to create new one = and fill it with new minutes or hours (depending on what had changed)=0A= var new_date =3D new Date(date);=0A= // if "ampm" was clicked=0A= if (el.className.indexOf("ampm", 0) !=3D -1) {=0A= minute =3D date.getMinutes(); // minutes didn't change=0A= // if the "ampm" value has changed we need to correct hours (add 12 = or exclude 12 or set it to zero)=0A= hour =3D (range[i] =3D=3D "pm") ? ((date.getHours() =3D=3D 12) ? = (date.getHours()) : (date.getHours() + 12)) : (date.getHours() - 12);=0A= // if the time is disabled we seek the first one disabled.=0A= // It fixes the bug when you can not change from 'am' to 'pm' or = vice versa for the dates that have restrictions for time.=0A= // This part of code is very easy to understand, so it don't need = much comments=0A= if ( cal.getDateStatus && cal.getDateStatus(new_date, = date.getFullYear(), date.getMonth(), date.getDate(), parseInt(hour, 10), = parseInt(minute, 10)) ) {=0A= var dirrect;=0A= if (range[i] =3D=3D "pm") {=0A= dirrect =3D -5;=0A= } else {=0A= dirrect =3D 5;=0A= }=0A= hours =3D hour;=0A= minutes =3D minute;=0A= do {=0A= minutes +=3D dirrect;=0A= if (minutes >=3D60) {=0A= minutes -=3D 60;=0A= ++hours;=0A= if (hours >=3D 24) hours -=3D 24;=0A= new_date.setHours(hours);=0A= }=0A= if (minutes < 0) {=0A= minutes +=3D 60;=0A= --hours;=0A= if (hours < 0) hours +=3D 24;=0A= new_date.setHours(hours);=0A= }=0A= new_date.setMinutes(minutes);=0A= if (!cal.getDateStatus(new_date, date.getFullYear(), = date.getMonth(), date.getDate(), parseInt(hours, 10), parseInt(minutes, = 10))) {=0A= hour =3D hours;=0A= minute =3D minutes;=0A= if (hour > 12) i =3D 1; else i =3D 0;=0A= cal.date.setHours(hour);=0A= cal.date.setMinutes(minute);=0A= cal.onSetTime();=0A= }=0A= } while ((hour !=3D hours) || (minute !=3D minutes));=0A= }=0A= // updates our new Date object that will be passed to the handler=0A= new_date.setHours(hour);=0A= }=0A= // if hours were clicked=0A= if (el.className.indexOf("hour", 0) !=3D -1) {=0A= minute =3D date.getMinutes(); // minutes didn't change=0A= hour =3D (!cal.time24) ? ((pm) ? ((range[i] !=3D 12) ? = (parseInt(range[i], 10) + 12) : (12)) : ((range[i] !=3D 12) ? (range[i]) = : (0))) : (range[i]); // new value of hours=0A= new_date.setHours(hour);=0A= }=0A= // if minutes were clicked=0A= if (el.className.indexOf("minute", 0) !=3D -1) {=0A= hour =3D date.getHours(); // hours didn't change=0A= minute =3D range[i]; // new value of minutes=0A= new_date.setMinutes(minute);=0A= }=0A= }=0A= var status =3D false;=0A= // if the handler is set, we pass new values and retreive result in = "status" variable=0A= if (cal.getDateStatus) {=0A= status =3D cal.getDateStatus(new_date, date.getFullYear(), = date.getMonth(), date.getDate(), parseInt(hour, 10), parseInt(minute, = 10));=0A= }=0A= if (!status) {=0A= el.firstChild.data =3D range[i];=0A= }=0A= //END OF ALLOWED TIME CHECK=0A= =0A= cal.onUpdateTime();=0A= return;=0A= case 201: // timepart, UP=0A= case 202: // timepart, DOWN=0A= var cel =3D el.timePart;=0A= var val =3D parseInt(cel.firstChild.data, 10);=0A= var pm =3D (date.getHours() >=3D 12);=0A= var range =3D cel._range;=0A= for (var i =3D range.length; --i >=3D 0;)=0A= if (val =3D=3D range[i]) {=0A= val =3D i;=0A= break;=0A= }=0A= var step =3D cel._step;=0A= if (el.navtype =3D=3D 201) {=0A= val =3D step*Math.floor(val/step);=0A= val +=3D step;=0A= if (val >=3D range.length)=0A= val =3D 0;=0A= } else {=0A= val =3D step*Math.ceil(val/step);=0A= val -=3D step;=0A= if (val < 0)=0A= val =3D range.length-1;=0A= }=0A= =0A= //ALLOWED TIME CHECK=0A= if (cal.getDateStatus) { //Current time is changing, check with the = callback to see if it's in range of allowed times=0A= // Fills "minute" and "hour" variables with the time that user = wants to set, to pass them to the dateStatusHandler.=0A= // As the script passes hours in 24 format, we need to convert = inputed values if they are not in the needed format =0A= var minute =3D null; // minutes to be passed=0A= var hour =3D null; // hours to be passed=0A= // as we pass date element to the handler, we need to create new = one and fill it with new minutes or hours (depending on what had changed)=0A= var new_date =3D new Date(date);=0A= // if hours were changed=0A= if (cel.
TAPPS 2008 Winter/Spring Tournament = Schedule=20
DATE
TOURNAMENT
CITY, STATE
DEADLINE
4/3/2008
TAPPS State = Academics and Arts=20 Tournament
Austin, TX
4/11/2008
TAPPS State Music=20 Competition
Belton, TX
4/11/2008
TAPPS State Music=20 Competition
Abilene, TX
4/24/2008
TAPPS State Tennis = Tournament
Waco, TX
5/1/2008
TAPPS State Track=20 Meet
Waco, TX
5/8/2008
TAPPS State = Baseball=20 Championships
Waco, TX
5/8/2008
TAPPS State = Softball=20 Championships
Belton, TX
Enter city:
State:
Check in:
=
Nights:
=20
Rooms:
=
Hotel name contains=20 (optional):
=
Address:
City:
State:
Zip code:
=
Within mile = radius:
All
Check in:
Nights:
=20
Rooms:
=
Hotel name contains=20 (optional):
=
Zip code:
Within mile = radius:
All
Check in:
Nights:
=20
Rooms:
=
Hotel name contains=20 (optional):
=
Near landmark:
Check in:
Nights:
=20
Rooms:
=
Hotel name contains=20 (optional):
=
Check in:
Nights:
=20
Rooms:
=
Hotel name contains=20 (optional):
=
=20 =