var setup=[];
setup.cssfile="http://adbserver.com/inventory/client/orange.css";
setup.pagesizes=[5,10,25,50];
setup.site="showmerv";
setup.locale="USD";
setup.searchURL="http://www.adbserver.com/inventory/carlistsearch.php?site=showmerv&search=";
setup.viewURL="http://www.adbserver.com/inventory/viewupdate.php?site=showmerv&id=";
setup.emailURL="http://www.adbserver.com/inventory/emailsales.php?site=showmerv&id=";
setup.thumburl="http://www.adbserver.com/inventory/data/showmerv/thumbs/";
setup.picurl="http://www.adbserver.com/inventory/data/showmerv/pics/";
setup.picsize=600;
setup.licprod=true;
setup.showform=true;
setup.adverton=false;
setup.orderbyon=true;
setup.advert="powered by Inventory Data Base";
setup.advertURL="http://adbserver.com/";

var vehiclelist;
function DefineVehicles() {
	vehiclelist=[];
	vehiclelist[0]=new Vehicle(105, true, 2010, "Four Winds 30S-DSL Towable", 0, "", "", "c9049", 21178, []);
	vehiclelist[1]=new Vehicle(80, true, 2010, "Thor Four Winds 28BGS Travel Trailer", 0, "", "", "Stock # C9054|MSRP  $26,880|Sale Price:  $19,850", 19850, []);
	vehiclelist[2]=new Vehicle(81, true, 2010, "Thor Four Winds 26B-DSL Travel Trailer", 0, "", "", "Stock# C9055|MSRP  $27,336|Sale Price $19,749", 19749, []);
	vehiclelist[3]=new Vehicle(108, true, 2010, "Adventure 80GS  Truck Camper", 0, "", "", "c9086|This is the truck camper built for the 1/2 ton towable short bed trucks.  Yes this truck camper has a slide and weighs 1400 pounds.  We have this unit price with AC.  It has the happy jac electric wireless remote.  If you love to fish and hunt this is the camper to take the toys.", 18995, [417,418,419,420]);
	vehiclelist[4]=new Vehicle(84, true, 2010, "Thor Four Winds 29QGS travel trailer", 0, "", "", "Stock Number#C9073|Quad Bunk House / 30FT Long / 1/2 ton towable|Under $20,000", 18777, []);
	vehiclelist[5]=new Vehicle(59, true, 2010, "Aerolite 19FC Travel Trailer", 0, "", "", "Stock#C9077|Just Arrived|Light weight and all aluminum.", 16417, []);
	vehiclelist[6]=new Vehicle(55, true, 2010, "Dutchmen Aristocrat 25F travel trailer", 0, "", "", "Sold|New Just Arrived Travel Trailer by Dutchmen|Great Price", 13743, []);
	vehiclelist[7]=new Vehicle(101, true, 2011, "North Country 26RBS Travel Trailer", 0, "", "", "c9091|The North Country campers come standard with enclosed underbelly and heated tanks.  Yes the black tank flush is standard.  All the North Countries have 7ft deilings.  The drawers guides are steel ball bearings so they extend past the cabinet face for maximum usage.  These are just a few features you will get without paying extra for them.", 1, [390,391,392,393,394]);
	vehiclelist[8]=new Vehicle(97, true, 2011, "North Country 27BH Travel Trailer", 0, "", "", "c9096", 1, []);
	vehiclelist[9]=new Vehicle(99, true, 2011, "Edge Edge M18 Light Weight", 0, "", "", "Sold", 1, []);
	vehiclelist[10]=new Vehicle(100, true, 2011, "Elkridge 5th Wheel 27RLSS 5th Wheel", 0, "", "", "c9184", 1, []);
	vehiclelist[11]=new Vehicle(107, true, 2011, "Heartland Road Warrier 395 RW 5th Wheel Toy Hauler", 0, "sand dune", "", "c9099|Save Thousands and come see this 5th Wheel Toyhauler.|Electric landing jacks, 1/2 time convection Microwave ove, 8CU.FT. Refer, Chestnut Maple Cabinetry w/Glazed Doors, Solid Surface Countrertops, 12 Gallen Water Heater, 15,000 BTU A/C, 50 AMP service, wire and frame for 2nd A/C, Enclosed and Heated Underbelly, 1\" Thick insulated baggage doors, 16\" Aluminum wheels and tires, Heavy Duty Garage \"D\" Rings, Full Length Ball Bearing Drawer guides, Residential Glass Shower Enclosure, 20ft Roll out anwing, 88 degree turning ratio (patent pending) Ext hot and cold shower w/high pressure nozzle, generator preop w/30 gallen fuel station and timer, universal docking station , 32\" LCD flat Screen TV, 12V AM/FM stereo w/CD/DVD/MP3/MP4, multi-zone entertainment system, Jensen Jen X ceilling speakers (6), Marine grade exterior speakers (2), Mirrored solar reflected safety glass windows, EZ flex suspension,|Electic rear jacks|Warrior graphic package|Onan Generator|Electric Awning|Patio Sliding door|Hydraulic front landing Gear|Toy Lock|ABS Hitch Cover|Central Vauum|Fantastic Vent w/rain sensor in Kitchen IPO Pwer Vent|Rear Screen|Dual Beds in Cargo Area|beaver Tail Storage", 1, [380,381,382,383,384,385,386,387,388,389]);
	vehiclelist[12]=new Vehicle(103, true, 2011, "North Trail 31r Travel Trailer", 0, "", "", "This camper is all aluminum frame and has two inch thick walls.  The roof is arched and over 4 inches thick in the middle.  The floor and roof have been tested for over 1,500 pounds.  This is a true solid aluminum camper.  The bed is 78 inches long and has more storage for the front of the camper is rounded Vs. being flat.  North Trail is one of the fewultra lightweights to feature full-extension, steel ball-bearing drawer guides for maximum storage spac.  The camper has a true enclosed and heated underbelly.  The camper has front/rear electric jacks and power awning.  The outside black tank flush with high pressure valve will make cleaning your tank easy.  The counter tops are solid and radiuse.  There are some many standared features on this camper and at a great price.", 1, [373,374,375,376,377,378,379]);
	vehiclelist[13]=new Vehicle(109, true, 2011, "Heartland Focus FX18 Light weight", 0, "", "", "c9098|This is a light weight camper you have got to see.  Two in thick walls, inclosed underbelly, power awning, full extension, steel ball-bearing drawer guides.  Crowned roof so water doesn't sit on top and rated for over 1500 pounds.  Not only does this camper have the stronges roof but the floors are built the same way.  This is a easy camper to take on long trips.  The Focus is the best light weight camper built in the industry with a great price.", 1, [356,357,358,359,360]);
	vehiclelist[14]=new Vehicle(110, true, 2011, "Heartland Lakeside NC291RLS towable", 0, "", "", "c9097|This is one of the most popular travel trailers out.  This camper is aluminum framed with laminated fiberglass sidewalls.  It has a 5/8 floor decking.  The inside is 84 inches tall so you won't hit your head.  It has a full 3/8 walkable roof and a one piece rubber roof.  The slide is 73 inches tall so when you stand up you won't hit your head.  The camper comes standard with inclosed underbelly and black tank flush.  Solide surface counter tops, stainless steel sink, and ball bearing drawers that extend all the way out.", 1, [361,362,363,364,365,366,367]);
	vehiclelist[15]=new Vehicle(98, true, 2011, "Edge EDGE21 Light Weight", 0, "", "", "Sold|The Edge is the talk of the light weight camper lines.  The arched curved ceilings are 84 inches tall.  Traditionally to make a travel trailer lightweight you sacrificed style, storage, comfort and practicality.  Edge breaks the mold and re-defines the lightweight category with hi-style European inspired design, tons of storage and livable space, large seating and sleeping accommodations and a long list of featured components to make your vacation comfortable, relaxing and enjoyable.  The LED lighting stands out in traffic.  The Edge is outfitted with the largest basement storage inits class.  Engineered specifically for Edge the stamped steel frame provides a long lasting , lightweight, stable foundations.  Trianular holes are stamped out of the I beams to reduce weight and raise the strength to weight ratio in turn increasing the overall cargo carrying capacity.  The EURO Thermal pane windows completely open, or have night shade, or a screen, or half and half.", 1, [368,369,370,371,372]);
	vehiclelist[16]=new Vehicle(102, true, 2011, "North Country 29RKS Travel Trailer", 0, "", "", "c9092|This floor plan is one of the hottest travel trailiers in the country.  Room, Room, and more Room is what you get with this North Country.  All the North Countries come standard with enclosed underbelly, 7ft ceilings, outside black tank flush, steel ball bearing dreawer guides, built-in bike rack, and many many more features.  Don't let other companies charge you extra for these options when the North Country make them standard.  Come see this camper at ShowMe Campers and Boats.", 1, [395,396,397,398,399,400,401,402,403]);
	vehiclelist[17]=new Vehicle(104, true, 2011, "North Trail 21FBS Light Weight", 0, "", "", "c9190|We sold three of this floor plan at the RV show.  It will come standard with power awning, enclosed underbelly, front and rear electric jacks, outside black tank flush, and flat screen TV.  The walls are 2 inches thick and the floor and roof are even stronger that that.   The Owide Trax system is the most advanced light weight towing system on the market.  The full extension ball-bearing drawer guides", 1, [404,405,406,407,408]);
	vehiclelist[18]=new Vehicle(111, true, 2011, "North Trail  31BDSS Quad Bunk House", 0, "", "", "You want a quad bunk with lots of room this is the camper.  The North Trail by Heartland is a true all season camper with enclosed underbelly.  The walls are 2 inches thick.  This camper comes standard with front/rear electric jacks, power awning, and outside black tank flush.  The bed is 78 inches long.  There's two tables in this camper.  The kids have their own table or play room.   This camper will easily sleep 8+ people and have room to walk around.", 1, [409,410,411,412,413,414,415,416]);
	vehiclelist[19]=new Vehicle(112, true, 2011, "Heartland  32BUDS -NT North Trail", 0, "", "", "This is one of the hottest campers in the country.  This is the bunk house with the outside kitchen.  Just look at the options below.|Strongest laminaed crowned roof|Tinted safety glass|Wide Trax Suspension System|Electric Awning|Outside Shower|DVD Surround|Diamond Plate|Large viewing window in kitchen|Solid Surfice Countertops|Enclosed and heated underbelly|Night Shades|Porcelain Foot flush toilet|Black tank flush|Pull out bike rack|ball bearing drawer guides|Stainless steel sink|Alum. Wheels|20\" LCD TV|Electric Jacks", 1, []);
	vehiclelist[20]=new Vehicle(114, true, 2011, "Heartland Elkridge 34QSRL 5th Wheel", 0, "", "", "Here one of the 1# selling floor plans in the country for 5th Wheels.  This camper has 4 slides.  If your in the market you've got to come look at this 5th wheel and save money.  Below are some of the options.|88 Degree Tu8rning Radius Front cap, Equa-Flex Suspendsion from Trail Air, Aluminum 16\" Rims, Universal Docking Center, Rear Ladder, Oversize Full Return External Cargo Doors, Clean Titan External Storage Aereas, Twin 30#LP Bottles, Black Tank Flush, Large Entry Assist Grab Handle, Porch Light, External Awning Light Outlet, Doorside Cable/TV Jack w/outlet, black rimmed 80% Tinted Safety, Spare Tire and carrier, hitch light, power front jacks, rear jacks, extended hitch pin, hitch cover, diamond plate tool box, washer dryer prep, 2nd AC, cherry interior, ceiling fan, full ext. roller bearing drawer glides, microwave, night shades, oversize cabinets, porcelain commode w/foot flush, free standing dinette w/4 chairs, oversize coat closet, electic rear jacks, electric fireplace, electric awning and many more.", 1, []);
	vehiclelist[21]=new Vehicle(83, true, 2010, "Thor Four Winds 30SDSL Travel Trailer", 0, "", "", "Stock # C9049|MSRP $31,559", 1, []);
	vehiclelist[22]=new Vehicle(86, true, 2010, "Thor Four Winds 25CGS Travel Trailer", 0, "", "", "Sold|MSRP $24,391|Sale Price:  $17,865", 1, []);
	vehiclelist[23]=new Vehicle(92, true, 2010, "Adventurer 93FDS Truck Camper", 0, "", "", "c9074|ShowMe is proud to be Kansas Cities exclusive truck camper dealer.  Adventurer has been in business for over 40 years and is built in the USA.  Call us for the best pricing in the country.", 1, [421,422,423,424]);
	vehiclelist[24]=new Vehicle(95, true, 2010, "Adventurer 950BH Truck Campers", 0, "", "", "c9076|New just arrived bunk house truck camper.  The is the only truck camper bunk house built.  Adventurer has been in business for over 40 years and built in the USA.  ShowMe is Kansas Cities only truck camper dealer.  We have the best pricing in the country.", 1, []);
	vehiclelist[25]=new Vehicle(94, true, 2010, "Adventurer 86SBS Truck Camper", 0, "", "", "c9075|ShowMe is proud to be Kansas Cities exclusive truck camper headquarters.  Adventurer truck campers have been in business for over 40 years and built in the USA.  Come see these great truck campers.  We have the best pricing in the country.", 1, []);
	vehiclelist[26]=new Vehicle(88, true, 2010, "Starcraft 1019 popup popup", 0, "", "", "c9067|New just arrived Starcraft popup.  Starcraft and Jayco are built in the same factory.  Save money and call ShowMe at 816-847-3300.", 1, []);
	vehiclelist[27]=new Vehicle(67, true, 2010, "Starcraft 816SC popup", 0, "", "", "New Starcraft popup|Starcraft and Jayco are built in the same factory and the campers are the same.  We have the best pricing.", 1, []);
	vehiclelist[28]=new Vehicle(89, true, 2010, "Starcraft 1224 popup popup", 0, "", "", "New just arrived Starcraft popup with slide.  Starcraft and Jayco are built in the same factory.  Why pay more when ShowMe has the best pricing.  Call us at 816-847-3300", 1, []);
	vehiclelist[29]=new Vehicle(90, true, 2010, "Fourwinds 28BGS Bunk house", 0, "", "", "Sold|New just arrived 29.5ft bunkhouse under $20,000.  This has been a top seller all year.  This bunk house has two slides and is 1/2 ton towable.", 1, []);
	vehiclelist[30]=new Vehicle(62, true, 2010, "Starcraft 1019SC Popup", 0, "", "", "Stock# C9066|New Just Arrived Popup|Starcraft and Jayco are built in the same factory!!!   Save Money and Call us", 1, []);
	vehiclelist[31]=new Vehicle(87, true, 2010, "Starcraft 816 Popup popup", 0, "", "", "c9065 816 2010 Starcraft popup that just arrived.  Starcraft and Jayco are built in the same factory.  To save money call ShowMe on the best pricing.|816-847-3300", 1, []);
}
setup.searchon=true;



