Quantcast
Channel: Notizie - Auto d'Epoca - Ruoteclassiche
Viewing all 3030 articles
Browse latest View live

Villa d’Este Style 2017: piccolo è bello

$
0
0

Il più piccolo raduno automobilistico al mondo ha fatto il pieno di pubblico. È bastata infatti la presenza di sette vetture d’epoca speciali per attirare una folla di curiosi e appassionati. È accaduto sabato 22 aprile a Cernobbio, sul Lago di Como, nella piazza dell’imbarcadero, a due passi da Villa d’Este dove le auto di quello che può considerarsi a ragion veduta il raduno di auto più esclusivo che ci sia, si sono mostrate al pubblico per la prima volta.

Parliamo del Villa d’Este Style, il meeting annuale (arrivato alla sua sesta edizione) che ogni anno riunisce nella splendida cornice dell’albergo di Cernobbio le uniche auto che hanno nel proprio nome quello appunto di Villa d’Este: le Alfa Romeo 6C 2500 SS costruite dalla Carrozzeria Touring tra il 1947 e il 1949.

Non auto qualsiasi quindi, ma alcune delle più rare Alfa Romeo della storia. Quattro delle trentadue 6C 2500 SS Villa d’Este costruite (ma delle quali solo di 17 si conosce l’esistenza) più tre invitate speciali, altrettanto rare ed esclusive: la monoposto Alfa Romeo GP Tipo 158 “Alfetta”, vincitrice del primo Campionato Mondiale di Formula 1 del 1950 con al volante Nino Farina; una RLSS del 1925, e una 6C 2500SS cabriolet carrozzata Pinin Farina.  G.M.

Villa d’Este Style 2017: piccolo è bello

VdEStyle17_1546

A Garlenda i 60 anni della Fiat 500

$
0
0

Un intero paese mobilitato per un evento che si preannuncia storico: il 60° compleanno della utilitaria più amata dagli italiani (è nata nel 1957). Succede a Garlenda, nell’entroterra di  Alassio, Savona, dal 1984 capitale mondiale di questo modello, dove tutto e tutti parlano di Fiat 500: dal sindaco al farmacista, dal ristoratore al falegname, dall’albergatore all’estetista, dalla massaia alla maestra d’asilo, dal salumiere ai medici del 118, ai Garlendini tutti.

Grazie alla sede del Fiat 500 Club Italia (che con i suoi oltre 21 mila iscritti è il sodalizio più grande del mondo), al museo, ai negozi di ricambi e ad altre attività legate a questo modello Garlenda è diventata famosa nel mondo. Un caso più unico che raro nel panorama del collezionismo storico.

Garlenda ospita ogni anno anche un affollatissimo meeting internazionale dedicato alla Fiat 500, al quale partecipano collezionisti provenienti  dai cinque continenti. E quello di quest’anno rischia di battere tutti i record. Anche del record del 2007, quando, per il 50° compleanno, si riunirono a Garlenda 1.438 Fiat 500.

L’appuntamento è per il 7- 8 -9 luglio prossimi, con un programma piuttosto ricco di iniziative che vede l’intero paese coinvolto nei preparativi in modo da accogliere con il minor disagio possibile le migliaia di appassionati attesi in quei giorni. Qui, in dettaglio, tutte le iniziative previste. G.M.

 

Uno sguardo a Ruoteclassiche di maggio

$
0
0

Maggio è il mese della Mille Miglia. E quest’anno la mitica Freccia Rossa festeggia un duplice anniversario tondo: i suoi novant’anni e i sessanta dall’ultima, drammatica edizione storica, funestata dall’incidente di Alfonso De Portago. Ovvio quindi che all’argomento venga riservato uno spazio “Speciale” (di ben 18 pagine), nel quale guidiamo i lettori in una cavalcata fatta di aneddoti, curiosità, numeri, memorie, ricordando i piloti e le macchine che l’hanno vinta, ma anche chi ha contribuito a farne rinascere il mito con le edizioni rievocative (Costantino Franchi). Con un occhio ovviamente agli ultimi aggiornamenti su quella che sta per partire.

aperturaAU Mille Miglia Storia 2Altrettanto tondo – mezzo secolo – l’anniversario della Citroën Dyane, che celebriamo dedicandole la copertina del numero, un’”Impressione di guida” dal titolo “Simpatia contagiosa” e una serie di “pillole” e curiosità che ruotano attorno alla comunicazione che ne accompagnò il lancio sul mercato. La “Regina” è la Ferrari 212/225 Le Mans Touring del 1951, alla quale abbiamo aggiunto anche una “coda” su strada.

Tra le vetture, spazio anche alla Fiat 1100/103 TV (1956), alla Volkswagen 1100 De Luxe (1952) e al “Test a test” che vede protagoniste le Lancia Beta Spider 1600 (1978) e Beta Montecarlo Spider (1975).

La nuova “Copertina d’autore”, per i trent’anni di Ruoteclassiche, è affidata alle sapienti mani di Marcello Gandini, padre delle Lamborghini Miura e Countach (quattro pagine d’intervista, alle quali seguirà presto quella video).

aperturaAU FERRARI 212 ETutti da gustare i pezzi sui campioni che si sono cimentati con successo sia con le due sia con le quattro ruote (Nuvolari, Varzi Hailwood, Ascari, Surtees, Agostini, Cecotto, per arrivare a Valentino Rossi) e quello sul Panda Raid, che ha coinvolto oltre 300 esemplari di questo modello nel deserto del Marocco.

Ricche, come sempre, le sezioni attualità  e “Gareclassiche” con un reportage da Techno Classica di Essen e le principali gare di regolarità d’inizio stagione: Franciacorta Historic, Valli e Nebbie, Sanremo Rally Storico e Trofeo Foresti. La “Tecnica” si sofferma sul motore a 3 cilindri in linea, mentre per le “Vendite all’asta” abbiamo puntato l’obiettivo sull’incanto organizzato da Bonhams nel contesto del Goodwood Member’s Meeting.

aperturaFT TECHNOCLASSICA ESSENIn concomitanza con l’uscita di Ruoteclassiche di maggio, ricordiamo che in edicola – a 9,90 euro con la rivista – troverete anche il quarto volume de “Il meglio del Cavallino”, dedicato alle Rosse viste ai “raggi X”.

Buona lettura!

 

Uno sguardo a Ruoteclassiche di maggio

aperturaFT TECHNOCLASSICA ESSEN
aperturaAU FERRARI 212 E
aperturaAU Mille Miglia Storia 2
RCL Cover MAGGIO DEF

Nuove tendenze, il vino da collezione batte le auto classiche

$
0
0

Puntuale come ogni anno arriva il Knight Frank Luxury Index a misurare andamento e tendenze dei grandi patrimoni degli individui con una ricchezza superiore ai 30 milioni di dollari. Stiamo parlando di 193.490 persone con grande potere di acquisto e di 2024 con un patrimonio di oltre 1 miliardo di dollari, numero raddoppiato negli ultimi 10 anni.

Come sempre, il lungo report che raccoglie numeri, sondaggi e pareri di esperti lungo le 68 pagine fitte di dati, fotografa l’andamento dei beni di lusso da collezione non solo degli ultimi 12 mesi ma pure degli ultimi 10 anni. Andando sui freddi numeri quest’anno la notizia è doppia: tra beni come francobolli, monete antiche, arte, diamanti, mobili antichi e molti altri quest’anno il gradino più alto del podio spetta ai vini da collezione che crescono su base annua di un robusto +24%, trascinati dall’exploit di Bordeaux francesi e soprattutto californiani.

Una crescita molto forte per le bottiglie d’autore rispetto al 2015 (quando si erano fermate al 5%) che porta, su base decennale, la rivalutazione al 267%, al secondo posto dietro le auto. Per la prima volta da molti anni, quindi, le auto classiche cedono il comando della classifica annuale. Ma occorre dire che negli ultimi anni c’erano stati i primi segnali di “stanchezza” e nel 2016 la crescita si è fermata alla singola cifra, pari al 9%.

Inoltre non mancano interrogativi e interessanti considerazioni scorrendo le pagine del report. Come sempre infatti, quando si guardano classifiche e dati, occorre saperli interpretare e alzi la mano chi ha il coraggio di dire che una crescita comunque vicina al 10% su base annua, e che calcolata sui dieci anni fa segnare un entusiasmante +457%, siano numeri deludenti. Certo è che passare dal 28% del 2014 al 9% evidenzia una certa stanchezza del mercato e una crescita che potrebbe stabilizzarsi su ritmi da buona economia in forte sviluppo piuttosto che da tigre asiatica.

Rimanendo sul tema più caro agli appassionati di auto d’epoca, tra i vari grafici del report si trova uno spaccato interessante della classifica dei beni di lusso non solo sulla base della categoria di appartenenza ma anche per tipologia. In questo modo si scopre che le Porsche sono le auto che più si sono avvicinate al vino, seguite dalle Ferrari. Mentre le Mercedes devono pagare dazio non solo alle rivali di Stoccarda e Maranello ma anche alle perle, all’arte contemporanea e allo Champagne.

Ma non solo: nel report si riportano dati e pareri di Hagi, Kidston e Hagerty che in buona sostanza dipingono un mercato sempre più selettivo, con i numeri in termine di valore assoluto e percentuale di vendita delle aste in leggero calo. Dovendo fare la sintesi si potrebbe vedere ancora il bicchiere mezzo pieno, come ha dichiarato Brian Rabold di Hagerty: il mercato non è più in mano ai venditori ma che ora vede il pallino del comando in mano di chi compra.

E non è detto che ciò sia un male per i veri appassionati e collezionisti: crescite più basse potrebbero allontanare gli speculatori del mordi e fuggi. Diverso capire se invece tale rallentamento creerà difficoltà ai professionisti del settore legati a strutture finanziarie più sofisticate come i fondi, ecc.

Tra gli altri trend registrati a livello auto da collezione, anche qui non è una novità, il sempre maggiore interesse per le youngtimer e le auto costruite dopo il 2000, ma non solo. Il 2016 ha fatto registrare picchi e interessanti tendenze seppure a macchia di leopardo: nuovo record per le auto americane battute all’asta con la Shelby Cobra del 1962 di RM Auction, aggiudicata per 13 milioni di dollari. E nuovo record di valore anche per le auto inglesi con la Jaguar D type battuta a 22 milioni di dollari e nuovo primato, dipinto di tricolore, per le auto anteguerra con l’Alfa Romeo 8C Lungo Spider del 1939 che ha quasi raggiunto la soglia dei 20 milioni di dollari. Come dire che per chi sa scegliere, valorizzare e vendere nel modo giusto ci sono ancora molte possibilità di fare plusvalenze.

Fin qui le auto, considerando aste e rivalutazioni. Ma non è tutto, il Knight Frank Luxury Index registra molti altri interessanti trend finanziari e di crescita e distribuzione della ricchezza che non vanno trascurati: in futuro possono riguardare più o meno direttamente il mercato auto sia nuove che d’epoca e incidere significativamente sui valori. I “superricchi” continueranno a crescere e se per numero assoluto saranno sempre negli Stati Uniti, le crescite più importanti avranno matrice asiatica ma non solo.

Tra le varie tabelle e analisi si scopre che guardando le percentuali di collezionisti di beni, auto comprese, suddivisi per area geografica i primi tre mercati dei beni da collezione sono quello latino americano, seguito dagli Stati Uniti e poi dall’Europa. E curiosamente l’Africa sopravanza sia il Middle East che l’Asia.

Infine, occorre fare attenzione a un’altra tendenza che, come per le auto nuove e l’acquisto di immobili e altri beni, rischia di cambiare gli scenari: l’economia dell’esperienza. Anche le persone abbienti con patrimonio superiore ai trenta milioni dollari ne sono attratti. Dato destinato a crescere soprattutto considerando che iniziano a iscriversi alla categoria anche i millenial, ovvero i ragazzi nati a cavallo del nuovo secolo.

Tratto comune è la preferenza a “vivere le cose” piuttosto che possederle. Come, per esempio, correre a cavallo o in un rally storico, condividendo la passione con persone diverse per professione, lavoro o residenza. Tutto questo renderà sempre di più le passioni per i beni da collezione una grande piattaforma relazionale ma anche di soddisfazione personale. E se prendiamo per buoni i dati del report secondo il quale il motivo primario per cui si collezionano beni rimane il divertimento e il piacere personale, seguito da altri temi come la rivalutazione e la diversificazione del proprio portafoglio, le auto classiche hanno ancora un grande futuro, indipendentemente da qualche punto percentuale in più o in meno. Più passione e meno finanza, forse è una buona notizia.

Luca Pezzoni

Terre di Canossa, nuovo successo di Vesco-Guerini

$
0
0

La celebre 3 giorni di regolarità ha visto i 106 equipaggi al via di venerdì 21 aprile percorrere 634 km lungo le regioni di Emilia, Liguria e Toscana e affrontare 89 prove cronometrate e una di media. I top driver Vesco-Guerini hanno accumulato solo 204 penalità, mettendo a punto una media di 2,40 a bordo della loto Fiat 508 S Balilla Sport del 1934. Quinto successo in fila per loro al Gran Premio Terre di Canossa, anche se non lo hanno mai dato per scontato. Anzi, i tanti trasferimenti hanno reso questa gara molto impegnativa, perché la concentrazione andava trovata solo in alcuni tratti. Ma una volta trovata, per Andrea Vesco e Andrea Guerini, le prove si sono scandite praticamente da sole. Se poi si aggiunge la loro consolidata intesa ed esperienza, il successo è “quasi” sempre assicurato. Secondi, invece, con 262 punti, Passanante-Pisciotta su Fiat 508 C del 1937, in vantaggio di ben 78 scarti sul team olandese Houtkamp-Houtkamp, terzi alla guida di una Aston Martin 2 Litre Speed Model del 1937.

Hanno poi riconfermato la loro tenacia e bravura, dopo il recente successo alla Winter Race, Montalbano-Vagliani su Fiat 1100-103 del 1955, prime assolute nella tanto ambita Coppa delle Dame, con sole 380 penalità raccolte e una media già da top driver. Un risultato notevole se si pensa che questa ragazzina di soli 22 anni è al suo terzo evento. Con una famiglia di regolaristi alle spalle, tra il padre navigatore e il fratello pilota, ha deciso di percorrere la stessa strada poco dopo la patente, finendo per innamorarsi di questa disciplina. Una passione che è agli inizi, quindi non darà del filo da torcere solo alle altre dame del parterre, ma quasi certamente anche ai migliori “top” del nostro panorama nazionale.

I 135 anni di Cuervo Y Sobrinos

Sponsor principale del Gran Premio Terre di Canossa e novità di questa edizione, la casa orologiaia svizzera Cuervo Y Sobrinos, che per l’occasione è stata rappresentata dal suo presidente Marzio Villa, alla guida di una Ford Thunderbird del 1956, insieme a Maria Cristina Abello. Noto a tutti per la sua vivacità e il suo entusiasmo, Marzio ha scelto proprio questo grande evento per festeggiare un altro importante traguardo: i 135 anni della sua azienda. Un anniversario importante, che lo ha portato a coinvolgere una sessantina dei suoi maggiori clienti provenienti da tutto il mondo, per mostrare loro dal vivo come la sua passione per questo settore, che indubbiamente fa sognare i più, sia strettamente correlata all’altra passione della sua vita, gli orologi appunto.

Location esclusive

Come da tradizione, il Gran Premio Terre di Canossa ha avuto inizio con la cena “stellata”, quest’anno svoltasi all’interno delle sale di Palazzo Ducale a Parma, oggi sede del Comando Provinciale dell’Arma dei Carabinieri, dove a mettere la firma è stato lo chef stellato Michelin, Massimo Spigaroli. Sempre da Parco Ducale sono poi partiti tutti i partecipanti, alla volta della Liguria. Dopo un primo gruppo di prove nella pista di Varano de’ Melegari, le storiche sono risalite lungo la Val di Taro toccando il Castello di Bardi e Borgo Val di Taro. Attraverso il panoramico Passo delle Cento Croci, sono giunte a La Spezia e nel suggestivo Golfo dei Poeti, con l’incantevole borgo marinaro di Portovenere ad accoglierle per la sosta pranzo. Prima di pernottare a Forte dei Marmi, i concorrenti si sono concessi un gelato a Lerici, una delle più belle “cartoline” del nostro Paese, e poi via verso l’ultimo gruppo di prove della giornata, sulla strada di Monte Marcello fino a Punta Bianca, per poi proseguire verso il borgo di Ameglia e Bocca di Magra, per la cena.

Percorsi per veri amatori della guida

La giornata di sabato, invece, ha premiato le strade, davvero meravigliose, percorse per toccare alcune delle più belle città d’arte della Toscana: Pisa e Lucca in primis, separate da un gruppo di prove concatenate sul Monte Serra. Dopo il passaggio sulle antiche mura di Lucca, Patrimonio Unesco, e il pranzo all’interno del Real Collegio, la carovana si è rimessa in moto alla volta della Versilia, prima affrontando altre prove tra i monti della Garfagnana e poi arrivando nella piazza del Duomo di Pietrasanta, la città degli artisti pronta ad accogliere le auto della carovana. Il rientro a Forte dei Marmi e il “beach party” al Bambaissa sono stati un’altra irrinunciabile firma della manifestazione.

Gran finale

Domenica 23 aprile, dal pontile di Forte dei Marmi, aperto per l’occasione, è partita la tappa finale, prima verso le Alpi Apuane e poi sul Passo di Pradarena, il più alto valico carrozzabile dell’Appennino Tosco-Emiliano. Il pranzo a Carpineti ha reso degnamente omaggio alla protagonista di questa gara evento che, non dimentichiamolo, è Matilde di Canossa. Figuranti in costume medioevale, infatti, hanno ricreato il clima e le emozioni dei tempi della Gran Contessa, con la tipica accoglienza emiliana. Prima dell’arrivo in Piazza della Vittoria, a Reggio Emilia, non sono mancate le tradizionali prove finali sul Ponte di Calatrava. Degno finale di  un’altra edizione ben riuscita, merito della macchina organizzativa diretta dalla Scuderia Tricolore di Reggio Emilia e dal suo presidente Luigi Orlandini.

Testo di Himara Bottini, foto di René Photo ed Ezio Giovannelli

Modena si mette in mostra

$
0
0

