var olLoaded = 0;
var pmStart = 10000000; 
var pmUpper = 10001000; 
var pmCount = pmStart+1; 
var pmt=''; 
var pms = new Array(); 
var olInfo = new Info('4.21', 1); 
var FREPLACE = 0; 
var FBEFORE = 1; 
var FAFTER = 2; 
var FALTERNATE = 3; 
var FCHAIN=4; 
var olHideForm=0; 
var olHautoFlag = 0; 
var olVautoFlag = 0; 
var hookPts = new Array(), postParse = new Array(), cmdLine = new Array(), runTime = new Array(); 
registerCommands('donothing,inarray,caparray,sticky,background,noclose,caption,left,right,center,offsetx,offsety,fgcolor,bgcolor,textcolor,capcolor,closecolor,width,border,cellpad,status,autostatus,autostatuscap,height,closetext,snapx,snapy,fixx,fixy,relx,rely,fgbackground,bgbackground,padx,pady,fullhtml,above,below,capicon,textfont,captionfont,closefont,textsize,captionsize,closesize,timeout,function,delay,hauto,vauto,closeclick,wrap,followmouse,mouseoff,closetitle,cssoff,compatmode,cssclass,fgclass,bgclass,textfontclass,captionfontclass,closefontclass');

var windowMinSize=[20,15];
var moveCounter=-1; 
var startEventPos=new Array(); 
var startPosWindow=new Array(); 
var startWindowSize=new Array(); 
var initResizeCounter=-1; 
var activeWindow=false; 
var activeWindowContent=false; 
var windowSizeArray=new Array(); 
var windowPositionArray=new Array(); 
var windowNameArray=new Array(); 
var currentZIndex=500; 
var windowStateArray=new Array(); 
var activeWindowIframe=false; 
var divCounter=0; 
var zIndexSet=false; 
var MSIEWIN=(navigator.userAgent.indexOf('MSIE')>=0&&navigator.userAgent.indexOf('Win')>=0&&navigator.userAgent.toLowerCase().indexOf('opera')<0)?true:false; 
var MSIEWIN7=(navigator.userAgent.indexOf('MSIE 7.0')>=0)?true:false; 
var opera=navigator.userAgent.toLowerCase().indexOf('opera')>=0?true:false;

if (typeof ol_fgcolor=='undefined') var ol_fgcolor="#CCCCFF";
if (typeof ol_bgcolor=='undefined') var ol_bgcolor="#333399";
if (typeof ol_textcolor=='undefined') var ol_textcolor="#000000";
if (typeof ol_capcolor=='undefined') var ol_capcolor="#FFFFFF";
if (typeof ol_closecolor=='undefined') var ol_closecolor="#9999FF";
if (typeof ol_textfont=='undefined') var ol_textfont="Verdana,Arial,Helvetica";
if (typeof ol_captionfont=='undefined') var ol_captionfont="Verdana,Arial,Helvetica";
if (typeof ol_closefont=='undefined') var ol_closefont="Verdana,Arial,Helvetica";
if (typeof ol_textsize=='undefined') var ol_textsize="1";
if (typeof ol_captionsize=='undefined') var ol_captionsize="1";
if (typeof ol_closesize=='undefined')  var ol_closesize="1";
if (typeof ol_width=='undefined') var ol_width="200";
if (typeof ol_border=='undefined') var ol_border="1";
if (typeof ol_cellpad=='undefined') var ol_cellpad=2;
if (typeof ol_offsetx=='undefined') var ol_offsetx=10;
if (typeof ol_offsety=='undefined') var ol_offsety=10;
if (typeof ol_text=='undefined') var ol_text="Default Text"; 
if (typeof ol_cap=='undefined') var ol_cap=""; 
if (typeof ol_sticky=='undefined') var ol_sticky=0; 
if (typeof ol_background=='undefined') var ol_background=""; 
if (typeof ol_close=='undefined') var ol_close="Close"; 
if (typeof ol_hpos=='undefined') var ol_hpos=RIGHT; 
if (typeof ol_status=='undefined') var ol_status=""; 
if (typeof ol_autostatus=='undefined') var ol_autostatus=0; 
if (typeof ol_height=='undefined') var ol_height=-1; 
if (typeof ol_snapx=='undefined') var ol_snapx=0; 
if (typeof ol_snapy=='undefined') var ol_snapy=0; 
if (typeof ol_fixx=='undefined') var ol_fixx=-1; 
if (typeof ol_fixy=='undefined') var ol_fixy=-1; 
if (typeof ol_relx=='undefined') var ol_relx=null; 
if (typeof ol_rely=='undefined') var ol_rely=null; 
if (typeof ol_fgbackground=='undefined') var ol_fgbackground=""; 
if (typeof ol_bgbackground=='undefined') var ol_bgbackground=""; 
if (typeof ol_padxl=='undefined') var ol_padxl=1; 
if (typeof ol_padxr=='undefined') var ol_padxr=1; 
if (typeof ol_padyt=='undefined') var ol_padyt=1; 
if (typeof ol_padyb=='undefined') var ol_padyb=1; 
if (typeof ol_fullhtml=='undefined') var ol_fullhtml=0; 
if (typeof ol_vpos=='undefined') var ol_vpos=BELOW; 
if (typeof ol_aboveheight=='undefined') var ol_aboveheight=0; 
if (typeof ol_capicon=='undefined') var ol_capicon=""; 
if (typeof ol_frame=='undefined') var ol_frame=self; 
if (typeof ol_timeout=='undefined') var ol_timeout=0; 
if (typeof ol_function=='undefined') var ol_function=null; 
if (typeof ol_delay=='undefined') var ol_delay=0; 
if (typeof ol_hauto=='undefined') var ol_hauto=0; 
if (typeof ol_vauto=='undefined') var ol_vauto=0; 
if (typeof ol_closeclick=='undefined') var ol_closeclick=0; 
if (typeof ol_wrap=='undefined') var ol_wrap=0; 
if (typeof ol_followmouse=='undefined') var ol_followmouse=1; 
if (typeof ol_mouseoff=='undefined') var ol_mouseoff=0; 
if (typeof ol_closetitle=='undefined') var ol_closetitle='Close'; 
if (typeof ol_compatmode=='undefined') var ol_compatmode=0; 
if (typeof ol_css=='undefined') var ol_css=CSSOFF; 
if (typeof ol_fgclass=='undefined') var ol_fgclass=""; 
if (typeof ol_bgclass=='undefined') var ol_bgclass=""; 
if (typeof ol_textfontclass=='undefined') var ol_textfontclass=""; 
if (typeof ol_captionfontclass=='undefined') var ol_captionfontclass=""; 
if (typeof ol_closefontclass=='undefined') var ol_closefontclass=""; 
if (typeof ol_texts=='undefined') var ol_texts = new Array("Text 0", "Text 1"); 
if (typeof ol_caps=='undefined') var ol_caps = new Array("Caption 0", "Caption 1"); 

var o3_text=""; 
var o3_cap=""; 
var o3_sticky=0; 
var o3_background=""; 
var o3_close="Close"; 
var o3_hpos=RIGHT; 
var o3_offsetx=2; 
var o3_offsety=2; 
var o3_fgcolor=""; 
var o3_bgcolor=""; 
var o3_textcolor=""; 
var o3_capcolor=""; 
var o3_closecolor=""; 
var o3_width=100; 
var o3_border=1; 
var o3_cellpad=2; 
var o3_status=""; 
var o3_autostatus=0; 
var o3_height=-1; 
var o3_snapx=0; 
var o3_snapy=0; 
var o3_fixx=-1; 
var o3_fixy=-1; 
var o3_relx=null; 
var o3_rely=null; 
var o3_fgbackground=""; 
var o3_bgbackground=""; 
var o3_padxl=0; 
var o3_padxr=0;
var o3_padyt=0; 
var o3_padyb=0; 
var o3_fullhtml=0; 
var o3_vpos=BELOW; 
var o3_aboveheight=0; 
var o3_capicon=""; 
var o3_textfont="Verdana,Arial,Helvetica"; 
var o3_captionfont="Verdana,Arial,Helvetica"; 
var o3_closefont="Verdana,Arial,Helvetica"; 
var o3_textsize="1"; 
var o3_captionsize="1";
var o3_closesize="1"; 
var o3_frame=self;
var o3_timeout=0; 
var o3_timerid=0; 
var o3_allowmove=0; 
var o3_function=null; 
var o3_delay=0; 
var o3_delayid=0; 
var o3_hauto=0; 
var o3_vauto=0; 
var o3_closeclick=0; 
var o3_wrap=0; 
var o3_followmouse=1; 
var o3_mouseoff=0; 
var o3_closetitle=''; 
var o3_compatmode=0; 
var o3_css=CSSOFF; 
var o3_fgclass=""; 
var o3_bgclass=""; 
var o3_textfontclass=""; 
var o3_captionfontclass=""; 
var o3_closefontclass=""; 
var o3_x = 0; 
var o3_y = 0;
var o3_showingsticky = 0; 
var o3_removecounter = 0;
var over = null;
var fnRef, hoveringSwitch = false;
var olHideDelay;
var isMac = (navigator.userAgent.indexOf("Mac") != -1); 
var olOp = (navigator.userAgent.toLowerCase().indexOf('opera') > -1 && document.createTextNode); 
var olNs4 = (navigator.appName=='Netscape' && parseInt(navigator.appVersion) == 4); 
var olNs6 = (document.getElementById) ? true : false; 
var olKq = (olNs6 && /konqueror/i.test(navigator.userAgent));
var olIe4 = (document.all) ? true : false; 
var olIe5 = false;
var olIe55 = false; 
var docRoot = 'document.body'; 

if (olNs4) {
  var oW = window.innerWidth; 
  var oH = window.innerHeight; 
  window.onresize = function() { 
    if (oW != window.innerWidth || oH != window.innerHeight) 
      location.reload();
  }
}

if (olIe4) { 
  var agent = navigator.userAgent; 
  if (/MSIE/.test(agent)) { 
    var versNum = parseFloat(agent.match(/MSIE[ ](\d\.\d+)\.*/i)[1]); 
    if (versNum >= 5){ 
      olIe5=true; 
      olIe55=(versNum>=5.5&&!olOp) ? true : false; 
      if (olNs6) 
        olNs6=false;
    }
  }
  if (olNs6) 
    olIe4 = false;
}

if (document.compatMode && document.compatMode == 'CSS1Compat') { 
  docRoot= ((olIe4 && !olOp) ? 'document.documentElement' : docRoot);
}

if(window.addEventListener) 
  window.addEventListener("load",OLonLoad_handler,false); 
else if (window.attachEvent) 
  window.attachEvent("onload",OLonLoad_handler); 

var capExtent; 

