// JavaScript Document

/* x_hd.js compiled from X 4.0 with XC 0.28b. Distributed under GNU LGPL. For copyrights, license, documentation and more visit Cross-Browser.com */
var xOp7Up,xOp6Dn,xIE4Up,xIE4,xIE5,xNN4,xUA=navigator.userAgent.toLowerCase();if(window.opera){var i=xUA.indexOf('opera');if(i!=-1){var v=parseInt(xUA.charAt(i+6));xOp7Up=v>=7;xOp6Dn=v<7;}}else if(navigator.vendor!='KDE' && document.all && xUA.indexOf('msie')!=-1){xIE4Up=parseFloat(navigator.appVersion)>=4;xIE4=xUA.indexOf('msie 4')!=-1;xIE5=xUA.indexOf('msie 5')!=-1;}else if(document.layers){xNN4=true;}xMac=xUA.indexOf('mac')!=-1;function xAddEventListener(e,eT,eL,cap){if(!(e=xGetElementById(e))) return;eT=eT.toLowerCase();if((!xIE4Up && !xOp7Up) && e==window) {if(eT=='resize') { window.xPCW=xClientWidth(); window.xPCH=xClientHeight(); window.xREL=eL; xResizeEvent(); return; }if(eT=='scroll') { window.xPSL=xScrollLeft(); window.xPST=xScrollTop(); window.xSEL=eL; xScrollEvent(); return; }}var eh='e.on'+eT+'=eL';if(e.addEventListener) e.addEventListener(eT,eL,cap);else if(e.attachEvent) e.attachEvent('on'+eT,eL);else eval(eh);}function xResizeEvent(){if (window.xREL) setTimeout('xResizeEvent()', 250);var cw = xClientWidth(), ch = xClientHeight();if (window.xPCW != cw || window.xPCH != ch) { window.xPCW = cw; window.xPCH = ch; if (window.xREL) window.xREL(); }}function xScrollEvent(){if (window.xSEL) setTimeout('xScrollEvent()', 250);var sl = xScrollLeft(), st = xScrollTop();if (window.xPSL != sl || window.xPST != st) { window.xPSL = sl; window.xPST = st; if (window.xSEL) window.xSEL(); }}function xBackground(e,c,i){if(!(e=xGetElementById(e))) return '';var bg='';if(e.style) {if(xStr(c)) {if(!xOp6Dn) e.style.backgroundColor=c;else e.style.background=c;}if(xStr(i)) e.style.backgroundImage=(i!='')? 'url('+i+')' : null;if(!xOp6Dn) bg=e.style.backgroundColor;else bg=e.style.background;}return bg;}function xClientHeight(){var h=0;if(xOp6Dn) h=window.innerHeight;else if(document.compatMode == 'CSS1Compat' && !window.opera && document.documentElement && document.documentElement.clientHeight)h=document.documentElement.clientHeight;else if(document.body && document.body.clientHeight)h=document.body.clientHeight;else if(xDef(window.innerWidth,window.innerHeight,document.width)) {h=window.innerHeight;if(document.width>window.innerWidth) h-=16;}return h;}function xClientWidth(){var w=0;if(xOp6Dn) w=window.innerWidth;else if(document.compatMode == 'CSS1Compat' && !window.opera && document.documentElement && document.documentElement.clientWidth)w=document.documentElement.clientWidth;else if(document.body && document.body.clientWidth)w=document.body.clientWidth;else if(xDef(window.innerWidth,window.innerHeight,document.height)) {w=window.innerWidth;if(document.height>window.innerHeight) w-=16;}return w;}function xClip(e,t,r,b,l){if(!(e=xGetElementById(e))) return;if(e.style) {if (xNum(l)) e.style.clip='rect('+t+'px '+r+'px '+b+'px '+l+'px)';else e.style.clip='rect(0 '+parseInt(e.style.width)+'px '+parseInt(e.style.height)+'px 0)';}}function xColor(e,s){if(!(e=xGetElementById(e))) return '';var c='';if(e.style && xDef(e.style.color)) {if(xStr(s)) e.style.color=s;c=e.style.color;}return c;}function xDef(){for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}return true;}function xDisplay(e,s){if(!(e=xGetElementById(e))) return null;if(e.style && xDef(e.style.display)) {if (xStr(s)) e.style.display = s;return e.style.display;}return null;}function xEvent(evt) {var e = evt || window.event;if(!e) return;if(e.type) this.type = e.type;if(e.target) this.target = e.target;else if(e.srcElement) this.target = e.srcElement;if (e.relatedTarget) this.relatedTarget = e.relatedTarget;else if (e.type == 'mouseover' && e.fromElement) this.relatedTarget = e.fromElement;else if (e.type == 'mouseout') this.relatedTarget = e.toElement;if(xOp6Dn) { this.pageX = e.clientX; this.pageY = e.clientY; }else if(xDef(e.pageX,e.pageY)) { this.pageX = e.pageX; this.pageY = e.pageY; }else if(xDef(e.clientX,e.clientY)) { this.pageX = e.clientX + xScrollLeft(); this.pageY = e.clientY + xScrollTop(); }if (xDef(e.offsetX,e.offsetY)) {this.offsetX = e.offsetX;this.offsetY = e.offsetY;}else if (xDef(e.layerX,e.layerY)) {this.offsetX = e.layerX;this.offsetY = e.layerY;}else {this.offsetX = this.pageX - xPageX(this.target);this.offsetY = this.pageY - xPageY(this.target);}if (e.keyCode) { this.keyCode = e.keyCode; } else if (xDef(e.which) && e.type.indexOf('key')!=-1) { this.keyCode = e.which; }this.shiftKey = e.shiftKey;this.ctrlKey = e.ctrlKey;this.altKey = e.altKey;}function xGetComputedStyle(oEle, sProp, bInt){var s, p = 'undefined';var dv = document.defaultView;if(dv && dv.getComputedStyle){s = dv.getComputedStyle(oEle,'');if (s) p = s.getPropertyValue(sProp);}else if(oEle.currentStyle) {var a = sProp.split('-');sProp = a[0];for (var i=1; i<a.length; ++i) {c = a[i].charAt(0);sProp += a[i].replace(c, c.toUpperCase());}   p = oEle.currentStyle[sProp];}else return null;return bInt ? (parseInt(p) || 0) : p;}function xGetElementById(e){if(typeof(e)!='string') return e;if(document.getElementById) e=document.getElementById(e);else if(document.all) e=document.all[e];else e=null;return e;}function xGetElementsByClassName(c,p,t,f){var found = new Array();var re = new RegExp('\\b'+c+'\\b', 'i');var list = xGetElementsByTagName(t, p);for (var i = 0; i < list.length; ++i) {if (list[i].className && list[i].className.search(re) != -1) {found[found.length] = list[i];if (f) f(list[i]);}}return found;}function xGetElementsByTagName(t,p){var list = null;t = t || '*';p = p || document;if (xIE4 || xIE5) {if (t == '*') list = p.all;else list = p.all.tags(t);}else if (p.getElementsByTagName) list = p.getElementsByTagName(t);return list || new Array();}function xHasPoint(e,x,y,t,r,b,l){if (!xNum(t)){t=r=b=l=0;}else if (!xNum(r)){r=b=l=t;}else if (!xNum(b)){l=r; b=t;}var eX = xPageX(e), eY = xPageY(e);return (x >= eX + l && x <= eX + xWidth(e) - r &&y >= eY + t && y <= eY + xHeight(e) - b );}function xHeight(e,h){if(!(e=xGetElementById(e))) return 0;if (xNum(h)) {if (h<0) h = 0;else h=Math.round(h);}else h=-1;var css=xDef(e.style);if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {h = xClientHeight();}else if(css && xDef(e.offsetHeight) && xStr(e.style.height)) {if(h>=0) {var pt=0,pb=0,bt=0,bb=0;if (document.compatMode=='CSS1Compat') {var gcs = xGetComputedStyle;pt=gcs(e,'padding-top',1);if (pt !== null) {pb=gcs(e,'padding-bottom',1);bt=gcs(e,'border-top-width',1);bb=gcs(e,'border-bottom-width',1);}else if(xDef(e.offsetHeight,e.style.height)){e.style.height=h+'px';pt=e.offsetHeight-h;}}h-=(pt+pb+bt+bb);if(isNaN(h)||h<0) return;else e.style.height=h+'px';}h=e.offsetHeight;}else if(css && xDef(e.style.pixelHeight)) {if(h>=0) e.style.pixelHeight=h;h=e.style.pixelHeight;}return h;}function xHide(e){return xVisibility(e,0);}function xLeft(e, iX){if(!(e=xGetElementById(e))) return 0;var css=xDef(e.style);if (css && xStr(e.style.left)) {if(xNum(iX)) e.style.left=iX+'px';else {iX=parseInt(e.style.left);if(isNaN(iX)) iX=0;}}else if(css && xDef(e.style.pixelLeft)) {if(xNum(iX)) e.style.pixelLeft=iX;else iX=e.style.pixelLeft;}return iX;}function xMoveTo(e,x,y){xLeft(e,x);xTop(e,y);}function xNum(){for(var i=0; i<arguments.length; ++i){if(isNaN(arguments[i]) || typeof(arguments[i])!='number') return false;}return true;}function xOffsetLeft(e){if (!(e=xGetElementById(e))) return 0;if (xDef(e.offsetLeft)) return e.offsetLeft;else return 0;}function xOffsetTop(e){if (!(e=xGetElementById(e))) return 0;if (xDef(e.offsetTop)) return e.offsetTop;else return 0;}function xPageX(e){if (!(e=xGetElementById(e))) return 0;var x = 0;while (e) {if (xDef(e.offsetLeft)) x += e.offsetLeft;e = xDef(e.offsetParent) ? e.offsetParent : null;}return x;}function xPageY(e){if (!(e=xGetElementById(e))) return 0;var y = 0;while (e) {if (xDef(e.offsetTop)) y += e.offsetTop;e = xDef(e.offsetParent) ? e.offsetParent : null;}return y;}function xParent(e, bNode){if (!(e=xGetElementById(e))) return null;var p=null;if (!bNode && xDef(e.offsetParent)) p=e.offsetParent;else if (xDef(e.parentNode)) p=e.parentNode;else if (xDef(e.parentElement)) p=e.parentElement;return p;}function xPreventDefault(e){if (e && e.preventDefault) e.preventDefault();else if (window.event) window.event.returnValue = false;}function xRemoveEventListener(e,eT,eL,cap){if(!(e=xGetElementById(e))) return;eT=eT.toLowerCase();if((!xIE4Up && !xOp7Up) && e==window) {if(eT=='resize') { window.xREL=null; return; }if(eT=='scroll') { window.xSEL=null; return; }}var eh='e.on'+eT+'=null';if(e.removeEventListener) e.removeEventListener(eT,eL,cap);else if(e.detachEvent) e.detachEvent('on'+eT,eL);else eval(eh);}function xResizeTo(e,w,h){xWidth(e,w);xHeight(e,h);}function xScrollLeft(e, bWin){var offset=0;if (!xDef(e) || bWin || e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {var w = window;if (bWin && e) w = e;if(w.document.documentElement && w.document.documentElement.scrollLeft) offset=w.document.documentElement.scrollLeft;else if(w.document.body && xDef(w.document.body.scrollLeft)) offset=w.document.body.scrollLeft;}else {e = xGetElementById(e);if (e && xNum(e.scrollLeft)) offset = e.scrollLeft;}return offset;}function xScrollTop(e, bWin){var offset=0;if (!xDef(e) || bWin || e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {var w = window;if (bWin && e) w = e;if(w.document.documentElement && w.document.documentElement.scrollTop) offset=w.document.documentElement.scrollTop;else if(w.document.body && xDef(w.document.body.scrollTop)) offset=w.document.body.scrollTop;}else {e = xGetElementById(e);if (e && xNum(e.scrollTop)) offset = e.scrollTop;}return offset;}function xShow(e) {return xVisibility(e,1);}function xSlideTo(e, x, y, uTime){if (!(e=xGetElementById(e))) return;if (!e.timeout) e.timeout = 25;e.xTarget = x; e.yTarget = y; e.slideTime = uTime; e.stop = false;e.yA = e.yTarget - xTop(e); e.xA = e.xTarget - xLeft(e); if (e.slideLinear) e.B = 1/e.slideTime;else e.B = Math.PI / (2 * e.slideTime); e.yD = xTop(e); e.xD = xLeft(e); var d = new Date(); e.C = d.getTime();if (!e.moving) _xSlideTo(e);}function _xSlideTo(e){if (!(e=xGetElementById(e))) return;var now, s, t, newY, newX;now = new Date();t = now.getTime() - e.C;if (e.stop) { e.moving = false; }else if (t < e.slideTime) {setTimeout("_xSlideTo('"+e.id+"')", e.timeout);if (e.slideLinear) s = e.B * t;else s = Math.sin(e.B * t);newX = Math.round(e.xA * s + e.xD);newY = Math.round(e.yA * s + e.yD);xMoveTo(e, newX, newY);e.moving = true;}  else {xMoveTo(e, e.xTarget, e.yTarget);e.moving = false;}  }function xStopPropagation(evt){if (evt && evt.stopPropagation) evt.stopPropagation();else if (window.event) window.event.cancelBubble = true;}function xStr(s){for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='string') return false;}return true;}function xTop(e, iY){if(!(e=xGetElementById(e))) return 0;var css=xDef(e.style);if(css && xStr(e.style.top)) {if(xNum(iY)) e.style.top=iY+'px';else {iY=parseInt(e.style.top);if(isNaN(iY)) iY=0;}}else if(css && xDef(e.style.pixelTop)) {if(xNum(iY)) e.style.pixelTop=iY;else iY=e.style.pixelTop;}return iY;}function xVisibility(e, bShow){if(!(e=xGetElementById(e))) return null;if(e.style && xDef(e.style.visibility)) {if (xDef(bShow)) e.style.visibility = bShow ? 'visible' : 'hidden';return e.style.visibility;}return null;}function xWidth(e,w){if(!(e=xGetElementById(e))) return 0;if (xNum(w)) {if (w<0) w = 0;else w=Math.round(w);}else w=-1;var css=xDef(e.style);if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {w = xClientWidth();}else if(css && xDef(e.offsetWidth) && xStr(e.style.width)) {if(w>=0) {var pl=0,pr=0,bl=0,br=0;if (document.compatMode=='CSS1Compat') {var gcs = xGetComputedStyle;pl=gcs(e,'padding-left',1);if (pl !== null) {pr=gcs(e,'padding-right',1);bl=gcs(e,'border-left-width',1);br=gcs(e,'border-right-width',1);}else if(xDef(e.offsetWidth,e.style.width)){e.style.width=w+'px';pl=e.offsetWidth-w;}}w-=(pl+pr+bl+br);if(isNaN(w)||w<0) return;else e.style.width=w+'px';}w=e.offsetWidth;}else if(css && xDef(e.style.pixelWidth)) {if(w>=0) e.style.pixelWidth=w;w=e.style.pixelWidth;}return w;}function xWinClass(clsName, winName, w, h, x, y, loc, men, res, scr, sta, too){var thisObj = this;var e='',c=',',xf='left=',yf='top='; this.n = name;if (document.layers) {xf='screenX='; yf='screenY=';}this.f = (w?'width='+w+c:e)+(h?'height='+h+c:e)+(x>=0?xf+x+c:e)+(y>=0?yf+y+c:e)+'location='+loc+',menubar='+men+',resizable='+res+',scrollbars='+scr+',status='+sta+',toolbar='+too;this.opened = function() {return this.w && !this.w.closed;};this.close = function() {if(this.opened()) this.w.close();};this.focus = function() {if(this.opened()) this.w.focus();};this.load = function(sUrl) {if (this.opened()) this.w.location.href = sUrl;else this.w = window.open(sUrl,this.n,this.f);this.focus();return false;};function onClick() {return thisObj.load(this.href);}xGetElementsByClassName(clsName, document, '*', bindOnClick);function bindOnClick(e) {e.onclick = onClick;}}function xWindow(name, w, h, x, y, loc, men, res, scr, sta, too){var e='',c=',',xf='left=',yf='top='; this.n = name;if (document.layers) {xf='screenX='; yf='screenY=';}this.f = (w?'width='+w+c:e)+(h?'height='+h+c:e)+(x>=0?xf+x+c:e)+(y>=0?yf+y+c:e)+'location='+loc+',menubar='+men+',resizable='+res+',scrollbars='+scr+',status='+sta+',toolbar='+too;this.opened = function() {return this.w && !this.w.closed;};this.close = function() {if(this.opened()) this.w.close();};this.focus = function() {if(this.opened()) this.w.focus();};this.load = function(sUrl) {if (this.opened()) this.w.location.href = sUrl;else this.w = window.open(sUrl,this.n,this.f);this.focus();return false;};}var xChildWindow = null;function xWinOpen(sUrl){var features = "left=0,top=0,width=600,height=500,location=0,menubar=0," +"resizable=1,scrollbars=1,status=0,toolbar=0";if (xChildWindow && !xChildWindow.closed) {xChildWindow.location.href  = sUrl;}else {xChildWindow = window.open(sUrl, "myWinName", features);}xChildWindow.focus();return false;}var xWinScrollWin = null;function xWinScrollTo(win,x,y,uTime) {var e = win;if (!e.timeout) e.timeout = 25;var st = xScrollTop(e, 1);var sl = xScrollLeft(e, 1);e.xTarget = x; e.yTarget = y; e.slideTime = uTime; e.stop = false;e.yA = e.yTarget - st;e.xA = e.xTarget - sl; e.B = Math.PI / (2 * e.slideTime); e.yD = st;e.xD = sl; var d = new Date(); e.C = d.getTime();if (!e.moving) {xWinScrollWin = e;_xWinScrollTo();}}function _xWinScrollTo() {var e = xWinScrollWin || window;var now, s, t, newY, newX;now = new Date();t = now.getTime() - e.C;if (e.stop) { e.moving = false; }else if (t < e.slideTime) {setTimeout("_xWinScrollTo()", e.timeout);s = Math.sin(e.B * t);newX = Math.round(e.xA * s + e.xD);newY = Math.round(e.yA * s + e.yD);e.scrollTo(newX, newY);e.moving = true;}  else {e.scrollTo(e.xTarget, e.yTarget);xWinScrollWin = null;e.moving = false;}  }function xZIndex(e,uZ){if(!(e=xGetElementById(e))) return 0;if(e.style && xDef(e.style.zIndex)) {if(xNum(uZ)) e.style.zIndex=uZ;uZ=parseInt(e.style.zIndex);}return uZ;}