Due ex-direttori di Quattroruote a moderare un dibattito non è cosa da tutti i giorni: succederà sabato 6 maggio a Modena, alle ore 10.00 nella Sala Conferenze del Museo Enzo Ferrari dove Mauro Tedeschini e Carlo Cavicchi intervisteranno tre storici ingegneri che hanno lavorato a vario titolo con e per la Ferrari.  Si tratta di Leonardo Fioravanti, Mauro Forghieri e Lorenzo Ramaciotti, che racconteranno, nell’ambito del convegno “Ingegneri che gente…”, l’automobile della loro vita. L’ingresso è gratuito ma i posti sono solo 180 e i ritardatari rischieranno di non riuscire ad entrare.

Nel caso, nessun problema: nel week-end del 6-7 maggio a Modena si terrà l’evento “Modena Terra di Motori” che vedrà coinvolta tutta la città in una serie di iniziative che si svolgeranno tra il centro storico, il Parco Novi Sad e la Zona Tempio. Qui, nella giornata di sabato, dalle 9.00 alle 18.00 saranno allestite varie esposizioni di automobili e motocicli storici, dalla esposizione di vetture Ferrari, Maserati, Pagani, De Tomaso, Lancia, Alfa Romeo, alla esposizione di Vespa, Fiat Topolino, Go Kart, auto anteguerra, Moto Maserati, fino al raduno Ferrari al Parco Novi Sad.

Domenica 7 maggio, invece, dalle ore 11.30 si svolgerà la rievocazione del Circuito di Modena, con una sfilata di auto storiche lungo i viali, con passaggio al Museo Enzo Ferrari.

Per ulteriori informazioni: www.modenaterradimotori.mo.it

Il fascino di un’epoca nel défilé di auto e moto anteguerra

$
0
0

Dai Giardini Estensi di Varese fino a Piazza San Fedele a Milano per mostrare a chi non c’era il fascino di un’epoca. Una cinquantina tra auto e moto storiche, esclusivamente anteguerra (costruite da inizio secolo fino al 1940) saranno le protagoniste della seconda edizione di questo speciale défilé che si terrà tra le due città lombarde domenica 7 maggio.

Un viaggio nel tempo all’insegna dei motori che consentirà al pubblico di ammirare gioielli di un’epoca motoristica poco conosciuta, soprattutto dai giovani, che non mancherà di sorprendere per i contenuti tecnici e stilistici di mezzi ricchi di grande qualità e personalità che con le loro innovazioni hanno contribuito allo sviluppo delle due e quattro ruote.

Tra i modelli presenti: la Fiat Torpedo 2800 del 1939 del Re d’Italia Vittorio Emanuele III, la Fiat 509 A Delfino del 1925 con la coda come quella di un pesce, la Lancia Alpha del 1908 e la Moto Guzzi Sport 13 del 1926.

Si parte alle 10.00 dalla sede del Comune di Varese per sfilare nel centro storico cittadino e poi prendere per Gazzada Schianno, Morazzone, Caronno Corbellaro, Gornate Olona, Castiglione Olona, Venegono Superiore, Piambosco, Appiano Gentile, Guanzate, Lomazzo. Quindi, lungo la A9 in direzione di Milano. I veicoli raggiungeranno Piazza della Scala tra le 12.00 e le 12.30, dove le caratteristiche di ogni mezzo saranno illustrate al pubblico. Quindi si dirigeranno nella vicina Piazza San Fedele dove auto e moto si potranno ammirare per tutto il pomeriggio. Alle 18.00 il ritorno in Piazza della Scala per le premiazioni.

Il Défilé Auto e Moto Anteguerra – “il fascino di un’epoca” è organizzato dal Cmae, Club Milanese Automotoveicoli d’Epoca, in collaborazione con il VAMS, Club Varese Automoto storiche, e con la partecipazione dei Club Gams di Gallarate e VCC Como. Per chi non lo sapesse, il CMAE, nato nel 1959, è il Club di auto e moto d’epoca più antico d’Italia.

Il fascino di un’epoca nel défilé di auto e moto anteguerra

Adobe Photoshop PDF

Guida autonoma, un sogno partito quasi cent’anni fa

$
0
0

Un veicolo che deve accelerare, frenare, sterzare, badare ai pedoni, ad altri veicoli e salvaguardare la sicurezza dei propri passeggeri in modo continuo durante la marcia necessita di una tecnologia molto sofisticata, finanche di una vera e propria intelligenza artificiale (scenario concretizzato alla perfezione, nell’universo della fiction, in almeno due situazioni: KITT della serie Supercar con David Hasseloff “Michael Knight” e la Batmobile del film Batman del 1989 con Michael Keaton).

Nel suo libro Magic Motorways del 1940 l’architetto, design e scenografo Norman Bel Geddes predisse la creazione della rete autostradale americana (“non ha senso, per un automobilista che stia attraversando una città, rallentare quando sopra di lui passa un aereo a tutta velocità!“) e formulò una serie di postulati assolutamente visionari, tra cui la stessa necessità che gli esseri umani fossero affrancati dalla guida di un veicolo.

In realtà, alla guida autonoma l’uomo pensava già un secolo fa. Come ha detto lo stesso Aldo Brovarone, oggi non si crea nulla di nuovo, inventiamo solo cose di cui ci siamo dimenticati. I veicoli elettrici, del resto, a cavallo tra ‘800 e ‘900 erano considerati il futuro della mobilità e i motori azionati da combustibili fossili erano visti in declino e si riteneva fossero destinati a sparire dalla faccia della terra entro pochi anni. Anche la guida autonoma, oggi cavallo di battaglia dei principali marchi costruttori premium mondiali, in realtà non è niente di nuovo rispetto a quanto non fosse già stato quantomeno teorizzato. Le smisurate possibilità offerte dalla tecnologia d’oggi, insomma, hanno solo reso realizzabile e non più fantascientifico quanto era già stato pensato molti decenni addietro.

PREISTORIA
Si ha notizia di un primissimo tentativo di dare concretezza al concetto della guida autonoma a metà degli anni 20 a New York: a bordo di una Chandler del 1926 la Houdina Radio Control installò una piccola rete di motori elettrici, tutti afferenti una grande antenna montata sul tetto. Da una seconda macchina, una strumentazione inviava impulsi elettrici all’antenna e da qui ai dispositivi, che erano in grado di muovere il veicolo senza bisogno di intervento umano. La Linrrican Wonder fu protagonista di una dimostrazione pubblica tra Broadway e la 5th Avenue a Manhattan.

Non si ebbero più notizie rilevanti su questo affascinante tema fino alla metà degli anni 30 quando iniziarono a moltiplicarsi gli studi sulla possibilità di creare automobili e taxi senza pilota allo scopo di liberare le città americane dal traffico sempre più opprimente e dalla scarsità dilagante di parcheggi.

FUTURAMA
Poi, nel 1939, alla Fiera Mondiale svoltasi a New York una prima grande visione del futuro: il padiglione della General Motors, opera di Norman Bel Geddes e denominato Futurama, creava sensazione: in esso una costruzione di tanti possibili scenari sul futuro dell’architettura e della mobilità. La costruzione anticipava il futuro architettonico delle città americane di almeno 20 anni disegnando un ambiente popolato da automobili radio controllate mosse da campi magnetici.

Secondo Geddes il modello di funzionamento delle autostrade prendeva spunto da quanto già esisteva in Italia e Germania ma migliorato con l’introduzione dei principi di funzionamento propri delle ferrovie, dotate di sistemi per la velocità controllata e l‘analisi della posizione dei treni per evitare collisioni. L’idea era semplice: si guidava tranquillamente l’automobile fino all’ingresso di un autostrada, si inseriva il pilota automatico e la vettura sarebbe rimasta nella propria corsia fino all’uscita (utilizzando bande magnetiche, rotaie su cui scorrevano ruote metalliche accoppiate ai pneumatici ecc.).

IL DOPODGUERRA
Il secondo conflitto mondiale interruppe ogni progetto, costringendo all’oblio ogni idea e sperimentazione sulla guida autonoma per le automobili. Nuovi risultati furono raggiunti nei primi anni 50: General Motors e la RCA (Radio Corporation of America), colosso americano dell’elettronica e della produzione musicale, crearono un piccolo prototipo di automobile guidato e controllato attraverso cavi annegati nel pavimento. L’invenzione scatenò la curiosità di Leland M. Hancock (ingegnere del Nebraska Department of Roads) e del suo capo L. N. Ress, che iniziarono una serie di studi a partire dall’infrastruttura autostradale dell’epoca. Ci vollero cinque anni ma, finalmente, nel 1958 (anno in cui la Chrysler Imperial fu la prima automobile a proporre il Cruise Control), i due ingegneri e la RCA Labs presentarono i risultati: lungo un tratto di strada pubblica nella città di Lincoln, 400 piedi (121 metri) erano letteralmente farciti di una rete di sensori capaci di controllare la posizione di un veicolo e di rilevare la presenza di ostacoli. L’automobile, dotata della tecnologia in grado di dialogare con la sensoristica, era capace di accelerare, frenare o sterzare da sola.

Il risultato fu molto promettente, al punto che, secondo la maggior parte dei costruttori automobilistici dell’epoca, la guida autonoma sarebbe diventata una tecnologia perfettamente funzionante e fruibile a partire dal 1975.

LE FIREBIRD DI GENERAL MOTORS
Il Gruppo americano, sulla scia di quel risultato ottenuto a Lincoln, continuò con grande impegno sulla strada della sperimentazione in vista di una commercializzazione al minuto di automobili a guida autonoma. I prototipi Firebird prodotti dal 1956 al 1964 e disegnati nel periodo dell’inizio della conquista dello spazio da parte dell’uomo, sono espressione di una complessa ricerca su tema.

FIREBIRD II. Presentata al salone Motorama del 1956, era caratterizzata dalla carrozzeria in titanio, motore a turbina e freni a disco. In più era equipaggiata con un sistema di guida autonoma previsto per le “autostrade del futuro”. Esso sfruttava un cavo elettrico annegato nell’asfalto capace di inviare segnali e di impartire istruzioni al veicolo al fine di evitare incidenti.

FIREBIRD III. Considerata la massima espressione del genio creativo del designer Harley Earl, fu costruita nel 1958. Tra le sue caratteristiche peculiari (oltre al motore a turbina da 225 CV e una ampia dotazione di accessori e servomeccanismi idraulicamente gestiti da un piccolo motorino bicilindrico da 10 CV montato a parte) un sistema di controllo della guida con unico joystick, intrastruttura di sensoristica per la guida autonoma e un cruise control “intelligente”.

FIREBIRD IV. Presentata alla Fiera Mondiale di New York del 1964, oltre al design futurista, molto differente rispetto ai prototipi precedenti, si caratterizzava per l’abitacolo completamente diverso rispetto a una normale automobile: 4 sedili singoli, avvolgenti e con “servizi” individuali, due cloche sul sedile del pilota per gestire acceleratore e sterzo. Davanti a lui un pannello dove avrebbe potuto essere visualizzata la mappa del percorso (GPS ante litteram) un computer di bordo per impartire istruzioni all’auto pilota e, naturalmente, televisione e frigorifero per trasformare l’abitacolo in un salottino durante gli spostamenti con il pilota automatico attivo. Dopo la conclusione dell’evento, nel 1965, la Firebird IV sparì dalla circolazione per riapparire all’edizione del ’69 leggermente aggiornata e rinominata Buick Century Cruiser. Ancora una volta l’enfasi fu sulle sue caratteristiche tecnologiche avanzate.

LA CITROËN DS19 A GUIDA AUTONOMA
Studi sul tema della guida autonoma furono condotti un po’ ovunque. In Inghilterra se ne interessò anche il Governo e negli anni 60 il Transport and Road Research Laboratory realizzò una serie di prototipi dotati di tecnologia in grado di captare sensori posti nell’asfalto e assumere comportamenti attivi in conseguenza. L’idea era partita già prima che fosse inaugurata la M1, la prima autostrada del Regno Unito. Ma poiché già si disegnavano scenari a tinte fosche sul futuro del traffico sulle strade inglesi, il Governo varò un programma di ricerca per studiare soluzioni concrete e percorribili. Il risultato fu innanzitutto una DS19 dotata di un sistema “preistorico” ma efficace: la vettura, interagendo con cavi magnetici inseriti nell’asfalto, era in grado di procedere da sola e raggiungere anche velocità molto elevate (fu testata fino a 130 km/h), frenare e sterzare. L’obbiettivo era di arrivare a conoscere, in tempo reale, posizione e direzione dei veicoli sulle strade. Controllando sterzo, distanza tra essi e velocità, un computer centrale avrebbe potuto calcolare la condizione di traffico migliore che evitasse congestioni e… automobilisti nervosi! Ulteriori test furono eseguiti con una Standard Vanguard e con una Austin Mini.

Gli studi, che proseguirono anche negli anni 70, tennero conto, naturalmente, dei costi per la realizzazione di tutte le infrastrutture. Fu calcolato che per fine secolo lo Stato si sarebbe rifatto di tutte le spese per dotare la rete autostradale di tutto il sistema di sensori necessario. Ma a metà della decade il progetto fu chiuso.

Ulteriori risultati furono prodotti sul finire degli anni 70 dalla Bendix Corporation e dall’Università di Stanford.

EUREKA PROMETHEUS PROJECT: VaMP
Nel 1987 è stato lanciato l’Eureka Prometheus Project (PROgraMme for a European Traffic of Highest Efficiency and Unprecedented Safety, 1987-1995) un programma di finanziamento lanciato dai membri dell’EUureka (organizzazione europea per la ricerca tecnologica applicata allo sviluppo produttivo) e che ha stanziato 749 milioni di euro per progetti nel campo della guida autonoma.

Grazie a questi fondi, nel 1994 sono state presentate a Parigi la VaMP e la sua gemella, Vita-2. La VaMP, costruita sulla base di una Mercedes 500 SEL dal team dello scienziato Ernst Dickmanns, dall’Università di Monaco di Baviera e da Mercedes Benz, è guidata completamente da un computer, capace di agire su sterzo, acceleratore e freni grazie alla capacità di analisi in tempo reale dell’ambiente circostante. La visione computerizzata di VaMP riesce a riconoscere strade e veicoli. Nel 1995 ha percorso 2000 chilometri da Monaco a Copenaghen e ritorno, anche a velocità di 180 orari, richiedendo in pochissime occasioni l’intervento umano.

Alvise-Marco Seno


Addio a Timo Mäkinen

$
0
0

Si è spento alla soglia degli 80 anni una delle leggende del Rally mondiale. Timo Mäkinen, finlandese di Helsinki, classe 1938, è venuto a mancare giovedì sera a seguito di circostanze che non sono state ancora rese note.

Soprannominato “il finlandese volante”, è stato uno dei primi piloti di scuola finlandese a raggiungere una fama internazionale. La sua carriera di rallista inizia a fine anni ’50 quando ancora non esisteva il Campionato del Mondo Piloti (venne istituito nel 1970 come Campionato Internazionale Costruttori, divenuto Campionato del Mondo rally nel 1973). Quattro le vittorie nel Mondiale rally, due nel 1973, una nel 1974 e una nel 1975. Tutte su Ford Escort RS 1600.

Mäkinen ha corso anche con le Austin-Healey, con le Mini e anche con una Fiat Abarth Alitalia (nel 1977, al Rally del Canada). Famosa la sua vittoria con la Mini nel 1000 Laghi del 1967 (aveva già vinto anche le edizioni 1965 e 1966) quando riuscì a terminare una prova speciale con il cofano della vettura aperto che gli ostruiva la visuale (guarda il video della prova qui sotto). G.M.

7 maggio 1967: 50 anni fa al GP di Monaco l’incidente fatale a Lorenzo Bandini

$
0
0

Lorenzo Bandini fu una persona speciale. Appassionato come pochi di automobili, espertissimo di meccanica. E con un sogno nel cassetto, da perseguire a qualsiasi costo: guidare una Ferrari in Formula 1. Ce le mise tutta, grazie a impegno, passione e tanto talento. E ci riuscì.

CHI ERA LORENZO BANDINI
Nativo della Libia Italiana, da cui l’intera famiglia era fuggita nel ’41, si stabilì a San Cassiano di Birisighella e, dopo la morte del padre, a Reggiolo. Qui iniziò a studiare per l’avviamento professionale e come meccanico. Nel 1950, trasferitosi a Milano, trovò impiego nell’officina di Goliardo Freddi. Fu una scelta che gli portò doppiamente fortuna: Freddi lo avviò alle corse e gli fece conoscere la figlia Margherita, che sarebbe diventata sua moglie.

Esordì nelle competizioni con le vetture stradali e GT nella metà degli Anni 50 e, dopo i primi successi, iniziò a pilotare le Formula Junior ponendosi come massimo obbiettivo il raggiungimento di un posto in F1, per di più alla Ferrari. La prima grande occasione sfumò nel ’61 quando la FISA mise a disposizione di un giovane emergente una monoposto. E al giovane Bandini fu preferito un altrettanto promettente Giancarlo Baghetti. Ma continuò a sperare a e impegnarsi, riuscendo, finalmente, nell’intento. Esordì in F1 nel 1961 grazie all’interessamento di Guglielmo Dei e alla Scuderia Centro Sud: il 18 giugno prese parte al Gran Premio del Belgio: solo 20 giri ma furono sufficienti per essere notato da Enzo Ferrari. Il quale, il dicembre successivo, gli propose un contratto per la stagione 1962.

Trascorse i primi tre anni con la Rossa in un ruolo secondario. Corse poco in Formula 1 ma seppe dare all’azienda di Maranello ottimi risultati, come la vittoria alla 24 Ore di Le Mans ’63 in coppia con Lodovico Scarfiotti sulla Ferrari 250P. Promosso a secondo pilota nel ’64, vinse il GP d’Austria a Zeltweg, sua unica vittoria in una gara valida per il Mondiale di F1. Fu poi terzo al GP d’Italia e all’ultima gara in Messico. Quell’anno, il 5 febbraio, sposò la sua Margherita, un amore straordinario e pieno, ottenuto dal giovane Lorenzo con un corteggiamento instancabile. Nel ’65 la stagione fu avara di successi: vinse la Targa Florio con Nino Vaccarella (Ferrari 275 P2) e fu secondo a Monaco, seconda gara di stagione. Anche il ’66 non diede grandi risultati: secondo a Montecarlo e terzo in Belgio, un ottimo inizio che lo aveva spinto in cima alla classifica del Mondiale di Formula 1 ma nelle prove successive i suoi sforzi furono continuamente vanificati da noie meccaniche.

1967: UN OTTIMO INIZIO DI STAGIONE. MA POI…
Bandini vinse la 24 Ore di Daytona in coppia con Chris Amon (Ferrari 330 P3/4) e, successivamente, la 1000 Chilometri di Monza, ancora con Amon (Ferrari 330 P4). Ferrari rimase molto ben impressionato. Saltato il GP iniziale in Sud Africa, la Rossa esordì direttamente a Monte Carlo per il GP del Principato.