function overlib() {
  if (!olLoaded || isExclusive(overlib.arguments))
    return true;
  if (olCheckMouseCapture) 
    olMouseCapture();
  if (over) {
    over = (typeof over.id != 'string') ? o3_frame.document.all['overDiv'] : over; 
    cClick();
  }
  olHideDelay=0;
  o3_text=ol_text; 
  o3_cap=ol_cap; 
  o3_sticky=ol_sticky; 
  o3_background=ol_background; 
  o3_close=ol_close; 
  o3_hpos=ol_hpos; 
  o3_offsetx=ol_offsetx; 
  o3_offsety=ol_offsety; 
  o3_fgcolor=ol_fgcolor; 
  o3_bgcolor=ol_bgcolor; 
  o3_textcolor=ol_textcolor; 
  o3_capcolor=ol_capcolor; 
  o3_closecolor=ol_closecolor; 
  o3_width=ol_width; 
  o3_border=ol_border; 
  o3_cellpad=ol_cellpad; 
  o3_status=ol_status; 
  o3_autostatus=ol_autostatus; 
  o3_height=ol_height; 
  o3_snapx=ol_snapx; 
  o3_snapy=ol_snapy; 
  o3_fixx=ol_fixx; 
  o3_fixy=ol_fixy; 
  o3_relx=ol_relx; 
  o3_rely=ol_rely; 
  o3_fgbackground=ol_fgbackground; 
  o3_bgbackground=ol_bgbackground; 
  o3_padxl=ol_padxl; 
  o3_padxr=ol_padxr;
  o3_padyt=ol_padyt; 
  o3_padyb=ol_padyb;
  o3_fullhtml=ol_fullhtml; 
  o3_vpos=ol_vpos; 
  o3_aboveheight=ol_aboveheight; 
  o3_capicon=ol_capicon; 
  o3_textfont=ol_textfont;
  o3_captionfont=ol_captionfont; 
  o3_closefont=ol_closefont; 
  o3_textsize=ol_textsize;
  o3_captionsize=ol_captionsize; 
  o3_closesize=ol_closesize;
  o3_timeout=ol_timeout; 
  o3_function=ol_function;
  o3_delay=ol_delay; 
  o3_hauto=ol_hauto;
  o3_vauto=ol_vauto;
  o3_closeclick=ol_closeclick;
  o3_wrap=ol_wrap; 
  o3_followmouse=ol_followmouse;
  o3_mouseoff=ol_mouseoff; 
  o3_closetitle=ol_closetitle;
  o3_css=ol_css; 
  o3_compatmode=ol_compatmode;
  o3_fgclass=ol_fgclass; 
  o3_bgclass=ol_bgclass;
  o3_textfontclass=ol_textfontclass; 
  o3_captionfontclass=ol_captionfontclass;
  o3_closefontclass=ol_closefontclass; 
  setRunTimeVariables(); 
  fnRef = ''; 
  o3_frame = ol_frame; 
  if(!(over=createDivContainer())) 
    return false;
  parseTokens('o3_', overlib.arguments); 
  if (!postParseChecks())
    return false; 
  if (o3_delay == 0) {
    return runHook("olMain", FREPLACE);
  }
  else {
    o3_delayid = setTimeout("runHook('olMain', FREPLACE)", o3_delay); 
    return false;
  }
}

function nd(time) { 
  if (olLoaded && !isExclusive()) { 
    hideDelay(time);
    if (o3_removecounter >= 1) {
       o3_showingsticky = 0; 
    }
    if (o3_showingsticky == 0) {
       o3_allowmove = 0;
       if (over != null && o3_timerid == 0)
       runHook("hideObject", FREPLACE, over);
    }
    else { 
      o3_removecounter++;
    }
  }
  return true;
}

function cClick() { 
  if (olLoaded) { 
    runHook("hideObject", FREPLACE, over); 
    o3_showingsticky = 0;
  }
  return false;
}

function overlib_pagedefaults() { 
  parseTokens('ol_', overlib_pagedefaults.arguments);
}

function olMain() {
  var layerhtml, styleType; 
  runHook("olMain", FBEFORE); 
  if (o3_background!="" || o3_fullhtml) { 
    layerhtml = runHook('ol_content_background', FALTERNATE, o3_css, o3_text, o3_background, o3_fullhtml);
  } 
  else { 
    styleType = (pms[o3_css-1-pmStart] == "cssoff" || pms[o3_css-1-pmStart] == "cssclass"); 
    if (o3_fgbackground != "") 
      o3_fgbackground = "background=\""+o3_fgbackground+"\"";
    if (o3_bgbackground != "") 
      o3_bgbackground = (styleType ? "background=\""+o3_bgbackground+"\"" : o3_bgbackground);
    if (o3_fgcolor != "") 
      o3_fgcolor = (styleType ? "bgcolor=\""+o3_fgcolor+"\"" : o3_fgcolor); 
    if (o3_bgcolor != "") 
    o3_bgcolor = (styleType ? "bgcolor=\""+o3_bgcolor+"\"" : o3_bgcolor); 
    if (o3_height > 0) 
      o3_height = (styleType ? "height=\""+o3_height+"\"" : o3_height);
    else o3_height = ""; 
    if (o3_cap=="") {
      layerhtml = runHook('ol_content_simple', FALTERNATE, o3_css, o3_text);
    }
    else { 
      if (o3_sticky) { 
        layerhtml = runHook('ol_content_caption', FALTERNATE, o3_css, o3_text, o3_cap, o3_close);
      } 
      else { 
        layerhtml = runHook('ol_content_caption', FALTERNATE, o3_css, o3_text, o3_cap, "");
      }
    }
  }
  if (o3_sticky) { 
    if (o3_timerid > 0) { 
      clearTimeout(o3_timerid); 
      o3_timerid = 0;
    }
    o3_showingsticky = 1; 
    o3_removecounter = 0;
  }
  if (!runHook("createPopup", FREPLACE, layerhtml)) 
    return false; 
    if (o3_autostatus > 0) {
      o3_status = o3_text;
    if (o3_autostatus > 1)
      o3_status = o3_cap;
  }
  o3_allowmove = 0; 
  if (o3_timeout > 0) { 
    if (o3_timerid > 0) 
      clearTimeout(o3_timerid); 
    o3_timerid = setTimeout("cClick()", o3_timeout);
  }
  runHook("disp", FREPLACE, o3_status); runHook("olMain", FAFTER); 
  return (olOp && event && event.type == 'mouseover' && !o3_status) ? '' : (o3_status != '');
}

function ol_content_simple(text) { 
  var cpIsMultiple = /,/.test(o3_cellpad); 
  var txt = '<table width="'+o3_width+ '" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass ? 'class="'+o3_bgclass+'"' : o3_bgcolor+' '+o3_height)+' style="position:absolute;left:-100px;"><tr><td><table width="100%" border="0" '+((olNs4||!cpIsMultiple) ? 'cellpadding="'+o3_cellpad+'" ' : '')+'cellspacing="0" '+(o3_fgclass ? 'class="'+o3_fgclass+'"' : o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass ? ' class="'+o3_textfontclass+'">' : ((!olNs4&&cpIsMultiple) ? ' style="'+setCellPadStr(o3_cellpad)+'">' : '>'))+(o3_textfontclass ? '' : wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass ? '' : wrapStr(1,o3_textsize))+'</td></tr></table></td></tr></table>';
  set_background("");
  return txt;
}

function ol_content_caption(text,title,close) { 
  var nameId, txt, cpIsMultiple = /,/.test(o3_cellpad); 
  var closing, closeevent; closing = ""; 
  closeevent = "onmouseover"; 
  if (o3_closeclick == 1) 
    closeevent = (o3_closetitle ? "title='" + o3_closetitle +"'" : "") + " onclick"; 
  if (o3_capicon != "") { 
    nameId = ' hspace = \"5\"'+' align = \"middle\" alt = \"\"'; 
    if (typeof o3_dragimg != 'undefined' && o3_dragimg) 
      nameId =' hspace=\"5\"'+' name=\"'+o3_dragimg+'\" id=\"'+o3_dragimg+'\" align=\"middle\" alt=\"Drag Enabled\" title=\"Drag Enabled\"'; 
    o3_capicon = '<img src=\"'+o3_capicon+'\"'+nameId+' />';
  }
  if (close != "")
    closing = '<td '+(!o3_compatmode && o3_closefontclass ? 'class="'+o3_closefontclass : 'align="RIGHT')+'"><a href="javascript:return '+fnRef+'cClick();"'+((o3_compatmode && o3_closefontclass) ? ' class="' + o3_closefontclass + '" ' : ' ')+closeevent+'="return '+fnRef+'cClick();">'+(o3_closefontclass ? '' : wrapStr(0,o3_closesize,'close'))+close+(o3_closefontclass ? '' : wrapStr(1,o3_closesize,'close'))+'</a></td>'; 
  txt = '<table width="'+o3_width+ '" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+(o3_bgclass ? 'class="'+o3_bgclass+'"' : o3_bgcolor+' '+o3_bgbackground+' '+o3_height)+'><tr><td><table width="100%" border="0" cellpadding="2" cellspacing="0"><tr><td'+(o3_captionfontclass ? ' class="'+o3_captionfontclass+'">' : '>')+(o3_captionfontclass ? '' : '<b>'+wrapStr(0,o3_captionsize,'caption'))+o3_capicon+title+(o3_captionfontclass ? '' : wrapStr(1,o3_captionsize)+'</b>')+'</td>'+closing+'</tr></table><table width="100%" border="0" '+((olNs4||!cpIsMultiple) ? 'cellpadding="'+o3_cellpad+'" ' : '')+'cellspacing="0" '+(o3_fgclass ? 'class="'+o3_fgclass+'"' : o3_fgcolor+' '+o3_fgbackground+' '+o3_height)+'><tr><td valign="TOP"'+(o3_textfontclass ? ' class="'+o3_textfontclass+'">' :((!olNs4&&cpIsMultiple) ? ' style="'+setCellPadStr(o3_cellpad)+'">' : '>'))+(o3_textfontclass ? '' : wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass ? '' : wrapStr(1,o3_textsize)) + '</td></tr></table></td></tr></table>';
  set_background("");
  return txt;
}

function ol_content_background(text,picture,hasfullhtml) { 
  if (hasfullhtml) { 
    txt=text;
  } 
  else { 
    txt='<table width="'+o3_width+'" border="0" cellpadding="0" cellspacing="0" height="'+o3_height+'"><tr><td colspan="3" height="'+o3_padyt+'"></td></tr><tr><td width="'+o3_padxl+'"></td><td valign="TOP" width="'+(o3_width-o3_padxl-o3_padxr)+(o3_textfontclass ? '" class="'+o3_textfontclass : '')+'">'+(o3_textfontclass ? '' : wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass ? '' : wrapStr(1,o3_textsize))+'</td><td width="'+o3_padxr+'"></td></tr><tr><td colspan="3" height="'+o3_padyb+'"></td></tr></table>';
  }
  set_background(picture); 
  return txt;
}

