////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR CORE MODULE overlibmws.js
////////////////////////////////////////////////////////////////////////////////////

// FGCOLOR - Main background color (the large area).
// Usually a bright color (white, yellow etc).
var ol_fgcolor = "#FFFFFF";

// BGCOLOR - Border color.
// Usually a dark color (black, brown etc).
var ol_bgcolor = "#B0B2B7";

// CGCOLOR - Caption background color (typically same as border color).
// Usually a dark color (black, brown etc).
var ol_cgcolor = "#EAEAEA";

// TEXTCOLOR - Text color.
// Usually a dark color.
var ol_textcolor = "#333333";

// CAPCOLOR - Color of the caption text.
// Usually a bright color
var ol_capcolor = "#FF0000";

// CLOSECOLOR - Color of "Close" when using Sticky.
// Usually a semi-bright color.
var ol_closecolor = "#666666";

// TEXTFONT - Font face for the main text.
var ol_textfont = "Verdana,Arial,Helvetica";

// CAPTIONFONT - Font face for the caption.
var ol_captionfont = "Verdana,Arial,Helvetica";

// CLOSEFONT - Font face for the close text.
var ol_closefont = "Verdana,Arial,Helvetica";

// TEXTSIZE - Font size for the main text.
var ol_textsize = "1";

// CAPTIONSIZE - Font size for the caption.
var ol_captionsize = "1";

// CLOSESIZE - Font size for the close text.
var ol_closesize = "1";

// FGCLASS - Main background class.
var ol_fgclass = "";

// BGCLASS - Frame background class.
var ol_bgclass = "";

// CGCLASS - Caption background class.
var ol_cgclass = "";

// TEXTPADDING - Padding for main text.
var ol_textpadding = "2";

// TEXTFONTCLASS - Main font class.
var ol_textfontclass = "";

// CAPTIONPADDING - Padding for caption (including Close text if present).
var ol_captionpadding = "2";

// CAPTIONFONTCLASS - Caption font class.
var ol_captionfontclass = "";

// CLOSEFONTCLASS - Close font class.
var ol_closefontclass = "";

// CLOSECLICK - If the user has to click to close stickies.
var ol_closeclick = 0;

// CLOSETEXT - Text for the closing sticky popups. Normal is "Close".
var ol_close = "X";

// CLOSETITLE - Text to use as value of TITLE attribute for browser-generated TooTips
// with the "Close" link in captions of stickies when CLOSECLICK is changed to 1;
var ol_closetitle = "Click to Close";

// Default text for popups
// Should you forget to pass something to overLIB this will be displayed.
var ol_text = "Default Text";

// Default caption
// You should leave this blank or you will have problems making non caps popups.
var ol_cap = "";

// CAPBELOW - Whether the caption should appear below the main text area.  Default is
// off (0) such that the caption appears above.
var ol_capbelow=0;

// BACKGROUND - Default background image. Better left empty unless you always want one.
var ol_background = "";

// WIDTH - Default width of the popups in pixels. 100-300 pixels is typical.
// This value is simply a suggestion to the browser, which may change the
// actual width depending on the content.
var ol_width = "325";

// WRAP - Intended to keep the popup no wider than its content plus normal padding, but
// to wrap the content if it would exceed the window width, or if it would exceed WRAPMAX
// when that has been set to a value greater than zero.
// Overrides the o3_width setting. Default is no wrap (0).
var ol_wrap = 1;

// WRAPMAX - If set to a value greater than 0, sets the maximum width of the popup, up to
// the window width, before wrapping occurs when the WRAP command is set.
var ol_wrapmax = 1;

// HEIGHT - Default height for popup. Often best left alone.
var ol_height = -1;

// BORDER - How thick the ol_border should be in pixels.
// 1-3 pixels is typical.
var ol_border = "1";

// BASE - Any additional thickening of the border's base in pixels.
var ol_base = "0";

// OFFSETX - How many pixels to the right (positive values) or left (negative values)
// of the cursor to show the popup. Values between 3 and 12 are best.
var ol_offsetx = 10;

// OFFSETY - How many pixels below (positive values) or above (negative values) the
// cursor to show the popup. Values between 3 and 20 are best.
var ol_offsety = 10;

// STICKY - Decides if sticky popups are default. 0 for non, 1 for stickies.
var ol_sticky = 0;

// NOFOLLOW - Should non-sticky popups not follow cursor movements (i.e., remain
// stationary where initially positioned on invocation, like title-based tooltips).
var ol_nofollow = 0;

// NOCLOSE - Omit Close text in stickies with captions, for all stickies use mouse off
// after mouse over sticky to close, and cancel any timeout while over sticky.
var ol_noclose = 0;

// MOUSEOFF - For stickies which do have a caption with a CLOSETEXT, also use mouse off
// after mouse over sticky to close, and cancel any timeout while over sticky.
var ol_mouseoff = 0;

// OFFDELAY - Default delay for closing NOCLOSE or MOUSEOFF popups.  If a mouse over the
// sticky occurs during this delay, the close is cancelled.
var ol_delay = 300;

// Default status bar text when a popup is invoked.
var ol_status = "";

// AUTOSTATUS, AUTOSTATUSCAP - If the status bar automatically should load either
// text or caption. 0=nothing, 1=text, 2=caption
var ol_autostatus = 0;

// SNAPX - Horizontal grid spacing that popups will snap to.
// 0 makes no grid, anything else will cause a snap to that grid spacing.
var ol_snapx = 0;

// SNAPY - Vertical grid spacing that popups will snap to.
// 0 makes no grid, anything else will cause a snap to that grid spacing.
var ol_snapy = 0;

// FIXX - Sets the popup horizontal position to a fixed column.
// Numbers greater than -1 will cause fixed position.
var ol_fixx = -1;

// FIXY - Sets the popup vertical position to a fixed row.
// Numbers greater than -1 will cause fixed position.
var ol_fixy = -1;

// RELX - Sets the popup horizontal position to a column relative to the window display.
// Anything numeric (non-null) will cause relative position. Positive and 0 is to
// the right from left window margin for left margin of popup. Negative is to the
// left from right window margin for right margin of popup.
var ol_relx = null;

// RELY - Sets the popup vertical position to a row relative to the window display.
// Anything numeric (non-null) will cause relative position. Positive and 0 is down
// from top window margin for top margin of popup. Negaive is up from bottom window
// margin for bottom margin of popup.
var ol_rely = null;

// MIDX - Sets the popup horizontal midpoint to a column relative to the window horizontal
// midpoint. Anything numeric (non-null) will cause midpoint position. Positive and
// 0 is to the right from the window midpoint. Negative is to the left.
var ol_midx = null;

// MIDY - Sets the popup vertical midpoint to a row relative to the window vertical midpoint.
// Anything numeric (non-null) will cause midpoint position. Positive and 0 is down from
// the window midpoint. Negative is up.
var ol_midy = null;

// REF - The NAME of an anchor or image, or ID of a layer, to serve as a reference object such
// that a corner of the popup will be positioned relative to a corner of the object.
var ol_ref = "";

// REFC - Corner of the reference object for positioning.
// Value can be: 'UL' (Upper Left), 'UR', 'LR', or 'LL'.
var ol_refc = 'UL';

// REFP - Corner of the popup for positioning.
// Value can be: 'UL' (Upper Left), 'UR', 'LR', or 'LL'.
var ol_refp = 'UL';

// REFX - X displacement from the reference point. Positive to the right,
// negative left.
var ol_refx = 0;

// REFY - Y displacement from the reference point. Positive down, negative up.
var ol_refy = 0;

// FGBACKGROUND - Background image for the popup's inside.
var ol_fgbackground = "";

// BGBACKGROUND - Background image for the popup's frame (border).
var ol_bgbackground = "";

// CGBACKGROUND - Background image for the caption.
var ol_cgbackground = "";

// PADX
// How much horizontal left padding text should get by default when BACKGROUND is used.
var ol_padxl = 1;
// How much horizontal right padding text should get by default when BACKGROUND is used.
var ol_padxr = 1;

// PADY
// How much vertical top padding text should get by default when BACKGROUND is used.
var ol_padyt = 1;
// How much vertical bottom padding text should get by default when BACKGROUND is used.
var ol_padyb = 1;

// FULLHTML - If the user by default must supply all html for complete control of popup content.
// Set to 1 to activate, 0 otherwise.
var ol_fullhtml = 0;

// CAPICON - Default icon to place next to the popups caption.
var ol_capicon = "";

// FRAME - Default frame. We default to current frame if there is no frame defined.
var ol_frame = self;

// TIMEOUT - Default timeout. By default there is no timeout.
var ol_timeout = 0;

// DELAY - Default delay for onset of popup. By default there is no delay.
var ol_delay = 0;

// HAUTO - If overLIB should decide the horizontal placement.
var ol_hauto = 0;

// VAUTO - If overLIB should decide the vertical placement.
var ol_vauto = 0;

// NOJUSTX - If overLIB should let popups overrun the left or right window margins.
var ol_nojustx = 0;

// NOJUSTY - If overLIB should let popups overrun the top or bottom window margins.
var ol_nojusty = 0;

// LABEL - A labeling string for the primary popup while it is displayed (visible).
var ol_label = "";

// DECODE - If overLIB should automatically decode any URL-encoded characters in
// lead argument and/or caption.
var ol_decode = "";

////////////////////////////////////////////////////////////////////////////////////
// ARRAY CONFIGURATION FOR CORE MODULE overlibmws.js
////////////////////////////////////////////////////////////////////////////////////

// INARRAY - Array with texts.
var ol_texts = new Array(
 "Text 0",
 "Text 1");

// CAPARRAY - Array with captions.
var ol_caps = new Array(
 "Caption 0",
 "Caption 1");

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_bubble.js
////////////////////////////////////////////////////////////////////////////////////

// BUBBLE - Whether to use a bubble type popup. Default is no (0).
var ol_bubble = 0;

// BUBBLETYPE - Type of bubble image to use. Default is 'flower'.  Other options are
// 'oval', 'square', 'pushpin', 'quotation', or 'roundedcorners'. Specify directory
// for images via the last parameter of registerImages() near the top of the plugin
// module (default value is './').
var ol_bubbletype = 'flower';

// ADJBUBBLE - Whether to resize the image in relation to the content.
// Default is no (0).
var ol_adjbubble = 0;

// RCBUBBLECOLOR - Color for the textual content of speech bubble popups which have
// 'roundcorners' as their BUBBLETYPE parameter.  Default value is '#ffffcc'.
var ol_rcbubblecolor = '#ffffcc';

// BUBBLECLOSE - Whether to block the normally automatic setting of NOCLOSE for
// bubble popups that are sticky.
// Default is no (0).
var ol_bubbleclose = 0;

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_bubble.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_crossframe.js
////////////////////////////////////////////////////////////////////////////////////

//You must import this plugin module to use the FRAME command, but its configuration
//variable, ol_frame, is set in the core module.

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_crossframe.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_debug.js
////////////////////////////////////////////////////////////////////////////////////

// ALLOWDEBUG - The ID or a comma-separated list of IDs for debug layers which, if
// invoked following an overlib call and then made hidden via the close link at
// upper right, should be made visible again whenever that overlib call occurs.
var ol_allowdebug = "";

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_debug.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_draggable.js
////////////////////////////////////////////////////////////////////////////////////

// DRAGGABLE - If sticky should be draggable.
var ol_draggable = 0;

// DRAGCAP - Restrict dragging handle to the caption.
var ol_dragcap = 0;

// DRAGID - The id of a container div with a CSS class that uses overflow:auto
// for a DRAGGABLE popup that doesn't have iframe content and doesn't use DRAGCAP.
var ol_dragid = '';

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_draggable.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_exclusive.js
////////////////////////////////////////////////////////////////////////////////////

// EXCLUSIVE - Decides if a sticky primary popup should be exclusive, such that no other
// primry popup can be invoked and replace it before the sticky is closed by the user or
// a timeout (secondary popups can still be invoked from within the exclusive primary).
var ol_exclusive = 0;

// EXCLUSIVESTATUS - Status line string to use for exclusive stickies
var ol_exclusivestatus = 'Please act on or close the open popup.';

// EXCLUSIVEOVERRIDE = If a displayed exclusive sticky should be overridden by the
// current overlib call for a popup.
var ol_exclusiveoverride=0;

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_exclusive.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_filter.js
////////////////////////////////////////////////////////////////////////////////////

// FILTER - Toggles on the filter feature set for IE v5.5+ browsers. Defualt is off.
var ol_filter=0;

// FADEIN - Filter type for stylinzed fadein. Value can be 0 - 50 for the 51 types,
// or 51 (default) for random selections of the type across successive occurrences
// of the popup.
var ol_fadein=51;

// FADETIME - Duration of fadein (millisec).
var ol_fadetime=800;

// FILTEROPACITY - Opacity of entire popup.  The higher the number in the range of 1-99,
// the more more opaque (less transparent) the popup will be.  But 0 is handled as
// equivalent to 100 (no transparency).  This feature also is implemented for Mozilla
// and Netscape v6+ browsers.
var ol_filteropacity=100;

// FILTERSHADOW - Type of filter-based shadow.  Default is off (0).
// Dropshadow is 1. Shadow (tapers from corners) is 2.
var ol_filtershadow=0;

// FILTERSHADOWCOLOR - Color of filter-based shadow.
var ol_filtershadowcolor="#cccccc";

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_filter.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_function.js
////////////////////////////////////////////////////////////////////////////////////

// FUNCTION - Default javascript function. By default there is none.
var ol_function = null;

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_function.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_hide.js
////////////////////////////////////////////////////////////////////////////////////

// HIDESELECTBOXES - Whether to hide any select boxes which overlap the popup
// while the popup is being displayed.
var ol_hideselectboxes=0;

// HIDEBYID - An id or comma-separated list of id's to be hidden while the popup
// is displayed.  Is intended for form elements and is ignored for any browsers
// using HIDESELECTBOXES and for Opera v7+.
var ol_hidebyid='';

// HIDEBYIDALL - An id or comma=separated list of id's to be hidden while the popup
// is displayed.  Is intended for non-form elements with system controls, e.g.,
// flash objects and applets.
var ol_hidebyidall='';

// HIDEBYIDNS4 - An id or comma-separated list of id's for positioned div's to be
// hidden while the popup is being displayed by Netscape v4.x browsers.
var ol_hidebyidns4='';

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_hide.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_modal.js
////////////////////////////////////////////////////////////////////////////////////

// MODAL - Whether to make the popup modal (block access to any other items in the
// document via a shield until the popup is acted upon and closed).
var ol_modal = 0;

// MODALCOLOR - The color of the modal shield.
var ol_modalcolor = '#bbbbbb';