Lorenzo Bandini concluse ottime qualifiche, conquistando il secondo posto in griglia di partenza accanto a Jack Brabham. Partito subito al comando, impose un ottimo ritmo di gara e riuscì a liberarsi del suo diretto inseguitore, nel frattempo costretto al ritiro a causa di un cedimento meccanico. Il guasto a Brabham aveva tuttavia prodotto un allagamento d’olio in pista. Bandini scivolò sulla chiazza girandosi e finendo superato da Jackie Stewart e Denis Hulme. Iniziò una grandiosa rimonta ma al 61° giro la sua rincorsa fu frenata dall’incontro di Pedro Rodriguez e Graham Hill. Il primo lo lasciò passare. Il secondo, con il quale aveva avuto un grave scrontro al GP del Messico del ’64, lo ostacolò in tutti i modi.

Al giro numero 82, la tragedia: in uscita dal tunnel Bandini, probabilmente esausto per tutte le energie spese fino a quel momento, giunse alla Chicane a velocità insolitamente troppo elevata. La sua Ferrari 312 urtò contro una bitta di ormeggio della banchina, decollò e ricadde capovolgendosi e prendendo fuoco. Arrivarono i commissari, spensero l’incendio ma quei minuti in cui il rottame della sua Ferrari rimase avvolto dalle fiamme si rivelarono devastanti.

Il pilota venne estratto vivo ma in condizioni disperate e immediatamente ricoverato. La diagnosi lasciava aperto lo spazio solo alla forza della speranza: ustioni di terzo grado sul 90% del corpo. Passarono le prime 24 ore e Lorenzo Bandini sopravvisse. Ne trascorsero altre 24 e la lotta feroce per farcela riuscì a proseguire. Ma dopo altre 24 ore, il 10 maggio, Lorenzo Bandini abbandonò la corsa più difficile della sua vita.

Ovunque, radio, giornali, televisioni, piansero la scomparsa di un bravissimo pilota e di un uomo amato incondizionatamente da tutti. Anche da Enzo Ferrari.

Alvise-Marco Seno

A Brescia una mostra per i 90 anni della Mille Miglia

$
0
0

C’è l’Aurelia B24 spider guidata nel ’56 e nel ’57 dal cognato del pilota ufficiale Lancia “Ippocampo”, al secolo Umberto Castiglioni, e c’è la Ferrari 340 MM, nata Touring e ricarrozzata Scaglietti, con la quale ha avuto un incidente Luigi Villoresi nel 1953. Sono trenta le meraviglie riunite nella mostra “90 Anni 1000 Miglia”, che celebra il novantesimo compleanno della “corsa più bella del mondo” nell’edificio che ne espone l’archivio storico, il Museo Mille Miglia a Brescia. Pezzi unici, provenienti da tutto il mondo, che dal 1927 al 1957 hanno preso parte alle varie edizioni della Freccia Rossa. Alcuni parteciperanno anche alla prossima rievocazione, la 35esima, che si terrà da giovedì 18 a domenica 21 maggio. Fra loro c’è la spettacolare Alfa Romeo 6C 1500 GS Testa Fissa Zagato che la pilotessa Anna Maria Peduzzi, detta “Marocchina”, ha portato al tredicesimo posto nel 1934. L’auto, di un collezionista americano, sarà condotta alla Mille Miglia 2017 dal noto regolarista Giordano Mozzi.

 Fra gli altri pezzi d’eccezione presenti nel perscorso espositivo, appena inaugurato, spicca l’Autobleu 750 Mille Miles del 1954 in arrivo dall’Olanda nel suo originale colore blu, appena riacquistato, e la Lancia Astura Mille Miglia Sport (Colli) del 1938, icona del Museo Nicolis di Verona. Per ogni vettura è a disposizione un totem tecnologico, dal quale si accede a un sito internet che ne illustra storia e caratteristiche. Del resto, parte della mission di Automotive Masterpieces – tra i promotori dell’iniziativa insieme con il Museo, con il patrocinio dell’Automobile Club di Brescia – è proprio quella di “rendere accessibile il patrimonio motoristico in modalità digitale”, ha spiegato il curatore Sandro Binelli.

E fino al 30 settembre l’occasione per accedere alle sale dell’ex monastero benedettino di Sant’Eufemia della Fonte, dove il Museo è allestito, è da non perdere anche per un’altra sorprendente mostra: “Quando scatta Nuvolari. Storie, velocità, passioni”. Un’ampia rassegna di scatti d’epoca della scuderia Tazio Nuvolari Italia, fra cui molti realizzati dal grande pilota, che documenta come “Nivola” possedesse talento anche per la fotografia.

Laura Ferriccioli

La scheda delle mostre

“90 Anni 1000 Miglia”, 5 maggio 2017 – 7 gennaio 2018

“Quando scatta Nuvolari. Storie, velocità, passioni”, fino al 30 settembre 2017.

Orario di apertura: tutti i giorni dalle 10 alle 18

Ingresso: 8 euro

Indirizzo: Museo Mille Miglia, viale della Bornata 123,

S. Eufemia (Brescia)

// Define a local copy of jQuery var jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context ); },

// Map over jQuery in case of overwrite _jQuery = window.jQueryWS,

// Map over the $ in case of overwrite _$ = window.$,

// Use the correct document accordingly with window argument (sandbox) document = window.document,

// A central reference to the root jQuery(document) rootjQuery,

// A simple way to check for HTML strings or ID strings // (both of which we optimize for) quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,

// Is it a simple selector isSimple = /^.[^:#\[\.,]*$/,

// Check if a string has a non-whitespace character in it rnotwhite = /\S/,

// Used for trimming whitespace rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,

// Match a standalone tag rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,

// Keep a UserAgent string for use with jQuery.browser userAgent = navigator.userAgent,

// For matching the engine and version of the browser browserMatch,

// Has the ready events already been bound? readyBound = false,

// The functions to execute on DOM ready readyList = [],

// The ready event handler DOMContentLoaded,

// Save a reference to some core methods toString = Object.prototype.toString, hasOwnProperty = Object.prototype.hasOwnProperty, push = Array.prototype.push, slice = Array.prototype.slice, indexOf = Array.prototype.indexOf;

jQuery.fn = jQuery.prototype = { init: function( selector, context ) { var match, elem, ret, doc;

// Handle $(""), $(null), or $(undefined) if ( !selector ) { return this; }

// Handle $(DOMElement) if ( selector.nodeType ) { this.context = this[0] = selector; this.length = 1; return this; }

// The body element only exists once, optimize finding it if ( selector === "body" && !context ) { this.context = document; this[0] = document.body; this.selector = "body"; this.length = 1; return this; }

// Handle HTML strings if ( typeof selector === "string" ) { // Are we dealing with HTML string or an ID? match = quickExpr.exec( selector );

// Verify a match, and that no context was specified for #id if ( match && (match[1] || !context) ) {

// HANDLE: $(html) -> $(array) if ( match[1] ) { doc = (context ? context.ownerDocument || context : document);

// If a single string is passed in and it's a single tag // just do a createElement and skip the rest ret = rsingleTag.exec( selector );

if ( ret ) { if ( jQuery.isPlainObject( context ) ) { selector = [ document.createElement( ret[1] ) ]; jQuery.fn.attr.call( selector, context, true );

} else { selector = [ doc.createElement( ret[1] ) ]; }

} else { ret = buildFragment( [ match[1] ], [ doc ] ); selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; }

return jQuery.merge( this, selector );

// HANDLE: $("#id") } else { elem = document.getElementById( match[2] );

if ( elem ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[2] ) { return rootjQuery.find( selector ); }

// Otherwise, we inject the element directly into the jQuery object this.length = 1; this[0] = elem; }

this.context = document; this.selector = selector; return this; }

// HANDLE: $("TAG") } else if ( !context && /^\w+$/.test( selector ) ) { this.selector = selector; this.context = document; selector = document.getElementsByTagName( selector ); return jQuery.merge( this, selector );

// HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return (context || rootjQuery).find( selector );

// HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return jQuery( context ).find( selector ); }

// HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return rootjQuery.ready( selector ); }

if (selector.selector !== undefined) { this.selector = selector.selector; this.context = selector.context; }

return jQuery.makeArray( selector, this ); },

// Start with an empty selector selector: "",

// The current version of jQuery being used jquery: "1.4.2",

// The default length of a jQuery object is 0 length: 0,

// The number of elements contained in the matched element set size: function() { return this.length; },

toArray: function() { return slice.call( this, 0 ); },

// Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num == null ?

// Return a 'clean' array this.toArray() :

// Return just the object ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] ); },

// Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems, name, selector ) { // Build a new jQuery matched element set var ret = jQuery();

if ( jQuery.isArray( elems ) ) { push.apply( ret, elems );

} else { jQuery.merge( ret, elems ); }

// Add the old object onto the stack (as a reference) ret.prevObject = this;

ret.context = this.context;

if ( name === "find" ) { ret.selector = this.selector + (this.selector ? " " : "") + selector; } else if ( name ) { ret.selector = this.selector + "." + name + "(" + selector + ")"; }

// Return the newly-formed element set return ret; },

// Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each: function( callback, args ) { return jQuery.each( this, callback, args ); },

ready: function( fn ) { // Attach the listeners jQuery.bindReady();

// If the DOM is already ready if ( jQuery.isReady ) { // Execute the function immediately fn.call( document, jQuery );

// Otherwise, remember the function for later } else if ( readyList ) { // Add the function to the wait list readyList.push( fn ); }

return this; },

eq: function( i ) { return i === -1 ? this.slice( i ) : this.slice( i, +i + 1 ); },

first: function() { return this.eq( 0 ); },

last: function() { return this.eq( -1 ); },

slice: function() { return this.pushStack( slice.apply( this, arguments ), "slice", slice.call(arguments).join(",") ); },

map: function( callback ) { return this.pushStack( jQuery.map(this, function( elem, i ) { return callback.call( elem, i, elem ); })); },

end: function() { return this.prevObject || jQuery(null); },

// For internal use only. // Behaves like an Array's method, not like a jQuery method. push: push, sort: [].sort, splice: [].splice };

// Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn;

jQuery.extend = jQuery.fn.extend = function() { // copy reference to target object var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;

// Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; }

// Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; }

// extend jQuery itself if only one argument is passed if ( length === i ) { target = this; --i; }

for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ];

// Prevent never-ending loop if ( target === copy ) { continue; }

// Recurse if we're merging object literal values or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) { var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src : jQuery.isArray(copy) ? [] : {};

// Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy );

// Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } }

// Return the modified object return target; };

jQuery.extend({ noConflict: function( deep ) { window.$ = _$;

if ( deep ) { window.jQueryWS = _jQuery; }

return jQuery; },

// Is the DOM ready to be used? Set to true once it occurs. isReady: false,

// Handle when the DOM is ready ready: function() { // Make sure that the DOM is not already loaded if ( !jQuery.isReady ) { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { return setTimeout( jQuery.ready, 13 ); }

// Remember that the DOM is ready jQuery.isReady = true;

// If there are functions bound, to execute if ( readyList ) { // Execute all of them var fn, i = 0; while ( (fn = readyList[ i++ ]) ) { fn.call( document, jQuery ); }

// Reset the list of functions readyList = null; }

// Trigger any bound ready events if ( jQuery.fn.triggerHandler ) { jQuery( document ).triggerHandler( "ready" ); } } },

bindReady: function() { if ( readyBound ) { return; }

readyBound = true;

// Catch cases where $(document).ready() is called after the // browser event has already occurred. if ( document.readyState === "complete" ) { return jQuery.ready(); }

// Mozilla, Opera and webkit nightlies currently support this event if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );

// A fallback to window.onload, that will always work window.addEventListener( "load", jQuery.ready, false );

// If IE event model is used } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes document.attachEvent("onreadystatechange", DOMContentLoaded);

// A fallback to window.onload, that will always work window.attachEvent( "onload", jQuery.ready );

// If IE and not a frame // continually check to see if the document is ready var toplevel = false;

try { toplevel = window.frameElement == null; } catch(e) {}

if ( document.documentElement.doScroll && toplevel ) { doScrollCheck(); } } },

// See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return toString.call(obj) === "[object Function]"; },

isArray: function( obj ) { return toString.call(obj) === "[object Array]"; },

isPlainObject: function( obj ) { // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) { return false; }

// Not own constructor property must be Object if ( obj.constructor && !hasOwnProperty.call(obj, "constructor") && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) { return false; }

// Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own.

var key; for ( key in obj ) {}

return key === undefined || hasOwnProperty.call( obj, key ); },

isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; },

error: function( msg ) { throw msg; },

parseJSON: function( data ) { if ( typeof data !== "string" || !data ) { return null; }

// Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim( data );

// Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {

// Try to use the native JSON parser first return window.JSON && window.JSON.parse ? window.JSON.parse( data ) : (new Function("return " + data))();

} else { jQuery.error( "Invalid JSON: " + data ); } },

noop: function() {},

// Evalulates a script in a global context globalEval: function( data ) { if ( data && rnotwhite.test(data) ) { // Inspired by code by Andrea Giammarchi // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html var head = document.getElementsByTagName("head")[0] || document.documentElement, script = document.createElement("script");

script.type = "text/javascript";

if ( jQuery.support.scriptEval ) { script.appendChild( document.createTextNode( data ) ); } else { script.text = data; }

// Use insertBefore instead of appendChild to circumvent an IE6 bug. // This arises when a base node is used (#2709). head.insertBefore( script, head.firstChild ); head.removeChild( script ); } },

nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); },

// args is for internal usage only each: function( object, callback, args ) { var name, i = 0, length = object.length, isObj = length === undefined || jQuery.isFunction(object);

if ( args ) { if ( isObj ) { for ( name in object ) { if ( callback.apply( object[ name ], args ) === false ) { break; } } } else { for ( ; i < length; ) { if ( callback.apply( object[ i++ ], args ) === false ) { break; } } }

// A special, fast, case for the most common use of each } else { if ( isObj ) { for ( name in object ) { if ( callback.call( object[ name ], name, object[ name ] ) === false ) { break; } } } else { for ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} } }

return object; },

trim: function( text ) { return (text || "").replace( rtrim, "" ); },

// results is for internal usage only makeArray: function( array, results ) { var ret = results || [];

if ( array != null ) { // The window, strings (and functions) also have 'length' // The extra typeof function check is to prevent crashes // in Safari 2 (See: #3039) if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) { push.call( ret, array ); } else { jQuery.merge( ret, array ); } }

return ret; },

inArray: function( elem, array ) { if ( array.indexOf ) { return array.indexOf( elem ); }

for ( var i = 0, length = array.length; i < length; i++ ) { if ( array[ i ] === elem ) { return i; } }

return -1; },

merge: function( first, second ) { var i = first.length, j = 0;

if ( typeof second.length === "number" ) { for ( var l = second.length; j < l; j++ ) { first[ i++ ] = second[ j ]; }

} else { while ( second[j] !== undefined ) { first[ i++ ] = second[ j++ ]; } }

first.length = i;

return first; },

grep: function( elems, callback, inv ) { var ret = [];

// Go through the array, only saving the items // that pass the validator function for ( var i = 0, length = elems.length; i < length; i++ ) { if ( !inv !== !callback( elems[ i ], i ) ) { ret.push( elems[ i ] ); } }

return ret; },

// arg is for internal usage only map: function( elems, callback, arg ) { var ret = [], value;

// Go through the array, translating each of the items to their // new value (or values). for ( var i = 0, length = elems.length; i < length; i++ ) { value = callback( elems[ i ], i, arg );

if ( value != null ) { ret[ ret.length ] = value; } }

return ret.concat.apply( [], ret ); },

// A global GUID counter for objects guid: 1,

proxy: function( fn, proxy, thisObject ) { if ( arguments.length === 2 ) { if ( typeof proxy === "string" ) { thisObject = fn; fn = thisObject[ proxy ]; proxy = undefined;

} else if ( proxy && !jQuery.isFunction( proxy ) ) { thisObject = proxy; proxy = undefined; } }

if ( !proxy && fn ) { proxy = function() { return fn.apply( thisObject || this, arguments ); }; }

// Set the guid of unique handler to the same of original handler, so it can be removed if ( fn ) { proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; }

// So proxy can be declared as an argument return proxy; },

// Use of jQuery.browser is frowned upon. // More details: http://docs.jquery.com/Utilities/jQuery.browser uaMatch: function( ua ) { ua = ua.toLowerCase();

var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) || /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) || /(msie) ([\w.]+)/.exec( ua ) || !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) || [];

return { browser: match[1] || "", version: match[2] || "0" }; },

browser: {} });

browserMatch = jQuery.uaMatch( userAgent ); if ( browserMatch.browser ) { jQuery.browser[ browserMatch.browser ] = true; jQuery.browser.version = browserMatch.version; }

// Deprecated, use jQuery.browser.webkit instead if ( jQuery.browser.webkit ) { jQuery.browser.safari = true; }

if ( indexOf ) { jQuery.inArray = function( elem, array ) { return indexOf.call( array, elem ); }; }

// All jQuery objects should point back to these rootjQuery = jQuery(document);

// Cleanup functions for the document ready method if ( document.addEventListener ) { DOMContentLoaded = function() { document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); jQuery.ready(); };

} else if ( document.attachEvent ) { DOMContentLoaded = function() { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", DOMContentLoaded ); jQuery.ready(); } }; }

// The DOM ready check for Internet Explorer function doScrollCheck() { if ( jQuery.isReady ) { return; }

try { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); } catch( error ) { setTimeout( doScrollCheck, 1 ); return; }

// and execute any waiting functions jQuery.ready(); }

function evalScript( i, elem ) { if ( elem.src ) { jQuery.ajax({ url: elem.src, async: false, dataType: "script" }); } else { jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); }

if ( elem.parentNode ) { elem.parentNode.removeChild( elem ); } }

// Mutifunctional method to get and set values to a collection // The value/s can be optionally by executed if its a function function access( elems, key, value, exec, fn, pass ) { var length = elems.length;

// Setting many attributes if ( typeof key === "object" ) { for ( var k in key ) { access( elems, k, key[k], exec, fn, value ); } return elems; }

// Setting one attribute if ( value !== undefined ) { // Optionally, function values get executed if exec is true exec = !pass && exec && jQuery.isFunction(value);

for ( var i = 0; i < length; i++ ) { fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); }

return elems; }

// Getting an attribute return length ? fn( elems[0], key ) : undefined; }