function set_background(pic) { 
  if (pic == "") { 
    if (olNs4) { 
      over.background.src = null;
    } 
    else if (over.style) { 
      over.style.backgroundImage = "none";
    }
  }
  else { 
    if (olNs4) { 
      over.background.src = pic;
    } else if (over.style) { 
      over.style.width=o3_width + 'px'; 
      over.style.backgroundImage = "url("+pic+")";
    }
  }
}

var olShowId=-1; 

function disp(statustext) { 
  runHook("disp", FBEFORE); 
  if (o3_allowmove == 0) { 
    runHook("placeLayer", FREPLACE); 
    (olNs6&&olShowId<0) ? olShowId=setTimeout("runHook('showObject', FREPLACE, over)", 1) : runHook("showObject", FREPLACE, over); 
    o3_allowmove = (o3_sticky || o3_followmouse==0) ? 0 : 1;
  }
  runHook("disp", FAFTER); 
  if (statustext != "") self.status = statustext;
}

function createPopup(lyrContent){ 
  runHook("createPopup", FBEFORE); 
  if (o3_wrap) { 
    var wd,ww,theObj = (olNs4 ? over : over.style); 
    theObj.top = theObj.left = ((olIe4&&!olOp) ? 0 : -10000) + (!olNs4 ? 'px' : 0); 
    layerWrite(lyrContent); 
    wd = (olNs4 ? over.clip.width : over.offsetWidth); 
    if (wd > (ww=windowWidth())) { 
      lyrContent=lyrContent.replace(/\&nbsp;/g, ' '); 
      o3_width=ww; 
      o3_wrap=0;
    }
  }
  layerWrite(lyrContent); 
  if (o3_wrap) 
    o3_width=(olNs4 ? over.clip.width : over.offsetWidth); 
  runHook("createPopup", FAFTER, lyrContent); 
  return true;
}

function placeLayer() { 
  var placeX, placeY, widthFix = 0; 
  if (o3_frame.innerWidth) 
    widthFix=18;
  iwidth = windowWidth(); 
  winoffset=(olIe4) ? eval('o3_frame.'+docRoot+'.scrollLeft') : o3_frame.pageXOffset; placeX = runHook('horizontalPlacement',FCHAIN,iwidth,winoffset,widthFix); 
  if (o3_frame.innerHeight) { 
    iheight=o3_frame.innerHeight;
  } 
  else if (eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientHeight=='number'")&&eval('o3_frame.'+docRoot+'.clientHeight')) {
    iheight=eval('o3_frame.'+docRoot+'.clientHeight');
  }
  scrolloffset=(olIe4) ? eval('o3_frame.'+docRoot+'.scrollTop') : o3_frame.pageYOffset; 
  placeY = runHook('verticalPlacement',FCHAIN,iheight,scrolloffset); 
  repositionTo(over, placeX, placeY);
}

function olMouseMove(e) {
  var e = (e) ? e : event; 
  if (e.pageX) { 
    o3_x = e.pageX; 
    o3_y = e.pageY;
  } 
  else if (e.clientX) { 
    o3_x = eval('e.clientX+o3_frame.'+docRoot+'.scrollLeft'); 
    o3_y = eval('e.clientY+o3_frame.'+docRoot+'.scrollTop');
  }
  if (o3_allowmove == 1) 
    runHook("placeLayer", FREPLACE); 
  if (hoveringSwitch && !olNs4 && runHook("cursorOff", FREPLACE)) { 
    (olHideDelay ? hideDelay(olHideDelay) : cClick()); 
    hoveringSwitch = 
    !hoveringSwitch;
  }
}

function no_overlib() { 
  return ver3fix;
}

