/* SWFObject v2.1 <http://code.google.com/p/swfobject/>
	Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
	This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return }if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return }}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return }var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in swfobject){swfobject[q]=null}swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return }var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return }AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}();function showCalc(w,h) 
{
 window.name="main";
 w = w ? w : 1000;
 h = h ? h : 282;
 window.open("/calc","calc",
    "width="+w+",height="+h+",toolbar=no,scrollbars=no,location=no,statusbar=no,menubar=no,resizable=yes,centerscreen=yes");
}
// Test of order entries, for the form and the calculator

var total_in_usd=0;
var discount=0;

function currentPaperType()
{
  return currentValue($('calc_order_paper_type')).replace(/\|.*$/,"");
}

function loadUrgency(type)
{
    s=$("calc_order_period");
    si=s.selectedIndex;
    s.childElements().invoke("remove");
    
    var deadlines = pricelist_types[type].deadline;
    
    var tpl = new Template('<option value="#{n}">#{time} #{units}</option>');
    s.insert($A(deadlines).collect(
      function(n)
      {
       var u=n.substr(0,1);
       var t=n.substr(1);
       return tpl.evaluate({time: leftZero(t,2), units: u=="d" ? "days" : "hours", n: n});
      }
    ).join(""));
    
    s.selectedIndex = si==-1 || si>=deadlines.length ? 0 : si;
}

function loadLevel(type) 
{
    s=$("calc_order_level");
    si = s.selectedIndex==-1 ? 0 : s.selectedIndex;
    s.childElements().invoke("remove");
    
    var levels = pricelist_types[type].level;
    
    var tpl = new Template('<option value="#{n}">#{n}</option>');
    s.insert($A(levels).collect(
      function(n)
      {
       return tpl.evaluate({n: n});
      }
    ).join(""));

    s.selectedIndex = si==-1 || si>=levels.length ? 0 : si;
}

function chgType()
{
    var typeEl = $("calc_order_paper_type");
    var type = currentPaperType();
    $("calc_order_paper_name").value = currentText(typeEl);
    loadLevel(type);
    loadUrgency(type);
    setSpecializedIfNeeded(); // set level to spec if needed
    calcTotal();
}

function chgUrg()
{
    var type = currentPaperType();
    var period = $('calc_order_period');
    var deadline = currentValue(period);
    var level = currentValue($('calc_order_level'));    

    if (!pricelist_types[type].table[deadline][level])
    { // no price for this combination!
      alert('Sorry, we cannot guarantee this urgency\nfor given type of document and level');
      var dl = pricelist_types[type].deadline;
      var here = $A(dl).indexOf(deadline);
      for(var i=here; i>=0; i--) 
      {
        if (pricelist_types[type].table[dl[i]][level])
	{
	  period.selectedIndex=i;
	  break;
	}
      }
    }
    calcTotal();
				/*
				// update dd
				dd = new Date();
				tt = dd.getTime();

				dhours = f['calc_order_period'].options[f['calc_order_period'].selectedIndex].value;
				if (dhours != 12 && dhours != 24 && dhours != 48)
					dhours *= 24;

				tt += dhours*60*60*1000+60*60*1000;
				tt = format_dd (tt);
				dde = document.getElementById ('deadline_date');
				if (dde)
					dde.value = tt;
				*/
}

function chgMajor()
{
  setSpecializedIfNeeded();
  calcTotal();
}

function chgLevel()
{
    var type = currentPaperType();
    var deadline = currentValue($('calc_order_period'));
    var lev = $("calc_order_level");
    var level = currentValue(lev);
    
    if (setSpecializedIfNeeded())
    {
      alert ('Study Level with the selected Subject can only be Specialized');
    }

    if (!pricelist_types[type].table[deadline][level])
    { // no price for this combination!
        alert('Sorry, we cannot guarantee this level\nfor given type of document and urgency');
	var levels = pricelist_types[type].level;
        var here = $A(levels).indexOf(level);
        for(var i=here; i>=0; i--) 
        {
          if ( pricelist_types[type].table[deadline][levels[i]] )
	  {
	    lev.selectedIndex=i;
	    break;
	  }
        }
    }
    calcTotal();
}

function chgSpacing()
{
 calcTotal();
}
	
function calcTotal()
{
    var total = 0;
    
    var type = currentPaperType();
    var period = $('calc_order_period');
    var deadline = currentValue(period);
    var level = currentValue($('calc_order_level'));
    var currency = currentValue($('calc_order_currency'));
    var pages = currentValue($('calc_order_page_count'));
    var spacing = currentValue($("calc_order_spacing"));
    
    var price = pricelist_types[type].table[deadline][level];
    if (!price)
    {
     // Нарвались на null
     alert('Sorry, we cannot guarantee to deliver this type of document with given level in such a short time');
     
     var dl = pricelist_types[type].deadline;
     var here = $A(dl).indexOf(deadline);
     for(var i=here; i>=0; i--) 
     {
        if (price=pricelist_types[type].table[dl[i]][level])
	{
	  period.selectedIndex=i;
	  break;
	}
     }
    }

    var sp = spacing=="double" ? 1 : 2;    
    total_in_usd = pages * price * sp;
    total =  total_in_usd * pricelist_currency[currency];
    
    if (!discount) 
    { 
      discount=0;
    }
    var total_discounted = total*(100-discount)/100;
    
    var yousave = $("you-save");
    // this block exists only on some pages
    if (yousave)
    {
      if (discount==0)
      {
        yousave.hide();
      }
      else
      {  
        $("you-save-amount").update((total*discount/100).toFixed(2));
        $('you-save-currency').update(currentText($('calc_order_currency')));
        yousave.show();
      }
    }
    
    $('calc_order_total').value=total_discounted.toFixed(2);
    
    changeWordCounter();
    
    // update info fields if present
    if ($("info_pageprice"))
    {
      $("info_pageprice").value = price;
      $("info_discount").value = discount;
    }
}

function changeWordCounter()
{
 var tw =  $("total_words");
 if (tw)
 {
  tw.update(currentValue($("calc_order_page_count")) * 275 * ($("calc_order_spacing").value=="double" ? 1 : 2));
 }
}

function isSpecialized()
{
 return currentValue($("calc_order_major")).charAt(0) == "+";
}

function setSpecializedIfNeeded()
{
  var lev=$("calc_order_level");
  if (currentValue(lev)!="Specialized" && isSpecialized())
  {
    var si = $A(lev.options).pluck("value").indexOf("Specialized");
    if (si!=-1)
    {
      lev.selectedIndex = si;
      return true;
    }
  }
  return false;
}

function setLevelDeadline(level,deadline)
{
 var levelEl = $("calc_order_level");
 var periodEl = $("calc_order_period"); 
 var type = currentPaperType();
 
 levelEl.selectedIndex = $A(pricelist_types[type].level).indexOf(level);
 periodEl.selectedIndex = $A(pricelist_types[type].deadline).indexOf(deadline);
 calcTotal();
}

function genNumberOptions(from,to)
{
 for (i = from; i <= to; i++) { document.write ('<option value="'+i+'">'+i+'</option>'); }
}
                        function isEmpty(str) {
   for (var i = 0; i < str.length; i++)
      if (" " != str.charAt(i))
          return false;
      return true;
          }

function checkform(f) {
                a="";
        for (var i = 0; i<f.elements.length; i++)        {
                if (("" != f.elements[i].getAttribute("required"))&(null != f.elements[i].getAttribute("required"))) {
                     //alert (f.elements[i].getAttribute("required").length);
if (f.elements[i].getAttribute("required") == "Email")
{
        if (!/\w+@\w+\.[a-zA-Z]{2,4}/.test(f.elements[i].value))
                                a += "Invalid email" + "\n";
}
else
{
        if (isEmpty(f.elements[i].value))
                a += f.elements[i].getAttribute("required")+ ": " + "empty" + "\n";
}
}
                  }
        if ("" != a)
        {
         alert("Something wrong!\n\n" + a);
         return false;
         }
         else
         {
                f.submit();
         }
}/* 
*  Copyright 2006 Dynamic Site Solutions.
*  Free use of this script is permitted for non-commercial applications,
*  subject to the requirement that this comment block be kept and not be
*  altered.  The data and executable parts of the script may be changed
*  as needed.  Dynamic Site Solutions makes no warranty regarding fitness
*  of use or correct function of the script.  Terms for use of this script
*  in commercial applications may be negotiated; for this, or for other
*  questions, contact "license-info@dynamicsitesolutions.com".
*
*  Script by: Dynamic Site Solutions -- http://www.dynamicsitesolutions.com/
*  Last Updated: 2006-09-29
*/

//IE5+/Win, Firefox, Netscape 6+, Opera 7+, Safari, Konqueror 3, IE5/Mac, iCab 3

var addBookmarkObj = {
  init:function() {
    if(!document.getElementById || !document.createTextNode) return;
    var cont=document.getElementById('bookmark');
    var contImg=document.getElementById('iconbookmark');
    if(!cont && !contImg) return;
	if (contImg) {
		var a=document.createElement('a');
		a.href=location.href;
		if(window.opera) {
		  a.rel='sidebar'; // this makes it work in Opera 7+
		} else {
		  // this doesn't work in Opera 7+ if the link has an onclick handler,
		  // so we only add it if the browser isn't Opera.
		  a.onclick=function() {
			addBookmarkObj.exec(this.href,this.title);
			return false;
		  }
		}
		var img=document.createElement('img');
		img.src="http://custom-writing.org/images/add to favourites.gif";
		img.alt="bookmark";
		a=contImg.appendChild(a);
		a.appendChild(img);
	}

	if (cont) {
		var a=document.createElement('a');
		a.href=location.href;
		if(window.opera) {
		  a.rel='sidebar'; // this makes it work in Opera 7+
		} else {
		  // this doesn't work in Opera 7+ if the link has an onclick handler,
		  // so we only add it if the browser isn't Opera.
		  a.onclick=function() {
			addBookmarkObj.exec(this.href,this.title);
			return false;
		  }
		}
		a=cont.appendChild(a);
		a.appendChild(document.createTextNode('Bookmark This Page'));
	}
  },
  exec:function(url, title) {
    var isKonq=(isLikelyKonqueror3 && isLikelyKonqueror3());
    var isMac=(navigator.userAgent.toLowerCase().indexOf('mac')!=-1);
    var buttonStr = isMac?'Command/Cmd':'CTRL';

    if(window.external && (!document.createTextNode ||
      (typeof(window.external.AddFavorite)=='unknown'))) {
        // IE4/Win generates an error when you
        // execute "typeof(window.external.AddFavorite)"
        // In IE7 the page must be from web server, not directly from a local 
        // file system, otherwise, you get a permission denied error.
        window.external.AddFavorite(url, title); // IE/Win
    } else if(isKonq) {
      alert('You need to press CTRL + B to bookmark our site.');
    } else if((window.opera && 
        opera.buildNumber && !isNaN(opera.buildNumber()))) {
          void(0); // do nothing here (Opera 7+)
    } else if(window.opera) { // older Opera
      alert('You need to press '+buttonStr+' + T to bookmark our site.');
    } else if(window.home) { // Netscape, iCab
      alert('You need to press '+buttonStr+' + D to bookmark our site.');
    } else if(!window.print || isMac) { // IE5/Mac and Safari 1.0
      alert('You need to press Command/Cmd + D to bookmark our site.');    
    } else {
      alert('In order to bookmark this site you need to do so manually '+
        'through your browser.');
    }
  }
}

function isLikelyKonqueror3() {
  if(!document.getElementById) return false;
  if(document.defaultCharset || window.opera || !window.print) return false;
  if(window.home) return false; // Konqueror doesn't support this but Firefox,
    // which has silent support for document.all when in Quirks Mode does
  if(document.all) return true; // Konqueror versions before 3.4
  var likely = 1;
  // testing for silent document.all support; try-catch used to keep it from
  // generating errors in other browsers.
  // try-catch causes errors in IE4 and NS4.x so we use the eval() to hide it.
  // try {
  //   var str=document.all[0].tagName;
  // } catch(err) { likely=0; }
  eval("try{var str=document.all[0].tagName;}catch(err){likely=0;}");
  return likely;
}

function dss_addEvent(el,etype,fn) {
  if(el.addEventListener && (!window.opera || opera.version) &&
  (etype!='load')) {
    el.addEventListener(etype,fn,false);
  } else if(el.attachEvent) {
    el.attachEvent('on'+etype,fn);
  } else {
    if(typeof(fn) != "function") return;
    if(typeof(window.earlyNS4)=='undefined') {
      // to prevent this function from crashing Netscape versions before 4.02
      window.earlyNS4=((navigator.appName.toLowerCase()=='netscape')&&
      (parseFloat(navigator.appVersion)<4.02)&&document.layers);
    }
    if((typeof(el['on'+etype])=="function")&&!window.earlyNS4) {
      var tempFunc = el['on'+etype];
      el['on'+etype]=function(e){
        var a=tempFunc(e),b=fn(e);
        a=(typeof(a)=='undefined')?true:a;
        b=(typeof(b)=='undefined')?true:b;
        return (a&&b);
      }
    } else {
      el['on'+etype]=fn;
    }
  }
}

dss_addEvent(window,'load',addBookmarkObj.init);

/*  Copyright Mihai Bazon, 2002-2005  |  www.bazon.net/mishoo
 * -----------------------------------------------------------
 *
 * The DHTML Calendar, version 1.0 "It is happening again"
 *
 * Details and latest version at:
 * www.dynarch.com/projects/calendar
 *
 * This script is developed by Dynarch.com.  Visit us at www.dynarch.com.
 *
 * This script is distributed under the GNU Lesser General Public License.
 * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
 */


/** The Calendar object constructor. */
Calendar = function (firstDayOfWeek, dateStr, onSelected, onClose) {
	this.activeDiv = null;
	this.currentDateEl = null;
	this.getDateStatus = null;
	this.getDateToolTip = null;
	this.getDateText = null;
	this.timeout = null;
	this.onSelected = onSelected || null;
	this.onClose = onClose || null;
	this.dragging = false;
	this.hidden = false;
	this.minYear = 1970;
	this.maxYear = 2050;
	this.dateFormat = Calendar._TT["DEF_DATE_FORMAT"];
	this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"];
	this.isPopup = true;
	this.weekNumbers = true;
	this.firstDayOfWeek = typeof firstDayOfWeek == "number" ? firstDayOfWeek : Calendar._FD; // 0 for Sunday, 1 for Monday, etc.
	this.showsOtherMonths = false;
	this.dateStr = dateStr;
	this.ar_days = null;
	this.showsTime = false;
	this.time24 = true;
	this.yearStep = 2;
	this.hiliteToday = true;
	this.multiple = null;
	this.table = null;
	this.element = null;
	this.tbody = null;
	this.firstdayname = null;
	this.monthsCombo = null;
	this.yearsCombo = null;
	this.hilitedMonth = null;
	this.activeMonth = null;
	this.hilitedYear = null;
	this.activeYear = null;
	this.dateClicked = false;

	if (typeof Calendar._SDN == "undefined") {
		if (typeof Calendar._SDN_len == "undefined")
			Calendar._SDN_len = 3;
		var ar = new Array();
		for (var i = 8; i > 0;) {
			ar[--i] = Calendar._DN[i].substr(0, Calendar._SDN_len);
		}
		Calendar._SDN = ar;
		if (typeof Calendar._SMN_len == "undefined")
			Calendar._SMN_len = 3;
		ar = new Array();
		for (var i = 12; i > 0;) {
			ar[--i] = Calendar._MN[i].substr(0, Calendar._SMN_len);
		}
		Calendar._SMN = ar;
	}
};


Calendar._C = null;

Calendar.is_ie = ( /msie/i.test(navigator.userAgent) &&
		   !/opera/i.test(navigator.userAgent) );

Calendar.is_ie5 = ( Calendar.is_ie && /msie 5\.0/i.test(navigator.userAgent) );

Calendar.is_opera = /opera/i.test(navigator.userAgent);

Calendar.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent);


Calendar.getAbsolutePos = function(el) {
	var SL = 0, ST = 0;
	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;
};

Calendar.isRelated = function (el, evt) {
	var related = evt.relatedTarget;
	if (!related) {
		var type = evt.type;
		if (type == "mouseover") {
			related = evt.fromElement;
		} else if (type == "mouseout") {
			related = evt.toElement;
		}
	}
	while (related) {
		if (related == el) {
			return true;
		}
		related = related.parentNode;
	}
	return false;
};

Calendar.removeClass = function(el, className) {
	if (!(el && el.className)) {
		return;
	}
	var cls = el.className.split(" ");
	var ar = new Array();
	for (var i = cls.length; i > 0;) {
		if (cls[--i] != className) {
			ar[ar.length] = cls[i];
		}
	}
	el.className = ar.join(" ");
};

Calendar.addClass = function(el, className) {
	Calendar.removeClass(el, className);
	el.className += " " + className;
};

Calendar.getElement = function(ev) {
	var f = Calendar.is_ie ? window.event.srcElement : ev.currentTarget;
	while (f.nodeType != 1 || /^div$/i.test(f.tagName))
		f = f.parentNode;
	return f;
};

Calendar.getTargetElement = function(ev) {
	var f = Calendar.is_ie ? window.event.srcElement : ev.target;
	while (f.nodeType != 1)
		f = f.parentNode;
	return f;
};

Calendar.stopEvent = function(ev) {
	ev || (ev = window.event);
	if (Calendar.is_ie) {
		ev.cancelBubble = true;
		ev.returnValue = false;
	} else {
		ev.preventDefault();
		ev.stopPropagation();
	}
	return false;
};

Calendar.addEvent = function(el, evname, func) {
	if (el.attachEvent) { // IE
		el.attachEvent("on" + evname, func);
	} else if (el.addEventListener) { // Gecko / W3C
		el.addEventListener(evname, func, true);
	} else {
		el["on" + evname] = func;
	}
};

Calendar.removeEvent = function(el, evname, func) {
	if (el.detachEvent) { // IE
		el.detachEvent("on" + evname, func);
	} else if (el.removeEventListener) { // Gecko / W3C
		el.removeEventListener(evname, func, true);
	} else {
		el["on" + evname] = null;
	}
};

Calendar.createElement = function(type, parent) {
	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.appendChild(el);
	}
	return el;
};



/** Internal -- adds a set of events to make some element behave like a button. */
Calendar._add_evs = function(el) {
	with (Calendar) {
		addEvent(el, "mouseover", dayMouseOver);
		addEvent(el, "mousedown", dayMouseDown);
		addEvent(el, "mouseout", dayMouseOut);
		if (is_ie) {
			addEvent(el, "dblclick", dayMouseDblClick);
			el.setAttribute("unselectable", true);
		}
	}
};

Calendar.findMonth = function(el) {
	if (typeof el.month != "undefined") {
		return el;
	} else if (typeof el.parentNode.month != "undefined") {
		return el.parentNode;
	}
	return null;
};

Calendar.findYear = function(el) {
	if (typeof el.year != "undefined") {
		return el;
	} else if (typeof el.parentNode.year != "undefined") {
		return el.parentNode;
	}
	return null;
};

Calendar.showMonthsCombo = function () {
	var cal = Calendar._C;
	if (!cal) {
		return false;
	}
	var cal = cal;
	var cd = cal.activeDiv;
	var mc = cal.monthsCombo;
	if (cal.hilitedMonth) {
		Calendar.removeClass(cal.hilitedMonth, "hilite");
	}
	if (cal.activeMonth) {
		Calendar.removeClass(cal.activeMonth, "active");
	}
	var mon = cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];
	Calendar.addClass(mon, "active");
	cal.activeMonth = mon;
	var s = mc.style;
	s.display = "block";
	if (cd.navtype < 0)
		s.left = cd.offsetLeft + "px";
	else {
		var mcw = mc.offsetWidth;
		if (typeof mcw == "undefined")
			mcw = 50;
		s.left = (cd.offsetLeft + cd.offsetWidth - mcw) + "px";
	}
	s.top = (cd.offsetTop + cd.offsetHeight) + "px";
};

Calendar.showYearsCombo = function (fwd) {
	var cal = Calendar._C;
	if (!cal) {
		return false;
	}
	var cal = cal;
	var cd = cal.activeDiv;
	var yc = cal.yearsCombo;
	if (cal.hilitedYear) {
		Calendar.removeClass(cal.hilitedYear, "hilite");
	}
	if (cal.activeYear) {
		Calendar.removeClass(cal.activeYear, "active");
	}
	cal.activeYear = null;
	var Y = cal.date.getFullYear() + (fwd ? 1 : -1);
	var yr = yc.firstChild;
	var show = false;
	for (var i = 12; i > 0; --i) {
		if (Y >= cal.minYear && Y <= cal.maxYear) {
			yr.innerHTML = Y;
			yr.year = Y;
			yr.style.display = "block";
			show = true;
		} else {
			yr.style.display = "none";
		}
		yr = yr.nextSibling;
		Y += fwd ? cal.yearStep : -cal.yearStep;
	}
	if (show) {
		var s = yc.style;
		s.display = "block";
		if (cd.navtype < 0)
			s.left = cd.offsetLeft + "px";
		else {
			var ycw = yc.offsetWidth;
			if (typeof ycw == "undefined")
				ycw = 50;
			s.left = (cd.offsetLeft + cd.offsetWidth - ycw) + "px";
		}
		s.top = (cd.offsetTop + cd.offsetHeight) + "px";
	}
};


Calendar.tableMouseUp = function(ev) {
	var cal = Calendar._C;
	if (!cal) {
		return false;
	}
	if (cal.timeout) {
		clearTimeout(cal.timeout);
	}
	var el = cal.activeDiv;
	if (!el) {
		return false;
	}
	var target = Calendar.getTargetElement(ev);
	ev || (ev = window.event);
	Calendar.removeClass(el, "active");
	if (target == el || target.parentNode == el) {
		Calendar.cellClick(el, ev);
	}
	var mon = Calendar.findMonth(target);
	var date = null;
	if (mon) {
		date = new Date(cal.date);
		if (mon.month != date.getMonth()) {
			date.setMonth(mon.month);
			cal.setDate(date);
			cal.dateClicked = false;
			cal.callHandler();
		}
	} else {
		var year = Calendar.findYear(target);
		if (year) {
			date = new Date(cal.date);
			if (year.year != date.getFullYear()) {
				date.setFullYear(year.year);
				cal.setDate(date);
				cal.dateClicked = false;
				cal.callHandler();
			}
		}
	}
	with (Calendar) {
		removeEvent(document, "mouseup", tableMouseUp);
		removeEvent(document, "mouseover", tableMouseOver);
		removeEvent(document, "mousemove", tableMouseOver);
		cal._hideCombos();
		_C = null;
		return stopEvent(ev);
	}
};