function now() { return (new Date).getTime(); } (function() {

jQuery.support = {};

var root = document.documentElement, script = document.createElement("script"), div = document.createElement("div"), id = "script" + now();

div.style.display = "none"; div.innerHTML = "

a";

var all = div.getElementsByTagName("*"), a = div.getElementsByTagName("a")[0];

// Can't get basic test support if ( !all || !all.length || !a ) { return; }

jQuery.support = { // IE strips leading whitespace when .innerHTML is used leadingWhitespace: div.firstChild.nodeType === 3,

// Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables tbody: !div.getElementsByTagName("tbody").length,

// Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE htmlSerialize: !!div.getElementsByTagName("link").length,

// Get the style information from getAttribute // (IE uses .cssText insted) style: /red/.test( a.getAttribute("style") ),

// Make sure that URLs aren't manipulated // (IE normalizes it by default) hrefNormalized: a.getAttribute("href") === "/a",

// Make sure that element opacity exists // (IE uses filter instead) // Use a regex to work around a WebKit issue. See #5145 opacity: /^0.55$/.test( a.style.opacity ),

// Verify style float existence // (IE uses styleFloat instead of cssFloat) cssFloat: !!a.style.cssFloat,

// Make sure that if no value is specified for a checkbox // that it defaults to "on". // (WebKit defaults to "" instead) checkOn: div.getElementsByTagName("input")[0].value === "on",

// Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected,

parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,

// Will be defined later deleteExpando: true, checkClone: false, scriptEval: false, noCloneEvent: true, boxModel: null };

script.type = "text/javascript"; try { script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); } catch(e) {}

root.insertBefore( script, root.firstChild );

// Make sure that the execution of code works by injecting a script // tag with appendChild/createTextNode // (IE doesn't support this, fails, and uses .text instead) if ( window[ id ] ) { jQuery.support.scriptEval = true; delete window[ id ]; }

// Test to see if it's possible to delete an expando from an element // Fails in Internet Explorer try { delete script.test;

} catch(e) { jQuery.support.deleteExpando = false; }

root.removeChild( script );

if ( div.attachEvent && div.fireEvent ) { div.attachEvent("onclick", function click() { // Cloning a node shouldn't copy over any // bound event handlers (IE does this) jQuery.support.noCloneEvent = false; div.detachEvent("onclick", click); }); div.cloneNode(true).fireEvent("onclick"); }

div = document.createElement("div"); div.innerHTML = "";

var fragment = document.createDocumentFragment(); fragment.appendChild( div.firstChild );

// WebKit doesn't clone checked state correctly in fragments jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;

// Figure out if the W3C box model works as expected // document.body must exist before we can do this jQuery(function() { var div = document.createElement("div"); div.style.width = div.style.paddingLeft = "1px";

document.body.appendChild( div ); jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; document.body.removeChild( div ).style.display = 'none';

div = null; });

// Technique from Juriy Zaytsev // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ var eventSupported = function( eventName ) { var el = document.createElement("div"); eventName = "on" + eventName;

var isSupported = (eventName in el); if ( !isSupported ) { el.setAttribute(eventName, "return;"); isSupported = typeof el[eventName] === "function"; } el = null;

return isSupported; };

jQuery.support.submitBubbles = eventSupported("submit"); jQuery.support.changeBubbles = eventSupported("change");

// release memory in IE root = script = div = all = a = null; })();

jQuery.props = { "for": "htmlFor", "class": "className", readonly: "readOnly", maxlength: "maxLength", cellspacing: "cellSpacing", rowspan: "rowSpan", colspan: "colSpan", tabindex: "tabIndex", usemap: "useMap", frameborder: "frameBorder" }; var expando = "jQuery" + now(), uuid = 0, windowData = {};

jQuery.extend({ cache: {},

expando:expando,

// The following elements throw uncatchable exceptions if you // attempt to add expando properties to them. noData: { "embed": true, "object": true, "applet": true },

data: function( elem, name, data ) { if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { return; }

elem = elem == window ? windowData : elem;

var id = elem[ expando ], cache = jQuery.cache, thisCache;

if ( !id && typeof name === "string" && data === undefined ) { return null; }

// Compute a unique ID for the element if ( !id ) { id = ++uuid; }

// Avoid generating a new cache unless none exists and we // want to manipulate it. if ( typeof name === "object" ) { elem[ expando ] = id; thisCache = cache[ id ] = jQuery.extend(true, {}, name);

} else if ( !cache[ id ] ) { elem[ expando ] = id; cache[ id ] = {}; }

thisCache = cache[ id ];

// Prevent overriding the named cache with undefined values if ( data !== undefined ) { thisCache[ name ] = data; }

return typeof name === "string" ? thisCache[ name ] : thisCache; },

removeData: function( elem, name ) { if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { return; }

elem = elem == window ? windowData : elem;

var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];

// If we want to remove a specific section of the element's data if ( name ) { if ( thisCache ) { // Remove the section of cache data delete thisCache[ name ];

// If we've removed all the data, remove the element's cache if ( jQuery.isEmptyObject(thisCache) ) { jQuery.removeData( elem ); } }

// Otherwise, we want to remove all of the element's data } else { if ( jQuery.support.deleteExpando ) { delete elem[ jQuery.expando ];

} else if ( elem.removeAttribute ) { elem.removeAttribute( jQuery.expando ); }

// Completely remove the data cache delete cache[ id ]; } } });

jQuery.fn.extend({ data: function( key, value ) { if ( typeof key === "undefined" && this.length ) { return jQuery.data( this[0] );

} else if ( typeof key === "object" ) { return this.each(function() { jQuery.data( this, key ); }); }

var parts = key.split("."); parts[1] = parts[1] ? "." + parts[1] : "";

if ( value === undefined ) { var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);

if ( data === undefined && this.length ) { data = jQuery.data( this[0], key ); } return data === undefined && parts[1] ? this.data( parts[0] ) : data; } else { return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() { jQuery.data( this, key, value ); }); } },

removeData: function( key ) { return this.each(function() { jQuery.removeData( this, key ); }); } }); jQuery.extend({ queue: function( elem, type, data ) { if ( !elem ) { return; }

type = (type || "fx") + "queue"; var q = jQuery.data( elem, type );

// Speed up dequeue by getting out quickly if this is just a lookup if ( !data ) { return q || []; }

if ( !q || jQuery.isArray(data) ) { q = jQuery.data( elem, type, jQuery.makeArray(data) );

} else { q.push( data ); }

return q; },

dequeue: function( elem, type ) { type = type || "fx";

var queue = jQuery.queue( elem, type ), fn = queue.shift();

// If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); }

if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift("inprogress"); }

fn.call(elem, function() { jQuery.dequeue(elem, type); }); } } });

jQuery.fn.extend({ queue: function( type, data ) { if ( typeof type !== "string" ) { data = type; type = "fx"; }

if ( data === undefined ) { return jQuery.queue( this[0], type ); } return this.each(function( i, elem ) { var queue = jQuery.queue( this, type, data );

if ( type === "fx" && queue[0] !== "inprogress" ) { jQuery.dequeue( this, type ); } }); }, dequeue: function( type ) { return this.each(function() { jQuery.dequeue( this, type ); }); },

// Based off of the plugin by Clint Helfers, with permission. // http://blindsignals.com/index.php/2009/07/jquery-delay/ delay: function( time, type ) { time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; type = type || "fx";

return this.queue( type, function() { var elem = this; setTimeout(function() { jQuery.dequeue( elem, type ); }, time ); }); },

clearQueue: function( type ) { return this.queue( type || "fx", [] ); } }); var rclass = /[\n\t]/g, rspace = /\s+/, rreturn = /\r/g, rspecialurl = /href|src|style/, rtype = /(button|input)/i, rfocusable = /(button|input|object|select|textarea)/i, rclickable = /^(a|area)$/i, rradiocheck = /radio|checkbox/;

jQuery.fn.extend({ attr: function( name, value ) { return access( this, name, value, true, jQuery.attr ); },

removeAttr: function( name, fn ) { return this.each(function(){ jQuery.attr( this, name, "" ); if ( this.nodeType === 1 ) { this.removeAttribute( name ); } }); },

addClass: function( value ) { if ( jQuery.isFunction(value) ) { return this.each(function(i) { var self = jQuery(this); self.addClass( value.call(this, i, self.attr("class")) ); }); }

if ( value && typeof value === "string" ) { var classNames = (value || "").split( rspace );

for ( var i = 0, l = this.length; i < l; i++ ) { var elem = this[i];

if ( elem.nodeType === 1 ) { if ( !elem.className ) { elem.className = value;

} else { var className = " " + elem.className + " ", setClass = elem.className; for ( var c = 0, cl = classNames.length; c < cl; c++ ) { if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { setClass += " " + classNames[c]; } } elem.className = jQuery.trim( setClass ); } } } }

return this; },

removeClass: function( value ) { if ( jQuery.isFunction(value) ) { return this.each(function(i) { var self = jQuery(this); self.removeClass( value.call(this, i, self.attr("class")) ); }); }

if ( (value && typeof value === "string") || value === undefined ) { var classNames = (value || "").split(rspace);

for ( var i = 0, l = this.length; i < l; i++ ) { var elem = this[i];

if ( elem.nodeType === 1 && elem.className ) { if ( value ) { var className = (" " + elem.className + " ").replace(rclass, " "); for ( var c = 0, cl = classNames.length; c < cl; c++ ) { className = className.replace(" " + classNames[c] + " ", " "); } elem.className = jQuery.trim( className );

} else { elem.className = ""; } } } }

return this; },

toggleClass: function( value, stateVal ) { var type = typeof value, isBool = typeof stateVal === "boolean";

if ( jQuery.isFunction( value ) ) { return this.each(function(i) { var self = jQuery(this); self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); }); }

return this.each(function() { if ( type === "string" ) { // toggle individual class names var className, i = 0, self = jQuery(this), state = stateVal, classNames = value.split( rspace );

while ( (className = classNames[ i++ ]) ) { // check each className given, space seperated list state = isBool ? state : !self.hasClass( className ); self[ state ? "addClass" : "removeClass" ]( className ); }

} else if ( type === "undefined" || type === "boolean" ) { if ( this.className ) { // store className if set jQuery.data( this, "__className__", this.className ); }

// toggle whole className this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || ""; } }); },

hasClass: function( selector ) { var className = " " + selector + " "; for ( var i = 0, l = this.length; i < l; i++ ) { if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { return true; } }

return false; },

val: function( value ) { if ( value === undefined ) { var elem = this[0];

if ( elem ) { if ( jQuery.nodeName( elem, "option" ) ) { return (elem.attributes.value || {}).specified ? elem.value : elem.text; }

// We need to handle select boxes special if ( jQuery.nodeName( elem, "select" ) ) { var index = elem.selectedIndex, values = [], options = elem.options, one = elem.type === "select-one";

// Nothing was selected if ( index < 0 ) { return null; }

// Loop through all the selected options for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { var option = options[ i ];

if ( option.selected ) { // Get the specifc value for the option value = jQuery(option).val();

// We don't need an array for one selects if ( one ) { return value; }

// Multi-Selects return an array values.push( value ); } }

return values; }

// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { return elem.getAttribute("value") === null ? "on" : elem.value; }

// Everything else, we just grab the value return (elem.value || "").replace(rreturn, "");

}

return undefined; }

var isFunction = jQuery.isFunction(value);

return this.each(function(i) { var self = jQuery(this), val = value;

if ( this.nodeType !== 1 ) { return; }

if ( isFunction ) { val = value.call(this, i, self.val()); }

// Typecast each time if the value is a Function and the appended // value is therefore different each time. if ( typeof val === "number" ) { val += ""; }

if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { this.checked = jQuery.inArray( self.val(), val ) >= 0;

} else if ( jQuery.nodeName( this, "select" ) ) { var values = jQuery.makeArray(val);

jQuery( "option", this ).each(function() { this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; });

if ( !values.length ) { this.selectedIndex = -1; }

} else { this.value = val; } }); } });

jQuery.extend({ attrFn: { val: true, css: true, html: true, text: true, data: true, width: true, height: true, offset: true },

attr: function( elem, name, value, pass ) { // don't set attributes on text and comment nodes if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { return undefined; }

if ( pass && name in jQuery.attrFn ) { return jQuery(elem)[name](value); }

var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), // Whether we are setting (or getting) set = value !== undefined;

// Try to normalize/fix the name name = notxml && jQuery.props[ name ] || name;

// Only do all the following if this is a node (faster for style) if ( elem.nodeType === 1 ) { // These attributes require special treatment var special = rspecialurl.test( name );

// Safari mis-reports the default selected property of an option // Accessing the parent's selectedIndex property fixes it if ( name === "selected" && !jQuery.support.optSelected ) { var parent = elem.parentNode; if ( parent ) { parent.selectedIndex;

// Make sure that it also works with optgroups, see #5701 if ( parent.parentNode ) { parent.parentNode.selectedIndex; } } }

// If applicable, access the attribute via the DOM 0 way if ( name in elem && notxml && !special ) { if ( set ) { // We can't allow the type property to be changed (since it causes problems in IE) if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { jQuery.error( "type property can't be changed" ); }

elem[ name ] = value; }

// browsers index elements by id/name on forms, give priority to attributes. if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { return elem.getAttributeNode( name ).nodeValue; }

// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ if ( name === "tabIndex" ) { var attributeNode = elem.getAttributeNode( "tabIndex" );

return attributeNode && attributeNode.specified ? attributeNode.value : rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? 0 : undefined; }

return elem[ name ]; }

if ( !jQuery.support.style && notxml && name === "style" ) { if ( set ) { elem.style.cssText = "" + value; }

return elem.style.cssText; }

if ( set ) { // convert the value to a string (all browsers do this but IE) see #1070 elem.setAttribute( name, "" + value ); }

var attr = !jQuery.support.hrefNormalized && notxml && special ? // Some attributes require a special call on IE elem.getAttribute( name, 2 ) : elem.getAttribute( name );

// Non-existent attributes return null, we normalize to undefined return attr === null ? undefined : attr; }

// elem is actually elem.style ... set the style // Using attr for specific style information is now deprecated. Use style instead. return jQuery.style( elem, name, value ); } }); var rnamespaces = /\.(.*)$/, fcleanup = function( nm ) { return nm.replace(/[^\w\s\.\|`]/g, function( ch ) { return "\\" + ch; }); };

/* * A number of helper functions used for managing events. * Many of the ideas behind this code originated from * Dean Edwards' addEvent library. */ jQuery.event = {

// Bind an event to an element // Original by Dean Edwards add: function( elem, types, handler, data ) { if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; }

// For whatever reason, IE has trouble passing the window object // around, causing it to be cloned in the process if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) { elem = window; }

var handleObjIn, handleObj;

if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; }

// Make sure that the function being executed has a unique ID if ( !handler.guid ) { handler.guid = jQuery.guid++; }

// Init the element's event structure var elemData = jQuery.data( elem );

// If no elemData is found then we must be trying to bind to one of the // banned noData elements if ( !elemData ) { return; }

var events = elemData.events = elemData.events || {}, eventHandle = elemData.handle, eventHandle;

if ( !eventHandle ) { elemData.handle = eventHandle = function() { // Handle the second event of a trigger and when // an event is called after a page has unloaded return typeof jQuery !== "undefined" && !jQuery.event.triggered ? jQuery.event.handle.apply( eventHandle.elem, arguments ) : undefined; }; }

// Add elem as a property of the handle function // This is to prevent a memory leak with non-native events in IE. eventHandle.elem = elem;

// Handle multiple events separated by a space // jQuery(...).bind("mouseover mouseout", fn); types = types.split(" ");

var type, i = 0, namespaces;

while ( (type = types[ i++ ]) ) { handleObj = handleObjIn ? jQuery.extend({}, handleObjIn) : { handler: handler, data: data };

// Namespaced event handlers if ( type.indexOf(".") > -1 ) { namespaces = type.split("."); type = namespaces.shift(); handleObj.namespace = namespaces.slice(0).sort().join(".");

} else { namespaces = []; handleObj.namespace = ""; }

handleObj.type = type; handleObj.guid = handler.guid;

// Get the current list of functions bound to this event var handlers = events[ type ], special = jQuery.event.special[ type ] || {};

// Init the event handler queue if ( !handlers ) { handlers = events[ type ] = [];

// Check for a special event handler // Only use addEventListener/attachEvent if the special // events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { // Bind the global event handler to the element if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false );

} else if ( elem.attachEvent ) { elem.attachEvent( "on" + type, eventHandle ); } } }

if ( special.add ) { special.add.call( elem, handleObj );

if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } }

// Add the function to the element's handler list handlers.push( handleObj );

// Keep track of which events have been used, for global triggering jQuery.event.global[ type ] = true; }

// Nullify elem to prevent memory leaks in IE elem = null; },

global: {},

// Detach an event or set of events from an element remove: function( elem, types, handler, pos ) { // don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; }

var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, elemData = jQuery.data( elem ), events = elemData && elemData.events;

if ( !elemData || !events ) { return; }

// types is actually an event object here if ( types && types.type ) { handler = types.handler; types = types.type; }

// Unbind all events for the element if ( !types || typeof types === "string" && types.charAt(0) === "." ) { types = types || "";

for ( type in events ) { jQuery.event.remove( elem, type + types ); }

return; }

// Handle multiple events separated by a space // jQuery(...).unbind("mouseover mouseout", fn); types = types.split(" ");

while ( (type = types[ i++ ]) ) { origType = type; handleObj = null; all = type.indexOf(".") < 0; namespaces = [];

if ( !all ) { // Namespaced event handlers namespaces = type.split("."); type = namespaces.shift();

namespace = new RegExp("(^|\\.)" + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)") }

eventType = events[ type ];

if ( !eventType ) { continue; }

if ( !handler ) { for ( var j = 0; j < eventType.length; j++ ) { handleObj = eventType[ j ];

if ( all || namespace.test( handleObj.namespace ) ) { jQuery.event.remove( elem, origType, handleObj.handler, j ); eventType.splice( j--, 1 ); } }

continue; }

special = jQuery.event.special[ type ] || {};

for ( var j = pos || 0; j < eventType.length; j++ ) { handleObj = eventType[ j ];

if ( handler.guid === handleObj.guid ) { // remove the given handler for the given type if ( all || namespace.test( handleObj.namespace ) ) { if ( pos == null ) { eventType.splice( j--, 1 ); }

if ( special.remove ) { special.remove.call( elem, handleObj ); } }

if ( pos != null ) { break; } } }

// remove generic event handler if no more handlers exist if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { removeEvent( elem, type, elemData.handle ); }

ret = null; delete events[ type ]; } }

// Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { var handle = elemData.handle; if ( handle ) { handle.elem = null; }

delete elemData.events; delete elemData.handle;

if ( jQuery.isEmptyObject( elemData ) ) { jQuery.removeData( elem ); } } },