// MODALOPACITY - The opacity of the modal shield.
var ol_modalopacity = 40;

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_overtwo.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_overtwo.js
////////////////////////////////////////////////////////////////////////////////////

// LABEL - A labeling string for the secondary popup while it is displayed (visible).
var ol_label = "";

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_overtwo.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_print.js
////////////////////////////////////////////////////////////////////////////////////

// PRINT - Whether sticky should include a Print link or button.
var ol_print = 0;

// PRINTBUTTON - Whether to use button in main text area even if caption area is present.
var ol_printbutton=0;

// NOAUTOPRINT - Whether to block automatic printing and deletion of temporary printing window.
var ol_noautoprint=0;

// PRINTCOLOR - Color of "Print" link in caption area of sticky.
var ol_printcolor="#eeeeff";

// PRINTFONT - Font face for the print text.
var ol_printfont="Verdana,Arial,Helvetica";

// PRINTSIZE - Font size for the print text.
var ol_printsize=1;

// PRINTTEXT - Text for the sticky popup print link. Normal is "Print".
var ol_printtext='Print';

// PRINTBUTTONTEXT - Text for the sticky popup print button. Normal is "Print".
var ol_printbuttontext='Print';

// PRINTTITLE - Text to use as value of TITLE attribute for browser-generated TooTips
// with the "Print" link in captions of stickies or "Print" button in main text area.
var ol_printtitle="Click to Print";

// PRINTFONTCLASS - Print font class.
var ol_printfontclass="";

// PRINTCSSFILE - URL for .ccs file with CSS rules for styling the popup.
var ol_printcssfile="";

// PRINTXML - String for (optional) xml tag for temporary printing window.
var ol_printxml="";

// PRINTDOCTYPE - String for DOCTYPE declaration for temporary printing window.
var ol_printdoctype=
 '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" '
+'"http://www.w3.org/TR/html4/loose.dtd">';

// PRINTROOT - String for root tag for temporary printing window.
var ol_printroot="<html>";

// PRINTTYPE - String for MIME type for temporary printing window.
var ol_printtype="text/html";

// PRINTCHARSET - String for charset for temporary printing window.
var ol_printcharset="iso-8859-1";

// PRINTURL - URL for a document to be printed via the temporary printing window.
var ol_printurl="";

// PRINTJOB - string for an external function to be used for the temporary printing window.
var ol_printjob="";

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_print.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_scroll.js
////////////////////////////////////////////////////////////////////////////////////

// SCROLL - Whether sticky should scroll with the document when positioned via
// RELX or MIDX, and RELY or MIDY.
var ol_scroll = 0;

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_scroll.js
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION FOR PLUGIN MODULE overlibmws_shadow.js
////////////////////////////////////////////////////////////////////////////////////

// SHADOW - Whether to add a dropshadow. Default is no (0).
var ol_shadow = 0;

// SHADOWX - Horizontal dropshadow displacement in pixels.
// Positive is to the right and negative is to the left.
var ol_shadowx = 5;

// SHADOWY - Vertical dropshadow displacement in pixels.
// Positive is downward and negative is upward.
var ol_shadowy = 5;

// SHADOWCOLOR - Dropshadow color.
var ol_shadowcolor = "#666666";

// SHADOWIMAGE - Dropshadow background image. Default is none.
var ol_shadowimage = "";

// SHADOWOPACITY - Dropshadow opacity (100 is solid; 0 turns off this feature and
// thus also yields a solid shadow). Default is 60.
var ol_shadowopacity = 60;

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION FOR overlibmws_shadow.js
////////////////////////////////////////////////////////////////////////////////////

/*
 Do not remove or change this notice.
 overlibmws.js core module - Copyright Foteos Macrides 2002-2008. All rights reserved.
   Initial: August 18, 2002 - Last Revised: October 25, 2008
 This module is subject to the same terms of usage as for Erik Bosrup's overLIB,
 though only a minority of the code and API now correspond with Erik's version.
 See the overlibmws Change History and Command Reference via:

	http://www.macridesweb.com/oltest/

 Published under an open source license: http://www.macridesweb.com/oltest/license.html
 Give credit on sites that use overlibmws and submit changes so others can use them as well.
 You can get Erik's version via: http://www.bosrup.com/web/overlib/
*/

// PRE-INIT -- Ignore these lines, configuration is below.
var OLloaded=0,OLbubblePI=0,OLcrossframePI=0,OLdebugPI=0,OLdraggablePI=0,OLexclusivePI=0,OLfilterPI=0,
OLfunctionPI=0,OLhidePI=0,OLiframePI=0,OLmodalPI=0,OLovertwoPI=0,OLscrollPI=0,OLshadowPI=0,OLprintPI=0,
pmCnt=1,pMtr=new Array(),OLcmdLine=new Array(),OLrunTime=new Array(),OLv,OLudf,OLrefXY,
OLpct=new Array("83%","67%","83%","100%","117%","150%","200%","267%");if(typeof OLgateOK=='undefined')var OLgateOK=1;
var OLp1or2c='inarray,caparray,caption,closetext,right,left,center,autostatuscap,padx,pady,below,above,vcenter,donothing',
OLp1or2co='nofollow,background,offsetx,offsety,fgcolor,bgcolor,cgcolor,textcolor,capcolor,width,wrap,wrapmax,height,border,'
+'base,status,autostatus,snapx,snapy,fixx,fixy,relx,rely,midx,midy,ref,refc,refp,refx,refy,fgbackground,bgbackground,'
+'cgbackground,fullhtml,capicon,textfont,captionfont,textsize,captionsize,timeout,delay,hauto,vauto,nojustx,nojusty,fgclass,'
+'bgclass,cgclass,capbelow,textpadding,textfontclass,captionpadding,captionfontclass,sticky,noclose,mouseoff,offdelay,'
+'closecolor,closefont,closesize,closeclick,closetitle,closefontclass,decode',OLp1or2o='text,cap,close,hpos,vpos,padxl,'
+'padxr,padyt,padyb',OLp1co='label',OLp1or2=OLp1or2co+','+OLp1or2o,OLp1=OLp1co+','+'frame';
OLregCmds(OLp1or2c+','+OLp1or2co+','+OLp1co);
function OLud(v){return eval('typeof ol_'+v+'=="undefined"')?1:0;}

// DEFAULT CONFIGURATION -- See overlibConfig.txt for descriptions
if(OLud('fgcolor'))var ol_fgcolor="#ccccff";
if(OLud('bgcolor'))var ol_bgcolor="#333399";
if(OLud('cgcolor'))var ol_cgcolor="#333399";
if(OLud('textcolor'))var ol_textcolor="#000000";
if(OLud('capcolor'))var ol_capcolor="#ffffff";
if(OLud('closecolor'))var ol_closecolor="#eeeeff";
if(OLud('textfont'))var ol_textfont="Verdana,Arial,Helvetica";
if(OLud('captionfont'))var ol_captionfont="Verdana,Arial,Helvetica";
if(OLud('closefont'))var ol_closefont="Verdana,Arial,Helvetica";
if(OLud('textsize'))var ol_textsize=1;
if(OLud('captionsize'))var ol_captionsize=1;
if(OLud('closesize'))var ol_closesize=1;
if(OLud('fgclass'))var ol_fgclass="";
if(OLud('bgclass'))var ol_bgclass="";
if(OLud('cgclass'))var ol_cgclass="";
if(OLud('textpadding'))var ol_textpadding=2;
if(OLud('textfontclass'))var ol_textfontclass="";
if(OLud('captionpadding'))var ol_captionpadding=2;
if(OLud('captionfontclass'))var ol_captionfontclass="";
if(OLud('closefontclass'))var ol_closefontclass="";
if(OLud('close'))var ol_close="Close";
if(OLud('closeclick'))var ol_closeclick=0;
if(OLud('closetitle'))var ol_closetitle="Click to Close";
if(OLud('text'))var ol_text="Default Text";
if(OLud('cap'))var ol_cap="";
if(OLud('capbelow'))var ol_capbelow=0;
if(OLud('background'))var ol_background="";
if(OLud('width'))var ol_width=200;
if(OLud('wrap'))var ol_wrap=0;
if(OLud('wrapmax'))var ol_wrapmax=0;
if(OLud('height'))var ol_height= -1;
if(OLud('border'))var ol_border=1;
if(OLud('base'))var ol_base=0;
if(OLud('offsetx'))var ol_offsetx=10;
if(OLud('offsety'))var ol_offsety=10;
if(OLud('sticky'))var ol_sticky=0;
if(OLud('nofollow'))var ol_nofollow=0;
if(OLud('noclose'))var ol_noclose=0;
if(OLud('mouseoff'))var ol_mouseoff=0;
if(OLud('offdelay'))var ol_offdelay=300;
if(OLud('hpos'))var ol_hpos=RIGHT;
if(OLud('vpos'))var ol_vpos=BELOW;
if(OLud('status'))var ol_status="";
if(OLud('autostatus'))var ol_autostatus=0;
if(OLud('snapx'))var ol_snapx=0;
if(OLud('snapy'))var ol_snapy=0;
if(OLud('fixx'))var ol_fixx= -1;
if(OLud('fixy'))var ol_fixy= -1;
if(OLud('relx'))var ol_relx=null;
if(OLud('rely'))var ol_rely=null;
if(OLud('midx'))var ol_midx=null;
if(OLud('midy'))var ol_midy=null;
if(OLud('ref'))var ol_ref="";
if(OLud('refc'))var ol_refc='UL';
if(OLud('refp'))var ol_refp='UL';
if(OLud('refx'))var ol_refx=0;
if(OLud('refy'))var ol_refy=0;
if(OLud('fgbackground'))var ol_fgbackground="";
if(OLud('bgbackground'))var ol_bgbackground="";
if(OLud('cgbackground'))var ol_cgbackground="";
if(OLud('padxl'))var ol_padxl=1;
if(OLud('padxr'))var ol_padxr=1;
if(OLud('padyt'))var ol_padyt=1;
if(OLud('padyb'))var ol_padyb=1;
if(OLud('fullhtml'))var ol_fullhtml=0;
if(OLud('capicon'))var ol_capicon="";
if(OLud('frame'))var ol_frame=self;
if(OLud('timeout'))var ol_timeout=0;
if(OLud('delay'))var ol_delay=0;
if(OLud('hauto'))var ol_hauto=0;
if(OLud('vauto'))var ol_vauto=0;
if(OLud('nojustx'))var ol_nojustx=0;
if(OLud('nojusty'))var ol_nojusty=0;
if(OLud('label'))var ol_label="";
if(OLud('decode'))var ol_decode=0;
// ARRAY CONFIGURATION - See overlibConfig.txt for descriptions.
if(OLud('texts'))var ol_texts=new Array("Text 0","Text 1");
if(OLud('caps'))var ol_caps=new Array("Caption 0","Caption 1");
// END CONFIGURATION -- Don't change anything below, all configuration is above.

// INIT -- Runtime variables.
var o3_text="",o3_cap="",o3_sticky=0,o3_nofollow=0,o3_background="",o3_noclose=0,o3_mouseoff=0,o3_offdelay=300,o3_hpos=RIGHT,
o3_offsetx=10,o3_offsety=10,o3_fgcolor="",o3_bgcolor="",o3_cgcolor="",o3_textcolor="",o3_capcolor="",o3_closecolor="",
o3_width=200,o3_wrap=0,o3_wrapmax=0,o3_height= -1,o3_border=1,o3_base=0,o3_status="",o3_autostatus=0,o3_snapx=0,o3_snapy=0,
o3_fixx= -1,o3_fixy= -1,o3_relx=null,o3_rely=null,o3_midx=null,o3_midy=null,o3_ref="",o3_refc='UL',o3_refp='UL',o3_refx=0,
o3_refy=0,o3_fgbackground="",o3_bgbackground="",o3_cgbackground="",o3_padxl=0,o3_padxr=0,o3_padyt=0,o3_padyb=0,o3_fullhtml=0,
o3_vpos=BELOW,o3_capicon="",o3_textfont="Verdana,Arial,Helvetica",o3_captionfont="",o3_closefont="",o3_textsize=1,OLcC=null,
o3_captionsize=1,o3_closesize=1,o3_frame=self,o3_timeout=0,o3_delay=0,o3_hauto=0,o3_vauto=0,o3_nojustx=0,o3_nojusty=0,
o3_close="",o3_closeclick=0,o3_closetitle="",o3_fgclass="",o3_bgclass="",o3_cgclass="",o3_textpadding=2,o3_textfontclass="",
o3_captionpadding=2,o3_captionfontclass="",o3_closefontclass="",o3_capbelow=0,o3_label="",o3_decode=0,
CSSOFF=DONOTHING,CSSCLASS=DONOTHING,over=null,OLdelayid=0,OLtimerid=0,OLshowid=0,OLndt=0,OLfnRef="",OLhover=0,OLx=0,OLy=0,
OLshowingsticky=0,OLallowmove=0,OLoverHTML="",OLover2HTML="",OLifRef="",OLo2Ref="",OLifX=0,OLifY=0,
OLua=(OLv=navigator.userAgent)?OLv.toLowerCase():'',
OLns4=(navigator.appName=='Netscape'&&parseInt(navigator.appVersion)==4)?1:0,
OLns6=(document.getElementById)?1:0,
OLie4=(document.all)?1:0,
OLgek=(OLv=OLua.match(/gecko\/(\d{8})/i))?parseInt(OLv[1]):0,
OLmac=(OLua.indexOf('mac')>=0)?1:0,
OLsaf=(OLua.indexOf('safari')>=0)?1:0,
OLkon=(OLua.indexOf('konqueror')>=0)?1:0,
OLkht=(OLsaf||OLkon)?1:0,
OLopr=(OLua.indexOf('opera')>=0)?1:0,
OLop7=(OLopr&&document.createTextNode)?1:0;
OLop95=(OLop7&&document.getElementsByClassName)?1:0;
if(OLopr){OLns4=OLns6=OLgek=0;OLie4=(OLop7)?1:0;}
var OLieM=((OLie4&&OLmac)&&!(OLkht||OLopr))?1:0,
OLie5=0,OLie55=0,OLie7=0;if(OLie4&&!OLop7){
if((OLv=OLua.match(/msie (\d\.\d+)\.*/i))&&(OLv=parseFloat(OLv[1]))>=5.0){
OLie5=1;OLns6=0;if(OLv>=5.5)OLie55=1;if(OLv>=7.0)OLie7=1;}if(OLns6)OLie4=0;}
if(OLns4)window.onresize=function(){location.reload();};var OLchkMh=1,OLdw;
if(OLns4||OLie4||OLns6){OLmh();if(window.addEventListener)window.addEventListener("unload",
OLulCl,false);}else{overlib=nd=cClick=OLpageDefaults=no_overlib;}
function OLulCl(){if(over)cClick();window.removeEventListener("unload",OLulCl,false);}