Calendar.tableMouseOver = function (ev) {
	var cal = Calendar._C;
	if (!cal) {
		return;
	}
	var el = cal.activeDiv;
	var target = Calendar.getTargetElement(ev);
	if (target == el || target.parentNode == el) {
		Calendar.addClass(el, "hilite active");
		Calendar.addClass(el.parentNode, "rowhilite");
	} else {
		if (typeof el.navtype == "undefined" || (el.navtype != 50 && (el.navtype == 0 || Math.abs(el.navtype) > 2)))
			Calendar.removeClass(el, "active");
		Calendar.removeClass(el, "hilite");
		Calendar.removeClass(el.parentNode, "rowhilite");
	}
	ev || (ev = window.event);
	if (el.navtype == 50 && target != el) {
		var pos = Calendar.getAbsolutePos(el);
		var w = el.offsetWidth;
		var x = ev.clientX;
		var dx;
		var decrease = true;
		if (x > pos.x + w) {
			dx = x - pos.x - w;
			decrease = false;
		} else
			dx = pos.x - x;

		if (dx < 0) dx = 0;
		var range = el._range;
		var current = el._current;
		var count = Math.floor(dx / 10) % range.length;
		for (var i = range.length; --i >= 0;)
			if (range[i] == current)
				break;
		while (count-- > 0)
			if (decrease) {
				if (--i < 0)
					i = range.length - 1;
			} else if ( ++i >= range.length )
				i = 0;
		var newval = range[i];
		el.innerHTML = newval;

		cal.onUpdateTime();
	}
	var mon = Calendar.findMonth(target);
	if (mon) {
		if (mon.month != cal.date.getMonth()) {
			if (cal.hilitedMonth) {
				Calendar.removeClass(cal.hilitedMonth, "hilite");
			}
			Calendar.addClass(mon, "hilite");
			cal.hilitedMonth = mon;
		} else if (cal.hilitedMonth) {
			Calendar.removeClass(cal.hilitedMonth, "hilite");
		}
	} else {
		if (cal.hilitedMonth) {
			Calendar.removeClass(cal.hilitedMonth, "hilite");
		}
		var year = Calendar.findYear(target);
		if (year) {
			if (year.year != cal.date.getFullYear()) {
				if (cal.hilitedYear) {
					Calendar.removeClass(cal.hilitedYear, "hilite");
				}
				Calendar.addClass(year, "hilite");
				cal.hilitedYear = year;
			} else if (cal.hilitedYear) {
				Calendar.removeClass(cal.hilitedYear, "hilite");
			}
		} else if (cal.hilitedYear) {
			Calendar.removeClass(cal.hilitedYear, "hilite");
		}
	}
	return Calendar.stopEvent(ev);
};

Calendar.tableMouseDown = function (ev) {
	if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) {
		return Calendar.stopEvent(ev);
	}
};

Calendar.calDragIt = function (ev) {
	var cal = Calendar._C;
	if (!(cal && cal.dragging)) {
		return false;
	}
	var posX;
	var posY;
	if (Calendar.is_ie) {
		posY = window.event.clientY + document.body.scrollTop;
		posX = window.event.clientX + document.body.scrollLeft;
	} else {
		posX = ev.pageX;
		posY = ev.pageY;
	}
	cal.hideShowCovered();
	var st = cal.element.style;
	st.left = (posX - cal.xOffs) + "px";
	st.top = (posY - cal.yOffs) + "px";
	return Calendar.stopEvent(ev);
};

Calendar.calDragEnd = function (ev) {
	var cal = Calendar._C;
	if (!cal) {
		return false;
	}
	cal.dragging = false;
	with (Calendar) {
		removeEvent(document, "mousemove", calDragIt);
		removeEvent(document, "mouseup", calDragEnd);
		tableMouseUp(ev);
	}
	cal.hideShowCovered();
};

Calendar.dayMouseDown = function(ev) {
	var el = Calendar.getElement(ev);
	if (el.disabled) {
		return false;
	}
	var cal = el.calendar;
	cal.activeDiv = el;
	Calendar._C = cal;
	if (el.navtype != 300) with (Calendar) {
		if (el.navtype == 50) {
			el._current = el.innerHTML;
			addEvent(document, "mousemove", tableMouseOver);
		} else
			addEvent(document, Calendar.is_ie5 ? "mousemove" : "mouseover", tableMouseOver);
		addClass(el, "hilite active");
		addEvent(document, "mouseup", tableMouseUp);
	} else if (cal.isPopup) {
		cal._dragStart(ev);
	}
	if (el.navtype == -1 || el.navtype == 1) {
		if (cal.timeout) clearTimeout(cal.timeout);
		cal.timeout = setTimeout("Calendar.showMonthsCombo()", 250);
	} else if (el.navtype == -2 || el.navtype == 2) {
		if (cal.timeout) clearTimeout(cal.timeout);
		cal.timeout = setTimeout((el.navtype > 0) ? "Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", 250);
	} else {
		cal.timeout = null;
	}
	return Calendar.stopEvent(ev);
};

Calendar.dayMouseDblClick = function(ev) {
	Calendar.cellClick(Calendar.getElement(ev), ev || window.event);
	if (Calendar.is_ie) {
		document.selection.empty();
	}
};

Calendar.dayMouseOver = function(ev) {
	var el = Calendar.getElement(ev);
	if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) {
		return false;
	}
	if (el.ttip) {
		if (el.ttip.substr(0, 1) == "_") {
			el.ttip = el.caldate.print(el.calendar.ttDateFormat) + el.ttip.substr(1);
		}
		el.calendar.tooltips.innerHTML = el.ttip;
	}
	if (el.navtype != 300) {
		Calendar.addClass(el, "hilite");
		if (el.caldate) {
			Calendar.addClass(el.parentNode, "rowhilite");
		}
	}
	return Calendar.stopEvent(ev);
};

Calendar.dayMouseOut = function(ev) {
	with (Calendar) {
		var el = getElement(ev);
		if (isRelated(el, ev) || _C || el.disabled)
			return false;
		removeClass(el, "hilite");
		if (el.caldate)
			removeClass(el.parentNode, "rowhilite");
		if (el.calendar)
			el.calendar.tooltips.innerHTML = _TT["SEL_DATE"];
		return stopEvent(ev);
	}
};

/**
 *  A generic "click" handler :) handles all types of buttons defined in this
 *  calendar.
 */
Calendar.cellClick = function(el, ev) {
	var cal = el.calendar;
	var closing = false;
	var newdate = false;
	var date = null;
	if (typeof el.navtype == "undefined") {
		if (cal.currentDateEl) {
			Calendar.removeClass(cal.currentDateEl, "selected");
			Calendar.addClass(el, "selected");
			closing = (cal.currentDateEl == el);
			if (!closing) {
				cal.currentDateEl = el;
			}
		}
		cal.date.setDateOnly(el.caldate);
		date = cal.date;
		var other_month = !(cal.dateClicked = !el.otherMonth);
		if (!other_month && !cal.currentDateEl)
			cal._toggleMultipleDate(new Date(date));
		else
			newdate = !el.disabled;
		if (other_month)
			cal._init(cal.firstDayOfWeek, date);
	} else {
		if (el.navtype == 200) {
			Calendar.removeClass(el, "hilite");
			cal.callCloseHandler();
			return;
		}
		date = new Date(cal.date);
		if (el.navtype == 0)
			date.setDateOnly(new Date()); // TODAY
		cal.dateClicked = false;
		var year = date.getFullYear();
		var mon = date.getMonth();
		function setMonth(m) {
			var day = date.getDate();
			var max = date.getMonthDays(m);
			if (day > max) {
				date.setDate(max);
			}
			date.setMonth(m);
		};
		switch (el.navtype) {
		    case 400:
			Calendar.removeClass(el, "hilite");
			var text = Calendar._TT["ABOUT"];
			if (typeof text != "undefined") {
				text += cal.showsTime ? Calendar._TT["ABOUT_TIME"] : "";
			} else {
				text = "Help and about box text is not translated into this language.\n" +
					"If you know this language and you feel generous please update\n" +
					"the corresponding file in \"lang\" subdir to match calendar-en.js\n" +
					"and send it back to <mihai_bazon@yahoo.com> to get it into the distribution  ;-)\n\n" +
					"Thank you!\n" +
					"http://dynarch.com/mishoo/calendar.epl\n";
			}
			alert(text);
			return;
		    case -2:
			if (year > cal.minYear) {
				date.setFullYear(year - 1);
			}
			break;
		    case -1:
			if (mon > 0) {
				setMonth(mon - 1);
			} else if (year-- > cal.minYear) {
				date.setFullYear(year);
				setMonth(11);
			}
			break;
		    case 1:
			if (mon < 11) {
				setMonth(mon + 1);
			} else if (year < cal.maxYear) {
				date.setFullYear(year + 1);
				setMonth(0);
			}
			break;
		    case 2:
			if (year < cal.maxYear) {
				date.setFullYear(year + 1);
			}
			break;
		    case 100:
			cal.setFirstDayOfWeek(el.fdow);
			return;
		    case 50:
			var range = el._range;
			var current = el.innerHTML;
			for (var i = range.length; --i >= 0;)
				if (range[i] == current)
					break;
			if (ev && ev.shiftKey) {
				if (--i < 0)
					i = range.length - 1;
			} else if ( ++i >= range.length )
				i = 0;
			var newval = range[i];
			el.innerHTML = newval;
			cal.onUpdateTime();
			return;
		    case 0:
			if ((typeof cal.getDateStatus == "function") &&
			    cal.getDateStatus(date, date.getFullYear(), date.getMonth(), date.getDate())) {
				return false;
			}
			break;
		}
		if (!date.equalsTo(cal.date)) {
			cal.setDate(date);
			newdate = true;
		} else if (el.navtype == 0)
			newdate = closing = true;
	}
	if (newdate) {
		ev && cal.callHandler();
	}
	if (closing) {
		Calendar.removeClass(el, "hilite");
		ev && cal.callCloseHandler();
	}
};



/**
 *  This function creates the calendar inside the given parent.  If _par is
 *  null than it creates a popup calendar inside the BODY element.  If _par is
 *  an element, be it BODY, then it creates a non-popup calendar (still
 *  hidden).  Some properties need to be set before calling this function.
 */
Calendar.prototype.create = function (_par) {
	var parent = null;
	if (! _par) {
		parent = document.getElementsByTagName("body")[0];
		this.isPopup = true;
	} else {
		parent = _par;
		this.isPopup = false;
	}
	this.date = this.dateStr ? new Date(this.dateStr) : new Date();

	var table = Calendar.createElement("table");
	this.table = table;
	table.cellSpacing = 0;
	table.cellPadding = 0;
	table.calendar = this;
	Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown);

	var div = Calendar.createElement("div");
	this.element = div;
	div.className = "calendar";
	if (this.isPopup) {
		div.style.position = "absolute";
		div.style.display = "none";
	}
	div.appendChild(table);

	var thead = Calendar.createElement("thead", table);
	var cell = null;
	var row = null;

	var cal = this;
	var hh = function (text, cs, navtype) {
		cell = Calendar.createElement("td", row);
		cell.colSpan = cs;
		cell.className = "button";
		if (navtype != 0 && Math.abs(navtype) <= 2)
			cell.className += " nav";
		Calendar._add_evs(cell);
		cell.calendar = cal;
		cell.navtype = navtype;
		cell.innerHTML = "<div unselectable='on'>" + text + "</div>";
		return cell;
	};

	row = Calendar.createElement("tr", thead);
	var title_length = 6;
	(this.isPopup) && --title_length;
	(this.weekNumbers) && ++title_length;

	hh("?", 1, 400).ttip = Calendar._TT["INFO"];
	this.title = hh("", title_length, 300);
	this.title.className = "title";
	if (this.isPopup) {
		this.title.ttip = Calendar._TT["DRAG_TO_MOVE"];
		this.title.style.cursor = "move";
		hh("&#x00d7;", 1, 200).ttip = Calendar._TT["CLOSE"];
	}

	row = Calendar.createElement("tr", thead);
	row.className = "headrow";

	this._nav_py = hh("&#x00ab;", 1, -2);
	this._nav_py.ttip = Calendar._TT["PREV_YEAR"];

	this._nav_pm = hh("&#x2039;", 1, -1);
	this._nav_pm.ttip = Calendar._TT["PREV_MONTH"];

	this._nav_now = hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 : 3, 0);
	this._nav_now.ttip = Calendar._TT["GO_TODAY"];

	this._nav_nm = hh("&#x203a;", 1, 1);
	this._nav_nm.ttip = Calendar._TT["NEXT_MONTH"];

	this._nav_ny = hh("&#x00bb;", 1, 2);
	this._nav_ny.ttip = Calendar._TT["NEXT_YEAR"];

	row = Calendar.createElement("tr", thead);
	row.className = "daynames";
	if (this.weekNumbers) {
		cell = Calendar.createElement("td", row);
		cell.className = "name wn";
		cell.innerHTML = Calendar._TT["WK"];
	}
	for (var i = 7; i > 0; --i) {
		cell = Calendar.createElement("td", row);
		if (!i) {
			cell.navtype = 100;
			cell.calendar = this;
			Calendar._add_evs(cell);
		}
	}
	this.firstdayname = (this.weekNumbers) ? row.firstChild.nextSibling : row.firstChild;
	this._displayWeekdays();

	var tbody = Calendar.createElement("tbody", table);
	this.tbody = tbody;

	for (i = 6; i > 0; --i) {
		row = Calendar.createElement("tr", tbody);
		if (this.weekNumbers) {
			cell = Calendar.createElement("td", row);
		}
		for (var j = 7; j > 0; --j) {
			cell = Calendar.createElement("td", row);
			cell.calendar = this;
			Calendar._add_evs(cell);
		}
	}

	if (this.showsTime) {
		row = Calendar.createElement("tr", tbody);
		row.className = "time";

		cell = Calendar.createElement("td", row);
		cell.className = "time";
		cell.colSpan = 2;
		cell.innerHTML = Calendar._TT["TIME"] || "&nbsp;";

		cell = Calendar.createElement("td", row);
		cell.className = "time";
		cell.colSpan = this.weekNumbers ? 4 : 3;

		(function(){
			function makeTimePart(className, init, range_start, range_end) {
				var part = Calendar.createElement("span", cell);
				part.className = className;
				part.innerHTML = init;
				part.calendar = cal;
				part.ttip = Calendar._TT["TIME_PART"];
				part.navtype = 50;
				part._range = [];
				if (typeof range_start != "number")
					part._range = range_start;
				else {
					for (var i = range_start; i <= range_end; ++i) {
						var txt;
						if (i < 10 && range_end >= 10) txt = '0' + i;
						else txt = '' + i;
						part._range[part._range.length] = txt;
					}
				}
				Calendar._add_evs(part);
				return part;
			};
			var hrs = cal.date.getHours();
			var mins = cal.date.getMinutes();
			var t12 = !cal.time24;
			var pm = (hrs > 12);
			if (t12 && pm) hrs -= 12;
			var H = makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23);
			var span = Calendar.createElement("span", cell);
			span.innerHTML = ":";
			span.className = "colon";
			var M = makeTimePart("minute", mins, 0, 59);
			var AP = null;
			cell = Calendar.createElement("td", row);
			cell.className = "time";
			cell.colSpan = 2;
			if (t12)
				AP = makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]);
			else
				cell.innerHTML = "&nbsp;";

			cal.onSetTime = function() {
				var pm, hrs = this.date.getHours(),
					mins = this.date.getMinutes();
				if (t12) {
					pm = (hrs >= 12);
					if (pm) hrs -= 12;
					if (hrs == 0) hrs = 12;
					AP.innerHTML = pm ? "pm" : "am";
				}
				H.innerHTML = (hrs < 10) ? ("0" + hrs) : hrs;
				M.innerHTML = (mins < 10) ? ("0" + mins) : mins;
			};

			cal.onUpdateTime = function() {
				var date = this.date;
				var h = parseInt(H.innerHTML, 10);
				if (t12) {
					if (/pm/i.test(AP.innerHTML) && h < 12)
						h += 12;
					else if (/am/i.test(AP.innerHTML) && h == 12)
						h = 0;
				}
				var d = date.getDate();
				var m = date.getMonth();
				var y = date.getFullYear();
				date.setHours(h);
				date.setMinutes(parseInt(M.innerHTML, 10));
				date.setFullYear(y);
				date.setMonth(m);
				date.setDate(d);
				this.dateClicked = false;
				this.callHandler();
			};
		})();
	} else {
		this.onSetTime = this.onUpdateTime = function() {};
	}

	var tfoot = Calendar.createElement("tfoot", table);

	row = Calendar.createElement("tr", tfoot);
	row.className = "footrow";

	cell = hh(Calendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7, 300);
	cell.className = "ttip";
	if (this.isPopup) {
		cell.ttip = Calendar._TT["DRAG_TO_MOVE"];
		cell.style.cursor = "move";
	}
	this.tooltips = cell;

	div = Calendar.createElement("div", this.element);
	this.monthsCombo = div;
	div.className = "combo";
	for (i = 0; i < Calendar._MN.length; ++i) {
		var mn = Calendar.createElement("div");
		mn.className = Calendar.is_ie ? "label-IEfix" : "label";
		mn.month = i;
		mn.innerHTML = Calendar._SMN[i];
		div.appendChild(mn);
	}

	div = Calendar.createElement("div", this.element);
	this.yearsCombo = div;
	div.className = "combo";
	for (i = 12; i > 0; --i) {
		var yr = Calendar.createElement("div");
		yr.className = Calendar.is_ie ? "label-IEfix" : "label";
		div.appendChild(yr);
	}

	this._init(this.firstDayOfWeek, this.date);
	parent.appendChild(this.element);
};

/** keyboard navigation, only for popup calendars */
Calendar._keyEvent = function(ev) {
	var cal = window._dynarch_popupCalendar;
	if (!cal || cal.multiple)
		return false;
	(Calendar.is_ie) && (ev = window.event);
	var act = (Calendar.is_ie || ev.type == "keypress"),
		K = ev.keyCode;
	if (ev.ctrlKey) {
		switch (K) {
		    case 37: // KEY left
			act && Calendar.cellClick(cal._nav_pm);
			break;
		    case 38: // KEY up
			act && Calendar.cellClick(cal._nav_py);
			break;
		    case 39: // KEY right
			act && Calendar.cellClick(cal._nav_nm);
			break;
		    case 40: // KEY down
			act && Calendar.cellClick(cal._nav_ny);
			break;
		    default:
			return false;
		}
	} else switch (K) {
	    case 32: // KEY space (now)
		Calendar.cellClick(cal._nav_now);
		break;
	    case 27: // KEY esc
		act && cal.callCloseHandler();
		break;
	    case 37: // KEY left
	    case 38: // KEY up
	    case 39: // KEY right
	    case 40: // KEY down
		if (act) {
			var prev, x, y, ne, el, step;
			prev = K == 37 || K == 38;
			step = (K == 37 || K == 39) ? 1 : 7;
			function setVars() {
				el = cal.currentDateEl;
				var p = el.pos;
				x = p & 15;
				y = p >> 4;
				ne = cal.ar_days[y][x];
			};setVars();
			function prevMonth() {
				var date = new Date(cal.date);
				date.setDate(date.getDate() - step);
				cal.setDate(date);
			};
			function nextMonth() {
				var date = new Date(cal.date);
				date.setDate(date.getDate() + step);
				cal.setDate(date);
			};
			while (1) {
				switch (K) {
				    case 37: // KEY left
					if (--x >= 0)
						ne = cal.ar_days[y][x];
					else {
						x = 6;
						K = 38;
						continue;
					}
					break;
				    case 38: // KEY up
					if (--y >= 0)
						ne = cal.ar_days[y][x];
					else {
						prevMonth();
						setVars();
					}
					break;
				    case 39: // KEY right
					if (++x < 7)
						ne = cal.ar_days[y][x];
					else {
						x = 0;
						K = 40;
						continue;
					}
					break;
				    case 40: // KEY down
					if (++y < cal.ar_days.length)
						ne = cal.ar_days[y][x];
					else {
						nextMonth();
						setVars();
					}
					break;
				}
				break;
			}
			if (ne) {
				if (!ne.disabled)
					Calendar.cellClick(ne);
				else if (prev)
					prevMonth();
				else
					nextMonth();
			}
		}
		break;
	    case 13: // KEY enter
		if (act)
			Calendar.cellClick(cal.currentDateEl, ev);
		break;
	    default:
		return false;
	}
	return Calendar.stopEvent(ev);
};

/**
 *  (RE)Initializes the calendar to the given date and firstDayOfWeek
 */
Calendar.prototype._init = function (firstDayOfWeek, date) {
	var today = new Date(),
		TY = today.getFullYear(),
		TM = today.getMonth(),
		TD = today.getDate();
	this.table.style.visibility = "hidden";
	var year = date.getFullYear();
	if (year < this.minYear) {
		year = this.minYear;
		date.setFullYear(year);
	} else if (year > this.maxYear) {
		year = this.maxYear;
		date.setFullYear(year);
	}
	this.firstDayOfWeek = firstDayOfWeek;
	this.date = new Date(date);
	var month = date.getMonth();
	var mday = date.getDate();
	var no_days = date.getMonthDays();

	date.setDate(1);
	var day1 = (date.getDay() - this.firstDayOfWeek) % 7;
	if (day1 < 0)
		day1 += 7;
	date.setDate(-day1);
	date.setDate(date.getDate() + 1);

	var row = this.tbody.firstChild;
	var MN = Calendar._SMN[month];
	var ar_days = this.ar_days = new Array();
	var weekend = Calendar._TT["WEEKEND"];
	var dates = this.multiple ? (this.datesCells = {}) : null;
	for (var i = 0; i < 6; ++i, row = row.nextSibling) {
		var cell = row.firstChild;
		if (this.weekNumbers) {
			cell.className = "day wn";
			cell.innerHTML = date.getWeekNumber();
			cell = cell.nextSibling;
		}
		row.className = "daysrow";
		var hasdays = false, iday, dpos = ar_days[i] = [];
		for (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(iday + 1)) {
			iday = date.getDate();
			var wday = date.getDay();
			cell.className = "day";
			cell.pos = i << 4 | j;
			dpos[j] = cell;
			var current_month = (date.getMonth() == month);
			if (!current_month) {
				if (this.showsOtherMonths) {
					cell.className += " othermonth";
					cell.otherMonth = true;
				} else {
					cell.className = "emptycell";
					cell.innerHTML = "&nbsp;";
					cell.disabled = true;
					continue;
				}
			} else {
				cell.otherMonth = false;
				hasdays = true;
			}
			cell.disabled = false;
			cell.innerHTML = this.getDateText ? this.getDateText(date, iday) : iday;
			if (dates)
				dates[date.print("%Y%m%d")] = cell;
			if (this.getDateStatus) {
				var status = this.getDateStatus(date, year, month, iday);
				if (this.getDateToolTip) {
					var toolTip = this.getDateToolTip(date, year, month, iday);
					if (toolTip)
						cell.title = toolTip;
				}
				if (status === true) {
					cell.className += " disabled";
					cell.disabled = true;
				} else {
					if (/disabled/i.test(status))
						cell.disabled = true;
					cell.className += " " + status;
				}
			}
			if (!cell.disabled) {
				cell.caldate = new Date(date);
				cell.ttip = "_";
				if (!this.multiple && current_month
				    && iday == mday && this.hiliteToday) {
					cell.className += " selected";
					this.currentDateEl = cell;
				}
				if (date.getFullYear() == TY &&
				    date.getMonth() == TM &&
				    iday == TD) {
					cell.className += " today";
					cell.ttip += Calendar._TT["PART_TODAY"];
				}
				if (weekend.indexOf(wday.toString()) != -1)
					cell.className += cell.otherMonth ? " oweekend" : " weekend";
			}
		}
		if (!(hasdays || this.showsOtherMonths))
			row.className = "emptyrow";
	}
	this.title.innerHTML = Calendar._MN[month] + ", " + year;
	this.onSetTime();
	this.table.style.visibility = "visible";
	this._initMultipleDates();
};

Calendar.prototype._initMultipleDates = function() {
	if (this.multiple) {
		for (var i in this.multiple) {
			var cell = this.datesCells[i];
			var d = this.multiple[i];
			if (!d)
				continue;
			if (cell)
				cell.className += " selected";
		}
	}
};

Calendar.prototype._toggleMultipleDate = function(date) {
	if (this.multiple) {
		var ds = date.print("%Y%m%d");
		var cell = this.datesCells[ds];
		if (cell) {
			var d = this.multiple[ds];
			if (!d) {
				Calendar.addClass(cell, "selected");
				this.multiple[ds] = date;
			} else {
				Calendar.removeClass(cell, "selected");
				delete this.multiple[ds];
			}
		}
	}
};

