/*
*
* Copyright (c) 2004-2005 by Zapatec, Inc.
* http://www.zapatec.com
* 1700 MLK Way, Berkeley, California,
* 94709, U.S.A.
* All rights reserved.
*
*
*/


if (typeof Zapatec == 'undefined') { Zapatec = function() { }; }
Zapatec.version = '07-01'; if (typeof Zapatec.zapatecPath == 'undefined')
{
    Zapatec.zapatecPath = function()
    {
        if (document.documentElement)
        {
            var aTokens = document.documentElement.innerHTML.match(/<script[^>]+src="([^"]*zapatec(-core|-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 Zapatec == 'undefined') { Zapatec = function() { }; }
Zapatec.Utils = {}; 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;
}; Zapatec.Utils.getElementOffset = function(oEl)
{
    var iLeft = iTop = iWidth = iHeight = 0; var sTag; if (oEl.getBoundingClientRect) { var oRect = oEl.getBoundingClientRect(); iLeft = oRect.left; iTop = oRect.top; iWidth = oRect.right - iLeft; iHeight = oRect.bottom - iTop; iLeft += Zapatec.Utils.getPageScrollX() - 2; iTop += Zapatec.Utils.getPageScrollY() - 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') { 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 oPos = Zapatec.Utils.getElementOffset(oEl); if (oEl.scrollLeft) { oPos.left -= oEl.scrollLeft; oPos.x = oPos.left; }
    if (oEl.scrollTop) { oPos.top -= oEl.scrollTop; oPos.y = oPos.top; }
    return oPos;
}; 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(" "); var ar = []; for (var i = cls.length; i > 0; ) { if (cls[--i] != className) { ar[ar.length] = cls[i]; } }
    el.className = ar.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.replace(className, withClassName);
}; Zapatec.Utils.getElement = function(ev) { if (Zapatec.is_ie) { return window.event.srcElement; } else { return ev.currentTarget; } }; Zapatec.Utils.getTargetElement = function(ev) { if (Zapatec.is_ie) { return window.event.srcElement; } 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(ev)
{
    ev || (ev = window.event); if (ev) { if (Zapatec.is_ie) { ev.cancelBubble = true; ev.returnValue = false; } else { ev.preventDefault(); ev.stopPropagation(); } }
    return false;
}; Zapatec.Utils.removeOnUnload = []; Zapatec.Utils.addEvent = function(oElement, sEvent, fListener, bUseCapture)
{
    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); } }
    Zapatec.Utils.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.writeCookie = function(name, value, domain, path, exp_days)
{
    value = escape(value); var ck = name + "=" + value, exp; if (domain)
        ck += ";domain=" + domain; if (path)
        ck += ";path=" + path; if (exp_days) { exp = new Date(); exp.setTime(exp_days * 86400000 + exp.getTime()); ck += ";expires=" + exp.toGMTString(); }
    document.cookie = ck;
}; Zapatec.Utils.getCookie = function(name)
{
    var pattern = name + "="; var tokenPos = 0; while (tokenPos < document.cookie.length)
    {
        var valuePos = tokenPos + pattern.length; if (document.cookie.substring(tokenPos, valuePos) == pattern)
        {
            var endValuePos = document.cookie.indexOf(";", valuePos); if (endValuePos == -1) { endValuePos = document.cookie.length; }
            return unescape(document.cookie.substring(valuePos, endValuePos));
        }
        tokenPos = document.cookie.indexOf(" ", tokenPos) + 1; if (tokenPos == 0) { break; } 
    }
    return null;
}; 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.loadPref = function(txt)
{
    var obj = null; try { eval("obj={" + txt + "}"); } catch (e) { }
    return obj;
}; Zapatec.Utils.mergeObjects = function(dest, src)
{
    for (var i in src)
        dest[i] = src[i];
}; 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 = Zapatec.Utils.getAbsolutePos(el), X1 = pos.x, Y1 = pos.y, X2 = X1 + el.offsetWidth, Y2 = Y1 + el.offsetHeight; if (el2)
        {
            var p2 = Zapatec.Utils.getAbsolutePos(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.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.left.split(" "); x = parseInt(x[x.length - 1], 10); y = style.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.left = eval(pos.x) + 'px'; element.style.top = eval(pos.y) + 'px'; }
    //} else { element.style.left = pos.x; element.style.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; if (Zapatec.is_opera) { iWidth = document.body.clientWidth || 0; iHeight = document.body.clientHeight || 0; } else 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; }
    return { width: iWidth, height: iHeight };
}; 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; }
    var strMsg = 'You are using the Free version of the Zapatec Software.\n' + 'While using the Free version, a link to www.zapatec.com in this page is required.'
    for (i in arrProducts)
        if (arrProducts[i].bActive == true)
        strMsg += '\nTo purchase the Zapatec ' + arrProducts[i].name + ' visit www.zapatec.com/website/main/products/' + arrProducts[i].webdir + '/'
    //alert(strMsg)
    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_ie5 = (Zapatec.is_ie && /msie 5\.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; if (!Object.prototype.hasOwnProperty)
{
    Object.prototype.hasOwnProperty = function(strProperty)
    {
        try
        {
            var objPrototype = this.constructor.prototype; while (objPrototype)
            {
                if (objPrototype[strProperty] == this[strProperty]) { return false; }
                objPrototype = objPrototype.prototype;
            } 
        } catch (objException) { }
        return true;
    };
}
if (!Function.prototype.call)
{
    Function.prototype.call = function()
    {
        var objThis = arguments[0]; objThis._this_func = this; var arrArgs = []; for (var iArg = 1; iArg < arguments.length; iArg++) { arrArgs[arrArgs.length] = 'arguments[' + iArg + ']'; }
        var ret = eval('objThis._this_func(' + arrArgs.join(',') + ')'); objThis._this_func = null; return ret;
    };
}
if (!Function.prototype.apply)
{
    Function.prototype.apply = function()
    {
        var objThis = arguments[0]; var objArgs = arguments[1]; objThis._this_func = this; var arrArgs = []; if (objArgs) { for (var iArg = 0; iArg < objArgs.length; iArg++) { arrArgs[arrArgs.length] = 'objArgs[' + iArg + ']'; } }
        var ret = eval('objThis._this_func(' + arrArgs.join(',') + ')'); objThis._this_func = null; return ret;
    };
}
if (!Array.prototype.pop)
{
    Array.prototype.pop = function()
    {
        var last; if (this.length) { last = this[this.length - 1]; this.length -= 1; }
        return last;
    };
}
if (!Array.prototype.push)
{
    Array.prototype.push = function()
    {
        for (var i = 0; i < arguments.length; i++) { this[this.length] = arguments[i]; }
        return this.length;
    };
}
if (!Array.prototype.shift)
{
    Array.prototype.shift = function()
    {
        var first; if (this.length)
        {
            first = this[0]; for (var i = 0; i < this.length - 1; i++) { this[i] = this[i + 1]; }
            this.length -= 1;
        }
        return first;
    };
}
if (!Array.prototype.unshift)
{
    Array.prototype.unshift = function()
    {
        if (arguments.length)
        {
            var i, len = arguments.length; for (i = this.length + len - 1; i >= len; i--) { this[i] = this[i - len]; }
            for (i = 0; i < len; i++) { this[i] = arguments[i]; } 
        }
        return this.length;
    };
}
if (!Array.prototype.splice)
{
    Array.prototype.splice = function(index, howMany)
    {
        var elements = [], removed = [], i; for (i = 2; i < arguments.length; i++) { elements.push(arguments[i]); }
        for (i = index; (i < index + howMany) && (i < this.length); i++) { removed.push(this[i]); }
        for (i = index + howMany; i < this.length; i++) { this[i - howMany] = this[i]; }
        this.length -= removed.length; for (i = this.length + elements.length - 1; i >= index + elements.length; i--) { this[i] = this[i - elements.length]; }
        for (i = 0; i < elements.length; i++) { this[index + i] = elements[i]; }
        return removed;
    };
}
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") { 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.windowLoaded = typeof (document.readyState) != 'undefined' ? (document.readyState == 'loaded' || document.readyState == 'complete') : document.getElementsByTagName != null && typeof (document.getElementsByTagName('body')[0]) != 'undefined'; 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; 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.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) { 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.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)
{
    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'); }; if (typeof Zapatec == 'undefined') { Zapatec = function() { }; }
Zapatec.EventDriven = function() { }; Zapatec.EventDriven.prototype.init = function() { this.events = {}; }; Zapatec.EventDriven.prototype.addEventListener = function(sEv, fLsnr)
{
    if (typeof fLsnr != "function") { return false; }
    var oE = this.events; if (!oE[sEv]) { oE[sEv] = { listeners: [] }; } else { this.removeEventListener(sEv, fLsnr); }
    oE[sEv].listeners.push(fLsnr);
}; Zapatec.EventDriven.prototype.unshiftEventListener = function(sEv, fLsnr)
{
    if (typeof fLsnr != "function") { return false; }
    var oE = this.events; if (!oE[sEv]) { oE[sEv] = { listeners: [] }; } else { this.removeEventListener(sEv, fLsnr); }
    oE[sEv].listeners.unshift(fLsnr);
}; Zapatec.EventDriven.prototype.removeEventListener = function(sEv, fLsnr)
{
    var oE = this.events; if (!oE[sEv]) { return 0; }
    var aL = oE[sEv].listeners; var iRemoved = 0; for (var iL = aL.length - 1; iL >= 0; iL--) { if (aL[iL] == fLsnr) { aL.splice(iL, 1); iRemoved++; } }
    return iRemoved;
}; Zapatec.EventDriven.prototype.getEventListeners = function(sEv)
{
    var oE = this.events; if (!oE[sEv]) { return []; }
    return oE[sEv].listeners;
}; Zapatec.EventDriven.prototype.isEventListener = function(sEv, fLsnr)
{
    var oE = this.events; if (!oE[sEv]) { return false; }
    var aL = oE[sEv].listeners; for (var iL = aL.length - 1; iL >= 0; iL--) { if (aL[iL] == fLsnr) { return true; } }
    return false;
}; Zapatec.EventDriven.prototype.isEvent = function(sEv)
{
    if (this.events[sEv]) { return true; }
    return false;
}; Zapatec.EventDriven.prototype.removeEvent = function(sEv) { var oE = this.events; if (oE[sEv]) { var undef; oE[sEv] = undef; } }; Zapatec.EventDriven.prototype.fireEvent = function(sEv)
{
    var oE = this.events; if (!oE[sEv]) { return; }
    var aL = oE[sEv].listeners.slice(); var iLs = aL.length;
    var aArgs;
    for (var iL = 0; iLs--; iL++)
    {
        aArgs = [].slice.call(arguments, 1);
        aL[iL].apply(this, aArgs);
    }
}; Zapatec.EventDriven.events = {}; Zapatec.EventDriven.addEventListener = function(sEv, fLsnr)
{
    if (typeof fLsnr != "function") { return false; }
    var oED = Zapatec.EventDriven; var oE = oED.events; if (!oE[sEv]) { oE[sEv] = { listeners: [] }; } else { oED.removeEventListener(sEv, fLsnr); }
    oE[sEv].listeners.push(fLsnr);
}; Zapatec.EventDriven.unshiftEventListener = function(sEv, fLsnr)
{
    if (typeof fLsnr != "function") { return false; }
    var oED = Zapatec.EventDriven; var oE = oED.events; if (!oE[sEv]) { oE[sEv] = { listeners: [] }; } else { oED.removeEventListener(sEv, fLsnr); }
    oE[sEv].listeners.unshift(fLsnr);
}; Zapatec.EventDriven.removeEventListener = function(sEv, fLsnr)
{
    var oE = Zapatec.EventDriven.events; if (!oE[sEv]) { return 0; }
    var aL = oE[sEv].listeners; var iRemoved = 0; for (var iL = aL.length - 1; iL >= 0; iL--) { if (aL[iL] == fLsnr) { aL.splice(iL, 1); iRemoved++; } }
    return iRemoved;
}; Zapatec.EventDriven.getEventListeners = function(sEv)
{
    var oE = Zapatec.EventDriven.events; if (!oE[sEv]) { return []; }
    return oE[sEv].listeners;
}; Zapatec.EventDriven.isEventListener = function(sEv, fLsnr)
{
    var oE = Zapatec.EventDriven.events; if (!oE[sEv]) { return false; }
    var aL = oE[sEv].listeners; for (var iL = aL.length - 1; iL >= 0; iL--) { if (aL[iL] == fLsnr) { return true; } }
    return false;
}; Zapatec.EventDriven.isEvent = function(sEv)
{
    if (Zapatec.EventDriven.events[sEv]) { return true; }
    return false;
}; Zapatec.EventDriven.removeEvent = function(sEv) { var oE = Zapatec.EventDriven.events; if (oE[sEv]) { var undef; oE[sEv] = undef; } }; Zapatec.EventDriven.fireEvent = function(sEv)
{
    var oE = Zapatec.EventDriven.events; if (!oE[sEv]) { return; }
    var aL = oE[sEv].listeners.slice(); var iLs = aL.length; var aArgs; for (var iL = 0; iLs--; iL++) { aArgs = [].slice.call(arguments, 1); aL[iL].apply(aL[iL], aArgs); } 
}; 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); } 
}; 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 }); } 
}; if (typeof Zapatec == 'undefined') { Zapatec = function() { }; }
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, ''); 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]); } } } 
}; if (typeof Zapatec == 'undefined') { Zapatec = function() { }; }
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 = Zapatec.Transport.pickActiveXVersion(['Msxml2.DOMDocument.4.0', 'Msxml2.DOMDocument.3.0', 'MSXML2.DOMDocument', 'MSXML.DOMDocument', 'Microsoft.XMLDOM']); Zapatec.Transport.XMLHTTP = Zapatec.Transport.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(Zapatec.Transport.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 (Zapatec.Transport.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 = Zapatec.Transport.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 = Zapatec.Utils.createElement('div'); oBusyContr.style.position = 'relative'; oBusyContr.style.zIndex = 2147483583; var oBusy = Zapatec.Utils.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 (Zapatec.Transport.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 = Zapatec.Transport.createXmlHttpRequest(); if (oRequest == null) { return null; }
    Zapatec.Transport.showBusy(oArg); var bErrorDisplayed = false; var funcOnReady = function()
    {
        Zapatec.Transport.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; Zapatec.Transport.displayError(oRequest.status, "Error: Can't fetch " + oArg.url + '.\n' +
(oRequest.statusText || ''), oArg.onError);
            } 
        } catch (oExpn)
        {
            if (!bErrorDisplayed)
            {
                bErrorDisplayed = true; if (oExpn.name && oExpn.name == 'NS_ERROR_NOT_AVAILABLE') { Zapatec.Transport.displayError(0, "Error: Can't fetch " + oArg.url + '.\nFile not found.', oArg.onError); } else
                {
                    Zapatec.Transport.displayError(0, "Error: Can't fetch " + oArg.url + '.\n' +
(oExpn.message || ''), oArg.onError);
                } 
            } 
        };
    }; 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)
    {
        Zapatec.Transport.removeBusy(oArg); if (!bErrorDisplayed)
        {
            bErrorDisplayed = true; if (oExpn.name && oExpn.name == 'NS_ERROR_FILE_NOT_FOUND') { Zapatec.Transport.displayError(0, "Error: Can't fetch " + oArg.url + '.\nFile not found.', oArg.onError); } else
            {
                Zapatec.Transport.displayError(0, "Error: Can't fetch " + oArg.url + '.\n' +
(oExpn.message || ''), oArg.onError);
            } 
        } 
    }; return null;
}; Zapatec.Transport.parseHtml = function(sHtml)
{
    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; 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) { Zapatec.Transport.evalGlobalScope(aScripts[iScript][1]); }
        var sAttrs = aScripts[iScript][0]; sAttrs = sAttrs.replace(/\s+/g, ' ').replace(/^\s/, '').replace(/\s$/, '').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 = Zapatec.Utils.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"); Zapatec.Transport.removeBusy(oArg); Zapatec.Transport.onXmlDocLoad(oDoc, oArg.onLoad, oArg.onError); }; } else { oFetchArg.onLoad = null; }
            var oRequest = Zapatec.Transport.fetch(oFetchArg); if (!oArg.async && oRequest) { var parser = new DOMParser(); oDoc = parser.parseFromString(oRequest.responseText, "text/xml"); Zapatec.Transport.removeBusy(oArg); Zapatec.Transport.onXmlDocLoad(oDoc, oArg.onLoad, oArg.onError); return oDoc; }
            return null;
        }
        if (typeof ActiveXObject != 'undefined')
        {
            Zapatec.Transport.showBusy(oArg); try
            {
                var oDoc = new ActiveXObject(Zapatec.Transport.XMLDOM); oDoc.async = oArg.async; if (oArg.async) { oDoc.onreadystatechange = function() { if (oDoc.readyState == 4) { Zapatec.Transport.removeBusy(oArg); Zapatec.Transport.onXmlDocLoad(oDoc, oArg.onLoad, oArg.onError); oDoc.onreadystatechange = {}; } }; }
                oDoc.load(oArg.url); if (!oArg.async) { Zapatec.Transport.removeBusy(oArg); Zapatec.Transport.onXmlDocLoad(oDoc, oArg.onLoad, oArg.onError); return oDoc; }
                return null;
            } catch (oExpn) { Zapatec.Transport.removeBusy(oArg); };
        } 
    }
    var oFetchArg = {}; for (var sKey in oArg) { oFetchArg[sKey] = oArg[sKey]; }
    if (oArg.async) { oFetchArg.onLoad = function(oRequest) { Zapatec.Transport.parseXml({ strXml: oRequest.responseText, onLoad: oArg.onLoad, onError: oArg.onError }); }; } else { oFetchArg.onLoad = null; }
    var oRequest = Zapatec.Transport.fetch(oFetchArg); if (!oArg.async && oRequest) { return Zapatec.Transport.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'); Zapatec.Transport.onXmlDocLoad(oDoc, oArg.onLoad, oArg.onError); return oDoc; } catch (oExpn) { Zapatec.Transport.displayError(0, "Error: Can't parse.\n" + 'String does not appear to be a valid XML fragment.', oArg.onError); }; return null; }
    if (typeof ActiveXObject != 'undefined') { try { var oDoc = new ActiveXObject(Zapatec.Transport.XMLDOM); oDoc.loadXML(oArg.strXml); Zapatec.Transport.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) { Zapatec.Transport.displayError(0, "Error: Can't parse.\n" + 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) { Zapatec.Transport.parseJson({ strJson: oRequest.responseText, reliable: oArg.reliable, onLoad: oArg.onLoad, onError: oArg.onError }); }; } else { oFetchArg.onLoad = null; }
    var oRequest = Zapatec.Transport.fetch(oFetchArg); if (!oArg.async && oRequest) { return Zapatec.Transport.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 = Zapatec.Transport.parseJsonStr(oArg.strJson); } } catch (oExpn)
    {
        var sError = "Error: Can't parse.\nString doesn't appear to be a valid JSON fragment: "; sError += oExpn.message; if (typeof oExpn.text != 'undefined' && oExpn.text.length) { sError += '\n' + oExpn.text; }
        sError += '\n' + oArg.strJson; Zapatec.Transport.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)
{
    var a = []; function e(s) { a[a.length] = s; }
    function g(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)
                        {
                            v = x[i]; if (typeof v != 'undefined' && typeof v != 'function')
                            {
                                if (l < a.length) { e(','); }
                                g(v);
                            } 
                        }
                        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' && typeof v != 'function')
                            {
                                if (l < a.length) { e(','); }
                                g(i); e(':'); g(v);
                            } 
                        }
                        return e('}');
                    } 
                }
                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; 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 { alert(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[0] == '/') { return [oLocation.protocol, '//', oLocation.hostname, sPort, sUrl].join(''); }
    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 = Zapatec.Transport.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 (Zapatec.Transport.loading[sUrl]) { return { loading: true }; } else
    {
        Zapatec.Transport.loading[sUrl] = true; return { onLoad: new Function("Zapatec.EventDriven.fireEvent('zpTransportOnLoad" +
sUrl + "');Zapatec.EventDriven.removeEvent('zpTransportOnLoad" +
sUrl + "');Zapatec.EventDriven.removeEvent('zpTransportOnError" +
sUrl + "');Zapatec.Transport.loading['" + sUrl + "'] = false;"), onError: new Function('oError', "Zapatec.EventDriven.fireEvent('zpTransportOnError" +
sUrl + "',oError);Zapatec.EventDriven.removeEvent('zpTransportOnLoad" +
sUrl + "');Zapatec.EventDriven.removeEvent('zpTransportOnError" +
sUrl + "');Zapatec.Transport.loading['" + sUrl + "'] = false;")
        };
    } 
}; Zapatec.Transport.loadedJS = {}; Zapatec.Transport.isLoadedJS = function(sUrl, sAbsUrl)
{
    if (typeof sAbsUrl == 'undefined') { sAbsUrl = Zapatec.Transport.translateUrl({ url: sUrl }); }
    if (Zapatec.Transport.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) { Zapatec.Transport.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 Zapatec.Transport.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 (Zapatec.doNotInclude) { return; }
    var sAbsUrl = Zapatec.Transport.translateUrl({ url: sSrc }); if (!bForce && Zapatec.Transport.isLoadedJS(sSrc, sAbsUrl)) { return; }
    document.write('<script type="text/javascript" src="' + sSrc +
(typeof sId == 'string' ? '" id="' + sId : '') + '"></script>'); Zapatec.Transport.loadedJS[sAbsUrl] = true;
}; Zapatec.include = Zapatec.Transport.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 = Zapatec.Transport.translateUrl({ url: sUrl }); if (!oArg.onLoad) { oArg.onLoad = null; }
    if (!oArg.onError) { oArg.onError = null; }
    if (Zapatec.doNotInclude || (!oArg.force && Zapatec.Transport.isLoadedJS(sUrl, sAbsUrl)))
    {
        if (typeof oArg.onLoad == 'function') { oArg.onLoad(); }
        return;
    }
    var oHandlers = Zapatec.Transport.setupEvents({ url: sAbsUrl, force: oArg.force, onLoad: oArg.onLoad, onError: oArg.onError }); if (oHandlers.loading) { return; }
    Zapatec.Transport.fetch({ url: sUrl, async: oArg.async, onLoad: function(oRequest)
    {
        if (oArg.force || !Zapatec.Transport.loadedJS[sAbsUrl]) { var aTokens = sUrl.split('/'); var sLastToken = aTokens.pop(); Zapatec.lastLoadedModule = aTokens.join('/') + '/'; Zapatec.Transport.evalGlobalScope(oRequest.responseText); Zapatec.lastLoadedModule = null; Zapatec.Transport.loadedJS[sAbsUrl] = true; }
        if (typeof oHandlers.onLoad == 'function') { oHandlers.onLoad(); } 
    }, onError: oHandlers.onError
    });
}; Zapatec.Transport.includeCSS = function(sHref)
{
    var oContr = document.getElementsByTagName('head')[0]; if (!oContr) { return; }
    var oLink = document.createElement('link'); oLink.setAttribute('rel', 'stylesheet'); oLink.setAttribute('type', 'text/css'); oLink.setAttribute('href', sHref); oContr.appendChild(oLink);
}; 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 = Zapatec.Transport.translateUrl({ url: oArg.url }); if (!oArg.force)
    {
        if (Zapatec.Transport.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 = Zapatec.Transport.translateUrl({ url: sHref }); if (sHref == sAbsUrl)
            {
                Zapatec.Transport.loadedCss[sAbsUrl] = true; if (typeof oArg.onLoad == 'function') { oArg.onLoad(); }
                return;
            } 
        } 
    }
    var oHandlers = Zapatec.Transport.setupEvents({ url: sAbsUrl, force: oArg.force, onLoad: oArg.onLoad, onError: oArg.onError }); if (oHandlers.loading) { return; }
    Zapatec.Transport.fetch({ url: oArg.url, 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 = Zapatec.Transport.translateUrl({ url: sImgUrl, relativeTo: oArg.url }); sImgUrl = Zapatec.Transport.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(''); Zapatec.Transport.loadCssList({ urls: aCssUrls, async: oArg.async, onLoad: function() { (new Zapatec.StyleSheet()).addParse(sCss); if (typeof oHandlers.onLoad == 'function') { oHandlers.onLoad(); } } }); Zapatec.Transport.loadedCss[sAbsUrl] = true; Zapatec.Transport.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() { Zapatec.Transport.loadCssList({ urls: oArg.urls, async: oArg.async, force: oArg.force, onLoad: oArg.onLoad, onError: oArg.onError }); }; Zapatec.Transport.loadCss({ url: sUrl, async: oArg.async, force: oArg.force, onLoad: funcOnLoad, onError: function(oError) { Zapatec.Transport.displayError(oError.errorCode, oError.errorDescription, oArg.onError); funcOnLoad(); } });
}; Zapatec.Transport.imagePreloads = []; Zapatec.Transport.preloadImages = function(oArg) { Zapatec.Transport.imagePreloads.push(new Zapatec.PreloadImages(oArg)); }; Zapatec.Drag = {}; Zapatec.Utils.emulateWindowEvent(['mousedown', 'mousemove', 'mouseup']); Zapatec.Drag.currentId = null; Zapatec.Drag.start = function(oEv, sId, oArg)
{
    var oDrag = Zapatec.Drag; var oUtils = Zapatec.Utils; if (oDrag.currentId) { return true; }
    var oEl = Zapatec.Widget.getElementById(sId); if (!oEl || oEl.zpDrag) { return true; }
    if (!oArg) { oArg = {}; }
    var oPos = oUtils.getMousePos(oEv || window.event); Zapatec.EventDriven.fireEvent('dragStart', { el: oEl, event: oEv }); oEl.zpDrag = true; if (oArg.resize) { oEl.zpDragResize = true; }
    oEl.zpDragPageX = oPos.pageX; oEl.zpDragPageY = oPos.pageY; oEl.zpDragWidth = oEl.clientWidth; oEl.zpDragHeight = oEl.clientHeight; var sTag; var oOffsetParent = oEl.offsetParent; if (oOffsetParent) { sTag = oOffsetParent.tagName.toLowerCase(); }
    if (sTag && sTag != 'body' && sTag != 'html') { oPos = oUtils.getElementOffset(oEl); var oPosParent = oUtils.getElementOffset(oOffsetParent); oEl.zpDragLeft = oPos.left - oPosParent.left; oEl.zpDragTop = oPos.top - oPosParent.top; } else { oEl.zpDragLeft = oEl.offsetLeft; oEl.zpDragTop = oEl.offsetTop; }
    oEl.zpDragRight = oEl.zpDragLeft + oEl.zpDragWidth; oEl.zpDragBottom = oEl.zpDragTop + oEl.zpDragHeight; oEl.zpDragPrevLeft = oEl.zpDragPrevRealLeft = oEl.zpDragLeft; oEl.zpDragPrevTop = oEl.zpDragPrevRealTop = oEl.zpDragTop; oEl.zpDragV = oArg.vertical; oEl.zpDragH = oArg.horizontal; oEl.zpDragLimTop = typeof oArg.limitTop == 'number' ? oArg.limitTop : -Infinity; oEl.zpDragLimBot = typeof oArg.limitBottom == 'number' ? oArg.limitBottom : Infinity; oEl.zpDragLimLft = typeof oArg.limitLeft == 'number' ? oArg.limitLeft : -Infinity; oEl.zpDragLimRgh = typeof oArg.limitRight == 'number' ? oArg.limitRight : Infinity; if (typeof oArg.step == 'number') { oEl.zpDragStepV = oEl.zpDragStepH = oArg.step; }
    if (typeof oArg.stepVertical == 'number') { oEl.zpDragStepV = oArg.stepVertical; }
    if (typeof oArg.stepHorizontal == 'number') { oEl.zpDragStepH = oArg.stepHorizontal; }
    oDrag.currentId = sId; oUtils.addEvent(document, 'mousemove', oDrag.move); oUtils.addEvent(document, 'mouseup', oDrag.end); return true;
}; Zapatec.Drag.move = function(oEv)
{
    var oDrag = Zapatec.Drag; var oUtils = Zapatec.Utils; oEv || (oEv = window.event); if (!oDrag.currentId) { return oUtils.stopEvent(oEv); }
    var oEl = document.getElementById(oDrag.currentId); if (!(oEl && oEl.zpDrag)) { return oUtils.stopEvent(oEv); }
    var oSt = oEl.style; var oPos = oUtils.getMousePos(oEv); var oParam = { el: oEl, startLeft: oEl.zpDragLeft, startTop: oEl.zpDragTop, prevLeft: oEl.zpDragPrevLeft, prevTop: oEl.zpDragPrevTop, left: oEl.zpDragLeft, top: oEl.zpDragTop, realLeft: oEl.zpDragLeft, realTop: oEl.zpDragTop, event: oEv }; var iOffset, iPos, iStep, iSize; iOffset = oPos.pageX - oEl.zpDragPageX; iStep = oEl.zpDragStepH; if (iStep) { iPos = oEl.zpDragLeft + Math.floor(iOffset / iStep) * iStep; oParam.realLeft = oEl.zpDragPrevRealLeft = oEl.zpDragLeft + iOffset; } else { oParam.realLeft = oEl.zpDragPrevRealLeft = iPos = oEl.zpDragLeft + iOffset; }
    if (!oEl.zpDragV)
    {
        if (oEl.zpDragLimLft <= iPos && oEl.zpDragLimRgh >= iPos)
        {
            if (oSt.right) { oSt.right = ''; }
            if (oEl.zpDragResize)
            {
                if (iOffset > 0)
                {
                    iSize = oEl.zpDragWidth + iOffset; if (iStep) { iSize = Math.floor(iSize / iStep) * iStep; }
                    oSt.left = oEl.zpDragLeft + 'px';
                } else
                {
                    iSize = oEl.zpDragWidth - iOffset; if (iStep) { iSize = Math.ceil(iSize / iStep) * iStep; }
                    oSt.left = oEl.zpDragLeft - iSize + 'px';
                }
                oSt.width = iSize + 'px';
            } else { oSt.left = iPos + 'px'; }
            oParam.left = iPos; oEl.zpDragPrevLeft = iPos;
        } else { oParam.left = oParam.prevLeft; } 
    }
    iOffset = oPos.pageY - oEl.zpDragPageY; iStep = oEl.zpDragStepV; if (iStep) { iPos = oEl.zpDragTop + Math.floor(iOffset / iStep) * iStep; oParam.realTop = oEl.zpDragPrevRealTop = oEl.zpDragTop + iOffset; } else { iPos = oParam.realTop = oEl.zpDragPrevRealTop = oEl.zpDragTop + iOffset; }
    if (!oEl.zpDragH)
    {
        if (oEl.zpDragLimTop <= iPos && oEl.zpDragLimBot >= iPos)
        {
            if (oSt.bottom) { oSt.bottom = ''; }
            if (oEl.zpDragResize)
            {
                if (iOffset > 0)
                {
                    iSize = oEl.zpDragHeight + iOffset; if (iStep) { iSize = Math.floor(iSize / iStep) * iStep; }
                    oSt.top = oEl.zpDragTop + 'px';
                } else
                {
                    iSize = oEl.zpDragHeight - iOffset; if (iStep) { iSize = Math.ceil(iSize / iStep) * iStep; }
                    oSt.top = oEl.zpDragBottom - iSize + 'px';
                }
                oSt.height = iSize + 'px';
            } else { oSt.top = iPos + 'px'; }
            oParam.top = iPos; oEl.zpDragPrevTop = iPos;
        } else { oParam.top = oParam.prevTop; } 
    }
    Zapatec.EventDriven.fireEvent('dragMove', oParam); return oUtils.stopEvent(oEv);
}; Zapatec.Drag.end = function(oEv)
{
    var oDrag = Zapatec.Drag; var oUtils = Zapatec.Utils; oEv || (oEv = window.event); if (!oDrag.currentId) { return oUtils.stopEvent(oEv); }
    var oEl = document.getElementById(oDrag.currentId); if (!(oEl && oEl.zpDrag)) { return oUtils.stopEvent(oEv); }
    oUtils.removeEvent(document, 'mousemove', oDrag.move); oUtils.removeEvent(document, 'mouseup', oDrag.end); var oParam = { el: oEl, startLeft: oEl.zpDragLeft, startTop: oEl.zpDragTop, left: oEl.zpDragPrevLeft, top: oEl.zpDragPrevTop, realLeft: oEl.zpDragPrevRealLeft, realTop: oEl.zpDragPrevRealTop, event: oEv }; oDrag.currentId = null; oEl.zpDrag = null; oEl.zpDragPageY = null; oEl.zpDragPageX = null; oEl.zpDragTop = null; oEl.zpDragLeft = null; oEl.zpDragPrevTop = null; oEl.zpDragPrevLeft = null; oEl.zpDragPrevRealTop = null; oEl.zpDragPrevRealLeft = null; oEl.zpDragV = null; oEl.zpDragH = null; oEl.zpDragLimTop = null; oEl.zpDragLimBot = null; oEl.zpDragLimLft = null; oEl.zpDragLimRgh = null; oEl.zpDragStepV = null; oEl.zpDragStepH = null; Zapatec.EventDriven.fireEvent('dragEnd', oParam); return oUtils.stopEvent(oEv);
}; if (typeof Zapatec == 'undefined') { Zapatec = function() { }; }
Zapatec.Widget = function(oArg) { this.config = {}; Zapatec.Widget.SUPERconstructor.call(this); this.init(oArg); }; Zapatec.inherit(Zapatec.Widget, Zapatec.EventDriven); Zapatec.Widget.path = Zapatec.getPath('Zapatec.Widget'); Zapatec.Widget.prototype.init = function(oArg)
{
    Zapatec.Widget.SUPERclass.init.call(this); if (typeof this.id == 'undefined')
    {
        var iId = 0; while (Zapatec.Widget.all[iId]) { iId++; }
        this.id = iId; Zapatec.Widget.all[iId] = this;
    }
    this.configure(oArg); this.addUserEventListeners(); this.addStandardEventListeners(); this.initLang(); this.loadTheme();
}; Zapatec.Widget.prototype.reconfigure = function(oArg)
{
    this.configure(oArg); this.loadTheme(); if (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])) { Zapatec.Log({ description: 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.configure = function(oArg)
{
    this.defineConfigOption('theme', 'default'); var sPath = this.constructor.path; if (typeof sPath != 'undefined') { this.defineConfigOption('themePath', sPath + '../themes/'); } else { this.defineConfigOption('themePath', '../themes/'); }
    this.defineConfigOption('asyncTheme', false); this.defineConfigOption('source'); this.defineConfigOption('sourceType'); 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'); if (oArg) { var oConfig = this.config; for (var sOption in oArg) { if (typeof oConfig[sOption] != 'undefined') { oConfig[sOption] = oArg[sOption]; } else { Zapatec.Log({ description: "Unknown config option: " + sOption }); } } } 
}; Zapatec.Widget.prototype.getConfiguration = function() { return this.config; }; Zapatec.Widget.all = []; Zapatec.Widget.getWidgetById = function(iId) { return Zapatec.Widget.all[iId]; }; 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]; oRef[0][oRef[1]] = null; oRef[0] = null; } 
}; Zapatec.Widget.prototype.discard = function() { Zapatec.Widget.all[this.id] = null; this.removeCircularRefs(); }; Zapatec.Widget.removeCircularRefs = function() { for (var iWidget = Zapatec.Widget.all.length - 1; iWidget >= 0; iWidget--) { var oWidget = Zapatec.Widget.all[iWidget]; if (oWidget && oWidget.removeCircularRefs) { oWidget.removeCircularRefs(); } } }; Zapatec.Utils.addEvent(window, 'unload', Zapatec.Widget.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('loadThemeError', Zapatec.Widget.loadThemeError); }; Zapatec.Widget.loadThemeError = function(oError)
{
    var sDescription = "Can't load theme."; if (oError && oError.errorDescription) { sDescription += ' ' + oError.errorDescription; }
    Zapatec.Log({ description: sDescription });
}; 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'); this.themeLoaded = false; var oWidget = this; var sUrl = oConfig.themePath + oConfig.theme + '.css'; Zapatec.Transport.loadCss({ url: sUrl, async: oConfig.asyncTheme, onLoad: function() { oWidget.fireEvent('loadThemeEnd'); oWidget.themeLoaded = true; }, onError: function(oError) { oWidget.fireEvent('loadThemeEnd'); oWidget.fireEvent('loadThemeError', oError); oWidget.themeLoaded = true; } }); } 
}
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; Zapatec.Transport.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 = this.originalContainerDisplay; this.originalContainerDisplay = null; } else { this.originalContainerDisplay = this.container.style.display; 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(oArg); if (oSource)
        {
            if (typeof oSource.source != 'undefined') { oConfig.source = oSource.source; }
            if (typeof oSource.sourceType != 'undefined') { oConfig.sourceType = oSource.sourceType; } 
        } 
    }
    var vSource = oConfig.source; if (typeof oConfig.callbackConvertSource == 'function') { vSource = oConfig.callbackConvertSource(vSource); }
    var sSourceType = oConfig.sourceType; if (vSource != null && sSourceType != null)
    {
        sSourceType = sSourceType.toLowerCase(); if (sSourceType == 'html') { this.fireEvent('loadDataStart'); this.loadDataHtml(Zapatec.Widget.getElementById(vSource)); this.fireEvent('loadDataEnd'); } else if (sSourceType == 'html/text') { this.fireEvent('loadDataStart'); this.loadDataHtmlText(vSource); this.fireEvent('loadDataEnd'); } else if (sSourceType == 'html/url') { this.fireEvent('fetchSourceStart'); var oWidget = this; Zapatec.Transport.fetch({ url: vSource, async: oConfig.asyncSource, onLoad: function(oRequest) { oWidget.fireEvent('fetchSourceEnd'); oWidget.fireEvent('loadDataStart'); oWidget.loadDataHtmlText(oRequest.responseText); oWidget.fireEvent('loadDataEnd'); }, onError: function(oError) { oWidget.fireEvent('fetchSourceError', oError); oWidget.fireEvent('fetchSourceEnd'); oWidget.fireEvent('loadDataEnd'); } }); } else if (sSourceType == 'json')
        {
            this.fireEvent('loadDataStart'); if (typeof vSource == 'object') { this.loadDataJson(vSource); } else if (oConfig.reliableSource) { this.loadDataJson(eval(['(', vSource, ')'].join(''))); } else { this.loadDataJson(Zapatec.Transport.parseJson({ strJson: vSource })); }
            this.fireEvent('loadDataEnd');
        } else if (sSourceType == 'json/url') { this.fireEvent('fetchSourceStart'); var oWidget = this; Zapatec.Transport.fetchJsonObj({ url: vSource, async: oConfig.asyncSource, reliable: oConfig.reliableSource, onLoad: function(oResult) { oWidget.fireEvent('fetchSourceEnd'); oWidget.fireEvent('loadDataStart'); oWidget.loadDataJson(oResult); oWidget.fireEvent('loadDataEnd'); }, onError: function(oError) { oWidget.fireEvent('fetchSourceError', oError); oWidget.fireEvent('fetchSourceEnd'); oWidget.fireEvent('loadDataEnd'); } }); } else if (sSourceType == 'xml')
        {
            this.fireEvent('loadDataStart'); if (typeof vSource == 'object') { this.loadDataXml(vSource); } else { this.loadDataXml(Zapatec.Transport.parseXml({ strXml: vSource })); }
            this.fireEvent('loadDataEnd');
        } else if (sSourceType == 'xml/url') { this.fireEvent('fetchSourceStart'); var oWidget = this; Zapatec.Transport.fetchXmlDoc({ url: vSource, async: oConfig.asyncSource, onLoad: function(oResult) { oWidget.fireEvent('fetchSourceEnd'); oWidget.fireEvent('loadDataStart'); oWidget.loadDataXml(oResult); oWidget.fireEvent('loadDataEnd'); }, onError: function(oError) { oWidget.fireEvent('fetchSourceError', oError); oWidget.fireEvent('fetchSourceEnd'); oWidget.fireEvent('loadDataEnd'); } }); } 
    } else { this.fireEvent('loadDataStart'); this.loadDataHtml(Zapatec.Widget.getElementById(vSource)); this.fireEvent('loadDataEnd'); } 
}; Zapatec.Widget.prototype.loadDataHtml = function(oSource) { }; Zapatec.Widget.prototype.loadDataHtmlText = function(sSource) { var oTempContainer = Zapatec.Transport.parseHtml(sSource); this.loadDataHtml(oTempContainer.firstChild); }; Zapatec.Widget.prototype.loadDataJson = function(oSource) { }; Zapatec.Widget.prototype.loadDataXml = function(oSource) { }; 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]))
    {
        Zapatec.Log({ description: "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 = Zapatec.Widget.getWidgetById(iWidgetId); if (oWidget && typeof oWidget[sMethod] == 'function') { var aArgs = [].slice.call(arguments, 2); return oWidget[sMethod].apply(oWidget, aArgs); } }; Zapatec.Widget.getElementById = function(element)
{
    if (typeof element == 'string') { return document.getElementById(element); }
    return element;
}; Zapatec.Widget.getStyle = function(element)
{
    var style = element.getAttribute('style') || ''; if (typeof style == 'string') { return style; }
    return style.cssText;
};