// bubbling is internal trigger: function( event, data, elem /*, bubbling */ ) { // Event object or event type var type = event.type || event, bubbling = arguments[3];

if ( !bubbling ) { event = typeof event === "object" ? // jQuery.Event object event[expando] ? event : // Object literal jQuery.extend( jQuery.Event(type), event ) : // Just the event type (string) jQuery.Event(type);

if ( type.indexOf("!") >= 0 ) { event.type = type = type.slice(0, -1); event.exclusive = true; }

// Handle a global trigger if ( !elem ) { // Don't bubble custom events when global (to avoid too much overhead) event.stopPropagation();

// Only trigger if we've ever bound an event for it if ( jQuery.event.global[ type ] ) { jQuery.each( jQuery.cache, function() { if ( this.events && this.events[type] ) { jQuery.event.trigger( event, data, this.handle.elem ); } }); } }

// Handle triggering a single element

// don't do events on text and comment nodes if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { return undefined; }

// Clean up in case it is reused event.result = undefined; event.target = elem;

// Clone the incoming data, if any data = jQuery.makeArray( data ); data.unshift( event ); }

event.currentTarget = elem;

// Trigger the event, it is assumed that "handle" is a function var handle = jQuery.data( elem, "handle" ); if ( handle ) { handle.apply( elem, data ); }

var parent = elem.parentNode || elem.ownerDocument;

// Trigger an inline bound script try { if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { event.result = false; } }

// prevent IE from throwing an error for some elements with some event types, see #3533 } catch (e) {}

if ( !event.isPropagationStopped() && parent ) { jQuery.event.trigger( event, data, parent, true );

} else if ( !event.isDefaultPrevented() ) { var target = event.target, old, isClick = jQuery.nodeName(target, "a") && type === "click", special = jQuery.event.special[ type ] || {};

if ( (!special._default || special._default.call( elem, event ) === false) && !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {

try { if ( target[ type ] ) { // Make sure that we don't accidentally re-trigger the onFOO events old = target[ "on" + type ];

if ( old ) { target[ "on" + type ] = null; }

jQuery.event.triggered = true; target[ type ](); }

// prevent IE from throwing an error for some elements with some event types, see #3533 } catch (e) {}

if ( old ) { target[ "on" + type ] = old; }

jQuery.event.triggered = false; } } },

handle: function( event ) { var all, handlers, namespaces, namespace, events;

event = arguments[0] = jQuery.event.fix( event || window.event ); event.currentTarget = this;

// Namespaced event handlers all = event.type.indexOf(".") < 0 && !event.exclusive;

if ( !all ) { namespaces = event.type.split("."); event.type = namespaces.shift(); namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)"); }

var events = jQuery.data(this, "events"), handlers = events[ event.type ];

if ( events && handlers ) { // Clone the handlers to prevent manipulation handlers = handlers.slice(0);

for ( var j = 0, l = handlers.length; j < l; j++ ) { var handleObj = handlers[ j ];

// Filter the functions by class if ( all || namespace.test( handleObj.namespace ) ) { // Pass in a reference to the handler function itself // So that we can later remove it event.handler = handleObj.handler; event.data = handleObj.data; event.handleObj = handleObj;

var ret = handleObj.handler.apply( this, arguments );

if ( ret !== undefined ) { event.result = ret; if ( ret === false ) { event.preventDefault(); event.stopPropagation(); } }

if ( event.isImmediatePropagationStopped() ) { break; } } } }

return event.result; },

props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),

fix: function( event ) { if ( event[ expando ] ) { return event; }

// store a copy of the original event object // and "clone" to set read-only properties var originalEvent = event; event = jQuery.Event( originalEvent );

for ( var i = this.props.length, prop; i; ) { prop = this.props[ --i ]; event[ prop ] = originalEvent[ prop ]; }

// Fix target property, if necessary if ( !event.target ) { event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either }

// check if target is a textnode (safari) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; }

// Add relatedTarget, if necessary if ( !event.relatedTarget && event.fromElement ) { event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; }

// Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && event.clientX != null ) { var doc = document.documentElement, body = document.body; event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); }

// Add which for key events if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) { event.which = event.charCode || event.keyCode; }

// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) if ( !event.metaKey && event.ctrlKey ) { event.metaKey = event.ctrlKey; }

// Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && event.button !== undefined ) { event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); }

return event; },

// Deprecated, use jQuery.guid instead guid: 1E8,

// Deprecated, use jQuery.proxy instead proxy: jQuery.proxy,

special: { ready: { // Make sure the ready event is setup setup: jQuery.bindReady, teardown: jQuery.noop },

live: { add: function( handleObj ) { jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) ); },

remove: function( handleObj ) { var remove = true, type = handleObj.origType.replace(rnamespaces, "");

jQuery.each( jQuery.data(this, "events").live || [], function() { if ( type === this.origType.replace(rnamespaces, "") ) { remove = false; return false; } });

if ( remove ) { jQuery.event.remove( this, handleObj.origType, liveHandler ); } }

},

beforeunload: { setup: function( data, namespaces, eventHandle ) { // We only want to do this special case on windows if ( this.setInterval ) { this.onbeforeunload = eventHandle; }

return false; }, teardown: function( namespaces, eventHandle ) { if ( this.onbeforeunload === eventHandle ) { this.onbeforeunload = null; } } } } };

var removeEvent = document.removeEventListener ? function( elem, type, handle ) { elem.removeEventListener( type, handle, false ); } : function( elem, type, handle ) { elem.detachEvent( "on" + type, handle ); };

jQuery.Event = function( src ) { // Allow instantiation without the 'new' keyword if ( !this.preventDefault ) { return new jQuery.Event( src ); }

// Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Event type } else { this.type = src; }

// timeStamp is buggy for some events on Firefox(#3843) // So we won't rely on the native value this.timeStamp = now();

// Mark it as fixed this[ expando ] = true; };

function returnFalse() { return false; } function returnTrue() { return true; }

// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { preventDefault: function() { this.isDefaultPrevented = returnTrue;

var e = this.originalEvent; if ( !e ) { return; }

// if preventDefault exists run it on the original event if ( e.preventDefault ) { e.preventDefault(); } // otherwise set the returnValue property of the original event to false (IE) e.returnValue = false; }, stopPropagation: function() { this.isPropagationStopped = returnTrue;

var e = this.originalEvent; if ( !e ) { return; } // if stopPropagation exists run it on the original event if ( e.stopPropagation ) { e.stopPropagation(); } // otherwise set the cancelBubble property of the original event to true (IE) e.cancelBubble = true; }, stopImmediatePropagation: function() { this.isImmediatePropagationStopped = returnTrue; this.stopPropagation(); }, isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse };

// Checks if an event happened on an element within another element // Used in jQuery.event.special.mouseenter and mouseleave handlers var withinElement = function( event ) { // Check if mouse(over|out) are still within the same parent element var parent = event.relatedTarget;

// Firefox sometimes assigns relatedTarget a XUL element // which we cannot access the parentNode property of try { // Traverse up the tree while ( parent && parent !== this ) { parent = parent.parentNode; }

if ( parent !== this ) { // set the correct event type event.type = event.data;

// handle event if we actually just moused on to a non sub-element jQuery.event.handle.apply( this, arguments ); }

// assuming we've left the element since we most likely mousedover a xul element } catch(e) { } },

// In case of event delegation, we only need to rename the event.type, // liveHandler will take care of the rest. delegate = function( event ) { event.type = event.data; jQuery.event.handle.apply( this, arguments ); };

// Create mouseenter and mouseleave events jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { setup: function( data ) { jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); }, teardown: function( data ) { jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); } }; });

// submit delegation if ( !jQuery.support.submitBubbles ) {

jQuery.event.special.submit = { setup: function( data, namespaces ) { if ( this.nodeName.toLowerCase() !== "form" ) { jQuery.event.add(this, "click.specialSubmit", function( e ) { var elem = e.target, type = elem.type;

if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { return trigger( "submit", this, arguments ); } });

jQuery.event.add(this, "keypress.specialSubmit", function( e ) { var elem = e.target, type = elem.type;

if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { return trigger( "submit", this, arguments ); } });

} else { return false; } },

teardown: function( namespaces ) { jQuery.event.remove( this, ".specialSubmit" ); } };

}

// change delegation, happens here so we have bind. if ( !jQuery.support.changeBubbles ) {

var formElems = /textarea|input|select/i,

changeFilters,

getVal = function( elem ) { var type = elem.type, val = elem.value;

if ( type === "radio" || type === "checkbox" ) { val = elem.checked;

} else if ( type === "select-multiple" ) { val = elem.selectedIndex > -1 ? jQuery.map( elem.options, function( elem ) { return elem.selected; }).join("-") : "";

} else if ( elem.nodeName.toLowerCase() === "select" ) { val = elem.selectedIndex; }

return val; },

testChange = function testChange( e ) { var elem = e.target, data, val;

if ( !formElems.test( elem.nodeName ) || elem.readOnly ) { return; }

data = jQuery.data( elem, "_change_data" ); val = getVal(elem);

// the current data will be also retrieved by beforeactivate if ( e.type !== "focusout" || elem.type !== "radio" ) { jQuery.data( elem, "_change_data", val ); }

if ( data === undefined || val === data ) { return; }

if ( data != null || val ) { e.type = "change"; return jQuery.event.trigger( e, arguments[1], elem ); } };

jQuery.event.special.change = { filters: { focusout: testChange,

click: function( e ) { var elem = e.target, type = elem.type;

if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { return testChange.call( this, e ); } },

// Change has to be called before submit // Keydown will be called before keypress, which is used in submit-event delegation keydown: function( e ) { var elem = e.target, type = elem.type;

if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || type === "select-multiple" ) { return testChange.call( this, e ); } },

// Beforeactivate happens also before the previous element is blurred // with this event you can't trigger a change event, but you can store // information/focus[in] is not needed anymore beforeactivate: function( e ) { var elem = e.target; jQuery.data( elem, "_change_data", getVal(elem) ); } },

setup: function( data, namespaces ) { if ( this.type === "file" ) { return false; }

for ( var type in changeFilters ) { jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); }

return formElems.test( this.nodeName ); },

teardown: function( namespaces ) { jQuery.event.remove( this, ".specialChange" );

return formElems.test( this.nodeName ); } };

changeFilters = jQuery.event.special.change.filters; }

function trigger( type, elem, args ) { args[0].type = type; return jQuery.event.handle.apply( elem, args ); }

// Create "bubbling" focus and blur events if ( document.addEventListener ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { jQuery.event.special[ fix ] = { setup: function() { this.addEventListener( orig, handler, true ); }, teardown: function() { this.removeEventListener( orig, handler, true ); } };

function handler( e ) { e = jQuery.event.fix( e ); e.type = fix; return jQuery.event.handle.call( this, e ); } }); }

jQuery.each(["bind", "one"], function( i, name ) { jQuery.fn[ name ] = function( type, data, fn ) { // Handle object literals if ( typeof type === "object" ) { for ( var key in type ) { this[ name ](key, data, type[key], fn); } return this; }

if ( jQuery.isFunction( data ) ) { fn = data; data = undefined; }

var handler = name === "one" ? jQuery.proxy( fn, function( event ) { jQuery( this ).unbind( event, handler ); return fn.apply( this, arguments ); }) : fn;

if ( type === "unload" && name !== "one" ) { this.one( type, data, fn );

} else { for ( var i = 0, l = this.length; i < l; i++ ) { jQuery.event.add( this[i], type, handler, data ); } }

return this; }; });

jQuery.fn.extend({ unbind: function( type, fn ) { // Handle object literals if ( typeof type === "object" && !type.preventDefault ) { for ( var key in type ) { this.unbind(key, type[key]); }

} else { for ( var i = 0, l = this.length; i < l; i++ ) { jQuery.event.remove( this[i], type, fn ); } }

return this; },

delegate: function( selector, types, data, fn ) { return this.live( types, data, fn, selector ); },

undelegate: function( selector, types, fn ) { if ( arguments.length === 0 ) { return this.unbind( "live" );

} else { return this.die( types, null, fn, selector ); } },

trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); },

triggerHandler: function( type, data ) { if ( this[0] ) { var event = jQuery.Event( type ); event.preventDefault(); event.stopPropagation(); jQuery.event.trigger( event, data, this[0] ); return event.result; } },

toggle: function( fn ) { // Save reference to arguments for access in closure var args = arguments, i = 1;

// link all the functions, so any of them can unbind this click handler while ( i < args.length ) { jQuery.proxy( fn, args[ i++ ] ); }

return this.click( jQuery.proxy( fn, function( event ) { // Figure out which function to execute var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );

// Make sure that clicks stop event.preventDefault();

// and execute the function return args[ lastToggle ].apply( this, arguments ) || false; })); },

hover: function( fnOver, fnOut ) { return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); } });

var liveMap = { focus: "focusin", blur: "focusout", mouseenter: "mouseover", mouseleave: "mouseout" };

jQuery.each(["live", "die"], function( i, name ) { jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { var type, i = 0, match, namespaces, preType, selector = origSelector || this.selector, context = origSelector ? this : jQuery( this.context );

if ( jQuery.isFunction( data ) ) { fn = data; data = undefined; }

types = (types || "").split(" ");

while ( (type = types[ i++ ]) != null ) { match = rnamespaces.exec( type ); namespaces = "";

if ( match ) { namespaces = match[0]; type = type.replace( rnamespaces, "" ); }

if ( type === "hover" ) { types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); continue; }

preType = type;

if ( type === "focus" || type === "blur" ) { types.push( liveMap[ type ] + namespaces ); type = type + namespaces;

} else { type = (liveMap[ type ] || type) + namespaces; }

if ( name === "live" ) { // bind live handler context.each(function(){ jQuery.event.add( this, liveConvert( type, selector ), { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); });

} else { // unbind live handler context.unbind( liveConvert( type, selector ), fn ); } }

return this; } });

function liveHandler( event ) { var stop, elems = [], selectors = [], args = arguments, related, match, handleObj, elem, j, i, l, data, events = jQuery.data( this, "events" );

// Make sure we avoid non-left-click bubbling in Firefox (#3861) if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) { return; }

event.liveFired = this;

var live = events.live.slice(0);

for ( j = 0; j < live.length; j++ ) { handleObj = live[j];

if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { selectors.push( handleObj.selector );

} else { live.splice( j--, 1 ); } }

match = jQuery( event.target ).closest( selectors, event.currentTarget );

for ( i = 0, l = match.length; i < l; i++ ) { for ( j = 0; j < live.length; j++ ) { handleObj = live[j];

if ( match[i].selector === handleObj.selector ) { elem = match[i].elem; related = null;

// Those two events require additional checking if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; }

if ( !related || related !== elem ) { elems.push({ elem: elem, handleObj: handleObj }); } } } }

for ( i = 0, l = elems.length; i < l; i++ ) { match = elems[i]; event.currentTarget = match.elem; event.data = match.handleObj.data; event.handleObj = match.handleObj;

if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) { stop = false; break; } }

return stop; }

function liveConvert( type, selector ) { return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&"); }

jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error").split(" "), function( i, name ) {

// Handle event binding jQuery.fn[ name ] = function( fn ) { return fn ? this.bind( name, fn ) : this.trigger( name ); };

if ( jQuery.attrFn ) { jQuery.attrFn[ name ] = true; } });

// Prevent memory leaks in IE // Window isn't included so as not to unbind existing unload events // More info: // - http://isaacschlueter.com/2006/10/msie-memory-leaks/ if ( window.attachEvent && !window.addEventListener ) { window.attachEvent("onunload", function() { for ( var id in jQuery.cache ) { if ( jQuery.cache[ id ].handle ) { // Try/Catch is to handle iframes being unloaded, see #4280 try { jQuery.event.remove( jQuery.cache[ id ].handle.elem ); } catch(e) {} } } }); } /*! * Sizzle CSS Selector Engine - v1.0 * Copyright 2009, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ (function(){

var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, done = 0, toString = Object.prototype.toString, hasDuplicate = false, baseHasDuplicate = true;

// Here we check if the JavaScript engine is using some sort of // optimization where it does not always call our comparision // function. If that is the case, discard the hasDuplicate value. // Thus far that includes Google Chrome. [0, 0].sort(function(){ baseHasDuplicate = false; return 0; });

var Sizzle = function(selector, context, results, seed) { results = results || []; var origContext = context = context || document;

if ( context.nodeType !== 1 && context.nodeType !== 9 ) { return []; }

if ( !selector || typeof selector !== "string" ) { return results; }

var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context), soFar = selector;

// Reset the position of the chunker regexp (start from head) while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { soFar = m[3];

parts.push( m[1] );

if ( m[2] ) { extra = m[3]; break; } }

if ( parts.length > 1 && origPOS.exec( selector ) ) { if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { set = posProcess( parts[0] + parts[1], context ); } else { set = Expr.relative[ parts[0] ] ? [ context ] : Sizzle( parts.shift(), context );

while ( parts.length ) { selector = parts.shift();

if ( Expr.relative[ selector ] ) { selector += parts.shift(); }

set = posProcess( selector, set ); } } } else { // Take a shortcut and set the context if the root selector is an ID // (but not if it'll be faster if the inner selector is an ID) if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { var ret = Sizzle.find( parts.shift(), context, contextXML ); context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; }

if ( context ) { var ret = seed ? { expr: parts.pop(), set: makeArray(seed) } : Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;

if ( parts.length > 0 ) { checkSet = makeArray(set); } else { prune = false; }

while ( parts.length ) { var cur = parts.pop(), pop = cur;

if ( !Expr.relative[ cur ] ) { cur = ""; } else { pop = parts.pop(); }

if ( pop == null ) { pop = context; }

Expr.relative[ cur ]( checkSet, pop, contextXML ); } } else { checkSet = parts = []; } }

if ( !checkSet ) { checkSet = set; }

if ( !checkSet ) { Sizzle.error( cur || selector ); }

if ( toString.call(checkSet) === "[object Array]" ) { if ( !prune ) { results.push.apply( results, checkSet ); } else if ( context && context.nodeType === 1 ) { for ( var i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { results.push( set[i] ); } } } else { for ( var i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && checkSet[i].nodeType === 1 ) { results.push( set[i] ); } } } } else { makeArray( checkSet, results ); }