function olMouseCapture() { 
  capExtent = document; 
  var fN, str = '', l, k, f, wMv, sS, mseHandler = olMouseMove; 
  var re = /function[ ]*(\w*)\(/; 
  wMv = (!olIe4 && window.onmousemove); 
  if (document.onmousemove || wMv) { 
    if (wMv) capExtent = window; 
    f = capExtent.onmousemove.toString(); 
    fN = f.match(re); 
    if (fN == null) { 
      str = f+'(e); ';
    } 
    else if (fN[1] == 'anonymous' || fN[1] == 'olMouseMove' || (wMv && fN[1] == 'onmousemove')) {
      if (!olOp && wMv) { 
        l = f.indexOf('{')+1; 
        k = f.lastIndexOf('}'); 
        sS = f.substring(l,k); 
        if ((l = sS.indexOf('(')) != -1) { 
          sS = sS.substring(0,l).replace(/^\s+/,'').replace(/\s+$/,''); 
          if (eval("typeof " + sS + " == 'undefined'")) 
            window.onmousemove = null; 
          else 
            str = sS + '(e);';
        }
      }
      if (!str) { 
        olCheckMouseCapture = false; 
        return;
      }
    } 
    else { 
      if (fN[1]) 
        str = fN[1]+'(e); '; 
      else { 
        l = f.indexOf('{')+1; 
        k = f.lastIndexOf('}'); 
        str = f.substring(l,k) + '\n';
      }
    }
    str += 'olMouseMove(e); ';
    mseHandler = new Function('e', str);
  }
  capExtent.onmousemove = mseHandler; 
  if (olNs4) 
    capExtent.captureEvents(Event.MOUSEMOVE);
}

function parseTokens(pf, ar) { 
  var v, i, mode=-1, par = (pf != 'ol_'); 
  var fnMark = (par && !ar.length ? 1 : 0); 
  for (i = 0; i < ar.length; i++) { 
    if (mode < 0) { 
      if (typeof ar[i] == 'number' && ar[i] > pmStart && ar[i] < pmUpper) { 
        fnMark = (par ? 1 : 0); i--;
      } 
      else { 
        switch(pf) { 
          case 'ol_':
               ol_text = ar[i].toString(); 
               break;
          default:
               o3_text=ar[i].toString();
        }
      }
      mode = 0;
    } 
    else {
      if (ar[i] >= pmCount || ar[i]==DONOTHING) { continue;}
      if (ar[i]==INARRAY) { fnMark = 0; eval(pf+'text=ol_texts['+ar[++i]+'].toString()'); continue;}
      if (ar[i]==CAPARRAY) { eval(pf+'cap=ol_caps['+ar[++i]+'].toString()'); continue;}
      if (ar[i]==STICKY) { if (pf!='ol_') eval(pf+'sticky=1'); continue;}
      if (ar[i]==BACKGROUND) { eval(pf+'background="'+ar[++i]+'"'); continue;}
      if (ar[i]==NOCLOSE) { if (pf!='ol_') opt_NOCLOSE(); continue;}
      if (ar[i]==CAPTION) { eval(pf+"cap='"+escSglQuote(ar[++i])+"'"); continue;}
      if (ar[i]==CENTER || ar[i]==LEFT || ar[i]==RIGHT) { eval(pf+'hpos='+ar[i]); if(pf!='ol_') olHautoFlag=1; continue;}
      if (ar[i]==OFFSETX) { eval(pf+'offsetx='+ar[++i]); continue;}
      if (ar[i]==OFFSETY) { eval(pf+'offsety='+ar[++i]); continue;}
      if (ar[i]==FGCOLOR) { eval(pf+'fgcolor="'+ar[++i]+'"'); continue;}
      if (ar[i]==BGCOLOR) { eval(pf+'bgcolor="'+ar[++i]+'"'); continue;}
      if (ar[i]==TEXTCOLOR) { eval(pf+'textcolor="'+ar[++i]+'"'); continue;}
      if (ar[i]==CAPCOLOR) { eval(pf+'capcolor="'+ar[++i]+'"'); continue;}
      if (ar[i]==CLOSECOLOR) { eval(pf+'closecolor="'+ar[++i]+'"'); continue;}
      if (ar[i]==WIDTH) { eval(pf+'width='+ar[++i]); continue;}
      if (ar[i]==BORDER) { eval(pf+'border='+ar[++i]); continue;}
      if (ar[i]==CELLPAD) { i=opt_MULTIPLEARGS(++i,ar,(pf+'cellpad')); continue;}
      if (ar[i]==STATUS) { eval(pf+"status='"+escSglQuote(ar[++i])+"'"); continue;}
      if (ar[i]==AUTOSTATUS) { eval(pf +'autostatus=('+pf+'autostatus == 1) ? 0 : 1'); continue;}
      if (ar[i]==AUTOSTATUSCAP) { eval(pf +'autostatus=('+pf+'autostatus == 2) ? 0 : 2'); continue;}
      if (ar[i]==HEIGHT) { eval(pf+'height='+pf+'aboveheight='+ar[++i]); continue;}
      if (ar[i]==CLOSETEXT) { eval(pf+"close='"+escSglQuote(ar[++i])+"'"); continue;}
      if (ar[i]==SNAPX) { eval(pf+'snapx='+ar[++i]); continue;}
      if (ar[i]==SNAPY) { eval(pf+'snapy='+ar[++i]); continue;}
      if (ar[i]==FIXX) { eval(pf+'fixx='+ar[++i]); continue;}
      if (ar[i]==FIXY) { eval(pf+'fixy='+ar[++i]); continue;}
      if (ar[i]==RELX) { eval(pf+'relx='+ar[++i]); continue;}
      if (ar[i]==RELY) { eval(pf+'rely='+ar[++i]); continue;}
      if (ar[i]==FGBACKGROUND) { eval(pf+'fgbackground="'+ar[++i]+'"'); continue;}
      if (ar[i]==BGBACKGROUND) { eval(pf+'bgbackground="'+ar[++i]+'"'); continue;}
      if (ar[i]==PADX) { eval(pf+'padxl='+ar[++i]); eval(pf+'padxr='+ar[++i]); continue;}
      if (ar[i]==PADY) { eval(pf+'padyt='+ar[++i]); eval(pf+'padyb='+ar[++i]); continue;}
      if (ar[i]==FULLHTML) { if (pf!='ol_') eval(pf+'fullhtml=1'); continue;}
      if (ar[i]==BELOW || ar[i]==ABOVE) { eval(pf+'vpos='+ar[i]); if (pf!='ol_') olVautoFlag=1; continue;}
      if (ar[i]==CAPICON) { eval(pf+'capicon="'+ar[++i]+'"'); continue;}
      if (ar[i]==TEXTFONT) { eval(pf+"textfont='"+escSglQuote(ar[++i])+"'"); continue;}
      if (ar[i]==CAPTIONFONT) { eval(pf+"captionfont='"+escSglQuote(ar[++i])+"'"); continue;}
      if (ar[i]==CLOSEFONT) { eval(pf+"closefont='"+escSglQuote(ar[++i])+"'"); continue;}
      if (ar[i]==TEXTSIZE) { eval(pf+'textsize="'+ar[++i]+'"'); continue;}
      if (ar[i]==CAPTIONSIZE) { eval(pf+'captionsize="'+ar[++i]+'"'); continue;}
      if (ar[i]==CLOSESIZE) { eval(pf+'closesize="'+ar[++i]+'"'); continue;}
      if (ar[i]==TIMEOUT) { eval(pf+'timeout='+ar[++i]); continue;}
      if (ar[i]==FUNCTION) { if (pf=='ol_') { if (typeof ar[i+1]!='number') { v=ar[++i]; ol_function=(typeof v=='function' ? v : null);}} else {fnMark = 0; v = null; if (typeof ar[i+1]!='number') v = ar[++i]; opt_FUNCTION(v);} continue;}
      if (ar[i]==DELAY) { eval(pf+'delay='+ar[++i]); continue;}
      if (ar[i]==HAUTO) { eval(pf+'hauto=('+pf+'hauto == 0) ? 1 : 0'); continue;}
      if (ar[i]==VAUTO) { eval(pf+'vauto=('+pf+'vauto == 0) ? 1 : 0'); continue;}
      if (ar[i]==CLOSECLICK) { eval(pf +'closeclick=('+pf+'closeclick == 0) ? 1 : 0'); continue;}
      if (ar[i]==WRAP) { eval(pf +'wrap=('+pf+'wrap == 0) ? 1 : 0'); continue;}
      if (ar[i]==FOLLOWMOUSE) { eval(pf +'followmouse=('+pf+'followmouse == 1) ? 0 : 1'); continue;}
      if (ar[i]==MOUSEOFF) { eval(pf +'mouseoff=('+pf+'mouseoff==0) ? 1 : 0'); v=ar[i+1]; if (pf != 'ol_' && eval(pf+'mouseoff') && typeof v == 'number' && (v < pmStart || v > pmUpper)) olHideDelay=ar[++i]; continue;}
      if (ar[i]==CLOSETITLE) { eval(pf+"closetitle='"+escSglQuote(ar[++i])+"'"); continue;}
      if (ar[i]==CSSOFF||ar[i]==CSSCLASS) { eval(pf+'css='+ar[i]); continue;}
      if (ar[i]==COMPATMODE) { eval(pf+'compatmode=('+pf+'compatmode==0) ? 1 : 0'); continue;}
      if (ar[i]==FGCLASS) { eval(pf+'fgclass="'+ar[++i]+'"'); continue;}
      if (ar[i]==BGCLASS) { eval(pf+'bgclass="'+ar[++i]+'"'); continue;}
      if (ar[i]==TEXTFONTCLASS) { eval(pf+'textfontclass="'+ar[++i]+'"'); continue;}
      if (ar[i]==CAPTIONFONTCLASS) { eval(pf+'captionfontclass="'+ar[++i]+'"'); continue;}
      if (ar[i]==CLOSEFONTCLASS) { eval(pf+'closefontclass="'+ar[++i]+'"'); continue;}
      i = parseCmdLine(pf, i, ar);
    }
  }
  if (fnMark && o3_function) 
    o3_text = o3_function(); 
  if ((pf == 'o3_') && o3_wrap) { 
    o3_width = 0; 
    var tReg=/<.*\n*>/ig; 
    if (!tReg.test(o3_text)) 
      o3_text = o3_text.replace(/[ ]+/g, '&nbsp;'); 
    if (!tReg.test(o3_cap))
      o3_cap = o3_cap.replace(/[ ]+/g, '&nbsp;');
  }
  if ((pf == 'o3_') && o3_sticky) { 
    if (!o3_close && (o3_frame != ol_frame)) 
      o3_close = ol_close; 
    if (o3_mouseoff && (o3_frame == ol_frame)) 
      opt_NOCLOSE(' ');
  }
}

function layerWrite(txt) { 
  txt += "\n"; 
  if (olNs4) { 
    var lyr = o3_frame.document.layers['overDiv'].document;
    lyr.write(txt);
    lyr.close();
  } 
  else if (typeof over.innerHTML != 'undefined') { 
    if (olIe5 && isMac) 
      over.innerHTML = ''; 
    over.innerHTML = txt;
  } else { 
    range = o3_frame.document.createRange(); 
    range.setStartAfter(over); 
    domfrag = range.createContextualFragment(txt);
    while (over.hasChildNodes()) {
      over.removeChild(over.lastChild);
    }
    over.appendChild(domfrag);
  }
}

function showObject(obj) { 
  runHook("showObject", FBEFORE); 
  var theObj=(olNs4 ? obj : obj.style); 
  theObj.visibility = 'visible'; 
  if(olIe4){ 
    var DivRef=document.getElementById('overDiv'); 
    var IfrRef=document.getElementById('mantel'); 
    IfrRef.style.width=DivRef.offsetWidth; 
    IfrRef.style.height=DivRef.offsetHeight; 
    IfrRef.style.top=DivRef.style.top;
    IfrRef.style.left=DivRef.style.left; 
    IfrRef.style.display="block";
  }
  runHook("showObject", FAFTER);
}

function hideObject(obj) { 
  runHook("hideObject", FBEFORE); 
  var theObj=(olNs4 ? obj : obj.style); 
  if (olNs6 && olShowId>0) { 
    clearTimeout(olShowId); 
    olShowId=0;
  }
  theObj.visibility = 'hidden'; 
  if(olIe4){ 
    var IfrRef=document.getElementById('mantel'); 
    IfrRef.style.display="none";
  }
  theObj.top = theObj.left = ((olIe4&&!olOp) ? 0 : -10000) + (!olNs4 ? 'px' : 0); 
  if (o3_timerid > 0) 
    clearTimeout(o3_timerid); 
  if (o3_delayid > 0) 
    clearTimeout(o3_delayid); 
  o3_timerid = 0; 
  o3_delayid = 0;
  self.status = ""; 
  if (obj.onmouseout||obj.onmouseover) { 
    if (olNs4) 
      obj.releaseEvents(Event.MOUSEOUT || Event.MOUSEOVER); 
    obj.onmouseout = obj.onmouseover = null;
  }
  runHook("hideObject", FAFTER);
}

function repositionTo(obj, xL, yL) { 
  var theObj=(olNs4 ? obj : obj.style); 
  theObj.left = xL + (!olNs4 ? 'px' : 0); 
  theObj.top = yL + (!olNs4 ? 'px' : 0); 
  if(olIe4){ 
    var IfrRef=document.getElementById('mantel'); 
    IfrRef.style.top=theObj.top; 
    IfrRef.style.left=theObj.left;
  }
}

function cursorOff() { 
  var left = parseInt(over.style.left); 
  var top = parseInt(over.style.top); 
  var right = left + (over.offsetWidth >= parseInt(o3_width) ? over.offsetWidth : parseInt(o3_width)); 
  var bottom = top + (over.offsetHeight >= o3_aboveheight ? over.offsetHeight : o3_aboveheight); 
  if (o3_x < left || o3_x > right || o3_y < top || o3_y > bottom) 
    return true; 
  return false;
}

function opt_FUNCTION(callme) { 
  o3_text = (callme ? (typeof callme=='string' ? (/.+\(.*\)/.test(callme) ? eval(callme) : callme) : callme()) : (o3_function ? o3_function() : 'No Function')); 
  return 0;
}

function opt_NOCLOSE(unused) { 
  if (!unused) 
    o3_close = ""; 
  if (olNs4) {
    over.captureEvents(Event.MOUSEOUT || Event.MOUSEOVER); 
    over.onmouseover = function () { 
      if (o3_timerid > 0) { 
        clearTimeout(o3_timerid); 
        o3_timerid = 0;
      } 
    }
    over.onmouseout = function (e) { 
      if (olHideDelay) 
        hideDelay(olHideDelay); 
      else 
        cClick(e)
    }
  }
  else {
    over.onmouseover = function () {
      hoveringSwitch = true;
      if (o3_timerid > 0) { 
        clearTimeout(o3_timerid); 
        o3_timerid =0;
      } 
    }
  }
  return 0;
}

function opt_MULTIPLEARGS(i, args, parameter) { 
  var k=i, re, pV, str=''; 
  for(k=i; k<args.length; k++) { 
    if(typeof args[k] == 'number' && args[k]>pmStart) 
      break; 
    str += args[k] + ',';
  }
  if (str) 
    str = str.substring(0,--str.length); 
  k--; 
  pV=(olNs4 && /cellpad/i.test(parameter)) ? str.split(',')[0] : str; 
  eval(parameter + '="' + pV + '"'); return k;
}

function nbspCleanup() { 
  if (o3_wrap) { 
    o3_text = o3_text.replace(/\&nbsp;/g, ' '); 
    o3_cap = o3_cap.replace(/\&nbsp;/g, ' ');
  }
}

function escSglQuote(str) { 
  return str.toString().replace(/'/g,"\\'");
}

// Onload handler for window onload event
function OLonLoad_handler(e) {
  var re = /\w+\(.*\)[;\s]+/g, olre = /overlib\(|nd\(|cClick\(/, fn, l, i;
  if(!olLoaded) 
    olLoaded=1;
  // Remove it for Gecko based browsers
  if(window.removeEventListener && e.eventPhase == 3) 
    window.removeEventListener("load",OLonLoad_handler,false);
  else if(window.detachEvent) { // and for IE and Opera 4.x but execute calls to overlib, nd, or cClick()
    window.detachEvent("onload",OLonLoad_handler);
    var fN = document.body.getAttribute('onload');
    if (fN) {
      fN=fN.toString().match(re);
      if (fN && fN.length) {
        for (i=0; i<fN.length; i++) {
          if (/anonymous/.test(fN[i])) 
            continue;
          while((l=fN[i].search(/\)[;\s]+/)) != -1) {
            fn=fN[i].substring(0,l+1);
            fN[i] = fN[i].substring(l+2);
            if (olre.test(fn)) 
              eval(fn);
          }
        }
      }
    }
  }
}

// Wraps strings in Layer Generation Functions with the correct tags
//    endWrap true(if end tag) or false if start tag
//    fontSizeStr - font size string such as '1' or '10px'
//    whichString is being wrapped -- 'text', 'caption', or 'close'
function wrapStr(endWrap,fontSizeStr,whichString) {
  var fontStr, fontColor, isClose=((whichString=='close') ? 1 : 0), hasDims=/[%\-a-z]+$/.test(fontSizeStr);
  fontSizeStr = (olNs4) ? (!hasDims ? fontSizeStr : '1') : fontSizeStr;
  if (endWrap) 
    return (hasDims&&!olNs4) ? (isClose ? '</span>' : '</div>') : '</font>';
  else {
    fontStr='o3_'+whichString+'font';
    fontColor='o3_'+((whichString=='caption')? 'cap' : whichString)+'color';
    return (hasDims&&!olNs4) ? (isClose ? '<span style="font-family: '+quoteMultiNameFonts(eval(fontStr))+'; color: '+eval(fontColor)+'; font-size: '+fontSizeStr+';">' : '<div style="font-family: '+quoteMultiNameFonts(eval(fontStr))+'; color: '+eval(fontColor)+'; font-size: '+fontSizeStr+';">') : '<font face="'+eval(fontStr)+'" color="'+eval(fontColor)+'" size="'+(parseInt(fontSizeStr)>7 ? '7' : fontSizeStr)+'">';
  }
}

// Quotes Multi word font names; needed for CSS Standards adherence in font-family
function quoteMultiNameFonts(theFont) {
  var v, pM=theFont.split(',');
  for (var i=0; i<pM.length; i++) {
    v=pM[i];
    v=v.replace(/^\s+/,'').replace(/\s+$/,'');
    if(/\s/.test(v) && !/['"]/.test(v)) {
      v="\'"+v+"\'"; 
      pM[i]=v;
    }
  }
  return pM.join();
}

function isExclusive(args) { 
  return false;
}

function setCellPadStr(parameter) { 
  var Str='', j=0, ary = new Array(), top, bottom, left, right; 
  Str+='padding: '; 
  ary=parameter.replace(/\s+/g,'').split(','); 
  switch(ary.length) { 
    case 2:
         top=bottom=ary[j]; 
         left=right=ary[++j];
         break; 
    case 3:
         top=ary[j]; 
         left=right=ary[++j]; 
         bottom=ary[++j]; 
         break; 
    case 4:
         top=ary[j]; 
         right=ary[++j];
         bottom=ary[++j]; 
         left=ary[++j]; 
         break;
  }
  Str+= ((ary.length==1) ? ary[0] + 'px;' : top + 'px ' + right + 'px ' + bottom + 'px ' + left + 'px;'); 
  return Str;
}

function hideDelay(time) { 
  if (time&&!o3_delay) { 
    if (o3_timerid > 0) 
      clearTimeout(o3_timerid); 
    o3_timerid=setTimeout("cClick()",(o3_timeout=time));
  }
}

function horizontalPlacement(browserWidth, horizontalScrollAmount, widthFix) { 
  var placeX, iwidth=browserWidth, winoffset=horizontalScrollAmount; 
  var parsedWidth = parseInt(o3_width); 
  if (o3_fixx > -1 || o3_relx != null) { 
    placeX=(o3_relx != null ? ( o3_relx < 0 ? winoffset +o3_relx+ iwidth - parsedWidth - widthFix : winoffset+o3_relx) : o3_fixx);
  } else { 
    if (o3_hauto == 1) { 
      if ((o3_x - winoffset) > (iwidth / 2)) { 
        o3_hpos = LEFT;
      } 
      else { 
        o3_hpos = RIGHT;
      }
    }
    if (o3_hpos == CENTER) { 
      placeX = o3_x+o3_offsetx-(parsedWidth/2); 
      if (placeX < winoffset) 
         placeX = winoffset;
    }
    if (o3_hpos == RIGHT) { 
      placeX = o3_x+o3_offsetx; 
      if ((placeX+parsedWidth) > (winoffset+iwidth - widthFix)) { 
        placeX = iwidth+winoffset - parsedWidth - widthFix; 
        if (placeX < 0) placeX = 0;
      }
    }
    if (o3_hpos == LEFT) { 
      placeX = o3_x-o3_offsetx-parsedWidth; 
      if (placeX < winoffset) 
        placeX = winoffset;}
    if (o3_snapx > 1) { 
      var snapping = placeX % o3_snapx; 
      if (o3_hpos == LEFT) { 
        placeX = placeX - (o3_snapx+snapping);
      } 
      else { 
        placeX = placeX+(o3_snapx - snapping);
      }
      if (placeX < winoffset)
         placeX = winoffset;
    }
  }
  return placeX;
}

function verticalPlacement(browserHeight,verticalScrollAmount) { 
  var placeY, iheight=browserHeight, scrolloffset=verticalScrollAmount; 
  var parsedHeight=(o3_aboveheight ? parseInt(o3_aboveheight) : (olNs4 ? over.clip.height : over.offsetHeight)); 
  if (o3_fixy > -1 || o3_rely != null) { 
    placeY=(o3_rely != null ? (o3_rely < 0 ? scrolloffset+o3_rely+iheight - parsedHeight : scrolloffset+o3_rely) : o3_fixy);
  } else {
    if (o3_vauto == 1) { 
      if ((o3_y - scrolloffset) > (iheight / 2) && o3_vpos == BELOW && (o3_y + parsedHeight + o3_offsety - (scrolloffset + iheight) > 0)) { 
        o3_vpos = ABOVE;
      } 
      else if (o3_vpos == ABOVE && (o3_y - (parsedHeight + o3_offsety) - scrolloffset < 0)) { 
        o3_vpos = BELOW;
      }
    }
    if (o3_vpos == ABOVE) { 
      if (o3_aboveheight == 0) 
        o3_aboveheight = parsedHeight; 
      placeY = o3_y - (o3_aboveheight+o3_offsety);
      if (placeY < scrolloffset) 
        placeY = scrolloffset;
    }
    else { 
      placeY = o3_y+o3_offsety;
    }
    if (o3_snapy > 1) { 
      var snapping = placeY % o3_snapy; 
      if (o3_aboveheight > 0 && o3_vpos == ABOVE) { 
        placeY = placeY - (o3_snapy+snapping);
      } else { 
        placeY = placeY+(o3_snapy - snapping);
      }
      if (placeY < scrolloffset) 
        placeY = scrolloffset;
    }
  }
  return placeY;
}

function checkPositionFlags() { 
  if (olHautoFlag) 
    olHautoFlag = o3_hauto=0; 
  if (olVautoFlag) 
    olVautoFlag = o3_vauto=0; 
  return true;
}

function windowWidth() { 
  var w; 
  if (o3_frame.innerWidth) 
    w=o3_frame.innerWidth; 
  else if (eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientWidth=='number'")&&eval('o3_frame.'+docRoot+'.clientWidth'))
    w=eval('o3_frame.'+docRoot+'.clientWidth'); 
  return w;
}

function createDivContainer(id,frm,zValue) { 
  id = (id || 'overDiv'), frm = (frm || o3_frame), zValue = (zValue || 1000); 
  var objRef, divContainer = layerReference(id); 
  if (divContainer == null) { 
    if (olNs4) { 
      divContainer = frm.document.layers[id] = new Layer(window.innerWidth, frm); 
      objRef = divContainer;
    } else { 
      var body = (olIe4 ? frm.document.all.tags('BODY')[0] : frm.document.getElementsByTagName("BODY")[0]); 
      if (olIe4&&!document.getElementById) { 
        body.insertAdjacentHTML("beforeEnd",'<div id="'+id+'"></div>'); 
        divContainer=layerReference(id);
      } 
      else { 
        divContainer = frm.document.createElement("DIV"); 
        divContainer.id = id; 
        body.appendChild(divContainer);
      }
      objRef = divContainer.style;
    }
    objRef.position = 'absolute'; 
    objRef.visibility = 'hidden'; 
    objRef.zIndex = zValue; 
    if (olIe4&&!olOp) 
      objRef.left = objRef.top = '0px'; 
    else 
      objRef.left = objRef.top = -10000 + (!olNs4 ? 'px' : 0);
  }
  ifzvalue=zValue-1; 
  if(olIe4){ 
    divContainer.insertAdjacentHTML("afterEnd",'<iframe id="mantel" src="javascript:false;" scrolling="no" frameborder="0" style="position:absolute; display:none; z-index:'+ifzvalue+';"></iframe>');
  }
  return divContainer;
}

function layerReference(id) { 
  return (olNs4 ? o3_frame.document.layers[id] : (document.all ? o3_frame.document.all[id] : o3_frame.document.getElementById(id)));
}

function isFunction(fnRef) { 
  var rtn = true; 
  if (typeof fnRef == 'object') { 
    for (var i = 0; i < fnRef.length; i++) { 
      if (typeof fnRef[i]=='function') 
        continue; 
      rtn = false; 
      break;
    }
  } 
  else if (typeof fnRef != 'function') { 
    rtn = false;
  }
  return rtn;
}

function argToString(array, strtInd, argName) { 
  var jS = strtInd, aS = '', ar = array; 
  argName=(argName ? argName : 'ar'); 
  if (ar.length > jS) { 
    for (var k = jS; k < ar.length; k++) 
      aS += argName+'['+k+'], '; 
    aS = aS.substring(0, aS.length-2);
  }
  return aS;
}

function reOrder(hookPt, fnRef, order) { 
  var newPt = new Array(), match, i, j; 
  if (!order || typeof order == 'undefined' || typeof order == 'number') 
    return hookPt; 
  if (typeof order=='function') { 
    if (typeof fnRef=='object') { 
      newPt = newPt.concat(fnRef);
    } 
    else { 
      newPt[newPt.length++]=fnRef;
    }
    for (i = 0; i < hookPt.length; i++) { 
      match = false; 
      if (typeof fnRef == 'function' && hookPt[i] == fnRef) { 
        continue;
      } 
      else { 
        for(j = 0; j < fnRef.length; j++) 
          if (hookPt[i] == fnRef[j]) { 
            match = true; 
            break;
          }
      }
      if (!match) 
        newPt[newPt.length++] = hookPt[i];
    }
    newPt[newPt.length++] = order;
  } 
  else if (typeof order == 'object') {
    if (typeof fnRef == 'object') { 
      newPt = newPt.concat(fnRef);
    } 
    else { 
      newPt[newPt.length++] = fnRef;
    }
    for (j = 0; j < hookPt.length; j++) { 
      match = false; 
      if (typeof fnRef == 'function' && hookPt[j] == fnRef) { 
        continue;
      } 
      else { 
        for (i = 0; i < fnRef.length; i++) 
          if (hookPt[j] == fnRef[i]) { 
            match = true; 
            break;
          }
      }
      if (!match) 
        newPt[newPt.length++]=hookPt[j];
    }
    for (i = 0; i < newPt.length; i++)
      hookPt[i] = newPt[i];
    newPt.length = 0;
    for (j = 0; j < hookPt.length; j++) {
      match = false;
      for (i = 0; i < order.length; i++) {
        if (hookPt[j] == order[i]) {
          match = true;
          break;
        }
      }
      if (!match)
        newPt[newPt.length++] = hookPt[j];
    }
    newPt = newPt.concat(order);
  }
  hookPt = newPt;
  return hookPt;
}

function setRunTimeVariables(){
  if (typeof runTime != 'undefined' && runTime.length) {
    for (var k = 0; k < runTime.length; k++) {
      runTime[k]();
    }
  }
}

function parseCmdLine(pf, i, args) { 
  if (typeof cmdLine != 'undefined' && cmdLine.length) { 
    for (var k = 0; k < cmdLine.length; k++) { 
      var j = cmdLine[k](pf, i, args); 
      if (j >- 1) { 
        i = j; 
        break;
      }
    }
  }
  return i;
}

function postParseChecks(pf,args){ 
  if (typeof postParse != 'undefined' && postParse.length) { 
    for (var k = 0; k < postParse.length; k++) { 
      if (postParse[k](pf,args)) 
        continue; 
      return false;
    }
  }
  return true;
}

function registerCommands(cmdStr) { 
  if (typeof cmdStr!='string') 
    return; 
  var pM = cmdStr.split(','); 
  pms = pms.concat(pM); 
  for (var i = 0; i< pM.length; i++) { 
    eval(pM[i].toUpperCase()+'='+pmCount++);
  }
}

function registerNoParameterCommands(cmdStr) { 
  if (!cmdStr && typeof cmdStr != 'string') 
    return; 
  pmt=(!pmt) ? cmdStr : pmt + ',' + cmdStr;
}

function registerHook(fnHookTo, fnRef, hookType, optPm) { 
  var hookPt, last = typeof optPm; 
  if (fnHookTo == 'plgIn'||fnHookTo == 'postParse') 
    return; 
  if (typeof hookPts[fnHookTo] == 'undefined') 
    hookPts[fnHookTo] = new FunctionReference(); 
  hookPt = hookPts[fnHookTo]; 
  if (hookType != null) { 
    if (hookType == FREPLACE) { 
      hookPt.ovload = fnRef; 
      if (fnHookTo.indexOf('ol_content_') > -1) 
        hookPt.alt[pms[CSSOFF-1-pmStart]]=fnRef;
    } 
    else if (hookType == FBEFORE || hookType == FAFTER) { 
      var hookPt=(hookType == 1 ? hookPt.before : hookPt.after); 
      if (typeof fnRef == 'object') { 
        hookPt = hookPt.concat(fnRef);
      } 
      else { 
        hookPt[hookPt.length++] = fnRef;
      }
      if (optPm) 
        hookPt = reOrder(hookPt, fnRef, optPm);
    } 
    else if (hookType == FALTERNATE) { 
      if (last=='number') 
        hookPt.alt[pms[optPm-1-pmStart]] = fnRef;
    } 
    else if (hookType == FCHAIN) { 
      hookPt = hookPt.chain; 
      if (typeof fnRef=='object') 
        hookPt=hookPt.concat(fnRef); 
      else 
        hookPt[hookPt.length++]=fnRef;
    }
    return;
  }
}

function registerRunTimeFunction(fn) { 
  if (isFunction(fn)) { 
    if (typeof fn == 'object') { 
      runTime = runTime.concat(fn);
    } 
    else { 
      runTime[runTime.length++] = fn;
    }
  }
}

function registerCmdLineFunction(fn){ 
  if (isFunction(fn)) { 
    if (typeof fn == 'object') { 
      cmdLine = cmdLine.concat(fn);
    } 
    else { 
      cmdLine[cmdLine.length++] = fn;
    }
  }
}

function registerPostParseFunction(fn){ 
  if (isFunction(fn)) { 
    if (typeof fn == 'object') { 
      postParse = postParse.concat(fn);
    }
    else { 
      postParse[postParse.length++] = fn;
    }
  }
}

function runHook(fnHookTo, hookType) {
  var l = hookPts[fnHookTo], k, rtnVal = null, optPm, arS, ar = runHook.arguments;
  if (hookType == FREPLACE) {
    arS = argToString(ar, 2); 
    if (typeof l == 'undefined' || !(l = l.ovload))
      rtnVal = eval(fnHookTo+'('+arS+')'); 
    else
      rtnVal = eval('l('+arS+')');
  } 
  else if (hookType == FBEFORE || hookType == FAFTER) { 
    if (typeof l != 'undefined') { 
      l=(hookType == 1 ? l.before : l.after); 
      if (l.length) { 
        arS = argToString(ar, 2); 
        for (var k = 0; k < l.length; k++) 
          eval('l[k]('+arS+')');
      }
    }
  } 
  else if (hookType == FALTERNATE) { 
    optPm = ar[2]; 
    arS = argToString(ar, 3); 
    if (typeof l == 'undefined' || (l = l.alt[pms[optPm-1-pmStart]]) == 'undefined') { 
      rtnVal = eval(fnHookTo+'('+arS+')');
    } 
    else { 
      rtnVal = eval('l('+arS+')');
    }
  } 
  else if (hookType == FCHAIN) { 
    arS=argToString(ar,2); 
    l=l.chain; 
    for (k=l.length; k > 0; k--) 
      if((rtnVal=eval('l[k-1]('+arS+')'))!=void(0)) 
        break;
  }
  return rtnVal;
}

function FunctionReference() { 
  this.ovload = null; 
  this.before = new Array(); 
  this.after = new Array(); 
  this.alt = new Array(); 
  this.chain = new Array();
}

function Info(version, prerelease) { 
  this.version = version; 
  this.prerelease = prerelease; 
  this.simpleversion = Math.round(this.version*100); 
  this.major = parseInt(this.simpleversion / 100); 
  this.minor = parseInt(this.simpleversion / 10) - this.major * 10; 
  this.revision = parseInt(this.simpleversion) - this.major * 100 - this.minor * 10; 
  this.meets = meets;
}

function meets(reqdVersion) { 
  return (!reqdVersion) ? false : this.simpleversion >= Math.round(100*parseFloat(reqdVersion));
}

registerHook("ol_content_simple", ol_content_simple, FALTERNATE, CSSOFF);
registerHook("ol_content_caption", ol_content_caption, FALTERNATE, CSSOFF);
registerHook("ol_content_background", ol_content_background, FALTERNATE, CSSOFF);
registerHook("ol_content_simple", ol_content_simple, FALTERNATE, CSSCLASS);
registerHook("ol_content_caption", ol_content_caption, FALTERNATE, CSSCLASS);
registerHook("ol_content_background", ol_content_background, FALTERNATE, CSSCLASS);
registerPostParseFunction(checkPositionFlags);
registerHook("hideObject", nbspCleanup, FAFTER);
registerHook("horizontalPlacement", horizontalPlacement, FCHAIN);
registerHook("verticalPlacement", verticalPlacement, FCHAIN);
if (olNs4||(olIe5&&isMac)||olKq) olLoaded=1;
registerNoParameterCommands('sticky,autostatus,autostatuscap,fullhtml,hauto,vauto,closeclick,wrap,followmouse,mouseoff,compatmode');
var olCheckMouseCapture=true; 
if ((olNs4 || olNs6 || olIe4)) { 
  olMouseCapture();
} 
else { 
  overlib = no_overlib; 
  nd = no_overlib; 
  ver3fix = true;
}

document.getElementsByClassName = function(cl) {
  var retnode = []; 
  var myclass = new RegExp('\\b'+cl+'\\b'); 
  var elem = this.getElementsByTagName('*'); 
  for (var i = 0; i < elem.length; i++) { 
    var classes = elem[i].className; 
    if (myclass.test(classes)) 
      retnode.push(elem[i]);
  }
  return retnode;
}; 

function Get_Cookie(name){ 
  var start=document.cookie.indexOf(name+"="); 
  var len=start+name.length+1; 
  if((!start)&&(name!=document.cookie.substring(0,name.length)))
    return null;
  if(start==-1)
    return null; 
  var end=document.cookie.indexOf(";",len); 
  if(end==-1)
    end=document.cookie.length; 
  return unescape(document.cookie.substring(len,end));
}

function Set_Cookie(name,value,expires,path,domain,secure){ 
  expires=expires*60*60*24*1000; 
  var today=new Date(); 
  var expires_date=new Date(today.getTime()+(expires)); 
  var dd = document.domain; 
  var cookieString=name+"="+escape(value)+ ((expires)?";expires="+expires_date.toGMTString():"")+ ((path)?";path="+path:"")+ ((domain)?";domain="+domain:"")+ ((secure)?";secure":""); 
  document.cookie=cookieString;
}

function Delete_Cookie(name,path,domain){ 
  if(Get_Cookie(name))
  document.cookie=name+"="+ ((path)?";path="+path:"")+ ((domain)?";domain="+domain:"")+ ";expires=Thu, 01-Jan-70 00:00:01 GMT";
}

function recarga(){ 
  var sURL=unescape(window.location.pathname); 
  window.location.reload(false);
}

function reset(){ 
  var Contador=0; 
  for(var no=1;no<windowNameArray.length;no++){ 
    Contador=Contador+1; 
    activeWindow=document.getElementById('ventana_id'+Contador); 
    Delete_Cookie(activeWindow.id+'_attr_'+windowNameArray[Contador]);
  }
  recarga();
}

function cancelEvent() { 
  return(moveCounter==-1&&initResizeCounter==-1)?true:false;
}

function initMove(e) { 
  if(document.all)
    e=event;
  moveCounter=0; 
  switchElement(false,this); 
  startEventPos=[e.clientX,e.clientY]; 
  startPosWindow=[activeWindow.offsetLeft,activeWindow.offsetTop]; 
  activeWindow.style.position='absolute'; 
  activeWindow.style.left=startPosWindow[0]+e.clientX-startEventPos[0]+'px'; 
  activeWindow.style.top=startPosWindow[1]+e.clientY-startEventPos[1]+'px'; 
  startMove(); 
  if(!MSIEWIN)
    return false;
}

function startMove() { 
  if(moveCounter>=0&&moveCounter<=10){ 
    moveCounter++; 
    setTimeout('startMove()',5);
  }
}

function stopMove(e) { 
  if(document.all)
    e=event; moveCounter=-1; 
  initResizeCounter=-1;
  if(!activeWindow||!activeWindowContent)
    return; 
  var state='0'; 
  if(windowStateArray[activeWindow.id.replace(/[^0-9]/g,'')])
    state='1'; 
  Set_Cookie(activeWindow.id+'_attr_'+windowNameArray[activeWindow.id.replace(/[^0-9]/g,'')],activeWindow.style.left.replace('px','')+','+activeWindow.style.top.replace('px','')+','+activeWindow.style.width.replace('px','')+','+activeWindowContent.style.height.replace('px','')+','+activeWindow.style.zIndex+','+state,365);
}

function moveWindow(e) { 
  if(document.all)
  e=event; 
  if(moveCounter>=10){ 
    activeWindow.style.left=startPosWindow[0]+e.clientX-startEventPos[0]+'px'; 
    activeWindow.style.top=startPosWindow[1]+e.clientY-startEventPos[1]+'px';
  }
  if(initResizeCounter>=10){ 
    var newWidth=Math.max(windowMinSize[0],startWindowSize[0]+e.clientX-startEventPos[0]); 
    var newHeight=Math.max(windowMinSize[1],startWindowSize[1]+e.clientY-startEventPos[1]); 
    activeWindow.style.width=newWidth+'px'; 
    activeWindowContent.style.height=newHeight+'px'; 
    if(MSIEWIN&&activeWindowIframe&&!MSIEWIN7){ 
      activeWindowIframe.style.width=(newWidth)+'px'; 
      activeWindowIframe.style.height=activeWindow.clientHeight+'px';
    }
  }
  if(!document.all)
    return false;
}

function initResizeWindow(e) { 
  if(document.all)
    e=event; 
  initResizeCounter=0; 
  switchElement(false,document.getElementById('ventana_id'+this.id.replace(/[^\d]/g,''))); 
  startWindowSize=[activeWindowContent.offsetWidth,activeWindowContent.offsetHeight]; 
  startEventPos=[e.clientX,e.clientY]; 
  startPosWindow=[activeWindow.offsetLeft,activeWindow.offsetTop]; 
  activeWindow.style.position='absolute'; 
  activeWindow.style.left=startPosWindow[0]+e.clientX-startEventPos[0]+'px'; 
  activeWindow.style.top=startPosWindow[1]+e.clientY-startEventPos[1]+'px'; 
  if(MSIEWIN&&!MSIEWIN7)
    activeWindowIframe=activeWindow.getElementsByTagName('IFRAME')[0]; 
  startResizeWindow();
  return false;
}

function startResizeWindow() { 
  if(initResizeCounter>=0&&initResizeCounter<=10){ 
    initResizeCounter++; 
    setTimeout('startResizeWindow()',5);
  }
}

function switchElement(e,inputElement) { 
  if(!inputElement)
    inputElement=this; 
  var numericId=inputElement.id.replace(/[^0-9]/g,''); 
  var state='0'; 
  if(windowStateArray[numericId]==1)
    state='1'; 
  currentZIndex=currentZIndex/1+1; 
  activeWindow=document.getElementById('ventana_id'+numericId); 
  activeWindow.style.zIndex=currentZIndex; 
  activeWindowContent=document.getElementById('windowContent'+numericId);
}

function hideWindow() { 
  switchElement(false,document.getElementById('ventana_id'+this.id.replace(/[^\d]/g,''))); 
  activeWindow.style.display='none';
}

function minimizeWindow(e,inputObj) { 
  if(!inputObj)
    inputObj=this; 
  var numericID=inputObj.id.replace(/[^0-9]/g,''); 
  switchElement(false,document.getElementById('ventana_id'+numericID)); 
  var state; 
  if(windowStateArray[numericID]==1){ 
    activeWindowContent.style.display='none'; 
    document.getElementById('resizeImage'+numericID).style.display='none'; 
    inputObj.src=inputObj.src.replace('minimize','maximize'); 
    windowStateArray[numericID]=0; 
    state=0;
  }
  else{ 
    activeWindowContent.style.display='block'; 
    document.getElementById('resizeImage'+numericID).style.display=''; 
    inputObj.src=inputObj.src.replace('maximize','minimize'); 
    windowStateArray[numericID]=1; 
    state=1;
  }
  Set_Cookie(activeWindow.id+'_attr_'+windowNameArray[numericID],activeWindow.style.left.replace('px','')+','+activeWindow.style.top.replace('px','')+','+activeWindow.style.width.replace('px','')+','+activeWindowContent.style.height.replace('px','')+','+activeWindow.style.zIndex+','+state,365);
}

function initWindows(e,divObj) {

  if (document.all&&document.getElementById) {
    navRoot = document.getElementById("nav");
    for (i=0; i<navRoot.childNodes.length; i++) {
      node = navRoot.childNodes[i];
      if (node.nodeName=="LI") {
        node.onmouseover=function() {
          this.className+=" over";
        }
        node.onmouseout=function() {
          this.className=this.className.replace(" over", "");
        }
      }
    }
  }
  var divs=document.getElementsByClassName('ventana_general');
  for(var no=0;no<divs.length;no++){
    if(MSIEWIN && divs[no].parentNode.style.height == ''){
      divs[no].parentNode.style.height = '100%';
    }
    divs[no].parentNode.style.height=divs[no].parentNode.clientHeight;
    divs[no].parentNode.style.width=divs[no].parentNode.clientWidth;
    divCounter=no+1;
    if(no==0)
      activeWindow=divs[no];
    divs[no].id='ventana_id'+divCounter;
    if(window.addEventListener){
      divs[no].addEventListener("dragstart",cancelEvent,false);
      divs[no].addEventListener("selectstart",cancelEvent,false);
    }
    else if(window.attachEvent){
      divs[no].attachEvent("ondragstart",cancelEvent);
      divs[no].attachEvent("onselectstart",cancelEvent);
    }
    divs[no].onmousedown=switchElement;
    var cookiePos=Get_Cookie(divs[no].id+'_attr_'+windowNameArray[divCounter])+'';
    if(divObj)
      cookiePos='';
    var cookieValues=new Array();
    if(cookiePos.indexOf(',')>0){
      cookieValues=cookiePos.split(',');
      if(!windowPositionArray[divCounter])
        windowPositionArray[divCounter]=new Array();
      windowPositionArray[divCounter][0]=Math.max(0,cookieValues[1]);
      windowPositionArray[divCounter][1]=Math.max(0,cookieValues[0]);
      divs[no].style.position='absolute';
    }
    if(cookieValues[4]&&!zIndexSet){
      divs[no].style.zIndex=cookieValues[4];
      if(cookieValues[4]/1>currentZIndex)
        currentZIndex=cookieValues[4]/1;
    }
    if(windowPositionArray[divCounter]){
      if(windowPositionArray[divCounter][1]){
        divs[no].style.left=windowPositionArray[divCounter][1]+'px';
      }
      if(windowPositionArray[divCounter][0]){
        divs[no].style.top=windowPositionArray[divCounter][0]+'px';
      }
    }
    var subImages=divs[no].getElementsByTagName('IMG');
    for(var no2=0;no2<subImages.length;no2++){
      if(subImages[no2].className=='resizeImage'){
        subImages[no2].style.cursor='nw-resize';
        subImages[no2].onmousedown=initResizeWindow;
        subImages[no2].id='resizeImage'+divCounter;
        break;
      }
      if(subImages[no2].className=='minimizeButton'){
        subImages[no2].id='minimizeImage'+divCounter;
        subImages[no2].onclick=minimizeWindow;
        windowStateArray[divCounter]=1;
        if(cookieValues[5]=='0'){
          setTimeout('minimizeWindow(false,document.getElementById("minimizeImage'+divCounter+'"))',10);
        }
      }
    }
    if(windowSizeArray[divCounter]){
      divs[no].getElementsByTagName('DIV')[0].onmousedown=initMove;
      divs[no].getElementsByTagName('DIV')[0].id='top_bar'+divCounter;
      divs[no].getElementsByTagName('DIV')[3].id='windowContent'+divCounter;
      if(windowSizeArray[divCounter][0]=='100%'||!windowSizeArray[divCounter][0]){
        windowSizeArray[divCounter][0]=divs[no].parentNode.clientWidth-2;
      }
      if(cookieValues[2]&&cookieValues[2].indexOf('%')<0) {
        windowSizeArray[divCounter][0]=cookieValues[2];
        divs[no].style.width=windowSizeArray[divCounter][0]+'px';
      }
      if(!MSIEWIN){
        divs[no].style.width=windowSizeArray[divCounter][0]+'px';
      }
      if(!windowSizeArray[divCounter][1]){
        windowSizeArray[divCounter][1]=divs[no].clientHeight;
      }
      if(cookieValues[3]&&cookieValues[3].indexOf('%')<0) {
        windowSizeArray[divCounter][1]=cookieValues[3];
        divs[no].getElementsByTagName('DIV')[3].style.height=windowSizeArray[divCounter][1]+'px';
      }
    }
    if(MSIEWIN&&!MSIEWIN7){
      var iframe=document.createElement('IFRAME');
      iframe.style.position='absolute';
      iframe.style.top='0px';
      iframe.style.left='0px';
      var subDiv=divs[no].getElementsByTagName('DIV')[0];
      divs[no].insertBefore(iframe,subDiv);
      iframe.style.width='5px';
      iframe.style.height= '5px';
      /*iframe.style.width=(windowSizeArray[divCounter][0])+'px';
      iframe.style.height= divs[no].clientHeight+'px';*/
    }
  }
  var cambia=document.cookie.match(/ventana_id[0-9]*_attr_(.)*?\=/g,'');
  if(cambia){
    for(var no=0;no<cambia.length;no++){
      var nombre=cambia[no];
      nombre=nombre.replace(/\=/g,'');
      Delete_Cookie(nombre);
    }
  }
  var Contador=0;
  for(var no=1;no<windowNameArray.length;no++){
    Contador=Contador+1;
    activeWindow=document.getElementById('ventana_id'+Contador);
    activeWindowContent=document.getElementById('windowContent'+Contador);
    var state=windowStateArray[Contador]; 
    Set_Cookie(activeWindow.id+'_attr_'+windowNameArray[Contador],activeWindow.style.left.replace('px','')+','+activeWindow.style.top.replace('px','')+','+activeWindow.style.width.replace('px','')+','+activeWindowContent.style.height.replace('px','')+','+activeWindow.style.zIndex+','+state,365);
  }
  if(!divObj){ 
    if(window.addEventListener){ 
      document.addEventListener("mouseup",stopMove,false); 
      document.addEventListener("mousemove",moveWindow,false);
    }
    else if(window.attachEvent){ 
      document.attachEvent("onmouseup",stopMove); 
      document.attachEvent("onmousemove",moveWindow);
    }
  }
  return divCounter;
}

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; 
  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){ 
    el.attachEvent("on"+evname,func);
  }
  else if(el.addEventListener){ 
    el.addEventListener(evname,func,true);
  }else{ 
    el["on"+evname]=func;
  }
}; 

Calendar.removeEvent=function(el,evname,func){ 
  if(el.detachEvent){ 
    el.detachEvent("on"+evname,func);
  }
  else if(el.removeEventListener){ 
    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;
}; 

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);
  }
}; 

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()); 
    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();
  }
}; 

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);
}; 

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:
           act&&Calendar.cellClick(cal._nav_pm); 
           break; 
      case 38:
           act&&Calendar.cellClick(cal._nav_py); 
           break; 
      case 39:
           act&&Calendar.cellClick(cal._nav_nm); 
           break; 
      case 40:
           act&&Calendar.cellClick(cal._nav_ny); 
           break; 
      default:
           return false;
    }
  }else {
    switch(K){ 
      case 32:
           Calendar.cellClick(cal._nav_now); 
           break; 
      case 27:
           act&&cal.callCloseHandler(); 
           break; 
      case 37:
      case 38:
      case 39:
      case 40:
           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:
                      if(--x>=0)
                        ne=cal.ar_days[y][x]; 
                      else{ 
                        x=6; 
                        K=38; 
                        continue;
                      }
                      break; 
                 case 38:
                      if(--y>=0)
                        ne=cal.ar_days[y][x]; 
                      else{ 
                        prevMonth(); 
                        setVars();
                      }
                      break; 
                 case 39:
                      if(++x<7)
                        ne=cal.ar_days[y][x]; 
                      else{ 
                        x=0; 
                        K=40; 
                        continue;
                      }
                      break; 
                 case 40:
                      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:
           if(act)
             Calendar.cellClick(cal.currentDateEl,ev); 
           break; 
      default:
           return false;
    }
  }
  return Calendar.stopEvent(ev);
};

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;
}; 