/*
 PUBLIC FUNCTIONS
*/
// Loads defaults then args into runtime variables.
function overlib(){
if(!(OLloaded&&OLgateOK))return;if((OLexclusivePI)&&OLisExclusive(arguments))return true;if(OLchkMh)OLmh();if(OLndt&&
!OLtimerid)OLndt=0;if(over){if(OLfilterPI)o3_filter=0;cClick();}if(parent!=self){if(parent.OLo2Ref){parent.OLeval(
parent.OLo2Ref);parent.OLo2Ref="";}if(parent.OLifRef){parent.OLeval(parent.OLifRef);parent.OLifRef="";}}if(OLo2Ref){
eval(OLo2Ref);OLo2Ref="";}if(OLifRef){eval(OLifRef);OLifRef="";}OLload(OLp1or2);OLload(OLp1);OLfnRef="";OLifX=0;OLifY=0;
OLhover=0;if(OLcrossframePI&&parent!=self)OLchkFRAME(arguments);OLsetRunTimeVar();OLparseTokens('o3_',arguments);if(!(
over=OLmkLyr()))return false;if(o3_decode)OLdecode();if(OLprintPI)OLchkPrint();if(OLbubblePI)OLchkForBubbleEffect();if(
OLdebugPI)OLsetDebugCanShow();if(OLshadowPI)OLinitShadow();if(OLiframePI)OLinitIfs();if(OLfilterPI)OLinitFilterLyr();if(
OLexclusivePI&&o3_exclusive&&o3_exclusivestatus!="")o3_status=o3_exclusivestatus;else if(o3_autostatus==2&&o3_cap!="")
o3_status=o3_cap;else if(o3_autostatus==1&&o3_text!="")o3_status=o3_text;if(!o3_delay){return OLmain();}else{OLdelayid=
setTimeout("OLmain()",o3_delay);if(o3_status!=""){self.status=o3_status;return true;}else if(!(OLop7&&event&&event.type==
'mouseover'))return false;}
}
function OLeval(s){eval(s);}

// Clears popups if appropriate
function nd(time){
if(OLloaded&&OLgateOK){if(!((OLexclusivePI)&&OLisExclusive())){if(time&&over&&!o3_delay){
if(OLtimerid>0)clearTimeout(OLtimerid);OLtimerid=(OLhover&&o3_frame==self&&!OLcursorOff())?0:
setTimeout("cClick()",(o3_timeout=OLndt=time));}else{if(!OLshowingsticky){OLallowmove=0;
if(over)OLhideObject(over);}}}}return false;
}

// Close function for stickies
function cClick(){
if(OLloaded&&OLgateOK){OLhover=0;if(over){if(OLo2Ref){eval(OLo2Ref);OLo2Ref="";}if(OLovertwoPI&&over==over2)cClick2();
OLhideObject(over);OLshowingsticky=0;OLallowmove=0;}if(OLmodalPI)OLclearModal();}return false;
}

// Sets page-specific defaults.
function OLpageDefaults(){
OLparseTokens('ol_',arguments);
}

// Gets object referenced by its id or name
function OLgetRef(l,d){var r=OLgetRefById(l,d);return (r)?r:OLgetRefByName(l,d);}

// For unsupported browsers.
function no_overlib(){return false;}

/*
 OVERLIB MAIN FUNCTION SET
*/
function OLmain(){
o3_delay=0;if(parent!=self&&o3_frame==parent&&parent.OLscrollPI&&parent.over)parent.OLclearScroll();if(o3_frame==self){
if(o3_noclose)OLoptMOUSEOFF(0);else if(o3_mouseoff)OLoptMOUSEOFF(1);}if(o3_sticky){OLshowingsticky=1;if(OLfnRef&&
parent!=self&&o3_frame==parent&&parent.overlib)parent.OLifRef=(OLfilterPI?OLfnRef+'o3_filter=0;':'')+OLfnRef+'cClick();';}
OLdoLyr();OLallowmove=0;if(o3_timeout>0){if(OLtimerid>0)clearTimeout(OLtimerid);OLtimerid=setTimeout("cClick()",o3_timeout);}
OLchkRef();OLdisp(o3_status);if(OLdraggablePI)OLcheckDrag();if(o3_status!="")return true;else if(!(OLop7&&event&&
event.type=='mouseover'))return false;
}
function OLchkRef(){
if(o3_ref){OLrefXY=OLgetRefXY(o3_ref);if(OLrefXY[0]==null&&OLcrossframePI)OLchkIfRef();
if(OLrefXY[0]==null){o3_ref="";o3_midx=0;o3_midy=0;}}
}

// Loads o3_ variables
function OLload(c){var i,m=c.split(',');for(i=0;i<m.length;i++)eval('o3_'+m[i]+'=ol_'+m[i]);}

// Chooses LGF 
function OLdoLGF(){
return (o3_background!=''||o3_fullhtml)?OLcontentBackground(o3_text,o3_background,o3_fullhtml):(o3_cap=="")?
OLcontentSimple(o3_text):(o3_sticky)?OLcontentCaption(o3_text,o3_cap,o3_close):OLcontentCaption(o3_text,o3_cap,'');
}

// Makes Layer
function OLmkLyr(id,f,z){
id=(id||'overDiv');f=(f||o3_frame);z=(z||1000);var fd=f.document,d=OLgetRefById(id,fd);
if(!d){if(OLns4)d=fd.layers[id]=new Layer(1024,f);else if(OLie4&&!OLop7){
fd.body.insertAdjacentHTML('AfterBegin','<div id="'+id+'"></div>');d=fd.all[id];}else{d=fd.createElement('div');
if(d){d.id=id;fd.body.appendChild(d);}}if(!d)return null;if(OLns4)d.zIndex=z;else{var o=d.style;o.position='absolute';
o.visibility='hidden';o.zIndex=z;}}return d;
}

// Creates and writes layer content
function OLdoLyr(){
if(o3_sticky&&OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;}if(o3_background==''&&!o3_fullhtml){
if(o3_fgbackground!='')o3_fgbackground=' background="'+o3_fgbackground+'"';
if(o3_bgbackground!='')o3_bgbackground=' background="'+o3_bgbackground+'"';
if(o3_cgbackground!='')o3_cgbackground=' background="'+o3_cgbackground+'"';
if(o3_fgcolor!='')o3_fgcolor=' bgcolor="'+o3_fgcolor+'"';if(o3_bgcolor!='')o3_bgcolor=' bgcolor="'+o3_bgcolor+'"';
if(o3_cgcolor!='')o3_cgcolor=' bgcolor="'+o3_cgcolor+'"';if(o3_height>0)o3_height=(OLns4)?' height="'+o3_height+'"':
' style="height:'+o3_height+'px;"';else o3_height='';}if(!OLns4)OLrepositionTo(over,(OLns6?20:0),0);var lyrHtml=OLdoLGF();
if(o3_wrap&&!o3_fullhtml){OLlayerWrite(lyrHtml);o3_width=(OLns4?over.clip.width:over.offsetWidth);if(OLie4&&!OLop95){
var w=OLfd().clientWidth;if(o3_width>=w){if(OLop7){if(OLovertwoPI&&over==over2){var z=over2.style.zIndex;
o3_frame.document.body.removeChild(over);over2=OLmkLyr('overDiv2',o3_frame,z);over=over2;}else{
o3_frame.document.body.removeChild(over);over=OLmkLyr();}}o3_width=w-20;}}
if(o3_wrapmax<1&&o3_frame.innerWidth)o3_wrapmax=o3_frame.innerWidth-40;
if(o3_wrapmax>0&&o3_width>o3_wrapmax)o3_width=o3_wrapmax;o3_wrap=0;lyrHtml=OLdoLGF();}OLlayerWrite(lyrHtml);
o3_width=(OLns4?over.clip.width:over.offsetWidth);if(OLbubblePI)OLgenerateBubble(lyrHtml);
}

/*
 LAYER GENERATION FUNCTIONS
*/
// Makes simple table without caption
function OLcontentSimple(txt){
var t=OLbgLGF()+OLfgLGF(txt)+OLbaseLGF();OLsetBackground('');return t;
}

// Makes table with caption and optional close link
function OLcontentCaption(txt,title,close){
var closing=(OLprintPI?OLprintCapLGF():''),closeevent='onmouseover',caption,t,cC='javascript:return '+OLfnRef
+(OLovertwoPI&&over==over2?'cClick2();':'cClick();');if(o3_closeclick)closeevent=(o3_closetitle?'title="'
+o3_closetitle+'" ':'')+'onclick';if(o3_capicon!=''&&o3_capicon.indexOf('<img')!=0)o3_capicon='<img src="'+o3_capicon
+'" /> ';if(close){closing+='<td align="right"><a href="'+cC+'" '+closeevent+'="'+cC+'"'+(o3_closefontclass?' class="'
+o3_closefontclass+'">':(OLns4?'><':'')+OLlgfUtil(0,1,'','a',o3_closecolor,o3_closefont,o3_closesize))+close+
(o3_closefontclass?'':(OLns4?OLlgfUtil(1,1,'','a'):''))+'</a></td>';}caption='<table id="overCap'
+(OLovertwoPI&&over==over2?'2':'')+'"'+OLwd(0)+' border="0" cellpadding="'+o3_captionpadding+'" cellspacing="0"'
+(o3_cgclass?' class="'+o3_cgclass+'"':o3_cgcolor+o3_cgbackground)+'><tr><td'+OLwd(0)+(o3_cgclass?' class="'
+o3_cgclass+'">':'>')+(o3_captionfontclass?'<div'+OLhL(1)+' class="'+o3_captionfontclass+'">':OLlgfUtil(0,1,'','div',
o3_capcolor,o3_captionfont,o3_captionsize))+o3_capicon+title+OLlgfUtil(1,1,'','div')+'</td>'+closing+'</tr></table>';
t=OLbgLGF()+(o3_capbelow?OLfgLGF(txt)+caption:caption+OLfgLGF(txt))+OLbaseLGF();OLsetBackground('');return t;
}

// For BACKGROUND and FULLHTML commands
function OLcontentBackground(txt,image,hasfullhtml){
var t;if(hasfullhtml){t=txt;}else{t='<table'+OLwd(1)+' 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"'
+OLwd(2)+'>'+OLlgfUtil(0,0,o3_textfontclass,'div',o3_textcolor,o3_textfont,o3_textsize)+txt+OLlgfUtil(1,0,'','div')
+'</td><td width="'+o3_padxr+'"></td></tr><tr><td colspan="3" height="'+o3_padyb+'"></td></tr></table>';}
OLsetBackground(image);return t;
}