Calendar.prototype.setDateToolTipHandler = function (unaryFunction) {
	this.getDateToolTip = unaryFunction;
};

/**
 *  Calls _init function above for going to a certain date (but only if the
 *  date is different than the currently selected one).
 */
Calendar.prototype.setDate = function (date) {
	if (!date.equalsTo(this.date)) {
		this._init(this.firstDayOfWeek, date);
	}
};

/**
 *  Refreshes the calendar.  Useful if the "disabledHandler" function is
 *  dynamic, meaning that the list of disabled date can change at runtime.
 *  Just * call this function if you think that the list of disabled dates
 *  should * change.
 */
Calendar.prototype.refresh = function () {
	this._init(this.firstDayOfWeek, this.date);
};

/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for Monday, etc.). */
Calendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) {
	this._init(firstDayOfWeek, this.date);
	this._displayWeekdays();
};

/**
 *  Allows customization of what dates are enabled.  The "unaryFunction"
 *  parameter must be a function object that receives the date (as a JS Date
 *  object) and returns a boolean value.  If the returned value is true then
 *  the passed date will be marked as disabled.
 */
Calendar.prototype.setDateStatusHandler = Calendar.prototype.setDisabledHandler = function (unaryFunction) {
	this.getDateStatus = unaryFunction;
};

/** Customization of allowed year range for the calendar. */
Calendar.prototype.setRange = function (a, z) {
	this.minYear = a;
	this.maxYear = z;
};

/** Calls the first user handler (selectedHandler). */
Calendar.prototype.callHandler = function () {
	if (this.onSelected) {
		this.onSelected(this, this.date.print(this.dateFormat));
	}
};

/** Calls the second user handler (closeHandler). */
Calendar.prototype.callCloseHandler = function () {
	if (this.onClose) {
		this.onClose(this);
	}
	this.hideShowCovered();
};

/** Removes the calendar object from the DOM tree and destroys it. */
Calendar.prototype.destroy = function () {
	var el = this.element.parentNode;
	el.removeChild(this.element);
	Calendar._C = null;
	window._dynarch_popupCalendar = null;
};

/**
 *  Moves the calendar element to a different section in the DOM tree (changes
 *  its parent).
 */
Calendar.prototype.reparent = function (new_parent) {
	var el = this.element;
	el.parentNode.removeChild(el);
	new_parent.appendChild(el);
};

Calendar._checkCalendar = function(ev) {
	var calendar = window._dynarch_popupCalendar;
	if (!calendar) {
		return false;
	}
	var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev);
	for (; el != null && el != calendar.element; el = el.parentNode);
	if (el == null) {
		window._dynarch_popupCalendar.callCloseHandler();
		return Calendar.stopEvent(ev);
	}
};

/** Shows the calendar. */
Calendar.prototype.show = function () {
	var rows = this.table.getElementsByTagName("tr");
	for (var i = rows.length; i > 0;) {
		var row = rows[--i];
		Calendar.removeClass(row, "rowhilite");
		var cells = row.getElementsByTagName("td");
		for (var j = cells.length; j > 0;) {
			var cell = cells[--j];
			Calendar.removeClass(cell, "hilite");
			Calendar.removeClass(cell, "active");
		}
	}
	this.element.style.display = "block";
	this.hidden = false;
	if (this.isPopup) {
		window._dynarch_popupCalendar = this;
		Calendar.addEvent(document, "keydown", Calendar._keyEvent);
		Calendar.addEvent(document, "keypress", Calendar._keyEvent);
		Calendar.addEvent(document, "mousedown", Calendar._checkCalendar);
	}
	this.hideShowCovered();
};

/**
 *  Hides the calendar.  Also removes any "hilite" from the class of any TD
 *  element.
 */
Calendar.prototype.hide = function () {
	if (this.isPopup) {
		Calendar.removeEvent(document, "keydown", Calendar._keyEvent);
		Calendar.removeEvent(document, "keypress", Calendar._keyEvent);
		Calendar.removeEvent(document, "mousedown", Calendar._checkCalendar);
	}
	this.element.style.display = "none";
	this.hidden = true;
	this.hideShowCovered();
};

/**
 *  Shows the calendar at a given absolute position (beware that, depending on
 *  the calendar element style -- position property -- this might be relative
 *  to the parent's containing rectangle).
 */
Calendar.prototype.showAt = function (x, y) {
	var s = this.element.style;
	s.left = x + "px";
	s.top = y + "px";
	this.show();
};

/** Shows the calendar near a given element. */
Calendar.prototype.showAtElement = function (el, opts) {
	var self = this;
	var p = Calendar.getAbsolutePos(el);
	if (!opts || typeof opts != "string") {
		this.showAt(p.x, p.y + el.offsetHeight);
		return true;
	}
	function fixPosition(box) {
		if (box.x < 0)
			box.x = 0;
		if (box.y < 0)
			box.y = 0;
		var cp = document.createElement("div");
		var s = cp.style;
		s.position = "absolute";
		s.right = s.bottom = s.width = s.height = "0px";
		document.body.appendChild(cp);
		var br = Calendar.getAbsolutePos(cp);
		document.body.removeChild(cp);
		if (Calendar.is_ie) {
			br.y += document.body.scrollTop;
			br.x += document.body.scrollLeft;
		} else {
			br.y += window.scrollY;
			br.x += window.scrollX;
		}
		var tmp = box.x + box.width - br.x;
		if (tmp > 0) box.x -= tmp;
		tmp = box.y + box.height - br.y;
		if (tmp > 0) box.y -= tmp;
	};
	this.element.style.display = "block";
	Calendar.continuation_for_the_fucking_khtml_browser = function() {
		var w = self.element.offsetWidth;
		var h = self.element.offsetHeight;
		self.element.style.display = "none";
		var valign = opts.substr(0, 1);
		var halign = "l";
		if (opts.length > 1) {
			halign = opts.substr(1, 1);
		}
		switch (valign) {
		    case "T": p.y -= h; break;
		    case "B": p.y += el.offsetHeight; break;
		    case "C": p.y += (el.offsetHeight - h) / 2; break;
		    case "t": p.y += el.offsetHeight - h; break;
		    case "b": break; // already there
		}
		switch (halign) {
		    case "L": p.x -= w; break;
		    case "R": p.x += el.offsetWidth; break;
		    case "C": p.x += (el.offsetWidth - w) / 2; break;
		    case "l": p.x += el.offsetWidth - w; break;
		    case "r": break; // already there
		}
		p.width = w;
		p.height = h + 40;
		self.monthsCombo.style.display = "none";
		fixPosition(p);
		self.showAt(p.x, p.y);
	};
	if (Calendar.is_khtml)
		setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()", 10);
	else
		Calendar.continuation_for_the_fucking_khtml_browser();
};

/** Customizes the date format. */
Calendar.prototype.setDateFormat = function (str) {
	this.dateFormat = str;
};

/** Customizes the tooltip date format. */
Calendar.prototype.setTtDateFormat = function (str) {
	this.ttDateFormat = str;
};

/**
 *  Tries to identify the date represented in a string.  If successful it also
 *  calls this.setDate which moves the calendar to the given date.
 */
Calendar.prototype.parseDate = function(str, fmt) {
	if (!fmt)
		fmt = this.dateFormat;
	this.setDate(Date.parseDate(str, fmt));
};

Calendar.prototype.hideShowCovered = function () {
	if (!Calendar.is_ie && !Calendar.is_opera)
		return;
	function getVisib(obj){
		var value = obj.style.visibility;
		if (!value) {
			if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C
				if (!Calendar.is_khtml)
					value = document.defaultView.
						getComputedStyle(obj, "").getPropertyValue("visibility");
				else
					value = '';
			} else if (obj.currentStyle) { // IE
				value = obj.currentStyle.visibility;
			} else
				value = '';
		}
		return value;
	};

	var tags = new Array("applet", "iframe", "select");
	var el = this.element;

	var p = Calendar.getAbsolutePos(el);
	var EX1 = p.x;
	var EX2 = el.offsetWidth + EX1;
	var EY1 = p.y;
	var EY2 = el.offsetHeight + EY1;

	for (var k = tags.length; k > 0; ) {
		var ar = document.getElementsByTagName(tags[--k]);
		var cc = null;

		for (var i = ar.length; i > 0;) {
			cc = ar[--i];

			p = Calendar.getAbsolutePos(cc);
			var CX1 = p.x;
			var CX2 = cc.offsetWidth + CX1;
			var CY1 = p.y;
			var CY2 = cc.offsetHeight + CY1;

			if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) {
				if (!cc.__msh_save_visibility) {
					cc.__msh_save_visibility = getVisib(cc);
				}
				cc.style.visibility = cc.__msh_save_visibility;
			} else {
				if (!cc.__msh_save_visibility) {
					cc.__msh_save_visibility = getVisib(cc);
				}
				cc.style.visibility = "hidden";
			}
		}
	}
};

/** Internal function; it displays the bar with the names of the weekday. */
Calendar.prototype._displayWeekdays = function () {
	var fdow = this.firstDayOfWeek;
	var cell = this.firstdayname;
	var weekend = Calendar._TT["WEEKEND"];
	for (var i = 0; i < 7; ++i) {
		cell.className = "day name";
		var realday = (i + fdow) % 7;
		if (i) {
			cell.ttip = Calendar._TT["DAY_FIRST"].replace("%s", Calendar._DN[realday]);
			cell.navtype = 100;
			cell.calendar = this;
			cell.fdow = realday;
			Calendar._add_evs(cell);
		}
		if (weekend.indexOf(realday.toString()) != -1) {
			Calendar.addClass(cell, "weekend");
		}
		cell.innerHTML = Calendar._SDN[(i + fdow) % 7];
		cell = cell.nextSibling;
	}
};

/** Internal function.  Hides all combo boxes that might be displayed. */
Calendar.prototype._hideCombos = function () {
	this.monthsCombo.style.display = "none";
	this.yearsCombo.style.display = "none";
};

/** Internal function.  Starts dragging the element. */
Calendar.prototype._dragStart = function (ev) {
	if (this.dragging) {
		return;
	}
	this.dragging = true;
	var posX;
	var posY;
	if (Calendar.is_ie) {
		posY = window.event.clientY + document.body.scrollTop;
		posX = window.event.clientX + document.body.scrollLeft;
	} else {
		posY = ev.clientY + window.scrollY;
		posX = ev.clientX + window.scrollX;
	}
	var st = this.element.style;
	this.xOffs = posX - parseInt(st.left);
	this.yOffs = posY - parseInt(st.top);
	with (Calendar) {
		addEvent(document, "mousemove", calDragIt);
		addEvent(document, "mouseup", calDragEnd);
	}
};


/** Adds the number of days array to the Date object. */
Date._MD = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

/** Constants used for time computations */
Date.SECOND = 1000 /* milliseconds */;
Date.MINUTE = 60 * Date.SECOND;
Date.HOUR   = 60 * Date.MINUTE;
Date.DAY    = 24 * Date.HOUR;
Date.WEEK   =  7 * Date.DAY;

Date.parseDate = function(str, fmt) {
	var today = new Date();
	var y = 0;
	var m = -1;
	var d = 0;
	var a = str.split(/\W+/);
	var b = fmt.match(/%./g);
	var i = 0, j = 0;
	var hr = 0;
	var min = 0;
	for (i = 0; i < a.length; ++i) {
		if (!a[i])
			continue;
		switch (b[i]) {
		    case "%d":
		    case "%e":
			d = parseInt(a[i], 10);
			break;

		    case "%m":
			m = parseInt(a[i], 10) - 1;
			break;

		    case "%Y":
		    case "%y":
			y = parseInt(a[i], 10);
			(y < 100) && (y += (y > 29) ? 1900 : 2000);
			break;

		    case "%b":
		    case "%B":
			for (j = 0; j < 12; ++j) {
				if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { m = j; break; }
			}
			break;

		    case "%H":
		    case "%I":
		    case "%k":
		    case "%l":
			hr = parseInt(a[i], 10);
			break;

		    case "%P":
		    case "%p":
			if (/pm/i.test(a[i]) && hr < 12)
				hr += 12;
			else if (/am/i.test(a[i]) && hr >= 12)
				hr -= 12;
			break;

		    case "%M":
			min = parseInt(a[i], 10);
			break;
		}
	}
	if (isNaN(y)) y = today.getFullYear();
	if (isNaN(m)) m = today.getMonth();
	if (isNaN(d)) d = today.getDate();
	if (isNaN(hr)) hr = today.getHours();
	if (isNaN(min)) min = today.getMinutes();
	if (y != 0 && m != -1 && d != 0)
		return new Date(y, m, d, hr, min, 0);
	y = 0; m = -1; d = 0;
	for (i = 0; i < a.length; ++i) {
		if (a[i].search(/[a-zA-Z]+/) != -1) {
			var t = -1;
			for (j = 0; j < 12; ++j) {
				if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { t = j; break; }
			}
			if (t != -1) {
				if (m != -1) {
					d = m+1;
				}
				m = t;
			}
		} else if (parseInt(a[i], 10) <= 12 && m == -1) {
			m = a[i]-1;
		} else if (parseInt(a[i], 10) > 31 && y == 0) {
			y = parseInt(a[i], 10);
			(y < 100) && (y += (y > 29) ? 1900 : 2000);
		} else if (d == 0) {
			d = a[i];
		}
	}
	if (y == 0)
		y = today.getFullYear();
	if (m != -1 && d != 0)
		return new Date(y, m, d, hr, min, 0);
	return today;
};

/** Returns the number of days in the current month */
Date.prototype.getMonthDays = function(month) {
	var year = this.getFullYear();
	if (typeof month == "undefined") {
		month = this.getMonth();
	}
	if (((0 == (year%4)) && ( (0 != (year%100)) || (0 == (year%400)))) && month == 1) {
		return 29;
	} else {
		return Date._MD[month];
	}
};

/** Returns the number of day in the year. */
Date.prototype.getDayOfYear = function() {
	var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
	var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0);
	var time = now - then;
	return Math.floor(time / Date.DAY);
};

/** Returns the number of the week in year, as defined in ISO 8601. */
Date.prototype.getWeekNumber = function() {
	var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
	var DoW = d.getDay();
	d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
	var ms = d.valueOf(); // GMT
	d.setMonth(0);
	d.setDate(4); // Thu in Week 1
	return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
};

/** Checks date and time equality */
Date.prototype.equalsTo = function(date) {
	return ((this.getFullYear() == date.getFullYear()) &&
		(this.getMonth() == date.getMonth()) &&
		(this.getDate() == date.getDate()) &&
		(this.getHours() == date.getHours()) &&
		(this.getMinutes() == date.getMinutes()));
};

/** Set only the year, month, date parts (keep existing time) */
Date.prototype.setDateOnly = function(date) {
	var tmp = new Date(date);
	this.setDate(1);
	this.setFullYear(tmp.getFullYear());
	this.setMonth(tmp.getMonth());
	this.setDate(tmp.getDate());
};

/** Prints the date in a string according to the given format. */
Date.prototype.print = function (str) {
	var m = this.getMonth();
	var d = this.getDate();
	var y = this.getFullYear();
	var wn = this.getWeekNumber();
	var w = this.getDay();
	var s = {};
	var hr = this.getHours();
	var pm = (hr >= 12);
	var ir = (pm) ? (hr - 12) : hr;
	var dy = this.getDayOfYear();
	if (ir == 0)
		ir = 12;
	var min = this.getMinutes();
	var sec = this.getSeconds();
	s["%a"] = Calendar._SDN[w]; // abbreviated weekday name [FIXME: I18N]
	s["%A"] = Calendar._DN[w]; // full weekday name
	s["%b"] = Calendar._SMN[m]; // abbreviated month name [FIXME: I18N]
	s["%B"] = Calendar._MN[m]; // full month name
	s["%C"] = 1 + Math.floor(y / 100); // the century number
	s["%d"] = (d < 10) ? ("0" + d) : d; // the day of the month (range 01 to 31)
	s["%e"] = d; // the day of the month (range 1 to 31)
	s["%H"] = (hr < 10) ? ("0" + hr) : hr; // hour, range 00 to 23 (24h format)
	s["%I"] = (ir < 10) ? ("0" + ir) : ir; // hour, range 01 to 12 (12h format)
	s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; // day of the year (range 001 to 366)
	s["%k"] = hr;		// hour, range 0 to 23 (24h format)
	s["%l"] = ir;		// hour, range 1 to 12 (12h format)
	s["%m"] = (m < 9) ? ("0" + (1+m)) : (1+m); // month, range 01 to 12
	s["%M"] = (min < 10) ? ("0" + min) : min; // minute, range 00 to 59
	s["%n"] = "\n";		// a newline character
	s["%p"] = pm ? "PM" : "AM";
	s["%P"] = pm ? "pm" : "am";
	s["%s"] = Math.floor(this.getTime() / 1000);
	s["%S"] = (sec < 10) ? ("0" + sec) : sec; // seconds, range 00 to 59
	s["%t"] = "\t";		// a tab character
	s["%U"] = s["%W"] = s["%V"] = (wn < 10) ? ("0" + wn) : wn;
	s["%u"] = w + 1;	// the day of the week (range 1 to 7, 1 = MON)
	s["%w"] = w;		// the day of the week (range 0 to 6, 0 = SUN)
	s["%y"] = ('' + y).substr(2, 2); // year without the century (range 00 to 99)
	s["%Y"] = y;		// year with the century
	s["%%"] = "%";		// a literal '%' character

	var re = /%./g;
	if (!Calendar.is_ie5 && !Calendar.is_khtml)
		return str.replace(re, function (par) { return s[par] || par; });

	var a = str.match(re);
	for (var i = 0; i < a.length; i++) {
		var tmp = s[a[i]];
		if (tmp) {
			re = new RegExp(a[i], 'g');
			str = str.replace(re, tmp);
		}
	}

	return str;
};

Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear;
Date.prototype.setFullYear = function(y) {
	var d = new Date(this);
	d.__msh_oldSetFullYear(y);
	if (d.getMonth() != this.getMonth())
		this.setDate(28);
	this.__msh_oldSetFullYear(y);
};



window._dynarch_popupCalendar = null;



Calendar._DN = new Array
("Sunday",
 "Monday",
 "Tuesday",
 "Wednesday",
 "Thursday",
 "Friday",
 "Saturday",
 "Sunday");


Calendar._SDN = new Array
("Sun",
 "Mon",
 "Tue",
 "Wed",
 "Thu",
 "Fri",
 "Sat",
 "Sun");

Calendar._FD = 0;

Calendar._MN = new Array
("January",
 "February",
 "March",
 "April",
 "May",
 "June",
 "July",
 "August",
 "September",
 "October",
 "November",
 "December");

Calendar._SMN = new Array
("Jan",
 "Feb",
 "Mar",
 "Apr",
 "May",
 "Jun",
 "Jul",
 "Aug",
 "Sep",
 "Oct",
 "Nov",
 "Dec");

Calendar._TT = {};
Calendar._TT["INFO"] = "About the calendar";

Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Date selection:\n" +
"- Use the \xab, \xbb buttons to select year\n" +
"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
"- Hold mouse button on any of the above buttons for faster selection.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Time selection:\n" +
"- Click on any of the time parts to increase it\n" +
"- or Shift-click to decrease it\n" +
"- or click and drag for faster selection.";

Calendar._TT["PREV_YEAR"] = "Prev. year (hold for menu)";
Calendar._TT["PREV_MONTH"] = "Prev. month (hold for menu)";
Calendar._TT["GO_TODAY"] = "Go Today";
Calendar._TT["NEXT_MONTH"] = "Next month (hold for menu)";
Calendar._TT["NEXT_YEAR"] = "Next year (hold for menu)";
Calendar._TT["SEL_DATE"] = "Select date";
Calendar._TT["DRAG_TO_MOVE"] = "Drag to move";
Calendar._TT["PART_TODAY"] = " (today)";

Calendar._TT["DAY_FIRST"] = "Display %s first";

Calendar._TT["WEEKEND"] = "0,6";

Calendar._TT["CLOSE"] = "Close";
Calendar._TT["TODAY"] = "Today";
Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";

Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";

Calendar._TT["WK"] = "wk";
Calendar._TT["TIME"] = "Time:";
var oldLink = null;
function setActiveStyleSheet(link, title) {
  var i, a, main;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
      a.disabled = true;
      if(a.getAttribute("title") == title) a.disabled = false;
    }
  }
  if (oldLink) oldLink.style.fontWeight = 'normal';
  oldLink = link;
  link.style.fontWeight = 'bold';
  return false;
}

function selected(cal, date) {
  cal.sel.value = date; // just update the date in the input field.
  if (cal.dateClicked && (cal.sel.id == "sel1" || cal.sel.id == "sel3"))
    cal.callCloseHandler();
}

function closeHandler(cal) {
  cal.hide();                        // hide the calendar
  _dynarch_popupCalendar = null;
}

function showCalendar(id, format, showsTime, showsOtherMonths) {
  var el = document.getElementById(id);
  if (_dynarch_popupCalendar != null) {
    _dynarch_popupCalendar.hide();                 // so we hide it first.
  } else {
    var cal = new Calendar(1, null, selected, closeHandler);
    if (typeof showsTime == "string") {
      cal.showsTime = true;
      cal.time24 = (showsTime == "24");
    }
    if (showsOtherMonths) {
      cal.showsOtherMonths = true;
    }
    _dynarch_popupCalendar = cal;                  // remember it in the global var
    cal.setRange(1900, 2070);        // min/max year allowed.
    cal.create();
  }
  _dynarch_popupCalendar.setDateFormat(format);    // set the specified date format
  _dynarch_popupCalendar.parseDate(el.value);      // try to parse the text in field
  _dynarch_popupCalendar.sel = el;                 // inform it what input field we use

  _dynarch_popupCalendar.showAtElement(el.nextSibling, "Br");        // show the calendar

  return false;
}

var MINUTE = 60 * 1000;
var HOUR = 60 * MINUTE;
var DAY = 24 * HOUR;
var WEEK = 7 * DAY;

function isDisabled(date) {
  var today = new Date();
  return (Math.abs(date.getTime() - today.getTime()) / DAY) > 10;
}

function flatSelected(cal, date) {
  var el = document.getElementById("preview");
  el.innerHTML = date;
}

function showFlatCalendar() {
  var parent = document.getElementById("display");

  var cal = new Calendar(0, null, flatSelected);

  cal.weekNumbers = false;

  cal.setDisabledHandler(isDisabled);
  cal.setDateFormat("%A, %B %e");

  cal.create(parent);

  cal.show();
}

var url = escape( location.toString() ) ;
function dounique() { var date = new Date() ; return date.getTime() ; }
var unique = dounique() ;
function launch_support(l, x, d)
{
	var loc = new String(document.location);
	loc = "http://chat." + loc.replace(/http:\/\/(.*?)\/.*/, "$1").replace(/^www\.(.*)$/, "$1") + "/";
	var request_url = loc+"request.php?l="+l+"&x="+x+"&deptid="+d+"&page="+url ;
	newwin = window.open( request_url, unique, 'scrollbars=no,menubar=no,resizable=0,location=no,screenX=50,screenY=100,width=450,height=360' ) ;
	newwin.focus() ;
}

var rst_inputs = new Array();
rst_inputs["f1"] = 0;
rst_inputs["f2"] = 0;
rst_inputs["f3"] = 0;
rst_inputs["f9"] = 0;
rst_inputs["f11"] = 0;
function reset_input (inp) {
	if (!rst_inputs[inp.name]) {
		inp.value="";
		rst_inputs[inp.name] = 1;
	};
}

function toggle_submit() 
{
 $('submitted').disabled = !$('agree').checked;
}