Calendar.prototype.setDate=function(date){ 
  if(!date.equalsTo(this.date)){ 
    this._init(this.firstDayOfWeek,date);
  }
}; 

Calendar.prototype.refresh=function(){ 
  this._init(this.firstDayOfWeek,this.date);
}; 

Calendar.prototype.setFirstDayOfWeek=function(firstDayOfWeek){ 
  this._init(firstDayOfWeek,this.date); 
  this._displayWeekdays();
}; 

Calendar.prototype.setDateStatusHandler=Calendar.prototype.setDisabledHandler=function(unaryFunction){ 
  this.getDateStatus=unaryFunction;
}; 

Calendar.prototype.setRange=function(a,z){ 
  this.minYear=a; this.maxYear=z;
};

Calendar.prototype.callHandler=function(){ 
  if(this.onSelected){ 
    this.onSelected(this,this.date.print(this.dateFormat));
  }
}; 

Calendar.prototype.callCloseHandler=function(){ 
  if(this.onClose){ 
    this.onClose(this);
  }
  this.hideShowCovered();
};

Calendar.prototype.destroy=function(){ 
  var el=this.element.parentNode; 
  el.removeChild(this.element); 
  Calendar._C=null; 
  window._dynarch_popupCalendar=null;
}; 

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);
  }
}; 

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();
};
  
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();
}; 