// LGF utilities
function OLbgLGF(){
return '<table'+OLwd(1)+o3_height+' border="0" cellpadding="'+o3_border+'" cellspacing="0"'+(o3_bgclass?' class="'
+o3_bgclass+'"':o3_bgcolor+o3_bgbackground)+'><tr><td>';
}
function OLfgLGF(t){
return '<table'+OLwd(0)+o3_height+' border="0" cellpadding="'+o3_textpadding+'" cellspacing="0"'+(o3_fgclass?' class="'
+o3_fgclass+'"':o3_fgcolor+o3_fgbackground)+'><tr><td valign="top"'+(o3_fgclass?' class="'+o3_fgclass+'"':'')+'>'
+OLlgfUtil(0,0,o3_textfontclass,'div',o3_textcolor,o3_textfont,o3_textsize)+t+(OLprintPI?OLprintFgLGF():'')
+OLlgfUtil(1,0,'','div')+'</td></tr></table>';
}
function OLlgfUtil(end,stg,tfc,ele,col,fac,siz){
if(end)return('</'+(OLns4?'font'+(stg?'></strong':''):ele)+'>');else return(tfc?'<div'+OLhL(1)+' class="'+tfc+'">':
((ele=='a'?'':'<')+(OLns4?(stg?'strong><':'')+'font color="'+col+'" face="'+OLquoteMultiNameFonts(fac)+'" size="'
+siz:(ele=='a'?'':ele)+' style="'+((ele=='div')?OLhL(0):'')+'color:'+col+(stg?';font-weight:bold':'')+';font-family:'
+OLquoteMultiNameFonts(fac)+';font-size:'+siz+';'+(ele=='span'?'text-decoration:underline;':''))+'">'));
}
function OLquoteMultiNameFonts(f){
var i,v,pM=f.split(',');for(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 OLbaseLGF(){
return ((o3_base>0&&!o3_wrap)?('<table width="100%" border="0" cellpadding="0" cellspacing="0"'+(o3_bgclass?' class="'
+o3_bgclass+'"':'')+'><tr><td height="'+o3_base+'"></td></tr></table>'):'')+'</td></tr></table>';
}
function OLwd(a){return(o3_wrap?'':' width="'+(!a?'100%':(a==1?o3_width:(o3_width-o3_padxl-o3_padxr)))+'"');}
function OLhL(s){if(!OLie5)return '';return(s?' style="overflow:auto;"':'overflow:auto;');}

// Loads image into the div.
function OLsetBackground(i){
if(i==''){if(OLns4)over.background.src=null;else{if(OLns6)over.style.width='';over.style.backgroundImage='none';}}
else{if(OLns4)over.background.src=i;else{if(OLns6)over.style.width=o3_width+'px';over.style.backgroundImage='url('+i+')';}}
}

/*
 HANDLING FUNCTIONS
*/
// Displays layer
function OLdisp(s){
if(OLmodalPI&&!o3_modalscroll)OLchkModal();if(!OLallowmove){if(OLshadowPI)OLdispShadow();if(OLiframePI)OLdispIfs();
OLplaceLayer();if(OLmodalPI&&o3_modalscroll)OLchkModal();if(OLndt)OLshowObject(over);
else OLshowid=setTimeout("OLshowObject(over)",1);OLallowmove=(o3_sticky||o3_nofollow)?0:1;}OLndt=0;if(s!="")self.status=s;
}

// Decides placement of layer.
function OLplaceLayer(){
var snp,X,Y,pgLeft,pgTop,pWd=o3_width,pHt,iWd=100,iHt=100,SB=0,LM=0,CX=0,TM=0,BM=0,CY=0,o=OLfd(),
nsb=(OLgek>=20010505&&!o3_frame.scrollbars.visible)?1:0;
if(!OLkht&&!OLop95&&o&&o.clientWidth)iWd=o.clientWidth;
else if(o3_frame.innerWidth){SB=Math.ceil(1.4*(o3_frame.outerWidth-o3_frame.innerWidth));
if(SB>20)SB=20;iWd=o3_frame.innerWidth;}
pgLeft=(OLie4&&!OLop95)?o.scrollLeft:o3_frame.pageXOffset;
if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow)SB=CX=5;else
if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowx){SB+=((o3_shadowx>0)?o3_shadowx:0);
LM=((o3_shadowx<0)?Math.abs(o3_shadowx):0);CX=Math.abs(o3_shadowx);}
if(o3_ref!=""||o3_fixx> -1||o3_relx!=null||o3_midx!=null){
if(o3_ref!=""){X=OLrefXY[0];if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow){
if(o3_refp=='UR'||o3_refp=='LR')X-=5;}
else if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowx){
if(o3_shadowx<0&&(o3_refp=='UL'||o3_refp=='LL'))X-=o3_shadowx;else
if(o3_shadowx>0&&(o3_refp=='UR'||o3_refp=='LR'))X-=o3_shadowx;}
}else{if(o3_midx!=null){
X=parseInt(pgLeft+((iWd-pWd-SB-LM)/2)+o3_midx);
}else{if(o3_relx!=null){
if(o3_relx>=0)X=pgLeft+o3_relx+LM;else X=pgLeft+o3_relx+iWd-pWd-SB;
}else{X=o3_fixx+LM;}}}
}else{
if(o3_hauto){
if(o3_hpos==LEFT&&OLx-pgLeft+OLifX<iWd/2&&OLx-pWd-o3_offsetx+OLifX<pgLeft+LM)o3_hpos=RIGHT;else
if(o3_hpos==RIGHT&&OLx-pgLeft+OLifX>iWd/2&&OLx+pWd+o3_offsetx+OLifX>pgLeft+iWd-SB)o3_hpos=LEFT;}
X=(o3_hpos==CENTER)?parseInt(OLx-((pWd+CX)/2)+o3_offsetx):
(o3_hpos==LEFT)?OLx-o3_offsetx-pWd:OLx+o3_offsetx;
if(o3_snapx>1){
snp=X % o3_snapx;
if(o3_hpos==LEFT){X=X-(o3_snapx+snp);}else{X=X+(o3_snapx-snp);}}X+=OLifX;}
if(!o3_nojustx&&X+pWd>pgLeft+iWd-SB)
X=iWd+pgLeft-pWd-SB;if(!o3_nojustx&&X-LM<pgLeft)X=pgLeft+LM;
pgTop=OLie4&&!OLop95?o.scrollTop:o3_frame.pageYOffset;
if(!OLkht&&!OLop95&&!nsb&&o&&o.clientHeight)iHt=o.clientHeight;
else if(o3_frame.innerHeight)iHt=o3_frame.innerHeight;
if(OLbubblePI&&o3_bubble)pHt=OLbubbleHt;else pHt=OLns4?over.clip.height:over.offsetHeight;
if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowy){TM=(o3_shadowy<0)?Math.abs(o3_shadowy):0;
if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow)BM=CY=5;else
BM=(o3_shadowy>0)?o3_shadowy:0;CY=Math.abs(o3_shadowy);}
if(o3_ref!=""||o3_fixy> -1||o3_rely!=null||o3_midy!=null){
if(o3_ref!=""){Y=OLrefXY[1];if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow){
if(o3_refp=='LL'||o3_refp=='LR')Y-=5;}else if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowy){
if(o3_shadowy<0&&(o3_refp=='UL'||o3_refp=='UR'))Y-=o3_shadowy;else
if(o3_shadowy>0&&(o3_refp=='LL'||o3_refp=='LR'))Y-=o3_shadowy;}
}else{if(o3_midy!=null){
Y=parseInt(pgTop+((iHt-pHt-CY)/2)+o3_midy);
}else{if(o3_rely!=null){
if(o3_rely>=0)Y=pgTop+o3_rely+TM;else Y=pgTop+o3_rely+iHt-pHt-BM;}else{
Y=o3_fixy+TM;}}}
}else{
if(o3_vauto){
if(o3_vpos==ABOVE&&OLy-pgTop+OLifY<iHt/2&&OLy-pHt-o3_offsety+OLifY<pgTop)o3_vpos=BELOW;else
if(o3_vpos==BELOW&&OLy-pgTop+OLifY>iHt/2&&OLy+pHt+o3_offsety+((OLns4||OLkht)?17:0)+OLifY>pgTop+iHt-BM)
o3_vpos=ABOVE;}Y=(o3_vpos==VCENTER)?parseInt(OLy-((pHt+CY)/2)+o3_offsety):
(o3_vpos==ABOVE)?OLy-(pHt+o3_offsety+BM):OLy+o3_offsety+TM;
if(o3_snapy>1){
snp=Y % o3_snapy;
if(pHt>0&&o3_vpos==ABOVE){Y=Y-(o3_snapy+snp);}else{Y=Y+(o3_snapy-snp);}}Y+=OLifY;}
if(!o3_nojusty&&Y+pHt+BM>pgTop+iHt)Y=pgTop+iHt-pHt-BM;if(!o3_nojusty&&Y-TM<pgTop)Y=pgTop+TM;
OLrepositionTo(over,X,Y);
if(OLshadowPI)OLrepositionShadow(X,Y);if(OLiframePI)OLrepositionIfs(X,Y);
if(OLns6&&o3_frame.innerHeight){iHt=o3_frame.innerHeight;OLrepositionTo(over,X,Y);}
if(OLscrollPI)OLchkScroll(X-pgLeft,Y-pgTop);
}

// Chooses body or documentElement
function OLfd(f){
var fd=((f)?f:o3_frame).document,fdc=fd.compatMode,fdd=fd.documentElement;
return (!OLop7&&fdc&&fdc!='BackCompat'&&fdd&&fdd.clientWidth)?fd.documentElement:fd.body;
}

// Gets location of REFerence object
function OLgetRefXY(r,d){
var o=OLgetRef(r,d),ob=o,rXY=[o3_refx,o3_refy],of;if(!o)return [null,null];if(OLns4){
if(typeof o.length!='undefined'&&o.length>1){ob=o[0];rXY[0]+=o[0].x+o[1].pageX;rXY[1]+=o[0].y+o[1].pageY;}else{
if((o.toString().indexOf('Image')!= -1)||(o.toString().indexOf('Anchor')!= -1)){rXY[0]+=o.x;rXY[1]+=o.y;}
else{rXY[0]+=o.pageX;rXY[1]+=o.pageY;}}}else{rXY[0]+=OLpageLoc(o,'Left');rXY[1]+=OLpageLoc(o,'Top');}
of=OLgetRefOffsets(ob);rXY[0]+=of[0];rXY[1]+=of[1];return rXY;
}

// Seeks REFerence by id
function OLgetRefById(l,d){
l=(l||'overDiv');d=(d||o3_frame.document);var j,r;if(d.getElementById)return d.getElementById(l);
if(OLie4&&d.all)return d.all[l];if(d.layers&&d.layers.length>0){if(d.layers[l])return d.layers[l];
for(j=0;j<d.layers.length;j++){r=OLgetRefById(l,d.layers[j].document);if(r)return r;}}return null;
}

// Seeks REFerence by name
function OLgetRefByName(l,d){
d=(d||o3_frame.document);var j,r,v=OLie4?d.all.tags('iframe'):OLns6?d.getElementsByTagName('iframe'):null;
if(typeof d.images!='undefined'&&d.images[l])return d.images[l];
if(typeof d.anchors!='undefined'&&d.anchors[l])return d.anchors[l];
if(v)for(j=0;j<v.length;j++)if(v[j].name==l)return v[j];if(d.layers&&d.layers.length>0)for(j=0;j<d.layers.length;j++){
r=OLgetRefByName(l,d.layers[j].document);if(r&&r.length>0)return r;else if(r)return [r,d.layers[j]];}return null;
}

// Gets layer vs REFerence offsets
function OLgetRefOffsets(o){
var c=o3_refc.toUpperCase(),p=o3_refp.toUpperCase(),W=0,H=0,pW=0,pH=0,of=[0,0];pW=(OLbubblePI&&o3_bubble)?
o3_width:OLns4?over.clip.width:over.offsetWidth;pH=(OLbubblePI&&o3_bubble)?OLbubbleHt:OLns4?
over.clip.height:over.offsetHeight;if((!OLop7)&&o.toString().indexOf('Image')!= -1){W=o.width;H=o.height;}
else if((!OLop7)&&o.toString().indexOf('Anchor')!= -1){c=o3_refc='UL';}else{W=(OLns4)?o.clip.width:o.offsetWidth;
H=(OLns4)?o.clip.height:o.offsetHeight;}if((OLns4||(OLns6&&OLgek))&&o.border){W+=2*parseInt(o.border);
H+=2*parseInt(o.border);}if(c=='UL'){of=(p=='UR')?[-pW,0]:(p=='LL')?[0,-pH]:(p=='LR')?[-pW,-pH]:[0,0];}else if(c=='UR'){
of=(p=='UR')?[W-pW,0]:(p=='LL')?[W,-pH]:(p=='LR')?[W-pW,-pH]:[W,0];}else if(c=='LL'){of=(p=='UR')?[-pW,H]:(p=='LL')?[0,H-pH]:
(p=='LR')?[-pW,H-pH]:[0,H];}else if(c=='LR'){of=(p=='UR')?[W-pW,H]:(p=='LL')?[W,H-pH]:(p=='LR')?[W-pW,H-pH]:[W,H];}return of;
}

// Gets x or y location of object
function OLpageLoc(o,t){
var l=0,s=o;while(o.offsetParent&&o.offsetParent.tagName.toLowerCase()!='html'){l+=o['offset'+t];o=o.offsetParent;}
l+=o['offset'+t];if(!OLop7)while(s=s.parentNode){if((s['scroll'+t]>0)&&s.tagName.toLowerCase()=='div')l-=s['scroll'+t];}
return l;
}

// Moves layer
function OLmouseMove(e){
var e=(e||event);OLcC=(OLovertwoPI&&over2&&over==over2?cClick2:cClick);OLx=(e.pageX||e.clientX+OLfd().scrollLeft);
OLy=(e.pageY||e.clientY+OLfd().scrollTop);if((OLallowmove&&over)&&(o3_frame==self||over==OLgetRefById()||(OLovertwoPI&&
over2==over&&over==OLgetRefById('overDiv2')))){OLplaceLayer();if(OLhidePI)OLhideUtil(0,1,1,0,0,0);}if(OLhover&&over&&
o3_frame==self&&OLcursorOff())if(o3_offdelay<1)OLcC();else{if(OLtimerid>0)clearTimeout(OLtimerid);
OLtimerid=setTimeout("OLcC()",o3_offdelay);}
}

