/*
 * ====================================================================
 * $Id: SDInit.js 231 2011-04-14 01:27:44Z dgd $
 * Copyright � 2009 - 2010 David DeGroote, Symmetric Designs. All rights reserved.
 */
if(typeof SD==="undefined"){SD={}}else{if(typeof SD!=="object"){throw new Error("SD exists and is not an object!")}}function clone(c){if(c===null||typeof(c)!=="object"){return c}var a=new c.constructor();for(var b in c){if(c.hasOwnProperty(b)){a[b]=clone(c[b])}}return a}
/*
 * gCalMarkup is a Joomla content plugin to allow the easy insertion of
 * Google Calendars in Joomla! articles using a template mechanism to
 * format each calendar event.
 *
 * $Id: gCalMarkupFull2.js 123 2010-11-05 16:17:21Z dgd $
 * Copyright � 2009 - 2010 David DeGroote, Symmetric Designs. All rights reserved.
 * 
 * The Javascript portion of gCalMarkup is licensed for use on a single domain and may not be copied and/or
 * redistributed.  Additional copies can be purchased at http://SymmetricDesigns.com .
 * 
 * THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE. 
 */
SD.tempVersion="V015";SD.tempSubversion="B110422";if(SD["gCalMarkup"+SD.tempVersion]){throw new Error("SD.gCalMarkup"+SD.tempVersion+" already exists!")}SD.gCalMarkupTemp=SD["gCalMarkup"+SD.tempVersion]={};SD.gCalMarkupTemp.checkTitle=function(a,b){return b};SD.gCalMarkupTemp.checkContent=function(b,a){return a};SD.gCalMarkupTemp.version=SD.tempVersion;SD.gCalMarkupTemp.subversion=SD.tempSubversion;delete SD.tempVersion;delete SD.tempSubversion;SD.gCalMarkupTemp.startup=function(a){SD.console.debug("gCalMarkup.startup()...",1);google.gdata.client.init(this.handleGDError);for(var b in this.groups[a]){if(this.groups[a].hasOwnProperty(b)){var d=this.groups[a][b];for(var c in d._calendars){if(d._calendars.hasOwnProperty(c)){this.group.selectionChanged(a,false,c,b)}}}}};SD.gCalMarkupTemp.myElementWithId=function(c,a){if(c.nodeType===1){if(c.getAttribute("id")===a){return c}}var b;for(var d=0;d<c.childNodes.length;d++){if(c.childNodes[d].nodeType===1){if((b=this.myElementWithId(c.childNodes[d],a))!==null){return b}}}return false};SD.gCalMarkupTemp.getMonthName=function(b){var a=["January","February","March","April","May","June","July","August","September","October","November","December"];return a[b]};SD.gCalMarkupTemp.getDayName=function(a){var b=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];return b[a]};SD.gCalMarkupTemp.escapeHTML=function(a){return a.replace(/&/g,"&#x26").replace(/\'/g,"&#x27").replace(/\"/g,"&#x22").replace(/</g,"&#x3C").replace(/>/g,"&#x3E")};SD.gCalMarkupTemp.padNumber=function(a,c){var b=a.toString();while(b.length<c){b="0"+b}return b};SD.gCalMarkupTemp.handleGDError=function(a){if(a instanceof Error){SD.console.error(a.message+" (handleGDError(): Error at line "+a.lineNumber+" in "+a.fileName+")")}else{SD.console.error(a.toString())}};SD.gCalMarkupTemp.copyStyle=function(a,e){var d=a.style;for(var f in d){if(d.hasOwnProperty&&d.hasOwnProperty(f)){var b=d[f];var c=a.getStyle(b);e.setStyle(b,c)}}};SD.gCalMarkupTemp.groups={};SD.gCalMarkupTemp.group=(function(){function a(i,c){this.gCalMarkup=i;this.gCalMarkup.group.splitId(c,1);for(var b in c){if(c.hasOwnProperty(b)){this[b]=c[b]}}if(this.id===undefined){SD.console.error("Article "+this.articleCount+':group(): No group id specified (e.g. id="a")!');return}if(this.maxResults===undefined){this.maxResults=50}this.prefix=this.gCalMarkup.markupTag;if(this.articleCount>1){this.prefix+="."+this.articleCount}this._calendars={};this.mainElement=this.getElement("main");this.categorySelectElement=this.getElement("categorySelect");this.statusElement=this.getElement("status");this.consoleElement=this.getElement("sdconsole");var f=this.getElement("mainTemplate");var e=this.getElement("monthTemplate");var d=this.getElement("categorySelectTemplate");if(this.mainElement===null){SD.console.error("Article "+this.articleCount+":group(): an HTML element with id 'main', or 'main."+this.id+"' does not exist on this page!");return}if(f===null){SD.console.error("Article "+this.articleCount+":group(): a HTML element with id 'mainTemplate', or 'mainTemplate."+this.id+"' does not exist on this page!");return}if(this.categorySelectElement!==null){if(d===null){SD.console.error("Article "+this.articleCount+":group(): a HTML element with id 'categorySelectTemplate' is required when there is a categorySelect element!");return}}this.mainTemplateElementId=this.getElementId("mainTemplate");this.monthTemplateElementId=this.getElementId("monthTemplate");this.categorySelectTemplateElementId=this.getElementId("categorySelectTemplate");this.mainTemplate=this.getTemplateString(f);this.monthTemplate=this.getTemplateString(e);this.categorySelectTemplate=this.getTemplateString(d);if(this.gCalMarkup.groups[this.articleCount]===undefined){this.gCalMarkup.groups[this.articleCount]={}}SD.console.debug("Article "+this.articleCount+":group(): Creating group "+this.id,2);if(this.gCalMarkup.groups[this.articleCount][this.id]!==undefined){SD.console.warn("Article "+this.articleCount+":group(): A group with the name '"+this.id+"' already exists!");return}var h=0;for(var g in this.gCalMarkup.groups[this.articleCount]){if(this.gCalMarkup.groups[this.articleCount].hasOwnProperty(g)){h++}}if((this.gCalMarkup.version.indexOf("Demo",this.gCalMarkup.version.length-4)!==-1)&&h>=1){SD.console.warn("Article "+this.articleCount+":group(): Could not create group "+this.id+".  Demo version limited to 1 group.");return}this.gCalMarkup.groups[this.articleCount][this.id]=this;SD.console.log("Article "+this.articleCount+":group(): created group "+this.id+" with maxResults="+this.maxResults)}return a}());SD.gCalMarkupTemp.group.splitId=function(a,c){if(a.id===undefined||a.id===null){a.id="_default._default._default"}var b=a.id.split(".");var d=b.length;for(ii=d;ii<c;ii++){b[2]=b[1];b[1]=b[0];b[0]="_default"}switch(c){case 3:a.categoryId=b[2];a.calendarId=b[1];a.groupId=b[0];break;case 2:a.calendarId=b[1];a.groupId=b[0];break;case 1:a.groupId=b[0];break}};SD.gCalMarkupTemp.group.getGroup=function(b){if(this.gCalMarkup.groups[b.articleCount]===undefined){this.gCalMarkup.groups[b.articleCount]=[]}if(this.gCalMarkup.groups[b.articleCount][b.groupId]===undefined){var a=new this.gCalMarkup.group(this.gCalMarkup,{articleCount:b.articleCount,id:b.groupId})}var c=this.gCalMarkup.groups[b.articleCount][b.groupId];return c};SD.gCalMarkupTemp.group.addCalendar=function(a){this.gCalMarkup.group.splitId(a,2);var e=this.gCalMarkup.group.getGroup(a);if(e===undefined){SD.console.warn("Article "+a.articleCount+":addCalendar(): calendar '"+a.calendarId+"' could not be added to group '"+a.groupId+"'!");return}var d=new this.gCalMarkup.calendar(this.gCalMarkup,a);if(e._calendars[a.calendarId]!==undefined){SD.console.warn("Article "+a.articleCount+":addCalendar(): calendar '"+a.calendarId+"' already exists in group '"+a.groupId+"'!");return}var b=0;for(var c in e._calendars){if(e._calendars.hasOwnProperty(c)){b++}}if((this.gCalMarkup.version.indexOf("Demo",this.gCalMarkup.version.length-4)!==-1)&&b>=1){SD.console.warn("Article "+a.articleCount+":addCalendar(): Could not create calendar "+a.id+".  Demo version limited to 1 calendar.");return}e._calendars[a.calendarId]=d;SD.console.log("Article "+a.articleCount+":addCalendar(): added calendar "+a.calendarId+" to group "+e.id)};SD.gCalMarkupTemp.group.addCategory=function(b){var a;this.gCalMarkup.group.splitId(b,3);var d=this.gCalMarkup.group.getGroup(b);if(d===undefined){SD.console.warn("Article "+b.articleCount+":addCategory(): category '"+b.id+"' could not be added to group '"+b.groupId+"'!");return}if(b.calendarId===""){d._category={};for(a in b){if(b.hasOwnProperty(a)){d._category[a]=b[a]}}SD.console.debug("Article "+b.articleCount+':addCategory(): added group category to group "'+b.groupId+'" (title:'+d._category.title+")");return}var c=d._calendars[b.calendarId];if(c===undefined){SD.console.warn("Article "+b.articleCount+":addCategory(): category '"+b.id+"' could not be added.  Calendar '"+b.calendarId+"' does not exist in group '"+b.groupId+"'");return}if(b.categoryId===""){c._category={};for(a in b){if(b.hasOwnProperty(a)){c._category[a]=b[a]}}SD.console.debug("Article "+b.articleCount+":addCategory(): added calendar category to calendar "+c._category.groupId+"."+c._category.calendarId);return}if(c._categories===undefined){c._categories={}}var f=0;for(var e in c._categories){if(c._categories.hasOwnProperty(e)){f++}}if((this.gCalMarkup.version.indexOf("Demo",this.gCalMarkup.version.length-4)!==-1)&&f>=2){SD.console.warn("Article "+b.articleCount+":addCategory(): Could not create category "+b.id+".  Demo version limited to 2 category.");return}c._categories[b.categoryId]={};for(a in b){if(b.hasOwnProperty(a)){c._categories[b.categoryId][a]=b[a]}}SD.console.debug("Article "+b.articleCount+':addCategory(): added event category "'+b.categoryId+'" to group "'+b.groupId+'", calendar "'+c.id+'" (title:'+c._categories[b.categoryId].title+")");return};SD.gCalMarkupTemp.group.displayGroup=function(b,d,a){var c;if(d===""){d="_default"}c=this.gCalMarkup.groups[b][d];if(c===undefined){SD.console.debug("Article "+b+":displayGroup():group "+d+" does not exist",1)}else{c.display(a)}};SD.gCalMarkupTemp.group.selectionChanged=function(c,f,i,d){SD.console.debug("Article "+c+":selectionChanged():single="+f+", articleCount="+c+", calendarId="+i+", groupId="+d,4);if(d===""){d="_default"}var g=this.gCalMarkup.groups[c][d];if(g===undefined){SD.console.error("Article "+c+":selectionChanged():group doesn't exist!:"+d);return}if(i in g._calendars){var a=g.getElement("calendarSelect",i);if(a===null){g._calendars[i].loadCalendar(null)}else{if(f){var j=a.name;var e=document.getElementsByName(j);for(var h=0;h<e.length;h++){e[h].checked=false}for(var b in g._calendars){if(g._calendars.hasOwnProperty(b)){g._calendars[b].unloadCalendar(a)}}a.checked=true;g._calendars[i].loadCalendar(a)}else{if(a.checked){g._calendars[i].loadCalendar(a)}else{g._calendars[i].unloadCalendar(a)}}}return}SD.console.error("Article "+args.articleCount+":selectionChanged(): calendar "+i+" not found.")};SD.gCalMarkupTemp.group.dateStartChanged=function(a,c,f){SD.console.debug("Article "+a+":dateStartChanged():groupId="+c,4);if(c===""){c="_default"}var e=this.gCalMarkup.groups[a][c];if(e===undefined){SD.console.error("Article "+a+":dateStartChanged():group doesn't exist!:"+c);return}for(var d in e._calendars){if(e._calendars.hasOwnProperty(d)){if(f!==0){e._calendars[d].offsetDays+=f}else{e._calendars[d].offsetDays=0}var b=e.getElement("calendarSelect",d);if(b===null||b.checked){e._calendars[d].loadCalendar(b)}}}};SD.gCalMarkupTemp.group.entrySort=function(e,f){aa=e.entry;bb=f.entry;var b=aa.getTimes();var d=0;var h=0;if(b.length>0){d=b[0].getStartTime();h=d.getDate()}var c=bb.getTimes();var a=0;var g=0;if(c.length>0){a=c[0].getStartTime();g=a.getDate()}if(h>g){return 1}if(h<g){return -1}return 0};SD.gCalMarkupTemp.group.categorySort=function(b,a){if(b.title>a.title){return 1}if(b.title<a.title){return -1}return 0};SD.gCalMarkupTemp.group.prototype.display=function(){var q;var g;var p;var a;SD.console.debug("Article "+this.articleCount+":display(): Displaying group "+this.id,1);if(this.mainElement===null){if(this.groupId==="_default"){SD.console.error("Article "+this.articleCount+":display(): template does not exist!  Element with id='gCalMarkup.parent does not exist.")}else{SD.console.error("Article "+this.articleCount+":display(): template does not exist!  Element with id='gCalMarkup.parent."+this.id+"' does not exist for group '"+this.id+"'")}return}while(this.mainElement.hasChildNodes()){this.mainElement.removeChild(this.mainElement.lastChild)}var m=[];this.categoryList={};var e=0;for(p in this._calendars){if(this._calendars.hasOwnProperty(p)){e++;this._calendars[p].xyzzy="abcd";g=this._calendars[p];this._calendars[p].xyzzy2="efgh";if(g._feedRoot!==undefined){var i=g._feedRoot.feed.getEntries();SD.console.debug("Article "+this.articleCount+":display(): "+i.length+" entries from calendar "+g.id,1);for(q=0;(q<i.length&&q<g.maxResults);q++){m.push({entry:i[q],calendar:g,group:this});this._calendars[p].xyzzy3="mnop"}}else{SD.console.debug("Article "+this.articleCount+":display(): feed hasn't returned yet for calendar "+g.id,1)}}}SD.console.debug("Article "+this.articleCount+":display(): total of "+m.length+" entries received.",2);if(e===0){SD.console.debug("Article "+this.articleCount+":display(): no calendars in group "+this.id,1)}m.sort(this.gCalMarkup.group.entrySort);var k=-1;var j=-1;this.entryNum=0;SD.console.debug("Article "+this.articleCount+":display(): insert first "+this.maxResults+" visible entries out of "+m.length+" into DOM...",1);for(q=0;(q<m.length&&this.entryNum<this.maxResults);q++){var o=m[q].entry.getTimes()[0].getStartTime().getDate();var b=m[q].entry.getTimes()[0].getEndTime().getDate();var l=this.processTemplate(m[q],null,o,b,this.mainTemplate);if(!l){SD.console.debug("Article "+this.articleCount+":insertEntry(): skipping entry",4);continue}if(this.monthTemplate!==null){if((o.getMonth()!==k)||(o.getYear()!==j)){SD.console.debug("Article "+this.articleCount+":display(): inserting month header for "+o,4);var n=this.processTemplate(m[q],null,o,b,this.monthTemplate);this.insertTemplate(this.mainElement,m[q],n,this.monthTemplateElementId);k=o.getMonth();j=o.getYear()}}this.insertTemplate(this.mainElement,m[q],l,this.mainTemplateElementId);this.entryNum++;SD.console.debug("Article "+this.articleCount+":display(): this.entryNum= "+this.entryNum,4)}SD.console.log("Article "+this.articleCount+":display(): inserted "+this.entryNum+" entries into group "+this.id+" calendar.",1);if(this.categorySelectElement){SD.console.debug("Article "+this.articleCount+":display(): categorySelectElement="+this.categorySelectElement,2);var d=this.categorySelectElement.value;var h=[];var f;this.categorySelectElement.length=0;if(this._category!==undefined){SD.console.debug("Article "+this.articleCount+":display(): adding group category "+this._category.id+":"+this._category.title,2);f=this.processTemplate(null,this._category,null,null,this.categorySelectTemplate);this.insertTemplate(this.categorySelectElement,null,f,this.categorySelectTemplateElementId)}for(p in this._calendars){if(this._calendars.hasOwnProperty(p)){SD.console.debug("Article "+this.articleCount+":display(): looking for categories in calendar "+p,2);g=this._calendars[p];if(g._feedRoot===undefined){continue}if(g._category!==undefined){a=g._category;a.calendar=g;a.group=this;h.push(a)}if(g._categories!==undefined){for(var c in g._categories){if(g._categories.hasOwnProperty(c)){a=g._categories[c];a.calendar=g;h.push(a)}}}}}h.sort(this.gCalMarkup.group.categorySort);for(q=0;q<h.length;q++){SD.console.debug("Article "+this.articleCount+":display(): inserting select option for category "+h[q].id,2);f=this.processTemplate(null,h[q],null,null,this.categorySelectTemplate);this.insertTemplate(this.categorySelectElement,null,f,this.categorySelectTemplateElementId)}if(d===""){this.categorySelectElement.selectedIndex=0}else{this.categorySelectElement.value=d}if(this.categorySelectElement.selectedIndex>=0){this.categorySelectElement.className=this.categorySelectElement.options[this.categorySelectElement.selectedIndex].className}}this.updateStatus()};SD.gCalMarkupTemp.group.prototype.processTemplate=function(M,k,a,d,b){var i={template:b,entryObject:M};i.template=i.template.replace(new RegExp(this.gCalMarkup.markupTag+"\\.(\\w+?)\\.x","ig"),"$1");var y;var I;var r;var A;var h;if(M!==null){y=M.entry;I=M.calendar;r=M.group;var e="--";var L="--";var H="--";var E="--";var f="--";var q="--";var v="";var z="";var K="";var p="";var g="";var D="";if(!M.entry.getTimes()[0].getStartTime().isDateOnly()){f=e=a.getHours();v="am";if(e===0){e=12}if(e>=12){v="pm"}if(e>12){e-=12}H=this.gCalMarkup.padNumber(a.getMinutes(),2);K=e+":"+H+" "+v;p=f+":"+H;q=L=a.getUTCHours();z="am";if(L===0){L=12}if(L>=12){z="pm"}if(L>12){L-=12}E=this.gCalMarkup.padNumber(a.getUTCMinutes(),2);g=L+":"+E+" "+z;D=q+":"+E}var N="--";var c="--";var G="--";var w="--";var u="--";var t="--";var C="";var m="";var j="";var O="";var l="";var R="";if(!M.entry.getTimes()[0].getEndTime().isDateOnly()){u=N=d.getHours();C="am";if(N===0){N=12}if(N>=12){C="pm"}if(N>12){N-=12}G=this.gCalMarkup.padNumber(d.getMinutes(),2);j=N+":"+G+" "+C;O=u+":"+G;t=c=d.getUTCHours();m="am";if(c===0){c=12}if(c>=12){m="pm"}if(c>12){c-=12}w=this.gCalMarkup.padNumber(d.getUTCMinutes(),2);l=c+":"+w+" "+m;R=t+":"+w}SD.console.debug("Article "+this.articleCount+":processTemplate: markupTag= "+this.gCalMarkup.markupTag,4);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventTime/}","ig"),K);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventTimeUTC/}","ig"),g);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventTime24/}","ig"),p);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventTime24UTC/}","ig"),D);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndTime/}","ig"),j);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndTimeUTC/}","ig"),l);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndTime24/}","ig"),O);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndTime24UTC/}","ig"),R);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventHours/}","ig"),e);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventHoursUTC/}","ig"),L);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventHours24/}","ig"),f);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventHours24UTC/}","ig"),q);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndHours/}","ig"),N);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndHoursUTC/}","ig"),c);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndHours24/}","ig"),u);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndHours24UTC/}","ig"),t);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventMinutes/}","ig"),H);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventMinutesUTC/}","ig"),E);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndMinutes/}","ig"),G);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndMinutesUTC/}","ig"),w);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventAmPm/}","ig"),v);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventAmPmUTC/}","ig"),z);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndAmPm/}","ig"),C);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndAmPmUTC/}","ig"),m);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventTimeMS/}","ig"),a.getTime());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventDay/}","ig"),a.getDate());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventDayText/}","ig"),this.gCalMarkup.getDayName(a.getDay()));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventDayTextShort/}","ig"),this.gCalMarkup.getDayName(a.getDay()).substr(0,3));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventDayUTC/}","ig"),a.getUTCDate());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventDayUTCText/}","ig"),this.gCalMarkup.getDayName(a.getUTCDay()));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventDayUTCTextShort/}","ig"),this.gCalMarkup.getDayName(a.getUTCDay()).substr(0,3));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventMonth/}","ig"),a.getMonth()+1);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventMonthText/}","ig"),this.gCalMarkup.getMonthName(a.getMonth()));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventMonthUTC/}","ig"),a.getUTCMonth()+1);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventMonthUTCText/}","ig"),this.gCalMarkup.getMonthName(a.getUTCMonth()));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventYear/}","ig"),a.getFullYear());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventYearUTC/}","ig"),a.getUTCFullYear());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventYearShort/}","ig"),a.getYear());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventTimezoneOffset/}","ig"),a.getTimezoneOffset());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventDateString/}","ig"),a.toDateString());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventDateStringUTC/}","ig"),a.toUTCString());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventLocalDateString/}","ig"),a.toLocaleDateString());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventLocalTimeString/}","ig"),a.toLocaleTimeString());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventLocalString/}","ig"),a.toLocaleString());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventDateToString/}","ig"),a.toString());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndTimeMS/}","ig"),d.getTime());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndDay/}","ig"),d.getDate());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndDayText/}","ig"),this.gCalMarkup.getDayName(d.getDay()));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndDayTextShort/}","ig"),this.gCalMarkup.getDayName(d.getDay()).substr(0,3));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndDayUTC/}","ig"),d.getUTCDate());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndDayUTCText/}","ig"),this.gCalMarkup.getDayName(d.getUTCDay()));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndDayTextShort/}","ig"),this.gCalMarkup.getDayName(d.getUTCDay()).substr(0,3));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndMonth/}","ig"),d.getMonth()+1);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndMonthText/}","ig"),this.gCalMarkup.getMonthName(d.getMonth()));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndMonthUTC/}","ig"),d.getUTCMonth()+1);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndMonthUTCText/}","ig"),this.gCalMarkup.getMonthName(d.getUTCMonth()));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndYear/}","ig"),d.getFullYear());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndYearUTC/}","ig"),d.getUTCFullYear());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndYearShort/}","ig"),d.getYear());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndTimezoneOffset/}","ig"),d.getTimezoneOffset());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndDateString/}","ig"),d.toDateString());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndDateStringUTC/}","ig"),d.toUTCString());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndLocalDateString/}","ig"),d.toLocaleDateString());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndLocalTimeString/}","ig"),d.toLocaleTimeString());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndLocalString/}","ig"),d.toLocaleString());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventEndDateToString/}","ig"),d.toString());i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventTitle/}","ig"),this.gCalMarkup.checkTitle(this.entryNum,y.getTitle().getText()));i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventLocation/}","ig"),y.gd$where[0].valueString);if(y.getHtmlLink()!==null){var P=y.getHtmlLink();var n=y.getHtmlLink().getHref();i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventURL/}","ig"),y.getHtmlLink().getHref())}i.content=y.content.$t;i.content=this.gCalMarkup.escapeHTML(i.content);i.content=i.content.replace(/\{br\/?\}/ig,"<br/>");i.content=i.content.replace(/\{(\/)?em\}/ig,"<$1em>");i.content=i.content.replace(/\{(\/)?b\}/ig,"<$1b>");i.content=i.content.replace(/\[link=(.+?)\s+(.+?)\]/ig,"<a href='$1'>$2</a>");i.content=i.content.replace(/\[link=(.+?)\]/ig,"<a href='$1'>$1</a>");i.content=i.content.replace(/\[email=(.+?)\s+(.+?)\]/ig,"<a href='mailto:$1'>$2</a>");i.content=i.content.replace(/\[email=(.+?)\]/ig,"<a href='mailto:$1'>$1</a>");M.eventCategories=[];i.content=this.findContentCategories(M.eventCategories,i.content);i.content=this.findContentTags(M,i.content);var x=false;if(this.categorySelectElement){var B=this.categorySelectElement.selectedIndex;SD.console.debug("Article "+this.articleCount+":processTemplate(): selectedIndex="+B,4);if(B<0){x=true;SD.console.debug("Article "+this.articleCount+":processTemplate(): no selected category:"+B+".  Showing all events",2)}else{var J=this.categorySelectElement.options[B].value;SD.console.debug("Article "+this.articleCount+":processTemplate(): selectedValue="+J,4);x=this.isEventInCategory(J,r,I,M)}}else{SD.console.debug("Article "+this.articleCount+":processTemplate(): here 4",4);if(r.groupId==="_default"){x=true}else{if(r._category!==undefined){x=true}else{if(I._category!==undefined){x=true}else{if(I._categories!==undefined){SD.console.debug("Article "+this.articleCount+":processTemplate(): here 5",4);for(A=0;A<M.eventCategories.length&&!x;A++){var s=M.eventCategories[A];var Q=I._categories;for(var o in Q){if(Q.hasOwnProperty(o)){var F={id:I._categories[o].id};this.gCalMarkup.group.splitId(F,3);if(s===F.categoryId){x=true;break}}}}}}}}}if(!x){SD.console.debug("Article "+this.articleCount+":processTemplate(): no category match",2);return false}h=new RegExp("{"+this.gCalMarkup.markupTag+"\\s+tag=(\\w+?)/}","ig");this.tagValuesTemp=[];this.processTemplatePattern(i,h,I,k,this.handleContentTagPattern);h=new RegExp("{"+this.gCalMarkup.markupTag+"\\s+select=(.+?)/}","ig");this.processTemplatePattern(i,h,I,k,this.handleTemplateTagSelect);i.content=this.gCalMarkup.checkContent(this.entryNum,i.content);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventDescription/}","ig"),i.content);descriptionNoHTML=this.gCalMarkup.escapeHTML(i.content);i.template=i.template.replace(new RegExp("{"+this.gCalMarkup.markupTag+"\\s+_eventDescriptionNoHTML/}","ig"),descriptionNoHTML)}if(I===undefined){I=k.calendar}h=new RegExp("{"+this.gCalMarkup.markupTag+"\\s+(\\w+?)(\\[([\\w,]+)\\])?\\/}","ig");this.processTemplatePattern(i,h,I,k,this.handleProperty);h=new RegExp("{"+this.gCalMarkup.markupTag+"\\s+iftag=(\\w+?)\\s+?(.*?)/}","ig");this.processTemplatePattern(i,h,I,k,this.handleContentTag2Pattern);return i.template};SD.gCalMarkupTemp.group.prototype.isEventInCategory=function(a,h,e,f){var g=false;var b={id:a};this.gCalMarkup.group.splitId(b,3);var d=b.groupId;var i=b.calendarId;var c=b.categoryId;SD.console.debug("Article "+this.articleCount+":processTemplate(): groupId/calendarId/categoryId="+d+"/"+i+"/"+c,2);if(c===""){if(i===""){if(h._category!==undefined){g=true;SD.console.debug("Article "+this.articleCount+":processTemplate(): category for group "+d,2)}else{SD.console.debug("Article "+this.articleCount+":processTemplate(): no currently selected group category.",2)}}else{if(e._category!==undefined){if(i===e._category.calendarId){g=true;SD.console.debug("Article "+this.articleCount+":processTemplate(): category for calendar ="+i,2)}else{SD.console.debug("Article "+this.articleCount+":processTemplate(): selected category id doesn't match category of calendar current event is from:"+e._category.id,2)}}else{SD.console.debug("Article "+this.articleCount+":processTemplate(): current calendar doesn't have a category.",2)}}}if(!g){for(ii=0;ii<f.eventCategories.length&&!g;ii++){if(c===f.eventCategories[ii]){g=true;break}}if(!g){SD.console.debug("Article "+this.articleCount+":processTemplate(): categoryId doesn't match any event categories.",2)}}return g};SD.gCalMarkupTemp.group.prototype.updateStatus=function(){SD.console.debug("Article "+this.articleCount+":gCalMarkupGroup.updateStatus:this.id="+this.id,4);var c=0;var b=0;for(var a in this._calendars){if(this._calendars.hasOwnProperty(a)){var d=this._calendars[a];if(d._feedRoot!==undefined){c++}b++}}if(this.statusElement!==null){this.statusElement.innerHTML=this.entryNum+" entries loaded from "+c+" of "+b+" calendars.";SD.console.log(this.entryNum+" entries loaded from "+c+" of "+b+" calendars.")}};SD.gCalMarkupTemp.group.prototype.getElementId=function(a,c){var b=this.prefix+"."+a;var d="";if(c!==undefined){d="."+c}a=b+"."+this.groupId+d;element=$(a);if(element!==null){return element.id}a=b+d;element=$(a);if(element!==null){return element.id}return null};SD.gCalMarkupTemp.group.prototype.getElement=function(a,d){SD.console.debug("Article "+this.articleCount+":getElement():start",4);var c=this.prefix+"."+a;var e="";if(d!==undefined){e="."+d}a=c+".container."+this.groupId+e;var b=$(a);if(b!==null){return b}a=c+"."+this.groupId+e;b=$(a);if(b!==null){return b}a=c+".container"+e;b=$(a);if(b!==null){return b}a=c+e;b=$(a);return b};SD.gCalMarkupTemp.group.prototype.getTemplateString=function(a){if(a===null){return null}elementString=a.innerHTML.replace(/\n/g,"");return elementString};SD.gCalMarkupTemp.group.prototype.insertTemplate=function(b,h,f,d){var c=new Element("div");c.innerHTML=f;c.inject(b);this.removeElements(h,c);var g=this.gCalMarkup.myElementWithId(c,d);if(g===false){g=c}var a=g.childNodes.length;for(var e=0;e<a;e++){b.appendChild(g.firstChild)}b.removeChild(c)};SD.gCalMarkupTemp.group.prototype.removeElements=function(m,h){var o,k;if(m===null){return false}if(m===undefined){return false}var d=m.eventCategories;var n=m.group;var g=m.calendar;var i=false;var e=h.attributes;if(e!==undefined){for(o=0;o<e.length;o++){var b=e[o];var j=this.gCalMarkup.markupTag+"gcalmarkup.ifcategory";if(b.name.toLowerCase()==="gcalcategory"){i=true;if(n._category!==undefined){if(n._category.id===b.value){i=false;break}}if(g._category!==undefined){if(g._category.id===b.value){i=false;break}}var c={id:b.value};this.gCalMarkup.group.splitId(c,2);if(c.calendarId===""||c.calendarId===g.id){for(k=0;k<d.length;k++){if(d[k]===c.categoryId){i=false;break}}}}if(b.name.toLowerCase()===(this.gCalMarkup.markupTag+".ifProperty").toLowerCase()||b.name.toLowerCase()===(this.gCalMarkup.markupTag+".ifPropertyAny").toLowerCase()||b.name.toLowerCase()===(this.gCalMarkup.markupTag+".ifPropertyAll").toLowerCase()){var a=b.value.split(",");i=true;if(b.name===this.gCalMarkup.markupTag+".ifPropertyAll"){i=false}var l={entryObject:m};for(k=0;k<a.length;k++){property=this.handleProperty(l,n,g,null,["",a[k].trim(),"",""]);if(property!==""){i=false;if(b.name.toLowerCase()===(this.gCalMarkup.markupTag+".ifPropertyAll").toLowerCase()){i=true}break}}}}}if(i){return true}var f;for(o=0;o<h.childNodes.length;o++){if(h.childNodes[o].nodeType===1){i=this.removeElements(m,h.childNodes[o]);if(i){h.removeChild(h.childNodes[o])}}}return false};SD.gCalMarkupTemp.group.prototype.findContentCategories=function findContentCategories(h,c){var b=new RegExp("\\[category=(.+?)\\]","ig");var a="";var f=0;var e="";var g=false;while((result=b.exec(c))!==null){a+=c.substring(f,result.index);f=b.lastIndex;var d=result[1];h.push(d)}a+=c.substring(f);return a};SD.gCalMarkupTemp.group.prototype.findContentTags=function findContentTags(g,d){var b=new RegExp("\\[(\\w+?)=(.+?)\\]","ig");var a="";var f=0;var e="";while((result=b.exec(d))!==null){a+=d.substring(f,result.index);f=b.lastIndex;var c=result[1];var h=result[2];if(g.properties===undefined){g.properties=[]}if((this.gCalMarkup.version.indexOf("Demo",this.gCalMarkup.version.length-4)!==-1)&&g.properties.length>=2){SD.console.warn("Article "+this.articleCount+":findContentTags(): Could not create content tag "+this.id+".  Demo version limited to 2 content tags.")}else{g.properties[c]=h}}a+=d.substring(f);return a};SD.gCalMarkupTemp.group.prototype.processTemplatePattern=function(d,g,c,a,b){var i=d.template;var e=d.content;var f="";var h=0;var j;while((j=g.exec(i))!==null){f+=i.substring(h,j.index);f+=b(d,this,c,a,j);h=g.lastIndex}f+=i.substring(h);d.template=f;return};SD.gCalMarkupTemp.group.prototype.handleContentTagPattern=function(c,f,e,d,b){var a=b[1];if(c!==undefined){if(c.entryObject!==undefined){if(c.entryObject.properties!==undefined){if(c.entryObject.properties[a]!==undefined){return c.entryObject.properties[a]}}}}return""};SD.gCalMarkupTemp.group.prototype.handleContentTag2Pattern=function(c,f,e,d,b){var a=b[1];var g=b[2];if(c!==undefined){if(c.entryObject!==undefined){if(c.entryObject.properties!==undefined){if(c.entryObject.properties[a]!==undefined){return g}}}}return""};SD.gCalMarkupTemp.group.prototype.handleTemplateTagSelect=function(e,h,c,a,i){var b=i[1];var f=/[^|]+/ig;var g=b.match(f);if(g!==null){var d=h.entryNum%g.length;return g[d]}return""};SD.gCalMarkupTemp.group.prototype.handleProperty=function(j,l,h,e,n){var d=["ep","ec","cp","cc","gp","gc","gcp"];var g=n[0];var o=n[1];var c=n[2];var k=n[3];if(k!==undefined){if(k!==""){d=k.split(",")}}for(var m=0;m<d.length;m++){var b=d[m].replace(/^\s+|\s+$/g,"");switch(b){case"ep":if(j.entryObject){if(j.entryObject.properties){if(j.entryObject.properties[o]){return j.entryObject.properties[o]}}}break;case"cp":if(h){if(h[o]){return h[o]}}break;case"gp":if(l[o]){return l[o]}break;case"gcp":if(h){var f=l._calendars[h.calendarId];if(f!==null){if(f[o]){return f[o]}}}break;case"ec":if(j.entryObject){if(j.entryObject.eventCategories){if(h){if(h._categories){for(var i=0;i<j.entryObject.eventCategories.length;i++){var a=j.entryObject.eventCategories[i];if(h._categories[a]){if(h._categories[a][o]){return h._categories[a][o]}}}}}}}if(e){if(e[o]){return e[o]}}break;case"cc":if(h){if(h._category){if(h._category[o]){return h._category[o]}}}break;case"gc":if(l._category){if(l._category[o]){return l._category[o]}}break}}return""};SD.gCalMarkupTemp.calendar=(function(){function a(e,c){this.gCalMarkup=e;this.gCalMarkup.group.splitId(c,2);for(var b in c){if(c.hasOwnProperty(b)){this[b]=c[b]}}if(this.key===undefined){SD.console.warn("Article "+c.articleCount+":calendar(): required Google calendar key missing.")}if(this.title===null){this.title="Default Calendar"}var d=e.calendar.calendarName(this.articleCount,this.id);this._categories={};this._feedRoot=undefined;this._feedUrl=undefined;if(this.key!==undefined){this._feedUrl="http://www.google.com/calendar/feeds/"+this.key.replace("@","%40")+"/public/full"}SD.console.log("Article "+c.articleCount+":calendar(): created calendar "+d+" with key '"+c.key+"'")}return a}());SD.gCalMarkupTemp.calendar.calendarName=function(a,c){var b=c;if(a>1){b+="."+a}return b};SD.gCalMarkupTemp.calendar.saveFeed=function(g,a,c,d){if(c===""){c="_default"}if(d===""){d="_default"}var f=this.gCalMarkup.groups[a][c];if(f===undefined){SD.console.error("saveFeed(): Internal error: no group found with groupId="+c+" and articleCount="+a+"!");return}var e=f._calendars[d];if(e===undefined){SD.console.error("saveFeed(): Internal error: no calendar found in group "+c+" with calendarId="+d+" and articleCount="+a+"!");return}SD.console.log("Article "+a+": saveFeed(): Saving feed ("+e.key+") for group "+f.id+", calendar "+e.id);e._feedRoot=g;f.display();var b=f.getElement("calendarSelect",d);if(b!==null){b.enabled=true;b.checked=true}};SD.gCalMarkupTemp.calendar.prototype.loadCalendar=function(f){SD.console.debug("loadCalendar():groupId="+this.groupId+", calendarId="+this.calendarId,1);if(this._feedUrl===undefined){SD.console.log("loadCalendar(): _feedUrl undefined (calendar key may be missing).");return}if(f!==null){f.enabled=false;f.checked=false}if(this.maxResults===undefined){this.maxResults=50}if(this.maxDays===undefined){this.maxDays=365}if(this.orderBy===undefined){this.orderBy="starttime"}if(this.sortOrder===undefined){this.sortOrder="ascending"}if(this.futureEvents===undefined){this.futureEvents=false}if(this.singleEvents===undefined){this.singleEvents=true}if(this.offsetDays===undefined){this.offsetDays=0}var g=new google.gdata.calendar.CalendarService("SymmetricDesigns.com-gCalMarkup:"+this.groupId+":"+this.calendarId);var i=new google.gdata.calendar.CalendarEventQuery(this._feedUrl);SD.console.debug("loadCalendar():this._feedUrl()="+this._feedUrl,1);i.setOrderBy(this.orderBy);i.setSortOrder(this.sortOrder);SD.console.debug("loadCalendar():orderBy="+this.orderBy,1);SD.console.debug("loadCalendar():sortOrder="+this.sortOrder,1);i.setFutureEvents(this.futureEvents);SD.console.debug("loadCalendar():futureEvents="+this.futureEvents,1);i.setMaxResults(this.maxResults);SD.console.debug("loadCalendar():maxResults="+this.maxResults,1);var l=new Date();var b=l.getTime();l.setTime(b+this.offsetDays*24*60*60*1000);SD.console.debug("loadCalendar():offsetDays="+this.offsetDays,1);var k=l.getTimezoneOffset();var d=l.getFullYear()+"-"+this.gCalMarkup.padNumber(l.getMonth()+1,2)+"-"+this.gCalMarkup.padNumber(l.getDate(),2);d=d+"T00:00:00.000-";d=d+this.gCalMarkup.padNumber(k/60,2)+":"+this.gCalMarkup.padNumber(k-(k/60)*60,2);var c=google.gdata.DateTime.fromIso8601(d);b=l.getTime();l.setTime(b+this.maxDays*24*60*60*1000);SD.console.debug("loadCalendar():maxDays="+this.maxDays,1);var h=new google.gdata.DateTime(l,false);var e=l.getFullYear()+"-"+this.gCalMarkup.padNumber(l.getMonth()+1,2)+"-"+this.gCalMarkup.padNumber(l.getDate(),2);e=e+"T00:00:00.000-";e=e+this.gCalMarkup.padNumber(k/60,2)+":"+this.gCalMarkup.padNumber(k-(k/60)*60,2);h=google.gdata.DateTime.fromIso8601(e);i.setMinimumStartTime(c);i.setMaximumStartTime(h);SD.console.debug("loadCalendar():startMin="+c,1);SD.console.debug("loadCalendar():startMax="+h,1);i.setSingleEvents(this.singleEvents);SD.console.debug("loadCalendar():singleEvents="+this.singleEvents,1);var a="_";if(this.groupId!=="_default"){a+=this.groupId}a+="_";if(this.calendarId!=="_default"){a+=this.calendarId}if(a==="__"){a=""}var j="gCalMarkup"+this.gCalMarkup.version+"SaveFeedA"+this.articleCount+a;SD.console.debug("loadCalendar():saveFeedFunctionName="+j,1);if(window[j]===undefined){SD.console.error("loadCalendar(): Feed function "+j+" is undefined!",4)}else{g.getEventsFeed(i,window[j],this.gCalMarkup.handleGDError)}SD.console.debug("loadCalendar():query.getFullTextQuery()="+i.getFullTextQuery(),1);SD.console.log("Article "+this.articleCount+": loadCalendar(): requested calendar from Google for group "+this.groupId+", calendar "+this.id+" (maxDays="+this.maxDays+", maxResults="+this.maxResults+", start="+d+", end="+e+")")};SD.gCalMarkupTemp.calendar.prototype.unloadCalendar=function(a){SD.console.debug("unloadCalendar():this.id="+this.id,4);this._feedRoot=undefined;this.gCalMarkup.groups[this.articleCount][this.groupId].display();if(a!==null){a.enabled=false}};SD.DEBUG_LEVEL=1;SD.NOTIFY_METHOD="status";SD.console={};SD.console.log=function(b){if(typeof(console)!=="undefined"){if(typeof(console.log)==="function"){console.log(b)}}var a=document.getElementById("sdConsoleId");if(a!==null){a.innerHTML+="<br/>"+b;return true}return false};SD.console.debug=function(b,a){if(a>SD.DEBUG_LEVEL){return false}return SD.console.log("Debug:"+b)};SD.console.warn=function(a){if(typeof(console)!=="undefined"){if(typeof(console.warn)==="function"){console.warn(a)}}return SD.console.log("Warn:"+a)};SD.console.error=function(a){if(typeof(console)!=="undefined"){if(typeof(console.error)==="function"){console.error(a)}}if(SD.console.log("Error *** :"+a)){return true}switch(SD.NOTIFY_METHOD){case"alert":alert("Error:"+a);break;case"title":document.title=a;break;case"status":window.status=a;break}return true};delete SD.gCalMarkupTemp;google.load("gdata","2");