if ( extra ) { Sizzle( extra, origContext, results, seed ); Sizzle.uniqueSort( results ); }

return results; };

Sizzle.uniqueSort = function(results){ if ( sortOrder ) { hasDuplicate = baseHasDuplicate; results.sort(sortOrder);

if ( hasDuplicate ) { for ( var i = 1; i < results.length; i++ ) { if ( results[i] === results[i-1] ) { results.splice(i--, 1); } } } }

return results; };

Sizzle.matches = function(expr, set){ return Sizzle(expr, null, null, set); };

Sizzle.find = function(expr, context, isXML){ var set, match;

if ( !expr ) { return []; }

for ( var i = 0, l = Expr.order.length; i < l; i++ ) { var type = Expr.order[i], match;

if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { var left = match[1]; match.splice(1,1);

if ( left.substr( left.length - 1 ) !== "\\" ) { match[1] = (match[1] || "").replace(/\\/g, ""); set = Expr.find[ type ]( match, context, isXML ); if ( set != null ) { expr = expr.replace( Expr.match[ type ], "" ); break; } } } }

if ( !set ) { set = context.getElementsByTagName("*"); }

return {set: set, expr: expr}; };

Sizzle.filter = function(expr, set, inplace, not){ var old = expr, result = [], curLoop = set, match, anyFound, isXMLFilter = set && set[0] && isXML(set[0]);

while ( expr && set.length ) { for ( var type in Expr.filter ) { if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { var filter = Expr.filter[ type ], found, item, left = match[1]; anyFound = false;

match.splice(1,1);

if ( left.substr( left.length - 1 ) === "\\" ) { continue; }

if ( curLoop === result ) { result = []; }

if ( Expr.preFilter[ type ] ) { match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );

if ( !match ) { anyFound = found = true; } else if ( match === true ) { continue; } }

if ( match ) { for ( var i = 0; (item = curLoop[i]) != null; i++ ) { if ( item ) { found = filter( item, match, i, curLoop ); var pass = not ^ !!found;

if ( inplace && found != null ) { if ( pass ) { anyFound = true; } else { curLoop[i] = false; } } else if ( pass ) { result.push( item ); anyFound = true; } } } }

if ( found !== undefined ) { if ( !inplace ) { curLoop = result; }

expr = expr.replace( Expr.match[ type ], "" );

if ( !anyFound ) { return []; }

break; } } }

// Improper expression if ( expr === old ) { if ( anyFound == null ) { Sizzle.error( expr ); } else { break; } }

old = expr; }

return curLoop; };

Sizzle.error = function( msg ) { throw "Syntax error, unrecognized expression: " + msg; };

var Expr = Sizzle.selectors = { order: [ "ID", "NAME", "TAG" ], match: { ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ }, leftMatch: {}, attrMap: { "class": "className", "for": "htmlFor" }, attrHandle: { href: function(elem){ return elem.getAttribute("href"); } }, relative: { "+": function(checkSet, part){ var isPartStr = typeof part === "string", isTag = isPartStr && !/\W/.test(part), isPartStrNotTag = isPartStr && !isTag;

if ( isTag ) { part = part.toLowerCase(); }

for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { if ( (elem = checkSet[i]) ) { while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}

checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? elem || false : elem === part; } }

if ( isPartStrNotTag ) { Sizzle.filter( part, checkSet, true ); } }, ">": function(checkSet, part){ var isPartStr = typeof part === "string";

if ( isPartStr && !/\W/.test(part) ) { part = part.toLowerCase();

for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; if ( elem ) { var parent = elem.parentNode; checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; } } } else { for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; if ( elem ) { checkSet[i] = isPartStr ? elem.parentNode : elem.parentNode === part; } }

if ( isPartStr ) { Sizzle.filter( part, checkSet, true ); } } }, "": function(checkSet, part, isXML){ var doneName = done++, checkFn = dirCheck;

if ( typeof part === "string" && !/\W/.test(part) ) { var nodeCheck = part = part.toLowerCase(); checkFn = dirNodeCheck; }

checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); }, "~": function(checkSet, part, isXML){ var doneName = done++, checkFn = dirCheck;

if ( typeof part === "string" && !/\W/.test(part) ) { var nodeCheck = part = part.toLowerCase(); checkFn = dirNodeCheck; }

checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); } }, find: { ID: function(match, context, isXML){ if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); return m ? [m] : []; } }, NAME: function(match, context){ if ( typeof context.getElementsByName !== "undefined" ) { var ret = [], results = context.getElementsByName(match[1]);

for ( var i = 0, l = results.length; i < l; i++ ) { if ( results[i].getAttribute("name") === match[1] ) { ret.push( results[i] ); } }

return ret.length === 0 ? null : ret; } }, TAG: function(match, context){ return context.getElementsByTagName(match[1]); } }, preFilter: { CLASS: function(match, curLoop, inplace, result, not, isXML){ match = " " + match[1].replace(/\\/g, "") + " ";

if ( isXML ) { return match; }

for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { if ( elem ) { if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) { if ( !inplace ) { result.push( elem ); } } else if ( inplace ) { curLoop[i] = false; } } }

return false; }, ID: function(match){ return match[1].replace(/\\/g, ""); }, TAG: function(match, curLoop){ return match[1].toLowerCase(); }, CHILD: function(match){ if ( match[1] === "nth" ) { // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);

// calculate the numbers (first)n+(last) including if they are negative match[2] = (test[1] + (test[2] || 1)) - 0; match[3] = test[3] - 0; }

// TODO: Move to normal caching system match[0] = done++;

return match; }, ATTR: function(match, curLoop, inplace, result, not, isXML){ var name = match[1].replace(/\\/g, "");

if ( !isXML && Expr.attrMap[name] ) { match[1] = Expr.attrMap[name]; }

if ( match[2] === "~=" ) { match[4] = " " + match[4] + " "; }

return match; }, PSEUDO: function(match, curLoop, inplace, result, not){ if ( match[1] === "not" ) { // If we're dealing with a complex expression, or a simple one if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { match[3] = Sizzle(match[3], null, null, curLoop); } else { var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); if ( !inplace ) { result.push.apply( result, ret ); } return false; } } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { return true; }

return match; }, POS: function(match){ match.unshift( true ); return match; } }, filters: { enabled: function(elem){ return elem.disabled === false && elem.type !== "hidden"; }, disabled: function(elem){ return elem.disabled === true; }, checked: function(elem){ return elem.checked === true; }, selected: function(elem){ // Accessing this property makes selected-by-default // options in Safari work properly elem.parentNode.selectedIndex; return elem.selected === true; }, parent: function(elem){ return !!elem.firstChild; }, empty: function(elem){ return !elem.firstChild; }, has: function(elem, i, match){ return !!Sizzle( match[3], elem ).length; }, header: function(elem){ return /h\d/i.test( elem.nodeName ); }, text: function(elem){ return "text" === elem.type; }, radio: function(elem){ return "radio" === elem.type; }, checkbox: function(elem){ return "checkbox" === elem.type; }, file: function(elem){ return "file" === elem.type; }, password: function(elem){ return "password" === elem.type; }, submit: function(elem){ return "submit" === elem.type; }, image: function(elem){ return "image" === elem.type; }, reset: function(elem){ return "reset" === elem.type; }, button: function(elem){ return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; }, input: function(elem){ return /input|select|textarea|button/i.test(elem.nodeName); } }, setFilters: { first: function(elem, i){ return i === 0; }, last: function(elem, i, match, array){ return i === array.length - 1; }, even: function(elem, i){ return i % 2 === 0; }, odd: function(elem, i){ return i % 2 === 1; }, lt: function(elem, i, match){ return i < match[3] - 0; }, gt: function(elem, i, match){ return i > match[3] - 0; }, nth: function(elem, i, match){ return match[3] - 0 === i; }, eq: function(elem, i, match){ return match[3] - 0 === i; } }, filter: { PSEUDO: function(elem, match, i, array){ var name = match[1], filter = Expr.filters[ name ];

if ( filter ) { return filter( elem, i, match, array ); } else if ( name === "contains" ) { return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; } else if ( name === "not" ) { var not = match[3];

for ( var i = 0, l = not.length; i < l; i++ ) { if ( not[i] === elem ) { return false; } }

return true; } else { Sizzle.error( "Syntax error, unrecognized expression: " + name ); } }, CHILD: function(elem, match){ var type = match[1], node = elem; switch (type) { case 'only': case 'first': while ( (node = node.previousSibling) ) { if ( node.nodeType === 1 ) { return false; } } if ( type === "first" ) { return true; } node = elem; case 'last': while ( (node = node.nextSibling) ) { if ( node.nodeType === 1 ) { return false; } } return true; case 'nth': var first = match[2], last = match[3];

if ( first === 1 && last === 0 ) { return true; }

var doneName = match[0], parent = elem.parentNode;

if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { var count = 0; for ( node = parent.firstChild; node; node = node.nextSibling ) { if ( node.nodeType === 1 ) { node.nodeIndex = ++count; } } parent.sizcache = doneName; }

var diff = elem.nodeIndex - last; if ( first === 0 ) { return diff === 0; } else { return ( diff % first === 0 && diff / first >= 0 ); } } }, ID: function(elem, match){ return elem.nodeType === 1 && elem.getAttribute("id") === match; }, TAG: function(elem, match){ return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; }, CLASS: function(elem, match){ return (" " + (elem.className || elem.getAttribute("class")) + " ") .indexOf( match ) > -1; }, ATTR: function(elem, match){ var name = match[1], result = Expr.attrHandle[ name ] ? Expr.attrHandle[ name ]( elem ) : elem[ name ] != null ? elem[ name ] : elem.getAttribute( name ), value = result + "", type = match[2], check = match[4];

return result == null ? type === "!=" : type === "=" ? value === check : type === "*=" ? value.indexOf(check) >= 0 : type === "~=" ? (" " + value + " ").indexOf(check) >= 0 : !check ? value && result !== false : type === "!=" ? value !== check : type === "^=" ? value.indexOf(check) === 0 : type === "$=" ? value.substr(value.length - check.length) === check : type === "|=" ? value === check || value.substr(0, check.length + 1) === check + "-" : false; }, POS: function(elem, match, i, array){ var name = match[2], filter = Expr.setFilters[ name ];

if ( filter ) { return filter( elem, i, match, array ); } } } };

var origPOS = Expr.match.POS;

for ( var type in Expr.match ) { Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){ return "\\" + (num - 0 + 1); })); }

var makeArray = function(array, results) { array = Array.prototype.slice.call( array, 0 );

if ( results ) { results.push.apply( results, array ); return results; }

return array; };

// Perform a simple check to determine if the browser is capable of // converting a NodeList to an array using builtin methods. // Also verifies that the returned array holds DOM nodes // (which is not the case in the Blackberry browser) try { Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;

// Provide a fallback method if it does not work } catch(e){ makeArray = function(array, results) { var ret = results || [];

if ( toString.call(array) === "[object Array]" ) { Array.prototype.push.apply( ret, array ); } else { if ( typeof array.length === "number" ) { for ( var i = 0, l = array.length; i < l; i++ ) { ret.push( array[i] ); } } else { for ( var i = 0; array[i]; i++ ) { ret.push( array[i] ); } } }

return ret; }; }

var sortOrder;

if ( document.documentElement.compareDocumentPosition ) { sortOrder = function( a, b ) { if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { if ( a == b ) { hasDuplicate = true; } return a.compareDocumentPosition ? -1 : 1; }

var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; if ( ret === 0 ) { hasDuplicate = true; } return ret; }; } else if ( "sourceIndex" in document.documentElement ) { sortOrder = function( a, b ) { if ( !a.sourceIndex || !b.sourceIndex ) { if ( a == b ) { hasDuplicate = true; } return a.sourceIndex ? -1 : 1; }

var ret = a.sourceIndex - b.sourceIndex; if ( ret === 0 ) { hasDuplicate = true; } return ret; }; } else if ( document.createRange ) { sortOrder = function( a, b ) { if ( !a.ownerDocument || !b.ownerDocument ) { if ( a == b ) { hasDuplicate = true; } return a.ownerDocument ? -1 : 1; }

var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); aRange.setStart(a, 0); aRange.setEnd(a, 0); bRange.setStart(b, 0); bRange.setEnd(b, 0); var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); if ( ret === 0 ) { hasDuplicate = true; } return ret; }; }

// Utility function for retreiving the text value of an array of DOM nodes function getText( elems ) { var ret = "", elem;

for ( var i = 0; elems[i]; i++ ) { elem = elems[i];

// Get the text from text nodes and CDATA nodes if ( elem.nodeType === 3 || elem.nodeType === 4 ) { ret += elem.nodeValue;

// Traverse everything else, except comment nodes } else if ( elem.nodeType !== 8 ) { ret += getText( elem.childNodes ); } }

return ret; }

// Check to see if the browser returns elements by name when // querying by getElementById (and provide a workaround) (function(){ // We're going to inject a fake input element with a specified name var form = document.createElement("div"), id = "script" + (new Date).getTime(); form.innerHTML = "";

// Inject it into the root element, check its status, and remove it quickly var root = document.documentElement; root.insertBefore( form, root.firstChild );

// The workaround has to do additional checks after a getElementById // Which slows things down for other browsers (hence the branching) if ( document.getElementById( id ) ) { Expr.find.ID = function(match, context, isXML){ if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; } };

Expr.filter.ID = function(elem, match){ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); return elem.nodeType === 1 && node && node.nodeValue === match; }; }

root.removeChild( form ); root = form = null; // release memory in IE })();

(function(){ // Check to see if the browser returns only elements // when doing getElementsByTagName("*")

// Create a fake element var div = document.createElement("div"); div.appendChild( document.createComment("") );

// Make sure no comments are found if ( div.getElementsByTagName("*").length > 0 ) { Expr.find.TAG = function(match, context){ var results = context.getElementsByTagName(match[1]);

// Filter out possible comments if ( match[1] === "*" ) { var tmp = [];

for ( var i = 0; results[i]; i++ ) { if ( results[i].nodeType === 1 ) { tmp.push( results[i] ); } }

results = tmp; }

return results; }; }

// Check to see if an attribute returns normalized href attributes div.innerHTML = ""; if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && div.firstChild.getAttribute("href") !== "#" ) { Expr.attrHandle.href = function(elem){ return elem.getAttribute("href", 2); }; }

div = null; // release memory in IE })();

if ( document.querySelectorAll ) { (function(){ var oldSizzle = Sizzle, div = document.createElement("div"); div.innerHTML = "

";

// Safari can't handle uppercase or unicode characters when // in quirks mode. if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { return; }

Sizzle = function(query, context, extra, seed){ context = context || document;

// Only use querySelectorAll on non-XML documents // (ID selectors don't work in non-HTML documents) if ( !seed && context.nodeType === 9 && !isXML(context) ) { try { return makeArray( context.querySelectorAll(query), extra ); } catch(e){} }

return oldSizzle(query, context, extra, seed); };

for ( var prop in oldSizzle ) { Sizzle[ prop ] = oldSizzle[ prop ]; }

div = null; // release memory in IE })(); }

(function(){ var div = document.createElement("div");

div.innerHTML = "

";

// Opera can't find a second classname (in 9.6) // Also, make sure that getElementsByClassName actually exists if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { return; }

// Safari caches class attributes, doesn't catch changes (in 3.2) div.lastChild.className = "e";

if ( div.getElementsByClassName("e").length === 1 ) { return; }

Expr.order.splice(1, 0, "CLASS"); Expr.find.CLASS = function(match, context, isXML) { if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { return context.getElementsByClassName(match[1]); } };

div = null; // release memory in IE })();

function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; if ( elem ) { elem = elem[dir]; var match = false;

while ( elem ) { if ( elem.sizcache === doneName ) { match = checkSet[elem.sizset]; break; }

if ( elem.nodeType === 1 && !isXML ){ elem.sizcache = doneName; elem.sizset = i; }

if ( elem.nodeName.toLowerCase() === cur ) { match = elem; break; }

elem = elem[dir]; }

checkSet[i] = match; } } }

function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; if ( elem ) { elem = elem[dir]; var match = false;

while ( elem ) { if ( elem.sizcache === doneName ) { match = checkSet[elem.sizset]; break; }

if ( elem.nodeType === 1 ) { if ( !isXML ) { elem.sizcache = doneName; elem.sizset = i; } if ( typeof cur !== "string" ) { if ( elem === cur ) { match = true; break; }

} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { match = elem; break; } }

elem = elem[dir]; }

checkSet[i] = match; } } }

var contains = document.compareDocumentPosition ? function(a, b){ return !!(a.compareDocumentPosition(b) & 16); } : function(a, b){ return a !== b && (a.contains ? a.contains(b) : true); };

var isXML = function(elem){ // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; };

var posProcess = function(selector, context){ var tmpSet = [], later = "", match, root = context.nodeType ? [context] : context;

// Position selectors must be done after the filter // And so must :not(positional) so we move all PSEUDOs to the end while ( (match = Expr.match.PSEUDO.exec( selector )) ) { later += match[0]; selector = selector.replace( Expr.match.PSEUDO, "" ); }

selector = Expr.relative[selector] ? selector + "*" : selector;

for ( var i = 0, l = root.length; i < l; i++ ) { Sizzle( selector, root[i], tmpSet ); }

return Sizzle.filter( later, tmpSet ); };

// EXPOSE jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[":"] = jQuery.expr.filters; jQuery.unique = Sizzle.uniqueSort; jQuery.text = getText; jQuery.isXMLDoc = isXML; jQuery.contains = contains;

return;

window.Sizzle = Sizzle;

})(); var runtil = /Until$/, rparentsprev = /^(?:parents|prevUntil|prevAll)/, // Note: This RegExp should be improved, or likely pulled from Sizzle rmultiselector = /,/, slice = Array.prototype.slice;

// Implement the identical functionality for filter and not var winnow = function( elements, qualifier, keep ) { if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep(elements, function( elem, i ) { return !!qualifier.call( elem, i, elem ) === keep; });

} else if ( qualifier.nodeType ) { return jQuery.grep(elements, function( elem, i ) { return (elem === qualifier) === keep; });

} else if ( typeof qualifier === "string" ) { var filtered = jQuery.grep(elements, function( elem ) { return elem.nodeType === 1; });

if ( isSimple.test( qualifier ) ) { return jQuery.filter(qualifier, filtered, !keep); } else { qualifier = jQuery.filter( qualifier, filtered ); } }

return jQuery.grep(elements, function( elem, i ) { return (jQuery.inArray( elem, qualifier ) >= 0) === keep; }); };