// Client JavaScript, (C)AutoDirector
var run=[];setup.comlimit=1000;setup.timeout=10000;setup.thisURL=location.protocol+"//"+location.host+(location.port!='' ? ":"+location.port:"")+location.pathname;setup.activesearch=false;setup.JSsearch=null;setup.activesend=false;setup.JSsend=null;setup.senderror='';setup.salesemail='';setup.divs=['licence','search','jumptop','list','jumpend','backtop','vehicle','enqresult','enquiry','backend','sponsor'];
if(setup.orderbyon||setup.searchon){setup.Tsearch='<form id="adsearch" action="'+setup.thisURL+'" method="get"><fieldset><legend>search</legend>'
setup.Tsearch+='<div class="order"><label for="adorderby" title="change the vehicle order">order by:</label><select id="adorderby" name="adorderby"></select></div>';
if(setup.searchon) setup.Tsearch+='<div class="search"><label for="adsearchterm" title="search for a vehicle">search:</label><input id="adsearchterm" name="adsearchterm" type="text" size="20" maxlength="50" /><input type="submit" value="go" class="button" /></div>';
setup.Tsearch+='</fieldset></form>';}
else setup.Tsearch='';
setup.Tlist='<a id="ad_id[id]" href="#" title="click for more details...">[pic]<dl><dt class="model">model:</dt><dd class="model">[newcar] [year] [model]</dd><dt class="colour">'+(setup.locale=='USD' ? 'color':'colour')+':</dt><dd class="colour">[colour]</dd><dt class="gearbox"></dt><dd class="gearbox">[gearbox]</dd><dt class="mileage"></dt><dd class="mileage"></dd></dl><div class="price">[price]</div></a>';
setup.Tlistnone='<p>No vehicles are available at this time. Please return later.</p>';
setup.Tdetail='[pics]<dl><dt class="model">model:</dt><dd class="model">[newcar] [year] [model]</dd><dt class="colour">'+(setup.locale=='USD' ? 'color':'colour')+':</dt><dd class="colour">[colour]</dd><dt class="gearbox">'+(setup.locale=='USD' ? 'transmission':'gearbox')+':</dt><dd class="gearbox">[gearbox]</dd><dt class="mileage"></dt><dd class="mileage"></dd><dt class="details">details:</dt><dd class="details">[info]</dd></dl><div class="price">[price]</div><img src="'+setup.viewURL+'[id]" class="count" />';
setup.Tdetailnone='The vehicle you requested is not available. Please return to the showroom.';
setup.Tenquiry='<form id="adenquiry" action="'+setup.thisURL+'" method="get"><fieldset><legend>contact us about this vehicle</legend><div><label for="adname" title="enter your name">name:</label><input id="adname" name="adname" type="text" size="20" maxlength="50" /></div><div><label for="ademail" title="enter your email address">email:</label><input id="ademail" name="ademail" type="text" size="20" maxlength="100" /></div><div><label for="adtel" title="enter your telephone number">telephone:</label><input id="adtel" name="adtel" type="text" size="20" maxlength="20" /></div><div><label for="adcomments" title="enter any questions or comments">questions:</label><textarea id="adcomments" name="adcomments" rows="4" cols="20"></textarea></div><div><input type="submit" value="send enquiry" class="button" /></div></fieldset></form>';
setup.Tback='<a href="#">&lt;back to the showroom</a>';
setup.Tsponsor="";
if(setup.adverton!=""){setup.Tsponsor+=setup.advert;
if(setup.advertURL !="") setup.Tsponsor='<a href="'+setup.advertURL+'">'+setup.Tsponsor+'</a>';}
setup.Tunlic='This showroom is powered by an unlicenced trial copy of AutoDirector. You may evaluate the AutoDirector system for 30 days. To remove this message, please visit <a href="http://www.autodirector.co.uk/">http://www.autodirector.co.uk/</a> and purchase a licence key.';
var sortTypes=[];var st=0;
sortTypes[st++]={name: "price, highest first", sort: function(a, b){return SortCars(a.price, b.price, -1);}}
sortTypes[st++]={name: "price, lowest first", sort: function(a, b){return SortCars(a.price, b.price, 1);}}
sortTypes[st++]={name: "make/model, A to Z", sort: function(a, b){return SortCars(a.model, b.model, 1);}}
sortTypes[st++]={name: "make/model, Z to A", sort: function(a, b){return SortCars(a.model, b.model, -1);}}
sortTypes[st++]={name: "year, youngest first", sort: function(a, b){return SortCars(a.year, b.year, -1);}}
sortTypes[st++]={name: "year, oldest first", sort: function(a, b){return SortCars(a.year, b.year, 1);}}
sortTypes[st++]={name: "search result", sort: function(a, b){return SortCars(a.searchrank, b.searchrank, -1);}}
sortTypes[st++]={name: "search (reversed)", sort: function(a, b){return SortCars(a.searchrank, b.searchrank, 1);}}
function SortCars(a, b, asc){if(a<b) return -1*asc;if(a>b) return 1*asc;return 0;}
function ADstart(){if(setup.cssfile!="") DOM.LoadCSS(setup.cssfile);
setup.adnode=DOM.Id("autodirector");DefineVehicles();DefineDefaults();DefineNodes();var list=run.list;
if(!setup.orderbyon&&!setup.searchon) ShowVehicleList();
else{var adorderby=DOM.Id("adorderby");
var adsearchterm=DOM.Id("adsearchterm");
if(adsearchterm&&run.searchresult==null){list=true;adsearchterm.value=run.search;run.search="";EventSearchSubmit();}
else if(adorderby){var page=run.thispage;adorderby.value=run.orderby;EventChangeOrder();
if(run.thispage!=page){run.thispage=page;ShowVehicleList();}}}
if(!list&&run.ID>0){var id=run.ID;run.ID=0;ShowVehicle(id);}
else run.ID=0;}
function DefineDefaults(){var adcs=[];adcs.LoadAll("adcs");
var adqs=HTTParguments();var Define=function(name, def){var ret=def;if(adcs.Exists(name)) ret=adcs[name];if(adqs.Exists(name)) ret=adqs[name];
return ret;}
run.ID=Define("id", 0).toInt();run.list=(Define("list", true)==true);
if(run.ID>0&&run.list==true&&adqs.Exists('id')&&!adqs.Exists('list')) run.list=false;
run.orderby=Define("orderby", 0).toInt();run.pagesize=Define("pagesize", setup.pagesizes[0]).toInt();run.thispage=Define("thispage", 1).toInt();run.name=Define("name", "");run.email=Define("email", "");run.tel=Define("tel", "");run.comments=Define("comments", "");run.scrollpos=Define("scrollpos", 0).toInt();
var sext=(adqs.Exists("search") ? adqs.search:"");var sint=(adcs.Exists("search") ? adcs.search:"");if(sext!=""&&setup.searchon){run.orderby=(setup.orderbyon ? sortTypes.length-2:0);run.list=true;}
if(sext!=""&&sext!=sint){run.search=sext;run.searchresult=null;}
else{run.search=sint;run.searchresult=Define("searchresult", "");
if(run.searchresult!="") run.searchresult=run.searchresult.split(',');
else for(var v=0;v<vehiclelist.length;v++) run.searchresult[v]=vehiclelist[v].id;
UpdateSearchResult();}}
function SaveDefaults(){run.StoreAll("adcs");}
function DefineNodes(){DOM.RemoveChildren(setup.adnode);
var node;for(var i=0;i<setup.divs.length;i++){node=document.createElement("div");
node.id="autodirector_"+setup.divs[i];setup["node"+setup.divs[i]]=setup.adnode.appendChild(node);setup["node"+setup.divs[i]].style.display="none";}
if(!setup[String.fromCharCode(108,105,99,112,114,111,100)]){var unl=setup[String.fromCharCode(84,117,110,108,105,99)];
var unn=setup['node'+'li'+'ce'+'nce'];
if(unl.substr(31,5)=='un'+'li'+'c') DOM.NodeAdd(unn, unl);
else DOM.NodeAdd(unn, String.fromCharCode(85,78,76,73,67,69,78,67,69,68));
var us=unn.style;
us.position="static";us.display="block";us.visibility="visible";
us.width="auto";us.height="auto";
us.fontSize="1.2em";us.fontWeight="bold";us.textAlign="center";
us.padding="0.5em";us.marginBottom="0.5em";
us.color='#c00';us.backgroundColor='#ffc';us.border='3px solid #c00';}
if(setup.orderbyon||setup.searchon){DOM.NodeAdd(setup.nodesearch, setup.Tsearch);
var adorderby=DOM.Id("adorderby");
if(adorderby){var opt;for(var s=(setup.orderbyon ? 0:sortTypes.length-2);s<sortTypes.length - (setup.searchon ? 0:2);s++){opt=document.createElement("option");
opt.setAttribute("value", s);
opt.appendChild(document.createTextNode(sortTypes[s].name));
adorderby.appendChild(opt);}
adorderby.value=run.orderby;
new Event(adorderby, "change", EventChangeOrder);}
var adsearch=DOM.Id("adsearch");
if(adsearch) new Event(adsearch, "submit", EventSearchSubmit);}
if(setup.showform){DOM.NodeAdd(setup.nodeenquiry, setup.Tenquiry);
DOM.Id("adname").value=run.name;DOM.Id("ademail").value=run.email;DOM.Id("adtel").value=run.tel;DOM.Id("adcomments").value=run.comments;
new Event(DOM.Id("adenquiry"), "submit", EventSendEnquiry);new Event(DOM.Id("adcomments"), "keypress", EventLimitComments);}
DOM.NodeAdd(setup.nodebacktop, setup.Tback);DOM.NodeAdd(setup.nodebackend, setup.Tback);
if(setup.Tsponsor!=""){DOM.NodeAdd(setup.nodesponsor, setup.Tsponsor);setup.nodesponsor.style.display="block";}
new Event(setup.nodelist, "click", EventVehicleClick);new Event(setup.nodejumptop, "click", EventPageClick);new Event(setup.nodejumpend, "click", EventPageClick);new Event(setup.nodevehicle, "click", EventVehicleImageClick);new Event(DOM.Tags("a", setup.nodebacktop)[0], "click", EventBackClick);
new Event(DOM.Tags("a", setup.nodebackend)[0], "click", EventBackClick);}
function ShowVehicleList(render){run.list=true;render=(render !== false);var show="list";
if(vehiclelist.length>0){if(setup.orderbyon||setup.searchon) show+=",search";show+=",jumptop,jumpend";
var pages=Math.floor((vehiclelist.length-1) / run.pagesize)+1;
if(run.thispage>pages) run.thispage=pages;
if(render){var vs=(run.thispage-1) * run.pagesize;
var ve=vs+run.pagesize-1;
if(ve>vehiclelist.length-1) ve=vehiclelist.length-1;
var list="";
for(var v=vs;v<=ve;v++) list+=vehiclelist[v].Replace(setup.Tlist);
DOM.NodeAdd(setup.nodelist, list, true);
var pagelist='<p>'+vehiclelist.length+' vehicle'+(vehiclelist.length>1 ? 's':'')+': show ';
for(var s=0;s<setup.pagesizes.length;s++){pagelist+='<a href="#*'+setup.pagesizes[s]+'"'+(run.pagesize==setup.pagesizes[s] ? ' class="active"':'')+'>'+setup.pagesizes[s]+'</a>';
if(s+2<=setup.pagesizes.length) pagelist+=(s+2==setup.pagesizes.length ? ' or ':', ');}
pagelist+=" per page</p>";
if(pages>1){pagelist+="<ol>";
if(run.thispage>1) pagelist+='<li><a href="#-1" class="back" title="previous page">&lt;back</a></li>';
for(var p=1;p<=pages;p++){pagelist+='<li><a href="#'+p+'" title="page '+p+'"'
if(p==run.thispage) pagelist+=' class="active"';
pagelist+='>'+p+'</a></li>';}
if(run.thispage<pages) pagelist+='<li><a href="#+1" class="next" title="next page">next &gt;</a></li>';
pagelist+="</ol>";}
DOM.NodeAdd(setup.nodejumptop, pagelist, true);
DOM.NodeAdd(setup.nodejumpend, pagelist, true);}}
else{if(render) DOM.NodeAdd(setup.nodelist, setup.Tlistnone, true);}
ShowNodes(show);
SaveDefaults();}
function ShowVehicle(id){run.list=false;
var show='vehicle,backtop,backend';
var sform=setup.showform;
if(id!=run.ID){run.ID=id;
var vIndex=VehicleIndex(id);
if(vIndex>=0) DOM.NodeAdd(setup.nodevehicle, vehiclelist[vIndex].Replace(setup.Tdetail), true);
else{run.ID=0;
DOM.NodeAdd(setup.nodevehicle, setup.Tdetailnone, true);
sform=false;}}
if(sform) show+=',enquiry';
ShowNodes(show);Graphic.PositionViewport("autodirector", 0, 30);SaveDefaults();}
function ShowNodes(list){for(var n=1;n<setup.divs.length-1;n++) setup["node"+setup.divs[n]].style.display=(list.indexOf(setup.divs[n])>=0 ? "block":"none");}
function VehicleIndex(id){var i=0;
while (id!=vehiclelist[i].id&&i<vehiclelist.length-1) i++;
return (vehiclelist[i].id==id ? i:-1);}
function UpdateSearchResult(){vehiclelist.sort(sortTypes[0].sort);
var nv=vehiclelist.length;var vi;
for(var v=0;v<nv;v++){vi=0;
while (vehiclelist[v].id!=run.searchresult[vi]&&vi<run.searchresult.length) vi++;
vehiclelist[v].searchrank=(vehiclelist[v].id==run.searchresult[vi] ? nv-vi:-v);}}
function Vehicle(id, newcar, year, model, mileage, colour, gearbox, info, price, pics){this.id=id;
this.newcar=(newcar ? "NEW":"");
this.year=year.toInt();
this.model=model;
this.colour=(colour!="" ? colour:"&nbsp;");
this.gearbox=(gearbox!="" ? gearbox:"&nbsp;");
this.info="|"+info+"|";
this.info=reRepeat(this.info, /\|\-+\|/g, "|<hr />|");
this.info=reRepeat(this.info, /\|-([^\|]+)\|/g, "|<h2>$1</h2>|");
this.info=reRepeat(this.info, /\_([^\|]+)\_/g, "{{strong}}$1{{/strong}}");
this.info=reRepeat(this.info, /!\(([^\||\(]+)\)/g, '{{img src="$1" /}}');
this.info=reRepeat(this.info, /\[([^\||\[]+)\]\(\(([^\||\(]+)\)\)/g, '{{a href="$2"}}$1{{/a}}');
this.info=reRepeat(this.info, /\(\(([^\||\(]+)\)\)/g, '{{a href="$1"}}$1{{/a}}');
this.info=reRepeat(this.info, /\|\*([^\|]+)\|/g, "|<li>$1</li>|");
this.info=reRepeat(this.info, /\|\+([^\|]+)\|/g, "|<liN>$1</liN>|");
this.info=reRepeat(this.info, /\|([^\<][^\|]+)\|/g, "|<p>$1</p>|");
this.info=reRepeat(this.info, /<\/li>\|<li>/g, "</li><li>");
this.info=reRepeat(this.info, /<\/liN>\|<liN>/g, "</liN><liN>");
this.info=reRepeat(this.info, /\|(<li>[^\|]+<\/li>)\|/g, "|<ul>$1</ul>|");
this.info=reRepeat(this.info, /\|(<liN>[^\|]+<\/liN>)\|/g, "|<ol>$1</ol>|");
this.info=reRepeat(this.info, /liN>/g, "li>");
this.info=reRepeat(this.info, /\{\{/g, "<");
this.info=reRepeat(this.info, /\}\}/g, ">");
this.info=reRepeat(this.info, /\|/g, "");
this.price=(price!=null ? price.toInt():null);
this.pics=pics;
this.searchrank=0;}
function reRepeat(str, regex, rep){var ostr;
do {ostr=str;str=str.replace(regex, rep);} while (str!=ostr);
return str;}
Vehicle.prototype.Replace=function(template){template=template.replace(/\[id\]/gi, this.id);
template=template.replace(/\[newcar\]/gi, this.newcar);
template=template.replace(/\[year\]/gi, this.year);
template=template.replace(/\[model\]/gi, this.model);
template=template.replace(/\[colour\]/gi, this.colour);
template=template.replace(/\[gearbox\]/gi, this.gearbox);
template=template.replace(/\[info\]/gi, this.info);
var price;
switch(this.price){case null: price="Call for Price";break;
case 1: price="please call";break;
default: price=this.price.format(0,true);}
template=template.replace(/\[price\]/gi, price);
if(this.pics.length>0){template=template.replace(/\[pic\]/gi, '<img src="'+setup.thumburl+this.pics[0]+'.jpg" title="'+this.model+'" />');
var pics="<ol>";
for(var p=0;p<this.pics.length;p++) pics+='<li><img src="'+setup.thumburl+this.pics[p]+'.jpg" alt="'+this.model+' picture" title="'+this.model+' picture '+(p+1)+' - click to enlarge..." /></li>';
pics+="</ol>";
template=template.replace(/\[pics\]/gi, pics);}
else{template=template.replace(/\[pic\]/gi, '');
template=template.replace(/\[pics\]/gi, '');}
return template;}
function EventVehicleClick(evt){evt.Raised.StopDefaultAction();
run.scrollpos=Graphic.ViewportScrollY();
var node=DOM.ParentFind(evt.Raised.Element, "a");
var id=(node ? String(node.id).substr(5).toInt():0);
if(id>0) ShowVehicle(id);}
function EventChangeOrder(evt){if(evt) evt.Raised.StopDefaultAction();
var adorderby=DOM.Id("adorderby");
if(adorderby){Graphic.ClassApply(adorderby.parentNode, "active");
run.orderby=adorderby.value;
vehiclelist.sort(sortTypes[run.orderby].sort);
var adsearchterm=DOM.Id("adsearchterm");
if(adsearchterm){if(run.orderby>=sortTypes.length-2) adsearchterm.value=run.search;
else adsearchterm.value="";}
run.thispage=1;
ShowVehicleList();
Graphic.ClassRemove(adorderby.parentNode, "active");
Graphic.PositionViewport("autodirector", 0, 30);}}
function EventSearchSubmit(evt){if(evt) evt.Raised.StopDefaultAction();
var adsearchterm=DOM.Id("adsearchterm");
if(!setup.activesearch&&adsearchterm){var sterm=adsearchterm.value.Clean();
if(sterm.length>0){if(sterm==run.search){DOM.Id("adorderby").value=sortTypes.length-2;
EventChangeOrder();}
else{setup.activesearch=true;
run.search=sterm;
adsearchterm.value=run.search;
Graphic.ClassApply(adsearchterm.parentNode, "active");
if(setup.JSsearch) DOM.HeadRemove(setup.JSsearch);
setup.JSsearch=DOM.LoadJS(setup.searchURL+escape(run.search)+"&callback=EventSearchResult()");
setTimeout(EventSearchTimeout, setup.timeout);}}}}
function EventSearchResult(){SearchReset();
UpdateSearchResult();
DOM.Id("adorderby").value=sortTypes.length-2;
EventChangeOrder();}
function EventSearchTimeout(){if(setup.activesearch){SearchReset();
DOM.HeadRemove(setup.JSsearch);
setup.JSsearch=null;
run.search="";
alert("Sorry, but your search is taking too long.\nPlease try again later.");}}
function SearchReset(){Graphic.ClassRemove(DOM.Id("adsearchterm").parentNode, "active");
setup.activesearch=false;}
function EventPageClick(evt){evt.Raised.StopDefaultAction();
var node=DOM.ParentFind(evt.Raised.Element, "a");
if(node){var href=node.getAttribute("href");
var h=href.lastIndexOf("#");
if(h>=0){var num=href.substr(h+1);
var sign=num.charAt(0);
var ps=(sign=="*");
var inc=(sign=="-"||sign=="+");
num=num.toInt();
if(ps){if(num!=run.pagesize){run.pagesize=num;
ShowVehicleList();}}
else{var newpage=(inc ? run.thispage+num:num);
if(run.thispage!=newpage){run.thispage=newpage;
ShowVehicleList();
Graphic.PositionViewport("autodirector", 0, 30);}}}}}
function EventVehicleImageClick(evt){var eNode=evt.Raised.Element;
if(eNode.nodeName.toLowerCase()!="a"&&eNode.parentNode.nodeName.toLowerCase()!="a"){evt.Raised.StopDefaultAction();
if(eNode.nodeName.toLowerCase()=="img"&&eNode.title) PopupImage(String(eNode.src).replace(new RegExp(setup.thumburl), setup.picurl));}}
function EventBackClick(evt){evt.Raised.StopDefaultAction();
if(!setup.activesend) ShowVehicleList(false);
window.scrollTo(0, run.scrollpos);}
function EventSendEnquiry(evt){evt.Raised.StopDefaultAction();
if(!setup.activesend){var msg="";
var hl=false;var nComments=DOM.Id("adcomments");run.comments=nComments.value.Trim().replace(/\r/g, "").replace(/\n/g, "\n");var oc;
do{oc=run.comments;
run.comments=run.comments.replace(/\n\n/g, "\n");} while (run.comments!=oc);
run.comments=run.comments.substr(0, setup.comlimit);
nComments.value=run.comments;
var nTel=DOM.Id("adtel");
run.tel=nTel.value.Trim();nTel.value=run.tel;
var nEmail=DOM.Id("ademail");
run.email=nEmail.value;
if(run.email!=""){run.email=verify_email(run.email);
if(run.email==""){msg="\t - a valid email address\n"+msg;hl=nEmail;}
else nEmail.value=run.email;}
if(run.email==""&&run.tel==""&&msg==""){msg=" - an email address or telephone number";hl=nEmail;}
var nName=DOM.Id("adname");
run.name=nName.value.Clean();nName.value=run.name;
if(run.name.length<4){msg=" - your name\n"+msg;hl=nName}
if(hl){alert("Please enter:\n"+msg);
try {hl.select();} catch(e){}
try {hl.focus();} catch(e){}}
else{setup.activesend=true;
setup.nodeenquiry.style.display="none";
Graphic.ClassApply(setup.nodeenqresult, "active");
DOM.SetText(setup.nodeenqresult, "sending your enquiry...");
setup.nodeenqresult.style.display="block";
var send=setup.emailURL+run.ID;
send+="&callback=EventSendResult()";
send+="&url="+escape(setup.thisURL);
send+="&name="+escape(run.name);
send+=(run.email!="" ? "&email="+escape(run.email):"");
send+=(run.tel!="" ? "&tel="+escape(run.tel):"");
send+=(run.comments!="" ? "&comments="+escape(run.comments):"");
if(setup.JSsend) DOM.HeadRemove(setup.JSsend);
setup.JSsend=DOM.LoadJS(send);
setTimeout(EventSendTimeout, setup.timeout);
SaveDefaults();}}}
function EventSendResult(){SendReset();
var msg='';
switch (setup.senderror){case '': msg+="Your enquiry was sent successfully. We will contact you shortly.";break;
case 'noemail':msg+="Sorry, but your enquiry could not be sent at this time. Please try again later";if(setup.salesemail!='') msg+=" or contact us at "+setup.salesemail+" directly";msg+=".";setup.nodeenquiry.style.display="block";break;
default:msg+="Sorry, but there was a technical problem with your enquiry.";
if(setup.salesemail!='') msg+=" Please contact us at "+setup.salesemail+" directly.";break;}
DOM.SetText(setup.nodeenqresult, msg);}
function EventSendTimeout(){if(setup.activesend){SendReset();
DOM.HeadRemove(setup.JSsend);setup.JSsend=null;
DOM.SetText(setup.nodeenqresult, "Sorry, but your enquiry is taking too long. Please try again later.");
setup.nodeenquiry.style.display="block";}}
function SendReset(){Graphic.ClassRemove(setup.nodeenqresult, "active");
setup.activesend=false;}
function EventLimitComments(evt){var key=evt.Raised.Key;
if(evt.Raised.Element.value.length>setup.comlimit) evt.Raised.Element.value=evt.Raised.Element.value.substr(0, setup.comlimit);
if(evt.Raised.ControlKey==''&&key.length+evt.Raised.Element.value.length>setup.comlimit) evt.Raised.StopDefaultAction();}
function PopupImage(img){var scnWidth=(screen.availWidth ? screen.availWidth:640);
var scnHeight=(screen.availHeight ? screen.availHeight:480);
var size=setup.picsize+20;
var win=window.open(img, "", "width="+size+",height="+size+",left="+Math.floor((scnWidth-size)/2)+",top="+Math.floor((scnHeight-size)/2)+",location=0,directories=0,menubar=0,toolbar=0,status=0,scrollbars=0,resizable=1");
var cImage=new Image;cImage.src=img;
if(cImage.complete) PopupImageResize(win, cImage);
else new Event(cImage, "load", function(evt){evt.Detach();PopupImageResize(win, cImage);});}
function PopupImageResize(win, cImage){var imgWidth=cImage.width+30;
var imgHeight=cImage.height+70;
var scnWidth=(screen.availWidth ? screen.availWidth:640);
var scnHeight=(screen.availHeight ? screen.availHeight:480);
if(scnWidth>imgWidth&&scnHeight>imgHeight){try {win.resizeTo(imgWidth, imgHeight);} catch(e){}
try {win.moveTo(Math.floor((scnWidth-imgWidth)/2), Math.floor((scnHeight-imgHeight)/2));} catch(e){}}
win.focus();}
Object.prototype.toInt=function(){var str=String(this);
str=str.replace(/[^0-9-.]/g, "");
var ret=parseInt(str, 10);
if(isNaN(ret)) ret=0;
return ret;}
Number.prototype.format=function(dp, currency){var num=this;
var ThousandsSep=(setup.locale=="EURO" ? " ":",");var DecimalPoint=(setup.locale=="EURO" ? ",":".");var NegativePre="-";var NegativePost="";var CurrencyPre="\u00a3";var CurrencyPost="";if(setup.locale=="USD") CurrencyPre="$";if(setup.locale=="EURO"){CurrencyPre="";CurrencyPost="\u20ac";}
var neg, bdp, adp, obdp;if(isNaN(num)) num=0;
dp=Math.abs(dp.toInt());neg=(num<0);
num=String(Math.round(Math.abs(num) * Math.pow(10, dp))).Pad(dp, '0');
bdp=num.substr(0, num.length - dp);adp=num.substr(num.length - dp);
if(bdp=="") bdp="0";
else{do {obdp=bdp;
bdp=bdp.replace(/(\d+)(\d{3})/g, "$1" + ThousandsSep + "$2");} while (bdp!=obdp);}
num=bdp + (dp>0 ? DecimalPoint + adp:"");
if(currency === true) num=CurrencyPre + num + CurrencyPost;
if(neg) num=NegativePre + num + NegativePost;
return num;}
String.prototype.Trim=function(){return this.replace(/^\s*|\s*$/g, "");}
String.prototype.Clean=function(){return this.replace(/[^\w|\s|@|&|.|,|!|%|(|)|+|-]/g, "").replace(/_/g, " ").replace(/\s+/g, " ").Trim();}
String.prototype.Pad=function(length, padChar){var str=String(this);
length=length.toInt();
if(typeof padChar=='undefined') padChar=" ";
else{padChar=String(padChar);
if(padChar.length<1) padChar=" ";}
while (str.length<length) str=padChar + str;
return str;}
function HTTParguments(){var args=new Array();
var arglist=location.search.Trim();
if(arglist.charAt(0)=='?') arglist=arglist.substr(1);
var argsep=arglist.split('&');
var thisValue;
for(var i=0;i<argsep.length;i++){thisValue=argsep[i].split("=");
if(thisValue.length==2) args[unescape(thisValue[0].toLowerCase())]=unescape(thisValue[1]);}
return args;}
Array.prototype.Exists=function(key){var type=typeof(this[key]);
return (type!='undefined'&&type!='function');}
Array.prototype.StoreAll=function(name, minutes){var values="";
for(var key in this) if(typeof(this[key])!='function') values+=(values=="" ? "":"[:]") + key.toLowerCase() + "[=]" + String(this[key]);
CookieSet(name, values, minutes);}
Array.prototype.LoadAll=function(name){var allValues=CookieGet(name);
var values=allValues.split("[:]");
var thisValue;
for(var i=0;i<values.length;i++){thisValue=values[i].split("[=]");
if(thisValue.length==2){if(thisValue[1]=="true"||thisValue[1]=="false") this[thisValue[0].toLowerCase()]=(thisValue[1]=="true");
else this[thisValue[0].toLowerCase()]=thisValue[1];}}}
function CookieSet(name, value, minutes){value=String(value).replace(/\r/g, "").replace(/\n/g, "[#]");
if(minutes){var date=new Date();
date.setTime(date.getTime()+(minutes*60000));
var expires=";expires="+date.toGMTString();}
else expires="";
document.cookie=name+"="+String(value)+expires+";path="+location.pathname.substr(0, location.pathname.indexOf("/",1)+1);}
function CookieGet(name){var ret="";
name+="=";
var allCookies=document.cookie.split(';');
var thisCookie;
for(var i=0;i<allCookies.length&&ret=="";i++){thisCookie=allCookies[i].Trim();
if(thisCookie.indexOf(name)==0) ret=thisCookie.substring(name.length).replace(/\[#\]/g, "\n");}
return ret;}
function CookiesEnabled(){CookieSet("testcookie", "testvalue", 0.05);
return (CookieGet("testcookie")=="testvalue");}
function verify_email(email){email=email.Trim().toLowerCase();
if(email!="") if(email.replace(/^.+@[a-z0-9]+([_\.\-]{0,1}[a-z0-9]+)*([\.]{1}[a-z0-9]+)+$/, "")!="") email="";
return email;}
var DOM=new function(){this.ElementNode=1;
this.AttributeNode=2;
this.TextNode=3;
this.CommentNode=8;
this.Enabled=(document.getElementById&&document.getElementsByTagName);
this.Id=function(id, rootElement){var element=null;
if(this.Enabled){if(typeof rootElement=='string') rootElement=this.Id(rootElement);
if(!rootElement) rootElement=document;
element=rootElement.getElementById(String(id));}
return element;}
this.Tags=function(tag, rootElement){var elements=new Array(0);
if(this.Enabled){if(typeof rootElement=='string') rootElement=this.Id(rootElement);
if(!rootElement) rootElement=document;
elements=rootElement.getElementsByTagName(String(tag));}
return elements;}
this.NodeAdd=function(element, content, clear){if(typeof element=='string') element=this.Id(element);
if(clear === true) this.RemoveChildren(element);
return (element.innerHTML=content);}
this.ParentFind=function(element, nodename){if(typeof element=='string') element=this.Id(element);
nodename=nodename.toLowerCase();
while (element.nodeName.toLowerCase()!=nodename&&element.parentNode) element=element.parentNode;
if(element.nodeName.toLowerCase()!=nodename) element=false;
return element;}
this.ChildElements=function(element){var ce=new Array();
if(typeof element=='string') element=this.Id(element);
if(element){for(var i=0;i<element.childNodes.length;i++){if(element.childNodes[i].nodeType==this.ElementNode&&element.childNodes[i].nodeName!="!") ce.push(element.childNodes[i]);}}
return ce;}
this.FindNodeType=function(element, ntype){var found=null;
if(typeof element=='string') element=this.Id(element);
if(element){var thisNode;
for(var i =0;i<element.childNodes.length&&found==null;i++){thisNode=element.childNodes[i];
if(thisNode.nodeType==ntype) found=thisNode;
else found=this.FindNodeType(thisNode, ntype);}}
return found;}
this.SetText=function(element, text){if(typeof element=='string') element=this.Id(element);
if(element){var tNode=this.FindNodeType(element, this.TextNode);
if(tNode) tNode.nodeValue=text;
else element.appendChild(document.createTextNode(text));}}
this.RemoveChildren=function(element){if(typeof element=='string') element=this.Id(element);
if(element) while (element.lastChild) element.removeChild(element.lastChild);}
this.AbsoluteX=function(element){var pos=0;
if(typeof element=='string') element=this.Id(element);
if(element&&typeof element.offsetLeft!='undefined'){pos=element.offsetLeft;
while ((element=element.offsetParent)) pos+=element.offsetLeft;}
return pos;}
this.AbsoluteY=function(element){var pos=0;
if(typeof element=='string') element=this.Id(element);
if(element&&typeof element.offsetTop!='undefined'){pos=element.offsetTop;
while ((element=element.offsetParent)) pos+=element.offsetTop;}
return pos;}
this.HeadAppend=function(element){var head=this.Tags("head");
return (head.length==1 ? head[0].appendChild(element):null);}
this.HeadRemove=function(element){var head=this.Tags("head");
return (head.length==1 ? head[0].removeChild(element):null);}
this.LoadJS=function(file){var jsfrag=document.createElement("script");
jsfrag.setAttribute("type", "text/javascript");jsfrag.setAttribute("src", file);
return this.HeadAppend(jsfrag);}
this.LoadCSS=function(file){var cssfrag=document.createElement("link");
cssfrag.setAttribute("type", "text/css");cssfrag.setAttribute("rel", "stylesheet");cssfrag.setAttribute("media", "screen");cssfrag.setAttribute("href", file);
return this.HeadAppend(cssfrag);}}
var Graphic=new function(){if(typeof window.innerWidth!='undefined'){this.ViewportWidth=function(){return window.innerWidth;}
this.ViewportHeight=function(){return window.innerHeight;}}
else{this.ViewportWidth=function(){if(typeof document.documentElement!='undefined'&&typeof document.documentElement.clientWidth!='undefined'&&document.documentElement.clientWidth!=0) return document.documentElement.clientWidth;
else return DOM.Tags("body")[0].clientWidth;}
this.ViewportHeight=function(){if(typeof document.documentElement!='undefined'&&typeof document.documentElement.clientHeight!='undefined'&&document.documentElement.clientHeight!=0)return document.documentElement.clientHeight;
else return DOM.Tags("body")[0].clientHeight;}}
if(typeof window.pageXOffset!='undefined'){this.ViewportScrollX=function(){return window.pageXOffset;}
this.ViewportScrollY=function(){return window.pageYOffset;}}
else{this.ViewportScrollX=function(){if(typeof document.documentElement.scrollLeft!='undefined'&&document.documentElement.scrollLeft>0) return document.documentElement.scrollLeft;
else if(typeof document.body.scrollLeft!='undefined') return document.body.scrollLeft;
else return 0;}
this.ViewportScrollY=function(){if(typeof document.documentElement.scrollTop!='undefined'&&document.documentElement.scrollTop>0) return document.documentElement.scrollTop;
else if(typeof document.body.scrollTop!='undefined') return document.body.scrollTop;
else return 0;}}
this.ClassApply=function(element, cname){if(typeof element=='string') element=DOM.Id(element);
if(element&&cname.length>0){var cc=" "+element.className+" ";
if(cc.indexOf(" "+cname+" ")<0) cc+=cname;
element.className=cc.Trim();}}
this.ClassRemove=function(element, cname){if(typeof element=='string') element=DOM.Id(element);
if(element&&cname.length>0){var cc=" "+element.className+" ";
cc=cc.replace(new RegExp(" "+cname+" ", "gi"), "");
element.className=cc.Trim();}}
this.PositionViewport=function(element, vtop, vbottom, absolute){if(absolute !== true){var vh=this.ViewportHeight();
vtop=Math.floor((vtop/100) * vh);
vbottom=Math.ceil((vbottom/100) * vh);}
var ey=DOM.AbsoluteY(element);
var vy=this.ViewportScrollY();
if(ey<vy+vtop) this.ScrollViewport(ey-vtop);
else if(ey>vy+vbottom) this.ScrollViewport(ey-vbottom);}
this.AnimationFrames=10;
this.AnimationPause=300;
this.ScrollViewport=function(moveTo, frame, pause){if(isNaN(frame)){var cTime=new Date();frame=this.AnimationFrames;}
var moveFrom=this.ViewportScrollY();
window.scrollTo(0, moveFrom+Math.floor((moveTo - moveFrom) / frame));
if(frame>1&&moveFrom!=this.ViewportScrollY()){if(isNaN(pause)){pause=((new Date() - cTime) + 8) * 2;
frame=Math.floor(this.AnimationPause / pause);}
else frame--;
setTimeout(function(){Graphic.ScrollViewport(moveTo, frame, pause);}, pause);}}}
function Event(element, type, handler){this.Raised=null;
if(typeof element.AttachedEvents=='undefined'||element.AttachedEvents==null){element.AttachedEvents=new EventStore();
var existingEvent=element["on"+type];
if(existingEvent) new Event(element, type, existingEvent);
EventStore.ElementList[EventStore.ElementList.length]=element;
if(EventStore.ElementList.length==1) new Event(window, "unload", EventStore.CleanUp);}
var hIndex=element.AttachedEvents.Add(element, type, this);
this.Handler=function(evtinfo){this.Raised=evtinfo;
return handler(this);}
this.Detach=function(){element.AttachedEvents.Detach(type, hIndex);}}
function EventStore(){this.Type=[];}
EventStore.prototype.Add=function(element, type, EventObj){if(typeof this.Type[type]=='undefined'){this.Type[type]=[];
element["on"+type]=EventStore.Handler;}
var hIndex=this.Type[type].length;
this.Type[type][hIndex]=EventObj;
return hIndex;}
EventStore.prototype.Detach=function(type, hIndex){if(typeof this.Type[type][hIndex]=='object') delete this.Type[type][hIndex];}
EventStore.prototype.RunEvents=function(evtinfo){var ret=true;
if(typeof this.Type[evtinfo.Type]!='undefined'){var EventObj;
for(var h=0;h<this.Type[evtinfo.Type].length;h++){EventObj=this.Type[evtinfo.Type][h];
if(typeof EventObj=='object') ret &= (EventObj.Handler(evtinfo) !== false);}}
return ret;}
EventStore.Handler=function(evt){return (this.AttachedEvents ? this.AttachedEvents.RunEvents(new EventInformation(evt)):null);}
EventStore.ElementList=[];
EventStore.CleanUp=function(){for(var e=0;e<EventStore.ElementList.length;e++) EventStore.ElementList[e].AttachedEvents=null;
EventStore.ElementList=null;}
function EventInformation(event){if(event){this.Event=event;
this.StopPropagation=function(){this.Event.stopPropagation();}
this.StopDefaultAction=function(){this.Event.preventDefault();}}
else{this.Event=window.event;
this.StopPropagation=function(){this.Event.cancelBubble=true;};this.StopDefaultAction=function(){this.Event.returnValue=false;}}
this.Type="";this.Element=null;this.Key="";this.ControlKey="";this.Shift=false;this.Ctrl=false;this.Alt=false;this.MouseX=0;this.MouseY=0;
if(this.Event){this.Type=String(this.Event.type).toLowerCase();
this.Element=(this.Event.target ? this.Event.target:this.Event.srcElement);
var charCode=this.Event.charCode;
var keyCode=(this.Event.keyCode ? this.Event.keyCode:charCode);
if(charCode!=0&&keyCode>=32) this.Key=String.fromCharCode(keyCode);
if(this.Key==""){this.ControlKey=Event.CK[keyCode];
if(!this.ControlKey) this.ControlKey="";}
this.Ctrl=this.Event.ctrlKey;this.Alt=this.Event.altKey;this.Shift=this.Event.shiftKey;var mre=/mouse|click/i;
if(mre.test(this.Type)){this.MouseX=(this.Event.pageX ? this.Event.pageX:this.Event.clientX + Math.max(document.documentElement.scrollLeft, document.body.scrollLeft));
this.MouseY=(this.Event.pageY ? this.Event.pageY:this.Event.clientY + Math.max(document.documentElement.scrollTop, document.body.scrollTop));}}}
Event.CK=[];Event.CK[8]="backspace";Event.CK[9]="tab";Event.CK[13]="enter";Event.CK[27]="esc";Event.CK[33]="pageup";Event.CK[34]="pagedown";Event.CK[35]="end";Event.CK[36]="home";Event.CK[37]="left";Event.CK[38]="up";Event.CK[39]="right";Event.CK[40]="down";Event.CK[45]="insert";Event.CK[46]="delete";Event.CK[112]="f1";Event.CK[113]="f2";Event.CK[114]="f3";Event.CK[115]="f4";Event.CK[116]="f5";Event.CK[117]="f6";Event.CK[118]="f7";Event.CK[119]="f8";Event.CK[120]="f9";Event.CK[121]="f10";Event.CK[122]="f11";Event.CK[123]="f12";Event.CK[144]="numlock";Event.CK[145]="scrolllock";
setup.OK=true;
if(!DOM.Enabled){setup.OK=false;document.write("<p>Please use a more modern browser to view the showroom.</p>");}
else{if(!DOM.Id("autodirector")){setup.OK=false;document.write('<p><strong>AutoDirector error</strong>: the page is missing the &lt;div id="autodirector"&gt;tag.</p>');}
if(DOM.Tags("head").length!=1){setup.OK=false;document.write('<p><strong>AutoDirector error</strong>: the page does not have one &lt;head&gt;tag.</p>');}}
if(setup.OK) new Event(window, "load", ADstart);