Calendar.prototype.showAt=function(x,y){ 
  var s=this.element.style; 
  s.left=x+"px"; 
  s.top=y+"px"; 
  this.show();
}; 

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;
    }
    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;
    }
    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();
}; 

Calendar.prototype.setDateFormat=function(str){ 
  this.dateFormat=str;
}; 

Calendar.prototype.setTtDateFormat=function(str){ 
  this.ttDateFormat=str;
}; 

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"){ 
        if(!Calendar.is_khtml)
          value=document.defaultView.getComputedStyle(obj,"").getPropertyValue("visibility"); 
        else
          value='';
      }
      else if(obj.currentStyle){ 
        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";
      }
    }
  }
}; 

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;
  }
}; 

Calendar.prototype._hideCombos=function(){ 
  this.monthsCombo.style.display="none"; 
  this.yearsCombo.style.display="none";
}; 

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);
  }
}; 

Date._MD=new Array(31,28,31,30,31,30,31,31,30,31,30,31); 
Date.SECOND=1000; 
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;
}; 

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];
  }
}; 

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);
}; 

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); 
  var ms=d.valueOf(); 
  d.setMonth(0); 
  d.setDate(4); 
  return Math.round((ms-d.valueOf())/(7*864e5))+1;
}; 

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()));
}; 

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());
}; 

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]; 
  s["%A"]=Calendar._DN[w]; 
  s["%b"]=Calendar._SMN[m]; 
  s["%B"]=Calendar._MN[m]; 
  s["%C"]=1+Math.floor(y/100); 
  s["%d"]=(d<10)?("0"+d):d; 
  s["%e"]=d; 
  s["%H"]=(hr<10)?("0"+hr):hr; 
  s["%I"]=(ir<10)?("0"+ir):ir; 
  s["%j"]=(dy<100)?((dy<10)?("00"+dy):("0"+dy)):dy; 
  s["%k"]=hr; 
  s["%l"]=ir; 
  s["%m"]=(m<9)?("0"+(1+m)):(1+m); 
  s["%M"]=(min<10)?("0"+min):min; 
  s["%n"]="\n"; 
  s["%p"]=pm?"PM":"AM"; 
  s["%P"]=pm?"pm":"am"; 
  s["%s"]=Math.floor(this.getTime()/1000); 
  s["%S"]=(sec<10)?("0"+sec):sec; 
  s["%t"]="\t"; 
  s["%U"]=s["%W"]=s["%V"]=(wn<10)?("0"+wn):wn; 
  s["%u"]=w+1; 
  s["%w"]=w; 
  s["%y"]=(''+y).substr(2,2); 
  s["%Y"]=y; 
  s["%%"]="%"; 
  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.setup=function(params){
  function param_default(pname,def){
    if(typeof params[pname]=="undefined"){
      params[pname]=def;
    }
  }; 
  param_default("inputField",null); 
  param_default("displayArea",null); 
  param_default("button",null); 
  param_default("eventName","click"); 
  param_default("ifFormat","%Y/%m/%d"); 
  param_default("daFormat","%Y/%m/%d"); 
  param_default("singleClick",true); 
  param_default("disableFunc",null); 
  param_default("dateStatusFunc",params["disableFunc"]); 
  param_default("dateText",null); 
  param_default("firstDay",null); 
  param_default("align","Br"); 
  param_default("range",[1900,2999]); 
  param_default("weekNumbers",true); 
  param_default("flat",null); 
  param_default("flatCallback",null); 
  param_default("onSelect",null); 
  param_default("onClose",null); 
  param_default("onUpdate",null); 
  param_default("date",null); 
  param_default("showsTime",false); 
  param_default("timeFormat","24"); 
  param_default("electric",true); 
  param_default("step",2); 
  param_default("position",null); 
  param_default("cache",false); 
  param_default("showOthers",false); 
  param_default("multiple",null); 
  var tmp=["inputField","displayArea","button"]; 
  for(var i in tmp){ 
    if(typeof params[tmp[i]]=="string"){ 
      params[tmp[i]]=document.getElementById(params[tmp[i]]);
    }
  }
  if(!(params.flat||params.multiple||params.inputField||params.displayArea||params.button)){
    alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please check your code"); 
    return false;
  }

  function onSelect(cal){
    var p=cal.params;
    var update=(cal.dateClicked||p.electric);
    if(update&&p.inputField){
      p.inputField.value=cal.date.print(p.ifFormat);
      if(typeof p.inputField.onchange=="function")
        p.inputField.onchange();
    }
    if(update&&p.displayArea)
      p.displayArea.innerHTML=cal.date.print(p.daFormat); 
    if(update&&typeof p.onUpdate=="function")
      p.onUpdate(cal); 
    if(update&&p.flat){ 
      if(typeof p.flatCallback=="function")
        p.flatCallback(cal);
    }
    if(update&&p.singleClick&&cal.dateClicked)
      cal.callCloseHandler();
  }; 
  if(params.flat!=null){ 
    if(typeof params.flat=="string")
      params.flat=document.getElementById(params.flat); 
    if(!params.flat){ 
      alert("Calendar.setup:\n  Flat specified but can't find parent."); 
      return false;
    }
    var cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect); 
    cal.showsOtherMonths=params.showOthers; 
    cal.showsTime=params.showsTime; 
    cal.time24=(params.timeFormat=="24"); 
    cal.params=params; 
    cal.weekNumbers=params.weekNumbers; 
    cal.setRange(params.range[0],params.range[1]); 
    cal.setDateStatusHandler(params.dateStatusFunc); 
    cal.getDateText=params.dateText; 
    if(params.ifFormat){ 
      cal.setDateFormat(params.ifFormat);
    }
    if(params.inputField&&typeof params.inputField.value=="string"){ 
      cal.parseDate(params.inputField.value);
    }
    cal.create(params.flat); 
    cal.show(); 
    return false;
  }
  var triggerEl=params.button||params.displayArea||params.inputField; 
  triggerEl["on"+params.eventName]=function(){ 
    var dateEl=params.inputField||params.displayArea; 
    var dateFmt=params.inputField?params.ifFormat:params.daFormat; 
    var mustCreate=false; 
    var cal=window.calendar; 
    if(dateEl)
      params.date=Date.parseDate(dateEl.value||dateEl.innerHTML,dateFmt); 
    if(!(cal&&params.cache)){ 
      window.calendar=cal=new Calendar(params.firstDay, params.date, params.onSelect||onSelect, params.onClose||function(cal){
        cal.hide();
        }); 
      cal.showsTime=params.showsTime; 
      cal.time24=(params.timeFormat=="24"); 
      cal.weekNumbers=params.weekNumbers; 
      mustCreate=true;
    }
    else{ 
      if(params.date)
        cal.setDate(params.date); 
      cal.hide();
    }
    if(params.multiple){ 
      cal.multiple={}; 
      for(var i=params.multiple.length;--i>=0;){ 
        var d=params.multiple[i]; 
        var ds=d.print("%Y%m%d"); 
        cal.multiple[ds]=d;
      }
    }
    cal.showsOtherMonths=params.showOthers; 
    cal.yearStep=params.step; 
    cal.setRange(params.range[0],params.range[1]); 
    cal.params=params; 
    cal.setDateStatusHandler(params.dateStatusFunc); 
    cal.getDateText=params.dateText; 
    cal.setDateFormat(dateFmt); 
    if(mustCreate)
      cal.create(); 
    cal.refresh();
    if(!params.position)
      cal.showAtElement(params.button||params.displayArea||params.inputField,params.align); 
    else
      cal.showAt(params.position[0],params.position[1]); 
    return false;
  }; 
  return cal;
};
// Script de ocultar botón al pulsar

function submitonce(theform){
//if IE 4+ or NS 6+
  if(document.all||document.getElementById){
  //screen thru every element in the form, and hunt down "submit" and "reset"
    for(i=0;i<theform.length;i++){
      var tempobj=theform.elements[i];
      if(tempobj.type.toLowerCase()=="submit"||tempobj.type.toLowerCase()=="reset")
      //disable em
        tempobj.disabled=true
    }
  }
}
