0001: /*
0002: * Copyright 2001 Sun Microsystems, Inc. All rights reserved.
0003: * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to license terms.
0004: */
0005: package com.sun.portal.rewriter.engines.js.test;
0006:
0007: import com.sun.portal.rewriter.Rewriter;
0008: import com.sun.portal.rewriter.RewriterPool;
0009: import com.sun.portal.rewriter.engines.LanguageConstants;
0010: import com.sun.portal.rewriter.rom.RuleSet;
0011: import com.sun.portal.rewriter.test.util.BasicTestCase;
0012: import com.sun.portal.rewriter.test.util.CreateRuleSet;
0013: import com.sun.portal.rewriter.test.util.JSWrapperHelper;
0014: import junit.framework.TestSuite;
0015:
0016: public class TestJSGeneral extends BasicTestCase {
0017: public TestJSGeneral(String aName) {
0018: super (aName);
0019: }//constuctor
0020:
0021: public void testBug4730531NetletScript() throws Exception {
0022: String lInput = "/* \n"
0023: + " * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to license terms. \n"
0024: + " * Copyright 2002 Sun Microsystems, Inc. All rights reserved. \n"
0025: + " */\n"
0026: + " \n"
0027: + "\n"
0028: + "var danameEnabled = false;\n"
0029: + "var algoDefault = false;\n"
0030: + "\n"
0031: + "function initializeAll() {\n"
0032: + " setSelectedAlgos(); // Select the algorithms for the current rule name\n"
0033: + " setalgoState(); // set the algorithm state (Default/Other)\n"
0034: + " setdanameState(); // set the state for download applet text field \n"
0035: + " initPhplist(); // Select the first entry in the PHP list\n"
0036: + "}\n"
0037: + "\n"
0038: + "function setalgoState() {\n"
0039: + " var algotype = document.forms[formName].algotype[0].checked;\n"
0040: + " if(algotype == true){\n"
0041: + " algoDefault = true;\n"
0042: + " document.forms[formName].elements[algorithms].disabled = true;\n"
0043: + " var algosize = document.forms[formName].elements[algorithms].options.length;\n"
0044: + " for(var i=0; i < algosize; i++) {\n"
0045: + " document.forms[formName].elements[algorithms].options[i].selected = false;\n"
0046: + " }\n"
0047: + " } else {\n"
0048: + " algoDefault = false;\n"
0049: + " document.forms[formName].elements[algorithms].disabled = false;\n"
0050: + " }\n"
0051: + "}\n"
0052: + " \n"
0053: + "function setdanameState() {\n"
0054: + " var dacb = document.forms[formName].elements[downloadappletcb].checked;\n"
0055: + " if(dacb == false) {\n"
0056: + " danameEnabled = false;\n"
0057: + " document.forms[formName].elements[downloadappletname].disabled = true;\n"
0058: + " } else {\n"
0059: + " danameEnabled = true;\n"
0060: + " document.forms[formName].elements[downloadappletname].disabled = false;\n"
0061: + " }\n"
0062: + "}\n"
0063: + " \n"
0064: + "function setSelectedAlgos() {\n"
0065: + " var nameandalgo = document.forms[formName].elements[selectedAlgos].value;\n"
0066: + " var nameandalgos = nameandalgo.split(\"^\");\n"
0067: + " if(nameandalgos.length == 1) {\n"
0068: + " document.forms[formName].algotype[0].checked = true;\n"
0069: + " } else if(nameandalgos.length == 2) {\n"
0070: + " document.forms[formName].algotype[1].checked = true; \n"
0071: + " for(var i = 0; i < document.forms[formName].elements[algorithms].options.length; i++)\n"
0072: + " {\n"
0073: + " var opt = document.forms[formName].elements[algorithms].options[i];\n"
0074: + " if(opt.value == nameandalgos[1]) {\n"
0075: + " document.forms[formName].elements[algorithms].options[i].selected = true;\n"
0076: + " break;\n"
0077: + " }\n"
0078: + " }\n"
0079: + " } else {\n"
0080: + " document.forms[formName].algotype[1].checked = true; \n"
0081: + " var algos = nameandalgos[2].split(\"+\");\n"
0082: + " for(var j = 0; j < algos.length; j++) {\n"
0083: + " for(var i = 0; i < document.forms[formName].elements[algorithms].options.length; i++)\n"
0084: + " {\n"
0085: + " var opt = document.forms[formName].elements[algorithms].options[i];\n"
0086: + " if(opt.value == algos[j]) {\n"
0087: + " document.forms[formName].elements[algorithms].options[i].selected = true;\n"
0088: + " break;\n"
0089: + " }\n"
0090: + " }\n"
0091: + " }\n"
0092: + " }\n"
0093: + "}\n"
0094: + "\n"
0095: + "function selectListBoxes() {\n"
0096: + " addToSelBeforeSubmitArray(formName,phplist);\n"
0097: + " selBeforeSubmit();\n"
0098: + "}\n"
0099: + "\n"
0100: + "function _isDigit (c) {\n"
0101: + " return ((c >= \"0\") && (c <= \"9\"));\n"
0102: + "}\n"
0103: + "\n"
0104: + "function _isLetter (c) {\n"
0105: + " return ( ((c >= \"a\") && (c <= \"z\")) || ((c >= \"A\") && (c <= \"Z\")) )\n"
0106: + "}\n"
0107: + "\n"
0108: + "\n"
0109: + "function _isInteger(s) {\n"
0110: + " for (i = 0; i < s.length; i++) {\n"
0111: + " var c = s.charAt(i);\n"
0112: + " if (!_isDigit(c))\n"
0113: + " return false;\n"
0114: + " }\n"
0115: + " return true;\n"
0116: + "}\n"
0117: + "\n"
0118: + "\n"
0119: + "function validatePhpvalues() {\n"
0120: + " var sport = document.forms[formName].elements[sourceport].value;\n"
0121: + " var thost = document.forms[formName].elements[targethost].value;\n"
0122: + " var tport = document.forms[formName].elements[targetport].value;\n"
0123: + " var numofthosts = 0; // Used only for static rules\n"
0124: + "\n"
0125: + " if(sport.length == 0 || thost.length == 0 || tport.length == 0) {\n"
0126: + " alert(errorMessages['emptyFields']);\n"
0127: + " return false;\n"
0128: + " }\n"
0129: + "\n"
0130: + " if(!_isInteger(sport)) {\n"
0131: + " alert(errorMessages['invalidclientport']);\n"
0132: + " return false;\n"
0133: + " }\n"
0134: + "\n"
0135: + " if(!_isLetter(thost.charAt(0))) {\n"
0136: + " alert(errorMessages['invalidtargethost']);\n"
0137: + " return false;\n"
0138: + " }\n"
0139: + "\n"
0140: + " if(document.forms[formName].elements[targethost].value == \"TARGET\") {\n"
0141: + " if(tport.indexOf(\"-\") >= 0) {\n"
0142: + " alert(errorMessages['dynamictargetport']);\n"
0143: + " return false;\n"
0144: + " }\n"
0145: + "\n"
0146: + " var tports = tport.split(\"+\");\n"
0147: + "\n"
0148: + " for(var i = 0; i < tports.length; i++) {\n"
0149: + " if(tports[i] == \"\" || !_isInteger(tports[i])) {\n"
0150: + " alert(errorMessages['invalidtargetport']);\n"
0151: + " return false;\n"
0152: + " }\n"
0153: + " }\n"
0154: + " } else{\n"
0155: + " var thosts = thost.split(\"+\");\n"
0156: + " numofthosts = thosts.length;\n"
0157: + "\n"
0158: + " for(var i = 0; i < thosts.length; i++) {\n"
0159: + " if(thosts[i] == \"\" || !_isLetter(thosts[i].charAt(0))) {\n"
0160: + " alert(errorMessages['invalidtargethost']);\n"
0161: + " return false;\n"
0162: + " }\n"
0163: + " }\n"
0164: + "\n"
0165: + " var tportlist = tport.split(\"-\");\n"
0166: + "\n"
0167: + " if( (tportlist.length != 1) && (tportlist.length != numofthosts) ) {\n"
0168: + " alert(errorMessages['targetportlist']);\n"
0169: + " return false;\n"
0170: + " }\n"
0171: + "\n"
0172: + " for(var i = 0; i < tportlist.length; i++) {\n"
0173: + " var tports = tportlist[i].split(\"+\");\n"
0174: + " for(var j = 0; j < tports.length; j++) {\n"
0175: + " if(tports[j] == \"\" || !_isInteger(tports[j])) {\n"
0176: + " alert(errorMessages['invalidtargetport']);\n"
0177: + " return false;\n"
0178: + " }\n"
0179: + " }\n"
0180: + " }\n"
0181: + " }\n"
0182: + "\n"
0183: + " return true;\n"
0184: + "}\n"
0185: + "\n"
0186: + "function addToPhplist() {\n"
0187: + " var entry = document.forms[formName].elements[sourceport].value + \" \" +\n"
0188: + " document.forms[formName].elements[targethost].value + \" \" +\n"
0189: + " document.forms[formName].elements[targetport].value;\n"
0190: + "\n"
0191: + " /*\n"
0192: + " * Check for duplicates before invoking _validatePhpvalues()\n"
0193: + " * as _validatePhpvalues() is heavy weight\n"
0194: + " */\n"
0195: + "\n"
0196: + " for(var i = 0; i < document.forms[formName].elements[phplist].options.length; i++) {\n"
0197: + " var cur = document.forms[formName].elements[phplist].options[i];\n"
0198: + "\n"
0199: + " if(cur.value == entry) {\n"
0200: + " alert(errorMessages['duplicatetargets']);\n"
0201: + " return;\n"
0202: + " }\n"
0203: + " }\n"
0204: + "\n"
0205: + " if(validatePhpvalues()) {\n"
0206: + " var phplistlength = document.forms[formName].elements[phplist].length;\n"
0207: + " var opt = new Option(entry,entry);\n"
0208: + " document.forms[formName].elements[phplist].options[phplistlength] = opt;\n"
0209: + " document.forms[formName].elements[sourceport].value = \"\";\n"
0210: + " document.forms[formName].elements[targethost].value = \"\";\n"
0211: + " document.forms[formName].elements[targetport].value= \"\";\n"
0212: + " }\n"
0213: + "}\n"
0214: + "\n"
0215: + "/*\n"
0216: + " * Deletes the selected entries from the Source port, Target host &\n"
0217: + " * Target port list\n"
0218: + " */\n"
0219: + "\n"
0220: + "function deleteFromPhplist() {\n"
0221: + " for(var i = 0; i < document.forms[formName].elements[phplist].length; i++) {\n"
0222: + " var opt = document.forms[formName].elements[phplist].options[i];\n"
0223: + "\n"
0224: + " if( (opt.selected) && (opt.value != \"\") ) {\n"
0225: + " document.forms[formName].elements[phplist].options[i] = null;\n"
0226: + " if (document.forms[formName].elements[phplist].length > 0) {\n"
0227: + " i--;\n"
0228: + " }\n"
0229: + " }\n"
0230: + " }\n"
0231: + "}\n"
0232: + "\n"
0233: + "/*\n"
0234: + " * Put the selected Source port, Target host, and Target port\n"
0235: + " * into the appropriate input widgets\n"
0236: + " */\n"
0237: + "\n"
0238: + "function editPhpselected() {\n"
0239: + " var selectedphp = \"\";\n"
0240: + "\n"
0241: + " for(var i = 0; i < document.forms[formName].elements[phplist].options.length; i++) {\n"
0242: + " var opt = document.forms[formName].elements[phplist].options[i];\n"
0243: + " if(opt.selected) {\n"
0244: + " selectedphp = opt.value;\n"
0245: + " }\n"
0246: + " }\n"
0247: + " if( (selectedphp == null) || (selectedphp == \"\") ) {\n"
0248: + " document.forms[formName].elements[sourceport].value = \"\";\n"
0249: + " document.forms[formName].elements[targethost].value = \"\";\n"
0250: + " document.forms[formName].elements[targetport].value = \"\";\n"
0251: + " return;\n"
0252: + " }\n"
0253: + " var selectedphps = selectedphp.split(\" \");\n"
0254: + "\n"
0255: + " document.forms[formName].elements[sourceport].value = selectedphps[0];\n"
0256: + " document.forms[formName].elements[targethost].value = selectedphps[1];\n"
0257: + " document.forms[formName].elements[targetport].value = selectedphps[2];\n"
0258: + "}\n"
0259: + "\n"
0260: + "function initPhplist() {\n"
0261: + " for(var i=0; i < document.forms[formName].elements[phplist].options.length; i++) {\n"
0262: + " document.forms[formName].elements[phplist].options[i].selected = false;\n"
0263: + " }\n"
0264: + " if(document.forms[formName].elements[phplist].options[0] != null &&\n"
0265: + " document.forms[formName].elements[phplist].options[0].value != \"\" ) {\n"
0266: + " document.forms[formName].elements[phplist].options[0].selected = true;\n"
0267: + " editPhpselected();\n" + " }\n" + "}\n";
0268:
0269: String lExpectation = lInput;
0270:
0271: String lJSVarRules = "<Variable name=\"myimgsrc\" type=\"EXPRESSION\"/>\t"
0272: + "<Variable name=\"mySwf2\" type=\"URL\"/>";
0273:
0274: RuleSet lRuleSet = CreateRuleSet.withHTMLAttJSVarJSFunRules("",
0275: lJSVarRules, "");
0276: Rewriter lRewriter = RewriterPool.create(lRuleSet,
0277: LanguageConstants.JS_MIME);
0278: String lResult = lRewriter.rewrite(lInput,
0279: getDefaultJSTranslator());
0280: assertEquals(lExpectation, lResult);
0281: }//testBug4730531NetletScript()
0282:
0283: public void testBhavani() throws Exception {
0284: String lInput = "<html>\n"
0285: + "<body onload=window.location.replace(\"http://raja.com:30000\")>\n"
0286: + "<body onload=window.location.replace(\"telnet://localhost:30000\")>\n"
0287: + "<body onload=window.location.replace(\"/index.html\")>\n"
0288: + "</body></html>\n";
0289:
0290: String lExpectation = "<html>\n"
0291: + "<body onload=window.location.replace(\"http://raja.com:30000\")>\n"
0292: + "<body onload=window.location.replace(\"telnet://localhost:30000\")>\n"
0293: + "<body onload=window.location.replace(\"http://rajanagendra.sun.com/index.html\")>\n"
0294: + "</body></html>\n";
0295:
0296: String lJSTokenRules = "<Attribute name=\"onload\" type=\"DJS\"/>";
0297: String lJSFuncRules = "<Function type=\"EXPRESSION\" name=\"*location.replace\" paramPatterns=\"y\"/>";
0298: RuleSet lRuleSet = CreateRuleSet
0299: .withHTMLJSTokenJSVarJSFunRules(lJSTokenRules, "",
0300: lJSFuncRules);
0301: Rewriter lRewriter = RewriterPool.create(lRuleSet,
0302: LanguageConstants.HTML_MIME);
0303: String lResult = lRewriter.rewrite(lInput,
0304: getDefaultTranslator());
0305: assertEquals(lExpectation, lResult);
0306: }//testBhavani()
0307:
0308: public void testOutllokExchangeCalendarHTC() throws Exception {
0309: String lInput = "<!--Copyright (c) 2000 Microsoft Corporation. All rights reserved.-->\n"
0310: + "<HTML>\n"
0311: + "<property name=\"updateCalText\" put=\"put_caltext\" get=\"get_caltext\" />\n"
0312: + "<property name=\"updateViewText\" put=\"put_viewtext\" get=\"get_viewtext\" />\n"
0313: + "<property name=\"statusElement\" put=\"put_statusEl\" get=\"get_statusEl\" />\n"
0314: + "<property name=\"nextMonthImage\" />\n"
0315: + "<property name=\"prevMonthImage\" />\n"
0316: + "<property name=\"readOnly\" put=\"put_readOnly\" get=\"get_readOnly\" />\n"
0317: + "<property name=\"day\" put=\"put_Day\" get=\"get_Day\" />\n"
0318: + "<property name=\"month\" put=\"put_Month\" get=\"get_Month\" />\n"
0319: + "<property name=\"year\" put=\"put_Year\" get=\"get_Year\" />\n"
0320: + "<property name=\"fullyear\" put=\"put_FullYear\" get=\"get_FullYear\" />\n"
0321: + "<property name=\"pollInterval\" put=\"put_PollInterval\" get=\"get_PollInterval\" />\n"
0322: + "<property name=\"folderURL\" />\n"
0323: + "<property name=\"monthNamesShort\" />\n"
0324: + "<property name=\"monthNamesLong\" />\n"
0325: + "<property name=\"weekdayLetters\" />\n"
0326: + "<property name=\"dateFormat\" />\n"
0327: + "\n"
0328: + "<method name=\"setView\" internalName=\"f_setView\" />\n"
0329: + "<method name=\"refresh\" internalName=\"f_refresh\" />\n"
0330: + "<attach event=\"ondocumentready\" handler=\"onDocumentReady\" />\n"
0331: + "<attach event=\"onstop\" handler=\"onStop\" for=\"document\" />\n"
0332: + "<attach event=\"onclick\" handler=\"onClick\" />\n"
0333: + "\n"
0334: + "<event id=\"id_OnDateChange\" name=\"OnDateChange\" />\n"
0335: + "<DIV id=__idExchMasterCalendarRowNode>\n"
0336: + "<TABLE class='calctrlTable' cellpadding='2'>\n"
0337: + "<TR class='calctrlRow'>\n"
0338: + "<TD offCell=1 weekselect=1 class='calctrlWeeklyCell'> </TD>\n"
0339: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
0340: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
0341: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
0342: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
0343: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
0344: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
0345: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
0346: + "</TR>\n"
0347: + "</TABLE>\n"
0348: + "</div>\n"
0349: + "<div id=__idExchMasterCalendarTableNode>\n"
0350: + "<TABLE border=0 cellpadding=0 cellspacing=0 class=\"calctrlTitle\">\n"
0351: + "<TR >\n"
0352: + "<TD leftNavButton=1><img src=\"\" leftNavButton=1 border=0 height=\"10\"></TD>\n"
0353: + "<TD monthDisplayName=1 colspan=6 class='calctrlMonthDisplayName'></TD>\n"
0354: + "<TD rightNavButton=1 class='calctrlRightNavButton'><img src=\"\" rightNavButton=1 border=0 height=\"10\"></TD>\n"
0355: + "</TR>\n"
0356: + "</TABLE>\n"
0357: + "</DIV>\n"
0358: + "<SCRIPT LANGUAGE=\"JavaScript\">\n"
0359: + "\n"
0360: + "var m_objXSL = new ActiveXObject(\"Microsoft.XMLDOM\");\n"
0361: + "var m_objOutPutXML = new ActiveXObject(\"Microsoft.XMLDOM\");\n"
0362: + "var m_objOutPutXMLBold = new ActiveXObject(\"Microsoft.XMLDOM\");\n"
0363: + "var m_iIntervalID = null;\n"
0364: + "var m_iPollInterval = 10;\n"
0365: + "var m_objXMLhttp = null;\n"
0366: + "var m_objXMLhttpBold = null;\n"
0367: + "var m_objXMLhttp_polling= new ActiveXObject(\"Microsoft.XMLhttp\");\n"
0368: + "var m_iSubscriptionID = null;\n"
0369: + "var m_fReadOnly = false;\n"
0370: + "\n"
0371: + "var m_objMainDate;\n"
0372: + "var m_objTodaysDate = new Date();\n"
0373: + " m_objTodaysDate.setHours(0,0,0,0);\n"
0374: + "\n"
0375: + "\n"
0376: + "var m_objSelectedStart;\n"
0377: + "var m_objSelectedEnd;\n"
0378: + "\n"
0379: + "var m_objMainTable = null;\n"
0380: + "var m_objSelectedDay = new Array();\n"
0381: + "var m_fHasLoaded = false;\n"
0382: + "var m_iFirstDayOfMonth = 0;\n"
0383: + "var m_iDaysInMonth = 0;\n"
0384: + "var m_iView = 0;\n"
0385: + "var m_szHighlightBG = \"highlight\";\n"
0386: + "var m_szHighlightText = \"highlighttext\";\n"
0387: + "var m_szNormalDateBG = \"window\";\n"
0388: + "var m_szNormalBG = \"window\";\n"
0389: + "var m_szNormalText = \"windowtext\";\n"
0390: + "var m_szInactiveBG = \"appworkspace\";\n"
0391: + "var m_objStatus;\n"
0392: + "var m_rgCalCells;\n"
0393: + "var m_rgMonthNamesShort;\n"
0394: + "var m_rgMonthNamesLong;\n"
0395: + "var m_szDateFormat;\n"
0396: + "var m_rgWeekdayLetters;\n"
0397: + "var m_fHaveData = false;\n"
0398: + "var m_iStartDay;\n"
0399: + "var m_oCalStartDate = new Date();\n"
0400: + "var m_oCalEndDate = new Date();\n"
0401: + "var L_szUpdating;\n"
0402: + "var L_szUpdatingBold;\n"
0403: + "\n"
0404: + "void function onDocumentReady()\n"
0405: + "{\n"
0406: + " var szXSLString =\n"
0407: + " '<xsl:template xmlns:xsl=\"uri:xsl\" xmlns:a=\"DAV:\"><root>' +\n"
0408: + " '<xsl:for-each select=\"a:multistatus/a:response\">' +\n"
0409: + " '<appointment><url><xsl:value-of select=\"a:href\" /></url>' +\n"
0410: + " '<xsl:for-each select=\"a:propstat[a:status != \\'HTTP/1.1 404 Resource Not Found\\']/a:prop\">' +\n"
0411: + " '<subject><xsl:value-of select=\"subject\" /></subject>' +\n"
0412: + " '<instancetype><xsl:value-of select=\"instancetype\" /></instancetype>' +\n"
0413: + " '<location><xsl:value-of select=\"location\" /></location>' +\n"
0414: + " '<dtstart><xsl:value-of select=\"dtstart\" /></dtstart>' +\n"
0415: + " '<dtend><xsl:value-of select=\"dtend\" /></dtend>' +\n"
0416: + " '<busystatus><xsl:value-of select=\"busystatus\" /></busystatus>' + \n"
0417: + " '<alldayevent><xsl:value-of select=\"alldayevent\" /></alldayevent>' +\n"
0418: + " '<pr_cdormid><xsl:value-of select=\"pr_cdormid\" /></pr_cdormid>' +\n"
0419: + " '<sensitivity><xsl:value-of select=\"sensitivity\" /></sensitivity>' +\n"
0420: + " '<apptstateflags><xsl:value-of select=\"apptstateflags\" /></apptstateflags>' +\n"
0421: + " '<uid><xsl:value-of select=\"uid\" /></uid>' +\n"
0422: + " '</xsl:for-each></appointment></xsl:for-each></root></xsl:template>';\n"
0423: + "\n"
0424: + " m_objXSL.loadXML(szXSLString);\n"
0425: + "\n"
0426: + " /**************Do initial calendar rendering******************/\n"
0427: + " m_iStartDay = (this.startDay == null)?0:Number(this.startDay);\n"
0428: + " with (this.__idExchMasterCalendarTableNode.children[0])\n"
0429: + " {\n"
0430: + " cells[0].children[0].src = this.prevMonthImage;\n"
0431: + " cells[2].children[0].src = this.nextMonthImage;\n"
0432: + " }\n"
0433: + " mfRenderCalendar();\n"
0434: + "\n"
0435: + " m_rgMonthNamesShort = (null == this.monthnamesShort || \"\" == this.monthnamesShort)?\n"
0436: + " \"Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec\".split(\";\"):\n"
0437: + " this.monthnamesShort.split(\";\");\n"
0438: + " m_rgMonthNamesLong = (null == this.monthnamesLong || \"\" == this.monthnamesLong)?\n"
0439: + " \"January;February;March;April;May;June;July;August;September;October;November;December\".split(\";\"):\n"
0440: + " this.monthnamesLong.split(\";\");\n"
0441: + " m_rgWeekdayLetters = (this.weekdayLetters)?this.weekdayLetters.split(\";\"):\"M;T;W;T;F;S;S\".split(\";\");\n"
0442: + " m_szDateFormat = (this.dateFormat)?this.dateFormat:\"[MMMM] [yyyy]\";\n"
0443: + " var iM=-1,iD=-1,iY=-1,szX;\n"
0444: + " m_objMainTable = this.children[0];\n"
0445: + " m_rgCalCells = m_objMainTable.cells[\"numbercell\"];\n"
0446: + " for(var i = 0; i < 7; i++) //day letters\n"
0447: + " {\n"
0448: + " with(m_rgCalCells[i])\n"
0449: + " {\n"
0450: + " innerText = m_rgWeekdayLetters[( (m_iStartDay+i)%m_rgWeekdayLetters.length )];\n"
0451: + " dayNameCell = \"1\";\n"
0452: + " style.backgroundColor = m_szNormalBG;\n"
0453: + " style.color = m_szNormalText;\n"
0454: + " style.borderBottom = \"solid 1px black\";\n"
0455: + " }\n"
0456: + " }\n"
0457: + " //parseInt treats leading '0' as octal numbers\n"
0458: + " //need to disect the whole number and use Number()\n"
0459: + " iM = parseURLfor(\"m\");\n"
0460: + " iM = (null==iM || \"\"==iM)?-1:Number(iM);\n"
0461: + " iD = parseURLfor(\"d\");\n"
0462: + " iD = (null==iD || \"\"==iD)?-1:Number(iD);\n"
0463: + " iY = parseURLfor(\"y\");\n"
0464: + " iY = (null==iY || \"\"==iY)?-1:Number(iY);\n"
0465: + "\n"
0466: + " if(-3 == iM+iY+iD)//no date info on the url\n"
0467: + " {\n"
0468: + " m_objMainDate = new Date(); //use todays date\n"
0469: + " }\n"
0470: + " else\n"
0471: + " {\n"
0472: + " //missing defaults to current month/year and 1st day of month\n"
0473: + " iM = (isNaN(iM) || iM == -1)?m_objTodaysDate.getMonth():iM-1;\n"
0474: + " iY = (isNaN(iY) || iY == -1)?m_objTodaysDate.getFullYear():iY;\n"
0475: + " iD = (isNaN(iD) || iD == -1)?1:iD;\n"
0476: + " \n"
0477: + " try\n"
0478: + " {\n"
0479: + " m_objMainDate = new Date(iY,iM,iD); \n"
0480: + " }\n"
0481: + " catch(e)\n"
0482: + " {\n"
0483: + " m_objMainDate = new Date(); \n"
0484: + " }\n"
0485: + " }\n"
0486: + " m_objSelectedStart = new Date(m_objMainDate);\n"
0487: + " m_objSelectedEnd = new Date(m_objMainDate);\n"
0488: + " //search url for view\n"
0489: + " var szView = parseURLfor(\"view\");\n"
0490: + " szView = (null == szView)?\"daily\":szView.toLowerCase();\n"
0491: + " m_iView=(szView==\"weekly\")?1:( (szView==\"monthly\")?2:0 );\n"
0492: + " if (1 == m_iView) //adjust selects weekly\n"
0493: + " {//need to find start of this week\n"
0494: + " i = m_objSelectedStart.getDay()-m_iStartDay;\n"
0495: + " i+=(0>=i)?7:0;\n"
0496: + " m_objSelectedStart.setDate(m_objSelectedStart.getDate()-i);\n"
0497: + " m_objSelectedEnd.setDate(m_objSelectedStart.getDate()+6);\n"
0498: + " }\n"
0499: + " else if (2==m_iView) //monthly\n"
0500: + " {\n"
0501: + " m_objSelectedStart.setDate(1);\n"
0502: + " i = m_objSelectedStart.getDay()-m_iStartDay;\n"
0503: + " i+=(0>=i)?7:0;\n"
0504: + " m_objSelectedStart.setDate(m_objSelectedStart.getDate()-i);\n"
0505: + " \n"
0506: + " m_objSelectedEnd.setTime( m_objSelectedStart.getTime()+(41*86400000) );\n"
0507: + " }\n"
0508: + " m_objSelectedStart.setHours(0,0,0,0);\n"
0509: + " m_objSelectedEnd.setHours(24,0,0,0);\n"
0510: + "\n"
0511: + " mfUpdateCalendar(true,true);\n"
0512: + "}\n"
0513: + "void function fire_OnDateChange(objXML)\n"
0514: + "{\n"
0515: + " if(m_fHaveData)\n"
0516: + " {\n"
0517: + " var objEvent = createEventObject();\n"
0518: + " objEvent.xml = objXML;\n"
0519: + " objEvent.view = m_iView;\n"
0520: + " objEvent.date = (2==m_iView)?m_objMainDate:m_objSelectedStart;\n"
0521: + " id_OnDateChange.fire(objEvent);\n"
0522: + " }\n"
0523: + "}\n"
0524: + "\n"
0525: + "void function onStop() \n"
0526: + "{\n"
0527: + " if(m_iIntervalID)\n"
0528: + " {\n"
0529: + " window.clearInterval(m_iIntervalID);\n"
0530: + " }\n"
0531: + "}\n"
0532: + "void function onClick()\n"
0533: + "{\n"
0534: + " event.cancelBubble=true;\n"
0535: + " if(!m_fReadOnly)\n"
0536: + " {\n"
0537: + " if(null != event.srcElement.dayCell)\n"
0538: + " { \n"
0539: + " mfSetDailyView(event.srcElement);\n"
0540: + " return;\n"
0541: + " }\n"
0542: + " else if(null != event.srcElement.leftNavButton)\n"
0543: + " {\n"
0544: + " m_objMainDate.setMonth(m_objMainDate.getMonth()-1);\n"
0545: + " mfUpdateCalendar(false,true);\n"
0546: + " return;\n"
0547: + " }\n"
0548: + " else if(null != event.srcElement.rightNavButton)\n"
0549: + " {\n"
0550: + " m_objMainDate.setMonth(m_objMainDate.getMonth()+1);\n"
0551: + " mfUpdateCalendar(false,true);\n"
0552: + " return;\n"
0553: + " }\n"
0554: + " else if(null != event.srcElement.monthDisplayName)\n"
0555: + " {\n"
0556: + " mfSetMonthlyView();\n"
0557: + " }\n"
0558: + " else if(null != event.srcElement.weekselect)\n"
0559: + " {\n"
0560: + " mfSetWeeklyView(m_objMainTable.rows[event.srcElement.parentElement.rowIndex].cells[1]);\n"
0561: + " }\n"
0562: + " }\n"
0563: + "}\n"
0564: + "\n"
0565: + "void function mfSetDailyView(eCell)\n"
0566: + "{\n"
0567: + " m_iView=0;\n"
0568: + " m_objSelectedStart.setFullYear(eCell.year,eCell.month,parseInt(eCell.innerText));\n"
0569: + " m_objSelectedEnd.setTime(m_objSelectedStart);\n"
0570: + " mfFindAndSelectDate();\n"
0571: + " mfGetAppointments(true,false,true);\n"
0572: + "}\n"
0573: + "void function mfSetWeeklyView(eCell)\n"
0574: + "{\n"
0575: + " m_iView=1;\n"
0576: + " m_objSelectedStart.setFullYear(eCell.year,eCell.month,eCell.innerText);\n"
0577: + " m_objSelectedEnd.setFullYear(eCell.year,eCell.month,Number(eCell.innerText)+6);\n"
0578: + " mfFindAndSelectDate();\n"
0579: + " mfGetAppointments(true,false,true);\n"
0580: + "}\n"
0581: + "void function mfSetMonthlyView()\n"
0582: + "{\n"
0583: + " m_iView=2;\n"
0584: + " m_objSelectedStart.setTime(m_oCalStartDate);\n"
0585: + " m_objSelectedEnd.setTime(m_oCalEndDate);\n"
0586: + " mfFindAndSelectDate();\n"
0587: + " mfGetAppointments(true,false,true);\n"
0588: + "}\n"
0589: + "void function f_setView(iView)\n"
0590: + "{\n"
0591: + " //use the currently selected cell to determine view\n"
0592: + " if(m_iView == iView)\n"
0593: + " {\n"
0594: + " return;\n"
0595: + " }\n"
0596: + " m_iView = iView;\n"
0597: + " switch(iView)\n"
0598: + " {\n"
0599: + " case 1:\n"
0600: + " //use the last selected day or today\n"
0601: + " var x=(-1<mfFindAndSelectDate.iHoldLastDaily)?mfFindAndSelectDate.iHoldLastDaily:mfFindAndSelectDate.iStartIdx;\n"
0602: + " mfSetWeeklyView(m_objMainTable.rows[m_rgCalCells[x].parentElement.rowIndex].cells[1]);\n"
0603: + " break;\n"
0604: + " case 2:\n"
0605: + " mfSetMonthlyView();\n"
0606: + " break;\n"
0607: + " case 0:\n"
0608: + " default:\n"
0609: + " var x=(-1<mfFindAndSelectDate.iHoldLastDaily)?mfFindAndSelectDate.iHoldLastDaily:mfFindAndSelectDate.iStartIdx;\n"
0610: + " mfSetDailyView(m_rgCalCells[x]);\n"
0611: + " }\n"
0612: + "}\n"
0613: + "//unselects current selection\n"
0614: + "//searches calendar for matching date cell given in m_objSelectedStart\n"
0615: + "mfFindAndSelectDate.iStartIdx=-1;\n"
0616: + "mfFindAndSelectDate.iEndIdx=-1;\n"
0617: + "mfFindAndSelectDate.iHoldLastDaily=-1;\n"
0618: + "void function mfFindAndSelectDate()\n"
0619: + "{\n"
0620: + " var x,y;\n"
0621: + " \n"
0622: + " if (mfFindAndSelectDate.iStartIdx>-1)\n"
0623: + " { //remove any prev selection\n"
0624: + " for(x=mfFindAndSelectDate.iStartIdx;x<=mfFindAndSelectDate.iEndIdx;x++)\n"
0625: + " {\n"
0626: + " m_rgCalCells[x].style.backgroundColor=m_rgCalCells[x].dayCell;\n"
0627: + " m_rgCalCells[x].style.color=m_szNormalText;\n"
0628: + " }\n"
0629: + " mfFindAndSelectDate.iStartIdx=-1;\n"
0630: + " }\n"
0631: + " if (m_objSelectedStart>m_oCalEndDate || m_objSelectedEnd<m_oCalStartDate)\n"
0632: + " {\n"
0633: + " return;\n"
0634: + " }\n"
0635: + " x=7;\n"
0636: + " if(2==m_iView) //monthly\n"
0637: + " {\n"
0638: + " if(m_objSelectedStart.getTime() == m_oCalStartDate.getTime()) //whole month showing\n"
0639: + " {\n"
0640: + " y=m_rgCalCells.length-1;\n"
0641: + " }\n"
0642: + " else if(m_objSelectedStart<m_oCalStartDate&&m_objSelectedEnd>m_oCalStartDate) //do 1st grey area\n"
0643: + " {\n"
0644: + " mfFindAndSelectDate.iStartIdx=7;\n"
0645: + " for(x=7;\"1\"!=m_rgCalCells[x].innerText;x++)\n"
0646: + " {\n"
0647: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
0648: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
0649: + " }\n"
0650: + " mfFindAndSelectDate.iEndIdx=x;\n"
0651: + " return;\n"
0652: + " }\n"
0653: + " else if(m_objSelectedStart<m_oCalEndDate&&m_objSelectedEnd>m_oCalEndDate)//last gray area\n"
0654: + " {\n"
0655: + " x=m_rgCalCells.length-1;\n"
0656: + " mfFindAndSelectDate.iEndIdx=x;\n"
0657: + " for(;\"1\"!=m_rgCalCells[x].innerText;x--)\n"
0658: + " {\n"
0659: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
0660: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
0661: + " }\n"
0662: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
0663: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
0664: + " mfFindAndSelectDate.iStartIdx=x-1;\n"
0665: + " return;\n"
0666: + " }\n"
0667: + " else\n"
0668: + " {\n"
0669: + " return;\n"
0670: + " }\n"
0671: + " }\n"
0672: + " else if (m_objSelectedStart>=m_oCalStartDate && m_objSelectedStart<=m_oCalEndDate)\n"
0673: + " {\n"
0674: + " x=Math.round((m_objSelectedStart-m_oCalStartDate)/86400000)+7;\n"
0675: + " }\n"
0676: + " y=x;\n"
0677: + " if (0 != m_iView)\n"
0678: + " {\n"
0679: + " y=(2==m_iView)?m_rgCalCells.length-1:x+6;\n"
0680: + " if (2==m_iView && m_objSelectedEnd<m_oCalEndDate)\n"
0681: + " {\n"
0682: + " y=Math.round((m_objSelectedEnd-m_oCalStartDate)/86400000)+7;\n"
0683: + " }\n"
0684: + " }\n"
0685: + " mfFindAndSelectDate.iStartIdx=(x<49)?x:-1;\n"
0686: + " mfFindAndSelectDate.iEndIdx=(y<49)?y:-1;;\n"
0687: + " for (;(x<=y && x<49);x++)\n"
0688: + " {\n"
0689: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
0690: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
0691: + " }\n"
0692: + " if (m_iView==0)\n"
0693: + " {\n"
0694: + " mfFindAndSelectDate.iHoldLastDaily=mfFindAndSelectDate.iStartIdx;\n"
0695: + " }\n"
0696: + "}\n"
0697: + "\n"
0698: + "//PARAM: iMonth - jan=0\n"
0699: + "function mfGetDaysInMonth(iMonth, iYear)\n"
0700: + "{\n"
0701: + " iMonth+=(iMonth==-1)?13:1; //remove 0 offset (1=jan)\n"
0702: + " return( (2 == iMonth) ? (28+mfIsLeapYear(iYear)):(30+((iMonth+(iMonth>7))%2)));\n"
0703: + "}\n"
0704: + "function mfIsLeapYear(yr)\n"
0705: + "{\n"
0706: + " return((yr % 4 == 0) && (yr % 100 != 0) || (yr % 400 == 0))?1:0;\n"
0707: + "}\n"
0708: + "\n"
0709: + "mfWriteCellNumbers.todayCellIdx=-1;\n"
0710: + "void function mfWriteCellNumbers()\n"
0711: + "{\n"
0712: + " m_objMainDate.setDate(1);\n"
0713: + "\n"
0714: + " var iM = m_objMainDate.getMonth();\n"
0715: + " var iY = m_objMainDate.getFullYear();\n"
0716: + " var iY2 = iY%100;\n"
0717: + "\n"
0718: + " var szCaptionText = this.m_szDateFormat.replace(/\\[MMMM\\]/g, m_rgMonthNamesLong[iM]);\n"
0719: + " \n"
0720: + " szCaptionText = szCaptionText.replace(/\\[MMM\\]/g, m_rgMonthNamesShort[iM]);\n"
0721: + " szCaptionText = szCaptionText.replace(/\\[MM\\]/g, ++iM<10 ? \"0\"+iM : iM );\n"
0722: + " szCaptionText = szCaptionText.replace(/\\[M\\]/g, iM);\n"
0723: + " szCaptionText = szCaptionText.replace(/\\[yyy+\\]/g, iY);\n"
0724: + " szCaptionText = szCaptionText.replace(/\\[y+\\]/g, iY2>9?iY2:\"0\"+iY2);\n"
0725: + "\n"
0726: + " m_objMainTable.rows[0].cells[1].innerText= szCaptionText;\n"
0727: + "\n"
0728: + " m_oCalStartDate.setTime(m_objMainDate);\n"
0729: + " m_oCalEndDate.setTime(m_objMainDate);\n"
0730: + "\n"
0731: + " var x=m_objMainDate.getDay()-m_iStartDay;\n"
0732: + " x+=(0>=x)?7:0; //show entire previous week\n"
0733: + " m_oCalStartDate.setDate(1-x); //this is now the first date on the calendar\n"
0734: + " m_oCalStartDate.setHours(0,0,0,0);\n"
0735: + " m_oCalEndDate.setDate((1-x)+41);\n"
0736: + " m_oCalEndDate.setHours(24,0,0,0);\n"
0737: + "\n"
0738: + " var iD = m_oCalStartDate.getDate();\n"
0739: + " var iM = m_oCalStartDate.getMonth();\n"
0740: + " var iY = m_oCalStartDate.getFullYear();\n"
0741: + " var iDm = mfGetDaysInMonth(iM,iY);\n"
0742: + " var bg = (x==0)?m_szNormalDateBG:m_szInactiveBG;\n"
0743: + " var y=7+iDm;\n"
0744: + " for(x=7;iD<=iDm;x++)\n"
0745: + " {\n"
0746: + " m_rgCalCells[x].month=iM;\n"
0747: + " m_rgCalCells[x].year =iY;\n"
0748: + " m_rgCalCells[x].dayCell = bg;\n"
0749: + " with(m_rgCalCells[x])\n"
0750: + " {\n"
0751: + " innerText = iD++;\n"
0752: + " style.backgroundColor = bg;\n"
0753: + " style.color = m_szNormalText;\n"
0754: + " style.fontWeight = \"normal\";\n"
0755: + " }\n"
0756: + " }\n"
0757: + " var iLastCell = m_rgCalCells.length;\n"
0758: + " while(x<iLastCell)\n"
0759: + " {\n"
0760: + " iD=1;\n"
0761: + " iM=(11==iM)?0:iM+1;\n"
0762: + " if (0==iM ) iY++;\n"
0763: + " var iDm = mfGetDaysInMonth(iM,iY);\n"
0764: + " bg=(bg==m_szInactiveBG)?m_szNormalDateBG:m_szInactiveBG;\n"
0765: + " if ((iDm+x) > iLastCell) iDm=iLastCell-x; //dont past last cell\n"
0766: + " for(;iD<=iDm;x++)\n"
0767: + " {\n"
0768: + " //if (x>=iLastCell) break;\n"
0769: + " m_rgCalCells[x].month=iM;\n"
0770: + " m_rgCalCells[x].year =iY;\n"
0771: + " m_rgCalCells[x].dayCell = bg;\n"
0772: + " with(m_rgCalCells[x])\n"
0773: + " {\n"
0774: + " innerText = iD++;\n"
0775: + " style.backgroundColor = bg;\n"
0776: + " style.color = m_szNormalText;\n"
0777: + " style.fontWeight = \"normal\";\n"
0778: + " }\n"
0779: + " }\n"
0780: + " }\n"
0781: + " if (-1!=mfWriteCellNumbers.todayCellIdx)\n"
0782: + " {\n"
0783: + " m_rgCalCells[mfWriteCellNumbers.todayCellIdx].style.border = \"none\";\n"
0784: + " mfWriteCellNumbers.todayCellIdx=-1;\n"
0785: + " }\n"
0786: + " //is todays date on this calendar (needs red border)\n"
0787: + " if(m_objTodaysDate > m_oCalStartDate && m_objTodaysDate < m_oCalEndDate)\n"
0788: + " { \n"
0789: + " //add one hour 3600000 (for daylight spring losing an hour) and floor (DST fall works with floor)\n"
0790: + " x = Math.floor((m_objTodaysDate - m_oCalStartDate + 3600000)/86400000)\n"
0791: + " m_rgCalCells[x+7].style.border = \"solid 1 red\";\n"
0792: + " mfWriteCellNumbers.todayCellIdx=x+7;\n"
0793: + " }\n"
0794: + " //prev selection has been wiped!\n"
0795: + " mfFindAndSelectDate.iStartIdx=-1;\n"
0796: + "}\n"
0797: + "\n"
0798: + "void function mfUpdateCalendar(fRenderView,fUpdateBolding)\n"
0799: + "{\n"
0800: + " mfWriteCellNumbers();\n"
0801: + " mfFindAndSelectDate();\n"
0802: + " if (!fUpdateBolding)\n"
0803: + " {\n"
0804: + " mfGetAppointments(fRenderView,false,true);\n"
0805: + " }\n"
0806: + " else\n"
0807: + " {\n"
0808: + " if (fRenderView) //refresh data then bold\n"
0809: + " {\n"
0810: + " mfGetAppointments(fRenderView,true,true);\n"
0811: + " }\n"
0812: + " else\n"
0813: + " {\n"
0814: + " mfGetBoldData(true);\n"
0815: + " } \n"
0816: + " } \n"
0817: + "}\n"
0818: + "\n"
0819: + "void function mfRenderCalendar()\n"
0820: + "{\n"
0821: + " var masterTableNode = this.__idExchMasterCalendarTableNode.children[0];\n"
0822: + " var masterRowNode = this.__idExchMasterCalendarRowNode.children[0];\n"
0823: + " var newNode=null;\n"
0824: + " for(var i=0;i<7;i++)\n"
0825: + " {\n"
0826: + " newNode=masterRowNode.cloneNode(true);\n"
0827: + " if(0==i)\n"
0828: + " {\n"
0829: + " newNode.cells[0].weekselect=null;\n"
0830: + " newNode.cells[0].monthDisplayName=\"1\";\n"
0831: + " }\n"
0832: + " masterTableNode.insertAdjacentElement(\"BeforeEnd\",newNode.children[0]);\n"
0833: + " }\n"
0834: + " this.insertAdjacentElement(\"BeforeEnd\",masterTableNode);\n"
0835: + " m_objMainTable=masterTableNode;\n"
0836: + "}\n"
0837: + "mfGetBoldData.szQuery=\"\";\n"
0838: + "void function mfGetBoldData(fResetQuery)\n"
0839: + "{\n"
0840: + " if(null != m_objStatus )\n"
0841: + " {\n"
0842: + " m_objStatus.style.display=\"\";\n"
0843: + " m_objStatus.innerText = L_szUpdatingBold;\n"
0844: + " }\n"
0845: + " m_fHaveData = true;//allow event firings\n"
0846: + " if (\"\"==mfGetBoldData.szQuery) fResetQuery=true;\n"
0847: + " if (fResetQuery)\n"
0848: + " {\n"
0849: + " var iX = 7;\n"
0850: + " iX = m_rgCalCells.length - 1;\n"
0851: + " var szDateStart=mfGetSearchDateUTC(m_oCalStartDate);\n"
0852: + " var szDateEnd=mfGetSearchDateUTC(m_oCalEndDate);\n"
0853: + " mfGetBoldData.szQuery ='<a:searchrequest xmlns:a=\"DAV:\" > ' +\n"
0854: + " '<a:sql>Select ' +\n"
0855: + " '\"urn:schemas:calendar:dtstart\" AS dtstart, ' +\n"
0856: + " '\"urn:schemas:calendar:dtend\" AS dtend, ' +\n"
0857: + " '\"urn:schemas:calendar:alldayevent\" AS alldayevent ' +\n"
0858: + " 'FROM Scope(\\'SHALLOW TRAVERSAL OF \"\"\\') ' +\n"
0859: + " 'WHERE NOT \"urn:schemas:calendar:instancetype\" = 1 ' +\n"
0860: + " 'AND NOT \"urn:schemas:calendar:busystatus\" = \\'FREE\\' ' +\n"
0861: + " 'AND \"urn:schemas:calendar:dtend\" > \\''+szDateStart+'\\' ' +\n"
0862: + " 'AND \"urn:schemas:calendar:dtstart\" < \\''+szDateEnd+'\\' ' +\n"
0863: + " 'ORDER BY \"urn:schemas:calendar:dtstart\" ASC ' +\n"
0864: + " '</></>';\n"
0865: + "\n"
0866: + " }\n"
0867: + " m_objXMLhttpBold = new ActiveXObject(\"Microsoft.XMLhttp\");\n"
0868: + " try\n"
0869: + " {\n"
0870: + " m_objXMLhttpBold.open(\"SEARCH\", folderURL, true);\n"
0871: + " m_objXMLhttpBold.setRequestHeader(\"Content-Type\", \"text/xml\");\n"
0872: + " m_objXMLhttpBold.onreadystatechange = onRSC_getBoldData;\n"
0873: + " m_objXMLhttpBold.send(mfGetBoldData.szQuery);\n"
0874: + " }\n"
0875: + " catch(e)\n"
0876: + " {\n"
0877: + " alert(\"Error in ExchangeCalendar.HTC mfGetBoldData() with searchrequest: \"+e.description);\n"
0878: + " }\n"
0879: + "}\n"
0880: + "\n"
0881: + "\n"
0882: + "//holds calendar date range including greyed next/prev months\n"
0883: + "mfGetAppointments.m_dTemp = new Date();\n"
0884: + "mfGetAppointments.szQuery=\"\";\n"
0885: + "void function mfGetAppointments(fRenderVeiw,fUpdateBolding,fResetQuery)\n"
0886: + "{\n"
0887: + " if (true == fUpdateBolding) \n"
0888: + " {\n"
0889: + " onRSC_getAppointments.fUpdateBolding = true; //we will bold after getting the appt data\n"
0890: + " } \n"
0891: + " if(null != m_objStatus )\n"
0892: + " {\n"
0893: + " m_objStatus.style.display=\"\";\n"
0894: + " m_objStatus.innerText = L_szUpdating;\n"
0895: + " }\n"
0896: + "\n"
0897: + " onRSC_getAppointments.fResetQuery=fResetQuery;\n"
0898: + " m_fHaveData = false; //stop event firings\n"
0899: + "\n"
0900: + " //Use last stored query in case where polling fires but user has calendar in another month than the view\n"
0901: + " //Happens most when going out past the expansion which fires another expansion with triggers polling changes\n"
0902: + " if (\"\"==mfGetAppointments.szQuery) fResetQuery=true;\n"
0903: + " if (fResetQuery)\n"
0904: + " {\n"
0905: + " var iX = 7;\n"
0906: + " iX = m_rgCalCells.length - 1;\n"
0907: + " if (2==m_iView) //monthly gets full 6 weeks\n"
0908: + " {\n"
0909: + " //this shifts an extra day for the montly view calendar in sunday start\n"
0910: + " //while view shows monday start (same problem with weekly view)\n"
0911: + " if (0==m_iStartDay)\n"
0912: + " {\n"
0913: + " m_oCalStartDate.setHours(24,0,0,0);\n"
0914: + " m_oCalEndDate.setHours(24,0,0,0);\n"
0915: + " var szDateStart = mfGetSearchDateUTC(m_oCalStartDate);\n"
0916: + " var szDateEnd = mfGetSearchDateUTC(m_oCalEndDate);\n"
0917: + " m_oCalStartDate.setHours(-24,0,0,0);\n"
0918: + " m_oCalEndDate.setHours(-24,0,0,0);\n"
0919: + " }\n"
0920: + " else\n"
0921: + " {\n"
0922: + " var szDateStart = mfGetSearchDateUTC(m_oCalStartDate);\n"
0923: + " var szDateEnd = mfGetSearchDateUTC(m_oCalEndDate);\n"
0924: + " }\n"
0925: + " }\n"
0926: + " else if (1==m_iView)//weekly\n"
0927: + " {\n"
0928: + " //this shifts an extra day for the weekly view calendar in sunday start \n"
0929: + " //while view shows monday start (same problem with monthly view)\n"
0930: + " if (0==m_iStartDay)\n"
0931: + " {\n"
0932: + " m_objSelectedStart.setHours(24,0,0,0);\n"
0933: + " var szDateStart = mfGetSearchDateUTC(m_objSelectedStart);\n"
0934: + " m_objSelectedStart.setHours(168,0,0,0);\n"
0935: + " var szDateEnd = mfGetSearchDateUTC(m_objSelectedStart);\n"
0936: + " m_objSelectedStart.setHours(-192,0,0,0);\n"
0937: + " }\n"
0938: + " else\n"
0939: + " {\n"
0940: + " var szDateStart = mfGetSearchDateUTC(m_objSelectedStart);\n"
0941: + " m_objSelectedStart.setHours(168,0,0,0);\n"
0942: + " var szDateEnd = mfGetSearchDateUTC(m_objSelectedStart);\n"
0943: + " m_objSelectedStart.setHours(-168,0,0,0);\n"
0944: + " }\n"
0945: + " } \n"
0946: + " else //daily view (default)\n"
0947: + " {\n"
0948: + " var szDateStart = mfGetSearchDateUTC(m_objSelectedStart);\n"
0949: + " m_objSelectedStart.setHours(24,0,0,0);\n"
0950: + " var szDateEnd = mfGetSearchDateUTC(m_objSelectedStart);\n"
0951: + " m_objSelectedStart.setHours(-24,0,0,0);\n"
0952: + " }\n"
0953: + "\n"
0954: + " mfGetAppointments.szQuery='<a:searchrequest xmlns:a=\"DAV:\" > ' +\n"
0955: + " '<a:sql>Select ' +\n"
0956: + " '\"urn:schemas:calendar:location\" AS location, ' +\n"
0957: + " '\"urn:schemas:httpmail:subject\" AS subject, '+\n"
0958: + " '\"urn:schemas:calendar:dtstart\" AS dtstart, ' +\n"
0959: + " '\"urn:schemas:calendar:dtend\" AS dtend, ' +\n"
0960: + " '\"urn:schemas:calendar:busystatus\" AS busystatus, ' +\n"
0961: + " '\"urn:schemas:calendar:instancetype\" AS instancetype, ' +\n"
0962: + " '\"urn:schemas:calendar:alldayevent\" AS alldayevent, ' +\n"
0963: + " '\"http://schemas.microsoft.com/mapi/proptag/x10c70003\" AS pr_cdormid, ' +\n"
0964: + " '\"http://schemas.microsoft.com/exchange/sensitivity-long\" AS sensitivity, '+\n"
0965: + " '\"http://schemas.microsoft.com/mapi/apptstateflags\" AS apptstateflags, '+\n"
0966: + " '\"urn:schemas:calendar:uid\" AS uid ' +\n"
0967: + " 'FROM Scope(\\'SHALLOW TRAVERSAL OF \"\"\\') ' +\n"
0968: + " 'WHERE NOT \"urn:schemas:calendar:instancetype\" = 1 ' +\n"
0969: + " 'AND \"urn:schemas:calendar:dtend\" > \\''+szDateStart+'\\' ' +\n"
0970: + " 'AND \"urn:schemas:calendar:dtstart\" < \\''+szDateEnd+'\\' ' +\n"
0971: + " 'ORDER BY \"urn:schemas:calendar:dtstart\" ASC ' +\n"
0972: + " '</></>';\n"
0973: + " \n"
0974: + " }\n"
0975: + " \n"
0976: + " m_objXMLhttp = new ActiveXObject(\"Microsoft.XMLhttp\");\n"
0977: + " onRSC_getAppointments.fRenderView=fRenderVeiw;\n"
0978: + " try\n"
0979: + " {\n"
0980: + " m_objXMLhttp.open(\"SEARCH\",folderURL, true);\n"
0981: + " m_objXMLhttp.setRequestHeader(\"Content-Type\",\"text/xml\");\n"
0982: + " m_objXMLhttp.onreadystatechange = onRSC_getAppointments;\n"
0983: + " m_objXMLhttp.send(mfGetAppointments.szQuery);\n"
0984: + " }\n"
0985: + " catch(e)\n"
0986: + " {\n"
0987: + " alert(\"Error in ExchangeCalendar.HTC mfGetAppointments() with searchrequest: \"+e.description);\n"
0988: + " onRSC_getAppointments.fRenderView = true;\n"
0989: + " }\n"
0990: + "}\n"
0991: + "\n"
0992: + "//returns UTC date in \"yyyy/mm/dd hh:mm:ss\" format for DAV searchrequests\n"
0993: + "void function mfGetSearchDateUTC(objDate)\n"
0994: + "{\n"
0995: + " var szYear = objDate.getUTCFullYear();\n"
0996: + " var szMonth = objDate.getUTCMonth()+1;\n"
0997: + " var szDate = objDate.getUTCDate();\n"
0998: + " var szHrs = objDate.getUTCHours();\n"
0999: + " var szMin = objDate.getUTCMinutes();\n"
1000: + " return ( szYear+\"/\"+\n"
1001: + " ((szMonth<10)?(\"0\"+szMonth):szMonth) + \"/\" +\n"
1002: + " ((szDate<10) ?(\"0\"+szDate) :szDate) + \" \" +\n"
1003: + " ((szHrs<10) ?(\"0\"+szHrs) :szHrs) + \":\" +\n"
1004: + " ((szMin<10) ?(\"0\"+szMin) :szMin) + \":00\" );\n"
1005: + "}\n"
1006: + "\n"
1007: + "void function mfBoldDates(rgApptStartTimes,rgApptEndTimes,rgIsAllDayEvent)\n"
1008: + "{\n"
1009: + " var x;\n"
1010: + " var rgNodes=null;\n"
1011: + " for(x=7; x < m_rgCalCells.length; x++)\n"
1012: + " {\n"
1013: + " rgNodes=mfGetNodes(m_rgCalCells[x].year,m_rgCalCells[x].month,Number(m_rgCalCells[x].innerText));\n"
1014: + " m_rgCalCells[x].style.fontWeight = rgNodes.length ? \"bold\" : \"normal\";\n"
1015: + " }\n"
1016: + "}\n"
1017: + "function mfGetNodes(iY,iM,iD)\n"
1018: + "{\n"
1019: + " if(null == m_objOutPutXMLBold)\n"
1020: + " {\n"
1021: + " return;\n"
1022: + " }\n"
1023: + " var dtstartUTC = mfGetUTFIsoDate(iY, iM, iD, 0, 0);\n"
1024: + " var dtendUTC = mfGetUTFIsoDate(iY, iM, iD+1,0, 0);\n"
1025: + " var szStartTimeQuery= \"(dtstart$ge$'\" + dtstartUTC + \"'&&dtstart$lt$'\" + dtendUTC + \"')\";\n"
1026: + " var szEndTimeQuery = \"(dtend$gt$'\" + dtstartUTC + \"'&&dtend$le$'\"+ dtendUTC+ \"')\";\n"
1027: + " var szOutSideQuery = \"(dtstart$lt$'\" + dtstartUTC + \"'&&dtend$gt$'\"+ dtendUTC + \"')\";\n"
1028: + " var szQuery = \"root/appointment[\" + szStartTimeQuery + \"||\" + szEndTimeQuery + \"||\" + szOutSideQuery + \"]\";\n"
1029: + " return(m_objOutPutXMLBold.selectNodes(szQuery));\n"
1030: + "}\n"
1031: + "\n"
1032: + "mfGetUTFIsoDate.objD= new Date();\n"
1033: + "function mfGetUTFIsoDate(iYr,iMon,iDate,iHr,iMin)\n"
1034: + "{\n"
1035: + " mfGetUTFIsoDate.objD.setFullYear(iYr,iMon,iDate);\n"
1036: + " mfGetUTFIsoDate.objD.setHours(iHr,iMin,0);\n"
1037: + " var iYear = mfGetUTFIsoDate.objD.getUTCFullYear();\n"
1038: + " var szMonth = mfGetUTFIsoDate.objD.getUTCMonth()+1;//0 offset adjustment\n"
1039: + " var szDate = mfGetUTFIsoDate.objD.getUTCDate();\n"
1040: + " var szHours = mfGetUTFIsoDate.objD.getUTCHours();\n"
1041: + " var szMinutes = mfGetUTFIsoDate.objD.getUTCMinutes();\n"
1042: + " if (szMonth< 10)\n"
1043: + " {\n"
1044: + " szMonth = \"0\"+szMonth;\n"
1045: + " } \n"
1046: + " if (szDate < 10)\n"
1047: + " {\n"
1048: + " szDate = \"0\"+szDate;\n"
1049: + " } \n"
1050: + " if (szHours < 10)\n"
1051: + " {\n"
1052: + " szHours = \"0\"+szHours;\n"
1053: + " } \n"
1054: + " if (szMinutes < 10)\n"
1055: + " {\n"
1056: + " szMinutes = \"0\"+szMinutes;\n"
1057: + " }\n"
1058: + " return(String(iYear+\"-\"+szMonth+\"-\"+szDate+\"T\"+szHours+\":\"+szMinutes+\":00.000Z\"));\n"
1059: + "}\n"
1060: + "\n"
1061: + "//szDtTime = ISO formatted UTC time string = \"1999-02-18T02:00:00.000Z\"\n"
1062: + "//returns = UTC time in milliseconds\n"
1063: + "function mfGetIsoDateMs(szIsoDate)\n"
1064: + "{\n"
1065: + " var re=mfGetRegExpIsoDates();\n"
1066: + " re.lastIndex=0;\n"
1067: + " var arr = re.exec( szIsoDate );\n"
1068: + " return ( (null == arr) ? null : Date.UTC( Number( arr[1]), Number(arr[2])-1, Number(arr[3]), Number(arr[4]), Number(arr[5]), 0, 0 ) );\n"
1069: + "}\n"
1070: + "\n"
1071: + "mfGetRegExpIsoDates.re;\n"
1072: + "function mfGetRegExpIsoDates()\n"
1073: + "{\n"
1074: + " if (null == mfGetRegExpIsoDates.re)\n"
1075: + " { \n"
1076: + " mfGetRegExpIsoDates.re = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):\\d{2}\\.\\d{3}Z?$/;\n"
1077: + " }\n"
1078: + " return(mfGetRegExpIsoDates.re);\n"
1079: + "}\n"
1080: + "\n"
1081: + "void function onAbort()\n"
1082: + "{\n"
1083: + " return;\n"
1084: + "}\n"
1085: + "void function onRSC_getBoldData()\n"
1086: + "{\n"
1087: + " if(4 != m_objXMLhttpBold.readyState)\n"
1088: + " {\n"
1089: + " return;\n"
1090: + " }\n"
1091: + " m_objXMLhttpBold.onreadystatechange = onAbort;\n"
1092: + " var objXML = m_objXMLhttpBold.responseXML;\n"
1093: + " objXML.transformNodeToObject(m_objXSL.documentElement, m_objOutPutXMLBold);\n"
1094: + " var objApptNodes = m_objOutPutXMLBold.selectNodes('root/appointment/dtstart');\n"
1095: + " var objApptNodes1 = m_objOutPutXMLBold.selectNodes('root/appointment/dtend');\n"
1096: + " var objApptNodes2 = m_objOutPutXMLBold.selectNodes('root/appointment/alldayevent');\n"
1097: + "\n"
1098: + " mfBoldDates(objApptNodes,objApptNodes1,objApptNodes2);\n"
1099: + " if(null != m_objStatus )\n"
1100: + " {\n"
1101: + " m_objStatus.style.display=\"none\";\n"
1102: + " m_objStatus.innerText = \"\";\n"
1103: + " }\n"
1104: + "}\n"
1105: + "\n"
1106: + "onRSC_getAppointments.fRenderView = true;\n"
1107: + "onRSC_getAppointments.fUpdateBolding = false;\n"
1108: + "onRSC_getAppointments.fResetQuery=true;\n"
1109: + "void function onRSC_getAppointments()\n"
1110: + "{\n"
1111: + " if(4 != m_objXMLhttp.readyState)\n"
1112: + " {\n"
1113: + " return;\n"
1114: + " }\n"
1115: + " m_objXMLhttp.onreadystatechange = onAbort;\n"
1116: + " var objXML = m_objXMLhttp.responseXML;\n"
1117: + " objXML.transformNodeToObject(m_objXSL.documentElement, m_objOutPutXML);\n"
1118: + " //only fire (refresh the veiwer) if the calendar is on that month\n"
1119: + " m_fHaveData = true;\n"
1120: + " if(m_objMainDate >= m_oCalStartDate && m_objMainDate <= m_oCalEndDate)\n"
1121: + " {\n"
1122: + " if(true == onRSC_getAppointments.fRenderView)\n"
1123: + " {\n"
1124: + " fire_OnDateChange(m_objOutPutXML);\n"
1125: + " }\n"
1126: + " }\n"
1127: + " onRSC_getAppointments.fRenderView=true;\n"
1128: + " if(null != m_objStatus )\n"
1129: + " {\n"
1130: + " m_objStatus.style.display=\"none\";\n"
1131: + " m_objStatus.innerText = \"\";\n"
1132: + " }\n"
1133: + " if (true == onRSC_getAppointments.fUpdateBolding)\n"
1134: + " {\n"
1135: + " onRSC_getAppointments.fUpdateBolding=false;\n"
1136: + " mfGetBoldData(onRSC_getAppointments.fResetQuery);\n"
1137: + " }\n"
1138: + "}\n"
1139: + "/************************PROPERTY ACCESS FUNCTIONS***********************/\n"
1140: + "function get_statusEl()\n"
1141: + "{\n"
1142: + " return(m_objStatus);\n"
1143: + "}\n"
1144: + "function put_statusEl(newVal)\n"
1145: + "{\n"
1146: + " if(typeof(newVal) == 'string')\n"
1147: + " {\n"
1148: + " m_objStatus = window.document.all[newVal];\n"
1149: + " return;\n"
1150: + " }\n"
1151: + " m_objStatus = newVal;\n"
1152: + "}\n"
1153: + "function put_PollInterval(newVal)\n"
1154: + "{\n"
1155: + " m_iPollInterval = Number(newVal);\n"
1156: + "}\n"
1157: + "function get_PollInterval()\n"
1158: + "{\n"
1159: + " return m_iPollInterval;\n"
1160: + "}\n"
1161: + "function put_readOnly(newVal)\n"
1162: + "{\n"
1163: + " if(\"true\" == String(newVal))\n"
1164: + " {\n"
1165: + " m_fReadOnly = true;\n"
1166: + " }\n"
1167: + " else\n"
1168: + " {\n"
1169: + " m_fReadOnly = false;\n"
1170: + " } \n"
1171: + "}\n"
1172: + "function get_readOnly()\n"
1173: + "{\n"
1174: + " return m_fReadOnly;\n"
1175: + "}\n"
1176: + "function put_Day(newVal)\n"
1177: + "{\n"
1178: + " m_objMainDate.setDate(Number(newVal));\n"
1179: + "}\n"
1180: + "function get_Day()\n"
1181: + "{\n"
1182: + " return m_objSelectedStart.getDate();\n"
1183: + "}\n"
1184: + "function put_Month(newVal)\n"
1185: + "{\n"
1186: + " m_objMainDate.setMonth(Number(newVal));\n"
1187: + "}\n"
1188: + "function get_Month()\n"
1189: + "{\n"
1190: + " return m_objSelectedStart.getMonth();\n"
1191: + "}\n"
1192: + "function put_Year(newVal)\n"
1193: + "{\n"
1194: + " m_objMainDate.setYear(Number(newVal)); \n"
1195: + "}\n"
1196: + "function get_Year()\n"
1197: + "{\n"
1198: + " return m_objSelectedStart.getFullYear();\n"
1199: + "}\n"
1200: + "function get_FullYear()\n"
1201: + "{\n"
1202: + " return m_objSelectedStart.getFullYear();\n"
1203: + "}\n"
1204: + "function put_FullYear(newVal)\n"
1205: + "{\n"
1206: + " m_objMainDate.setFullYear(Number(newVal)); \n"
1207: + "}\n"
1208: + "function put_caltext(newVal)\n"
1209: + "{\n"
1210: + "L_szUpdatingBold = newVal;\n"
1211: + "}\n"
1212: + "function get_caltext()\n"
1213: + "{\n"
1214: + "return(L_szUpdatingBold);\n"
1215: + "}\n"
1216: + "function put_viewtext(newVal)\n"
1217: + "{\n"
1218: + "L_szUpdating = newVal;\n"
1219: + "}\n"
1220: + "function get_viewtext()\n"
1221: + "{\n"
1222: + "return(L_szUpdating);\n"
1223: + "}\n"
1224: + "//Causes a refresh of all the data for the current view\n"
1225: + "function f_refresh()\n"
1226: + "{\n"
1227: + " mfGetAppointments(true,true,false);\n"
1228: + "}\n"
1229: + "</SCRIPT>\n" + "</HTML>\n";
1230:
1231: String lExpectation =
1232:
1233: "<!--Copyright (c) 2000 Microsoft Corporation. All rights reserved.-->\n"
1234: + "<HTML>\n"
1235: + "<property name=\"updateCalText\" put=\"put_caltext\" get=\"get_caltext\" />\n"
1236: + "<property name=\"updateViewText\" put=\"put_viewtext\" get=\"get_viewtext\" />\n"
1237: + "<property name=\"statusElement\" put=\"put_statusEl\" get=\"get_statusEl\" />\n"
1238: + "<property name=\"nextMonthImage\" />\n"
1239: + "<property name=\"prevMonthImage\" />\n"
1240: + "<property name=\"readOnly\" put=\"put_readOnly\" get=\"get_readOnly\" />\n"
1241: + "<property name=\"day\" put=\"put_Day\" get=\"get_Day\" />\n"
1242: + "<property name=\"month\" put=\"put_Month\" get=\"get_Month\" />\n"
1243: + "<property name=\"year\" put=\"put_Year\" get=\"get_Year\" />\n"
1244: + "<property name=\"fullyear\" put=\"put_FullYear\" get=\"get_FullYear\" />\n"
1245: + "<property name=\"pollInterval\" put=\"put_PollInterval\" get=\"get_PollInterval\" />\n"
1246: + "<property name=\"folderURL\" />\n"
1247: + "<property name=\"monthNamesShort\" />\n"
1248: + "<property name=\"monthNamesLong\" />\n"
1249: + "<property name=\"weekdayLetters\" />\n"
1250: + "<property name=\"dateFormat\" />\n"
1251: + "\n"
1252: + "<method name=\"setView\" internalName=\"f_setView\" />\n"
1253: + "<method name=\"refresh\" internalName=\"f_refresh\" />\n"
1254: + "<attach event=\"ondocumentready\" handler=\"onDocumentReady\" />\n"
1255: + "<attach event=\"onstop\" handler=\"onStop\" for=\"document\" />\n"
1256: + "<attach event=\"onclick\" handler=\"onClick\" />\n"
1257: + "\n"
1258: + "<event id=\"id_OnDateChange\" name=\"OnDateChange\" />\n"
1259: + "<DIV id=__idExchMasterCalendarRowNode>\n"
1260: + "<TABLE class='calctrlTable' cellpadding='2'>\n"
1261: + "<TR class='calctrlRow'>\n"
1262: + "<TD offCell=1 weekselect=1 class='calctrlWeeklyCell'> </TD>\n"
1263: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
1264: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
1265: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
1266: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
1267: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
1268: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
1269: + "<TD offCell=1 class='calctrlDateCell' id=\"numbercell\"></TD>\n"
1270: + "</TR>\n"
1271: + "</TABLE>\n"
1272: + "</div>\n"
1273: + "<div id=__idExchMasterCalendarTableNode>\n"
1274: + "<TABLE border=0 cellpadding=0 cellspacing=0 class=\"calctrlTitle\">\n"
1275: + "<TR >\n"
1276: + "<TD leftNavButton=1><img src=\"\" leftNavButton=1 border=0 height=\"10\"></TD>\n"
1277: + "<TD monthDisplayName=1 colspan=6 class='calctrlMonthDisplayName'></TD>\n"
1278: + "<TD rightNavButton=1 class='calctrlRightNavButton'><img src=\"\" rightNavButton=1 border=0 height=\"10\"></TD>\n"
1279: + "</TR>\n" + "</TABLE>\n" + "</DIV>\n"
1280: + JSWrapperHelper.CONVERT_EXPRESSION_FUNCTION_HTML
1281: + "<SCRIPT LANGUAGE=\"JavaScript\">\n"
1282: + "\n"
1283: + "var m_objXSL = new ActiveXObject(\"Microsoft.XMLDOM\");\n"
1284: + "var m_objOutPutXML = new ActiveXObject(\"Microsoft.XMLDOM\");\n"
1285: + "var m_objOutPutXMLBold = new ActiveXObject(\"Microsoft.XMLDOM\");\n"
1286: + "var m_iIntervalID = null;\n"
1287: + "var m_iPollInterval = 10;\n"
1288: + "var m_objXMLhttp = null;\n"
1289: + "var m_objXMLhttpBold = null;\n"
1290: + "var m_objXMLhttp_polling= new ActiveXObject(\"Microsoft.XMLhttp\");\n"
1291: + "var m_iSubscriptionID = null;\n"
1292: + "var m_fReadOnly = false;\n"
1293: + "\n"
1294: + "var m_objMainDate;\n"
1295: + "var m_objTodaysDate = new Date();\n"
1296: + " m_objTodaysDate.setHours(0,0,0,0);\n"
1297: + "\n"
1298: + "\n"
1299: + "var m_objSelectedStart;\n"
1300: + "var m_objSelectedEnd;\n"
1301: + "\n"
1302: + "var m_objMainTable = null;\n"
1303: + "var m_objSelectedDay = new Array();\n"
1304: + "var m_fHasLoaded = false;\n"
1305: + "var m_iFirstDayOfMonth = 0;\n"
1306: + "var m_iDaysInMonth = 0;\n"
1307: + "var m_iView = 0;\n"
1308: + "var m_szHighlightBG = \"highlight\";\n"
1309: + "var m_szHighlightText = \"highlighttext\";\n"
1310: + "var m_szNormalDateBG = \"window\";\n"
1311: + "var m_szNormalBG = \"window\";\n"
1312: + "var m_szNormalText = \"windowtext\";\n"
1313: + "var m_szInactiveBG = \"appworkspace\";\n"
1314: + "var m_objStatus;\n"
1315: + "var m_rgCalCells;\n"
1316: + "var m_rgMonthNamesShort;\n"
1317: + "var m_rgMonthNamesLong;\n"
1318: + "var m_szDateFormat;\n"
1319: + "var m_rgWeekdayLetters;\n"
1320: + "var m_fHaveData = false;\n"
1321: + "var m_iStartDay;\n"
1322: + "var m_oCalStartDate = new Date();\n"
1323: + "var m_oCalEndDate = new Date();\n"
1324: + "var L_szUpdating;\n"
1325: + "var L_szUpdatingBold;\n"
1326: + "\n"
1327: + "void function onDocumentReady()\n"
1328: + "{\n"
1329: + " var szXSLString =\n"
1330: + " '<xsl:template xmlns:xsl=\"uri:xsl\" xmlns:a=\"DAV:\"><root>' +\n"
1331: + " '<xsl:for-each select=\"a:multistatus/a:response\">' +\n"
1332: + " '<appointment><url><xsl:value-of select=\"a:href\" /></url>' +\n"
1333: + " '<xsl:for-each select=\"a:propstat[a:status != \\'HTTP/1.1 404 Resource Not Found\\']/a:prop\">' +\n"
1334: + " '<subject><xsl:value-of select=\"subject\" /></subject>' +\n"
1335: + " '<instancetype><xsl:value-of select=\"instancetype\" /></instancetype>' +\n"
1336: + " '<location><xsl:value-of select=\"location\" /></location>' +\n"
1337: + " '<dtstart><xsl:value-of select=\"dtstart\" /></dtstart>' +\n"
1338: + " '<dtend><xsl:value-of select=\"dtend\" /></dtend>' +\n"
1339: + " '<busystatus><xsl:value-of select=\"busystatus\" /></busystatus>' + \n"
1340: + " '<alldayevent><xsl:value-of select=\"alldayevent\" /></alldayevent>' +\n"
1341: + " '<pr_cdormid><xsl:value-of select=\"pr_cdormid\" /></pr_cdormid>' +\n"
1342: + " '<sensitivity><xsl:value-of select=\"sensitivity\" /></sensitivity>' +\n"
1343: + " '<apptstateflags><xsl:value-of select=\"apptstateflags\" /></apptstateflags>' +\n"
1344: + " '<uid><xsl:value-of select=\"uid\" /></uid>' +\n"
1345: + " '</xsl:for-each></appointment></xsl:for-each></root></xsl:template>';\n"
1346: + "\n"
1347: + " m_objXSL.loadXML(szXSLString);\n"
1348: + "\n"
1349: + " /**************Do initial calendar rendering******************/\n"
1350: + " m_iStartDay = (this.startDay == null)?0:Number(this.startDay);\n"
1351: + " with (this.__idExchMasterCalendarTableNode.children[0])\n"
1352: + " {\n"
1353: + " cells[0].children[0].src = this.prevMonthImage;\n"
1354: + " cells[2].children[0].src = this.nextMonthImage;\n"
1355: + " }\n"
1356: + " mfRenderCalendar();\n"
1357: + "\n"
1358: + " m_rgMonthNamesShort = (null == this.monthnamesShort || \"\" == this.monthnamesShort)?\n"
1359: + " \"Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec\".split(\";\"):\n"
1360: + " this.monthnamesShort.split(\";\");\n"
1361: + " m_rgMonthNamesLong = (null == this.monthnamesLong || \"\" == this.monthnamesLong)?\n"
1362: + " \"January;February;March;April;May;June;July;August;September;October;November;December\".split(\";\"):\n"
1363: + " this.monthnamesLong.split(\";\");\n"
1364: + " m_rgWeekdayLetters = (this.weekdayLetters)?this.weekdayLetters.split(\";\"):\"M;T;W;T;F;S;S\".split(\";\");\n"
1365: + " m_szDateFormat = (this.dateFormat)?this.dateFormat:\"[MMMM] [yyyy]\";\n"
1366: + " var iM=-1,iD=-1,iY=-1,szX;\n"
1367: + " m_objMainTable = this.children[0];\n"
1368: + " m_rgCalCells = m_objMainTable.cells[\"numbercell\"];\n"
1369: + " for(var i = 0; i < 7; i++) //day letters\n"
1370: + " {\n"
1371: + " with(m_rgCalCells[i])\n"
1372: + " {\n"
1373: + " innerText = m_rgWeekdayLetters[( (m_iStartDay+i)%m_rgWeekdayLetters.length )];\n"
1374: + " dayNameCell = \"1\";\n"
1375: + " style.backgroundColor = m_szNormalBG;\n"
1376: + " style.color = m_szNormalText;\n"
1377: + " style.borderBottom = \"solid 1px black\";\n"
1378: + " }\n"
1379: + " }\n"
1380: + " //parseInt treats leading '0' as octal numbers\n"
1381: + " //need to disect the whole number and use Number()\n"
1382: + " iM = parseURLfor(\"m\");\n"
1383: + " iM = (null==iM || \"\"==iM)?-1:Number(iM);\n"
1384: + " iD = parseURLfor(\"d\");\n"
1385: + " iD = (null==iD || \"\"==iD)?-1:Number(iD);\n"
1386: + " iY = parseURLfor(\"y\");\n"
1387: + " iY = (null==iY || \"\"==iY)?-1:Number(iY);\n"
1388: + "\n"
1389: + " if(-3 == iM+iY+iD)//no date info on the url\n"
1390: + " {\n"
1391: + " m_objMainDate = new Date(); //use todays date\n"
1392: + " }\n"
1393: + " else\n"
1394: + " {\n"
1395: + " //missing defaults to current month/year and 1st day of month\n"
1396: + " iM = (isNaN(iM) || iM == -1)?m_objTodaysDate.getMonth():iM-1;\n"
1397: + " iY = (isNaN(iY) || iY == -1)?m_objTodaysDate.getFullYear():iY;\n"
1398: + " iD = (isNaN(iD) || iD == -1)?1:iD;\n"
1399: + " \n"
1400: + " try\n"
1401: + " {\n"
1402: + " m_objMainDate = new Date(iY,iM,iD); \n"
1403: + " }\n"
1404: + " catch(e)\n"
1405: + " {\n"
1406: + " m_objMainDate = new Date(); \n"
1407: + " }\n"
1408: + " }\n"
1409: + " m_objSelectedStart = new Date(m_objMainDate);\n"
1410: + " m_objSelectedEnd = new Date(m_objMainDate);\n"
1411: + " //search url for view\n"
1412: + " var szView = parseURLfor(\"view\");\n"
1413: + " szView = (null == szView)?\"daily\":szView.toLowerCase();\n"
1414: + " m_iView=(szView==\"weekly\")?1:( (szView==\"monthly\")?2:0 );\n"
1415: + " if (1 == m_iView) //adjust selects weekly\n"
1416: + " {//need to find start of this week\n"
1417: + " i = m_objSelectedStart.getDay()-m_iStartDay;\n"
1418: + " i+=(0>=i)?7:0;\n"
1419: + " m_objSelectedStart.setDate(m_objSelectedStart.getDate()-i);\n"
1420: + " m_objSelectedEnd.setDate(m_objSelectedStart.getDate()+6);\n"
1421: + " }\n"
1422: + " else if (2==m_iView) //monthly\n"
1423: + " {\n"
1424: + " m_objSelectedStart.setDate(1);\n"
1425: + " i = m_objSelectedStart.getDay()-m_iStartDay;\n"
1426: + " i+=(0>=i)?7:0;\n"
1427: + " m_objSelectedStart.setDate(m_objSelectedStart.getDate()-i);\n"
1428: + " \n"
1429: + " m_objSelectedEnd.setTime( m_objSelectedStart.getTime()+(41*86400000) );\n"
1430: + " }\n"
1431: + " m_objSelectedStart.setHours(0,0,0,0);\n"
1432: + " m_objSelectedEnd.setHours(24,0,0,0);\n"
1433: + "\n"
1434: + " mfUpdateCalendar(true,true);\n"
1435: + "}\n"
1436: + "void function fire_OnDateChange(objXML)\n"
1437: + "{\n"
1438: + " if(m_fHaveData)\n"
1439: + " {\n"
1440: + " var objEvent = createEventObject();\n"
1441: + " objEvent.xml = objXML;\n"
1442: + " objEvent.view = m_iView;\n"
1443: + " objEvent.date = (2==m_iView)?m_objMainDate:m_objSelectedStart;\n"
1444: + " id_OnDateChange.fire(objEvent);\n"
1445: + " }\n"
1446: + "}\n"
1447: + "\n"
1448: + "void function onStop() \n"
1449: + "{\n"
1450: + " if(m_iIntervalID)\n"
1451: + " {\n"
1452: + " window.clearInterval(m_iIntervalID);\n"
1453: + " }\n"
1454: + "}\n"
1455: + "void function onClick()\n"
1456: + "{\n"
1457: + " event.cancelBubble=true;\n"
1458: + " if(!m_fReadOnly)\n"
1459: + " {\n"
1460: + " if(null != event.srcElement.dayCell)\n"
1461: + " { \n"
1462: + " mfSetDailyView(event.srcElement);\n"
1463: + " return;\n"
1464: + " }\n"
1465: + " else if(null != event.srcElement.leftNavButton)\n"
1466: + " {\n"
1467: + " m_objMainDate.setMonth(m_objMainDate.getMonth()-1);\n"
1468: + " mfUpdateCalendar(false,true);\n"
1469: + " return;\n"
1470: + " }\n"
1471: + " else if(null != event.srcElement.rightNavButton)\n"
1472: + " {\n"
1473: + " m_objMainDate.setMonth(m_objMainDate.getMonth()+1);\n"
1474: + " mfUpdateCalendar(false,true);\n"
1475: + " return;\n"
1476: + " }\n"
1477: + " else if(null != event.srcElement.monthDisplayName)\n"
1478: + " {\n"
1479: + " mfSetMonthlyView();\n"
1480: + " }\n"
1481: + " else if(null != event.srcElement.weekselect)\n"
1482: + " {\n"
1483: + " mfSetWeeklyView(m_objMainTable.rows[event.srcElement.parentElement.rowIndex].cells[1]);\n"
1484: + " }\n"
1485: + " }\n"
1486: + "}\n"
1487: + "\n"
1488: + "void function mfSetDailyView(eCell)\n"
1489: + "{\n"
1490: + " m_iView=0;\n"
1491: + " m_objSelectedStart.setFullYear(eCell.year,eCell.month,parseInt(eCell.innerText));\n"
1492: + " m_objSelectedEnd.setTime(m_objSelectedStart);\n"
1493: + " mfFindAndSelectDate();\n"
1494: + " mfGetAppointments(true,false,true);\n"
1495: + "}\n"
1496: + "void function mfSetWeeklyView(eCell)\n"
1497: + "{\n"
1498: + " m_iView=1;\n"
1499: + " m_objSelectedStart.setFullYear(eCell.year,eCell.month,eCell.innerText);\n"
1500: + " m_objSelectedEnd.setFullYear(eCell.year,eCell.month,Number(eCell.innerText)+6);\n"
1501: + " mfFindAndSelectDate();\n"
1502: + " mfGetAppointments(true,false,true);\n"
1503: + "}\n"
1504: + "void function mfSetMonthlyView()\n"
1505: + "{\n"
1506: + " m_iView=2;\n"
1507: + " m_objSelectedStart.setTime(m_oCalStartDate);\n"
1508: + " m_objSelectedEnd.setTime(m_oCalEndDate);\n"
1509: + " mfFindAndSelectDate();\n"
1510: + " mfGetAppointments(true,false,true);\n"
1511: + "}\n"
1512: + "void function f_setView(iView)\n"
1513: + "{\n"
1514: + " //use the currently selected cell to determine view\n"
1515: + " if(m_iView == iView)\n"
1516: + " {\n"
1517: + " return;\n"
1518: + " }\n"
1519: + " m_iView = iView;\n"
1520: + " switch(iView)\n"
1521: + " {\n"
1522: + " case 1:\n"
1523: + " //use the last selected day or today\n"
1524: + " var x=(-1<mfFindAndSelectDate.iHoldLastDaily)?mfFindAndSelectDate.iHoldLastDaily:mfFindAndSelectDate.iStartIdx;\n"
1525: + " mfSetWeeklyView(m_objMainTable.rows[m_rgCalCells[x].parentElement.rowIndex].cells[1]);\n"
1526: + " break;\n"
1527: + " case 2:\n"
1528: + " mfSetMonthlyView();\n"
1529: + " break;\n"
1530: + " case 0:\n"
1531: + " default:\n"
1532: + " var x=(-1<mfFindAndSelectDate.iHoldLastDaily)?mfFindAndSelectDate.iHoldLastDaily:mfFindAndSelectDate.iStartIdx;\n"
1533: + " mfSetDailyView(m_rgCalCells[x]);\n"
1534: + " }\n"
1535: + "}\n"
1536: + "//unselects current selection\n"
1537: + "//searches calendar for matching date cell given in m_objSelectedStart\n"
1538: + "mfFindAndSelectDate.iStartIdx=-1;\n"
1539: + "mfFindAndSelectDate.iEndIdx=-1;\n"
1540: + "mfFindAndSelectDate.iHoldLastDaily=-1;\n"
1541: + "void function mfFindAndSelectDate()\n"
1542: + "{\n"
1543: + " var x,y;\n"
1544: + " \n"
1545: + " if (mfFindAndSelectDate.iStartIdx>-1)\n"
1546: + " { //remove any prev selection\n"
1547: + " for(x=mfFindAndSelectDate.iStartIdx;x<=mfFindAndSelectDate.iEndIdx;x++)\n"
1548: + " {\n"
1549: + " m_rgCalCells[x].style.backgroundColor=m_rgCalCells[x].dayCell;\n"
1550: + " m_rgCalCells[x].style.color=m_szNormalText;\n"
1551: + " }\n"
1552: + " mfFindAndSelectDate.iStartIdx=-1;\n"
1553: + " }\n"
1554: + " if (m_objSelectedStart>m_oCalEndDate || m_objSelectedEnd<m_oCalStartDate)\n"
1555: + " {\n"
1556: + " return;\n"
1557: + " }\n"
1558: + " x=7;\n"
1559: + " if(2==m_iView) //monthly\n"
1560: + " {\n"
1561: + " if(m_objSelectedStart.getTime() == m_oCalStartDate.getTime()) //whole month showing\n"
1562: + " {\n"
1563: + " y=m_rgCalCells.length-1;\n"
1564: + " }\n"
1565: + " else if(m_objSelectedStart<m_oCalStartDate&&m_objSelectedEnd>m_oCalStartDate) //do 1st grey area\n"
1566: + " {\n"
1567: + " mfFindAndSelectDate.iStartIdx=7;\n"
1568: + " for(x=7;\"1\"!=m_rgCalCells[x].innerText;x++)\n"
1569: + " {\n"
1570: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
1571: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
1572: + " }\n"
1573: + " mfFindAndSelectDate.iEndIdx=x;\n"
1574: + " return;\n"
1575: + " }\n"
1576: + " else if(m_objSelectedStart<m_oCalEndDate&&m_objSelectedEnd>m_oCalEndDate)//last gray area\n"
1577: + " {\n"
1578: + " x=m_rgCalCells.length-1;\n"
1579: + " mfFindAndSelectDate.iEndIdx=x;\n"
1580: + " for(;\"1\"!=m_rgCalCells[x].innerText;x--)\n"
1581: + " {\n"
1582: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
1583: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
1584: + " }\n"
1585: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
1586: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
1587: + " mfFindAndSelectDate.iStartIdx=x-1;\n"
1588: + " return;\n"
1589: + " }\n"
1590: + " else\n"
1591: + " {\n"
1592: + " return;\n"
1593: + " }\n"
1594: + " }\n"
1595: + " else if (m_objSelectedStart>=m_oCalStartDate && m_objSelectedStart<=m_oCalEndDate)\n"
1596: + " {\n"
1597: + " x=Math.round((m_objSelectedStart-m_oCalStartDate)/86400000)+7;\n"
1598: + " }\n"
1599: + " y=x;\n"
1600: + " if (0 != m_iView)\n"
1601: + " {\n"
1602: + " y=(2==m_iView)?m_rgCalCells.length-1:x+6;\n"
1603: + " if (2==m_iView && m_objSelectedEnd<m_oCalEndDate)\n"
1604: + " {\n"
1605: + " y=Math.round((m_objSelectedEnd-m_oCalStartDate)/86400000)+7;\n"
1606: + " }\n"
1607: + " }\n"
1608: + " mfFindAndSelectDate.iStartIdx=(x<49)?x:-1;\n"
1609: + " mfFindAndSelectDate.iEndIdx=(y<49)?y:-1;;\n"
1610: + " for (;(x<=y && x<49);x++)\n"
1611: + " {\n"
1612: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
1613: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
1614: + " }\n"
1615: + " if (m_iView==0)\n"
1616: + " {\n"
1617: + " mfFindAndSelectDate.iHoldLastDaily=mfFindAndSelectDate.iStartIdx;\n"
1618: + " }\n"
1619: + "}\n"
1620: + "\n"
1621: + "//PARAM: iMonth - jan=0\n"
1622: + "function mfGetDaysInMonth(iMonth, iYear)\n"
1623: + "{\n"
1624: + " iMonth+=(iMonth==-1)?13:1; //remove 0 offset (1=jan)\n"
1625: + " return( (2 == iMonth) ? (28+mfIsLeapYear(iYear)):(30+((iMonth+(iMonth>7))%2)));\n"
1626: + "}\n"
1627: + "function mfIsLeapYear(yr)\n"
1628: + "{\n"
1629: + " return((yr % 4 == 0) && (yr % 100 != 0) || (yr % 400 == 0))?1:0;\n"
1630: + "}\n"
1631: + "\n"
1632: + "mfWriteCellNumbers.todayCellIdx=-1;\n"
1633: + "void function mfWriteCellNumbers()\n"
1634: + "{\n"
1635: + " m_objMainDate.setDate(1);\n"
1636: + "\n"
1637: + " var iM = m_objMainDate.getMonth();\n"
1638: + " var iY = m_objMainDate.getFullYear();\n"
1639: + " var iY2 = iY%100;\n"
1640: + "\n"
1641: + " var szCaptionText = this.m_szDateFormat.replace(/\\[MMMM\\]/g, m_rgMonthNamesLong[iM]);\n"
1642: + " \n"
1643: + " szCaptionText = szCaptionText.replace(/\\[MMM\\]/g, m_rgMonthNamesShort[iM]);\n"
1644: + " szCaptionText = szCaptionText.replace(/\\[MM\\]/g, ++iM<10 ? \"0\"+iM : iM );\n"
1645: + " szCaptionText = szCaptionText.replace(/\\[M\\]/g, iM);\n"
1646: + " szCaptionText = szCaptionText.replace(/\\[yyy+\\]/g, iY);\n"
1647: + " szCaptionText = szCaptionText.replace(/\\[y+\\]/g, iY2>9?iY2:\"0\"+iY2);\n"
1648: + "\n"
1649: + " m_objMainTable.rows[0].cells[1].innerText= szCaptionText;\n"
1650: + "\n"
1651: + " m_oCalStartDate.setTime(m_objMainDate);\n"
1652: + " m_oCalEndDate.setTime(m_objMainDate);\n"
1653: + "\n"
1654: + " var x=m_objMainDate.getDay()-m_iStartDay;\n"
1655: + " x+=(0>=x)?7:0; //show entire previous week\n"
1656: + " m_oCalStartDate.setDate(1-x); //this is now the first date on the calendar\n"
1657: + " m_oCalStartDate.setHours(0,0,0,0);\n"
1658: + " m_oCalEndDate.setDate((1-x)+41);\n"
1659: + " m_oCalEndDate.setHours(24,0,0,0);\n"
1660: + "\n"
1661: + " var iD = m_oCalStartDate.getDate();\n"
1662: + " var iM = m_oCalStartDate.getMonth();\n"
1663: + " var iY = m_oCalStartDate.getFullYear();\n"
1664: + " var iDm = mfGetDaysInMonth(iM,iY);\n"
1665: + " var bg = (x==0)?m_szNormalDateBG:m_szInactiveBG;\n"
1666: + " var y=7+iDm;\n"
1667: + " for(x=7;iD<=iDm;x++)\n"
1668: + " {\n"
1669: + " m_rgCalCells[x].month=iM;\n"
1670: + " m_rgCalCells[x].year =iY;\n"
1671: + " m_rgCalCells[x].dayCell = bg;\n"
1672: + " with(m_rgCalCells[x])\n"
1673: + " {\n"
1674: + " innerText = iD++;\n"
1675: + " style.backgroundColor = bg;\n"
1676: + " style.color = m_szNormalText;\n"
1677: + " style.fontWeight = \"normal\";\n"
1678: + " }\n"
1679: + " }\n"
1680: + " var iLastCell = m_rgCalCells.length;\n"
1681: + " while(x<iLastCell)\n"
1682: + " {\n"
1683: + " iD=1;\n"
1684: + " iM=(11==iM)?0:iM+1;\n"
1685: + " if (0==iM ) iY++;\n"
1686: + " var iDm = mfGetDaysInMonth(iM,iY);\n"
1687: + " bg=(bg==m_szInactiveBG)?m_szNormalDateBG:m_szInactiveBG;\n"
1688: + " if ((iDm+x) > iLastCell) iDm=iLastCell-x; //dont past last cell\n"
1689: + " for(;iD<=iDm;x++)\n"
1690: + " {\n"
1691: + " //if (x>=iLastCell) break;\n"
1692: + " m_rgCalCells[x].month=iM;\n"
1693: + " m_rgCalCells[x].year =iY;\n"
1694: + " m_rgCalCells[x].dayCell = bg;\n"
1695: + " with(m_rgCalCells[x])\n"
1696: + " {\n"
1697: + " innerText = iD++;\n"
1698: + " style.backgroundColor = bg;\n"
1699: + " style.color = m_szNormalText;\n"
1700: + " style.fontWeight = \"normal\";\n"
1701: + " }\n"
1702: + " }\n"
1703: + " }\n"
1704: + " if (-1!=mfWriteCellNumbers.todayCellIdx)\n"
1705: + " {\n"
1706: + " m_rgCalCells[mfWriteCellNumbers.todayCellIdx].style.border = \"none\";\n"
1707: + " mfWriteCellNumbers.todayCellIdx=-1;\n"
1708: + " }\n"
1709: + " //is todays date on this calendar (needs red border)\n"
1710: + " if(m_objTodaysDate > m_oCalStartDate && m_objTodaysDate < m_oCalEndDate)\n"
1711: + " { \n"
1712: + " //add one hour 3600000 (for daylight spring losing an hour) and floor (DST fall works with floor)\n"
1713: + " x = Math.floor((m_objTodaysDate - m_oCalStartDate + 3600000)/86400000)\n"
1714: + " m_rgCalCells[x+7].style.border = \"solid 1 red\";\n"
1715: + " mfWriteCellNumbers.todayCellIdx=x+7;\n"
1716: + " }\n"
1717: + " //prev selection has been wiped!\n"
1718: + " mfFindAndSelectDate.iStartIdx=-1;\n"
1719: + "}\n"
1720: + "\n"
1721: + "void function mfUpdateCalendar(fRenderView,fUpdateBolding)\n"
1722: + "{\n"
1723: + " mfWriteCellNumbers();\n"
1724: + " mfFindAndSelectDate();\n"
1725: + " if (!fUpdateBolding)\n"
1726: + " {\n"
1727: + " mfGetAppointments(fRenderView,false,true);\n"
1728: + " }\n"
1729: + " else\n"
1730: + " {\n"
1731: + " if (fRenderView) //refresh data then bold\n"
1732: + " {\n"
1733: + " mfGetAppointments(fRenderView,true,true);\n"
1734: + " }\n"
1735: + " else\n"
1736: + " {\n"
1737: + " mfGetBoldData(true);\n"
1738: + " } \n"
1739: + " } \n"
1740: + "}\n"
1741: + "\n"
1742: + "void function mfRenderCalendar()\n"
1743: + "{\n"
1744: + " var masterTableNode = this.__idExchMasterCalendarTableNode.children[0];\n"
1745: + " var masterRowNode = this.__idExchMasterCalendarRowNode.children[0];\n"
1746: + " var newNode=null;\n"
1747: + " for(var i=0;i<7;i++)\n"
1748: + " {\n"
1749: + " newNode=masterRowNode.cloneNode(true);\n"
1750: + " if(0==i)\n"
1751: + " {\n"
1752: + " newNode.cells[0].weekselect=null;\n"
1753: + " newNode.cells[0].monthDisplayName=\"1\";\n"
1754: + " }\n"
1755: + " masterTableNode.insertAdjacentElement(\"BeforeEnd\",newNode.children[0]);\n"
1756: + " }\n"
1757: + " this.insertAdjacentElement(\"BeforeEnd\",masterTableNode);\n"
1758: + " m_objMainTable=masterTableNode;\n"
1759: + "}\n"
1760: + "mfGetBoldData.szQuery=\"\";\n"
1761: + "void function mfGetBoldData(fResetQuery)\n"
1762: + "{\n"
1763: + " if(null != m_objStatus )\n"
1764: + " {\n"
1765: + " m_objStatus.style.display=\"\";\n"
1766: + " m_objStatus.innerText = L_szUpdatingBold;\n"
1767: + " }\n"
1768: + " m_fHaveData = true;//allow event firings\n"
1769: + " if (\"\"==mfGetBoldData.szQuery) fResetQuery=true;\n"
1770: + " if (fResetQuery)\n"
1771: + " {\n"
1772: + " var iX = 7;\n"
1773: + " iX = m_rgCalCells.length - 1;\n"
1774: + " var szDateStart=mfGetSearchDateUTC(m_oCalStartDate);\n"
1775: + " var szDateEnd=mfGetSearchDateUTC(m_oCalEndDate);\n"
1776: + " mfGetBoldData.szQuery ='<a:searchrequest xmlns:a=\"DAV:\" > ' +\n"
1777: + " '<a:sql>Select ' +\n"
1778: + " '\"urn:schemas:calendar:dtstart\" AS dtstart, ' +\n"
1779: + " '\"urn:schemas:calendar:dtend\" AS dtend, ' +\n"
1780: + " '\"urn:schemas:calendar:alldayevent\" AS alldayevent ' +\n"
1781: + " 'FROM Scope(\\'SHALLOW TRAVERSAL OF \"\"\\') ' +\n"
1782: + " 'WHERE NOT \"urn:schemas:calendar:instancetype\" = 1 ' +\n"
1783: + " 'AND NOT \"urn:schemas:calendar:busystatus\" = \\'FREE\\' ' +\n"
1784: + " 'AND \"urn:schemas:calendar:dtend\" > \\''+szDateStart+'\\' ' +\n"
1785: + " 'AND \"urn:schemas:calendar:dtstart\" < \\''+szDateEnd+'\\' ' +\n"
1786: + " 'ORDER BY \"urn:schemas:calendar:dtstart\" ASC ' +\n"
1787: + " '</></>';\n"
1788: + "\n"
1789: + " }\n"
1790: + " m_objXMLhttpBold = new ActiveXObject(\"Microsoft.XMLhttp\");\n"
1791: + " try\n"
1792: + " {\n"
1793: + " m_objXMLhttpBold.open(\"SEARCH\","
1794: + JSWrapperHelper.CONVERT_EXPRESSION_FUNCTION_WRAP_START
1795: + " folderURL), true);\n"
1796: + " m_objXMLhttpBold.setRequestHeader(\"Content-Type\", \"text/xml\");\n"
1797: + " m_objXMLhttpBold.onreadystatechange = onRSC_getBoldData;\n"
1798: + " m_objXMLhttpBold.send(mfGetBoldData.szQuery);\n"
1799: + " }\n"
1800: + " catch(e)\n"
1801: + " {\n"
1802: + " alert(\"Error in ExchangeCalendar.HTC mfGetBoldData() with searchrequest: \"+e.description);\n"
1803: + " }\n"
1804: + "}\n"
1805: + "\n"
1806: + "\n"
1807: + "//holds calendar date range including greyed next/prev months\n"
1808: + "mfGetAppointments.m_dTemp = new Date();\n"
1809: + "mfGetAppointments.szQuery=\"\";\n"
1810: + "void function mfGetAppointments(fRenderVeiw,fUpdateBolding,fResetQuery)\n"
1811: + "{\n"
1812: + " if (true == fUpdateBolding) \n"
1813: + " {\n"
1814: + " onRSC_getAppointments.fUpdateBolding = true; //we will bold after getting the appt data\n"
1815: + " } \n"
1816: + " if(null != m_objStatus )\n"
1817: + " {\n"
1818: + " m_objStatus.style.display=\"\";\n"
1819: + " m_objStatus.innerText = L_szUpdating;\n"
1820: + " }\n"
1821: + "\n"
1822: + " onRSC_getAppointments.fResetQuery=fResetQuery;\n"
1823: + " m_fHaveData = false; //stop event firings\n"
1824: + "\n"
1825: + " //Use last stored query in case where polling fires but user has calendar in another month than the view\n"
1826: + " //Happens most when going out past the expansion which fires another expansion with triggers polling changes\n"
1827: + " if (\"\"==mfGetAppointments.szQuery) fResetQuery=true;\n"
1828: + " if (fResetQuery)\n"
1829: + " {\n"
1830: + " var iX = 7;\n"
1831: + " iX = m_rgCalCells.length - 1;\n"
1832: + " if (2==m_iView) //monthly gets full 6 weeks\n"
1833: + " {\n"
1834: + " //this shifts an extra day for the montly view calendar in sunday start\n"
1835: + " //while view shows monday start (same problem with weekly view)\n"
1836: + " if (0==m_iStartDay)\n"
1837: + " {\n"
1838: + " m_oCalStartDate.setHours(24,0,0,0);\n"
1839: + " m_oCalEndDate.setHours(24,0,0,0);\n"
1840: + " var szDateStart = mfGetSearchDateUTC(m_oCalStartDate);\n"
1841: + " var szDateEnd = mfGetSearchDateUTC(m_oCalEndDate);\n"
1842: + " m_oCalStartDate.setHours(-24,0,0,0);\n"
1843: + " m_oCalEndDate.setHours(-24,0,0,0);\n"
1844: + " }\n"
1845: + " else\n"
1846: + " {\n"
1847: + " var szDateStart = mfGetSearchDateUTC(m_oCalStartDate);\n"
1848: + " var szDateEnd = mfGetSearchDateUTC(m_oCalEndDate);\n"
1849: + " }\n"
1850: + " }\n"
1851: + " else if (1==m_iView)//weekly\n"
1852: + " {\n"
1853: + " //this shifts an extra day for the weekly view calendar in sunday start \n"
1854: + " //while view shows monday start (same problem with monthly view)\n"
1855: + " if (0==m_iStartDay)\n"
1856: + " {\n"
1857: + " m_objSelectedStart.setHours(24,0,0,0);\n"
1858: + " var szDateStart = mfGetSearchDateUTC(m_objSelectedStart);\n"
1859: + " m_objSelectedStart.setHours(168,0,0,0);\n"
1860: + " var szDateEnd = mfGetSearchDateUTC(m_objSelectedStart);\n"
1861: + " m_objSelectedStart.setHours(-192,0,0,0);\n"
1862: + " }\n"
1863: + " else\n"
1864: + " {\n"
1865: + " var szDateStart = mfGetSearchDateUTC(m_objSelectedStart);\n"
1866: + " m_objSelectedStart.setHours(168,0,0,0);\n"
1867: + " var szDateEnd = mfGetSearchDateUTC(m_objSelectedStart);\n"
1868: + " m_objSelectedStart.setHours(-168,0,0,0);\n"
1869: + " }\n"
1870: + " } \n"
1871: + " else //daily view (default)\n"
1872: + " {\n"
1873: + " var szDateStart = mfGetSearchDateUTC(m_objSelectedStart);\n"
1874: + " m_objSelectedStart.setHours(24,0,0,0);\n"
1875: + " var szDateEnd = mfGetSearchDateUTC(m_objSelectedStart);\n"
1876: + " m_objSelectedStart.setHours(-24,0,0,0);\n"
1877: + " }\n"
1878: + "\n"
1879: + " mfGetAppointments.szQuery='<a:searchrequest xmlns:a=\"DAV:\" > ' +\n"
1880: + " '<a:sql>Select ' +\n"
1881: + " '\"urn:schemas:calendar:location\" AS location, ' +\n"
1882: + " '\"urn:schemas:httpmail:subject\" AS subject, '+\n"
1883: + " '\"urn:schemas:calendar:dtstart\" AS dtstart, ' +\n"
1884: + " '\"urn:schemas:calendar:dtend\" AS dtend, ' +\n"
1885: + " '\"urn:schemas:calendar:busystatus\" AS busystatus, ' +\n"
1886: + " '\"urn:schemas:calendar:instancetype\" AS instancetype, ' +\n"
1887: + " '\"urn:schemas:calendar:alldayevent\" AS alldayevent, ' +\n"
1888: + " '\"http://schemas.microsoft.com/mapi/proptag/x10c70003\" AS pr_cdormid, ' +\n"
1889: + " '\"http://schemas.microsoft.com/exchange/sensitivity-long\" AS sensitivity, '+\n"
1890: + " '\"http://schemas.microsoft.com/mapi/apptstateflags\" AS apptstateflags, '+\n"
1891: + " '\"urn:schemas:calendar:uid\" AS uid ' +\n"
1892: + " 'FROM Scope(\\'SHALLOW TRAVERSAL OF \"\"\\') ' +\n"
1893: + " 'WHERE NOT \"urn:schemas:calendar:instancetype\" = 1 ' +\n"
1894: + " 'AND \"urn:schemas:calendar:dtend\" > \\''+szDateStart+'\\' ' +\n"
1895: + " 'AND \"urn:schemas:calendar:dtstart\" < \\''+szDateEnd+'\\' ' +\n"
1896: + " 'ORDER BY \"urn:schemas:calendar:dtstart\" ASC ' +\n"
1897: + " '</></>';\n"
1898: + " \n"
1899: + " }\n"
1900: + " \n"
1901: + " m_objXMLhttp = new ActiveXObject(\"Microsoft.XMLhttp\");\n"
1902: + " onRSC_getAppointments.fRenderView=fRenderVeiw;\n"
1903: + " try\n"
1904: + " {\n"
1905: + " m_objXMLhttp.open(\"SEARCH\","
1906: + JSWrapperHelper.CONVERT_EXPRESSION_FUNCTION_WRAP_START
1907: + "folderURL), true);\n"
1908: + " m_objXMLhttp.setRequestHeader(\"Content-Type\",\"text/xml\");\n"
1909: + " m_objXMLhttp.onreadystatechange = onRSC_getAppointments;\n"
1910: + " m_objXMLhttp.send(mfGetAppointments.szQuery);\n"
1911: + " }\n"
1912: + " catch(e)\n"
1913: + " {\n"
1914: + " alert(\"Error in ExchangeCalendar.HTC mfGetAppointments() with searchrequest: \"+e.description);\n"
1915: + " onRSC_getAppointments.fRenderView = true;\n"
1916: + " }\n"
1917: + "}\n"
1918: + "\n"
1919: + "//returns UTC date in \"yyyy/mm/dd hh:mm:ss\" format for DAV searchrequests\n"
1920: + "void function mfGetSearchDateUTC(objDate)\n"
1921: + "{\n"
1922: + " var szYear = objDate.getUTCFullYear();\n"
1923: + " var szMonth = objDate.getUTCMonth()+1;\n"
1924: + " var szDate = objDate.getUTCDate();\n"
1925: + " var szHrs = objDate.getUTCHours();\n"
1926: + " var szMin = objDate.getUTCMinutes();\n"
1927: + " return ( szYear+\"/\"+\n"
1928: + " ((szMonth<10)?(\"0\"+szMonth):szMonth) + \"/\" +\n"
1929: + " ((szDate<10) ?(\"0\"+szDate) :szDate) + \" \" +\n"
1930: + " ((szHrs<10) ?(\"0\"+szHrs) :szHrs) + \":\" +\n"
1931: + " ((szMin<10) ?(\"0\"+szMin) :szMin) + \":00\" );\n"
1932: + "}\n"
1933: + "\n"
1934: + "void function mfBoldDates(rgApptStartTimes,rgApptEndTimes,rgIsAllDayEvent)\n"
1935: + "{\n"
1936: + " var x;\n"
1937: + " var rgNodes=null;\n"
1938: + " for(x=7; x < m_rgCalCells.length; x++)\n"
1939: + " {\n"
1940: + " rgNodes=mfGetNodes(m_rgCalCells[x].year,m_rgCalCells[x].month,Number(m_rgCalCells[x].innerText));\n"
1941: + " m_rgCalCells[x].style.fontWeight = rgNodes.length ? \"bold\" : \"normal\";\n"
1942: + " }\n"
1943: + "}\n"
1944: + "function mfGetNodes(iY,iM,iD)\n"
1945: + "{\n"
1946: + " if(null == m_objOutPutXMLBold)\n"
1947: + " {\n"
1948: + " return;\n"
1949: + " }\n"
1950: + " var dtstartUTC = mfGetUTFIsoDate(iY, iM, iD, 0, 0);\n"
1951: + " var dtendUTC = mfGetUTFIsoDate(iY, iM, iD+1,0, 0);\n"
1952: + " var szStartTimeQuery= \"(dtstart$ge$'\" + dtstartUTC + \"'&&dtstart$lt$'\" + dtendUTC + \"')\";\n"
1953: + " var szEndTimeQuery = \"(dtend$gt$'\" + dtstartUTC + \"'&&dtend$le$'\"+ dtendUTC+ \"')\";\n"
1954: + " var szOutSideQuery = \"(dtstart$lt$'\" + dtstartUTC + \"'&&dtend$gt$'\"+ dtendUTC + \"')\";\n"
1955: + " var szQuery = \"root/appointment[\" + szStartTimeQuery + \"||\" + szEndTimeQuery + \"||\" + szOutSideQuery + \"]\";\n"
1956: + " return(m_objOutPutXMLBold.selectNodes(szQuery));\n"
1957: + "}\n"
1958: + "\n"
1959: + "mfGetUTFIsoDate.objD= new Date();\n"
1960: + "function mfGetUTFIsoDate(iYr,iMon,iDate,iHr,iMin)\n"
1961: + "{\n"
1962: + " mfGetUTFIsoDate.objD.setFullYear(iYr,iMon,iDate);\n"
1963: + " mfGetUTFIsoDate.objD.setHours(iHr,iMin,0);\n"
1964: + " var iYear = mfGetUTFIsoDate.objD.getUTCFullYear();\n"
1965: + " var szMonth = mfGetUTFIsoDate.objD.getUTCMonth()+1;//0 offset adjustment\n"
1966: + " var szDate = mfGetUTFIsoDate.objD.getUTCDate();\n"
1967: + " var szHours = mfGetUTFIsoDate.objD.getUTCHours();\n"
1968: + " var szMinutes = mfGetUTFIsoDate.objD.getUTCMinutes();\n"
1969: + " if (szMonth< 10)\n"
1970: + " {\n"
1971: + " szMonth = \"0\"+szMonth;\n"
1972: + " } \n"
1973: + " if (szDate < 10)\n"
1974: + " {\n"
1975: + " szDate = \"0\"+szDate;\n"
1976: + " } \n"
1977: + " if (szHours < 10)\n"
1978: + " {\n"
1979: + " szHours = \"0\"+szHours;\n"
1980: + " } \n"
1981: + " if (szMinutes < 10)\n"
1982: + " {\n"
1983: + " szMinutes = \"0\"+szMinutes;\n"
1984: + " }\n"
1985: + " return(String(iYear+\"-\"+szMonth+\"-\"+szDate+\"T\"+szHours+\":\"+szMinutes+\":00.000Z\"));\n"
1986: + "}\n"
1987: + "\n"
1988: + "//szDtTime = ISO formatted UTC time string = \"1999-02-18T02:00:00.000Z\"\n"
1989: + "//returns = UTC time in milliseconds\n"
1990: + "function mfGetIsoDateMs(szIsoDate)\n"
1991: + "{\n"
1992: + " var re=mfGetRegExpIsoDates();\n"
1993: + " re.lastIndex=0;\n"
1994: + " var arr = re.exec( szIsoDate );\n"
1995: + " return ( (null == arr) ? null : Date.UTC( Number( arr[1]), Number(arr[2])-1, Number(arr[3]), Number(arr[4]), Number(arr[5]), 0, 0 ) );\n"
1996: + "}\n"
1997: + "\n"
1998: + "mfGetRegExpIsoDates.re;\n"
1999: + "function mfGetRegExpIsoDates()\n"
2000: + "{\n"
2001: + " if (null == mfGetRegExpIsoDates.re)\n"
2002: + " { \n"
2003: + " mfGetRegExpIsoDates.re = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):\\d{2}\\.\\d{3}Z?$/;\n"
2004: + " }\n"
2005: + " return(mfGetRegExpIsoDates.re);\n"
2006: + "}\n"
2007: + "\n"
2008: + "void function onAbort()\n"
2009: + "{\n"
2010: + " return;\n"
2011: + "}\n"
2012: + "void function onRSC_getBoldData()\n"
2013: + "{\n"
2014: + " if(4 != m_objXMLhttpBold.readyState)\n"
2015: + " {\n"
2016: + " return;\n"
2017: + " }\n"
2018: + " m_objXMLhttpBold.onreadystatechange = onAbort;\n"
2019: + " var objXML = m_objXMLhttpBold.responseXML;\n"
2020: + " objXML.transformNodeToObject(m_objXSL.documentElement, m_objOutPutXMLBold);\n"
2021: + " var objApptNodes = m_objOutPutXMLBold.selectNodes('root/appointment/dtstart');\n"
2022: + " var objApptNodes1 = m_objOutPutXMLBold.selectNodes('root/appointment/dtend');\n"
2023: + " var objApptNodes2 = m_objOutPutXMLBold.selectNodes('root/appointment/alldayevent');\n"
2024: + "\n"
2025: + " mfBoldDates(objApptNodes,objApptNodes1,objApptNodes2);\n"
2026: + " if(null != m_objStatus )\n"
2027: + " {\n"
2028: + " m_objStatus.style.display=\"none\";\n"
2029: + " m_objStatus.innerText = \"\";\n"
2030: + " }\n"
2031: + "}\n"
2032: + "\n"
2033: + "onRSC_getAppointments.fRenderView = true;\n"
2034: + "onRSC_getAppointments.fUpdateBolding = false;\n"
2035: + "onRSC_getAppointments.fResetQuery=true;\n"
2036: + "void function onRSC_getAppointments()\n"
2037: + "{\n"
2038: + " if(4 != m_objXMLhttp.readyState)\n"
2039: + " {\n"
2040: + " return;\n"
2041: + " }\n"
2042: + " m_objXMLhttp.onreadystatechange = onAbort;\n"
2043: + " var objXML = m_objXMLhttp.responseXML;\n"
2044: + " objXML.transformNodeToObject(m_objXSL.documentElement, m_objOutPutXML);\n"
2045: + " //only fire (refresh the veiwer) if the calendar is on that month\n"
2046: + " m_fHaveData = true;\n"
2047: + " if(m_objMainDate >= m_oCalStartDate && m_objMainDate <= m_oCalEndDate)\n"
2048: + " {\n"
2049: + " if(true == onRSC_getAppointments.fRenderView)\n"
2050: + " {\n"
2051: + " fire_OnDateChange(m_objOutPutXML);\n"
2052: + " }\n"
2053: + " }\n"
2054: + " onRSC_getAppointments.fRenderView=true;\n"
2055: + " if(null != m_objStatus )\n"
2056: + " {\n"
2057: + " m_objStatus.style.display=\"none\";\n"
2058: + " m_objStatus.innerText = \"\";\n"
2059: + " }\n"
2060: + " if (true == onRSC_getAppointments.fUpdateBolding)\n"
2061: + " {\n"
2062: + " onRSC_getAppointments.fUpdateBolding=false;\n"
2063: + " mfGetBoldData(onRSC_getAppointments.fResetQuery);\n"
2064: + " }\n"
2065: + "}\n"
2066: + "/************************PROPERTY ACCESS FUNCTIONS***********************/\n"
2067: + "function get_statusEl()\n"
2068: + "{\n"
2069: + " return(m_objStatus);\n"
2070: + "}\n"
2071: + "function put_statusEl(newVal)\n"
2072: + "{\n"
2073: + " if(typeof(newVal) == 'string')\n"
2074: + " {\n"
2075: + " m_objStatus = window.document.all[newVal];\n"
2076: + " return;\n"
2077: + " }\n"
2078: + " m_objStatus = newVal;\n"
2079: + "}\n"
2080: + "function put_PollInterval(newVal)\n"
2081: + "{\n"
2082: + " m_iPollInterval = Number(newVal);\n"
2083: + "}\n"
2084: + "function get_PollInterval()\n"
2085: + "{\n"
2086: + " return m_iPollInterval;\n"
2087: + "}\n"
2088: + "function put_readOnly(newVal)\n"
2089: + "{\n"
2090: + " if(\"true\" == String(newVal))\n"
2091: + " {\n"
2092: + " m_fReadOnly = true;\n"
2093: + " }\n"
2094: + " else\n"
2095: + " {\n"
2096: + " m_fReadOnly = false;\n"
2097: + " } \n"
2098: + "}\n"
2099: + "function get_readOnly()\n"
2100: + "{\n"
2101: + " return m_fReadOnly;\n"
2102: + "}\n"
2103: + "function put_Day(newVal)\n"
2104: + "{\n"
2105: + " m_objMainDate.setDate(Number(newVal));\n"
2106: + "}\n"
2107: + "function get_Day()\n"
2108: + "{\n"
2109: + " return m_objSelectedStart.getDate();\n"
2110: + "}\n"
2111: + "function put_Month(newVal)\n"
2112: + "{\n"
2113: + " m_objMainDate.setMonth(Number(newVal));\n"
2114: + "}\n"
2115: + "function get_Month()\n"
2116: + "{\n"
2117: + " return m_objSelectedStart.getMonth();\n"
2118: + "}\n"
2119: + "function put_Year(newVal)\n"
2120: + "{\n"
2121: + " m_objMainDate.setYear(Number(newVal)); \n"
2122: + "}\n"
2123: + "function get_Year()\n"
2124: + "{\n"
2125: + " return m_objSelectedStart.getFullYear();\n"
2126: + "}\n"
2127: + "function get_FullYear()\n"
2128: + "{\n"
2129: + " return m_objSelectedStart.getFullYear();\n"
2130: + "}\n"
2131: + "function put_FullYear(newVal)\n"
2132: + "{\n"
2133: + " m_objMainDate.setFullYear(Number(newVal)); \n"
2134: + "}\n"
2135: + "function put_caltext(newVal)\n"
2136: + "{\n"
2137: + "L_szUpdatingBold = newVal;\n"
2138: + "}\n"
2139: + "function get_caltext()\n"
2140: + "{\n"
2141: + "return(L_szUpdatingBold);\n"
2142: + "}\n"
2143: + "function put_viewtext(newVal)\n"
2144: + "{\n"
2145: + "L_szUpdating = newVal;\n"
2146: + "}\n"
2147: + "function get_viewtext()\n"
2148: + "{\n"
2149: + "return(L_szUpdating);\n"
2150: + "}\n"
2151: + "//Causes a refresh of all the data for the current view\n"
2152: + "function f_refresh()\n"
2153: + "{\n"
2154: + " mfGetAppointments(true,true,false);\n"
2155: + "}\n"
2156: + "</SCRIPT>\n" + "</HTML>\n";
2157:
2158: String lJSFuncRules = "<Function type=\"EXPRESSION\" name=\"*XMLhttp*.open\" paramPatterns=\",y,\"/>"
2159: + "<Function type=\"EXPRESSION\" name=\"*XSL.load\" paramPatterns=\"y\"/>";
2160:
2161: RuleSet lRuleSet = CreateRuleSet
2162: .withHTMLJSTokenJSVarJSFunRules("", "", lJSFuncRules);
2163: Rewriter lRewriter = RewriterPool.create(lRuleSet,
2164: LanguageConstants.HTML_MIME);
2165: String lResult = lRewriter.rewrite(lInput,
2166: getDefaultTranslator());
2167: assertEquals(lExpectation, lResult);
2168: }//testOutllokExchangeCalendarHTC()
2169:
2170: public void testOutllokExchangeCalendarHTC1() throws Exception {
2171: String lInput =
2172: //"<SCRIPT LANGUAGE=\"JavaScript\">\n" +
2173: "\n"
2174: + "var m_objXSL = new ActiveXObject(\"Microsoft.XMLDOM\");\n"
2175: + "var m_objOutPutXML = new ActiveXObject(\"Microsoft.XMLDOM\");\n"
2176: + "var m_objOutPutXMLBold = new ActiveXObject(\"Microsoft.XMLDOM\");\n"
2177: + "var m_iIntervalID = null;\n"
2178: + "var m_iPollInterval = 10;\n"
2179: + "var m_objXMLhttp = null;\n"
2180: + "var m_objXMLhttpBold = null;\n"
2181: + "var m_objXMLhttp_polling= new ActiveXObject(\"Microsoft.XMLhttp\");\n"
2182: + "var m_iSubscriptionID = null;\n"
2183: + "var m_fReadOnly = false;\n"
2184: + "\n"
2185: + "var m_objMainDate;\n"
2186: + "var m_objTodaysDate = new Date();\n"
2187: + " m_objTodaysDate.setHours(0,0,0,0);\n"
2188: + "\n"
2189: + "\n"
2190: + "var m_objSelectedStart;\n"
2191: + "var m_objSelectedEnd;\n"
2192: + "\n"
2193: + "var m_objMainTable = null;\n"
2194: + "var m_objSelectedDay = new Array();\n"
2195: + "var m_fHasLoaded = false;\n"
2196: + "var m_iFirstDayOfMonth = 0;\n"
2197: + "var m_iDaysInMonth = 0;\n"
2198: + "var m_iView = 0;\n"
2199: + "var m_szHighlightBG = \"highlight\";\n"
2200: + "var m_szHighlightText = \"highlighttext\";\n"
2201: + "var m_szNormalDateBG = \"window\";\n"
2202: + "var m_szNormalBG = \"window\";\n"
2203: + "var m_szNormalText = \"windowtext\";\n"
2204: + "var m_szInactiveBG = \"appworkspace\";\n"
2205: + "var m_objStatus;\n"
2206: + "var m_rgCalCells;\n"
2207: + "var m_rgMonthNamesShort;\n"
2208: + "var m_rgMonthNamesLong;\n"
2209: + "var m_szDateFormat;\n"
2210: + "var m_rgWeekdayLetters;\n"
2211: + "var m_fHaveData = false;\n"
2212: + "var m_iStartDay;\n"
2213: + "var m_oCalStartDate = new Date();\n"
2214: + "var m_oCalEndDate = new Date();\n"
2215: + "var L_szUpdating;\n"
2216: + "var L_szUpdatingBold;\n"
2217: + "\n"
2218: + "void function onDocumentReady()\n"
2219: + "{\n"
2220: + " var szXSLString =\n"
2221: + " '<xsl:template xmlns:xsl=\"uri:xsl\" xmlns:a=\"DAV:\"><root>' +\n"
2222: + " '<xsl:for-each select=\"a:multistatus/a:response\">' +\n"
2223: + " '<appointment><url><xsl:value-of select=\"a:href\" /></url>' +\n"
2224: + " '<xsl:for-each select=\"a:propstat[a:status != \\'HTTP/1.1 404 Resource Not Found\\']/a:prop\">' +\n"
2225: + " '<subject><xsl:value-of select=\"subject\" /></subject>' +\n"
2226: + " '<instancetype><xsl:value-of select=\"instancetype\" /></instancetype>' +\n"
2227: + " '<location><xsl:value-of select=\"location\" /></location>' +\n"
2228: + " '<dtstart><xsl:value-of select=\"dtstart\" /></dtstart>' +\n"
2229: + " '<dtend><xsl:value-of select=\"dtend\" /></dtend>' +\n"
2230: + " '<busystatus><xsl:value-of select=\"busystatus\" /></busystatus>' + \n"
2231: + " '<alldayevent><xsl:value-of select=\"alldayevent\" /></alldayevent>' +\n"
2232: + " '<pr_cdormid><xsl:value-of select=\"pr_cdormid\" /></pr_cdormid>' +\n"
2233: + " '<sensitivity><xsl:value-of select=\"sensitivity\" /></sensitivity>' +\n"
2234: + " '<apptstateflags><xsl:value-of select=\"apptstateflags\" /></apptstateflags>' +\n"
2235: + " '<uid><xsl:value-of select=\"uid\" /></uid>' +\n"
2236: + " '</xsl:for-each></appointment></xsl:for-each></root></xsl:template>';\n"
2237: + "\n"
2238: + " m_objXSL.loadXML(szXSLString);\n"
2239: + "\n"
2240: + " /**************Do initial calendar rendering******************/\n"
2241: + " m_iStartDay = (this.startDay == null)?0:Number(this.startDay);\n"
2242: + " with (this.__idExchMasterCalendarTableNode.children[0])\n"
2243: + " {\n"
2244: + " cells[0].children[0].src = this.prevMonthImage;\n"
2245: + " cells[2].children[0].src = this.nextMonthImage;\n"
2246: + " }\n"
2247: + " mfRenderCalendar();\n"
2248: + "\n"
2249: + " m_rgMonthNamesShort = (null == this.monthnamesShort || \"\" == this.monthnamesShort)?\n"
2250: + " \"Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec\".split(\";\"):\n"
2251: + " this.monthnamesShort.split(\";\");\n"
2252: + " m_rgMonthNamesLong = (null == this.monthnamesLong || \"\" == this.monthnamesLong)?\n"
2253: + " \"January;February;March;April;May;June;July;August;September;October;November;December\".split(\";\"):\n"
2254: + " this.monthnamesLong.split(\";\");\n"
2255: + " m_rgWeekdayLetters = (this.weekdayLetters)?this.weekdayLetters.split(\";\"):\"M;T;W;T;F;S;S\".split(\";\");\n"
2256: + " m_szDateFormat = (this.dateFormat)?this.dateFormat:\"[MMMM] [yyyy]\";\n"
2257: + " var iM=-1,iD=-1,iY=-1,szX;\n"
2258: + " m_objMainTable = this.children[0];\n"
2259: + " m_rgCalCells = m_objMainTable.cells[\"numbercell\"];\n"
2260: + " for(var i = 0; i < 7; i++) //day letters\n"
2261: + " {\n"
2262: + " with(m_rgCalCells[i])\n"
2263: + " {\n"
2264: + " innerText = m_rgWeekdayLetters[( (m_iStartDay+i)%m_rgWeekdayLetters.length )];\n"
2265: + " dayNameCell = \"1\";\n"
2266: + " style.backgroundColor = m_szNormalBG;\n"
2267: + " style.color = m_szNormalText;\n"
2268: + " style.borderBottom = \"solid 1px black\";\n"
2269: + " }\n"
2270: + " }\n"
2271: + " //parseInt treats leading '0' as octal numbers\n"
2272: + " //need to disect the whole number and use Number()\n"
2273: + " iM = parseURLfor(\"m\");\n"
2274: + " iM = (null==iM || \"\"==iM)?-1:Number(iM);\n"
2275: + " iD = parseURLfor(\"d\");\n"
2276: + " iD = (null==iD || \"\"==iD)?-1:Number(iD);\n"
2277: + " iY = parseURLfor(\"y\");\n"
2278: + " iY = (null==iY || \"\"==iY)?-1:Number(iY);\n"
2279: + "\n"
2280: + " if(-3 == iM+iY+iD)//no date info on the url\n"
2281: + " {\n"
2282: + " m_objMainDate = new Date(); //use todays date\n"
2283: + " }\n"
2284: + " else\n"
2285: + " {\n"
2286: + " //missing defaults to current month/year and 1st day of month\n"
2287: + " iM = (isNaN(iM) || iM == -1)?m_objTodaysDate.getMonth():iM-1;\n"
2288: + " iY = (isNaN(iY) || iY == -1)?m_objTodaysDate.getFullYear():iY;\n"
2289: + " iD = (isNaN(iD) || iD == -1)?1:iD;\n"
2290: + " \n"
2291: + " try\n"
2292: + " {\n"
2293: + " m_objMainDate = new Date(iY,iM,iD); \n"
2294: + " }\n"
2295: + " catch(e)\n"
2296: + " {\n"
2297: + " m_objMainDate = new Date(); \n"
2298: + " }\n"
2299: + " }\n"
2300: + " m_objSelectedStart = new Date(m_objMainDate);\n"
2301: + " m_objSelectedEnd = new Date(m_objMainDate);\n"
2302: + " //search url for view\n"
2303: + " var szView = parseURLfor(\"view\");\n"
2304: + " szView = (null == szView)?\"daily\":szView.toLowerCase();\n"
2305: + " m_iView=(szView==\"weekly\")?1:( (szView==\"monthly\")?2:0 );\n"
2306: + " if (1 == m_iView) //adjust selects weekly\n"
2307: + " {//need to find start of this week\n"
2308: + " i = m_objSelectedStart.getDay()-m_iStartDay;\n"
2309: + " i+=(0>=i)?7:0;\n"
2310: + " m_objSelectedStart.setDate(m_objSelectedStart.getDate()-i);\n"
2311: + " m_objSelectedEnd.setDate(m_objSelectedStart.getDate()+6);\n"
2312: + " }\n"
2313: + " else if (2==m_iView) //monthly\n"
2314: + " {\n"
2315: + " m_objSelectedStart.setDate(1);\n"
2316: + " i = m_objSelectedStart.getDay()-m_iStartDay;\n"
2317: + " i+=(0>=i)?7:0;\n"
2318: + " m_objSelectedStart.setDate(m_objSelectedStart.getDate()-i);\n"
2319: + " \n"
2320: + " m_objSelectedEnd.setTime( m_objSelectedStart.getTime()+(41*86400000) );\n"
2321: + " }\n"
2322: + " m_objSelectedStart.setHours(0,0,0,0);\n"
2323: + " m_objSelectedEnd.setHours(24,0,0,0);\n"
2324: + "\n"
2325: + " mfUpdateCalendar(true,true);\n"
2326: + "}\n"
2327: + "void function fire_OnDateChange(objXML)\n"
2328: + "{\n"
2329: + " if(m_fHaveData)\n"
2330: + " {\n"
2331: + " var objEvent = createEventObject();\n"
2332: + " objEvent.xml = objXML;\n"
2333: + " objEvent.view = m_iView;\n"
2334: + " objEvent.date = (2==m_iView)?m_objMainDate:m_objSelectedStart;\n"
2335: + " id_OnDateChange.fire(objEvent);\n"
2336: + " }\n"
2337: + "}\n"
2338: + "\n"
2339: + "void function onStop() \n"
2340: + "{\n"
2341: + " if(m_iIntervalID)\n"
2342: + " {\n"
2343: + " window.clearInterval(m_iIntervalID);\n"
2344: + " }\n"
2345: + "}\n"
2346: + "void function onClick()\n"
2347: + "{\n"
2348: + " event.cancelBubble=true;\n"
2349: + " if(!m_fReadOnly)\n"
2350: + " {\n"
2351: + " if(null != event.srcElement.dayCell)\n"
2352: + " { \n"
2353: + " mfSetDailyView(event.srcElement);\n"
2354: + " return;\n"
2355: + " }\n"
2356: + " else if(null != event.srcElement.leftNavButton)\n"
2357: + " {\n"
2358: + " m_objMainDate.setMonth(m_objMainDate.getMonth()-1);\n"
2359: + " mfUpdateCalendar(false,true);\n"
2360: + " return;\n"
2361: + " }\n"
2362: + " else if(null != event.srcElement.rightNavButton)\n"
2363: + " {\n"
2364: + " m_objMainDate.setMonth(m_objMainDate.getMonth()+1);\n"
2365: + " mfUpdateCalendar(false,true);\n"
2366: + " return;\n"
2367: + " }\n"
2368: + " else if(null != event.srcElement.monthDisplayName)\n"
2369: + " {\n"
2370: + " mfSetMonthlyView();\n"
2371: + " }\n"
2372: + " else if(null != event.srcElement.weekselect)\n"
2373: + " {\n"
2374: + " mfSetWeeklyView(m_objMainTable.rows[event.srcElement.parentElement.rowIndex].cells[1]);\n"
2375: + " }\n"
2376: + " }\n"
2377: + "}\n"
2378: + "\n"
2379: + "void function mfSetDailyView(eCell)\n"
2380: + "{\n"
2381: + " m_iView=0;\n"
2382: + " m_objSelectedStart.setFullYear(eCell.year,eCell.month,parseInt(eCell.innerText));\n"
2383: + " m_objSelectedEnd.setTime(m_objSelectedStart);\n"
2384: + " mfFindAndSelectDate();\n"
2385: + " mfGetAppointments(true,false,true);\n"
2386: + "}\n"
2387: + "void function mfSetWeeklyView(eCell)\n"
2388: + "{\n"
2389: + " m_iView=1;\n"
2390: + " m_objSelectedStart.setFullYear(eCell.year,eCell.month,eCell.innerText);\n"
2391: + " m_objSelectedEnd.setFullYear(eCell.year,eCell.month,Number(eCell.innerText)+6);\n"
2392: + " mfFindAndSelectDate();\n"
2393: + " mfGetAppointments(true,false,true);\n"
2394: + "}\n"
2395: + "void function mfSetMonthlyView()\n"
2396: + "{\n"
2397: + " m_iView=2;\n"
2398: + " m_objSelectedStart.setTime(m_oCalStartDate);\n"
2399: + " m_objSelectedEnd.setTime(m_oCalEndDate);\n"
2400: + " mfFindAndSelectDate();\n"
2401: + " mfGetAppointments(true,false,true);\n"
2402: + "}\n"
2403: + "void function f_setView(iView)\n"
2404: + "{\n"
2405: + " //use the currently selected cell to determine view\n"
2406: + " if(m_iView == iView)\n"
2407: + " {\n"
2408: + " return;\n"
2409: + " }\n"
2410: + " m_iView = iView;\n"
2411: + " switch(iView)\n"
2412: + " {\n"
2413: + " case 1:\n"
2414: + " //use the last selected day or today\n"
2415: + " var x=(-1<mfFindAndSelectDate.iHoldLastDaily)?mfFindAndSelectDate.iHoldLastDaily:mfFindAndSelectDate.iStartIdx;\n"
2416: + " mfSetWeeklyView(m_objMainTable.rows[m_rgCalCells[x].parentElement.rowIndex].cells[1]);\n"
2417: + " break;\n"
2418: + " case 2:\n"
2419: + " mfSetMonthlyView();\n"
2420: + " break;\n"
2421: + " case 0:\n"
2422: + " default:\n"
2423: + " var x=(-1<mfFindAndSelectDate.iHoldLastDaily)?mfFindAndSelectDate.iHoldLastDaily:mfFindAndSelectDate.iStartIdx;\n"
2424: + " mfSetDailyView(m_rgCalCells[x]);\n"
2425: + " }\n"
2426: + "}\n"
2427: + "//unselects current selection\n"
2428: + "//searches calendar for matching date cell given in m_objSelectedStart\n"
2429: + "mfFindAndSelectDate.iStartIdx=-1;\n"
2430: + "mfFindAndSelectDate.iEndIdx=-1;\n"
2431: + "mfFindAndSelectDate.iHoldLastDaily=-1;\n"
2432: + "void function mfFindAndSelectDate()\n"
2433: + "{\n"
2434: + " var x,y;\n"
2435: + " \n"
2436: + " if (mfFindAndSelectDate.iStartIdx>-1)\n"
2437: + " { //remove any prev selection\n"
2438: + " for(x=mfFindAndSelectDate.iStartIdx;x<=mfFindAndSelectDate.iEndIdx;x++)\n"
2439: + " {\n"
2440: + " m_rgCalCells[x].style.backgroundColor=m_rgCalCells[x].dayCell;\n"
2441: + " m_rgCalCells[x].style.color=m_szNormalText;\n"
2442: + " }\n"
2443: + " mfFindAndSelectDate.iStartIdx=-1;\n"
2444: + " }\n"
2445: + " if (m_objSelectedStart>m_oCalEndDate || m_objSelectedEnd<m_oCalStartDate)\n"
2446: + " {\n"
2447: + " return;\n"
2448: + " }\n"
2449: + " x=7;\n"
2450: + " if(2==m_iView) //monthly\n"
2451: + " {\n"
2452: + " if(m_objSelectedStart.getTime() == m_oCalStartDate.getTime()) //whole month showing\n"
2453: + " {\n"
2454: + " y=m_rgCalCells.length-1;\n"
2455: + " }\n"
2456: + " else if(m_objSelectedStart<m_oCalStartDate&&m_objSelectedEnd>m_oCalStartDate) //do 1st grey area\n"
2457: + " {\n"
2458: + " mfFindAndSelectDate.iStartIdx=7;\n"
2459: + " for(x=7;\"1\"!=m_rgCalCells[x].innerText;x++)\n"
2460: + " {\n"
2461: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
2462: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
2463: + " }\n"
2464: + " mfFindAndSelectDate.iEndIdx=x;\n"
2465: + " return;\n"
2466: + " }\n"
2467: + " else if(m_objSelectedStart<m_oCalEndDate&&m_objSelectedEnd>m_oCalEndDate)//last gray area\n"
2468: + " {\n"
2469: + " x=m_rgCalCells.length-1;\n"
2470: + " mfFindAndSelectDate.iEndIdx=x;\n"
2471: + " for(;\"1\"!=m_rgCalCells[x].innerText;x--)\n"
2472: + " {\n"
2473: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
2474: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
2475: + " }\n"
2476: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
2477: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
2478: + " mfFindAndSelectDate.iStartIdx=x-1;\n"
2479: + " return;\n"
2480: + " }\n"
2481: + " else\n"
2482: + " {\n"
2483: + " return;\n"
2484: + " }\n"
2485: + " }\n"
2486: + " else if (m_objSelectedStart>=m_oCalStartDate && m_objSelectedStart<=m_oCalEndDate)\n"
2487: + " {\n"
2488: + " x=Math.round((m_objSelectedStart-m_oCalStartDate)/86400000)+7;\n"
2489: + " }\n"
2490: + " y=x;\n"
2491: + " if (0 != m_iView)\n"
2492: + " {\n"
2493: + " y=(2==m_iView)?m_rgCalCells.length-1:x+6;\n"
2494: + " if (2==m_iView && m_objSelectedEnd<m_oCalEndDate)\n"
2495: + " {\n"
2496: + " y=Math.round((m_objSelectedEnd-m_oCalStartDate)/86400000)+7;\n"
2497: + " }\n"
2498: + " }\n"
2499: + " mfFindAndSelectDate.iStartIdx=(x<49)?x:-1;\n"
2500: + " mfFindAndSelectDate.iEndIdx=(y<49)?y:-1;;\n"
2501: + " for (;(x<=y && x<49);x++)\n"
2502: + " {\n"
2503: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
2504: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
2505: + " }\n"
2506: + " if (m_iView==0)\n"
2507: + " {\n"
2508: + " mfFindAndSelectDate.iHoldLastDaily=mfFindAndSelectDate.iStartIdx;\n"
2509: + " }\n"
2510: + "}\n"
2511: + "\n"
2512: + "//PARAM: iMonth - jan=0\n"
2513: + "function mfGetDaysInMonth(iMonth, iYear)\n"
2514: + "{\n"
2515: + " iMonth+=(iMonth==-1)?13:1; //remove 0 offset (1=jan)\n"
2516: + " return( (2 == iMonth) ? (28+mfIsLeapYear(iYear)):(30+((iMonth+(iMonth>7))%2)));\n"
2517: + "}\n"
2518: + "function mfIsLeapYear(yr)\n"
2519: + "{\n"
2520: + " return((yr % 4 == 0) && (yr % 100 != 0) || (yr % 400 == 0))?1:0;\n"
2521: + "}\n"
2522: + "\n"
2523: + "mfWriteCellNumbers.todayCellIdx=-1;\n"
2524: + "void function mfWriteCellNumbers()\n"
2525: + "{\n"
2526: + " m_objMainDate.setDate(1);\n"
2527: + "\n"
2528: + " var iM = m_objMainDate.getMonth();\n"
2529: + " var iY = m_objMainDate.getFullYear();\n"
2530: + " var iY2 = iY%100;\n"
2531: + "\n"
2532: + " var szCaptionText = this.m_szDateFormat.replace(/\\[MMMM\\]/g, m_rgMonthNamesLong[iM]);\n"
2533: + " \n"
2534: + " szCaptionText = szCaptionText.replace(/\\[MMM\\]/g, m_rgMonthNamesShort[iM]);\n"
2535: + " szCaptionText = szCaptionText.replace(/\\[MM\\]/g, ++iM<10 ? \"0\"+iM : iM );\n"
2536: + " szCaptionText = szCaptionText.replace(/\\[M\\]/g, iM);\n"
2537: + " szCaptionText = szCaptionText.replace(/\\[yyy+\\]/g, iY);\n"
2538: + " szCaptionText = szCaptionText.replace(/\\[y+\\]/g, iY2>9?iY2:\"0\"+iY2);\n"
2539: + "\n"
2540: + " m_objMainTable.rows[0].cells[1].innerText= szCaptionText;\n"
2541: + "\n"
2542: + " m_oCalStartDate.setTime(m_objMainDate);\n"
2543: + " m_oCalEndDate.setTime(m_objMainDate);\n"
2544: + "\n"
2545: + " var x=m_objMainDate.getDay()-m_iStartDay;\n"
2546: + " x+=(0>=x)?7:0; //show entire previous week\n"
2547: + " m_oCalStartDate.setDate(1-x); //this is now the first date on the calendar\n"
2548: + " m_oCalStartDate.setHours(0,0,0,0);\n"
2549: + " m_oCalEndDate.setDate((1-x)+41);\n"
2550: + " m_oCalEndDate.setHours(24,0,0,0);\n"
2551: + "\n"
2552: + " var iD = m_oCalStartDate.getDate();\n"
2553: + " var iM = m_oCalStartDate.getMonth();\n"
2554: + " var iY = m_oCalStartDate.getFullYear();\n"
2555: + " var iDm = mfGetDaysInMonth(iM,iY);\n"
2556: + " var bg = (x==0)?m_szNormalDateBG:m_szInactiveBG;\n"
2557: + " var y=7+iDm;\n"
2558: + " for(x=7;iD<=iDm;x++)\n"
2559: + " {\n"
2560: + " m_rgCalCells[x].month=iM;\n"
2561: + " m_rgCalCells[x].year =iY;\n"
2562: + " m_rgCalCells[x].dayCell = bg;\n"
2563: + " with(m_rgCalCells[x])\n"
2564: + " {\n"
2565: + " innerText = iD++;\n"
2566: + " style.backgroundColor = bg;\n"
2567: + " style.color = m_szNormalText;\n"
2568: + " style.fontWeight = \"normal\";\n"
2569: + " }\n"
2570: + " }\n"
2571: + " var iLastCell = m_rgCalCells.length;\n"
2572: + " while(x<iLastCell)\n"
2573: + " {\n"
2574: + " iD=1;\n"
2575: + " iM=(11==iM)?0:iM+1;\n"
2576: + " if (0==iM ) iY++;\n"
2577: + " var iDm = mfGetDaysInMonth(iM,iY);\n"
2578: + " bg=(bg==m_szInactiveBG)?m_szNormalDateBG:m_szInactiveBG;\n"
2579: + " if ((iDm+x) > iLastCell) iDm=iLastCell-x; //dont past last cell\n"
2580: + " for(;iD<=iDm;x++)\n"
2581: + " {\n"
2582: + " //if (x>=iLastCell) break;\n"
2583: + " m_rgCalCells[x].month=iM;\n"
2584: + " m_rgCalCells[x].year =iY;\n"
2585: + " m_rgCalCells[x].dayCell = bg;\n"
2586: + " with(m_rgCalCells[x])\n"
2587: + " {\n"
2588: + " innerText = iD++;\n"
2589: + " style.backgroundColor = bg;\n"
2590: + " style.color = m_szNormalText;\n"
2591: + " style.fontWeight = \"normal\";\n"
2592: + " }\n"
2593: + " }\n"
2594: + " }\n"
2595: + " if (-1!=mfWriteCellNumbers.todayCellIdx)\n"
2596: + " {\n"
2597: + " m_rgCalCells[mfWriteCellNumbers.todayCellIdx].style.border = \"none\";\n"
2598: + " mfWriteCellNumbers.todayCellIdx=-1;\n"
2599: + " }\n"
2600: + " //is todays date on this calendar (needs red border)\n"
2601: + " if(m_objTodaysDate > m_oCalStartDate && m_objTodaysDate < m_oCalEndDate)\n"
2602: + " { \n"
2603: + " //add one hour 3600000 (for daylight spring losing an hour) and floor (DST fall works with floor)\n"
2604: + " x = Math.floor((m_objTodaysDate - m_oCalStartDate + 3600000)/86400000)\n"
2605: + " m_rgCalCells[x+7].style.border = \"solid 1 red\";\n"
2606: + " mfWriteCellNumbers.todayCellIdx=x+7;\n"
2607: + " }\n"
2608: + " //prev selection has been wiped!\n"
2609: + " mfFindAndSelectDate.iStartIdx=-1;\n"
2610: + "}\n"
2611: + "\n"
2612: + "void function mfUpdateCalendar(fRenderView,fUpdateBolding)\n"
2613: + "{\n"
2614: + " mfWriteCellNumbers();\n"
2615: + " mfFindAndSelectDate();\n"
2616: + " if (!fUpdateBolding)\n"
2617: + " {\n"
2618: + " mfGetAppointments(fRenderView,false,true);\n"
2619: + " }\n"
2620: + " else\n"
2621: + " {\n"
2622: + " if (fRenderView) //refresh data then bold\n"
2623: + " {\n"
2624: + " mfGetAppointments(fRenderView,true,true);\n"
2625: + " }\n"
2626: + " else\n"
2627: + " {\n"
2628: + " mfGetBoldData(true);\n"
2629: + " } \n"
2630: + " } \n"
2631: + "}\n"
2632: + "\n"
2633: + "void function mfRenderCalendar()\n"
2634: + "{\n"
2635: + " var masterTableNode = this.__idExchMasterCalendarTableNode.children[0];\n"
2636: + " var masterRowNode = this.__idExchMasterCalendarRowNode.children[0];\n"
2637: + " var newNode=null;\n"
2638: + " for(var i=0;i<7;i++)\n"
2639: + " {\n"
2640: + " newNode=masterRowNode.cloneNode(true);\n"
2641: + " if(0==i)\n"
2642: + " {\n"
2643: + " newNode.cells[0].weekselect=null;\n"
2644: + " newNode.cells[0].monthDisplayName=\"1\";\n"
2645: + " }\n"
2646: + " masterTableNode.insertAdjacentElement(\"BeforeEnd\",newNode.children[0]);\n"
2647: + " }\n"
2648: + " this.insertAdjacentElement(\"BeforeEnd\",masterTableNode);\n"
2649: + " m_objMainTable=masterTableNode;\n"
2650: + "}\n"
2651: + "mfGetBoldData.szQuery=\"\";\n"
2652: + "void function mfGetBoldData(fResetQuery)\n"
2653: + "{\n"
2654: + " if(null != m_objStatus )\n"
2655: + " {\n"
2656: + " m_objStatus.style.display=\"\";\n"
2657: + " m_objStatus.innerText = L_szUpdatingBold;\n"
2658: + " }\n"
2659: + " m_fHaveData = true;//allow event firings\n"
2660: + " if (\"\"==mfGetBoldData.szQuery) fResetQuery=true;\n"
2661: + " if (fResetQuery)\n"
2662: + " {\n"
2663: + " var iX = 7;\n"
2664: + " iX = m_rgCalCells.length - 1;\n"
2665: + " var szDateStart=mfGetSearchDateUTC(m_oCalStartDate);\n"
2666: + " var szDateEnd=mfGetSearchDateUTC(m_oCalEndDate);\n"
2667: + " mfGetBoldData.szQuery ='<a:searchrequest xmlns:a=\"DAV:\" > ' +\n"
2668: + " '<a:sql>Select ' +\n"
2669: + " '\"urn:schemas:calendar:dtstart\" AS dtstart, ' +\n"
2670: + " '\"urn:schemas:calendar:dtend\" AS dtend, ' +\n"
2671: + " '\"urn:schemas:calendar:alldayevent\" AS alldayevent ' +\n"
2672: + " 'FROM Scope(\\'SHALLOW TRAVERSAL OF \"\"\\') ' +\n"
2673: + " 'WHERE NOT \"urn:schemas:calendar:instancetype\" = 1 ' +\n"
2674: + " 'AND NOT \"urn:schemas:calendar:busystatus\" = \\'FREE\\' ' +\n"
2675: + " 'AND \"urn:schemas:calendar:dtend\" > \\''+szDateStart+'\\' ' +\n"
2676: + " 'AND \"urn:schemas:calendar:dtstart\" < \\''+szDateEnd+'\\' ' +\n"
2677: + " 'ORDER BY \"urn:schemas:calendar:dtstart\" ASC ' +\n"
2678: + " '</></>';\n"
2679: + "\n"
2680: + " }\n"
2681: + " m_objXMLhttpBold = new ActiveXObject(\"Microsoft.XMLhttp\");\n"
2682: + " try\n"
2683: + " {\n"
2684: + " m_objXMLhttpBold.open(\"SEARCH\", folderURL, true);\n"
2685: + " m_objXMLhttpBold.setRequestHeader(\"Content-Type\", \"text/xml\");\n"
2686: + " m_objXMLhttpBold.onreadystatechange = onRSC_getBoldData;\n"
2687: + " m_objXMLhttpBold.send(mfGetBoldData.szQuery);\n"
2688: + " }\n"
2689: + " catch(e)\n"
2690: + " {\n"
2691: + " alert(\"Error in ExchangeCalendar.HTC mfGetBoldData() with searchrequest: \"+e.description);\n"
2692: + " }\n"
2693: + "}\n"
2694: + "\n"
2695: + "\n"
2696: + "//holds calendar date range including greyed next/prev months\n"
2697: + "mfGetAppointments.m_dTemp = new Date();\n"
2698: + "mfGetAppointments.szQuery=\"\";\n"
2699: + "void function mfGetAppointments(fRenderVeiw,fUpdateBolding,fResetQuery)\n"
2700: + "{\n"
2701: + " if (true == fUpdateBolding) \n"
2702: + " {\n"
2703: + " onRSC_getAppointments.fUpdateBolding = true; //we will bold after getting the appt data\n"
2704: + " } \n"
2705: + " if(null != m_objStatus )\n"
2706: + " {\n"
2707: + " m_objStatus.style.display=\"\";\n"
2708: + " m_objStatus.innerText = L_szUpdating;\n"
2709: + " }\n"
2710: + "\n"
2711: + " onRSC_getAppointments.fResetQuery=fResetQuery;\n"
2712: + " m_fHaveData = false; //stop event firings\n"
2713: + "\n"
2714: + " //Use last stored query in case where polling fires but user has calendar in another month than the view\n"
2715: + " //Happens most when going out past the expansion which fires another expansion with triggers polling changes\n"
2716: + " if (\"\"==mfGetAppointments.szQuery) fResetQuery=true;\n"
2717: + " if (fResetQuery)\n"
2718: + " {\n"
2719: + " var iX = 7;\n"
2720: + " iX = m_rgCalCells.length - 1;\n"
2721: + " if (2==m_iView) //monthly gets full 6 weeks\n"
2722: + " {\n"
2723: + " //this shifts an extra day for the montly view calendar in sunday start\n"
2724: + " //while view shows monday start (same problem with weekly view)\n"
2725: + " if (0==m_iStartDay)\n"
2726: + " {\n"
2727: + " m_oCalStartDate.setHours(24,0,0,0);\n"
2728: + " m_oCalEndDate.setHours(24,0,0,0);\n"
2729: + " var szDateStart = mfGetSearchDateUTC(m_oCalStartDate);\n"
2730: + " var szDateEnd = mfGetSearchDateUTC(m_oCalEndDate);\n"
2731: + " m_oCalStartDate.setHours(-24,0,0,0);\n"
2732: + " m_oCalEndDate.setHours(-24,0,0,0);\n"
2733: + " }\n"
2734: + " else\n"
2735: + " {\n"
2736: + " var szDateStart = mfGetSearchDateUTC(m_oCalStartDate);\n"
2737: + " var szDateEnd = mfGetSearchDateUTC(m_oCalEndDate);\n"
2738: + " }\n"
2739: + " }\n"
2740: + " else if (1==m_iView)//weekly\n"
2741: + " {\n"
2742: + " //this shifts an extra day for the weekly view calendar in sunday start \n"
2743: + " //while view shows monday start (same problem with monthly view)\n"
2744: + " if (0==m_iStartDay)\n"
2745: + " {\n"
2746: + " m_objSelectedStart.setHours(24,0,0,0);\n"
2747: + " var szDateStart = mfGetSearchDateUTC(m_objSelectedStart);\n"
2748: + " m_objSelectedStart.setHours(168,0,0,0);\n"
2749: + " var szDateEnd = mfGetSearchDateUTC(m_objSelectedStart);\n"
2750: + " m_objSelectedStart.setHours(-192,0,0,0);\n"
2751: + " }\n"
2752: + " else\n"
2753: + " {\n"
2754: + " var szDateStart = mfGetSearchDateUTC(m_objSelectedStart);\n"
2755: + " m_objSelectedStart.setHours(168,0,0,0);\n"
2756: + " var szDateEnd = mfGetSearchDateUTC(m_objSelectedStart);\n"
2757: + " m_objSelectedStart.setHours(-168,0,0,0);\n"
2758: + " }\n"
2759: + " } \n"
2760: + " else //daily view (default)\n"
2761: + " {\n"
2762: + " var szDateStart = mfGetSearchDateUTC(m_objSelectedStart);\n"
2763: + " m_objSelectedStart.setHours(24,0,0,0);\n"
2764: + " var szDateEnd = mfGetSearchDateUTC(m_objSelectedStart);\n"
2765: + " m_objSelectedStart.setHours(-24,0,0,0);\n"
2766: + " }\n"
2767: + "\n"
2768: + " mfGetAppointments.szQuery='<a:searchrequest xmlns:a=\"DAV:\" > ' +\n"
2769: + " '<a:sql>Select ' +\n"
2770: + " '\"urn:schemas:calendar:location\" AS location, ' +\n"
2771: + " '\"urn:schemas:httpmail:subject\" AS subject, '+\n"
2772: + " '\"urn:schemas:calendar:dtstart\" AS dtstart, ' +\n"
2773: + " '\"urn:schemas:calendar:dtend\" AS dtend, ' +\n"
2774: + " '\"urn:schemas:calendar:busystatus\" AS busystatus, ' +\n"
2775: + " '\"urn:schemas:calendar:instancetype\" AS instancetype, ' +\n"
2776: + " '\"urn:schemas:calendar:alldayevent\" AS alldayevent, ' +\n"
2777: + " '\"http://schemas.microsoft.com/mapi/proptag/x10c70003\" AS pr_cdormid, ' +\n"
2778: + " '\"http://schemas.microsoft.com/exchange/sensitivity-long\" AS sensitivity, '+\n"
2779: + " '\"http://schemas.microsoft.com/mapi/apptstateflags\" AS apptstateflags, '+\n"
2780: + " '\"urn:schemas:calendar:uid\" AS uid ' +\n"
2781: + " 'FROM Scope(\\'SHALLOW TRAVERSAL OF \"\"\\') ' +\n"
2782: + " 'WHERE NOT \"urn:schemas:calendar:instancetype\" = 1 ' +\n"
2783: + " 'AND \"urn:schemas:calendar:dtend\" > \\''+szDateStart+'\\' ' +\n"
2784: + " 'AND \"urn:schemas:calendar:dtstart\" < \\''+szDateEnd+'\\' ' +\n"
2785: + " 'ORDER BY \"urn:schemas:calendar:dtstart\" ASC ' +\n"
2786: + " '</></>';\n"
2787: + " \n"
2788: + " }\n"
2789: + " \n"
2790: + " m_objXMLhttp = new ActiveXObject(\"Microsoft.XMLhttp\");\n"
2791: + " onRSC_getAppointments.fRenderView=fRenderVeiw;\n"
2792: + " try\n"
2793: + " {\n"
2794: + " m_objXMLhttp.open(\"SEARCH\",folderURL, true);\n"
2795: + " m_objXMLhttp.setRequestHeader(\"Content-Type\",\"text/xml\");\n"
2796: + " m_objXMLhttp.onreadystatechange = onRSC_getAppointments;\n"
2797: + " m_objXMLhttp.send(mfGetAppointments.szQuery);\n"
2798: + " }\n"
2799: + " catch(e)\n"
2800: + " {\n"
2801: + " alert(\"Error in ExchangeCalendar.HTC mfGetAppointments() with searchrequest: \"+e.description);\n"
2802: + " onRSC_getAppointments.fRenderView = true;\n"
2803: + " }\n"
2804: + "}\n"
2805: + "\n"
2806: + "//returns UTC date in \"yyyy/mm/dd hh:mm:ss\" format for DAV searchrequests\n"
2807: + "void function mfGetSearchDateUTC(objDate)\n"
2808: + "{\n"
2809: + " var szYear = objDate.getUTCFullYear();\n"
2810: + " var szMonth = objDate.getUTCMonth()+1;\n"
2811: + " var szDate = objDate.getUTCDate();\n"
2812: + " var szHrs = objDate.getUTCHours();\n"
2813: + " var szMin = objDate.getUTCMinutes();\n"
2814: + " return ( szYear+\"/\"+\n"
2815: + " ((szMonth<10)?(\"0\"+szMonth):szMonth) + \"/\" +\n"
2816: + " ((szDate<10) ?(\"0\"+szDate) :szDate) + \" \" +\n"
2817: + " ((szHrs<10) ?(\"0\"+szHrs) :szHrs) + \":\" +\n"
2818: + " ((szMin<10) ?(\"0\"+szMin) :szMin) + \":00\" );\n"
2819: + "}\n"
2820: + "\n"
2821: + "void function mfBoldDates(rgApptStartTimes,rgApptEndTimes,rgIsAllDayEvent)\n"
2822: + "{\n"
2823: + " var x;\n"
2824: + " var rgNodes=null;\n"
2825: + " for(x=7; x < m_rgCalCells.length; x++)\n"
2826: + " {\n"
2827: + " rgNodes=mfGetNodes(m_rgCalCells[x].year,m_rgCalCells[x].month,Number(m_rgCalCells[x].innerText));\n"
2828: + " m_rgCalCells[x].style.fontWeight = rgNodes.length ? \"bold\" : \"normal\";\n"
2829: + " }\n"
2830: + "}\n"
2831: + "function mfGetNodes(iY,iM,iD)\n"
2832: + "{\n"
2833: + " if(null == m_objOutPutXMLBold)\n"
2834: + " {\n"
2835: + " return;\n"
2836: + " }\n"
2837: + " var dtstartUTC = mfGetUTFIsoDate(iY, iM, iD, 0, 0);\n"
2838: + " var dtendUTC = mfGetUTFIsoDate(iY, iM, iD+1,0, 0);\n"
2839: + " var szStartTimeQuery= \"(dtstart$ge$'\" + dtstartUTC + \"'&&dtstart$lt$'\" + dtendUTC + \"')\";\n"
2840: + " var szEndTimeQuery = \"(dtend$gt$'\" + dtstartUTC + \"'&&dtend$le$'\"+ dtendUTC+ \"')\";\n"
2841: + " var szOutSideQuery = \"(dtstart$lt$'\" + dtstartUTC + \"'&&dtend$gt$'\"+ dtendUTC + \"')\";\n"
2842: + " var szQuery = \"root/appointment[\" + szStartTimeQuery + \"||\" + szEndTimeQuery + \"||\" + szOutSideQuery + \"]\";\n"
2843: + " return(m_objOutPutXMLBold.selectNodes(szQuery));\n"
2844: + "}\n"
2845: + "\n"
2846: + "mfGetUTFIsoDate.objD= new Date();\n"
2847: + "function mfGetUTFIsoDate(iYr,iMon,iDate,iHr,iMin)\n"
2848: + "{\n"
2849: + " mfGetUTFIsoDate.objD.setFullYear(iYr,iMon,iDate);\n"
2850: + " mfGetUTFIsoDate.objD.setHours(iHr,iMin,0);\n"
2851: + " var iYear = mfGetUTFIsoDate.objD.getUTCFullYear();\n"
2852: + " var szMonth = mfGetUTFIsoDate.objD.getUTCMonth()+1;//0 offset adjustment\n"
2853: + " var szDate = mfGetUTFIsoDate.objD.getUTCDate();\n"
2854: + " var szHours = mfGetUTFIsoDate.objD.getUTCHours();\n"
2855: + " var szMinutes = mfGetUTFIsoDate.objD.getUTCMinutes();\n"
2856: + " if (szMonth< 10)\n"
2857: + " {\n"
2858: + " szMonth = \"0\"+szMonth;\n"
2859: + " } \n"
2860: + " if (szDate < 10)\n"
2861: + " {\n"
2862: + " szDate = \"0\"+szDate;\n"
2863: + " } \n"
2864: + " if (szHours < 10)\n"
2865: + " {\n"
2866: + " szHours = \"0\"+szHours;\n"
2867: + " } \n"
2868: + " if (szMinutes < 10)\n"
2869: + " {\n"
2870: + " szMinutes = \"0\"+szMinutes;\n"
2871: + " }\n"
2872: + " return(String(iYear+\"-\"+szMonth+\"-\"+szDate+\"T\"+szHours+\":\"+szMinutes+\":00.000Z\"));\n"
2873: + "}\n"
2874: + "\n"
2875: + "//szDtTime = ISO formatted UTC time string = \"1999-02-18T02:00:00.000Z\"\n"
2876: + "//returns = UTC time in milliseconds\n"
2877: + "function mfGetIsoDateMs(szIsoDate)\n"
2878: + "{\n"
2879: + " var re=mfGetRegExpIsoDates();\n"
2880: + " re.lastIndex=0;\n"
2881: + " var arr = re.exec( szIsoDate );\n"
2882: + " return ( (null == arr) ? null : Date.UTC( Number( arr[1]), Number(arr[2])-1, Number(arr[3]), Number(arr[4]), Number(arr[5]), 0, 0 ) );\n"
2883: + "}\n"
2884: + "\n"
2885: + "mfGetRegExpIsoDates.re;\n"
2886: + "function mfGetRegExpIsoDates()\n"
2887: + "{\n"
2888: + " if (null == mfGetRegExpIsoDates.re)\n"
2889: + " { \n"
2890: + " mfGetRegExpIsoDates.re = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):\\d{2}\\.\\d{3}Z?$/;\n"
2891: + " }\n"
2892: + " return(mfGetRegExpIsoDates.re);\n"
2893: + "}\n"
2894: + "\n"
2895: + "void function onAbort()\n"
2896: + "{\n"
2897: + " return;\n"
2898: + "}\n"
2899: + "void function onRSC_getBoldData()\n"
2900: + "{\n"
2901: + " if(4 != m_objXMLhttpBold.readyState)\n"
2902: + " {\n"
2903: + " return;\n"
2904: + " }\n"
2905: + " m_objXMLhttpBold.onreadystatechange = onAbort;\n"
2906: + " var objXML = m_objXMLhttpBold.responseXML;\n"
2907: + " objXML.transformNodeToObject(m_objXSL.documentElement, m_objOutPutXMLBold);\n"
2908: + " var objApptNodes = m_objOutPutXMLBold.selectNodes('root/appointment/dtstart');\n"
2909: + " var objApptNodes1 = m_objOutPutXMLBold.selectNodes('root/appointment/dtend');\n"
2910: + " var objApptNodes2 = m_objOutPutXMLBold.selectNodes('root/appointment/alldayevent');\n"
2911: + "\n"
2912: + " mfBoldDates(objApptNodes,objApptNodes1,objApptNodes2);\n"
2913: + " if(null != m_objStatus )\n"
2914: + " {\n"
2915: + " m_objStatus.style.display=\"none\";\n"
2916: + " m_objStatus.innerText = \"\";\n"
2917: + " }\n"
2918: + "}\n"
2919: + "\n"
2920: + "onRSC_getAppointments.fRenderView = true;\n"
2921: + "onRSC_getAppointments.fUpdateBolding = false;\n"
2922: + "onRSC_getAppointments.fResetQuery=true;\n"
2923: + "void function onRSC_getAppointments()\n"
2924: + "{\n"
2925: + " if(4 != m_objXMLhttp.readyState)\n"
2926: + " {\n"
2927: + " return;\n"
2928: + " }\n"
2929: + " m_objXMLhttp.onreadystatechange = onAbort;\n"
2930: + " var objXML = m_objXMLhttp.responseXML;\n"
2931: + " objXML.transformNodeToObject(m_objXSL.documentElement, m_objOutPutXML);\n"
2932: + " //only fire (refresh the veiwer) if the calendar is on that month\n"
2933: + " m_fHaveData = true;\n"
2934: + " if(m_objMainDate >= m_oCalStartDate && m_objMainDate <= m_oCalEndDate)\n"
2935: + " {\n"
2936: + " if(true == onRSC_getAppointments.fRenderView)\n"
2937: + " {\n"
2938: + " fire_OnDateChange(m_objOutPutXML);\n"
2939: + " }\n"
2940: + " }\n"
2941: + " onRSC_getAppointments.fRenderView=true;\n"
2942: + " if(null != m_objStatus )\n"
2943: + " {\n"
2944: + " m_objStatus.style.display=\"none\";\n"
2945: + " m_objStatus.innerText = \"\";\n"
2946: + " }\n"
2947: + " if (true == onRSC_getAppointments.fUpdateBolding)\n"
2948: + " {\n"
2949: + " onRSC_getAppointments.fUpdateBolding=false;\n"
2950: + " mfGetBoldData(onRSC_getAppointments.fResetQuery);\n"
2951: + " }\n"
2952: + "}\n"
2953: + "/************************PROPERTY ACCESS FUNCTIONS***********************/\n"
2954: + "function get_statusEl()\n"
2955: + "{\n"
2956: + " return(m_objStatus);\n"
2957: + "}\n"
2958: + "function put_statusEl(newVal)\n"
2959: + "{\n"
2960: + " if(typeof(newVal) == 'string')\n"
2961: + " {\n"
2962: + " m_objStatus = window.document.all[newVal];\n"
2963: + " return;\n"
2964: + " }\n"
2965: + " m_objStatus = newVal;\n"
2966: + "}\n"
2967: + "function put_PollInterval(newVal)\n"
2968: + "{\n"
2969: + " m_iPollInterval = Number(newVal);\n"
2970: + "}\n"
2971: + "function get_PollInterval()\n"
2972: + "{\n"
2973: + " return m_iPollInterval;\n"
2974: + "}\n"
2975: + "function put_readOnly(newVal)\n"
2976: + "{\n"
2977: + " if(\"true\" == String(newVal))\n"
2978: + " {\n"
2979: + " m_fReadOnly = true;\n"
2980: + " }\n"
2981: + " else\n"
2982: + " {\n"
2983: + " m_fReadOnly = false;\n"
2984: + " } \n"
2985: + "}\n"
2986: + "function get_readOnly()\n"
2987: + "{\n"
2988: + " return m_fReadOnly;\n"
2989: + "}\n"
2990: + "function put_Day(newVal)\n"
2991: + "{\n"
2992: + " m_objMainDate.setDate(Number(newVal));\n"
2993: + "}\n"
2994: + "function get_Day()\n"
2995: + "{\n"
2996: + " return m_objSelectedStart.getDate();\n"
2997: + "}\n"
2998: + "function put_Month(newVal)\n"
2999: + "{\n"
3000: + " m_objMainDate.setMonth(Number(newVal));\n"
3001: + "}\n"
3002: + "function get_Month()\n"
3003: + "{\n"
3004: + " return m_objSelectedStart.getMonth();\n"
3005: + "}\n"
3006: + "function put_Year(newVal)\n"
3007: + "{\n"
3008: + " m_objMainDate.setYear(Number(newVal)); \n"
3009: + "}\n"
3010: + "function get_Year()\n"
3011: + "{\n"
3012: + " return m_objSelectedStart.getFullYear();\n"
3013: + "}\n"
3014: + "function get_FullYear()\n"
3015: + "{\n"
3016: + " return m_objSelectedStart.getFullYear();\n"
3017: + "}\n"
3018: + "function put_FullYear(newVal)\n"
3019: + "{\n"
3020: + " m_objMainDate.setFullYear(Number(newVal)); \n"
3021: + "}\n"
3022: + "function put_caltext(newVal)\n"
3023: + "{\n"
3024: + "L_szUpdatingBold = newVal;\n"
3025: + "}\n"
3026: + "function get_caltext()\n"
3027: + "{\n"
3028: + "return(L_szUpdatingBold);\n"
3029: + "}\n"
3030: + "function put_viewtext(newVal)\n"
3031: + "{\n"
3032: + "L_szUpdating = newVal;\n"
3033: + "}\n"
3034: + "function get_viewtext()\n"
3035: + "{\n"
3036: + "return(L_szUpdating);\n"
3037: + "}\n"
3038: + "//Causes a refresh of all the data for the current view\n"
3039: + "function f_refresh()\n" + "{\n"
3040: + " mfGetAppointments(true,true,false);\n" + "}\n";
3041:
3042: String lExpectation = "\n"
3043: + "var m_objXSL = new ActiveXObject(\"Microsoft.XMLDOM\");\n"
3044: + "var m_objOutPutXML = new ActiveXObject(\"Microsoft.XMLDOM\");\n"
3045: + "var m_objOutPutXMLBold = new ActiveXObject(\"Microsoft.XMLDOM\");\n"
3046: + "var m_iIntervalID = null;\n"
3047: + "var m_iPollInterval = 10;\n"
3048: + "var m_objXMLhttp = null;\n"
3049: + "var m_objXMLhttpBold = null;\n"
3050: + "var m_objXMLhttp_polling= new ActiveXObject(\"Microsoft.XMLhttp\");\n"
3051: + "var m_iSubscriptionID = null;\n"
3052: + "var m_fReadOnly = false;\n"
3053: + "\n"
3054: + "var m_objMainDate;\n"
3055: + "var m_objTodaysDate = new Date();\n"
3056: + " m_objTodaysDate.setHours(0,0,0,0);\n"
3057: + "\n"
3058: + "\n"
3059: + "var m_objSelectedStart;\n"
3060: + "var m_objSelectedEnd;\n"
3061: + "\n"
3062: + "var m_objMainTable = null;\n"
3063: + "var m_objSelectedDay = new Array();\n"
3064: + "var m_fHasLoaded = false;\n"
3065: + "var m_iFirstDayOfMonth = 0;\n"
3066: + "var m_iDaysInMonth = 0;\n"
3067: + "var m_iView = 0;\n"
3068: + "var m_szHighlightBG = \"highlight\";\n"
3069: + "var m_szHighlightText = \"highlighttext\";\n"
3070: + "var m_szNormalDateBG = \"window\";\n"
3071: + "var m_szNormalBG = \"window\";\n"
3072: + "var m_szNormalText = \"windowtext\";\n"
3073: + "var m_szInactiveBG = \"appworkspace\";\n"
3074: + "var m_objStatus;\n"
3075: + "var m_rgCalCells;\n"
3076: + "var m_rgMonthNamesShort;\n"
3077: + "var m_rgMonthNamesLong;\n"
3078: + "var m_szDateFormat;\n"
3079: + "var m_rgWeekdayLetters;\n"
3080: + "var m_fHaveData = false;\n"
3081: + "var m_iStartDay;\n"
3082: + "var m_oCalStartDate = new Date();\n"
3083: + "var m_oCalEndDate = new Date();\n"
3084: + "var L_szUpdating;\n"
3085: + "var L_szUpdatingBold;\n"
3086: + "\n"
3087: + "void function onDocumentReady()\n"
3088: + "{\n"
3089: + " var szXSLString =\n"
3090: + " '<xsl:template xmlns:xsl=\"uri:xsl\" xmlns:a=\"DAV:\"><root>' +\n"
3091: + " '<xsl:for-each select=\"a:multistatus/a:response\">' +\n"
3092: + " '<appointment><url><xsl:value-of select=\"a:href\" /></url>' +\n"
3093: + " '<xsl:for-each select=\"a:propstat[a:status != \\'HTTP/1.1 404 Resource Not Found\\']/a:prop\">' +\n"
3094: + " '<subject><xsl:value-of select=\"subject\" /></subject>' +\n"
3095: + " '<instancetype><xsl:value-of select=\"instancetype\" /></instancetype>' +\n"
3096: + " '<location><xsl:value-of select=\"location\" /></location>' +\n"
3097: + " '<dtstart><xsl:value-of select=\"dtstart\" /></dtstart>' +\n"
3098: + " '<dtend><xsl:value-of select=\"dtend\" /></dtend>' +\n"
3099: + " '<busystatus><xsl:value-of select=\"busystatus\" /></busystatus>' + \n"
3100: + " '<alldayevent><xsl:value-of select=\"alldayevent\" /></alldayevent>' +\n"
3101: + " '<pr_cdormid><xsl:value-of select=\"pr_cdormid\" /></pr_cdormid>' +\n"
3102: + " '<sensitivity><xsl:value-of select=\"sensitivity\" /></sensitivity>' +\n"
3103: + " '<apptstateflags><xsl:value-of select=\"apptstateflags\" /></apptstateflags>' +\n"
3104: + " '<uid><xsl:value-of select=\"uid\" /></uid>' +\n"
3105: + " '</xsl:for-each></appointment></xsl:for-each></root></xsl:template>';\n"
3106: + "\n"
3107: + " m_objXSL.loadXML(szXSLString);\n"
3108: + "\n"
3109: + " /**************Do initial calendar rendering******************/\n"
3110: + " m_iStartDay = (this.startDay == null)?0:Number(this.startDay);\n"
3111: + " with (this.__idExchMasterCalendarTableNode.children[0])\n"
3112: + " {\n"
3113: + " cells[0].children[0].src = this.prevMonthImage;\n"
3114: + " cells[2].children[0].src = this.nextMonthImage;\n"
3115: + " }\n"
3116: + " mfRenderCalendar();\n"
3117: + "\n"
3118: + " m_rgMonthNamesShort = (null == this.monthnamesShort || \"\" == this.monthnamesShort)?\n"
3119: + " \"Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec\".split(\";\"):\n"
3120: + " this.monthnamesShort.split(\";\");\n"
3121: + " m_rgMonthNamesLong = (null == this.monthnamesLong || \"\" == this.monthnamesLong)?\n"
3122: + " \"January;February;March;April;May;June;July;August;September;October;November;December\".split(\";\"):\n"
3123: + " this.monthnamesLong.split(\";\");\n"
3124: + " m_rgWeekdayLetters = (this.weekdayLetters)?this.weekdayLetters.split(\";\"):\"M;T;W;T;F;S;S\".split(\";\");\n"
3125: + " m_szDateFormat = (this.dateFormat)?this.dateFormat:\"[MMMM] [yyyy]\";\n"
3126: + " var iM=-1,iD=-1,iY=-1,szX;\n"
3127: + " m_objMainTable = this.children[0];\n"
3128: + " m_rgCalCells = m_objMainTable.cells[\"numbercell\"];\n"
3129: + " for(var i = 0; i < 7; i++) //day letters\n"
3130: + " {\n"
3131: + " with(m_rgCalCells[i])\n"
3132: + " {\n"
3133: + " innerText = m_rgWeekdayLetters[( (m_iStartDay+i)%m_rgWeekdayLetters.length )];\n"
3134: + " dayNameCell = \"1\";\n"
3135: + " style.backgroundColor = m_szNormalBG;\n"
3136: + " style.color = m_szNormalText;\n"
3137: + " style.borderBottom = \"solid 1px black\";\n"
3138: + " }\n"
3139: + " }\n"
3140: + " //parseInt treats leading '0' as octal numbers\n"
3141: + " //need to disect the whole number and use Number()\n"
3142: + " iM = parseURLfor(\"m\");\n"
3143: + " iM = (null==iM || \"\"==iM)?-1:Number(iM);\n"
3144: + " iD = parseURLfor(\"d\");\n"
3145: + " iD = (null==iD || \"\"==iD)?-1:Number(iD);\n"
3146: + " iY = parseURLfor(\"y\");\n"
3147: + " iY = (null==iY || \"\"==iY)?-1:Number(iY);\n"
3148: + "\n"
3149: + " if(-3 == iM+iY+iD)//no date info on the url\n"
3150: + " {\n"
3151: + " m_objMainDate = new Date(); //use todays date\n"
3152: + " }\n"
3153: + " else\n"
3154: + " {\n"
3155: + " //missing defaults to current month/year and 1st day of month\n"
3156: + " iM = (isNaN(iM) || iM == -1)?m_objTodaysDate.getMonth():iM-1;\n"
3157: + " iY = (isNaN(iY) || iY == -1)?m_objTodaysDate.getFullYear():iY;\n"
3158: + " iD = (isNaN(iD) || iD == -1)?1:iD;\n"
3159: + " \n"
3160: + " try\n"
3161: + " {\n"
3162: + " m_objMainDate = new Date(iY,iM,iD); \n"
3163: + " }\n"
3164: + " catch(e)\n"
3165: + " {\n"
3166: + " m_objMainDate = new Date(); \n"
3167: + " }\n"
3168: + " }\n"
3169: + " m_objSelectedStart = new Date(m_objMainDate);\n"
3170: + " m_objSelectedEnd = new Date(m_objMainDate);\n"
3171: + " //search url for view\n"
3172: + " var szView = parseURLfor(\"view\");\n"
3173: + " szView = (null == szView)?\"daily\":szView.toLowerCase();\n"
3174: + " m_iView=(szView==\"weekly\")?1:( (szView==\"monthly\")?2:0 );\n"
3175: + " if (1 == m_iView) //adjust selects weekly\n"
3176: + " {//need to find start of this week\n"
3177: + " i = m_objSelectedStart.getDay()-m_iStartDay;\n"
3178: + " i+=(0>=i)?7:0;\n"
3179: + " m_objSelectedStart.setDate(m_objSelectedStart.getDate()-i);\n"
3180: + " m_objSelectedEnd.setDate(m_objSelectedStart.getDate()+6);\n"
3181: + " }\n"
3182: + " else if (2==m_iView) //monthly\n"
3183: + " {\n"
3184: + " m_objSelectedStart.setDate(1);\n"
3185: + " i = m_objSelectedStart.getDay()-m_iStartDay;\n"
3186: + " i+=(0>=i)?7:0;\n"
3187: + " m_objSelectedStart.setDate(m_objSelectedStart.getDate()-i);\n"
3188: + " \n"
3189: + " m_objSelectedEnd.setTime( m_objSelectedStart.getTime()+(41*86400000) );\n"
3190: + " }\n"
3191: + " m_objSelectedStart.setHours(0,0,0,0);\n"
3192: + " m_objSelectedEnd.setHours(24,0,0,0);\n"
3193: + "\n"
3194: + " mfUpdateCalendar(true,true);\n"
3195: + "}\n"
3196: + "void function fire_OnDateChange(objXML)\n"
3197: + "{\n"
3198: + " if(m_fHaveData)\n"
3199: + " {\n"
3200: + " var objEvent = createEventObject();\n"
3201: + " objEvent.xml = objXML;\n"
3202: + " objEvent.view = m_iView;\n"
3203: + " objEvent.date = (2==m_iView)?m_objMainDate:m_objSelectedStart;\n"
3204: + " id_OnDateChange.fire(objEvent);\n"
3205: + " }\n"
3206: + "}\n"
3207: + "\n"
3208: + "void function onStop() \n"
3209: + "{\n"
3210: + " if(m_iIntervalID)\n"
3211: + " {\n"
3212: + " window.clearInterval(m_iIntervalID);\n"
3213: + " }\n"
3214: + "}\n"
3215: + "void function onClick()\n"
3216: + "{\n"
3217: + " event.cancelBubble=true;\n"
3218: + " if(!m_fReadOnly)\n"
3219: + " {\n"
3220: + " if(null != event.srcElement.dayCell)\n"
3221: + " { \n"
3222: + " mfSetDailyView(event.srcElement);\n"
3223: + " return;\n"
3224: + " }\n"
3225: + " else if(null != event.srcElement.leftNavButton)\n"
3226: + " {\n"
3227: + " m_objMainDate.setMonth(m_objMainDate.getMonth()-1);\n"
3228: + " mfUpdateCalendar(false,true);\n"
3229: + " return;\n"
3230: + " }\n"
3231: + " else if(null != event.srcElement.rightNavButton)\n"
3232: + " {\n"
3233: + " m_objMainDate.setMonth(m_objMainDate.getMonth()+1);\n"
3234: + " mfUpdateCalendar(false,true);\n"
3235: + " return;\n"
3236: + " }\n"
3237: + " else if(null != event.srcElement.monthDisplayName)\n"
3238: + " {\n"
3239: + " mfSetMonthlyView();\n"
3240: + " }\n"
3241: + " else if(null != event.srcElement.weekselect)\n"
3242: + " {\n"
3243: + " mfSetWeeklyView(m_objMainTable.rows[event.srcElement.parentElement.rowIndex].cells[1]);\n"
3244: + " }\n"
3245: + " }\n"
3246: + "}\n"
3247: + "\n"
3248: + "void function mfSetDailyView(eCell)\n"
3249: + "{\n"
3250: + " m_iView=0;\n"
3251: + " m_objSelectedStart.setFullYear(eCell.year,eCell.month,parseInt(eCell.innerText));\n"
3252: + " m_objSelectedEnd.setTime(m_objSelectedStart);\n"
3253: + " mfFindAndSelectDate();\n"
3254: + " mfGetAppointments(true,false,true);\n"
3255: + "}\n"
3256: + "void function mfSetWeeklyView(eCell)\n"
3257: + "{\n"
3258: + " m_iView=1;\n"
3259: + " m_objSelectedStart.setFullYear(eCell.year,eCell.month,eCell.innerText);\n"
3260: + " m_objSelectedEnd.setFullYear(eCell.year,eCell.month,Number(eCell.innerText)+6);\n"
3261: + " mfFindAndSelectDate();\n"
3262: + " mfGetAppointments(true,false,true);\n"
3263: + "}\n"
3264: + "void function mfSetMonthlyView()\n"
3265: + "{\n"
3266: + " m_iView=2;\n"
3267: + " m_objSelectedStart.setTime(m_oCalStartDate);\n"
3268: + " m_objSelectedEnd.setTime(m_oCalEndDate);\n"
3269: + " mfFindAndSelectDate();\n"
3270: + " mfGetAppointments(true,false,true);\n"
3271: + "}\n"
3272: + "void function f_setView(iView)\n"
3273: + "{\n"
3274: + " //use the currently selected cell to determine view\n"
3275: + " if(m_iView == iView)\n"
3276: + " {\n"
3277: + " return;\n"
3278: + " }\n"
3279: + " m_iView = iView;\n"
3280: + " switch(iView)\n"
3281: + " {\n"
3282: + " case 1:\n"
3283: + " //use the last selected day or today\n"
3284: + " var x=(-1<mfFindAndSelectDate.iHoldLastDaily)?mfFindAndSelectDate.iHoldLastDaily:mfFindAndSelectDate.iStartIdx;\n"
3285: + " mfSetWeeklyView(m_objMainTable.rows[m_rgCalCells[x].parentElement.rowIndex].cells[1]);\n"
3286: + " break;\n"
3287: + " case 2:\n"
3288: + " mfSetMonthlyView();\n"
3289: + " break;\n"
3290: + " case 0:\n"
3291: + " default:\n"
3292: + " var x=(-1<mfFindAndSelectDate.iHoldLastDaily)?mfFindAndSelectDate.iHoldLastDaily:mfFindAndSelectDate.iStartIdx;\n"
3293: + " mfSetDailyView(m_rgCalCells[x]);\n"
3294: + " }\n"
3295: + "}\n"
3296: + "//unselects current selection\n"
3297: + "//searches calendar for matching date cell given in m_objSelectedStart\n"
3298: + "mfFindAndSelectDate.iStartIdx=-1;\n"
3299: + "mfFindAndSelectDate.iEndIdx=-1;\n"
3300: + "mfFindAndSelectDate.iHoldLastDaily=-1;\n"
3301: + "void function mfFindAndSelectDate()\n"
3302: + "{\n"
3303: + " var x,y;\n"
3304: + " \n"
3305: + " if (mfFindAndSelectDate.iStartIdx>-1)\n"
3306: + " { //remove any prev selection\n"
3307: + " for(x=mfFindAndSelectDate.iStartIdx;x<=mfFindAndSelectDate.iEndIdx;x++)\n"
3308: + " {\n"
3309: + " m_rgCalCells[x].style.backgroundColor=m_rgCalCells[x].dayCell;\n"
3310: + " m_rgCalCells[x].style.color=m_szNormalText;\n"
3311: + " }\n"
3312: + " mfFindAndSelectDate.iStartIdx=-1;\n"
3313: + " }\n"
3314: + " if (m_objSelectedStart>m_oCalEndDate || m_objSelectedEnd<m_oCalStartDate)\n"
3315: + " {\n"
3316: + " return;\n"
3317: + " }\n"
3318: + " x=7;\n"
3319: + " if(2==m_iView) //monthly\n"
3320: + " {\n"
3321: + " if(m_objSelectedStart.getTime() == m_oCalStartDate.getTime()) //whole month showing\n"
3322: + " {\n"
3323: + " y=m_rgCalCells.length-1;\n"
3324: + " }\n"
3325: + " else if(m_objSelectedStart<m_oCalStartDate&&m_objSelectedEnd>m_oCalStartDate) //do 1st grey area\n"
3326: + " {\n"
3327: + " mfFindAndSelectDate.iStartIdx=7;\n"
3328: + " for(x=7;\"1\"!=m_rgCalCells[x].innerText;x++)\n"
3329: + " {\n"
3330: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
3331: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
3332: + " }\n"
3333: + " mfFindAndSelectDate.iEndIdx=x;\n"
3334: + " return;\n"
3335: + " }\n"
3336: + " else if(m_objSelectedStart<m_oCalEndDate&&m_objSelectedEnd>m_oCalEndDate)//last gray area\n"
3337: + " {\n"
3338: + " x=m_rgCalCells.length-1;\n"
3339: + " mfFindAndSelectDate.iEndIdx=x;\n"
3340: + " for(;\"1\"!=m_rgCalCells[x].innerText;x--)\n"
3341: + " {\n"
3342: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
3343: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
3344: + " }\n"
3345: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
3346: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
3347: + " mfFindAndSelectDate.iStartIdx=x-1;\n"
3348: + " return;\n"
3349: + " }\n"
3350: + " else\n"
3351: + " {\n"
3352: + " return;\n"
3353: + " }\n"
3354: + " }\n"
3355: + " else if (m_objSelectedStart>=m_oCalStartDate && m_objSelectedStart<=m_oCalEndDate)\n"
3356: + " {\n"
3357: + " x=Math.round((m_objSelectedStart-m_oCalStartDate)/86400000)+7;\n"
3358: + " }\n"
3359: + " y=x;\n"
3360: + " if (0 != m_iView)\n"
3361: + " {\n"
3362: + " y=(2==m_iView)?m_rgCalCells.length-1:x+6;\n"
3363: + " if (2==m_iView && m_objSelectedEnd<m_oCalEndDate)\n"
3364: + " {\n"
3365: + " y=Math.round((m_objSelectedEnd-m_oCalStartDate)/86400000)+7;\n"
3366: + " }\n"
3367: + " }\n"
3368: + " mfFindAndSelectDate.iStartIdx=(x<49)?x:-1;\n"
3369: + " mfFindAndSelectDate.iEndIdx=(y<49)?y:-1;;\n"
3370: + " for (;(x<=y && x<49);x++)\n"
3371: + " {\n"
3372: + " m_rgCalCells[x].style.backgroundColor = m_szHighlightBG;\n"
3373: + " m_rgCalCells[x].style.color = m_szHighlightText;\n"
3374: + " }\n"
3375: + " if (m_iView==0)\n"
3376: + " {\n"
3377: + " mfFindAndSelectDate.iHoldLastDaily=mfFindAndSelectDate.iStartIdx;\n"
3378: + " }\n"
3379: + "}\n"
3380: + "\n"
3381: + "//PARAM: iMonth - jan=0\n"
3382: + "function mfGetDaysInMonth(iMonth, iYear)\n"
3383: + "{\n"
3384: + " iMonth+=(iMonth==-1)?13:1; //remove 0 offset (1=jan)\n"
3385: + " return( (2 == iMonth) ? (28+mfIsLeapYear(iYear)):(30+((iMonth+(iMonth>7))%2)));\n"
3386: + "}\n"
3387: + "function mfIsLeapYear(yr)\n"
3388: + "{\n"
3389: + " return((yr % 4 == 0) && (yr % 100 != 0) || (yr % 400 == 0))?1:0;\n"
3390: + "}\n"
3391: + "\n"
3392: + "mfWriteCellNumbers.todayCellIdx=-1;\n"
3393: + "void function mfWriteCellNumbers()\n"
3394: + "{\n"
3395: + " m_objMainDate.setDate(1);\n"
3396: + "\n"
3397: + " var iM = m_objMainDate.getMonth();\n"
3398: + " var iY = m_objMainDate.getFullYear();\n"
3399: + " var iY2 = iY%100;\n"
3400: + "\n"
3401: + " var szCaptionText = this.m_szDateFormat.replace(/\\[MMMM\\]/g, m_rgMonthNamesLong[iM]);\n"
3402: + " \n"
3403: + " szCaptionText = szCaptionText.replace(/\\[MMM\\]/g, m_rgMonthNamesShort[iM]);\n"
3404: + " szCaptionText = szCaptionText.replace(/\\[MM\\]/g, ++iM<10 ? \"0\"+iM : iM );\n"
3405: + " szCaptionText = szCaptionText.replace(/\\[M\\]/g, iM);\n"
3406: + " szCaptionText = szCaptionText.replace(/\\[yyy+\\]/g, iY);\n"
3407: + " szCaptionText = szCaptionText.replace(/\\[y+\\]/g, iY2>9?iY2:\"0\"+iY2);\n"
3408: + "\n"
3409: + " m_objMainTable.rows[0].cells[1].innerText= szCaptionText;\n"
3410: + "\n"
3411: + " m_oCalStartDate.setTime(m_objMainDate);\n"
3412: + " m_oCalEndDate.setTime(m_objMainDate);\n"
3413: + "\n"
3414: + " var x=m_objMainDate.getDay()-m_iStartDay;\n"
3415: + " x+=(0>=x)?7:0; //show entire previous week\n"
3416: + " m_oCalStartDate.setDate(1-x); //this is now the first date on the calendar\n"
3417: + " m_oCalStartDate.setHours(0,0,0,0);\n"
3418: + " m_oCalEndDate.setDate((1-x)+41);\n"
3419: + " m_oCalEndDate.setHours(24,0,0,0);\n"
3420: + "\n"
3421: + " var iD = m_oCalStartDate.getDate();\n"
3422: + " var iM = m_oCalStartDate.getMonth();\n"
3423: + " var iY = m_oCalStartDate.getFullYear();\n"
3424: + " var iDm = mfGetDaysInMonth(iM,iY);\n"
3425: + " var bg = (x==0)?m_szNormalDateBG:m_szInactiveBG;\n"
3426: + " var y=7+iDm;\n"
3427: + " for(x=7;iD<=iDm;x++)\n"
3428: + " {\n"
3429: + " m_rgCalCells[x].month=iM;\n"
3430: + " m_rgCalCells[x].year =iY;\n"
3431: + " m_rgCalCells[x].dayCell = bg;\n"
3432: + " with(m_rgCalCells[x])\n"
3433: + " {\n"
3434: + " innerText = iD++;\n"
3435: + " style.backgroundColor = bg;\n"
3436: + " style.color = m_szNormalText;\n"
3437: + " style.fontWeight = \"normal\";\n"
3438: + " }\n"
3439: + " }\n"
3440: + " var iLastCell = m_rgCalCells.length;\n"
3441: + " while(x<iLastCell)\n"
3442: + " {\n"
3443: + " iD=1;\n"
3444: + " iM=(11==iM)?0:iM+1;\n"
3445: + " if (0==iM ) iY++;\n"
3446: + " var iDm = mfGetDaysInMonth(iM,iY);\n"
3447: + " bg=(bg==m_szInactiveBG)?m_szNormalDateBG:m_szInactiveBG;\n"
3448: + " if ((iDm+x) > iLastCell) iDm=iLastCell-x; //dont past last cell\n"
3449: + " for(;iD<=iDm;x++)\n"
3450: + " {\n"
3451: + " //if (x>=iLastCell) break;\n"
3452: + " m_rgCalCells[x].month=iM;\n"
3453: + " m_rgCalCells[x].year =iY;\n"
3454: + " m_rgCalCells[x].dayCell = bg;\n"
3455: + " with(m_rgCalCells[x])\n"
3456: + " {\n"
3457: + " innerText = iD++;\n"
3458: + " style.backgroundColor = bg;\n"
3459: + " style.color = m_szNormalText;\n"
3460: + " style.fontWeight = \"normal\";\n"
3461: + " }\n"
3462: + " }\n"
3463: + " }\n"
3464: + " if (-1!=mfWriteCellNumbers.todayCellIdx)\n"
3465: + " {\n"
3466: + " m_rgCalCells[mfWriteCellNumbers.todayCellIdx].style.border = \"none\";\n"
3467: + " mfWriteCellNumbers.todayCellIdx=-1;\n"
3468: + " }\n"
3469: + " //is todays date on this calendar (needs red border)\n"
3470: + " if(m_objTodaysDate > m_oCalStartDate && m_objTodaysDate < m_oCalEndDate)\n"
3471: + " { \n"
3472: + " //add one hour 3600000 (for daylight spring losing an hour) and floor (DST fall works with floor)\n"
3473: + " x = Math.floor((m_objTodaysDate - m_oCalStartDate + 3600000)/86400000)\n"
3474: + " m_rgCalCells[x+7].style.border = \"solid 1 red\";\n"
3475: + " mfWriteCellNumbers.todayCellIdx=x+7;\n"
3476: + " }\n"
3477: + " //prev selection has been wiped!\n"
3478: + " mfFindAndSelectDate.iStartIdx=-1;\n"
3479: + "}\n"
3480: + "\n"
3481: + "void function mfUpdateCalendar(fRenderView,fUpdateBolding)\n"
3482: + "{\n"
3483: + " mfWriteCellNumbers();\n"
3484: + " mfFindAndSelectDate();\n"
3485: + " if (!fUpdateBolding)\n"
3486: + " {\n"
3487: + " mfGetAppointments(fRenderView,false,true);\n"
3488: + " }\n"
3489: + " else\n"
3490: + " {\n"
3491: + " if (fRenderView) //refresh data then bold\n"
3492: + " {\n"
3493: + " mfGetAppointments(fRenderView,true,true);\n"
3494: + " }\n"
3495: + " else\n"
3496: + " {\n"
3497: + " mfGetBoldData(true);\n"
3498: + " } \n"
3499: + " } \n"
3500: + "}\n"
3501: + "\n"
3502: + "void function mfRenderCalendar()\n"
3503: + "{\n"
3504: + " var masterTableNode = this.__idExchMasterCalendarTableNode.children[0];\n"
3505: + " var masterRowNode = this.__idExchMasterCalendarRowNode.children[0];\n"
3506: + " var newNode=null;\n"
3507: + " for(var i=0;i<7;i++)\n"
3508: + " {\n"
3509: + " newNode=masterRowNode.cloneNode(true);\n"
3510: + " if(0==i)\n"
3511: + " {\n"
3512: + " newNode.cells[0].weekselect=null;\n"
3513: + " newNode.cells[0].monthDisplayName=\"1\";\n"
3514: + " }\n"
3515: + " masterTableNode.insertAdjacentElement(\"BeforeEnd\",newNode.children[0]);\n"
3516: + " }\n"
3517: + " this.insertAdjacentElement(\"BeforeEnd\",masterTableNode);\n"
3518: + " m_objMainTable=masterTableNode;\n"
3519: + "}\n"
3520: + "mfGetBoldData.szQuery=\"\";\n"
3521: + "void function mfGetBoldData(fResetQuery)\n"
3522: + "{\n"
3523: + " if(null != m_objStatus )\n"
3524: + " {\n"
3525: + " m_objStatus.style.display=\"\";\n"
3526: + " m_objStatus.innerText = L_szUpdatingBold;\n"
3527: + " }\n"
3528: + " m_fHaveData = true;//allow event firings\n"
3529: + " if (\"\"==mfGetBoldData.szQuery) fResetQuery=true;\n"
3530: + " if (fResetQuery)\n"
3531: + " {\n"
3532: + " var iX = 7;\n"
3533: + " iX = m_rgCalCells.length - 1;\n"
3534: + " var szDateStart=mfGetSearchDateUTC(m_oCalStartDate);\n"
3535: + " var szDateEnd=mfGetSearchDateUTC(m_oCalEndDate);\n"
3536: + " mfGetBoldData.szQuery ='<a:searchrequest xmlns:a=\"DAV:\" > ' +\n"
3537: + " '<a:sql>Select ' +\n"
3538: + " '\"urn:schemas:calendar:dtstart\" AS dtstart, ' +\n"
3539: + " '\"urn:schemas:calendar:dtend\" AS dtend, ' +\n"
3540: + " '\"urn:schemas:calendar:alldayevent\" AS alldayevent ' +\n"
3541: + " 'FROM Scope(\\'SHALLOW TRAVERSAL OF \"\"\\') ' +\n"
3542: + " 'WHERE NOT \"urn:schemas:calendar:instancetype\" = 1 ' +\n"
3543: + " 'AND NOT \"urn:schemas:calendar:busystatus\" = \\'FREE\\' ' +\n"
3544: + " 'AND \"urn:schemas:calendar:dtend\" > \\''+szDateStart+'\\' ' +\n"
3545: + " 'AND \"urn:schemas:calendar:dtstart\" < \\''+szDateEnd+'\\' ' +\n"
3546: + " 'ORDER BY \"urn:schemas:calendar:dtstart\" ASC ' +\n"
3547: + " '</></>';\n"
3548: + "\n"
3549: + " }\n"
3550: + " m_objXMLhttpBold = new ActiveXObject(\"Microsoft.XMLhttp\");\n"
3551: + " try\n" + " {\n"
3552: + " m_objXMLhttpBold.open(\"SEARCH\","
3553: + JSWrapperHelper.CONVERT_EXPRESSION_FUNCTION_WRAP_START
3554: + "\tfolderURL), true);\n"
3555: + " m_objXMLhttpBold.setRequestHeader(\"Content-Type\", \"text/xml\");\n"
3556: + " m_objXMLhttpBold.onreadystatechange = onRSC_getBoldData;\n"
3557: + " m_objXMLhttpBold.send(mfGetBoldData.szQuery);\n"
3558: + " }\n"
3559: + " catch(e)\n"
3560: + " {\n"
3561: + " alert(\"Error in ExchangeCalendar.HTC mfGetBoldData() with searchrequest: \"+e.description);\n"
3562: + " }\n"
3563: + "}\n"
3564: + "\n"
3565: + "\n"
3566: + "//holds calendar date range including greyed next/prev months\n"
3567: + "mfGetAppointments.m_dTemp = new Date();\n"
3568: + "mfGetAppointments.szQuery=\"\";\n"
3569: + "void function mfGetAppointments(fRenderVeiw,fUpdateBolding,fResetQuery)\n"
3570: + "{\n"
3571: + " if (true == fUpdateBolding) \n"
3572: + " {\n"
3573: + " onRSC_getAppointments.fUpdateBolding = true; //we will bold after getting the appt data\n"
3574: + " } \n"
3575: + " if(null != m_objStatus )\n"
3576: + " {\n"
3577: + " m_objStatus.style.display=\"\";\n"
3578: + " m_objStatus.innerText = L_szUpdating;\n"
3579: + " }\n"
3580: + "\n"
3581: + " onRSC_getAppointments.fResetQuery=fResetQuery;\n"
3582: + " m_fHaveData = false; //stop event firings\n"
3583: + "\n"
3584: + " //Use last stored query in case where polling fires but user has calendar in another month than the view\n"
3585: + " //Happens most when going out past the expansion which fires another expansion with triggers polling changes\n"
3586: + " if (\"\"==mfGetAppointments.szQuery) fResetQuery=true;\n"
3587: + " if (fResetQuery)\n"
3588: + " {\n"
3589: + " var iX = 7;\n"
3590: + " iX = m_rgCalCells.length - 1;\n"
3591: + " if (2==m_iView) //monthly gets full 6 weeks\n"
3592: + " {\n"
3593: + " //this shifts an extra day for the montly view calendar in sunday start\n"
3594: + " //while view shows monday start (same problem with weekly view)\n"
3595: + " if (0==m_iStartDay)\n"
3596: + " {\n"
3597: + " m_oCalStartDate.setHours(24,0,0,0);\n"
3598: + " m_oCalEndDate.setHours(24,0,0,0);\n"
3599: + " var szDateStart = mfGetSearchDateUTC(m_oCalStartDate);\n"
3600: + " var szDateEnd = mfGetSearchDateUTC(m_oCalEndDate);\n"
3601: + " m_oCalStartDate.setHours(-24,0,0,0);\n"
3602: + " m_oCalEndDate.setHours(-24,0,0,0);\n"
3603: + " }\n"
3604: + " else\n"
3605: + " {\n"
3606: + " var szDateStart = mfGetSearchDateUTC(m_oCalStartDate);\n"
3607: + " var szDateEnd = mfGetSearchDateUTC(m_oCalEndDate);\n"
3608: + " }\n"
3609: + " }\n"
3610: + " else if (1==m_iView)//weekly\n"
3611: + " {\n"
3612: + " //this shifts an extra day for the weekly view calendar in sunday start \n"
3613: + " //while view shows monday start (same problem with monthly view)\n"
3614: + " if (0==m_iStartDay)\n"
3615: + " {\n"
3616: + " m_objSelectedStart.setHours(24,0,0,0);\n"
3617: + " var szDateStart = mfGetSearchDateUTC(m_objSelectedStart);\n"
3618: + " m_objSelectedStart.setHours(168,0,0,0);\n"
3619: + " var szDateEnd = mfGetSearchDateUTC(m_objSelectedStart);\n"
3620: + " m_objSelectedStart.setHours(-192,0,0,0);\n"
3621: + " }\n"
3622: + " else\n"
3623: + " {\n"
3624: + " var szDateStart = mfGetSearchDateUTC(m_objSelectedStart);\n"
3625: + " m_objSelectedStart.setHours(168,0,0,0);\n"
3626: + " var szDateEnd = mfGetSearchDateUTC(m_objSelectedStart);\n"
3627: + " m_objSelectedStart.setHours(-168,0,0,0);\n"
3628: + " }\n"
3629: + " } \n"
3630: + " else //daily view (default)\n"
3631: + " {\n"
3632: + " var szDateStart = mfGetSearchDateUTC(m_objSelectedStart);\n"
3633: + " m_objSelectedStart.setHours(24,0,0,0);\n"
3634: + " var szDateEnd = mfGetSearchDateUTC(m_objSelectedStart);\n"
3635: + " m_objSelectedStart.setHours(-24,0,0,0);\n"
3636: + " }\n"
3637: + "\n"
3638: + " mfGetAppointments.szQuery='<a:searchrequest xmlns:a=\"DAV:\" > ' +\n"
3639: + " '<a:sql>Select ' +\n"
3640: + " '\"urn:schemas:calendar:location\" AS location, ' +\n"
3641: + " '\"urn:schemas:httpmail:subject\" AS subject, '+\n"
3642: + " '\"urn:schemas:calendar:dtstart\" AS dtstart, ' +\n"
3643: + " '\"urn:schemas:calendar:dtend\" AS dtend, ' +\n"
3644: + " '\"urn:schemas:calendar:busystatus\" AS busystatus, ' +\n"
3645: + " '\"urn:schemas:calendar:instancetype\" AS instancetype, ' +\n"
3646: + " '\"urn:schemas:calendar:alldayevent\" AS alldayevent, ' +\n"
3647: + " '\"http://schemas.microsoft.com/mapi/proptag/x10c70003\" AS pr_cdormid, ' +\n"
3648: + " '\"http://schemas.microsoft.com/exchange/sensitivity-long\" AS sensitivity, '+\n"
3649: + " '\"http://schemas.microsoft.com/mapi/apptstateflags\" AS apptstateflags, '+\n"
3650: + " '\"urn:schemas:calendar:uid\" AS uid ' +\n"
3651: + " 'FROM Scope(\\'SHALLOW TRAVERSAL OF \"\"\\') ' +\n"
3652: + " 'WHERE NOT \"urn:schemas:calendar:instancetype\" = 1 ' +\n"
3653: + " 'AND \"urn:schemas:calendar:dtend\" > \\''+szDateStart+'\\' ' +\n"
3654: + " 'AND \"urn:schemas:calendar:dtstart\" < \\''+szDateEnd+'\\' ' +\n"
3655: + " 'ORDER BY \"urn:schemas:calendar:dtstart\" ASC ' +\n"
3656: + " '</></>';\n"
3657: + " \n"
3658: + " }\n"
3659: + " \n"
3660: + " m_objXMLhttp = new ActiveXObject(\"Microsoft.XMLhttp\");\n"
3661: + " onRSC_getAppointments.fRenderView=fRenderVeiw;\n"
3662: + " try\n"
3663: + " {\n"
3664: + " m_objXMLhttp.open(\"SEARCH\","
3665: + JSWrapperHelper.CONVERT_EXPRESSION_FUNCTION_WRAP_START
3666: + "folderURL), true);\n"
3667: + " m_objXMLhttp.setRequestHeader(\"Content-Type\",\"text/xml\");\n"
3668: + " m_objXMLhttp.onreadystatechange = onRSC_getAppointments;\n"
3669: + " m_objXMLhttp.send(mfGetAppointments.szQuery);\n"
3670: + " }\n"
3671: + " catch(e)\n"
3672: + " {\n"
3673: + " alert(\"Error in ExchangeCalendar.HTC mfGetAppointments() with searchrequest: \"+e.description);\n"
3674: + " onRSC_getAppointments.fRenderView = true;\n"
3675: + " }\n"
3676: + "}\n"
3677: + "\n"
3678: + "//returns UTC date in \"yyyy/mm/dd hh:mm:ss\" format for DAV searchrequests\n"
3679: + "void function mfGetSearchDateUTC(objDate)\n"
3680: + "{\n"
3681: + " var szYear = objDate.getUTCFullYear();\n"
3682: + " var szMonth = objDate.getUTCMonth()+1;\n"
3683: + " var szDate = objDate.getUTCDate();\n"
3684: + " var szHrs = objDate.getUTCHours();\n"
3685: + " var szMin = objDate.getUTCMinutes();\n"
3686: + " return ( szYear+\"/\"+\n"
3687: + " ((szMonth<10)?(\"0\"+szMonth):szMonth) + \"/\" +\n"
3688: + " ((szDate<10) ?(\"0\"+szDate) :szDate) + \" \" +\n"
3689: + " ((szHrs<10) ?(\"0\"+szHrs) :szHrs) + \":\" +\n"
3690: + " ((szMin<10) ?(\"0\"+szMin) :szMin) + \":00\" );\n"
3691: + "}\n"
3692: + "\n"
3693: + "void function mfBoldDates(rgApptStartTimes,rgApptEndTimes,rgIsAllDayEvent)\n"
3694: + "{\n"
3695: + " var x;\n"
3696: + " var rgNodes=null;\n"
3697: + " for(x=7; x < m_rgCalCells.length; x++)\n"
3698: + " {\n"
3699: + " rgNodes=mfGetNodes(m_rgCalCells[x].year,m_rgCalCells[x].month,Number(m_rgCalCells[x].innerText));\n"
3700: + " m_rgCalCells[x].style.fontWeight = rgNodes.length ? \"bold\" : \"normal\";\n"
3701: + " }\n"
3702: + "}\n"
3703: + "function mfGetNodes(iY,iM,iD)\n"
3704: + "{\n"
3705: + " if(null == m_objOutPutXMLBold)\n"
3706: + " {\n"
3707: + " return;\n"
3708: + " }\n"
3709: + " var dtstartUTC = mfGetUTFIsoDate(iY, iM, iD, 0, 0);\n"
3710: + " var dtendUTC = mfGetUTFIsoDate(iY, iM, iD+1,0, 0);\n"
3711: + " var szStartTimeQuery= \"(dtstart$ge$'\" + dtstartUTC + \"'&&dtstart$lt$'\" + dtendUTC + \"')\";\n"
3712: + " var szEndTimeQuery = \"(dtend$gt$'\" + dtstartUTC + \"'&&dtend$le$'\"+ dtendUTC+ \"')\";\n"
3713: + " var szOutSideQuery = \"(dtstart$lt$'\" + dtstartUTC + \"'&&dtend$gt$'\"+ dtendUTC + \"')\";\n"
3714: + " var szQuery = \"root/appointment[\" + szStartTimeQuery + \"||\" + szEndTimeQuery + \"||\" + szOutSideQuery + \"]\";\n"
3715: + " return(m_objOutPutXMLBold.selectNodes(szQuery));\n"
3716: + "}\n"
3717: + "\n"
3718: + "mfGetUTFIsoDate.objD= new Date();\n"
3719: + "function mfGetUTFIsoDate(iYr,iMon,iDate,iHr,iMin)\n"
3720: + "{\n"
3721: + " mfGetUTFIsoDate.objD.setFullYear(iYr,iMon,iDate);\n"
3722: + " mfGetUTFIsoDate.objD.setHours(iHr,iMin,0);\n"
3723: + " var iYear = mfGetUTFIsoDate.objD.getUTCFullYear();\n"
3724: + " var szMonth = mfGetUTFIsoDate.objD.getUTCMonth()+1;//0 offset adjustment\n"
3725: + " var szDate = mfGetUTFIsoDate.objD.getUTCDate();\n"
3726: + " var szHours = mfGetUTFIsoDate.objD.getUTCHours();\n"
3727: + " var szMinutes = mfGetUTFIsoDate.objD.getUTCMinutes();\n"
3728: + " if (szMonth< 10)\n"
3729: + " {\n"
3730: + " szMonth = \"0\"+szMonth;\n"
3731: + " } \n"
3732: + " if (szDate < 10)\n"
3733: + " {\n"
3734: + " szDate = \"0\"+szDate;\n"
3735: + " } \n"
3736: + " if (szHours < 10)\n"
3737: + " {\n"
3738: + " szHours = \"0\"+szHours;\n"
3739: + " } \n"
3740: + " if (szMinutes < 10)\n"
3741: + " {\n"
3742: + " szMinutes = \"0\"+szMinutes;\n"
3743: + " }\n"
3744: + " return(String(iYear+\"-\"+szMonth+\"-\"+szDate+\"T\"+szHours+\":\"+szMinutes+\":00.000Z\"));\n"
3745: + "}\n"
3746: + "\n"
3747: + "//szDtTime = ISO formatted UTC time string = \"1999-02-18T02:00:00.000Z\"\n"
3748: + "//returns = UTC time in milliseconds\n"
3749: + "function mfGetIsoDateMs(szIsoDate)\n"
3750: + "{\n"
3751: + " var re=mfGetRegExpIsoDates();\n"
3752: + " re.lastIndex=0;\n"
3753: + " var arr = re.exec( szIsoDate );\n"
3754: + " return ( (null == arr) ? null : Date.UTC( Number( arr[1]), Number(arr[2])-1, Number(arr[3]), Number(arr[4]), Number(arr[5]), 0, 0 ) );\n"
3755: + "}\n"
3756: + "\n"
3757: + "mfGetRegExpIsoDates.re;\n"
3758: + "function mfGetRegExpIsoDates()\n"
3759: + "{\n"
3760: + " if (null == mfGetRegExpIsoDates.re)\n"
3761: + " { \n"
3762: + " mfGetRegExpIsoDates.re = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):\\d{2}\\.\\d{3}Z?$/;\n"
3763: + " }\n"
3764: + " return(mfGetRegExpIsoDates.re);\n"
3765: + "}\n"
3766: + "\n"
3767: + "void function onAbort()\n"
3768: + "{\n"
3769: + " return;\n"
3770: + "}\n"
3771: + "void function onRSC_getBoldData()\n"
3772: + "{\n"
3773: + " if(4 != m_objXMLhttpBold.readyState)\n"
3774: + " {\n"
3775: + " return;\n"
3776: + " }\n"
3777: + " m_objXMLhttpBold.onreadystatechange = onAbort;\n"
3778: + " var objXML = m_objXMLhttpBold.responseXML;\n"
3779: + " objXML.transformNodeToObject(m_objXSL.documentElement, m_objOutPutXMLBold);\n"
3780: + " var objApptNodes = m_objOutPutXMLBold.selectNodes('root/appointment/dtstart');\n"
3781: + " var objApptNodes1 = m_objOutPutXMLBold.selectNodes('root/appointment/dtend');\n"
3782: + " var objApptNodes2 = m_objOutPutXMLBold.selectNodes('root/appointment/alldayevent');\n"
3783: + "\n"
3784: + " mfBoldDates(objApptNodes,objApptNodes1,objApptNodes2);\n"
3785: + " if(null != m_objStatus )\n"
3786: + " {\n"
3787: + " m_objStatus.style.display=\"none\";\n"
3788: + " m_objStatus.innerText = \"\";\n"
3789: + " }\n"
3790: + "}\n"
3791: + "\n"
3792: + "onRSC_getAppointments.fRenderView = true;\n"
3793: + "onRSC_getAppointments.fUpdateBolding = false;\n"
3794: + "onRSC_getAppointments.fResetQuery=true;\n"
3795: + "void function onRSC_getAppointments()\n"
3796: + "{\n"
3797: + " if(4 != m_objXMLhttp.readyState)\n"
3798: + " {\n"
3799: + " return;\n"
3800: + " }\n"
3801: + " m_objXMLhttp.onreadystatechange = onAbort;\n"
3802: + " var objXML = m_objXMLhttp.responseXML;\n"
3803: + " objXML.transformNodeToObject(m_objXSL.documentElement, m_objOutPutXML);\n"
3804: + " //only fire (refresh the veiwer) if the calendar is on that month\n"
3805: + " m_fHaveData = true;\n"
3806: + " if(m_objMainDate >= m_oCalStartDate && m_objMainDate <= m_oCalEndDate)\n"
3807: + " {\n"
3808: + " if(true == onRSC_getAppointments.fRenderView)\n"
3809: + " {\n"
3810: + " fire_OnDateChange(m_objOutPutXML);\n"
3811: + " }\n"
3812: + " }\n"
3813: + " onRSC_getAppointments.fRenderView=true;\n"
3814: + " if(null != m_objStatus )\n"
3815: + " {\n"
3816: + " m_objStatus.style.display=\"none\";\n"
3817: + " m_objStatus.innerText = \"\";\n"
3818: + " }\n"
3819: + " if (true == onRSC_getAppointments.fUpdateBolding)\n"
3820: + " {\n"
3821: + " onRSC_getAppointments.fUpdateBolding=false;\n"
3822: + " mfGetBoldData(onRSC_getAppointments.fResetQuery);\n"
3823: + " }\n"
3824: + "}\n"
3825: + "/************************PROPERTY ACCESS FUNCTIONS***********************/\n"
3826: + "function get_statusEl()\n"
3827: + "{\n"
3828: + " return(m_objStatus);\n"
3829: + "}\n"
3830: + "function put_statusEl(newVal)\n"
3831: + "{\n"
3832: + " if(typeof(newVal) == 'string')\n"
3833: + " {\n"
3834: + " m_objStatus = window.document.all[newVal];\n"
3835: + " return;\n"
3836: + " }\n"
3837: + " m_objStatus = newVal;\n"
3838: + "}\n"
3839: + "function put_PollInterval(newVal)\n"
3840: + "{\n"
3841: + " m_iPollInterval = Number(newVal);\n"
3842: + "}\n"
3843: + "function get_PollInterval()\n"
3844: + "{\n"
3845: + " return m_iPollInterval;\n"
3846: + "}\n"
3847: + "function put_readOnly(newVal)\n"
3848: + "{\n"
3849: + " if(\"true\" == String(newVal))\n"
3850: + " {\n"
3851: + " m_fReadOnly = true;\n"
3852: + " }\n"
3853: + " else\n"
3854: + " {\n"
3855: + " m_fReadOnly = false;\n"
3856: + " } \n"
3857: + "}\n"
3858: + "function get_readOnly()\n"
3859: + "{\n"
3860: + " return m_fReadOnly;\n"
3861: + "}\n"
3862: + "function put_Day(newVal)\n"
3863: + "{\n"
3864: + " m_objMainDate.setDate(Number(newVal));\n"
3865: + "}\n"
3866: + "function get_Day()\n"
3867: + "{\n"
3868: + " return m_objSelectedStart.getDate();\n"
3869: + "}\n"
3870: + "function put_Month(newVal)\n"
3871: + "{\n"
3872: + " m_objMainDate.setMonth(Number(newVal));\n"
3873: + "}\n"
3874: + "function get_Month()\n"
3875: + "{\n"
3876: + " return m_objSelectedStart.getMonth();\n"
3877: + "}\n"
3878: + "function put_Year(newVal)\n"
3879: + "{\n"
3880: + " m_objMainDate.setYear(Number(newVal)); \n"
3881: + "}\n"
3882: + "function get_Year()\n"
3883: + "{\n"
3884: + " return m_objSelectedStart.getFullYear();\n"
3885: + "}\n"
3886: + "function get_FullYear()\n"
3887: + "{\n"
3888: + " return m_objSelectedStart.getFullYear();\n"
3889: + "}\n"
3890: + "function put_FullYear(newVal)\n"
3891: + "{\n"
3892: + " m_objMainDate.setFullYear(Number(newVal)); \n"
3893: + "}\n"
3894: + "function put_caltext(newVal)\n"
3895: + "{\n"
3896: + "L_szUpdatingBold = newVal;\n"
3897: + "}\n"
3898: + "function get_caltext()\n"
3899: + "{\n"
3900: + "return(L_szUpdatingBold);\n"
3901: + "}\n"
3902: + "function put_viewtext(newVal)\n"
3903: + "{\n"
3904: + "L_szUpdating = newVal;\n"
3905: + "}\n"
3906: + "function get_viewtext()\n"
3907: + "{\n"
3908: + "return(L_szUpdating);\n"
3909: + "}\n"
3910: + "//Causes a refresh of all the data for the current view\n"
3911: + "function f_refresh()\n"
3912: + "{\n"
3913: + " mfGetAppointments(true,true,false);\n"
3914: + "}\n"
3915: + JSWrapperHelper.CONVERT_EXPRESSION_FUNCTION_JS;
3916:
3917: String lJSFuncRules = "<Function type=\"EXPRESSION\" name=\"*XMLhttp*.open\" paramPatterns=\",y,\"/><Function type=\"EXPRESSION\" name=\"*XSL.load\" paramPatterns=\"y\"/>";
3918: RuleSet lRuleSet = CreateRuleSet
3919: .withHTMLJSTokenJSVarJSFunRules("", "", lJSFuncRules);
3920: Rewriter lRewriter = RewriterPool.create(lRuleSet,
3921: LanguageConstants.JS_MIME);
3922: String lResult = lRewriter.rewrite(lInput,
3923: getDefaultJSTranslator());
3924: assertEquals(lExpectation, lResult);
3925: }//testOutllokExchangeCalendarHTC1()
3926:
3927: public void testEntityBugRelated() throws Exception {
3928: String lInput = " m_objXMLhttpBold.open(\"SEARCH\", folderURL, true);\n";
3929:
3930: String lExpectation = " m_objXMLhttpBold.open(\"SEARCH\","
3931: + JSWrapperHelper.CONVERT_EXPRESSION_FUNCTION_WRAP_START
3932: + " folderURL), true);\n"
3933: + JSWrapperHelper.CONVERT_EXPRESSION_FUNCTION_JS;
3934:
3935: String lJSFuncRules = "<Function type=\"EXPRESSION\" name=\"*XMLhttp*.open\" paramPatterns=\",y,\"/><Function type=\"EXPRESSION\" name=\"*XSL.load\" paramPatterns=\"y\"/>";
3936: RuleSet lRuleSet = CreateRuleSet
3937: .withHTMLJSTokenJSVarJSFunRules("", "", lJSFuncRules);
3938: Rewriter lRewriter = RewriterPool.create(lRuleSet,
3939: LanguageConstants.JS_MIME);
3940: String lResult = lRewriter.rewrite(lInput,
3941: getDefaultJSTranslator());
3942: assertEquals(lExpectation, lResult);
3943: }//testEntityBugRelated()
3944:
3945: public static void main(String[] args) {
3946: BasicTestCase.run(TestJSGeneral.class);
3947: TestSuite testSuite = new TestSuite();
3948: testSuite.addTest(new TestJSGeneral(
3949: "testOutllokExchangeCalendarHTC"));
3950: //BasicTestCase.run( testSuite );
3951: }//main()
3952: }//class TestJSGeneral
|