/**
* CPAINT - Cross-Platform Asynchronous INterface Toolkit
*
* http://cpaint.sourceforge.net
* 
* released under the terms of the LGPL
* see http://www.fsf.org/licensing/licenses/lgpl.txt for details
*
* $Id$
* $Log$
* Revision 1.19  2005/09/03 16:40:21  saloon12yrd
* 2.0.1 RC1
* - improved AJAX capability check
* - taking use_cpaint_api == false into account in cpaint_call.call_proxy()
* - updated versions
* - updated changelog
* - added text changelog to release branch
*
* Revision 1.17  2005/08/17 15:52:04  saloon12yrd
* added automatic detection / conversion of numeric values
*
* Revision 1.10  2005/08/02 19:02:43  saloon12yrd
* removed debugging code
*
* Revision 1.5  2005/07/14 17:14:20  saloon12yrd
* added support for arbitrary XML attributes
*
*
* @package      CPAINT
* @access       public
* @copyright    Copyright (c) 2005 Paul Sullivan, Dominique Stender - http://cpaint.sourceforge.net
* @author       Paul Sullivan <wiley14@gmail.com>
* @author       Dominique Stender <dstender@st-webdevelopment.de>
* @version      2.0.1
*/
function cpaint() {
  /**
  * configuration options both for this class but also for  the cpaint_call() objects.
  *
  * @access     protected
  * @var        array       config
  */
  var config                      = new Array();
  config['debugging']             = 0;
  config['proxy_url']             = '';
  config['transfer_mode']         = 'GET';
  config['async']                 = true;
  config['response_type']         = 'OBJECT';
  config['persistent_connection'] = false;
  config['use_cpaint_api']        = true;
  
  /**
  * maintains the next free index in the stack
  *
  * @access   protected
  * @var      integer   stack_count
  */
  var stack_count = 0;

  /**
  * property returns whether or not the browser is AJAX capable
  * 
  * @access		public
  * @return		boolean
  */
  //this.capable = test_ajax_capability();
  this.capable = false;
  
  /**
  * switches debug mode on/off.
  *
  * @access   public
  * @param    boolean    debug    debug flag
  * @return   void
  */
  this.set_debug = function() {
    
    if (typeof arguments[0] == 'boolean') {
      if (arguments[0] === true) {
        config['debugging'] = 1;

      } else {
        config['debugging'] = 0;
      }
      
    } else if (typeof arguments[0] == 'number') {
      config['debugging'] = Math.round(arguments[0]);
    }
  }

  /**
  * defines the URL of the proxy script.
  *
  * @access   public
  * @param    string    proxy_url    URL of the proxyscript to connect
  * @return   void
  */
  this.set_proxy_url = function() {
    
    if (typeof arguments[0] == 'string') {

      config['proxy_url'] = arguments[0];
    }
  }

  /**
  * sets the transfer_mode (GET|POST).
  *
  * @access   public
  * @param    string    transfer_mode    transfer_mode
  * @return   void
  */
  this.set_transfer_mode = function() {
    
    if (arguments[0].toUpperCase() == 'GET'
      || arguments[0].toUpperCase() == 'POST') {

      config['transfer_mode'] = arguments[0].toUpperCase();
    }
  }

  /**
  * sets the flag whether or not to use asynchronous calls.
  *
  * @access   public
  * @param    boolean    async    syncronization flag
  * @return   void
  */
  this.set_async = function() {
    
    if (typeof arguments[0] == 'boolean') {
      config['async'] = arguments[0];
    }
  }

  /**
  * defines the response type.
  *
  * allowed values are:
  *   TEXT    = raw text response
  *   XML     = raw XMLHttpObject
  *   OBJECT  = parsed JavaScript object structure from XMLHttpObject
  *
  * the default is OBJECT.
  *
  * @access   public
  * @param    string    response_type    response type
  * @return   void
  */
  this.set_response_type = function() {
    
    if (arguments[0].toUpperCase() == 'TEXT'
      || arguments[0].toUpperCase() == 'XML'
      || arguments[0].toUpperCase() == 'OBJECT') {

      config['response_type'] = arguments[0].toUpperCase();
    }
  }

  /**
  * sets the flag whether or not to use a persistent connection.
  *
  * @access   public
  * @param    boolean    persistent_connection    persistance flag
  * @return   void
  */
  this.set_persistent_connection = function() {
    
    if (typeof arguments[0] == 'boolean') {
      config['persistent_connection'] = arguments[0];
    }
  }
  
  
  /**
  * sets the flag whether or not to use the cpaint api on the backend.
  *
  * @access    public
  * @param     boolean    cpaint_api      api_flag
  * @return    void
  */
  this.set_use_cpaint_api = function() {
    if (typeof arguments[0] == 'boolean') {
      config['use_cpaint_api'] = arguments[0];
    }
  }
  
  /**
  * tests whether one of the necessary implementations
  * of the XMLHttpRequest class are available
  *
  * @access     protected
  * @return     boolean
  */
  function test_ajax_capability() {
    var cpc = new cpaint_call(0);
    
    return cpc.test_ajax_capability();
  }

  /**
  * takes the arguments supplied and triggers a call to the CPAINT backend
  * based on the settings.
  *
  * upon response cpaint_call.callback() will automatically be called
  * to perform post-processing operations.
  *
  * @access   public
  * @param    string    url                 remote URL to call
  * @param    string    remote_method       remote method to call
  * @param    object    client_callback     client side callback method to deliver the remote response to. do NOT supply a string!
  * @param    mixed     argN                remote parameters from now on
  * @return   void
  */
  this.call = function() {
    var use_stack = -1;
    
    if (config['persistent_connection'] == true
      && typeof __cpaint_stack[0] == 'object') {

      switch (__cpaint_stack[0].get_http_state()) {
        case -1:
          // no XMLHttpObject object has already been instanciated
          // create new object and configure it
          use_stack = 0;
          debug('no XMLHttpObject object to re-use for persistence, creating new one later', 2);
          break;
          
        case 4:
          // object is ready for a new request, no need to do anything
          use_stack = 0
          debug('re-using the persistent connection', 2);
          break;
          
        default:
          // connection is currently in use, don't do anything
          debug('the persistent connection is in use - skipping this request', 2);
      }
      
    } else if (config['persistent_connection'] == true) {
      // persistent connection is active, but no object has been instanciated
      use_stack = 0;
      __cpaint_stack[use_stack] = new cpaint_call(use_stack);
      debug('no cpaint_call object available for re-use, created new one', 2);
    
    } else {
      // no connection persistance
      use_stack = stack_count;
      __cpaint_stack[use_stack] = new cpaint_call(use_stack);
      debug('no cpaint_call object created new one', 2);
    }

    // configure cpaint_call if allowed to
    if (use_stack != -1) {
      __cpaint_stack[use_stack].set_debug(config['debugging']);
      __cpaint_stack[use_stack].set_proxy_url(config['proxy_url']);
      __cpaint_stack[use_stack].set_transfer_mode(config['transfer_mode']);
      __cpaint_stack[use_stack].set_async(config['async']);
      __cpaint_stack[use_stack].set_response_type(config['response_type']);
      __cpaint_stack[use_stack].set_persistent_connection(config['persistent_connection']);
      __cpaint_stack[use_stack].set_use_cpaint_api(config['use_cpaint_api']);
      __cpaint_stack[use_stack].set_client_callback(arguments[2]);
      
      // distribute according to proxy use
      if (config['proxy_url'] != '') {
        __cpaint_stack[use_stack].call_proxy(arguments);
      
      } else {
        __cpaint_stack[use_stack].call_direct(arguments);
      }

      // increase stack counter
      stack_count++;
      debug('stack size: ' + __cpaint_stack.length, 2);
    }
  }

  /**
  * debug method
  *
  * @access  protected
  * @param   string       message         the message to debug
  * @param   integer      debug_level     debug level at which the message appears
  * @return  void
  */
  var debug  = function(message, debug_level) {
    if (config['debugging'] >= debug_level) {
      alert('[CPAINT Debug] ' + message);
    }
  }
}