function submit_order () {
	frm = document.getElementById ('frmOrderCalc');
	if (confirm ("Please confirm that you're ready to submit an order!")) {
		document.getElementById ('submitted').disabled=1;
		frm.submit();
	}
}
function format_dd (t)
{
	d = new Date();
	d.setTime (t);
	curr_year = d.getFullYear();
	curr_month = d.getMonth()+1;
	curr_date = d.getDate();
	curr_hours = d.getHours();
	curr_minutes = d.getMinutes();
	if (curr_month < 10) curr_month = '0'+curr_month;
	if (curr_date < 10) curr_date = '0'+curr_date;
	p = 'AM';
	if (curr_hours >= 12) {
		p = 'PM';
		curr_hours -= 12;
		if (curr_hours == 0) {
			curr_hours = 12;
		}
	}
	//if (curr_hours < 10) curr_hours = '0'+curr_hours;
	if (curr_minutes < 10) curr_minutes = '0'+curr_minutes;
	return curr_year+'-'+curr_month+'-'+curr_date+' '+curr_hours+':'+curr_minutes+' '+p;
}

function init_dd () {
// set deadline date to currdate+14days
	f = document.getElementById ('deadline_date');
	if (!document.getElementById ('submitted_level') || document.getElementById ('reset_deadline'))
	{
		d = new Date();
		t = d.getTime();
		t += 14*24*60*60*1000+60*60*1000;
		d.setTime (t);
		curr_year = d.getFullYear();
		curr_month = d.getMonth()+1;
		curr_date = d.getDate();
		curr_hours = d.getHours();
		curr_minutes = d.getMinutes();
		if (curr_month < 10) curr_month = '0'+curr_month;
		if (curr_date < 10) curr_date = '0'+curr_date;
		p = 'AM';
		if (curr_hours >= 12) {
			p = 'PM';
			curr_hours -= 12;
			if (curr_hours == 0) {
				curr_hours = 12;
			}
		}
		//if (curr_hours < 10) curr_hours = '0'+curr_hours;
		if (curr_minutes < 10) curr_minutes = '0'+curr_minutes;
		f.value = curr_year+'-'+curr_month+'-'+curr_date+' '+curr_hours+':'+curr_minutes+' '+p;
	}
}

function leftZero(n, totalDigits) 
{ 
  n = n.toString(); 
  if (totalDigits > n.length) 
  { 
    n = "00000000000000000000000000".substr(0,totalDigits-n.length) + n;
  } 
  return n;
} 

function currentValue(el)
{
 return el.options[el.selectedIndex].value;
}

function currentText(el)
{
 return el.options[el.selectedIndex].text;
}

function toggleVisible(el,textWhenHidden,textWhenShown,el2)
{
 if (el2.visible())
 {
  el.innerHTML = textWhenHidden;
  el2.hide();
 }
 else
 {
  el.innerHTML = textWhenShown;
  el2.show();
 }
}