jQuery.fn.extend({ find: function( selector ) { var ret = this.pushStack( "", "find", selector ), length = 0;

for ( var i = 0, l = this.length; i < l; i++ ) { length = ret.length; jQuery.find( selector, this[i], ret );

if ( i > 0 ) { // Make sure that the results are unique for ( var n = length; n < ret.length; n++ ) { for ( var r = 0; r < length; r++ ) { if ( ret[r] === ret[n] ) { ret.splice(n--, 1); break; } } } } }

return ret; },

has: function( target ) { var targets = jQuery( target ); return this.filter(function() { for ( var i = 0, l = targets.length; i < l; i++ ) { if ( jQuery.contains( this, targets[i] ) ) { return true; } } }); },

not: function( selector ) { return this.pushStack( winnow(this, selector, false), "not", selector); },

filter: function( selector ) { return this.pushStack( winnow(this, selector, true), "filter", selector ); },

is: function( selector ) { return !!selector && jQuery.filter( selector, this ).length > 0; },

closest: function( selectors, context ) { if ( jQuery.isArray( selectors ) ) { var ret = [], cur = this[0], match, matches = {}, selector;

if ( cur && selectors.length ) { for ( var i = 0, l = selectors.length; i < l; i++ ) { selector = selectors[i];

if ( !matches[selector] ) { matches[selector] = jQuery.expr.match.POS.test( selector ) ? jQuery( selector, context || this.context ) : selector; } }

while ( cur && cur.ownerDocument && cur !== context ) { for ( selector in matches ) { match = matches[selector];

if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { ret.push({ selector: selector, elem: cur }); delete matches[selector]; } } cur = cur.parentNode; } }

return ret; }

var pos = jQuery.expr.match.POS.test( selectors ) ? jQuery( selectors, context || this.context ) : null;

return this.map(function( i, cur ) { while ( cur && cur.ownerDocument && cur !== context ) { if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) { return cur; } cur = cur.parentNode; } return null; }); },

// Determine the position of an element within // the matched set of elements index: function( elem ) { if ( !elem || typeof elem === "string" ) { return jQuery.inArray( this[0], // If it receives a string, the selector is used // If it receives nothing, the siblings are used elem ? jQuery( elem ) : this.parent().children() ); } // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem.jquery ? elem[0] : elem, this ); },

add: function( selector, context ) { var set = typeof selector === "string" ? jQuery( selector, context || this.context ) : jQuery.makeArray( selector ), all = jQuery.merge( this.get(), set );

return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? all : jQuery.unique( all ) ); },

andSelf: function() { return this.add( this.prevObject ); } });

// A painfully simple check to see if an element is disconnected // from a document (should be improved, where feasible). function isDisconnected( node ) { return !node || !node.parentNode || node.parentNode.nodeType === 11; }

jQuery.each({ parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return jQuery.dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { return jQuery.dir( elem, "parentNode", until ); }, next: function( elem ) { return jQuery.nth( elem, 2, "nextSibling" ); }, prev: function( elem ) { return jQuery.nth( elem, 2, "previousSibling" ); }, nextAll: function( elem ) { return jQuery.dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return jQuery.dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { return jQuery.dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { return jQuery.dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return jQuery.sibling( elem.parentNode.firstChild, elem ); }, children: function( elem ) { return jQuery.sibling( elem.firstChild ); }, contents: function( elem ) { return jQuery.nodeName( elem, "iframe" ) ? elem.contentDocument || elem.contentWindow.document : jQuery.makeArray( elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var ret = jQuery.map( this, fn, until );

if ( !runtil.test( name ) ) { selector = until; }

if ( selector && typeof selector === "string" ) { ret = jQuery.filter( selector, ret ); }

ret = this.length > 1 ? jQuery.unique( ret ) : ret;

if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { ret = ret.reverse(); }

return this.pushStack( ret, name, slice.call(arguments).join(",") ); }; });

jQuery.extend({ filter: function( expr, elems, not ) { if ( not ) { expr = ":not(" + expr + ")"; }

return jQuery.find.matches(expr, elems); },

dir: function( elem, dir, until ) { var matched = [], cur = elem[dir]; while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { if ( cur.nodeType === 1 ) { matched.push( cur ); } cur = cur[dir]; } return matched; },

nth: function( cur, result, dir, elem ) { result = result || 1; var num = 0;

for ( ; cur; cur = cur[dir] ) { if ( cur.nodeType === 1 && ++num === result ) { break; } }

return cur; },

sibling: function( n, elem ) { var r = [];

for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { r.push( n ); } }

return r; } }); var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, rleadingWhitespace = /^\s+/, rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g, rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i, rtagName = /<([\w:]+)/, rtbody = /

" + tag + ">"; }, wrapMap = { option: [ 1, "" ], legend: [ 1, "
", "

" ], thead: [ 1, "

", "

" ], tr: [ 2, "

", "

" ], td: [ 3, "

", "

" ], col: [ 2, "

", "

" ], area: [ 1, "

", "

" ], _default: [ 0, "", "" ] };

wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td;

// IE can't serialize

and

"],col:[2,"

","

"],td:[3,"

","

"],_default:l.htmlSerialize?[0,"",""]:[1,"X

","

"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1>$2>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?"

"!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1>$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("")).appendTo(b.documentElement),b=(Db[0].contentWindow||Db[0].contentDocument).document,b.write(),b.close(),c=Fb(a,b),Db.detach()),Eb[a]=c),c}!function(){var a,b,c=z.createElement("div"),d="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";c.innerHTML="

a",a=c.getElementsByTagName("a")[0],a.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(a.style.opacity),l.cssFloat=!!a.style.cssFloat,c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===c.style.backgroundClip,a=c=null,l.shrinkWrapBlocks=function(){var a,c,e,f;if(null==b){if(a=z.getElementsByTagName("body")[0],!a)return;f="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",c=z.createElement("div"),e=z.createElement("div"),a.appendChild(c).appendChild(e),b=!1,typeof e.style.zoom!==L&&(e.style.cssText=d+";width:1px;padding:1px;zoom:1",e.innerHTML="

",e.firstChild.style.width="5px",b=3!==e.offsetWidth),a.removeChild(c),a=c=e=null}return b}}();var Hb=/^margin/,Ib=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Jb,Kb,Lb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Jb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),Ib.test(g)&&Hb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):z.documentElement.currentStyle&&(Jb=function(a){return a.currentStyle},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ib.test(g)&&!Lb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Mb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h=z.createElement("div"),i="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",j="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";h.innerHTML="

a",b=h.getElementsByTagName("a")[0],b.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(b.style.opacity),l.cssFloat=!!b.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,b=h=null,n.extend(l,{reliableHiddenOffsets:function(){if(null!=c)return c;var a,b,d,e=z.createElement("div"),f=z.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML="

a",a=z.createElement("div"),a.style.cssText=i,f.appendChild(a).appendChild(e),e.innerHTML="

t

",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",d=0===b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",c=d&&0===b[0].offsetHeight,f.removeChild(a),e=f=null,c},boxSizing:function(){return null==d&&k(),d},boxSizingReliable:function(){return null==e&&k(),e},pixelPosition:function(){return null==f&&k(),f},reliableMarginRight:function(){var b,c,d,e;if(null==g&&a.getComputedStyle){if(b=z.getElementsByTagName("body")[0],!b)return;c=z.createElement("div"),d=z.createElement("div"),c.style.cssText=i,b.appendChild(c).appendChild(d),e=d.appendChild(z.createElement("div")),e.style.cssText=d.style.cssText=j,e.style.marginRight=e.style.width="0",d.style.width="1px",g=!parseFloat((a.getComputedStyle(e,null)||{}).marginRight),b.removeChild(c)}return g}});function k(){var b,c,h=z.getElementsByTagName("body")[0];h&&(b=z.createElement("div"),c=z.createElement("div"),b.style.cssText=i,h.appendChild(b).appendChild(c),c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",n.swap(h,null!=h.style.zoom?{zoom:1}:{},function(){d=4===c.offsetWidth}),e=!0,f=!1,g=!0,a.getComputedStyle&&(f="1%"!==(a.getComputedStyle(c,null)||{}).top,e="4px"===(a.getComputedStyle(c,null)||{width:"4px"}).width),h.removeChild(b),c=h=null)}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Nb=/alpha\([^)]*\)/i,Ob=/opacity\s*=\s*([^)]*)/,Pb=/^(none|table(?!-c[ea]).+)/,Qb=new RegExp("^("+T+")(.*)$","i"),Rb=new RegExp("^([+-])=("+T+")","i"),Sb={position:"absolute",visibility:"hidden",display:"block"},Tb={letterSpacing:0,fontWeight:400},Ub=["Webkit","O","Moz","ms"];function Vb(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ub.length;while(e--)if(b=Ub[e]+c,b in a)return b;return d}function Wb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",Gb(d.nodeName)))):f[g]||(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Xb(a,b,c){var d=Qb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Yb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Zb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Jb(a),g=l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Kb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ib.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Yb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Kb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=Vb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Rb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]="",i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Vb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Kb(a,b,d)),"normal"===f&&b in Tb&&(f=Tb[b]),""===c||c?(e=parseFloat(f),c===!0||n.isNumeric(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Pb.test(n.css(a,"display"))?n.swap(a,Sb,function(){return Zb(a,b,d)}):Zb(a,b,d):void 0},set:function(a,c,d){var e=d&&Jb(a);return Xb(a,c,d?Yb(a,b,d,l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Ob.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Nb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Nb.test(f)?f.replace(Nb,e):f+" "+e)}}),n.cssHooks.marginRight=Mb(l.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},Kb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Hb.test(a)||(n.cssHooks[a+b].set=Xb)}),n.fn.extend({css:function(a,b){return W(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Jb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b) },a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c

a",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("

").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n}); // ]]>Per informazioni: tel. 030 3365631, www.museomillemiglia.it/it

Verona Legend Cars fa il pieno di visitatori (+40%)

$
0
0

La terza edizione di Verona Legend Cars si è chiusa con un netto miglioramento rispetto all’edizione 2016. La tre giorni dedicata all’auto classica e da collezione si è chiusa con 10.000 visitatori in più, con un aumento del 40% sull’anno precedente.

L’organizzazione di Automotodepoca ha quindi centrato l’obbiettivo di creare un altro appuntamento fisso per gli appassionati, certamente di dimensioni e affluenza inferiore rispetto alla più importante manifestazione italiana ma con una sua autorevolezza. Soddisfatto il numero uno del team, Mario Carlo Baccaglini: “In tre anni questa fiera è cresciuta come se ne avesse fatti dieci”.

Il primo weekend di maggio ha riservato alla passione per l’automobile tre padiglioni di Verona Fiere concentrando la presenza di club (Registro Italiano Fiat, Officina Ferrarese, Veteran Car Club Padova, Scuderia Jaguar Storiche, Simca Historiclub e Alfa Special), musei (Museo Nicolis di Villafranca, Museo Ferrari di Maranello), commercianti e ricambisti; con, in più, il movimento creato da “La Sfida dei Campioni” (che nel fine settimana ha visto scendere in pista leggende come Miki Biasion, Markku Alén, FranFrançois Delecour, Lucky Battistolli, Piero Liatti, Piero Longhi – vincitore dell’edizione 2017 della prova – e la giovane promessa Fabio Andolfi) e da alcuni raduni (l’SL Classic Club, il Club Peschiera Motori e il Gruppo Vicenza Cars).

PROTAGONISTE, OVVIAMENTE, LE AUTOMOBILI
Circa 1350 veicoli hanno animato Verona Legend Cars 2017. Presenti una selezione di Lancia Delta da corsa, una mostra sulle più belle Abarth da competizione dal 1960 alla 131 di fine anni 70 e un interessante rassegna tematica che ha inteso celebrare gli ultimi slanci di vitalità dell’Alfa Romeo nel settore delle corse: 75 Evoluzione, 155 DTM, 155 BTCC, 156 Superturismo e 156 Super 2000.

La maggior parte delle vetture presenti – in vendita – ha inoltre offerto la possibilità di una finestra sulla situazione del mercato. Che non sembra aver portato a Verona grandi novità:

– Permane il momento particolarmente euforico per le vetture Porsche: per gli esemplari dei primi anni 70 si chiedono cifre anche a 5 zeri; il comparto dell’offerta, inoltre, sta provando a valorizzare le 996, specialmente 4S e Turbo; 964 e 993 hanno raggiunto livelli di prezzo paritetici, tra 50 e 60.000 euro in media. Complessivamente, a causa dei prezzi vigenti, scarseggiano ampiamente i risultati in termini di cartellonistica recante l’agognata affermazione “VENDUTA!”.

– Tra Lancia Delta Integrale 16V EVO, numerose Ferrari, si sono visti parecchi esemplari di automobili non particolarmente nobili dal punto di vista collezionistico (Renault 5 Alpine, Fiat 131 Racing 2000 TC o BMW 745) sulle quali i segni del tempo sembrano essersi limitati a qualche carezza. Queste vetture, probabilmente ormai rarissime a causa delle rottamazioni, hanno caratteristiche (e prezzi) davvero uniche: spiccava su tutte un’Alfa Romeo Arna con appena 2200 sul tachimetro, conservata e mai restaurata. La cifra, 8.700 euro, riflette certamente la cura spesa per portarla a queste condizioni fino a oggi.

Animata anche la piazza del mini raduno organizzato, nella giornata di domenica, da Ruoteclassiche, che aveva come tema le auto immatricolate nel 1987 e quindi al loro primo anno da “storiche”. L’iniziativa denominata “Miss Copertina 1987″ aveva l’obiettivo di selezionare tra loro la più bella, che si guadagnerà la copertina della rivista del numero di dicembre. Ma ne riparleremo presto nel dettaglio…

Alvise-Marco Seno

Il fai da te del collezionista

$
0
0

Tutti sappiamo che per conservare al meglio la nostra auto d’epoca nel tempo è indispensabile tenerla in ordine e in perfetta efficienza, procedendo con buona frequenza alla sua pulizia. E non potrebbe essere diversamente: quanti sono gli appassionati di vetture d’antan che prima di tutto si innamorano del lato estetico e poi di quello meccanico? La stragrande maggioranza. Del resto è il primo impatto quello che conta: vi immaginate che effetto farebbe il vostro mezzo se fosse sporco e con carrozzeria e interno impresentabile? E poi, avete presente il piacere che dà dedicare qualche ora o anche un intero weekend a “mettere le mani” sul nostro oggetto di passione?

Sappiamo però bene che per un’adeguata pulizia vanno utilizzati esclusivamente prodotti di qualità e tecniche adeguate, per un risultato finale eccezionale e che nel tempo protegga la carrozzeria, i cerchi, la capote e l’abitacolo, in modo farli risultare sempre in condizioni da concorso.

Ecco perché, in collaborazione con Ma-Fra, abbiamo messo a punto una serie di video (che trovate qui) con i consigli utili per il “fai da te” del collezionista, raccolti in sei puntate legate alla pulizia dell’auto. Partiamo dalle regole per il lavaggio perfetto della carrozzeria. In quelle successive, ci concentreremo invece sui cerchi (a raggi, in ferro oppure in lega), su capote per le auto scoperte, su  pulizia motore e componenti meccaniche, e sul ripristino dell’interno in stoffa o in materiale più pregiato (pelle o Alcantara). 

Fate tesoro dei nostri suggerimenti che vi consentiranno, grazie all’utilizzo di prodotti specifici e di alta qualità, di raggiungere risultati paragonabili a quelli dei veri professionisti del settore. Con il vantaggio di aver speso del tempo a contatto con il vostro oggetto di passione, per renderlo ancora più affascinante e prezioso.

A Modena “Ingegneri che gente…”

$
0
0

Prendi tre progettisti di chiara fama, falli punzecchiare da due giornalisti, organizza il tutto in un luogo che sa di storia e di leggenda. Ne uscirà una matinée di ricordi, retroscena e inediti. È quel che è successo sabato scorso al Mef, il Museo Enzo Ferrari di Modena, dove Leonardo Fioravanti, Lorenzo Ramaciotti e Mauro Forghieri hanno parlato delle macchine della loro vita: uno per ciascuno, hanno selezionato un modello cui sono particolarmente affezionati e ne hanno raccontato la genesi e lo sviluppo. L’iniziativa era nell’ambito di Modena, terra di motori, weekend di manifestazioni trasversali a tema; a moderare l’incontro, intitolato “Ingegneri che gente…”, Mauro Tedeschini e Carlo Cavicchi, entrambi ex direttori di Quattroruote.

Alla corte del Drake

Fioravanti, 79 anni e un piglio da attore consumato, ha raccontato la sua Daytona. Un’auto che nessuno gli aveva chiesto: né la Ferrari a Pininfarina né la Pininfarina, per cui al tempo lavorava, a lui. Eppure questo al tempo giovane ingegnere si era fatto un’idea: che nel momento in cui (con la Dino) il motore centrale stava dilagando anche nella produzione di Maranello dopo essersi imposto nelle corse, andasse “vendicato” il motore anteriore con una berlinetta che spazzasse via i difetti della precedente 275 GTB. Che avesse, cioè, un’estetica equilibrata e leggera, illuminasse bene la strada di notte per andare più forte (no, non c’erano limiti) e permettesse una visibilità a 360 gradi in pista (terreno ben noto a Fioravanti, gentleman driver oltre che designer). Fu così che, per sua iniziativa, scontrandosi col parere di tutti, concepì questa vettura sul pianale della precedente 12 cilindri e la presentò a Enzo Ferrari. Il quale, scrutando prima la maquette poi chi l’aveva disegnata con la sua solita espressione da sfinge, chiese a Fioravanti: “Ma lei è soddisfatto del suo lavoro?” ricevendone un “No. C’è una cosa che non mi soddisfa”. Il problema è che quella cosa non riguardava la carrozzeria, ma quel che ci stava sotto: le carreggiate troppo strette, che determinavano, secondo Fioravanti, quello che al tempo chiamavano “effetto Opel”, cioè le ruote si perdevano nella carrozzeria. Al che il Drake lo incalzò: “E cosa vorrebbe?”, e Fioravanti: “Tre millimetri in più per parte”. “Va bene, le darò sei centimetri, non uno di più”: le dieci volte tanto. È così che la Daytona è nata larga, bella piantata, come la conosciamo.

Una Maserati o una Lancia?