/**
* internal FIFO stack of cpaint_call() objects.
*
* @access   protected
* @var      array    __cpaint_stack
*/
var __cpaint_stack = new Array();

/**
* local instance of cpaint_transformer
* MSIE is unable to handle static classes... sheesh.
*
* @access   public
* @var      object    __cpaint_transformer
*/
var __cpaint_transformer = new cpaint_transformer();

/**
* transport agent class
*
* creates the request object, takes care of the response, handles the 
* client callback. Is configured by the cpaint() object.
*
* @package      CPAINT
* @access       public
* @copyright    Copyright (c) 2005 Paul Sullivan, Dominique Stender - http://cpaint.sourceforge.net
* @author       Dominique Stender <dstender@st-webdevelopment.de>
* @author       Paul Sullivan <wiley14@gmail.com>
* @param        integer     stack_id      stack Id in cpaint
* @version      2.0.0
*/
function cpaint_call() {
  /**
  * whether or not debugging is used.
  *
  * @access   public
  * @var      boolean    debugging
  */
  var debugging   = false;


  /**
  * XMLHttpObject used for this request.
  *
  * @access   protected
  * @var      object     httpobj
  */
  var httpobj    = false;

  /**
  * URL of the proxy script to use.
  * the proxy script is necessary only if data from remote domains is to be retrieved.
  *
  * @access   public
  * @var      string    proxy_url
  */
  var proxy_url    = '';

  /**
  * HTTP transfer mode.
  *
  * allowed values: (GET|POST), default is GET in respect to Operas deficiencies.
  *
  * @access   public 
  * @var      string    transfer_mode
  */  
  var transfer_mode  = 'GET';

  /**
  * configuration option whether request/response pairs
  * are meant to be performed synchronous or asynchronous.
  *
  * default is asynchronous, since synchronized calls aren't completely supported in most browsers.
  *
  * @access   public 
  * var       boolean    async
  */
  var async    = true;

  /**
  * response type (TEXT|XML|OBJECT).
  *
  * @access   public 
  * @var      string  response_type
  */
  var response_type  = 'OBJECT';

  /**
  * whether or not to use a persistent connection
  * to the server side.
  *
  * default is false (new connection on every call).
  *
  * @access   public 
  * @var      boolean    persistent_connection
  */
  var persistent_connection  = false;
  
  /**
  * whether or not to use the cpaint api on the backend
  *
  * default is true (uses cpaint api)
  *
  * @access    public
  * @var       boolean    cpaint_api
  */
  var use_cpaint_api = true;

  /**
  * client callback function.
  *
  * @access   public
  * @var      function    client_callback
  */
  var client_callback;

  /**
  * stores the stack Id within the cpaint object
  *
  * @access   protected
  * @var      stack_id
  */
  var stack_id = arguments[0];
  
  /**
  * switches debug mode on/off (0|1|2).
  *
  * @access   public
  * @param    integer    debug    debug flag
  * @return   void
  */
  this.set_debug = function() {
    
    if (typeof arguments[0] == 'number') {
      debugging = Math.round(arguments[0]);
    }
  }

  /**
  * defines the URL of the proxy script.
  *
  * @access   public
  * @param    string    proxy_url    URL of the proxyscript to connect
  * @return   void
  */
  this.set_proxy_url = function() {
    
    if (typeof arguments[0] == 'string') {
      proxy_url = arguments[0];
    }
  }

  /**
  * sets the transfer_mode (GET|POST).
  *
  * @access   public
  * @param    string    transfer_mode    transfer_mode
  * @return   void
  */
  this.set_transfer_mode = function() {
    
    if (arguments[0].toUpperCase() == 'GET'
      || arguments[0].toUpperCase() == 'POST') {

      transfer_mode = arguments[0].toUpperCase();
    }
  }

  /**
  * sets the flag whether or not to use asynchronous calls.
  *
  * @access   public
  * @param    boolean    async    syncronization flag
  * @return   void
  */
  this.set_async = function() {
    
    if (typeof arguments[0] == 'boolean') {
      async = arguments[0];
    }
  }

  /**
  * defines the response type.
  *
  * allowed values are:
  *   TEXT    = raw text response
  *   XML     = raw XMLHttpObject
  *   OBJECT  = parsed JavaScript object structure
  *
  * default is OBJECT.
  *
  * @access   public
  * @param    string    response_type    response type
  * @return   void
  */
  this.set_response_type = function() {
    
    if (arguments[0].toUpperCase() == 'TEXT'
      || arguments[0].toUpperCase() == 'XML'
      || arguments[0].toUpperCase() == 'OBJECT') {

      response_type = arguments[0].toUpperCase();
    }
  }

  /**
  * sets the flag whether or not to use a persistent connection.
  *
  * @access   public
  * @param    boolean    persistent_connection    persistance flag
  * @return   void
  */
  this.set_persistent_connection = function() {
    
    if (typeof arguments[0] == 'boolean') {
      persistent_connection = arguments[0];
    }
  }
  
  /**
  * sets the flag whether or not to use the cpaint api on the backend.
  *
  * @access    public
  * @param    boolean    cpaint_api      api_flag
  * @return    void
  */
  this.set_use_cpaint_api = function() {
    if (typeof arguments[0] == 'boolean') {
      use_cpaint_api = arguments[0];
    }
  }

  /**
  * sets the client callback function.
  *
  * @access   public
  * @param    function    client_callback     the client callback function
  * @return   void
  */
  this.set_client_callback = function() {
    
    if (typeof arguments[0] == 'function') {
      client_callback = arguments[0];
    }
  }

  /**
  * returns the ready state of the internal XMLHttpObject
  *
  * if no such object was set up already, -1 is returned
  * 
  * @access     public
  * @return     integer
  */
  this.get_http_state = function() {
    var return_value = -1;
    
    if (typeof httpobj == 'object') {
      return_value = httpobj.readyState;
    }
    
    return return_value;
  }
  
  /**
  * internal method for remote calls to the local server without use of the proxy script.
  *
  * @access   public
  * @param    array    call_arguments    array of arguments initially passed to cpaint.call()
  * @return   void
  */
  this.call_direct = function(call_arguments) {
    var url             = call_arguments[0];
    var remote_method   = call_arguments[1];
    var querystring     = '';
    var i               = 0;
    
    // correct link to self
    if (url == 'SELF') {
      url = document.location.href;
    }
  
    if (use_cpaint_api == true) {
      // backend uses cpaint api
      // pass parameters to remote method
      for (i = 3; i < call_arguments.length; i++) {
        querystring += '&cpaint_argument[]=' + encodeURIComponent(call_arguments[i]);
      }
    
      // add response type to querystring
      querystring += '&cpaint_response_type=' + response_type;
    
      // build header
      if (transfer_mode == 'GET') {
        url = url + '?cpaint_function=' + remote_method + querystring;
    
      } else {
        querystring = 'cpaint_function=' + remote_method + querystring;
      }
      
    } else {
      // backend does not use cpaint api
      // pass parameters to remote method
      for (i = 3; i < call_arguments.length; i++) {
        
        if (i == 3) {
          querystring += encodeURIComponent(call_arguments[i]);
        
        } else {
          querystring += '&' + encodeURIComponent(call_arguments[i]);
        }
      }
    
      // build header
      if (transfer_mode == 'GET') {
        url = url + querystring;
      } 
    }
  
    // open connection 
    get_connection_object();

    // open connection to remote target
    debug('opening connection to "' + url + '"', 1);
    httpobj.open(transfer_mode, url, async);

    // send "urlencoded" header if necessary (if POST)
    if (transfer_mode == "POST") {

      try {
        httpobj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

      } catch (cp_err) {
        alert('ERROR! POST cannot be completed due to incompatible browser.  Use GET as your request method.');
      }
    }

    // callback handling for asynchronous calls
    httpobj.onreadystatechange = callback;

    // send content
    if (transfer_mode == 'GET') {
      httpobj.send(null);

    } else {
      debug('sending query: ' + querystring, 1);
      httpobj.send(querystring);
    }

    if (async == false) {
      // manual callback handling for synchronized calls
      callback();
    }
  }
  
  
  /**
  * internal method for calls to remote servers through the proxy script.
  *
  * @access   public
  * @param    array    call_arguments    array of arguments passed to cpaint.call()
  * @return   void
  */
  this.call_proxy = function(call_arguments) {
    var proxyscript     = proxy_url;
    var url             = call_arguments[0];
    var remote_method   = call_arguments[1];
    var querystring     = '';
    var i               = 0;
    
    var querystring_argument_prefix = 'cpaint_argument[]=';

    // pass parameters to remote method
    if (use_cpaint_api == false) {
      // when not talking to a CPAINT backend, don't prefix arguments
      querystring_argument_prefix = '';
    }

    for (i = 3; i < call_arguments.length; i++) {
      querystring += encodeURIComponent(querystring_argument_prefix + call_arguments[i] + '&');
    }

    if (use_cpaint_api == true) {
      // add remote function name to querystring
      querystring += encodeURIComponent('&cpaint_function=' + remote_method);
  
      // add response type to querystring
      querystring += encodeURIComponent('&cpaint_responsetype=' + response_type);
    }
    
    // build header
    if (transfer_mode == 'GET') {
      proxyscript += '?cpaint_remote_url=' + encodeURIComponent(url) 
        + '&cpaint_remote_query=' + querystring
        + '&cpaint_remote_method=' + transfer_mode 
        + '&cpaint_response_type=' + response_type;

    } else {
      querystring = 'cpaint_remote_url=' + encodeURIComponent(url)
        + '&cpaint_remote_query=' + querystring
        + '&cpaint_remote_method=' + transfer_mode 
        + '&cpaint_response_type=' + response_type;
    }

    // open connection
    get_connection_object();

    // open connection to remote target
    debug('opening connection to proxy "' + proxyscript + '"', 1);
    httpobj.open(transfer_mode, proxyscript, async);

    // send "urlencoded" header if necessary (if POST)
    if (transfer_mode == "POST") {

      try {
        httpobj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

      } catch (cp_err) {
        alert('[CPAINT Error] POST cannot be completed due to incompatible browser.  Use GET as your request method.');
      }
    }

    // callback handling for asynchronous calls
    httpobj.onreadystatechange = callback;

    // send content
    if (transfer_mode == 'GET') {
      httpobj.send(null);

    } else {
      debug('sending query: ' + querystring, 1);
      httpobj.send(querystring);
    }

    if (async == false) {
      // manual callback handling for synchronized calls
      callback();
    }
  }

  this.test_ajax_capability = function() {
    return get_connection_object();
  }
  
  /**
  * creates a new connection object.
  *
  * @access   protected
  * @return   boolean
  */
  var get_connection_object = function() {
    var return_value    = false;
    var new_connection  = false;

    // open new connection only if necessary
    if (persistent_connection == false) {
      // no persistance, create a new object every time
      debug('Using new connection object', 1);
      new_connection = true;

    } else {
      // persistent connection object, only open one if no object exists
      debug('Using shared connection object.', 1);

      if (typeof httpobj != 'object') {
        debug('Getting new persistent connection object.', 1);
        new_connection = true;
      }
    }

    if (new_connection == true) {
      try {
        httpobj = new ActiveXObject('Msxml2.XMLHTTP');
  
      } catch (e) {
        
        try {  
          httpobj = new ActiveXObject('Microsoft.XMLHTTP');
  
        } catch (oc) {
          httpobj = null;
        } 
      }
  
      if (!httpobj && typeof XMLHttpRequest != 'undefined') {
        httpobj = new XMLHttpRequest();
      }
  
      if (!httpobj) {
        //alert('[CPAINT Error] Could not create connection object');
        return false;
      } else {
        return_value = true;
      }
    }

    // @todo: problem with asynchronous calls?
    if (httpobj.readyState != 4) {
      httpobj.abort();
    }

    return return_value;
  }

  /**
  * internal callback function.
  *
  * will perform some consistency checks (response code, NULL value testing)
  * and if response_type = 'OBJECT' it will automatically call
  * cpaint_call.parse_ajax_xml() to have a JavaScript object structure generated.
  *
  * after all that is done the client side callback function will be called 
  * with the generated response as single value.
  *
  * @access   protected
  * @return   void
  */
  var callback = function() {
    var response = null;

    if (httpobj.readyState == 4) {
      debug(httpobj.responseText, 1);
  
      // fetch correct response
      switch (response_type) {
        case 'XML':
          response = __cpaint_transformer.xml_conversion(httpobj.responseXML);
          break;
          
        case 'OBJECT':
          response = __cpaint_transformer.object_conversion(httpobj.responseXML);
          break;
        
        case 'TEXT':
          response = __cpaint_transformer.text_conversion(httpobj.responseText);
          break;
          
        default:
          alert('[CPAINT Error] invalid response type \'' + response_type + '\'');
      }
      
      // call client side callback
      if (response != null 
        && typeof client_callback == 'function') {
        client_callback(response, httpobj.responseText);
      }
      
      // remove ourselves from the stack
      remove_from_stack();
    }
  }

  /**
  * removes an entry from the stack
  *
  * @access     protected
  * @return     void
  */
  var remove_from_stack = function() {
    // remove only if everything is okay and we're not configured as persistent connection
    if (typeof stack_id == 'number'
      && __cpaint_stack[stack_id]
      && persistent_connection == false) {
      
      __cpaint_stack[stack_id] = null;
    }
  }

  /**
  * debug method
  *
  * @access  protected
  * @param   string       message         the message to debug
  * @param   integer      debug_level     debug level at which the message appears
  * @return  void
  */
  var debug  = function(message, debug_level) {

    if (debugging >= debug_level) {
      alert('[CPAINT Debug] ' + message);
    }
  }
}

