fullMode=false
thetaSnap=0
backList=[]
recentList=[]
numRecent=5
productModel=""
productPath=[]
catalog=(catalog==""?"catalog":catalog)
topMenuColor=(topMenuColor==""?white:topMenuColor)
bottomMenuColor=(bottomMenuColor==""?white:bottomMenuColor)
rightMenuBg=(rightMenuBg==""?"f0f0f0":rightMenuBg)
fullNav=false
firstCategory=""
didSearch=false
sectionButtonCounter=0
sectionLayout=[]
flags=(flags==""?[]:flags)
uiStyle=(uiStyle==""?_PLAIN:_POUGHKEEPSIE)

I18N.extends=""
I18N.Class.showOnMenu=true
Image.Class.language={language}

Style.Default<<
  .fontFamily={l10n("fontNarrow")}
>>

lengthMethod=Meson.getMethod(^class="java.lang.String",^method="length",^args=[])
substring1Method=Meson.getMethod(^class="java.lang.String",^method="substring",^args=["int"])
substring2Method=Meson.getMethod(^class="java.lang.String",^method="substring",^args=["int","int"])
serverPath={
  #l=Meson.callMethod(^method=lengthMethod,^args=[#arg]);
  catalog~"/"~(#l<3?"0":Meson.callMethod(^method=substring2Method,^args=[#arg,0,#l-2]))~"/"~#arg;
}
trimCat={Meson.callMethod(^method=substring1Method,^args=[#arg,3])}

safeJSEval={try(^toEval=#arg,^exec={Meson.jsEval(#toEval)},^catch={})}

encodeMethod=Meson.getMethod(^class="java.net.URLEncoder",^method="encode",^args=["java.lang.String"])
URLEncode={Meson.callMethod(^method=encodeMethod,^args=[#arg])}

indexOfMethod=Meson.getMethod(^class="java.lang.String",^method="indexOf",^args=["java.lang.String"])

replaceMethod=Meson.getMethod(^class="java.lang.String",^method="replace",^args=["char","char"])
tidyTitle={Meson.callMethod(^method=replaceMethod,^args=[#arg,"\n"," "])}

productListTrackingAddress={currentCategory==""?"":("/Catalog"~currentCategoryObject->trackingAddress~"/Page "~Meson.round(1+currentProductPage))}
productTrackingAddress={currentSection==""?"":("/Product/"~URLEncode(Image.ProductTitle.title)~"/"~URLEncode(currentSection))}
trackingAddress={showProductList?productListTrackingAddress:productTrackingAddress}
addressComplete={trackingAddress!=""&(Meson.callMethod(^method=indexOfMethod,^args=[trackingAddress,"//"])+0==-1)} /* Detects transient unknown titles */
ChangeTrigger.TAChange.test={trackingAddress}
ChangeTrigger.TAChange.exec={addressComplete?safeJSEval("analytics('"~trackingAddress~"')");lastAction=""}
lastAction=""
recordAction={#arg!=""&#arg!=lastAction?(
  lastAction=#arg;
  safeJSEval("analytics('"~trackingAddress~"/"~#arg~"')");
)}

Style.NoUnder.textDecoration=_NONE

Image.Bubble<<
  .dataSource=Display.Primary.dataSource
  .file="bubbleColor.gif@bubbleMask.gif"
  .y=369
  .layer=2
>>

Style.Tab<<
  _plain.color="333"
  _hover.color="fff"
  _plain.fontWeight=_BOLD
  _hover.fontWeight=_BOLD
  _plain.fontSize={l10n("style")=="Tiny"?9:11}
  _hover.fontSize={l10n("style")=="Tiny"?9:11}
>>
Tab.extends="Image"
Tab.Class<<
  .active=false
  .layer={$$.active?1:0}
  .anchor=_SE
  .position=0
  .label=""
  .x={Display.Primary.width-5-$$.position*105}
  .y=73
  .states=["off","on"]
  .file="tabColor.gif@tabMask.gif"
  .exec={}
  .enabled={!$$.active&haveProduct}
  .new={
    Image.$_lbl.parent="$$";
    Image.$_lbl.anchor=_C;
    Image.$_lbl.x={$$.width/2};
    Image.$_lbl.y={$$.height/2};
    Image.$_lbl.text={"%Tab_#{"~l10n($$.label)~"}"};
    Image.$_lbl.states=["plain","hover"];
    Image.$_lbl.enabled=false;
    Area.$.image="$$";
    Area.$.state={$$.active?"on":"off"};
    Area.$.cursor=_HAND;
    Area.$_lbl.image="Image.$_lbl";
    Area.$_lbl.state={Area.$.hover&!$$.active?"hover":"plain"};
    Trigger.$_press.test={Area.$.press};
    Trigger.$_press.exec={$$.exec();Display.Primary.repaint()};
  }
>>
Tab.Search<<
  .active={showProductList&showSearchResults}
  .layer={singleModel?-1:Tab.Search.active?1:0}
  .position=3
  .label="SearchResults"
  .exec={Search.LocalSearch.rerun()}
  .enabled={didSearch}
>>
Tab.Catalog<<
  .active={showProductList&!showSearchResults}
  .layer={singleModel?-1:Tab.Catalog.active?1:0}
  .position=2
  .label="Catalog"
  .exec={currentCategory={indexDataLoaded?recentCategory:""};showProductList=true;currentProductPage=0;showSearchResults=false}
  .enabled=true
>>
Tab.Info<<
  .active={!showProductList&!fullMode}
  .position=1
  .label="Info"
  .exec={showProductList=false;fullMode=false}
>>
Tab.Demo<<
  .active={!showProductList&fullMode}
  .position=0
  .label="Demo"
  .exec={showProductList=false;fullMode=true;currentSection=""}
>>
Image.TopStroke<<
  .x=6
  .y=72
  .width={(singleModel?Tab.Info.x:Tab.Catalog.x)-6}
  .height=1
  .buffer=black
>>

/*{
RecentButton.extends="Image"
RecentButton.Class<<
  .trip=["","",""]
  .model={$$.trip[0]}
  .label={$$.trip[1]}
  .path={$$.trip[2]}
  .new={
    Trigger.$.exec={setProduct(^model=$$.model,^path=$$.path,^push=true)};
  }
>>
makeRecentButton={
  #rb="RecentButton."~Meson.unique();
  #rb->trip=#arg;
}
Trigger.CatRead.test={Data.CatIndex.state==_CLOSED}
Trigger.CatRead.exec={
  createCategoryButtons=false;
  recentList!=[]?(
    CategoryButton.CBSep.enabled=false;
    CategoryButton.CBSep.label={"\n\u2014 "~l10n("RecentlyViewed")~" \u2014"};
    CategoryButton.CBSep.fake=true;
    foreach(^elem="i";^in=recentList;^do={makeRecentButton(#i)})
  )
}
}*/

Trigger.SmallNav.test={!singleProduct&!showSearchResults&showProductList&Data.CatIndex.state==_CLOSED&!fullNav}
Trigger.SmallNav.exec={
  firstCategory->select();
}

maxProductsPerPage=10

parentCheck={#test==#arg|(#arg!=""&parentCheck(^test=#test,^arg=@("ListedItem."~#arg~".category")))}

currentSearchSerial=-2
ListedItem.extends=""
ListedItem.Class<<
  .category=""
  .localTitle=""
  .localBlurb=""
  .order=0
  .index={showSearchResults?$$.searchRank:$$.order}
  .page={showSearchResults?Meson.floor($$.index/maxProductsPerPage):0}
  .indexOnPage={showSearchResults?Meson.round(Meson.floor($$.index%maxProductsPerPage)):Meson.round($$.index)};
  .icon=""
  .isCurrent={(showSearchResults&$$.searchSerial==currentSearchSerial)&(currentProductPage==$$.page)};
  .browsing={parentCheck(^test="$",^arg=currentCategory)}
  .dataSource=Meson.currentDataSource
  .isReal=true
  .select=""
  .selectParent={setCategory($$.category)}
  .searchSerial=-1
  .searchRank=0
  .indexPath=""
  .style=""
  .id="$"
>>
Category.extends=["ListedItem"]
Category.Class<<
  .title=""
  .blurb=""
  .localTitle={#t=@("$$.title_"~language);#t==""?$$.title:#t}
  .localBlurb={#b=@("$$.blurb_"~language);#b==""?$$.blurb:#b}
  .dir=""
  .productCount=0
  .select={setCategory("$")}
  .rightEdge=0
  .path={#q=($$.category==""?[]:@("Category."~$$.category~".path"));#d=$$.dir;#d==""?[]:(#n="$";#t=$$.localTitle;#p=[[#n,#d,#t]];#q++#p)}
  .trackingAddress={($$.category==""?"":@("Category."~$$.category~".trackingAddress"))~"/"~URLEncode($$.localTitle)}
  .style={$$.browsing?"CatOpen":"CatClosed"}
  .depth={$$.category==""?1:1+@("Category."~$$.category~".depth")}
  .scroller={"Scroller.Scr"~Meson.round($$.depth)}
  .new={
    firstCategory==""?(firstCategory="$$"):(fullNav=true);
    BrowseLine.$.item="ListedItem.$";
    Trigger.$_browse.test={$$.browsing};
    Trigger.$_browse.exec={$$.scroller->category="$";$$.scroller->offset=0};
  }
>>
showProductList=false
showSearchResults=false
searchNumHits=0
recentCategory=""
currentCategory=""
currentCategoryObject={"Category."~currentCategory}
currentProductPage=-1
numProductsListed={showSearchResults?searchNumHits:currentCategory==""?0:currentCategoryObject->productCount}
setCategory={
  hoverProduct="";
  currentCategory=#arg;
  currentProductPage=0;
  showProductList=true;
  showSearchResults=false;
}
ChangeTrigger.CatChange.test={currentCategory}
ChangeTrigger.CatChange.exec={
  currentCategory!=""?(
    ("Data.Index"~currentCategory~".category")=currentCategory;
    ("Data.Index"~currentCategory~".url")=serverPath(@("Category."~currentCategory~".dir"))~"/index.txt";
  )
}

Image.ProductList<<
  .layer={showProductList?1:-1}
  .anchor=_NW
  .x=7
  .y=73
>>

Image.PageNext<<
  .x={Display.Primary.width-10}
  .y={Display.Primary.height-60}
  .anchor=_SE
  .states=["plain","hover"]
  .text={"%NextPrev_#{"~l10n("Next")~" >>}"}
  .layer={showSearchResults&showProductList&(numProductsListed>(1+currentProductPage)*maxProductsPerPage)?4:-1}
>>
Image.PagePrev<<
  .x={Image.PageNext.absX-10}
  .y={Image.PageNext.y}
  .anchor=_SE
  .states=["plain","hover"]
  .text={"%NextPrev_#{<< "~l10n("Back")~"}"}
  .layer={showSearchResults&showProductList&(currentProductPage>0)?4:-1}
>>
Area.PageNext<<
  .image="Image.PageNext"
  .state={Area.PageNext.hover?"hover":"plain"}
  .boxPick=true
  .cursor=_HAND
>>
Area.PagePrev<<
  .image="Image.PagePrev"
  .state={Area.PagePrev.hover?"hover":"plain"}
  .boxPick=true
  .cursor=_HAND
>>
Trigger.PageNextPage.test={Area.PageNext.press}
Trigger.PageNextPage.exec={currentProductPage=currentProductPage+1}
Trigger.PagePrevPage.test={Area.PagePrev.press}
Trigger.PagePrevPage.exec={currentProductPage=currentProductPage-1}

Style.Fixed.fontFamily=["monospaced"]
Style.BrowseCatOpen<<
  .fontSize=12
  .fontWeight=_BOLD
  .color=black
  .contentPre=" %Fixed{[-]} "
>>
Style.BrowseCatClosed<<
  .fontSize=12
  .fontWeight=_BOLD
  .color=black
  .contentPre=" %Fixed{[+]} "
>>
Style.BrowseProduct<<
  .fontSize=12
  .fontWeight=_NORMAL
  .color=black
>>

Image.Ruled<<
  .layer={fullNav&showProductList&!showSearchResults?0:-1}
  .x=4
  .y=73
  .file="ruledBg.gif"
>>
CatTrack.extends=""
CatTrack.Class<<
  .cnt={Meson.length($$.list)}
  .list=[]
  .put={$$.list=$$.list++#arg}
>>
logCatEntry={
  #t="CatTrack.C"~#cat;
  #p=#t->#item;
  #p~"X"=="X"?(
	#p=#t->#item=#t->cnt;
	#t->put(#item);
  );
  #p
}
getCatWidth={
  #l=@("CatTrack.C"~#arg~".list");
  ^s=0;
  foreach(^elem="i",^in=#l,^do={#w=@("BrowseLine."~#i~.width);#w>#s?(#s=#w)});
  ^s;
}
getCatRight={
  #w=getCatWidth(#arg)+28;
  #arg==""?#w:(#w+getCatRight(@("Category."~#arg~".category")));
}
getCatCount={
  #t="CatTrack.C"~#arg;
  #t->cnt;
}
getScroller={"Scroller.Scr"~(#arg==""?0:Meson.round(@("Category."~#arg~".depth")))}
BrowseLine.extends="Image"
BrowseLine.Class<<
  .item=""
  .catObj={"Category."~$$.item->category}
  .browsing={$$.item->category==""|$$.catObj->browsing}
  .x={$$.item->category==""?10:10+getCatRight($$.catObj->category)}
  .catPos={logCatEntry(^cat=$$.item->category,^item="$");$$.item->order}
  .yPos={$$.catPos-$$.scroller->offset}
  .y={93+$$.yPos*16}
  .anchor=_W
  .text={"%Browse"~$$.item->style~"{"~$$.item->localTitle~"}"}
  .layer={fullNav&showProductList&!showSearchResults&$$.browsing&$$.yPos>=0&$$.yPos<8?1:-1}
  .scroller={getScroller($$.item->category)}
  .new={
    Area.$.image="$$";
    Area.$.width={getCatWidth($$.item->category)};
    Area.$.height=14;
    Area.$.boxPick=true;
    Area.$.cursor=_HAND;
    Image.$_bg.width={Area.$.width};
    Image.$_bg.height={Area.$.height};
    Image.$_bg.x={$$.x};
    Image.$_bg.y={$$.y-6};
    Image.$_bg.layer={Area.$.hover|($$.item->id==hoverProduct->id)|$$.item->browsing?$$.layer-1:-1};
    Image.$_bg.buffer={$$.item->browsing?"ddd":"f3f3f3"};
	Trigger.$_press.test={Area.$.press};
	Trigger.$_press.exec={$$.item->browsing?$$.item->selectParent():$$.item->select()};
	Trigger.$_hover.test={Area.$.hover};
	Trigger.$_hover.exec={hoverProduct=$$.item};
  }
>>
scrollOff=0
Scroller.extends="Image"
Scroller.Class<<
  .dataSource=Image.Tools.dataSource
  .file="sepBar.gif"
  .parent="Image.Ruled"
  .category=""
  .catObj={"Category."~$$.category}
  .layer={$$.category==""&"$"=="Scr0"|$$.category!=""&$$.catObj->browsing?1:-1}
  .x={getCatRight($$.category)-10}
  .y=12
  .offset=0
  .numItems={getCatCount($$.category)}
  .excessItems={$$.numItems-8}
  .scrollSlack={$$.height-Image.ScrSlide_$.height}
  .scrollStepPix={$$.scrollSlack/$$.excessItems}
  .setOffset={#arg>=0&#arg<=$$.excessItems?($$.offset=#arg)}
  .sliderY={$$.scrollStepPix*$$.offset}
  .dragging=false
  .new={
    Image.ScrSlide_$.dataSource=Image.Tools.dataSource;
    Image.ScrSlide_$.file="vScroll.gif";
    Image.ScrSlide_$.parent="$$";
    Image.ScrSlide_$.x=2;
    Image.ScrSlide_$.y={$$.dragging?(#y=Display.Primary.mouseY-$$.absY-scrollOff;#y<0?0:#y>$$.scrollSlack?$$.scrollSlack:#y):$$.sliderY};
    Image.ScrSlide_$.layer={$$.excessItems>0?1:-1};
    Area.SS_$.image="Image.ScrSlide_$";
    ChangeTrigger.SSp_$.test={Area.SS_$.press?(!$$.dragging?(scrollOff=Image.ScrSlide_$.mouseY;$$.dragging=true);Display.Primary.mouseY):-2};
    ChangeTrigger.SSp_$.exec={Area.SS_$.press?$$.setOffset(Meson.floor((Display.Primary.mouseY-scrollOff-$$.absY)/$$.scrollStepPix))};
    Trigger.SSpr_$.test={!Area.SS_$.press};
    Trigger.SSpr_$.exec={$$.dragging=false};
  }
>>
Scroller.Scr0.layer=1

Style.ProductCategoryTitle<<
  .fontWeight=_BOLD
  .textAlign=_CENTER
  .fontSize=18
  .color="444"
  .dropShadow=white
>>
Style.ProductIconTitle<<
  .fontWeight=_BOLD
  .textAlign=_CENTER
  .fontSize=14
>>
hoverProduct=""
iconGap=10
numDockIcons={#c=getCatCount(currentCategory);#c<8?#c:8}
dockIcons={fullNav&!showSearchResults}
dockWidth={Display.Primary.width-190-(numDockIcons-1)*iconGap}
numProductIcons={numProductsListed<maxProductsPerPage?numProductsListed:maxProductsPerPage}
iconRows={numProductIcons<5?1:2}
iconsPerRow={iconRows==1?numProductIcons:Meson.ceil(numProductIcons/2)}
iconWidth={
  dockIcons?(#w=dockWidth/(numDockIcons-1);#w>0&#w<160?#w:160)
  :(numProductIcons<2?300:(#w=600/iconsPerRow;iconRows==1|#w<150?#w:150))
}
iconSpacing={iconWidth+iconGap}
iconSlide={80-iconWidth/2}
hoverIndex={hoverProduct==""|hoverProduct->icon==""|!hoverProduct->icon->isHover?999:hoverProduct->icon->index}
ProductIcon.extends="Image"
ProductIcon.Class<<
  .parent="Image.ProductList"
  .index={Meson.callMethod(^method=substring1Method,^args=["$",4])}
  .row={$$.index>=iconsPerRow?1:0}
  .col={$$.index-iconsPerRow*$$.row}
  .iconsThisRow={$$.row==0?iconsPerRow:numProductIcons-iconsPerRow}
  .plainX={(Display.Primary.width-(iconSpacing*$$.iconsThisRow))/2+$$.col*iconSpacing}
  .dockX={Display.Primary.width/2}
  .desX={90+($$.dockPos)*(iconWidth+iconGap)+$$.slide}
  .dockPos={!dockIcons?0:@("BrowseLine."~$$.product->id~".yPos")}
  .offscreen={dockIcons&($$.dockPos<0|$$.dockPos>=numDockIcons)}
  .x={dockIcons?$$.dockX:$$.plainX}
  .y={dockIcons?273:iconRows==1?(135-$$.scaleY*112):(2+145*$$.row)}
  .dockScale=1
  .desScale={$$.isHover?1:iconWidth/160}
  .scaleX={dockIcons?$$.dockScale:iconWidth/300}
  .scaleY={$$.scaleX}
  .bilinear={dockIcons?($$.dockX==$$.desX):true}
  .oversample={$$.bilinear}
  .isHover={hoverProduct->id==$$.product->id}
  .slide={$$.isHover?0:hoverIndex<$$.index?iconSlide:0-iconSlide}
  .anchor={dockIcons?_S:_NW}
  .product=""
  .dataSource={$$.product->dataSource}
  .file={$$.product==""|$$.product->model==""|$$.offscreen?"":(serverPath($$.product->model)~(dockIcons?"/thumb_160x120.jpg":"/thumb_300x225.jpg"))}
  .layer={$$.product==""|!$$.product->isCurrent|$$.product->icon!="$$"|$$.offscreen?-1:2}
  .armed=false
  .new={
    Image.$_title.parent="Image.ProductList";
    Image.$_title.text={"%ProductIconTitle{"~$$.product->localTitle~"}"};
    Image.$_title.anchor=_N;
    Image.$_title.x={dockIcons?$$.x:($$.x+iconWidth/2)};
    Image.$_title.y={dockIcons?$$.y:($$.y+iconWidth*0.75)};
    Image.$_title.wrapWidth={dockIcons?160:iconWidth-30};
    Image.$_title.enabled=false;
    Image.$_title.layer={dockIcons&!$$.isHover?-1:$$.layer};
    Image.$_title.states=["plain","hover"];
	Image.$_sel.layer={$$.layer<0?-1:showProductList&haveProduct&($$.product->model==productModel)?0:-1};
	Image.$_sel.buffer={rightMenuBg};
	Image.$_sel.x={$$.absX-1};
	Image.$_sel.y={$$.absY-1};
	Image.$_sel.width={2+$$.width*$$.scaleX};
	Image.$_sel.height={2+$$.height*$$.scaleY+Image.$_title.height};
    Area.$.image="$$";
    Area.$.cursor={$$.product->isReal?_HAND:""};
    Anim.IconX.attr=Anim.IconX.attr++["$$.dockX"];
    Anim.IconX.goal=Anim.IconX.goal++[{$$.desX}];
    Anim.IconS.attr=Anim.IconS.attr++["$$.dockScale"];
    Anim.IconS.goal=Anim.IconS.goal++[{$$.desScale}];
    Trigger.$h.test={Area.$.hover};
    Trigger.$h.exec={hoverProduct=$$.product};
    Trigger.$p.test={Area.$.press&$$.product->isReal};
    Trigger.$p.exec={$$.armed=true};
    Trigger.$r.test={$$.armed&!Area.$.press};
    Trigger.$r.exec={$$.product->select()};
    Trigger.$bl.test={$$.bilinear};
    Trigger.$bl.exec={$$.repaint()};
    ChangeTrigger.$os.test={$$.dockPos};
    ChangeTrigger.$os.exec={$$.dockX=$$.desX};
    ChangeTrigger.$np.test={numDockIcons};
    ChangeTrigger.$np.exec={$$.dockX=$$.desX;$$.dockScale=$$.desScale};
  }
>>
Anim.IconX<<
  .attr=[]
  .goal=[]
  .rate=320
>>
Anim.IconS<<
  .attr=[]
  .goal=[]
  .rate=3
>>

Product.extends=["ListedItem"]
Product.Class<<
  .dataSource={Display.Primary.dataSource}
  .title=""
  .blurb=""
  .localTitle={#t=@("$$.title_"~language);#t==""?$$.title:#t}
  .localBlurb={#b=@("$$.blurb_"~language);#b==""?$$.blurb:#b}
  .model=""
  .isReal={$$.model!=""}
  .path={@("Category."~$$.category~".path")}
  .select={showProductList=false;setProduct(^model=$$.model,^path=$$.path,^push=true)}
  .icon={"ProductIcon.Icon"~$$.indexOnPage}
  .putIcon={$$.icon->product="$$";$$.indexPath!=""?(("Data.Index$"~.url)=$$.indexPath)}
  .style="Product"
  .new={
    Trigger.ShowB$.test={$$.isCurrent&!showSearchResults};
    Trigger.ShowB$.exec={$$.putIcon()};
    Trigger.ShowS$.test={$$.isCurrent&showSearchResults};
    Trigger.ShowS$.exec={$$.putIcon()};
    Trigger.$CatSet.test={$$.category!=""&$$.model!=""};
    Trigger.$CatSet.exec={
      #cobj="Category."~$$.category;
      $$.catIndex=(#cobj)->productCount;
      (#cobj)->productCount=$$.catIndex+1;
      $$.isCurrent={((currentCategory==$$.category)|(showSearchResults&$$.searchSerial==currentSearchSerial))&(currentProductPage==$$.page)};
      BrowseLine.$.item="ListedItem.$";
    };
  }
>>
Style.Blurb<<
  .color=bottomMenuColor
  .fontSize=12
  .fontFamily={l10n("fontWide")}
  .fontWeight=_BOLD
  .lineSpacing=2
  .textAlign=_CENTER
>>
Image.ProductBlurb<<
  .anchor=_C
  .x=138
  .y=403
  .wrapWidth=250
  .layer={showProductList?100:-1}
  .text={"%Blurb{"~hoverProduct->localBlurb~"}"}
>>

Style.ProductTitle<<
  .fontWeight=_BOLD
  .color={uiStyle==_POUGHKEEPSIE?white:"444"}
  .fontSize=17
  .margin=5
>>
Image.ProductTitle<<
  .x={uiStyle==_POUGHKEEPSIE?485:278}
  .y={uiStyle==_POUGHKEEPSIE?410:386}
  .layer={showProductList?-1:5}
  .title=""
  .text={"%ProductTitle{"~Image.ProductTitle.title~"}"}
  .anchor={uiStyle==_POUGHKEEPSIE?_C:_SW}
  .wrapWidth={uiStyle==_POUGHKEEPSIE?380:((fullMode?Image.ScriptButtons.absX:Image.SectionPrev.absX)-Image.ProductTitle.absX-10)}
  .enabled=false
>>
ChangeTrigger.PTChange.test={Image.ProductTitle.title}
ChangeTrigger.PTChange.exec={Image.ProductTitle.title!=""?safeJSEval("setTitle('"~tidyTitle(Image.ProductTitle.title)~"')")}

Image.SearchButton<<
  .x={Image.PrintAll.absX-2}
  .y={Image.PrintAll.y}
  .anchor=_NE
  .layer={singleModel?-1:999}
  .text={"%TopMenu_#{"~l10n("Search")~"}%TopMenu_plain{  |}"}
  .states=["plain","hover"]
>>
Area.SearchButton<<
  .image="Image.SearchButton"
  .cursor=_HAND
  .state={Area.SearchButton.hover?"hover":"plain"}
  .boxPick=true
>>
Trigger.SearchPress.test={Area.SearchButton.press}
Trigger.SearchPress.exec={
  Search.LocalSearch.show(^width=300,^height=150);
  searchWordList==""?(Data.SearchData.url=catalog~"/searchwordlist.jar");
}

Image.QuickLinks<<
  .parent="Image.SectionButtons";
  .x=4
  .layer=-1
  .y={sectionLayout==[]?0:sectionLayout[Meson.length(sectionLayout)-1]->bottom+6}
  .text={"%Script{"~l10n("QuickLinks")~"}"}
  .width={Image.SectionButtons.width-4}
>>

prevLink="Image.QuickLinks"

Style.LinkBullet<<
  _plain.color="888"
  _hover.color="000"
>>
CollLink.extends="Image"
CollLink.Class<<
  .parent="Image.SectionButtons";
  .x=4
  .layer=1
  .anchor=_NW
  .prevLink=""
  .y={2+$$.prevLink->y+$$.prevLink->height}
  .states=["plain","hover"]
  .label=""
  .url=""
  .text={$$.url==""?"":("%Script{%LinkBullet_#{\u25BA}"~$$.label~"}")}
  .width={Image.SectionButtons.width-4}
  .buffer=white
  .wrapWidth={Image.SectionButtons.width-4}
  .trackingAddress=""
  .new={
    $$.prevLink=prevLink;
    prevLink="$$";
    Area.$.image="$$";
    Area.$.state={Area.$.hover?"hover":"plain"};
    Area.$.boxPick=true;
    Area.$.cursor=_HAND;
    Trigger.$_press.test={Area.$.press};
    Trigger.$_press.exec={recordAction($$.trackingAddress);Image.LinkFlyer.link="$$"};
    Trigger.$_hover.test={Area.$.hover};
    Trigger.$_hover.exec={Meson.showStatus(^applet="Applet.Primary",^status=$$.url)};
    Trigger.$_linked.test={$$.url!=""};
    Trigger.$_linked.exec={Image.QuickLinks.layer=1};
  }
>>
Collateral.extends=""
Collateral.Class<<
  .title="$"
  .url=""
  .getTitle={#l=@("$$.title_"~language);#l==""?$$.title:#l}
  .getURL={#l=@("$$.url_"~language);#l==""?$$.url:#l}
  .new={
    CollLink.$.label={$$.getTitle};
    CollLink.$.url={$$.getURL};
    CollLink.$.trackingAddress={URLEncode($$.title)};
  }
>>
startsWithMethod=Meson.getMethod(^class="java.lang.String",^method="startsWith",^args=["java.lang.String"]);
Image.LinkFlyer<<
  .link=""
  .buffer="ccc"
  .width=1
  .height=1
  .layer={Image.LinkFlyer.fracDone<1?100:-1}
  .anchor=_C
  .fracDone=1
  .x={Image.LinkFlyer.fracDone*Display.Primary.width/2+(1-Image.LinkFlyer.fracDone)*Image.LinkFlyer.link->absX}
  .y={Image.LinkFlyer.fracDone*Display.Primary.height+(1-Image.LinkFlyer.fracDone)*Image.LinkFlyer.link->absY}
  .scaleX={Display.Primary.width*Image.LinkFlyer.fracDone}
>>
ChangeTrigger.FlyLink.test={Image.LinkFlyer.link}
ChangeTrigger.FlyLink.exec={Image.LinkFlyer.link!=""?(Image.LinkFlyer.fracDone=0)}
Trigger.FlyLinkRst.test={Image.LinkFlyer.fracDone==1}
Trigger.FlyLinkRst.exec={(#l=Image.LinkFlyer.link)!=""?(safeJSEval("popLink('"~#l->url~"','"~#l->label~"','"~l10n("linkHelp")~"')");Image.LinkFlyer.link="")}
Anim.FLAnim<<
  .attr=["Image.LinkFlyer.fracDone"]
  .goal=[1]
  .rate=2
  .highPriority=true
>>

Style.Section<<
  _plain.fontFamily={l10n("fontWide")}
  _plain.fontWeight=_BOLD
  _plain.color="ddd"
  _plain.fontSize={l10n("style")=="Tiny"?9:10}
  _plain.textAlign=_CENTER
  _hover.fontFamily={l10n("fontWide")}
  _hover.fontWeight=_BOLD
  _hover.color="fff"
  _hover.fontSize={l10n("style")=="Tiny"?9:10}
  _hover.textAlign=_CENTER
  _active.fontFamily={l10n("fontWide")}
  _active.fontWeight=_BOLD
  _active.color="000"
  _active.fontSize={l10n("style")=="Tiny"?9:10}
  _active.textAlign=_CENTER
>>
Style.SectionTitle<<
  .fontWeight=_BOLD
  .color="444"
  .fontSize=18
>>
Style.SectionBack_plain<<
  .fontWeight=_BOLD
  .textDecoration=_UNDERLINE
  .color="444"
  .fontSize=18
>>
Style.SectionBack_hover<<
  .fontWeight=_BOLD
  .textDecoration=_UNDERLINE
  .color="f00"
  .fontSize=18
>>
Style.CatArrow<<
  .fontWeight=_BOLD
  .color="444"
  .fontSize=16
>>
Style.CatBack_plain<<
  .fontWeight=_BOLD
  .textDecoration=_UNDERLINE
  .color="444"
  .fontSize=16
>>
Style.CatBack_hover<<
  .fontWeight=_BOLD
  .textDecoration=_UNDERLINE
  .color="f00"
  .fontSize=16
>>
Style.SectionContent<<
  .color="444"
  .fontSize=12
  .lineSpacing=2
  .fontFamily={l10n("fontWide")}
  .borderThickness={fullMode?1:0}
  .borderColor="444"
>>
Style.Dismiss<<
  .fontSmooth=2
  .fontStyle=_ITALIC
  .textAlign=_CENTER
  .lineSpacing=8
  .contentPre={"\n"~l10n("clickContinue")}
>>
Style.SectionTight<<
  .fontSize=10
  .fontSmooth=2
>>
Style.Sup<<
  .offsetY=-0.5
>>
Style.Sub<<
  .offsetY=0.5
>>
Style.Bullet<<
  .marginLeft=15
  .contentPre="%BulletMark{\u2666}\t"
>>
Style.Bullet2<<
  .marginLeft=30
  .contentPre="%Bullet2Mark{\u2022}\t"
>>
Style.Bullet3<<
  .marginLeft=45
  .contentPre="%Bullet3Mark{\u2022}\t"
>>
Style.BulletMark<<
  .lineSpacing=10
  .marginLeft=0
  .color="FE1A0B"
  .fontWeight=_BOLD
  .fontSmooth=2
>>
Style.Bullet2Mark<<
  .marginLeft=15
  .color="FE1A0B"
  .fontWeight=_BOLD
  .fontSize=12
  .fontSmooth=2
>>
Style.Bullet3Mark<<
  .marginLeft=30
  .color="FE1A0B"
  .fontWeight=_BOLD
  .fontSize=11
  .fontSmooth=2
>>
Style.Hanging<<
  .marginLeft=15
>>
Style.HangingFirst<<
  .lineSpacing=10
  .marginLeft=0
>>

Style.Link<<
  _plain.area="Link"
  _plain.textDecoration=_UNDERLINE
  _hover.color="FE1A0B"
  _hover.textDecoration=_UNDERLINE
>>
Link.extends="Area"
Link.Class<<
  .state={$$.hover?"hover":"plain"}
  .url=""
  .init={$$.url=#arg}
  .boxPick=true
  .cursor=_HAND
  .new={
    Trigger.$_press.test={$$.press};
    Trigger.$_press.exec={Meson.showDocument(^applet="Applet.Primary",^target="_blank",^url=$$.url)};
    Trigger.$_hover.test={$$.hover};
    Trigger.$_hover.exec={Meson.showStatus(^applet="Applet.Primary",^status=$$.url)};
  }
>>
Style.ScriptLink<<
  _plain.area="ScriptLink"
  _plain.contentPre="\u25BA"
  _plain.contentPost=" "
  _plain.fontStyle=_ITALIC
  _plain.fontSmooth=2
  _hover.contentPre="\u25BA"
  _hover.contentPost=" "
  _hover.fontStyle=_ITALIC
  _hover.fontSmooth=2
  _hover.color="FE1A0B"
>>
ScriptLink.extends="Area"
ScriptLink.Class<<
  .state={$$.hover?"hover":"plain"}
  .script=""
  .init={$$.script=#arg}
  .boxPick=true
  .cursor=_HAND
  .new={
    Trigger.$_press.test={$$.press};
    Trigger.$_press.exec={Scene.3d.playStartSlow($$.script)?recordAction(URLEncode("$"))};
  }
>>

(!singleModel)?( \
Style.ProductLink_plain.area="ProductLink"; \
Style.ProductLink_plain.fontWeight=Style.ProductLink_hover.fontWeight=_BOLD; \
Style.ProductLink_plain.fontSmooth=Style.ProductLink_hover.fontSmooth=2; \
Style.ProductLink_plain.textDecoration=Style.ProductLink_hover.textDecoration=_UNDERLINE; \
Style.ProductLink_hover.color="FE1A0B"; \
Style.ProductLink_hover.offsetY=-0.5)

ProductLink.extends="Area"
ProductLink.Class<<
  .state={$$.hover?"hover":"plain"}
  .model=""
  .init={$$.model=#product}
  .boxPick=true
  .cursor=_HAND
  .new={
    Trigger.$_press.test={$$.press};
    Trigger.$_press.exec={setProduct(^model=$$.model,^path=[],^push=true)};
  }
>>

currentGraphic=""
currentGraphicOffsetX={currentGraphic!=""?currentGraphic->offsetX:0}
currentGraphicOffsetY={currentGraphic!=""?currentGraphic->offsetY:0}
currentGraphicOffsetWidth={currentGraphic!=""?currentGraphic->offsetWidth:0}
Style.Bold.fontSmooth=2
Image.SectionContent<<
  .x={!overview3D?(10+Image.SectionButtons.absX/2+currentGraphicOffsetX/2):(Image.SectionButtons.absX-155+currentGraphicOffsetX/2)}
  .y={230+currentGraphicOffsetY/2}
  .wrapWidth={!overview3D?(Image.SectionButtons.absX-currentGraphicOffsetWidth-30):(300-currentGraphicOffsetWidth)}
  .layer={fullMode|showProductList?-1:10}
  .anchor=_C
  .label=""
  .tabStops=[15,30,45,60,300]
  .text={"%SectionContent{"~Image.SectionContent.label~"}"}
  .fontSmooth=0
  .states=["plain","hover"]
>>
Anim.SCAnim<<
  .attr=["Image.SectionContent.alpha"]
  .goal=[1]
  .rate=1
>>

SectionGraphic.extends="Image"
SectionGraphic.Class<<
  .parent="Image.SectionContent"
  .section=""
  .layer={currentSection==$$.section?1:-1}
  .x={$$.anchor==_W?Image.SectionContent.width+5:$$.anchor==_E?-5:(Image.SectionContent.wrapWidth/2)}
  .y={$$.anchor==_N?Image.SectionContent.height+5:$$.anchor==_S?-5:(Image.SectionContent.height/2)}
  .offsetWidth={$$.layer==-1?0:($$.anchor==_W|$$.anchor==_E?$$.width:0)}
  .offsetX={$$.layer==-1?0:($$.anchor==_W?0-$$.width:$$.anchor==_E?$$.width:0)}
  .offsetY={$$.layer==-1?0:($$.anchor==_N?0-$$.height:$$.anchor==_S?$$.height:0)}
  .new={
    Trigger.Show$.test={$$.layer!=-1};
    Trigger.Show$.exec={currentGraphic="$$"};
  }
>>
SectionScript.extends=""
SectionScript.Class<<
  .section=""
  .script=""
  .new={
    Trigger.RunScript$.test={currentSection==$$.section};
    Trigger.RunScript$.exec={Scene.3d.playStartSlow($$.script)};
  }
>>

Style.NextPrev<<
  _plain.color=black
  _hover.color="888"
>>

currentSectionButton={"SectionButton."~currentSection}
Image.SectionNext<<
  .x={Image.SectionButtons.absX-10}
  .y={Image.SectionButtons.absY+Image.SectionButtons.height}
  .anchor=_SE
  .states=["plain","hover"]
  .text={"%NextPrev_#{"~l10n("Next")~" >>}"}
  .layer={fullMode|showProductList?-1:4}
>>
Image.SectionPrev<<
  .x={Image.SectionNext.absX-10}
  .y={Image.SectionNext.y}
  .anchor=_SE
  .states=["plain","hover"]
  .text={"%NextPrev_#{<< "~l10n("Back")~"}"}
  .layer={fullMode|showProductList?-1:4}
>>
Area.SectionNext<<
  .image="Image.SectionNext"
  .state={Area.SectionNext.hover?"hover":"plain"}
  .boxPick=true
  .cursor=_HAND
>>
Area.SectionPrev<<
  .image="Image.SectionPrev"
  .state={Area.SectionPrev.hover?"hover":"plain"}
  .boxPick=true
  .cursor=_HAND
>>
Trigger.SectionNextPage.test={Area.SectionNext.press}
Trigger.SectionNextPage.exec={currentSectionButton->nextSection()}
Trigger.SectionPrevPage.test={Area.SectionPrev.press}
Trigger.SectionPrevPage.exec={currentSectionButton->prevSection()}

Image.SectionButtons<<
  .layer={fullMode|showProductList?-1:20}
  .anchor=_NE
  .x={Display.Primary.width-5-$$.width}
  .y=73
  .buffer={rightMenuBg}
  .width={^s=0;foreach(^elem="i";^in=sectionLayout;^do={#w=#i->right;#w>#s?(#s=#w)});^s+5}
  .height=312
>>

currentSection=""
SectionButton.extends="Image"
SectionButton.Class<<
  .x=4
  .label=""
  .sectionText=""
  .nextSection={$$.place==Meson.length(sectionLayout)-1?sectionLayout[0]->exec():sectionLayout[$$.place+1]->exec()}
  .prevSection={$$.place==0?sectionLayout[Meson.length(sectionLayout)-1]->exec():sectionLayout[$$.place-1]->exec()}
  .exec={currentSection="$"}
  .layer=1
  .bottom={$$.y+$$.height}
  .right={$$.x+$$.width}
  .anchor=_NW
  .states=["plain","hover"]
  .text={"%Script{%LinkBullet_#{\u25BA}"~$$.label~"}"}
  .place=0
  .new={
    $$.parent="Image.SectionButtons";
    $$.place=sectionButtonCounter;
    $$.y={$$.place==0?15:2+sectionLayout[$$.place-1]->bottom};
    sectionButtonCounter=sectionButtonCounter+1;
    sectionLayout[$$.place]="$$";
    Area.$.image="$$";
    Area.$.state={Area.$.hover?"hover":"plain"};
    Area.$.boxPick=true;
    Area.$.cursor=_HAND;
    Image.$_bg.parent="Image.SectionButtons";
    Image.$_bg.layer=0;
    Image.$_bg.x=4;
    Image.$_bg.width={Image.SectionButtons.width-4};
    Image.$_bg.y={$$.y};
    Image.$_bg.height={$$.height};
    Image.$_bg.buffer={currentSection=="$"?"aaa":white};
    Trigger.$.test={Area.$.press};
    Trigger.$.exec={$$.exec()};
  }
>>
Trigger.SmallMode.test={!fullMode}
Trigger.SmallMode.exec={ClickOnReset()}
ChangeTrigger.ChangeMode.test={fullMode}
ChangeTrigger.ChangeMode.exec={Scene.3d.distance=0}

Trigger.ShowFirst.test={!fullMode&!showProductList&sectionButtonCounter!=0}
Trigger.ShowFirst.exec={sectionLayout[0]->exec()}

ChangeTrigger.ChangeSection.test={currentSection}
ChangeTrigger.ChangeSection.exec={
    Image.SectionContent.label={currentSectionButton->sectionText};
    Image.SectionContent.alpha=-0.6;
}

Area.Wait.image="Scene.3d"
Area.Wait.boxPick=true
Area.Wait.cursor=_WAIT
Area.Wait.enabled={Image.Tools.layer<0}

scriptButtonCounter=0
buttonLayout=[]

includeMeasure=(includeMeasure==""?true:includeMeasure)
overview3D=(overview3D==""?true:overview3D)

Meson.gluon("com.kaon.meson.search.SearchGluon")
Search.LocalSearch.titleMessage={l10n("searchTitle")}
Search.LocalSearch.matchThing={l10n("matchThing")}
Search.LocalSearch.maxHits=100
Search.LocalSearch.searchResult={
  ("Product.Prod"~#arg~.searchRank)=Search.LocalSearch.hitCount;
  ("Product.Prod"~#arg~.searchSerial)=Search.LocalSearch.serial;
  ("Product.Prod"~#arg~.indexPath)=serverPath(#arg)~"/index.txt";
}
Search.LocalSearch.searchDone={
  searchNumHits=Search.LocalSearch.hitCount;
  searchNumHits!=0?(
	hoverProduct="";
	currentCategory!=""?(recentCategory=currentCategory);
	currentCategory="";
	currentProductPage=0;
	showProductList=true;
	showSearchResults=true;
	didSearch=true;
	currentSearchSerial=Search.LocalSearch.serial;
  )
}

Meson.gluon("com.kaon.meson.scene.SceneGluon")
Scene.3d<<
  .width={fullMode?(Display.Primary.width-14-Image.ScriptButtons.width):!overview3D?0:(Display.Primary.width-330-Image.SectionButtons.width)}
  .height=312
  .x=7
  .y=73
  .centerY={Scene.3d.height/2-8}
  .layer={showProductList|(!overview3D&!fullMode)?-1:1}
  .illustrationMode=true
  .illustrationThickness=0.01
  .aaPower={Scene.3d.illustrationMode?4:8}
  .enabled=true
>>
Shadow.Shadow_3d.alpha=0

showHSToggle=true
showHS={showHSToggle}

Image.HSIControl<<
  .file="infoColor.gif@infoMask.gif"
  .states=["off","on"]
  .x=300
  .y=413
  .anchor=_S
  .layer={(Image.HSIndicator.layer>0&!showProductList&(overview3D|fullMode))?98:-1}
>>
Area.HSIControl<<
  .image="Image.HSIControl"
  .state={showHSToggle?"on":"off"}
  .boxPick=true
  .cursor=_HAND
>>
Image.HSILabel<<
  .parent="Image.HSIControl"
  .text={"%ToolLabel{"~l10n("hotSpotTip")~"}"}
  .x={Image.HSIControl.width/2}
  .y={Image.HSIControl.height+10}
  .anchor=_C
  .enabled=false
>>
Trigger.HSIClick.test={Area.HSIControl.press}
Trigger.HSIClick.exec={showHSToggle=!showHSToggle}

Image.HSIndicator<<
  .file={uiStyle==_POUGHKEEPSIE?"hotColor_p.gif@hotMask_p.gif":"hotColor.gif@hotMask.gif"}
  .parent="Scene.3d"
  .anchorX={uiStyle==_POUGHKEEPSIE?10:13}
  .anchorY={uiStyle==_POUGHKEEPSIE?10:13}
  .enabled=false
  .layer=-1
>>
Anim.HSIAlpha<<
  .attr="Image.HSIndicator.alpha"
  .rate=0.5
  .goal={showHS?1:0}
>>

thetaSnapAng={thetaSnap==1?180:360/thetaSnap}
ChangeTrigger.ThetaSnap.test={(thetaSnap<1|Display.Primary.press)?0:View.3d.desiredTheta}
ChangeTrigger.ThetaSnap.exec={ChangeTrigger.ThetaSnap.test!=0?(
  View.3d.desiredTheta=180-thetaSnapAng*Meson.round((180-View.3d.desiredTheta)/thetaSnapAng);
  View.3d.desiredPhi=0;
)}

panLock={thetaSnap==1}
panLocked={panLock&(allPlayingScripts==[])}

Trigger.PanLock.test={panLocked&(Scene.3d.mode!=_MOVE)}
Trigger.PanLock.exec={Scene.3d.mode=_MOVE}
Trigger.PanUnlock.test={!panLocked}
Trigger.PanUnlock.exec={Scene.3d.mode=_ROTATE}

Image.Tools<<
  .file="toolsColor.gif@toolsMask.gif"
  .x=12
  .y=377
  .anchor=_NW
  .states=["off","seloff","on","selon"]
  .layer=-1
>>

standardView={View.3d.setDesiredFov(180);View.3d.desiredCx=View.3d.desiredCy=0.5}
Trigger.SnapMode.test={thetaSnap>0}
Trigger.SnapMode.exec={
  Ticker.TLeft.order=Ticker.TRight.order=-1;
  Trigger.TLeft.test={Button.TLeft.press|Button.TLeft.keyDown};
  Trigger.TLeft.exec={"View.3d."~Button.TLeft.attr=@("View.3d."~Button.TLeft.attr)+thetaSnapAng;standardView()};
  Trigger.TRight.test={Button.TRight.press|Button.TRight.keyDown};
  Trigger.TRight.exec={"View.3d."~Button.TRight.attr=@("View.3d."~Button.TRight.attr)-thetaSnapAng;standardView()};
}
zoomedOutFully={View.3d.desiredFov>View.3d.maxFOV*0.95}
Trigger.AutoMoveMode.test={thetaSnap>0&!zoomedOutFully}
Trigger.AutoMoveMode.exec={ClickOnMove()}
Trigger.AutoTurnMode.test={thetaSnap>0&zoomedOutFully&!panLock}
Trigger.AutoTurnMode.exec={ClickOnTurn()}

Style.ToolLabel<<
  .fontSize=11
  .fontWeight=_BOLD
  .textAlign=_CENTER
  .color=bottomMenuColor
>>

ToolLabel.extends="Area"
ToolLabel.Class<<
  .image="Image.Tools"
  .cursor=_HAND
  .enabled={$$.available&allPlayingScripts==[]}
  .state="off"
  .available=true
  .width=39
  .height=39
  .new={
    Image.$_lbl.parent="Image.Tools";
    Image.$_lbl.text={"%ToolLabel{"~$$.label~"}"};
    Image.$_lbl.x={$$.x+$$.width/2};
    Image.$_lbl.y=46;
    Image.$_lbl.anchor=_C;
    Image.$_lbl.enabled=false;
    Trigger.$.test={$$.press};
    Trigger.$.exec={ClickOn$()};
  }
>>

ToolLabel<<
  .Reset.label={l10n("Reset")}
  .Reset.x=218
  .Measure.label={l10n("Measure")}
  .Measure.x=174
  .Measure.available={!panLocked}
  .Move.label={l10n("Move")}
  .Move.x=131
  .Turn.label={l10n("Turn")}
  .Turn.x=88
  .Turn.available={!panLocked}
  .Zoom.label={l10n("Zoom")}
  .Zoom.x=23
  .Zoom.width=38
>>

Style.Tip<<
  .fontSize=11
  .borderColor="cc8"
  .borderThickness=1
>>

Image.UnitHint<<
  .parent="Image.Tools"
  .text={"%Tip{"~l10n("unitHint")~"}"}
  .buffer="cffc"
  .anchor=_S
  .x={ToolLabel.Reset.x}
  .y=-3
  .alpha=0
  .enabled=false
>>
Anim.UnitHintA<<
  .attr="Image.UnitHint.alpha"
  .rate={Area.Measure.hover?0.33:4}
  .goal={Area.Measure.hover?1:0}
>>

keyPressed={Image.Tools.layer>=0?Display.Primary.key:""}

Button.extends="Area"
Button.Class<<
  .image="Image.Tools"
  .keyDown={$$.enabled&(Scene.3d.mode~keyPressed==Button.$.modeKey)}
  .tool=""
  .state={($$.hover|$$.keyDown?"sel":"")~$$.tool->state}
  .new={
    Ticker.$.order={Button.$.press|Button.$.keyDown?1:-1};
    Ticker.$.exec={"View.3d."~Button.$.attr=@("View.3d."~Button.$.attr)+Button.$.step*Meson.frameStep};
  }
>>

Button<<
  .MLeft.attr="desiredCx"
  .MLeft.step=-0.2
  .MLeft.modeKey="_MOVE_LEFT"
  .MLeft.tool="ToolLabel.Move"
  .MRight.attr="desiredCx"
  .MRight.step=0.2
  .MRight.modeKey="_MOVE_RIGHT"
  .MRight.tool="ToolLabel.Move"
  .MUp.attr="desiredCy"
  .MUp.step=-0.2
  .MUp.modeKey="_MOVE_UP"
  .MUp.tool="ToolLabel.Move"
  .MDown.attr="desiredCy"
  .MDown.step=0.2
  .MDown.modeKey="_MOVE_DOWN"
  .MDown.tool="ToolLabel.Move"

  .TLeft.attr="desiredTheta"
  .TLeft.step=15
  .TLeft.modeKey="_ROTATE_LEFT"
  .TLeft.enabled={!panLocked}
  .TLeft.tool="ToolLabel.Turn"
  .TRight.attr="desiredTheta"
  .TRight.step=-15
  .TRight.modeKey="_ROTATE_RIGHT"
  .TRight.enabled={!panLocked}
  .TRight.tool="ToolLabel.Turn"
  .TTop.attr="desiredPhi"
  .TTop.step=15
  .TTop.modeKey="_ROTATE_UP"
  .TTop.enabled={!panLocked}
  .TTop.tool="ToolLabel.Turn"
  .TBottom.attr="desiredPhi"
  .TBottom.step=-15
  .TBottom.modeKey="_ROTATE_DOWN"
  .TBottom.enabled={!panLocked}
  .TBottom.tool="ToolLabel.Turn"
>>

Ticker.TTop.exec={View.3d.setDesiredPhi(View.3d.desiredPhi+Button.TTop.step*Meson.frameStep)}
Ticker.TBottom.exec={View.3d.setDesiredPhi(View.3d.desiredPhi+Button.TBottom.step*Meson.frameStep)}

Trigger.Space.test={keyPressed==" "}
Trigger.Space.exec={Scene.3d.mode=(Scene.3d.mode==_ROTATE?_MOVE:_ROTATE)}
Trigger.Enter.test={keyPressed==_ENTER}
Trigger.Enter.exec={ClickOnReset()}

Area.ZoomIn.image="Image.Tools"
Area.ZoomIn.state={Area.ZoomIn.press?"on":Area.ZoomIn.hover?"seloff":"off"}
Area.ZoomIn.cursor=_HAND
Trigger.ZoomIn.test={Area.ZoomIn.press|keyPressed=="+"|keyPressed=="="}
Trigger.ZoomIn.exec={Scene.3d.distance=0;View.3d.setDesiredFov(View.3d.desiredFov*0.8)}

Area.ZoomOut.image="Image.Tools"
Area.ZoomOut.state={Area.ZoomOut.press?"on":Area.ZoomOut.hover?"seloff":"off"}
Area.ZoomOut.cursor=_HAND
Trigger.ZoomOut.test={Area.ZoomOut.press|keyPressed=="-"}
Trigger.ZoomOut.exec={Scene.3d.distance=0;View.3d.setDesiredFov(View.3d.desiredFov*1.2)}

Area.ZoomFill<<
  .image="Image.Tools"
  .state="seloff"
  .width={#mx=View.3d.maxFOV;#mn=View.3d.minFOV;2+((#mx==#mn)?0:(1-(View.3d.fov-#mn)/(#mx-#mn))*Area.ZoomFill.pixWide)}
>>
ChangeTrigger.ZFChange.last=ChangeTrigger.ZFChange.test=0
ChangeTrigger.ZFChange.test={View.3d.fov}
ChangeTrigger.ZFChange.exec={Image.Tools.repaint()}

Image.ZoomHandle<<
  .file="zoomColor.gif@zoomMask.gif"
  .states=["off","on"]
  .parent="Image.Tools"
  .anchor=_C
  .x={Area.ZoomFill.x+Area.ZoomFill.width}
  .y={Area.ZoomFill.y+1}
  .alpha=0.9
>>

Area.ZoomHandle.image="Image.ZoomHandle"
Area.ZoomHandle.state={Area.ZoomHandle.hover|Area.Zoom.press?"on":"off"}
Area.ZoomHandle.cursor={Area.ZoomHandle.press?"B":_HAND}
ChangeTrigger.ZDT.test={
  Area.ZoomHandle.press&ChangeTrigger.ZDT.last==-2?zoomDx=Image.ZoomHandle.anchorX-Image.ZoomHandle.mouseX:zoomDx=0;
  Area.Zoom.press|Area.ZoomHandle.press?Display.Primary.mouseX:-2
}
ChangeTrigger.ZDT.exec={
  Area.Zoom.press|Area.ZoomHandle.press?(Scene.3d.distance=0;
   #m=Image.Tools.mouseX-Area.ZoomFill.x+zoomDx;View.3d.setDesiredFov(View.3d.maxFOV-(View.3d.maxFOV-View.3d.minFOV)*#m/Area.ZoomFill.pixWide))
}

Button.MLeft.x=132;Button.MLeft.y=13;Button.MLeft.width=12;Button.MLeft.height=11
Button.MRight.x=158;Button.MRight.y=13;Button.MRight.width=12;Button.MRight.height=11
Button.MUp.x=146;Button.MUp.y=0;Button.MUp.width=11;Button.MUp.height=12
Button.MDown.x=146;Button.MDown.y=27;Button.MDown.width=11;Button.MDown.height=12

Button.TLeft.x=88;Button.TLeft.y=14;Button.TLeft.width=10;Button.TLeft.height=10
Button.TRight.x=118;Button.TRight.y=14;Button.TRight.width=10;Button.TRight.height=10
Button.TTop.x=103;Button.TTop.y=0;Button.TTop.width=10;Button.TTop.height=10
Button.TBottom.x=103;Button.TBottom.y=29;Button.TBottom.width=10;Button.TBottom.height=10

Area.ZoomIn.x=61;Area.ZoomIn.y=10;Area.ZoomIn.width=Area.ZoomIn.height=20
Area.ZoomOut.x=3;Area.ZoomOut.y=10;Area.ZoomOut.width=Area.ZoomOut.height=20

Area.ZoomFill.x=23;Area.ZoomFill.y=20;Area.ZoomFill.height=1;Area.ZoomFill.pixWide=36

Area.Move.state={Scene.3d.mode==_MOVE?"on":"off"}
Area.Turn.state={Scene.3d.mode==_ROTATE?"on":"off"}
Area.Measure.state={Scene.3d.mode==_MEASURE?(Area.Measure.hover?"selon":"on"):Area.Measure.hover?"seloff":"off"}
Area.Reset.state={Area.Reset.press?"on":Area.Reset.hover?"seloff":"off"}
Area.Reset.enabled=true

ResetSerial=0
ClickOnReset={foreach(^elem="i";^in=allPlayingScripts;^do={#i->stop});Scene.3d.playInstantly(Scene.3d.runtime->getInitID());ResetSerial=ResetSerial+1}
ClickOnMeasure={Scene.3d.mode=_MEASURE}
ClickOnMove={Scene.3d.mode=_MOVE}
ClickOnTurn={Scene.3d.mode=_ROTATE}
ClickOnZoom={Scene.3d.distance=0}

Image.Measure0<<
  .file="measure.gif"
  .parent="Scene.3d"
  .layer={Scene.3d.mode==_MEASURE&Scene.3d.distance>0?1:-1}
  .anchor=_C
  .x={Scene.3d.pressX}
  .y={Scene.3d.pressY}
>>

Image.Measure1<<
  .file="measure.gif"
  .parent="Scene.3d"
  .layer={Scene.3d.mode==_MEASURE&Scene.3d.distance>0?1:-1}
  .anchor=_C
  .x={Scene.3d.dragX}
  .y={Scene.3d.dragY}
>>

Style.Dist<<
  .fontSize=16
  .color=aqua
  .dropShadow="8000"
>>

Image.Distance<<
  .parent="Scene.3d"
  .text={#d=Scene.3d.distance*unitsMul;"%Dist{"~(#d==0?l10n("drag"):Raster.formatFloat(^value=#d,^format=0.1)~unitsLabel)~"}"}
  .layer={Scene.3d.mode==_MEASURE?1:-1}
  .anchor=_S
  .x={(Image.Measure0.x+Image.Measure1.x)/2}
  .y={(Image.Measure0.y+Image.Measure1.y)/2-10}
>>

minImagePercent={thetaSnap==0?25:0}
Trigger.3DLoad.test={Scene.3d.loaded&Data.Model.imagePercentLoaded>=minImagePercent}
Trigger.3DLoad.exec={ 
  showScene();
  Scene.3d.enabled=true;
  Image.Tools.layer={showProductList|(!overview3D&!fullMode)?-1:56};
}
showScene={customizeModel();Scene.3d.illustrationMode=false}

Style.TopMenu<<
  _plain.fontSize=13
  _plain.fontWeight=_BOLD
  _plain.color=topMenuColor
  _hover.fontSize=13
  _hover.fontWeight=_BOLD
  _hover.color=topMenuColor
  _hover.textDecoration=_UNDERLINE
>>

printing=false
printingDone={printing=false}

Image.PrintAll<<
  .layer=-1
  .text={"%TopMenu_#{"~l10n("Print")~"}"}
  .anchor=_NE
  .states=["plain","hover"]
  .x={Display.Primary.width-17}
  .y=25
  .alpha={Image.PrintAll.enabled?1:0.25}
  .enabled={!printing&!showProductList&haveProduct}
>>
Area.PrintAll<<
  .image="Image.PrintAll"
  .cursor=_HAND
  .state={Area.PrintAll.hover?"hover":"plain"}
  .boxPick=true
>>
Trigger.PrintAll.test={Area.PrintAll.press}
Trigger.PrintAll.exec={printing=true;safeJSEval("printAdvisor('', '"~language~"')")}

Style.Hot<<
  .fontSize=14
  .color=444
  .textAlign=_LEFT
  .margin=5
>>

Style.HotLarge<<
  .fontSize=18
  .color="ddf"
  .dropShadow="c000"
  .textAlign=_CENTER
>>
Style.Sidecar<<
  .fontSize=14
  .color=black
  .textAlign=_LEFT
  .lineSpacing=2
  .marginTop=4
  .marginLeft=4
  .marginRight=4
  .marginBottom=4
>>
Style.SidecarTitle<<
  .fontWeight=_BOLD
  .fontSize=14
  .color=black
  .textAlign=_LEFT
  .marginTop=0
  .marginLeft=4
  .marginRight=4
>>

Style.TextAlignLeft.textAlign=_LEFT
Style.TextAlignCenter.textAlign=_CENTER
Style.FontWeightBold.fontWeight=_BOLD

ActionLabelLayout.extends=""
ActionLabelLayout.Class<<
  .imageAnchor=_NW
  .imageX=0
  .imageY=0
  .textAnchor=_NW
  .textX=0
  .textY=0
  .width=0
  .height=0
>>

tiMaxWidth={("ActionLabelText."~#inst~"_text")->width > ("ActionLabelImage."~#inst~"_image")->width ? ("ActionLabelText."~#inst~"_text")->width : ("ActionLabelImage."~#inst~"_image")->width}
tiMaxHeight={("ActionLabelText."~#inst~"_text")->height > ("ActionLabelImage."~#inst~"_image")->height ? ("ActionLabelText."~#inst~"_text")->height : ("ActionLabelImage."~#inst~"_image")->height}
tiSumWidth={("ActionLabelText."~#inst~"_text")->width + ("ActionLabelImage."~#inst~"_image")->width}
tiSumHeight={("ActionLabelText."~#inst~"_text")->height + ("ActionLabelImage."~#inst~"_image")->height}

ActionLabelLayout.L<<
  .imageAnchor=_NW
  .imageX=0
  .imageY=0
  .textAnchor=_NW
  .textX=0
  .textY=0
  .width={tiMaxWidth(^inst=#inst)}
  .height={tiMaxHeight(^inst=#inst)}
>>

ActionLabelLayout.Ltopcenter<<
  .imageAnchor=_N
  .imageX={("ActionLabel."~#inst)->width / 2}
  .imageY=0
  .textAnchor=_N
  .textX={("ActionLabel."~#inst)->width / 2}
  .textY={("ActionLabelImage."~#inst~"_image")->height}
  .width={tiMaxWidth(^inst=#inst)}
  .height={tiSumHeight(^inst=#inst)}
>>

ActionLabelLayout.Ltopleft<<
  .imageAnchor=_NW
  .imageX=0
  .imageY=0
  .textAnchor=_NW
  .textX=0
  .textY={("ActionLabelImage."~#inst~"_image")->height}
  .width={tiMaxWidth(^inst=#inst)}
  .height={tiSumHeight(^inst=#inst)}
>>

ActionLabelLayout.Ltopright<<
  .imageAnchor=_NE
  .imageX={("ActionLabel."~#inst)->width}
  .imageY=0
  .textAnchor=_NE
  .textX={("ActionLabel."~#inst)->width}
  .textY={("ActionLabelImage."~#inst~"_image")->height}
  .width={tiMaxWidth(^inst=#inst)}
  .height={tiSumHeight(^inst=#inst)}
>>

ActionLabelLayout.Lbottomcenter<<
  .imageAnchor=_N
  .imageX={("ActionLabel."~#inst)->width / 2}
  .imageY={("ActionLabelText."~#inst~"_text")->height}
  .textAnchor=_N
  .textX={("ActionLabel."~#inst)->width / 2}
  .textY=0
  .width={tiMaxWidth(^inst=#inst)}
  .height={tiSumHeight(^inst=#inst)}
>>

ActionLabelLayout.Lbottomleft<<
  .imageAnchor=_NW
  .imageX=0
  .imageY={("ActionLabelText."~#inst~"_text")->height}
  .textAnchor=_NW
  .textX=0
  .textY=0
  .width={tiMaxWidth(^inst=#inst)}
  .height={tiSumHeight(^inst=#inst)}
>>

ActionLabelLayout.Lbottomright<<
  .imageAnchor=_NE
  .imageX={("ActionLabel."~#inst)->width}
  .imageY={("ActionLabelText."~#inst~"_text")->height}
  .textAnchor=_NE
  .textX={("ActionLabel."~#inst)->width}
  .textY=0
  .width={tiMaxWidth(^inst=#inst)}
  .height={tiSumHeight(^inst=#inst)}
>>

ActionLabelLayout.Lleftcenter<<
  .imageAnchor=_W
  .imageX=0
  .imageY={("ActionLabel."~#inst)->height / 2}
  .textAnchor=_W
  .textX={("ActionLabelImage."~#inst~"_image")->width}
  .textY={("ActionLabel."~#inst)->height / 2}
  .width={tiSumWidth(^inst=#inst)}
  .height={tiMaxHeight(^inst=#inst)}
>>

ActionLabelLayout.Llefttop<<
  .imageAnchor=_NW
  .imageX=0
  .imageY=0
  .textAnchor=_NW
  .textX={("ActionLabelImage."~#inst~"_image")->width}
  .textY=0
  .width={tiSumWidth(^inst=#inst)}
  .height={tiMaxHeight(^inst=#inst)}
>>

ActionLabelLayout.Lleftbottom<<
  .imageAnchor=_SW
  .imageX=0
  .imageY={("ActionLabel."~#inst)->height}
  .textAnchor=_SW
  .textX={("ActionLabelImage."~#inst~"_image")->width}
  .textY={("ActionLabel."~#inst)->height}
  .width={tiSumWidth(^inst=#inst)}
  .height={tiMaxHeight(^inst=#inst)}
>>

ActionLabelLayout.Lrightcenter<<
  .imageAnchor=_W
  .imageX={("ActionLabelText."~#inst~"_text")->width}
  .imageY={("ActionLabel."~#inst)->height / 2}
  .textAnchor=_W
  .textX=0
  .textY={("ActionLabel."~#inst)->height / 2}
  .width={tiSumWidth(^inst=#inst)}
  .height={tiMaxHeight(^inst=#inst)}
>>

ActionLabelLayout.Lrighttop<<
  .imageAnchor=_NW
  .imageX={("ActionLabelText."~#inst~"_text")->width}
  .imageY=0
  .textAnchor=_NW
  .textX=0
  .textY=0
  .width={tiSumWidth(^inst=#inst)}
  .height={tiMaxHeight(^inst=#inst)}
>>

ActionLabelLayout.Lrightbottom<<
  .imageAnchor=_SW
  .imageX={("ActionLabelText."~#inst~"_text")->width}
  .imageY={("ActionLabel."~#inst)->height}
  .textAnchor=_SW
  .textX=0
  .textY={("ActionLabel."~#inst)->height}
  .width={tiSumWidth(^inst=#inst)}
  .height={tiMaxHeight(^inst=#inst)}
>>

ActionLabelText.extends="Image"
ActionLabelText.Class<<
    .inst=""
    .states=["plain","hover"]
    .anchor={$$.parent->layout->textAnchor(^inst=$$.inst)}
    .x={$$.parent->layout->textX(^inst=$$.inst)}
    .y={$$.parent->layout->textY(^inst=$$.inst)}
    .layer=9
    .tabDefault=15
    .text={$$.parent->textValue}
    .enabled=false
    .new={
      Area.$.image="$$";
      Area.$.state={@("Area."~$$.inst~".state")}
    }
>>
ActionLabelImage.extends="Image"
ActionLabelImage.Class<<
    .inst=""
    .anchor={$$.parent->layout->imageAnchor(^inst=$$.inst)}
    .x={$$.parent->layout->imageX(^inst=$$.inst)}
    .y={$$.parent->layout->imageY(^inst=$$.inst)}
    .layer={$$.file == "" ? -1 : 9}
    .file={$$.parent->imageFile}
    .dataSource="Data.ModelUI";
    .enabled=false
>>
ActionLabel.extends="Image"
ActionLabel.Class<<
  .anchor=_S
  .inst="$"
  .layout={"ActionLabelLayout.L"~l10n($$.inst)->imagePlacement~l10n($$.inst)->imageAlignment}
  .width={$$.layout->width(^inst="$")}
  .height={$$.layout->height(^inst="$")}
  .textValue={l10n($$.inst)->text}
  .imageFile={l10n($$.inst)->imageFile}
  .enabled=false
  .new={
    ActionLabelText.$_text.parent="$$";
    ActionLabelText.$_text.inst={$$.inst};
    ActionLabelImage.$_image.parent="$$";
    ActionLabelImage.$_image.inst={$$.inst};
  }
>>

TrackUserAction={#arg!=""?(Data.UserTrack.parse=false;Data.UserTrack.url=#arg;Data.UserTrack.reset=true)}

ActionTrigger.extends=""
ActionTrigger.Class<<
  .inst="$"
  .script=""
  .subGroup=""
  .trackingURL=""
  .trackingAddress=""
  .onClick=""
  .subMembers=["$$"]
  .runnableInst="$"
  .actionType=""
  .jumpToTime=-1
  .runnable=false
  .hasScripts={^h=false;foreach(^elem="j";^in=$$.subMembers;^do={#j->script!=""?#h=true});^h}
  .updateRunnable={($$.runnable=($$.hasScripts&allPlayingScripts==[]))?(^w="";$$.runnableInst="";foreach(^elem="j";^in=$$.subMembers;^do={Scene.3d.testPreconditions(#j->script)?(#w=true,$$.runnableInst=#j->inst)});$$.runnable=^w)}
  .actionPress=false
  .new={
    Trigger.$.test={ActionTrigger.$.actionPress};
    Trigger.$.exec={allPlayingScripts==[]?foreach(^elem="i";^in=$$.subMembers;^do={#i->script!=""?((#i->actionType=="still"?(Scene.3d.playStartSlow(#i->script)?Scene.3d.jumpToTime(^script=#i->script;^time=#i->jumpToTime)):Scene.3d.playStartSlow(#i->script))?(TrackUserAction(#i->trackingURL);recordAction(#i->trackingAddress)))});$$.onClick()};
    Ticker.$_urun.exec={ActionTrigger.$.updateRunnable()};
    Ticker.$_urun.order=20;
  }
>>


ImageBorder.extends=""
ImageBorder.Class<<
  .thickness=1
  .color=black
  .shadowColor={$$.color}
  .highlightColor={$$.color}
  .borderFor="Image.$"
  .new={
    Image.$_bt.parent={ImageBorder.$.borderFor};
    Image.$_bt.buffer={ImageBorder.$.highlightColor};
    Image.$_bt.x=-1;
    Image.$_bt.y=-1;
    Image.$_bt.width={ImageBorder.$.borderFor->width+2};
    Image.$_bt.height=1;
    Image.$_bb.parent={ImageBorder.$.borderFor};
    Image.$_bb.buffer={ImageBorder.$.shadowColor};
    Image.$_bb.x=-1;
    Image.$_bb.y={ImageBorder.$.borderFor->height};
    Image.$_bb.width={ImageBorder.$.borderFor->width+2};
    Image.$_bb.height=1;
    Image.$_bl.parent={ImageBorder.$.borderFor};
    Image.$_bl.buffer={ImageBorder.$.highlightColor};
    Image.$_bl.x={0-Image.$_bl.width};
    Image.$_bl.y=-1;
    Image.$_bl.width=1;
    Image.$_bl.height={ImageBorder.$.borderFor->height+2};
    Image.$_br.parent={ImageBorder.$.borderFor};
    Image.$_br.buffer={ImageBorder.$.shadowColor};
    Image.$_br.x={ImageBorder.$.borderFor->width};
    Image.$_br.y=-1;
    Image.$_br.width=1;
    Image.$_br.height={ImageBorder.$.borderFor->height+2};
  }
>>

HotSpot.Class.enabled=true;

HotImage.extends=""
HotImage.Class<<
  .lineColor="ff0"
  .x={Scene.3d.absX+(($$.anchor=="_S"|$$.anchor=="_N")?Scene.3d.width/2:HotSpot.3d_$.x)+($$.anchorX>0?-22:22)}
  .y={Scene.3d.absY+(HotSpot.3d_$.y-$$.floatUpBy*(($$.anchor=="_SE"|$$.anchor=="_S"|$$.anchor=="_SW")?1:-1))}
  .floatUpBy=9
  .anchor={"_"~(HotSpot.3d_$.y>($$.height+$$.floatUpBy)?"S":"N")~(($$.width>Display.Primary.width/2)?"":((HotSpot.3d_$.x+Scene.3d.absX+$$.width>Display.Primary.width-25)?"E":"W"))}
  .offLayer=-1
  .layer={HotImage.$.forceShow|HotSpotButton.$.active&HotSpot.3d_$.hover?100:HotImage.$.offLayer}
  .showFlag={HotSpotButton.$.active&(l10n("$")->text!="")&!HotSpot.3d_$.hover}
  .enabled=false
  .buffer="cfff"
  .forceShow=false
  .textValue={"%Hot{"~l10n("$")->text~"}"}
  .dx={(Scene.3d.absX+HotSpot.3d_$.x)-$$.x}
  .dy={(Scene.3d.absY+HotSpot.3d_$.y)-$$.y-$$.height/2}
  .new={
    Image.HSIndicator.offsets=Image.HSIndicator.offsets++[{HotImage.$.showFlag?HotSpot.3d_$.x:_N},{HotSpot.3d_$.y}];
    Trigger.$_init.test={$$.layer>=0};
    Trigger.$_init.exec={$$.init()};
  }
  .init={
    ActionLabel.Hot.x={$$.x};
    ActionLabel.Hot.y={$$.y};
    ActionLabel.Hot.anchor={$$.anchor};
    ActionLabel.Hot.enabled={$$.enabled};
    ActionLabel.Hot.buffer={$$.buffer};
    ActionLabel.Hot.textValue={$$.textValue};
    ActionLabel.Hot.layer={$$.layer};
    ActionLabel.Hot.alpha=0;
    ActionLabel.Hot.inst="$";
    ActionLabel.Hot.rebuild=true;
    $$.width={ActionLabel.Hot.width};
    $$.height={ActionLabel.Hot.height};
    $$.anchorX={ActionLabel.Hot.anchorX};
    $$.anchorY={ActionLabel.Hot.anchorY};
    Anim.Hot_inout.attr="ActionLabel.Hot.alpha";
    Anim.Hot_inout.rate=2;
    Anim.Hot_inout.goal={$$.forceShow|HotSpot.3d_$.hover&Area.3d.hover&!Area.3d.press?1:0};
    ImageBorder.Hot.color={$$.lineColor};
    Image.Hot_br.width={($$.anchor==_SE|$$.anchor==_NE)?14:1};
    Image.Hot_bl.width={($$.anchor==_SW|$$.anchor==_NW)?14:1};
    Image.Hot_pt.enabled=false;
    Image.Hot_pt.parent="ActionLabel.Hot";
    Image.Hot_pt.layer={(!$$.forceShow|$$.anchor==_S|$$.anchor==_N|(ActionLabel.Hot.alpha<1))?-1:0};
    Image.Hot_pt.anchor=_C;
    Image.Hot_pt.x={$$.anchorX+($$.anchor==_SE|$$.anchor==_NE?10:-11)};
    Image.Hot_pt.y={$$.anchorY+($$.anchor==_SW|$$.anchor==_SE?-3:3)};
    Image.Hot_pt.buffer={$$.lineColor};
    Image.Hot_pt.width=5;
    Image.Hot_pt.height=5;
    Image.Hot_pt.scaleX=3;
    Image.Hot_pt.scaleY=3;
    Image.Hot_pt.m10={0-Image.Hot_pt.scaleX*Image.Hot_pt.sinAngle};
    Image.Hot_pt.angle={$$.anchor==_SE?115:$$.anchor==_NE?-115:$$.anchor==_SW?25:$$.anchor==_NW?-25:0};
  }
>>

allArmedHS=[]
Area.3d.cursor={allArmedHS==[]?"":_HAND}

HotSpotButton.extends=["HotSpotRT", "ActionTrigger"]
HotSpotButton.Class<<
  .actionPress={HotSpot.3d_$.enabled&HotSpot.3d_$.press}
  .active={($$.runnable|$$.script=="")&$$.mouseOver&HotSpot.3d_$.visible&allPlayingScripts==[]}
  .mouseOver=true
  .armed={$$.runnable&$$.mouseOver&HotSpot.3d_$.hover}
  .force=""
  .new={
    HotImage.$.buffer;
    Trigger.Block_$HS.test={Area.3d.press&!HotSpot.3d_$.press};
    Trigger.Block_$HS.exec={HotSpot.3d_$.enabled=false};
    Trigger.Unblock_$HS.test={!Area.3d.press};
    Trigger.Unblock_$HS.exec={HotSpot.3d_$.enabled=true};
    ChangeTrigger.Armed_$.test={$$.armed};
    ChangeTrigger.Armed_$.exec={$$.armed?(allArmedHS=allArmedHS++["$$"]):(allArmedHS=allArmedHS--["$$"])};
  }
>>

Style.Script<<
  .color=000
  .fontWeight=_BOLD
  .fontSize=12
  .marginBottom=1
>>

Image.ScriptButtons<<
  .layer={fullMode&!showProductList?20:-1}
  .anchor=_NE
  .x={Display.Primary.width-5-$$.width}
  .y=73
  .buffer={rightMenuBg}
  .width={^s=0;foreach(^elem="i";^in=buttonLayout;^do={#w=#i->right;#w>#s?(#s=#w)});^s+5}
  .height=312
>>

ScriptButton.extends=["ActionTrigger", "ActionLabel"]
ScriptButton.Class<<
  .xOffset=0
  .layer=1
  .bottom={$$.y+$$.height}
  .right={$$.x+$$.width}
  .anchor=_NW
  .tip={l10n($$.runnableInst)->tipText}
  .tipX={$$.right}
  .tipY={$$.y}
  .enabled={!showProductList&Scene.3d.enabled&allPlayingScripts==[]&$$.runnable}
  .showTip={Area.$.hover&$$.tip!=""&$$.enabled}
  .alpha={(!$$.hasScripts|$$.enabled)?1:0.25}
  .actionPress={Area.$.press}
  .place=-1
  .textValue={"%Script{%LinkBullet_#{\u25BA}"~l10n("$")->text~"}"}
  .trackingAddress={URLEncode(inEnglish("$")->text~" "~inEnglish($$.runnableInst)->tipText)}
  .new={
    $$.parent="Image.ScriptButtons";
    $$.place=scriptButtonCounter;
    $$.x={4+$$.xOffset};
    $$.y={$$.place==0?3:2+buttonLayout[$$.place-1]->bottom};
    scriptButtonCounter=scriptButtonCounter+1;
    buttonLayout[$$.place]="$$";
    Area.$.image="ScriptButton.$";
    Area.$.state={Area.$.hover?"hover":"plain"};
    Area.$.cursor=_HAND;
    Area.$.boxPick=true;
    Trigger.$_tip.test={Area.$.hover};
    Trigger.$_tip.exec={currentTip="$$"};
    Image.$_bg.parent="Image.ScriptButtons";
    Image.$_bg.layer=0;
    Image.$_bg.x=4;
    Image.$_bg.width={Image.ScriptButtons.width-4};
    Image.$_bg.y={$$.y};
    Image.$_bg.height={$$.height};
    Image.$_bg.buffer=white;
  }
>>

Image.ScriptTip<<
  .parent="Image.ScriptButtons"
  .text={"%Script{("~currentTip->tip~")}"}
  .layer={(currentTip=="")|!currentTip->showTip?-1:100}
  .x=0
  .y={currentTip->tipY}
  .anchor=_NE
  .enabled=false
>>

AppControlProductTitle.extends=""
AppControlProductTitle.Class<<
  .new={
    Image.ProductTitle.title={l10n("$")->text};
  }
>>
AppControlSection.extends=""
AppControlSection.Class<<
  .section=""
  .script=""
  .newControl={
    SectionButton.$.label={l10n("$")->section};
    SectionButton.$.sectionText={l10n("$")->text};
    $$.script!=""?(
      SectionScript.SScr_$.section="$";
      SectionScript.SScr_$.script={$$.script};
    );
    l10n("$")->imageFile!=""?(
      SectionGraphic.SGrp_$.section="$";
      SectionGraphic.SGrp_$.file={l10n("$")->imageFile};
      SectionGraphic.SGrp_$.anchor={#p=l10n("$")->imagePlacement;#p=="top"?_S:#p=="left"?_E:#p=="right"?_W:_N};
    );
  }
  .new={
    pendingControls[pendingControlsCounter]="$$";
    pendingControlsCounter=pendingControlsCounter+1;
  }
>>

AppControl.extends=""
AppControl.Class<<
  .inst="$"
  .subGroup=""
  .trackingURL=""
  .onClick=""
  .xOffset=0
  .script=""
  .actionType="anim"
  .jumpToTime=-1
  .newButton=""
  .newControl={
    processedControls[processedControlsCounter]="$$";
    processedControlsCounter=processedControlsCounter+1;
    ScriptButton.$.actionType=$$.actionType;
    ScriptButton.$.jumpToTime=$$.jumpToTime;
    ScriptButton.$.script=$$.script;
    ScriptButton.$.subGroup=$$.subGroup;
    ScriptButton.$.trackingURL=$$.trackingURL;
    ScriptButton.$.onClick={$$.onClick()};
  }
  .addAction={
    ScriptButton.$.subMembers=ScriptButton.$.subMembers++[#arg];
  }
  .new={
    pendingControls[pendingControlsCounter]="$$";
    pendingControlsCounter=pendingControlsCounter+1;
  }
>>
AppControlConfig.extends="AppControl"
AppControlConfig.Class<<
  .config=""
  .newControl=AppControl.Class.newControl+{
    Image.$_back.parent="Image.ScriptButtons";
    Image.$_back.width={Image.ScriptButtons.width-5};
    Image.$_back.height={Image.$.height-1};
    Image.$_back.y={Image.$.y+1};
    Image.$_back.buffer={SceneState.3d.Configuration==$$.config?"3ff0":"1000"};
  }
>>
pendingControls=[]
pendingControlsCounter=0
processedControls=[]
processedControlsCounter=0
processPendingControls={
  foreach(^elem="c"; ^in=pendingControls; ^do={
    #c->subGroup=="" ? #c->newControl() : (#mainC=@("sub_"~#c->subGroup))=="" ? (("sub_"~(#c->subGroup))=#c; #c->newControl()) : #mainC->addAction(#c);
  });
}

sidecarLayer={showProductList?-1:98}

AppControlSidecar.extends="ActionLabel"
AppControlSidecar.Class<<
  .anchor=_NW
  .x=10
  .y=93
  .script=""
  .color="ffc"
  .buffer="cfff"
  .textValue={"%Sidecar{"~l10n("$")->text~"}"}
  .pleaseShow=false
  .scriptRT={@("Scene.3d.script_"~$$.script)}
  .alpha=0
  .new={
    Anim.$_inout.attr="$$.alpha";
    Anim.$_inout.rate=0.5;
    Anim.$_inout.goal={$$.pleaseShow?1:0};
    ImageBorder.$.color={$$.color};
    Image.$_topBar.parent="$$";
    Image.$_topBar.buffer="eee";
    Image.$_topBar.width={$$.width};
    Image.$_topBar.height=16;
    Image.$_topBar.text={"%SidecarTitle{"~l10n("$")->titleText~"}"};
    Image.$_topBar.y=0;
    Image.$_topBar.layer=10;
    Image.$_topBar.anchor=_SW;
    ImageBorder.$_topBar.color={$$.color};
    Image.$_close.parent="$$";
    Image.$_close.anchor=_SE;
    Image.$_close.x={$$.width};
    Image.$_close.y=0;
    Image.$_close.layer=11;
    Image.$_close.dataSource=Image.Tools.dataSource;
    Image.$_close.file="close.gif";
    Image.$_close.states=["off","on"];
    Image.$_close.cursor=_HAND;
    Image.$_close.absEnabled=true;
    Area.$_close.image="Image.$_close";
    Area.$_close.boxPick=true;
    Area.$_close.state={Area.$_close.hover?"on":"off"};
    Trigger.$_show.test={$$.scriptRT!=""&$$.scriptRT->playing};
    Trigger.$_show.exec={$$.pleaseShow=true;$$.layer={sidecarLayer}};
    Trigger.$_hide.test={Area.$_close.press|(allPlayingScripts!=[]&(!$$.scriptRT->playing))};
    Trigger.$_hide.exec={$$.pleaseShow=false;$$.layer={sidecarLayer-1};Area.$_close.press?($$.alpha=0)};
    ChangeTrigger.$_on_reset.test={ResetSerial};
    ChangeTrigger.$_on_reset.exec={Trigger.$_hide.exec();$$.alpha=0}
  }
>>

AppHotSpot.extends=""
AppHotSpot.Class<<
  .inst="$"
  .script=""
  .actionType="anim"
  .jumpToTime=-1
  .alwaysVisible=false
  .location=["","",0,0,0,0]
  .mouseOver=true
  .force=""
  .trackingURL=""
  .onClick=""
  .color="ff0"
  .newHotSpot={
    HotSpotButton.$.actionType=$$.actionType;
    HotSpotButton.$.jumpToTime=$$.jumpToTime;
    HotSpotButton.$.script=$$.script;
    HotSpotButton.$.alwaysVisible=$$.alwaysVisible;
    HotSpotButton.$.location=$$.location;
    HotSpotButton.$.trackingURL=$$.trackingURL;
    HotSpotButton.$.onClick={$$.onClick()};
    HotSpotButton.$.mouseOver=$$.mouseOver;
    HotSpotButton.$.force=$$.force;
    HotImage.$.lineColor=$$.color;
    HotImage.$.forceShow={HotSpotButton.$.force!="" & @("SceneState.3d."~HotSpotButton.$.force[0])==HotSpotButton.$.force[1]};
    $$.mouseOver?(Image.HSIndicator.layer={allPlayingScripts==[]?1:-1});
  }
  .new={
    pendingHotSpots=pendingHotSpots ++ ["$$"];
  }
>>
pendingHotSpots=[]


AppHotSpotLarge.extends="AppHotSpot"
AppHotSpotLarge.Class<<
  .newHotSpot=AppHotSpot.Class.newHotSpot+{
    HotImage.$.textValue={"%HotLarge{"~l10n("$")->text~"}"}
  }
>>

AppHotSpotFixed.extends="AppHotSpot"
AppHotSpotFixed.Class<<
  .newHotSpot=AppHotSpot.Class.newHotSpot+{
    HotImage.$.anchor=_NW;
    HotImage.$.offLayer={$$.active?53:-1};
    HotImage.$.layer={HotImage.$.forceShow|HotSpotButton.$.active&HotSpot.3d_$.hover?54:HotImage.$.offLayer};
    HotImage.$.x={650 + 115};
    HotImage.$.y=74;
    Anim.$_inout.attr="HotImage.$.x";
    Anim.$_inout.rate=300;
    Anim.$_inout.goal={650 - 2 - (HotSpot.3d_$.hover&Area.3d.hover&!Area.3d.press?HotImage.$.width:-115)};
    Anim.$_inout.highPriority=true;
  }
>>

AppControlReset.extends=""
AppControlReset.Class<<
  .script=""
  .new={ResetScriptName={AppControlReset.$.script}}
>>

includeMeasure?Meson.addContextMenu(^applet="Applet.Primary",^label="Inches")
includeMeasure?Meson.addContextMenu(^applet="Applet.Primary",^label="Centimeters")
Trigger.GoInch.test={Applet.Primary.menuItem=="Inches"}
Trigger.GoInch.exec={unitsMul={Scene.3d.inch};unitsLabel={" "~l10n("in")}}
Trigger.GoCM.test={Applet.Primary.menuItem=="Centimeters"}
Trigger.GoCM.exec={unitsMul={Scene.3d.cm};unitsLabel={" "~l10n("cm")}}

includeMeasure?Meson.addContextMenu(^applet="Applet.Primary",^label="-")

Trigger.GoEn.test={Applet.Primary.menuItem==I18N.en.lang}; Trigger.GoEn.exec={language="en"}
Trigger.GoRu.test={Applet.Primary.menuItem==I18N.ru.lang}; Trigger.GoRu.exec={language="ru"}
Trigger.GoEs.test={Applet.Primary.menuItem==I18N.es.lang}; Trigger.GoEs.exec={language="es"}
Trigger.GoFr.test={Applet.Primary.menuItem==I18N.fr.lang}; Trigger.GoFr.exec={language="fr"}
Trigger.GoDe.test={Applet.Primary.menuItem==I18N.de.lang}; Trigger.GoDe.exec={language="de"}
Trigger.GoZh.test={Applet.Primary.menuItem==I18N.zh.lang}; Trigger.GoZh.exec={language="zh"}
Trigger.GoJa.test={Applet.Primary.menuItem==I18N.ja.lang}; Trigger.GoJa.exec={language="ja"}
Trigger.GoCs.test={Applet.Primary.menuItem==I18N.cs.lang}; Trigger.GoCs.exec={language="cs"}
Trigger.GoDa.test={Applet.Primary.menuItem==I18N.da.lang}; Trigger.GoDa.exec={language="da"}
Trigger.GoNl.test={Applet.Primary.menuItem==I18N.nl.lang}; Trigger.GoNl.exec={language="nl"}
Trigger.GoIt.test={Applet.Primary.menuItem==I18N.it.lang}; Trigger.GoIt.exec={language="it"}
Trigger.GoNo.test={Applet.Primary.menuItem==I18N.no.lang}; Trigger.GoNo.exec={language="no"}
Trigger.GoPl.test={Applet.Primary.menuItem==I18N.pl.lang}; Trigger.GoPl.exec={language="pl"}
Trigger.GoSv.test={Applet.Primary.menuItem==I18N.sv.lang}; Trigger.GoSv.exec={language="sv"}

l10n={@("I18N."~language~.~#arg)}
inEnglish={@("I18N.Class."~#arg)}

Scene.3d.dataSource="Data.Model"
Data.Model.scene="Scene.3d"
Scene.3d.antialias={Scene.3d.illustrationMode|(Data.Model.imagePercentLoaded>97)}
Scene.3d.textureIsDirty={!Scene.3d.illustrationMode?(Scene.3d.antialias?(Scene.3d.dirty=true):(Scene.3d.textureDirty=true))}
templateModelFile=""
singleModel?(templateModelFile="model.jar";Data.ModelUI.url="model_ui.jar";safeJSEval("setPrintFile('print.html')"))
haveProduct={templateModelFile!=""}
uiDone={
  processPendingControls();
  Data.Model.url=templateModelFile;
  (!singleModel)?(Data.Coll.url=serverPath(productModel)~"/collateral.txt");
}

setProduct={
  showSearchResults=false;
  #t=serverPath(#model)~"/model.jar";
  recentCategory=currentCategory;
  #t!=templateModelFile?(
    haveProduct?(
      #trip=[productModel,Image.ProductTitle.title,productPath];
      #push?(backList=[#trip]++backList);
      recentList=[#trip]++(recentList--[#trip]);
      Meson.length(recentList)>numRecent?recentList=recentList--[recentList[numRecent]];
    );
    #backList=backList;
    #recentList=recentList;
    /*!(Meson.isMac|isOpera)?Meson.showDocument(^applet="Applet.Primary",^target="_self",^url="#"~#model);*/
    safeJSEval("setPrintFile('"~serverPath(#model)~"/print.html')");
    #saveJI=Display.Primary.javaImage;
    #saveWordList=searchWordList;
    #saveDidSearch=didSearch;
    #saveRecentCat=recentCategory;
    haveProduct?restoreFromCheckpoint();
    Display.Primary.javaImage=#saveJI;
    searchWordList=#saveWordList;
    didSearch=#saveDidSearch;
    recentCategory=#saveRecentCat;
    templateModelFile=#t;
    /*productPath=#path;*/
    productModel=#model;
    backList=#backList;
    recentList=#recentList;
    Data.ModelUI.url=serverPath(#model)~"/model_ui.jar";
	Display.Primary.repaint();
    loadPathCategories();
  );
}

IndexData.extends="Data"
IndexData.Class<<
  .waitFor=""
  .stall={$$.waitFor==""?false:($$.waitFor->state!=_CLOSED)}
>>

lastIndexData=""
indexDataLoaded={lastIndexData==""?true:lastIndexData->state==_CLOSED}
loadPathCategories={
  ^prev="";
  foreach(^elem="i",^in=productPath,^do={
    #prev!=""?(("IndexData."~(#i)[0]~".waitFor")=#prev);
    ("IndexData."~(#i)[0]~".category")=(#i)[0];
    ("IndexData."~(#i)[0]~".url")=serverPath((#i)[1])~"/index.txt";
    #prev="IndexData."~(#i)[0];
    recentCategory=(#i)[0];
  });
  lastIndexData=^prev;
}

atUnknownLeaf={!singleModel&productModel!=""&productPath==[]}
Trigger.LoadLeaf.test={atUnknownLeaf}
Trigger.LoadLeaf.exec={("Data.Index"~productModel~.url)=serverPath(productModel)~"/index.txt"}
leafModelCategory={@("Product.Prod"~productModel~.category)}
Trigger.BuildPath.test={atUnknownLeaf&leafModelCategory!=""}
Trigger.BuildPath.exec={productPath=@("Category."~leafModelCategory~.path);loadPathCategories()}

Ticker.ProcessHotSpots.order={(pendingHotSpots==[] | Image.Tools.layer<0)?-1:1}
Ticker.ProcessHotSpots.exec={
  #hsInst=pendingHotSpots[0];
  pendingHotSpots=pendingHotSpots--[#hsInst];
  #hsInst->newHotSpot();
  pendingHotSpots==[]?(Scene.3d.dirty=true);
}

leftSib=""
Flag.extends="Image"
Flag.Class<<
  .anchor=_SW
  .leftSib=""
  .x={$$.leftSib==""?350:($$.leftSib->x+$$.leftSib->width+3)}
  .y=429
  .lang=""
  .file={$$.lang~".gif"}
  .layer=100
  .new={
    $$.leftSib=leftSib;
    leftSib="$$";
    Area.$.image="$$";
    Area.$.cursor=_HAND;
    Trigger.$p.test={Area.$.press};
    Trigger.$p.exec={language=$$.lang};
    Image.$tip.parent="$$";
    Image.$tip.x={$$.width/2};
    Image.$tip.anchor=_S;
    Image.$tip.text={"%ToolLabel{"~@("I18N."~$$.lang~.lang)~"}"};
    Image.$tip.layer={Area.$.hover?1:-1};
  }
>>
foreach(^elem="i",^in=flags,^do={"Flag."~#i~"Flag.lang"=#i})

Collateral.WhitePaper.title="WHITE PAPER"
Collateral.CustomerPresentation.title="CUSTOMER PRESENTATION"
Collateral.SpecSheet.title="SPEC SHEET"
I18N.Class<<
  .lang="English"
  .fontNarrow=["Arial Narrow","Arial","SansSerif"]
  .fontWide=["Arial","SansSerif"]
  .Move="Move"
  .Turn="Turn"
  .Measure="Measure"
  .Zoom="Zoom"
  .Reset="Reset"
  .in="inches"
  .cm="centimeters"
  .unitHint={(Meson.isMac?"\u2318":"Right")~" Click for Units"}
  .drag="Drag to Measure"
  .Next="Next"
  .Back="Back"
  .Close="Close"
  .backToProduct="Last Product Viewed"
  .clickContinue="Click to Continue"
  .hotSpotTip="Find Notes"
  .Print="Print"
  .PrintAll="Print All Sections"
  .PrintOne="Print This Section"
  .Search="Search"
  .ReSearch="Repeat Last Search"
  .SearchResults="Search Results"
  .searchTitle="Search Products"
  .matchThing="Matching Products"
  .feature="Feature"
  .competitor="Competitor"
  .importance="Importance"
  .style="Normal"
  .Catalog="Browse Products"
  .Info="Product Info"
  .Demo="Product Demo"
  .Features="PRODUCT\nFEATURES"
  .Advantages="PRODUCT\n   ADVANTAGES"
  .AboutUs="ABOUT US"
  .ContactUs="CONTACT US"
  .ProductDemo="PRODUCT\nDEMO" 
  .QuickLinks="QUICK LINKS"
  .10Minutes="Only have 10 minutes?  Top recommended documents for quick review:"
  .MoreInfo="Links to more information:"
  .linkHelp="Click Here to view in a new window, or Right Click to download"
  .RecentlyViewed="Recently Viewed"
>>

I18N.ru<<
  .lang="Русский"
  .Move="Двинь"
  .Turn="Вращай"
  .Measure="Меряй"
  .Zoom="Увеличь"
  .Reset="Сбрось"
  .in="Дюймов"
  .cm="Сантиметров"
  .unitHint={"Нажми "~(Meson.isMac?"\u2318 и":"правую")~" кнопку мыши для единиц измерения"}
  .drag="Нажми и потяни для измерения"
  .style="Tiny"
  .RecentlyViewed="Недавно Просмотренно"
  .Next="Следующая Стр."
  .Back="Предидыщая Стр."
  .Close="Закрыть"
  .backTo="Вернутся к"
  .clickContinue="Нажмите Для Продолжения"
  .hotSpotTip="Найти\nЗаметки"
  .PrintAll="Полная Распечатка"
  .PrintOne="Распечатка Секции"
  .feature="Характеристика"
  .competitor="Соперник"
  .importance="Важность"
  .Catalog="КАТАЛОГ ПРОДУКТОВ"
  .QuickLinks="КРАТКИЕ ССЫЛКИ"
  .10Minutes="У вас есть только 10 минут? Тогда, рекоммендуем просмотр следующих документов:"
  .MoreInfo="Ссылки на дополнительную информацию:"
  .linkHelp="Нажмите здесь для просмотра в новом окне, или нажмите правой кнопкой для загрузки"
>>
Collateral.WhitePaper.title_ru="ТЕХНОЛОГИЯ"
Collateral.CustomerPresentation.title_ru="ПОТРЕБИТЕЛЬСКАЯ ПРЕЗЕНТАЦИЯ"
Collateral.SpecSheet.title_ru="СПИСОК СПЕЦИФИКАЦИЙ"

I18N.es<<
  .lang="Español"
  .Move="Mover"
  .Turn="Rotar"
  .Measure="Medir"
  .Zoom="Tamaño"
  .Reset="Restablecer"
  .in="pulgadas"
  .cm="centímetros"
  .unitHint="Seleccionar unidades con botón derecho"
  .drag="Arrastrar para medir"
  .style="Tiny"
  .RecentlyViewed="Visto Recientemente"
>>
Collateral.WhitePaper.title_es="INFORME DE PRODUCTO"
Collateral.CustomerPresentation.title_es="PRESENTACIÓN PARA CLIENTES"
Collateral.SpecSheet.title_es="HOJA DE ESPECIFICACIONES"
I18N.es<<
  .Next="Siguiente"
  .Back="Anterior"
  .Close="Cerrar"
  .backTo="Volver a"
  .clickContinue="Haga clic para continuar"
  .hotSpotTip="Buscar\nnotas"
  .PrintAll="Imprimir todas las secciones"
  .PrintOne="Imprimir esta sección"
  .feature="Característica"
  .competitor="Competidores"
  .importance="Importancia"
  .Catalog="CATÁLOGO DE PRODUCTOS"
  .QuickLinks="VÍNCULOS RÁPIDOS"
  .10Minutes="¿Tiene sólo 10 minutos? Documentos clave recomendados para un análisis rápido"
  .MoreInfo="Vínculos para obtener más información"
  .linkHelp="Hacer clic aquí para abrir en una ventana nueva o Clic derecho para descargar"
>>

I18N.fr<<
  .lang="Français"
  .Move="Déplacer"
  .Turn="Rotation"
  .Measure="Mesure"
  .Zoom="Taille"
  .Reset="Rétablir"
  .in="pouces"
  .cm="centimètres"
  .unitHint="Clic bouton droit pour unités"
  .drag="Glisser pour mesurer"
  .style="Tiny"
  .RecentlyViewed="Rècemment Vu"
>>
Collateral.WhitePaper.title_fr="PAPIER BLANC"
Collateral.CustomerPresentation.title_fr="PRÉSENTATION DU CLIENT"
Collateral.SpecSheet.title_fr="FICHE TECHNIQUE"
I18N.fr<<
  .Next="Suivant"
  .Back="Retour"
  .Close="Fermer"
  .backTo="Retour à"
  .clickContinue="Cliquer pour continuer"
  .hotSpotTip="Chercher\nnotes"
  .PrintAll="Imprimer toutes les sections"
  .PrintOne="Imprimer cette section"
  .feature="Caractéristique"
  .competitor="Concurrent"
  .importance="Importance"
  .Catalog="CATALOGUE DE PRODUITS"
  .QuickLinks="LIENS RAPIDES"
  .10Minutes="Vous n'avez que 10 minutes? Meilleurs documents de révision rapide:"
  .MoreInfo="Liens vers informations supplémentaires:"
  .linkHelp="Cliquer ici pour afficher dans une nouvelle fenêtre ou cliquer avec le bouton droit pour télécharger"
>>

I18N.de<<
  .lang="Deutsch"
  .Move="Schwenken"
  .Turn="Rotieren"
  .Measure="Messen"
  .Zoom="Skalieren"
  .Reset="Rückstellen"
  .in="Zoll"
  .cm="Zentimeter"
  .unitHint="Rechtsklicken für Maßeinheiten"
  .drag="Zum Messen ziehen"
  .style="Tiny"
  .RecentlyViewed="Vor kurzem Angesehen"
>>
Collateral.WhitePaper.title_de="WEISSES PAPIER"
Collateral.CustomerPresentation.title_de="KUNDENVORFÜHRUNG"
Collateral.SpecSheet.title_de="TECHNISCHE DATEN"
I18N.de<<
  .Next="Weiter"
  .Back="Zurück"
  .Close="Schluss"
  .backTo="Zurück zu"
  .clickContinue="Zum Fortfahren klicken"
  .hotSpotTip="Anmerkungen\nsuchen"
  .PrintAll="Alle Abschnitte ausdrucken"
  .PrintOne="Diesen Abschnitt ausdrucken"
  .feature="Vortrag"
  .competitor="Mitbewerber"
  .importance="Zu beachten"
  .Catalog="ANGEBOTSKATALOG"
  .QuickLinks="SCHNELLANBINDUNG"
  .10Minutes="Sie haben nur 10 Minuten? Bevorzugte Unterlagen zur schnellen Durchsicht:"
  .MoreInfo="Verbindungen zu näheren Informationen"
  .linkHelp="Zur separaten Ansicht hier klicken oder mit Rechtsklick herunterladen"
>>

I18N.ja<<
  .lang="日本語"
  .fontNarrow=["SansSerif"]
  .fontWide=["SansSerif"]
  .Move="パン"
  .Turn="回転"
  .Measure="計測"
  .Zoom="ズーム"
  .Reset="リセット"
  .in="インチ"
  .cm="センチメートル"
  .unitHint="単位のための右のかちりと言う音"
  .drag="測定するべき抗力マウス"
  .style="Large"
  .RecentlyViewed="最近見られる"
>>
Collateral.WhitePaper.title_ja="ホワイトペーパー"
Collateral.CustomerPresentation.title_ja="お客様へのプレゼンテーション"
Collateral.SpecSheet.title_ja="仕様"
I18N.ja<<
  .Next="次へ"
  .Back="戻る"
  .Close="閉じる"
  .backTo="次に戻る..."
  .clickContinue="クリックして続行"
  .hotSpotTip="注釈を検索"
  .PrintAll="すべてのセクションを印刷"
  .PrintOne="このセクションを印刷"
  .feature="機能"
  .competitor="競合製品"
  .importance="キーポイント"
  .Catalog="製品カタログ"
  .QuickLinks="クイックリンク"
  .10Minutes="わずかな時間しかない方にも、一番お勧めの資料を簡単にご覧いただけます。"
  .MoreInfo="詳細情報へのリンク："
  .linkHelp="新しいウィンドウで表示するには、ここをクリック。ダウンロードには右クリック。"
>>

I18N.zh<<
  .lang="繁體中文"
  .fontNarrow=["SansSerif"]
  .fontWide=["SansSerif"]
  .Move="摇摆"
  .Turn="旋转"
  .Measure="测量"
  .Zoom="显示比例"
  .Reset="重设"
  .in="英寸"
  .cm="厘米"
  .unitHint="按右键为单位"
  .drag="阻力对措施"
  .style="Large"
>>

I18N.cs<<
  .lang="Česky"
  .Move="Přesunout"
  .Turn="Otočit"
  .Measure="Změřit"
  .Zoom="Zvětšit"
  .Reset="Obnovit\n(Reset)"
  .in="palců"
  .cm="centimetrů"
  .unitHint="Změnit jednotky klepnutím pravým tlačítkem myši"
  .drag="Táhnout a změřit"
  .style="Tiny"
>>

I18N.da<<
  .lang="Dansk"
  .Move="Flyt"
  .Turn="Drej"
  .Measure="Mål"
  .Zoom="Zoom"
  .Reset="Nulstil"
  .in="tommer"
  .cm="centimeter"
  .unitHint="Højreklik for enheder"
  .drag="Træk for at måle"
  .style="Normal"
>>

I18N.nl<<
  .lang="Nederlands"
  .Move="Verplaatsen"
  .Turn="Draaien"
  .Measure="Meten"
  .Zoom="Zoomen"
  .Reset="%TwoLine{Opnieuw\ninstellen}"
  .in="inches"
  .cm="centimeter"
  .unitHint="Klik op de rechtermuisknop om de maateenheden te wijzigen"
  .drag="Object meten"
  .style="Tiny"
>>

I18N.it<<
  .lang="Italiano"
  .Move="Sposta"
  .Turn="Gira"
  .Measure="Misura"
  .Zoom="Zoom"
  .Reset="Ripristina"
  .in="pollici"
  .cm="centimetri"
  .unitHint="Clicca col pulsante destro per le unità"
  .drag="Trascina per misurare"
  .style="Normal"
>>

I18N.no<<
  .lang="Norsk"
  .Move="Flytte"
  .Turn="Dreie"
  .Measure="Måle"
  .Zoom="Zoom"
  .Reset="Nullstille"
  .in="tommer"
  .cm="centimeter"
  .unitHint="Høyreklikk for enheter"
  .drag="Dra for å måle"
  .style="Normal"
>>

I18N.pl<<
  .lang="Polski"
  .Move="Przesunięcie"
  .Turn="Obrót"
  .Measure="Pomiar"
  .Zoom="Zbliżenie"
  .Reset="Reset"
  .in="cale"
  .cm="centymetry"
  .unitHint="Klikniecie prawym przyciskiem myszy w celu zmiany jednostek"
  .drag="Przeciągnięcie w celu pomiaru obiektu"
  .style="Tiny"
>>

I18N.sv<<
  .lang="Svenska"
  .Move="Flytta"
  .Turn="Vänd"
  .Measure="Mät"
  .Zoom="Zoom"
  .Reset="Återställ"
  .in="Tum"
  .cm="centimeter"
  .unitHint="Högerklicka för enhet"
  .drag="Dra för att mäta"
  .style="Normal"
>>

I18N.cs.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.cs.lang)
I18N.da.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.da.lang)
I18N.de.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.de.lang)
I18N.en.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.en.lang)
I18N.es.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.es.lang)
I18N.fr.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.fr.lang)
I18N.it.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.it.lang)
I18N.nl.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.nl.lang)
I18N.no.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.no.lang)
I18N.pl.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.pl.lang)
I18N.ru.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.ru.lang)
I18N.sv.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.sv.lang)
I18N.ja.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.ja.lang)
I18N.zh.showOnMenu?Meson.addContextMenu(^applet="Applet.Primary",^label=I18N.zh.lang)

language=Meson.language
language=="en"?Trigger.GoInch.exec():Trigger.GoCM.exec()
customizeUI()
restoreFromCheckpoint={
  #lang=language;
  ckpt=Meson.restore(ckpt);
  language=#lang;
  Data.CatIndex.url=catalog~"/index.txt"
}
#s=Data.Program.state;
Data.Program.state=_CLOSED;
Display.Primary.repaint();
(!singleModel)?(ckpt=Meson.checkpoint())
Data.Program.state=#s;
(!singleModel)?(Data.CatIndex.url=catalog~"/index.txt")
(!singleModel)?(startModel==""?(showProductList=true):setProduct(^model=startModel,^path=[],^push=true))
