if (typeof Zapatec == 'undefined') {
Zapatec = function() {};
}
Zapatec.version = '07-02';
if (typeof zapatecDoNotInclude == 'undefined') {
zapatecDoNotInclude = 0;
}
if (typeof zapatecDoNotLoadThemes == 'undefined') {
zapatecDoNotLoadThemes = 0;
}
if (Zapatec.doNotInclude) {
zapatecDoNotInclude = 1;
}
if (typeof zapatecDict != 'function') {
zapatecTranslate =
Zapatec.translate = function(sPhrase) {
return sPhrase;
};
zapatecTranslateArray =
Zapatec.translateArray = function(aArray) {
return aArray;
};
}
if (typeof Zapatec.zapatecPath == 'undefined') {
Zapatec.zapatecPath = function() {
if (document.documentElement) {
var aTokens = document.documentElement.innerHTML.match(
/<script[^>]+src="([^"]*zapatec(-src)?\.js[^"]*)"/i);
if (aTokens && aTokens.length >= 2) {
aTokens = aTokens[1].split('?');
aTokens = aTokens[0].split('/');
if (Array.prototype.pop) {
aTokens.pop();
} else {
aTokens.length -= 1;
}
return aTokens.length ? aTokens.join('/') + '/' : '';
}
}
return '';
} ();
}
if (typeof zapatecUtils != 'function') {
zapatecUtils =
Zapatec.Utils = function() {};
Zapatec.Utils.getAbsolutePos = function(el,scrollOff) {
var SL = 0,ST = 0;
if (!scrollOff) {
var is_div = /^div$/i.test(el.tagName);
if (is_div && el.scrollLeft)
SL = el.scrollLeft;
if (is_div && el.scrollTop)
ST = el.scrollTop;
}
var r = { x: el.offsetLeft - SL,y: el.offsetTop - ST };
if (el.offsetParent) {
var tmp = this.getAbsolutePos(el.offsetParent);
r.x += tmp.x;
r.y += tmp.y;
}
return r;
};
zapatecUtilsGetElementOffset =
Zapatec.Utils.getElementOffset = function(oEl) {
if (!oEl) {return;}
var iLeft = iTop = iWidth = iHeight = 0;
var sTag;
if (typeof oEl.getBoundingClientRect == 'function') {
var oRect = oEl.getBoundingClientRect();
iLeft = oRect.left;
iTop = oRect.top;
iWidth = oRect.right - iLeft;
iHeight = oRect.bottom - iTop;
iLeft += zapatecUtils.getPageScrollX();
iTop += zapatecUtils.getPageScrollY();
if (Zapatec.is_ie) {
iLeft -= 2;
iTop -= 2;
}
} else {
iWidth = oEl.offsetWidth;
iHeight = oEl.offsetHeight;
var sPos = Zapatec.Utils.getStyleProperty(oEl,'position');
if (sPos == 'fixed') {
iLeft = oEl.offsetLeft + Zapatec.Utils.getPageScrollX();
iTop = oEl.offsetTop + Zapatec.Utils.getPageScrollY();
} else if (sPos == 'absolute') {
while (oEl) {
sTag = oEl.tagName;
if (sTag) {
sTag = sTag.toLowerCase();
if (sTag != 'body' && sTag != 'html' || Zapatec.is_khtml) {
iLeft += parseInt(oEl.offsetLeft,10) || 0;
iTop += parseInt(oEl.offsetTop,10) || 0;
}
}
oEl = oEl.offsetParent;
sTag = oEl ? oEl.tagName : null;
if (sTag) {
sTag = sTag.toLowerCase();
if (sTag != 'body' && sTag != 'html') {
iLeft -= oEl.scrollLeft;
iTop -= oEl.scrollTop;
}
}
}
} else {
var bMoz = (Zapatec.is_gecko && !Zapatec.is_khtml);
var fStyle = Zapatec.Utils.getStyleProperty;
var oP = oEl;
while (oP) {
if (bMoz) {
sTag = oP.tagName;
if (sTag) {
sTag = sTag.toLowerCase();
if (sTag == 'body' && !(fStyle(oP,'-moz-box-sizing') == 'border-box')) {
iLeft += parseInt(fStyle(oP,'border-left-width'));
iTop += parseInt(fStyle(oP,'border-top-width'));
}
}
}
iLeft += parseInt(oP.offsetLeft,10) || 0;
iTop += parseInt(oP.offsetTop,10) || 0;
oP = oP.offsetParent;
}
oP = oEl;
while (oP.parentNode) {
oP = oP.parentNode;
sTag = oP.tagName;
if (sTag) {
sTag = sTag.toLowerCase();
if (sTag != 'body' && sTag != 'html' && sTag != 'tr') {
iLeft -= oP.scrollLeft;
iTop -= oP.scrollTop;
}
}
}
}
}
return {
left: iLeft,
top: iTop,
x: iLeft,
y: iTop,
width: iWidth,
height: iHeight
};
};
Zapatec.Utils.getElementOffsetScrollable = function(oEl) {
var oOffset = zapatecUtilsGetElementOffset(oEl);
if (!oOffset) {return;}
if (oEl.scrollLeft) {
oOffset.left -= oEl.scrollLeft;
oOffset.x = oOffset.left;
}
if (oEl.scrollTop) {
oOffset.top -= oEl.scrollTop;
oOffset.y = oOffset.top;
}
return oOffset;
};
Zapatec.Utils.getElementOffsetRelative = function(oEl) {
var fOffset = zapatecUtils.getElementOffsetScrollable;
var oOffset = fOffset(oEl);
if (!oOffset) {return;}
var oEl = oEl.offsetParent;
while (oEl) {
var sPosition = zapatecUtils.getStyleProperty(oEl,'position');
if (sPosition != 'static') {
var oOffsetParent = fOffset(oEl);
oOffset.left -= oOffsetParent.left;
oOffset.x = oOffset.left;
oOffset.top -= oOffsetParent.top;
oOffset.y = oOffset.top;
return oOffset;
}
oEl = oEl.offsetParent;
}
return oOffset;
};
Zapatec.Utils.fixBoxPosition = function(box,leave) {
var screenX = Zapatec.Utils.getPageScrollX();
var screenY = Zapatec.Utils.getPageScrollY();
var sizes = Zapatec.Utils.getWindowSize();
leave = parseInt(leave,10) || 0;
if (box.x < screenX) {
box.x = screenX + leave;
}
if (box.y < screenY) {
box.y = screenY + leave;
}
if (box.x + box.width > screenX + sizes.width) {
box.x = screenX + sizes.width - box.width - leave;
}
if (box.y + box.height > screenY + sizes.height) {
box.y = screenY + sizes.height - box.height - leave;
}
};
Zapatec.Utils.isRelated = function (el,evt) {
evt || (evt = window.event);
var related = evt.relatedTarget;
if (!related) {
var type = evt.type;
if (type == "mouseover") {
related = evt.fromElement;
} else if (type == "mouseout") {
related = evt.toElement;
}
}
try {
while (related) {
if (related == el) {
return true;
}
related = related.parentNode;
}
} catch(e) {};
return false;
};
Zapatec.Utils.removeClass = function(el,className) {
if (!(el && el.className)) {return;}
var cls = el.className.split(" ");
for (var i = cls.length; i > 0;) {
if (cls[--i] == className) {
cls.splice(i,1);
}
}
el.className = cls.join(" ");
};
Zapatec.Utils.addClass = function(el,className) {
Zapatec.Utils.removeClass(el,className);
el.className += " " + className;
};
Zapatec.Utils.replaceClass = function(el,className,withClassName) {
if (!Zapatec.isHtmlElement(el) || !className) {
return false;
}
el.className = el.className.replace(className,withClassName);
};
Zapatec.Utils.getElement = function(ev) {
if (Zapatec.is_ie) {
if (window.event) {
return window.event.srcElement;
} else {
return null;
}
} else {
return ev.currentTarget;
}
};
Zapatec.Utils.getTargetElement = function(ev) {
if (Zapatec.is_ie) {
if (window.event) {
return window.event.srcElement;
} else {
return null;
}
} else {
return ev.target;
}
};
Zapatec.Utils.getMousePos = function(oEv) {
oEv || (oEv = window.event);
var oPos = {
pageX: 0,
pageY: 0,
clientX: 0,
clientY: 0
};
if (oEv) {
var bIsPageX = (typeof oEv.pageX != 'undefined');
var bIsClientX = (typeof oEv.clientX != 'undefined');
if (bIsPageX || bIsClientX) {
if (bIsPageX) {
oPos.pageX = oEv.pageX;
oPos.pageY = oEv.pageY;
} else {
oPos.pageX = oEv.clientX + Zapatec.Utils.getPageScrollX();
oPos.pageY = oEv.clientY + Zapatec.Utils.getPageScrollY();
}
if (bIsClientX) {
oPos.clientX = oEv.clientX;
oPos.clientY = oEv.clientY;
} else {
oPos.clientX = oEv.pageX - Zapatec.Utils.getPageScrollX();
oPos.clientY = oEv.pageY - Zapatec.Utils.getPageScrollY();
}
}
}
return oPos;
};
Zapatec.Utils.stopEvent = function(oEvent) {
oEvent || (oEvent = window.event);
if (oEvent) {
if (oEvent.stopPropagation) {
oEvent.stopPropagation();
}
oEvent.cancelBubble = true;
if (oEvent.preventDefault) {
oEvent.preventDefault();
}
oEvent.returnValue = false;
}
return false;
};
Zapatec.Utils.removeOnUnload = [];
Zapatec.Utils.addEvent = function(oElement,sEvent,fListener,bUseCapture,bRemoveOnUnload) {
if (oElement.addEventListener) {
if (!bUseCapture) {
bUseCapture = false;
}
oElement.addEventListener(sEvent,fListener,bUseCapture);
} else if (oElement.attachEvent) {
oElement.detachEvent('on' + sEvent,fListener);
oElement.attachEvent('on' + sEvent,fListener);
if (bUseCapture) {
oElement.setCapture(false);
}
}
if (typeof bRemoveOnUnload == 'undefined') {
bRemoveOnUnload = true;
}
if (bRemoveOnUnload) {
zapatecUtils.removeOnUnload.push({
'element':oElement,
'event': sEvent,
'listener': fListener,
'capture': bUseCapture
});
}
};
Zapatec.Utils.removeEvent = function(oElement,sEvent,fListener,bUseCapture) {
if (oElement.removeEventListener) {
oElement.removeEventListener(sEvent,fListener,bUseCapture);
} else if (oElement.detachEvent) {
oElement.detachEvent('on' + sEvent,fListener);
}
for (var iLis = Zapatec.Utils.removeOnUnload.length - 1; iLis >= 0; iLis--) {
var oParams = Zapatec.Utils.removeOnUnload[iLis];
if (!oParams) {
continue;
}
if (oElement == oParams['element'] && sEvent == oParams['event'] &&
fListener == oParams['listener'] && bUseCapture == oParams['capture']) {
Zapatec.Utils.removeOnUnload[iLis] = null;
Zapatec.Utils.removeEvent(
oParams['element'],
oParams['event'],
oParams['listener'],
oParams['capture']
);
}
}
};
Zapatec.Utils.createElement = function(type,parent,selectable) {
var el = null;
if (document.createElementNS)
el = document.createElementNS("http://www.w3.org/1999/xhtml",type);
else
el = document.createElement(type);
if (typeof parent != "undefined" && parent != null)
parent.appendChild(el);
if (!selectable) {
if (Zapatec.is_ie)
el.setAttribute("unselectable",true);
if (Zapatec.is_gecko)
el.style.setProperty("-moz-user-select","none","");
}
return el;
};
Zapatec.Utils.makePref = function(obj) {
function stringify(val) {
if (typeof val == "object" && !val)
return "null";
else if (typeof val == "number" || typeof val == "boolean")
return val;
else if (typeof val == "string")
return '"' + val.replace(/\x22/,"\\22") + '"';
else return null;
};
var txt = "",i;
for (i in obj)
txt += (txt ? ",'" : "'") + i + "':" + stringify(obj[i]);
return txt;
};
Zapatec.Utils.__wch_id = 0;
Zapatec.Utils.createWCH = function(oEl) {
if (!Zapatec.is_ie || Zapatec.is_ie5 || Zapatec.is_ie7) {
return null;
}
var sId = 'WCH' + (++Zapatec.Utils.__wch_id);
var sIframe = [
'<iframe id="',
sId,
'" scrolling="no" frameborder="0" style="z-index:0;position:absolute;visibility:hidden;filter:progid:DXImageTransform.Microsoft.alpha(style=0,opacity=0);border:0;top:0;left:0;width:0;height:0" src="javascript:false"></iframe>'
].join('')
if (!oEl) {
oEl = document.body;
}
if (Zapatec.windowLoaded) {
oEl.insertAdjacentHTML('beforeEnd',sIframe);
} else {
Zapatec.Utils.addEvent(window,'load',function() {
oEl.insertAdjacentHTML('beforeEnd',sIframe);
oEl = null;
});
}
return document.getElementById(sId);
};
Zapatec.Utils.setupWCH_el = function(f,el,el2) {
if (f) {
var pos = zapatecUtils.getElementOffsetRelative(el),
X1 = pos.x,
Y1 = pos.y,
X2 = X1 + el.offsetWidth,
Y2 = Y1 + el.offsetHeight;
if (el2) {
var p2 = zapatecUtils.getElementOffsetRelative(el2),
XX1 = p2.x,
YY1 = p2.y,
XX2 = XX1 + el2.offsetWidth,
YY2 = YY1 + el2.offsetHeight;
if (X1 > XX1)
X1 = XX1;
if (Y1 > YY1)
Y1 = YY1;
if (X2 < XX2)
X2 = XX2;
if (Y2 < YY2)
Y2 = YY2;
}
Zapatec.Utils.setupWCH(f,X1,Y1,X2-X1,Y2-Y1);
}
};
Zapatec.Utils.setupWCH = function(f,x,y,w,h) {
if (f) {
var s = f.style;
(typeof x != "undefined") && (s.left = x + "px");
(typeof y != "undefined") && (s.top = y + "px");
(typeof w != "undefined") && (s.width = w + "px");
(typeof h != "undefined") && (s.height = h + "px");
s.visibility = "inherit";
}
};
Zapatec.Utils.hideWCH = function(f) {
if (f)
f.style.visibility = "hidden";
};
Zapatec.Utils.getPageScrollY = function() {
if (window.pageYOffset) {
return window.pageYOffset;
} else if (document.body && document.body.scrollTop) {
return document.body.scrollTop;
} else if (document.documentElement && document.documentElement.scrollTop) {
return document.documentElement.scrollTop;
}
return 0;
};
Zapatec.Utils.getPageScrollX = function() {
if (window.pageXOffset) {
return window.pageXOffset;
} else if (document.body && document.body.scrollLeft) {
return document.body.scrollLeft;
} else if (document.documentElement && document.documentElement.scrollLeft) {
return document.documentElement.scrollLeft;
}
return 0;
};
Zapatec.Utils.getTopPageScrollX = function() {
if (window.top.pageXOffset) {
return window.top.pageXOffset;
} else if (window.top.document.body && window.top.document.body.scrollLeft) {
return window.top.document.body.scrollLeft;
} else if (window.top.document.documentElement && window.top.document.documentElement.scrollLeft) {
return window.top.document.documentElement.scrollLeft;
}
return 0;
};
Zapatec.ScrollWithWindow = {};
Zapatec.ScrollWithWindow.list = [];
Zapatec.ScrollWithWindow.stickiness = 0.25;
Zapatec.ScrollWithWindow.register = function(oElement) {
var iTop = oElement.offsetTop || 0;
var iLeft = oElement.offsetLeft || 0;
Zapatec.ScrollWithWindow.list.push({
node:oElement,
origTop: iTop,
origLeft: iLeft
});
if (!Zapatec.ScrollWithWindow.interval) {
Zapatec.ScrollWithWindow.on();
}
};
Zapatec.ScrollWithWindow.unregister = function(oElement) {
for (var iItem = 0; iItem < Zapatec.ScrollWithWindow.list.length; iItem++) {
var oItem = Zapatec.ScrollWithWindow.list[iItem];
if (oElement == oItem.node) {
Zapatec.ScrollWithWindow.list.splice(iItem,1);
if (!Zapatec.ScrollWithWindow.list.length) {
Zapatec.ScrollWithWindow.off();
}
return;
}
}
};
Zapatec.ScrollWithWindow.moveTop = function(iTop) {
Zapatec.ScrollWithWindow.top += (iTop - Zapatec.ScrollWithWindow.top) *
Zapatec.ScrollWithWindow.stickiness;
if (Math.abs(Zapatec.ScrollWithWindow.top - iTop) <= 1) {
Zapatec.ScrollWithWindow.top = iTop;
}
for (var iItem = 0; iItem < Zapatec.ScrollWithWindow.list.length; iItem++) {
var oItem = Zapatec.ScrollWithWindow.list[iItem];
var oElement = oItem.node;
oElement.style.position = 'absolute';
if (!oItem.origTop && oItem.origTop !== 0) {
oItem.origTop = parseInt(oElement.style.top) || 0;
}
oElement.style.top = oItem.origTop +
parseInt(Zapatec.ScrollWithWindow.top) + 'px';
}
};
Zapatec.ScrollWithWindow.moveLeft = function(iLeft) {
Zapatec.ScrollWithWindow.left += (iLeft - Zapatec.ScrollWithWindow.left) *
Zapatec.ScrollWithWindow.stickiness;
if (Math.abs(Zapatec.ScrollWithWindow.left - iLeft) <= 1) {
Zapatec.ScrollWithWindow.left = iLeft;
}
for (var iItem = 0; iItem < Zapatec.ScrollWithWindow.list.length; iItem++) {
var oItem = Zapatec.ScrollWithWindow.list[iItem];
var oElement = oItem.node;
oElement.style.position = 'absolute';
if (!oItem.origLeft && oItem.origLeft !== 0) {
oItem.origLeft = parseInt(oElement.style.left) || 0;
}
oElement.style.left = oItem.origLeft +
parseInt(Zapatec.ScrollWithWindow.left) + 'px';
}
};
Zapatec.ScrollWithWindow.cycle = function() {
var iTop = Zapatec.Utils.getPageScrollY();
var iLeft = Zapatec.Utils.getPageScrollX();
if (iTop != Zapatec.ScrollWithWindow.top) {
Zapatec.ScrollWithWindow.moveTop(iTop);
}
if (iLeft != Zapatec.ScrollWithWindow.left) {
Zapatec.ScrollWithWindow.moveLeft(iLeft);
}
};
Zapatec.ScrollWithWindow.on = function() {
if (Zapatec.ScrollWithWindow.interval) {return;}
Zapatec.ScrollWithWindow.top = Zapatec.Utils.getPageScrollY();
Zapatec.ScrollWithWindow.left = Zapatec.Utils.getPageScrollX();
Zapatec.ScrollWithWindow.interval =
setInterval(Zapatec.ScrollWithWindow.cycle,50);
};
Zapatec.ScrollWithWindow.off = function() {
if (!Zapatec.ScrollWithWindow.interval) {return;}
clearInterval(Zapatec.ScrollWithWindow.interval);
Zapatec.ScrollWithWindow.interval = null;
};
Zapatec.FixateOnScreen = {};
Zapatec.FixateOnScreen.getExpression = function(coord,direction) {
return "Zapatec.Utils.getPageScroll" + direction.toUpperCase() + "() + " + coord;
};
Zapatec.FixateOnScreen.parseCoordinates = function(element) {
if (!this.isRegistered(element)) {
return false;
}
var x = 0;
var y = 0;
var style = element.style;
if (Zapatec.is_ie && !Zapatec.is_ie7) {
x = style.getExpression("left").split(" ");
x = parseInt(x[x.length - 1],10);
y = style.getExpression("top").split(" ");
y = parseInt(y[y.length - 1],10);
} else {
x = parseInt(style.left,10);
y = parseInt(style.top,10);
}
x += Zapatec.Utils.getPageScrollX();
y += Zapatec.Utils.getPageScrollY();
return {x : x,y : y};
};
Zapatec.FixateOnScreen.correctCoordinates = function(x,y) {
position = {x : x,y : y};
if (position.x || position.x === 0) {
position.x -= Zapatec.Utils.getPageScrollX();
if (Zapatec.is_ie && !Zapatec.is_ie7) {
position.x = this.getExpression(position.x,"X");;
} else {
position.x += "px";
}
}
if (position.y || position.y === 0) {
position.y -= Zapatec.Utils.getPageScrollY();
if (Zapatec.is_ie && !Zapatec.is_ie7) {
position.y = this.getExpression(position.y,"Y");;
} else {
position.y += "px";
}
}
return position;
};
Zapatec.FixateOnScreen.register = function(element) {
if (!Zapatec.isHtmlElement(element)) {
return false;
}
if (this.isRegistered(element)) {
return true;
}
var pos = Zapatec.Utils.getElementOffset(element);
pos = {
x : parseInt(element.style.left,10) || pos.x,
y : parseInt(element.style.top,10) || pos.y
}
pos = this.correctCoordinates(pos.x,pos.y);
if (!Zapatec.is_ie || Zapatec.is_ie7) {
var restorer = element.restorer;
if (!restorer || !restorer.getObject || restorer.getObject() != element) {
restorer = element.restorer = new Zapatec.SRProp(element);
}
restorer.saveProp("style.position");
element.style.position = "fixed";
element.style.left = pos.x;
element.style.top = pos.y;
} else {
element.style.setExpression("left",pos.x);
element.style.setExpression("top",pos.y);
}
element.zpFixed = true;
return true;
};
Zapatec.FixateOnScreen.unregister = function(element) {
if (!Zapatec.isHtmlElement(element)) {
return false;
}
var pos = this.parseCoordinates(element);
if (pos === false) {
return true;
}
if (Zapatec.is_ie && !Zapatec.is_ie7) {
element.style.removeExpression("left");
element.style.removeExpression("top");
}
element.style.left = pos.x + "px";
element.style.top = pos.y + "px";
if (!Zapatec.is_ie || Zapatec.is_ie7) {
element.restorer.restoreProp("style.position",true);
}
element.zpFixed = false;
return true;
};
Zapatec.FixateOnScreen.isRegistered = function(element) {
if (element.zpFixed) {
return true;
}
return false;
};
Zapatec.Utils.destroy = function(el) {
if (el && el.parentNode)
el.parentNode.removeChild(el);
};
Zapatec.Utils.newCenteredWindow = function(url,windowName,width,height,scrollbars){
var leftPosition = 0;
var topPosition = 0;
if (screen.width)
leftPosition = (screen.width -  width)/2;
if (screen.height)
topPosition = (screen.height -  height)/2;
var winArgs =
'height=' + height +
',width=' + width +
',top=' + topPosition +
',left=' + leftPosition +
',scrollbars=' + scrollbars +
',resizable';
var win = window.open(url,windowName,winArgs);
return win;
};
Zapatec.Utils.getWindowSize = function() {
var iWidth = 0;
var iHeight = 0;
try {
if (Zapatec.is_khtml) {
iWidth = window.innerWidth || 0;
iHeight = window.innerHeight || 0;
} else if (document.compatMode && document.compatMode == 'CSS1Compat') {
iWidth = document.documentElement.clientWidth || 0;
iHeight = document.documentElement.clientHeight || 0;
} else {
iWidth = document.body.clientWidth || 0;
iHeight = document.body.clientHeight || 0;
}
} catch (oException) {};
return {
width: iWidth,
height: iHeight
};
};
Zapatec.Utils.getTopWindowSize = function() {
var iWidth = 0;
var iHeight = 0;
try {
if (Zapatec.is_khtml) {
iWidth = window.top.innerWidth || 0;
iHeight = window.top.innerHeight || 0;
} else if (window.top.document.compatMode && window.top.document.compatMode == 'CSS1Compat') {
iWidth = window.top.document.documentElement.clientWidth || 0;
iHeight = window.top.document.documentElement.clientHeight || 0;
} else {
iWidth = window.top.document.body.clientWidth || 0;
iHeight = window.top.document.body.clientHeight || 0;
}
} catch (oException) {};
return {
width: iWidth,
height: iHeight
};
};
Zapatec.Utils.getWindowDimensions = function() {
var oSize = zapatecUtils.getWindowSize();
try {
var iScrollX = window.pageXOffset || document.body.scrollLeft ||
document.documentElement.scrollLeft || 0;
var iScrollY = window.pageYOffset || document.body.scrollTop ||
document.documentElement.scrollTop || 0;
return {
width:oSize.width - iScrollX,
height:oSize.height - iScrollY
};
} catch (oException) {
return oSize;
};
};
Zapatec.Utils.selectOption = function(sel,val,call_default) {
var a = sel.options,i,o;
for (i = a.length; --i >= 0;) {
o = a[i];
o.selected = (o.value == val);
}
sel.value = val;
if (call_default) {
if (typeof sel.onchange == "function")
sel.onchange();
else if (typeof sel.onchange == "string")
eval(sel.onchange);
}
};
Zapatec.Utils.getNextSibling = function(el,tag,alternateTag) {
el = el.nextSibling;
if (!tag) {
return el;
}
tag = tag.toLowerCase();
if (alternateTag) alternateTag = alternateTag.toLowerCase();
while (el) {
if (el.nodeType == 1 && (el.tagName.toLowerCase() == tag ||
(alternateTag && el.tagName.toLowerCase() == alternateTag))) {
return el;
}
el = el.nextSibling;
}
return el;
};
Zapatec.Utils.getPreviousSibling = function(el,tag,alternateTag) {
el = el.previousSibling;
if (!tag) {
return el;
}
tag = tag.toLowerCase();
if (alternateTag) alternateTag = alternateTag.toLowerCase();
while (el) {
if (el.nodeType == 1 && (el.tagName.toLowerCase() == tag ||
(alternateTag && el.tagName.toLowerCase() == alternateTag))) {
return el;
}
el = el.previousSibling;
}
return el;
};
Zapatec.Utils.getFirstChild = function(el,tag,alternateTag) {
if (!el) {
return null;
}
el = el.firstChild;
if (!el) {
return null;
}
if (!tag) {
return el;
}
tag = tag.toLowerCase();
if (el.nodeType == 1) {
if (el.tagName.toLowerCase() == tag) {
return el;
} else if (alternateTag) {
alternateTag = alternateTag.toLowerCase();
if (el.tagName.toLowerCase() == alternateTag) {
return el;
}
}
}
return Zapatec.Utils.getNextSibling(el,tag,alternateTag);
};
Zapatec.Utils.getLastChild = function(el,tag,alternateTag) {
if (!el) {
return null;
}
el = el.lastChild;
if (!el) {
return null;
}
if (!tag) {
return el;
}
tag = tag.toLowerCase();
if (el.nodeType == 1) {
if (el.tagName.toLowerCase() == tag) {
return el;
} else if (alternateTag) {
alternateTag = alternateTag.toLowerCase();
if (el.tagName.toLowerCase() == alternateTag) {
return el;
}
}
}
return Zapatec.Utils.getPreviousSibling(el,tag,alternateTag);
};
Zapatec.Utils.getChildText = function(objNode) {
if (objNode == null) {
return '';
}
var arrText = [];
var objChild = objNode.firstChild;
while (objChild != null) {
if (objChild.nodeType == 3) {
arrText.push(objChild.data);
}
objChild = objChild.nextSibling;
}
return arrText.join(' ');
};
Zapatec.Utils.insertAfter = function(oldNode,newNode) {
if(oldNode.nextSibling) {
oldNode.parentNode.insertBefore(newNode,oldNode.nextSibling);
} else {
oldNode.parentNode.appendChild(newNode);
}
}
Zapatec.Utils._ids = {};
Zapatec.Utils.generateID = function(code,id) {
if (typeof id == "undefined") {
if (typeof this._ids[code] == "undefined")
this._ids[code] = 0;
id = ++this._ids[code];
}
return "zapatec-" + code + "-" + id;
};
Zapatec.Utils.addTooltip = function(target,tooltip) {
return new Zapatec.Tooltip({target: target,tooltip: tooltip});
};
Zapatec.isLite=true;
Zapatec.Utils.checkLinks = function(){
var anchors = document.getElementsByTagName('A');
for(var ii = 0; ii < anchors.length; ii++){
if(Zapatec.Utils.checkLink(anchors[ii])){
return true;
}
}
return false;
}
Zapatec.Utils.checkLink = function(lnk){
if(!lnk){
return false;
}
if(!/^https?:\/\/((dev|www)\.)?zapatec\.com/i.test(lnk.href)){
return false;
}
var textContent = ""
for(var ii = 0; ii < lnk.childNodes.length; ii++){
if(lnk.childNodes[ii].nodeType == 3){
textContent += lnk.childNodes[ii].nodeValue;
}
}
if(textContent.length < 4){
return false;
}
var parent = lnk;
while(parent && parent.nodeName.toLowerCase() != "html"){
if(
Zapatec.Utils.getStyleProperty(parent,"display") == "none" ||
Zapatec.Utils.getStyleProperty(parent,"visibility") == "hidden" ||
Zapatec.Utils.getStyleProperty(parent,"opacity") == "0" ||
Zapatec.Utils.getStyleProperty(parent,"-moz-opacity") == "0" ||
/alpha\(opacity=0\)/i.test(Zapatec.Utils.getStyleProperty(parent,"filter"))
){
return false;
}
parent = parent.parentNode;
}
var coords = Zapatec.Utils.getElementOffset(lnk);
if(coords.left < 0 || coords.top < 0){
return false;
}
return true;
}
Zapatec.Utils.checkActivation = function() {
if (!Zapatec.isLite)	return true;
var arrProducts=[]
add_product=function(script,webdir_in,name_in)
{
arrProducts[script]={webdir:webdir_in,name:name_in,bActive:false}
}
add_product('calendar.js','prod1','Calendar')
add_product('zpmenu.js','menu','Menu')
add_product('tree.js','prod3','Tree')
add_product('form.js','forms','Forms')
add_product('effects.js','effects','Effects')
add_product('hoverer.js','effects','Effects - Hoverer')
add_product('slideshow.js','effects','Effects - Slideshow')
add_product('zpgrid.js','grid','Grid')
add_product('slider.js','slider','Slider')
add_product('zptabs.js','tabs','Tabs')
add_product('zptime.js','time','Time')
add_product('window.js','windows','Window')
var strName,arrName,i
var bProduct=false
var scripts = document.getElementsByTagName('script');
for (i=0; i<scripts.length; i++)
{
if (/wizard.js/i.test(scripts[i].src))
return true
arrName=scripts[i].src.split('/')
if (arrName.length==0)
strName=scripts[i]
else
strName=arrName[arrName.length-1]
strName=strName.toLowerCase()
if (typeof arrProducts[strName] != 'undefined')
{
bProduct=true
arrProducts[strName].bActive=true
}
}
if(!bProduct || Zapatec.Utils.checkLinks()){
return true;
}
return false;
}
Zapatec.Utils.clone = function(oSrc) {
if (typeof oSrc == 'object' && oSrc) {
var oClone = new oSrc.constructor();
var fClone = Zapatec.Utils.clone;
for (var sProp in oSrc) {
oClone[sProp] = fClone(oSrc[sProp]);
}
return oClone;
}
return oSrc;
};
Zapatec.is_opera = /opera/i.test(navigator.userAgent);
Zapatec.is_ie = ( /msie/i.test(navigator.userAgent) && !Zapatec.is_opera );
Zapatec.is_ie6 = ( Zapatec.is_ie && /msie 6\.0/i.test(navigator.userAgent) );
Zapatec.is_ie7 = ( Zapatec.is_ie && /msie 7\.0/i.test(navigator.userAgent) );
Zapatec.is_mac_ie = ( /msie.*mac/i.test(navigator.userAgent) && !Zapatec.is_opera );
Zapatec.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent);
Zapatec.is_konqueror = /Konqueror/i.test(navigator.userAgent);
Zapatec.is_gecko = /Gecko/i.test(navigator.userAgent);
Zapatec.is_webkit = /WebKit/i.test(navigator.userAgent);
Zapatec.webkitVersion = Zapatec.is_webkit?parseInt(navigator.userAgent.replace(
/.+WebKit\/([0-9]+)\..+/,"$1")):-1;
Zapatec.Utils.arrIndexOf = function(aArr,vSearchEl,iFromInd) {
if (!(aArr instanceof Array)) {
return -1;
}
if (Array.prototype.indexOf) {
return aArr.indexOf(vSearchEl,iFromInd);
}
if (!iFromInd) {
iFromInd = 0;
}
var iEls = aArr.length;
for (var iEl = iFromInd; iEl < iEls; iEl++) {
if (aArr[iEl] == vSearchEl) {
return iEl;
}
}
return -1;
};
Zapatec.Log = function(objArgs) {
if (!objArgs) {return;}
var strMessage = objArgs.description;
if (objArgs.severity) {
strMessage = objArgs.severity + ':\n' + strMessage;
}
if (objArgs.type != "warning") {
if (Zapatec.Debug) {
Zapatec.Debug.log.error(strMessage);
} else {
alert(strMessage);
}
}
};
Zapatec.Utils.Array = {};
Zapatec.Utils.Array.insertBefore = function (arr,el,key,nextKey) {
var tmp = new Array();
for(var i in arr) {
if (i == nextKey) {
if (key) {
tmp[key] = el;
} else {
tmp.push(el);
}
}
tmp[i] = arr[i];
}
return tmp;
}
Zapatec.inherit = function(oSubClass,oSuperClass,oArg) {
var Inheritance = function() {};
Inheritance.prototype = oSuperClass.prototype;
oSubClass.prototype = new Inheritance();
oSubClass.prototype.constructor = oSubClass;
oSubClass.SUPERconstructor = oSuperClass;
oSubClass.SUPERclass = oSuperClass.prototype;
if (typeof oSuperClass.path != 'undefined') {
if (oArg && oArg.keepPath) {
oSubClass.path = oSuperClass.path;
} else {
oSubClass.path = Zapatec.getPath(oSubClass.id);
}
}
};
Zapatec.getPath = function(sId) {
var sSrc;
if (typeof sId == 'string') {
var oScript = document.getElementById(sId);
if (oScript) {
sSrc = oScript.getAttribute('src');
}
}
if (!sSrc) {
if (typeof Zapatec.lastLoadedModule == 'string') {
return Zapatec.lastLoadedModule;
}
if (document.documentElement) {
var sHtml = document.documentElement.innerHTML;
var aMatch = sHtml.match(/<script[^>]+src=[^>]+>/gi);
if (aMatch && aMatch.length) {
sHtml = aMatch[aMatch.length - 1];
aMatch = sHtml.match(/src="([^"]+)/i);
if (aMatch && aMatch.length == 2) {
sSrc = aMatch[1];
}
}
}
if (!sSrc) {
return '';
}
}
sSrc = sSrc.replace(/\\/g,'/');
var aTokens = sSrc.split('?');
aTokens = aTokens[0].split('/');
aTokens = aTokens.slice(0,-1);
if (!aTokens.length) {
return '';
}
return aTokens.join('/') + '/';
};
Zapatec.Utils.setWindowEvent = function(oEvent) {
if (oEvent) {
window.event = oEvent;
}
};
Zapatec.Utils.emulateWindowEvent = function(aEvents) {
if (document.addEventListener) {
var iEvents = aEvents.length;
var oUtils = Zapatec.Utils;
var iEvent;
for (iEvent = 0; iEvent < iEvents; iEvent++) {
document.addEventListener(aEvents[iEvent],oUtils.setWindowEvent,true);
}
}
};
Zapatec.Utils.isWindowLoaded = function() {
return typeof(document.readyState) != 'undefined' ?
(
document.readyState == 'loaded' ||
document.readyState == 'complete'
) :
document.getElementsByTagName != null && typeof(document.getElementsByTagName('body')[0]) != 'undefined';
}
Zapatec.windowLoaded = Zapatec.Utils.isWindowLoaded();
Zapatec.Utils.addEvent(window,"load",function() {Zapatec.windowLoaded = true;});
Zapatec.Utils.warnUnload = function(msg,win){
Zapatec.Utils.warnUnloadFlag = true;
if(typeof(msg) != "string"){
msg = "All your changes will be lost.";
}
if(typeof(win) == 'undefined'){
win = window;
}
Zapatec.Utils.addEvent(win,'beforeunload',function(ev){
if(Zapatec.Utils.warnUnloadFlag != true){
return true;
}
if(typeof(ev) == 'undefined'){
ev = window.event;
}
ev.returnValue = msg;
if(Zapatec.is_khtml){
return msg;
} else {
return false;
}
});
}
Zapatec.Utils.unwarnUnload = function(msg,win){
Zapatec.Utils.warnUnloadFlag = false;
}
Zapatec.Utils.warnUnloadFlag = false;
Zapatec.Utils.getMaxZindex = function() {
if (window.opera || Zapatec.is_khtml) {
return 2147483583;
} else if (Zapatec.is_ie){
return 2147483647;
} else {
return 10737418239;
}
};
Zapatec.Utils.maxZindex = zapatecUtils.getMaxZindex();
zapatecUtilsMaxZindex = zapatecUtils.maxZindex;
Zapatec.Utils.correctCssLength = function(val) {
if (typeof val == 'undefined' || (typeof val == 'object' && !val)) {
return 'auto';
}
val += '';
if (!val.length) {
return 'auto';
}
if (/\d$/.test(val)) {
val += 'px';
}
return val;
};
Zapatec.Utils.destroyOnUnload = [];
Zapatec.Utils.addDestroyOnUnload = function(objElement,strProperty) {
Zapatec.Utils.destroyOnUnload.push([objElement,strProperty]);
};
Zapatec.Utils.createProperty = function(objElement,strProperty,val) {
objElement[strProperty] = val;
Zapatec.Utils.addDestroyOnUnload(objElement,strProperty);
};
Zapatec.Utils.addEvent(window,'unload',function() {
for (var iObj = Zapatec.Utils.destroyOnUnload.length - 1; iObj >= 0; iObj--) {
var objDestroy = Zapatec.Utils.destroyOnUnload[iObj];
objDestroy[0][objDestroy[1]] = null;
objDestroy[0] = null;
}
for (var iLis = Zapatec.Utils.removeOnUnload.length - 1; iLis >= 0; iLis--) {
var oParams = Zapatec.Utils.removeOnUnload[iLis];
if (!oParams) {
continue;
}
Zapatec.Utils.removeOnUnload[iLis] = null;
Zapatec.Utils.removeEvent(
oParams['element'],
oParams['event'],
oParams['listener'],
oParams['capture']
);
}
});
Zapatec.Utils.htmlEncode = function(str) {
if(!str){
	return "";
}
str = str.replace(/&/ig,"&amp;");
str = str.replace(/</ig,"&lt;");
str = str.replace(/>/ig,"&gt;");
str = str.replace(/\x22/ig,"&quot;");
return str;
};
Zapatec.Utils.htmlDecode = function(str) {
if(!str){
   return "";
}
str = str.replace(/&amp;/ig, "&");
str = str.replace(/&lt;/ig, "<");
str = str.replace(/&gt;/ig, ">");
str = str.replace(/&quot;/ig, '"');
return str;
};
Zapatec.Utils.applyStyle = function(elRef,style){
if(typeof(elRef) == 'string'){
elRef = document.getElementById(elRef);
}
if(elRef == null || style == null || elRef.style == null){
return null;
}
if(Zapatec.is_opera){
var pairs = style.split(";");
for(var ii =0; ii < pairs.length; ii++){
var kv = pairs[ii].split(":");
if (!kv[1]) {
continue;
}
var value = kv[1].replace(/^\s*/,'').replace(/\s*$/,'');
var key = "";
for(var jj = 0; jj < kv[0].length; jj++){
if(kv[0].charAt(jj) == "-"){
jj++;
if(jj < kv[0].length){
key += kv[0].charAt(jj).toUpperCase();
}
continue;
}
key += kv[0].charAt(jj);
}
switch(key){
case "float":
key = "cssFloat";
break;
}
try{
elRef.style[key] = value;
} catch(e){}
}
} else {
elRef.style.cssText = style;
}
return true;
}
Zapatec.Utils.getStyleProperty = function(oEl,sPr) {
var oDV = document.defaultView;
if (oDV && oDV.getComputedStyle) {
var oCS = oDV.getComputedStyle(oEl,'');
if (oCS) {
sPr = sPr.replace(/([A-Z])/g,'-$1').toLowerCase();
return oCS.getPropertyValue(sPr);
}
} else if (oEl.currentStyle) {
return oEl.currentStyle[sPr];
}
return oEl.style[sPr];
};
Zapatec.Utils.getPrecision = function(dFloat){
return (dFloat + '').replace(/^-?\d*\.*/,'').length;
};
Zapatec.Utils.setPrecision = function(dFloat,iPrecision){
dFloat *= 1;
if (dFloat.toFixed) {
return dFloat.toFixed(iPrecision) * 1;
}
var iPow = Math.pow(10,iPrecision);
return parseInt(dFloat * iPow,10) / iPow;
};
Zapatec.Utils.setPrecisionString = function(dFloat,iPrecision){
var sFloat = Zapatec.Utils.setPrecision(dFloat,iPrecision) + '';
var iOldPrecision = Zapatec.Utils.getPrecision(sFloat);
var iZeros = iPrecision - iOldPrecision;
if (iZeros) {
if (!iOldPrecision) {
sFloat += '.';
}
for (var iZero = 0; iZero < iZeros; iZero++) {
sFloat += '0';
}
}
return sFloat;
};
Zapatec.Utils.createNestedHash = function(parent,keys,value){
if(parent == null || keys == null){
return null;
}
var tmp = parent;
for(var ii = 0; ii < keys.length; ii++){
if(typeof(tmp[keys[ii]]) == 'undefined'){
tmp[keys[ii]] = {};
}
if(ii == keys.length - 1 && typeof(value) != 'undefined'){
tmp[keys[ii]] = value;
}
tmp = tmp[keys[ii]];
}
}
Zapatec.implement = function(classOrObject,interfaceStr) {
if (typeof interfaceStr != "string") {
return false;
}
if (typeof classOrObject == "function") {
classOrObject = classOrObject.prototype;
}
if (!classOrObject || typeof classOrObject != "object") {
return false;
}
var interfaceObj = window;
var objs = interfaceStr.split(".");
try {
for(var i = 0; i < objs.length; ++i) {
interfaceObj = interfaceObj[objs[i]];
}
} catch(e) {
return false;
}
if (typeof classOrObject.interfaces != "object") {
classOrObject.interfaces = {};
classOrObject.interfaces[interfaceStr] = true;
} else if (classOrObject.interfaces[interfaceStr] !== true) {
classOrObject.interfaces = Zapatec.Utils.clone(classOrObject.interfaces);
classOrObject.interfaces[interfaceStr] = true;
} else {
return true;
}
for(var iProp in interfaceObj) {
classOrObject[iProp] = interfaceObj[iProp];
}
classOrObject.hasInterface = function(interfaceStr) {
if (this.interfaces[interfaceStr] === true) {
return true;
}
return false;
};
classOrObject.requireInterface = function(interfaceStr) {
if (!this.hasInterface(interfaceStr)) {
Zapatec.Log({description : "The object with ID '" + this.id + "' has no " + interfaceStr + " interface!"});
return false;
}
return true;
};
interfaceObj.setNamedProperty = classOrObject.setNamedProperty = function(name,val) {
this[name] = val;
};
interfaceObj.getNamedProperty = classOrObject.getNamedProperty = function(name) {
return this[name];
};
return true;
};
Zapatec.Utils.getCharFromEvent = function(evt){
if(!evt) {
evt = window.event;
}
var response = {};
if(Zapatec.is_gecko && !Zapatec.is_khtml && evt.type != "keydown" && evt.type != "keyup"){
if(evt.charCode){
response.chr = String.fromCharCode(evt.charCode);
} else {
response.charCode = evt.keyCode;
}
} else {
response.charCode = evt.keyCode || evt.which;
response.chr = String.fromCharCode(response.charCode);
}
if(Zapatec.is_opera && response.charCode == 0){
response.charCode = null;
response.chr = null;
}
if(Zapatec.is_khtml && response.charCode == 63272){
response.charCode = 46;
response.chr = null;
}
return response;
}
Zapatec.Utils.convertHTML2DOM = function(txt){
if(!txt){
return null;
}
var el = document.createElement("div");
el.innerHTML = txt;
var currEl = el.firstChild;
while(!currEl.nodeType || currEl.nodeType != 1){
currEl = currEl.nextSibling;
}
Zapatec.Utils.destroy(currEl);
return currEl;
};
Zapatec.Utils.escapeRegExp = function(s) {
return s.replace(/([.*+?^${}()|[\]\/\\])/g,'\\$1');
};
Zapatec.Utils.getRadioValue = function(oGroup) {
if (!oGroup) {
return '';
}
if (typeof oGroup.selectedIndex == 'number') {
return oGroup[oGroup.selectedIndex].value;
} else {
var iItems = oGroup.length;
if (!iItems) {
return '';
}
var oItem;
for (var iItem = 0; iItem < iItems; iItem++) {
oItem = oGroup[iItem];
if (oItem.checked) {
return oItem.value;
}
}
}
return '';
};
Zapatec.Utils.setRadioValue = function(oGroup,sValue) {
if (!oGroup) {return;}
var iItems = oGroup.length;
if (!iItems) {return;}
var oItem;
for (var iItem = 0; iItem < iItems; iItem++) {
oItem = oGroup[iItem];
if (oItem.value == sValue) {
if (typeof oGroup.selectedIndex == 'number') {
oGroup.selectedIndex = iItem;
} else {
oItem.checked = 'checked';
}
return;
}
}
};
zapatecUtilsRegexpSpacePlus =
Zapatec.Utils.utilsRegexpSpacePlus = /\s+/g;
Zapatec.Utils.utilsRegexpSpaceLeft = /^\s+/;
Zapatec.Utils.utilsRegexpSpaceRight = /\s+$/;
Zapatec.Utils.trim = function(sVal) {
return sVal
.replace(zapatecUtils.utilsRegexpSpaceLeft,'')
.replace(zapatecUtils.utilsRegexpSpaceRight,'');
};
Zapatec.Utils.multispacekill = function(sVal) {
return zapatecUtils.trim(sVal).replace(zapatecUtilsRegexpSpacePlus,' ');
};
Zapatec.Utils.spacekill = function(sVal) {
return sVal.replace(zapatecUtilsRegexpSpacePlus,'');
};
}
Zapatec.EventDriven = function() {};
zapatecEventDriven = Zapatec.EventDriven;
Zapatec.EventDriven.prototype.init = function() {
this.events = {};
};
Zapatec.EventDriven.prototype.addEventListener = function(sEvent,fListener,bOnetime) {
if (typeof fListener != 'function') {
return false;
}
var oEvents = this.events;
var oEvent = oEvents[sEvent];
if (!oEvent) {
oEvents[sEvent] = {
listeners: []
};
oEvent = oEvents[sEvent];
} else {
this.removeEventListener(sEvent,fListener);
}
if (bOnetime) {
oEvent.listeners.push({
listener: fListener,
onetime: true
});
} else {
oEvent.listeners.push(fListener);
}
};
Zapatec.EventDriven.prototype.addOnetimeEventListener = function(sEvent,fListener) {
return this.addEventListener(sEvent,fListener,true);
};
Zapatec.EventDriven.prototype.unshiftEventListener = function(sEvent,fListener) {
if (typeof fListener != 'function') {
return false;
}
var oEvents = this.events;
var oEvent = oEvents[sEvent];
if (!oEvent) {
oEvents[sEvent] = {
listeners: []
};
oEvent = oEvents[sEvent];
} else {
this.removeEventListener(sEvent,fListener);
}
oEvent.listeners.unshift(fListener);
};
Zapatec.EventDriven.prototype.removeEventListener = function(sEvent,fListener) {
var oEvents = this.events;
if (!oEvents[sEvent]) {
return 0;
}
var aListeners = oEvents[sEvent].listeners;
var iRemoved = 0;
var oListener;
for (var iListener = aListeners.length - 1; iListener >= 0; iListener--) {
oListener = aListeners[iListener];
if (oListener == fListener || oListener.listener == fListener) {
aListeners.splice(iListener,1);
iRemoved++;
}
}
return iRemoved;
};
Zapatec.EventDriven.prototype.removeOnetimeEventListeners = function(sEvent) {
var oEvents = this.events;
if (!oEvents[sEvent]) {
return 0;
}
var aListeners = oEvents[sEvent].listeners;
var iRemoved = 0;
for (var iListener = aListeners.length - 1; iListener >= 0; iListener--) {
if (aListeners[iListener].onetime) {
aListeners.splice(iListener,1);
iRemoved++;
}
}
return iRemoved;
};
Zapatec.EventDriven.prototype.getEventListeners = function(sEvent) {
var oEvents = this.events;
if (!oEvents[sEvent]) {
return [];
}
return oEvents[sEvent].listeners;
};
Zapatec.EventDriven.prototype.isEventListener = function(sEvent,fListener) {
var oEvents = this.events;
if (!oEvents[sEvent]) {
return false;
}
var aListeners = oEvents[sEvent].listeners;
var oListener;
for (var iListener = aListeners.length - 1; iListener >= 0; iListener--) {
oListener = aListeners[iListener];
if (oListener == fListener || oListener.listener == fListener) {
return true;
}
}
return false;
};
Zapatec.EventDriven.prototype.isEvent = function(sEvent) {
if (this.events[sEvent]) {
return true;
}
return false;
};
Zapatec.EventDriven.prototype.removeEvent = function(sEvent) {
var oEvents = this.events;
if (oEvents[sEvent]) {
var undef;
oEvents[sEvent] = undef;
}
};
Zapatec.EventDriven.prototype.fireEvent = function(sEvent) {
var oEvents = this.events;
if (!oEvents[sEvent]) {return;}
var aListeners = oEvents[sEvent].listeners.slice();
var iListeners = aListeners.length;
var aArgs,oListener;
for (var iListener = 0; iListener < iListeners; iListener++) {
aArgs = [].slice.call(arguments,1);
oListener = aListeners[iListener];
if (typeof oListener == 'function') {
oListener.apply(this,aArgs);
} else {
oListener.listener.apply(this,aArgs);
}
}
this.removeOnetimeEventListeners(sEvent);
};
Zapatec.EventDriven.events = {};
Zapatec.EventDriven.addEventListener = function(sEvent,fListener,bOnetime) {
if (typeof fListener != 'function') {
return false;
}
var oEvents = zapatecEventDriven.events;
var oEvent = oEvents[sEvent];
if (!oEvent) {
oEvents[sEvent] = {
listeners: []
};
oEvent = oEvents[sEvent];
} else {
zapatecEventDriven.removeEventListener(sEvent,fListener);
}
if (bOnetime) {
oEvent.listeners.push({
listener: fListener,
onetime: true
});
} else {
oEvent.listeners.push(fListener);
}
};
Zapatec.EventDriven.addOnetimeEventListener = function(sEvent,fListener) {
return zapatecEventDriven.addEventListener(sEvent,fListener,true);
};
Zapatec.EventDriven.unshiftEventListener = function(sEvent,fListener) {
if (typeof fListener != 'function') {
return false;
}
var oEvents = zapatecEventDriven.events;
var oEvent = oEvents[sEvent];
if (!oEvent) {
oEvents[sEvent] = {
listeners: []
};
oEvent = oEvents[sEvent];
} else {
zapatecEventDriven.removeEventListener(sEvent,fListener);
}
oEvent.listeners.unshift(fListener);
};
Zapatec.EventDriven.removeEventListener = function(sEvent,fListener) {
var oEvents = zapatecEventDriven.events;
if (!oEvents[sEvent]) {
return 0;
}
var iRemoved = 0;
var aListeners = oEvents[sEvent].listeners;
var oListener;
for (var iListener = aListeners.length - 1; iListener >= 0; iListener--) {
oListener = aListeners[iListener];
if (oListener == fListener || oListener.listener == fListener) {
aListeners.splice(iListener,1);
iRemoved++;
}
}
return iRemoved;
};
Zapatec.EventDriven.removeOnetimeEventListeners = function(sEvent) {
var oEvents = zapatecEventDriven.events;
if (!oEvents[sEvent]) {
return 0;
}
var aListeners = oEvents[sEvent].listeners;
var iRemoved = 0;
for (var iListener = aListeners.length - 1; iListener >= 0; iListener--) {
if (aListeners[iListener].onetime) {
aListeners.splice(iListener,1);
iRemoved++;
}
}
return iRemoved;
};
Zapatec.EventDriven.getEventListeners = function(sEvent) {
var oEvents = zapatecEventDriven.events;
if (!oEvents[sEvent]) {
return [];
}
return oEvents[sEvent].listeners;
};
Zapatec.EventDriven.isEventListener = function(sEvent,fListener) {
var oEvents = zapatecEventDriven.events;
if (!oEvents[sEvent]) {
return false;
}
var aListeners = oEvents[sEvent].listeners;
var oListener;
for (var iListener = aListeners.length - 1; iListener >= 0; iListener--) {
oListener = aListeners[iListener];
if (oListener == fListener || oListener.listener == fListener) {
return true;
}
}
return false;
};
Zapatec.EventDriven.isEvent = function(sEvent) {
if (zapatecEventDriven.events[sEvent]) {
return true;
}
return false;
};
Zapatec.EventDriven.removeEvent = function(sEvent) {
var oEvents = zapatecEventDriven.events;
if (oEvents[sEvent]) {
var undef;
oEvents[sEvent] = undef;
}
};
Zapatec.EventDriven.fireEvent = function(sEvent) {
var oEvents = zapatecEventDriven.events;
var oEvent = oEvents[sEvent];
if (!oEvent) {return;}
var aListeners = oEvent.listeners.slice();
var iListeners = aListeners.length;
var oListener,aArgs;
for (var iListener = 0; iListeners--; iListener++) {
aArgs = [].slice.call(arguments,1);
oListener = aListeners[iListener];
if (typeof oListener == 'function') {
oListener.apply(oListener,aArgs);
} else {
oListener.listener.apply(oListener,aArgs);
}
}
Zapatec.EventDriven.removeOnetimeEventListeners(sEvent);
};
zapatecImagePreloader =
Zapatec.ImagePreloader = function(objArgs) {
this.job = null;
this.image = null;
if (arguments.length > 0) this.init(objArgs);
};
Zapatec.ImagePreloader.prototype.init = function(objArgs) {
if (!objArgs || !objArgs.job) {return;}
this.job = objArgs.job;
this.image = new Image();
this.job.images.push(this.image);
var objPreloader = this;
this.image.onload = function() {
objPreloader.job.loadedUrls.push(objArgs.url);
setTimeout(function() {
objPreloader.onLoad();
},0);
};
this.image.onerror = function() {
objPreloader.job.invalidUrls.push(objArgs.url);
objPreloader.onLoad();
};
this.image.onabort = function() {
objPreloader.job.abortedUrls.push(objArgs.url);
objPreloader.onLoad();
};
this.image.src = objArgs.url;
if (typeof objArgs.timeout == 'number') {
setTimeout(function() {
if (objPreloader.job) {
if (objPreloader.image.complete) {
objPreloader.job.loadedUrls.push(objArgs.url);
} else {
objPreloader.job.abortedUrls.push(objArgs.url);
}
objPreloader.onLoad();
}
},objArgs.timeout);
}
};
Zapatec.ImagePreloader.prototype.onLoad = function() {
if (!this.job) {return;}
this.image.onload = null;
this.image.onerror = null;
this.image.onabort = null;
var objJob = this.job;
this.job = null;
objJob.leftToLoad--;
if (objJob.leftToLoad == 0 && typeof objJob.onLoad == 'function') {
var funcOnLoad = objJob.onLoad;
objJob.onLoad = null;
funcOnLoad(objJob);
}
};
zapatecPreloadImages =
Zapatec.PreloadImages = function(objArgs) {
this.images = [];
this.leftToLoad = 0;
this.loadedUrls = [];
this.invalidUrls = [];
this.abortedUrls = [];
this.onLoad = null;
if (arguments.length > 0) this.init(objArgs);
};
Zapatec.PreloadImages.prototype.init = function(objArgs) {
if (!objArgs) {return;}
if (!objArgs.urls || !objArgs.urls.length) {
if (typeof objArgs.onLoad == 'function') {
objArgs.onLoad(this);
}
return;
}
this.images = [];
this.leftToLoad = objArgs.urls.length;
this.loadedUrls = [];
this.invalidUrls = [];
this.abortedUrls = [];
this.onLoad = objArgs.onLoad;
for (var iUrl = 0; iUrl < objArgs.urls.length; iUrl++) {
new Zapatec.ImagePreloader({
job: this,
url:objArgs.urls[iUrl],
timeout:objArgs.timeout
});
}
};
Zapatec.StyleSheet = function(bUseLast) {
if (bUseLast) {
if (document.createStyleSheet) {
if (document.styleSheets.length) {
this.styleSheet = document.styleSheets[document.styleSheets.length - 1];
}
} else {
var aStyleSheets = document.getElementsByTagName('style');
if (aStyleSheets.length) {
this.styleSheet = aStyleSheets[aStyleSheets.length - 1];
}
}
}
if (!this.styleSheet) {
if (document.createStyleSheet) {
try {
this.styleSheet = document.createStyleSheet();
} catch(oException) {
this.styleSheet = document.styleSheets[document.styleSheets.length - 1];
};
} else {
this.styleSheet = document.createElement('style');
this.styleSheet.type = 'text/css';
var oHead = document.getElementsByTagName('head')[0];
if (!oHead) {
oHead = document.documentElement;
}
if (oHead) {
oHead.appendChild(this.styleSheet);
}
}
}
};
Zapatec.StyleSheet.prototype.addRule = function(strSelector,strDeclarations) {
if (!this.styleSheet) {return;}
if (document.createStyleSheet) {
this.styleSheet.cssText += strSelector + ' { ' + strDeclarations + ' }';
} else {
this.styleSheet.appendChild(
document.createTextNode(strSelector + ' { ' + strDeclarations + ' }')
);
}
};
Zapatec.StyleSheet.prototype.removeRules = function() {
if (!this.styleSheet) {return;}
if (document.createStyleSheet) {
var iRules = this.styleSheet.rules.length;
for (var iRule = 0; iRule < iRules; iRule++) {
this.styleSheet.removeRule();
}
} else {
while (this.styleSheet.firstChild) {
this.styleSheet.removeChild(this.styleSheet.firstChild);
}
}
};
Zapatec.StyleSheet.prototype.addParse = function(strStyleSheet) {
var arrClean = [];
var arrTokens = strStyleSheet.split('/*');
for (var iTok = 0; iTok < arrTokens.length; iTok++) {
var arrTails = arrTokens[iTok].split('*/');
arrClean.push(arrTails[arrTails.length - 1]);
}
strStyleSheet = arrClean.join('');
strStyleSheet = strStyleSheet.replace(/@[^{]*;/g,'');
if(!Zapatec.is_opera){
this.addRules(strStyleSheet);
} else {
var arrStyles = strStyleSheet.split('}');
for (var iStl = 0; iStl < arrStyles.length; iStl++) {
var arrRules = arrStyles[iStl].split('{');
if (arrRules[0] && arrRules[1]) {
var arrSelectors = arrRules[0].split(',');
for (var iSel = 0; iSel < arrSelectors.length; iSel++) {
this.addRule(arrSelectors[iSel],arrRules[1]);
}
}
}
}
};
Zapatec.StyleSheet.prototype.addRules = function(cssStr){
if(!cssStr || Zapatec.is_opera){return;}
if(Zapatec.is_ie){
if(this.styleSheet.disabled){
var self = this;
setTimeout(function(){self.styleSheet.cssText = cssStr;},10);
} else {
this.styleSheet.cssText = cssStr;
}
} else {
var cssText = document.createTextNode(cssStr);
this.styleSheet.appendChild(cssText);
}
}
if (typeof zapatecTransport != 'function') {
zapatecTransport =
Zapatec.Transport = function() {};
if (typeof ActiveXObject != 'undefined') {
Zapatec.Transport.XMLDOM = null;
Zapatec.Transport.XMLHTTP = null;
Zapatec.Transport.pickActiveXVersion = function(aVersions) {
for (var iVn = 0; iVn < aVersions.length; iVn++) {
try {
var oDoc = new ActiveXObject(aVersions[iVn]);
if (oDoc) {
return aVersions[iVn];
}
} catch (oExpn) {};
}
return null;
};
Zapatec.Transport.XMLDOM = zapatecTransport.pickActiveXVersion([
'Msxml2.DOMDocument.4.0',
'Msxml2.DOMDocument.3.0',
'MSXML2.DOMDocument',
'MSXML.DOMDocument',
'Microsoft.XMLDOM'
]);
Zapatec.Transport.XMLHTTP = zapatecTransport.pickActiveXVersion([
'Msxml2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP'
]);
Zapatec.Transport.pickActiveXVersion = null;
}
Zapatec.Transport.createXmlHttpRequest = function() {
if (typeof ActiveXObject != 'undefined') {
try {
return new ActiveXObject(zapatecTransport.XMLHTTP);
} catch (oExpn) {};
}
if (typeof XMLHttpRequest != 'undefined') {
return new XMLHttpRequest();
}
return null;
};
Zapatec.Transport.isBusy = function(oArg) {
var oContr = oArg.busyContainer;
if (typeof oContr == 'string') {
oContr = document.getElementById(oContr);
}
if (!oContr) {return;}
var sImage = oArg.busyImage;
if (typeof sImage != 'string') {
sImage = '';
}
sImage = sImage.split('/').pop();
if (!sImage.length) {
sImage = 'zpbusy.gif';
}
var oFC = oContr.firstChild;
if (oFC) {
oFC = oFC.firstChild;
if (oFC) {
oFC = oFC.firstChild;
if (oFC && oFC.tagName && oFC.tagName.toLowerCase() == 'img') {
var sSrc = oFC.getAttribute('src');
if (typeof sSrc == 'string' && sSrc.length) {
sSrc = sSrc.split('/').pop();
if (sSrc == sImage) {
return true;
}
}
}
}
}
return false;
};
Zapatec.Transport.showBusy = function(oArg) {
if (zapatecTransport.isBusy(oArg)) {return;}
var oContr = oArg.busyContainer;
if (typeof oContr == 'string') {
oContr = document.getElementById(oContr);
}
if (!oContr) {return;}
var sImage = oArg.busyImage;
var sImageWidth = oArg.busyImageWidth;
var sImageHeight = oArg.busyImageHeight;
if (typeof sImage != 'string' || !sImage.length) {
sImage = 'zpbusy.gif';
} else {
if (typeof sImageWidth == 'number' ||
(typeof sImageWidth == 'string' && /\d$/.test(sImageWidth))) {
sImageWidth += 'px';
}
if (typeof sImageHeight == 'number' ||
(typeof sImageHeight == 'string' && /\d$/.test(sImageHeight))) {
sImageHeight += 'px';
}
}
if (!sImageWidth) {
sImageWidth = '65px';
}
if (!sImageHeight) {
sImageHeight = '35px';
}
var sPath = '';
if (sImage.indexOf('/') < 0) {
if (Zapatec.zapatecPath) {
sPath = Zapatec.zapatecPath;
} else {
sPath = zapatecTransport.getPath('transport.js');
}
}
var aImg = [];
aImg.push('<img src="');
aImg.push(sPath);
aImg.push(sImage);
aImg.push('"');
if (sImageWidth || sImageHeight) {
aImg.push(' style="');
if (sImageWidth) {
aImg.push('width:');
aImg.push(sImageWidth);
aImg.push(';');
}
if (sImageHeight) {
aImg.push('height:');
aImg.push(sImageHeight);
}
aImg.push('"');
}
aImg.push(' />');
var iContainerWidth = oContr.offsetWidth;
var iContainerHeight = oContr.offsetHeight;
var oBusyContr = zapatecUtils.createElement('div');
oBusyContr.style.position = 'relative';
oBusyContr.style.zIndex = 2147483583;
var oBusy = zapatecUtils.createElement('div',oBusyContr);
oBusy.style.position = 'absolute';
oBusy.innerHTML = aImg.join('');
oContr.insertBefore(oBusyContr,oContr.firstChild);
var iBusyWidth = oBusy.offsetWidth;
var iBusyHeight = oBusy.offsetHeight;
if (iContainerWidth > iBusyWidth) {
oBusy.style.left = oContr.scrollLeft +
(iContainerWidth - iBusyWidth) / 2 + 'px';
}
if (iContainerHeight > iBusyHeight) {
oBusy.style.top = oContr.scrollTop +
(iContainerHeight - iBusyHeight) / 2 + 'px';
}
};
Zapatec.Transport.removeBusy = function(oArg) {
var oContr = oArg.busyContainer;
if (typeof oContr == 'string') {
oContr = document.getElementById(oContr);
}
if (!oContr) {return;}
if (zapatecTransport.isBusy(oArg)) {
oContr.removeChild(oContr.firstChild);
}
};
Zapatec.Transport.fetch = function(oArg) {
if (oArg == null || typeof oArg != 'object') {
return null;
}
if (!oArg.url) {
return null;
}
if (!oArg.method) {
oArg.method = 'GET';
}
if (typeof oArg.async == 'undefined') {
oArg.async = true;
}
if (!oArg.contentType && oArg.method.toUpperCase() == 'POST') {
oArg.contentType = 'application/x-www-form-urlencoded';
}
if (!oArg.content) {
oArg.content = null;
}
if (!oArg.onLoad) {
oArg.onLoad = null;
}
if (!oArg.onError) {
oArg.onError = null;
}
var oRequest = zapatecTransport.createXmlHttpRequest();
if (oRequest == null) {
return null;
}
zapatecTransport.showBusy(oArg);
var bErrorDisplayed = false;
var funcOnReady = function() {
zapatecTransport.removeBusy(oArg);
try {
if (oRequest.status == 200 || oRequest.status == 304 ||
(location.protocol == 'file:' && !oRequest.status)) {
if (typeof oArg.onLoad == 'function') {
oArg.onLoad(oRequest);
}
} else if (!bErrorDisplayed) {
bErrorDisplayed = true;
zapatecTransport.displayError(
oRequest.status,
"Error: Can't fetch " + oArg.url + '. ' + (oRequest.statusText || ''),
oArg.onError
);
}
} catch (oExpn) {
if (oExpn.name == 'NS_ERROR_NOT_AVAILABLE') {
if (!bErrorDisplayed) {
bErrorDisplayed = true;
zapatecTransport.displayError(
0,
"Error: Can't fetch " + oArg.url + '. File not found.',
oArg.onError
);
}
} else {
throw(oExpn);
}
};
};
try {
if (typeof oArg.username != 'undefined' &&
typeof oArg.password != 'undefined') {
oRequest.open(
oArg.method,
oArg.url,
oArg.async,
oArg.username,
oArg.password
);
} else {
oRequest.open(
oArg.method,
oArg.url,
oArg.async
);
}
if (oArg.async) {
oRequest.onreadystatechange = function() {
if (oRequest.readyState == 4) {
funcOnReady();
oRequest.onreadystatechange = {};
}
};
}
if (oArg.contentType) {
oRequest.setRequestHeader('Content-Type',oArg.contentType);
}
oRequest.send(oArg.content);
if (!oArg.async) {
funcOnReady();
}
return oRequest;
} catch (oExpn) {
zapatecTransport.removeBusy(oArg);
if (oExpn.name && oExpn.name == 'NS_ERROR_FILE_NOT_FOUND') {
if (!bErrorDisplayed) {
bErrorDisplayed = true;
zapatecTransport.displayError(
0,
"Error: Can't fetch " + oArg.url + '. File not found.',
oArg.onError
);
}
} else {
throw(oExpn);
}
};
return null;
};
Zapatec.Transport.parseHtml = function(sHtml,oContainer) {
sHtml += '';
sHtml = sHtml.replace(/^\s+/g,'');
var oTmpContr;
if (document.createElementNS) {
oTmpContr =
document.createElementNS('http://www.w3.org/1999/xhtml','div');
} else {
oTmpContr = document.createElement('div');
}
oTmpContr.innerHTML = sHtml;
if (oContainer) {
var oEl = oTmpContr.firstChild;
while (oEl) {
oContainer.appendChild(oEl);
oEl = oTmpContr.firstChild;
}
} else {
return oTmpContr;
}
};
Zapatec.Transport.evalGlobalScope = function(sScript) {
if (typeof sScript != 'string' || !sScript.match(/\S/)) {return;}
if (window.execScript) {
window.execScript(sScript,'javascript');
} else if (window.eval) {
window.eval(sScript);
}
};
Zapatec.Transport.setInnerHtml = function(oArg) {
if (!oArg || typeof oArg.html != 'string') {return;}
var sHtml = oArg.html;
var oContr = null;
if (typeof oArg.container == 'string') {
oContr = document.getElementById(oArg.container);
} else if (typeof oArg.container == 'object') {
oContr = oArg.container;
}
var aScripts = [];
if (sHtml.match(/<\s*\/\s*script\s*>/i)) {
var aTokens = sHtml.split(/<\s*\/\s*script\s*>/i);
var aHtml = [];
for (var iToken = aTokens.length - 1; iToken >= 0; iToken--) {
var sToken = aTokens[iToken];
if (sToken.match(/\S/)) {
var aMatch = sToken.match(/<\s*script([^>]*)>/i);
if (aMatch) {
var aCouple = sToken.split(/<\s*script[^>]*>/i);
while (aCouple.length < 2) {
if (sToken.match(/^<\s*script[^>]*>/i)) {
aCouple.unshift('');
} else {
aCouple.push('');
}
}
aHtml.unshift(aCouple[0]);
var sAttrs = aMatch[1];
var srtScript = aCouple[1];
if (sAttrs.match(/\s+src\s*=/i)) {
srtScript = '';
} else {
srtScript = srtScript.replace(/function\s+([^(]+)/g,'$1=function');
}
aScripts.push([sAttrs,srtScript]);
} else if (iToken < aTokens.length - 1) {
aTokens[iToken - 1] += '</script>' + sToken;
} else {
aHtml.unshift(sToken);
}
} else {
aHtml.unshift(sToken);
}
}
sHtml = aHtml.join('');
}
if (oContr) {
if (window.opera) {
oContr.innerHTML = '<form></form>';
}
oContr.innerHTML = sHtml;
}
for (var iScript = 0; iScript < aScripts.length; iScript++) {
if (aScripts[iScript][1].length) {
zapatecTransport.evalGlobalScope(aScripts[iScript][1]);
}
var sAttrs = aScripts[iScript][0];
sAttrs = zapatecUtils.multispacekill(sAttrs).replace(/ = /g,'=');
if (sAttrs.indexOf('src=') >= 0) {
var oContr = document.body;
if (!oContr) {
oContr = document.getElementsByTagName('head')[0];
if (!oContr) {
oContr = document;
}
}
var aAttrs = sAttrs.split(' ');
var oScript = zapatecUtils.createElement('script');
for (var iAttr = 0; iAttr < aAttrs.length; iAttr++) {
var aAttr = aAttrs[iAttr].split('=');
if (aAttr.length > 1) {
oScript.setAttribute(aAttr[0],
aAttr[1].match(/^[\s|"|']*([\s|\S]*[^'|"])[\s|"|']*$/)[1]);
} else {
oScript.setAttribute(aAttr[0],aAttr[0]);
}
}
oContr.appendChild(oScript);
}
}
};
Zapatec.Transport.fetchXmlDoc = function(oArg) {
if (oArg == null || typeof oArg != 'object') {
return null;
}
if (!oArg.url) {
return null;
}
if (typeof oArg.async == 'undefined') {
oArg.async = true;
}
if (!oArg.onLoad) {
oArg.onLoad = null;
}
if (!oArg.onError) {
oArg.onError = null;
}
if (!oArg.method && typeof oArg.username == 'undefined' &&
typeof oArg.password == 'undefined') {
if (document.implementation && document.implementation.createDocument) {
var oDoc = null;
if (!oArg.reliable) {
oArg.reliable = false;
}
var oFetchArg = {};
for (var sKey in oArg) {
oFetchArg[sKey] = oArg[sKey];
}
if (oArg.async) {
oFetchArg.onLoad = function(oRequest) {
oFetchArg.onLoad = null;
var parser = new DOMParser();
oDoc = parser.parseFromString(oRequest.responseText,"text/xml");
zapatecTransport.removeBusy(oArg);
zapatecTransport.onXmlDocLoad(oDoc,oArg.onLoad,oArg.onError);
};
} else {
oFetchArg.onLoad = null;
}
var oRequest = zapatecTransport.fetch(oFetchArg);
if (oRequest) {
if (oArg.async) {
return oRequest;
} else {
var parser = new DOMParser();
oDoc = parser.parseFromString(oRequest.responseText,"text/xml");
zapatecTransport.removeBusy(oArg);
zapatecTransport.onXmlDocLoad(oDoc,oArg.onLoad,oArg.onError);
return oDoc;
}
}
return null;
}
if (typeof ActiveXObject != 'undefined') {
zapatecTransport.showBusy(oArg);
try {
var oDoc = new ActiveXObject(zapatecTransport.XMLDOM);
oDoc.async = oArg.async;
if (oArg.async) {
oDoc.onreadystatechange = function() {
if (oDoc.readyState == 4) {
zapatecTransport.removeBusy(oArg);
zapatecTransport.onXmlDocLoad(oDoc,oArg.onLoad,oArg.onError);
oDoc.onreadystatechange = {};
}
};
}
oDoc.load(oArg.url);
if (!oArg.async) {
zapatecTransport.removeBusy(oArg);
zapatecTransport.onXmlDocLoad(oDoc,oArg.onLoad,oArg.onError);
}
return oDoc;
} catch (oExpn) {
zapatecTransport.removeBusy(oArg);
};
}
}
var oFetchArg = {};
for (var sKey in oArg) {
oFetchArg[sKey] = oArg[sKey];
}
if (oArg.async) {
oFetchArg.onLoad = function(oRequest) {
zapatecTransport.parseXml({
strXml:oRequest.responseText,
onLoad:oArg.onLoad,
onError:oArg.onError
});
};
} else {
oFetchArg.onLoad = null;
}
var oRequest = zapatecTransport.fetch(oFetchArg);
if (oRequest) {
if (oArg.async) {
return oRequest;
} else {
return zapatecTransport.parseXml({
strXml:oRequest.responseText,
onLoad:oArg.onLoad,
onError:oArg.onError
});
}
}
return null;
};
Zapatec.Transport.parseXml = function(oArg) {
if (oArg == null || typeof oArg != 'object') {
return null;
}
if (!oArg.strXml) {
return null;
}
if (!oArg.onLoad) {
oArg.onLoad = null;
}
if (!oArg.onError) {
oArg.onError = null;
}
if (window.DOMParser) {
try {
var oDoc = (new DOMParser()).parseFromString(oArg.strXml,'text/xml');
zapatecTransport.onXmlDocLoad(oDoc,oArg.onLoad,oArg.onError);
return oDoc;
} catch (oExpn) {
zapatecTransport.displayError(
0,
'Error: Cannot parse. String does not appear to be a valid XML fragment.',
oArg.onError
);
};
return null;
}
if (typeof ActiveXObject != 'undefined') {
try {
var oDoc = new ActiveXObject(zapatecTransport.XMLDOM);
oDoc.loadXML(oArg.strXml);
zapatecTransport.onXmlDocLoad(oDoc,oArg.onLoad,oArg.onError);
return oDoc;
} catch (oExpn) {};
}
return null;
};
Zapatec.Transport.onXmlDocLoad = function(oDoc,onLoad,onError) {
var sError = null;
if (oDoc.parseError) {
sError = oDoc.parseError.reason;
if (oDoc.parseError.srcText) {
sError += 'Location: ' + oDoc.parseError.url +
'\nLine number ' + oDoc.parseError.line + ',column ' +
oDoc.parseError.linepos + ':\n' +
oDoc.parseError.srcText + '\n';
}
} else if (oDoc.documentElement &&
oDoc.documentElement.tagName == 'parsererror') {
sError = oDoc.documentElement.firstChild.data + '\n' +
oDoc.documentElement.firstChild.nextSibling.firstChild.data;
} else if (!oDoc.documentElement) {
sError = 'String does not appear to be a valid XML fragment.';
}
if (sError) {
zapatecTransport.displayError(
0,
'Error: Cannot parse. ' + sError,
onError
);
} else {
if (typeof onLoad == 'function') {
onLoad(oDoc);
}
}
};
Zapatec.Transport.serializeXmlDoc = function(oDoc) {
if (window.XMLSerializer) {
return (new XMLSerializer).serializeToString(oDoc);
}
if (oDoc.xml) {
return oDoc.xml;
}
};
Zapatec.Transport.fetchJsonObj = function(oArg) {
if (oArg == null || typeof oArg != 'object') {
return null;
}
if (!oArg.url) {
return null;
}
if (typeof oArg.async == 'undefined') {
oArg.async = true;
}
if (!oArg.reliable) {
oArg.reliable = false;
}
var oFetchArg = {};
for (var sKey in oArg) {
oFetchArg[sKey] = oArg[sKey];
}
if (oArg.async) {
oFetchArg.onLoad = function(oRequest) {
zapatecTransport.parseJson({
strJson:oRequest.responseText,
reliable:oArg.reliable,
onLoad:oArg.onLoad,
onError:oArg.onError
});
};
} else {
oFetchArg.onLoad = null;
}
var oRequest = zapatecTransport.fetch(oFetchArg);
if (oRequest) {
if (oArg.async) {
return oRequest;
} else {
return zapatecTransport.parseJson({
strJson:oRequest.responseText,
reliable:oArg.reliable,
onLoad:oArg.onLoad,
onError:oArg.onError
});
}
}
return null;
};
Zapatec.Transport.parseJson = function(oArg) {
if (oArg == null || typeof oArg != 'object') {
return null;
}
if (!oArg.reliable) {
oArg.reliable = false;
}
if (!oArg.onLoad) {
oArg.onLoad = null;
}
if (!oArg.onError) {
oArg.onError = null;
}
var oJson = null;
try {
if (oArg.reliable) {
if (oArg.strJson) {
oJson = eval('(' + oArg.strJson + ')');
}
} else {
oJson = zapatecTransport.parseJsonStr(oArg.strJson);
}
} catch (oExpn) {
var sError =
'Error: Cannot parse. String does not appear to be a valid JSON fragment: ' +
oExpn.message;
if (typeof oExpn.text == 'string') {
sError += '\n' + oExpn.text;
}
sError += '\n' + oArg.strJson;
zapatecTransport.displayError(0,sError,oArg.onError);
return null;
};
if (typeof oArg.onLoad == 'function') {
oArg.onLoad(oJson);
}
return oJson;
};
Zapatec.Transport.parseJsonStr = function(text) {
var p = /^\s*(([,:{}\[\]])|"(\\.|[^\x00-\x1f"\\])*"|-?\d+(\.\d*)?([eE][+-]?\d+)?|true|false|null)\s*/,
token,
operator;
function error(m,t) {
throw {
name: 'JSONError',
message: m,
text: t || operator || token
};
}
function next(b) {
if (b && b != operator) {
error("Expected '" + b + "'");
}
if (text) {
var t = p.exec(text);
if (t) {
if (t[2]) {
token = null;
operator = t[2];
} else {
operator = null;
try {
token = eval(t[1]);
} catch (e) {
error("Bad token",t[1]);
}
}
text = text.substring(t[0].length);
} else {
error("Unrecognized token",text);
}
} else {
token = operator = null;
}
}
function val() {
var k,o;
switch (operator) {
case '{':
next('{');
o = {};
if (operator != '}') {
for (;;) {
if (operator || typeof token != 'string') {
error("Missing key");
}
k = token;
next();
next(':');
o[k] = val();
if (operator != ',') {
break;
}
next(',');
}
}
next('}');
return o;
case '[':
next('[');
o = [];
if (operator != ']') {
for (;;) {
o.push(val());
if (operator != ',') {
break;
}
next(',');
}
}
next(']');
return o;
default:
if (operator !== null) {
error("Missing value");
}
k = token;
next();
return k;
}
}
next();
return val();
};
Zapatec.Transport.serializeJsonObj = function(v,bAllowFunctions) {
var a = [];
var e = function(s) {
a[a.length] = s;
};
var g = function(x) {
var c,i,l,v;
switch (typeof x) {
case 'object':
if (x) {
if (x instanceof Array) {
e('[');
l = a.length;
for (i = 0; i < x.length; i += 1) {
if (l < a.length) {
e(',');
}
g(x[i]);
}
e(']');
return;
} else if (x instanceof Date) {
e('"');
e(x.toString());
e('"');
return;
} else if (typeof x.toString != 'undefined') {
e('{');
l = a.length;
for (i in x) {
v = x[i];
if (x.hasOwnProperty(i) && typeof v != 'undefined' &&
(bAllowFunctions || typeof v != 'function')) {
if (l < a.length) {
e(',');
}
g(i);
e(':');
g(v);
}
}
e('}');
return;
}
}
e('null');
return;
case 'number':
e(isFinite(x) ? +x : 'null');
return;
case 'string':
l = x.length;
e('"');
for (i = 0; i < l; i += 1) {
c = x.charAt(i);
if (c >= ' ') {
if (c == '\\' || c == '"') {
e('\\');
}
e(c);
} else {
switch (c) {
case '\b':
e('\\b');
break;
case '\f':
e('\\f');
break;
case '\n':
e('\\n');
break;
case '\r':
e('\\r');
break;
case '\t':
e('\\t');
break;
default:
c = c.charCodeAt();
e('\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16));
}
}
}
e('"');
return;
case 'boolean':
e(String(x));
return;
case 'function':
if (bAllowFunctions) {
e(x.toString().replace(/function anonymous/g,'function'));
} else {
e('null');
}
return;
default:
e('null');
return;
}
};
g(v);
return a.join('');
};
Zapatec.Transport.displayError = function(iErrCode,sError,onError) {
if (typeof onError == 'function') {
onError({
errorCode: iErrCode,
errorDescription: sError
});
} else if (typeof zapatecDebug == 'function') {
zapatecDebug.log.error('Zapatec.Transport: ' + sError);
}
};
Zapatec.Transport.translateUrl = function(oArg) {
if (!oArg || !oArg.url) {
return null;
}
var aFullUrl = oArg.url.split('?',2);
var sUrl = aFullUrl[0];
if (sUrl.indexOf(':') >= 0) {
return oArg.url;
}
var oLocation = document.location;
var sPort = oLocation.port;
if (sPort) {
sPort = ':' + sPort;
}
if (sUrl.charAt(0) == '/') {
aFullUrl[0] =
[oLocation.protocol,'//',oLocation.hostname,sPort,sUrl].join('');
} else {
var sLocation;
if (sPort) {
sLocation = [oLocation.protocol,'//',oLocation.hostname,sPort,
oLocation.pathname].join('');
} else {
sLocation = oLocation.toString();
}
var sRelativeTo;
if (typeof oArg.relativeTo != 'string') {
sRelativeTo = sLocation.split('?',2)[0];
} else {
sRelativeTo = oArg.relativeTo.split('?',2)[0];
if (sRelativeTo.indexOf('/') < 0) {
sRelativeTo = sLocation.split('?',2)[0];
} else if (sRelativeTo.charAt(0) != '/' &&
sRelativeTo.indexOf(':') < 0) {
sRelativeTo = zapatecTransport.translateUrl({
url: sRelativeTo
});
}
}
sRelativeTo = sRelativeTo.split('#')[0];
var aUrl = sUrl.split('/');
var aRelativeTo = sRelativeTo.split('/');
aRelativeTo.pop();
for (var iToken = 0; iToken < aUrl.length; iToken++) {
var sToken = aUrl[iToken];
if (sToken == '..') {
aRelativeTo.pop();
} else if (sToken != '.') {
aRelativeTo.push(sToken);
}
}
aFullUrl[0] = aRelativeTo.join('/');
}
return aFullUrl.join('?');
};
Zapatec.Transport.loading = {};
Zapatec.Transport.setupEvents = function(oArg) {
if (!oArg) {
return {};
}
if (oArg.force || !Zapatec.EventDriven || !oArg.url) {
return {
onLoad:oArg.onLoad,
onError:oArg.onError
};
}
var sUrl = oArg.url;
if (typeof oArg.onLoad == 'function') {
Zapatec.EventDriven.addEventListener('zpTransportOnLoad' + sUrl,
oArg.onLoad);
}
if (typeof oArg.onError == 'function') {
Zapatec.EventDriven.addEventListener('zpTransportOnError' + sUrl,
oArg.onError);
}
if (zapatecTransport.loading[sUrl]) {
return {
loading: true
};
} else {
zapatecTransport.loading[sUrl] = true;
return {
onLoad: new Function("Zapatec.EventDriven.fireEvent('zpTransportOnLoad" +
sUrl + "');Zapatec.EventDriven.removeEvent('zpTransportOnLoad" +
sUrl + "');Zapatec.EventDriven.removeEvent('zpTransportOnError" +
sUrl + "');zapatecTransport.loading['" + sUrl + "'] = false;"),
onError: new Function('oError',
"Zapatec.EventDriven.fireEvent('zpTransportOnError" +
sUrl + "',oError);Zapatec.EventDriven.removeEvent('zpTransportOnLoad" +
sUrl + "');Zapatec.EventDriven.removeEvent('zpTransportOnError" +
sUrl + "');zapatecTransport.loading['" + sUrl + "'] = false;")
};
}
};
Zapatec.Transport.loadedJS = {};
Zapatec.Transport.isLoadedJS = function(sUrl,sAbsUrl) {
if (typeof sAbsUrl == 'undefined') {
sAbsUrl = zapatecTransport.translateUrl({url: sUrl});
}
if (zapatecTransport.loadedJS[sAbsUrl]) {
return true;
}
var aScripts = document.getElementsByTagName('script');
for (var iScript = 0; iScript < aScripts.length; iScript++) {
var sSrc = aScripts[iScript].getAttribute('src') || '';
if (sSrc == sUrl) {
zapatecTransport.loadedJS[sAbsUrl] = true;
return true;
}
}
return false;
};
Zapatec.Transport.getPath = function(sScriptFileName) {
var aScripts = document.getElementsByTagName('script');
for (var iScript = aScripts.length - 1; iScript >= 0; iScript--) {
var sSrc = aScripts[iScript].getAttribute('src') || '';
var aTokens = sSrc.split('/');
var sLastToken = aTokens.pop();
if (sLastToken == sScriptFileName) {
return aTokens.length ? aTokens.join('/') + '/' : '';
}
}
for (var sSrc in zapatecTransport.loadedJS) {
var aTokens = sSrc.split('/');
var sLastToken = aTokens.pop();
if (sLastToken == sScriptFileName) {
return aTokens.length ? aTokens.join('/') + '/' : '';
}
}
return '';
};
Zapatec.Transport.include = function(sSrc,sId,bForce) {
if (zapatecDoNotInclude) {return;}
var sAbsUrl = zapatecTransport.translateUrl({url: sSrc});
if (!bForce && zapatecTransport.isLoadedJS(sSrc,sAbsUrl)) {return;}
document.write('<script type="text/javascript" src="' + sSrc +
(typeof sId == 'string' ? '" id="' + sId : '') + '"></script>');
zapatecTransport.loadedJS[sAbsUrl] = true;
};
Zapatec.include = zapatecTransport.include;
Zapatec.Transport.includeJS = function(sSrc,sId) {
setTimeout(function() {
var oContr = document.body;
if (!oContr) {
oContr = document.getElementsByTagName('head')[0];
if (!oContr) {
oContr = document;
}
}
var oScript = document.createElement('script');
oScript.type = 'text/javascript';
oScript.src = sSrc;
if (typeof sId == 'string') {
oScript.id = sId;
}
oContr.appendChild(oScript);
},0);
};
Zapatec.Transport.loadJS = function(oArg) {
if (!(oArg instanceof Object)) {return;}
if (typeof oArg.async == 'undefined') {
oArg.async = true;
}
var sUrl = null;
if (oArg.url) {
sUrl = oArg.url;
} else if (oArg.module) {
var sPath = '';
if (typeof oArg.path != 'undefined') {
sPath = oArg.path;
} else if (typeof Zapatec.zapatecPath != 'undefined') {
sPath = Zapatec.zapatecPath;
}
sUrl = sPath + oArg.module + '.js';
} else {return;}
var sAbsUrl = zapatecTransport.translateUrl({url: sUrl});
if (!oArg.onLoad) {
oArg.onLoad = null;
}
if (!oArg.onError) {
oArg.onError = null;
}
if (zapatecDoNotInclude ||
(!oArg.force && zapatecTransport.isLoadedJS(sUrl,sAbsUrl))) {
if (typeof oArg.onLoad == 'function') {
oArg.onLoad();
}
return;
}
var oHandlers = zapatecTransport.setupEvents({
url: sAbsUrl,
force:oArg.force,
onLoad:oArg.onLoad,
onError:oArg.onError
});
if (oHandlers.loading) {return;}
zapatecTransport.fetch({
url: sUrl,
async:oArg.async,
onLoad: function(oRequest) {
if (oArg.force || !zapatecTransport.loadedJS[sAbsUrl]) {
var aTokens = sUrl.split('/');
var sLastToken = aTokens.pop();
Zapatec.lastLoadedModule = aTokens.join('/') + '/';
zapatecTransport.evalGlobalScope(oRequest.responseText);
Zapatec.lastLoadedModule = null;
zapatecTransport.loadedJS[sAbsUrl] = true;
}
if (typeof oHandlers.onLoad == 'function') {
oHandlers.onLoad();
}
},
onError:oHandlers.onError
});
};
Zapatec.Transport.includeCSS = function(sHref) {};
Zapatec.Transport.loadedCss = {};
Zapatec.Transport.loadCss = function(oArg) {
if (!(oArg instanceof Object)) {return;}
if (!oArg.url) {return;}
if (typeof oArg.async == 'undefined') {
oArg.async = true;
}
var sAbsUrl = zapatecTransport.translateUrl({url:oArg.url});
if (!oArg.force) {
if (zapatecTransport.loadedCss[sAbsUrl]) {
if (typeof oArg.onLoad == 'function') {
oArg.onLoad();
}
return;
}
var aLinks = document.getElementsByTagName('link');
for (var iLnk = 0; iLnk < aLinks.length; iLnk++) {
var sHref = aLinks[iLnk].getAttribute('href') || '';
sHref = zapatecTransport.translateUrl({url: sHref});
if (sHref == sAbsUrl) {
zapatecTransport.loadedCss[sAbsUrl] = true;
if (typeof oArg.onLoad == 'function') {
oArg.onLoad();
}
return;
}
}
}
var oHandlers = zapatecTransport.setupEvents({
url: sAbsUrl,
force:oArg.force,
onLoad:oArg.onLoad,
onError:oArg.onError
});
if (oHandlers.loading) {return;}
zapatecTransport.fetch({
url: sAbsUrl,
async:oArg.async,
onLoad: function(oRequest) {
var sCss = oRequest.responseText;
var aResultCss = [];
var aImgUrls = [];
var aCssUrls = [];
var iPos = 0;
var iNextPos = sCss.indexOf('url(',iPos);
while (iNextPos >= 0) {
iNextPos += 4;
var sToken = sCss.substring(iPos,iNextPos);
var bIsImport = /@import\s+url\($/.test(sToken);
aResultCss.push(sToken);
iPos = iNextPos;
iNextPos = sCss.indexOf(')',iPos);
if (iNextPos >= 0) {
var sImgUrl = sCss.substring(iPos,iNextPos);
sImgUrl = sImgUrl.replace(/['"]/g,'');
sImgUrl = zapatecTransport.translateUrl({
url: sImgUrl,
relativeTo:oArg.url
});
sImgUrl = zapatecTransport.translateUrl({
url: sImgUrl
});
aResultCss.push(sImgUrl);
if (bIsImport) {
aCssUrls.push(sImgUrl);
} else {
aImgUrls.push(sImgUrl);
}
iPos = iNextPos;
iNextPos = sCss.indexOf('url(',iPos);
}
}
aResultCss.push(sCss.substr(iPos));
sCss = aResultCss.join('');
zapatecTransport.loadCssList({
urls: aCssUrls,
async:oArg.async,
onLoad: function() {
(new Zapatec.StyleSheet()).addParse(sCss);
if (typeof oHandlers.onLoad == 'function') {
oHandlers.onLoad();
}
}
});
zapatecTransport.loadedCss[sAbsUrl] = true;
zapatecTransport.preloadImages({
urls: aImgUrls,
timeout: 60000
});
},
onError:oHandlers.onError
});
};
Zapatec.Transport.loadCssList = function(oArg) {
if (!(oArg instanceof Object)) {return;}
if (typeof oArg.async == 'undefined') {
oArg.async = true;
}
if (!oArg.onLoad) {
oArg.onLoad = null;
}
if (!oArg.onError) {
oArg.onError = null;
}
if (!oArg.urls || !oArg.urls.length) {
if (typeof oArg.onLoad == 'function') {
oArg.onLoad();
}
return;
}
var sUrl = oArg.urls.shift();
var funcOnLoad = function() {
zapatecTransport.loadCssList({
urls:oArg.urls,
async:oArg.async,
force:oArg.force,
onLoad:oArg.onLoad,
onError:oArg.onError
});
};
zapatecTransport.loadCss({
url: sUrl,
async:oArg.async,
force:oArg.force,
onLoad: funcOnLoad,
onError: function(oError) {
zapatecTransport.displayError(oError.errorCode,oError.errorDescription,
oArg.onError);
funcOnLoad();
}
});
};
Zapatec.Transport.imagePreloads = [];
Zapatec.Transport.preloadImages = function(oArg) {
if (typeof zapatecPreloadImages == 'function') {
zapatecTransport.imagePreloads.push(new zapatecPreloadImages(oArg));
}
};
}
zapatecWidget =
Zapatec.Widget = function(oArg) {
this.arg = oArg;
this.config = {};
zapatecWidget.SUPERconstructor.call(this);
this.init(oArg);
};
Zapatec.inherit(zapatecWidget,zapatecEventDriven);
Zapatec.Widget.id = 'Zapatec.Widget';
Zapatec.Widget.path = Zapatec.getPath('Zapatec.Widget');
Zapatec.Widget.prototype.init = function(oArg) {
zapatecWidget.windowDimensions = zapatecUtils.getWindowDimensions();
zapatecUtils.addEvent(window,'resize',zapatecWidget.onWindowResize,false,
true);
zapatecWidget.SUPERclass.init.call(this);
if (typeof this.id == 'undefined') {
var iId = 0;
while (zapatecWidgetAll[iId]) {
iId++;
}
this.id = iId;
zapatecWidgetAll[iId] = this;
}
this.configure(oArg);
this.addUserEventListeners();
this.addStandardEventListeners();
this.initLang();
this.loadTheme();
this.loadTemplate();
};
Zapatec.Widget.prototype.reconfigure = function(oArg) {
this.configure(oArg);
this.loadTheme();
this.loadTemplate();
if(oArg && (oArg.lang || oArg.langCountryCode || oArg.langEncoding)){
this.langStr = this.config.lang;
if(this.config.langCountryCode && this.config.langCountryCode.length > 0){
this.langStr += "_" + this.config.langCountryCode;
}
if(this.config.langEncoding && this.config.langEncoding.length > 0){
this.langStr += "-" + this.config.langEncoding;
}
}
if(
this.config.lang &&
this.config.lang.length > 0 &&
!(
Zapatec.Langs[this.config.langId] &&
Zapatec.Langs[this.config.langId][this.langStr]
)
){
this.debug(
this.config.lang + (
this.config.langCountryCode ?
" and country code " + this.config.langCountryCode : ""
) + (
this.config.langEncoding ?
" and encoding " + this.config.langEncoding : ""
)
);
this.config.lang = null;
this.config.langEncoding = null;
this.langStr = null;
}
};
Zapatec.Widget.prototype.reset = function() {
this.config = {};
this.reconfigure(this.arg);
};
Zapatec.Widget.prototype.configure = function(oArg) {
this.defineConfigOption('theme','icomplete');
this.defineConfigOption('templateFile','icomplete');
var sPath = this.constructor.path;
if (typeof sPath != 'undefined') {
this.defineConfigOption('themePath',zapatecTransport.translateUrl({
url: '../themes/',
relativeTo: sPath
}));
this.defineConfigOption('templateFilePath',zapatecTransport.translateUrl({
url: '../templates/',
relativeTo: sPath
}));
} else {
this.defineConfigOption('templateFilePath','../templates/');
}
this.defineConfigOption('templates');
this.defineConfigOption('asyncTheme',false);
this.defineConfigOption('source');
this.defineConfigOption('sourceType','html');
this.defineConfigOption('sourceFetchMethod','GET');
this.defineConfigOption('sourceFetchContentType');
this.defineConfigOption('sourceFetchContent');
this.defineConfigOption('callbackSource');
this.defineConfigOption('asyncSource',true);
this.defineConfigOption('reliableSource',true);
this.defineConfigOption('callbackConvertSource');
this.defineConfigOption('eventListeners',{});
this.defineConfigOption('langId');
this.defineConfigOption('lang');
this.defineConfigOption('langCountryCode');
this.defineConfigOption('langEncoding');
var oConfig = this.config;
var sOption;
if (oArg) {
for (sOption in oArg) {
if (typeof oConfig[sOption] != 'undefined') {
oConfig[sOption] = oArg[sOption];
} else {
this.debug('Unknown config option: ' + sOption + '.','warn');
}
}
}
};
Zapatec.Widget.prototype.getConfiguration = function() {
return this.config;
};
zapatecWidgetAll =
Zapatec.Widget.all = [];
Zapatec.Widget.getWidgetById = function(iId) {
return zapatecWidgetAll[iId];
};
zapatecWidgetGetWidgetById = zapatecWidget.getWidgetById;
Zapatec.Widget.prototype.addCircularRef = function(oElement,sProperty) {
if (!this.widgetCircularRefs) {
this.widgetCircularRefs = [];
}
this.widgetCircularRefs.push([oElement,sProperty]);
};
Zapatec.Widget.prototype.createProperty = function(oElement,sProperty,val) {
oElement[sProperty] = val;
this.addCircularRef(oElement,sProperty);
};
Zapatec.Widget.prototype.removeCircularRefs = function() {
if (!this.widgetCircularRefs) {return;}
for (var iRef = this.widgetCircularRefs.length - 1; iRef >= 0; iRef--) {
var oRef = this.widgetCircularRefs[iRef];
try{
oRef[0][oRef[1]] = null;
} catch (e){};
oRef[0] = null;
}
};
Zapatec.Widget.prototype.discard = function() {
this.discardEventHandlers();
this.discardControls();
this.discardTemplates();
this.arg = null;
this.config = null;
zapatecWidgetAll[this.id] = null;
this.removeCircularRefs();
};
Zapatec.Widget.removeCircularRefs = function() {
var oWidget;
for (var iWidget = zapatecWidgetAll.length - 1; iWidget >= 0; iWidget--) {
oWidget = zapatecWidgetAll[iWidget];
if (oWidget && typeof oWidget.discard == 'function') {
oWidget.discard();
}
}
};
zapatecUtils.addEvent(window,'unload',zapatecWidget.removeCircularRefs);
Zapatec.Widget.prototype.defineConfigOption = function(sOption,val) {
if (typeof this.config[sOption] == 'undefined') {
if (typeof val == 'undefined') {
this.config[sOption] = null;
} else {
this.config[sOption] = val;
}
}
};
Zapatec.Widget.prototype.addUserEventListeners = function() {
var oListeners = this.config.eventListeners;
var fListener,iListeners,iListener;
for (var sEvent in oListeners) {
if (oListeners.hasOwnProperty(sEvent)) {
vListener = oListeners[sEvent];
if (vListener instanceof Array) {
iListeners = vListener.length;
for (iListener = 0; iListener < iListeners; iListener++) {
this.addEventListener(sEvent,vListener[iListener]);
}
} else {
this.addEventListener(sEvent,vListener);
}
}
}
};
Zapatec.Widget.prototype.addStandardEventListeners = function() {
this.addEventListener('fetchSourceError',zapatecWidget.loadSourceError);
this.addEventListener('loadThemeError',zapatecWidget.loadThemeError);
this.addEventListener('loadTemplateError',zapatecWidget.loadTemplateError);
};
Zapatec.Widget.loadThemeError = function(oError) {
this.debug('Cannot load theme: ' +
(oError && oError.errorDescription ? oError.errorDescription : '') + '.');
};
Zapatec.Widget.loadTemplateError = function(oError) {
this.debug('Cannot load template: ' +
(oError && oError.errorDescription ? oError.errorDescription : '') + '.');
};
Zapatec.Widget.loadSourceError = function(oError) {
this.debug('Cannot load source: ' +
(oError && oError.errorDescription ? oError.errorDescription : '') + '.');
};
Zapatec.Widget.prototype.loadTheme = function() {
var oConfig = this.config;
if (typeof oConfig.theme == 'string' && oConfig.theme.length) {
var iPos = oConfig.theme.lastIndexOf('/');
if (iPos >= 0) {
iPos++;
oConfig.themePath = oConfig.theme.substring(0,iPos);
oConfig.theme = oConfig.theme.substring(iPos);
}
iPos = oConfig.theme.lastIndexOf('.');
if (iPos >= 0) {
oConfig.theme = oConfig.theme.substring(0,iPos);
}
oConfig.theme = oConfig.theme.toLowerCase();
if (oConfig.theme == 'auto') {
var sUserAgent = navigator.userAgent;
if (sUserAgent.indexOf('Windows NT 6') != -1) {
oConfig.theme = 'winvista';
} else if (sUserAgent.indexOf('Windows NT 5') != -1) {
oConfig.theme = 'winxp';
} else if (sUserAgent.indexOf('Win') != -1) {
oConfig.theme = 'win2k';
} else if (sUserAgent.indexOf('Mac') != -1) {
oConfig.theme = 'macosx';
} else {
oConfig.theme = 'default';
}
}
} else {
oConfig.theme = '';
}
if (oConfig.theme) {
this.fireEvent('loadThemeStart');
if (zapatecDoNotLoadThemes) {
this.themeLoaded = true;
this.fireEvent('loadThemeEnd');
} else {
this.themeLoaded = false;
var oWidget = this;
zapatecTransport.loadCss({
url:oConfig.themePath + oConfig.theme + '.css',
async:oConfig.asyncTheme,
onLoad: function() {
if (!oWidget) {return;}
oWidget.themeLoaded = true;
oWidget.fireEvent('loadThemeEnd');
oWidget = null;
},
onError: function(oError) {
if (!oWidget) {return;}
oWidget.themeLoaded = true;
oWidget.fireEvent('loadThemeEnd');
oWidget.fireEvent('loadThemeError',oError);
oWidget = null;
}
});
}
}
};
Zapatec.Widget.prototype.loadTemplate = function() {
var oConfig = this.config;
if (typeof oConfig.templateFile == 'string' && oConfig.templateFile.length) {
var iPos = oConfig.templateFile.lastIndexOf('/');
if (iPos >= 0) {
iPos++;
oConfig.templateFilePath = oConfig.templateFile.substring(0,iPos);
oConfig.templateFile = oConfig.templateFile.substring(iPos);
}
iPos = oConfig.templateFile.lastIndexOf('.');
if (iPos >= 0) {
oConfig.templateFile = oConfig.templateFile.substring(0,iPos);
}
oConfig.templateFile = oConfig.templateFile.toLowerCase();
} else {
oConfig.templateFile = '';
}
if (oConfig.templateFile && oConfig.templates) {
this.fireEvent('loadTemplateStart');
this.templateLoaded = false;
var sTemplateFile = this.constructor.templateFiles;
if (sTemplateFile) {
sTemplateFile = sTemplateFile[oConfig.templateFile];
}
if (sTemplateFile) {
this.parseTemplate(sTemplateFile);
} else {
var oWidget = this;
zapatecTransport.fetch({
url:oConfig.templateFilePath + oConfig.templateFile + '.html' +
(typeof zapatecDebug == 'function' ? '?' + Math.random() : ''),
onLoad: function(oRequest) {
if (!oWidget) {return;}
oWidget.parseTemplate(oRequest.responseText);
oWidget = null;
},
onError: function(oError) {
if (!oWidget) {return;}
oWidget.templateLoaded = true;
oWidget.fireEvent('loadTemplateEnd');
oWidget.fireEvent('loadTemplateError',oError);
oWidget = null;
}
});
}
}
};
Zapatec.Widget.prototype.parseTemplate = function(sHtml) {
var oContainer = zapatecTransport.parseHtml(sHtml);
oContainer.style.display = 'none';
document.body.insertBefore(oContainer,document.body.firstChild);
this.initTemplates();
document.body.removeChild(oContainer);
oContainer = null;
this.templateLoaded = true;
this.fireEvent('loadTemplateEnd');
this.display();
};
Zapatec.Widget.prototype.initTemplates = function() {
this.discardControls();
this.discardTemplates();
this.templates = {};
var oTemplates = this.templates;
var oTemplateContainers = this.config.templates;
if (!oTemplateContainers) {
this.debug('Missing config option "templates".');
return;
}
if (!zapatecTemplate) {
this.debug('Cannot find Zapatec.Template class.');
return;
}
var sTplContainer,sTplContainerId;
for (sTplContainer in oTemplateContainers) {
sTplContainerId = oTemplateContainers[sTplContainer];
if (typeof sTplContainerId == 'string' && sTplContainerId.length) {
oTemplates[sTplContainer] = new zapatecTemplate({
source: sTplContainerId,
sourceType: 'html'
});
}
}
};
Zapatec.Widget.prototype.discardTemplates = function() {
var oTemplates = this.templates;
if (oTemplates) {
var sTpl,oTpl;
for (sTpl in oTemplates) {
oTpl = oTemplates[sTpl];
if (oTpl && typeof oTpl.discard == 'function') {
oTpl.discard();
oTemplates[sTpl] = null;
}
}
}
};
Zapatec.Widget.prototype.display = function() {
if (!this.templates) {
this.debug('Templates are not loaded.');
}
};
Zapatec.Widget.prototype.initControls = function() {
this.discardControls();
this.controls = {};
};
Zapatec.Widget.prototype.discardControls = function() {
var oControls = this.controls;
if (oControls) {
var sControl,oControl;
for (sControl in oControls) {
oControl = oControls[sControl];
if (oControl && typeof oControl.discard == 'function') {
oControl.discard();
oControls[sControl] = null;
}
}
}
};
Zapatec.Widget.prototype.setEventHandlers = function() {
this.discardEventHandlers();
this.eventHandlers = {};
};
Zapatec.Widget.prototype.discardEventHandlers = function() {
var oHandlers = this.eventHandlers;
if (oHandlers) {
var fRemoveEvent = zapatecUtils.removeEvent;
var sHandler,oHandler,sEvent,fHandler;
for (sHandler in oHandlers) {
oHandler = oHandlers[sHandler];
if (oHandler) {
oEl = oHandler.element;
sEvent = oHandler.event;
fHandler = oHandler.handler;
if (oEl && typeof sEvent == 'string' && typeof fHandler == 'function') {
fRemoveEvent(oEl,sEvent,fHandler);
oHandler.element = null;
oHandler.handler = null;
oHandlers[sHandler] = null;
}
}
}
}
};
Zapatec.Widget.prototype.getClassName = function(oArg) {
var aClassName = [];
if (oArg && oArg.prefix) {
aClassName.push(oArg.prefix);
}
var sTheme = this.config.theme;
if (sTheme != '') {
aClassName.push(sTheme.charAt(0).toUpperCase());
aClassName.push(sTheme.substr(1));
}
if (oArg && oArg.suffix) {
aClassName.push(oArg.suffix);
}
return aClassName.join('');
};
Zapatec.Widget.prototype.formElementId = function(oArg) {
var aId = [];
if (oArg && oArg.prefix) {
aId.push(oArg.prefix);
} else {
aId.push('zpWidget');
}
aId.push(this.id);
if (oArg && oArg.suffix) {
aId.push(oArg.suffix);
} else {
aId.push('-');
}
if (typeof this.widgetUniqueIdCounter == 'undefined') {
this.widgetUniqueIdCounter = 0;
} else {
this.widgetUniqueIdCounter++;
}
aId.push(this.widgetUniqueIdCounter);
return aId.join('');
};
Zapatec.Widget.prototype.showContainer = function(effects,animSpeed,onFinish){
return this.showHideContainer(effects,animSpeed,onFinish,true);
}
Zapatec.Widget.prototype.hideContainer = function(effects,animSpeed,onFinish){
return this.showHideContainer(effects,animSpeed,onFinish,false);
}
Zapatec.Widget.prototype.showHideContainer = function(effects,animSpeed,onFinish,show){
if(this.container == null){
return null;
}
if(effects && effects.length > 0 && typeof(Zapatec.Effects) == 'undefined'){
var self = this;
zapatecTransport.loadJS({
url: Zapatec.zapatecPath + '../zpeffects/src/effects.js',
onLoad: function() {
self.showHideContainer(effects,animSpeed,onFinish,show);
}
});
return false;
}
if(animSpeed == null && isNaN(parseInt(animSpeed))){
animSpeed = 5;
}
if(!effects || effects.length == 0){
if(show){
this.container.style.display = "";
} else {
this.container.style.display = 'none';
}
if (onFinish) {
onFinish();
}
} else {
if(show){
Zapatec.Effects.show(this.container,animSpeed,effects,onFinish);
} else {
Zapatec.Effects.hide(this.container,animSpeed,effects,onFinish);
}
}
return true;
}
Zapatec.Widget.prototype.loadData = function(oArg) {
var oConfig = this.config;
if (typeof oConfig.callbackSource == 'function') {
var oSource = oConfig.callbackSource.call(this,oArg);
if (oSource) {
if (typeof oSource.source != 'undefined') {
oConfig.source = oSource.source;
}
if (typeof oSource.sourceType != 'undefined') {
oConfig.sourceType = oSource.sourceType;
}
if (typeof oSource.method != 'undefined') {
oConfig.sourceFetchMethod = oSource.method;
}
if (typeof oSource.contentType != 'undefined') {
oConfig.sourceFetchContentType = oSource.contentType;
}
if (typeof oSource.content != 'undefined') {
oConfig.sourceFetchContent = oSource.content;
}
}
}
var vSource = oConfig.source;
var sSourceType = oConfig.sourceType;
var fConvert = oConfig.callbackConvertSource;
if (typeof fConvert != 'function') {
fConvert = function(obj){return obj;};
}
if (vSource && typeof sSourceType == 'string') {
sSourceType = sSourceType.toLowerCase();
if (sSourceType == 'html') {
this.fireEvent('loadDataStart');
vSource = fConvert(vSource);
this.loadDataHtml(zapatecWidget.getElementById(vSource));
this.fireEvent('loadDataEnd');
} else if (sSourceType == 'html/text') {
this.fireEvent('loadDataStart');
vSource = fConvert(vSource);
this.loadDataHtmlText(vSource);
this.fireEvent('loadDataEnd');
} else if (sSourceType == 'html/url') {
this.fireEvent('fetchSourceStart');
var oWidget = this;
this.dataRequest = zapatecTransport.fetch({
url: vSource,
method:oConfig.sourceFetchMethod,
async:oConfig.asyncSource,
contentType:oConfig.sourceFetchContentType,
content:oConfig.sourceFetchContent,
onLoad: function(oRequest) {
oWidget.dataRequest = null;
oWidget.fireEvent('fetchSourceEnd');
oWidget.fireEvent('loadDataStart');
oWidget.loadDataHtmlText(fConvert(oRequest.responseText));
oWidget.fireEvent('loadDataEnd');
oWidget = null;
},
onError: function(oError) {
oWidget.dataRequest = null;
oWidget.fireEvent('fetchSourceError',oError);
oWidget.fireEvent('fetchSourceEnd');
oWidget.fireEvent('loadDataEnd');
oWidget = null;
}
});
} else if (sSourceType == 'json') {
this.fireEvent('loadDataStart');
if(typeof vSource == 'string'){
if (oConfig.reliableSource) {
vSource = eval(['(',vSource,')'].join(''));
} else {
vSource = zapatecTransport.parseJson({strJson: vSource});
}
}
vSource = fConvert(vSource);
this.loadDataJson(vSource);
this.fireEvent('loadDataEnd');
} else if (sSourceType == 'json/url') {
this.fireEvent('fetchSourceStart');
var oWidget = this;
this.dataRequest = zapatecTransport.fetchJsonObj({
url: vSource,
method:oConfig.sourceFetchMethod,
async:oConfig.asyncSource,
contentType:oConfig.sourceFetchContentType,
content:oConfig.sourceFetchContent,
reliable:oConfig.reliableSource,
onLoad: function(oResult) {
oWidget.dataRequest = null;
oWidget.fireEvent('fetchSourceEnd');
oWidget.fireEvent('loadDataStart');
oResult = fConvert(oResult);
oWidget.loadDataJson(oResult);
oWidget.fireEvent('loadDataEnd');
oWidget = null;
},
onError: function(oError) {
oWidget.dataRequest = null;
oWidget.fireEvent('fetchSourceError',oError);
oWidget.fireEvent('fetchSourceEnd');
oWidget.fireEvent('loadDataEnd');
oWidget = null;
}
});
} else if (sSourceType == 'xml') {
this.fireEvent('loadDataStart');
if (typeof vSource != 'object') {
vSource = zapatecTransport.parseXml({
strXml: vSource
});
}
vSource = fConvert(vSource);
this.loadDataXml(vSource);
this.fireEvent('loadDataEnd');
} else if (sSourceType == 'xml/url') {
this.fireEvent('fetchSourceStart');
var oWidget = this;
this.dataRequest = zapatecTransport.fetchXmlDoc({
url: vSource,
method:oConfig.sourceFetchMethod,
async:oConfig.asyncSource,
contentType:oConfig.sourceFetchContentType,
content:oConfig.sourceFetchContent,
onLoad: function(oResult) {
oWidget.dataRequest = null;
oWidget.fireEvent('fetchSourceEnd');
oWidget.fireEvent('loadDataStart');
oResult = fConvert(oResult);
oWidget.loadDataXml(oResult);
oWidget.fireEvent('loadDataEnd');
oWidget = null;
},
onError: function(oError) {
oWidget.dataRequest = null;
oWidget.fireEvent('fetchSourceError',oError);
oWidget.fireEvent('fetchSourceEnd');
oWidget.fireEvent('loadDataEnd');
oWidget = null;
}
});
}
} else {
this.fireEvent('loadDataStart');
vSource = fConvert(zapatecWidget.getElementById(vSource));
this.loadDataHtml(vSource);
this.fireEvent('loadDataEnd');
}
};
Zapatec.Widget.prototype.loadDataHtml = function(oSource) {};
Zapatec.Widget.prototype.loadDataHtmlText = function(sSource) {
var oTempContainer = zapatecTransport.parseHtml(sSource);
this.loadDataHtml(oTempContainer.firstChild);
};
Zapatec.Widget.prototype.loadDataJson = function(oSource) {};
Zapatec.Widget.prototype.loadDataXml = function(oSource) {};
Zapatec.Widget.prototype.loadDataAbort = function() {
var oRequest = this.dataRequest;
if (oRequest) {
this.dataRequest = null;
oRequest.onreadystatechange = function() {};
oRequest.abort();
}
};
Zapatec.Widget.prototype.receiveData = function(oArg) {
if (!oArg) {
oArg = {};
}
this.dataSender = oArg.widget;
this.fireEvent('receiveData',oArg);
};
Zapatec.Widget.prototype.replyData = function() {
return null;
};
Zapatec.Widget.prototype.replyDataCancel = function() {
this.fireEvent('replyDataCancel');
if (typeof this.hide == 'function') {
this.hide();
}
this.dataSender = null;
};
Zapatec.Widget.prototype.replyDataReturn = function(oArg) {
if (!oArg) {
oArg = {};
}
this.fireEvent('replyDataReturn',oArg);
var oWidget = oArg.widget;
if (!oWidget) {
oWidget = this.dataSender;
}
if (!oWidget || typeof oWidget.acceptData != 'function') {return;}
oWidget.acceptData({
widget: this,
data: this.replyData()
});
this.replyDataCancel();
};
Zapatec.Widget.prototype.acceptData = function(oArg) {
this.fireEvent('acceptData',oArg);
};
Zapatec.Widget.prototype.initLang = function(){
this.langStr = this.config.lang;
if(this.config.langCountryCode && this.config.langCountryCode.length > 0){
this.langStr += "_" + this.config.langCountryCode;
}
if(this.config.langEncoding && this.config.langEncoding.length > 0){
this.langStr += "-" + this.config.langEncoding;
}
if(
this.config.lang &&
this.config.lang.length > 0 &&
!(
Zapatec.Langs[this.config.langId] &&
Zapatec.Langs[this.config.langId][this.langStr]
)
){
this.debug(
"No language data found for language " +
this.config.lang + (
this.config.langCountryCode ?
" and country code " + this.config.langCountryCode : ""
) + (
this.config.langEncoding ?
" and encoding " + this.config.langEncoding : ""
)
);
this.config.lang = null;
this.config.langCountryCode = null;
this.config.langEncoding = null;
this.langStr = null;
}
};
Zapatec.Widget.prototype.getMessage = function(key){
if(arguments.length == 0){
return null;
}
if(
!Zapatec.Langs[this.config.langId] ||
!Zapatec.Langs[this.config.langId][this.langStr] ||
!Zapatec.Langs[this.config.langId][this.langStr][key]
){
return key;
}
var res = Zapatec.Langs[this.config.langId][this.langStr][key];
if(arguments.length > 1 && typeof(res) == "string"){
for(var ii = 1; ii < arguments.length; ii++){
var re = new RegExp("(^|([^\\\\]))\%"+ii);
res = res.replace(re,"$2" + arguments[ii]);
}
}
return res;
};
Zapatec.Widget.callMethod = function(iWidgetId,sMethod) {
var oWidget = zapatecWidgetGetWidgetById(iWidgetId);
if (oWidget && typeof oWidget[sMethod] == 'function') {
var aArgs = [].slice.call(arguments,2);
return oWidget[sMethod].apply(oWidget,aArgs);
}
};
zapatecWidgetCallMethod = zapatecWidget.callMethod;
Zapatec.Widget.getElementById = function(element) {
if (typeof element == 'string') {
return document.getElementById(element);
}
return element;
};
zapatecWidgetGetElementById = zapatecWidget.getElementById;
Zapatec.Widget.getStyle = function(element) {
var style = element.getAttribute('style') || '';
if (typeof style == 'string') {
return style;
}
return style.cssText;
};
Zapatec.Widget.windowDimensions = null;
Zapatec.Widget.onWindowResize = function() {
var oWindowDimensions = zapatecWidget.windowDimensions;
if (!oWindowDimensions) {return;}
var oNewDimensions = zapatecUtils.getWindowDimensions();
if (oWindowDimensions.width == oNewDimensions.width &&
oWindowDimensions.height == oNewDimensions.height) {return;}
zapatecWidget.windowDimensions = oNewDimensions;
zapatecEventDriven.fireEvent('windowResized');
};
Zapatec.Widget.debug = function(sMsg,sType) {
if (typeof zapatecDebug == 'function') {
zapatecDebug.log[sType || 'error'](sMsg);
}
};
Zapatec.Widget.prototype.debug = function(sMsg,sType) {
zapatecWidget.debug(this.constructor.id + '[' + this.id + ']: ' + sMsg,sType);
};
if (typeof zapatecTemplate != 'function') {
zapatecTemplate =
Zapatec.Template = function(oArg) {
Zapatec.Template.SUPERconstructor.call(this,oArg);
};
Zapatec.Template.id = 'Zapatec.Template';
Zapatec.inherit(zapatecTemplate,zapatecWidget);
Zapatec.Template.prototype.init = function(oArg) {
Zapatec.Template.SUPERclass.init.call(this,oArg);
this.loadData();
};
Zapatec.Template.prototype.configure = function(oArg) {
var oTemplate = Zapatec.Template;
this.defineConfigOption('theme','');
this.defineConfigOption('tagLeftDelimiter','#{');
this.defineConfigOption('tagRightDelimiter','}');
this.defineConfigOption('varLeftDelimiter','@');
this.defineConfigOption('varRightDelimiter','');
this.defineConfigOption('loopIndex','@@');
this.defineConfigOption('syntax',{
'': {
parser:oTemplate.parseExprOut
},
'expr': {
parser:oTemplate.parseExpr
},
'expression': {
parser:oTemplate.parseExpr
},
'if': {
parser:oTemplate.parseCond
},
'for': {
parser:oTemplate.parseLoop
},
'rem': {
parser:oTemplate.parseComment
},
'tr': {
parser:oTemplate.parseExprTranslate
},
'translate': {
parser:oTemplate.parseExprTranslate
},
'htmlEscape': {
parser:oTemplate.parseExprHtmlEscape
}
});
Zapatec.Template.SUPERclass.configure.call(this,oArg);
this.tagRegexp = /^\s*([a-zA-Z]*)\s*(.*)\s*$/;
var fEsc = zapatecUtils.escapeRegExp;
var oConf = this.config;
this.varRegexp = new RegExp([fEsc(oConf.varLeftDelimiter),'(\\w+)',
fEsc(oConf.varRightDelimiter)].join(''),'g');
this.loopIndexRegexp = new RegExp(fEsc(oConf.loopIndex),'g');
this.vars = {};
this.templates = [];
this.tags = [];
};
Zapatec.Template.prototype.loadDataHtml = function(oSource) {
if (oSource) {
if (oSource.tagName.toLowerCase() == 'textarea') {
this.loadDataHtmlText(oSource.value);
} else {
this.loadDataHtmlText(oSource.innerHTML);
}
} else {
if (Zapatec.Debug) {
Zapatec.Debug.log.error('Missing template source: ' + this.config.source +
'.');
}
}
};
Zapatec.Template.prototype.loadDataHtmlText = function(sSrc) {
Zapatec.Template.parse.call(this,sSrc);
};
Zapatec.Template.parse = function(sTxt) {
var oConf = this.config;
var sLeftDelim = oConf.tagLeftDelimiter;
var iLeftDelimLen = sLeftDelim.length;
var sRightDelim = oConf.tagRightDelimiter;
var iRightDelimLen = sRightDelim.length;
var oTagRegexp = this.tagRegexp;
var oVarRegexp = this.varRegexp;
var oLoopIndexRegexp = this.loopIndexRegexp;
var oSyntax = oConf.syntax;
var aTokens = [];
var fParseTag = Zapatec.Template.parseTag;
var sTail,iPos1,iPos2;
while (sTxt) {
iPos1 = sTxt.indexOf(sLeftDelim);
if (iPos1 != -1) {
sTail = sTxt.substring(iPos1 + iLeftDelimLen);
iPos2 = sTail.indexOf(sRightDelim);
if (iPos2 != -1) {
aTokens.push(sTxt.substring(0,iPos1));
aTokens.push(fParseTag(sTail.substring(0,iPos2),oTagRegexp,
oVarRegexp,oLoopIndexRegexp));
sTxt = sTail.substring(iPos2 + iRightDelimLen);
} else {
aTokens.push(sTxt);
break;
}
} else {
aTokens.push(sTxt);
break;
}
}
var aTemplates = this.templates = [];
var aTags = this.tags = [];
var aNewTemplate = [];
var aNewTag = [];
aTemplates.push(aNewTemplate);
aTags.push(aNewTag);
var iTokens = aTokens.length;
var oToken,oRule;
for (var iToken = 0; iToken < iTokens; iToken++) {
oToken = aTokens[iToken];
if (typeof oToken == 'object') {
oRule = oSyntax[oToken.tag];
if (oRule) {
iToken = oRule.parser.call(this,aNewTemplate,aNewTag,aTokens,iToken);
}
} else {
aNewTemplate.push(oToken);
aNewTag.push(null);
}
}
};
Zapatec.Template.parseTag = function(sTag,oTagRegexp,oVarRegexp,oLoopIndexRegexp) {
sTag = sTag.replace(zapatecUtilsRegexpSpacePlus,' ');
var aM = sTag.match(oTagRegexp);
if (aM) {
return {
tag: aM[1],
args: aM[2].replace(oVarRegexp,'zpTemplateVars.$1').replace(oLoopIndexRegexp,'zpTemplateIndex')
};
}
return {
tag: '',
args: ''
};
};
Zapatec.Template.parseExprOut = function(aOutTpl,aOutTags,aTokens,iToken) {
aOutTags.push(new Function('zpTemplateIndex',
'var zpTemplateVars=this.vars;return ' + aTokens[iToken].args));
aOutTpl.push('');
return iToken;
};
Zapatec.Template.parseExprTranslate = function(aOutTpl,aOutTags,aTokens,iToken) {
aOutTags.push(new Function('zpTemplateIndex',
'var zpTemplateVars=this.vars;return zapatecTranslate(' +
aTokens[iToken].args + ')'));
aOutTpl.push('');
return iToken;
};
Zapatec.Template.parseExprHtmlEscape = function(aOutTpl,aOutTags,aTokens,iToken) {
aOutTags.push(new Function('zpTemplateIndex',
'var zpTemplateVars=this.vars;return zapatecUtils.htmlEncode(' +
aTokens[iToken].args + ').replace(/\\n/g,"<br />")'));
aOutTpl.push('');
return iToken;
};
Zapatec.Template.parseExpr = function(aOutTpl,aOutTags,aTokens,iToken) {
aOutTags.push(new Function('zpTemplateIndex',
'var zpTemplateVars=this.vars;' + aTokens[iToken].args + ';return ""')
);
aOutTpl.push('');
return iToken;
};
Zapatec.Template.parseCond = function(aOutTpl,aOutTags,aTokens,iToken) {
var aTemplates = this.templates;
var aTags = this.tags;
var aNewTemplate = [];
var aNewTag = [];
aTemplates.push(aNewTemplate);
aTags.push(aNewTag);
var iTemplate = aTemplates.length - 1;
var oSyntax = this.config.syntax;
var aFunc = [
'var zpTemplateVars=this.vars;if(',
aTokens[iToken].args,
'){return this.compileTemplate(',
iTemplate.toString(),
',zpTemplateIndex)'
];
var iTokens = aTokens.length;
var oToken,sTag,oRule;
for (iToken++; iToken < iTokens; iToken++) {
oToken = aTokens[iToken];
if (typeof oToken == 'object') {
sTag = oToken.tag;
if (sTag == 'else') {
aNewTemplate = [];
aNewTag = [];
aTemplates.push(aNewTemplate);
aTags.push(aNewTag);
iTemplate = aTemplates.length - 1;
aFunc.push('}else{return this.compileTemplate(');
aFunc.push(iTemplate.toString());
aFunc.push(',zpTemplateIndex)');
} else if (sTag == 'elseif') {
aNewTemplate = [];
aNewTag = [];
aTemplates.push(aNewTemplate);
aTags.push(aNewTag);
iTemplate = aTemplates.length - 1;
aFunc.push('}else if(');
aFunc.push(oToken.args);
aFunc.push('){return this.compileTemplate(');
aFunc.push(iTemplate.toString());
aFunc.push(',zpTemplateIndex)');
} else if (sTag == 'endif') {
break;
} else {
oRule = oSyntax[sTag];
if (oRule) {
iToken = oRule.parser.call(this,aNewTemplate,aNewTag,aTokens,iToken);
}
}
} else {
aNewTemplate.push(oToken);
aNewTag.push(null);
}
}
aFunc.push('}');
aOutTags.push(new Function('zpTemplateIndex',aFunc.join('')));
aOutTpl.push('');
return iToken;
};
Zapatec.Template.parseLoop = function(aOutTpl,aOutTags,aTokens,iToken) {
var aTemplates = this.templates;
var aTags = this.tags;
var aNewTemplate = [];
var aNewTag = [];
aTemplates.push(aNewTemplate);
aTags.push(aNewTag);
var iTemplate = aTemplates.length - 1;
var oSyntax = this.config.syntax;
var aFunc = [
'var zpTemplateVars=this.vars;var zpTemplateIndex=0;var zpTemplateArray=(',
aTokens[iToken].args,
');if(!(zpTemplateArray instanceof Array)){return ""};var zpTemplateArrayLen=zpTemplateArray.length;var zpTemplateTpl=[];for(;zpTemplateIndex<zpTemplateArrayLen;zpTemplateIndex++){zpTemplateTpl.push(this.compileTemplate(',
iTemplate.toString(),
',zpTemplateIndex))};return zpTemplateTpl.join("")'
];
var iTokens = aTokens.length;
var oToken,sTag,oRule;
for (iToken++; iToken < iTokens; iToken++) {
oToken = aTokens[iToken];
if (typeof oToken == 'object') {
sTag = oToken.tag;
if (sTag == 'endfor') {
break;
} else {
oRule = oSyntax[sTag];
if (oRule) {
iToken = oRule.parser.call(this,aNewTemplate,aNewTag,aTokens,iToken);
}
}
} else {
aNewTemplate.push(oToken);
aNewTag.push(null);
}
}
aOutTags.push(new Function(aFunc.join('')));
aOutTpl.push('');
return iToken;
};
Zapatec.Template.parseComment = function(aOutTpl,aOutTags,aTokens,iToken) {
var iTokens = aTokens.length;
var oToken;
for (iToken++; iToken < iTokens; iToken++) {
oToken = aTokens[iToken];
if (typeof oToken == 'object') {
if (oToken.tag == 'endrem') {
break;
}
}
}
return iToken;
};
Zapatec.Template.prototype.assign = function(sVar,sVal) {
this.vars[sVar] = sVal;
};
Zapatec.Template.prototype.assignVars = function(oArg) {
if (oArg) {
var oVars = this.vars;
var sVar;
for (sVar in oArg) {
oVars[sVar] = oArg[sVar];
}
}
};
Zapatec.Template.prototype.reassignVars = function(oArg) {
this.vars = {};
this.assignVars(oArg);
};
Zapatec.Template.prototype.compileTemplate = function(iTpl,iLoopIndex) {
var aTpl = this.templates[iTpl];
var aTags = this.tags[iTpl];
var iTags = aTags.length;
var iTag,fTag;
try {
for (iTag = 0; iTag < iTags; iTag++) {
fTag = aTags[iTag];
if (typeof fTag == 'function') {
aTpl[iTag] = fTag.call(this,iLoopIndex);
}
}
} catch (oExpn) {
var oConf = this.config;
this.debug(oExpn.message.replace(/zpTemplateVars\.(\w+)/g,
[oConf.varLeftDelimiter,'$1',oConf.varRightDelimiter].join('')).replace(
/zpTemplateIndex/g,oConf.loopIndex));
}
return aTpl.join('');
};
Zapatec.Template.prototype.compile = function(oArg,oContainer) {
if (oArg) {
this.reassignVars(oArg);
}
var sHtml = this.compileTemplate(0);
if (oContainer) {
zapatecTransport.parseHtml(sHtml,oContainer);
} else {
return sHtml;
}
};
}
if (typeof zapatecDate != 'function') {
zapatecDate =
Zapatec.Date = function() {};
zapatecDateDayNames =
Zapatec.Date.dayNames = [
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday'
];
zapatecDateShortDayNames =
Zapatec.Date.shortDayNames = [
'Sun',
'Mon',
'Tue',
'Wed',
'Thu',
'Fri',
'Sat',
'Sun'
];
zapatecDateMonthNames =
Zapatec.Date.monthNames = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
];
zapatecDateShortMonthNames =
Zapatec.Date.shortMonthNames = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
];
zapatecDateAM =
Zapatec.Date.AM = 'AM';
zapatecDatePM =
Zapatec.Date.PM = 'PM';
zapatecDateAm =
Zapatec.Date.am = 'am';
zapatecDatePm =
Zapatec.Date.pm = 'pm';
Zapatec.Date.translate = function() {
zapatecDateDayNames = zapatecDate.dayNames =
zapatecTranslateArray(zapatecDateDayNames);
zapatecDateShortDayNames = zapatecDate.shortDayNames =
zapatecTranslateArray(zapatecDateShortDayNames);
zapatecDateMonthNames = zapatecDate.monthNames =
zapatecTranslateArray(zapatecDateMonthNames);
zapatecDateShortMonthNames = zapatecDate.shortMonthNames =
zapatecTranslateArray(zapatecDateShortMonthNames);
zapatecDateAM = zapatecDate.AM = zapatecTranslate(zapatecDateAM);
zapatecDatePM = zapatecDate.PM = zapatecTranslate(zapatecDatePM);
zapatecDateAm = zapatecDate.am = zapatecTranslate(zapatecDateAm);
zapatecDatePm = zapatecDate.pm = zapatecTranslate(zapatecDatePm);
zapatecDate.translate = function() {};
};
Zapatec.Date._MD = [31,28,31,30,31,30,31,31,30,31,30,31];
Zapatec.Date.getMonthDays = function(date,month) {
var year = date.getFullYear();
if (typeof month == "undefined") {
month = date.getMonth();
}
if (((0 == (year%4)) && ( (0 != (year%100)) || (0 == (year%400)))) && month == 1) {
return 29;
} else {
return zapatecDate._MD[month];
}
};
Zapatec.Date.getDayOfYear = function(date) {
var now = new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0,0);
var then = new Date(date.getFullYear(),0,0,0,0,0);
var time = now - then;
return Math.round(time / 86400000);
};
Zapatec.Date.getWeekNumber = function(date) {
var d = new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0,0);
var DoW = d.getDay();
d.setDate(d.getDate() - (DoW + 6) % 7 + 3);
var ms = d.valueOf();
d.setMonth(0);
d.setDate(4);
return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
};
Zapatec.Date.equalsTo = function(date1,date2) {
if (!date1 || !date2) {
return false;
}
return ((date1.getFullYear() == date2.getFullYear()) &&
(date1.getMonth() == date2.getMonth()) &&
(date1.getDate() == date2.getDate()) &&
(date1.getHours() == date2.getHours()) &&
(date1.getMinutes() == date2.getMinutes()));
};
Zapatec.Date.dateEqualsTo = function(date1,date2) {
if (!date1 || !date2) {
return false;
}
return ((date1.getFullYear() == date2.getFullYear()) &&
(date1.getMonth() == date2.getMonth()) &&
(date1.getDate() == date2.getDate()));
};
Zapatec.Date.setDateOnly = function(date1,date2) {
var tmp = new Date(date2);
date1.setDate(1);
date1.setFullYear(tmp.getFullYear());
date1.setMonth(tmp.getMonth());
date1.setDate(tmp.getDate());
};
Zapatec.Date.print = function (date,str) {
zapatecDate.translate();
var m = date.getMonth();
var d = date.getDate();
var y = date.getFullYear();
var wn = /%U|%W|%V/.test(str) ? zapatecDate.getWeekNumber(date) : "";
var w = date.getDay();
var s = {};
var hr = date.getHours();
var pm = (hr >= 12);
var ir = (pm) ? (hr - 12) : hr;
var dy = /%j/.test(str) ? zapatecDate.getDayOfYear(date) : "";
if (ir == 0) {
ir = 12;
}
var min = date.getMinutes();
var sec = date.getSeconds();
s["%a"] = /%a/.test(str) ? zapatecDateShortDayNames[w] : "";
s["%A"] = /%A/.test(str) ? zapatecDateDayNames[w] : "";
s["%b"] = /%b/.test(str) ? zapatecDateShortMonthNames[m] : "";
s["%B"] = /%B/.test(str) ? zapatecDateMonthNames[m] : "";
s["%C"] = 1 + Math.floor(y / 100);
s["%d"] = (d < 10) ? ("0" + d) : d;
s["%e"] = d;
s["%H"] = (hr < 10) ? ("0" + hr) : hr;
s["%I"] = (ir < 10) ? ("0" + ir) : ir;
s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy;
s["%k"] = hr ? hr :  "0";
s["%l"] = ir;
s["%m"] = (m < 9) ? ("0" + (1+m)) : (1+m);
s["%M"] = (min < 10) ? ("0" + min) : min;
s["%n"] = "\n";
s["%p"] = pm ? zapatecDatePM : zapatecDateAM;
s["%P"] = pm ? zapatecDatePm : zapatecDateAm;
s["%s"] = Math.floor(date.getTime() / 1000);
s["%S"] = (sec < 10) ? ("0" + sec) : sec;
s["%t"] = "\t";
s["%U"] = s["%W"] = s["%V"] = (wn < 10) ? ("0" + wn) : wn;
s["%u"] = (w == 0) ? 7 : w;
s["%w"] = w ? w : "0";
s["%y"] = '' + y % 100;
if (s["%y"] < 10) {
s["%y"] = "0" + s["%y"];
}
s["%Y"] = y;
s["%%"] = "%";
if (/%z/.test(str)) {
var minutes = new String(date.getTimezoneOffset()%60);
var hours = new String(Math.abs(date.getTimezoneOffset()/60));
s["%z"] = "GMT"+ (date.getTimezoneOffset() > 0 ? "-" : "+");
hours.length < 2 ? s["%z"]+="0" : "";
s["%z"] += Math.abs(date.getTimezoneOffset()/60) + ":" + date.getTimezoneOffset()%60;
minutes.length < 2 ? s["%z"]+="0" : "";
}
if (/%Z/.test(str)) {
s["%Z"] = (date.getTimezoneOffset() > 0 ? "-" : "+");
hours.length < 2 ? s["%Z"] += "0" : "";
s["%Z"] += Math.abs(date.getTimezoneOffset()/60) + "" + date.getTimezoneOffset()%60;
minutes.length < 2 ? s["%Z"] += "0" : "";
}
var re = /%./g;
var a = str.match(re) || [];
var tmp,ln = a.length;
for (var i = 0; i < ln; i++) {
tmp = s[a[i]];
if (tmp) {
re = new RegExp(a[i],'g');
str = str.replace(re,tmp);
}
}
return str;
};
Zapatec.Date.parseDate = function (str,format) {
zapatecDate.translate();
var fmt = format,strPointer = 0,token = null,parseFunc = null,
valueLength = null,valueRange = null,date = new Date(),values = {},
valueType = '';
var numberRules = ["%d","%H","%I","%m","%M","%S","%s","%W","%u",
"%w","%y","%e","%k","%l","%s","%Y","%C","%z","%Z"];
var aNames;
function parseString() {
for(var iString = valueRange[0]; iString < valueRange[1]; ++iString) {
var value = aNames[iString];
if (!value) {
return null;
}
if (value == str.substr(strPointer,value.length)) {
valueLength = value.length;
return iString;
}
}
return null;
}
function parseNumber() {
var val = str.substr(strPointer,valueLength);
if (val.length != valueLength || /$\d+^/.test(val)) {
return null;
}
return parseInt(val,10);
}
function parseAMPM() {
var result = str.substr(strPointer,valueLength).toLowerCase() == 'pm' ? true : false;
return result || (str.substr(strPointer,valueLength).toLowerCase() == 'am' ? false : null);
}
function parseGMT() {
var val = str.substr(strPointer,valueLength);
if (val.length != valueLength || !/(\w){3}(\+|-)+((\d){4}|(\d)+:(\d))+/.test(val)) {
return null;
}
var sgn = val.substr(3,1);
values["%zm"] = (sgn == "-" ? (-1) * parseInt(val.substr(7,2),10) : parseInt(val.substr(7,2),10));
return parseInt(val.substr(3,3),10);
}
function parseRFC() {
var val = str.substr(strPointer,valueLength);
if (val.length != valueLength || !/(\+|-)+((\d){4}|(\d)+:(\d))+/.test(val)) {
return null;
}
var sgn = val.substr(0,1);
values["%Zm"] = (sgn == "-" ? (-1) * parseInt(val.substr(3,2),10) : parseInt(val.substr(3,2),10));
return parseInt(val.substr(0,3),10);
}
function wasParsed(rule) {
if (typeof rule == "undefined" || rule === null) {
return false;
}
return true;
}
function getValue() {
for(var i = 0; i < arguments.length; ++i) {
if (arguments[i] !== null && typeof arguments[i] != "undefined" && !isNaN(arguments[i])) {
return arguments[i];
}
}
return null;
}
if (typeof fmt != "string" || typeof str != "string" || str == "" || fmt == "") {
return null;
}
while(fmt) {
parseFunc = parseNumber;
valueLength = fmt.indexOf("%");
valueLength = (valueLength == -1) ? fmt.length : valueLength;
token = fmt.slice(0,valueLength);
if (token != str.substr(strPointer,valueLength)) {
return null;
}
strPointer += valueLength;
fmt = fmt.slice(valueLength);
if (fmt == "") {
break;
}
token = fmt.slice(0,2);
valueLength = 2;
switch (token) {
case "%A" :
case "%a" : {
if ("%A" == token) {
aNames = zapatecDateDayNames;
valueType = "dn";
} else {
aNames = zapatecDateShortDayNames;
valueType = "sdn";
}
valueRange = [0,7];
parseFunc = parseString;
break;
}
case "%B" :
case "%b" : {
if ("%B" == token) {
aNames = zapatecDateMonthNames;
valueType = "mn";
} else {
aNames = zapatecDateShortMonthNames;
valueType = "smn";
}
valueRange = [0,12];
parseFunc = parseString;
break;
}
case "%p" :
case "%P" : {
parseFunc = parseAMPM;
break;
}
case "%Y" : {
valueLength = 4;
if (zapatecUtils.arrIndexOf(numberRules,fmt.substr(2,2)) != -1) {
return null;
}
while(isNaN(parseInt(str.charAt(strPointer + valueLength - 1))) && valueLength > 0) {
--valueLength;
}
if (valueLength == 0) {break;}
break;
}
case "%C" :
case "%s" : {
valueLength = 1;
if (zapatecUtils.arrIndexOf(numberRules,fmt.substr(2,2)) != -1) {
return null;
}
while(!isNaN(parseInt(str.charAt(strPointer + valueLength)))) {
++valueLength;
}
break;
}
case "%k" :
case "%l" :
case "%e" : {
valueLength = 1;
if (zapatecUtils.arrIndexOf(numberRules,fmt.substr(2,2)) != -1) {
return null;
}
if (!isNaN(parseInt(str.charAt(strPointer + 1)))) {
++valueLength;
}
break;
}
case "%j" : valueLength = 3; break;
case "%u" :
case "%w" : valueLength = 1;
case "%y" :
case "%m" :
case "%d" :
case "%W" :
case "%H" :
case "%I" :
case "%M" :
case "%S" : {
break;
}
case "%z" :
valueLength = 9;
parseFunc = parseGMT;
break;
case "%Z" :
if (values["%z"]) break;
valueLength = 5;
parseFunc = parseRFC;
break;
}
if ((values[token] = parseFunc()) === null) {
return null;
}
strPointer += valueLength;
fmt = fmt.slice(2);
}
if (wasParsed(values["%s"])) {
date.setTime(values["%s"] * 1000);
} else {
var year = getValue(values["%Y"],values["%y"] + --values["%C"] * 100,
values["%y"] + (date.getFullYear() - date.getFullYear() % 100),
values["%C"] * 100 + date.getFullYear() % 100);
var month = getValue(values["%m"] - 1,values["%b"],values["%B"]);
var day = getValue(values["%d"] || values["%e"]);
if (day === null || month === null) {
var dayOfWeek = getValue(values["%a"],values["%A"],values["%u"] == 7 ? 0 : values["%u"],values["%w"]);
}
var hour = getValue(values["%H"],values["%k"]);
if (hour === null && (wasParsed(values["%p"]) || wasParsed(values["%P"]))) {
var pm = getValue(values["%p"],values["%P"]);
hour = getValue(values["%I"],values["%l"]);
hour = pm ? ((hour == 12) ? 12 : (hour + 12)) : ((hour == 12) ? (0) : hour);
}
if (year || year === 0) {
date.setFullYear(year);
}
if (month || month === 0) {
date.setMonth(month,1);
}
if (day || day === 0) {
date.setDate(day);
}
if (wasParsed(values["%j"])) {
date.setMonth(0);
date.setDate(1);
date.setDate(values["%j"]);
}
if (wasParsed(dayOfWeek)) {
date.setDate(date.getDate() + (dayOfWeek - date.getDay()));
}
if (wasParsed(values["%W"])) {
var weekNumber = zapatecDate.getWeekNumber(date);
if (weekNumber != values["%W"]) {
date.setDate(date.getDate() + (values["%W"] - weekNumber) * 7);
}
}
if (hour !== null) {
date.setHours(hour);
}
if (wasParsed(values["%M"])) {
date.setMinutes(values["%M"]);
}
if (wasParsed(values["%S"])) {
date.setSeconds(values["%S"]);
}
if (wasParsed(values["%z"])) {
date.setUTCHours(date.getUTCHours() + (date.getTimezoneOffset()/60 + parseInt(values["%z"],10)));
date.setUTCMinutes(date.getUTCMinutes() + (-1) * (date.getTimezoneOffset()%60 - parseInt(values["%zm"],10)))
}
if (wasParsed(values["%Z"])) {
date.setUTCHours(date.getUTCHours() + (date.getTimezoneOffset()/60 + parseInt(values["%Z"],10)));
date.setUTCMinutes(date.getUTCMinutes() + (-1) * (date.getTimezoneOffset()%60 - parseInt(values["%Zm"],10)))
}
}
if (zapatecDate.print(date,format) != str) {
return null;
}
return date;
};
Zapatec.Date.setFullYear = function(date,y) {
var d = new Date(date);
d.setFullYear(y);
if (d.getMonth() != date.getMonth()) {
date.setDate(28);
}
date.setFullYear(y);
};
Zapatec.Date.compareDatesOnly = function (date1,date2) {
var year1 = date1.getYear();
var year2 = date2.getYear();
var month1 = date1.getMonth();
var month2 = date2.getMonth();
var day1 = date1.getDate();
var day2 = date2.getDate();
if (year1 > year2) { return -1; }
if (year2 > year1) { return 1; }
if (month1 > month2) { return -1; }
if (month2 > month1) { return 1; }
if (day1 > day2) { return -1; }
if (day2 > day1) { return 1; }
return 0;
};
Zapatec.Date.dateRegexpTime =
/^(\d{1,2})(\D+(\d{1,2}))?(\D+(\d{1,2}))?\W*(AM|PM|A|P)?\s*(.*)/i;
Zapatec.Date.parseTime = function(sTime) {
var oResult = {
tail: sTime
};
if (!sTime) {
return oResult;
}
sTime = sTime.replace(/^\s+/,'').replace(/\s+$/,'');
var aMatches = sTime.match(zapatecDate.dateRegexpTime);
if (aMatches && aMatches[1]) {
var iHours = aMatches[1] * 1;
if (aMatches[6]) {
var sAmPm = aMatches[6].toUpperCase();
if (sAmPm == 'PM' || sAmPm == 'P') {
if (iHours < 12) {
iHours += 12;
}
} else {
if (iHours == 12) {
iHours = 0;
}
}
}
oResult.hours = iHours;
oResult.minutes = aMatches[3] ? aMatches[3] * 1 : 0;
oResult.tail = aMatches[7];
}
return oResult;
};
Zapatec.Date.padTwo = function(i) {
return (i < 10 ? '0' : '') + i;
};
Zapatec.Date.dateRegexpNotFloating = /(?:Z|[+-]\d{1,2}(?::\d{1,2})?)$/;
Zapatec.Date.isFloatingDate = function(sDTStamp) {
if (!sDTStamp) {
return false;
}
return !zapatecDate.dateRegexpNotFloating.test(sDTStamp);
};
Zapatec.Date.dateToTimeStamp = function(oArg) {
if (!oArg) {
return '';
}
var oDate = oArg.date;
if (!(oDate instanceof Date)) {
return oDate + '';
}
var fPadTwo = zapatecDate.padTwo;
if (!oArg.floating) {
oDate = new Date(oDate.getTime() + (oDate.getTimezoneOffset() * 60000));
}
return [
oDate.getFullYear(),
fPadTwo(oDate.getMonth() + 1),
fPadTwo(oDate.getDate()),
'T',
fPadTwo(oDate.getHours()),
fPadTwo(oDate.getMinutes()),
fPadTwo(oDate.getSeconds()),
oArg.floating ? '' : 'Z'
].join('');
};
Zapatec.Date.dateToDateStamp = function(oArg) {
if (!oArg) {
return '';
}
var oDate = oArg.date;
if (!(oDate instanceof Date)) {
return oDate + '';
}
var fPadTwo = zapatecDate.padTwo;
return [
oDate.getFullYear(),
fPadTwo(oDate.getMonth() + 1),
fPadTwo(oDate.getDate())
].join('');
};
Zapatec.Date.dateRegexpTimeStamp =
/^(\d{4})(\d{2})(\d{2})T?(\d{2})?(\d{2})?(\d{2})?(Z)?$/;
Zapatec.Date.timeStampToDate = function(oArg) {
if (!oArg) {return;}
var sDTStamp = oArg.dtstamp;
if (typeof sDTStamp != 'string') {return;}
var aMatches = sDTStamp.match(zapatecDate.dateRegexpTimeStamp);
if (!aMatches) {return;}
var iYear = parseInt(aMatches[1],10);
var iMonth = parseInt(aMatches[2],10) - 1;
var iDay = parseInt(aMatches[3],10);
var iHour = parseInt(aMatches[4],10);
if (isNaN(iHour)) {
return new Date(iYear,iMonth,iDay);
}
iHour = parseInt(iHour,10);
var iMinute = parseInt(aMatches[5],10);
var iSecond = parseInt(aMatches[6],10);
if (aMatches[7]) {
return new Date(Date.UTC(iYear,iMonth,iDay,iHour,iMinute,iSecond));
}
return new Date(iYear,iMonth,iDay,iHour,iMinute,iSecond);
};
Zapatec.Date.dateToTimeIso = function(oArg) {
if (!oArg) {
return '';
}
var oDate = oArg.date;
if (!(oDate instanceof Date)) {
return oDate + '';
}
var fPadTwo = zapatecDate.padTwo;
oDate = new Date(oDate.getTime() + (oDate.getTimezoneOffset() * 60000));
return [
oDate.getFullYear(),
'-',
fPadTwo(oDate.getMonth() + 1),
'-',
fPadTwo(oDate.getDate()),
'T',
fPadTwo(oDate.getHours()),
':',
fPadTwo(oDate.getMinutes()),
':',
fPadTwo(oDate.getSeconds()),
oArg.floating ? '' : 'Z'
].join('');
};
Zapatec.Date.dateToDateIso = function(oArg) {
if (!oArg) {
return '';
}
var oDate = oArg.date;
if (!(oDate instanceof Date)) {
return oDate + '';
}
var fPadTwo = zapatecDate.padTwo;
return [
oDate.getFullYear(),
fPadTwo(oDate.getMonth() + 1),
fPadTwo(oDate.getDate())
].join('-');
};
Zapatec.Date.dateRegexpTimeIso =
/(\d{4,})(?:-(\d{1,2})(?:-(\d{1,2})(?:[T ](\d{1,2}):(\d{1,2})(?::(\d{1,2})(?:\.(\d+))?)?(?:(Z)|([+-])(\d{1,2})(?::(\d{1,2}))?)?)?)?)?/;
Zapatec.Date.timeIsoToDate = function(oArg) {
if (!oArg) {return;}
var sDateIso = oArg.dateIso + '';
if (typeof sDateIso != 'string' || !sDateIso.length) {return;}
var aMatches = sDateIso.match(zapatecDate.dateRegexpTimeIso);
if (!aMatches) {return;}
var iYear = parseInt(aMatches[1],10);
var iMonth = aMatches[2];
if (typeof iMonth == 'undefined' || iMonth === '') {
return new Date(iYear);
}
iMonth = parseInt(iMonth,10) - 1;
var iDay = parseInt(aMatches[3],10);
var iHour = aMatches[4];
if (typeof iHour == 'undefined' || iHour === '') {
return new Date(iYear,iMonth,iDay);
}
iHour = parseInt(iHour,10);
var iMinute = parseInt(aMatches[5],10);
var iSecond = aMatches[6];
if (typeof iSecond == 'undefined' || iSecond === '') {
iSecond = 0;
} else {
iSecond = parseInt(iSecond,10);
}
var iMSecond = aMatches[7];
if (typeof iMSecond == 'undefined' || iMSecond === '') {
iMSecond = 0;
} else {
iMSecond = Math.round(1000.0 * parseFloat('0.' + iMSecond));
}
var iTimezoneOffset = 0;
var sTimezoneZ = aMatches[8];
if (typeof sTimezoneZ == 'undefined' || sTimezoneZ === '') {
var sTimezoneSign = aMatches[9];
if (typeof sTimezoneSign == 'undefined' || sTimezoneSign === '') {
return new Date(iYear,iMonth,iDay,iHour,iMinute,iSecond,iMSecond);
}
iTimezoneOffset = parseInt(aMatches[10],10) * 3600000;
var iTimezoneMinute = aMatches[11];
if (typeof iTimezoneMinute != 'undefined' && iTimezoneMinute !== '') {
iTimezoneOffset += parseInt(iTimezoneMinute,10) * 60000;
}
if (sTimezoneSign == '-') {
iTimezoneOffset *= -1;
}
}
return new Date(Date.UTC(iYear,iMonth,iDay,iHour,iMinute,iSecond,
iMSecond) - iTimezoneOffset);
};
Zapatec.Date.timeStampToTimeIso = function(oArg) {
if (!oArg) {
return '';
}
var sDTStamp = oArg.dtstamp;
if (!sDTStamp) {
return '';
}
if (sDTStamp.length == 8) {
return sDTStamp.substr(0,4) + '-' + sDTStamp.substr(4,2) + '-' +
sDTStamp.substr(6,2);
} else {
return zapatecDate.dateToTimeIso({
date: zapatecDate.timeStampToDate(oArg),
floating: zapatecDate.isFloatingDate(sDTStamp)
});
}
};
Zapatec.Date.timeIsoToTimeStamp = function(oArg) {
if (!oArg) {
return '';
}
var sDateIso = oArg.dateIso + '';
if (typeof sDateIso != 'string' || !sDateIso.length) {
return '';
}
if (sDateIso.indexOf('-') > 0) {
if (sDateIso.length == 10) {
return sDateIso.substr(0,4) + sDateIso.substr(5,2) +
sDateIso.substr(8,2);
} else {
return zapatecDate.dateToTimeStamp({
date: zapatecDate.timeIsoToDate(oArg),
floating: zapatecDate.isFloatingDate(sDateIso)
});
}
} else {
return sDateIso;
}
};
Zapatec.Date.getWeekDay = function(oArg) {
if (!oArg) {
oArg = {};
}
var oDate = oArg.date;
if (!oDate) {
oDate = new Date();
}
var iWeekDay = oArg.weekDay;
if (typeof iWeekDay != 'number' || iWeekDay < 0 || iWeekDay > 6) {
iWeekDay = 0;
}
return zapatecDate.getTomorrow({
date:oDate,
days: iWeekDay - oDate.getDay()
});
};
Zapatec.Date.getMonthDay = function(oArg) {
if (!oArg) {
oArg = {};
}
var oDate = oArg.date;
if (!oDate) {
oDate = new Date();
}
var iDay = oArg.day;
if (typeof iDay != 'number') {
iDay = 1;
}
var iMonth = oDate.getMonth();
if (iDay < 1) {
if (iDay < 0) {
iDay++;
}
iMonth++;
}
return new Date(oDate.getFullYear(),iMonth,iDay);
};
Zapatec.Date.getTomorrow = function(oArg) {
if (!oArg) {
oArg = {};
}
var oDate = oArg.date;
if (oDate) {
oDate = new Date(oDate.getTime());
} else {
oDate = new Date();
}
var iDays = oArg.days;
if (typeof iDays != 'number') {
iDays = 1;
}
oDate.setDate(oDate.getDate() + iDays);
return oDate;
};
}

if (typeof zapatecWin != 'function') {
zapatecUtils.emulateWindowEvent(['keydown']);
zapatecWin =
Zapatec.Win = function(oArg) {
Zapatec.Win.SUPERconstructor.call(this,oArg);
};
Zapatec.Win.id = 'Zapatec.Win';
Zapatec.inherit(zapatecWin,zapatecWidget);
zapatecWinFrame =
Zapatec.Win.frame = 5;
Zapatec.Win.prototype.init = function(oArg) {
zapatecWin.SUPERclass.init.call(this,oArg);
var iThisId = this.id;
this.winOnResize = new Function(
'zapatecWidgetCallMethod(' + iThisId + ',"expandLayer")'
);
this.winOnKeydown = new Function(
'zapatecWidgetCallMethod(' + iThisId + ',"onKeydown")'
);
};
Zapatec.Win.prototype.configure = function(oArg) {
this.defineConfigOption('theme','icomplete');
this.defineConfigOption('templateFile','icomplete');
this.defineConfigOption('templates',{
main: 'zpWinTemplateMain'
});
this.defineConfigOption('container');
this.defineConfigOption('dialog');
this.defineConfigOption('headline','');
this.defineConfigOption('modal',true);
this.defineConfigOption('onclose','hide');
this.defineConfigOption('preserveContent',false);
this.defineConfigOption('tagfor');
this.defineConfigOption('tagoffset',0);
this.defineConfigOption('winhalign','center');
this.defineConfigOption('winhoffset',0);
this.defineConfigOption('winvalign','center');
this.defineConfigOption('winvoffset',0);
zapatecWin.SUPERclass.configure.call(this,oArg);
var oConfig = this.config;
var vOption;
oConfig.container = zapatecWidgetGetElementById(oConfig.container);
if (typeof oConfig.headline != 'string') {
oConfig.headline = '';
}
if (oConfig.onclose != 'close') {
oConfig.onclose = 'hide';
}
oConfig.tagfor = zapatecWidgetGetElementById(oConfig.tagfor);
if (oConfig.tagfor) {
oConfig.modal = false;
}
if (typeof oConfig.tagoffset != 'number') {
oConfig.tagoffset = 0;
}
vOption = oConfig.winhalign;
if (vOption != 'left' && vOption != 'right') {
oConfig.winhalign = 'center';
}
vOption = parseInt(oConfig.winhoffset);
if (isNaN(vOption) || vOption < 0) {
oConfig.winhoffset = 0;
}
vOption = oConfig.winvalign;
if (vOption != 'top' && vOption != 'bottom') {
oConfig.winvalign = 'center';
}
vOption = parseInt(oConfig.winvoffset);
if (isNaN(vOption) || vOption < 0) {
oConfig.winvoffset = 0;
}
};
Zapatec.Win.prototype.addStandardEventListeners = function() {
Zapatec.Win.SUPERclass.addStandardEventListeners.call(this);
if(this.config.dialog){
	this.addEventListener('confirmOK',this[this.config.onclose]);
	this.addEventListener('confirmCancel',this[this.config.onclose]);
	this.addEventListener('alertOK',this[this.config.onclose]);
	if(this.config.dialog == "confirm"){
	this.addEventListener('winClosed',new Function(
	"zapatecWidgetCallMethod("+this.id+",'fireEvent','confirmCancel')"));
	}
}
};
Zapatec.Win.prototype.open = function(oArg) {
if (this.winOpening) {return;}
var oConfig = this.config;
if (this.winOpened && oConfig.tagfor) {
if (typeof oArg.tagfor == 'undefined' || oArg.tagfor == oConfig.tagfor) {return;}
}
this.configure(oArg);
if (this.templateLoaded) {
this.loadData();
} else {
this.addOnetimeEventListener('loadTemplateEnd',zapatecWin.loadData);
}
};
Zapatec.Win.loadData = function() {
this.loadData();
};
Zapatec.Win.prototype.loadDataHtmlText = function(vSource) {
var oConfig = this.config;
if(oConfig.preserveContent){
if (typeof vSource == 'string') {
oConfig.source = Zapatec.Utils.convertHTML2DOM(vSource);
oConfig.sourceType = "html";
}
}
this.loadDataHtml(vSource)
};
Zapatec.Win.prototype.loadDataHtml = function(vSource) {
this.winOpening = 1;
var oConfig = this.config;
this.createLayer();
var oElements = this.winElements;
if (!oElements) {return;}
var oLayerStyle = oElements.layer.style;
oLayerStyle.visibility = 'hidden';
oLayerStyle.left = '-2000px';
oLayerStyle.top = '-2000px';
if (typeof vSource == 'string') {
this.compile({
headline:oConfig.headline,
source: vSource
});
} else {
if (!oElements.content) {
this.compile({
headline:oConfig.headline,
source: ''
});
if (vSource && oElements.content) {
oElements.content.appendChild(vSource);
}
} else {
var oEl = document.getElementById('zpWin' + this.id + 'Headline');
if (oEl && oEl.innerHTML != oConfig.headline) {
oEl.innerHTML = oConfig.headline;
}
}
}
var oWindowStyle = oElements.window.style;
oWindowStyle.left = 0;
oWindowStyle.top = 0;
oLayerStyle.display = '';
if (oConfig.modal && !this.winFixed) {
var oFixed = this.winFixed = {};
oFixed.pageScrollX = zapatecUtils.getPageScrollX();
oFixed.pageScrollY = zapatecUtils.getPageScrollY();
var oHtml = document.getElementsByTagName('html')[0];
if (oHtml) {
var oStyle = oHtml.style;
oFixed.overflow = oStyle.overflow;
oStyle.overflow = 'hidden';
}
window.scrollTo(0,0);
oFixed.onscroll = window.onscroll;
window.onscroll = function() {window.scrollTo(0,0);}
}
this.expandLayer();
zapatecEventDriven.addEventListener('windowResized',this.winOnResize);
zapatecUtils.addEvent(window.document,'keydown',this.winOnKeydown);
};
Zapatec.Win.prototype.createLayer = function() {
var oContainer = this.config.container;
if (!oContainer) {
oContainer = document.getElementsByTagName('body')[0];
if (!oContainer) {
this.debug('Cannot find <body>.');
return;
}
}
var oElements = this.winElements;
var oLayer;
if (oElements) {
oLayer = oElements.layer;
} else {
oElements = this.winElements = {};
oLayer = oElements.layer = document.createElement('div');
var oStyle = oLayer.style;
oStyle.dispaly = 'none';
oStyle.zIndex = zapatecUtilsMaxZindex;
}
oLayer.className = this.getClassName({
prefix: 'zpWinTheme'
});
oContainer.appendChild(oLayer);
};
Zapatec.Win.prototype.compile = function(oArg) {
if (!oArg) {return;}
var oTemplateMain = this.templates;
if (!oTemplateMain) {
this.debug('Cannot find templates.');
return;
}
oTemplateMain = oTemplateMain.main;
if (!oTemplateMain) {
this.debug('Cannot find main template.');
return;
}
this.frameWidth = null;
this.frameHeight = null;
var iThisId = this.id;
var sId = 'zpWin' + iThisId;
var oElements = this.winElements;
var oLayer = oElements.layer;
oLayer.innerHTML = '';
oTemplateMain.compile({
widgetId: iThisId,
dialog: this.config.dialog,
headline:oArg.headline,
source:oArg.source,
onclose: this.config.onclose
},oLayer);
oElements.window = document.getElementById(sId + 'Window');
if (!oElements.window) {
this.debug('Cannot find ' + sId + 'Window element.');
return;
}
oElements.body = document.getElementById(sId + 'Body');
if (!oElements.body) {
this.debug('Cannot find ' + sId + 'Body element.');
return;
}
oElements.content = document.getElementById(sId + 'Content');
if (!oElements.content) {
this.debug('Cannot find ' + sId + 'Content element.');
return;
}
var oWch = document.getElementById(sId + 'WchContainer');
if (oWch) {
oElements.wch = zapatecUtils.createWCH(oWch);
}
this.fireEvent('winCreated');
};
Zapatec.Win.prototype.expandLayer = function() {
if (this.winOpening > 1) {return;}
this.winOpening = 2;
var oElements = this.winElements;
if (!oElements) {
zapatecEventDriven.removeEventListener('windowResized',this.winOnResize);
return;
}
var oDims = zapatecUtils.getWindowSize();
var iLayerWidth = oDims.width;
var iLayerHeight = oDims.height;
var oStyle = oElements.layer.style;
oStyle.left = '-2000px';
oStyle.top = '-2000px';
oStyle.width = iLayerWidth + 'px';
oStyle.height = iLayerHeight + 'px';
if (oElements.wch) {
zapatecUtils.setupWCH(oElements.wch,0,0,iLayerWidth,iLayerHeight);
}
this.winTimeout = setTimeout('zapatecWidgetCallMethod(' + this.id +
',"resizeWindow",' + iLayerWidth + ',' + iLayerHeight + ')',0);
};
Zapatec.Win.prototype.resizeWindow = function(iLayerWidth,iLayerHeight) {
var oElements = this.winElements;
if (typeof iLayerWidth != 'number' || typeof iLayerHeight != 'number') {
var oLayerOffset = zapatecUtilsGetElementOffset(oElements.layer);
iLayerWidth = oLayerOffset.width;
iLayerHeight = oLayerOffset.height;
}
var oWindowOffset = zapatecUtilsGetElementOffset(oElements.window);
if (typeof this.frameWidth != 'number') {
var oBodyOffset = zapatecUtilsGetElementOffset(oElements.body);
this.frameWidth = oWindowOffset.width - oBodyOffset.width + zapatecWinFrame;
this.frameHeight = oWindowOffset.height - oBodyOffset.height + zapatecWinFrame;
}
var oBodyStyle = oElements.body.style;
var oTagfor = this.config.tagfor;
if (oTagfor) {
oBodyStyle.width = '';
oBodyStyle.height = '';
oBodyStyle.maxWidth = '';
oBodyStyle.maxHeight = '';
var oTagforOffset = zapatecUtilsGetElementOffset(oTagfor);
var iTagforTop = oTagforOffset.top;
var iTagforBottom = iTagforTop + oTagforOffset.height;
var oWindowOffset = zapatecUtilsGetElementOffset(oElements.window);
var iWindowHeight = oWindowOffset.height;
var iDoubleFrame = zapatecWinFrame * 2;
var iSpaceUnder = iLayerHeight - iTagforBottom - iDoubleFrame;
if (iSpaceUnder < 0) {
iSpaceUnder = 0;
}
var iSpaceAbove = iTagforTop - iDoubleFrame;
if (iSpaceAbove < 0) {
iSpaceAbove = 0;
}
this.winTagUnder = iSpaceUnder > iSpaceAbove;
if (this.winTagUnder) {
var iLayerBottom = iLayerHeight;
iLayerHeight = Math.min(
iLayerHeight - iDoubleFrame,
Math.max(iWindowHeight,iSpaceUnder)
);
iLayerTop = iLayerBottom - iLayerHeight - zapatecWinFrame;
} else {
iLayerHeight = Math.min(
iLayerHeight - iDoubleFrame,
Math.max(iWindowHeight,iSpaceAbove)
);
iLayerTop = zapatecWinFrame;
}
if (iLayerHeight < 0) {
iLayerHeight = 0;
}
var oLayerStyle = oElements.layer.style;
oLayerStyle.left = zapatecWinFrame - 2000 + 'px';
oLayerStyle.top = iLayerTop - 2000 + 'px';
oLayerStyle.width = iLayerWidth - iDoubleFrame + 'px';
oLayerStyle.height = iLayerHeight + 'px';
}
var iFrameWidth = this.frameWidth;
var iFrameHeight = this.frameHeight;
var oContentOffset = zapatecUtilsGetElementOffset(oElements.content);
if (oContentOffset.width + iFrameWidth > iLayerWidth) {
if (iLayerWidth > iFrameWidth) {
oBodyStyle.width = iLayerWidth - iFrameWidth + 'px';
} else {
oBodyStyle.width = '1px';
}
} else if (oBodyStyle.width) {
oBodyStyle.width = '';
}
if (oContentOffset.height + iFrameHeight > iLayerHeight) {
if (iLayerHeight > iFrameHeight) {
oBodyStyle.height = iLayerHeight - iFrameHeight + 'px';
} else {
oBodyStyle.height = '1px';
}
} else if (oBodyStyle.height) {
oBodyStyle.height = '';
}
this.winTimeout = setTimeout('zapatecWidgetCallMethod(' + this.id +
',"centerWindow",' + iLayerWidth + ',' + iLayerHeight + ')',0);
};
Zapatec.Win.prototype.centerWindow = function(iLayerWidth,iLayerHeight) {
var oStyle;
var oElements = this.winElements;
var oConfig = this.config;
if (typeof iLayerWidth != 'number' || typeof iLayerHeight != 'number') {
var oLayerOffset = zapatecUtilsGetElementOffset(oElements.layer);
iLayerWidth = oLayerOffset.width;
iLayerHeight = oLayerOffset.height;
}
var oWindowOffset = zapatecUtilsGetElementOffset(oElements.window);
oStyle = oElements.layer.style;
var iWindowLeft = 0;
var iWindowTop = 0;
if (oConfig.modal) {
var oDims = zapatecUtils.getTopWindowSize();
var topPageWidth = oDims.width;
iWindowLeft = Math.floor((topPageWidth - oWindowOffset.width) / 2);
iWindowLeft += zapatecUtils.getTopPageScrollX();
if (iLayerWidth < iWindowLeft + oWindowOffset.width) {
iWindowLeft = iLayerWidth - oWindowOffset.width;
}
if (iWindowLeft < 0) {
iWindowLeft = 0;
}
var iWindowTop = Math.floor((iLayerHeight - oWindowOffset.height) / 2);
if (iWindowTop < 0) {
iWindowTop = 0;
}
oStyle.left = parseInt(oStyle.left) + 2000 + 'px';
oStyle.top = parseInt(oStyle.top) + 2000 + 'px';
} else {
var iWindowWidth = oWindowOffset.width;
var iWindowHeight = oWindowOffset.height;
var iLeft = 0;
var iTop = 0;
var oTagfor = oConfig.tagfor;
if (oTagfor) {
var oTagforOffset = zapatecUtilsGetElementOffset(oTagfor);
iLeft = oConfig.tagoffset + oTagforOffset.left;
var iOut = iLeft + iWindowWidth + zapatecWinFrame - iLayerWidth;
if (iOut > 0) {
if (iLeft > iOut) {
iLeft -= iOut;
} else {
iLeft = 0;
}
}
if (this.winTagUnder) {
iTop = parseInt(oStyle.top) + 2000;
} else {
iTop = iLayerHeight - iWindowHeight + zapatecWinFrame;
}
} else {
if (oConfig.winhalign == 'center') {
iLeft = Math.floor((iLayerWidth - iWindowWidth) / 2);
if (iLeft < 0) {
iLeft = 0;
}
} else {
iLeft = oConfig.winhoffset;
if (typeof iLeft == 'number') {
iLeft = Math.floor(iLeft);
if (iLeft < 0) {
iLeft = 0;
}
} else {
iLeft = parseInt(oConfig.winhoffset);
if (isNaN(iLeft) || iLeft < 0) {
iLeft = 0;
} else if (oConfig.winhoffset.indexOf('%') > 0) {
iLeft = Math.floor(iLeft * iLayerWidth / 100);
}
}
if (oConfig.winhalign == 'right') {
iLeft = iLayerWidth - iWindowWidth - iLeft;
if (iLeft < 0) {
iLeft = 0;
}
}
}
var iOut = iLeft + iWindowWidth - iLayerWidth;
if (iOut > 0) {
if (iLeft > iOut) {
iLeft -= iOut;
} else {
iLeft = 0;
}
}
if (oConfig.winvalign == 'center') {
iTop = Math.floor((iLayerHeight - iWindowHeight) / 2);
if (iTop < 0) {
iTop = 0;
}
} else {
iTop = oConfig.winvoffset;
if (typeof iTop == 'number') {
iTop = Math.floor(iTop);
if (iTop < 0) {
iTop = 0;
}
} else {
iTop = parseInt(oConfig.winvoffset);
if (isNaN(iTop) || iTop < 0) {
iTop = 0;
} else if (oConfig.winvoffset.indexOf('%') > 0) {
iTop = Math.floor(iTop * iLayerHeight / 100);
}
}
if (oConfig.winvalign == 'bottom') {
iTop = iLayerHeight - iWindowHeight - iTop;
if (iTop < 0) {
iTop = 0;
}
}
}
iOut = iTop + iWindowHeight - iLayerHeight;
if (iOut > 0) {
if (iTop > iOut) {
iTop -= iOut;
} else {
iTop = 0;
}
}
}
oStyle.width = iWindowWidth + 'px';
oStyle.height = iWindowHeight + 'px';
oStyle.left = iLeft + 'px';
oStyle.top = iTop + 'px';
}
oStyle = oElements.window.style;
oStyle.left = iWindowLeft + 'px';
oStyle.top = iWindowTop + 'px';
oStyle = oElements.body.style;
oStyle.maxWidth = iLayerWidth - iWindowLeft - this.frameWidth + 'px';
oStyle.maxHeight = iLayerHeight - iWindowTop - this.frameHeight + 'px';
oElements.layer.style.visibility = '';
this.winTimeout = null;
this.winOpening = null;
this.winOpened = true;
this.fireEvent('winOpened');
};
Zapatec.Win.prototype.update = function(oArg) {
if (!oArg) {return;}
var oContainer = this.winElements;
if (!oContainer) {return;}
oContainer = oContainer.content;
if (!oContainer) {return;}
oContainer.innerHTML = '';
zapatecTransport.parseHtml(oArg.source,oContainer);
};
Zapatec.Win.prototype.hide = function() {
if (!this.templateLoaded) {
this.removeEventListener('loadTemplateEnd',zapatecWin.loadData);
return;
}
if (this.winTimeout) {
clearTimeout(this.winTimeout);
this.winTimeout = null;
}
this.winOpening = null;
zapatecEventDriven.removeEventListener('windowResized',this.winOnResize);
zapatecUtils.removeEvent(window.document,'keydown',this.winOnKeydown);
var oElements = this.winElements;
if (oElements) {
oElements.layer.style.display = 'none';
}
var oFixed = this.winFixed;
if (oFixed) {
window.onscroll = oFixed.onscroll;
var oHtml = document.getElementsByTagName('html')[0];
if (oHtml) {
oHtml.style.overflow = oFixed.overflow;
}
window.scrollTo(oFixed.pageScrollX,oFixed.pageScrollY);
oFixed = null;
this.winFixed = null;
}
this.winOpened = null;
this.fireEvent('winHidden');
};
Zapatec.Win.prototype.close = function() {
this.hide();
if (this.winElements) {
var oLayer = this.winElements.layer;
this.winElements = null;
oLayer.parentNode.removeChild(oLayer);
}
this.fireEvent('winClosed');
};
Zapatec.Win.prototype.discard = function() {
this.close();
zapatecWin.SUPERclass.discard.call(this);
};
Zapatec.Win.prototype.onKeydown = function() {
var oEvent = window.event;
if (oEvent.keyCode == 27) {
this[this.config.onclose]();
zapatecUtils.stopEvent(oEvent);
}
};
Zapatec.Win.prototype.onMouseover = function() {
this.fireEvent('winMouseover');
};
Zapatec.Win.prototype.onMouseout = function() {
this.fireEvent('winMouseout');
};
}
zapatecUtils.emulateWindowEvent(['mouseover','mouseout','mousedown']);
zapatecICalendar =
Zapatec.ICalendar = function(oArg) {
zapatecICalendar.SUPERconstructor.call(this,oArg);
};
Zapatec.ICalendar.id = 'Zapatec.ICalendar';
Zapatec.inherit(zapatecICalendar,zapatecWidget);
Zapatec.ICalendar.calendarColors = [];
Zapatec.ICalendar.colors = [];
zapatecICWeek = 0;
zapatecICMonth = 1;
zapatecICAgenda = 2;
Zapatec.ICalendar.icRegexpFormatDateDay = /^%[^m]/;
Zapatec.ICalendar.icRegexpFormatTimeAm = /%(P|p)/;
Zapatec.ICalendar.prototype.init = function(oArg) {
zapatecICalendar.SUPERclass.init.call(this,oArg);
zapatecEventDriven.addEventListener(
'windowResized',
new Function('zapatecWidgetCallMethod(' + this.id + ',"displayGrid")')
);
};
Zapatec.ICalendar.prototype.configure = function(oArg) {
this.defineConfigOption('theme','icomplete');
this.defineConfigOption('templateFile','icomplete');
this.defineConfigOption('templates',{
main: 'zpICTemplateMain',
icAgenda: 'zpICTemplateAgenda',
icAlldayEvent: 'zpICTemplateAlldayEvent',
icAlldayEventRead: 'zpICTemplateAlldayEventRead',
icFormEventCreate: 'zpICTemplateFormEventCreate',
icFormEventDelete: 'zpICTemplateFormEventDelete',
icFormEventDetails: 'zpICTemplateFormEventDetails',
icFormEventEdit: 'zpICTemplateFormEventEdit',
icFormManageCalendars: 'zpICTemplateFormManageCalendars',
icLeftMenu: 'zpICTemplateLeftMenu',
icMonth: 'zpICTemplateMonth',
icMonthCell: 'zpICTemplateMonthCell',
icMonthEvent: 'zpICTemplateMonthEvent',
icMonthEventRead: 'zpICTemplateMonthEventRead',
icMonthMoreEvents: 'zpICTemplateMoreEvents',
icPeriod: 'zpICTemplatePeriod',
icSelect: 'zpICTemplateSelect',
icWeek: 'zpICTemplateWeek',
icWeekEvent: 'zpICTemplateWeekEvent',
icWeekEventRead: 'zpICTemplateWeekEventRead'
});
this.defineConfigOption('callbackSource',zapatecICalendar.callbackSource);
this.defineConfigOption('agendaDays',30);
this.defineConfigOption('agendaEvents',100);
this.defineConfigOption('alarmInterval',60);
this.defineConfigOption('alarmOff');
this.defineConfigOption('autoresize',true);
this.defineConfigOption('commandScript');
this.defineConfigOption('container');
this.defineConfigOption('containerWin',document.body);
this.defineConfigOption('customCalendarOptions',{});
this.defineConfigOption('customFieldsCalendar',[{name:'shortname'}]);
this.defineConfigOption('customFieldsEvent');
this.defineConfigOption('dayStart',18);
this.defineConfigOption('dayEnd',36);
this.defineConfigOption('defaultAlarmAction','email');
this.defineConfigOption('defaultAlarmDuration',60);
this.defineConfigOption('defaultTransp','opaque');
this.defineConfigOption('defaultClass','default');
this.defineConfigOption('firstDayOfWeek',0);
this.defineConfigOption('formatDate','%m/%d/%Y');
this.defineConfigOption('formatTime','%l:%M%P');
this.defineConfigOption('language','en');
this.defineConfigOption('read');
this.defineConfigOption('schedulingView');
this.defineConfigOption('templateArgs');
this.defineConfigOption('timeInterval',2);
this.defineConfigOption('updateInterval',60);
this.defineConfigOption('updateOff');
zapatecICalendar.SUPERclass.configure.call(this,oArg);
var oConfig = this.config;
var vOption;
this.container = zapatecWidgetGetElementById(oConfig.container);
if (!this.container) {
this.debug('Config option "container" is invalid or missed.');
return;
}
vOption = oConfig.commandScript;
if (typeof vOption != 'string' || !vOption.length) {
oConfig.commandScript = null;
}
oConfig.dayStart = parseInt(oConfig.dayStart);
vOption = oConfig.dayStart;
if (isNaN(vOption) || vOption < 0 || vOption > 47) {
oConfig.dayStart = 18;
}
this.icScrollTop = null;
oConfig.dayEnd = parseInt(oConfig.dayEnd);
vOption = oConfig.dayEnd;
if (isNaN(vOption) || vOption < 0 || vOption > 47) {
oConfig.dayEnd = 36;
}
if (oConfig.dayEnd < oConfig.dayStart) {
oConfig.dayEnd = oConfig.dayStart;
}
oConfig.timeInterval = parseInt(oConfig.timeInterval);
vOption = oConfig.timeInterval;
if (isNaN(vOption) || (vOption != 1 && vOption != 2 && vOption != 3 &&
vOption != 4 && vOption != 6 && vOption != 12)) {
oConfig.timeInterval = 2;
}
oConfig.alarmInterval = parseInt(oConfig.alarmInterval);
vOption = oConfig.alarmInterval;
if (isNaN(vOption) || vOption < 1) {
oConfig.alarmInterval = 60;
}
oConfig.updateInterval = parseInt(oConfig.updateInterval);
vOption = oConfig.updateInterval;
if (isNaN(vOption) || vOption < 1) {
oConfig.updateInterval = 60;
}
oConfig.agendaDays = parseInt(oConfig.agendaDays);
vOption = oConfig.agendaDays;
if (isNaN(vOption) || vOption < 1) {
oConfig.agendaDays = 30;
}
oConfig.agendaEvents = parseInt(oConfig.agendaEvents);
vOption = oConfig.agendaEvents;
if (isNaN(vOption) || vOption < 1) {
oConfig.agendaEvents = 100;
}
this.icViewDays = 7;
};
Zapatec.ICalendar.prototype.discard = function() {
zapatecICalendar.SUPERclass.discard.call(this);
};
Zapatec.ICalendar.prototype.addStandardEventListeners = function() {
var fUnlock = zapatecICalendar.eventUnlock;
var fRevert = zapatecICalendar.eventRevert;
var fHideForm = zapatecICalendar.hideForm;
var fHideFormReloadData = zapatecICalendar.hideFormReloadData;
zapatecICalendar.SUPERclass.addStandardEventListeners.call(this);
this.addEventListener('loadDataEnd',zapatecICalendar.onLoadDataEnd);
this.addEventListener('zpICServerEventCreated',fUnlock);
this.addEventListener('zpICServerEventNotCreated',fRevert);
this.addEventListener('zpICServerEventModified',fUnlock);
this.addEventListener('zpICServerEventNotModified',fRevert);
this.addEventListener('zpICServerEventDeleted',fRevert);
this.addEventListener('zpICServerEventNotDeleted',fUnlock);
this.addEventListener('zpICServerCalendarAdded',fHideFormReloadData);
this.addEventListener('zpICServerCalendarNotAdded',fHideForm);
this.addEventListener('zpICServerCalendarCreated',fHideFormReloadData);
this.addEventListener('zpICServerCalendarNotCreated',fHideForm);
this.addEventListener('zpICServerCalendarModified',fHideFormReloadData);
this.addEventListener('zpICServerCalendarNotModified',fHideForm);
};
Zapatec.ICalendar.prototype.display = function() {
zapatecICalendar.SUPERclass.display.call(this);
var oTemplateMain = this.templates;
if (!oTemplateMain) {return;}
oTemplateMain = oTemplateMain.main;
if (!oTemplateMain) {return;}
var oContainer = this.container;
oContainer.innerHTML = '';
oTemplateMain.compile({
widgetId: this.id,
templateArgs: this.config.templateArgs,
read: this.config.read
},oContainer);
oContainer = document.getElementById('zpIC' + this.id + 'Container');
if (oContainer) {
oContainer.className = this.getClassName({
prefix: 'zpICTheme'
});
} else {
this.debug('Cannot find zpIC' + this.id + 'Container element.');
}
this.initControls();
this.view({
force: true
});
};
Zapatec.ICalendar.icTimeValuesAm = [];
Zapatec.ICalendar.icTimeValues = [];
Zapatec.ICalendar.prototype.getSourceTimeSelector = function(oArg) {
var iSelected = 0;
var oTime = zapatecDate.parseTime(oArg.keyword);
var iVal = oTime.hours;
if (iVal) {
iSelected = iVal * 2;
}
iVal = oTime.minutes;
if (iVal && (iVal == 3 || iVal >= 30)) {
iSelected++;
}
return {
source: {
tips: zapatecICalendar.icRegexpFormatTimeAm.test(this.config.formatTime) ?
zapatecICalendar.icTimeValuesAm :
zapatecICalendar.icTimeValues,
selected: iSelected
},
sourceType: 'json'
};
};
Zapatec.ICalendar.prototype.initControls = function() {
zapatecICalendar.SUPERclass.initControls.call(this);
var iThisId = this.id;
var sId = 'zpIC' + iThisId;
var oControls = this.controls;
var oConfig = this.config;
var sLanguage = oConfig.language;
var fWinOpen = new Function('zapatecWidgetCallMethod(' + iThisId +
',"restoreGridScroll")');
var fWinClose = new Function('zapatecWidgetCallMethod(' + iThisId +
',"viewRefresh");zapatecWidgetCallMethod(' + iThisId +
',"restoreGridScroll")');
var sTemplateFile = oConfig.templateFile;
var sTheme = oConfig.theme.split('/').pop().split('.').shift();
var oWinContainer = oConfig.containerWin;
if (!oWinContainer) {
oWinContainer = sId + 'Container';
}
oControls.icWindow = new zapatecWin({
templateFile: sTemplateFile,
theme: sTheme,
sourceType: 'html/text',
container:oWinContainer,
eventListeners: {
winOpened: fWinOpen,
winHidden: fWinClose
}
});
oControls.icWindowEventOptions = new zapatecWin({
templateFile: sTemplateFile,
theme: sTheme,
sourceType: 'html',
source: sId + 'EventOptions',
container:oWinContainer,
eventListeners: {
winOpened: fWinOpen,
winHidden: fWinClose
}
});
oControls.icMessage = new zapatecWin({
templateFile: 'messagebar',
sourceType: 'html/text',
container:oWinContainer,
modal: false,
winvalign: 'top'
});
var iFirstDayOfWeek = oConfig.firstDayOfWeek;
var sFormatDate = oConfig.formatDate;
var fCalendar;
var sCommandScript = oConfig.commandScript;
};
Zapatec.ICalendar.prototype.restoreGridScroll = function() {
if (typeof this.icScrollTop == 'number') {
var oICal = this;
setTimeout(function() {
var oGridContainer = document.getElementById('zpIC' + oICal.id +
'GridContainer');
if (oGridContainer) {
oGridContainer.scrollTop = oICal.icScrollTop;
}
oICal = null;
},0);
}
};
Zapatec.ICalendar.callbackSource = function(oArg) {
var oConfig = this.config;
if (oConfig.commandScript) {
var oCustomOptions = oConfig.customCalendarOptions;
return {
source:oConfig.commandScript,
sourceType: 'json/url',
method: 'POST',
content: 'command=getevents&range=' +
encodeURIComponent(zapatecTransport.serializeJsonObj(oArg)) +
(oCustomOptions ? '&customOptions=' + encodeURIComponent(
zapatecTransport.serializeJsonObj(oCustomOptions)) : '')
};
} else {
return {
source:oConfig.source,
sourceType:oConfig.sourceType
}
}
};
Zapatec.ICalendar.prototype.loadDataJson = function(oData) {
this.icVirtualGrid = null;
if (!(oData instanceof Object)) {
oData = {};
}
if (!(oData.calendars instanceof Array)) {
oData.calendars = [];
}
if (this.data && this.data.calendars instanceof Array) {
for (var iOldCal = 0; iOldCal < this.data.calendars.length; ++iOldCal) {
for (var iNewCal = 0; iNewCal < oData.calendars.length; ++iNewCal) {
if (oData.calendars[iNewCal].id == this.data.calendars[iOldCal].id) {
oData.calendars[iNewCal].selected = this.data.calendars[iOldCal].selected;
}
}
}
}
this.data = oData;
this.formVirtualGrid();
this.displayLeftMenu();
this.displayGrid();
this.hideMessage();
this.icLoadingData = null;
if (oData.error || oData.debug) {
this.displayMessage({
error:oData.error ? oData.error :
'Cannot load data: Server error occurred. Use debug mode for details.',
debug:oData.debug
});
}
};
Zapatec.ICalendar.onLoadDataEnd = function() {
this.icLoadingData = null;
};
Zapatec.ICalendar.prototype.formVirtualGrid = function() {
this.icVirtualGrid = {
cells: []
};
var oVirtualGrid = this.icVirtualGrid;
var aVirtualCells = oVirtualGrid.cells;
var iView = this.icView;
var iViewDays = this.icViewDays;
var iViewWeeks = this.icViewWeeks;
if (typeof iView != 'number' || !iViewDays || !iViewWeeks) {return;}
var oData = this.data;
if (!oData) {return;}
var aCalendars = oData.calendars;
if (!(aCalendars instanceof Array)) {return;}
var iCalendars = aCalendars.length;
var iCalendar;
oVirtualGrid.visibleCalendars = [];
var aVisibleCalendars = oVirtualGrid.visibleCalendars;
var iCalendarsPerColumn = 1;
if (this.config.schedulingView && iView == zapatecICWeek && iCalendars) {
iCalendarsPerColumn = 0;
for (iCalendar = 0; iCalendar < iCalendars; iCalendar++) {
if (aCalendars[iCalendar].selected) {
aVisibleCalendars[iCalendar] = iCalendarsPerColumn;
iCalendarsPerColumn++;
}
}
iViewDays *= iCalendarsPerColumn;
}
oVirtualGrid.calendarsPerColumn = iCalendarsPerColumn;
var iDaysPerRow,iMaxRow;
if (iView == zapatecICMonth) {
oVirtualGrid.daysPerRow = iDaysPerRow = 7;
oVirtualGrid.maxRow = iMaxRow = iViewWeeks - 1;
} else {
oVirtualGrid.daysPerRow = iDaysPerRow = iViewDays;
oVirtualGrid.maxRow = iMaxRow = 0;
}
var aAlldayEvents = [];
var aRegularEvents = [];
var iCalendarNumber,oCalendar,aEvents,iEvents,iEvent,aVirtualEvent,
iParts,iPart,oPart,iRow,aRow,iCol,aCol,iVirtualEvents,iVEvent,
iDiff;
for (iCalendar = 0; iCalendar < iCalendars; iCalendar++) {
iCalendarNumber = aVisibleCalendars[iCalendar];
oCalendar = aCalendars[iCalendar];
if (!oCalendar || !oCalendar.selected) {
continue;
}
aEvents = oCalendar.events;
if (!(aEvents instanceof Array)) {
continue;
}
iEvents = aEvents.length;
for (iEvent = 0; iEvent < iEvents; iEvent++) {
aVirtualEvent = this.formVirtualEvent({
calendarId: iCalendar,
eventId: iEvent,
calendarNumber: iCalendarNumber
});
if (!aVirtualEvent) {
continue;
}
iParts = aVirtualEvent.length;
if (!iParts) {
continue;
}
if (aVirtualEvent[0].allday) {
for (iPart = 0; iPart < iParts; iPart++) {
oPart = aVirtualEvent[iPart];
iRow = oPart.row;
aRow = aAlldayEvents[iRow];
if (!aRow) {
aAlldayEvents[iRow] = [];
aRow = aAlldayEvents[iRow];
}
iVirtualEvents = aRow.length;
for (iVEvent = 0; iVEvent < iVirtualEvents; iVEvent++) {
iDiff = aRow[iVEvent].days - oPart.days;
if (iDiff < 0) {
break;
} else if (!iDiff && aRow[iVEvent].startTime > oPart.startTime) {
break;
}
}
aRow.splice(iVEvent,0,oPart);
}
} else {
for (iPart = 0; iPart < iParts; iPart++) {
oPart = aVirtualEvent[iPart];
iRow = oPart.row;
aRow = aRegularEvents[iRow];
if (!aRow) {
aRegularEvents[iRow] = [];
aRow = aRegularEvents[iRow];
}
iCol = oPart.col;
aCol = aRow[iCol];
if (!aCol) {
aRow[iCol] = [];
aCol = aRow[iCol];
}
iVirtualEvents = aCol.length;
for (iVEvent = 0; iVEvent < iVirtualEvents; iVEvent++) {
if (aCol[iVEvent].startTime > oPart.startTime) {
break;
}
}
aCol.splice(iVEvent,0,oPart);
}
}
}
}
var sInsert;
if (iView != zapatecICAgenda) {
var sInsert = 'virtualEventInsert';
var oStartDate = this.icStartDate;
var fTomorrow = zapatecDate.getTomorrow;
var fPrint = zapatecDate.print;
var oDate;
for (var iDay = 0; iDay < iViewDays; iDay++) {
oDate = fTomorrow({
date:oStartDate,
days: Math.floor(iDay / iCalendarsPerColumn)
});
aVirtualCells[iDay] = {
date: {
timestamp:oDate.getTime(),
wday: fPrint(oDate,'%A'),
date: this.dateToString({
date:oDate,
abbreviated: true
})
},
events: []
};
}
} else {
sInsert = 'virtualEventInsertAgenda';
}
var iRows,iCols;
iRows = aAlldayEvents.length;
for (iRow = 0; iRow < iRows; iRow++) {
aRow = aAlldayEvents[iRow];
if (!aRow) {
continue;
}
iVirtualEvents = aRow.length;
for (iVEvent = 0; iVEvent < iVirtualEvents; iVEvent++) {
this[sInsert](aRow[iVEvent]);
}
}
iRows = aRegularEvents.length;
for (iRow = 0; iRow < iRows; iRow++) {
aRow = aRegularEvents[iRow];
if (!aRow) {
continue;
}
iCols = aRow.length;
for (iCol = 0; iCol < iCols; iCol++) {
aCol = aRow[iCol];
if (!aCol) {
continue;
}
iVirtualEvents = aCol.length;
for (iVEvent = 0; iVEvent < iVirtualEvents; iVEvent++) {
this[sInsert](aCol[iVEvent]);
}
}
}
};
Zapatec.ICalendar.prototype.formVirtualEvent = function(oArg) {
var fCompareDates = zapatecICalendar.compareDates;
var oVirtualGrid = this.icVirtualGrid;
if (!oVirtualGrid) {return;}
if (!oArg) {return;}
var iCalendarId = oArg.calendarId;
var oCalendar = this.data.calendars[iCalendarId];
if (!oCalendar || !oCalendar.events) {return;}
var iEventId = oArg.eventId;
var oEvent = oCalendar.events[iEventId];
if (!oEvent) {return;}
var iCalendarNumber = oArg.calendarNumber || 0;
var iCalendarsPerColumn = oVirtualGrid.calendarsPerColumn;
var oEventDates = zapatecICalendar.getEventDates(oEvent);
if (!oEventDates) {return;}
var oEventStartDate = oEventDates.dateStart;
var iEventStartTime = oEventStartDate.getTime();
var oEventEndDate = oEventDates.dateEnd;
var iEventEndTime = oEventEndDate.getTime();
var bAllday = iEventEndTime - iEventStartTime >= 86400000;
oEventEndDate = new Date(iEventEndTime - 1);
iEventEndTime = oEventEndDate.getTime();
if (iEventEndTime - iEventStartTime < 1800000 - 1) {
iEventEndTime = iEventStartTime + 1800000;
}
var sDisplayTime;
if (oEvent.dtstart && oEvent.dtstart.length > 8 ||
oEvent.dateIsoStart && oEvent.dateIsoStart.length > 10) {
sDisplayTime = this.dateToTimeString(oEventStartDate);
}
var iView = this.icView;
var oStartDate = this.icStartDate;
var iDaysPerRow = oVirtualGrid.daysPerRow;
var iMaxRow = oVirtualGrid.maxRow;
var bLess = false;
var bMore = false;
var iStartCol = 0;
var iStartRow = fCompareDates(oEventStartDate,oStartDate);
if (iView != zapatecICAgenda && iStartRow >= this.icViewDays) {
return [];
}
if (iStartRow < 0) {
bLess = true;
iStartRow = 0;
} else {
iStartCol = (iStartRow % iDaysPerRow) * iCalendarsPerColumn + iCalendarNumber;
iStartRow = Math.floor(iStartRow / iDaysPerRow);
}
var iEndCol = 0;
var iEndRow = fCompareDates(oEventEndDate,oStartDate);
if (iEndRow < 0) {
return [];
}
iEndCol = (iEndRow % iDaysPerRow) * iCalendarsPerColumn + iCalendarNumber;
iEndRow = Math.floor(iEndRow / iDaysPerRow);
if (iView != zapatecICAgenda && iEndRow > iMaxRow) {
bMore = true;
iEndCol = iDaysPerRow - 1;
iEndRow = iMaxRow;
}
var sAccessLevel = oCalendar.accessLevel;
var bAlarms = oEvent.alarms && oEvent.alarms.length;
var bRecurring = oEvent.rrule ? true : false;
var sEventId = oEvent.id;
var bException = sEventId && sEventId.indexOf('_') > 0 ? true : false;
var bGuests = false;
var aAttendees = oEvent.attendees;
if (aAttendees) {
var oOrganizer = oEvent.organizer;
if (oOrganizer) {
var iAttendees = aAttendees.length;
if (iAttendees > 1 || aAttendees[0].email != oOrganizer.email) {
bGuests = true;
}
} else {
bGuests = true;
}
}
var aVirtualEvent = [];
var sColor = oCalendar.color;
var sBgcolor = zapatecICalendar.colors[sColor];
var iRow,iLastCol;
if (!(this.config.schedulingView && this.icView == zapatecICWeek) && bAllday) {
var iDays;
for (iRow = iStartRow; iRow <= iEndRow; iRow++) {
iLastCol = iRow == iEndRow ? iEndCol : iDaysPerRow - 1;
iDays = iLastCol - iStartCol + 1;
aVirtualEvent.push({
calendarId: iCalendarId,
eventId: iEventId,
event:oEvent,
displayTime: sDisplayTime,
allday: true,
startTime: iEventStartTime,
endTime: iEventEndTime,
row: iRow,
col: iStartCol,
day: iRow * iDaysPerRow + iStartCol,
days: iDays,
color: sColor,
bgcolor: sBgcolor,
less: iRow == iStartRow ? bLess : true,
more: iRow == iEndRow ? bMore : true,
accessLevel: sAccessLevel,
alarms: bAlarms,
recurring: bRecurring,
exception: bException,
guests: bGuests
});
iStartCol = 0;
}
} else {
var iCol,iPart;
for (iRow = iStartRow; iRow <= iEndRow; iRow++) {
iLastCol = (iRow == iEndRow ? iEndCol : iDaysPerRow - 1);
for (
iCol = iStartCol,iPart = 0;
iCol <= iLastCol;
iCol += iCalendarsPerColumn,iPart++
) {
aVirtualEvent.push({
calendarId: iCalendarId,
eventId: iEventId,
partId: iPart,
event:oEvent,
displayTime: sDisplayTime,
allday: false,
startTime: iEventStartTime,
endTime: iEventEndTime,
row: iRow,
col: iCol,
day: iRow * iDaysPerRow + iCol,
days: 1,
color: sColor,
bgcolor: sBgcolor,
less: iRow == iStartRow && iCol == iStartCol ? bLess : true,
more: iRow == iEndRow && iCol == iEndCol ? bMore : true,
accessLevel: sAccessLevel,
alarms: bAlarms,
recurring: bRecurring,
exception: bException,
guests: bGuests
});
}
iStartCol = 0;
}
}
return aVirtualEvent;
};
Zapatec.ICalendar.prototype.virtualEventInsert = function(oNewVirtualEvent) {
aVirtualCells = this.icVirtualGrid.cells;
var iStartDay = oNewVirtualEvent.day;
var iEndDay = iStartDay + oNewVirtualEvent.days;
var iCell,oVirtualCell;
var bFreeLine = false;
for (var iLine = 0; !bFreeLine; iLine++) {
bFreeLine = true;
for (iCell = iStartDay; iCell < iEndDay; iCell++) {
oVirtualCell = aVirtualCells[iCell];
if (!oVirtualCell || !oVirtualCell.events) {
continue;
}
if (oVirtualCell.events[iLine]) {
bFreeLine = false;
break;
}
}
}
iLine--;
for (iCell = iStartDay; iCell < iEndDay; iCell++) {
oVirtualCell = aVirtualCells[iCell];
if (oVirtualCell && oVirtualCell.events) {
oVirtualCell.events[iLine] = oNewVirtualEvent;
}
}
};
Zapatec.ICalendar.prototype.virtualEventInsertAgenda = function(oNewVirtualEvent) {
aVirtualCells = this.icVirtualGrid.cells;
var iStartDay = oNewVirtualEvent.day;
var iEndDay = iStartDay + oNewVirtualEvent.days;
var oStartDate = this.icStartDate;
var fTomorrow = zapatecDate.getTomorrow;
var fPrint = zapatecDate.print;
var oDate,oVirtualCell;
for (var iDay = iStartDay; iDay < iEndDay; iDay++) {
oVirtualCell = aVirtualCells[iDay];
if (!oVirtualCell || !oVirtualCell.events) {
oDate = fTomorrow({
date:oStartDate,
days: iDay
});
oVirtualCell = aVirtualCells[iDay] = {
date: {
timestamp:oDate.getTime(),
wday: fPrint(oDate,'%A'),
date: this.dateToString({
date:oDate,
abbreviated: true
})
},
events: []
};
}
oVirtualCell.events.push(oNewVirtualEvent);
}
};
Zapatec.ICalendar.getEventDates = function(oEvent) {
if (!oEvent) {return;}
var oDateStart;
if (oEvent.dtstart) {
oDateStart = zapatecDate.timeStampToDate({
dtstamp:oEvent.dtstart
});
} else if (oEvent.dateIsoStart) {
oDateStart = zapatecDate.timeIsoToDate({
dateIso:oEvent.dateIsoStart
});
}
if (!oDateStart) {return;}
var oDateEnd;
if (oEvent.dtend) {
oDateEnd = zapatecDate.timeStampToDate({
dtstamp:oEvent.dtend
});
} else if (oEvent.dateIsoEnd) {
oDateEnd = zapatecDate.timeIsoToDate({
dateIso:oEvent.dateIsoEnd
});
}
if (!oDateEnd) {return;}
oDateStart.setSeconds(0);
oDateStart.setMilliseconds(0);
oDateEnd.setSeconds(0);
oDateEnd.setMilliseconds(0);
return {
dateStart:oDateStart,
dateEnd:oDateEnd
};
};
Zapatec.ICalendar.prototype.dateToString = function(oArg) {
if (!oArg || !oArg.date) {return;}
var sWeekday = oArg.weekday ? oArg.abbreviated ? '%a,' : '%A,' : '';
var sMonth = oArg.abbreviated ? '%b' : '%B';
if (Zapatec.ICalendar.icRegexpFormatDateDay.test(this.config.formatDate)) {
if (oArg.year) {
return zapatecDate.print(oArg.date,sWeekday + '%e ' + sMonth + ' %Y');
} else {
return zapatecDate.print(oArg.date,sWeekday + '%e ' + sMonth);
}
} else {
if (oArg.year) {
return zapatecDate.print(oArg.date,sWeekday + sMonth + ' %e,%Y');
} else {
return zapatecDate.print(oArg.date,sWeekday + sMonth + ' %e');
}
}
};
Zapatec.ICalendar.prototype.datesToPeriodString = function(oArg) {
if (!oArg) {return;}
var oDateStart = oArg.dateStart;
var oDateEnd = oArg.dateEnd;
if (!oDateStart || !oDateEnd) {return;}
if (typeof oArg.weekday == 'undefined') {
oArg.weekday = true;
}
var sDateStart = this.dateToString({
date:oDateStart,
abbreviated:oArg.abbreviated,
weekday:oArg.weekday
});
var sDateEnd = this.dateToString({
date:oDateEnd,
abbreviated:oArg.abbreviated,
weekday:oArg.weekday
});
if (oArg.time) {
sDateStart += ',';
sDateEnd += ',';
if (sDateStart == sDateEnd) {
sDateEnd = '';
}
return sDateStart + this.dateToTimeString(oDateStart) + ' - ' + sDateEnd +
this.dateToTimeString(oDateEnd);
} else {
if (sDateStart == sDateEnd) {
return sDateStart;
}
return sDateStart + ' - ' + sDateEnd;
}
};
Zapatec.ICalendar.prototype.datesToPeriodShortString = function(oArg) {
if (!oArg) {return;}
var oDateStart = oArg.dateStart;
var oDateEnd = oArg.dateEnd;
if (!oDateStart || !oDateEnd) {return;}
var iStartDate = oDateStart.getDate();
var iStartMonth = oDateStart.getMonth();
var iStartYear = oDateStart.getFullYear();
var iEndDate = oDateEnd.getDate();
var iEndMonth = oDateEnd.getMonth();
var iEndYear = oDateEnd.getFullYear();
if (iStartMonth == iEndMonth && iStartYear == iEndYear) {
if (Zapatec.ICalendar.icRegexpFormatDateDay.test(this.config.formatDate)) {
return iStartDate + ' - ' + iEndDate + ' ' +
zapatecDate.print(oDateStart,'%B %Y');
} else {
return zapatecDate.print(oDateStart,'%B') + ' ' + iStartDate +
' - ' + iEndDate + ' ' + iStartYear;
}
} else if (iStartYear == iEndYear) {
return this.dateToString({date:oDateStart}) + ' - ' +
this.dateToString({date:oDateEnd}) + ' ' + iStartYear;
} else {
return this.dateToString({date:oDateStart,year: true}) + ' - ' +
this.dateToString({date:oDateEnd,year: true});
}
};
Zapatec.ICalendar.prototype.dateToShortString = function(oDate) {
if (oDate) {
return zapatecDate.print(oDate,this.config.formatDate);
}
};
Zapatec.ICalendar.prototype.dateToTimeString = function(oDate) {
if (oDate) {
return zapatecDate.print(oDate,this.config.formatTime);
}
};
Zapatec.ICalendar.prototype.dateTimeStringToDate = function(oArg) {
if (!oArg) {return;}
var sDate = oArg.date;
if (!sDate) {return;}
sDate = zapatecUtils.trim(sDate);
var oDate = zapatecDate.parseDate(sDate,this.config.formatDate);
var sTime = oArg.time;
if (!sTime) {
return oDate;
}
var oTime = zapatecDate.parseTime(sTime);
if (oTime && typeof oTime.hours == 'number' &&
typeof oTime.minutes == 'number') {
oDate.setHours(oTime.hours);
oDate.setMinutes(oTime.minutes);
}
return oDate;
};
Zapatec.ICalendar.compareDates = function(oDate1,oDate2) {
oDate1 = new Date(oDate1.getFullYear(),oDate1.getMonth(),oDate1.getDate());
oDate2 = new Date(oDate2.getFullYear(),oDate2.getMonth(),oDate2.getDate());
var iDays = (oDate1.getTime() - oDate2.getTime()) / 86400000;
return Math.round(iDays);
};
Zapatec.ICalendar.prototype.sameWeek = function(oDate1,oDate2) {
var fGetWeekDay = zapatecDate.getWeekDay;
if (!oDate1 || !oDate2) {
return false;
}
var iFirstDayOfWeek = this.config.firstDayOfWeek;
oDate1 = fGetWeekDay({
date:oDate1,
weekDay: iFirstDayOfWeek
});
oDate2 = fGetWeekDay({
date:oDate2,
weekDay: iFirstDayOfWeek
});
if (!zapatecICalendar.compareDates(oDate1,oDate2)) {
return true;
}
return false;
};
Zapatec.ICalendar.prototype.displayMessage = function(oArg) {
if (!oArg) {return;}
this.hideMessage();
var sTheme = 'messagebar';
var sMsg = '';
if (typeof oArg.error != 'undefined') {
sTheme = 'errorbar';
sMsg = zapatecTranslate(oArg.error);
} else if (typeof oArg.message != 'undefined') {
sMsg = zapatecTranslate(oArg.message);
}
if (sMsg.length) {
this.timeoutHideMessage(oArg);
this.controls.icMessage.open({
theme: sTheme,
source: sMsg
});
}
if (oArg.debug) {
this.debug(oArg.debug);
}
};
Zapatec.ICalendar.prototype.timeoutHideMessage = function(oArg) {
this.cancelTimeoutMessage();
if (oArg && oArg.wait) {
this.icTimeoutMessage=setTimeout('zapatecWidgetCallMethod('+this.id+',"displayMessage",{message:"<span class=\\"zpICMessageUpdating\\">Still working...</span>",wait:true})',30000);
} else {
this.icTimeoutMessage=setTimeout('zapatecWidgetCallMethod('+this.id+',"hideMessage")',20000);
}
};
Zapatec.ICalendar.prototype.cancelTimeoutMessage = function() {
if (this.icTimeoutMessage) {
clearTimeout(this.icTimeoutMessage);
this.icTimeoutMessage = null;
}
};
Zapatec.ICalendar.prototype.hideMessage = function() {
this.cancelTimeoutMessage();
this.controls.icMessage.hide();
};
Zapatec.ICalendar.prototype.getView = function(oArg) {
if (!oArg) {
oArg = {};
}
var iView = oArg.view;
if (typeof iView != 'number') {
iView = this.icView;
if (typeof iView != 'number') {
iView = zapatecICWeek;
}
}
this.icView = iView;
return iView;
};
Zapatec.ICalendar.prototype.getCurrentDate = function(oArg) {
if (!oArg) {
oArg = {};
}
var oCurrentDate = oArg.date;
if (!oCurrentDate) {
oCurrentDate = this.icCurrentDate;
if (!oCurrentDate) {
oCurrentDate = new Date();
}
}
this.icCurrentDate = oCurrentDate;
return oCurrentDate;
};
Zapatec.ICalendar.prototype.getViewDays = function(oArg) {
if (!oArg) {
oArg = {};
}
var iView = this.getView(oArg);
var oCurrentDate = this.getCurrentDate(oArg);
var iViewDays = oArg.viewDays;
if (!iViewDays) {
iViewDays = this.icViewDays;
if (!iViewDays) {
iViewDays = 7;
}
}
var iViewWeeks = 1;
if (iView == zapatecICMonth) {
iViewDays = 35;
iViewWeeks = 5;
var oStartDate = zapatecDate.getWeekDay({
date: zapatecDate.getMonthDay({
date:oCurrentDate,
day: 1
}),
weekDay: this.config.firstDayOfWeek
});
var oToDate = zapatecDate.getTomorrow({
date:oStartDate,
days: iViewDays
});
if (oCurrentDate.getMonth() == oToDate.getMonth()) {
iViewDays = 42;
iViewWeeks = 6;
}
}
this.icCurrentDate = oCurrentDate;
this.icViewDays = iViewDays;
this.icViewWeeks = iViewWeeks;
return {
view: iView,
date:oCurrentDate,
viewDays: iViewDays,
viewWeeks: iViewWeeks
}
};
Zapatec.ICalendar.prototype.getStartDate = function(oArg) {
if (!oArg) {
oArg = {};
}
var oViewDays = this.getViewDays(oArg);
var oStartDate = oArg.dateStart;
if (!oStartDate) {
oStartDate = oViewDays.date;
if (oViewDays.view == zapatecICWeek) {
if (oViewDays.viewDays == 5) {
oStartDate = zapatecDate.getWeekDay({
date:oStartDate,
weekDay: 1
});
} else if (oViewDays.viewDays > 1) {
oStartDate = zapatecDate.getWeekDay({
date:oStartDate,
weekDay: this.config.firstDayOfWeek
});
}
} else if (oViewDays.view == zapatecICMonth) {
oStartDate = zapatecDate.getWeekDay({
date: zapatecDate.getMonthDay({
date:oStartDate,
day: 1
}),
weekDay: this.config.firstDayOfWeek
});
}
}
this.icStartDate = oStartDate;
oViewDays.dateStart = oStartDate;
return oViewDays;
};
Zapatec.ICalendar.prototype.view = function(oArg) {
if (this.checkLoadingData()) {return;}
this.hideMessage();
if (!oArg) {
oArg = {};
}
var fDateToDateStamp = zapatecDate.dateToDateStamp;
var fDateToDateIso = zapatecDate.dateToDateIso;
var iCurrentView = this.icView;
var oCurrentStartDate = this.icStartDate;
var iCurrentViewDays = this.icViewDays;
var oFromDate = this.getStartDate(oArg);
var iView = oFromDate.view;
var iViewDays = oFromDate.viewDays;
oFromDate = oFromDate.dateStart;
if (!oArg.force && oCurrentStartDate && oFromDate &&
!zapatecICalendar.compareDates(oCurrentStartDate,oFromDate) &&
iCurrentView == iView && iCurrentViewDays == iViewDays) {return;}
this.icLoadingData = true;
var oToDate = zapatecDate.getTomorrow({
date:oFromDate,
days: iViewDays
});
this.displayMessage({
message:oArg.message ?
oArg.message : '<span class="zpICMessageUpdating">Loading...</span>',
wait: true
});
oArg = {
from: fDateToDateStamp({
date:oFromDate
}),
fromIso: fDateToDateIso({
date:oFromDate
}),
to: fDateToDateStamp({
date:oToDate
}),
toIso: fDateToDateIso({
date:oToDate
})
};
if (iView == zapatecICAgenda) {
oArg.maxEvents = this.config.agendaEvents;
}
this.loadData(oArg);
};
Zapatec.ICalendar.prototype.viewRefresh = function(oArg) {
if (this.icDataStale) {
this.icDataStale = null;
this.view({
force: true
});
}
};
Zapatec.ICalendar.prototype.checkLoadingData = function() {
if (this.icLoadingData) {
this.displayMessage({
message:
'<span class="zpICMessageUpdating">Please wait while loading data...</span>',
wait: true
});
}
return this.icLoadingData;
};
Zapatec.ICalendar.prototype.displayLeftMenu = function() {
var iThisId = this.id;
var oContainer = document.getElementById('zpIC' + iThisId +
'LeftMenuContainer');
oTemplate = this.templates.icLeftMenu;
if (!oContainer || !oTemplate) {return;}
oContainer.innerHTML = '';
oTemplate.compile({
widgetId: iThisId,
templateArgs: this.config.templateArgs,
read: this.config.read,
calendars: this.data.calendars
},oContainer);
};
Zapatec.ICalendar.prototype.displayGrid = function(oArg) {
var iView = this.getView();
switch (iView) {
case zapatecICWeek:
this.displayWeek(oArg);
break;
case zapatecICMonth:
this.displayMonth(oArg);
break;
case zapatecICAgenda:
this.displayAgenda(oArg);
break;
}
};
Zapatec.ICalendar.prototype.displayAgenda = function(oArg) {
if (!oArg) {
oArg = {};
}
this.displayPeriod();
var oVirtualGrid = this.icVirtualGrid;
if (!oVirtualGrid) {return;}
var aVirtualCells = oVirtualGrid.cells;
if (!aVirtualCells) {return;}
var iThisId = this.id;
var oEl = document.getElementById('zpIC' + iThisId + 'MainContainer');
if (!oEl) {return;}
var oTemplate = this.templates.icAgenda;
if (!oTemplate) {return;}
oEl.innerHTML = '';
oTemplate.compile({
widgetId: iThisId,
templateArgs: this.config.templateArgs,
read: this.config.read,
days: aVirtualCells,
today: this.dateToString({
date: new Date(),
abbreviated: true
})
},oEl);
this.resizeGrid();
};
Zapatec.ICalendar.prototype.displayMonth = function(oArg) {
var iThisId = this.id;
var sId = 'zpIC' + iThisId;
var fCompareDates = zapatecICalendar.compareDates;
var fGetTomorrow = zapatecDate.getTomorrow;
var oEl;
this.displayPeriod(oArg);
var oDate = this.icStartDate;
var oCurrentDate = this.icCurrentDate;
var iViewDays = this.icViewDays;
var iViewWeeks = this.icViewWeeks;
var iThisMonth = oCurrentDate.getMonth();
var oToDate = zapatecDate.getTomorrow({
date:oDate,
days: iViewDays
});
var iPercent = 100 / 7;
var oToday = new Date();
var bToday =
(fCompareDates(oToday,oDate) >= 0 && fCompareDates(oToday,oToDate) < 0);
var aDays = [];
for (var iDay = 0,iWeekDay = this.config.firstDayOfWeek; iDay < 7; iDay++,iWeekDay++) {
if (iWeekDay > 6) {
iWeekDay -= 7;
}
aDays.push({
width: iPercent,
left: iDay * iPercent,
date: zapatecDateShortDayNames[iWeekDay],
today: (bToday && iDay == oToday.getDay())
});
}
oEl = document.getElementById(sId + 'MainContainer');
if (!oEl) {return;}
var oTemplate = this.templates.icMonth;
if (!oTemplate) {return;}
oEl.innerHTML = '';
oTemplate.compile({
widgetId: iThisId,
templateArgs: this.config.templateArgs,
days: aDays,
weeks: new Array(iViewWeeks)
},oEl);
oEl = document.getElementById(sId + 'VerticalRule0');
if (oEl) {
this.icVerticalRuleWidth = oEl.offsetWidth;
} else {
this.icVerticalRuleWidth = 0;
}
oEl = document.getElementById(sId + 'HorizontalRule0');
if (oEl) {
this.icHorizontalRuleHeight = oEl.offsetHeight;
} else {
this.icHorizontalRuleHeight = 0;
}
oEl = document.getElementById(sId + 'Row0Col0Header');
if (oEl) {
this.icCellHeaderHeight = oEl.offsetHeight;
} else {
this.icCellHeaderHeight = 0;
}
this.resizeGrid();
var oGrid = document.getElementById(sId + 'Grid');
if (!oGrid) {return;}
var oOffset = zapatecUtils.getElementOffset(oGrid);
var iGridWidth = oOffset.width;
var iGridHeight = oOffset.height;
var oContainer = document.getElementById(sId + 'MonthCellMaster');
if (!oContainer) {return;}
var oTemplate = this.templates.icMonthCell;
if (!oTemplate) {return;}
var iRow,iCol,iLeft,iTop,iWidth,iHeight;
for (iRow = 0; iRow < iViewWeeks; iRow++) {
iTop = this.getRowOffset({
row: iRow
});
iHeight = this.getRowHeight({
row: iRow,
gridHeight: iGridHeight
});
for (iCol = 0; iCol < 7; iCol++) {
iLeft = this.getColumnOffset({
column: iCol
});
iWidth = this.getColumnWidth({
column: iCol,
gridWidth: iGridWidth
});
oTemplate.compile({
widgetId: iThisId,
templateArgs: this.config.templateArgs,
row: iRow,
col: iCol,
left: iLeft,
top: iTop,
width: iWidth,
height: iHeight,
timestamp:oDate.getTime(),
date:oDate.getDate(),
today: (bToday && fCompareDates(oToday,oDate) == 0),
thisMonth: (iThisMonth == oDate.getMonth()),
weekend: (0 == oDate.getDay() || 6 == oDate.getDay())
},oContainer);
oDate = fGetTomorrow({
date:oDate
});
}
}
oEl = document.getElementById(sId + 'Row0Col0Header');
if (oEl) {
this.icCellHeaderHeight = oEl.offsetHeight;
} else {
this.icCellHeaderHeight = 0;
}
this.displayMonthEvents();
};
Zapatec.ICalendar.prototype.resizeGrid = function() {
var sId = 'zpIC' + this.id;
var oEl;
if (this.config.autoresize) {
var fOffset = zapatecUtils.getElementOffset;
var oOffset,iHeight;
var oWindowDimensions = zapatecUtils.getWindowDimensions();
oEl = document.body.firstChild;
while (oEl.nodeType != 1 || oEl.style.display == 'none') {
oEl = oEl.nextSibling;
}
oOffset = fOffset(oEl);
var iBottomMargin = oOffset.top;
oEl = document.getElementById(sId + 'Container');
if (oEl) {
oOffset = fOffset(oEl);
iHeight = oOffset.top + oOffset.height;
oEl = document.getElementById(sId + 'MainTable');
if (oEl) {
oOffset = fOffset(oEl);
iBottomMargin += iHeight - (oOffset.top + oOffset.height);
}
}
oEl = document.getElementById(sId + 'GridFrame');
if (oEl) {
oOffset = fOffset(oEl);
iHeight = oOffset.top + oOffset.height;
oEl = document.getElementById(sId + 'GridContainer');
if (oEl) {
oOffset = fOffset(oEl);
iHeight = oWindowDimensions.height -
(iHeight - oOffset.height + iBottomMargin);
if (iHeight < 40) {
iHeight = 40;
}
oEl.style.height = iHeight + 'px';
}
}
oEl = document.getElementById(sId + 'LeftMenuFrame');
if (oEl && oEl.style.display != 'none') {
oOffset = fOffset(oEl);
iHeight = oOffset.top + oOffset.height;
oEl = document.getElementById(sId + 'LeftMenuContainer');
if (oEl) {
oOffset = fOffset(oEl);
iHeight = oWindowDimensions.height -
(iHeight - oOffset.height + iBottomMargin);
if (iHeight < 40) {
iHeight = 40;
}
oEl.style.height = iHeight + 'px';
}
oVer = document.getElementById(sId + 'VerticalItemsPane');
if (oVer) {
oVerOffset = fOffset(oVer);
var dif = oWindowDimensions.height - oVerOffset.top - iBottomMargin;
if (dif < 150) dif = 150;
oVer.style.height = dif + 'px';
}
}
}
this.icVerticalRuleOffsets = [];
this.icHorizontalRuleOffsets = [];
var iView = this.icView;
if (iView == zapatecICWeek) {
oEl = document.getElementById(sId + 'AlldayGrid');
if (oEl) {
var iWidth = oEl.clientWidth;
oEl = document.getElementById(sId + 'Grid');
if (!oEl) {return;}
oEl.style.width = iWidth + 'px';
}
var iViewDays = this.icViewDays;
if (!iViewDays) {return;}
sId += 'VerticalRule';
var aOffsets = this.icVerticalRuleOffsets;
for (var iDay = 0; iDay < iViewDays; iDay++) {
oEl = document.getElementById(sId + iDay);
if (oEl) {
oEl.style.left = oEl.offsetLeft + 'px';
aOffsets.push(oEl.offsetLeft);
}
}
} else if (iView == zapatecICMonth) {
var iViewWeeks = this.icViewWeeks;
if (!iViewWeeks) {return;}
var sRuleId = sId + 'VerticalRule';
var aOffsets = this.icVerticalRuleOffsets;
var iRule;
for (iRule = 0; iRule < 7; iRule++) {
oEl = document.getElementById(sRuleId + iRule);
if (oEl) {
oEl.style.left = oEl.offsetLeft + 'px';
aOffsets.push(oEl.offsetLeft);
}
}
sRuleId = sId + 'HorizontalRule';
aOffsets = this.icHorizontalRuleOffsets;
for (iRule = 0; iRule < iViewWeeks; iRule++) {
oEl = document.getElementById(sRuleId + iRule);
if (oEl) {
oEl.style.top = oEl.offsetTop + 'px';
aOffsets.push(oEl.offsetTop);
}
}
}
};
Zapatec.ICalendar.prototype.displayMonthEvents = function() {
var oVirtualGrid = this.icVirtualGrid;
if (!oVirtualGrid) {return;}
var aVirtualCells = oVirtualGrid.cells;
if (!aVirtualCells) {return;}
var iViewDays = this.icViewDays;
if (!iViewDays) {return;}
var oVirtualCell,aVirtualEvents,iLines,iLine,oVirtualEvent;
for (var iDay = 0; iDay < iViewDays; iDay++) {
oVirtualCell = aVirtualCells[iDay];
if (!oVirtualCell) {
continue;
}
aVirtualEvents = oVirtualCell.events;
if (!aVirtualEvents) {
continue;
}
iLines = aVirtualEvents.length;
for (iLine = 0; iLine < iLines; iLine++) {
oVirtualEvent = aVirtualEvents[iLine];
if (!oVirtualEvent || oVirtualEvent.day != iDay) {
continue;
}
this.displayMonthEvent({
virtualEvent:oVirtualEvent,
line: iLine,
lines: iLines
});
}
}
};
Zapatec.ICalendar.prototype.displayMonthEvent = function(oArg) {
var sId = 'zpIC' + this.id;
if (!oArg) {return;}
var oVirtualEvent = oArg.virtualEvent;
if (!oVirtualEvent) {return;}
oArg.grid = document.getElementById(sId + 'Grid');
if (!oArg.container) {
oArg.container = document.getElementById(sId + 'MonthEventMaster');
}
oArg.topOffset = this.icCellHeaderHeight;
var iCellHeight = this.getRowHeight({
row:oVirtualEvent.row
})
var iMaxLines = Math.floor(iCellHeight / this.icCellHeaderHeight) - 2;
if (oArg.lines - 1 <= iMaxLines || oArg.line + 1 <= iMaxLines) {
oArg.id = sId + 'Calendar' + oVirtualEvent.calendarId + 'MonthEvent' +
oVirtualEvent.eventId + 'Row' + oVirtualEvent.row + 'Col' +
oVirtualEvent.col;
this.displayAlldayEvent(oArg);
} else if (oArg.line == iMaxLines) {
this.displayMoreEventsLink(oArg);
}
};
Zapatec.ICalendar.prototype.displayAlldayEvent = function(oArg) {
var iThisId = this.id;
var sId = 'zpIC' + iThisId;
if (!oArg) {return;}
var oContainer = oArg.container;
var oVirtualEvent = oArg.virtualEvent;
if (!oContainer || !oVirtualEvent) {return;}
var oTemplate;
if (oVirtualEvent.allday) {
if (oVirtualEvent.accessLevel == 'read' ||
oVirtualEvent.accessLevel == 'freebusy' || this.config.read) {
oTemplate = this.templates.icAlldayEventRead;
} else {
oTemplate = this.templates.icAlldayEvent;
}
} else {
if (oVirtualEvent.accessLevel == 'read' ||
oVirtualEvent.accessLevel == 'freebusy' || this.config.read) {
oTemplate = this.templates.icMonthEventRead;
} else {
oTemplate = this.templates.icMonthEvent;
}
}
if (!oTemplate) {return;}
var sRead = '';
var sOnclick;
if (oVirtualEvent.accessLevel == 'read') {
sRead = 'Read';
sOnclick = 'displayFormEventRead';
} else if (this.config.read) {
sRead = 'Read';
sOnclick = 'displayFormEventRead';
}
var oEvent = oVirtualEvent.event;
if (!oEvent) {return;}
var iTop = oArg.top;
if (typeof iTop != 'number') {
iTop = oArg.topOffset || 0;
iTop += this.getRowOffset({
row:oVirtualEvent.row
});
}
var iCalendarsPerColumn = this.icVirtualGrid.calendarsPerColumn;
var iStartCol = Math.floor(oVirtualEvent.col / iCalendarsPerColumn);
var iLeft = oArg.left;
if (typeof iLeft != 'number') {
iLeft = this.getColumnOffset({
column: iStartCol
});
}
var iWidth = oArg.width;
if (typeof iWidth != 'number') {
var oGridOffset = zapatecUtilsGetElementOffset(oArg.grid);
if (!oGridOffset) {return;}
var iGridWidth = oGridOffset.width;
var iVerticalRuleWidth = this.icVerticalRuleWidth || 0;
var iWidth = -iVerticalRuleWidth;
var iCols = iStartCol + oVirtualEvent.days / iCalendarsPerColumn;
for (var iCol = iStartCol; iCol < iCols; iCol++) {
iWidth += this.getColumnWidth({
column: iCol,
gridWidth: iGridWidth
});
iWidth += iVerticalRuleWidth;
}
}
var iCalendarId = oVirtualEvent.calendarId;
var iEventId = oVirtualEvent.eventId;
oTemplate.compile({
widgetId: iThisId,
templateArgs: this.config.templateArgs,
calendarId: iCalendarId,
eventId: iEventId,
partId:oVirtualEvent.partId,
id:
(oArg.id || (sId + 'Calendar' + iCalendarId + 'AlldayEvent' + iEventId)) +
sRead,
accessLevel:oVirtualEvent.accessLevel,
onclick: sOnclick,
left: iLeft,
top: iTop,
line:oArg.line || 0,
width: iWidth,
time:oVirtualEvent.displayTime,
summary:oEvent.summary,
color:oVirtualEvent.color,
bgcolor:oVirtualEvent.bgcolor,
less:oVirtualEvent.less,
more:oVirtualEvent.more,
alarms:oVirtualEvent.alarms,
recurring:oVirtualEvent.recurring,
exception:oVirtualEvent.exception,
attendees:oVirtualEvent.guests,
locked:oEvent.locked,
tag: true
},oContainer);
};
Zapatec.ICalendar.prototype.displayMoreEventsLink = function(oArg) {
if (!oArg) {return;}
var oGrid = oArg.grid;
if (!oGrid) {return;}
var oContainer = oArg.container;
if (!oContainer) {return;}
var oVirtualEvent = oArg.virtualEvent;
if (!oVirtualEvent) {return;}
var oEvent = oVirtualEvent.event;
if (!oEvent) {return;}
var iRow = oVirtualEvent.row;
var iStartCol = oVirtualEvent.col;
var iDay = oVirtualEvent.day;
var oVirtualGrid = this.icVirtualGrid;
if (!oVirtualGrid) {return;}
var aVirtualCells = oVirtualGrid.cells;
if (!aVirtualCells) {return;}
var oGridOffset = zapatecUtils.getElementOffset(oGrid);
var iGridWidth = oGridOffset.width;
var iTop = this.getRowOffset({
row: iRow
});
var oTemplate = this.templates.icMonthMoreEvents;
var oTemplateVars = {
widgetId: this.id,
templateArgs: this.config.templateArgs,
top: (oArg.topOffset || 0) + iTop,
line:oArg.line || 0,
row: iRow
};
var iCols = iStartCol + oVirtualEvent.days;
for (var iCol = iStartCol; iCol < iCols; iCol++) {
oTemplateVars.column = iCol;
oTemplateVars.left = this.getColumnOffset({
column: iCol
});
oTemplateVars.width = this.getColumnWidth({
column: iCol,
gridWidth: iGridWidth
});
oTemplateVars.lines = aVirtualCells[iDay + iCol - iStartCol].events.length;
oTemplate.compile(oTemplateVars,oContainer);
}
};
Zapatec.ICalendar.prototype.displayMoreEvents = function(oArg) {
var iThisId = this.id;
var sId = 'zpIC' + iThisId;
if (!oArg) {return;}
var iLeft = this.getColumnOffset({
column:oArg.column
});
var iTop = this.getRowOffset({
row:oArg.row
});
var oGrid = document.getElementById(sId + 'Grid');
if (!oGrid) {return;}
var oOffset = zapatecUtils.getElementOffset(oGrid);
var iGridWidth = oOffset.width;
var iGridHeight = oOffset.height;
var iWidth = this.getColumnWidth({
column:oArg.column,
gridWidth: iGridWidth
}) * 1.5;
var oVirtualGrid = this.icVirtualGrid;
var iDay = oArg.row * oVirtualGrid.daysPerRow + oArg.column;
var aVirtualEvents = oVirtualGrid.cells[iDay].events;
var iVirtualEvents = aVirtualEvents.length;
var iCellHeaderHeight = this.icCellHeaderHeight;
var iHeight = iCellHeaderHeight * iVirtualEvents + 1;
var oWindow = document.getElementById(sId + 'MonthMoreEvents');
var oHeader = document.getElementById(sId + 'MonthMoreEventsHeader');
var oBody = document.getElementById(sId + 'MonthMoreEventsBody');
if (!oWindow || !oHeader || !oBody) {return;}
var oWindowStyle = oWindow.style;
var oBodyStyle = oBody.style;
if (iLeft + iWidth >= iGridWidth) {
oWindowStyle.left = '';
oWindowStyle.right = '0px';
} else {
oWindowStyle.left = iLeft + 'px';
oWindowStyle.right = '';
}
oBodyStyle.width = iWidth + 'px';
if (iTop + iHeight + iCellHeaderHeight >= iGridHeight) {
oWindowStyle.top = '';
oWindowStyle.bottom = '0px';
} else {
oWindowStyle.top = iTop + 'px';
oWindowStyle.bottom = '';
}
oBodyStyle.height = iHeight + 'px';
var oDate = zapatecDate.getTomorrow({
date: this.icStartDate,
days: iDay
});
oHeader.innerHTML = this.dateToString({
date:oDate
});
oHeader.onclick = new Function('zapatecWidgetCallMethod(' + iThisId +
',"switchDay",{timestamp:' + oDate.getTime() + '})');
oBody.innerHTML = '';
iWidth -= 2;
var oVirtualEvent;
for (var iLine = 0; iLine < iVirtualEvents; iLine++) {
oVirtualEvent = aVirtualEvents[iLine];
this.displayAlldayEvent({
container:oBody,
virtualEvent:oVirtualEvent,
id: sId + 'Calendar' + oVirtualEvent.calendarId + 'MonthEvent' +
oVirtualEvent.eventId + (oVirtualEvent.event.locked ? 'Locked' : ''),
top: 0,
line: iLine,
left: 1,
width: iWidth
});
}
oWindowStyle.display = '';
};
Zapatec.ICalendar.prototype.hideMoreEvents = function() {
var oEl = document.getElementById('zpIC' + this.id + 'MonthMoreEvents');
if (oEl) {
oEl.style.display = 'none';
}
};
Zapatec.ICalendar.prototype.displayWeek = function(oArg) {
var iThisId = this.id;
var sId = 'zpIC' + iThisId;
var fCompareDates = zapatecICalendar.compareDates;
var fTomorrow = zapatecDate.getTomorrow;
var oEl,oStyle;
this.displayPeriod(oArg);
var oDate = this.icStartDate;
var iViewDays = this.icViewDays;
var bDayFirst =
zapatecICalendar.icRegexpFormatDateDay.test(this.config.formatDate);
var iPercent = 100 / iViewDays;
var oToday = new Date();
var iToday = fCompareDates(oToday,oDate);
var aDays = [];
var iDay,iWeekDay;
if (bDayFirst) {
for (iDay = 0; iDay < iViewDays; iDay++) {
iWeekDay = oDate.getDay();
aDays.push({
width: iPercent,
left: iDay * iPercent,
weekDay: iWeekDay,
date: [
zapatecDateShortDayNames[iWeekDay],
' ',
oDate.getDate(),
'/',
oDate.getMonth() + 1
].join(''),
timestamp:oDate.getTime(),
today: (fCompareDates(oToday,oDate) == 0)
});
oDate = fTomorrow({
date:oDate
});
}
} else {
for (iDay = 0; iDay < iViewDays; iDay++) {
iWeekDay = oDate.getDay();
aDays.push({
width: iPercent,
left: iDay * iPercent,
weekDay: iWeekDay,
date: [
zapatecDateShortDayNames[iWeekDay],
' ',
oDate.getMonth() + 1,
'/',
oDate.getDate()
].join(''),
timestamp:oDate.getTime(),
today: (fCompareDates(oToday,oDate) == 0)
});
oDate = fTomorrow({
date:oDate
});
}
}
oEl = document.getElementById(sId + 'MainContainer');
if (!oEl) {return;}
var aHours = new Array(48);
var sTime;
if (zapatecICalendar.icRegexpFormatTimeAm.test(this.config.formatTime)) {
for (var iHour = 0; iHour < 24; iHour++) {
sTime = iHour > 11 ? 'pm' : 'am';
if (!iHour) {
sTime = 12 + sTime;
} else if (iHour > 12) {
sTime = iHour - 12 + sTime;
} else {
sTime = iHour + sTime;
}
aHours[iHour * 2] = sTime;
}
} else {
for (var iHour = 0; iHour < 24; iHour++) {
aHours[iHour * 2] = iHour + ':00';
}
}
var oTemplate = this.templates.icWeek;
if (!oTemplate) {return;}
oEl.innerHTML = '';
oTemplate.compile({
widgetId: iThisId,
templateArgs: this.config.templateArgs,
days: aDays,
hours: aHours
},oEl);
oEl = document.getElementById(sId + 'RowHeaders');
if (oEl) {
oEl.style.display = 'none';
setTimeout(
"document.getElementById('" + sId + "RowHeaders').style.display = ''",
0
);
}
oEl = document.getElementById(sId + 'VerticalRule0');
if (oEl) {
this.icVerticalRuleWidth = oEl.offsetWidth;
} else {
this.icVerticalRuleWidth = 0;
}
oEl = document.getElementById(sId + 'AlldayGrid');
if (oEl) {
oEl.style.height = oEl.offsetHeight + 'px';
this.icAlldayGridHeight = oEl.offsetHeight;
} else {
this.icAlldayGridHeight = 0;
}
this.resizeGrid();
this.resizeAlldayGrid();
var startDay = this.icStartDate.getDay();
var columnsMap = {};
var iSat = (6 - this.config.firstDayOfWeek) % 7;
var satCol = document.getElementById(sId + 'Weekend6');
if (1 == iViewDays && (0 == startDay || 6 == startDay)) {
columnsMap[0] = satCol;
}
else if (7 == iViewDays) {
columnsMap[iSat] = satCol;
}
else {
satCol.style.display = 'none';
}
var iSun = (7 - this.config.firstDayOfWeek) % 7;
var sunCol = document.getElementById(sId + 'Weekend7');
if (7 == iViewDays) {
columnsMap[iSun] = sunCol;
}
else {
sunCol.style.display = 'none';
}
if (columnsMap[iToday]) {
columnsMap[iToday].style.display = 'none';
}
columnsMap[iToday] = document.getElementById(sId + 'Today');
for (var iDay in columnsMap) {
var iDay = parseInt(iDay);
if (columnsMap[iDay]) {
oStyle = columnsMap[iDay].style;
if (iDay >= 0 && iDay < iViewDays) {
oStyle.left = this.getColumnOffset({
column: iDay
}) + 'px';
oStyle.width = this.getColumnWidth({
column: iDay
}) + 'px';
oStyle.display = '';
} else {
oStyle.display = 'none';
}
}
}
var oGrid = document.getElementById(sId + 'Grid');
if (!oGrid) {return;}
var oGridOffset = zapatecUtils.getElementOffset(oGrid);
var iRowHeight = oGridOffset.height / 48;
var oGridContainer = document.getElementById(sId + 'GridContainer');
if (!oGridContainer) {return;}
oGridContainer.onscroll = new Function(
'var oWidget=zapatecWidgetGetWidgetById(' + iThisId +
');if(oWidget)oWidget.icScrollTop=this.scrollTop'
);
if (typeof this.icScrollTop != 'number') {
this.icScrollTop = iRowHeight * this.config.dayStart;
}
oGridContainer.scrollTop = this.icScrollTop;
var oConfig = this.config;
var sTop = iRowHeight * oConfig.dayStart + 'px';
var sHeight = iRowHeight * (oConfig.dayEnd - oConfig.dayStart) + 'px';
var oDay;
for (iDay = 0; iDay < iViewDays; iDay++) {
oDay = aDays[iDay];
oEl = document.getElementById(sId + 'WorkingTime' + oDay.weekDay);
if (oEl) {
oStyle = oEl.style;
oStyle.left = this.getColumnOffset({
column: iDay
}) + 'px';
oStyle.top = sTop;
oStyle.width = this.getColumnWidth({
column: iDay
}) + 'px';
oStyle.height = sHeight;
oStyle.display = '';
}
}
this.displayAlldayEvents();
this.displayRegularEvents();
};
Zapatec.ICalendar.prototype.displayPeriod = function(oArg) {
var oDate = this.getStartDate(oArg);
var oTemplate = this.templates.icPeriod;
if (!oTemplate) {return;}
var iThisId = this.id;
var oContainer = document.getElementById('zpIC' + iThisId + 'Period');
if (!oContainer) {return;}
oContainer.innerHTML = '';
switch (oDate.view) {
case zapatecICWeek:
var iViewDays = oDate.viewDays;
if (iViewDays == 1) {
oTemplate.compile({
widgetId: iThisId,
templateArgs: this.config.templateArgs,
navigation: true,
period: this.dateToString({
date:oDate.dateStart,
year: true
})
},oContainer);
} else {
oDate = oDate.dateStart;
oTemplate.compile({
widgetId: iThisId,
templateArgs: this.config.templateArgs,
navigation: true,
period: this.datesToPeriodShortString({
dateStart:oDate,
dateEnd: zapatecDate.getTomorrow({
date:oDate,
days: iViewDays - 1
})
})
},oContainer);
}
break;
case zapatecICMonth:
oTemplate.compile({
widgetId: iThisId,
templateArgs: this.config.templateArgs,
navigation: true,
period: zapatecDate.print(oDate.date,'%B %Y')
},oContainer);
break;
case zapatecICAgenda:
oTemplate.compile({
widgetId: iThisId,
templateArgs: this.config.templateArgs,
period: this.dateToString({
date:oDate.dateStart,
weekday: true,
year: true
})
},oContainer);
break;
}
};
Zapatec.ICalendar.prototype.resizeAlldayGrid = function() {
var sId = 'zpIC' + this.id;
var oVirtualGrid = this.icVirtualGrid;
if (!oVirtualGrid) {return;}
var aVirtualCells = oVirtualGrid.cells;
if (!aVirtualCells) {return;}
var iViewDays = this.icViewDays;
if (!iViewDays) {return;}
var oGrid = document.getElementById(sId + 'AlldayGrid');
if (!oGrid) {return;}
var iMaxLines = 0;
var oVirtualCell,aVirtualEvents,iAlldayLines,iLines,iLine,oVirtualEvent;
for (var iDay = 0; iDay < iViewDays; iDay++) {
oVirtualCell = aVirtualCells[iDay];
if (!oVirtualCell) {
continue;
}
aVirtualEvents = oVirtualCell.events;
if (!aVirtualEvents) {
continue;
}
iAlldayLines = 0;
iLines = aVirtualEvents.length;
for (iLine = 0; iLine < iLines; iLine++) {
oVirtualEvent = aVirtualEvents[iLine];
if (oVirtualEvent && oVirtualEvent.allday) {
iAlldayLines++;
}
}
iMaxLines = Math.max(iAlldayLines,iMaxLines);
}
var iInitialGridHeight = this.icAlldayGridHeight || 0;
var oGridStyle = oGrid.style;
var iGridHeight = parseInt(oGridStyle.height || 0);
var iNewGridHeight = iInitialGridHeight * (iMaxLines + 1);
if (iGridHeight != iNewGridHeight) {
var oContainer = document.getElementById(sId + 'GridContainer');
if (oContainer) {
var oStyle = oContainer.style;
var iHeight = parseInt(oStyle.height);
if (!isNaN(iHeight)) {
iHeight -= iNewGridHeight - iGridHeight;
if (iHeight > 0) {
oStyle.height = iHeight + 'px';
oGridStyle.height = iNewGridHeight + 'px';
}
}
}
}
};
Zapatec.ICalendar.prototype.displayAlldayEvents = function() {
var oVirtualGrid = this.icVirtualGrid;
if (!oVirtualGrid) {return;}
var aVirtualCells = oVirtualGrid.cells;
if (!aVirtualCells) {return;}
var iViewDays = this.icViewDays;
if (!iViewDays) {return;}
var oVirtualCell,aVirtualEvents,iLines,iLine,oVirtualEvent;
for (var iDay = 0; iDay < iViewDays; iDay++) {
oVirtualCell = aVirtualCells[iDay];
if (!oVirtualCell) {
continue;
}
aVirtualEvents = oVirtualCell.events;
if (!aVirtualEvents) {
continue;
}
iLines = aVirtualEvents.length;
for (iLine = 0; iLine < iLines; iLine++) {
oVirtualEvent = aVirtualEvents[iLine];
if (!oVirtualEvent || oVirtualEvent.day != iDay) {
continue;
}
if (oVirtualEvent.allday) {
this.displayEvent({
virtualEvent:oVirtualEvent,
line: iLine
});
}
}
}
};
Zapatec.ICalendar.prototype.displayRegularEvents = function() {
var oVirtualGrid = this.icVirtualGrid;
if (!oVirtualGrid) {return;}
var aVirtualCells = oVirtualGrid.cells;
if (!aVirtualCells) {return;}
var iViewDays = this.icViewDays;
if (!iViewDays) {return;}
var iCalendarsPerColumn = oVirtualGrid.calendarsPerColumn;
if (iCalendarsPerColumn) {
iViewDays *= iCalendarsPerColumn;
}
var iDay,oVirtualCell,aVirtualEvents,iPacketEndTime,aPacketColumns,
iLines,iLine,oVirtualEvent,iEventStartTime,iEventEndTime,iPacketCols,
iPacketCol,aPacketColumn,bColumnBusy,iPacketEvents,
iPacketEv,oPacketEvent;
for (iDay = 0; iDay < iViewDays; iDay++) {
oVirtualCell = aVirtualCells[iDay];
if (!oVirtualCell) {
continue;
}
aVirtualEvents = oVirtualCell.events;
if (!aVirtualEvents) {
continue;
}
iPacketEndTime = 0;
aPacketColumns = [];
iLines = aVirtualEvents.length;
for (iLine = 0; iLine < iLines; iLine++) {
oVirtualEvent = aVirtualEvents[iLine];
if (!oVirtualEvent || oVirtualEvent.day != iDay || oVirtualEvent.allday) {
continue;
}
iEventStartTime = oVirtualEvent.startTime;
iEventEndTime = oVirtualEvent.endTime;
iPacketCols = aPacketColumns.length;
if (iPacketCols) {
if (iPacketEndTime < iEventStartTime) {
this.displayEventPacket(aPacketColumns);
aPacketColumns = [[oVirtualEvent]];
} else {
for (iPacketCol = 0; iPacketCol < iPacketCols; iPacketCol++) {
aPacketColumn = aPacketColumns[iPacketCol];
if (!aPacketColumn) {
break;
}
bColumnBusy = false;
iPacketEvents = aPacketColumn.length;
for (iPacketEv = 0; iPacketEv < iPacketEvents; iPacketEv++) {
oPacketEvent = aPacketColumn[iPacketEv];
if (!oPacketEvent) {
continue;
}
if (oPacketEvent.startTime > iEventEndTime) {
break;
}
if (oPacketEvent.endTime >= iEventStartTime) {
bColumnBusy = true;
break;
}
}
if (!bColumnBusy) {
break;
}
}
if (!aPacketColumns[iPacketCol]) {
aPacketColumns[iPacketCol] = [oVirtualEvent];
} else {
if (!aPacketColumn[iPacketEv]) {
aPacketColumn[iPacketEv] = oVirtualEvent;
} else {
aPacketColumn.splice(iPacketEv,0,oVirtualEvent);
}
}
}
} else {
aPacketColumns = [[oVirtualEvent]];
}
iPacketEndTime = Math.max(iEventEndTime,iPacketEndTime);
}
this.displayEventPacket(aPacketColumns);
}
};
Zapatec.ICalendar.prototype.displayEventPacket = function(aPacketColumns) {
var iColumns = aPacketColumns.length;
var aColumn,iEvents,iEvent,oEvent;
for (var iColumn = 0; iColumn < iColumns; iColumn++) {
aColumn = aPacketColumns[iColumn];
if (!aColumn) {
break;
}
iEvents = aColumn.length;
for (iEvent = 0; iEvent < iEvents; iEvent++) {
oEvent = aColumn[iEvent];
if (!oEvent) {
continue;
}
this.displayEvent({
virtualEvent:oEvent,
columns: iColumns,
column: iColumn
});
}
}
};
Zapatec.ICalendar.prototype.displayEvent = function(oArg) {
var iThisId = this.id;
var sId = 'zpIC' + iThisId;
if (!oArg) {return;}
var oVirtualEvent = oArg.virtualEvent;
if (!oVirtualEvent) {return;}
if (oVirtualEvent.allday) {
oArg.grid = document.getElementById(sId + 'AlldayGrid');
oArg.container = document.getElementById(sId + 'AlldayEventMaster');
this.displayAlldayEvent(oArg);
} else {
oArg.grid = document.getElementById(sId + 'Grid');
oArg.container = document.getElementById(sId + 'EventMaster');
this.displayRegularEvent(oArg);
}
};
Zapatec.ICalendar.prototype.displayRegularEvent = function(oArg) {
if (!oArg) {return;}
var oGrid = oArg.grid;
var oContainer = oArg.container;
var oVirtualEvent = oArg.virtualEvent;
if (!oGrid || !oContainer || !oVirtualEvent) {return;}
var iCalendarId = oVirtualEvent.calendarId;
var sRead = '';
var oTemplate,sOnclick;
if (oVirtualEvent.accessLevel == 'read') {
sRead = 'Read';
oTemplate = this.templates.icWeekEventRead;
sOnclick = 'displayFormEventRead';
} else if (this.config.read) {
sRead = 'Read';
oTemplate = this.templates.icWeekEventRead;
sOnclick = 'displayFormEventRead';
} else {
oTemplate = this.templates.icWeekEvent;
}
if (!oTemplate) {return;}
var iSimultaneousColumns = oArg.columns || 1;
var iSimultaneousColumn = oArg.column || 0;
var oEvent = oVirtualEvent.event;
if (!oEvent) {return;}
var iCalendarsPerColumn = this.icVirtualGrid.calendarsPerColumn;
var oEventStartDate = new Date(oVirtualEvent.startTime);
var oEventEndDate = new Date(oVirtualEvent.endTime);
var iStartCol = Math.floor(oVirtualEvent.col / iCalendarsPerColumn);
var iLastCol = iStartCol + oVirtualEvent.days / iCalendarsPerColumn;
var oGridOffset = zapatecUtils.getElementOffset(oGrid);
var iGridWidth = oGridOffset.width;
var iRowHeight = oGridOffset.height / 48;
var sTitle = '';
var sSummary = '';
if (oVirtualEvent.endTime - oVirtualEvent.startTime < 3600000 - 1) {
sTitle = oEvent.summary;
} else {
sSummary = oEvent.summary;
}
var iWidth = this.getColumnWidth({
column: iStartCol,
gridWidth: iGridWidth
});
var iCalendarWidth = iWidth / iCalendarsPerColumn;
iWidth /= iSimultaneousColumns * iCalendarsPerColumn;
var iCalendarNumber = 0;
var aVisibleCalendars = this.icVirtualGrid.visibleCalendars;
if (aVisibleCalendars instanceof Array) {
iCalendarNumber = aVisibleCalendars[iCalendarId] || 0;
}
var iLeft = this.getColumnOffset({
column: iStartCol
});
iLeft += iWidth * iSimultaneousColumn + iCalendarWidth * iCalendarNumber;
var iRowStart = 0;
if (!oVirtualEvent.less) {
iRowStart =
(oEventStartDate.getHours() + oEventStartDate.getMinutes() / 60) * 2;
} else {
oEventStartDate.setHours(0);
oEventStartDate.setMinutes(0);
}
var iTop = iRowStart * iRowHeight;
var iRowEnd = 48;
if (!oVirtualEvent.more) {
iRowEnd =
(oEventEndDate.getHours() + oEventEndDate.getMinutes() / 60) * 2;
}
var iHeight = (iRowEnd - iRowStart) * iRowHeight;
var iThisId = this.id;
var iEventId = oVirtualEvent.eventId;
var iPartId = oVirtualEvent.partId;
var sEventId = oEvent.id;
oTemplate.compile({
widgetId: iThisId,
templateArgs: this.config.templateArgs,
calendarId: iCalendarId,
eventId: iEventId,
partId: iPartId,
id: 'zpIC' + iThisId + 'Calendar' + iCalendarId + 'Event' + iEventId +
'Part' + iPartId + sRead,
accessLevel:oVirtualEvent.accessLevel,
onclick: sOnclick,
left: Math.round(iLeft),
top: Math.round(iTop),
width: Math.round(iWidth),
height: Math.ceil(iHeight),
time:oVirtualEvent.displayTime,
title: sTitle,
summary: sSummary,
color:oVirtualEvent.color,
bgcolor:oVirtualEvent.bgcolor,
alarms:oVirtualEvent.alarms,
recurring:oVirtualEvent.recurring,
exception:oVirtualEvent.exception,
attendees:oVirtualEvent.guests,
locked:oEvent.locked
},oContainer);
};
Zapatec.ICalendar.prototype.getColumnOffset = function(oArg) {
if (!oArg) {
return 0;
}
var iColumn = oArg.column;
if (typeof iColumn != 'number') {
return 0;
}
var aVerticalRuleOffsets = this.icVerticalRuleOffsets || [];
var iLeft = aVerticalRuleOffsets[iColumn] + (this.icVerticalRuleWidth || 0);
return isNaN(iLeft) ? 0 : iLeft;
};
Zapatec.ICalendar.prototype.getColumnWidth = function(oArg) {
if (!oArg) {return;}
var iColumn = oArg.column;
if (typeof iColumn != 'number') {return;}
var aVerticalRuleOffsets = this.icVerticalRuleOffsets || [];
var iLeftOffset = aVerticalRuleOffsets[iColumn] || 0;
var iRightOffset = aVerticalRuleOffsets[iColumn + 1];
if (typeof iRightOffset != 'number') {
var iGridWidth = oArg.gridWidth;
if (typeof iGridWidth != 'number') {
var oGrid = document.getElementById('zpIC' + this.id + 'Grid');
if (!oGrid) {return;}
var oOffset = zapatecUtils.getElementOffset(oGrid);
iGridWidth = oOffset.width;
}
iRightOffset = iGridWidth;
}
return iRightOffset - iLeftOffset - (this.icVerticalRuleWidth || 0);
};
Zapatec.ICalendar.prototype.getRowOffset = function(oArg) {
if (!oArg) {
return 0;
}
var iRow = oArg.row;
if (typeof iRow != 'number') {
return 0;
}
var aHorizontalRuleOffsets = this.icHorizontalRuleOffsets || [];
var iTop = aHorizontalRuleOffsets[iRow] + (this.icHorizontalRuleHeight || 0);
return isNaN(iTop) ? 0 : iTop;
};
Zapatec.ICalendar.prototype.getRowHeight = function(oArg) {
if (!oArg) {return;}
var iRow = oArg.row;
if (typeof iRow != 'number') {return;}
var aHorizontalRuleOffsets = this.icHorizontalRuleOffsets || [];
var iTopOffset = aHorizontalRuleOffsets[iRow] || 0;
var iBottomOffset = aHorizontalRuleOffsets[iRow + 1];
if (typeof iBottomOffset != 'number') {
var iGridHeight = oArg.gridHeight;
if (typeof iGridHeight != 'number') {
var oGrid = document.getElementById('zpIC' + this.id + 'Grid');
if (!oGrid) {return;}
var oOffset = zapatecUtils.getElementOffset(oGrid);
iGridHeight = oOffset.height;
}
iBottomOffset = iGridHeight;
}
return iBottomOffset - iTopOffset - (this.icHorizontalRuleHeight || 0);
};
Zapatec.ICalendar.prototype.setActiveTab = function(sActiveTab) {
if (this.checkLoadingData()) {
return false;
}
var sId = 'zpIC' + this.id;
var oTabs = {};
oTabs['Day'] = document.getElementById(sId + 'TabDay');
oTabs['Week'] = document.getElementById(sId + 'TabWeek');
oTabs['WorkWeek'] = document.getElementById(sId + 'TabWorkWeek');
oTabs['Month'] = document.getElementById(sId + 'TabMonth');
oTabs['Agenda'] = document.getElementById(sId + 'TabAgenda');
var bSwitched = false;
var oTab;
for (sTab in oTabs) {
oTab = oTabs[sTab];
if (oTab) {
if (sTab == sActiveTab) {
if (oTab.className != 'zpICTab zpICTabActive') {
oTab.className = 'zpICTab zpICTabActive';
bSwitched = true;
}
} else {
if (oTab.className != 'zpICTab') {oTab.className = 'zpICTab';}
}
}
}
return bSwitched;
};
Zapatec.ICalendar.prototype.switchDay = function(oArg) {
if (!oArg) {oArg = {};}
var oStartDate;
var iTimestamp = oArg.timestamp;
if (iTimestamp) {oStartDate = new Date(iTimestamp);}
if (this.setActiveTab('Day')) {
this.view({view: zapatecICWeek,date:oStartDate,viewDays: 1});
}
};
Zapatec.ICalendar.prototype.switchWeek = function() {
if (this.setActiveTab('Week')) {
this.view({view: zapatecICWeek,viewDays: 7});
}
};
Zapatec.ICalendar.prototype.switchWorkWeek = function() {
if (this.setActiveTab('WorkWeek')) {
this.view({view: zapatecICWeek,viewDays: 5});
}
};
Zapatec.ICalendar.prototype.switchMonth = function() {
if (this.setActiveTab('Month')) {
this.view({view: zapatecICMonth,viewDays: 35});
}
};
Zapatec.ICalendar.prototype.switchAgenda = function() {
if (this.setActiveTab('Agenda')) {
this.view({view: zapatecICAgenda,date: new Date(),viewDays: this.config.agendaDays});
}
};
Zapatec.ICalendar.prototype.goTowards = function(iDirection) {
if (iDirection != -1) {iDirection = 1;}
var oViewDays = this.getViewDays();
switch (oViewDays.view) {
case zapatecICWeek:
if (oViewDays.viewDays == 1) {
this.view({date: zapatecDate.getTomorrow({date: this.getCurrentDate(),days: iDirection})});
} else {
this.view({date: zapatecDate.getTomorrow({date: this.getCurrentDate(),days: 7 * iDirection})});
}
break;
case zapatecICMonth:
this.view({date: zapatecDate.getTomorrow({date: zapatecDate.getMonthDay({date: this.getCurrentDate(),day: -iDirection}),days: iDirection})});
break;
case zapatecICAgenda:
this.view({date: zapatecDate.getTomorrow({date: this.getCurrentDate(),days:oViewDays.viewDays * iDirection})});
break;
}
};
Zapatec.ICalendar.prototype.goNextPeriod = function() {this.goTowards(1);};
Zapatec.ICalendar.prototype.goPrevPeriod = function() {this.goTowards(-1);};
Zapatec.ICalendar.prototype.goToday = function() {this.view({date: new Date()});};
Zapatec.ICalendar.prototype.getEventPeriod = function(oEvent) {
if (!oEvent) {return;}
var oEventDates = zapatecICalendar.getEventDates(oEvent);
if (!oEventDates) {return;}
var sPeriod;
if (oEvent.dtstart && oEvent.dtstart.length == 8 ||
oEvent.dateIsoStart && oEvent.dateIsoStart.length == 10) {
sPeriod = this.datesToPeriodString({
dateStart:oEventDates.dateStart,
dateEnd: zapatecDate.getTomorrow({
date:oEventDates.dateEnd,
days: -1
})
});
} else {
sPeriod = this.datesToPeriodString({
dateStart:oEventDates.dateStart,
dateEnd:oEventDates.dateEnd,
time: true
});
}
return sPeriod;
};
Zapatec.ICalendar.prototype.displayFormEventEdit = function(oArg) {
if (!oArg) {return;}
var iCalendarId = oArg.calendarId;
var iEventId = oArg.eventId;
var oEvent = oArg.event;
if (!oEvent) {
var oCalendar = this.data.calendars[iCalendarId];
if (!oCalendar || !oCalendar.events) {return;}
oEvent = oCalendar.events[iEventId];
if (!oEvent) {return;}
}
var oTemplate = this.templates.icFormEventEdit;
if (!oTemplate) {return;}
var sEventId = oEvent.id;
this.controls.icWindow.open({
headline:oArg.access == 'read' || oArg.access == 'busy' ?
zapatecTranslate('Event Details') : zapatecTranslate('Edit Event'),
source:oTemplate.compile({
widgetId: this.id,
templateArgs: this.config.templateArgs,
summary:oEvent.summary,
period: this.getEventPeriod(oEvent),
where:oEvent.where || '',
description:oEvent.description || '',
access:oArg.access,
calendarId: iCalendarId,
eventId: iEventId,
recurring:oEvent.rrule ? true : false,
exception: sEventId && sEventId.indexOf('_') > 0 ? true : false
})
});
};
Zapatec.ICalendar.prototype.displayFormEventRead = function(oArg) {
if (!oArg) {return;}
oArg.access = 'read';
this.displayFormEventEdit(oArg);
};
Zapatec.ICalendar.mouseDown = function() {};
zpICMouseDown = Zapatec.ICalendar.mouseDown;
Zapatec.ICalendar.prototype.eventCreate = function(oArg) {};
Zapatec.ICalendar.eventUnlock = function(oArg) {};
Zapatec.ICalendar.prototype.eventUnlock = function(oUnlockEvent) {};
Zapatec.ICalendar.eventRevert = function(oArg) {};
Zapatec.ICalendar.prototype.eventRevert = function(oEvent) {};
Zapatec.ICalendar.prototype.displayFormEventDetails = function(oArg) {
if (!oArg) {return;}
var oData = this.data;
if (!oData) {return;}
var oCalendar = oData.calendars[oArg.calendarId];
if (!oCalendar) {return;}
var oEvent = oCalendar.events[oArg.eventId];
if (!oEvent) {return;}
var oEventDates = zapatecICalendar.getEventDates(oEvent);
if (!oEventDates) {return;}
var oDateFrom = oEventDates.dateStart;
var oDateTo = oEventDates.dateEnd;
if (!oDateFrom || !oDateTo) {return;}
var oTemplate = this.templates.icFormEventDetails;
if (!oTemplate) {return;}
this.controls.icWindow.open({
headline: zapatecTranslate('Event Details'),
source:oTemplate.compile({
widgetId: this.id,
templateArgs: this.config.templateArgs,
what:oEvent.summary || '',
fromDate: this.dateToShortString(oDateFrom),
fromTime: this.dateToTimeString(oDateFrom),
toDate: this.dateToShortString(oDateTo),
toTime: this.dateToTimeString(oDateTo),
where:oEvent.where || '',
description:oEvent.description || ''
})
});
};
Zapatec.ICalendar.prototype.hideForm = function() {
this.controls.icWindow.hide();
this.viewRefresh();
};
Zapatec.ICalendar.hideForm = function() {
this.hideForm();
};
Zapatec.ICalendar.hideFormReloadData = function() {
this.icDataStale = true;
this.hideForm();
};