/**
* CPAINT transformation object
*
* @package      CPAINT
* @access       public
* @copyright    Copyright (c) 2005 Paul Sullivan, Dominique Stender - http://cpaint.sourceforge.net
* @author       Paul Sullivan <wiley14@gmail.com>
* @author       Dominique Stender <dstender@st-webdevelopment.de>
* @version      2.0.0
*/
function cpaint_transformer() {

  /**
  * will take a XMLHttpObject and generate a JavaScript
  * object structure from it.
  *
  * is internally called by cpaint_call.callback() if necessary.
  * will call cpaint_call.create_object_structure() to create nested object structures.
  *
  * @access   public
  * @param    object    xml_document  a XMLHttpObject
  * @return   object
  */
  this.object_conversion = function(xml_document) {
    var return_value  = new cpaint_result_object();
    var i             = 0;
    var firstNodeName = '';
    
    if (typeof xml_document == 'object'
      && xml_document != null) {

      // find the first element node - for MSIE the <?xml?> node is the very first...
      for (i = 0; i < xml_document.childNodes.length; i++) {

        if (xml_document.childNodes[i].nodeType == 1) {
          firstNodeName = xml_document.childNodes[i].nodeName;
          break;
        }
      }
      
      var ajax_response = xml_document.getElementsByTagName(firstNodeName);

      return_value[firstNodeName] = new Array();
    
      for (i = 0; i < ajax_response.length; i++) {
        var tmp_node = create_object_structure(ajax_response[i]);
        tmp_node.id  = ajax_response[i].getAttribute('id')
        return_value[firstNodeName].push(tmp_node);
      }

    } else {
      alert('[CPAINT Error] received invalid XML response');
    }

    return return_value;
  }

  /**
  * performs the necessary conversions for the XML response type

  *
  * @access   public
  * @param    object    xml_document  a XMLHttpObject
  * @return   object
  */
  this.xml_conversion = function(xml_document) {
    return xml_document;
  }
  
  /**
  * performs the necessary conversions for the TEXT response type
  *
  * @access   public
  * @param    string    text_document  the response text
  * @return   string
  */
  this.text_conversion = function(text) {
    return decode(text);
  }
  
  /**
  * this method takes a HTML / XML node object and creates a
  * JavaScript object structure from it.
  *
  * @access   public
  * @param    object    stream    a node in the XML structure
  * @return   object
  */
  var create_object_structure = function(stream) {
    var return_value = new cpaint_result_object();
    var node_name = '';
    var i         = 0;
    var attrib    = 0;
    
    if (stream.hasChildNodes() == true) {
      for (i = 0; i < stream.childNodes.length; i++) {
  
        node_name = decode(stream.childNodes[i].nodeName);
        node_name = node_name.replace(/[^a-zA-Z0-9]*/g, '');
        
        // reset / create subnode
        if (typeof return_value[node_name] != 'object') {
          return_value[node_name] = new Array();
        }
        
        if (stream.childNodes[i].nodeType == 1) {
          var tmp_node  = create_object_structure(stream.childNodes[i]);

          for (attrib = 0; attrib < stream.childNodes[i].attributes.length; attrib++) {
            tmp_node.set_attribute(decode(stream.childNodes[i].attributes[attrib].nodeName), decode(stream.childNodes[i].attributes[attrib].nodeValue));
          }
          
          return_value[node_name].push(tmp_node);
        
        } else if (stream.childNodes[i].nodeType == 3) {
          return_value.data  = decode(stream.firstChild.data);
        }
      }
    }
    
    return return_value;
  }

  /**
  * converts an encoded text back to viewable characters.
  *
  * @access     public
  * @param      string      rawtext     raw text as provided by the backend
  * @return     mixed
  */
  var decode = function(rawtext) {
    var plaintext = ''; 
    var i         = 0; 
    var c1        = 0;
    var c2        = 0;
    var c3        = 0;
    var u         = 0;
    var t         = 0;

    // remove special JavaScript encoded non-printable characters
    while (i < rawtext.length) {
      if (rawtext.charAt(i) == '\\'
        && rawtext.charAt(i + 1) == 'u') {
        
        u = 0;
        
        for (j = 2; j < 6; j += 1) {
          t = parseInt(rawtext.charAt(i + j), 16);
          
          if (!isFinite(t)) {
            break;
          }
          u = u * 16 + t;
        }

        plaintext += String.fromCharCode(u);
        i       += 6;
      
      } else {
        plaintext += rawtext.charAt(i);
        i++;
      }
    }

    // convert numeric data to number type
    if (plaintext !== ''
      && !isNaN(plaintext) 
      && isFinite(plaintext)) {
      
      plaintext = Number(plaintext);
    }
  
    return plaintext;
  }
}