// Capture mouse and chain other scripts.
function OLmh(){
var fN,f,j,k,s,mh=OLmouseMove,w=(OLns4&&window.onmousemove),re=/function[ ]*(\w*)\(/;OLdw=document;if(document.onmousemove||
w){if(w)OLdw=window;f=OLdw.onmousemove.toString();fN=f.match(re);if(!fN||fN[1]=='anonymous'||fN[1]=='OLmouseMove'){OLchkMh=0;
return;}if(fN[1])s=fN[1]+'(e)';else{j=f.indexOf('{');k=f.lastIndexOf('}')+1;s=f.substring(j,k);}s+=';OLmouseMove(e);';
mh=new Function('e',s);}OLdw.onmousemove=mh;if(OLns4)OLdw.captureEvents(Event.MOUSEMOVE);
}

/*
 PARSING
*/
function OLparseTokens(pf,ar){
var i,v,md= -1,par=(pf!='ol_'),p=OLpar,q=OLparQuo,t=OLtoggle;OLudf=(par&&!ar.length?1:0);
for(i=0;i<ar.length;i++){if(md<0){if(typeof ar[i]=='number'){OLudf=(par?1:0);i--;}
else{switch(pf){case 'ol_':ol_text=ar[i];break;default:o3_text=ar[i];}}md=0;}else{
if(ar[i]==INARRAY){OLudf=0;eval(pf+'text=ol_texts['+ar[++i]+']');continue;}
if(ar[i]==CAPARRAY){eval(pf+'cap=ol_caps['+ar[++i]+']');continue;}
if(ar[i]==CAPTION){q(ar[++i],pf+'cap');continue;}
if(Math.abs(ar[i])==STICKY){t(ar[i],pf+'sticky');continue;}
if(Math.abs(ar[i])==NOFOLLOW){t(ar[i],pf+'nofollow');continue;}
if(ar[i]==BACKGROUND){q(ar[++i],pf+'background');continue;}
if(Math.abs(ar[i])==NOCLOSE){t(ar[i],pf+'noclose');continue;}
if(Math.abs(ar[i])==MOUSEOFF){t(ar[i],pf+'mouseoff');continue;}
if(ar[i]==OFFDELAY){p(ar[++i],pf+'offdelay');continue;}
if(ar[i]==RIGHT||ar[i]==LEFT||ar[i]==CENTER){p(ar[i],pf+'hpos');continue;}
if(ar[i]==OFFSETX){p(ar[++i],pf+'offsetx');continue;}
if(ar[i]==OFFSETY){p(ar[++i],pf+'offsety');continue;}
if(ar[i]==FGCOLOR){q(ar[++i],pf+'fgcolor');continue;}
if(ar[i]==BGCOLOR){q(ar[++i],pf+'bgcolor');continue;}
if(ar[i]==CGCOLOR){q(ar[++i],pf+'cgcolor');continue;}
if(ar[i]==TEXTCOLOR){q(ar[++i],pf+'textcolor');continue;}
if(ar[i]==CAPCOLOR){q(ar[++i],pf+'capcolor');continue;}
if(ar[i]==CLOSECOLOR){q(ar[++i],pf+'closecolor');continue;}
if(ar[i]==WIDTH){p(ar[++i],pf+'width');continue;}
if(Math.abs(ar[i])==WRAP){t(ar[i],pf+'wrap');continue;}
if(ar[i]==WRAPMAX){p(ar[++i],pf+'wrapmax');continue;}
if(ar[i]==HEIGHT){p(ar[++i],pf+'height');continue;}
if(ar[i]==BORDER){p(ar[++i],pf+'border');continue;}
if(ar[i]==BASE){p(ar[++i],pf+'base');continue;}
if(ar[i]==STATUS){q(ar[++i],pf+'status');continue;}
if(Math.abs(ar[i])==AUTOSTATUS){v=pf+'autostatus';
eval(v+'=('+ar[i]+'<0)?('+v+'==2?2:0):('+v+'==1?0:1)');continue;}
if(Math.abs(ar[i])==AUTOSTATUSCAP){v=pf+'autostatus';
eval(v+'=('+ar[i]+'<0)?('+v+'==1?1:0):('+v+'==2?0:2)');continue;}
if(ar[i]==CLOSETEXT){q(ar[++i],pf+'close');continue;}
if(ar[i]==SNAPX){p(ar[++i],pf+'snapx');continue;}
if(ar[i]==SNAPY){p(ar[++i],pf+'snapy');continue;}
if(ar[i]==FIXX){p(ar[++i],pf+'fixx');continue;}
if(ar[i]==FIXY){p(ar[++i],pf+'fixy');continue;}
if(ar[i]==RELX){p(ar[++i],pf+'relx');continue;}
if(ar[i]==RELY){p(ar[++i],pf+'rely');continue;}
if(ar[i]==MIDX){p(ar[++i],pf+'midx');continue;}
if(ar[i]==MIDY){p(ar[++i],pf+'midy');continue;}
if(ar[i]==REF){q(ar[++i],pf+'ref');continue;}
if(ar[i]==REFC){q(ar[++i],pf+'refc');continue;}
if(ar[i]==REFP){q(ar[++i],pf+'refp');continue;}
if(ar[i]==REFX){p(ar[++i],pf+'refx');continue;}
if(ar[i]==REFY){p(ar[++i],pf+'refy');continue;}
if(ar[i]==FGBACKGROUND){q(ar[++i],pf+'fgbackground');continue;}
if(ar[i]==BGBACKGROUND){q(ar[++i],pf+'bgbackground');continue;}
if(ar[i]==CGBACKGROUND){q(ar[++i],pf+'cgbackground');continue;}
if(ar[i]==PADX){p(ar[++i],pf+'padxl');p(ar[++i],pf+'padxr');continue;}
if(ar[i]==PADY){p(ar[++i],pf+'padyt');p(ar[++i],pf+'padyb');continue;}
if(Math.abs(ar[i])==FULLHTML){t(ar[i],pf+'fullhtml');continue;}
if(ar[i]==BELOW||ar[i]==ABOVE||ar[i]==VCENTER){p(ar[i],pf+'vpos');continue;}
if(ar[i]==CAPICON){q(ar[++i],pf+'capicon');continue;}
if(ar[i]==TEXTFONT){q(ar[++i],pf+'textfont');continue;}
if(ar[i]==CAPTIONFONT){q(ar[++i],pf+'captionfont');continue;}
if(ar[i]==CLOSEFONT){q(ar[++i],pf+'closefont');continue;}
if(ar[i]==TEXTSIZE){q(ar[++i],pf+'textsize');continue;}
if(ar[i]==CAPTIONSIZE){q(ar[++i],pf+'captionsize');continue;}
if(ar[i]==CLOSESIZE){q(ar[++i],pf+'closesize');continue;}
if(ar[i]==TIMEOUT){p(ar[++i],pf+'timeout');continue;}
if(ar[i]==DELAY){p(ar[++i],pf+'delay');continue;}
if(Math.abs(ar[i])==HAUTO){t(ar[i],pf+'hauto');continue;}
if(Math.abs(ar[i])==VAUTO){t(ar[i],pf+'vauto');continue;}
if(Math.abs(ar[i])==NOJUSTX){t(ar[i],pf+'nojustx');continue;}
if(Math.abs(ar[i])==NOJUSTY){t(ar[i],pf+'nojusty');continue;}
if(Math.abs(ar[i])==CLOSECLICK){t(ar[i],pf+'closeclick');continue;}
if(ar[i]==CLOSETITLE){q(ar[++i],pf+'closetitle');continue;}
if(ar[i]==FGCLASS){q(ar[++i],pf+'fgclass');continue;}
if(ar[i]==BGCLASS){q(ar[++i],pf+'bgclass');continue;}
if(ar[i]==CGCLASS){q(ar[++i],pf+'cgclass');continue;}
if(ar[i]==TEXTPADDING){p(ar[++i],pf+'textpadding');continue;}
if(ar[i]==TEXTFONTCLASS){q(ar[++i],pf+'textfontclass');continue;}
if(ar[i]==CAPTIONPADDING){p(ar[++i],pf+'captionpadding');continue;}
if(ar[i]==CAPTIONFONTCLASS){q(ar[++i],pf+'captionfontclass');continue;}
if(ar[i]==CLOSEFONTCLASS){q(ar[++i],pf+'closefontclass');continue;}
if(Math.abs(ar[i])==CAPBELOW){t(ar[i],pf+'capbelow');continue;}
if(ar[i]==LABEL){q(ar[++i],pf+'label');continue;}
if(Math.abs(ar[i])==DECODE){t(ar[i],pf+'decode');continue;}
if(ar[i]==DONOTHING){continue;}
i=OLparseCmdLine(pf,i,ar);}}
if((OLfunctionPI)&&OLudf&&o3_function)o3_text=o3_function();
if(pf=='o3_')OLfontSize();
}
function OLpar(a,v){eval(v+'='+a);}
function OLparQuo(a,v){eval(v+"='"+OLescSglQt(a)+"'");}
function OLescSglQt(s){return s.toString().replace(/\\/g,"\\\\").replace(/'/g,"\\'");}
function OLtoggle(a,v){eval(v+'=('+v+'==0&&'+a+'>=0)?1:0');}
function OLhasDims(s){return /[%\-a-z]+$/.test(s);}
function OLfontSize(){
var i;if(OLhasDims(o3_textsize)){if(OLns4)o3_textsize="2";}else
if(!OLns4){i=parseInt(o3_textsize);o3_textsize=(i>0&&i<8)?OLpct[i]:OLpct[0];}
if(OLhasDims(o3_captionsize)){if(OLns4)o3_captionsize="2";}else
if(!OLns4){i=parseInt(o3_captionsize);o3_captionsize=(i>0&&i<8)?OLpct[i]:OLpct[0];}
if(OLhasDims(o3_closesize)){if(OLns4)o3_closesize="2";}else
if(!OLns4){i=parseInt(o3_closesize);o3_closesize=(i>0&&i<8)?OLpct[i]:OLpct[0];}
if(OLprintPI)OLprintDims();
}
function OLdecode(){
var re=/%[0-9A-Fa-f]{2,}/,t=o3_text,c=o3_cap,u=unescape,d=!OLns4&&(!OLgek||OLgek>=20020826)&&typeof decodeURIComponent?
decodeURIComponent:u;if(typeof(window.TypeError)=='function'){if(re.test(t)){eval(new Array('try{','o3_text=d(t);',
'}catch(e){','o3_text=u(t);','}').join('\n'))};if(c&&re.test(c)){eval(new Array('try{','o3_cap=d(c);','}catch(e){',
'o3_cap=u(c);','}').join('\n'))}}else{if(re.test(t))o3_text=u(t);if(c&&re.test(c))o3_cap=u(c);}
}

/*
 LAYER FUNCTIONS
*/
// Writes to layer
function OLlayerWrite(t){
t+="\n";if(OLns4){over.document.write(t);over.document.close();}else if(typeof over.innerHTML!='undefined'){
if(OLieM)over.innerHTML='';over.innerHTML=t;}else{var range=o3_frame.document.createRange();range.setStartAfter(over);
var domfrag=range.createContextualFragment(t);while(over.hasChildNodes()){over.removeChild(over.lastChild);}
over.appendChild(domfrag);}if(OLovertwoPI&&over==over2)OLover2HTML=t;else OLoverHTML=t;
if(OLprintPI)over.print=o3_print?t:null;
}

// Makes object visible
function OLshowObject(o){
OLshowid=0;o=(OLns4)?o:o.style;if(((OLfilterPI)&&!OLchkFilter(o))||!OLfilterPI)o.visibility="visible";
if(OLshadowPI)OLshowShadow();if(OLiframePI)OLshowIfs();if(OLhidePI)OLhideUtil(1,1,0);
}

// Hides object
function OLhideObject(o){
if(OLshowid>0){clearTimeout(OLshowid);OLshowid=0;}if(OLtimerid>0)clearTimeout(OLtimerid);
if(OLdelayid>0)clearTimeout(OLdelayid);OLtimerid=0;OLdelayid=0;self.status="";o3_label=ol_label;
if(o3_frame!=self)o=OLgetRefById();if(o){if(o.onmouseover)o.onmouseover=null;if(OLscrollPI&&o==over)OLclearScroll();
if(OLdraggablePI)OLclearDrag();if(OLfilterPI)OLcleanupFilter(o);if(OLshadowPI)OLhideShadow();var os=(OLns4)?o:o.style;
if(((OLfilterPI)&&!OLchkFadeOut(os))||!OLfilterPI){os.visibility="hidden";if(!OLie55||(typeof ggOnChange=='undefined'&&
(!OLfilterPI||!o3_filter||o3_fadeout<0)))o.innerHTML='';}if(OLhidePI&&o==over)OLhideUtil(0,0,1);if(OLiframePI)OLhideIfs(o);}
}

// Moves layer
function OLrepositionTo(o,xL,yL){
o=(OLns4)?o:o.style;o.left=(OLns4?xL:xL+'px');o.top=(OLns4?yL:yL+'px');
}

// Handle NOCLOSE-MOUSEOFF
function OLoptMOUSEOFF(c){
if(!c)o3_close="";
over.onmouseover=function(){OLhover=1;if(OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;}}
}
function OLcursorOff(){
var o=(OLns4?over:over.style),pHt=OLns4?over.clip.height:over.offsetHeight,left=parseInt(o.left),top=parseInt(o.top),
right=left+o3_width,bottom=top+((OLbubblePI&&o3_bubble)?OLbubbleHt:pHt);
if(OLx<left||OLx>right||OLy<top||OLy>bottom)return true;return false;
}

/*
 REGISTRATION
*/
function OLsetRunTimeVar(){
if(OLrunTime.length)for(var k=0;k<OLrunTime.length;k++)OLrunTime[k]();
}
function OLparseCmdLine(pf,i,ar){
if(OLcmdLine.length){for(var k=0;k<OLcmdLine.length;k++){var j=OLcmdLine[k](pf,i,ar);if(j>-1){i=j;break;}}}return i;
}
function OLregCmds(c){
if(typeof c!='string')return;var pM=c.split(',');pMtr=pMtr.concat(pM);
for(var i=0;i<pM.length;i++)eval(pM[i].toUpperCase()+'='+pmCnt++);
}
function OLregRunTimeFunc(f){
if(typeof f=='object')OLrunTime=OLrunTime.concat(f);else OLrunTime[OLrunTime.length++]=f;
}
function OLregCmdLineFunc(f){
if(typeof f=='object')OLcmdLine=OLcmdLine.concat(f);else OLcmdLine[OLcmdLine.length++]=f;
}

OLloaded=1;
/*
 overlibmws_crossframe.js plug-in module - Copyright Foteos Macrides 2003-2008. All rights reserved.
   For support of FRAME.
   Initial: August 3, 2003 - Last Revised: October 25, 2008
 See the Change History and Command Reference for overlibmws via:

	http://www.macridesweb.com/oltest/

 Published under an open source license: http://www.macridesweb.com/oltest/license.html
*/

OLloaded=0;
OLregCmds('frame');

function OLparseCrossframe(pf,i,ar){
var k=i,v;
if(k<ar.length){
if(ar[k]==FRAME){v=ar[++k];if(pf=='ol_')ol_frame=v;else OLoptFRAME(v);return k;}}
return -1;
}

function OLgetFrameRef(thisFrame,ofrm){
var i,v,retVal='';for(i=0;i<thisFrame.length;i++){if((((thisFrame[i].length>0)))&&(((OLns4))||
((OLie4)&&(v=thisFrame[i].document.all.tags('iframe'))!=null&&v.length==0)||
((OLns6)&&(v=thisFrame[i].document.getElementsByTagName('iframe'))!=null&&v.length==0))){
retVal=OLgetFrameRef(thisFrame[i],ofrm);if(retVal=='')continue;}
else if(thisFrame[i]!=ofrm)continue;retVal='['+i+']'+retVal;break;}
return retVal;
}

function OLoptFRAME(frm){
o3_frame=OLmkLyr('overDiv',frm)?frm:self;if(o3_frame!=self){var l,tFrm=OLgetFrameRef(top.frames,o3_frame),
sFrm=OLgetFrameRef(top.frames,ol_frame);if(sFrm.length==tFrm.length) {l=tFrm.lastIndexOf('[');if(l){
while(sFrm.substring(0,l)!=tFrm.substring(0,l))l=tFrm.lastIndexOf('[',l-1);tFrm=tFrm.substr(l);sFrm=sFrm.substr(l);}}
var i,k,cnt=0,p='',str=tFrm;while((k=str.lastIndexOf('['))!= -1){cnt++;str=str.substring(0,k);}if(!sFrm&&o3_frame==parent)
sFrm=OLgetFrameRef(parent,self);else for(i=0;i<cnt;i++)p=p+'parent.';OLfnRef=p+'frames'+sFrm+'.';var n=window.name,o;
if((n&&parent!=self&&o3_frame==parent)&&(o=OLgetRef(n,parent.document))){if(OLie4&&!OLop7){
OLx=event.clientX+OLfd().scrollLeft;OLy=event.clientY+OLfd().scrollTop;}
OLifX=OLpageLoc(o,'Left')-(OLie4&&!OLop7?OLfd().scrollLeft:self.pageXOffset);
OLifY=OLpageLoc(o,'Top')-(OLie4&&!OLop7?OLfd().scrollTop:self.pageYOffset);}}
}

function OLchkIfRef(){
var n=(parent!=self&&o3_frame==parent)?window.name:'',o=n?OLgetRef(n):null;
if(o){var oR=OLgetRef(o3_ref,document);if(oR){OLrefXY=OLgetRefXY(o3_ref,document);
OLrefXY[0]+=(OLpageLoc(o,'Left')-(OLie4&&!OLop7?OLfd(self).scrollLeft:self.pageXOffset));
OLrefXY[1]+=(OLpageLoc(o,'Top')-(OLie4&&!OLop7?OLfd(self).scrollTop:self.pageYOffset));}}
}

function OLchkFRAME(args){
var OLfrmVal=self;for(var i=0;i<args.length;i++){if(typeof args[i]=='number'&&args[i]==FRAME){OLfrmVal=args[i+1];break;}}
if(OLfrmVal!=self&&OLfrmVal.over&&OLfrmVal.cClick)OLfrmVal.cClick();
}

OLregCmdLineFunc(OLparseCrossframe);

OLcrossframePI=1;
OLloaded=1;
/*
 overlibmws_iframe.js plug-in module - Copyright Foteos Macrides 2003-2008. All rights reserved.
   Masks system controls to prevent obscuring of popops for IE v5.5 or higher.
   Initial: October 19, 2003 - Last Revised: January 26, 2008
 See the Change History and Command Reference for overlibmws via:

	http://www.macridesweb.com/oltest/

 Published under an open source license: http://www.macridesweb.com/oltest/license.html
*/

OLloaded=0;

var OLifsP1=null,OLifsSh=null,OLifsP2=null;

// IFRAME SHIM SUPPORT FUNCTIONS
function OLinitIfs(){
if(!OLie55)return;
if((OLovertwoPI)&&over2&&over==over2){
var o=o3_frame.document.all['overIframeOvertwo'];
if(!o||OLifsP2!=o){OLifsP2=null;OLgetIfsP2Ref();}return;}
o=o3_frame.document.all['overIframe'];
if(!o||OLifsP1!=o){OLifsP1=null;OLgetIfsRef();}
if((OLshadowPI)&&o3_shadow){o=o3_frame.document.all['overIframeShadow'];
if(!o||OLifsSh!=o){OLifsSh=null;OLgetIfsShRef();}}
}

function OLsetIfsRef(o,i,z){
o.id=i;o.src='javascript:false;';o.scrolling='no';var os=o.style;os.position='absolute';
os.top='0px';os.left='0px';os.width='1px';os.height='1px';os.visibility='hidden';
os.zIndex=over.style.zIndex-z;os.filter='Alpha(style=0,opacity=0)';
}

function OLgetIfsRef(){
if(OLifsP1||!OLie55)return;
OLifsP1=o3_frame.document.createElement('iframe');
OLsetIfsRef(OLifsP1,'overIframe',2);
o3_frame.document.body.appendChild(OLifsP1);
}

function OLgetIfsShRef(){
if(OLifsSh||!OLie55)return;
OLifsSh=o3_frame.document.createElement('iframe');
OLsetIfsRef(OLifsSh,'overIframeShadow',3);
o3_frame.document.body.appendChild(OLifsSh);
}

function OLgetIfsP2Ref(){
if(OLifsP2||!OLie55)return;
OLifsP2=o3_frame.document.createElement('iframe');
OLsetIfsRef(OLifsP2,'overIframeOvertwo',1);
o3_frame.document.body.appendChild(OLifsP2);
}

function OLsetDispIfs(o,w,h){
var os=o.style;
os.width=w+'px';os.height=h+'px';os.clip='rect(0px '+w+'px '+h+'px 0px)';
o.filters.alpha.enabled=true;
}

function OLdispIfs(){
if(!OLie55)return;
var wd=over.offsetWidth,ht=over.offsetHeight;
if(OLfilterPI&&o3_filter&&o3_filtershadow){wd+=5;ht+=5;}
if((OLovertwoPI)&&over2&&over==over2){
if(!OLifsP2)return;
OLsetDispIfs(OLifsP2,wd,ht);return;}
if(!OLifsP1)return;
OLsetDispIfs(OLifsP1,wd,ht);
if((!OLshadowPI)||!o3_shadow||!OLifsSh)return;
OLsetDispIfs(OLifsSh,wd,ht);
}

function OLshowIfs(){
if(OLifsP1){OLifsP1.style.visibility="visible";
if((OLshadowPI)&&o3_shadow&&OLifsSh)OLifsSh.style.visibility="visible";}
}

function OLhideIfs(o){
if(!OLie55||o!=over)return;
if(OLifsP1)OLifsP1.style.visibility="hidden";
if((OLshadowPI)&&o3_shadow&&OLifsSh)OLifsSh.style.visibility="hidden";
}

function OLrepositionIfs(X,Y){
if(OLie55){if((OLovertwoPI)&&over2&&over==over2){
if(OLifsP2)OLrepositionTo(OLifsP2,X,Y);}
else{if(OLifsP1){OLrepositionTo(OLifsP1,X,Y);if((OLshadowPI)&&o3_shadow&&OLifsSh)
OLrepositionTo(OLifsSh,X+o3_shadowx,Y+o3_shadowy);}}}
}

OLiframePI=1;
OLloaded=1;
/*
 overlibmws_hide.js plug-in module - Copyright Foteos Macrides 2003-2008. All rights reserved.
   For hiding elements.
   Initial: November 13, 2003 - Last Revised: February 10, 2008
 See the Change History and Command Reference for overlibmws via:

	http://www.macridesweb.com/oltest/

 Published under an open source license: http://www.macridesweb.com/oltest/license.html
*/

OLloaded=0;
var OLhideCmds='hideselectboxes,hidebyid,hidebyidall,hidebyidns4';
OLregCmds(OLhideCmds);

// DEFAULT CONFIGURATION
if(OLud('hideselectboxes'))var ol_hideselectboxes=0;
if(OLud('hidebyid'))var ol_hidebyid='';
if(OLud('hidebyidall'))var ol_hidebyidall='';
if(OLud('hidebyidns4'))var ol_hidebyidns4='';
// END CONFIGURATION

var o3_hideselectboxes=0,o3_hidebyid='',o3_hidebyidall='',o3_hidebyidns4='',
OLselectOK=(OLie7||OLop7||OLgek>=20030624||OLsaf)?1:0;

function OLloadHide(){
OLload(OLhideCmds);
}

function OLparseHide(pf,i,ar){
var k=i,q=OLparQuo;
if(k<ar.length){
if(Math.abs(ar[k])==HIDESELECTBOXES){OLtoggle(ar[k],pf+'hideselectboxes');return k;}
if(ar[k]==HIDEBYID){q(ar[++k],pf+'hidebyid');return k;}
if(ar[k]==HIDEBYIDALL){q(ar[++k],pf+'hidebyidall');return k;}
if(ar[k]==HIDEBYIDNS4){q(ar[++k],pf+'hidebyidns4');return k;}}
return -1;
}

function OLchkHide(hide){
if(OLiframePI&&OLie55)return;if(OLmodalPI&&o3_modal)o3_hideselectboxes=0;var id,o,i;
if(o3_hidebyid&&typeof o3_hidebyid=='string'&&!(o3_hideselectboxes&&OLns6)&&!OLop7&&!OLns4){
id=o3_hidebyid.replace(/[ ]/ig,'').split(',');for(i=0;i<id.length;i++){
o=(OLie4?o3_frame.document.all[id[i]]:OLns6?o3_frame.document.getElementById(id[i]):null);
if(o)o.style.visibility=(hide?'hidden':'visible');}}
if(o3_hidebyidall&&typeof o3_hidebyidall=='string'){
id=o3_hidebyidall.replace(/[ ]/ig,'').split(',');for(i=0;i<id.length;i++){
o=OLgetRefById(id[i]);if(o){o=(OLns4)?o:o.style;
o.visibility=(hide?'hidden':'visible');}}}
if(o3_hidebyidns4&&OLns4&&typeof o3_hidebyidns4=='string'){
id=o3_hidebyidns4.replace(/[ ]/ig,'').split(',');for(i=0;i<id.length;i++){
o=eval('o3_frame.document.'+id[i]);if(o)o.visibility=(hide?'hidden':'visible');}}
}

function OLselectBoxes(hide,all){
if((OLiframePI&&OLie55)||OLselectOK||OLns4)return;var sel=OLie4?
o3_frame.document.all.tags('select'):o3_frame.document.getElementsByTagName('select'),
px=over.offsetLeft,py=over.offsetTop,pw=over.offsetWidth,ph=over.offsetHeight,bx=px,by=py,
bw=pw,bh=ph,sx,sy,sw,sh,i,sp,si;if((OLshadowPI)&&bkdrop&&o3_shadow){bx=bkdrop.offsetLeft;
by=bkdrop.offsetTop;bw=bkdrop.offsetWidth;bh=bkdrop.offsetHeight;}for(i=0;i<sel.length;i++){
sx=0;sy=0;si=0;if(sel[i].offsetParent){sp=sel[i];while(sp.offsetParent&&
sp.offsetParent.tagName.toLowerCase()!='body'){if(sp.offsetParent.id=='overDiv'||
sp.offsetParent.id=='overDiv2')si=1;sp=sp.offsetParent;sx+=sp.offsetLeft;sy+=sp.offsetTop;}
sx+=sel[i].offsetLeft;sy+=sel[i].offsetTop;sw=sel[i].offsetWidth;sh=sel[i].offsetHeight;
if(si||(!OLie4&&sel[i].size<2))continue;else if(hide){if((px+pw>sx&&px<sx+sw&&py+ph>sy&&
py<sy+sh)||(bx+bw>sx&&bx<sx+sw&&by+bh>sy&&by<sy+sh)){if(sel[i].style.visibility!="hidden")
sel[i].style.visibility="hidden";}}else{if(all||(!(OLovertwoPI&&over==over2)&&(px+pw<sx||
px>sx+sw||py+ph<sy||py>sy+sh)&&(bx+bw<sx||bx>sx+sw||by+bh<sy||by>sy+sh))){
if(sel[i].style.visibility!="visible")sel[i].style.visibility="visible";}}}}
}

function OLhideUtil(a1,a2,a3,a4,a5,a6){
if(a4==null){OLchkHide(a1);if(o3_hideselectboxes)OLselectBoxes(a2,a3);}else{OLchkHide(a1);
OLchkHide(a2);if(o3_hideselectboxes){OLselectBoxes(a3,a4);OLselectBoxes(a5,a6);}}
}

OLregRunTimeFunc(OLloadHide);
OLregCmdLineFunc(OLparseHide);

OLhidePI=1;
OLloaded=1;
/*
 overlibmws_shadow.js plug-in module - Copyright Foteos Macrides 2003-2007. All rights reserved.
   For support of the SHADOW feature.
   Initial: July 14, 2003 - Last Revised: June 21, 2008
 See the Change History and Command Reference for overlibmws via:

	http://www.macridesweb.com/oltest/

 Published under an open source license: http://www.macridesweb.com/oltest/license.html
*/

OLloaded=0;
var OLshadowCmds='shadow,shadowx,shadowy,shadowcolor,shadowimage,shadowopacity';
OLregCmds(OLshadowCmds);

// DEFAULT CONFIGURATION
if(OLud('shadow'))var ol_shadow=0;
if(OLud('shadowx'))var ol_shadowx=5;
if(OLud('shadowy'))var ol_shadowy=5;
if(OLud('shadowcolor'))var ol_shadowcolor="#666666";
if(OLud('shadowimage'))var ol_shadowimage="";
if(OLud('shadowopacity'))var ol_shadowopacity=60;
// END CONFIGURATION

var o3_shadow=0,o3_shadowx=5,o3_shadowy=5,o3_shadowcolor="#666666",o3_shadowimage="";
var o3_shadowopacity=60,bkdrop=null;

function OLloadShadow(){
OLload(OLshadowCmds);
}

function OLparseShadow(pf,i,ar){
var k=i,p=OLpar,q=OLparQuo;
if(k<ar.length){
if(Math.abs(ar[k])==SHADOW){OLtoggle(ar[k],pf+'shadow');return k;}
if(ar[k]==SHADOWX){p(ar[++k],pf+'shadowx');return k;}
if(ar[k]==SHADOWY){p(ar[++k],pf+'shadowy');return k;}
if(ar[k]==SHADOWCOLOR){q(ar[++k],pf+'shadowcolor');return k;}
if(ar[k]==SHADOWIMAGE){q(ar[++k],pf+'shadowimage');return k;}
if(ar[k]==SHADOWOPACITY){p(ar[++k],pf+'shadowopacity');return k;}}
return -1;
}

function OLdispShadow(){
if(o3_shadow){OLgetShadowLyrRef();if(bkdrop)OLgenerateShadowLyr();}
}

function OLinitShadow(){
if(OLie55&&OLfilterPI&&o3_filter){if(o3_shadow){o3_shadow=0;
if(!o3_filtershadow){o3_filtershadow=2;o3_filtershadowcolor=o3_shadowcolor;}}return;}
var o;if(!(o=OLmkLyr((OLovertwoPI&&over2&&over==over2?'backdrop2':'backdrop'),
o3_frame,999))||bkdrop!=o){bkdrop=null;OLgetShadowLyrRef();}
}

function OLgetShadowLyrRef(){
if(bkdrop||!o3_shadow)return;
bkdrop=OLgetRefById((OLovertwoPI&&over2&&over==over2?'backdrop2':'backdrop'));
if(!bkdrop){o3_shadow=0;bkdrop=null;}
}

function OLgenerateShadowLyr(){
var wd=(OLns4?over.clip.width:over.offsetWidth),hgt=(OLns4?over.clip.height:over.offsetHeight);
if(OLns4){bkdrop.clip.width=wd;bkdrop.clip.height=hgt;
if(o3_shadowimage)bkdrop.background.src=o3_shadowimage;
else{bkdrop.bgColor=o3_shadowcolor;bkdrop.zIndex=over.zIndex -1;}
}else{var o=bkdrop.style;o.width=wd+'px';o.height=hgt+'px';
if(o3_shadowimage)o.backgroundImage="url("+o3_shadowimage+")";
else o.backgroundColor=o3_shadowcolor;
o.clip='rect(0px '+wd+'px '+hgt+'px 0px)';o.zIndex=over.style.zIndex -1;
if(o3_shadowopacity){var op=o3_shadowopacity;op=(op<=100&&op>0?op:100);
if(OLie4&&!OLieM&&!OLop95&&typeof o.filter=='string'){
o.filter='Alpha(opacity='+op+')';if(OLie55&&typeof bkdrop.filters=='object')
bkdrop.filters.alpha.enabled=1;}else{op=op/100;OLopBk(op);}}}
}

function OLopBk(op){
var o=bkdrop.style;
if(typeof o.opacity!='undefined')o.opacity=op;
else if(typeof o.MozOpacity!='undefined')o.MozOpacity=op;
else if(typeof o.KhtmlOpacity!='undefined')o.KhtmlOpacity=op;
}

function OLcleanUpShadow(){
if(!bkdrop)return;
if(OLns4){bkdrop.bgColor=null;bkdrop.background.src=null;}else{
var o=bkdrop.style;o.backgroundColor='transparent';o.backgroundImage='none';
if(OLie4&&!OLieM&&typeof o.filter=='string'){
o.filter='Alpha(opacity=100)';if(OLie55&&typeof bkdrop.filters=='object')
bkdrop.filters.alpha.enabled=0;}else OLopBk(1.0);
if(OLns6){o.width=1+'px';o.height=1+'px';
OLrepositionTo(bkdrop,o3_frame.pageXOffset,o3_frame.pageYOffset);}}
}

function OLshowShadow(){if(bkdrop&&o3_shadow){var o=(OLns4?bkdrop:bkdrop.style);
if(!OLns4&&!OLieM&&(OLfilterPI&&o3_filter&&o3_fadein))OLopOvSh(1);o.visibility="visible";}
}

function OLhideShadow(){
if(bkdrop&&o3_shadow){var o=OLgetRefById((OLovertwoPI&&over2&&over==over2?
'backdrop2':'backdrop'));if(o&&o==bkdrop){var os=(OLns4?bkdrop:bkdrop.style);
if(OLns4||OLieM||!OLfilterPI||((OLfilterPI)&&(!o3_filter||!o3_fadeout||!OLhasOp()))){
os.visibility="hidden";OLcleanUpShadow();}}}
}

function OLrepositionShadow(X,Y){
if(bkdrop&&o3_shadow)OLrepositionTo(bkdrop,X+o3_shadowx,Y+o3_shadowy);
}

OLregRunTimeFunc(OLloadShadow);
OLregCmdLineFunc(OLparseShadow);

OLshadowPI=1;
OLloaded=1;
String.prototype.trim=function()
{ return this.leftTrim().rightTrim();
};
String.prototype.leftTrim=function()
{ return this.replace(/^\s*(.*)/,"$1");
};
String.prototype.rightTrim=function()
{ return this.replace(/^(.*\S)(\s*)$/,"$1");
};

//------------------------------------------------------------------
//    Fast string concatenation in JS
//------------------------------------------------------------------
function StringBuffer() {
  this.buffer = [];
}

StringBuffer.prototype.append = function append(string) {
  this.buffer.push(string);
  return this;
};

StringBuffer.prototype.toString = function toString() {
  return this.buffer.join("");
};
/*
    //Usage: <script language="JavaScript" src="/Member/js/keyEvents.jsp" type="text/javascript"></script>
    //in script you shold use if (isPressedEnter(event))...
*/
var version = 0;
if (navigator.appVersion.indexOf("MSIE") != -1) {
  temp = navigator.appVersion.split("MSIE")
  version = parseFloat(temp[1])
}

var is_IE = false;
if (version >= 5.5) //NON IE browser will return 0
  is_IE = true;

function isPressedEnter(evt)
{ try{
      if (is_IE)
      {
        evt = window.event;
        //explorer
        try {
          if (evt != 'undefined' &&
              evt.keyCode != 'undefined' &&
              evt.keyCode == 13) {
            return true;
          }
        }
        catch(e) {
          alert(e);
        }
      }
      else
      {
        event = evt;
        //mozilla
        if (event != null &&
            event != 'undefined' &&
            event.keyCode != 'undefined' &&
            event.keyCode == 13) {
          return true;
        }
      }
  }
  catch(e){
      alert(e);
  }
  return false;
}

function isPressedTab(evt)
{ try{
      if (is_IE)
      {
        evt = window.event;
        //explorer
        try {
          if (evt != 'undefined' &&
              evt.keyCode != 'undefined' &&
              evt.keyCode == 9) {
            return true;
          }
        }
        catch(e) {
          alert(e);
        }
      }
      else
      {
        event = evt;
        //mozilla
        if (event != null &&
            event != 'undefined' &&
            event.keyCode != 'undefined' &&
            event.keyCode == 9) {
          return true;
        }
      }
  }
  catch(e) {
      alert(e);
  }
  return false;
}
/*
*  name - id HTML object
*  hide - (true|false)
*/
function MM_HideLayer(name,hide){
  var obj = document.getElementById(name);
  if(obj!=null){
    var v = (hide)?'hidden':'visible';
    obj.style.visibility = v;
  }
}
function MM_preloadImages()
{ //v3.0
  var d=document;
  if(d.images)
  { if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments;
    for(i=0; i<a.length; i++)
    { if (a[i].indexOf("#")!=0)
      { try{d.MM_p[j]=new Image(); d.MM_p[j++].src=a[i];}catch(ex){}
      }
    }
  }
}
function MM_swapImgRestore()
{ //v3.0
  var i,x,a=document.MM_sr;
  for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_findObj(n, d)
{ //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
  d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}
function MM_swapImage()
{ //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array;
  for(i=0;i<(a.length-2);i+=3)
  { if ((x=MM_findObj(a[i]))!=null)
    {  document.MM_sr[j++]=x;
       if(!x.oSrc) x.oSrc=x.src;
       x.src=a[i+2];
    }
  }
}
function disableOther(frn_name)
{ //v 2.7
  if (true) return;
  var i=0;var frm=findForm(frm_name);
  while (i<frm.length)
  { if((frm[i]!=null)&&(frm[i].name!=null))
     { var r="";var value="";
       if ((frm[i].name.indexOf("other")>=0)&&(frm[i].value.length==0))
       {  var k=frm[i].name.indexOf("other")+5;r+="R";
          while((frm[i].name.charAt(k)!='_')&&(k<frm[i].name.length)) {r+=frm[i].name.charAt(k);k++;}
          while(k<frm[i].name.length) {value+=frm[i].name.charAt(k);k++;}
       }
       if(r.length>0)
       {  var j=0;var found=false; var val="";
          while(j<frm.length)
          {  if((frm[j]!=null)&&(frm[j].name!=null))
             {  val=""+frm[j].value;
                if ((frm[j].name.indexOf(r)>=0)&&(val.indexOf(value)>=0)) {found=true;break;}
             } j++;
          }  if (found) {frm[i].disabled=true;alert(frm[i].name+" - disabled!");}
       }
     } i++;
  }
}
/*
	Default driver template for JS/CC generated parsers for JScript

	WARNING: Do not use for parsers that should run as browser-based JavaScript!
			 Use driver_web.js_ instead!

	Features:
	- Parser trace messages
	- Step-by-step parsing
	- Integrated panic-mode error recovery
	- Pseudo-graphical parse tree generation

	Written 2007 by Jan Max Meyer, J.M.K S.F. Software Technologies

	This is in the public domain.
*/

//@if( @_jscript_version >= 7 )
//import System;
//@end


/*
The "ROW_LOGIC" is a wildcard, where an optional, unique name will be inserted by
JS/CC when the parser is constructed. This enables the possibility to use multiple
different parsers in one project or script.


call parseExpressionLogic_ROW_LOGIC(expression, surveyQuestions, surveyResults, isOnlyValidate)
expression is "Q1.A2",
surveyQuestions is a map of question ids and answer ids for current survey,
surveyResults is a map of answer ids with results,
isOnlyValidate - true if need to validate expression for survey structure (without results)


If need to change validation behaviour, you can ovveride functions of parser_ROW_LOGIC:
 isVoted_ROW_LOGIC(expression) // if isOnlyValidate = false
 validateBySurveyStructure_ROW_LOGIC(expression) // if isOnlyValidate = true

 this function are calling for checking(validating) each token of logical expression, i.e. if you have Q1.A1 AND Q2.A3, then one of the functions above will be
  called two times, first call for chacking Q1.A1, second - for Q2.A3.

*/



var result_ROW_LOGIC = true;
var isOnlyValidate_ROW_LOGIC = true;
var errors_ROW_LOGIC = "";
var rowLogicRegExp = new RegExp("Q(\\d+)(?:.A(\\?|\\d+|\\*))?(?:.C(\\d+))?((<>|==)[^\\s]+)?");

var parser_ROW_LOGIC = {
  isVoted_ROW_LOGIC: function (expression) {
    var token = rowLogicRegExp.exec(expression);
    var questionId = token[1];
    var answerId = token[2];
    var columnNum = token[3];
    var matchResult = token[4];

    if (questionId == "" || isNaN(questionId)) questionId = null;
    if (answerId == "" || isNaN(answerId)) answerId = null;
    if (columnNum == "" || isNaN(columnNum)) columnNum = null;
    if (columnNum != null && answerId != null && columnNum.length > 0) columnNum = parseInt(columnNum) - 1; //Q12345.A112345.C1, but Q12345.C12345
    return validateRequiredElement(questionId, answerId, columnNum, matchResult);
  },

  validateBySurveyStructure_ROW_LOGIC: function (expression) {
    var token = rowLogicRegExp.exec(expression);
    var questionId = token[1];
    var answerId = token[2];
    var columnNum = token[3];
    var matchResult = token[4];

    if (questionId == "" || isNaN(questionId)) questionId = null;
    if (answerId == "" || isNaN(answerId)) answerId = null;
    if (columnNum == "" || isNaN(columnNum)) columnNum = null;
    return validateRequiredElementBySurveyStructure(questionId, answerId, columnNum, matchResult);
  }
}

function getErrors_ROW_LOGIC() {
  return errors_ROW_LOGIC;
}

function checkExpression_ROW_LOGIC(expression) {
  if (isOnlyValidate_ROW_LOGIC) return parser_ROW_LOGIC.validateBySurveyStructure_ROW_LOGIC(expression);
  else return parser_ROW_LOGIC.isVoted_ROW_LOGIC(expression);
}

function saveResult_ROW_LOGIC(expression){
  result_ROW_LOGIC = expression;
}

function parseExpressionLogic_ROW_LOGIC(expression, isOnlyValidate) {

  isOnlyValidate_ROW_LOGIC = isOnlyValidate;
  result_ROW_LOGIC = true;

  var error_offsets = new Array();
  var error_lookaheads = new Array();
  var error_count = 0;
  if( ( error_count = __ROW_LOGICparse( expression, error_offsets, error_lookaheads ) ) > 0 ) {
      result_ROW_LOGIC = false;
      for( i = 0; i < error_count; i++ ) {
        errors_ROW_LOGIC += 'Parse error near \"' + expression.substr( error_offsets[i] ) + '\", expecting \"' + error_lookaheads[i].join() + '\"' + "\n";
      }
  }

  return result_ROW_LOGIC;

}


var ROW_LOGIC_dbg_withparsetree	= false;
var ROW_LOGIC_dbg_withtrace		= false;
var ROW_LOGIC_dbg_withstepbystep	= false;

function __ROW_LOGICdbg_print( text )
{
  alert(text);
//@if( @_jscript_version < 7 )
//	WScript.Echo( text );
//@else
//	print( text );
//@end
}

function __ROW_LOGICdbg_wait()
{
//@if( @_jscript_version < 7 )
//	WScript.StdIn.ReadLine()
//@else
//	Console.ReadLine();
//@end
}

function __ROW_LOGIClex( info )
{
	var state		= 0;
	var match		= -1;
	var match_pos	= 0;
	var start		= 0;
	var pos			= info.offset + 1;

	do
	{
		pos--;
		state = 0;
		match = -2;
		start = pos;

		if( info.src.length <= start )
			return 12;

		do
		{

switch( state )
{
	case 0:
		if( ( info.src.charCodeAt( pos ) >= 9 && info.src.charCodeAt( pos ) <= 10 ) || info.src.charCodeAt( pos ) == 13 || info.src.charCodeAt( pos ) == 32 ) state = 1;
		else if( info.src.charCodeAt( pos ) == 33 ) state = 2;
		else if( info.src.charCodeAt( pos ) == 40 ) state = 3;
		else if( info.src.charCodeAt( pos ) == 41 ) state = 4;
		else if( info.src.charCodeAt( pos ) == 38 ) state = 9;
		else if( info.src.charCodeAt( pos ) == 65 || info.src.charCodeAt( pos ) == 97 ) state = 11;
		else if( info.src.charCodeAt( pos ) == 78 || info.src.charCodeAt( pos ) == 110 ) state = 12;
		else if( info.src.charCodeAt( pos ) == 79 || info.src.charCodeAt( pos ) == 111 ) state = 13;
		else if( info.src.charCodeAt( pos ) == 81 || info.src.charCodeAt( pos ) == 113 ) state = 14;
		else if( info.src.charCodeAt( pos ) == 124 ) state = 15;
		else state = -1;
		break;

	case 1:
		state = -1;
		match = 1;
		match_pos = pos;
		break;

	case 2:
		state = -1;
		match = 8;
		match_pos = pos;
		break;

	case 3:
		state = -1;
		match = 2;
		match_pos = pos;
		break;

	case 4:
		state = -1;
		match = 3;
		match_pos = pos;
		break;

	case 5:
		state = -1;
		match = 7;
		match_pos = pos;
		break;

	case 6:
		state = -1;
		match = 6;
		match_pos = pos;
		break;

	case 7:
		if( ( info.src.charCodeAt( pos ) >= 48 && info.src.charCodeAt( pos ) <= 57 ) ) state = 7;
		else if( info.src.charCodeAt( pos ) == 46 ) state = 18;
		else if( info.src.charCodeAt( pos ) == 60 ) state = 19;
		else if( info.src.charCodeAt( pos ) == 61 ) state = 20;
		else state = -1;
		match = 5;
		match_pos = pos;
		break;

	case 8:
		if( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 31 ) || ( info.src.charCodeAt( pos ) >= 33 && info.src.charCodeAt( pos ) <= 254 ) ) state = 8;
		else state = -1;
		match = 4;
		match_pos = pos;
		break;

	case 9:
		if( info.src.charCodeAt( pos ) == 38 ) state = 5;
		else state = -1;
		break;

	case 10:
		if( ( info.src.charCodeAt( pos ) >= 48 && info.src.charCodeAt( pos ) <= 57 ) ) state = 10;
		else if( info.src.charCodeAt( pos ) == 60 ) state = 19;
		else if( info.src.charCodeAt( pos ) == 61 ) state = 20;
		else state = -1;
		match = 5;
		match_pos = pos;
		break;

	case 11:
		if( info.src.charCodeAt( pos ) == 78 || info.src.charCodeAt( pos ) == 110 ) state = 16;
		else state = -1;
		break;

	case 12:
		if( info.src.charCodeAt( pos ) == 79 || info.src.charCodeAt( pos ) == 111 ) state = 17;
		else state = -1;
		break;

	case 13:
		if( info.src.charCodeAt( pos ) == 82 || info.src.charCodeAt( pos ) == 114 ) state = 6;
		else state = -1;
		break;

	case 14:
		if( ( info.src.charCodeAt( pos ) >= 48 && info.src.charCodeAt( pos ) <= 57 ) ) state = 7;
		else state = -1;
		break;

	case 15:
		if( info.src.charCodeAt( pos ) == 124 ) state = 6;
		else state = -1;
		break;

	case 16:
		if( info.src.charCodeAt( pos ) == 68 || info.src.charCodeAt( pos ) == 100 ) state = 5;
		else state = -1;
		break;

	case 17:
		if( info.src.charCodeAt( pos ) == 84 || info.src.charCodeAt( pos ) == 116 ) state = 2;
		else state = -1;
		break;

	case 18:
		if( info.src.charCodeAt( pos ) == 67 || info.src.charCodeAt( pos ) == 99 ) state = 21;
		else if( info.src.charCodeAt( pos ) == 65 || info.src.charCodeAt( pos ) == 97 ) state = 25;
		else state = -1;
		break;

	case 19:
		if( info.src.charCodeAt( pos ) == 62 ) state = 22;
		else state = -1;
		break;

	case 20:
		if( info.src.charCodeAt( pos ) == 61 ) state = 22;
		else state = -1;
		break;

	case 21:
		if( ( info.src.charCodeAt( pos ) >= 48 && info.src.charCodeAt( pos ) <= 57 ) ) state = 10;
		else state = -1;
		break;

	case 22:
		if( ( info.src.charCodeAt( pos ) >= 0 && info.src.charCodeAt( pos ) <= 31 ) || ( info.src.charCodeAt( pos ) >= 33 && info.src.charCodeAt( pos ) <= 254 ) ) state = 8;
		else state = -1;
		break;

	case 23:
		if( info.src.charCodeAt( pos ) == 67 || info.src.charCodeAt( pos ) == 99 ) state = 21;
		else state = -1;
		break;

	case 24:
		if( info.src.charCodeAt( pos ) == 60 ) state = 19;
		else if( info.src.charCodeAt( pos ) == 61 ) state = 20;
		else if( info.src.charCodeAt( pos ) == 46 ) state = 23;
		else if( ( info.src.charCodeAt( pos ) >= 48 && info.src.charCodeAt( pos ) <= 57 ) ) state = 24;
		else state = -1;
		match = 5;
		match_pos = pos;
		break;

	case 25:
		if( ( info.src.charCodeAt( pos ) >= 48 && info.src.charCodeAt( pos ) <= 57 ) ) state = 24;
		else state = -1;
		break;

}


			pos++;

		}
		while( state > -1 );

	}
	while( 1 > -1 && match == 1 );

	if( match > -1 )
	{
		info.att = info.src.substr( start, match_pos - start );
		info.offset = match_pos;


	}
	else
	{
		info.att = new String();
		match = -1;
	}

	return match;
}


function __ROW_LOGICparse( src, err_off, err_la )
{
	var		sstack			= new Array();
	var		vstack			= new Array();
	var 	err_cnt			= 0;
	var		act;
	var		go;
	var		la;
	var		rval;
	var 	parseinfo		= new Function( "", "var offset; var src; var att;" );
	var		info			= new parseinfo();

	//Visual parse tree generation
	var 	treenode		= new Function( "", "var sym; var att; var child;" );
	var		treenodes		= new Array();
	var		tree			= new Array();
	var		tmptree			= null;

/* Pop-Table */
var pop_tab = new Array(
	new Array( 0/* p' */, 1 ),
	new Array( 10/* p */, 1 ),
	new Array( 9/* expr */, 3 ),
	new Array( 9/* expr */, 3 ),
	new Array( 9/* expr */, 2 ),
	new Array( 9/* expr */, 3 ),
	new Array( 9/* expr */, 1 ),
	new Array( 11/* expr_complex */, 1 ),
	new Array( 11/* expr_complex */, 1 )
);

/* Action-Table */
var act_tab = new Array(
	/* State 0 */ new Array( 8/* "NOT" */,3 , 2/* "(" */,4 , 4/* "EXPRESSION_TEXT" */,6 , 5/* "EXPRESSION" */,7 ),
	/* State 1 */ new Array( 12/* "$" */,0 ),
	/* State 2 */ new Array( 7/* "AND" */,8 , 6/* "OR" */,9 , 12/* "$" */,-1 ),
	/* State 3 */ new Array( 8/* "NOT" */,3 , 2/* "(" */,4 , 4/* "EXPRESSION_TEXT" */,6 , 5/* "EXPRESSION" */,7 ),
	/* State 4 */ new Array( 8/* "NOT" */,3 , 2/* "(" */,4 , 4/* "EXPRESSION_TEXT" */,6 , 5/* "EXPRESSION" */,7 ),
	/* State 5 */ new Array( 12/* "$" */,-6 , 6/* "OR" */,-6 , 7/* "AND" */,-6 , 3/* ")" */,-6 ),
	/* State 6 */ new Array( 12/* "$" */,-7 , 6/* "OR" */,-7 , 7/* "AND" */,-7 , 3/* ")" */,-7 ),
	/* State 7 */ new Array( 12/* "$" */,-8 , 6/* "OR" */,-8 , 7/* "AND" */,-8 , 3/* ")" */,-8 ),
	/* State 8 */ new Array( 8/* "NOT" */,3 , 2/* "(" */,4 , 4/* "EXPRESSION_TEXT" */,6 , 5/* "EXPRESSION" */,7 ),
	/* State 9 */ new Array( 8/* "NOT" */,3 , 2/* "(" */,4 , 4/* "EXPRESSION_TEXT" */,6 , 5/* "EXPRESSION" */,7 ),
	/* State 10 */ new Array( 7/* "AND" */,-4 , 6/* "OR" */,-4 , 12/* "$" */,-4 , 3/* ")" */,-4 ),
	/* State 11 */ new Array( 7/* "AND" */,8 , 6/* "OR" */,9 , 3/* ")" */,14 ),
	/* State 12 */ new Array( 7/* "AND" */,8 , 6/* "OR" */,-3 , 12/* "$" */,-3 , 3/* ")" */,-3 ),
	/* State 13 */ new Array( 7/* "AND" */,8 , 6/* "OR" */,-2 , 12/* "$" */,-2 , 3/* ")" */,-2 ),
	/* State 14 */ new Array( 12/* "$" */,-5 , 6/* "OR" */,-5 , 7/* "AND" */,-5 , 3/* ")" */,-5 )
);

/* Goto-Table */
var goto_tab = new Array(
	/* State 0 */ new Array( 10/* p */,1 , 9/* expr */,2 , 11/* expr_complex */,5 ),
	/* State 1 */ new Array(  ),
	/* State 2 */ new Array(  ),
	/* State 3 */ new Array( 9/* expr */,10 , 11/* expr_complex */,5 ),
	/* State 4 */ new Array( 9/* expr */,11 , 11/* expr_complex */,5 ),
	/* State 5 */ new Array(  ),
	/* State 6 */ new Array(  ),
	/* State 7 */ new Array(  ),
	/* State 8 */ new Array( 9/* expr */,12 , 11/* expr_complex */,5 ),
	/* State 9 */ new Array( 9/* expr */,13 , 11/* expr_complex */,5 ),
	/* State 10 */ new Array(  ),
	/* State 11 */ new Array(  ),
	/* State 12 */ new Array(  ),
	/* State 13 */ new Array(  ),
	/* State 14 */ new Array(  )
);



/* Symbol labels */
var labels = new Array(
	"p'" /* Non-terminal symbol */,
	"^" /* Terminal symbol */,
	"(" /* Terminal symbol */,
	")" /* Terminal symbol */,
	"EXPRESSION_TEXT" /* Terminal symbol */,
	"EXPRESSION" /* Terminal symbol */,
	"OR" /* Terminal symbol */,
	"AND" /* Terminal symbol */,
	"NOT" /* Terminal symbol */,
	"expr" /* Non-terminal symbol */,
	"p" /* Non-terminal symbol */,
	"expr_complex" /* Non-terminal symbol */,
	"$" /* Terminal symbol */
);



	info.offset = 0;
	info.src = src;
	info.att = new String();

	if( !err_off )
		err_off	= new Array();
	if( !err_la )
	err_la = new Array();

	sstack.push( 0 );
	vstack.push( 0 );

	la = __ROW_LOGIClex( info );

	while( true )
	{
		act = 16;
		for( var i = 0; i < act_tab[sstack[sstack.length-1]].length; i+=2 )
		{
			if( act_tab[sstack[sstack.length-1]][i] == la )
			{
				act = act_tab[sstack[sstack.length-1]][i+1];
				break;
			}
		}

		/*
		_print( "state " + sstack[sstack.length-1] + " la = " + la + " info.att = >" +
				info.att + "< act = " + act + " src = >" + info.src.substr( info.offset, 30 ) + "..." + "<" +
					" sstack = " + sstack.join() );
		*/

		if( ROW_LOGIC_dbg_withtrace && sstack.length > 0 )
		{
			__ROW_LOGICdbg_print( "\nState " + sstack[sstack.length-1] + "\n" +
							"\tLookahead: " + labels[la] + " (\"" + info.att + "\")\n" +
							"\tAction: " + act + "\n" +
							"\tSource: \"" + info.src.substr( info.offset, 30 ) + ( ( info.offset + 30 < info.src.length ) ?
									"..." : "" ) + "\"\n" +
							"\tStack: " + sstack.join() + "\n" +
							"\tValue stack: " + vstack.join() + "\n" );

			if( ROW_LOGIC_dbg_withstepbystep )
				__ROW_LOGICdbg_wait();
		}


		//Panic-mode: Try recovery when parse-error occurs!
		if( act == 16 )
		{
			if( ROW_LOGIC_dbg_withtrace )
				__ROW_LOGICdbg_print( "Error detected: There is no reduce or shift on the symbol " + labels[la] );

			err_cnt++;
			err_off.push( info.offset - info.att.length );
			err_la.push( new Array() );
			for( var i = 0; i < act_tab[sstack[sstack.length-1]].length; i+=2 )
				err_la[err_la.length-1].push( labels[act_tab[sstack[sstack.length-1]][i]] );

			//Remember the original stack!
			var rsstack = new Array();
			var rvstack = new Array();
			for( var i = 0; i < sstack.length; i++ )
			{
				rsstack[i] = sstack[i];
				rvstack[i] = vstack[i];
			}

			while( act == 16 && la != 12 )
			{
				if( ROW_LOGIC_dbg_withtrace )
					__ROW_LOGICdbg_print( "\tError recovery\n" +
									"Current lookahead: " + labels[la] + " (" + info.att + ")\n" +
									"Action: " + act + "\n\n" );
				if( la == -1 )
					info.offset++;

				while( act == 16 && sstack.length > 0 )
				{
					sstack.pop();
					vstack.pop();

					if( sstack.length == 0 )
						break;

					act = 16;
					for( var i = 0; i < act_tab[sstack[sstack.length-1]].length; i+=2 )
					{
						if( act_tab[sstack[sstack.length-1]][i] == la )
						{
							act = act_tab[sstack[sstack.length-1]][i+1];
							break;
						}
					}
				}

				if( act != 16 )
					break;

				for( var i = 0; i < rsstack.length; i++ )
				{
					sstack.push( rsstack[i] );
					vstack.push( rvstack[i] );
				}

				la = __ROW_LOGIClex( info );
			}

			if( act == 16 )
			{
				if( ROW_LOGIC_dbg_withtrace )
					__ROW_LOGICdbg_print( "\tError recovery failed, terminating parse process..." );
				break;
			}


			if( ROW_LOGIC_dbg_withtrace )
				__ROW_LOGICdbg_print( "\tError recovery succeeded, continuing" );
		}

		/*
		if( act == 16 )
			break;
		*/


		//Shift
		if( act > 0 )
		{
			//Parse tree generation
			if( ROW_LOGIC_dbg_withparsetree )
			{
				var node = new treenode();
				node.sym = labels[ la ];
				node.att = info.att;
				node.child = new Array();
				tree.push( treenodes.length );
				treenodes.push( node );
			}

			if( ROW_LOGIC_dbg_withtrace )
				__ROW_LOGICdbg_print( "Shifting symbol: " + labels[la] + " (" + info.att + ")" );

			sstack.push( act );
			vstack.push( info.att );

			la = __ROW_LOGIClex( info );

			if( ROW_LOGIC_dbg_withtrace )
				__ROW_LOGICdbg_print( "\tNew lookahead symbol: " + labels[la] + " (" + info.att + ")" );
		}
		//Reduce
		else
		{
			act *= -1;

			if( ROW_LOGIC_dbg_withtrace )
				__ROW_LOGICdbg_print( "Reducing by producution: " + act );

			rval = void(0);

			if( ROW_LOGIC_dbg_withtrace )
				__ROW_LOGICdbg_print( "\tPerforming semantic action..." );

switch( act )
{
	case 0:
	{
		rval = vstack[ vstack.length - 1 ];
	}
	break;
	case 1:
	{
		 saveResult_ROW_LOGIC(vstack[ vstack.length - 1 ]);
	}
	break;
	case 2:
	{
		 rval = vstack[ vstack.length - 3 ] || vstack[ vstack.length - 1 ];
	}
	break;
	case 3:
	{
		 rval = vstack[ vstack.length - 3 ] && vstack[ vstack.length - 1 ];
	}
	break;
	case 4:
	{
		 rval = (isOnlyValidate_ROW_LOGIC? vstack[ vstack.length - 1 ]: !vstack[ vstack.length - 1 ]);
	}
	break;
	case 5:
	{
		 rval = vstack[ vstack.length - 2 ];
	}
	break;
	case 6:
	{
		 rval = checkExpression_ROW_LOGIC(vstack[ vstack.length - 1 ]);
	}
	break;
	case 7:
	{
		rval = vstack[ vstack.length - 1 ];
	}
	break;
	case 8:
	{
		rval = vstack[ vstack.length - 1 ];
	}
	break;
}



			if( ROW_LOGIC_dbg_withparsetree )
				tmptree = new Array();

			if( ROW_LOGIC_dbg_withtrace )
				__ROW_LOGICdbg_print( "\tPopping " + pop_tab[act][1] + " off the stack..." );

			for( var i = 0; i < pop_tab[act][1]; i++ )
			{
				if( ROW_LOGIC_dbg_withparsetree )
					tmptree.push( tree.pop() );

				sstack.pop();
				vstack.pop();
			}

			go = -1;
			for( var i = 0; i < goto_tab[sstack[sstack.length-1]].length; i+=2 )
			{
				if( goto_tab[sstack[sstack.length-1]][i] == pop_tab[act][0] )
				{
					go = goto_tab[sstack[sstack.length-1]][i+1];
					break;
				}
			}

			if( ROW_LOGIC_dbg_withparsetree )
			{
				var node = new treenode();
				node.sym = labels[ pop_tab[act][0] ];
				node.att = new String();
				node.child = tmptree.reverse();
				tree.push( treenodes.length );
				treenodes.push( node );
			}

			if( act == 0 )
				break;

			if( ROW_LOGIC_dbg_withtrace )
				__ROW_LOGICdbg_print( "\tPushing non-terminal " + labels[ pop_tab[act][0] ] );

			sstack.push( go );
			vstack.push( rval );
		}
	}

	if( ROW_LOGIC_dbg_withtrace )
		__ROW_LOGICdbg_print( "\nParse complete." );

	if( ROW_LOGIC_dbg_withparsetree )
	{
		if( err_cnt == 0 )
		{
			__ROW_LOGICdbg_print( "\n\n--- Parse tree ---" );
			__ROW_LOGICdbg_parsetree( 0, treenodes, tree );
		}
		else
		{
			__ROW_LOGICdbg_print( "\n\nParse tree cannot be viewed. There where parse errors." );
		}
	}

	return err_cnt;
}


function __ROW_LOGICdbg_parsetree( indent, nodes, tree )
{
	var str = new String();
	for( var i = 0; i < tree.length; i++ )
	{
		str = "";
		for( var j = indent; j > 0; j-- )
			str += "\t";

		str += nodes[ tree[i] ].sym;
		if( nodes[ tree[i] ].att != "" )
			str += " >" + nodes[ tree[i] ].att + "<" ;

		__ROW_LOGICdbg_print( str );
		if( nodes[ tree[i] ].child.length > 0 )
			__ROW_LOGICdbg_parsetree( indent + 1, nodes, nodes[ tree[i] ].child );
	}
}