function textCounter( field, countfield, maxlimit ) {
  if ( field.value.length > maxlimit )
  {
    field.value = field.value.substring( 0, maxlimit );
    alert( 'Textarea value can only be 2000 characters in length.' );
    return false;
  }
  else
  {
    $(countfield).update(maxlimit - field.value.length);
  }
}
/*
* Not official Prototype JS lib!
* The original license applies to this one as well...
* ENHANCEMENTS: 
*  - size
*  - currentTarget support in IE
*  - lastDescendant support (same as firstDescendant it just returns the last childNode instead of the first one) 
*/
eval(function(p,a,c,k,e,r){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--)r[e(c)]=k[c]||e(c);k=[function(e){return r[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}('G 1f={89:\'1.6.0.3\',1R:{3W:!!(1D.78&&47.48.3r(\'49\')===-1),49:47.48.3r(\'49\')>-1,4a:47.48.3r(\'dd/\')>-1,79:47.48.3r(\'79\')>-1&&47.48.3r(\'a7\')===-1,a8:!!47.48.1g(/de.*df.*a9/)},3K:{7a:!!1b.2P,aa:!!1b.ab,6g:!!1D.6h,7b:1b.3X(\'1O\')[\'4V\']&&1b.3X(\'1O\')[\'4V\']!==1b.3X(\'1y\')[\'4V\']},7c:\'<4W[^>]*>([\\\\S\\\\s]*?)<\\/4W>\',ac:/^\\/\\*-dg-([\\s\\S]*)\\*\\/\\s*$/,3g:q(){},K:q(x){o x}};E(1f.1R.a8)1f.3K.7b=1p;G 2f={2u:q(){G 2Q=1j,3h=$A(1q);E(M.2A(3h[0]))2Q=3h.4X();q 1M(){C.2I.3s(C,1q)}M.17(1M,2f.1c);1M.8a=2Q;1M.ad=[];E(2Q){G 8b=q(){};8b.1k=2Q.1k;1M.1k=1t 8b;2Q.ad.1h(1M)}18(G i=0;i<3h.O;i++)1M.6i(3h[i]);E(!1M.1k.2I)1M.1k.2I=1f.3g;1M.1k.dh=1M;o 1M}};2f.1c={6i:q(24){G 3L=C.8a&&C.8a.1k;G 3h=M.4b(24);E(!M.4b({2J:1v}).O)3h.1h("2J","8c");18(G i=0,O=3h.O;i<O;i++){G 1z=3h[i],I=24[1z];E(3L&&M.2A(I)&&I.ae().3M()=="$4c"){G 1B=I;I=(q(m){o q(){o 3L[m].3s(C,1q)}})(1z).4z(1B);I.8c=1B.8c.2B(1B);I.2J=1B.2J.2B(1B)}C.1k[1z]=I}o C}};G 4Y={};M.17=q(5x,24){18(G 1z 1P 24)5x[1z]=24[1z];o 5x};M.17(M,{2C:q(W){25{E(M.2D(W))o\'4A\';E(W===1j)o\'1j\';o W.2C?W.2C():22(W)}2a(e){E(e af di)o\'...\';4B e;}},3t:q(W){G 1r=3i W;4Z(1r){2g\'4A\':2g\'q\':2g\'dj\':o;2g\'dk\':o W.2J()}E(W===1j)o\'1j\';E(W.3t)o W.3t();E(M.4d(W))o;G U=[];18(G 1z 1P W){G I=M.3t(W[1z]);E(!M.2D(I))U.1h(1z.3t()+\': \'+I)}o\'{\'+U.2E(\', \')+\'}\'},4C:q(W){o $H(W).4C()},4e:q(W){o W&&W.4e?W.4e():22.5y(W)},4b:q(W){G 4b=[];18(G 1z 1P W)4b.1h(1z);o 4b},1S:q(W){G 1S=[];18(G 1z 1P W)1S.1h(W[1z]);o 1S},2F:q(W){o M.17({},W)},4d:q(W){o!!(W&&W.3j==1)},4D:q(W){o W!=1j&&3i W=="W"&&\'dl\'1P W&&\'2E\'1P W},8d:q(W){o W af 3Y},2A:q(W){o 3i W=="q"},3k:q(W){o 3i W=="3l"},50:q(W){o 3i W=="3Z"},2D:q(W){o 3i W=="4A"}});M.17(dm.1k,{ae:q(){G 3u=C.2J().1g(/^[\\s\\(]*q[^(]*\\(([^\\)]*)\\)/)[1].1T(/\\s+/g,\'\').4f(\',\');o 3u.O==1&&!3u[0]?[]:3u},2B:q(){E(1q.O<2&&M.2D(1q[0]))o C;G 3m=C,1U=$A(1q),W=1U.4X();o q(){o 3m.3s(W,1U.1V($A(1q)))}},dn:q(){G 3m=C,1U=$A(1q),W=1U.4X();o q(19){o 3m.3s(W,[19||1D.19].1V(1U))}},8e:q(){E(!1q.O)o C;G 3m=C,1U=$A(1q);o q(){o 3m.3s(C,1U.1V($A(1q)))}},8f:q(){G 3m=C,1U=$A(1q),ag=1U.4X()*ah;o 1D.dp(q(){o 3m.3s(3m,1U)},ag)},4E:q(){G 1U=[0.dq].1V($A(1q));o C.8f.3s(C,1U)},4z:q(1L){G 3m=C;o q(){o 1L.3s(C,[3m.2B(C)].1V($A(1q)))}},4F:q(){E(C.8g)o C.8g;G 3m=C;o C.8g=q(){o 3m.3s(1j,[C].1V($A(1q)))}}});dr.1k.3t=q(){o\'"\'+C.ds()+\'-\'+(C.dt()+1).4G(2)+\'-\'+C.du().4G(2)+\'T\'+C.dv().4G(2)+\':\'+C.dw().4G(2)+\':\'+C.dx().4G(2)+\'Z"\'};G ai={aj:q(){G 7d;18(G i=0,O=1q.O;i<O;i++){G ak=1q[i];25{7d=ak();2h}2a(e){}}o 7d}};4g.1k.1g=4g.1k.2R;4g.al=q(5z){o 22(5z).1T(/([.*+?^=!:${}()|[\\]\\/\\\\])/g,\'\\\\$1\')};G am=2f.2u({2I:q(31,4h){C.31=31;C.4h=4h;C.7e=1p;C.6j()},6j:q(){C.41=an(C.6k.2B(C),C.4h*ah)},8h:q(){C.31(C)},8i:q(){E(!C.41)o;ao(C.41);C.41=1j},6k:q(){E(!C.7e){25{C.7e=1v;C.8h()}dy{C.7e=1p}}}});M.17(22,{5y:q(I){o I==1j?\'\':22(I)},ap:{\'\\b\':\'\\\\b\',\'\\t\':\'\\\\t\',\'\\n\':\'\\\\n\',\'\\f\':\'\\\\f\',\'\\r\':\'\\\\r\',\'\\\\\':\'\\\\\\\\\'}});M.17(22.1k,{3n:q(26,3v){G 1s=\'\',24=C,1g;3v=1q.5A.8j(3v);1N(24.O>0){E(1g=24.1g(26)){1s+=24.3w(0,1g.1m);1s+=22.5y(3v(1g));24=24.3w(1g.1m+1g[0].O)}1i{1s+=24,24=\'\'}}o 1s},aq:q(26,3v,3x){3v=C.3n.8j(3v);3x=M.2D(3x)?1:3x;o C.3n(26,q(1g){E(--3x<0)o 1g[0];o 3v(1g)})},ar:q(26,1e){C.3n(26,1e);o 22(C)},dz:q(O,5B){O=O||30;5B=M.2D(5B)?\'...\':5B;o C.O>O?C.3w(0,O-5B.O)+5B:22(C)},4i:q(){o C.1T(/^\\s+/,\'\').1T(/\\s+$/,\'\')},8k:q(){o C.1T(/<\\/?[^>]+>/gi,\'\')},4j:q(){o C.1T(1t 4g(1f.7c,\'at\'),\'\')},au:q(){G av=1t 4g(1f.7c,\'at\');G aw=1t 4g(1f.7c,\'dA\');o(C.1g(av)||[]).2S(q(ax){o(ax.1g(aw)||[\'\',\'\'])[1]})},51:q(){o C.au().2S(q(4W){o 7f(4W)})},6l:q(){G 5C=1q.5A;5C.4k.7g=C;o 5C.1O.52},ay:q(){G 1O=1t J(\'1O\');1O.52=C.8k();o 1O.3o[0]?(1O.3o.O>1?$A(1O.3o).3y(\'\',q(2T,L){o 2T+L.4l}):1O.3o[0].4l):\'\'},7h:q(az){G 1g=C.4i().1g(/([^?#]*)(#.*)?$/);E(!1g)o{};o 1g[1].4f(az||\'&\').3y({},q(3z,1G){E((1G=1G.4f(\'=\'))[0]){G 1w=8l(1G.4X());G I=1G.O>1?1G.2E(\'=\'):1G[0];E(I!=4A)I=8l(I);E(1w 1P 3z){E(!M.4D(3z[1w]))3z[1w]=[3z[1w]];3z[1w].1h(I)}1i 3z[1w]=I}o 3z})},3A:q(){o C.4f(\'\')},8m:q(){o C.3w(0,C.O-1)+22.dB(C.aA(C.O-1)+1)},7i:q(3x){o 3x<1?\'\':1t 2m(3x+1).2E(C)},8n:q(){G 4H=C.4f(\'-\'),8o=4H.O;E(8o==1)o 4H[0];G 8p=C.7j(0)==\'-\'?4H[0].7j(0).2o()+4H[0].5D(1):4H[0];18(G i=1;i<8o;i++)8p+=4H[i].7j(0).2o()+4H[i].5D(1);o 8p},6m:q(){o C.7j(0).2o()+C.5D(1).2b()},dC:q(){o C.3n(/::/,\'/\').3n(/([A-Z]+)([A-Z][a-z])/,\'#{1}6n#{2}\').3n(/([a-z\\d])([A-Z])/,\'#{1}6n#{2}\').3n(/-/,\'6n\').2b()},dD:q(){o C.3n(/6n/,\'-\')},2C:q(aB){G 8q=C.3n(/[\\dE-\\dF\\\\]/,q(1g){G 8r=22.ap[1g[0]];o 8r?8r:\'\\\\dG\'+1g[0].aA().4G(2,16)});E(aB)o\'"\'+8q.1T(/"/g,\'\\\\"\')+\'"\';o"\'"+8q.1T(/\'/g,\'\\\\\\\'\')+"\'"},3t:q(){o C.2C(1v)},8s:q(2i){o C.aq(2i||1f.ac,\'#{1}\')},aC:q(){G 5z=C;E(5z.53())o 1p;5z=C.1T(/\\\\./g,\'@\').1T(/"[^"\\\\\\n\\r]*"/g,\'\');o(/^[,:{}\\[\\]0-9.\\-+dH-u \\n\\r\\t]*$/).2R(5z)},5E:q(aD){G 3p=C.8s();25{E(!aD||3p.aC())o 7f(\'(\'+3p+\')\')}2a(e){}4B 1t dI(\'dJ dK aE 3l: \'+C.2C());},1H:q(26){o C.3r(26)>-1},8t:q(26){o C.3r(26)===0},8u:q(26){G d=C.O-26.O;o d>=0&&C.8v(26)===d},5F:q(){o C==\'\'},53:q(){o/^\\s*$/.2R(C)},aF:q(W,26){o 1t 32(C,26).2P(W)}});E(1f.1R.4a||1f.1R.3W)M.17(22.1k,{6l:q(){o C.1T(/&/g,\'&aG;\').1T(/</g,\'&aH;\').1T(/>/g,\'&gt;\')},ay:q(){o C.8k().1T(/&aG;/g,\'&\').1T(/&aH;/g,\'<\').1T(/&gt;/g,\'>\')}});22.1k.3n.8j=q(3v){E(M.2A(3v))o 3v;G 5G=1t 32(3v);o q(1g){o 5G.2P(1g)}};22.1k.dL=22.1k.7h;M.17(22.1k.6l,{1O:1b.3X(\'1O\'),4k:1b.aI(\'\')});22.1k.6l.1O.5H(22.1k.6l.4k);G 32=2f.2u({2I:q(5G,26){C.5G=5G.2J();C.26=26||32.aJ},2P:q(W){E(M.2A(W.8w))W=W.8w();o C.5G.3n(C.26,q(1g){E(W==1j)o\'\';G 54=1g[1]||\'\';E(54==\'\\\\\')o 1g[2];G 6o=W,6p=1g[3];G 26=/^([^.[]+|\\[((?:.*?[^\\\\])?)\\])(\\.|\\[|$)/;1g=26.aK(6p);E(1g==1j)o 54;1N(1g!=1j){G aL=1g[1].8t(\'[\')?1g[2].3n(\'\\\\\\\\]\',\']\'):1g[1];6o=6o[aL];E(1j==6o||\'\'==1g[3])2h;6p=6p.5D(\'[\'==1g[3]?1g[1].O:1g[0].O);1g=26.aK(6p)}o 54+22.5y(6o)})}});32.aJ=/(^|.|\\r|\\n)(#\\{(.*?)\\})/;G $2h={};G 2K={1E:q(1e,1I){G 1m=0;25{C.4m(q(I){1e.2L(1I,I,1m++)})}2a(e){E(e!=$2h)4B e;}o C},aM:q(3Z,1e,1I){G 1m=-3Z,8x=[],2v=C.3A();E(3Z<1)o 2v;1N((1m+=3Z)<2v.O)8x.1h(2v.3w(1m,1m+3Z));o 8x.8y(1e,1I)},8z:q(1e,1I){1e=1e||1f.K;G 1s=1v;C.1E(q(I,1m){1s=1s&&!!1e.2L(1I,I,1m);E(!1s)4B $2h;});o 1s},aN:q(1e,1I){1e=1e||1f.K;G 1s=1p;C.1E(q(I,1m){E(1s=!!1e.2L(1I,I,1m))4B $2h;});o 1s},8y:q(1e,1I){1e=1e||1f.K;G U=[];C.1E(q(I,1m){U.1h(1e.2L(1I,I,1m))});o U},7k:q(1e,1I){G 1s;C.1E(q(I,1m){E(1e.2L(1I,I,1m)){1s=I;4B $2h;}});o 1s},5I:q(1e,1I){G U=[];C.1E(q(I,1m){E(1e.2L(1I,I,1m))U.1h(I)});o U},dM:q(2i,1e,1I){1e=1e||1f.K;G U=[];E(M.3k(2i))2i=1t 4g(2i);C.1E(q(I,1m){E(2i.1g(I))U.1h(1e.2L(1I,I,1m))});o U},1H:q(W){E(M.2A(C.3r))E(C.3r(W)!=-1)o 1v;G 8A=1p;C.1E(q(I){E(I==W){8A=1v;4B $2h;}});o 8A},dN:q(3Z,6q){6q=M.2D(6q)?1j:6q;o C.aM(3Z,q(3w){1N(3w.O<3Z)3w.1h(6q);o 3w})},3y:q(2T,1e,1I){C.1E(q(I,1m){2T=1e.2L(1I,2T,I,1m)});o 2T},8B:q(1B){G 1U=$A(1q).3w(1);o C.2S(q(I){o I[1B].3s(I,1U)})},dO:q(1e,1I){1e=1e||1f.K;G 1s;C.1E(q(I,1m){I=1e.2L(1I,I,1m);E(1s==1j||I>=1s)1s=I});o 1s},dP:q(1e,1I){1e=1e||1f.K;G 1s;C.1E(q(I,1m){I=1e.2L(1I,I,1m);E(1s==1j||I<1s)1s=I});o 1s},dQ:q(1e,1I){1e=1e||1f.K;G 8C=[],8D=[];C.1E(q(I,1m){(1e.2L(1I,I,1m)?8C:8D).1h(I)});o[8C,8D]},5J:q(1z){G U=[];C.1E(q(I){U.1h(I[1z])});o U},dR:q(1e,1I){G U=[];C.1E(q(I,1m){E(!1e.2L(1I,I,1m))U.1h(I)});o U},aO:q(1e,1I){o C.2S(q(I,1m){o{I:I,6r:1e.2L(1I,I,1m)}}).dS(q(2w,5K){G a=2w.6r,b=5K.6r;o a<b?-1:a>b?1:0}).5J(\'I\')},3A:q(){o C.2S()},dT:q(){G 1e=1f.K,1U=$A(1q);E(M.2A(1U.2x()))1e=1U.dU();G aP=[C].1V(1U).2S($A);o C.2S(q(I,1m){o 1e(aP.5J(1m))})},aQ:q(){o C.3A().O},2C:q(){o\'#<2K:\'+C.3A().2C()+\'>\'}};M.17(2K,{2S:2K.8y,8E:2K.7k,2G:2K.5I,2i:2K.5I,dV:2K.1H,dW:2K.3A,dX:2K.8z,dY:2K.aN});q $A(2U){E(!2U)o[];E(2U.3A)o 2U.3A();G O=2U.O||0,U=1t 2m(O);1N(O--)U[O]=2U[O];o U}E(1f.1R.4a){$A=q(2U){E(!2U)o[];E(!(3i 2U===\'q\'&&3i 2U.O===\'3Z\'&&3i 2U.55===\'q\')&&2U.3A)o 2U.3A();G O=2U.O||0,U=1t 2m(O);1N(O--)U[O]=2U[O];o U}}2m.aR=$A;M.17(2m.1k,2K);E(!2m.1k.8F)2m.1k.8F=2m.1k.4n;M.17(2m.1k,{4m:q(1e){18(G i=0,O=C.O;i<O;i++)1e(C[i])},aS:q(){C.O=0;o C},3M:q(){o C[0]},2x:q(){o C[C.O-1]},dZ:q(){o C.2G(q(I){o I!=1j})},aT:q(){o C.3y([],q(2v,I){o 2v.1V(M.4D(I)?I.aT():[I])})},6s:q(){G 1S=$A(1q);o C.2G(q(I){o!1S.1H(I)})},4n:q(aU){o(aU!==1p?C:C.3A()).8F()},e0:q(){o C.O>1?C:C[0]},aV:q(aW){o C.3y([],q(2v,I,1m){E(0==1m||(aW?2v.2x()!=I:!2v.1H(I)))2v.1h(I);o 2v})},e1:q(2v){o C.aV().5I(q(55){o 2v.7k(q(I){o 55===I})})},2F:q(){o[].1V(C)},aQ:q(){o C.O},2C:q(){o\'[\'+C.2S(M.2C).2E(\', \')+\']\'},3t:q(){G U=[];C.1E(q(W){G I=M.3t(W);E(!M.2D(I))U.1h(I)});o\'[\'+U.2E(\', \')+\']\'}});E(M.2A(2m.1k.aX))2m.1k.4m=2m.1k.aX;E(!2m.1k.3r)2m.1k.3r=q(55,i){i||(i=0);G O=C.O;E(i<0)i=O+i;18(;i<O;i++)E(C[i]===55)o i;o-1};E(!2m.1k.8v)2m.1k.8v=q(55,i){i=e2(i)?C.O:(i<0?C.O+i:i)+1;G n=C.3w(0,i).4n().3r(55);o(n<0)?n:i-n-1};2m.1k.3A=2m.1k.2F;q $w(3l){E(!M.3k(3l))o[];3l=3l.4i();o 3l?3l.4f(/\\s+/):[]}E(1f.1R.49){2m.1k.1V=q(){G 2v=[];18(G i=0,O=C.O;i<O;i++)2v.1h(C[i]);18(G i=0,O=1q.O;i<O;i++){E(M.4D(1q[i])){18(G j=0,aY=1q[i].O;j<aY;j++)2v.1h(1q[i][j])}1i{2v.1h(1q[i])}}o 2v}}M.17(56.1k,{e3:q(){o C.4G(2,16)},8m:q(){o C+1},7i:q(1e,1I){$R(0,C,1v).1E(1e,1I);o C},4G:q(O,aZ){G 3l=C.2J(aZ||10);o\'0\'.7i(O-3l.O)+3l},3t:q(){o e4(C)?C.2J():\'1j\'}});$w(\'e5 e6 e7 e8\').1E(q(1B){56.1k[1B]=e9[1B].4F()});q $H(W){o 1t 3Y(W)};G 3Y=2f.2u(2K,(q(){q 8G(1w,I){E(M.2D(I))o 1w;o 1w+\'=\'+b0(22.5y(I))}o{2I:q(W){C.4o=M.8d(W)?W.6t():M.2F(W)},4m:q(1e){18(G 1w 1P C.4o){G I=C.4o[1w],1G=[1w,I];1G.1w=1w;1G.I=I;1e(1G)}},6u:q(1w,I){o C.4o[1w]=I},8H:q(1w){E(C.4o[1w]!==M.1k[1w])o C.4o[1w]},ea:q(1w){G I=C.4o[1w];8I C.4o[1w];o I},6t:q(){o M.2F(C.4o)},4b:q(){o C.5J(\'1w\')},1S:q(){o C.5J(\'I\')},1m:q(I){G 1g=C.7k(q(1G){o 1G.I===I});o 1g&&1g.1w},eb:q(W){o C.2F().57(W)},57:q(W){o 1t 3Y(W).3y(C,q(1s,1G){1s.6u(1G.1w,1G.I);o 1s})},4C:q(){o C.3y([],q(U,1G){G 1w=b0(1G.1w),1S=1G.I;E(1S&&3i 1S==\'W\'){E(M.4D(1S))o U.1V(1S.2S(8G.8e(1w)))}1i U.1h(8G(1w,1S));o U}).2E(\'&\')},2C:q(){o\'#<3Y:{\'+C.2S(q(1G){o 1G.2S(M.2C).2E(\': \')}).2E(\', \')+\'}>\'},3t:q(){o M.3t(C.6t())},2F:q(){o 1t 3Y(C)}}})());3Y.1k.8w=3Y.1k.6t;3Y.aR=$H;G b1=2f.2u(2K,{2I:q(4p,58,5L){C.4p=4p;C.58=58;C.5L=5L},4m:q(1e){G I=C.4p;1N(C.1H(I)){1e(I);I=I.8m()}},1H:q(I){E(I<C.4p)o 1p;E(C.5L)o I<C.58;o I<=C.58}});G $R=q(4p,58,5L){o 1t b1(4p,58,5L)};G 1Q={b2:q(){o ai.aj(q(){o 1t b3()},q(){o 1t b4(\'ec.b5\')},q(){o 1t b4(\'ed.b5\')})||1p},8J:0};1Q.5M={6v:[],4m:q(1e){C.6v.4m(1e)},b6:q(4q){E(!C.1H(4q))C.6v.1h(4q)},ee:q(4q){C.6v=C.6v.6s(4q)},7l:q(31,2V,1Y,3p){C.1E(q(4q){E(M.2A(4q[31])){25{4q[31].3s(4q,[2V,1Y,3p])}2a(e){}}})}};M.17(1Q.5M,2K);1Q.5M.b6({7m:q(){1Q.8J++},3N:q(){1Q.8J--}});1Q.8K=2f.2u({2I:q(V){C.V={1B:\'6w\',7n:1v,6x:\'7o/x-ef-1y-eg\',8L:\'eh-8\',3B:\'\',5E:1v,8M:1v};M.17(C.V,V||{});C.V.1B=C.V.1B.2b();E(M.3k(C.V.3B))C.V.3B=C.V.3B.7h();1i E(M.8d(C.V.3B))C.V.3B=C.V.3B.6t()}});1Q.59=2f.2u(1Q.8K,{8N:1p,2I:q($4c,2W,V){$4c(V);C.1Y=1Q.b2();C.2V(2W)},2V:q(2W){C.2W=2W;C.1B=C.V.1B;G 3a=M.2F(C.V.3B);E(![\'8H\',\'6w\'].1H(C.1B)){3a[\'ei\']=C.1B;C.1B=\'6w\'}C.3B=3a;E(3a=M.4C(3a)){E(C.1B==\'8H\')C.2W+=(C.2W.1H(\'?\')?\'&\':\'?\')+3a;1i E(/ej|a9|a7/.2R(47.48))3a+=\'&6n=\'}25{G 2y=1t 1Q.8O(C);E(C.V.7m)C.V.7m(2y);1Q.5M.7l(\'7m\',C,2y);C.1Y.ek(C.1B.2o(),C.2W,C.V.7n);E(C.V.7n)C.8P.2B(C).4E(1);C.1Y.7p=C.8Q.2B(C);C.b7();C.2c=C.1B==\'6w\'?(C.V.el||3a):1j;C.1Y.em(C.2c);E(!C.V.7n&&C.1Y.b8)C.8Q()}2a(e){C.5a(e)}},8Q:q(){G 2X=C.1Y.2X;E(2X>1&&!((2X==4)&&C.8N))C.8P(C.1Y.2X)},b7:q(){G 5b={\'X-eo-ep\':\'b3\',\'X-1f-89\':1f.89,\'eq\':\'4k/er, 4k/7q, 7o/6y, 4k/6y, */*\'};E(C.1B==\'6w\'){5b[\'8R-1r\']=C.V.6x+(C.V.8L?\'; es=\'+C.V.8L:\'\');E(C.1Y.b8&&(47.48.1g(/79\\/(\\d{4})/)||[0,b9])[1]<b9)5b[\'et\']=\'eu\'}E(3i C.V.ba==\'W\'){G 5N=C.V.ba;E(M.2A(5N.1h))18(G i=0,O=5N.O;i<O;i+=2)5b[5N[i]]=5N[i+1];1i $H(5N).1E(q(1G){5b[1G.1w]=1G.I})}18(G 1d 1P 5b)C.1Y.ev(1d,5b[1d])},5c:q(){G 4I=C.6z();o!4I||(4I>=ew&&4I<ex)},6z:q(){25{o C.1Y.4I||0}2a(e){o 0}},8P:q(2X){G 6A=1Q.59.bb[2X],2y=1t 1Q.8O(C);E(6A==\'8S\'){25{C.8N=1v;(C.V[\'5O\'+2y.4I]||C.V[\'5O\'+(C.5c()?\'ey\':\'ez\')]||1f.3g)(2y,2y.7r)}2a(e){C.5a(e)}G 6x=2y.5P(\'8R-1r\');E(C.V.8M==\'bc\'||(C.V.8M&&C.7s()&&6x&&6x.1g(/^\\s*(4k|7o)\\/(x-)?(eA|eB)4W(;.*)?\\s*$/i)))C.bd()}25{(C.V[\'5O\'+6A]||1f.3g)(2y,2y.7r);1Q.5M.7l(\'5O\'+6A,C,2y,2y.7r)}2a(e){C.5a(e)}E(6A==\'8S\'){C.1Y.7p=1f.3g}},7s:q(){G m=C.2W.1g(/^\\s*eC?:\\/\\/[^\\/]*/);o!m||(m[0]==\'#{8T}//#{8U}#{7t}\'.aF({8T:7u.8T,8U:1b.8U,7t:7u.7t?\':\'+7u.7t:\'\'}))},5P:q(1d){25{o C.1Y.8V(1d)||1j}2a(e){o 1j}},bd:q(){25{o 7f((C.1Y.3b||\'\').8s())}2a(e){C.5a(e)}},5a:q(8W){(C.V.be||1f.3g)(C,8W);1Q.5M.7l(\'be\',C,8W)}});1Q.59.bb=[\'eD\',\'eE\',\'eF\',\'eG\',\'8S\'];1Q.8O=2f.2u({2I:q(2V){C.2V=2V;G 1Y=C.1Y=2V.1Y,2X=C.2X=1Y.2X;E((2X>2&&!1f.1R.3W)||2X==4){C.4I=C.6z();C.8X=C.bf();C.3b=22.5y(1Y.3b);C.7r=C.bg()}E(2X==4){G 6y=1Y.bh;C.bh=M.2D(6y)?1j:6y;C.eH=C.bi()}},4I:0,8X:\'\',6z:1Q.59.1k.6z,bf:q(){25{o C.1Y.8X||\'\'}2a(e){o\'\'}},5P:1Q.59.1k.5P,eI:q(){25{o C.8Y()}2a(e){o 1j}},8V:q(1d){o C.1Y.8V(1d)},8Y:q(){o C.1Y.8Y()},bg:q(){G 3p=C.5P(\'X-aE\');E(!3p)o 1j;3p=8l(al(3p));25{o 3p.5E(C.2V.V.bj||!C.2V.7s())}2a(e){C.2V.5a(e)}},bi:q(){G V=C.2V.V;E(!V.5E||(V.5E!=\'bc\'&&!(C.5P(\'8R-1r\')||\'\').1H(\'7o/3p\'))||C.3b.53())o 1j;25{o C.3b.5E(V.bj||!C.2V.7s())}2a(e){C.2V.5a(e)}}});1Q.bk=2f.2u(1Q.59,{2I:q($4c,3C,2W,V){C.3C={5c:(3C.5c||3C),8Z:(3C.8Z||(3C.5c?1j:3C))};V=M.2F(V);G 3N=V.3N;V.3N=(q(2y,3p){C.bl(2y.3b);E(M.2A(3N))3N(2y,3p)}).2B(C);$4c(2W,V)},bl:q(3b){G 5Q=C.3C[C.5c()?\'5c\':\'8Z\'],V=C.V;E(!V.51)3b=3b.4j();E(5Q=$(5Q)){E(V.5d){E(M.3k(V.5d)){G 5d={};5d[V.5d]=3b;5Q.3D(5d)}1i V.5d(5Q,3b)}1i 5Q.57(3b)}}});1Q.eJ=2f.2u(1Q.8K,{2I:q($4c,3C,2W,V){$4c(V);C.3N=C.V.3N;C.4h=(C.V.4h||2);C.5e=(C.V.5e||1);C.90={};C.3C=3C;C.2W=2W;C.4p()},4p:q(){C.V.3N=C.bm.2B(C);C.6k()},8i:q(){C.90.V.3N=4A;eK(C.41);(C.3N||1f.3g).3s(C,1q)},bm:q(2y){E(C.V.5e){C.5e=(2y.3b==C.bn?C.5e*C.V.5e:1);C.bn=2y.3b}C.41=C.6k.2B(C).8f(C.5e*C.4h)},6k:q(){C.90=1t 1Q.bk(C.3C,C.2W,C.V)}});q $(k){E(1q.O>1){18(G i=0,1Z=[],O=1q.O;i<O;i++)1Z.1h($(1q[i]));o 1Z}E(M.3k(k))k=1b.eL(k);o J.17(k)}E(1f.3K.7a){1b.91=q(1u,7v){G U=[];G 92=1b.2P(1u,$(7v)||1b,1j,eM.eN,1j);18(G i=0,O=92.eO;i<O;i++)U.1h(J.17(92.eP(i)));o U}}E(!1D.6B)G 6B={};E(!6B.bo){M.17(6B,{bo:1,eQ:2,bp:3,eR:4,eS:5,eT:6,eU:7,eV:8,eW:9,eX:10,eY:11,eZ:12})}(q(){G k=C.J;C.J=q(15,2p){2p=2p||{};15=15.2b();G 2Y=J.2Y;E(1f.1R.3W&&2p.1d){15=\'<\'+15+\' 1d="\'+2p.1d+\'">\';8I 2p.1d;o J.6C(1b.3X(15),2p)}E(!2Y[15])2Y[15]=J.17(1b.3X(15));o J.6C(2Y[15].f0(1p),2p)};M.17(C.J,k||{});E(k)C.J.1k=k.1k}).2L(1D);J.2Y={};J.1c={93:q(k){o $(k).Y.3E!=\'7w\'},bq:q(k){k=$(k);J[J.93(k)?\'br\':\'bs\'](k);o k},br:q(k){k=$(k);k.Y.3E=\'7w\';o k},bs:q(k){k=$(k);k.Y.3E=\'\';o k},bt:q(k){k=$(k);k.1W.6D(k);o k},57:q(k,1a){k=$(k);E(1a&&1a.3F)1a=1a.3F();E(M.4d(1a))o k.57().3D(1a);1a=M.4e(1a);k.52=1a.4j();1a.51.2B(1a).4E();o k},1T:q(k,1a){k=$(k);E(1a&&1a.3F)1a=1a.3F();1i E(!M.4d(1a)){1a=M.4e(1a);G 94=k.f1.f2();94.f3(k);1a.51.2B(1a).4E();1a=94.f4(1a.4j())}k.1W.95(1a,k);o k},3D:q(k,3O){k=$(k);E(M.3k(3O)||M.50(3O)||M.4d(3O)||(3O&&(3O.3F||3O.4e)))3O={5f:3O};G 1a,3D,15,3o;18(G 1x 1P 3O){1a=3O[1x];1x=1x.2b();3D=J.5R[1x];E(1a&&1a.3F)1a=1a.3F();E(M.4d(1a)){3D(k,1a);3P}1a=M.4e(1a);15=((1x==\'54\'||1x==\'7x\')?k.1W:k).15.2o();3o=J.7y(15,1a.4j());E(1x==\'2q\'||1x==\'7x\')3o.4n();3o.1E(3D.8e(k));1a.51.2B(1a).4E()}o k},4z:q(k,1L,2p){k=$(k);E(M.4d(1L))$(1L).6C(2p||{});1i E(M.3k(1L))1L=1t J(1L,2p);1i 1L=1t J(\'1O\',1L);E(k.1W)k.1W.95(1L,k);1L.5H(k);o 1L},2C:q(k){k=$(k);G 1s=\'<\'+k.15.2b();$H({\'1o\':\'1o\',\'1l\':\'6E\'}).1E(q(1G){G 1z=1G.3M(),1X=1G.2x();G I=(k[1z]||\'\').2J();E(I)1s+=\' \'+1X+\'=\'+I.2C(1v)});o 1s+\'>\'},7z:q(k,1z){k=$(k);G 1Z=[];1N(k=k[1z])E(k.3j==1)1Z.1h(J.17(k));o 1Z},5S:q(k){o $(k).7z(\'1W\')},96:q(k){o $(k).2G("*")},bu:q(k){k=$(k).5T;1N(k&&k.3j!=1)k=k.4r;o $(k)},f5:q(k){G 5U=$(k).96();G 1e=1;k=5U[5U.O-1e];1N(k&&k.3j!=1&&1e<=5U.O){1e++;k=5U[5U.O-1e]}o $(k)},bv:q(k){E(!(k=$(k).5T))o[];1N(k&&k.3j!=1)k=k.4r;E(k)o[k].1V($(k).4J());o[]},5V:q(k){o $(k).7z(\'bw\')},4J:q(k){o $(k).7z(\'4r\')},f6:q(k){k=$(k);o k.5V().4n().1V(k.4J())},1g:q(k,42){E(M.3k(42))42=1t 14(42);o 42.1g($(k))},f7:q(k,1u,1m){k=$(k);E(1q.O==1)o $(k.1W);G 5S=k.5S();o M.50(1u)?5S[1u]:14.5W(5S,1u,1m)},f8:q(k,1u,1m){k=$(k);E(1q.O==1)o k.bu();o M.50(1u)?k.96()[1u]:J.2G(k,1u)[1m||0]},f9:q(k,1u,1m){k=$(k);E(1q.O==1)o $(14.28.6F(k));G 5V=k.5V();o M.50(1u)?5V[1u]:14.5W(5V,1u,1m)},6G:q(k,1u,1m){k=$(k);E(1q.O==1)o $(14.28.6H(k));G 4J=k.4J();o M.50(1u)?4J[1u]:14.5W(4J,1u,1m)},2G:q(){G 1U=$A(1q),k=$(1U.4X());o 14.7A(k,1U)},5g:q(){G 1U=$A(1q),k=$(1U.4X());o 14.7A(k.1W,1U).6s(k)},97:q(k){k=$(k);G 1o=k.5h(\'1o\'),5C=1q.5A;E(1o)o 1o;do{1o=\'fa\'+5C.bx++}1N($(1o));k.6C(\'1o\',1o);o 1o},5h:q(k,1d){k=$(k);E(1f.1R.3W){G t=J.3Q.7B;E(t.1S[1d])o t.1S[1d](k,1d);E(t.3u[1d])1d=t.3u[1d];E(1d.1H(\':\')){o(!k.2p||!k.2p[1d])?1j:k.2p[1d].I}}o k.98(1d)},6C:q(k,1d,I){k=$(k);G 2p={},t=J.3Q.6I;E(3i 1d==\'W\')2p=1d;1i 2p[1d]=M.2D(I)?1v:I;18(G 2d 1P 2p){1d=t.3u[2d]||2d;I=2p[2d];E(t.1S[2d])1d=t.1S[2d](k,I);E(I===1p||I===1j)k.99(1d);1i E(I===1v)k.by(1d,1d);1i k.by(1d,I)}o k},bz:q(k){o $(k).5X().3c},bA:q(k){o $(k).5X().2j},6J:q(k){o 1t J.7C(k)},7D:q(k,1l){E(!(k=$(k)))o;G 7E=k.1l;o(7E.O>0&&(7E==1l||1t 4g("(^|\\\\s)"+1l+"(\\\\s|$)").2R(7E)))},bB:q(k,1l){E(!(k=$(k)))o;E(!k.7D(1l))k.1l+=(k.1l?\' \':\'\')+1l;o k},bC:q(k,1l){E(!(k=$(k)))o;k.1l=k.1l.1T(1t 4g("(^|\\\\s+)"+1l+"(\\\\s+|$)"),\' \').4i();o k},fb:q(k,1l){E(!(k=$(k)))o;o k[k.7D(1l)?\'bC\':\'bB\'](1l)},fc:q(k){k=$(k);G L=k.5T;1N(L){G bD=L.4r;E(L.3j==3&&!/\\S/.2R(L.4l))k.6D(L);L=bD}o k},5F:q(k){o $(k).52.53()},7F:q(k,3L){k=$(k),3L=$(3L);E(k.bE)o(k.bE(3L)&8)===8;E(3L.5i)o 3L.5i(k)&&3L!==k;1N(k=k.1W)E(k==3L)o 1v;o 1p},bF:q(k){k=$(k);G 5Y=k.4s();1D.bF(5Y[0],5Y[1]);o k},2e:q(k,Y){k=$(k);Y=Y==\'9a\'?\'7G\':Y.8n();G I=k.Y[Y];E(!I||I==\'6K\'){G 9b=1b.fd.fe(k,1j);I=9b?9b[Y]:1j}E(Y==\'3R\')o I?5j(I):1.0;o I==\'6K\'?1j:I},ff:q(k){o $(k).2e(\'3R\')},5Z:q(k,4K){k=$(k);G 9c=k.Y,1g;E(M.3k(4K)){k.Y.9d+=\';\'+4K;o 4K.1H(\'3R\')?k.60(4K.1g(/3R:\\s*(\\d?\\.?\\d*)/)[1]):k}18(G 1z 1P 4K)E(1z==\'3R\')k.60(4K[1z]);1i 9c[(1z==\'9a\'||1z==\'7G\')?(M.2D(9c.9e)?\'7G\':\'9e\'):1z]=4K[1z];o k},60:q(k,I){k=$(k);k.Y.3R=(I==1||I===\'\')?\'\':(I<0.7H)?0:I;o k},5X:q(k){k=$(k);G 3E=k.2e(\'3E\');E(3E!=\'7w\'&&3E!=1j)o{2j:k.61,3c:k.62};G 43=k.Y;G bG=43.9f;G bH=43.1x;G bI=43.3E;43.9f=\'5k\';43.1x=\'63\';43.3E=\'fg\';G bJ=k.bK;G bL=k.bM;43.3E=bI;43.1x=bH;43.9f=bG;o{2j:bJ,3c:bL}},fh:q(k){k=$(k);G 5Y=J.2e(k,\'1x\');E(5Y==\'64\'||!5Y){k.9g=1v;k.Y.1x=\'6L\';E(1f.1R.49){k.Y.2q=0;k.Y.2w=0}}o k},fi:q(k){k=$(k);E(k.9g){k.9g=4A;k.Y.1x=k.Y.2q=k.Y.2w=k.Y.5f=k.Y.5K=\'\'}o k},fj:q(k){k=$(k);E(k.5l)o k;k.5l=J.2e(k,\'9h\')||\'6K\';E(k.5l!==\'5k\')k.Y.9h=\'5k\';o k},fk:q(k){k=$(k);E(!k.5l)o k;k.Y.9h=k.5l==\'6K\'?\'\':k.5l;k.5l=1j;o k},4s:q(k){G 2M=0,2N=0;do{2M+=k.5m||0;2N+=k.5n||0;k=k.2O}1N(k);o J.4t(2N,2M)},6M:q(k){G 2M=0,2N=0;do{2M+=k.5m||0;2N+=k.5n||0;k=k.2O;E(k){E(k.15.2o()==\'bN\')2h;G p=J.2e(k,\'1x\');E(p!==\'64\')2h}}1N(k);o J.4t(2N,2M)},9i:q(k){k=$(k);E(k.2e(\'1x\')==\'63\')o k;G 9j=k.6M();G 2q=9j[1];G 2w=9j[0];G 2j=k.bK;G 3c=k.bM;k.bO=2w-5j(k.Y.2w||0);k.bP=2q-5j(k.Y.2q||0);k.bQ=k.Y.2j;k.bR=k.Y.3c;k.Y.1x=\'63\';k.Y.2q=2q+\'3q\';k.Y.2w=2w+\'3q\';k.Y.2j=2j+\'3q\';k.Y.3c=3c+\'3q\';o k},9k:q(k){k=$(k);E(k.2e(\'1x\')==\'6L\')o k;k.Y.1x=\'6L\';G 2q=5j(k.Y.2q||0)-(k.bP||0);G 2w=5j(k.Y.2w||0)-(k.bO||0);k.Y.2q=2q+\'3q\';k.Y.2w=2w+\'3q\';k.Y.3c=k.bR;k.Y.2j=k.bQ;o k},9l:q(k){G 2M=0,2N=0;do{2M+=k.4u||0;2N+=k.4v||0;k=k.1W}1N(k);o J.4t(2N,2M)},65:q(k){E(k.2O)o $(k.2O);E(k==1b.2c)o $(k);1N((k=k.1W)&&k!=1b.2c)E(J.2e(k,\'1x\')!=\'64\')o $(k);o $(1b.2c)},6N:q(9m){G 2M=0,2N=0;G k=9m;do{2M+=k.5m||0;2N+=k.5n||0;E(k.2O==1b.2c&&J.2e(k,\'1x\')==\'63\')2h}1N(k=k.2O);k=9m;do{E(!1f.1R.49||(k.15&&(k.15.2o()==\'bN\'))){2M-=k.4u||0;2N-=k.4v||0}}1N(k=k.1W);o J.4t(2N,2M)},bS:q(k,24){G V=M.17({bT:1v,bU:1v,bV:1v,bW:1v,5m:0,5n:0},1q[2]||{});24=$(24);G p=24.6N();k=$(k);G 66=[0,0];G 2Q=1j;E(J.2e(k,\'1x\')==\'63\'){2Q=k.65();66=2Q.6N()}E(2Q==1b.2c){66[0]-=1b.2c.5n;66[1]-=1b.2c.5m}E(V.bT)k.Y.2w=(p[0]-66[0]+V.5n)+\'3q\';E(V.bU)k.Y.2q=(p[1]-66[1]+V.5m)+\'3q\';E(V.bV)k.Y.2j=24.61+\'3q\';E(V.bW)k.Y.3c=24.62+\'3q\';o k}};J.1c.97.bx=1;M.17(J.1c,{fl:J.1c.2G,fm:J.1c.bv});J.3Q={6I:{3u:{1l:\'6E\',bX:\'18\'},1S:{}}};E(1f.1R.49){J.1c.2e=J.1c.2e.4z(q(2Z,k,Y){4Z(Y){2g\'2w\':2g\'2q\':2g\'5K\':2g\'5f\':E(2Z(k,\'1x\')===\'64\')o 1j;2g\'3c\':2g\'2j\':E(!J.93(k))o 1j;G 7I=bY(2Z(k,Y),10);E(7I!==k[\'3d\'+Y.6m()])o 7I+\'3q\';G 3h;E(Y===\'3c\'){3h=[\'7J-2q-2j\',\'7K-2q\',\'7K-5f\',\'7J-5f-2j\']}1i{3h=[\'7J-2w-2j\',\'7K-2w\',\'7K-5K\',\'7J-5K-2j\']}o 3h.3y(7I,q(2T,1z){G 9n=2Z(k,1z);o 9n===1j?2T:2T-bY(9n,10)})+\'3q\';67:o 2Z(k,Y)}});J.1c.5h=J.1c.5h.4z(q(2Z,k,1X){E(1X===\'7L\')o k.7L;o 2Z(k,1X)})}1i E(1f.1R.3W){J.1c.65=J.1c.65.4z(q(2Z,k){k=$(k);25{k.2O}2a(e){o $(1b.2c)}G 1x=k.2e(\'1x\');E(1x!==\'64\')o 2Z(k);k.5Z({1x:\'6L\'});G I=2Z(k);k.5Z({1x:1x});o I});$w(\'6M 6N\').1E(q(1B){J.1c[1B]=J.1c[1B].4z(q(2Z,k){k=$(k);25{k.2O}2a(e){o J.4t(0,0)}G 1x=k.2e(\'1x\');E(1x!==\'64\')o 2Z(k);G 2O=k.65();E(2O&&2O.2e(\'1x\')===\'fn\')2O.5Z({9o:1});k.5Z({1x:\'6L\'});G I=2Z(k);k.5Z({1x:1x});o I})});J.1c.4s=J.1c.4s.4z(q(2Z,k){25{k.2O}2a(e){o J.4t(0,0)}o 2Z(k)});J.1c.2e=q(k,Y){k=$(k);Y=(Y==\'9a\'||Y==\'7G\')?\'9e\':Y.8n();G I=k.Y[Y];E(!I&&k.5o)I=k.5o[Y];E(Y==\'3R\'){E(I=(k.2e(\'2i\')||\'\').1g(/9p\\(3R=(.*)\\)/))E(I[1])o 5j(I[1])/bZ;o 1.0}E(I==\'6K\'){E((Y==\'2j\'||Y==\'3c\')&&(k.2e(\'3E\')!=\'7w\'))o k[\'3d\'+Y.6m()]+\'3q\';o 1j}o I};J.1c.60=q(k,I){q 9q(2i){o 2i.1T(/9p\\([^\\)]*\\)/gi,\'\')}k=$(k);G 5o=k.5o;E((5o&&!5o.fo)||(!5o&&k.Y.9o==\'c0\'))k.Y.9o=1;G 2i=k.2e(\'2i\'),Y=k.Y;E(I==1||I===\'\'){(2i=9q(2i))?Y.2i=2i:Y.99(\'2i\');o k}1i E(I<0.7H)I=0;Y.2i=9q(2i)+\'9p(3R=\'+(I*bZ)+\')\';o k};J.3Q={7B:{3u:{\'6E\':\'1l\',\'18\':\'bX\'},1S:{7M:q(k,1X){o k.98(1X,2)},c1:q(k,1X){G L=k.c2(1X);o L?L.I:""},2r:q(k,1X){1X=k.98(1X);o 1X?1X.2J().3w(23,-2):1j},6O:q(k,1X){o $(k).3S(1X)?1X:1j},Y:q(k){o k.Y.9d.2b()},7L:q(k){o k.7L}}}};J.3Q.6I={3u:M.17({fp:\'fq\',fr:\'fs\'},J.3Q.7B.3u),1S:{3T:q(k,I){k.3T=!!I},Y:q(k,I){k.Y.9d=I?I:\'\'}}};J.3Q.9r={};$w(\'ft fu fv fw fx 7N \'+\'fy fz fA fB fC\').1E(q(2d){J.3Q.6I.3u[2d.2b()]=2d;J.3Q.9r[2d.2b()]=2d});(q(v){M.17(v,{c3:v.7M,c4:v.7M,1r:v.7M,68:v.c1,3G:v.6O,3T:v.6O,fD:v.6O,fE:v.6O,fF:v.2r,c5:v.2r,fG:v.2r,fH:v.2r,fI:v.2r,fJ:v.2r,fK:v.2r,fL:v.2r,fM:v.2r,fN:v.2r,fO:v.2r,fP:v.2r,fQ:v.2r,fR:v.2r,fS:v.2r,fT:v.2r,fU:v.2r,fV:v.2r})})(J.3Q.7B.1S)}1i E(1f.1R.79&&/fW:1\\.8\\.0/.2R(47.48)){J.1c.60=q(k,I){k=$(k);k.Y.3R=(I==1)?0.fX:(I===\'\')?\'\':(I<0.7H)?0:I;o k}}1i E(1f.1R.4a){J.1c.60=q(k,I){k=$(k);k.Y.3R=(I==1||I===\'\')?\'\':(I<0.7H)?0:I;E(I==1)E(k.15.2o()==\'c6\'&&k.2j){k.2j++;k.2j--}1i 25{G n=1b.aI(\' \');k.5H(n);k.6D(n)}2a(e){}o k};J.1c.4s=q(k){G 2M=0,2N=0;do{2M+=k.5m||0;2N+=k.5n||0;E(k.2O==1b.2c)E(J.2e(k,\'1x\')==\'63\')2h;k=k.2O}1N(k);o J.4t(2N,2M)}}E(1f.1R.3W||1f.1R.49){J.1c.57=q(k,1a){k=$(k);E(1a&&1a.3F)1a=1a.3F();E(M.4d(1a))o k.57().3D(1a);1a=M.4e(1a);G 15=k.15.2o();E(15 1P J.5R.4L){$A(k.3o).1E(q(L){k.6D(L)});J.7y(15,1a.4j()).1E(q(L){k.5H(L)})}1i k.52=1a.4j();1a.51.2B(1a).4E();o k}}E(\'c7\'1P 1b.3X(\'1O\')){J.1c.1T=q(k,1a){k=$(k);E(1a&&1a.3F)1a=1a.3F();E(M.4d(1a)){k.1W.95(1a,k);o k}1a=M.4e(1a);G 2Q=k.1W,15=2Q.15.2o();E(J.5R.4L[15]){G 4r=k.6G();G 9s=J.7y(15,1a.4j());2Q.6D(k);E(4r)9s.1E(q(L){2Q.7O(L,4r)});1i 9s.1E(q(L){2Q.5H(L)})}1i k.c7=1a.4j();1a.51.2B(1a).4E();o k}}J.4t=q(l,t){G 1s=[l,t];1s.2w=l;1s.2q=t;o 1s};J.7y=q(15,7q){G 1O=1t J(\'1O\'),t=J.5R.4L[15];E(t){1O.52=t[0]+7q+t[1];t[2].7i(q(){1O=1O.5T})}1i 1O.52=7q;o $A(1O.3o)};J.5R={54:q(k,L){k.1W.7O(L,k)},2q:q(k,L){k.7O(L,k.5T)},5f:q(k,L){k.5H(L)},7x:q(k,L){k.1W.7O(L,k.4r)},4L:{fY:[\'<4M>\',\'</4M>\',1],7P:[\'<4M><69>\',\'</69></4M>\',2],c8:[\'<4M><69><7Q>\',\'</7Q></69></4M>\',3],9t:[\'<4M><69><7Q><c9>\',\'</c9></7Q></69></4M>\',4],ca:[\'<2G>\',\'</2G>\',1]}};(q(){M.17(C.4L,{cb:C.4L.7P,cc:C.4L.7P,cd:C.4L.9t})}).2L(J.5R);J.1c.7R={3S:q(k,1X){1X=J.3Q.9r[1X]||1X;G L=$(k).c2(1X);o!!(L&&L.fZ)}};J.1c.3H={};M.17(J,J.1c);E(!1f.3K.6g&&1b.3X(\'1O\')[\'4V\']){1D.6h={};1D.6h.1k=1b.3X(\'1O\')[\'4V\'];1f.3K.6g=1v}J.17=(q(){E(1f.3K.7b)o 1f.K;G 1c={},3H=J.1c.3H;G 17=M.17(q(k){E(!k||k.7S||k.3j!=1||k==1D)o k;G 2H=M.2F(1c),15=k.15.2o(),1z,I;E(3H[15])M.17(2H,3H[15]);18(1z 1P 2H){I=2H[1z];E(M.2A(I)&&!(1z 1P k))k[1z]=I.4F()}k.7S=1f.3g;o k},{7T:q(){E(!1f.3K.6g){M.17(1c,J.1c);M.17(1c,J.1c.7R)}}});17.7T();o 17})();J.3S=q(k,1X){E(k.3S)o k.3S(1X);o J.1c.7R.3S(k,1X)};J.6i=q(2H){G F=1f.3K,T=J.1c.3H;E(!2H){M.17(1C,1C.1c);M.17(1C.J,1C.J.1c);M.17(J.1c.3H,{"g0":M.2F(1C.1c),"g1":M.2F(1C.J.1c),"ca":M.2F(1C.J.1c),"ce":M.2F(1C.J.1c)})}E(1q.O==2){G 15=2H;2H=1q[1]}E(!15)M.17(J.1c,2H||{});1i{E(M.4D(15))15.1E(17);1i 17(15)}q 17(15){15=15.2o();E(!J.1c.3H[15])J.1c.3H[15]={};M.17(J.1c.3H[15],2H)}q 7U(2H,5x,7V){7V=7V||1p;18(G 1z 1P 2H){G I=2H[1z];E(!M.2A(I))3P;E(!7V||!(1z 1P 5x))5x[1z]=I.4F()}}q cf(15){G 1M;G 9u={"g2":"g3","ce":"g4","P":"g5","g6":"g7","g8":"g9","ga":"gb","gc":"gd","ge":"gf","gg":"6a","gh":"6a","gj":"6a","gk":"6a","gl":"6a","gm":"6a","Q":"gn","go":"cg","gp":"cg","A":"gq","c6":"gr","gs":"gu","gv":"ch","gw":"ch","cb":"9v","cc":"9v","7P":"9v","c8":"gx","cd":"ci","9t":"ci","gy":"gz","gA":"gB"};E(9u[15])1M=\'9w\'+9u[15]+\'J\';E(1D[1M])o 1D[1M];1M=\'9w\'+15+\'J\';E(1D[1M])o 1D[1M];1M=\'9w\'+15.6m()+\'J\';E(1D[1M])o 1D[1M];1D[1M]={};1D[1M].1k=1b.3X(15)[\'4V\'];o 1D[1M]}E(F.6g){7U(J.1c,6h.1k);7U(J.1c.7R,6h.1k,1v)}E(F.7b){18(G 9x 1P J.1c.3H){G 1M=cf(9x);E(M.2D(1M))3P;7U(T[9x],1M.1k)}}M.17(J,J.1c);8I J.3H;E(J.17.7T)J.17.7T();J.2Y={}};1b.gC={5X:q(){G 6P={},B=1f.1R;$w(\'2j 3c\').1E(q(d){G D=d.6m();E(B.4a&&!1b.2P){6P[d]=5C[\'gD\'+D]}1i E(B.49&&5j(1D.gE.gF())<9.5){6P[d]=1b.2c[\'cj\'+D]}1i{6P[d]=1b.5p[\'cj\'+D]}});o 6P},bA:q(){o C.5X().2j},bz:q(){o C.5X().3c},gG:q(){o J.4t(1D.ck||1b.5p.4v||1b.2c.4v,1D.cl||1b.5p.4u||1b.2c.4u)}};G 14=2f.2u({2I:q(1u){C.1u=1u.4i();E(C.cm()){C.4N=\'co\'}1i E(C.cp()){C.4N=\'2s\';C.cq()}1i{C.4N="c0";C.cr()}},cp:q(){E(!1f.3K.7a)o 1p;G e=C.1u;E(1f.1R.4a&&(e.1H("-2z-1r")||e.1H(":5F")))o 1p;E((/(\\[[\\w-]*?:|:3T)/).2R(e))o 1p;o 1v},cm:q(){E(!1f.3K.aa)o 1p;E(!14.9y)14.9y=1t J(\'1O\');25{14.9y.ab(C.1u)}2a(e){o 1p}o 1v},cr:q(){G e=C.1u,4w=14.6Q,h=14.28,c=14.6r,3I,p,m;E(14.5q[e]){C.3U=14.5q[e];o}C.3U=["C.3U = q(1n) {","G r = 1n, h = 14.28, c = 1p, n;"];1N(e&&3I!=e&&(/\\S/).2R(e)){3I=e;18(G i 1P 4w){p=4w[i];E(m=e.1g(p)){C.3U.1h(M.2A(c[i])?c[i](m):1t 32(c[i]).2P(m));e=e.1T(m[0],\'\');2h}}}C.3U.1h("o h.9z(n);\\n}");7f(C.3U.2E(\'\\n\'));14.5q[C.1u]=C.3U},cq:q(){G e=C.1u,4w=14.6Q,x=14.2s,3I,m;E(14.5q[e]){C.2s=14.5q[e];o}C.3U=[\'.//*\'];1N(e&&3I!=e&&(/\\S/).2R(e)){3I=e;18(G i 1P 4w){E(m=e.1g(4w[i])){C.3U.1h(M.2A(x[i])?x[i](m):1t 32(x[i]).2P(m));e=e.1T(m[0],\'\');2h}}}C.2s=C.3U.2E(\'\');14.5q[C.1u]=C.2s},7W:q(1n){1n=1n||1b;G e=C.1u,U;4Z(C.4N){2g\'co\':E(1n!==1b){G cs=1n.1o,1o=$(1n).97();e="#"+1o+" "+e}U=$A(1n.gH(e)).2S(J.17);1n.1o=cs;o U;2g\'2s\':o 1b.91(C.2s,1n);67:o C.3U(1n)}},1g:q(k){C.9A=[];G e=C.1u,4w=14.6Q,as=14.9B;G 3I,p,m;1N(e&&3I!==e&&(/\\S/).2R(e)){3I=e;18(G i 1P 4w){p=4w[i];E(m=e.1g(p)){E(as[i]){C.9A.1h([i,M.2F(m)]);e=e.1T(m[0],\'\')}1i{o C.7W(1b).1H(k)}}}}G 1g=1v,1d,2t;18(G i=0,7X;7X=C.9A[i];i++){1d=7X[0],2t=7X[1];E(!14.9B[1d](k,2t)){1g=1p;2h}}o 1g},2J:q(){o C.1u},2C:q(){o"#<14:"+C.1u.2C()+">"}});M.17(14,{5q:{},2s:{4O:"//*",1J:"/*",5g:"/6R-4P::*[1]",6S:\'/6R-4P::*\',15:q(m){E(m[1]==\'*\')o\'\';o"[ct-1d()=\'"+m[1].2b()+"\' cu ct-1d()=\'"+m[1].2o()+"\']"},1l:"[5i(1V(\' \', @6E, \' \'), \' #{1} \')]",1o:"[@1o=\'#{1}\']",6b:q(m){m[1]=m[1].2b();o 1t 32("[@#{1}]").2P(m)},2d:q(m){m[1]=m[1].2b();m[3]=m[5]||m[6];o 1t 32(14.2s.6T[m[2]]).2P(m)},6U:q(m){G h=14.2s.2k[m[1]];E(!h)o\'\';E(M.2A(h))o h(m);o 1t 32(14.2s.2k[m[1]]).2P(m)},6T:{\'=\':"[@#{1}=\'#{3}\']",\'!=\':"[@#{1}!=\'#{3}\']",\'^=\':"[gI-gJ(@#{1}, \'#{3}\')]",\'$=\':"[5D(@#{1}, (3l-O(@#{1}) - 3l-O(\'#{3}\') + 1))=\'#{3}\']",\'*=\':"[5i(@#{1}, \'#{3}\')]",\'~=\':"[5i(1V(\' \', @#{1}, \' \'), \' #{3} \')]",\'|=\':"[5i(1V(\'-\', @#{1}, \'-\'), \'-#{3}-\')]"},2k:{\'3M-1J\':\'[4Q(9C-4P::*)]\',\'2x-1J\':\'[4Q(6R-4P::*)]\',\'6V-1J\':\'[4Q(9C-4P::* cu 6R-4P::*)]\',\'5F\':"[3x(*) = 0 6W (3x(4k()) = 0)]",\'3T\':"[@3T]",\'3G\':"[(@3G) 6W (@1r!=\'5k\')]",\'cv\':"[4Q(@3G) 6W (@1r!=\'5k\')]",\'4Q\':q(m){G e=m[6],p=14.6Q,x=14.2s,3I,v;G 9D=[];1N(e&&3I!=e&&(/\\S/).2R(e)){3I=e;18(G i 1P p){E(m=e.1g(p[i])){v=M.2A(x[i])?x[i](m):1t 32(x[i]).2P(m);9D.1h("("+v.5D(1,v.O-1)+")");e=e.1T(m[0],\'\');2h}}}o"[4Q("+9D.2E(" 6W ")+")]"},\'20-1J\':q(m){o 14.2s.2k.20("(3x(./9C-4P::*) + 1) ",m)},\'20-2x-1J\':q(m){o 14.2s.2k.20("(3x(./6R-4P::*) + 1) ",m)},\'20-2z-1r\':q(m){o 14.2s.2k.20("1x() ",m)},\'20-2x-2z-1r\':q(m){o 14.2s.2k.20("(2x() + 1 - 1x()) ",m)},\'3M-2z-1r\':q(m){m[6]="1";o 14.2s.2k[\'20-2z-1r\'](m)},\'2x-2z-1r\':q(m){m[6]="1";o 14.2s.2k[\'20-2x-2z-1r\'](m)},\'6V-2z-1r\':q(m){G p=14.2s.2k;o p[\'3M-2z-1r\'](m)+p[\'2x-2z-1r\'](m)},20:q(6c,m){G 44,1K=m[6],9E;E(1K==\'cw\')1K=\'2n+0\';E(1K==\'cx\')1K=\'2n+1\';E(44=1K.1g(/^(\\d+)$/))o\'[\'+6c+"= "+44[1]+\']\';E(44=1K.1g(/^(-?\\d*)?n(([+-])(\\d+))?/)){E(44[1]=="-")44[1]=-1;G a=44[1]?56(44[1]):1;G b=44[2]?56(44[2]):0;9E="[((#{6c} - #{b}) gK #{a} = 0) 6W "+"((#{6c} - #{b}) 1O #{a} >= 0)]";o 1t 32(9E).2P({6c:6c,a:a,b:b})}}}},6r:{15:\'n = h.15(n, r, "#{1}", c);      c = 1p;\',1l:\'n = h.1l(n, r, "#{1}", c);    c = 1p;\',1o:\'n = h.1o(n, r, "#{1}", c);           c = 1p;\',6b:\'n = h.6b(n, r, "#{1}", c); c = 1p;\',2d:q(m){m[3]=(m[5]||m[6]);o 1t 32(\'n = h.2d(n, r, "#{1}", "#{3}", "#{2}", c); c = 1p;\').2P(m)},6U:q(m){E(m[6])m[6]=m[6].1T(/"/g,\'\\\\"\');o 1t 32(\'n = h.6U(n, "#{1}", "#{6}", r, c); c = 1p;\').2P(m)},4O:\'c = "4O";\',1J:\'c = "1J";\',5g:\'c = "5g";\',6S:\'c = "6S";\'},6Q:{6S:/^\\s*~\\s*/,1J:/^\\s*>\\s*/,5g:/^\\s*\\+\\s*/,4O:/^\\s/,15:/^\\s*(\\*|[\\w\\-]+)(\\b|$)?/,1o:/^#([\\w\\-\\*]+)(\\b|$)/,1l:/^\\.([\\w\\-\\*]+)(\\b|$)/,6U:/^:((3M|2x|20|20-2x|6V)(-1J|-2z-1r)|5F|3T|(en|gL)gM|4Q)(\\((.*?)\\))?(\\b|$|(?=\\s|[:+~>]))/,6b:/^\\[((?:[\\w]+:)?[\\w]+)\\]/,2d:/\\[((?:[\\w-]*:)?[\\w-]+)\\s*(?:([!^$*~|]?=)\\s*(([\'"])([^\\4]*?)\\4|([^\'"][^\\]]*?)))?\\]/},9B:{15:q(k,2t){o 2t[1].2o()==k.15.2o()},1l:q(k,2t){o J.7D(k,2t[1])},1o:q(k,2t){o k.1o===2t[1]},6b:q(k,2t){o J.3S(k,2t[1])},2d:q(k,2t){G 4l=J.5h(k,2t[1]);o 4l&&14.6T[2t[2]](4l,2t[5]||2t[6])}},28:{1V:q(a,b){18(G i=0,L;L=b[i];i++)a.1h(L);o a},7Y:q(N){G cy=1f.3g;18(G i=0,L;L=N[i];i++)L.3V=cy;o N},5r:q(N){18(G i=0,L;L=N[i];i++)L.3V=4A;o N},1m:q(1W,4n,6X){1W.3V=1f.3g;E(4n){18(G N=1W.3o,i=N.O-1,j=1;i>=0;i--){G L=N[i];E(L.3j==1&&(!6X||L.3V))L.7Z=j++}}1i{18(G i=0,j=1,N=1W.3o;L=N[i];i++)E(L.3j==1&&(!6X||L.3V))L.7Z=j++}},9z:q(N){E(N.O==0)o N;G U=[],n;18(G i=0,l=N.O;i<l;i++)E(!(n=N[i]).3V){n.3V=1f.3g;U.1h(J.17(n))}o 14.28.5r(U)},4O:q(N){G h=14.28;18(G i=0,U=[],L;L=N[i];i++)h.1V(U,L.4x(\'*\'));o U},1J:q(N){G h=14.28;18(G i=0,U=[],L;L=N[i];i++){18(G j=0,1J;1J=L.3o[j];j++)E(1J.3j==1&&1J.15!=\'!\')U.1h(1J)}o U},5g:q(N){18(G i=0,U=[],L;L=N[i];i++){G 6G=C.6H(L);E(6G)U.1h(6G)}o U},6S:q(N){G h=14.28;18(G i=0,U=[],L;L=N[i];i++)h.1V(U,J.4J(L));o U},6H:q(L){1N(L=L.4r)E(L.3j==1)o L;o 1j},6F:q(L){1N(L=L.bw)E(L.3j==1)o L;o 1j},15:q(N,1n,15,29){G cz=15.2o();G U=[],h=14.28;E(N){E(29){E(29=="4O"){18(G i=0,L;L=N[i];i++)h.1V(U,L.4x(15));o U}1i N=C[29](N);E(15=="*")o N}18(G i=0,L;L=N[i];i++)E(L.15.2o()===cz)U.1h(L);o U}1i o 1n.4x(15)},1o:q(N,1n,1o,29){G 3e=$(1o),h=14.28;E(!3e)o[];E(!N&&1n==1b)o[3e];E(N){E(29){E(29==\'1J\'){18(G i=0,L;L=N[i];i++)E(3e.1W==L)o[3e]}1i E(29==\'4O\'){18(G i=0,L;L=N[i];i++)E(J.7F(3e,L))o[3e]}1i E(29==\'5g\'){18(G i=0,L;L=N[i];i++)E(14.28.6F(3e)==L)o[3e]}1i N=h[29](N)}18(G i=0,L;L=N[i];i++)E(L==3e)o[3e];o[]}o(3e&&J.7F(3e,1n))?[3e]:[]},1l:q(N,1n,1l,29){E(N&&29)N=C[29](N);o 14.28.cA(N,1n,1l)},cA:q(N,1n,1l){E(!N)N=14.28.4O([1n]);G cB=\' \'+1l+\' \';18(G i=0,U=[],L,6Y;L=N[i];i++){6Y=L.1l;E(6Y.O==0)3P;E(6Y==1l||(\' \'+6Y+\' \').1H(cB))U.1h(L)}o U},6b:q(N,1n,2d,29){E(!N)N=1n.4x("*");E(N&&29)N=C[29](N);G U=[];18(G i=0,L;L=N[i];i++)E(J.3S(L,2d))U.1h(L);o U},2d:q(N,1n,2d,I,cC,29){E(!N)N=1n.4x("*");E(N&&29)N=C[29](N);G 2l=14.6T[cC],U=[];18(G i=0,L;L=N[i];i++){G 4l=J.5h(L,2d);E(4l===1j)3P;E(2l(4l,I))U.1h(L)}o U},6U:q(N,1d,I,1n,29){E(N&&29)N=C[29](N);E(!N)N=1n.4x("*");o 14.2k[1d](N,I,1n)}},2k:{\'3M-1J\':q(N,I,1n){18(G i=0,U=[],L;L=N[i];i++){E(14.28.6F(L))3P;U.1h(L)}o U},\'2x-1J\':q(N,I,1n){18(G i=0,U=[],L;L=N[i];i++){E(14.28.6H(L))3P;U.1h(L)}o U},\'6V-1J\':q(N,I,1n){G h=14.28;18(G i=0,U=[],L;L=N[i];i++)E(!h.6F(L)&&!h.6H(L))U.1h(L);o U},\'20-1J\':q(N,1K,1n){o 14.2k.20(N,1K,1n)},\'20-2x-1J\':q(N,1K,1n){o 14.2k.20(N,1K,1n,1v)},\'20-2z-1r\':q(N,1K,1n){o 14.2k.20(N,1K,1n,1p,1v)},\'20-2x-2z-1r\':q(N,1K,1n){o 14.2k.20(N,1K,1n,1v,1v)},\'3M-2z-1r\':q(N,1K,1n){o 14.2k.20(N,"1",1n,1p,1v)},\'2x-2z-1r\':q(N,1K,1n){o 14.2k.20(N,"1",1n,1v,1v)},\'6V-2z-1r\':q(N,1K,1n){G p=14.2k;o p[\'2x-2z-1r\'](p[\'3M-2z-1r\'](N,1K,1n),1K,1n)},cD:q(a,b,cE){E(a==0)o b>0?[b]:[];o $R(1,cE).3y([],q(2T,i){E(0==(i-b)%a&&(i-b)/a>=0)2T.1h(i);o 2T})},20:q(N,1K,1n,4n,6X){E(N.O==0)o[];E(1K==\'cw\')1K=\'2n+0\';E(1K==\'cx\')1K=\'2n+1\';G h=14.28,U=[],9F=[],m;h.7Y(N);18(G i=0,L;L=N[i];i++){E(!L.1W.3V){h.1m(L.1W,4n,6X);9F.1h(L.1W)}}E(1K.1g(/^\\d+$/)){1K=56(1K);18(G i=0,L;L=N[i];i++)E(L.7Z==1K)U.1h(L)}1i E(m=1K.1g(/^(-?\\d*)?n(([+-])(\\d+))?/)){E(m[1]=="-")m[1]=-1;G a=m[1]?56(m[1]):1;G b=m[2]?56(m[2]):0;G 9G=14.2k.cD(a,b,N.O);18(G i=0,L,l=9G.O;L=N[i];i++){18(G j=0;j<l;j++)E(L.7Z==9G[j])U.1h(L)}}h.5r(N);h.5r(9F);o U},\'5F\':q(N,I,1n){18(G i=0,U=[],L;L=N[i];i++){E(L.15==\'!\'||L.5T)3P;U.1h(L)}o U},\'4Q\':q(N,42,1n){G h=14.28,gN,m;G 9H=1t 14(42).7W(1n);h.7Y(9H);18(G i=0,U=[],L;L=N[i];i++)E(!L.3V)U.1h(L);h.5r(9H);o U},\'cv\':q(N,I,1n){18(G i=0,U=[],L;L=N[i];i++)E(!L.3G&&(!L.1r||L.1r!==\'5k\'))U.1h(L);o U},\'3G\':q(N,I,1n){18(G i=0,U=[],L;L=N[i];i++)E(L.3G)U.1h(L);o U},\'3T\':q(N,I,1n){18(G i=0,U=[],L;L=N[i];i++)E(L.3T)U.1h(L);o U}},6T:{\'=\':q(21,v){o 21==v},\'!=\':q(21,v){o 21!=v},\'^=\':q(21,v){o 21==v||21&&21.8t(v)},\'$=\':q(21,v){o 21==v||21&&21.8u(v)},\'*=\':q(21,v){o 21==v||21&&21.1H(v)},\'$=\':q(21,v){o 21.8u(v)},\'*=\':q(21,v){o 21.1H(v)},\'~=\':q(21,v){o(\' \'+21+\' \').1H(\' \'+v+\' \')},\'|=\':q(21,v){o(\'-\'+(21||"").2o()+\'-\').1H(\'-\'+(v||"").2o()+\'-\')}},4f:q(1u){G 4R=[];1u.ar(/(([\\w#:.~>+()\\s-]+|\\*|\\[.*?\\])+)\\s*(,|$)/,q(m){4R.1h(m[1].4i())});o 4R},cF:q(1Z,1u){G 2t=$$(1u),h=14.28;h.7Y(2t);18(G i=0,U=[],k;k=1Z[i];i++)E(k.3V)U.1h(k);h.5r(2t);o U},5W:q(1Z,1u,1m){E(M.50(1u)){1m=1u;1u=1p}o 14.cF(1Z,1u||\'*\')[1m||0]},7A:q(k,4R){4R=14.4f(4R.2E(\',\'));G U=[],h=14.28;18(G i=0,l=4R.O,42;i<l;i++){42=1t 14(4R[i].4i());h.1V(U,42.7W(k))}o(l>1)?h.9z(U):U}});E(1f.1R.3W){M.17(14.28,{1V:q(a,b){18(G i=0,L;L=b[i];i++)E(L.15!=="!")a.1h(L);o a},5r:q(N){18(G i=0,L;L=N[i];i++)L.99(\'3V\');o N}})}q $$(){o 14.7A(1b,$A(1q))}G 1C={9I:q(1y){$(1y).9I();o 1y},cG:q(1Z,V){E(3i V!=\'W\')V={3z:!!V};1i E(M.2D(V.3z))V.3z=1v;G 1w,I,9J=1p,5s=V.5s;G 7g=1Z.3y({},q(1s,k){E(!k.3G&&k.1d){1w=k.1d;I=$(k).3f();E(I!=1j&&k.1r!=\'gO\'&&(k.1r!=\'5s\'||(!9J&&5s!==1p&&(!5s||1w==5s)&&(9J=1v)))){E(1w 1P 1s){E(!M.4D(1s[1w]))1s[1w]=[1s[1w]];1s[1w].1h(I)}1i 1s[1w]=I}}o 1s});o V.3z?7g:M.4C(7g)}};1C.1c={6Z:q(1y,V){o 1C.cG(1C.6d(1y),V)},6d:q(1y){o $A($(1y).4x(\'*\')).3y([],q(1Z,1J){E(1C.J.6e[1J.15.2b()])1Z.1h(J.17(1J));o 1Z})},gP:q(1y,80,1d){1y=$(1y);G 81=1y.4x(\'4y\');E(!80&&!1d)o $A(81).2S(J.17);18(G i=0,9K=[],O=81.O;i<O;i++){G 4y=81[i];E((80&&4y.1r!=80)||(1d&&4y.1d!=1d))3P;9K.1h(J.17(4y))}o 9K},9L:q(1y){1y=$(1y);1C.6d(1y).8B(\'9L\');o 1y},9M:q(1y){1y=$(1y);1C.6d(1y).8B(\'9M\');o 1y},cH:q(1y){G 1Z=$(1y).6d().5I(q(k){o\'5k\'!=k.1r&&!k.3G});G 9N=1Z.5I(q(k){o k.3S(\'7N\')&&k.7N>=0}).aO(q(k){o k.7N}).3M();o 9N?9N:1Z.8E(q(k){o[\'4y\',\'2G\',\'9O\'].1H(k.15.2b())})},gQ:q(1y){1y=$(1y);1y.cH().cI();o 1y},2V:q(1y,V){1y=$(1y),V=M.2F(V||{});G 3a=V.3B,68=1y.5h(\'68\')||\'\';E(68.53())68=1D.7u.c3;V.3B=1y.6Z(1v);E(3a){E(M.3k(3a))3a=3a.7h();M.17(V.3B,3a)}E(1y.3S(\'1B\')&&!V.1B)V.1B=1y.1B;o 1t 1Q.59(68,V)}};1C.J={9P:q(k){$(k).9P();o k},2G:q(k){$(k).2G();o k}};1C.J.1c={6Z:q(k){k=$(k);E(!k.3G&&k.1d){G I=k.3f();E(I!=4A){G 1G={};1G[k.1d]=I;o M.4C(1G)}}o\'\'},3f:q(k){k=$(k);G 1B=k.15.2b();o 1C.J.6e[1B](k)},gR:q(k,I){k=$(k);G 1B=k.15.2b();1C.J.6e[1B](k,I);o k},aS:q(k){$(k).I=\'\';o k},gS:q(k){o $(k).I!=\'\'},cI:q(k){k=$(k);25{k.9P();E(k.2G&&(k.15.2b()!=\'4y\'||![\'9Q\',\'9I\',\'5s\'].1H(k.1r)))k.2G()}2a(e){}o k},9L:q(k){k=$(k);k.3G=1v;o k},9M:q(k){k=$(k);k.3G=1p;o k}};G gT=1C.J;G $F=1C.J.1c.3f;1C.J.6e={4y:q(k,I){4Z(k.1r.2b()){2g\'cJ\':2g\'9R\':o 1C.J.6e.cK(k,I);67:o 1C.J.6e.9O(k,I)}},cK:q(k,I){E(M.2D(I))o k.3T?k.I:1j;1i k.3T=!!I},9O:q(k,I){E(M.2D(I))o k.I;1i k.I=I},2G:q(k,I){E(M.2D(I))o C[k.1r==\'2G-gU\'?\'cL\':\'cM\'](k);1i{G 3J,82,cN=!M.4D(I);18(G i=0,O=k.O;i<O;i++){3J=k.V[i];82=C.83(3J);E(cN){E(82==I){3J.9S=1v;o}}1i 3J.9S=I.1H(82)}}},cL:q(k){G 1m=k.gV;o 1m>=0?C.83(k.V[1m]):1j},cM:q(k){G 1S,O=k.O;E(!O)o 1j;18(G i=0,1S=[];i<O;i++){G 3J=k.V[i];E(3J.9S)1S.1h(C.83(3J))}o 1S},83:q(3J){o J.17(3J).3S(\'I\')?3J.I:3J.4k}};4Y.9T=2f.2u(am,{2I:q($4c,k,4h,31){$4c(31,4h);C.k=$(k);C.4S=C.3f()},8h:q(){G I=C.3f();E(M.3k(C.4S)&&M.3k(I)?C.4S!=I:22(C.4S)!=22(I)){C.31(C.k,I);C.4S=I}}});1C.J.cO=2f.2u(4Y.9T,{3f:q(){o 1C.J.3f(C.k)}});1C.cO=2f.2u(4Y.9T,{3f:q(){o 1C.6Z(C.k)}});4Y.70=2f.2u({2I:q(k,31){C.k=$(k);C.31=31;C.4S=C.3f();E(C.k.15.2b()==\'1y\')C.cP();1i C.6j(C.k)},9U:q(){G I=C.3f();E(C.4S!=I){C.31(C.k,I);C.4S=I}},cP:q(){1C.6d(C.k).1E(C.6j,C)},6j:q(k){E(k.1r){4Z(k.1r.2b()){2g\'cJ\':2g\'9R\':1F.4T(k,\'cQ\',C.9U.2B(C));2h;67:1F.4T(k,\'gW\',C.9U.2B(C));2h}}}});1C.J.70=2f.2u(4Y.70,{3f:q(){o 1C.J.3f(C.k)}});1C.70=2f.2u(4Y.70,{3f:q(){o 1C.6Z(C.k)}});E(!1D.1F)G 1F={};M.17(1F,{gX:8,gY:9,gZ:13,h0:27,h1:37,h2:38,h3:39,h4:40,h5:46,h6:36,h7:35,h8:33,h9:34,ha:45,2Y:{},9V:q(19){G k;4Z(19.1r){2g\'hb\':k=19.hc;2h;2g\'hd\':k=19.3F;2h;67:o 1j}o J.17(k)}});1F.1c=(q(){G 5t;E(1f.1R.3W){G cR={0:1,1:4,2:2};5t=q(19,5u){o 19.9Q==cR[5u]}}1i E(1f.1R.4a){5t=q(19,5u){4Z(5u){2g 0:o 19.84==1&&!19.cS;2g 1:o 19.84==1&&19.cS;67:o 1p}}}1i{5t=q(19,5u){o 19.84?(19.84===5u+1):(19.9Q===5u)}}o{he:q(19){o 5t(19,0)},hf:q(19){o 5t(19,1)},hg:q(19){o 5t(19,2)},k:q(19){19=1F.17(19);G L=19.85,1r=19.1r,4U=19.4U;E(4U&&4U.15){E(1r===\'cT\'||1r===\'hh\'||(1r===\'cQ\'&&4U.15.2b()===\'4y\'&&4U.1r===\'9R\'))L=4U}E(L.3j==6B.bp)L=L.1W;o J.17(L)},5W:q(19,1u){G k=1F.k(19);E(!1u)o k;G 1Z=[k].1V(k.5S());o 14.5W(1Z,1u,0)},5v:q(19){G 71=1b.5p,2c=1b.2c||{4v:0,4u:0};o{x:19.cU||(19.hi+(71.4v||2c.4v)-(71.hj||0)),y:19.cV||(19.hk+(71.4u||2c.4u)-(71.hl||0))}},hm:q(19){o 1F.5v(19).x},hn:q(19){o 1F.5v(19).y},8i:q(19){1F.17(19);19.cW();19.cX();19.ho=1v}}})();1F.17=(q(){G 2H=M.4b(1F.1c).3y({},q(m,1d){m[1d]=1F.1c[1d].4F();o m});E(1f.1R.3W){M.17(2H,{cX:q(){C.hp=1v},cW:q(){C.7d=1p},2C:q(){o"[W 1F]"}});o q(19){E(!19)o 1p;E(19.7S)o 19;19.7S=1f.3g;G 5v=1F.5v(19);M.17(19,{85:19.hq,9V:1F.9V(19),cU:5v.x,cV:5v.y});o M.17(19,2H)}}1i{1F.1k=1F.1k||1b.72("cY")[\'4V\'];M.17(1F.1k,2H);o 1f.K}})();M.17(1F,(q(){G 2Y=1F.2Y;q 9W(k){E(k.9X)o k.9X[0];1q.5A.1o=1q.5A.1o||1;o k.9X=[++1q.5A.1o]}q 9Y(1A){E(1A&&1A.1H(\':\'))o"cZ";o 1A}q 86(1o){o 2Y[1o]=2Y[1o]||{}}q 87(1o,1A){G c=86(1o);o c[1A]=c[1A]||[]}q d0(k,1A,2l){G 1o=9W(k);G c=87(1o,1A);E(c.5J("2l").1H(2l))o 1p;G 1L=q(19){E(!1F||!1F.17||(19.1A&&19.1A!=1A))o 1p;1F.17(19);2l.2L(k,19)};1L.2l=2l;c.1h(1L);o 1L}q 9Z(1o,1A,2l){G c=87(1o,1A);o c.8E(q(1L){o 1L.2l==2l})}q d1(1o,1A,2l){G c=86(1o);E(!c[1A])o 1p;c[1A]=c[1A].6s(9Z(1o,1A,2l))}q d2(){18(G 1o 1P 2Y)18(G 1A 1P 2Y[1o])2Y[1o][1A]=1j}E(1D.78){1D.78("c5",d2)}E(1f.1R.4a){1D.73(\'hr\',1f.3g,1p)}o{4T:q(k,1A,2l){k=$(k);G 1d=9Y(1A);G 1L=d0(k,1A,2l);E(!1L)o k;E(k.73){k.73(1d,1L,1p)}1i{k.78("5O"+1d,q(e){e.4U=k;1L(e)})}o k},5w:q(k,1A,2l){k=$(k);G 1o=9W(k),1d=9Y(1A);E(!2l&&1A){87(1o,1A).1E(q(1L){k.5w(1A,1L.2l)});o k}1i E(!1A){M.4b(86(1o)).1E(q(1A){k.5w(1A)});o k}G 1L=9Z(1o,1A,2l);E(!1L)o k;E(k.d3){k.d3(1d,1L,1p)}1i{k.hs("5O"+1d,1L)}d1(1o,1A,2l);o k},6f:q(k,1A,2T){k=$(k);E(k==1b&&1b.72&&!k.d4)k=1b.5p;G 19;E(1b.72){19=1b.72("cY");19.ht("cZ",1v,1v)}1i{19=1b.hu();19.d5="hv"}19.1A=1A;19.2T=2T||{};E(1b.72){k.d4(19)}1i{k.hw(19.d5,19)}o 1F.17(19)}}})());M.17(1F,1F.1c);J.6i({6f:1F.6f,4T:1F.4T,5w:1F.5w});M.17(1b,{6f:J.1c.6f.4F(),4T:J.1c.4T.4F(),5w:J.1c.5w.4F(),74:1p});(q(){G 41;q 75(){E(1b.74)o;E(41)1D.ao(41);1b.6f("hx:74");1b.74=1v}E(1b.73){E(1f.1R.4a){41=1D.an(q(){E(/74|d6/.2R(1b.2X))75()},0);1F.4T(1D,"cT",75)}1i{1b.73("hy",75,1p)}}1i{1b.6I("<4W 1o=d7 4E c4=//:><\\/4W>");$("d7").7p=q(){E(C.2X=="d6"){C.7p=1j;75()}}}})();3Y.4C=M.4C;G hz={3E:J.bq};J.1c.hA=J.1c.7F;G hB={hC:q(k,1a){o J.3D(k,{54:1a})},hD:q(k,1a){o J.3D(k,{2q:1a})},hE:q(k,1a){o J.3D(k,{5f:1a})},hF:q(k,1a){o J.3D(k,{7x:1a})}};G $3P=1t hG(\'"4B $3P" hH hI, hJ "o" hK\');G a0={d8:1p,a1:q(){C.d9=1D.ck||1b.5p.4v||1b.2c.4v||0;C.da=1D.cl||1b.5p.4u||1b.2c.4u||0},hL:q(k,x,y){E(C.d8)o C.db(k,x,y);C.76=x;C.77=y;C.3d=J.4s(k);o(y>=C.3d[1]&&y<C.3d[1]+k.62&&x>=C.3d[0]&&x<C.3d[0]+k.61)},db:q(k,x,y){G a2=J.9l(k);C.76=x+a2[0]-C.d9;C.77=y+a2[1]-C.da;C.3d=J.4s(k);o(C.77>=C.3d[1]&&C.77<C.3d[1]+k.62&&C.76>=C.3d[0]&&C.76<C.3d[0]+k.61)},hM:q(4N,k){E(!4N)o 0;E(4N==\'hN\')o((C.3d[1]+k.62)-C.77)/k.62;E(4N==\'hO\')o((C.3d[0]+k.61)-C.76)/k.61},4s:J.1c.4s,6M:J.1c.6M,9i:q(k){a0.a1();o J.9i(k)},9k:q(k){a0.a1();o J.9k(k)},hP:J.1c.9l,2O:J.1c.65,hQ:J.1c.6N,2F:q(24,85,V){V=V||{};o J.bS(85,24,V)}};E(!1b.88)1b.88=q(dc){q a3(1d){o 1d.53()?1j:"[5i(1V(\' \', @6E, \' \'), \' "+1d+" \')]"}dc.88=1f.3K.7a?q(k,1l){1l=1l.2J().4i();G a4=/\\s/.2R(1l)?$w(1l).2S(a3).2E(\'\'):a3(1l);o a4?1b.91(\'.//*\'+a4,k):[]}:q(k,1l){1l=1l.2J().4i();G 1Z=[],6J=(/\\s/.2R(1l)?$w(1l):1j);E(!6J&&!1l)o 1Z;G N=$(k).4x(\'*\');1l=\' \'+1l+\' \';18(G i=0,1J,cn;1J=N[i];i++){E(1J.1l&&(cn=\' \'+1J.1l+\' \')&&(cn.1H(1l)||(6J&&6J.8z(q(1d){o!1d.2J().53()&&cn.1H(\' \'+1d+\' \')}))))1Z.1h(J.17(1J))}o 1Z};o q(1l,7v){o $(7v||1b.2c).88(1l)}}(J.1c);J.7C=2f.2u();J.7C.1k={2I:q(k){C.k=$(k)},4m:q(1e){C.k.1l.4f(/\\s+/).2G(q(1d){o 1d.O>0}).4m(1e)},6u:q(1l){C.k.1l=1l},hR:q(a5){E(C.1H(a5))o;C.6u($A(C).1V(a5).2E(\' \'))},bt:q(a6){E(!C.1H(a6))o;C.6u($A(C).6s(a6).2E(\' \'))},2J:q(){o $A(C).2E(\' \')}};M.17(J.7C.1k,2K);J.6i();',62,1108,'||||||||||||||||||||element||||return||function||||||||||||this||if||var||value|Element||node|Object|nodes|length||||||results|options|object||style||||||Selector|tagName||extend|for|event|content|document|Methods|name|iterator|Prototype|match|push|else|null|prototype|className|index|root|id|false|arguments|type|result|new|expression|true|key|position|form|property|eventName|method|Form|window|each|Event|pair|include|context|child|formula|wrapper|klass|while|div|in|Ajax|Browser|values|replace|args|concat|parentNode|attribute|transport|elements|nth|nv|String||source|try|pattern||handlers|combinator|catch|toLowerCase|body|attr|getStyle|Class|case|break|filter|width|pseudos|handler|Array||toUpperCase|attributes|top|_getEv|xpath|matches|create|array|left|last|response|of|isFunction|bind|inspect|isUndefined|join|clone|select|methods|initialize|toString|Enumerable|call|valueT|valueL|offsetParent|evaluate|parent|test|map|memo|iterable|request|url|readyState|cache|proceed||callback|Template||||||||params|responseText|height|offset|targetNode|getValue|emptyFunction|properties|typeof|nodeType|isString|string|__method|gsub|childNodes|json|px|indexOf|apply|toJSON|names|replacement|slice|count|inject|hash|toArray|parameters|container|insert|display|toElement|disabled|ByTag|le|opt|BrowserFeatures|ancestor|first|onComplete|insertions|continue|_attributeTranslations|opacity|hasAttribute|checked|matcher|_countedByPrototype|IE|createElement|Hash|number||timer|selector|els|mm|||navigator|userAgent|Opera|WebKit|keys|super|isElement|toHTML|split|RegExp|frequency|strip|stripScripts|text|nodeValue|_each|reverse|_object|start|responder|nextSibling|cumulativeOffset|_returnOffset|scrollTop|scrollLeft|ps|getElementsByTagName|input|wrap|undefined|throw|toQueryString|isArray|defer|methodize|toPaddedString|parts|status|nextSiblings|styles|tags|table|mode|descendant|sibling|not|expressions|lastValue|observe|currentTarget|__proto__|script|shift|Abstract|switch|isNumber|evalScripts|innerHTML|blank|before|item|Number|update|end|Request|dispatchException|headers|success|insertion|decay|bottom|adjacent|readAttribute|contains|parseFloat|hidden|_overflow|offsetTop|offsetLeft|currentStyle|documentElement|_cache|unmark|submit|isButton|code|pointer|stopObserving|destination|interpret|str|callee|truncation|self|substring|evalJSON|empty|template|appendChild|findAll|pluck|right|exclusive|Responders|extras|on|getHeader|receiver|_insertionTranslations|ancestors|firstChild|descs|previousSiblings|findElement|getDimensions|pos|setStyle|setOpacity|offsetWidth|offsetHeight|absolute|static|getOffsetParent|delta|default|action|tbody|Heading|attrPresence|fragment|getElements|Serializers|fire|ElementExtensions|HTMLElement|addMethods|registerCallback|onTimerEvent|escapeHTML|capitalize|_|ctx|expr|fillWith|criteria|without|toObject|set|responders|post|contentType|xml|getStatus|state|Node|writeAttribute|removeChild|class|previousElementSibling|next|nextElementSibling|write|classNames|auto|relative|positionedOffset|viewportOffset|_flag|dimensions|patterns|following|laterSibling|operators|pseudo|only|and|ofType|nodeClassName|serialize|EventObserver|docElement|createEvent|addEventListener|loaded|fireContentLoadedEvent|xcomp|ycomp|attachEvent|Gecko|XPath|SpecificElementExtensions|ScriptFragment|returnValue|currentlyExecuting|eval|data|toQueryParams|times|charAt|detect|dispatch|onCreate|asynchronous|application|onreadystatechange|html|headerJSON|isSameOrigin|port|location|parentElement|none|after|_getContentFromAnonymousElement|recursivelyCollect|findChildElements|read|ClassNames|hasClassName|elementClassName|descendantOf|cssFloat|00001|dim|border|padding|title|_getAttr|tabIndex|insertBefore|TBODY|tr|Simulated|_extendedByPrototype|refresh|copy|onlyIfAbsent|findElements|token|mark|nodeIndex|typeName|inputs|currentValue|optionValue|which|target|getCacheForID|getWrappersForEventName|getElementsByClassName|Version|superclass|subclass|valueOf|isHash|curry|delay|_methodized|execute|stop|prepareReplacement|stripTags|decodeURIComponent|succ|camelize|len|camelized|escapedString|character|unfilterJSON|startsWith|endsWith|lastIndexOf|toTemplateReplacements|slices|collect|all|found|invoke|trues|falses|find|_reverse|toQueryPair|get|delete|activeRequestCount|Base|encoding|evalJS|_complete|Response|respondToReadyState|onStateChange|Content|Complete|protocol|domain|getResponseHeader|exception|statusText|getAllResponseHeaders|failure|updater|_getElementsByXPath|query|visible|range|replaceChild|descendants|identify|getAttribute|removeAttribute|float|css|elementStyle|cssText|styleFloat|visibility|_madePositioned|overflow|absolutize|offsets|relativize|cumulativeScrollOffset|forElement|val|zoom|alpha|stripAlpha|has|fragments|TD|trans|TableSection|HTML|tag|_div|unique|tokens|assertions|preceding|exclusion|predicate|indexed|indices|exclusions|reset|submitted|matchingInputs|disable|enable|firstByIndex|textarea|focus|button|radio|selected|TimedObserver|onElementEvent|relatedTarget|getEventID|_prototypeEventID|getDOMEventName|findWrapper|Position|prepare|offsetcache|iter|cond|classNameToAdd|classNameToRemove|KHTML|MobileSafari|Safari|SelectorsAPI|querySelector|JSONFilter|subclasses|argumentNames|instanceof|timeout|1000|Try|these|lambda|escape|PeriodicalExecuter|setInterval|clearInterval|specialChar|sub|scan||img|extractScripts|matchAll|matchOne|scriptTag|unescapeHTML|separator|charCodeAt|useDoubleQuotes|isJSON|sanitize|JSON|interpolate|amp|lt|createTextNode|Pattern|exec|comp|eachSlice|any|sortBy|collections|size|from|clear|flatten|inline|uniq|sorted|forEach|arrayLength|radix|encodeURIComponent|ObjectRange|getTransport|XMLHttpRequest|ActiveXObject|XMLHTTP|register|setRequestHeaders|overrideMimeType|2005|requestHeaders|Events|force|evalResponse|onException|getStatusText|_getHeaderJSON|responseXML|_getResponseJSON|sanitizeJSON|Updater|updateContent|updateComplete|lastText|ELEMENT_NODE|TEXT_NODE|toggle|hide|show|remove|firstDescendant|immediateDescendants|previousSibling|counter|setAttribute|getHeight|getWidth|addClassName|removeClassName|nextNode|compareDocumentPosition|scrollTo|originalVisibility|originalPosition|originalDisplay|originalWidth|clientWidth|originalHeight|clientHeight|BODY|_originalLeft|_originalTop|_originalWidth|_originalHeight|clonePosition|setLeft|setTop|setWidth|setHeight|htmlFor|parseInt|100|normal|_getAttrNode|getAttributeNode|href|src|onunload|IMG|outerHTML|TR|td|SELECT|THEAD|TFOOT|TH|TEXTAREA|findDOMClass|Mod|TableCol|TableCell|client|pageXOffset|pageYOffset|shouldUseSelectorsAPI||selectorsAPI|shouldUseXPath|compileXPathMatcher|compileMatcher|oldId|local|or|enabled|even|odd|_true|uTagName|byClassName|needle|operator|getIndices|total|matchElements|serializeElements|findFirstElement|activate|checkbox|inputSelector|selectOne|selectMany|single|Observer|registerFormCallbacks|click|buttonMap|metaKey|load|pageX|pageY|preventDefault|stopPropagation|HTMLEvents|dataavailable|createWrapper|destroyWrapper|destroyCache|removeEventListener|dispatchEvent|eventType|complete|__onDOMContentLoaded|includeScrollOffsets|deltaX|deltaY|withinIncludingScrolloffsets|instanceMethods|AppleWebKit|Apple|Mobile|secure|constructor|RangeError|unknown|boolean|splice|Function|bindAsEventListener||setTimeout|01|Date|getUTCFullYear|getUTCMonth|getUTCDate|getUTCHours|getUTCMinutes|getUTCSeconds|finally|truncate|im|fromCharCode|underscore|dasherize|x00|x1f|u00|Eaeflnr|SyntaxError|Badly|formed|parseQuery|grep|inGroupsOf|max|min|partition|reject|sort|zip|pop|member|entries|every|some|compact|reduce|intersect|isNaN|toColorPart|isFinite|abs|round|ceil|floor|Math|unset|merge|Msxml2|Microsoft|unregister|www|urlencoded|UTF|_method|Konqueror|open|postBody|send||Requested|With|Accept|javascript|charset|Connection|close|setRequestHeader|200|300|Success|Failure|java|ecma|https|Uninitialized|Loading|Loaded|Interactive|responseJSON|getAllHeaders|PeriodicalUpdater|clearTimeout|getElementById|XPathResult|ORDERED_NODE_SNAPSHOT_TYPE|snapshotLength|snapshotItem|ATTRIBUTE_NODE|CDATA_SECTION_NODE|ENTITY_REFERENCE_NODE|ENTITY_NODE|PROCESSING_INSTRUCTION_NODE|COMMENT_NODE|DOCUMENT_NODE|DOCUMENT_TYPE_NODE|DOCUMENT_FRAGMENT_NODE|NOTATION_NODE|cloneNode|ownerDocument|createRange|selectNode|createContextualFragment|lastDescendant|siblings|up|down|previous|anonymous_element_|toggleClassName|cleanWhitespace|defaultView|getComputedStyle|getOpacity|block|makePositioned|undoPositioned|makeClipping|undoClipping|getElementsBySelector|childElements|fixed|hasLayout|cellpadding|cellPadding|cellspacing|cellSpacing|colSpan|rowSpan|vAlign|dateTime|accessKey|encType|maxLength|readOnly|longDesc|frameBorder|readonly|multiple|onload|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onfocus|onblur|onkeypress|onkeydown|onkeyup|onsubmit|onreset|onselect|onchange|rv|999999|TABLE|specified|FORM|INPUT|OPTGROUP|OptGroup|TextArea|Paragraph|FIELDSET|FieldSet|UL|UList|OL|OList|DL|DList|DIR|Directory|H1|H2||H3|H4|H5|H6|Quote|INS|DEL|Anchor|Image|CAPTION||TableCaption|COL|COLGROUP|TableRow|FRAMESET|FrameSet|IFRAME|IFrame|viewport|inner|opera|version|getScrollOffsets|querySelectorAll|starts|with|mod|dis|abled|selectorType|file|getInputs|focusFirstElement|setValue|present|Field|one|selectedIndex|change|KEY_BACKSPACE|KEY_TAB|KEY_RETURN|KEY_ESC|KEY_LEFT|KEY_UP|KEY_RIGHT|KEY_DOWN|KEY_DELETE|KEY_HOME|KEY_END|KEY_PAGEUP|KEY_PAGEDOWN|KEY_INSERT|mouseover|fromElement|mouseout|isLeftClick|isMiddleClick|isRightClick|error|clientX|clientLeft|clientY|clientTop|pointerX|pointerY|stopped|cancelBubble|srcElement|unload|detachEvent|initEvent|createEventObject|ondataavailable|fireEvent|dom|DOMContentLoaded|Toggle|childOf|Insertion|Before|Top|Bottom|After|Error|is|deprecated|use|instead|within|overlap|vertical|horizontal|realOffset|page|add'.split('|'),0,{}))/* --- BoxOver ---
/* --- v 2.1 17th June 2006
By Oliver Bryant with help of Matthew Tagg
http://boxover.swazz.org */

if (typeof document.attachEvent!='undefined') {
   window.attachEvent('onload',init);
   document.attachEvent('onmousemove',moveMouse);
   document.attachEvent('onclick',checkMove); }
else {
   window.addEventListener('load',init,false);
   document.addEventListener('mousemove',moveMouse,false);
   document.addEventListener('click',checkMove,false);
}

var oDv=document.createElement("div");
var dvHdr=document.createElement("div");
var dvBdy=document.createElement("div");
var dvIfr=document.createElement("iframe");//I love IE6
dvIfr.className='ilie6';
var windowlock,boxMove,fixposx,fixposy,lockX,lockY,fixx,fixy,ox,oy,boxLeft,boxRight,boxTop,boxBottom,evt,mouseX,mouseY,boxOpen,totalScrollTop,totalScrollLeft;
boxOpen=false;
ox=10;
oy=10;
lockX=0;
lockY=0;

function init() {
	oDv.appendChild(dvHdr);
	oDv.appendChild(dvBdy);
	oDv.appendChild(dvIfr);
	dvIfr.style.display='block';
	dvIfr.style.width='1px';
	dvIfr.style.height='1px';
	dvIfr.style.border='none';
	dvIfr.style.zIndex='2';
	dvIfr.style.position="absolute";

	oDv.style.position="absolute";
	oDv.style.visibility='hidden';
	document.body.appendChild(oDv);	
}

function defHdrStyle() {
	dvHdr.innerHTML='<img  style="vertical-align:middle"  src="info.gif">&nbsp;&nbsp;'+dvHdr.innerHTML;
	dvHdr.style.fontWeight='bold';
	dvHdr.style.width='150px';
	dvHdr.style.fontFamily='arial';
	dvHdr.style.border='1px solid #A5CFE9';
	dvHdr.style.padding='3';
	dvHdr.style.fontSize='11';
	dvHdr.style.color='#4B7A98';
	dvHdr.style.background='#D5EBF9';
	dvHdr.style.filter='alpha(opacity=85)'; // IE
	dvHdr.style.opacity='0.85'; // FF
}

function defBdyStyle() {
	dvBdy.style.borderBottom='1px solid #A5CFE9';
	dvBdy.style.borderLeft='1px solid #A5CFE9';
	dvBdy.style.borderRight='1px solid #A5CFE9';
	dvBdy.style.width='150px';
	dvBdy.style.fontFamily='arial';
	dvBdy.style.fontSize='11';
	dvBdy.style.padding='3';
	dvBdy.style.color='#1B4966';
	dvBdy.style.background='#FFFFFF';
	dvBdy.style.filter='alpha(opacity=85)'; // IE
	dvBdy.style.opacity='0.85'; // FF
}

function checkElemBO(txt) {
if (!txt || typeof(txt) != 'string') return false;
if ((txt.indexOf('header')>-1)&&(txt.indexOf('body')>-1)&&(txt.indexOf('[')>-1)&&(txt.indexOf('[')>-1)) 
   return true;
else
   return false;
}

function scanBO(curNode) {
	  if (checkElemBO(curNode.title)) {
         curNode.boHDR=getParam('header',curNode.title);
         curNode.boBDY=getParam('body',curNode.title);
			curNode.boCSSBDY=getParam('cssbody',curNode.title);			
			curNode.boCSSHDR=getParam('cssheader',curNode.title);
			curNode.IEbugfix=(getParam('hideselects',curNode.title)=='on')?true:false;
			curNode.fixX=parseInt(getParam('fixedrelx',curNode.title));
			curNode.fixY=parseInt(getParam('fixedrely',curNode.title));
			curNode.absX=parseInt(getParam('fixedabsx',curNode.title));
			curNode.absY=parseInt(getParam('fixedabsy',curNode.title));
			curNode.offY=(getParam('offsety',curNode.title)!='')?parseInt(getParam('offsety',curNode.title)):10;
			curNode.offX=(getParam('offsetx',curNode.title)!='')?parseInt(getParam('offsetx',curNode.title)):10;
			curNode.fade=(getParam('fade',curNode.title)=='on')?true:false;
			curNode.fadespeed=(getParam('fadespeed',curNode.title)!='')?getParam('fadespeed',curNode.title):0.04;
			curNode.delay=(getParam('delay',curNode.title)!='')?parseInt(getParam('delay',curNode.title)):0;
			if (getParam('requireclick',curNode.title)=='on') {
				curNode.requireclick=true;
				document.all?curNode.attachEvent('onclick',showHideBox):curNode.addEventListener('click',showHideBox,false);
				document.all?curNode.attachEvent('onmouseover',hideBox):curNode.addEventListener('mouseover',hideBox,false);
			}
			else {// Note : if requireclick is on the stop clicks are ignored   			
   			if (getParam('doubleclickstop',curNode.title)!='off') {
   				document.all?curNode.attachEvent('ondblclick',pauseBox):curNode.addEventListener('dblclick',pauseBox,false);
   			}	
   			if (getParam('singleclickstop',curNode.title)=='on') {
   				document.all?curNode.attachEvent('onclick',pauseBox):curNode.addEventListener('click',pauseBox,false);
   			}
   		}
			curNode.windowLock=getParam('windowlock',curNode.title).toLowerCase()=='off'?false:true;
			curNode.title='';
			curNode.hasbox=1;
	   }
	   else
	      curNode.hasbox=2;   
}


function getParam(param,list) {
	var reg = new RegExp('([^a-zA-Z]' + param + '|^' + param + ')\\s*=\\s*\\[\\s*(((\\[\\[)|(\\]\\])|([^\\]\\[]))*)\\s*\\]');
	var res = reg.exec(list);
	var returnvar;
	if(res)
		return res[2].replace('[[','[').replace(']]',']');
	else
		return '';
}

function Left(elem){	
	var x=0;
	if (elem.calcLeft)
		return elem.calcLeft;
	var oElem=elem;
	while(elem){
		 if ((elem.currentStyle)&& (!isNaN(parseInt(elem.currentStyle.borderLeftWidth)))&&(x!=0))
		 	x+=parseInt(elem.currentStyle.borderLeftWidth);
		 x+=elem.offsetLeft;
		 elem=elem.offsetParent;
	  } 
	oElem.calcLeft=x;
	return x;
	}

function Top(elem){
	 var x=0;
	 if (elem.calcTop)
	 	return elem.calcTop;
	 var oElem=elem;
	 while(elem){		
	 	 if ((elem.currentStyle)&& (!isNaN(parseInt(elem.currentStyle.borderTopWidth)))&&(x!=0))
		 	x+=parseInt(elem.currentStyle.borderTopWidth); 
		 x+=elem.offsetTop;
	         elem=elem.offsetParent;
 	 } 
 	 oElem.calcTop=x;
 	 return x;
 	 
}

var ah,ab;
function applyStyles() {
	if(ab)
		oDv.removeChild(dvBdy);
	if (ah)
		oDv.removeChild(dvHdr);
	dvHdr=document.createElement("div");
	dvBdy=document.createElement("div");
	CBE.boCSSBDY?dvBdy.className=CBE.boCSSBDY:defBdyStyle();
	CBE.boCSSHDR?dvHdr.className=CBE.boCSSHDR:defHdrStyle();
	dvHdr.innerHTML=CBE.boHDR;
	dvBdy.innerHTML=CBE.boBDY;
	ah=false;
	ab=false;
	if (CBE.boHDR!='') {		
		oDv.appendChild(dvHdr);
		ah=true;
	}	
	if (CBE.boBDY!=''){
		oDv.appendChild(dvBdy);
		ab=true;
	dvIfr.style.height=dvBdy.offsetHeight+'px';
	dvIfr.style.width=dvBdy.offsetWidth+'px';
	}	
}

var CSE,iterElem,LSE,CBE,LBE, totalScrollLeft, totalScrollTop, width, height ;
var ini=false;

// Customised function for inner window dimension
function SHW() {
   if (document.body && (document.body.clientWidth !=0)) {
      width=document.body.clientWidth;
      height=document.body.clientHeight;
   }
   if (document.documentElement && (document.documentElement.clientWidth!=0) && (document.body.clientWidth + 20 >= document.documentElement.clientWidth)) {
      width=document.documentElement.clientWidth;   
      height=document.documentElement.clientHeight;   
   }   
   return [width,height];
}


var ID=null;
function moveMouse(e) {
   //boxMove=true;
	e?evt=e:evt=event;
	
	CSE=evt.target?evt.target:evt.srcElement;
	
	if (!CSE.hasbox) {
	   // Note we need to scan up DOM here, some elements like TR don't get triggered as srcElement
	   iElem=CSE;
	   while ((iElem.parentNode) && (!iElem.hasbox)) {
	      scanBO(iElem);
	      iElem=iElem.parentNode;
	   }	   
	}
	
	if ((CSE!=LSE)&&(!isChild(CSE,dvHdr))&&(!isChild(CSE,dvBdy))){		
	   if (!CSE.boxItem) {
			iterElem=CSE;
			while ((iterElem.hasbox==2)&&(iterElem.parentNode))
					iterElem=iterElem.parentNode; 
			CSE.boxItem=iterElem;
			}
		iterElem=CSE.boxItem;
		if (CSE.boxItem&&(CSE.boxItem.hasbox==1))  {
			LBE=CBE;
			CBE=iterElem;
			if (CBE!=LBE) {
				applyStyles();
				if (!CBE.requireclick)
					if (CBE.fade) {
						if (ID!=null)
							clearTimeout(ID);
						ID=setTimeout("fadeIn("+CBE.fadespeed+")",CBE.delay);
					}
					else {
						if (ID!=null)
							clearTimeout(ID);
						COL=1;
						ID=setTimeout("oDv.style.visibility='visible';ID=null;",CBE.delay);						
					}
				if (CBE.IEbugfix) {hideSelects();} 
				fixposx=!isNaN(CBE.fixX)?Left(CBE)+CBE.fixX:CBE.absX;
				fixposy=!isNaN(CBE.fixY)?Top(CBE)+CBE.fixY:CBE.absY;			
				lockX=0;
				lockY=0;
				boxMove=true;
				ox=CBE.offX?CBE.offX:10;
				oy=CBE.offY?CBE.offY:10;
			}
		}
		else if (!isChild(CSE,dvHdr) && !isChild(CSE,dvBdy) && (boxMove))	{
			// The conditional here fixes flickering between tables cells.
			if ((!isChild(CBE,CSE)) || (CSE.tagName!='TABLE')) {   			
   			CBE=null;
   			if (ID!=null)
  					clearTimeout(ID);
   			fadeOut();
   			showSelects();
			}
		}
		LSE=CSE;
	}
	else if (((isChild(CSE,dvHdr) || isChild(CSE,dvBdy))&&(boxMove))) {
		totalScrollLeft=0;
		totalScrollTop=0;
		
		iterElem=CSE;
		while(iterElem) {
			if(!isNaN(parseInt(iterElem.scrollTop)))
				totalScrollTop+=parseInt(iterElem.scrollTop);
			if(!isNaN(parseInt(iterElem.scrollLeft)))
				totalScrollLeft+=parseInt(iterElem.scrollLeft);
			iterElem=iterElem.parentNode;			
		}
		if (CBE!=null) {
			boxLeft=Left(CBE)-totalScrollLeft;
			boxRight=parseInt(Left(CBE)+CBE.offsetWidth)-totalScrollLeft;
			boxTop=Top(CBE)-totalScrollTop;
			boxBottom=parseInt(Top(CBE)+CBE.offsetHeight)-totalScrollTop;
			doCheck();
		}
	}
	
	if (boxMove&&CBE) {
		// This added to alleviate bug in IE6 w.r.t DOCTYPE
		bodyScrollTop=document.documentElement&&document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop;
		bodyScrollLet=document.documentElement&&document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft;
		mouseX=evt.pageX?evt.pageX-bodyScrollLet:evt.clientX-document.body.clientLeft;
		mouseY=evt.pageY?evt.pageY-bodyScrollTop:evt.clientY-document.body.clientTop;
		if ((CBE)&&(CBE.windowLock)) {
			mouseY < -oy?lockY=-mouseY-oy:lockY=0;
			mouseX < -ox?lockX=-mouseX-ox:lockX=0;
			mouseY > (SHW()[1]-oDv.offsetHeight-oy)?lockY=-mouseY+SHW()[1]-oDv.offsetHeight-oy:lockY=lockY;
			mouseX > (SHW()[0]-dvBdy.offsetWidth-ox)?lockX=-mouseX-ox+SHW()[0]-dvBdy.offsetWidth:lockX=lockX;			
		}
		oDv.style.left=((fixposx)||(fixposx==0))?fixposx:bodyScrollLet+mouseX+ox+lockX+"px";
		oDv.style.top=((fixposy)||(fixposy==0))?fixposy:bodyScrollTop+mouseY+oy+lockY+"px";		
		
	}
}

function doCheck() {	
	if (   (mouseX < boxLeft)    ||     (mouseX >boxRight)     || (mouseY < boxTop) || (mouseY > boxBottom)) {
		if (!CBE.requireclick)
			fadeOut();
		if (CBE.IEbugfix) {showSelects();}
		CBE=null;
	}
}

function pauseBox(e) {
   e?evt=e:evt=event;
	boxMove=false;
	evt.cancelBubble=true;
}

function showHideBox(e) {
	oDv.style.visibility=(oDv.style.visibility!='visible')?'visible':'hidden';
}

function hideBox(e) {
	oDv.style.visibility='hidden';
}

var COL=0;
var stopfade=false;
function fadeIn(fs) {
		ID=null;
		COL=0;
		oDv.style.visibility='visible';
		fadeIn2(fs);
}

function fadeIn2(fs) {
		COL=COL+fs;
		COL=(COL>1)?1:COL;
		oDv.style.filter='alpha(opacity='+parseInt(100*COL)+')';
		oDv.style.opacity=COL;
		if (COL<1)
		 setTimeout("fadeIn2("+fs+")",20);		
}


function fadeOut() {
	oDv.style.visibility='hidden';
	
}

function isChild(s,d) {
	while(s) {
		if (s==d) 
			return true;
		s=s.parentNode;
	}
	return false;
}

var cSrc;
function checkMove(e) {
	e?evt=e:evt=event;
	cSrc=evt.target?evt.target:evt.srcElement;
	if ((!boxMove)&&(!isChild(cSrc,oDv))) {
		fadeOut();
		if (CBE&&CBE.IEbugfix) {showSelects();}
		boxMove=true;
		CBE=null;
	}
}

function showSelects(){
   var elements = document.getElementsByTagName("select");
   for (i=0;i< elements.length;i++){
      elements[i].style.visibility='visible';
   }
}

function hideSelects(){
   var elements = document.getElementsByTagName("select");
   for (i=0;i< elements.length;i++){
   elements[i].style.visibility='hidden';
   }
}