/**
* this is the basic prototype for a cpaint node object
* as used in cpaint_call.parse_ajax_xml()
*
* @package      CPAINT
* @access       public
* @copyright    Copyright (c) 2005 Paul Sullivan, Dominique Stender - http://cpaint.sourceforge.net
* @author       Paul Sullivan <wiley14@gmail.com>
* @author       Dominique Stender <dstender@st-webdevelopment.de>
* @version      2.0.0
*/
function cpaint_result_object() {
  this.id           = 0;
  this.data         = 0;
  var __attributes  = new Array();
  
  /**
  * Returns a subnode with the given type and id.
  *
  * @access     public
  * @param      string    type    The type of the subnode. Equivalent to the XML tag name.
  * @param      string    id      The id of the subnode. Equivalent to the XML tag names id attribute.
  * @return     object
  */
  this.find_item_by_id = function() {
    var return_value  = null;
    var type    = arguments[0];
    var id      = arguments[1];
    var i       = 0;
    
    if (this[type]) {

      for (i = 0; i < this[type].length; i++) {

        if (this[type][i].get_attribute('id') == id) {
          return_value = this[type][i];
          break;
        }
      }
    }

    return return_value;
  }
  
  /**
  * retrieves the value of an attribute.
  *
  * @access   public
  * @param    string    name    name of the attribute
  * @return   mixed
  */
  this.get_attribute = function() {
    var return_value  = null;
    var id            = arguments[0];
    
    if (typeof __attributes[id] != 'undefined') {
      return_value = __attributes[id];
    }
    
    return return_value;
  }
  
  /**
  * assigns a value to an attribute.
  *
  * if that attribute does not exist it will be created.
  *
  * @access     public
  * @param      string    name    name of the attribute
  * @param      string    value   value of the attribute
  * @return     void
  */
  this.set_attribute = function() {
    __attributes[arguments[0]] = arguments[1];
  }
}


eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[(function(e){return d[e]})];e=(function(){return'\\w+'});c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('e A={p:9(a){5!(/[^\\t\\n\\r ]/.z(a.4))},b:9(a){5(a.o==8)||((a.o==3)&&c.p(a))},C:9(6){h((6=6.q)){7(!c.b(6))5 6}5 i},D:9(6){h((6=6.k)){7(!c.b(6))5 6}5 i},F:9(d){e 2=d.G;h(2){7(!c.b(2))5 2;2=2.q}5 i},H:9(d){e 2=d.u;h(2){7(!c.b(2))5 2;2=2.k}5 i},v:9(d){e f=d.u;e 2=w y();h(f){7(!c.b(f))2[2.j]=f;f=f.k}7(2.j>0){5 2}B{5 i}},E:9(m){e 4=m.4;4=4.x(/[\\t\\n\\r ]+/g," ");7(4.s(0)==" ")4=4.l(1,4.j);7(4.s(4.j-1)==" ")4=4.l(0,4.j-1);5 4}}',44,44,'||res||data|return|sib|if||function|nod|is_ignorable|this|par|var|child||while|null|length|nextSibling|substring|txt||nodeType|is_all_ws|previousSibling||charAt||firstChild|children|new|replace|Array|test|NiceDOM|else|node_before|node_after|data_of|last_child|lastChild|first_child'.split('|'),0,{}))





eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[(function(e){return d[e]})];e=(function(){return'\\w+'});c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('2r=(7.4g&&!7.4h&&!4d.4b);1w={14:v,1t:9(){6.14=C 12();A 6.14},2t:9(32,17){6.14.2L(\'/12-q/12-q.2D\',\'4e\',17,32)},2Q:9(33,3b,35,17){6.14.2L(\'/12-q/12-q.2D\',\'4k\',17,33,3b,35)}};36=1w.1t();1y=36.4o;8 K={u:"4p",1l:"4q",I:s,h:v,39:40,28:20,1t:9(){8 1m=7.B("1n");8 1v=7.B("1G");1v.P="1s";8 V=7.B("a");V.1g="#";V.18="34 31";V.1E=9(){A s};1B=7.B("2a");2j=7.2b("34");1B.t(2j);V.t(1B);1v.t(V);1m.t(1v);8 1f=7.B("1G");1f.P="1i";8 R=7.B("a");R.1g="#";R.18="2c 31";R.1E=9(){A s};1x=7.B("2a");2d=7.2b("2c");1x.t(2d);R.t(1x);1f.t(R);1m.t(1f);2e=7.d("3e-Y");2e.t(1m);8 1X=7.d("1s").l("a")[0];8 1A=7.d("1i").l("a")[0];1q(1X,\'2R\',9(){K.1S("1k")});1q(1A,\'2R\',9(){K.1S("13")});1q(1X,\'2M\',9(){K.1T("1k")});1q(1A,\'2M\',9(){K.1T("13")});o=7.B("29");o.P="3g";o.m.3h="3i(\'/3Z-2C/3j/3X/3k/2N.3V\') 0 0 3m-3o";o.m.1d="1C";o.m.2x="2p";o.m.3p="-3R 0 0 -3Q";o.m.22="2l%";o.m.13="2l%";o.m.2n="3s";o.m.2q="3t";7.d("1F").t(o);1D=7.d("1F").l("3u")[0].l("J")[0];1L=7.d("1F").l("3v")[1].l("J")[0];2B=7.d("3w");1P=7.d("2m");1N=7.d("2m").l("a")[0];8 Y=7.d(6.u);8 G=Y.l("1G");Y.m.2n=(G.y*3x)+((G.y)*11)+"3y";Y.m.2x="2p";7.d(6.1l).m.2q="3B";6.1u();b(1y&&!2r){1o(8 i=0;i<G.y;i++){19=G[i].l("a")[0];19.1g="/#"+G[i].P;I=s;b(3D(19)!="3E"){19.1E=9(){8 J=6.l("J")[0];8 1R=(2G(J,"22",Q)<0)?0:-2I;b(!I&&1R!=0){C L.2H(o,{N:0.3});2u=6.3H.P.3I("3K")[1];1w.2t(2u,9(Z){x=Z.3c[0];1D.2y=x.3L[0].q;1D.2i=x.18[0].q;1L.2y=x.3O[0].q;1L.2i=x.18[0].q;2B.1I=x.2C[0].q;b(x.1O[0].q!=""){1P.m.1d="3S";1N.1g=x.1O[0].q;1N.1I=x.1O[0].q}r{1P.m.1d="1C"};C L.3U(o,{N:0.5})});1o(8 j=0;j<G.y;j++){8 27=G[j].l("a")[0];8 24=27.l("J")[0];b(27!=6&&2G(24,"22",Q)<0){C L.2J(24,2I,0,{N:0.5})}}C L.2J(J,1R,0,{N:0.5,3Y:9(){I=Q},25:9(){I=s}})};6.41();A s}}}}},1S:9(S){2w("K.1u();",42);b(S=="1k"){6.h=-(1j(6.u)-1j(6.1l))}r b(S=="13"){6.h=0}r A s;6.1Q()},1T:9(S){8 16=44;8 c=1Y(1Z(6.u),10);b(S=="1k"){((c-16)<=6.h)?v:6.h=(c-16)}r b(S=="13"){((c+16)>6.h)?v:6.h=(c+16)}r A s},1u:9(){8 c=1Y(1Z(6.u),10);8 2T=-(1j(6.u)-1j(6.1l));8 2S=0;7.d("1i").g="";7.d("1s").g="";b(c==2S){7.d("1i").g="2V"}r b(c==2T){7.d("1s").g="2V"}},1Q:9(){b(6.I){8 c=1Y(1Z(6.u),10);b(c<6.h){8 T=1h.49(c+((6.h-c)/1h.2Y(6.28-((c-6.h)/30))));b(T>=(6.h-1)){1r(6.u,6.h,0)}r{1r(6.u,T,0)}}r b(c>6.h){8 T=1h.4a(c-((c-6.h)/1h.2Y(6.28-((c-6.h)/30))));b(T<=(6.h+1)){1r(6.u,6.h,0)}r{1r(6.u,T,0)}};b(c==6.h){4i(6.1a);6.I=s;6.1a=v;6.1u()}}r{6.I=Q;6.1a=4n("K.1Q()",6.39)}}};W={U:v,26:v,H:v,D:v,f:v,1t:9(){6.U=7.d("2h").l("29")[0];6.26=7.d("2h");6.H=7.d("H");6.D=7.d("e-1V");6.f=7.d("f");6.26.3d=9(){b(!W.2A())A s;b(1y){W.2f();A s}};6.H.21=9(){6.g="M"};6.D.21=9(){6.g="M"};6.f.21=9(){6.g=""}},2f:9(){b(7.d("O")){6.U.1M(7.d("O"))};6.15("2o f 1p 3f 1b.<1K />23 2N...","1b");1w.2Q(6.D.F,"3l 1W 3n","2K:\\n"+6.H.F+"\\n\\3q-1V:\\n"+6.D.F+"\\n\\3r:\\n"+6.f.F,9(Z){x=Z.3c[0].Z[0].q;b(7.d("O")){W.U.1M(7.d("O"))};b(x=="Q"){W.15("2o f 2k 3z 1b. 3A!","1b")}r{W.15("3F 3G 3J k 2k 3M! 23 3N 3P!","k")}})},2A:9(){b(7.d("O")){6.U.1M(7.d("O"))};8 2U=C 3T("^[\\\\w\\.=-]+@[\\\\w\\\\.-]+\\\\.[a-z]{2,4}$");6.H.g="M";6.D.g="M";6.f.g="M";8 k=3W();b(6.H.F==""){k[k.y]="2K 1p 2Z";6.H.g="M k"};b(6.D.F==""||!2U.43(6.D.F)){k[k.y]="E-1V 45 1p 46";6.D.g="M k"};b(6.f.F==""){k[k.y]="48 1p 2Z";6.f.g="k"};b(k.y>0){8 1J="23 4c 4f 4j 4l:<1K />";1o(8 i=0;i<k.y;i++){1J+="- "+k[i]+"<1K />"};6.15(1J,"k");A s}r{A Q}},15:9(2v,2s){8 f=7.B("p");f.g="f";f.P="O";f.m.1d="1C";8 1e=7.B("3C");1e.g=2s;1e.1I=2v;f.t(1e);6.U.t(f);C L.2H(f)}};2E=9(N){8 1n=7.d("1U").l("1n")[0];8 X=1z.47(1n);1o(8 i=0;i<X.y;i++){b(X[i].g=="2z"){8 1c=X[i];4m}};b(1z.2P(1c)!=v){8 1H=1z.2P(1c)}r{8 1H=X[0]};8 37=2F.2O({1W:1.0,2W:0.0,25:9(2g){1c.g="";1H.g="2z";8 2X=2F.2O({1W:0.0,2W:1.0,25:9(2g){1a=2w("2E("+N+")",N)}},38[1]||{});C L.3a("1U",2X)}},38[1]||{});C L.3a("1U",37)};',62,275,'||||||this|document|var|function||if||getElementById||message|className|targetX|||error|getElementsByTagName|style||loaderDiv||data|else|false|appendChild|scrollerID|null||response|length||return|createElement|new|email||value|listItems|name|running|img|FS|Effect|text|duration|stateMessage|id|true|newerA|sDirection|newX|parentElement|olderA|Mailer|items|list|result|||cpaint|left|cp|CreateInfo|slack|callback|title|myLink|timer|sent|currentItem|display|messageInner|newerLI|href|Math|newer|xWidth|right|scrollerParentID|navList|ul|for|is|xAddEventListener|xMoveTo|older|Init|HandleButtons|olderLI|Ajax|newerSPAN|AjaxCapable|NiceDOM|newerLink|olderSPAN|none|rLogo|onclick|horizontal_scroll|li|nextItem|innerHTML|textNode|br|rScreenshot|removeChild|rSiteLink|site|rSite|Scroll|newT|Start|End|testimonials|mail|from|olderLink|parseInt|xOffsetLeft||onkeydown|top|Please|otherImg|afterFinish|form|link|tween|div|span|createTextNode| |newerTXT|NavParent|Send|effect|contactForm|alt|olderTXT|has|50|rSiteSpan|width|Your|absolute|height|ie50|sClass|GetPost|projectID|sContent|setTimeout|position|src|current|Validate|rDesc|content|php|rotateTestimonials|Object|xGetComputedStyle|Appear|65|MoveBy|Name|call|mouseup|wait|extend|node_after|SendMessage|mousedown|start|end|rx|inactive|to|innerOptions|abs|empty|500| |iPostID|sFrom| |sMessage|AjaxObject|options|arguments|interval|Opacity|sSubject|ajaxResponse|onsubmit|h_scroll|being|loader|background|url|themes|images|Contact|no|WWW|repeat|margin|nE|nMessage|32px|31px|dt|dd|rContent|61|px|been|Thanks|200px|strong|typeof|undefined|Some|kind|parentNode|split|of|_|logo|occured|try|screenshot|again|16px|51px|inline|RegExp|Fade|gif|Array|helldesign|beforeStart|wp||blur|100|test|200|address|malformed|children|Message|ceil|floor|opera|correct|window|cp_get_post|the|all|fireEvent|clearInterval|following|cp_send_message|errors|break|setInterval|capable|scrollerBar|mask'.split('|'),0,{}))