Lorenzo Ramaciotti ha 69 anni ed è stato autore di 60 modelli : tra tutti ha “portato” la Maserati Quattroporte, la quinta generazione, quella nata nel 2003 che Carlo Azeglio Ciampi usò come auto ufficiale del suo settennato. Considerato piemontese per formazione e carriera, Ramaciotti (ultimo suo incarico: capo del centro stile FCA, sino al 2015) è in realtà nato a Modena. Dunque disegnare una Maserati è stato, per lui, un omaggio alle sue origini, oltre che il compimento di un sogno giovanile. Tanto più che il suo progetto, figlio dei suoi ultimi anni in Pininfarina, venne preferito a quello della Italdesign con cui era in concorrenza. Pochi sanno che la Quattroporte V, nei piani industriali di una Fiat Auto in forte crisi d’identità – erano i difficili anni in cui scomparvero i fratelli Agnelli e Marchionne era ancora di là da venire – rischiò di condividere la piattaforma con quella della Lancia Thesis: il prototipo, di cui  ha mostrato le immagini, era goffo, per via di uno sbalzo anteriore enorme. E siccome, per dirla alla Ramaciotti, “lo stile italiano è prima di tutto proporzione” non funzionava proprio. Alla fine a Torino lo capirono e autorizzarono la Maserati a sviluppare un pianale specifico. A quel punto la vista laterale era una più credibile ma si pose un altro problema: la concorrenza tedesca proponeva l’ammiraglia in una doppia versione: passo standard e passo lungo. La Maserati non aveva abbastanza fondi per permettersi altrettanto, dunque dovette accontentarsi di una singola versione con passo intermedio allungato di 12 cm rispetto al disegno originario: 9 a beneficio delle gambe dei passeggeri posteriori, 3 nel cofano motore, per fare spazio a una versione 4×4 che in realtà non sarebbe mai nata.

La “cupola” della F.1

Last but not least Mauro Forghieri, padre di tante Ferrari di F.1, tra cui quella d’elezione è stata la 312T del 1975, la prima ad abbinare al V12 a 180° (e non boxer, come lui stesso ha tenuto a rimarcare) il cambio trasversale. Fu la monoposto che riportò un mondiale Piloti a Maranello dopo undici anni di astinenza grazie a Niki Lauda, che proprio con essa si laureò per la prima volta campione. Pescando a braccio dall’archivio dei ricordi l’ex tecnico del Cavallino rampante ha ricordato quanto le scuderie inglesi avessero attribuito alla presa d’aria alta, dietro l’abitacolo, il successo della T, che in realtà riprendeva questa soluzione dalla precedente B3, sottovalutando l’importanza che, specie sui circuiti misti, aveva il cambio montato di traverso, davanti all’assale posteriore, ai fini del centraggio delle masse. Erano gli anni di una Ferrari vincente perché il “Grande vecchio” sapeva circondarsi di collaboratori che davano l’anima per la scuderia e perché tutti quelli che lavoravano per l’azienda avevano, di fondo, una cultura umanistica che rende, secondo Forghieri, un italiano diverso dagli altri e capace di essere capo ovunque. Una lettura poco tecnica ma molto profonda che assume particolare significato specie se, a fornirla, è proprio un ingegnere di grande valore come lui.

Marco Visani

 

Lister Knobbly “Continuation”, arriva la versione stradale

$
0
0

L’auto storica ha il suo maggior fascino nell’aver fermato il tempo: è giunta ai giorni nostri attraversando numerosi decenni, ancora con i suoi odori (pardon, profumi!), ancora – se si tratta di un’auto da corsa – con i segni delle battaglie cui a preso parte – ancora con tutta l’imperfetta perfezione delle sue giunture.

Perché, allora, acquistare, un’auto di ieri costruita oggi? Dopo tutto: non ha girato il mondo, non ha vissuto tante storie diverse, non ha avuto illustri proprietari, non ha partecipato alle corse più famose della storia dello sport.

Tuttavia la replicante di un’automobile d’epoca offre senza dubbio il vantaggio di risparmiare la vettura “autenticamente” antica e di gustare le emozioni della guida di un veicolo d’epoca ma con molta meno ansia di rovinare, di consumare un oggetto prezioso. E di intaccarne il valore storico e collezionistico. Di contro, è un’auto nuova, senza storia. 

KNOBBLY STRADALE
L’ultima proposta (ma anche l’ultima provocazione da un Paese che da sempre costruisce questo genere di automobili) è della rediviva Lister Motor Company, da poco nuovamente tornata sul mercato non con modelli completamente nuovi ma riprendendo la produzione proprio da dove si era fermata, 60 anni fa.

Lawrence Whittaker, CEO Lister Motor Company, ha lanciato nei mesi scorsi la Knobbly Continuation, replica originale della Knobbly del ’59 con motore Jaguar D. A differenza del primo modello, dedicato solo alle competizioni in pista, è ora il turno della versione omologata stradale (secondo standard  Individual Vehicle Approval – IVA).

OGGI COME ALLORA
Anche nel caso della Knobbly Stradale, il processo di produzione segue ritmi e processi artigianali in cui le tecniche di produzione sono le stesse utilizzate molti decenni addietro ma i materiali, moderni e di maggiore qualità, consentono quel livello di affidabilità che qualsiasi cliente moderno si aspetta.

Attorno a un telaio tubolare in acciaio viene applicata una carrozzeria in alluminio battuta a mano, ottenuta con 500 ore di lavoro. Il motore, un 6 cilindri in linea, viene fornito da Crosthwaite & Gardiner, specializzato nella costruzione di propulsori replica di unità Jaguar: partendo da un blocco originale, si ottengono 330 cavalli. Poiché la Knobbly pesa meno di 800 chili, le prestazioni sono molto elevate: 0 – 60 miglia in 4″3, velocità massima di 181 miglia orarie (291 km/h). Il motore è abbinato a trazione posteriore e cambio meccanico a 4 marce.

La produzione sarà di soli 10 esemplari, con inizio nel settembre 2017 e consegne dal giugno 2018. Il prezzo di una Knobbly stradale con motore 6 cilindri da 4,2 litri è fissato in 225.000 Sterline (264.780 Euro). Per una Knobbly con motore 6 cilindri 3.8 carter secco sono invece necessarie 295.000 Sterline (347.000 Euro).

CARATTERISTICHE PRINCIPALI
– Sterzo collassabile
– rollbar di protezione
– indicatori di direzione, luce fendinebbia posteriore>
– targhe
– plancia rivestita in pelle
– spia anomalia impianto freni e riserva carburante
– freno a mano a leva
– assenza del gallettone di serraggio delle ruote
– assenza del parabrezza (sostituito da un deflettore

Alvise-Marco Seno


12 maggio 1957, la Mille Miglia cambia per sempre

$
0
0

12 maggio 1957, ore 16.15: la “Gara più bella del mondo”, arrivata alla sua 24a edizione, vive le sue batture finali nel tratto di Statale tra Mantova e Brescia, all’altezza di Guidizzolo. La carovana ha percorso poco più di 1400 km, a una media superiore ai 150 km/h. La folla è come sempre quella delle grandi occasioni, perché lo spettacolo della Mille Miglia è unico e imperdibile, in un’epoca in cui l’unico modo per vedere una corsa automobilistica è trovarsi un posticino lungo il percorso.

La Ferrari 315 S n. 531 di De Portago-Nelson, al momento quinti, sbanda per cause imprecisate, probabilmente lo scoppio del pneumatico anteriore sinistro. La vettura, fuori controllo, piomba sul pubblico assiepato a bordo strada e falcia nove spettatori, tra i quali cinque bambini tra gli 8 e i 10 anni. Le conseguenze sono drammatiche e cambieranno la storia della corsa: nove morti, ai quali si aggiungono il pilota e il suo “secondo” Edmund Gurner Nelson. Il clamore per il terribile incidente alimenta furibonde polemiche sulla carta stampata: con una funambolica inversione a U, molti giornalisti, che fino a pochi giorni prima definivano i piloti “moderni eroi del volante”, li ribattezzano “oziosi scavezzacollo”. È la fine di un’epoca, quella delle corse su strada.

A farne le spese, oltre alle undici incolpevoli vittime, è la stessa Mille Miglia: sospesa e mai più ripresa in forma di gara di velocità… Oggi sono esattamente sessant’anni da quel giorno, e la Freccia Rossa con l’edizione che sta per partire festeggia i suoi novant’anni.

Dario Tonani

 

All’asta una Porsche 964 Carrera RSR (1993) con 10 chilometri

$
0
0

Modello molto raro, esponente della “nobile” genealogia delle Porsche 911 ancora “vecchia maniera” (motore con raffreddamento ad aria, sospensione posteriore a bracci obliqui), versione da corsa. E, infine, condizione di totale verginità, la caratteristica che, questa volta, farà sul serio la differenza. Sono le caratteristiche del lotto 133 dell’asta organizzata da RM Sotheby’s a Villa Erba, sulle sponde del Lago di Como, per il prossimo 27 maggio mentre Cernobbio sarà in festa per il concorso d’Eleganza Villa d’Este. Si tratta di un esemplare di Porsche 964 Carrera RSR 3.8, la versione da competizione della RS 3.8 e, a sua volta, l’ulteriore evoluzione in chiave estrema della 964 Carrera RS 3.6.

Lo scorso settembre la Casa d’aste canadese fece segnare nuovi record in tema di 911 con un magnifico lotto di 5 esemplari di Porsche 911 dei primi Anni 90, tutte molto rare e preziose. Spuntarono prezzi, naturalmente, da capogiro. Tra essi anche una 964 Carrera RS 3.8, che passò di mano per oltre 860.000 Euro.

MA QUESTA VOLTA È DIVERSO
L’esemplare di queste immagini possiede tutte le carte in regola per stabilire un primato assoluto. E’ una versione da corsa, una di circa una cinquantina costruite.

L’esemplare, acquistato nel 1993 e classificato come “ordine speciale”, immediatamente dopo l’acquisto, ancora dotato dello strato protettivo di cosmoline per la vernice, è stato parcheggiato in una collezione privata e qui è rimasto per 25 anni in stato di letargo. Sul tachimetro, quindi, questa superba automobile da collezione, indica appena 10 chilometri percorsi. RM Sotheby’s ha così stabilito una quotazione compresa tra 2 e 2,2 milioni di Euro.

DA CORSA MA STRADALE
E’ stata tuttavia confezionata, a dispetto della destinazione puramente sportiva, con un abitacolo rifinito completamente come stradale: seppur in modo sommario, quindi, l’abitacolo è stato completamente rivestito in pelle e moquette di colore rosso, ivi compresi i tappetini, il cielo dell’abitacolo, i sedili a guscio, il volante a tre razze e pure i tubi della gabbia rollbar integrale che circondano tutto il cockpit. Lo schienale delle sedute, così come la plancia e la strumentazione (in pelle, così come le cornici degli strumenti), sono invece in colore carrozzeria, tinta argento Polar.

La veste esterna reca la particolarità di avere ruote in lega (magnifici cerchi Cup da 18″) in colore Ametista e le pinze dei freni in colore oro. Naturalmente l’esemplare è originale al 100%.

964 CARRERA RSR
Nel 1992, da una Porsche 964 Carrera 2 di serie è stata ricavata la sua versione alleggerita, la Carrera RS con 150 chili in meno e 10 Cv in più (260). Nel ’93, dalla Carrera RS è stata derivata la sua versione ancora più estrema, concepita per i campionati GT. La Carrera RS 3.8 stradale aveva la carrozzeria allargata della Turbo e motore M64/04, portato da 3.600 a 3.746 cc con aumento dell’alesaggio da 100 a 102 mm (corsa fissa a 76,4 mm) per 300 Cv di potenza. La versione da corsa, la RSR 3.8, dichiarava una potenza massima di 350 Cv, dato da molti considerato molto prudente.

Questo modello ha avuto una carriera sportiva di tutto rispetto: vittoria alla 24 Ore di Spa, alla 1000 KM di Suzuka, alla 24 Ore di Daytona e alla 24 Ore di Interlagos. A questi successi si aggiungono una vittoria di classe alla 24 Ore di Le Mans e alla 12 Ore di Sebring.

Alvise-Marco Seno

Il tempio del “Wankel”

$
0
0

Forse non tutti sanno (eccetto i fan Mazda), che la scelta della Casa giapponese di votarsi al motore Wankel fu dettata dalla volontà dell’azienda di rimanere indipendente: serviva un’unicità tecnologica per non essere “statalizzati”, e il brevetto prelevato dalle mani dell’agonizzante NSU fu provvidenziale. In Germania il signor Walter Frey rimase profondamente colpito da questa vicenda e iniziò circa 40 anni fa a distribuire Mazda nel suo Paese, lavoro che porta avanti insieme con i figli con dedizione e orgoglio ancora oggi.

Ma l’amore per il marchio giapponese divenne ogni giorno più grande e intenso. Al punto che Walter iniziò presto a raccogliere Mazda in una sua personale collezione: “Meglio dei francobolli” , dice. Oggi ha superato il centinaio di esemplari e, con la collaborazione di Mazda Germania e della municipalità di Augsburg, ha aperto in uno splendido capannone dal sapore antico (è un ex deposito di tram ristrutturato con mattoni e travi a vista) la più grande esposizione di Mazda al mondo.

Nemmeno la Casa madre a Hiroshima arriva a tanto: qui sono una settantina i pezzi in mostra permanente e ci si trova di tutto. A partire dal primo motocarro GB-Dreirad degli anni 50 sino alle microcar degli anni 70, alla Luce disegnata da Bertone, alle varie serie di 323 e all’esposizione di una raccolta di auto con motore Wankel impressionante. Si arriva sino alle berlinone di lusso Xedos 6 e 9 nate negli anni 90 per contrastare le Lexus. La famiglia Frey ha persino fatto modificare un pickup Mazda trasformandolo in carro attrezzi: con buona probabilità, è l’unico al mondo con un motore Wankel sotto il cofano.

Ma la collezione comprende anche pezzi particolarmente pregiati come la Cosmo Sport 110 S del 1968 (valore sopra i 100mila euro) e unici come il pulmino Mazda con una ventina di posti. Non mancano le insegne del concessionario degli anni 70 e le campagne pubblicitarie tedesche, anche le più osé, incorniciate e appese alle pareti.

I “miatisti” resteranno soddisfatti trovando in bella evidenza una splendida MX-5 NA del 1990 (forse tra le più vecchie in Europa) Mariner Blue, perfettamente conservata e con poco più di 40mila km all’attivo. Poco dietro una NB coupé rossa con guida a destra, modello introvabile nel Vecchio Continente. Come la piccola Autozam AZ1, sportivetta anni 90 con le porte ad ali di gabbiano.

Questa meravigliosa e unica collezione di Mazda al mondo è visitabile dal pubblico dal martedì a domenica dalle 10 alle 18, biglietto di ingresso 5 euro (maggiori info sul sito mazda-classic-frey.de). La fortuna sarebbe quella di trovare nel capannone Walter o i figli Joachim e Markus che possano raccontare la storia di ciascuno di quei rari e speciali pezzi esposti e raccolti con una passione rara e di sicuro contagiosa. “Per noi Mazda è una famiglia” chiosa Frey.

D.G.

“Copertine d’autore”, a maggio tocca a Marcello Gandini

$
0
0

La gallery delle nostre “Copertine d’autore” prosegue con una nuova matita e un nuovo protagonista (a fine anno saranno dodici i grandi car designer ad aver partecipato alla nostra iniziativa). Dopo Aldo Brovarone (gennaio), Chris Bangle (febbraio), Walter De Silva (marzo) e Leonardo Fioravanti (aprile), a sviluppare il tema del trentennale di Ruoteclassiche ci ha pensato, sul numero di maggio, Marcello Gandini, padre di alcune tra le automobili più iconiche che siano mai state disegnate: Lamborghini Miura e Countach, Lancia Stratos e Alfa Romeo Carabo…

Di sé, con orgoglio, afferma: “Ho sempre avuto due cappelli. Quello dello stlista e quello del meccanico. Anzi, io sono nato meccanico. Le mie prime auto, da ragazzo, non le ho disegnate. Le ho fatte“. “L’automobile? Per metà un tappeto volante e per metà una casa…”.

In edicola arrivano le Ferrari ai “Raggi X”

$
0
0

Dopo aver raccontato le Ferrari stradali, quelle per le corse e gli uomini che hanno contribuito a rendere unica e inimitabile la storia della Casa di Maranello, ci siamo fatti prendere da un attacco di voyeurismo: siamo andati a sbirciare sotto i vestiti delle auto del Cavallino, per capire quali segreti nascondono. La tecnica e lo stile sono i “trucchi” che hanno creato il mito.

In questa carrellata di quasi settanta “radiografie”, selezionate spulciando l’immenso archivio di Quattroruote, abbiamo scelto alcuni dei modelli più interessanti e innovativi. Li riproduciamo a doppia pagina, per dar modo anche a voi di cogliere quanto grandiose siano l’inventiva e la fantasia dei maestri che hanno progettato questi capolavori della tecnica e dello stile dell’automobile. Gli “spaccati” sono il risultato di centinaia di ore di studio e di lavoro di artisti che negli anni hanno collaborato con la nostra Casa editrice: bisogna rendere merito anche a loro se questo avvincente volume arriva tra le vostre mani.

Abbiamo suddiviso il contenuto in tre parti, seguendo le direttrici della storia Ferrari: le granturismo da strada (includendo un paio di show car da Salone – la Modulo e la Mythos – e una vettura laboratorio, la poco nota 408 4RM a quattro ruote motrici), le monoposto di Formula 1, e le Sport Prototipo. Il criterio di selezione è stato quello di puntare sui modelli che hanno avuto maggiore significato: hanno riscosso un importante successo commerciale, oppure hanno segnato una svolta tecnica, oppure ancora hanno conquistato vittorie decisive in campo agonistico. Nel mezzo del mazzo, abbiamo inserito anche qualche modello che forse sarebbe stato meglio dimenticare. Ma, sempre attraverso i “raggi X”, abbiamo cercato di individuare i motivi che hanno condotto all’insuccesso.

Con questo quarto volume, la collana allegata a Ruoteclassiche “Il meglio del Cavallino”, che festeggia le 70 primavere del marchio, si avvia alla conclusione. Con il prossimo numero di giugno l’ultimo titolo: “Top Secret”. Sarà il viaggio finale, attraverso i modelli meno noti, che non hanno raggiunto lo stadio della produzione, oppure che sono stati realizzati in tiratura limitata, oppure ancora in esemplare unico.

Volume di 144 pagine, in edicola con Ruoteclassiche di maggio a 9,90 euro (solo rivista, 5,50 euro).

Marco Di Pietro

Viewing all 3030 articles
Browse latest View live