Help
RSS
API
Feed
Maltego
Contact
Domain > meesto.ru
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2014-08-11
90.156.201.50
(
ClassC
)
2014-11-13
90.156.201.59
(
ClassC
)
2014-11-18
90.156.201.106
(
ClassC
)
2014-11-18
90.156.201.107
(
ClassC
)
2024-10-22
90.156.201.84
(
ClassC
)
Port 80
HTTP/1.1 200 OKDate: Tue, 22 Oct 2024 20:16:48 GMTContent-Type: text/html; charsetutf-8Content-Length: 576877Connection: keep-aliveKeep-Alive: timeout10Vary: Accept-EncodingServer: ApacheLast-Modified: Thu, 08 Mar 2018 14:09:04 GMTETag: 8cd6d-566e737df98d7Accept-Ranges: bytesCache-Control: max-age172800, private, must-revalidateExpires: Tue, 29 Oct 2024 20:16:48 GMT !DOCTYPE html>html langru itemscope itemtypehttp://schema.org/Organization class js no-touch cufon-active cufon-ready>head> link relalternate typeapplication/rss+xml titleСтудия дизайн интерьера Место hreflangru hrefhttp://www.meesto.ru/rss.xml /> link relshortcut icon hreffavicon.ico typeimage/x-icon> title>Дизайн проект квартиры интерьера студия Место Санкт Петербург/title> meta namekeywords contentдизайнер квартиры спб,заказать дизайн проект интерьера спб,студия дизайнера интерьера спб, дизайнеры интерьера спб,стоимость дизайна интерьера спб,стоимость услуг дизайнеров интерьера спб,стоимость дизайна помещений спб,заказать дизайнера помещений спб,цена дизайнера интерьера спб,цена дизайн проекта спб> meta nameDescription contentУслуги лучших дизайнеров интерьера,любой дизайн проект квартиры,домов,офис,кафе.Студия Дизайна Интерьера Место,+7(812)982-57-52> meta nameviewport contentwidthdevice-width, initial-scale1> div classnone styledisplay:none> div itemscope itemtypehttp://schema.org/Organization>span itempropname>Студия дизайна интерьера Место/span> a itempropurl hrefhttp://www.meesto.ru/>Студия дизайна интерьера Место/a> img itemproplogo srchttp://www.meesto.ru/images/image280X138.jpg altСтудия Интерьера Место titleСтудия Интерьера Место />Контакты: div itempropaddress itemscope itemtypehttp://schema.org/PostalAddress>Адрес:199178, Санкт-Петербург, Малый проспект, 58 span itempropstreetAddress>Малый проспект, 58/span> span itemproppostalCode> 199178/span> span itempropaddressLocality>Санкт-Петербург/span>,/div>Телефон:span itemproptelephone>+7 812 982–57–52/span>, Телефон:span itemproptelephone>+7 905 232-34-78/span>, Электронная почта: span itempropemail>info@meesto.ru/span> a itempropsameAs hrefhttp://www.facebook.com/StudioMesto>FB/a> a itempropsameAs hrefhttp://www.twitter.com/StudioMesto>Twitter/a> a itempropsameAs hrefhttps://www.instagram.com/studiomesto>instagram/a> /div> div itemscope itemtypehttps://schema.org/WebPage itemidhttp://www.meesto.ru/> meta itempropmainEntityOfPage /> meta itempropname contentСтудия дизайна интерьера Место /> meta itempropdescription contentУслуги лучших дизайнеров интерьера для любых помещений квартир,домов,офисов,кафе.Студия Дизайна Интерьера Место,+7(812)982-57-52 /> meta itempropkeywords contentакция проект архитектуры интерьера заказать, услуги стоимость цена интерьера дизайн проект санкт петербург /> /div> div itemscope itemtypehttp://schema.org/GeoCoordinates> meta itemproplatitude content59.94107 /> meta itemproplongitude content30.25424 /> /div> meta namegeo.placename contentМалый проспект В.О., 58, Санкт-Петербург, Россия, 199178 /> meta namegeo.position content59.9410700;30.2542400 /> meta namegeo.region contentRU-Санкт-Петербург /> meta nameICBM content59.9410700, 30.2542400 /> !--прокрутка футера--> link hrefcss/onepage-scroll.css propertystylesheet relcss/stylesheet typetext/css> meta nameviewport contentinitial-scale1, widthdevice-width, maximum-scale1, minimum-scale1, user-scalableno> !--прокрутка футера--> div itemscope itemtypehttp://schema.org/Article> h1 itempropname>Студия Дизайна Интерьера Место/h1> p itempropdescription>Мы создадим дизайн-проект интерьера для любого помещения.Проектирование коттеджей, домов, промышленных зданий - это наша профессия./p> div> span itempropauthor>Студия Интерьера Место/span> /div> div> meta itempropdatePublished content2011-03-24 />Март 24, 2011/div> div itempropheadline> p>Стильные интерьеры/p> /div> div itempropimage itemscope itemtypehttps://schema.org/ImageObject> img srchttp://meesto.ru/images/smesto.png altСтудия Интерьера Место titleСтудия Интерьера Место /> img itempropurl contentUrl srchttp://meesto.ru/images/smesto.png altСтудия Интерьера Место titleСтудия Интерьера Место> figcaption itempropcaption description>Студия Интерьера Место/figcaption> meta itempropwidth content800> meta itempropheight content800> /div> meta itemscope itempropmainEntityOfPage itemTypehttps://schema.org/WebPage itemidhttp://meesto.ru /> meta itempropdateModified content2016-02-16T15:00:00+00:00 />span classsource itemproppublisher itemscope itemtypehttp://schema.org/Organization> span itemproplogo itemscope itemtypehttps://schema.org/ImageObject>img itempropurl itempropimage srchttp://meesto.ru/images/smesto.png styledisplay:none; altlogo titleлоготип/>meta itempropwidth content150>meta itempropheight content130> /span> span itempropname> a hrefhttp://meesto.ru/images/smesto.png>Студия Интерьера Место/a> /span> meta itemproptelephone content+7(812)9825752 /> meta itempropaddress content199178,Санкт-Петербург,Малый проспект,58 /> /span> p>.../p> /div> div itemscope itemtypehttp://schema.org/Product> span itempropname>дизайн квартир/span> span itempropdescription>Услуги по дизайну, проектированию квартир. От эскиза и визуализации - до полного Дизайн-проекта с рабочей документацией для строителей. /span> div itempropoffers itemscope itemtypehttp://schema.org/Offer> div itemtypehttp://schema.org/UnitPriceSpecification itemscope itemproppriceSpecification classprice-box> span itempropprice>500/span>руб/м2 meta content500.00 itempropminPrice> meta content2000.00 itempropmaxPrice> meta itemproppriceCurrency contentRUB>/m2/div> span itempropprice>500.00/span>руб/м2 meta itemproppriceCurrency contentRUB>/m2 meta itempropitemCondition itemtypehttp://schema.org/OfferItemCondition contenthttp://schema.org/NewCondition />Новый meta itempropavailability contenthttp://schema.org/InStock />Предложение(акция) действует./div> /div> div itemscope itemtypehttp://schema.org/Product> span itempropname>дизайн интерьера/span> span itempropdescription>Услуги лучших дизайнеров интерьера для любых помещений квартир,домов,офисов,кафе.Студия Дизайна Интерьера Место,+7(812)982-57-52/span> div itempropoffers itemscope itemtypehttp://schema.org/Offer> div itemtypehttp://schema.org/UnitPriceSpecification itemscope itemproppriceSpecification classprice-box> span itempropprice>500/span>руб/м2 meta content500.00 itempropminPrice> meta content2000.00 itempropmaxPrice> meta itemproppriceCurrency contentRUB>/m2/div> span itempropprice>500.00/span>руб/м2 meta itemproppriceCurrency contentRUB>/m2 meta itempropitemCondition itemtypehttp://schema.org/OfferItemCondition contenthttp://schema.org/NewCondition />Новый meta itempropavailability contenthttp://schema.org/InStock />Предложение(акция) действует./div> /div> div itemscope itemtypehttp://schema.org/Product> span itempropname>дизайн-проект/span> span itempropdescription>Состав дизайн-проекта: планировочные решения, чертежи, визуализация 3D, с несколькими цветовыми решениями,а так же подбор материалов и мебели. /span> div itempropoffers itemscope itemtypehttp://schema.org/Offer> div itemtypehttp://schema.org/UnitPriceSpecification itemscope itemproppriceSpecification classprice-box> span itempropprice>500/span>руб/м2 meta content500.00 itempropminPrice> meta content2000.00 itempropmaxPrice> meta itemproppriceCurrency contentRUB>/m2/div> span itempropprice>500.00/span>руб/м2 meta itemproppriceCurrency contentRUB>/m2 meta itempropitemCondition itemtypehttp://schema.org/OfferItemCondition contenthttp://schema.org/NewCondition />Новый meta itempropavailability contenthttp://schema.org/InStock />Предложение(акция) действует./div> /div> div itemscope itemtypehttp://schema.org/Product> span itempropname>Авторский надзор/span> span itempropdescription>Авторский надзор нужен для тех, кто хочет получить в точности реализованный дизайн-проект. Авторский надзор, не входит в стоимость дизайн проект интерьера/span> div itempropoffers itemscope itemtypehttp://schema.org/Offer> div itemtypehttp://schema.org/UnitPriceSpecification itemscope itemproppriceSpecification classprice-box> span itempropprice>500/span>руб/м2 meta content10000.00 itempropminPrice> meta content20000.00 itempropmaxPrice> meta itemproppriceCurrency contentRUB>/month/div> span itempropprice>500.00/span>руб/м2 meta itemproppriceCurrency contentRUB>/m2 meta itempropitemCondition itemtypehttp://schema.org/OfferItemCondition contenthttp://schema.org/NewCondition />Новый meta itempropavailability contenthttp://schema.org/InStock />Предложение(акция) действует./div> /div> div itemscope itemtypehttp://schema.org/Product> span itempropname>Планировочное решение/span> span itempropdescription>Планировочное решение для квартиры (любых помещений),с ней необходимо определиться до начала ремонта,именно она станет определящей дл всего дизайна.Пять вариантовпланировок квартир по цене от 100руб/м2/span> div itempropoffers itemscope itemtypehttp://schema.org/Offer> div itemtypehttp://schema.org/UnitPriceSpecification itemscope itemproppriceSpecification classprice-box> span itempropprice>500/span>руб/м2 meta content100.00 itempropminPrice> meta content1000.00 itempropmaxPrice> meta itemproppriceCurrency contentRUB>/m2/div> span itempropprice>500.00/span>руб/м2 meta itemproppriceCurrency contentRUB>/m2 meta itempropitemCondition itemtypehttp://schema.org/OfferItemCondition contenthttp://schema.org/NewCondition />Новый meta itempropavailability contenthttp://schema.org/InStock />Предложение(акция) действует./div> /div> /div> meta http-equivcontent-type contenttext/html; charsetUTF-8 /> meta propertyprefixplace:location:latitude content59.976255 /> meta propertyprefixplace:location:longitude content30.322732 /> meta propertyprefixbusiness:contact_data:street_address contentМалый проспект, 58 /> meta propertyprefixbusiness:contact_data:locality contentСанкт-Петербург /> meta propertyprefixbusiness:contact_data:postal_code content199178 /> meta propertyprefixbusiness:contact_data:country_name contentРоссия /> meta propertyprefixbusiness:contact_data:email contentinfo@meesto.ru /> meta propertyprefixbusiness:contact_data:phone_number content+7 812 9825752 /> meta propertyprefixbusiness:contact_data:website contenthttp://www.meesto.ru /> html itemscope itemtypehttp://schema.org/Organization> meta itempropname contentСтудия Интерьера Место /> meta itempropdescription contentСтудия Дизайна Интерьера Mesto :интерьер жилых и коммерческих помещений квартир, домов, офисов, кафе, баров, ресторан /> meta itempropimage contenthttp://meesto.ru/images/page2_img1.jpg /> meta itemproptelephone content+7(812)9825752 /> meta itempropaddress content199178,Санкт-Петербург,Малый проспект,58 /> meta nametwitter:card contentsummary /> !-- Card type --> meta nametwitter:site content@StudioMesto /> meta nametwitter:title contentСтудия Интерьера Место> meta nametwitter:description contentСтудия Дизайна Интерьера Mesto :интерьер жилых и коммерческих помещений квартир, домов, офисов, кафе, баров, ресторан /> meta nametwitter:creator content@StudioMesto /> meta nametwitter:image:src contenthttp://meesto.ru/images/image280X138.jpg /> meta nametwitter:domain contentmeesto.ru /> meta propertyog:type contentprofile /> meta propertyprefixprofile:first_name contentСтудия /> meta propertyprefixprofile:last_name contentМесто /> meta propertyprefixprofile:username contentСтудия Интерьера Место /> meta propertyog:title contentДизайн интерьера от Студии Место в Санкт-Петербурге /> meta propertyog:description contentУслуги лучших дизайнеров интерьера для любых помещений квартир,домов,офисов,кафе.Студия Дизайна Интерьера Место,+7(812)982-57-52 /> meta propertyog:image contenthttp://meesto.ru/images/image280X138.jpg /> meta propertyog:url contenthttp://meesto.ru/#!/page_Home /> meta propertyog:site_name contentСтудия Интерьера Место :интерьер жилых и коммерческих помещений квартир, домов, офисов, кафе, баров, ресторан /> meta propertyog:see_also contenthttp://www.meesto.ru /> meta propertyfb:admins content609613889183147 /> link relmeta typeapplication/rdf+xml titleFOAF hrefhttp://meesto.ru/meesto.rdf /> link relschema.DC hrefhttp://purl.org/dc/elements/1.1/> meta nameDC.Identifier schemaDCterms:URI contenthttp://tutorialsonline.info/Common/DublinCore.html /> meta nameDC.Format schemaDCterms:IMT contenttext/html /> meta nameDC.Title xml:langRU contentСтудия Дизайна Интерьера Место /> meta nameDC.Title xml:langEN contentDesign Studio Interior Mesto /> meta nameDC.Creator contentСтудия Дизайна Интерьера Место /> meta nameDC.Subject xml:langRU contentДизайн интерьеров: жилых и коммерческих помещений. Дизайн квартир, домов, офисов, SPA, кафе, баров, ресторанов /> meta nameDC.Subject xml:langEN contentDesign Interior:flats,homes,spa,restorans,shops /> meta nameDC.Publisher contentСтудия Дизайна Интерьера Место, Ltd. /> meta nameDC.Publisher.Address contentinfo@meesto.ru /> meta nameDC.Contributor contentСтудия Дизайна Интерьера Место /> meta nameDC.Date schemeISO8601 content2010-02-28 /> meta nameDC.Type contenttext/html /> meta nameDC.Description xml:langRU contentУслуги по дизайну, проектированию интерьера жилых и общественных зданий в Санкт-Петербурге и Лен.области. /> meta nameDC.Identifier contenthttp://tutorialsonline.info/Common/DublinCore.html /> meta nameDC.Coverage contentСтудия Дизайна Интерьера Место, Ltd. /> meta nameDC.Rights contentCopyright 2012, Студия Дизайна Интерьера Место, Ltd. Все права защищены. /> meta nameDC.Date.X-MetadataLastModified schemeISO8601 content2012-02-28 /> meta nameDC.Language schemedcterms:RFC1766 contentRU /> meta nameDC.Identifier contenthttp://meesto.ru/> meta nameDC.Source contenthttp://meesto.ru/> meta nameapplication-name contenthttp://meesto.ru/ /> meta namemsapplication-square70x70logo contentsmall.jpg /> meta namemsapplication-square150x150logo contentmedium.jpg /> meta namemsapplication-wide310x150logo contentwide.jpg /> meta namemsapplication-square310x310logo contentlarge.jpg /> meta namemsapplication-TileColor content#FFDD00 /> meta namemsapplication-notification contentfrequency30;polling-urihttp://notifications.buildmypinnedsite.com/?feedhttp://www.meesto.ru/rss.xml&id1;polling-uri2http://notifications.buildmypinnedsite.com/?feedhttp://www.meesto.ru/rss.xml&id2;polling-uri3http://notifications.buildmypinnedsite.com/?feedhttp://www.meesto.ru/rss.xml&id3;polling-uri4http://notifications.buildmypinnedsite.com/?feedhttp://www.meesto.ru/rss.xml&id4;polling-uri5http://notifications.buildmypinnedsite.com/?feedhttp://www.meesto.ru/rss.xml&id5; cycle1 /> link relstylesheet propertystylesheet mediascreen and (height: 768px) and (width: 1024px) and (orientation:landscape) hrefcss/lip.css /> link relstylesheet propertystylesheet mediascreen and (height: 2560px) and (width: 2560px) and (orientation:portrait) hrefcss/lip.css /> link relstylesheet propertystylesheet mediascreen and (min-width: 801px) and (orientation:landscape) hrefcss/lstyle.css /> link relstylesheet propertystylesheet mediascreen and (min-width: 801px) and (orientation:portrait) hrefcss/pstyle.css /> link relstylesheet propertystylesheet mediascreen and (min-width: 570px) and (max-width: 800px) and (orientation:landscape) hrefcss/lbig.css /> link relstylesheet propertystylesheet mediascreen and (min-width: 570px) and (max-width: 800px) and (orientation:portrait) hrefcss/pbig.css /> link relstylesheet propertystylesheet mediascreen and (min-width: 220px) and (max-width: 568px) and (orientation:landscape) hrefcss/lsmall.css /> link relstylesheet propertystylesheet mediascreen and (min-width: 220px) and (max-width: 568px) and (orientation:portrait) hrefcss/psmall.min.css /> script> /*! * jQuery JavaScript Library v1.7.2 * http://jquery.com/ * * Copyright 2011, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * * Date: Wed Mar 21 12:46:34 2012 -0700 */ (function( window, undefined ) { // Use the correct document accordingly with window argument (sandbox) var document window.document, navigator window.navigator, location window.location; var jQuery (function() { // 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, rootjQuery ); }, // Map over jQuery in case of overwrite _jQuery window.jQuery, // Map over the $ in case of overwrite _$ window.$, // A central reference to the root jQuery(document) rootjQuery, // A simple way to check for HTML strings or ID strings // Prioritize #id over tag> to avoid XSS via location.hash (#9521) quickExpr /^(?:^#*(\w\W+>)^>*$|#(\w\-*)$)/, // Check if a string has a non-whitespace character in it rnotwhite /\S/, // Used for trimming whitespace trimLeft /^\s+/, trimRight /\s+$/, // Match a standalone tag rsingleTag /^(\w+)\s*\/?>(?:\/\1>)?$/, // JSON RegExp rvalidchars /^\,:{}\s*$/, rvalidescape /\\(?:\\\/bfnrt|u0-9a-fA-F{4})/g, rvalidtokens /^\\\n\r*|true|false|null|-?\d+(?:\.\d*)?(?:eE+\-?\d+)?/g, rvalidbraces /(?:^|:|,)(?:\s*\)+/g, // Useragent RegExp rwebkit /(webkit) \/(\w.+)/, ropera /(opera)(?:.*version)? \/(\w.+)/, rmsie /(msie) (\w.+)/, rmozilla /(mozilla)(?:.*? rv:(\w.+))?/, // Matches dashed string for camelizing rdashAlpha /-(a-z|0-9)/ig, rmsPrefix /^-ms-/, // Used by jQuery.camelCase as callback to replace() fcamelCase function( all, letter ) { return ( letter + ).toUpperCase(); }, // Keep a UserAgent string for use with jQuery.browser userAgent navigator.userAgent, // For matching the engine and version of the browser browserMatch, // The deferred used on DOM ready readyList, // The ready event handler DOMContentLoaded, // Save a reference to some core methods toString Object.prototype.toString, hasOwn Object.prototype.hasOwnProperty, push Array.prototype.push, slice Array.prototype.slice, trim String.prototype.trim, indexOf Array.prototype.indexOf, // Class -> type pairs class2type {}; jQuery.fn jQuery.prototype { constructor: jQuery, init: function( selector, context, rootjQuery ) { var match, elem, ret, doc; // Handle $(), $(null), or $(undefined) if ( !selector ) { return this; } // Handle $(DOMElement) if ( selector.nodeType ) { this.context this0 selector; this.length 1; return this; } // The body element only exists once, optimize finding it if ( selector body && !context && document.body ) { this.context document; this0 document.body; this.selector selector; this.length 1; return this; } // Handle HTML strings if ( typeof selector string ) { // Are we dealing with HTML string or an ID? if ( selector.charAt(0) && selector.charAt( selector.length - 1 ) > && selector.length > 3 ) { // Assume that strings that start and end with > are HTML and skip the regex check match null, selector, null ; } else { match quickExpr.exec( selector ); } // Verify a match, and that no context was specified for #id if ( match && (match1 || !context) ) { // HANDLE: $(html) -> $(array) if ( match1 ) { context context instanceof jQuery ? context0 : context; doc ( context ? context.ownerDocument || context : document ); // If a single string is passed in and its a single tag // just do a createElement and skip the rest ret rsingleTag.exec( selector ); if ( ret ) { if ( jQuery.isPlainObject( context ) ) { selector document.createElement( ret1 ) ; jQuery.fn.attr.call( selector, context, true ); } else { selector doc.createElement( ret1 ) ; } } else { ret jQuery.buildFragment( match1 , doc ); selector ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; } return jQuery.merge( this, selector ); // HANDLE: $(#id) } else { elem document.getElementById( match2 ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id ! match2 ) { return rootjQuery.find( selector ); } // Otherwise, we inject the element directly into the jQuery object this.length 1; this0 elem; } this.context document; this.selector selector; return this; } // 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 this.constructor( 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.7.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 this.length + num : 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 this.constructor(); 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(); // Add the callback readyList.add( fn ); return this; }, eq: function( i ) { i +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 || this.constructor(null); }, // For internal use only. // Behaves like an Arrays 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() { var options, name, src, copy, copyIsArray, clone, target arguments0 || {}, i 1, length arguments.length, deep false; // Handle a deep copy situation if ( typeof target boolean ) { deep target; target arguments1 || {}; // 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 were merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray jQuery.isArray(copy)) ) ) { if ( copyIsArray ) { copyIsArray false; clone src && jQuery.isArray(src) ? src : ; } else { clone src && jQuery.isPlainObject(src) ? src : {}; } // Never move original objects, clone them target name jQuery.extend( deep, clone, copy ); // Dont bring in undefined values } else if ( copy ! undefined ) { target name copy; } } } } // Return the modified object return target; }; jQuery.extend({ noConflict: function( deep ) { if ( window.$ jQuery ) { window.$ _$; } if ( deep && window.jQuery jQuery ) { window.jQuery _jQuery; } return jQuery; }, // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Hold (or release) the ready event holdReady: function( hold ) { if ( hold ) { jQuery.readyWait++; } else { jQuery.ready( true ); } }, // Handle when the DOM is ready ready: function( wait ) { // Either a released hold or an DOMready/load event and not yet ready if ( (wait true && !--jQuery.readyWait) || (wait ! true && !jQuery.isReady) ) { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { return setTimeout( jQuery.ready, 1 ); } // Remember that the DOM is ready jQuery.isReady true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait ! true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.fireWith( document, jQuery ); // Trigger any bound ready events if ( jQuery.fn.trigger ) { jQuery( document ).trigger( ready ).off( ready ); } } }, bindReady: function() { if ( readyList ) { return; } readyList jQuery.Callbacks( once memory ); // Catch cases where $(document).ready() is called after the // browser event has already occurred. if ( document.readyState complete ) { // Handle it asynchronously to allow scripts the opportunity to delay ready return setTimeout( jQuery.ready, 1 ); } // 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 // arent supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type(obj) function; }, isArray: Array.isArray || function( obj ) { return jQuery.type(obj) array; }, isWindow: function( obj ) { return obj ! null && obj obj.window; }, isNumeric: function( obj ) { return !isNaN( parseFloat(obj) ) && isFinite( obj ); }, type: function( obj ) { return obj null ? String( obj ) : class2type toString.call(obj) || object; }, 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 dont pass through, as well if ( !obj || jQuery.type(obj) ! object || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } try { // Not own constructor property must be Object if ( obj.constructor && !hasOwn.call(obj, constructor) && !hasOwn.call(obj.constructor.prototype, isPrototypeOf) ) { return false; } } catch ( e ) { // IE8,9 Will throw exceptions on certain host objects #9897 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 || hasOwn.call( obj, key ); }, isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; }, error: function( msg ) { throw new Error( msg ); }, parseJSON: function( data ) { if ( typeof data ! string || !data ) { return null; } // Make sure leading/trailing whitespace is removed (IE cant handle it) data jQuery.trim( data ); // Attempt to parse using the native JSON parser first if ( window.JSON && window.JSON.parse ) { return window.JSON.parse( data ); } // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js if ( rvalidchars.test( data.replace( rvalidescape, @ ) .replace( rvalidtokens, ) .replace( rvalidbraces, )) ) { return ( new Function( return + data ) )(); } jQuery.error( Invalid JSON: + data ); }, // Cross-browser xml parsing parseXML: function( data ) { if ( typeof data ! string || !data ) { return null; } var xml, tmp; try { if ( window.DOMParser ) { // Standard tmp new DOMParser(); xml tmp.parseFromString( data , text/xml ); } else { // IE xml new ActiveXObject( Microsoft.XMLDOM ); xml.async false; xml.loadXML( data ); } } catch( e ) { xml undefined; } if ( !xml || !xml.documentElement || xml.getElementsByTagName( parsererror ).length ) { jQuery.error( Invalid XML: + data ); } return xml; }, noop: function() {}, // Evaluates a script in a global context // Workarounds based on findings by Jim Driscoll // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval: function( data ) { if ( data && rnotwhite.test( data ) ) { // We use execScript on Internet Explorer // We use an anonymous function so that context is window // rather than jQuery in Firefox ( window.execScript || function( data ) { window eval .call( window, data ); } )( data ); } }, // Convert dashed to camelCase; used by the css and data modules // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { return string.replace( rmsPrefix, ms- ).replace( rdashAlpha, fcamelCase ); }, 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 ( ; i length; ) { if ( callback.call( object i , i, object i++ ) false ) { break; } } } } return object; }, // Use native String.trim function wherever possible trim: trim ? function( text ) { return text null ? : trim.call( text ); } : // Otherwise use our own trimming functionality function( text ) { return text null ? : text.toString().replace( trimLeft, ).replace( trimRight, ); }, // results is for internal usage only makeArray: function( array, results ) { var ret results || ; if ( array ! null ) { // The window, strings (and functions) also have length // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 var type jQuery.type( array ); if ( array.length null || type string || type function || type regexp || jQuery.isWindow( array ) ) { push.call( ret, array ); } else { jQuery.merge( ret, array ); } } return ret; }, inArray: function( elem, array, i ) { var len; if ( array ) { if ( indexOf ) { return indexOf.call( array, elem, i ); } len array.length; i i ? i 0 ? Math.max( 0, len + i ) : i : 0; for ( ; i len; i++ ) { // Skip accessing in sparse arrays if ( i in array && 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 ( secondj ! undefined ) { first i++ second j++ ; } } first.length i; return first; }, grep: function( elems, callback, inv ) { var ret , retVal; inv !!inv; // Go through the array, only saving the items // that pass the validator function for ( var i 0, length elems.length; i length; i++ ) { retVal !!callback( elems i , i ); if ( inv ! retVal ) { ret.push( elems i ); } } return ret; }, // arg is for internal usage only map: function( elems, callback, arg ) { var value, key, ret , i 0, length elems.length, // jquery objects are treated as arrays isArray elems instanceof jQuery || length ! undefined && typeof length number && ( ( length > 0 && elems 0 && elems length -1 ) || length 0 || jQuery.isArray( elems ) ) ; // Go through the array, translating each of the items to their if ( isArray ) { for ( ; i length; i++ ) { value callback( elems i , i, arg ); if ( value ! null ) { ret ret.length value; } } // Go through every key on the object, } else { for ( key in elems ) { value callback( elems key , key, arg ); if ( value ! null ) { ret ret.length value; } } } // Flatten any nested arrays return ret.concat.apply( , ret ); }, // A global GUID counter for objects guid: 1, // Bind a function to a context, optionally partially applying any // arguments. proxy: function( fn, context ) { if ( typeof context string ) { var tmp fn context ; context fn; fn tmp; } // Quick check to determine if target is callable, in the spec // this throws a TypeError, but we will just return undefined. if ( !jQuery.isFunction( fn ) ) { return undefined; } // Simulated bind var args slice.call( arguments, 2 ), proxy function() { return fn.apply( context, args.concat( slice.call( arguments ) ) ); }; // Set the guid of unique handler to the same of original handler, so it can be removed proxy.guid fn.guid fn.guid || proxy.guid || jQuery.guid++; return proxy; }, // Mutifunctional method to get and set values to a collection // The value/s can optionally be executed if its a function access: function( elems, fn, key, value, chainable, emptyGet, pass ) { var exec, bulk key null, i 0, length elems.length; // Sets many values if ( key && typeof key object ) { for ( i in key ) { jQuery.access( elems, fn, i, keyi, 1, emptyGet, value ); } chainable 1; // Sets one value } else if ( value ! undefined ) { // Optionally, function values get executed if exec is true exec pass undefined && jQuery.isFunction( value ); if ( bulk ) { // Bulk operations only iterate when executing function values if ( exec ) { exec fn; fn function( elem, key, value ) { return exec.call( jQuery( elem ), value ); }; // Otherwise they run against the entire set } else { fn.call( elems, value ); fn null; } } if ( fn ) { for (; i length; i++ ) { fn( elemsi, key, exec ? value.call( elemsi, i, fn( elemsi, key ) ) : value, pass ); } } chainable 1; } return chainable ? elems : // Gets bulk ? fn.call( elems ) : length ? fn( elems0, key ) : emptyGet; }, now: function() { return ( new Date() ).getTime(); }, // Use of jQuery.browser is frowned upon. // More details: http://docs.jquery.com/Utilities/jQuery.browser uaMatch: function( ua ) { ua ua.toLowerCase(); var match rwebkit.exec( ua ) || ropera.exec( ua ) || rmsie.exec( ua ) || ua.indexOf(compatible) 0 && rmozilla.exec( ua ) || ; return { browser: match1 || , version: match2 || 0 }; }, sub: function() { function jQuerySub( selector, context ) { return new jQuerySub.fn.init( selector, context ); } jQuery.extend( true, jQuerySub, this ); jQuerySub.superclass this; jQuerySub.fn jQuerySub.prototype this(); jQuerySub.fn.constructor jQuerySub; jQuerySub.sub this.sub; jQuerySub.fn.init function init( selector, context ) { if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { context jQuerySub( context ); } return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); }; jQuerySub.fn.init.prototype jQuerySub.fn; var rootjQuerySub jQuerySub(document); return jQuerySub; }, browser: {} }); // Populate the class2type map jQuery.each(Boolean Number String Function Array Date RegExp Object.split( ), function(i, name) { class2type object + name + name.toLowerCase(); }); 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; } // IE doesnt match non-breaking spaces with \s if ( rnotwhite.test( \xA0 ) ) { trimLeft /^\s\xA0+/; trimRight /\s\xA0+$/; } // 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(e) { setTimeout( doScrollCheck, 1 ); return; } // and execute any waiting functions jQuery.ready(); } return jQuery; })(); // String to Object flags format cache var flagsCache {}; // Convert String-formatted flags into Object-formatted ones and store in cache function createFlags( flags ) { var object flagsCache flags {}, i, length; flags flags.split( /\s+/ ); for ( i 0, length flags.length; i length; i++ ) { object flagsi true; } return object; } /* * Create a callback list using the following parameters: * * flags: an optional list of space-separated flags that will change how * the callback list behaves * * By default a callback list will act like an event callback list and can be * fired multiple times. * * Possible flags: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest memorized * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks function( flags ) { // Convert flags from String-formatted to Object-formatted // (we check in cache first) flags flags ? ( flagsCache flags || createFlags( flags ) ) : {}; var // Actual callback list list , // Stack of fire calls for repeatable lists stack , // Last fire value (for non-forgettable lists) memory, // Flag to know if list was already fired fired, // Flag to know if list is currently firing firing, // First callback to fire (used internally by add and fireWith) firingStart, // End of the loop when firing firingLength, // Index of currently firing callback (modified by remove if needed) firingIndex, // Add one or several callbacks to the list add function( args ) { var i, length, elem, type, actual; for ( i 0, length args.length; i length; i++ ) { elem args i ; type jQuery.type( elem ); if ( type array ) { // Inspect recursively add( elem ); } else if ( type function ) { // Add if not in unique mode and callback is not in if ( !flags.unique || !self.has( elem ) ) { list.push( elem ); } } } }, // Fire callbacks fire function( context, args ) { args args || ; memory !flags.memory || context, args ; fired true; firing true; firingIndex firingStart || 0; firingStart 0; firingLength list.length; for ( ; list && firingIndex firingLength; firingIndex++ ) { if ( list firingIndex .apply( context, args ) false && flags.stopOnFalse ) { memory true; // Mark as halted break; } } firing false; if ( list ) { if ( !flags.once ) { if ( stack && stack.length ) { memory stack.shift(); self.fireWith( memory 0 , memory 1 ); } } else if ( memory true ) { self.disable(); } else { list ; } } }, // Actual Callbacks object self { // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { var length list.length; add( arguments ); // Do we need to add the callbacks to the // current firing batch? if ( firing ) { firingLength list.length; // With memory, if were not firing then // we should call right away, unless previous // firing was halted (stopOnFalse) } else if ( memory && memory ! true ) { firingStart length; fire( memory 0 , memory 1 ); } } return this; }, // Remove a callback from the list remove: function() { if ( list ) { var args arguments, argIndex 0, argLength args.length; for ( ; argIndex argLength ; argIndex++ ) { for ( var i 0; i list.length; i++ ) { if ( args argIndex list i ) { // Handle firingIndex and firingLength if ( firing ) { if ( i firingLength ) { firingLength--; if ( i firingIndex ) { firingIndex--; } } } // Remove the element list.splice( i--, 1 ); // If we have some unicity property then // we only need to do this once if ( flags.unique ) { break; } } } } } return this; }, // Control if a given callback is in the list has: function( fn ) { if ( list ) { var i 0, length list.length; for ( ; i length; i++ ) { if ( fn list i ) { return true; } } } return false; }, // Remove all callbacks from the list empty: function() { list ; return this; }, // Have the list do nothing anymore disable: function() { list stack memory undefined; return this; }, // Is it disabled? disabled: function() { return !list; }, // Lock the list in its current state lock: function() { stack undefined; if ( !memory || memory true ) { self.disable(); } return this; }, // Is it locked? locked: function() { return !stack; }, // Call all callbacks with the given context and arguments fireWith: function( context, args ) { if ( stack ) { if ( firing ) { if ( !flags.once ) { stack.push( context, args ); } } else if ( !( flags.once && memory ) ) { fire( context, args ); } } return this; }, // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, // To know if the callbacks have already been called at least once fired: function() { return !!fired; } }; return self; }; var // Static reference to slice sliceDeferred .slice; jQuery.extend({ Deferred: function( func ) { var doneList jQuery.Callbacks( once memory ), failList jQuery.Callbacks( once memory ), progressList jQuery.Callbacks( memory ), state pending, lists { resolve: doneList, reject: failList, notify: progressList }, promise { done: doneList.add, fail: failList.add, progress: progressList.add, state: function() { return state; }, // Deprecated isResolved: doneList.fired, isRejected: failList.fired, then: function( doneCallbacks, failCallbacks, progressCallbacks ) { deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); return this; }, always: function() { deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); return this; }, pipe: function( fnDone, fnFail, fnProgress ) { return jQuery.Deferred(function( newDefer ) { jQuery.each( { done: fnDone, resolve , fail: fnFail, reject , progress: fnProgress, notify }, function( handler, data ) { var fn data 0 , action data 1 , returned; if ( jQuery.isFunction( fn ) ) { deferred handler (function() { returned fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); } else { newDefer action + With ( this deferred ? newDefer : this, returned ); } }); } else { deferred handler ( newDefer action ); } }); }).promise(); }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { if ( obj null ) { obj promise; } else { for ( var key in promise ) { obj key promise key ; } } return obj; } }, deferred promise.promise({}), key; for ( key in lists ) { deferred key lists key .fire; deferred key + With lists key .fireWith; } // Handle state deferred.done( function() { state resolved; }, failList.disable, progressList.lock ).fail( function() { state rejected; }, doneList.disable, progressList.lock ); // Call given func if any if ( func ) { func.call( deferred, deferred ); } // All done! return deferred; }, // Deferred helper when: function( firstParam ) { var args sliceDeferred.call( arguments, 0 ), i 0, length args.length, pValues new Array( length ), count length, pCount length, deferred length 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? firstParam : jQuery.Deferred(), promise deferred.promise(); function resolveFunc( i ) { return function( value ) { args i arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; if ( !( --count ) ) { deferred.resolveWith( deferred, args ); } }; } function progressFunc( i ) { return function( value ) { pValues i arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; deferred.notifyWith( promise, pValues ); }; } if ( length > 1 ) { for ( ; i length; i++ ) { if ( args i && args i .promise && jQuery.isFunction( args i .promise ) ) { args i .promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); } else { --count; } } if ( !count ) { deferred.resolveWith( deferred, args ); } } else if ( deferred ! firstParam ) { deferred.resolveWith( deferred, length ? firstParam : ); } return promise; } }); jQuery.support (function() { var support, all, a, select, opt, input, fragment, tds, events, eventName, i, isSupported, div document.createElement( div ), documentElement document.documentElement; // Preliminary tests div.setAttribute(className, t); div.innerHTML link/>table>/table>a href/a styletop:1px;float:left;opacity:.55;>a/a>input typecheckbox/>; all div.getElementsByTagName( * ); a div.getElementsByTagName( a ) 0 ; // Cant get basic test support if ( !all || !all.length || !a ) { return {}; } // First batch of supports tests select document.createElement( select ); opt select.appendChild( document.createElement(option) ); input div.getElementsByTagName( input ) 0 ; support { // IE strips leading whitespace when .innerHTML is used leadingWhitespace: ( div.firstChild.nodeType 3 ), // Make sure that tbody elements arent 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 instead) style: /top/.test( a.getAttribute(style) ), // Make sure that URLs arent 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: ( input.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 its in an optgroup) optSelected: opt.selected, // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) getSetAttribute: div.className ! t, // Tests for enctype support on a form(#6743) enctype: !!document.createElement(form).enctype, // Makes sure cloning an html5 element does not cause problems // Where outerHTML is undefined, this still works html5Clone: document.createElement(nav).cloneNode( true ).outerHTML ! :nav>/:nav>, // Will be defined later submitBubbles: true, changeBubbles: true, focusinBubbles: false, deleteExpando: true, noCloneEvent: true, inlineBlockNeedsLayout: false, shrinkWrapBlocks: false, reliableMarginRight: true, pixelMargin: true }; // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead jQuery.boxModel support.boxModel (document.compatMode CSS1Compat); // Make sure checked status is properly cloned input.checked true; support.noCloneChecked input.cloneNode( true ).checked; // Make sure that the options inside disabled selects arent marked as disabled // (WebKit marks them as disabled) select.disabled true; support.optDisabled !opt.disabled; // Test to see if its possible to delete an expando from an element // Fails in Internet Explorer try { delete div.test; } catch( e ) { support.deleteExpando false; } if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { div.attachEvent( onclick, function() { // Cloning a node shouldnt copy over any // bound event handlers (IE does this) support.noCloneEvent false; }); div.cloneNode( true ).fireEvent( onclick ); } // Check if a radio maintains its value // after being appended to the DOM input document.createElement(input); input.value t; input.setAttribute(type, radio); support.radioValue input.value t; input.setAttribute(checked, checked); // #11217 - WebKit loses check when the name is after the checked attribute input.setAttribute( name, t ); div.appendChild( input ); fragment document.createDocumentFragment(); fragment.appendChild( div.lastChild ); // WebKit doesnt clone checked state correctly in fragments support.checkClone fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; // Check if a disconnected checkbox will retain its checked // value of true after appended to the DOM (IE6/7) support.appendChecked input.checked; fragment.removeChild( input ); fragment.appendChild( div ); // Technique from Juriy Zaytsev // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ // We only care about the case where non-standard event systems // are used, namely in IE. Short-circuiting here helps us to // avoid an eval call (in setAttribute) which can cause CSP // to go haywire. See: https://developer.mozilla.org/en/Security/CSP if ( div.attachEvent ) { for ( i in { submit: 1, change: 1, focusin: 1 }) { eventName on + i; isSupported ( eventName in div ); if ( !isSupported ) { div.setAttribute( eventName, return; ); isSupported ( typeof div eventName function ); } support i + Bubbles isSupported; } } fragment.removeChild( div ); // Null elements to avoid leaks in IE fragment select opt div input null; // Run tests that need a body at doc ready jQuery(function() { var container, outer, inner, table, td, offsetSupport, marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, paddingMarginBorderVisibility, paddingMarginBorder, body document.getElementsByTagName(body)0; if ( !body ) { // Return for frameset docs that dont have a body return; } conMarginTop 1; paddingMarginBorder padding:0;margin:0;border:; positionTopLeftWidthHeight position:absolute;top:0;left:0;width:1px;height:1px;; paddingMarginBorderVisibility paddingMarginBorder + 0;visibility:hidden;; style style + positionTopLeftWidthHeight + paddingMarginBorder + 5px solid #000;; html div + style + display:block;>div style + paddingMarginBorder + 0;display:block;overflow:hidden;>/div>/div> + table + style + cellpadding0 cellspacing0> + tr>td>/td>/tr>/table>; container document.createElement(div); container.style.cssText paddingMarginBorderVisibility + width:0;height:0;position:static;top:0;margin-top: + conMarginTop + px; body.insertBefore( container, body.firstChild ); // Construct the test element div document.createElement(div); container.appendChild( div ); // Check if table cells still have offsetWidth/Height when they are set // to display:none and there are still other visible table cells in a // table row; if so, offsetWidth/Height are not reliable for use when // determining if an element has been hidden directly using // display:none (it is still safe to use offsets if a parent element is // hidden; don safety goggles and see bug #4512 for more information). // (only IE 8 fails this test) div.innerHTML table>tr>td style + paddingMarginBorder + 0;display:none>/td>td>t/td>/tr>/table>; tds div.getElementsByTagName( td ); isSupported ( tds 0 .offsetHeight 0 ); tds 0 .style.display ; tds 1 .style.display none; // Check if empty table cells still have offsetWidth/Height // (IE 8 fail this test) support.reliableHiddenOffsets isSupported && ( tds 0 .offsetHeight 0 ); // Check if div with explicit width and no margin-right incorrectly // gets computed margin-right based on width of container. For more // info see bug #3333 // Fails in WebKit before Feb 2011 nightlies // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right if ( window.getComputedStyle ) { div.innerHTML ; marginDiv document.createElement( div ); marginDiv.style.width 0; marginDiv.style.marginRight 0; div.style.width 2px; div.appendChild( marginDiv ); support.reliableMarginRight ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) 0; } if ( typeof div.style.zoom ! undefined ) { // Check if natively block-level elements act like inline-block // elements when setting their display to inline and giving // them layout // (IE 8 does this) div.innerHTML ; div.style.width div.style.padding 1px; div.style.border 0; div.style.overflow hidden; div.style.display inline; div.style.zoom 1; support.inlineBlockNeedsLayout ( div.offsetWidth 3 ); // Check if elements with layout shrink-wrap their children // (IE 6 does this) div.style.display block; div.style.overflow visible; div.innerHTML div stylewidth:5px;>/div>; support.shrinkWrapBlocks ( div.offsetWidth ! 3 ); } div.style.cssText positionTopLeftWidthHeight + paddingMarginBorderVisibility; div.innerHTML html; outer div.firstChild; inner outer.firstChild; td outer.nextSibling.firstChild.firstChild; offsetSupport { doesNotAddBorder: ( inner.offsetTop ! 5 ), doesAddBorderForTableAndCells: ( td.offsetTop 5 ) }; inner.style.position fixed; inner.style.top 20px; // safari subtracts parent border width here which is 5px offsetSupport.fixedPosition ( inner.offsetTop 20 || inner.offsetTop 15 ); inner.style.position inner.style.top ; outer.style.overflow hidden; outer.style.position relative; offsetSupport.subtractsBorderForOverflowNotVisible ( inner.offsetTop -5 ); offsetSupport.doesNotIncludeMarginInBodyOffset ( body.offsetTop ! conMarginTop ); if ( window.getComputedStyle ) { div.style.marginTop 1%; support.pixelMargin ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop ! 1%; } if ( typeof container.style.zoom ! undefined ) { container.style.zoom 1; } body.removeChild( container ); marginDiv div container null; jQuery.extend( support, offsetSupport ); }); return support; })(); var rbrace /^(?:\{.*\}|\.*\)$/, rmultiDash /(A-Z)/g; jQuery.extend({ cache: {}, // Please use with caution uuid: 0, // Unique for each copy of jQuery on the page // Non-digits removed to match rinlinejQuery expando: jQuery + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, ), // The following elements throw uncatchable exceptions if you // attempt to add expando properties to them. noData: { embed: true, // Ban all objects except for Flash (which handle expandos) object: clsid:D27CDB6E-AE6D-11cf-96B8-444553540000, applet: true }, hasData: function( elem ) { elem elem.nodeType ? jQuery.cache elemjQuery.expando : elem jQuery.expando ; return !!elem && !isEmptyDataObject( elem ); }, data: function( elem, name, data, pvt /* Internal Use Only */ ) { if ( !jQuery.acceptData( elem ) ) { return; } var privateCache, thisCache, ret, internalKey jQuery.expando, getByName typeof name string, // We have to handle DOM nodes and JS objects differently because IE6-7 // cant GC object references properly across the DOM-JS boundary isNode elem.nodeType, // Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache isNode ? jQuery.cache : elem, // Only defining an ID for JS objects if its cache already exists allows // the code to shortcut on the same path as a DOM node with no cache id isNode ? elem internalKey : elem internalKey && internalKey, isEvents name events; // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all if ( (!id || !cacheid || (!isEvents && !pvt && !cacheid.data)) && getByName && data undefined ) { return; } if ( !id ) { // Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if ( isNode ) { elem internalKey id ++jQuery.uuid; } else { id internalKey; } } if ( !cache id ) { cache id {}; // Avoids exposing jQuery metadata on plain JS objects when the object // is serialized using JSON.stringify if ( !isNode ) { cache id .toJSON jQuery.noop; } } // An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if ( typeof name object || typeof name function ) { if ( pvt ) { cache id jQuery.extend( cache id , name ); } else { cache id .data jQuery.extend( cache id .data, name ); } } privateCache thisCache cache id ; // jQuery data() is stored in a separate object inside the objects internal data // cache in order to avoid key collisions between internal data and user-defined // data. if ( !pvt ) { if ( !thisCache.data ) { thisCache.data {}; } thisCache thisCache.data; } if ( data ! undefined ) { thisCache jQuery.camelCase( name ) data; } // Users should not attempt to inspect the internal events object using jQuery.data, // it is undocumented and subject to change. But does anyone listen? No. if ( isEvents && !thisCache name ) { return privateCache.events; } // Check for both converted-to-camel and non-converted data property names // If a data property was specified if ( getByName ) { // First Try to find as-is property data ret thisCache name ; // Test for null|undefined property data if ( ret null ) { // Try to find the camelCased property ret thisCache jQuery.camelCase( name ) ; } } else { ret thisCache; } return ret; }, removeData: function( elem, name, pvt /* Internal Use Only */ ) { if ( !jQuery.acceptData( elem ) ) { return; } var thisCache, i, l, // Reference to internal data cache key internalKey jQuery.expando, isNode elem.nodeType, // See jQuery.data for more information cache isNode ? jQuery.cache : elem, // See jQuery.data for more information id isNode ? elem internalKey : internalKey; // If there is already no cache entry for this object, there is no // purpose in continuing if ( !cache id ) { return; } if ( name ) { thisCache pvt ? cache id : cache id .data; if ( thisCache ) { // Support array or space separated string names for data keys if ( !jQuery.isArray( name ) ) { // try the string as a key before any manipulation if ( name in thisCache ) { name name ; } else { // split the camel cased version by spaces unless a key with the spaces exists name jQuery.camelCase( name ); if ( name in thisCache ) { name name ; } else { name name.split( ); } } } for ( i 0, l name.length; i l; i++ ) { delete thisCache namei ; } // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { return; } } } // See jQuery.data for more information if ( !pvt ) { delete cache id .data; // Dont destroy the parent cache unless the internal data object // had been the only thing left in it if ( !isEmptyDataObject(cache id ) ) { return; } } // Browsers that fail expando deletion also refuse to delete expandos on // the window, but it will allow it on all other JS objects; other browsers // dont care // Ensure that `cache` is not a window object #10080 if ( jQuery.support.deleteExpando || !cache.setInterval ) { delete cache id ; } else { cache id null; } // We destroyed the cache and need to eliminate the expando on the node to avoid // false lookups in the cache for entries that no longer exist if ( isNode ) { // IE does not allow us to delete expando properties from nodes, // nor does it have a removeAttribute function on Document nodes; // we must handle all of these cases if ( jQuery.support.deleteExpando ) { delete elem internalKey ; } else if ( elem.removeAttribute ) { elem.removeAttribute( internalKey ); } else { elem internalKey null; } } }, // For internal use only. _data: function( elem, name, data ) { return jQuery.data( elem, name, data, true ); }, // A method for determining if a DOM node can handle the data expando acceptData: function( elem ) { if ( elem.nodeName ) { var match jQuery.noData elem.nodeName.toLowerCase() ; if ( match ) { return !(match true || elem.getAttribute(classid) ! match); } } return true; } }); jQuery.fn.extend({ data: function( key, value ) { var parts, part, attr, name, l, elem this0, i 0, data null; // Gets all values if ( key undefined ) { if ( this.length ) { data jQuery.data( elem ); if ( elem.nodeType 1 && !jQuery._data( elem, parsedAttrs ) ) { attr elem.attributes; for ( l attr.length; i l; i++ ) { name attri.name; if ( name.indexOf( data- ) 0 ) { name jQuery.camelCase( name.substring(5) ); dataAttr( elem, name, data name ); } } jQuery._data( elem, parsedAttrs, true ); } } return data; } // Sets multiple values if ( typeof key object ) { return this.each(function() { jQuery.data( this, key ); }); } parts key.split( ., 2 ); parts1 parts1 ? . + parts1 : ; part parts1 + !; return jQuery.access( this, function( value ) { if ( value undefined ) { data this.triggerHandler( getData + part, parts0 ); // Try to fetch any internally stored data first if ( data undefined && elem ) { data jQuery.data( elem, key ); data dataAttr( elem, key, data ); } return data undefined && parts1 ? this.data( parts0 ) : data; } parts1 value; this.each(function() { var self jQuery( this ); self.triggerHandler( setData + part, parts ); jQuery.data( this, key, value ); self.triggerHandler( changeData + part, parts ); }); }, null, value, arguments.length > 1, null, false ); }, removeData: function( key ) { return this.each(function() { jQuery.removeData( this, key ); }); } }); function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data undefined && elem.nodeType 1 ) { var name data- + key.replace( rmultiDash, -$1 ).toLowerCase(); data elem.getAttribute( name ); if ( typeof data string ) { try { data data true ? true : data false ? false : data null ? null : jQuery.isNumeric( data ) ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {} // Make sure we set the data so it isnt changed later jQuery.data( elem, key, data ); } else { data undefined; } } return data; } // checks a cache object for emptiness function isEmptyDataObject( obj ) { for ( var name in obj ) { // if the public data object is empty, the private is still empty if ( name data && jQuery.isEmptyObject( objname ) ) { continue; } if ( name ! toJSON ) { return false; } } return true; } function handleQueueMarkDefer( elem, type, src ) { var deferDataKey type + defer, queueDataKey type + queue, markDataKey type + mark, defer jQuery._data( elem, deferDataKey ); if ( defer && ( src queue || !jQuery._data(elem, queueDataKey) ) && ( src mark || !jQuery._data(elem, markDataKey) ) ) { // Give room for hard-coded callbacks to fire first // and eventually mark/queue something else on the element setTimeout( function() { if ( !jQuery._data( elem, queueDataKey ) && !jQuery._data( elem, markDataKey ) ) { jQuery.removeData( elem, deferDataKey, true ); defer.fire(); } }, 0 ); } } jQuery.extend({ _mark: function( elem, type ) { if ( elem ) { type ( type || fx ) + mark; jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); } }, _unmark: function( force, elem, type ) { if ( force ! true ) { type elem; elem force; force false; } if ( elem ) { type type || fx; var key type + mark, count force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); if ( count ) { jQuery._data( elem, key, count ); } else { jQuery.removeData( elem, key, true ); handleQueueMarkDefer( elem, type, mark ); } } }, queue: function( elem, type, data ) { var q; if ( elem ) { type ( type || fx ) + queue; q jQuery._data( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { 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(), hooks {}; // 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 ); } jQuery._data( elem, type + .run, hooks ); fn.call( elem, function() { jQuery.dequeue( elem, type ); }, hooks ); } if ( !queue.length ) { jQuery.removeData( elem, type + queue + type + .run, true ); handleQueueMarkDefer( elem, type, queue ); } } }); jQuery.fn.extend({ queue: function( type, data ) { var setter 2; if ( typeof type ! string ) { data type; type fx; setter--; } if ( arguments.length setter ) { return jQuery.queue( this0, type ); } return data undefined ? this : this.each(function() { var queue jQuery.queue( this, type, data ); if ( type fx && queue0 ! 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( next, hooks ) { var timeout setTimeout( next, time ); hooks.stop function() { clearTimeout( timeout ); }; }); }, clearQueue: function( type ) { return this.queue( type || fx, ); }, // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, object ) { if ( typeof type ! string ) { object type; type undefined; } type type || fx; var defer jQuery.Deferred(), elements this, i elements.length, count 1, deferDataKey type + defer, queueDataKey type + queue, markDataKey type + mark, tmp; function resolve() { if ( !( --count ) ) { defer.resolveWith( elements, elements ); } } while( i-- ) { if (( tmp jQuery.data( elements i , deferDataKey, undefined, true ) || ( jQuery.data( elements i , queueDataKey, undefined, true ) || jQuery.data( elements i , markDataKey, undefined, true ) ) && jQuery.data( elements i , deferDataKey, jQuery.Callbacks( once memory ), true ) )) { count++; tmp.add( resolve ); } } resolve(); return defer.promise( object ); } }); var rclass /\n\t\r/g, rspace /\s+/, rreturn /\r/g, rtype /^(?:button|input)$/i, rfocusable /^(?:button|input|object|select|textarea)$/i, rclickable /^a(?:rea)?$/i, rboolean /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, getSetAttribute jQuery.support.getSetAttribute, nodeHook, boolHook, fixSpecified; jQuery.fn.extend({ attr: function( name, value ) { return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); }, removeAttr: function( name ) { return this.each(function() { jQuery.removeAttr( this, name ); }); }, prop: function( name, value ) { return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); }, removeProp: function( name ) { name jQuery.propFix name || name; return this.each(function() { // try/catch handles cases where IE balks (such as removing a property on window) try { this name undefined; delete this name ; } catch( e ) {} }); }, addClass: function( value ) { var classNames, i, l, elem, setClass, c, cl; if ( jQuery.isFunction( value ) ) { return this.each(function( j ) { jQuery( this ).addClass( value.call(this, j, this.className) ); }); } if ( value && typeof value string ) { classNames value.split( rspace ); for ( i 0, l this.length; i l; i++ ) { elem this i ; if ( elem.nodeType 1 ) { if ( !elem.className && classNames.length 1 ) { elem.className value; } else { setClass + elem.className + ; for ( c 0, cl classNames.length; c cl; c++ ) { if ( !~setClass.indexOf( + classNames c + ) ) { setClass + classNames c + ; } } elem.className jQuery.trim( setClass ); } } } } return this; }, removeClass: function( value ) { var classNames, i, l, elem, className, c, cl; if ( jQuery.isFunction( value ) ) { return this.each(function( j ) { jQuery( this ).removeClass( value.call(this, j, this.className) ); }); } if ( (value && typeof value string) || value undefined ) { classNames ( value || ).split( rspace ); for ( i 0, l this.length; i l; i++ ) { elem this i ; if ( elem.nodeType 1 && elem.className ) { if ( value ) { className ( + elem.className + ).replace( rclass, ); for ( 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 ) { jQuery( this ).toggleClass( value.call(this, i, this.className, 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 + , i 0, l this.length; for ( ; i l; i++ ) { if ( thisi.nodeType 1 && ( + thisi.className + ).replace(rclass, ).indexOf( className ) > -1 ) { return true; } } return false; }, val: function( value ) { var hooks, ret, isFunction, elem this0; if ( !arguments.length ) { if ( elem ) { hooks jQuery.valHooks elem.type || jQuery.valHooks elem.nodeName.toLowerCase() ; if ( hooks && get in hooks && (ret hooks.get( elem, value )) ! undefined ) { return ret; } ret elem.value; return typeof ret string ? // handle most common string cases ret.replace(rreturn, ) : // handle cases where value is null/undef or number ret null ? : ret; } return; } isFunction jQuery.isFunction( value ); return this.each(function( i ) { var self jQuery(this), val; if ( this.nodeType ! 1 ) { return; } if ( isFunction ) { val value.call( this, i, self.val() ); } else { val value; } // Treat null/undefined as ; convert numbers to string if ( val null ) { val ; } else if ( typeof val number ) { val + ; } else if ( jQuery.isArray( val ) ) { val jQuery.map(val, function ( value ) { return value null ? : value + ; }); } hooks jQuery.valHooks this.type || jQuery.valHooks this.nodeName.toLowerCase() ; // If set returns undefined, fall back to normal setting if ( !hooks || !(set in hooks) || hooks.set( this, val, value ) undefined ) { this.value val; } }); } }); jQuery.extend({ valHooks: { option: { get: function( elem ) { // attributes.value is undefined in Blackberry 4.7 but // uses .value. See #6932 var val elem.attributes.value; return !val || val.specified ? elem.value : elem.text; } }, select: { get: function( elem ) { var value, i, max, option, 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 i one ? index : 0; max one ? index + 1 : options.length; for ( ; i max; i++ ) { option options i ; // Dont return options that are disabled or in a disabled optgroup if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute(disabled) null) && (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, optgroup )) ) { // Get the specific value for the option value jQuery( option ).val(); // We dont need an array for one selects if ( one ) { return value; } // Multi-Selects return an array values.push( value ); } } // Fixes Bug #2551 -- select.val() broken in IE after form.reset() if ( one && !values.length && options.length ) { return jQuery( options index ).val(); } return values; }, set: function( elem, value ) { var values jQuery.makeArray( value ); jQuery(elem).find(option).each(function() { this.selected jQuery.inArray( jQuery(this).val(), values ) > 0; }); if ( !values.length ) { elem.selectedIndex -1; } return values; } } }, attrFn: { val: true, css: true, html: true, text: true, data: true, width: true, height: true, offset: true }, attr: function( elem, name, value, pass ) { var ret, hooks, notxml, nType elem.nodeType; // dont get/set attributes on text, comment and attribute nodes if ( !elem || nType 3 || nType 8 || nType 2 ) { return; } if ( pass && name in jQuery.attrFn ) { return jQuery( elem ) name ( value ); } // Fallback to prop when attributes are not supported if ( typeof elem.getAttribute undefined ) { return jQuery.prop( elem, name, value ); } notxml nType ! 1 || !jQuery.isXMLDoc( elem ); // All attributes are lowercase // Grab necessary hook if one is defined if ( notxml ) { name name.toLowerCase(); hooks jQuery.attrHooks name || ( rboolean.test( name ) ? boolHook : nodeHook ); } if ( value ! undefined ) { if ( value null ) { jQuery.removeAttr( elem, name ); return; } else if ( hooks && set in hooks && notxml && (ret hooks.set( elem, value, name )) ! undefined ) { return ret; } else { elem.setAttribute( name, + value ); return value; } } else if ( hooks && get in hooks && notxml && (ret hooks.get( elem, name )) ! null ) { return ret; } else { ret elem.getAttribute( name ); // Non-existent attributes return null, we normalize to undefined return ret null ? undefined : ret; } }, removeAttr: function( elem, value ) { var propName, attrNames, name, l, isBool, i 0; if ( value && elem.nodeType 1 ) { attrNames value.toLowerCase().split( rspace ); l attrNames.length; for ( ; i l; i++ ) { name attrNames i ; if ( name ) { propName jQuery.propFix name || name; isBool rboolean.test( name ); // See #9699 for explanation of this approach (setting first, then removal) // Do not do this for boolean attributes (see #10870) if ( !isBool ) { jQuery.attr( elem, name, ); } elem.removeAttribute( getSetAttribute ? name : propName ); // Set corresponding property to false for boolean attributes if ( isBool && propName in elem ) { elem propName false; } } } } }, attrHooks: { type: { set: function( elem, value ) { // We cant allow the type property to be changed (since it causes problems in IE) if ( rtype.test( elem.nodeName ) && elem.parentNode ) { jQuery.error( type property cant be changed ); } else if ( !jQuery.support.radioValue && value radio && jQuery.nodeName(elem, input) ) { // Setting the type on a radio button after the value resets the value in IE6-9 // Reset value to its default in case type is set after value // This is for element creation var val elem.value; elem.setAttribute( type, value ); if ( val ) { elem.value val; } return value; } } }, // Use the value property for back compat // Use the nodeHook for button elements in IE6/7 (#1954) value: { get: function( elem, name ) { if ( nodeHook && jQuery.nodeName( elem, button ) ) { return nodeHook.get( elem, name ); } return name in elem ? elem.value : null; }, set: function( elem, value, name ) { if ( nodeHook && jQuery.nodeName( elem, button ) ) { return nodeHook.set( elem, value, name ); } // Does not return so that setAttribute is also used elem.value value; } } }, propFix: { tabindex: tabIndex, readonly: readOnly, for: htmlFor, class: className, maxlength: maxLength, cellspacing: cellSpacing, cellpadding: cellPadding, rowspan: rowSpan, colspan: colSpan, usemap: useMap, frameborder: frameBorder, contenteditable: contentEditable }, prop: function( elem, name, value ) { var ret, hooks, notxml, nType elem.nodeType; // dont get/set properties on text, comment and attribute nodes if ( !elem || nType 3 || nType 8 || nType 2 ) { return; } notxml nType ! 1 || !jQuery.isXMLDoc( elem ); if ( notxml ) { // Fix name and attach hooks name jQuery.propFix name || name; hooks jQuery.propHooks name ; } if ( value ! undefined ) { if ( hooks && set in hooks && (ret hooks.set( elem, value, name )) ! undefined ) { return ret; } else { return ( elem name value ); } } else { if ( hooks && get in hooks && (ret hooks.get( elem, name )) ! null ) { return ret; } else { return elem name ; } } }, propHooks: { tabIndex: { get: function( elem ) { // elem.tabIndex doesnt always return the correct value when it hasnt been explicitly set // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ var attributeNode elem.getAttributeNode(tabindex); return attributeNode && attributeNode.specified ? parseInt( attributeNode.value, 10 ) : rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? 0 : undefined; } } } }); // Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) jQuery.attrHooks.tabindex jQuery.propHooks.tabIndex; // Hook for boolean attributes boolHook { get: function( elem, name ) { // Align boolean attributes with corresponding properties // Fall back to attribute presence where some booleans are not supported var attrNode, property jQuery.prop( elem, name ); return property true || typeof property ! boolean && ( attrNode elem.getAttributeNode(name) ) && attrNode.nodeValue ! false ? name.toLowerCase() : undefined; }, set: function( elem, value, name ) { var propName; if ( value false ) { // Remove boolean attributes when set to false jQuery.removeAttr( elem, name ); } else { // value is true since we know at this point its type boolean and not false // Set boolean attributes to the same name and set the DOM property propName jQuery.propFix name || name; if ( propName in elem ) { // Only set the IDL specifically if it already exists on the element elem propName true; } elem.setAttribute( name, name.toLowerCase() ); } return name; } }; // IE6/7 do not support getting/setting some attributes with get/setAttribute if ( !getSetAttribute ) { fixSpecified { name: true, id: true, coords: true }; // Use this for any attribute in IE6/7 // This fixes almost every IE6/7 issue nodeHook jQuery.valHooks.button { get: function( elem, name ) { var ret; ret elem.getAttributeNode( name ); return ret && ( fixSpecified name ? ret.nodeValue ! : ret.specified ) ? ret.nodeValue : undefined; }, set: function( elem, value, name ) { // Set the existing or create a new attribute node var ret elem.getAttributeNode( name ); if ( !ret ) { ret document.createAttribute( name ); elem.setAttributeNode( ret ); } return ( ret.nodeValue value + ); } }; // Apply the nodeHook to tabindex jQuery.attrHooks.tabindex.set nodeHook.set; // Set width and height to auto instead of 0 on empty string( Bug #8150 ) // This is for removals jQuery.each( width, height , function( i, name ) { jQuery.attrHooks name jQuery.extend( jQuery.attrHooks name , { set: function( elem, value ) { if ( value ) { elem.setAttribute( name, auto ); return value; } } }); }); // Set contenteditable to false on removals(#10429) // Setting to empty string throws an error as an invalid value jQuery.attrHooks.contenteditable { get: nodeHook.get, set: function( elem, value, name ) { if ( value ) { value false; } nodeHook.set( elem, value, name ); } }; } // Some attributes require a special call on IE if ( !jQuery.support.hrefNormalized ) { jQuery.each( href, src, width, height , function( i, name ) { jQuery.attrHooks name jQuery.extend( jQuery.attrHooks name , { get: function( elem ) { var ret elem.getAttribute( name, 2 ); return ret null ? undefined : ret; } }); }); } if ( !jQuery.support.style ) { jQuery.attrHooks.style { get: function( elem ) { // Return undefined in the case of empty string // Normalize to lowercase since IE uppercases css property names return elem.style.cssText.toLowerCase() || undefined; }, set: function( elem, value ) { return ( elem.style.cssText + value ); } }; } // Safari mis-reports the default selected property of an option // Accessing the parents selectedIndex property fixes it if ( !jQuery.support.optSelected ) { jQuery.propHooks.selected jQuery.extend( jQuery.propHooks.selected, { get: function( elem ) { var parent elem.parentNode; if ( parent ) { parent.selectedIndex; // Make sure that it also works with optgroups, see #5701 if ( parent.parentNode ) { parent.parentNode.selectedIndex; } } return null; } }); } // IE6/7 call enctype encoding if ( !jQuery.support.enctype ) { jQuery.propFix.enctype encoding; } // Radios and checkboxes getter/setter if ( !jQuery.support.checkOn ) { jQuery.each( radio, checkbox , function() { jQuery.valHooks this { get: function( elem ) { // Handle the case where in Webkit is returned instead of on if a value isnt specified return elem.getAttribute(value) null ? on : elem.value; } }; }); } jQuery.each( radio, checkbox , function() { jQuery.valHooks this jQuery.extend( jQuery.valHooks this , { set: function( elem, value ) { if ( jQuery.isArray( value ) ) { return ( elem.checked jQuery.inArray( jQuery(elem).val(), value ) > 0 ); } } }); }); var rformElems /^(?:textarea|input|select)$/i, rtypenamespace /^(^\.*)?(?:\.(.+))?$/, rhoverHack /(?:^|\s)hover(\.\S+)?\b/, rkeyEvent /^key/, rmouseEvent /^(?:mouse|contextmenu)|click/, rfocusMorph /^(?:focusinfocus|focusoutblur)$/, rquickIs /^(\w*)(?:#(\w\-+))?(?:\.(\w\-+))?$/, quickParse function( selector ) { var quick rquickIs.exec( selector ); if ( quick ) { // 0 1 2 3 // _, tag, id, class quick1 ( quick1 || ).toLowerCase(); quick3 quick3 && new RegExp( (?:^|\\s) + quick3 + (?:\\s|$) ); } return quick; }, quickIs function( elem, m ) { var attrs elem.attributes || {}; return ( (!m1 || elem.nodeName.toLowerCase() m1) && (!m2 || (attrs.id || {}).value m2) && (!m3 || m3.test( (attrs class || {}).value )) ); }, hoverHack function( events ) { return jQuery.event.special.hover ? events : events.replace( rhoverHack, mouseenter$1 mouseleave$1 ); }; /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards addEvent library for many of the ideas. */ jQuery.event { add: function( elem, types, handler, data, selector ) { var elemData, eventHandle, events, t, tns, type, namespaces, handleObj, handleObjIn, quick, handlers, special; // Dont attach events to noData or text/comment nodes (allow plain objects tho) if ( elem.nodeType 3 || elem.nodeType 8 || !types || !handler || !(elemData jQuery._data( elem )) ) { return; } // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn handler; handler handleObjIn.handler; selector handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid jQuery.guid++; } // Init the elements event structure and main handler, if this is the first events elemData.events; if ( !events ) { elemData.events events {}; } eventHandle elemData.handle; if ( !eventHandle ) { elemData.handle eventHandle function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery ! undefined && (!e || jQuery.event.triggered ! e.type) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined; }; // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events eventHandle.elem elem; } // Handle multiple events separated by a space // jQuery(...).bind(mouseover mouseout, fn); types jQuery.trim( hoverHack(types) ).split( ); for ( t 0; t types.length; t++ ) { tns rtypenamespace.exec( typest ) || ; type tns1; namespaces ( tns2 || ).split( . ).sort(); // If event changes its type, use the special event handlers for the changed type special jQuery.event.special type || {}; // If selector defined, determine special event api type, otherwise given type type ( selector ? special.delegateType : special.bindType ) || type; // Update special based on newly reset type special jQuery.event.special type || {}; // handleObj is passed to all event handlers handleObj jQuery.extend({ type: type, origType: tns1, data: data, handler: handler, guid: handler.guid, selector: selector, quick: selector && quickParse( selector ), namespace: namespaces.join(.) }, handleObjIn ); // Init the event handler queue if were the first handlers events type ; if ( !handlers ) { handlers events type ; handlers.delegateCount 0; // 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 to the elements handler list, delegates in front if ( selector ) { handlers.splice( handlers.delegateCount++, 0, handleObj ); } else { handlers.push( handleObj ); } // Keep track of which events have ever been used, for event optimization 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, selector, mappedTypes ) { var elemData jQuery.hasData( elem ) && jQuery._data( elem ), t, tns, type, origType, namespaces, origCount, j, events, special, handle, eventType, handleObj; if ( !elemData || !(events elemData.events) ) { return; } // Once for each type.namespace in types; type may be omitted types jQuery.trim( hoverHack( types || ) ).split( ); for ( t 0; t types.length; t++ ) { tns rtypenamespace.exec( typest ) || ; type origType tns1; namespaces tns2; // Unbind all events (on this namespace, if provided) for the element if ( !type ) { for ( type in events ) { jQuery.event.remove( elem, type + types t , handler, selector, true ); } continue; } special jQuery.event.special type || {}; type ( selector? special.delegateType : special.bindType ) || type; eventType events type || ; origCount eventType.length; namespaces namespaces ? new RegExp((^|\\.) + namespaces.split(.).sort().join(\\.(?:.*\\.)?) + (\\.|$)) : null; // Remove matching events for ( j 0; j eventType.length; j++ ) { handleObj eventType j ; if ( ( mappedTypes || origType handleObj.origType ) && ( !handler || handler.guid handleObj.guid ) && ( !namespaces || namespaces.test( handleObj.namespace ) ) && ( !selector || selector handleObj.selector || selector ** && handleObj.selector ) ) { eventType.splice( j--, 1 ); if ( handleObj.selector ) { eventType.delegateCount--; } if ( special.remove ) { special.remove.call( elem, handleObj ); } } } // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( eventType.length 0 && origCount ! eventType.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces ) false ) { jQuery.removeEvent( elem, type, elemData.handle ); } delete events type ; } } // Remove the expando if its no longer used if ( jQuery.isEmptyObject( events ) ) { handle elemData.handle; if ( handle ) { handle.elem null; } // removeData also checks for emptiness and clears the expando if empty // so use it instead of delete jQuery.removeData( elem, events, handle , true ); } }, // Events that are safe to short-circuit if no handlers are attached. // Native DOM events should not be added, they may have inline handlers. customEvent: { getData: true, setData: true, changeData: true }, trigger: function( event, data, elem, onlyHandlers ) { // Dont do events on text and comment nodes if ( elem && (elem.nodeType 3 || elem.nodeType 8) ) { return; } // Event object or event type var type event.type || event, namespaces , cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; // focus/blur morphs to focusin/out; ensure were not firing them right now if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { return; } if ( type.indexOf( ! ) > 0 ) { // Exclusive events trigger only for the exact event (no namespaces) type type.slice(0, -1); exclusive true; } if ( type.indexOf( . ) > 0 ) { // Namespaced trigger; create a regexp to match event type in handle() namespaces type.split(.); type namespaces.shift(); namespaces.sort(); } if ( (!elem || jQuery.event.customEvent type ) && !jQuery.event.global type ) { // No jQuery handlers for this event type, and it cant have inline handlers return; } // Caller can pass in an Event, Object, or just an event type string event typeof event object ? // jQuery.Event object event jQuery.expando ? event : // Object literal new jQuery.Event( type, event ) : // Just the event type (string) new jQuery.Event( type ); event.type type; event.isTrigger true; event.exclusive exclusive; event.namespace namespaces.join( . ); event.namespace_re event.namespace? new RegExp((^|\\.) + namespaces.join(\\.(?:.*\\.)?) + (\\.|$)) : null; ontype type.indexOf( : ) 0 ? on + type : ; // Handle a global trigger if ( !elem ) { // TODO: Stop taunting the data cache; remove global events and always attach to document cache jQuery.cache; for ( i in cache ) { if ( cache i .events && cache i .events type ) { jQuery.event.trigger( event, data, cache i .handle.elem, true ); } } return; } // Clean up the event in case it is being reused event.result undefined; if ( !event.target ) { event.target elem; } // Clone any incoming data and prepend the event, creating the handler arg list data data ! null ? jQuery.makeArray( data ) : ; data.unshift( event ); // Allow special events to draw outside the lines special jQuery.event.special type || {}; if ( special.trigger && special.trigger.apply( elem, data ) false ) { return; } // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) eventPath elem, special.bindType || type ; if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { bubbleType special.delegateType || type; cur rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; old null; for ( ; cur; cur cur.parentNode ) { eventPath.push( cur, bubbleType ); old cur; } // Only add window if we got to document (e.g., not plain obj or detached DOM) if ( old && old elem.ownerDocument ) { eventPath.push( old.defaultView || old.parentWindow || window, bubbleType ); } } // Fire handlers on the event path for ( i 0; i eventPath.length && !event.isPropagationStopped(); i++ ) { cur eventPathi0; event.type eventPathi1; handle ( jQuery._data( cur, events ) || {} ) event.type && jQuery._data( cur, handle ); if ( handle ) { handle.apply( cur, data ); } // Note that this is a bare JS function and not a jQuery handler handle ontype && cur ontype ; if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) false ) { event.preventDefault(); } } event.type type; // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { if ( (!special._default || special._default.apply( elem.ownerDocument, data ) false) && !(type click && jQuery.nodeName( elem, a )) && jQuery.acceptData( elem ) ) { // Call a native DOM method on the target with the same name name as the event. // Cant use an .isFunction() check here because IE6/7 fails that test. // Dont do default actions on window, thats where global variables be (#6170) // IE9 dies on focus/blur to hidden element (#1486) if ( ontype && elem type && ((type ! focus && type ! blur) || event.target.offsetWidth ! 0) && !jQuery.isWindow( elem ) ) { // Dont re-trigger an onFOO event when we call its FOO() method old elem ontype ; if ( old ) { elem ontype null; } // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered type; elem type (); jQuery.event.triggered undefined; if ( old ) { elem ontype old; } } } } return event.result; }, dispatch: function( event ) { // Make a writable jQuery.Event from the native event object event jQuery.event.fix( event || window.event ); var handlers ( (jQuery._data( this, events ) || {} ) event.type || ), delegateCount handlers.delegateCount, args .slice.call( arguments, 0 ), run_all !event.exclusive && !event.namespace, special jQuery.event.special event.type || {}, handlerQueue , i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; // Use the fix-ed jQuery.Event rather than the (read-only) native event args0 event; event.delegateTarget this; // Call the preDispatch hook for the mapped type, and let it bail if desired if ( special.preDispatch && special.preDispatch.call( this, event ) false ) { return; } // Determine handlers that should run if there are delegated events // Avoid non-left-click bubbling in Firefox (#3861) if ( delegateCount && !(event.button && event.type click) ) { // Pregenerate a single jQuery object for reuse with .is() jqcur jQuery(this); jqcur.context this.ownerDocument || this; for ( cur event.target; cur ! this; cur cur.parentNode || this ) { // Dont process events on disabled elements (#6911, #8165) if ( cur.disabled ! true ) { selMatch {}; matches ; jqcur0 cur; for ( i 0; i delegateCount; i++ ) { handleObj handlers i ; sel handleObj.selector; if ( selMatch sel undefined ) { selMatch sel ( handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) ); } if ( selMatch sel ) { matches.push( handleObj ); } } if ( matches.length ) { handlerQueue.push({ elem: cur, matches: matches }); } } } } // Add the remaining (directly-bound) handlers if ( handlers.length > delegateCount ) { handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); } // Run delegates first; they may want to stop propagation beneath us for ( i 0; i handlerQueue.length && !event.isPropagationStopped(); i++ ) { matched handlerQueue i ; event.currentTarget matched.elem; for ( j 0; j matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { handleObj matched.matches j ; // Triggered event must either 1) be non-exclusive and have no namespace, or // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { event.data handleObj.data; event.handleObj handleObj; ret ( (jQuery.event.special handleObj.origType || {}).handle || handleObj.handler ) .apply( matched.elem, args ); if ( ret ! undefined ) { event.result ret; if ( ret false ) { event.preventDefault(); event.stopPropagation(); } } } } } // Call the postDispatch hook for the mapped type if ( special.postDispatch ) { special.postDispatch.call( this, event ); } return event.result; }, // Includes some event props shared by KeyEvent and MouseEvent // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** props: attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which.split( ), fixHooks: {}, keyHooks: { props: char charCode key keyCode.split( ), filter: function( event, original ) { // Add which for key events if ( event.which null ) { event.which original.charCode ! null ? original.charCode : original.keyCode; } return event; } }, mouseHooks: { props: button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement.split( ), filter: function( event, original ) { var eventDoc, doc, body, button original.button, fromElement original.fromElement; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX null && original.clientX ! null ) { eventDoc event.target.ownerDocument || document; doc eventDoc.documentElement; body eventDoc.body; event.pageX original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); event.pageY original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add relatedTarget, if necessary if ( !event.relatedTarget && fromElement ) { event.relatedTarget fromElement event.target ? original.toElement : fromElement; } // Add which for click: 1 left; 2 middle; 3 right // Note: button is not normalized, so dont use it if ( !event.which && button ! undefined ) { event.which ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); } return event; } }, fix: function( event ) { if ( event jQuery.expando ) { return event; } // Create a writable copy of the event object and normalize some properties var i, prop, originalEvent event, fixHook jQuery.event.fixHooks event.type || {}, copy fixHook.props ? this.props.concat( fixHook.props ) : this.props; event jQuery.Event( originalEvent ); for ( i copy.length; i; ) { prop copy --i ; event prop originalEvent prop ; } // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) if ( !event.target ) { event.target originalEvent.srcElement || document; } // Target should not be a text node (#504, Safari) if ( event.target.nodeType 3 ) { event.target event.target.parentNode; } // For mouse/key events; add metaKey if its not there (#3368, IE6/7/8) if ( event.metaKey undefined ) { event.metaKey event.ctrlKey; } return fixHook.filter? fixHook.filter( event, originalEvent ) : event; }, special: { ready: { // Make sure the ready event is setup setup: jQuery.bindReady }, load: { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { delegateType: focusin }, blur: { delegateType: focusout }, beforeunload: { setup: function( data, namespaces, eventHandle ) { // We only want to do this special case on windows if ( jQuery.isWindow( this ) ) { this.onbeforeunload eventHandle; } }, teardown: function( namespaces, eventHandle ) { if ( this.onbeforeunload eventHandle ) { this.onbeforeunload null; } } } }, simulate: function( type, elem, event, bubble ) { // Piggyback on a donor event to simulate a different one. // Fake originalEvent to avoid donors stopPropagation, but if the // simulated event prevents default then we do the same on the donor. var e jQuery.extend( new jQuery.Event(), event, { type: type, isSimulated: true, originalEvent: {} } ); if ( bubble ) { jQuery.event.trigger( e, null, elem ); } else { jQuery.event.dispatch.call( elem, e ); } if ( e.isDefaultPrevented() ) { event.preventDefault(); } } }; // Some plugins are using, but its undocumented/deprecated and will be removed. // The 1.7 special event interface should provide all the hooks needed now. jQuery.event.handle jQuery.event.dispatch; jQuery.removeEvent document.removeEventListener ? function( elem, type, handle ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } } : function( elem, type, handle ) { if ( elem.detachEvent ) { elem.detachEvent( on + type, handle ); } }; jQuery.Event function( src, props ) { // Allow instantiation without the new keyword if ( !(this instanceof jQuery.Event) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent src; this.type src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented ( src.defaultPrevented || src.returnValue false || src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; // Event type } else { this.type src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesnt have one this.timeStamp src && src.timeStamp || jQuery.now(); // Mark it as fixed this jQuery.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) } else { 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 }; // Create mouseenter/leave events using mouseover/out and event-time checks jQuery.each({ mouseenter: mouseover, mouseleave: mouseout }, function( orig, fix ) { jQuery.event.special orig { delegateType: fix, bindType: fix, handle: function( event ) { var target this, related event.relatedTarget, handleObj event.handleObj, selector handleObj.selector, ret; // For mousenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || (related ! target && !jQuery.contains( target, related )) ) { event.type handleObj.origType; ret handleObj.handler.apply( this, arguments ); event.type fix; } return ret; } }; }); // IE submit delegation if ( !jQuery.support.submitBubbles ) { jQuery.event.special.submit { setup: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, form ) ) { return false; } // Lazy-add a submit handler when a descendant form may potentially be submitted jQuery.event.add( this, click._submit keypress._submit, function( e ) { // Node name check avoids a VML-related crash in IE (#9807) var elem e.target, form jQuery.nodeName( elem, input ) || jQuery.nodeName( elem, button ) ? elem.form : undefined; if ( form && !form._submit_attached ) { jQuery.event.add( form, submit._submit, function( event ) { event._submit_bubble true; }); form._submit_attached true; } }); // return undefined since we dont need an event listener }, postDispatch: function( event ) { // If form was submitted by the user, bubble the event up the tree if ( event._submit_bubble ) { delete event._submit_bubble; if ( this.parentNode && !event.isTrigger ) { jQuery.event.simulate( submit, this.parentNode, event, true ); } } }, teardown: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, form ) ) { return false; } // Remove delegated handlers; cleanData eventually reaps submit handlers attached above jQuery.event.remove( this, ._submit ); } }; } // IE change delegation and checkbox/radio fix if ( !jQuery.support.changeBubbles ) { jQuery.event.special.change { setup: function() { if ( rformElems.test( this.nodeName ) ) { // IE doesnt fire change on a check/radio until blur; trigger it on click // after a propertychange. Eat the blur-change in special.change.handle. // This still fires onchange a second time for check/radio after blur. if ( this.type checkbox || this.type radio ) { jQuery.event.add( this, propertychange._change, function( event ) { if ( event.originalEvent.propertyName checked ) { this._just_changed true; } }); jQuery.event.add( this, click._change, function( event ) { if ( this._just_changed && !event.isTrigger ) { this._just_changed false; jQuery.event.simulate( change, this, event, true ); } }); } return false; } // Delegated event; lazy-add a change handler on descendant inputs jQuery.event.add( this, beforeactivate._change, function( e ) { var elem e.target; if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { jQuery.event.add( elem, change._change, function( event ) { if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { jQuery.event.simulate( change, this.parentNode, event, true ); } }); elem._change_attached true; } }); }, handle: function( event ) { var elem event.target; // Swallow native change events from checkbox/radio, we already triggered them above if ( this ! elem || event.isSimulated || event.isTrigger || (elem.type ! radio && elem.type ! checkbox) ) { return event.handleObj.handler.apply( this, arguments ); } }, teardown: function() { jQuery.event.remove( this, ._change ); return rformElems.test( this.nodeName ); } }; } // Create bubbling focus and blur events if ( !jQuery.support.focusinBubbles ) { jQuery.each({ focus: focusin, blur: focusout }, function( orig, fix ) { // Attach a single capturing handler while someone wants focusin/focusout var attaches 0, handler function( event ) { jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); }; jQuery.event.special fix { setup: function() { if ( attaches++ 0 ) { document.addEventListener( orig, handler, true ); } }, teardown: function() { if ( --attaches 0 ) { document.removeEventListener( orig, handler, true ); } } }; }); } jQuery.fn.extend({ on: function( types, selector, data, fn, /*INTERNAL*/ one ) { var origFn, type; // Types can be a map of types/handlers if ( typeof types object ) { // ( types-Object, selector, data ) if ( typeof selector ! string ) { // && selector ! null // ( types-Object, data ) data data || selector; selector undefined; } for ( type in types ) { this.on( type, selector, data, types type , one ); } return this; } if ( data null && fn null ) { // ( types, fn ) fn selector; data selector undefined; } else if ( fn null ) { if ( typeof selector string ) { // ( types, selector, fn ) fn data; data undefined; } else { // ( types, data, fn ) fn data; data selector; selector undefined; } } if ( fn false ) { fn returnFalse; } else if ( !fn ) { return this; } if ( one 1 ) { origFn fn; fn function( event ) { // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; // Use same guid so caller can remove using origFn fn.guid origFn.guid || ( origFn.guid jQuery.guid++ ); } return this.each( function() { jQuery.event.add( this, types, fn, data, selector ); }); }, one: function( types, selector, data, fn ) { return this.on( types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event var handleObj types.handleObj; jQuery( types.delegateTarget ).off( handleObj.namespace ? handleObj.origType + . + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types object ) { // ( types-object , selector ) for ( var type in types ) { this.off( type, selector, types type ); } return this; } if ( selector false || typeof selector function ) { // ( types , fn ) fn selector; selector undefined; } if ( fn false ) { fn returnFalse; } return this.each(function() { jQuery.event.remove( this, types, fn, selector ); }); }, bind: function( types, data, fn ) { return this.on( types, null, data, fn ); }, unbind: function( types, fn ) { return this.off( types, null, fn ); }, live: function( types, data, fn ) { jQuery( this.context ).on( types, this.selector, data, fn ); return this; }, die: function( types, fn ) { jQuery( this.context ).off( types, this.selector || **, fn ); return this; }, delegate: function( selector, types, data, fn ) { return this.on( types, selector, data, fn ); }, undelegate: function( selector, types, fn ) { // ( namespace ) or ( selector, types , fn ) return arguments.length 1? this.off( selector, ** ) : this.off( types, selector, fn ); }, trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); }, triggerHandler: function( type, data ) { if ( this0 ) { return jQuery.event.trigger( type, data, this0, true ); } }, toggle: function( fn ) { // Save reference to arguments for access in closure var args arguments, guid fn.guid || jQuery.guid++, i 0, toggler 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; }; // link all the functions, so any of them can unbind this click handler toggler.guid guid; while ( i args.length ) { args i++ .guid guid; } return this.click( toggler ); }, hover: function( fnOver, fnOut ) { return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); } }); 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 contextmenu).split( ), function( i, name ) { // Handle event binding jQuery.fn name function( data, fn ) { if ( fn null ) { fn data; data null; } return arguments.length > 0 ? this.on( name, null, data, fn ) : this.trigger( name ); }; if ( jQuery.attrFn ) { jQuery.attrFn name true; } if ( rkeyEvent.test( name ) ) { jQuery.event.fixHooks name jQuery.event.keyHooks; } if ( rmouseEvent.test( name ) ) { jQuery.event.fixHooks name jQuery.event.mouseHooks; } }); /*! * Sizzle CSS Selector Engine * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ (function(){ var chunker /((?:\((?:\(^()+\)|^()+)+\)|\(?:\^\\*\|^*|^\\+)+\|\\.|^ >+~,(\\\+)+|>+~)(\s*,\s*)?((?:.|\r|\n)*)/g, expando sizcache + (Math.random() + ).replace(., ), done 0, toString Object.prototype.toString, hasDuplicate false, baseHasDuplicate true, rBackslash /\\/g, rReturn /\r\n/g, rNonWord /\W/; // 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 || ; context context || document; var origContext context; if ( context.nodeType ! 1 && context.nodeType ! 9 ) { return ; } if ( !selector || typeof selector ! string ) { return results; } var m, set, checkSet, extra, ret, cur, pop, i, prune true, contextXML Sizzle.isXML( context ), parts , soFar selector; // Reset the position of the chunker regexp (start from head) do { chunker.exec( ); m chunker.exec( soFar ); if ( m ) { soFar m3; parts.push( m1 ); if ( m2 ) { extra m3; break; } } } while ( m ); if ( parts.length > 1 && origPOS.exec( selector ) ) { if ( parts.length 2 && Expr.relative parts0 ) { set posProcess( parts0 + parts1, context, seed ); } else { set Expr.relative parts0 ? context : Sizzle( parts.shift(), context ); while ( parts.length ) { selector parts.shift(); if ( Expr.relative selector ) { selector + parts.shift(); } set posProcess( selector, set, seed ); } } } else { // Take a shortcut and set the context if the root selector is an ID // (but not if itll be faster if the inner selector is an ID) if ( !seed && parts.length > 1 && context.nodeType 9 && !contextXML && Expr.match.ID.test(parts0) && !Expr.match.ID.test(partsparts.length - 1) ) { ret Sizzle.find( parts.shift(), context, contextXML ); context ret.expr ? Sizzle.filter( ret.expr, ret.set )0 : ret.set0; } if ( context ) { ret seed ? { expr: parts.pop(), set: makeArray(seed) } : Sizzle.find( parts.pop(), parts.length 1 && (parts0 ~ || parts0 +) && 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 ) { 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 ( i 0; checkSeti ! null; i++ ) { if ( checkSeti && (checkSeti true || checkSeti.nodeType 1 && Sizzle.contains(context, checkSeti)) ) { results.push( seti ); } } } else { for ( i 0; checkSeti ! null; i++ ) { if ( checkSeti && checkSeti.nodeType 1 ) { results.push( seti ); } } } } 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 ( resultsi results i - 1 ) { results.splice( i--, 1 ); } } } } return results; }; Sizzle.matches function( expr, set ) { return Sizzle( expr, null, null, set ); }; Sizzle.matchesSelector function( node, expr ) { return Sizzle( expr, null, null, node ).length > 0; }; Sizzle.find function( expr, context, isXML ) { var set, i, len, match, type, left; if ( !expr ) { return ; } for ( i 0, len Expr.order.length; i len; i++ ) { type Expr.orderi; if ( (match Expr.leftMatch type .exec( expr )) ) { left match1; match.splice( 1, 1 ); if ( left.substr( left.length - 1 ) ! \\ ) { match1 (match1 || ).replace( rBackslash, ); set Expr.find type ( match, context, isXML ); if ( set ! null ) { expr expr.replace( Expr.match type , ); break; } } } } if ( !set ) { set typeof context.getElementsByTagName ! undefined ? context.getElementsByTagName( * ) : ; } return { set: set, expr: expr }; }; Sizzle.filter function( expr, set, inplace, not ) { var match, anyFound, type, found, item, filter, left, i, pass, old expr, result , curLoop set, isXMLFilter set && set0 && Sizzle.isXML( set0 ); while ( expr && set.length ) { for ( type in Expr.filter ) { if ( (match Expr.leftMatch type .exec( expr )) ! null && match2 ) { filter Expr.filter type ; left match1; 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 ( i 0; (item curLoopi) ! null; i++ ) { if ( item ) { found filter( item, match, i, curLoop ); pass not ^ found; if ( inplace && found ! null ) { if ( pass ) { anyFound true; } else { curLoopi 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 new Error( Syntax error, unrecognized expression: + msg ); }; /** * Utility function for retreiving the text value of an array of DOM nodes * @param {Array|Element} elem */ var getText Sizzle.getText function( elem ) { var i, node, nodeType elem.nodeType, ret ; if ( nodeType ) { if ( nodeType 1 || nodeType 9 || nodeType 11 ) { // Use textContent || innerText for elements if ( typeof elem.textContent string ) { return elem.textContent; } else if ( typeof elem.innerText string ) { // Replace IEs carriage returns return elem.innerText.replace( rReturn, ); } else { // Traverse its children for ( elem elem.firstChild; elem; elem elem.nextSibling) { ret + getText( elem ); } } } else if ( nodeType 3 || nodeType 4 ) { return elem.nodeValue; } } else { // If no nodeType, this is expected to be an array for ( i 0; (node elemi); i++ ) { // Do not traverse comment nodes if ( node.nodeType ! 8 ) { ret + getText( node ); } } } return ret; }; 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|(#?(?:\w\u00c0-\uFFFF\-|\\.)*)|)|)\s*\/, TAG: /^((?:\w\u00c0-\uFFFF\*\-|\\.)+)/, CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:+\-?\d+|(?:+\-?\d*)?n\s*(?:+\-\s*\d+)?))\s*\))?/, 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 ); }, type: function( elem ) { return elem.getAttribute( type ); } }, relative: { +: function(checkSet, part){ var isPartStr typeof part string, isTag isPartStr && !rNonWord.test( part ), isPartStrNotTag isPartStr && !isTag; if ( isTag ) { part part.toLowerCase(); } for ( var i 0, l checkSet.length, elem; i l; i++ ) { if ( (elem checkSeti) ) { while ( (elem elem.previousSibling) && elem.nodeType ! 1 ) {} checkSeti isPartStrNotTag || elem && elem.nodeName.toLowerCase() part ? elem || false : elem part; } } if ( isPartStrNotTag ) { Sizzle.filter( part, checkSet, true ); } }, >: function( checkSet, part ) { var elem, isPartStr typeof part string, i 0, l checkSet.length; if ( isPartStr && !rNonWord.test( part ) ) { part part.toLowerCase(); for ( ; i l; i++ ) { elem checkSeti; if ( elem ) { var parent elem.parentNode; checkSeti parent.nodeName.toLowerCase() part ? parent : false; } } } else { for ( ; i l; i++ ) { elem checkSeti; if ( elem ) { checkSeti isPartStr ? elem.parentNode : elem.parentNode part; } } if ( isPartStr ) { Sizzle.filter( part, checkSet, true ); } } }, : function(checkSet, part, isXML){ var nodeCheck, doneName done++, checkFn dirCheck; if ( typeof part string && !rNonWord.test( part ) ) { part part.toLowerCase(); nodeCheck part; checkFn dirNodeCheck; } checkFn( parentNode, part, doneName, checkSet, nodeCheck, isXML ); }, ~: function( checkSet, part, isXML ) { var nodeCheck, doneName done++, checkFn dirCheck; if ( typeof part string && !rNonWord.test( part ) ) { part part.toLowerCase(); nodeCheck part; 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(match1); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 return m && m.parentNode ? m : ; } }, NAME: function( match, context ) { if ( typeof context.getElementsByName ! undefined ) { var ret , results context.getElementsByName( match1 ); for ( var i 0, l results.length; i l; i++ ) { if ( resultsi.getAttribute(name) match1 ) { ret.push( resultsi ); } } return ret.length 0 ? null : ret; } }, TAG: function( match, context ) { if ( typeof context.getElementsByTagName ! undefined ) { return context.getElementsByTagName( match1 ); } } }, preFilter: { CLASS: function( match, curLoop, inplace, result, not, isXML ) { match + match1.replace( rBackslash, ) + ; if ( isXML ) { return match; } for ( var i 0, elem; (elem curLoopi) ! null; i++ ) { if ( elem ) { if ( not ^ (elem.className && ( + elem.className + ).replace(/\t\n\r/g, ).indexOf(match) > 0) ) { if ( !inplace ) { result.push( elem ); } } else if ( inplace ) { curLoopi false; } } } return false; }, ID: function( match ) { return match1.replace( rBackslash, ); }, TAG: function( match, curLoop ) { return match1.replace( rBackslash, ).toLowerCase(); }, CHILD: function( match ) { if ( match1 nth ) { if ( !match2 ) { Sizzle.error( match0 ); } match2 match2.replace(/^\+|\s*/g, ); // parse equations like even, odd, 5, 2n, 3n+2, 4n-1, -n+6 var test /(-?)(\d*)(?:n(+\-?\d*))?/.exec( match2 even && 2n || match2 odd && 2n+1 || !/\D/.test( match2 ) && 0n+ + match2 || match2); // calculate the numbers (first)n+(last) including if they are negative match2 (test1 + (test2 || 1)) - 0; match3 test3 - 0; } else if ( match2 ) { Sizzle.error( match0 ); } // TODO: Move to normal caching system match0 done++; return match; }, ATTR: function( match, curLoop, inplace, result, not, isXML ) { var name match1 match1.replace( rBackslash, ); if ( !isXML && Expr.attrMapname ) { match1 Expr.attrMapname; } // Handle if an un-quoted value was used match4 ( match4 || match5 || ).replace( rBackslash, ); if ( match2 ~ ) { match4 + match4 + ; } return match; }, PSEUDO: function( match, curLoop, inplace, result, not ) { if ( match1 not ) { // If were dealing with a complex expression, or a simple one if ( ( chunker.exec(match3) || ).length > 1 || /^\w/.test(match3) ) { match3 Sizzle(match3, null, null, curLoop); } else { var ret Sizzle.filter(match3, curLoop, inplace, true ^ not); if ( !inplace ) { result.push.apply( result, ret ); } return false; } } else if ( Expr.match.POS.test( match0 ) || Expr.match.CHILD.test( match0 ) ) { 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 if ( elem.parentNode ) { 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( match3, elem ).length; }, header: function( elem ) { return (/h\d/i).test( elem.nodeName ); }, text: function( elem ) { var attr elem.getAttribute( type ), type elem.type; // IE6 and 7 will map elem.type to text for new HTML5 types (search, etc) // use getAttribute instead to test this case return elem.nodeName.toLowerCase() input && text type && ( attr type || attr null ); }, radio: function( elem ) { return elem.nodeName.toLowerCase() input && radio elem.type; }, checkbox: function( elem ) { return elem.nodeName.toLowerCase() input && checkbox elem.type; }, file: function( elem ) { return elem.nodeName.toLowerCase() input && file elem.type; }, password: function( elem ) { return elem.nodeName.toLowerCase() input && password elem.type; }, submit: function( elem ) { var name elem.nodeName.toLowerCase(); return (name input || name button) && submit elem.type; }, image: function( elem ) { return elem.nodeName.toLowerCase() input && image elem.type; }, reset: function( elem ) { var name elem.nodeName.toLowerCase(); return (name input || name button) && reset elem.type; }, button: function( elem ) { var name elem.nodeName.toLowerCase(); return name input && button elem.type || name button; }, input: function( elem ) { return (/input|select|textarea|button/i).test( elem.nodeName ); }, focus: function( elem ) { return elem elem.ownerDocument.activeElement; } }, 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 match3 - 0; }, gt: function( elem, i, match ) { return i > match3 - 0; }, nth: function( elem, i, match ) { return match3 - 0 i; }, eq: function( elem, i, match ) { return match3 - 0 i; } }, filter: { PSEUDO: function( elem, match, i, array ) { var name match1, filter Expr.filters name ; if ( filter ) { return filter( elem, i, match, array ); } else if ( name contains ) { return (elem.textContent || elem.innerText || getText( elem ) || ).indexOf(match3) > 0; } else if ( name not ) { var not match3; for ( var j 0, l not.length; j l; j++ ) { if ( notj elem ) { return false; } } return true; } else { Sizzle.error( name ); } }, CHILD: function( elem, match ) { var first, last, doneName, parent, cache, count, diff, type match1, 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; /* falls through */ case last: while ( (node node.nextSibling) ) { if ( node.nodeType 1 ) { return false; } } return true; case nth: first match2; last match3; if ( first 1 && last 0 ) { return true; } doneName match0; parent elem.parentNode; if ( parent && (parent expando ! doneName || !elem.nodeIndex) ) { count 0; for ( node parent.firstChild; node; node node.nextSibling ) { if ( node.nodeType 1 ) { node.nodeIndex ++count; } } parent expando doneName; } 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 && elem.nodeName.toLowerCase() match; }, CLASS: function( elem, match ) { return ( + (elem.className || elem.getAttribute(class)) + ) .indexOf( match ) > -1; }, ATTR: function( elem, match ) { var name match1, result Sizzle.attr ? Sizzle.attr( elem, name ) : Expr.attrHandle name ? Expr.attrHandle name ( elem ) : elem name ! null ? elem name : elem.getAttribute( name ), value result + , type match2, check match4; return result null ? type ! : !type && Sizzle.attr ? result ! null : 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 match2, filter Expr.setFilters name ; if ( filter ) { return filter( elem, i, match, array ); } } } }; var origPOS Expr.match.POS, fescape function(all, num){ return \\ + (num - 0 + 1); }; 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, fescape) ); } // Expose origPOS // global as in regardless of relation to brackets/parens Expr.match.globalPOS origPOS; 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 i 0, ret results || ; if ( toString.call(array) object Array ) { Array.prototype.push.apply( ret, array ); } else { if ( typeof array.length number ) { for ( var l array.length; i l; i++ ) { ret.push( arrayi ); } } else { for ( ; arrayi; i++ ) { ret.push( arrayi ); } } } return ret; }; } var sortOrder, siblingCheck; if ( document.documentElement.compareDocumentPosition ) { sortOrder function( a, b ) { if ( a b ) { hasDuplicate true; return 0; } if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { return a.compareDocumentPosition ? -1 : 1; } return a.compareDocumentPosition(b) & 4 ? -1 : 1; }; } else { sortOrder function( a, b ) { // The nodes are identical, we can exit early if ( a b ) { hasDuplicate true; return 0; // Fallback to using sourceIndex (in IE) if its available on both nodes } else if ( a.sourceIndex && b.sourceIndex ) { return a.sourceIndex - b.sourceIndex; } var al, bl, ap , bp , aup a.parentNode, bup b.parentNode, cur aup; // If the nodes are siblings (or identical) we can do a quick check if ( aup bup ) { return siblingCheck( a, b ); // If no parents were found then the nodes are disconnected } else if ( !aup ) { return -1; } else if ( !bup ) { return 1; } // Otherwise theyre somewhere else in the tree so we need // to build up a full list of the parentNodes for comparison while ( cur ) { ap.unshift( cur ); cur cur.parentNode; } cur bup; while ( cur ) { bp.unshift( cur ); cur cur.parentNode; } al ap.length; bl bp.length; // Start walking down the tree looking for a discrepancy for ( var i 0; i al && i bl; i++ ) { if ( api ! bpi ) { return siblingCheck( api, bpi ); } } // We ended someplace up the tree so do a sibling check return i al ? siblingCheck( a, bpi, -1 ) : siblingCheck( api, b, 1 ); }; siblingCheck function( a, b, ret ) { if ( a b ) { return ret; } var cur a.nextSibling; while ( cur ) { if ( cur b ) { return -1; } cur cur.nextSibling; } return 1; }; } // Check to see if the browser returns elements by name when // querying by getElementById (and provide a workaround) (function(){ // Were going to inject a fake input element with a specified name var form document.createElement(div), id script + (new Date()).getTime(), root document.documentElement; form.innerHTML a name + id + />; // Inject it into the root element, check its status, and remove it quickly 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(match1); return m ? m.id match1 || typeof m.getAttributeNode ! undefined && m.getAttributeNode(id).nodeValue match1 ? 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 ); // release memory in IE root form null; })(); (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( match1 ); // Filter out possible comments if ( match1 * ) { var tmp ; for ( var i 0; resultsi; i++ ) { if ( resultsi.nodeType 1 ) { tmp.push( resultsi ); } } results tmp; } return results; }; } // Check to see if an attribute returns normalized href attributes div.innerHTML a href#>/a>; if ( div.firstChild && typeof div.firstChild.getAttribute ! undefined && div.firstChild.getAttribute(href) ! # ) { Expr.attrHandle.href function( elem ) { return elem.getAttribute( href, 2 ); }; } // release memory in IE div null; })(); if ( document.querySelectorAll ) { (function(){ var oldSizzle Sizzle, div document.createElement(div), id __sizzle__; div.innerHTML p classTEST>/p>; // Safari cant 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 dont work in non-HTML documents) if ( !seed && !Sizzle.isXML(context) ) { // See if we find a selector to speed up var match /^(\w+$)|^\.(\w\-+$)|^#(\w\-+$)/.exec( query ); if ( match && (context.nodeType 1 || context.nodeType 9) ) { // Speed-up: Sizzle(TAG) if ( match1 ) { return makeArray( context.getElementsByTagName( query ), extra ); // Speed-up: Sizzle(.CLASS) } else if ( match2 && Expr.find.CLASS && context.getElementsByClassName ) { return makeArray( context.getElementsByClassName( match2 ), extra ); } } if ( context.nodeType 9 ) { // Speed-up: Sizzle(body) // The body element only exists once, optimize finding it if ( query body && context.body ) { return makeArray( context.body , extra ); // Speed-up: Sizzle(#ID) } else if ( match && match3 ) { var elem context.getElementById( match3 ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id match3 ) { return makeArray( elem , extra ); } } else { return makeArray( , extra ); } } try { return makeArray( context.querySelectorAll(query), extra ); } catch(qsaError) {} // qSA works strangely on Element-rooted queries // We can work around this by specifying an extra ID on the root // and working up from there (Thanks to Andrew Dupont for the technique) // IE 8 doesnt work on object elements } else if ( context.nodeType 1 && context.nodeName.toLowerCase() ! object ) { var oldContext context, old context.getAttribute( id ), nid old || id, hasParent context.parentNode, relativeHierarchySelector /^\s*+~/.test( query ); if ( !old ) { context.setAttribute( id, nid ); } else { nid nid.replace( //g, \\$& ); } if ( relativeHierarchySelector && hasParent ) { context context.parentNode; } try { if ( !relativeHierarchySelector || hasParent ) { return makeArray( context.querySelectorAll( id + nid + + query ), extra ); } } catch(pseudoError) { } finally { if ( !old ) { oldContext.removeAttribute( id ); } } } } return oldSizzle(query, context, extra, seed); }; for ( var prop in oldSizzle ) { Sizzle prop oldSizzle prop ; } // release memory in IE div null; })(); } (function(){ var html document.documentElement, matches html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; if ( matches ) { // Check to see if its possible to do matchesSelector // on a disconnected node (IE 9 fails this) var disconnectedMatch !matches.call( document.createElement( div ), div ), pseudoWorks false; try { // This should fail with an exception // Gecko does not error, returns false instead matches.call( document.documentElement, test!:sizzle ); } catch( pseudoError ) { pseudoWorks true; } Sizzle.matchesSelector function( node, expr ) { // Make sure that attribute selectors are quoted expr expr.replace(/\\s*(^\*)\s*\/g, $1); if ( !Sizzle.isXML( node ) ) { try { if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!/.test( expr ) ) { var ret matches.call( node, expr ); // IE 9s matchesSelector returns false on disconnected nodes if ( ret || !disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9, so check for that node.document && node.document.nodeType ! 11 ) { return ret; } } } catch(e) {} } return Sizzle(expr, null, null, node).length > 0; }; } })(); (function(){ var div document.createElement(div); div.innerHTML div classtest e>/div>div classtest>/div>; // Opera cant 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, doesnt 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(match1); } }; // release memory in IE div null; })(); function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { for ( var i 0, l checkSet.length; i l; i++ ) { var elem checkSeti; if ( elem ) { var match false; elem elemdir; while ( elem ) { if ( elem expando doneName ) { match checkSetelem.sizset; break; } if ( elem.nodeType 1 && !isXML ){ elem expando doneName; elem.sizset i; } if ( elem.nodeName.toLowerCase() cur ) { match elem; break; } elem elemdir; } checkSeti match; } } } function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { for ( var i 0, l checkSet.length; i l; i++ ) { var elem checkSeti; if ( elem ) { var match false; elem elemdir; while ( elem ) { if ( elem expando doneName ) { match checkSetelem.sizset; break; } if ( elem.nodeType 1 ) { if ( !isXML ) { elem expando 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 elemdir; } checkSeti match; } } } if ( document.documentElement.contains ) { Sizzle.contains function( a, b ) { return a ! b && (a.contains ? a.contains(b) : true); }; } else if ( document.documentElement.compareDocumentPosition ) { Sizzle.contains function( a, b ) { return !!(a.compareDocumentPosition(b) & 16); }; } else { Sizzle.contains function() { return false; }; } Sizzle.isXML function( elem ) { // documentElement is verified for cases where it doesnt 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, seed ) { var match, tmpSet , later , 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 + match0; selector selector.replace( Expr.match.PSEUDO, ); } selector Expr.relativeselector ? selector + * : selector; for ( var i 0, l root.length; i l; i++ ) { Sizzle( selector, rooti, tmpSet, seed ); } return Sizzle.filter( later, tmpSet ); }; // EXPOSE // Override sizzle attribute retrieval Sizzle.attr jQuery.attr; Sizzle.selectors.attrMap {}; jQuery.find Sizzle; jQuery.expr Sizzle.selectors; jQuery.expr: jQuery.expr.filters; jQuery.unique Sizzle.uniqueSort; jQuery.text Sizzle.getText; jQuery.isXMLDoc Sizzle.isXML; jQuery.contains Sizzle.contains; })(); var runtil /Until$/, rparentsprev /^(?:parents|prevUntil|prevAll)/, // Note: This RegExp should be improved, or likely pulled from Sizzle rmultiselector /,/, isSimple /^.^:#\\.,*$/, slice Array.prototype.slice, POS jQuery.expr.match.globalPOS, // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique { children: true, contents: true, next: true, prev: true }; jQuery.fn.extend({ find: function( selector ) { var self this, i, l; if ( typeof selector ! string ) { return jQuery( selector ).filter(function() { for ( i 0, l self.length; i l; i++ ) { if ( jQuery.contains( self i , this ) ) { return true; } } }); } var ret this.pushStack( , find, selector ), length, n, r; for ( i 0, l this.length; i l; i++ ) { length ret.length; jQuery.find( selector, thisi, ret ); if ( i > 0 ) { // Make sure that the results are unique for ( n length; n ret.length; n++ ) { for ( r 0; r length; r++ ) { if ( retr retn ) { 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, targetsi ) ) { 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 && ( typeof selector string ? // If this is a positional selector, check membership in the returned set // so $(p:first).is(p:last) wont return true for a doc with two p. POS.test( selector ) ? jQuery( selector, this.context ).index( this0 ) > 0 : jQuery.filter( selector, this ).length > 0 : this.filter( selector ).length > 0 ); }, closest: function( selectors, context ) { var ret , i, l, cur this0; // Array (deprecated as of jQuery 1.7) if ( jQuery.isArray( selectors ) ) { var level 1; while ( cur && cur.ownerDocument && cur ! context ) { for ( i 0; i selectors.length; i++ ) { if ( jQuery( cur ).is( selectors i ) ) { ret.push({ selector: selectors i , elem: cur, level: level }); } } cur cur.parentNode; level++; } return ret; } // String var pos POS.test( selectors ) || typeof selectors ! string ? jQuery( selectors, context || this.context ) : 0; for ( i 0, l this.length; i l; i++ ) { cur thisi; while ( cur ) { if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { ret.push( cur ); break; } else { cur cur.parentNode; if ( !cur || !cur.ownerDocument || cur context || cur.nodeType 11 ) { break; } } } } ret ret.length > 1 ? jQuery.unique( ret ) : ret; return this.pushStack( ret, closest, selectors ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { // No argument, return index in parent if ( !elem ) { return ( this0 && this0.parentNode ) ? this.prevAll().length : -1; } // index in selector if ( typeof elem string ) { return jQuery.inArray( this0, jQuery( elem ) ); } // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem.jquery ? elem0 : elem, this ); }, add: function( selector, context ) { var set typeof selector string ? jQuery( selector, context ) : jQuery.makeArray( selector && selector.nodeType ? selector : selector ), all jQuery.merge( this.get(), set ); return this.pushStack( isDisconnected( set0 ) || isDisconnected( all0 ) ? 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 && !guaranteedUnique name ? 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 elems.length 1 ? jQuery.find.matchesSelector(elems0, expr) ? elems0 : : 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 curdir; } return matched; }, nth: function( cur, result, dir, elem ) { result result || 1; var num 0; for ( ; cur; cur curdir ) { 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; } }); // Implement the identical functionality for filter and not function winnow( elements, qualifier, keep ) { // Cant pass null or undefined to indexOf in Firefox 4 // Set to 0 to skip string check qualifier qualifier || 0; if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep(elements, function( elem, i ) { var retVal !!qualifier.call( elem, i, elem ); return retVal 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; }); } function createSafeFragment( document ) { var list nodeNames.split( | ), safeFrag document.createDocumentFragment(); if ( safeFrag.createElement ) { while ( list.length ) { safeFrag.createElement( list.pop() ); } } return safeFrag; } var nodeNames abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer| + header|hgroup|mark|meter|nav|output|progress|section|summary|time|video, rinlinejQuery / jQuery\d+(?:\d+|null)/g, rleadingWhitespace /^\s+/, rxhtmlTag /(?!area|br|col|embed|hr|img|input|link|meta|param)((\w:+)^>*)\/>/ig, rtagName /(\w:+)/, rtbody /tbody/i, rhtml /|?\w+;/, rnoInnerhtml /(?:script|style)/i, rnocache /(?:script|object|embed|option|style)/i, rnoshimcache new RegExp((?: + nodeNames + )\\s/>, i), // checkedchecked or checked rchecked /checked\s*(?:^|\s*.checked.)/i, rscriptType /\/(java|ecma)script/i, rcleanScript /^\s*!(?:\CDATA\|\-\-)/, wrapMap { option: 1, select multiplemultiple>, /select> , legend: 1, fieldset>, /fieldset> , thead: 1, table>, /table> , tr: 2, table>tbody>, /tbody>/table> , td: 3, table>tbody>tr>, /tr>/tbody>/table> , col: 2, table>tbody>/tbody>colgroup>, /colgroup>/table> , area: 1, map>, /map> , _default: 0, , }, safeFragment createSafeFragment( document ); wrapMap.optgroup wrapMap.option; wrapMap.tbody wrapMap.tfoot wrapMap.colgroup wrapMap.caption wrapMap.thead; wrapMap.th wrapMap.td; // IE cant serialize link> and script> tags normally if ( !jQuery.support.htmlSerialize ) { wrapMap._default 1, divdiv>, /div> ; } jQuery.fn.extend({ text: function( value ) { return jQuery.access( this, function( value ) { return value undefined ? jQuery.text( this ) : this.empty().append( ( this0 && this0.ownerDocument || document ).createTextNode( value ) ); }, null, value, arguments.length ); }, wrapAll: function( html ) { if ( jQuery.isFunction( html ) ) { return this.each(function(i) { jQuery(this).wrapAll( html.call(this, i) ); }); } if ( this0 ) { // The elements to wrap the target around var wrap jQuery( html, this0.ownerDocument ).eq(0).clone(true); if ( this0.parentNode ) { wrap.insertBefore( this0 ); } wrap.map(function() { var elem this; while ( elem.firstChild && elem.firstChild.nodeType 1 ) { elem elem.firstChild; } return elem; }).append( this ); } return this; }, wrapInner: function( html ) { if ( jQuery.isFunction( html ) ) { return this.each(function(i) { jQuery(this).wrapInner( html.call(this, i) ); }); } return this.each(function() { var self jQuery( this ), contents self.contents(); if ( contents.length ) { contents.wrapAll( html ); } else { self.append( html ); } }); }, wrap: function( html ) { var isFunction jQuery.isFunction( html ); return this.each(function(i) { jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); }); }, unwrap: function() { return this.parent().each(function() { if ( !jQuery.nodeName( this, body ) ) { jQuery( this ).replaceWith( this.childNodes ); } }).end(); }, append: function() { return this.domManip(arguments, true, function( elem ) { if ( this.nodeType 1 ) { this.appendChild( elem ); } }); }, prepend: function() { return this.domManip(arguments, true, function( elem ) { if ( this.nodeType 1 ) { this.insertBefore( elem, this.firstChild ); } }); }, before: function() { if ( this0 && this0.parentNode ) { return this.domManip(arguments, false, function( elem ) { this.parentNode.insertBefore( elem, this ); }); } else if ( arguments.length ) { var set jQuery.clean( arguments ); set.push.apply( set, this.toArray() ); return this.pushStack( set, before, arguments ); } }, after: function() { if ( this0 && this0.parentNode ) { return this.domManip(arguments, false, function( elem ) { this.parentNode.insertBefore( elem, this.nextSibling ); }); } else if ( arguments.length ) { var set this.pushStack( this, after, arguments ); set.push.apply( set, jQuery.clean(arguments) ); return set; } }, // keepData is for internal use only--do not document remove: function( selector, keepData ) { for ( var i 0, elem; (elem thisi) ! null; i++ ) { if ( !selector || jQuery.filter( selector, elem ).length ) { if ( !keepData && elem.nodeType 1 ) { jQuery.cleanData( elem.getElementsByTagName(*) ); jQuery.cleanData( elem ); } if ( elem.parentNode ) { elem.parentNode.removeChild( elem ); } } } return this; }, empty: function() { for ( var i 0, elem; (elem thisi) ! null; i++ ) { // Remove element nodes and prevent memory leaks if ( elem.nodeType 1 ) { jQuery.cleanData( elem.getElementsByTagName(*) ); } // Remove any remaining nodes while ( elem.firstChild ) { elem.removeChild( elem.firstChild ); } } return this; }, clone: function( dataAndEvents, deepDataAndEvents ) { dataAndEvents dataAndEvents null ? false : dataAndEvents; deepDataAndEvents deepDataAndEvents null ? dataAndEvents : deepDataAndEvents; return this.map( function () { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); }); }, html: function( value ) { return jQuery.access( this, function( value ) { var elem this0 || {}, i 0, l this.length; if ( value undefined ) { return elem.nodeType 1 ? elem.innerHTML.replace( rinlinejQuery, ) : null; } if ( typeof value string && !rnoInnerhtml.test( value ) && ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && !wrapMap ( rtagName.exec( value ) || , )1.toLowerCase() ) { value value.replace( rxhtmlTag, $1>/$2> ); try { for (; i l; i++ ) { // Remove element nodes and prevent memory leaks elem thisi || {}; if ( elem.nodeType 1 ) { jQuery.cleanData( elem.getElementsByTagName( * ) ); elem.innerHTML value; } } elem 0; // If using innerHTML throws an exception, use the fallback method } catch(e) {} } if ( elem ) { this.empty().append( value ); } }, null, value, arguments.length ); }, replaceWith: function( value ) { if ( this0 && this0.parentNode ) { // Make sure that the elements are removed from the DOM before they are inserted // this can help fix replacing a parent with child elements if ( jQuery.isFunction( value ) ) { return this.each(function(i) { var self jQuery(this), old self.html(); self.replaceWith( value.call( this, i, old ) ); }); } if ( typeof value ! string ) { value jQuery( value ).detach(); } return this.each(function() { var next this.nextSibling, parent this.parentNode; jQuery( this ).remove(); if ( next ) { jQuery(next).before( value ); } else { jQuery(parent).append( value ); } }); } else { return this.length ? this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), replaceWith, value ) : this; } }, detach: function( selector ) { return this.remove( selector, true ); }, domManip: function( args, table, callback ) { var results, first, fragment, parent, value args0, scripts ; // We cant cloneNode fragments that contain checked, in WebKit if ( !jQuery.support.checkClone && arguments.length 3 && typeof value string && rchecked.test( value ) ) { return this.each(function() { jQuery(this).domManip( args, table, callback, true ); }); } if ( jQuery.isFunction(value) ) { return this.each(function(i) { var self jQuery(this); args0 value.call(this, i, table ? self.html() : undefined); self.domManip( args, table, callback ); }); } if ( this0 ) { parent value && value.parentNode; // If were in a fragment, just use that instead of building a new one if ( jQuery.support.parentNode && parent && parent.nodeType 11 && parent.childNodes.length this.length ) { results { fragment: parent }; } else { results jQuery.buildFragment( args, this, scripts ); } fragment results.fragment; if ( fragment.childNodes.length 1 ) { first fragment fragment.firstChild; } else { first fragment.firstChild; } if ( first ) { table table && jQuery.nodeName( first, tr ); for ( var i 0, l this.length, lastIndex l - 1; i l; i++ ) { callback.call( table ? root(thisi, first) : thisi, // Make sure that we do not leak memory by inadvertently discarding // the original fragment (which might have attached data) instead of // using it; in addition, use the original fragment object for the last // item instead of first because it can end up being emptied incorrectly // in certain situations (Bug #8070). // Fragments from the fragment cache must always be cloned and never used // in place. results.cacheable || ( l > 1 && i lastIndex ) ? jQuery.clone( fragment, true, true ) : fragment ); } } if ( scripts.length ) { jQuery.each( scripts, function( i, elem ) { if ( elem.src ) { jQuery.ajax({ type: GET, global: false, url: elem.src, async: false, dataType: script }); } else { jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || ).replace( rcleanScript, /*$0*/ ) ); } if ( elem.parentNode ) { elem.parentNode.removeChild( elem ); } }); } } return this; } }); function root( elem, cur ) { return jQuery.nodeName(elem, table) ? (elem.getElementsByTagName(tbody)0 || elem.appendChild(elem.ownerDocument.createElement(tbody))) : elem; } function cloneCopyEvent( src, dest ) { if ( dest.nodeType ! 1 || !jQuery.hasData( src ) ) { return; } var type, i, l, oldData jQuery._data( src ), curData jQuery._data( dest, oldData ), events oldData.events; if ( events ) { delete curData.handle; curData.events {}; for ( type in events ) { for ( i 0, l events type .length; i l; i++ ) { jQuery.event.add( dest, type, events type i ); } } } // make the cloned public data object a copy from the original if ( curData.data ) { curData.data jQuery.extend( {}, curData.data ); } } function cloneFixAttributes( src, dest ) { var nodeName; // We do not need to do anything for non-Elements if ( dest.nodeType ! 1 ) { return; } // clearAttributes removes the attributes, which we dont want, // but also removes the attachEvent events, which we *do* want if ( dest.clearAttributes ) { dest.clearAttributes(); } // mergeAttributes, in contrast, only merges back on the // original attributes, not the events if ( dest.mergeAttributes ) { dest.mergeAttributes( src ); } nodeName dest.nodeName.toLowerCase(); // IE6-8 fail to clone children inside object elements that use // the proprietary classid attribute value (rather than the type // attribute) to identify the type of content to display if ( nodeName object ) { dest.outerHTML src.outerHTML; } else if ( nodeName input && (src.type checkbox || src.type radio) ) { // IE6-8 fails to persist the checked state of a cloned checkbox // or radio button. Worse, IE6-7 fail to give the cloned element // a checked appearance if the defaultChecked value isnt also set if ( src.checked ) { dest.defaultChecked dest.checked src.checked; } // IE6-7 get confused and end up setting the value of a cloned // checkbox/radio button to an empty string instead of on if ( dest.value ! src.value ) { dest.value src.value; } // IE6-8 fails to return the selected option to the default selected // state when cloning options } else if ( nodeName option ) { dest.selected src.defaultSelected; // IE6-8 fails to set the defaultValue to the correct value when // cloning other types of input fields } else if ( nodeName input || nodeName textarea ) { dest.defaultValue src.defaultValue; // IE blanks contents when cloning scripts } else if ( nodeName script && dest.text ! src.text ) { dest.text src.text; } // Event data gets referenced instead of copied if the expando // gets copied too dest.removeAttribute( jQuery.expando ); // Clear flags for bubbling special change/submit events, they must // be reattached when the newly cloned events are first activated dest.removeAttribute( _submit_attached ); dest.removeAttribute( _change_attached ); } jQuery.buildFragment function( args, nodes, scripts ) { var fragment, cacheable, cacheresults, doc, first args 0 ; // nodes may contain either an explicit document object, // a jQuery collection or context object. // If nodes0 contains a valid object to assign to doc if ( nodes && nodes0 ) { doc nodes0.ownerDocument || nodes0; } // Ensure that an attr object doesnt incorrectly stand in as a document object // Chrome and Firefox seem to allow this to occur and will throw exception // Fixes #8950 if ( !doc.createDocumentFragment ) { doc document; } // Only cache small (1/2 KB) HTML strings that are associated with the main document // Cloning options loses the selected state, so dont cache them // IE 6 doesnt like it when you put object> or embed> elements in a fragment // Also, WebKit does not clone checked attributes on cloneNode, so dont cache // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 if ( args.length 1 && typeof first string && first.length 512 && doc document && first.charAt(0) && !rnocache.test( first ) && (jQuery.support.checkClone || !rchecked.test( first )) && (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) { cacheable true; cacheresults jQuery.fragments first ; if ( cacheresults && cacheresults ! 1 ) { fragment cacheresults; } } if ( !fragment ) { fragment doc.createDocumentFragment(); jQuery.clean( args, doc, fragment, scripts ); } if ( cacheable ) { jQuery.fragments first cacheresults ? fragment : 1; } return { fragment: fragment, cacheable: cacheable }; }; jQuery.fragments {}; jQuery.each({ appendTo: append, prependTo: prepend, insertBefore: before, insertAfter: after, replaceAll: replaceWith }, function( name, original ) { jQuery.fn name function( selector ) { var ret , insert jQuery( selector ), parent this.length 1 && this0.parentNode; if ( parent && parent.nodeType 11 && parent.childNodes.length 1 && insert.length 1 ) { insert original ( this0 ); return this; } else { for ( var i 0, l insert.length; i l; i++ ) { var elems ( i > 0 ? this.clone(true) : this ).get(); jQuery( inserti ) original ( elems ); ret ret.concat( elems ); } return this.pushStack( ret, name, insert.selector ); } }; }); function getAll( elem ) { if ( typeof elem.getElementsByTagName ! undefined ) { return elem.getElementsByTagName( * ); } else if ( typeof elem.querySelectorAll ! undefined ) { return elem.querySelectorAll( * ); } else { return ; } } // Used in clean, fixes the defaultChecked property function fixDefaultChecked( elem ) { if ( elem.type checkbox || elem.type radio ) { elem.defaultChecked elem.checked; } } // Finds all inputs and passes them to fixDefaultChecked function findInputs( elem ) { var nodeName ( elem.nodeName || ).toLowerCase(); if ( nodeName input ) { fixDefaultChecked( elem ); // Skip scripts, get other children } else if ( nodeName ! script && typeof elem.getElementsByTagName ! undefined ) { jQuery.grep( elem.getElementsByTagName(input), fixDefaultChecked ); } } // Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js function shimCloneNode( elem ) { var div document.createElement( div ); safeFragment.appendChild( div ); div.innerHTML elem.outerHTML; return div.firstChild; } jQuery.extend({ clone: function( elem, dataAndEvents, deepDataAndEvents ) { var srcElements, destElements, i, // IE8 does not properly clone detached, unknown element nodes clone jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( + elem.nodeName + > ) ? elem.cloneNode( true ) : shimCloneNode( elem ); if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && (elem.nodeType 1 || elem.nodeType 11) && !jQuery.isXMLDoc(elem) ) { // IE copies events bound via attachEvent when using cloneNode. // Calling detachEvent on the clone will also remove the events // from the original. In order to get around this, we use some // proprietary methods to clear the events. Thanks to MooTools // guys for this hotness. cloneFixAttributes( elem, clone ); // Using Sizzle here is crazy slow, so we use getElementsByTagName instead srcElements getAll( elem ); destElements getAll( clone ); // Weird iteration because IE will replace the length property // with an element if you are cloning the body and one of the // elements on the page has a name or id of length for ( i 0; srcElementsi; ++i ) { // Ensure that the destination node is not null; Fixes #9587 if ( destElementsi ) { cloneFixAttributes( srcElementsi, destElementsi ); } } } // Copy the events from the original to the clone if ( dataAndEvents ) { cloneCopyEvent( elem, clone ); if ( deepDataAndEvents ) { srcElements getAll( elem ); destElements getAll( clone ); for ( i 0; srcElementsi; ++i ) { cloneCopyEvent( srcElementsi, destElementsi ); } } } srcElements destElements null; // Return the cloned set return clone; }, clean: function( elems, context, fragment, scripts ) { var checkScriptType, script, j, ret ; context context || document; // !context.createElement fails in IE with an error but returns typeof object if ( typeof context.createElement undefined ) { context context.ownerDocument || context0 && context0.ownerDocument || document; } for ( var i 0, elem; (elem elemsi) ! null; i++ ) { if ( typeof elem number ) { elem + ; } if ( !elem ) { continue; } // Convert html string into DOM nodes if ( typeof elem string ) { if ( !rhtml.test( elem ) ) { elem context.createTextNode( elem ); } else { // Fix XHTML-style tags in all browsers elem elem.replace(rxhtmlTag, $1>/$2>); // Trim whitespace, otherwise indexOf wont work as expected var tag ( rtagName.exec( elem ) || , )1.toLowerCase(), wrap wrapMap tag || wrapMap._default, depth wrap0, div context.createElement(div), safeChildNodes safeFragment.childNodes, remove; // Append wrapper element to unknown element safe doc fragment if ( context document ) { // Use the fragment weve already created for this document safeFragment.appendChild( div ); } else { // Use a fragment created with the owner document createSafeFragment( context ).appendChild( div ); } // Go to html and back, then peel off extra wrappers div.innerHTML wrap1 + elem + wrap2; // Move to the right depth while ( depth-- ) { div div.lastChild; } // Remove IEs autoinserted tbody> from table fragments if ( !jQuery.support.tbody ) { // String was a table>, *may* have spurious tbody> var hasBody rtbody.test(elem), tbody tag table && !hasBody ? div.firstChild && div.firstChild.childNodes : // String was a bare thead> or tfoot> wrap1 table> && !hasBody ? div.childNodes : ; for ( j tbody.length - 1; j > 0 ; --j ) { if ( jQuery.nodeName( tbody j , tbody ) && !tbody j .childNodes.length ) { tbody j .parentNode.removeChild( tbody j ); } } } // IE completely kills leading whitespace when innerHTML is used if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)0 ), div.firstChild ); } elem div.childNodes; // Clear elements from DocumentFragment (safeFragment or otherwise) // to avoid hoarding elements. Fixes #11356 if ( div ) { div.parentNode.removeChild( div ); // Guard against -1 index exceptions in FF3.6 if ( safeChildNodes.length > 0 ) { remove safeChildNodes safeChildNodes.length - 1 ; if ( remove && remove.parentNode ) { remove.parentNode.removeChild( remove ); } } } } } // Resets defaultChecked for any radios and checkboxes // about to be appended to the DOM in IE 6/7 (#8060) var len; if ( !jQuery.support.appendChecked ) { if ( elem0 && typeof (len elem.length) number ) { for ( j 0; j len; j++ ) { findInputs( elemj ); } } else { findInputs( elem ); } } if ( elem.nodeType ) { ret.push( elem ); } else { ret jQuery.merge( ret, elem ); } } if ( fragment ) { checkScriptType function( elem ) { return !elem.type || rscriptType.test( elem.type ); }; for ( i 0; reti; i++ ) { script reti; if ( scripts && jQuery.nodeName( script, script ) && (!script.type || rscriptType.test( script.type )) ) { scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script ); } else { if ( script.nodeType 1 ) { var jsTags jQuery.grep( script.getElementsByTagName( script ), checkScriptType ); ret.splice.apply( ret, i + 1, 0.concat( jsTags ) ); } fragment.appendChild( script ); } } } return ret; }, cleanData: function( elems ) { var data, id, cache jQuery.cache, special jQuery.event.special, deleteExpando jQuery.support.deleteExpando; for ( var i 0, elem; (elem elemsi) ! null; i++ ) { if ( elem.nodeName && jQuery.noDataelem.nodeName.toLowerCase() ) { continue; } id elem jQuery.expando ; if ( id ) { data cache id ; if ( data && data.events ) { for ( var type in data.events ) { if ( special type ) { jQuery.event.remove( elem, type ); // This is a shortcut to avoid jQuery.event.removes overhead } else { jQuery.removeEvent( elem, type, data.handle ); } } // Null the DOM reference to avoid IE6/7/8 leak (#7054) if ( data.handle ) { data.handle.elem null; } } if ( deleteExpando ) { delete elem jQuery.expando ; } else if ( elem.removeAttribute ) { elem.removeAttribute( jQuery.expando ); } delete cache id ; } } } }); var ralpha /alpha\(^)*\)/i, ropacity /opacity(^)*)/, // fixed for IE9, see #8346 rupper /(A-Z|^ms)/g, rnum /^\-+?(?:\d*\.)?\d+$/i, rnumnonpx /^-?(?:\d*\.)?\d+(?!px)^\d\s+$/i, rrelNum /^(\-+)(\-+.\de+)/, rmargin /^margin/, cssShow { position: absolute, visibility: hidden, display: block }, // order is important! cssExpand Top, Right, Bottom, Left , curCSS, getComputedStyle, currentStyle; jQuery.fn.css function( name, value ) { return jQuery.access( this, function( elem, name, value ) { return value ! undefined ? jQuery.style( elem, name, value ) : jQuery.css( elem, name ); }, name, value, arguments.length > 1 ); }; jQuery.extend({ // Add in style property hooks for overriding the default // behavior of getting and setting a style property cssHooks: { opacity: { get: function( elem, computed ) { if ( computed ) { // We should always get a number back from opacity var ret curCSS( elem, opacity ); return ret ? 1 : ret; } else { return elem.style.opacity; } } } }, // Exclude the following css properties to add px cssNumber: { fillOpacity: true, fontWeight: true, lineHeight: true, opacity: true, orphans: true, widows: true, zIndex: true, zoom: true }, // Add in properties whose names you wish to fix before // setting or getting the value cssProps: { // normalize float css property float: jQuery.support.cssFloat ? cssFloat : styleFloat }, // Get and set the style property on a DOM Node style: function( elem, name, value, extra ) { // Dont set styles on text and comment nodes if ( !elem || elem.nodeType 3 || elem.nodeType 8 || !elem.style ) { return; } // Make sure that were working with the right name var ret, type, origName jQuery.camelCase( name ), style elem.style, hooks jQuery.cssHooks origName ; name jQuery.cssProps origName || origName; // Check if were setting a value if ( value ! undefined ) { type typeof value; // convert relative number strings (+ or -) to relative numbers. #7345 if ( type string && (ret rrelNum.exec( value )) ) { value ( +( ret1 + 1) * +ret2 ) + parseFloat( jQuery.css( elem, name ) ); // Fixes bug #9237 type number; } // Make sure that NaN and null values arent set. See: #7116 if ( value null || type number && isNaN( value ) ) { return; } // If a number was passed in, add px to the (except for certain CSS properties) if ( type number && !jQuery.cssNumber origName ) { value + px; } // If a hook was provided, use that value, otherwise just set the specified value if ( !hooks || !(set in hooks) || (value hooks.set( elem, value )) ! undefined ) { // Wrapped to prevent IE from throwing errors when invalid values are provided // Fixes bug #5509 try { style name value; } catch(e) {} } } else { // If a hook was provided get the non-computed value from there if ( hooks && get in hooks && (ret hooks.get( elem, false, extra )) ! undefined ) { return ret; } // Otherwise just get the value from the style object return style name ; } }, css: function( elem, name, extra ) { var ret, hooks; // Make sure that were working with the right name name jQuery.camelCase( name ); hooks jQuery.cssHooks name ; name jQuery.cssProps name || name; // cssFloat needs a special treatment if ( name cssFloat ) { name float; } // If a hook was provided get the computed value from there if ( hooks && get in hooks && (ret hooks.get( elem, true, extra )) ! undefined ) { return ret; // Otherwise, if a way to get the computed value exists, use that } else if ( curCSS ) { return curCSS( elem, name ); } }, // A method for quickly swapping in/out CSS properties to get correct calculations swap: function( elem, options, callback ) { var old {}, ret, name; // Remember the old values, and insert the new ones for ( name in options ) { old name elem.style name ; elem.style name options name ; } ret callback.call( elem ); // Revert the old values for ( name in options ) { elem.style name old name ; } return ret; } }); // DEPRECATED in 1.3, Use jQuery.css() instead jQuery.curCSS jQuery.css; if ( document.defaultView && document.defaultView.getComputedStyle ) { getComputedStyle function( elem, name ) { var ret, defaultView, computedStyle, width, style elem.style; name name.replace( rupper, -$1 ).toLowerCase(); if ( (defaultView elem.ownerDocument.defaultView) && (computedStyle defaultView.getComputedStyle( elem, null )) ) { ret computedStyle.getPropertyValue( name ); if ( ret && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) { ret jQuery.style( elem, name ); } } // A tribute to the awesome hack by Dean Edwards // WebKit uses computed value (percentage if specified) instead of used value for margins // which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) { width style.width; style.width ret; ret computedStyle.width; style.width width; } return ret; }; } if ( document.documentElement.currentStyle ) { currentStyle function( elem, name ) { var left, rsLeft, uncomputed, ret elem.currentStyle && elem.currentStyle name , style elem.style; // Avoid setting ret to empty string here // so we dont default to auto if ( ret null && style && (uncomputed style name ) ) { ret uncomputed; } // From the awesome hack by Dean Edwards // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 // If were not dealing with a regular pixel number // but a number that has a weird ending, we need to convert it to pixels if ( rnumnonpx.test( ret ) ) { // Remember the original values left style.left; rsLeft elem.runtimeStyle && elem.runtimeStyle.left; // Put in the new values to get a computed value out if ( rsLeft ) { elem.runtimeStyle.left elem.currentStyle.left; } style.left name fontSize ? 1em : ret; ret style.pixelLeft + px; // Revert the changed values style.left left; if ( rsLeft ) { elem.runtimeStyle.left rsLeft; } } return ret ? auto : ret; }; } curCSS getComputedStyle || currentStyle; function getWidthOrHeight( elem, name, extra ) { // Start with offset property var val name width ? elem.offsetWidth : elem.offsetHeight, i name width ? 1 : 0, len 4; if ( val > 0 ) { if ( extra ! border ) { for ( ; i len; i + 2 ) { if ( !extra ) { val - parseFloat( jQuery.css( elem, padding + cssExpand i ) ) || 0; } if ( extra margin ) { val + parseFloat( jQuery.css( elem, extra + cssExpand i ) ) || 0; } else { val - parseFloat( jQuery.css( elem, border + cssExpand i + Width ) ) || 0; } } } return val + px; } // Fall back to computed then uncomputed css if necessary val curCSS( elem, name ); if ( val 0 || val null ) { val elem.style name ; } // Computed unit is not pixels. Stop here and return. if ( rnumnonpx.test(val) ) { return val; } // Normalize , auto, and prepare for extra val parseFloat( val ) || 0; // Add padding, border, margin if ( extra ) { for ( ; i len; i + 2 ) { val + parseFloat( jQuery.css( elem, padding + cssExpand i ) ) || 0; if ( extra ! padding ) { val + parseFloat( jQuery.css( elem, border + cssExpand i + Width ) ) || 0; } if ( extra margin ) { val + parseFloat( jQuery.css( elem, extra + cssExpand i ) ) || 0; } } } return val + px; } jQuery.each( height, width , function( i, name ) { jQuery.cssHooks name { get: function( elem, computed, extra ) { if ( computed ) { if ( elem.offsetWidth ! 0 ) { return getWidthOrHeight( elem, name, extra ); } else { return jQuery.swap( elem, cssShow, function() { return getWidthOrHeight( elem, name, extra ); }); } } }, set: function( elem, value ) { return rnum.test( value ) ? value + px : value; } }; }); if ( !jQuery.support.opacity ) { jQuery.cssHooks.opacity { get: function( elem, computed ) { // IE uses filters for opacity return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || ) ? ( parseFloat( RegExp.$1 ) / 100 ) + : computed ? 1 : ; }, set: function( elem, value ) { var style elem.style, currentStyle elem.currentStyle, opacity jQuery.isNumeric( value ) ? alpha(opacity + value * 100 + ) : , filter currentStyle && currentStyle.filter || style.filter || ; // IE has trouble with opacity if it does not have layout // Force it by setting the zoom level style.zoom 1; // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 if ( value > 1 && jQuery.trim( filter.replace( ralpha, ) ) ) { // Setting style.filter to null, & still leave filter: in the cssText // if filter: is present at all, clearType is disabled, we want to avoid this // style.removeAttribute is IE Only, but so apparently is this code path... style.removeAttribute( filter ); // if there there is no filter style applied in a css rule, we are done if ( currentStyle && !currentStyle.filter ) { return; } } // otherwise, set new filter values style.filter ralpha.test( filter ) ? filter.replace( ralpha, opacity ) : filter + + opacity; } }; } jQuery(function() { // This hook cannot be added until DOM ready because the support test // for it is not run until after DOM ready if ( !jQuery.support.reliableMarginRight ) { jQuery.cssHooks.marginRight { get: function( elem, computed ) { // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right // Work around by temporarily setting element display to inline-block return jQuery.swap( elem, { display: inline-block }, function() { if ( computed ) { return curCSS( elem, margin-right ); } else { return elem.style.marginRight; } }); } }; } }); if ( jQuery.expr && jQuery.expr.filters ) { jQuery.expr.filters.hidden function( elem ) { var width elem.offsetWidth, height elem.offsetHeight; return ( width 0 && height 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, display )) none); }; jQuery.expr.filters.visible function( elem ) { return !jQuery.expr.filters.hidden( elem ); }; } // These hooks are used by animate to expand properties jQuery.each({ margin: , padding: , border: Width }, function( prefix, suffix ) { jQuery.cssHooks prefix + suffix { expand: function( value ) { var i, // assumes a single number if not a string parts typeof value string ? value.split( ) : value , expanded {}; for ( i 0; i 4; i++ ) { expanded prefix + cssExpand i + suffix parts i || parts i - 2 || parts 0 ; } return expanded; } }; }); var r20 /%20/g, rbracket /\\$/, rCRLF /\r?\n/g, rhash /#.*$/, rheaders /^(.*?): \t*(^\r\n*)\r?$/mg, // IE leaves an \r character at EOL rinput /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, // #7653, #8125, #8152: local protocol detection rlocalProtocol /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, rnoContent /^(?:GET|HEAD)$/, rprotocol /^\/\//, rquery /\?/, rscript /script\b^*(?:(?!\/script>)^*)*\/script>/gi, rselectTextarea /^(?:select|textarea)/i, rspacesAjax /\s+/, rts /(?&)_^&*/, rurl /^(\w\+\.\-+:)(?:\/\/(^\/?#:*)(?::(\d+))?)?/, // Keep a copy of the old load method _load jQuery.fn.load, /* Prefilters * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) * 2) These are called: * - BEFORE asking for a transport * - AFTER param serialization (s.data is a string if s.processData is true) * 3) key is the dataType * 4) the catchall symbol * can be used * 5) execution will start with transport dataType and THEN continue down to * if needed */ prefilters {}, /* Transports bindings * 1) key is the dataType * 2) the catchall symbol * can be used * 3) selection will start with transport dataType and THEN go to * if needed */ transports {}, // Document location ajaxLocation, // Document location segments ajaxLocParts, // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression allTypes */ + *; // #8138, IE may throw an exception when accessing // a field from window.location if document.domain has been set try { ajaxLocation location.href; } catch( e ) { // Use the href attribute of an A element // since IE will modify it given document.location ajaxLocation document.createElement( a ); ajaxLocation.href ; ajaxLocation ajaxLocation.href; } // Segment location into parts ajaxLocParts rurl.exec( ajaxLocation.toLowerCase() ) || ; // Base constructor for jQuery.ajaxPrefilter and jQuery.ajaxTransport function addToPrefiltersOrTransports( structure ) { // dataTypeExpression is optional and defaults to * return function( dataTypeExpression, func ) { if ( typeof dataTypeExpression ! string ) { func dataTypeExpression; dataTypeExpression *; } if ( jQuery.isFunction( func ) ) { var dataTypes dataTypeExpression.toLowerCase().split( rspacesAjax ), i 0, length dataTypes.length, dataType, list, placeBefore; // For each dataType in the dataTypeExpression for ( ; i length; i++ ) { dataType dataTypes i ; // We control if were asked to add before // any existing element placeBefore /^\+/.test( dataType ); if ( placeBefore ) { dataType dataType.substr( 1 ) || *; } list structure dataType structure dataType || ; // then we add to the structure accordingly list placeBefore ? unshift : push ( func ); } } }; } // Base inspection function for prefilters and transports function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, dataType /* internal */, inspected /* internal */ ) { dataType dataType || options.dataTypes 0 ; inspected inspected || {}; inspected dataType true; var list structure dataType , i 0, length list ? list.length : 0, executeOnly ( structure prefilters ), selection; for ( ; i length && ( executeOnly || !selection ); i++ ) { selection list i ( options, originalOptions, jqXHR ); // If we got redirected to another dataType // we try there if executing only and not done already if ( typeof selection string ) { if ( !executeOnly || inspected selection ) { selection undefined; } else { options.dataTypes.unshift( selection ); selection inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, selection, inspected ); } } } // If were only executing or nothing was selected // we try the catchall dataType if not done already if ( ( executeOnly || !selection ) && !inspected * ) { selection inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, *, inspected ); } // unnecessary when only executing (prefilters) // but itll be ignored by the caller in that case return selection; } // A special extend for ajax options // that takes flat options (not to be deep extended) // Fixes #9887 function ajaxExtend( target, src ) { var key, deep, flatOptions jQuery.ajaxSettings.flatOptions || {}; for ( key in src ) { if ( src key ! undefined ) { ( flatOptions key ? target : ( deep || ( deep {} ) ) ) key src key ; } } if ( deep ) { jQuery.extend( true, target, deep ); } } jQuery.fn.extend({ load: function( url, params, callback ) { if ( typeof url ! string && _load ) { return _load.apply( this, arguments ); // Dont do a request if no elements are being requested } else if ( !this.length ) { return this; } var off url.indexOf( ); if ( off > 0 ) { var selector url.slice( off, url.length ); url url.slice( 0, off ); } // Default to a GET request var type GET; // If the second parameter was provided if ( params ) { // If its a function if ( jQuery.isFunction( params ) ) { // We assume that its the callback callback params; params undefined; // Otherwise, build a param string } else if ( typeof params object ) { params jQuery.param( params, jQuery.ajaxSettings.traditional ); type POST; } } var self this; // Request the remote document jQuery.ajax({ url: url, type: type, dataType: html, data: params, // Complete callback (responseText is used internally) complete: function( jqXHR, status, responseText ) { // Store the response as specified by the jqXHR object responseText jqXHR.responseText; // If successful, inject the HTML into all the matched elements if ( jqXHR.isResolved() ) { // #4825: Get the actual response in case // a dataFilter is present in ajaxSettings jqXHR.done(function( r ) { responseText r; }); // See if a selector was specified self.html( selector ? // Create a dummy div to hold the results jQuery(div>) // inject the contents of the document in, removing the scripts // to avoid any Permission Denied errors in IE .append(responseText.replace(rscript, )) // Locate the specified elements .find(selector) : // If not, just inject the full result responseText ); } if ( callback ) { self.each( callback, responseText, status, jqXHR ); } } }); return this; }, serialize: function() { return jQuery.param( this.serializeArray() ); }, serializeArray: function() { return this.map(function(){ return this.elements ? jQuery.makeArray( this.elements ) : this; }) .filter(function(){ return this.name && !this.disabled && ( this.checked || rselectTextarea.test( this.nodeName ) || rinput.test( this.type ) ); }) .map(function( i, elem ){ var val jQuery( this ).val(); return val null ? null : jQuery.isArray( val ) ? jQuery.map( val, function( val, i ){ return { name: elem.name, value: val.replace( rCRLF, \r\n ) }; }) : { name: elem.name, value: val.replace( rCRLF, \r\n ) }; }).get(); } }); // Attach a bunch of functions for handling common AJAX events jQuery.each( ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend.split( ), function( i, o ){ jQuery.fn o function( f ){ return this.on( o, f ); }; }); jQuery.each( get, post , function( i, method ) { jQuery method function( url, data, callback, type ) { // shift arguments if data argument was omitted if ( jQuery.isFunction( data ) ) { type type || callback; callback data; data undefined; } return jQuery.ajax({ type: method, url: url, data: data, success: callback, dataType: type }); }; }); jQuery.extend({ getScript: function( url, callback ) { return jQuery.get( url, undefined, callback, script ); }, getJSON: function( url, data, callback ) { return jQuery.get( url, data, callback, json ); }, // Creates a full fledged settings object into target // with both ajaxSettings and settings fields. // If target is omitted, writes into ajaxSettings. ajaxSetup: function( target, settings ) { if ( settings ) { // Building a settings object ajaxExtend( target, jQuery.ajaxSettings ); } else { // Extending ajaxSettings settings target; target jQuery.ajaxSettings; } ajaxExtend( target, settings ); return target; }, ajaxSettings: { url: ajaxLocation, isLocal: rlocalProtocol.test( ajaxLocParts 1 ), global: true, type: GET, contentType: application/x-www-form-urlencoded; charsetUTF-8, processData: true, async: true, /* timeout: 0, data: null, dataType: null, username: null, password: null, cache: null, traditional: false, headers: {}, */ accepts: { xml: application/xml, text/xml, html: text/html, text: text/plain, json: application/json, text/javascript, *: allTypes }, contents: { xml: /xml/, html: /html/, json: /json/ }, responseFields: { xml: responseXML, text: responseText }, // List of data converters // 1) key format is source_type destination_type (a single space in-between) // 2) the catchall symbol * can be used for source_type converters: { // Convert anything to text * text: window.String, // Text to html (true no transformation) text html: true, // Evaluate text as a json expression text json: jQuery.parseJSON, // Parse text as xml text xml: jQuery.parseXML }, // For options that shouldnt be deep extended: // you can add your own custom options here if // and when you create one that shouldnt be // deep extended (see ajaxExtend) flatOptions: { context: true, url: true } }, ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), ajaxTransport: addToPrefiltersOrTransports( transports ), // Main method ajax: function( url, options ) { // If url is an object, simulate pre-1.5 signature if ( typeof url object ) { options url; url undefined; } // Force options to be an object options options || {}; var // Create the final options object s jQuery.ajaxSetup( {}, options ), // Callbacks context callbackContext s.context || s, // Context for global events // Its the callbackContext if one was provided in the options // and if its a DOM node or a jQuery collection globalEventContext callbackContext ! s && ( callbackContext.nodeType || callbackContext instanceof jQuery ) ? jQuery( callbackContext ) : jQuery.event, // Deferreds deferred jQuery.Deferred(), completeDeferred jQuery.Callbacks( once memory ), // Status-dependent callbacks statusCode s.statusCode || {}, // ifModified key ifModifiedKey, // Headers (they are sent all at once) requestHeaders {}, requestHeadersNames {}, // Response headers responseHeadersString, responseHeaders, // transport transport, // timeout handle timeoutTimer, // Cross-domain detection vars parts, // The jqXHR state state 0, // To know if global events are to be dispatched fireGlobals, // Loop variable i, // Fake xhr jqXHR { readyState: 0, // Caches the header setRequestHeader: function( name, value ) { if ( !state ) { var lname name.toLowerCase(); name requestHeadersNames lname requestHeadersNames lname || name; requestHeaders name value; } return this; }, // Raw string getAllResponseHeaders: function() { return state 2 ? responseHeadersString : null; }, // Builds headers hashtable if needed getResponseHeader: function( key ) { var match; if ( state 2 ) { if ( !responseHeaders ) { responseHeaders {}; while( ( match rheaders.exec( responseHeadersString ) ) ) { responseHeaders match1.toLowerCase() match 2 ; } } match responseHeaders key.toLowerCase() ; } return match undefined ? null : match; }, // Overrides response content-type header overrideMimeType: function( type ) { if ( !state ) { s.mimeType type; } return this; }, // Cancel the request abort: function( statusText ) { statusText statusText || abort; if ( transport ) { transport.abort( statusText ); } done( 0, statusText ); return this; } }; // Callback for when everything is done // It is defined here because jslint complains if it is declared // at the end of the function (which would be more logical and readable) function done( status, nativeStatusText, responses, headers ) { // Called once if ( state 2 ) { return; } // State is done now state 2; // Clear timeout if it exists if ( timeoutTimer ) { clearTimeout( timeoutTimer ); } // Dereference transport for early garbage collection // (no matter how long the jqXHR object will be used) transport undefined; // Cache response headers responseHeadersString headers || ; // Set readyState jqXHR.readyState status > 0 ? 4 : 0; var isSuccess, success, error, statusText nativeStatusText, response responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined, lastModified, etag; // If successful, handle type chaining if ( status > 200 && status 300 || status 304 ) { // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. if ( s.ifModified ) { if ( ( lastModified jqXHR.getResponseHeader( Last-Modified ) ) ) { jQuery.lastModified ifModifiedKey lastModified; } if ( ( etag jqXHR.getResponseHeader( Etag ) ) ) { jQuery.etag ifModifiedKey etag; } } // If not modified if ( status 304 ) { statusText notmodified; isSuccess true; // If we have data } else { try { success ajaxConvert( s, response ); statusText success; isSuccess true; } catch(e) { // We have a parsererror statusText parsererror; error e; } } } else { // We extract error from statusText // then normalize statusText and status for non-aborts error statusText; if ( !statusText || status ) { statusText error; if ( status 0 ) { status 0; } } } // Set data for the fake xhr object jqXHR.status status; jqXHR.statusText + ( nativeStatusText || statusText ); // Success/Error if ( isSuccess ) { deferred.resolveWith( callbackContext, success, statusText, jqXHR ); } else { deferred.rejectWith( callbackContext, jqXHR, statusText, error ); } // Status-dependent callbacks jqXHR.statusCode( statusCode ); statusCode undefined; if ( fireGlobals ) { globalEventContext.trigger( ajax + ( isSuccess ? Success : Error ), jqXHR, s, isSuccess ? success : error ); } // Complete completeDeferred.fireWith( callbackContext, jqXHR, statusText ); if ( fireGlobals ) { globalEventContext.trigger( ajaxComplete, jqXHR, s ); // Handle the global AJAX counter if ( !( --jQuery.active ) ) { jQuery.event.trigger( ajaxStop ); } } } // Attach deferreds deferred.promise( jqXHR ); jqXHR.success jqXHR.done; jqXHR.error jqXHR.fail; jqXHR.complete completeDeferred.add; // Status-dependent callbacks jqXHR.statusCode function( map ) { if ( map ) { var tmp; if ( state 2 ) { for ( tmp in map ) { statusCode tmp statusCodetmp, maptmp ; } } else { tmp map jqXHR.status ; jqXHR.then( tmp, tmp ); } } return this; }; // Remove hash character (#7531: and string promotion) // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) // We also use the url parameter if available s.url ( ( url || s.url ) + ).replace( rhash, ).replace( rprotocol, ajaxLocParts 1 + // ); // Extract dataTypes list s.dataTypes jQuery.trim( s.dataType || * ).toLowerCase().split( rspacesAjax ); // Determine if a cross-domain request is in order if ( s.crossDomain null ) { parts rurl.exec( s.url.toLowerCase() ); s.crossDomain !!( parts && ( parts 1 ! ajaxLocParts 1 || parts 2 ! ajaxLocParts 2 || ( parts 3 || ( parts 1 http: ? 80 : 443 ) ) ! ( ajaxLocParts 3 || ( ajaxLocParts 1 http: ? 80 : 443 ) ) ) ); } // Convert data if not already a string if ( s.data && s.processData && typeof s.data ! string ) { s.data jQuery.param( s.data, s.traditional ); } // Apply prefilters inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); // If request was aborted inside a prefilter, stop there if ( state 2 ) { return false; } // We can fire global events as of now if asked to fireGlobals s.global; // Uppercase the type s.type s.type.toUpperCase(); // Determine if request has content s.hasContent !rnoContent.test( s.type ); // Watch for a new set of requests if ( fireGlobals && jQuery.active++ 0 ) { jQuery.event.trigger( ajaxStart ); } // More options handling for requests with no content if ( !s.hasContent ) { // If data is available, append data to url if ( s.data ) { s.url + ( rquery.test( s.url ) ? & : ? ) + s.data; // #9682: remove data so that its not used in an eventual retry delete s.data; } // Get ifModifiedKey before adding the anti-cache parameter ifModifiedKey s.url; // Add anti-cache in url if needed if ( s.cache false ) { var ts jQuery.now(), // try replacing _ if it is there ret s.url.replace( rts, $1_ + ts ); // if nothing was replaced, add timestamp to the end s.url ret + ( ( ret s.url ) ? ( rquery.test( s.url ) ? & : ? ) + _ + ts : ); } } // Set the correct header, if data is being sent if ( s.data && s.hasContent && s.contentType ! false || options.contentType ) { jqXHR.setRequestHeader( Content-Type, s.contentType ); } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. if ( s.ifModified ) { ifModifiedKey ifModifiedKey || s.url; if ( jQuery.lastModified ifModifiedKey ) { jqXHR.setRequestHeader( If-Modified-Since, jQuery.lastModified ifModifiedKey ); } if ( jQuery.etag ifModifiedKey ) { jqXHR.setRequestHeader( If-None-Match, jQuery.etag ifModifiedKey ); } } // Set the Accepts header for the server, depending on the dataType jqXHR.setRequestHeader( Accept, s.dataTypes 0 && s.accepts s.dataTypes0 ? s.accepts s.dataTypes0 + ( s.dataTypes 0 ! * ? , + allTypes + ; q0.01 : ) : s.accepts * ); // Check for headers option for ( i in s.headers ) { jqXHR.setRequestHeader( i, s.headers i ); } // Allow custom headers/mimetypes and early abort if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) false || state 2 ) ) { // Abort if not done already jqXHR.abort(); return false; } // Install callbacks on deferreds for ( i in { success: 1, error: 1, complete: 1 } ) { jqXHR i ( s i ); } // Get transport transport inspectPrefiltersOrTransports( transports, s, options, jqXHR ); // If no transport, we auto-abort if ( !transport ) { done( -1, No Transport ); } else { jqXHR.readyState 1; // Send global event if ( fireGlobals ) { globalEventContext.trigger( ajaxSend, jqXHR, s ); } // Timeout if ( s.async && s.timeout > 0 ) { timeoutTimer setTimeout( function(){ jqXHR.abort( timeout ); }, s.timeout ); } try { state 1; transport.send( requestHeaders, done ); } catch (e) { // Propagate exception as error if not done if ( state 2 ) { done( -1, e ); // Simply rethrow otherwise } else { throw e; } } } return jqXHR; }, // Serialize an array of form elements or a set of // key/values into a query string param: function( a, traditional ) { var s , add function( key, value ) { // If value is a function, invoke it and return its value value jQuery.isFunction( value ) ? value() : value; s s.length encodeURIComponent( key ) + + encodeURIComponent( value ); }; // Set traditional to true for jQuery 1.3.2 behavior. if ( traditional undefined ) { traditional jQuery.ajaxSettings.traditional; } // If an array was passed in, assume that it is an array of form elements. if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { // Serialize the form elements jQuery.each( a, function() { add( this.name, this.value ); }); } else { // If traditional, encode the old way (the way 1.3.2 or older // did it), otherwise encode params recursively. for ( var prefix in a ) { buildParams( prefix, a prefix , traditional, add ); } } // Return the resulting serialization return s.join( & ).replace( r20, + ); } }); function buildParams( prefix, obj, traditional, add ) { if ( jQuery.isArray( obj ) ) { // Serialize array item. jQuery.each( obj, function( i, v ) { if ( traditional || rbracket.test( prefix ) ) { // Treat each array item as a scalar. add( prefix, v ); } else { // If array item is non-scalar (array or object), encode its // numeric index to resolve deserialization ambiguity issues. // Note that rack (as of 1.0.0) cant currently deserialize // nested arrays properly, and attempting to do so may cause // a server error. Possible fixes are to modify racks // deserialization algorithm or to provide an option or flag // to force array serialization to be shallow. buildParams( prefix + + ( typeof v object ? i : ) + , v, traditional, add ); } }); } else if ( !traditional && jQuery.type( obj ) object ) { // Serialize object item. for ( var name in obj ) { buildParams( prefix + + name + , obj name , traditional, add ); } } else { // Serialize scalar item. add( prefix, obj ); } } // This is still on the jQuery object... for now // Want to move this to jQuery.ajax some day jQuery.extend({ // Counter for holding the number of active queries active: 0, // Last-Modified header cache for next request lastModified: {}, etag: {} }); /* Handles responses to an ajax request: * - sets all responseXXX fields accordingly * - finds the right dataType (mediates between content-type and expected dataType) * - returns the corresponding response */ function ajaxHandleResponses( s, jqXHR, responses ) { var contents s.contents, dataTypes s.dataTypes, responseFields s.responseFields, ct, type, finalDataType, firstDataType; // Fill responseXXX fields for ( type in responseFields ) { if ( type in responses ) { jqXHR responseFieldstype responses type ; } } // Remove auto dataType and get content-type in the process while( dataTypes 0 * ) { dataTypes.shift(); if ( ct undefined ) { ct s.mimeType || jqXHR.getResponseHeader( content-type ); } } // Check if were dealing with a known content-type if ( ct ) { for ( type in contents ) { if ( contents type && contents type .test( ct ) ) { dataTypes.unshift( type ); break; } } } // Check to see if we have a response for the expected dataType if ( dataTypes 0 in responses ) { finalDataType dataTypes 0 ; } else { // Try convertible dataTypes for ( type in responses ) { if ( !dataTypes 0 || s.converters type + + dataTypes0 ) { finalDataType type; break; } if ( !firstDataType ) { firstDataType type; } } // Or just use first one finalDataType finalDataType || firstDataType; } // If we found a dataType // We add the dataType to the list if needed // and return the corresponding response if ( finalDataType ) { if ( finalDataType ! dataTypes 0 ) { dataTypes.unshift( finalDataType ); } return responses finalDataType ; } } // Chain conversions given the request and the original response function ajaxConvert( s, response ) { // Apply the dataFilter if provided if ( s.dataFilter ) { response s.dataFilter( response, s.dataType ); } var dataTypes s.dataTypes, converters {}, i, key, length dataTypes.length, tmp, // Current and previous dataTypes current dataTypes 0 , prev, // Conversion expression conversion, // Conversion function conv, // Conversion functions (transitive conversion) conv1, conv2; // For each dataType in the chain for ( i 1; i length; i++ ) { // Create converters map // with lowercased keys if ( i 1 ) { for ( key in s.converters ) { if ( typeof key string ) { converters key.toLowerCase() s.converters key ; } } } // Get the dataTypes prev current; current dataTypes i ; // If current is auto dataType, update it to prev if ( current * ) { current prev; // If no auto and dataTypes are actually different } else if ( prev ! * && prev ! current ) { // Get the converter conversion prev + + current; conv converters conversion || converters * + current ; // If there is no direct converter, search transitively if ( !conv ) { conv2 undefined; for ( conv1 in converters ) { tmp conv1.split( ); if ( tmp 0 prev || tmp 0 * ) { conv2 converters tmp1 + + current ; if ( conv2 ) { conv1 converters conv1 ; if ( conv1 true ) { conv conv2; } else if ( conv2 true ) { conv conv1; } break; } } } } // If we found no converter, dispatch an error if ( !( conv || conv2 ) ) { jQuery.error( No conversion from + conversion.replace( , to ) ); } // If found converter is not an equivalence if ( conv ! true ) { // Convert with 1 or 2 converters accordingly response conv ? conv( response ) : conv2( conv1(response) ); } } } return response; } var jsc jQuery.now(), jsre /(\)\?(&|$)|\?\?/i; // Default jsonp settings jQuery.ajaxSetup({ jsonp: callback, jsonpCallback: function() { return jQuery.expando + _ + ( jsc++ ); } }); // Detect, normalize options and install callbacks for jsonp requests jQuery.ajaxPrefilter( json jsonp, function( s, originalSettings, jqXHR ) { var inspectData ( typeof s.data string ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType ); if ( s.dataTypes 0 jsonp || s.jsonp ! false && ( jsre.test( s.url ) || inspectData && jsre.test( s.data ) ) ) { var responseContainer, jsonpCallback s.jsonpCallback jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback, previous window jsonpCallback , url s.url, data s.data, replace $1 + jsonpCallback + $2; if ( s.jsonp ! false ) { url url.replace( jsre, replace ); if ( s.url url ) { if ( inspectData ) { data data.replace( jsre, replace ); } if ( s.data data ) { // Add callback manually url + (/\?/.test( url ) ? & : ?) + s.jsonp + + jsonpCallback; } } } s.url url; s.data data; // Install callback window jsonpCallback function( response ) { responseContainer response ; }; // Clean-up function jqXHR.always(function() { // Set callback back to previous value window jsonpCallback previous; // Call if it was a function and we have a response if ( responseContainer && jQuery.isFunction( previous ) ) { window jsonpCallback ( responseContainer 0 ); } }); // Use data converter to retrieve json after script execution s.convertersscript json function() { if ( !responseContainer ) { jQuery.error( jsonpCallback + was not called ); } return responseContainer 0 ; }; // force json dataType s.dataTypes 0 json; // Delegate to script return script; } }); // Install script dataType jQuery.ajaxSetup({ accepts: { script: text/javascript, application/javascript, application/ecmascript, application/x-ecmascript }, contents: { script: /javascript|ecmascript/ }, converters: { text script: function( text ) { jQuery.globalEval( text ); return text; } } }); // Handle caches special case and global jQuery.ajaxPrefilter( script, function( s ) { if ( s.cache undefined ) { s.cache false; } if ( s.crossDomain ) { s.type GET; s.global false; } }); // Bind script tag hack transport jQuery.ajaxTransport( script, function(s) { // This transport only deals with cross domain requests if ( s.crossDomain ) { var script, head document.head || document.getElementsByTagName( head )0 || document.documentElement; return { send: function( _, callback ) { script document.createElement( script ); script.async async; if ( s.scriptCharset ) { script.charset s.scriptCharset; } script.src s.url; // Attach handlers for all browsers script.onload script.onreadystatechange function( _, isAbort ) { if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { // Handle memory leak in IE script.onload script.onreadystatechange null; // Remove the script if ( head && script.parentNode ) { head.removeChild( script ); } // Dereference the script script undefined; // Callback if not abort if ( !isAbort ) { callback( 200, success ); } } }; // Use insertBefore instead of appendChild to circumvent an IE6 bug. // This arises when a base node is used (#2709 and #4378). head.insertBefore( script, head.firstChild ); }, abort: function() { if ( script ) { script.onload( 0, 1 ); } } }; } }); var // #5280: Internet Explorer will keep connections alive if we dont abort on unload xhrOnUnloadAbort window.ActiveXObject ? function() { // Abort all pending requests for ( var key in xhrCallbacks ) { xhrCallbacks key ( 0, 1 ); } } : false, xhrId 0, xhrCallbacks; // Functions to create xhrs function createStandardXHR() { try { return new window.XMLHttpRequest(); } catch( e ) {} } function createActiveXHR() { try { return new window.ActiveXObject( Microsoft.XMLHTTP ); } catch( e ) {} } // Create the request object // (This is still attached to ajaxSettings for backward compatibility) jQuery.ajaxSettings.xhr window.ActiveXObject ? /* Microsoft failed to properly * implement the XMLHttpRequest in IE7 (cant request local files), * so we use the ActiveXObject when it is available * Additionally XMLHttpRequest can be disabled in IE7/IE8 so * we need a fallback. */ function() { return !this.isLocal && createStandardXHR() || createActiveXHR(); } : // For all other browsers, use the standard XMLHttpRequest object createStandardXHR; // Determine support properties (function( xhr ) { jQuery.extend( jQuery.support, { ajax: !!xhr, cors: !!xhr && ( withCredentials in xhr ) }); })( jQuery.ajaxSettings.xhr() ); // Create transport if the browser can provide an xhr if ( jQuery.support.ajax ) { jQuery.ajaxTransport(function( s ) { // Cross domain only allowed if supported through XMLHttpRequest if ( !s.crossDomain || jQuery.support.cors ) { var callback; return { send: function( headers, complete ) { // Get a new xhr var xhr s.xhr(), handle, i; // Open the socket // Passing null username, generates a login popup on Opera (#2865) if ( s.username ) { xhr.open( s.type, s.url, s.async, s.username, s.password ); } else { xhr.open( s.type, s.url, s.async ); } // Apply custom fields if provided if ( s.xhrFields ) { for ( i in s.xhrFields ) { xhr i s.xhrFields i ; } } // Override mime type if needed if ( s.mimeType && xhr.overrideMimeType ) { xhr.overrideMimeType( s.mimeType ); } // X-Requested-With header // For cross-domain requests, seeing as conditions for a preflight are // akin to a jigsaw puzzle, we simply never set it to be sure. // (it can always be set on a per-request basis or even using ajaxSetup) // For same-domain requests, wont change header if already provided. if ( !s.crossDomain && !headersX-Requested-With ) { headers X-Requested-With XMLHttpRequest; } // Need an extra try/catch for cross domain requests in Firefox 3 try { for ( i in headers ) { xhr.setRequestHeader( i, headers i ); } } catch( _ ) {} // Do send the request // This may raise an exception which is actually // handled in jQuery.ajax (so no try/catch here) xhr.send( ( s.hasContent && s.data ) || null ); // Listener callback function( _, isAbort ) { var status, statusText, responseHeaders, responses, xml; // Firefox throws exceptions when accessing properties // of an xhr when a network error occured // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) try { // Was never called and is aborted or complete if ( callback && ( isAbort || xhr.readyState 4 ) ) { // Only called once callback undefined; // Do not keep as active anymore if ( handle ) { xhr.onreadystatechange jQuery.noop; if ( xhrOnUnloadAbort ) { delete xhrCallbacks handle ; } } // If its an abort if ( isAbort ) { // Abort it manually if needed if ( xhr.readyState ! 4 ) { xhr.abort(); } } else { status xhr.status; responseHeaders xhr.getAllResponseHeaders(); responses {}; xml xhr.responseXML; // Construct response list if ( xml && xml.documentElement /* #4958 */ ) { responses.xml xml; } // When requesting binary data, IE6-9 will throw an exception // on any attempt to access responseText (#11426) try { responses.text xhr.responseText; } catch( _ ) { } // Firefox throws an exception when accessing // statusText for faulty cross-domain requests try { statusText xhr.statusText; } catch( e ) { // We normalize with Webkit giving an empty statusText statusText ; } // Filter status for non standard behaviors // If the request is local and we have data: assume a success // (success with no data wont get notified, thats the best we // can do given current implementations) if ( !status && s.isLocal && !s.crossDomain ) { status responses.text ? 200 : 404; // IE - #1450: sometimes returns 1223 when it should be 204 } else if ( status 1223 ) { status 204; } } } } catch( firefoxAccessException ) { if ( !isAbort ) { complete( -1, firefoxAccessException ); } } // Call complete if needed if ( responses ) { complete( status, statusText, responses, responseHeaders ); } }; // if were in sync mode or its in cache // and has been retrieved directly (IE6 & IE7) // we need to manually fire the callback if ( !s.async || xhr.readyState 4 ) { callback(); } else { handle ++xhrId; if ( xhrOnUnloadAbort ) { // Create the active xhrs callbacks list if needed // and attach the unload handler if ( !xhrCallbacks ) { xhrCallbacks {}; jQuery( window ).unload( xhrOnUnloadAbort ); } // Add to list of active xhrs callbacks xhrCallbacks handle callback; } xhr.onreadystatechange callback; } }, abort: function() { if ( callback ) { callback(0,1); } } }; } }); } var elemdisplay {}, iframe, iframeDoc, rfxtypes /^(?:toggle|show|hide)$/, rfxnum /^(+\-)?(\d+.\-+)(a-z%*)$/i, timerId, fxAttrs // height animations height, marginTop, marginBottom, paddingTop, paddingBottom , // width animations width, marginLeft, marginRight, paddingLeft, paddingRight , // opacity animations opacity , fxNow; jQuery.fn.extend({ show: function( speed, easing, callback ) { var elem, display; if ( speed || speed 0 ) { return this.animate( genFx(show, 3), speed, easing, callback ); } else { for ( var i 0, j this.length; i j; i++ ) { elem this i ; if ( elem.style ) { display elem.style.display; // Reset the inline display of this element to learn if it is // being hidden by cascaded rules or not if ( !jQuery._data(elem, olddisplay) && display none ) { display elem.style.display ; } // Set elements which have been overridden with display: none // in a stylesheet to whatever the default browser style is // for such an element if ( (display && jQuery.css(elem, display) none) || !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) { jQuery._data( elem, olddisplay, defaultDisplay(elem.nodeName) ); } } } // Set the display of most of the elements in a second loop // to avoid the constant reflow for ( i 0; i j; i++ ) { elem this i ; if ( elem.style ) { display elem.style.display; if ( display || display none ) { elem.style.display jQuery._data( elem, olddisplay ) || ; } } } return this; } }, hide: function( speed, easing, callback ) { if ( speed || speed 0 ) { return this.animate( genFx(hide, 3), speed, easing, callback); } else { var elem, display, i 0, j this.length; for ( ; i j; i++ ) { elem thisi; if ( elem.style ) { display jQuery.css( elem, display ); if ( display ! none && !jQuery._data( elem, olddisplay ) ) { jQuery._data( elem, olddisplay, display ); } } } // Set the display of the elements in a second loop // to avoid the constant reflow for ( i 0; i j; i++ ) { if ( thisi.style ) { thisi.style.display none; } } return this; } }, // Save the old toggle function _toggle: jQuery.fn.toggle, toggle: function( fn, fn2, callback ) { var bool typeof fn boolean; if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) { this._toggle.apply( this, arguments ); } else if ( fn null || bool ) { this.each(function() { var state bool ? fn : jQuery(this).is(:hidden); jQuery(this) state ? show : hide (); }); } else { this.animate(genFx(toggle, 3), fn, fn2, callback); } return this; }, fadeTo: function( speed, to, easing, callback ) { return this.filter(:hidden).css(opacity, 0).show().end() .animate({opacity: to}, speed, easing, callback); }, animate: function( prop, speed, easing, callback ) { var optall jQuery.speed( speed, easing, callback ); if ( jQuery.isEmptyObject( prop ) ) { return this.each( optall.complete, false ); } // Do not change referenced properties as per-property easing will be lost prop jQuery.extend( {}, prop ); function doAnimation() { // XXX this does not always have a nodeName when running the // test suite if ( optall.queue false ) { jQuery._mark( this ); } var opt jQuery.extend( {}, optall ), isElement this.nodeType 1, hidden isElement && jQuery(this).is(:hidden), name, val, p, e, hooks, replace, parts, start, end, unit, method; // will store per property easing and be used to determine when an animation is complete opt.animatedProperties {}; // first pass over propertys to expand / normalize for ( p in prop ) { name jQuery.camelCase( p ); if ( p ! name ) { prop name prop p ; delete prop p ; } if ( ( hooks jQuery.cssHooks name ) && expand in hooks ) { replace hooks.expand( prop name ); delete prop name ; // not quite $.extend, this wont overwrite keys already present. // also - reusing p from above because we have the correct name for ( p in replace ) { if ( ! ( p in prop ) ) { prop p replace p ; } } } } for ( name in prop ) { val prop name ; // easing resolution: per property > opt.specialEasing > opt.easing > swing (default) if ( jQuery.isArray( val ) ) { opt.animatedProperties name val 1 ; val prop name val 0 ; } else { opt.animatedProperties name opt.specialEasing && opt.specialEasing name || opt.easing || swing; } if ( val hide && hidden || val show && !hidden ) { return opt.complete.call( this ); } if ( isElement && ( name height || name width ) ) { // Make sure that nothing sneaks out // Record all 3 overflow attributes because IE does not // change the overflow attribute when overflowX and // overflowY are set to the same value opt.overflow this.style.overflow, this.style.overflowX, this.style.overflowY ; // Set display property to inline-block for height/width // animations on inline elements that are having width/height animated if ( jQuery.css( this, display ) inline && jQuery.css( this, float ) none ) { // inline-level elements accept inline-block; // block-level elements need to be inline with layout if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) inline ) { this.style.display inline-block; } else { this.style.zoom 1; } } } } if ( opt.overflow ! null ) { this.style.overflow hidden; } for ( p in prop ) { e new jQuery.fx( this, opt, p ); val prop p ; if ( rfxtypes.test( val ) ) { // Tracks whether to show or hide based on private // data attached to the element method jQuery._data( this, toggle + p ) || ( val toggle ? hidden ? show : hide : 0 ); if ( method ) { jQuery._data( this, toggle + p, method show ? hide : show ); e method (); } else { e val (); } } else { parts rfxnum.exec( val ); start e.cur(); if ( parts ) { end parseFloat( parts2 ); unit parts3 || ( jQuery.cssNumber p ? : px ); // We need to compute starting value if ( unit ! px ) { jQuery.style( this, p, (end || 1) + unit); start ( (end || 1) / e.cur() ) * start; jQuery.style( this, p, start + unit); } // If a +/- token was provided, were doing a relative animation if ( parts1 ) { end ( (parts 1 - ? -1 : 1) * end ) + start; } e.custom( start, end, unit ); } else { e.custom( start, val, ); } } } // For JS strict compliance return true; } return optall.queue false ? this.each( doAnimation ) : this.queue( optall.queue, doAnimation ); }, stop: function( type, clearQueue, gotoEnd ) { if ( typeof type ! string ) { gotoEnd clearQueue; clearQueue type; type undefined; } if ( clearQueue && type ! false ) { this.queue( type || fx, ); } return this.each(function() { var index, hadTimers false, timers jQuery.timers, data jQuery._data( this ); // clear marker counters if we know they wont be if ( !gotoEnd ) { jQuery._unmark( true, this ); } function stopQueue( elem, data, index ) { var hooks data index ; jQuery.removeData( elem, index, true ); hooks.stop( gotoEnd ); } if ( type null ) { for ( index in data ) { if ( data index && data index .stop && index.indexOf(.run) index.length - 4 ) { stopQueue( this, data, index ); } } } else if ( data index type + .run && data index .stop ){ stopQueue( this, data, index ); } for ( index timers.length; index--; ) { if ( timers index .elem this && (type null || timers index .queue type) ) { if ( gotoEnd ) { // force the next step to be the last timers index ( true ); } else { timers index .saveState(); } hadTimers true; timers.splice( index, 1 ); } } // start the next in the queue if the last step wasnt forced // timers currently will call their complete callbacks, which will dequeue // but only if they were gotoEnd if ( !( gotoEnd && hadTimers ) ) { jQuery.dequeue( this, type ); } }); } }); // Animations created synchronously will run synchronously function createFxNow() { setTimeout( clearFxNow, 0 ); return ( fxNow jQuery.now() ); } function clearFxNow() { fxNow undefined; } // Generate parameters to create a standard animation function genFx( type, num ) { var obj {}; jQuery.each( fxAttrs.concat.apply(, fxAttrs.slice( 0, num )), function() { obj this type; }); return obj; } // Generate shortcuts for custom animations jQuery.each({ slideDown: genFx( show, 1 ), slideUp: genFx( hide, 1 ), slideToggle: genFx( toggle, 1 ), fadeIn: { opacity: show }, fadeOut: { opacity: hide }, fadeToggle: { opacity: toggle } }, function( name, props ) { jQuery.fn name function( speed, easing, callback ) { return this.animate( props, speed, easing, callback ); }; }); jQuery.extend({ speed: function( speed, easing, fn ) { var opt speed && typeof speed object ? jQuery.extend( {}, speed ) : { complete: fn || !fn && easing || jQuery.isFunction( speed ) && speed, duration: speed, easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing }; opt.duration jQuery.fx.off ? 0 : typeof opt.duration number ? opt.duration : opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds opt.duration : jQuery.fx.speeds._default; // normalize opt.queue - true/undefined/null -> fx if ( opt.queue null || opt.queue true ) { opt.queue fx; } // Queueing opt.old opt.complete; opt.complete function( noUnmark ) { if ( jQuery.isFunction( opt.old ) ) { opt.old.call( this ); } if ( opt.queue ) { jQuery.dequeue( this, opt.queue ); } else if ( noUnmark ! false ) { jQuery._unmark( this ); } }; return opt; }, easing: { linear: function( p ) { return p; }, swing: function( p ) { return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5; } }, timers: , fx: function( elem, options, prop ) { this.options options; this.elem elem; this.prop prop; options.orig options.orig || {}; } }); jQuery.fx.prototype { // Simple function for setting a style value update: function() { if ( this.options.step ) { this.options.step.call( this.elem, this.now, this ); } ( jQuery.fx.step this.prop || jQuery.fx.step._default )( this ); }, // Get the current size cur: function() { if ( this.elem this.prop ! null && (!this.elem.style || this.elem.style this.prop null) ) { return this.elem this.prop ; } var parsed, r jQuery.css( this.elem, this.prop ); // Empty strings, null, undefined and auto are converted to 0, // complex values such as rotate(1rad) are returned as is, // simple values such as 10px are parsed to Float. return isNaN( parsed parseFloat( r ) ) ? !r || r auto ? 0 : r : parsed; }, // Start an animation from one number to another custom: function( from, to, unit ) { var self this, fx jQuery.fx; this.startTime fxNow || createFxNow(); this.end to; this.now this.start from; this.pos this.state 0; this.unit unit || this.unit || ( jQuery.cssNumber this.prop ? : px ); function t( gotoEnd ) { return self.step( gotoEnd ); } t.queue this.options.queue; t.elem this.elem; t.saveState function() { if ( jQuery._data( self.elem, fxshow + self.prop ) undefined ) { if ( self.options.hide ) { jQuery._data( self.elem, fxshow + self.prop, self.start ); } else if ( self.options.show ) { jQuery._data( self.elem, fxshow + self.prop, self.end ); } } }; if ( t() && jQuery.timers.push(t) && !timerId ) { timerId setInterval( fx.tick, fx.interval ); } }, // Simple show function show: function() { var dataShow jQuery._data( this.elem, fxshow + this.prop ); // Remember where we started, so that we can go back to it later this.options.orig this.prop dataShow || jQuery.style( this.elem, this.prop ); this.options.show true; // Begin the animation // Make sure that we start at a small width/height to avoid any flash of content if ( dataShow ! undefined ) { // This show is picking up where a previous hide or show left off this.custom( this.cur(), dataShow ); } else { this.custom( this.prop width || this.prop height ? 1 : 0, this.cur() ); } // Start by showing the element jQuery( this.elem ).show(); }, // Simple hide function hide: function() { // Remember where we started, so that we can go back to it later this.options.orig this.prop jQuery._data( this.elem, fxshow + this.prop ) || jQuery.style( this.elem, this.prop ); this.options.hide true; // Begin the animation this.custom( this.cur(), 0 ); }, // Each step of an animation step: function( gotoEnd ) { var p, n, complete, t fxNow || createFxNow(), done true, elem this.elem, options this.options; if ( gotoEnd || t > options.duration + this.startTime ) { this.now this.end; this.pos this.state 1; this.update(); options.animatedProperties this.prop true; for ( p in options.animatedProperties ) { if ( options.animatedProperties p ! true ) { done false; } } if ( done ) { // Reset the overflow if ( options.overflow ! null && !jQuery.support.shrinkWrapBlocks ) { jQuery.each( , X, Y , function( index, value ) { elem.style overflow + value options.overflow index ; }); } // Hide the element if the hide operation was done if ( options.hide ) { jQuery( elem ).hide(); } // Reset the properties, if the item has been hidden or shown if ( options.hide || options.show ) { for ( p in options.animatedProperties ) { jQuery.style( elem, p, options.orig p ); jQuery.removeData( elem, fxshow + p, true ); // Toggle data is no longer needed jQuery.removeData( elem, toggle + p, true ); } } // Execute the complete function // in the event that the complete function throws an exception // we must ensure it wont be called twice. #5684 complete options.complete; if ( complete ) { options.complete false; complete.call( elem ); } } return false; } else { // classical easing cannot be used with an Infinity duration if ( options.duration Infinity ) { this.now t; } else { n t - this.startTime; this.state n / options.duration; // Perform the easing function, defaults to swing this.pos jQuery.easing options.animatedPropertiesthis.prop ( this.state, n, 0, 1, options.duration ); this.now this.start + ( (this.end - this.start) * this.pos ); } // Perform the next step of the animation this.update(); } return true; } }; jQuery.extend( jQuery.fx, { tick: function() { var timer, timers jQuery.timers, i 0; for ( ; i timers.length; i++ ) { timer timers i ; // Checks the timer has not already been removed if ( !timer() && timers i timer ) { timers.splice( i--, 1 ); } } if ( !timers.length ) { jQuery.fx.stop(); } }, interval: 13, stop: function() { clearInterval( timerId ); timerId null; }, speeds: { slow: 600, fast: 200, // Default speed _default: 400 }, step: { opacity: function( fx ) { jQuery.style( fx.elem, opacity, fx.now ); }, _default: function( fx ) { if ( fx.elem.style && fx.elem.style fx.prop ! null ) { fx.elem.style fx.prop fx.now + fx.unit; } else { fx.elem fx.prop fx.now; } } } }); // Ensure props that cant be negative dont go there on undershoot easing jQuery.each( fxAttrs.concat.apply( , fxAttrs ), function( i, prop ) { // exclude marginTop, marginLeft, marginBottom and marginRight from this list if ( prop.indexOf( margin ) ) { jQuery.fx.step prop function( fx ) { jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit ); }; } }); if ( jQuery.expr && jQuery.expr.filters ) { jQuery.expr.filters.animated function( elem ) { return jQuery.grep(jQuery.timers, function( fn ) { return elem fn.elem; }).length; }; } // Try to restore the default display value of an element function defaultDisplay( nodeName ) { if ( !elemdisplay nodeName ) { var body document.body, elem jQuery( + nodeName + > ).appendTo( body ), display elem.css( display ); elem.remove(); // If the simple way fails, // get elements real default display by attaching it to a temp iframe if ( display none || display ) { // No iframe to use yet, so create it if ( !iframe ) { iframe document.createElement( iframe ); iframe.frameBorder iframe.width iframe.height 0; } body.appendChild( iframe ); // Create a cacheable copy of the iframe document on first call. // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML // document to it; WebKit & Firefox wont allow reusing the iframe document. if ( !iframeDoc || !iframe.createElement ) { iframeDoc ( iframe.contentWindow || iframe.contentDocument ).document; iframeDoc.write( ( jQuery.support.boxModel ? !doctype html> : ) + html>body> ); iframeDoc.close(); } elem iframeDoc.createElement( nodeName ); iframeDoc.body.appendChild( elem ); display jQuery.css( elem, display ); body.removeChild( iframe ); } // Store the correct default display elemdisplay nodeName display; } return elemdisplay nodeName ; } var getOffset, rtable /^t(?:able|d|h)$/i, rroot /^(?:body|html)$/i; if ( getBoundingClientRect in document.documentElement ) { getOffset function( elem, doc, docElem, box ) { try { box elem.getBoundingClientRect(); } catch(e) {} // Make sure were not dealing with a disconnected DOM node if ( !box || !jQuery.contains( docElem, elem ) ) { return box ? { top: box.top, left: box.left } : { top: 0, left: 0 }; } var body doc.body, win getWindow( doc ), clientTop docElem.clientTop || body.clientTop || 0, clientLeft docElem.clientLeft || body.clientLeft || 0, scrollTop win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop, scrollLeft win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft, top box.top + scrollTop - clientTop, left box.left + scrollLeft - clientLeft; return { top: top, left: left }; }; } else { getOffset function( elem, doc, docElem ) { var computedStyle, offsetParent elem.offsetParent, prevOffsetParent elem, body doc.body, defaultView doc.defaultView, prevComputedStyle defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle, top elem.offsetTop, left elem.offsetLeft; while ( (elem elem.parentNode) && elem ! body && elem ! docElem ) { if ( jQuery.support.fixedPosition && prevComputedStyle.position fixed ) { break; } computedStyle defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle; top - elem.scrollTop; left - elem.scrollLeft; if ( elem offsetParent ) { top + elem.offsetTop; left + elem.offsetLeft; if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) { top + parseFloat( computedStyle.borderTopWidth ) || 0; left + parseFloat( computedStyle.borderLeftWidth ) || 0; } prevOffsetParent offsetParent; offsetParent elem.offsetParent; } if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow ! visible ) { top + parseFloat( computedStyle.borderTopWidth ) || 0; left + parseFloat( computedStyle.borderLeftWidth ) || 0; } prevComputedStyle computedStyle; } if ( prevComputedStyle.position relative || prevComputedStyle.position static ) { top + body.offsetTop; left + body.offsetLeft; } if ( jQuery.support.fixedPosition && prevComputedStyle.position fixed ) { top + Math.max( docElem.scrollTop, body.scrollTop ); left + Math.max( docElem.scrollLeft, body.scrollLeft ); } return { top: top, left: left }; }; } jQuery.fn.offset function( options ) { if ( arguments.length ) { return options undefined ? this : this.each(function( i ) { jQuery.offset.setOffset( this, options, i ); }); } var elem this0, doc elem && elem.ownerDocument; if ( !doc ) { return null; } if ( elem doc.body ) { return jQuery.offset.bodyOffset( elem ); } return getOffset( elem, doc, doc.documentElement ); }; jQuery.offset { bodyOffset: function( body ) { var top body.offsetTop, left body.offsetLeft; if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) { top + parseFloat( jQuery.css(body, marginTop) ) || 0; left + parseFloat( jQuery.css(body, marginLeft) ) || 0; } return { top: top, left: left }; }, setOffset: function( elem, options, i ) { var position jQuery.css( elem, position ); // set position first, in-case top/left are set even on static elem if ( position static ) { elem.style.position relative; } var curElem jQuery( elem ), curOffset curElem.offset(), curCSSTop jQuery.css( elem, top ), curCSSLeft jQuery.css( elem, left ), calculatePosition ( position absolute || position fixed ) && jQuery.inArray(auto, curCSSTop, curCSSLeft) > -1, props {}, curPosition {}, curTop, curLeft; // need to be able to calculate position if either top or left is auto and position is either absolute or fixed if ( calculatePosition ) { curPosition curElem.position(); curTop curPosition.top; curLeft curPosition.left; } else { curTop parseFloat( curCSSTop ) || 0; curLeft parseFloat( curCSSLeft ) || 0; } if ( jQuery.isFunction( options ) ) { options options.call( elem, i, curOffset ); } if ( options.top ! null ) { props.top ( options.top - curOffset.top ) + curTop; } if ( options.left ! null ) { props.left ( options.left - curOffset.left ) + curLeft; } if ( using in options ) { options.using.call( elem, props ); } else { curElem.css( props ); } } }; jQuery.fn.extend({ position: function() { if ( !this0 ) { return null; } var elem this0, // Get *real* offsetParent offsetParent this.offsetParent(), // Get correct offsets offset this.offset(), parentOffset rroot.test(offsetParent0.nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); // Subtract element margins // note: when an element has margin: auto the offsetLeft and marginLeft // are the same in Safari causing offset.left to incorrectly be 0 offset.top - parseFloat( jQuery.css(elem, marginTop) ) || 0; offset.left - parseFloat( jQuery.css(elem, marginLeft) ) || 0; // Add offsetParent borders parentOffset.top + parseFloat( jQuery.css(offsetParent0, borderTopWidth) ) || 0; parentOffset.left + parseFloat( jQuery.css(offsetParent0, borderLeftWidth) ) || 0; // Subtract the two offsets return { top: offset.top - parentOffset.top, left: offset.left - parentOffset.left }; }, offsetParent: function() { return this.map(function() { var offsetParent this.offsetParent || document.body; while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, position) static) ) { offsetParent offsetParent.offsetParent; } return offsetParent; }); } }); // Create scrollLeft and scrollTop methods jQuery.each( {scrollLeft: pageXOffset, scrollTop: pageYOffset}, function( method, prop ) { var top /Y/.test( prop ); jQuery.fn method function( val ) { return jQuery.access( this, function( elem, method, val ) { var win getWindow( elem ); if ( val undefined ) { return win ? (prop in win) ? win prop : jQuery.support.boxModel && win.document.documentElement method || win.document.body method : elem method ; } if ( win ) { win.scrollTo( !top ? val : jQuery( win ).scrollLeft(), top ? val : jQuery( win ).scrollTop() ); } else { elem method val; } }, method, val, arguments.length, null ); }; }); function getWindow( elem ) { return jQuery.isWindow( elem ) ? elem : elem.nodeType 9 ? elem.defaultView || elem.parentWindow : false; } // Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods jQuery.each( { Height: height, Width: width }, function( name, type ) { var clientProp client + name, scrollProp scroll + name, offsetProp offset + name; // innerHeight and innerWidth jQuery.fn inner + name function() { var elem this0; return elem ? elem.style ? parseFloat( jQuery.css( elem, type, padding ) ) : this type () : null; }; // outerHeight and outerWidth jQuery.fn outer + name function( margin ) { var elem this0; return elem ? elem.style ? parseFloat( jQuery.css( elem, type, margin ? margin : border ) ) : this type () : null; }; jQuery.fn type function( value ) { return jQuery.access( this, function( elem, type, value ) { var doc, docElemProp, orig, ret; if ( jQuery.isWindow( elem ) ) { // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat doc elem.document; docElemProp doc.documentElement clientProp ; return jQuery.support.boxModel && docElemProp || doc.body && doc.body clientProp || docElemProp; } // Get document width or height if ( elem.nodeType 9 ) { // Either scrollWidth/Height or offsetWidth/Height, whichever is greater doc elem.documentElement; // when a window > document, IE6 reports a offsetWidth/Height > clientWidth/Height // so we cant use max, as itll choose the incorrect offsetWidth/Height // instead we use the correct clientWidth/Height // support:IE6 if ( doc clientProp > doc scrollProp ) { return doc clientProp ; } return Math.max( elem.body scrollProp , doc scrollProp , elem.body offsetProp , doc offsetProp ); } // Get width or height on the element if ( value undefined ) { orig jQuery.css( elem, type ); ret parseFloat( orig ); return jQuery.isNumeric( ret ) ? ret : orig; } // Set the width or height on the element jQuery( elem ).css( type, value ); }, type, value, arguments.length, null ); }; }); // Expose jQuery to the global object window.jQuery window.$ jQuery; // Expose jQuery as an AMD module, but only for AMD loaders that // understand the issues with loading multiple versions of jQuery // in a page that all might call define(). The loader will indicate // they have special allowances for multiple jQuery versions by // specifying define.amd.jQuery true. Register as a named module, // since jQuery can be concatenated with other files that may use define, // but not use a proper concatenation script that understands anonymous // AMD modules. A named AMD is safest and most robust way to register. // Lowercase jquery is used because AMD module names are derived from // file names, and jQuery is normally delivered in a lowercase file name. // Do this after creating the global so that if an AMD module wants to call // noConflict to hide this version of jQuery, it will work. if ( typeof define function && define.amd && define.amd.jQuery ) { define( jquery, , function () { return jQuery; } ); } })( window ); /script> script> /* * Copyright (c) 2009 Simo Kinnunen. * Licensed under the MIT license. * * @version 1.09i */ var Cufon(function(){var mfunction(){return m.replace.apply(null,arguments)};var xm.DOM{ready:(function(){var Cfalse,E{loaded:1,complete:1};var B,Dfunction(){if(C){return}Ctrue;for(var F;FB.shift();F()){}};if(document.addEventListener){document.addEventListener(DOMContentLoaded,D,false);window.addEventListener(pageshow,D,false)}if(!window.opera&&document.readyState){(function(){Edocument.readyState?D():setTimeout(arguments.callee,10)})()}if(document.readyState&&document.createStyleSheet){(function(){try{document.body.doScroll(left);D()}catch(F){setTimeout(arguments.callee,1)}})()}q(window,load,D);return function(F){if(!arguments.length){D()}else{C?F():B.push(F)}}})(),root:function(){return document.documentElement||document.body}};var nm.CSS{Size:function(C,B){this.valueparseFloat(C);this.unitString(C).match(/a-z%*$/)0||px;this.convertfunction(D){return D/B*this.value};this.convertFromfunction(D){return D/this.value*B};this.toStringfunction(){return this.value+this.unit}},addClass:function(C,B){var DC.className;C.classNameD+(D&& )+B;return C},color:j(function(C){var B{};B.colorC.replace(/^rgba\((.*?),\s*(\d.+)\)/,function(E,D,F){B.opacityparseFloat(F);returnrgb(+D+)});return B}),fontStretch:j(function(B){if(typeof Bnumber){return B}if(/%$/.test(B)){return parseFloat(B)/100}return{ultra-condensed:0.5,extra-condensed:0.625,condensed:0.75,semi-condensed:0.875,semi-expanded:1.125,expanded:1.25,extra-expanded:1.5,ultra-expanded:2}B||1}),getStyle:function(C){var Bdocument.defaultView;if(B&&B.getComputedStyle){return new a(B.getComputedStyle(C,null))}if(C.currentStyle){return new a(C.currentStyle)}return new a(C.style)},gradient:j(function(F){var G{id:F,type:F.match(/^-(a-z+)-gradient\(/)1,stops:},CF.substr(F.indexOf(()).match(/(\d.+)?(#a-f0-9+|a-z+\(.*?\)|a-z+)/ig);for(var E0,BC.length,D;EB;++E){DCE.split(,2).reverse();G.stops.push(D1||E/(B-1),D0)}return G}),quotedList:j(function(E){var D,C/\s*(()(\s\S*?^\\)\2|^,+)\s*/g,B;while(BC.exec(E)){D.push(B3||B1)}return D}),recognizesMedia:j(function(G){var Edocument.createElement(style),D,C,B;E.typetext/css;E.mediaG;try{E.appendChild(document.createTextNode(/**/))}catch(F){}Cg(head)0;C.insertBefore(E,C.firstChild);D(E.sheet||E.styleSheet);BD&&!D.disabled;C.removeChild(E);return B}),removeClass:function(D,C){var BRegExp((?:^|\\s+)+C+(?\\s|$),g);D.classNameD.className.replace(B,);return D},supports:function(D,C){var Bdocument.createElement(span).style;if(BDundefined){return false}BDC;return BDC},textAlign:function(E,D,B,C){if(D.get(textAlign)right){if(B>0){E +E}}else{if(BC-1){E+ }}return E},textShadow:j(function(F){if(Fnone){return null}var E,G{},B,C0;var D/(#a-f0-9+|a-z+\(.*?\)|a-z+)|(-?\d.+a-z%*)|,/ig;while(BD.exec(F)){if(B0,){E.push(G);G{};C0}else{if(B1){G.colorB1}else{GoffX,offY,blurC++B2}}}E.push(G);return E}),textTransform:(function(){var B{uppercase:function(C){return C.toUpperCase()},lowercase:function(C){return C.toLowerCase()},capitalize:function(C){return C.replace(/\b./g,function(D){return D.toUpperCase()})}};return function(E,D){var CBD.get(textTransform);return C?C(E):E}})(),whiteSpace:(function(){var D{inline:1,inline-block:1,run-in:1};var C/^\s+/,B/\s+$/;return function(H,F,G,E){if(E){if(E.nodeName.toLowerCase()br){HH.replace(C,)}}if(DF.get(display)){return H}if(!G.previousSibling){HH.replace(C,)}if(!G.nextSibling){HH.replace(B,)}return H}})()};n.ready(function(){var B!n.recognizesMedia(all),Efalse;var D,Hfunction(){Btrue;for(var K;KD.shift();K()){}};var Ig(link),Jg(style);function C(K){return K.disabled||G(K.sheet,K.media||screen)}function G(M,P){if(!n.recognizesMedia(P||all)){return true}if(!M||M.disabled){return false}try{var QM.cssRules,O;if(Q){search:for(var L0,KQ.length;OQL,LK;++L){switch(O.type){case 2:break;case 3:if(!G(O.styleSheet,O.media.mediaText)){return false}break;default:break search}}}}catch(N){}return true}function F(){if(document.createStyleSheet){return true}var L,K;for(K0;LIK;++K){if(L.rel.toLowerCase()stylesheet&&!C(L)){return false}}for(K0;LJK;++K){if(!C(L)){return false}}return true}x.ready(function(){if(!E){En.getStyle(document.body).isUsable()}if(B||(E&&F())){H()}else{setTimeout(arguments.callee,10)}});return function(K){if(B){K()}else{D.push(K)}}})();function s(D){var Cthis.faceD.face,B{\u0020:1,\u00a0:1,\u3000:1};this.glyphsD.glyphs;this.wD.w;this.baseSizeparseInt(Cunits-per-em,10);this.familyCfont-family.toLowerCase();this.weightCfont-weight;this.styleCfont-style||normal;this.viewBox(function(){var FC.bbox.split(/\s+/);var E{minX:parseInt(F0,10),minY:parseInt(F1,10),maxX:parseInt(F2,10),maxY:parseInt(F3,10)};E.widthE.maxX-E.minX;E.heightE.maxY-E.minY;E.toStringfunction(){returnthis.minX,this.minY,this.width,this.height.join( )};return E})();this.ascent-parseInt(C.ascent,10);this.descent-parseInt(C.descent,10);this.height-this.ascent+this.descent;this.spacingfunction(L,N,E){var Othis.glyphs,M,K,G,P,F0,J-1,I-1,H;while(HL++J){MOH||this.missingGlyph;if(!M){continue}if(K){F-GKH||0;PI-G}F+P++I~~(M.w||this.w)+N+(BH?E:0);KM.k}P.totalF;return P}}function f(){var C{},B{oblique:italic,italic:oblique};this.addfunction(D){(CD.style||(CD.style{}))D.weightD};this.getfunction(H,I){var GCH||CBH||C.normal||C.italic||C.oblique;if(!G){return null}I{normal:400,bold:700}I||parseInt(I,10);if(GI){return GI}var E{1:1,99:0}I%100,K,F,D;if(Eundefined){EI>400}if(I500){I400}for(var J in G){if(!k(G,J)){continue}JparseInt(J,10);if(!F||JF){FJ}if(!D||J>D){DJ}K.push(J)}if(IF){IF}if(I>D){ID}K.sort(function(M,L){return(E?(M>I&&L>I)?ML:M>L:(MI&&LI)?M>L:ML)?-1:1});return GK0}}function r(){function D(F,G){if(F.contains){return F.contains(G)}return F.compareDocumentPosition(G)&16}function B(G){var FG.relatedTarget;if(!F||D(this,F)){return}C(this,G.typemouseover)}function E(F){C(this,F.typemouseenter)}function C(F,G){setTimeout(function(){var Hd.get(F).options;m.replace(F,G?h(H,H.hover):H,true)},10)}this.attachfunction(F){if(F.onmouseenterundefined){q(F,mouseover,B);q(F,mouseout,B)}else{q(F,mouseenter,E);q(F,mouseleave,E)}}}function u(){var C,D{};function B(H){var E,G;for(var F0;GHF;++F){EFCDG}return E}this.addfunction(F,E){DFC.push(E)-1};this.repeatfunction(){var Earguments.length?B(arguments):C,F;for(var G0;FEG++;){m.replace(F0,F1,true)}}}function A(){var D{},B0;function C(E){return E.cufid||(E.cufid++B)}this.getfunction(E){var FC(E);return DF||(DF{})}}function a(B){var D{},C{};this.extendfunction(E){for(var F in E){if(k(E,F)){DFEF}}return this};this.getfunction(E){return DE!undefined?DE:BE};this.getSizefunction(F,E){return CF||(CFnew n.Size(this.get(F),E))};this.isUsablefunction(){return !!B}}function q(C,B,D){if(C.addEventListener){C.addEventListener(B,D,false)}else{if(C.attachEvent){C.attachEvent(on+B,function(){return D.call(C,window.event)})}}}function v(C,B){var Dd.get(C);if(D.options){return C}if(B.hover&&B.hoverablesC.nodeName.toLowerCase()){b.attach(C)}D.optionsB;return C}function j(B){var C{};return function(D){if(!k(C,D)){CDB.apply(null,arguments)}return CD}}function c(F,E){var Bn.quotedList(E.get(fontFamily).toLowerCase()),D;for(var C0;DBC;++C){if(iD){return iD.get(E.get(fontStyle),E.get(fontWeight))}}return null}function g(B){return document.getElementsByTagName(B)}function k(C,B){return C.hasOwnProperty(B)}function h(){var C{},B,F;for(var E0,Darguments.length;BargumentsE,ED;++E){for(F in B){if(k(B,F)){CFBF}}}return C}function o(E,M,C,N,F,D){var Kdocument.createDocumentFragment(),H;if(M){return K}var LN.separate;var IM.split(pL),B(Lwords);if(B&&t){if(/^\s/.test(M)){I.unshift()}if(/\s$/.test(M)){I.push()}}for(var J0,GI.length;JG;++J){HzN.engine(E,B?n.textAlign(IJ,C,J,G):IJ,C,N,F,D,JG-1);if(H){K.appendChild(H)}}return K}function l(D,M){var CD.nodeName.toLowerCase();if(M.ignoreC){return}var E!M.textlessC;var Bn.getStyle(v(D,M)).extend(M);var Fc(D,B),G,K,I,H,L,J;if(!F){return}for(GD.firstChild;G;GI){KG.nodeType;IG.nextSibling;if(E&&K3){if(H){H.appendData(G.data);D.removeChild(G)}else{HG}if(I){continue}}if(H){D.replaceChild(o(F,n.whiteSpace(H.data,B,H,J),B,M,G,D),H);Hnull}if(K1){if(G.firstChild){if(G.nodeName.toLowerCase()cufon){zM.engine(F,null,B,M,G,D)}else{arguments.callee(G,M)}}JG}}}var t .split(/\s+/).length0;var dnew A();var bnew r();var ynew u();var efalse;var z{},i{},w{autoDetect:false,engine:null,forceHitArea:false,hover:false,hoverables:{a:true},ignore:{applet:1,canvas:1,col:1,colgroup:1,head:1,iframe:1,map:1,optgroup:1,option:1,script:1,select:1,style:1,textarea:1,title:1,pre:1},printable:true,selector:(window.Sizzle||(window.jQuery&&function(B){return jQuery(B)})||(window.dojo&&dojo.query)||(window.Ext&&Ext.query)||(window.YAHOO&&YAHOO.util&&YAHOO.util.Selector&&YAHOO.util.Selector.query)||(window.$$&&function(B){return $$(B)})||(window.$&&function(B){return $(B)})||(document.querySelectorAll&&function(B){return document.querySelectorAll(B)})||g),separate:words,textless:{dl:1,html:1,ol:1,table:1,tbody:1,thead:1,tfoot:1,tr:1,ul:1},textShadow:none};var p{words:/\s/.test(\u00a0)?/^\S\u00a0+/:/\s+/,characters:,none:/^/};m.nowfunction(){x.ready();return m};m.refreshfunction(){y.repeat.apply(y,arguments);return m};m.registerEnginefunction(C,B){if(!B){return m}zCB;return m.set(engine,C)};m.registerFontfunction(D){if(!D){return m}var Bnew s(D),CB.family;if(!iC){iCnew f()}iC.add(B);return m.set(fontFamily,+C+)};m.replacefunction(D,C,B){Ch(w,C);if(!C.engine){return m}if(!e){n.addClass(x.root(),cufon-active cufon-loading);n.ready(function(){n.addClass(n.removeClass(x.root(),cufon-loading),cufon-ready)});etrue}if(C.hover){C.forceHitAreatrue}if(C.autoDetect){delete C.fontFamily}if(typeof C.textShadowstring){C.textShadown.textShadow(C.textShadow)}if(typeof C.colorstring&&/^-/.test(C.color)){C.textGradientn.gradient(C.color)}else{delete C.textGradient}if(!B){y.add(D,arguments)}if(D.nodeType||typeof Dstring){DD}n.ready(function(){for(var F0,ED.length;FE;++F){var GDF;if(typeof Gstring){m.replace(C.selector(G),C,true)}else{l(G,C)}}});return m};m.setfunction(B,C){wBC;return m};return m})();Cufon.registerEngine(vml,(function(){var edocument.namespaces;if(!e){return}e.add(cvml,urn:schemas-microsoft-com:vml);enull;var bdocument.createElement(cvml:shape);b.style.behaviorurl(#default#VML);if(!b.coordsize){return}bnull;var h(document.documentMode||0)8;document.write((style typetext/css>cufoncanvas{text-indent:0;}@media screen{cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}cufoncanvas{position:absolute;text-align:left;}cufon{display:inline-block;position:relative;vertical-align:+(h?middle:text-bottom)+;}cufon cufontext{position:absolute;left:-10000in;font-size:1px;}a cufon{cursor:pointer}}@media print{cufon cufoncanvas{display:none;}}/style>).replace(/;/g,!important;));function c(i,j){return a(i,/(?:em|ex|%)$|^a-z-+$/i.test(j)?1em:j)}function a(l,m){if(m0){return 0}if(/px$/i.test(m)){return parseFloat(m)}var kl.style.left,jl.runtimeStyle.left;l.runtimeStyle.leftl.currentStyle.left;l.style.leftm.replace(%,em);var il.style.pixelLeft;l.style.leftk;l.runtimeStyle.leftj;return i}function f(l,k,j,n){var icomputed+n,mki;if(isNaN(m)){mk.get(n);kim(mnormal)?0:~~j.convertFrom(a(l,m))}return m}var g{};function d(p){var qp.id;if(!gq){var np.stops,odocument.createElement(cvml:fill),i;o.typegradient;o.angle180;o.focus0;o.methodsigma;o.colorn01;for(var m1,ln.length-1;ml;++m){i.push(nm0*100+% +nm1)}o.colorsi.join(,);o.color2nl1;gqo}return gq}return function(ac,G,Y,C,K,ad,W){var n(Gnull);if(n){GK.alt}var Iac.viewBox;var pY.computedFontSize||(Y.computedFontSizenew Cufon.CSS.Size(c(ad,Y.get(fontSize))+px,ac.baseSize));var y,q;if(n){yK;qK.firstChild}else{ydocument.createElement(cufon);y.classNamecufon cufon-vml;y.altG;qdocument.createElement(cufoncanvas);y.appendChild(q);if(C.printable){var Zdocument.createElement(cufontext);Z.appendChild(document.createTextNode(G));y.appendChild(Z)}if(!W){y.appendChild(document.createElement(cvml:shape))}}var aiy.style;var Rq.style;var lp.convert(I.height),afMath.ceil(l);var Vaf/l;var PV*Cufon.CSS.fontStretch(Y.get(fontStretch));var UI.minX,TI.minY;R.heightaf;R.topMath.round(p.convert(T-ac.ascent));R.leftMath.round(p.convert(U));ai.heightp.convert(ac.height)+px;var FY.get(color);var agCufon.CSS.textTransform(G,Y).split();var Lac.spacing(ag,f(ad,Y,p,letterSpacing),f(ad,Y,p,wordSpacing));if(!L.length){return null}var kL.total;var x-U+k+(I.width-LL.length-1);var ahp.convert(x*P),XMath.round(ah);var Ox+,+I.height,m;var Jr+O+ns;var uC.textGradient&&d(C.textGradient);var oac.glyphs,S0;var HC.textShadow;var ab-1,aa0,w;while(wag++ab){var Doagab||ac.missingGlyph,v;if(!D){continue}if(n){vq.childNodesaa;while(v.firstChild){v.removeChild(v.firstChild)}}else{vdocument.createElement(cvml:shape);q.appendChild(v)}v.strokedf;v.coordsizeO;v.coordoriginm(U-S)+,+T;v.path(D.d?m+D.d+xe:)+m+m+J;v.fillcolorF;if(u){v.appendChild(u.cloneNode(false))}var aev.style;ae.widthX;ae.heightaf;if(H){var sH0,rH1;var BCufon.CSS.color(s.color),z;var Ndocument.createElement(cvml:shadow);N.ont;N.colorB.color;N.offsets.offX+,+s.offY;if(r){zCufon.CSS.color(r.color);N.typedouble;N.color2z.color;N.offset2r.offX+,+r.offY}N.opacityB.opacity||(z&&z.opacity)||1;v.appendChild(N)}S+Laa++}var Mv.nextSibling,t,A;if(C.forceHitArea){if(!M){Mdocument.createElement(cvml:rect);M.strokedf;M.classNamecufon-vml-cover;tdocument.createElement(cvml:fill);t.opacity0;M.appendChild(t);q.appendChild(M)}AM.style;A.widthX;A.heightaf}else{if(M){q.removeChild(M)}}ai.widthMath.max(Math.ceil(p.convert(k*P)),0);if(h){var QY.computedYAdjust;if(Qundefined){var EY.get(lineHeight);if(Enormal){E1em}else{if(!isNaN(E)){E+em}}Y.computedYAdjustQ0.5*(a(ad,E)-parseFloat(ai.height))}if(Q){ai.marginTopMath.ceil(Q)+px;ai.marginBottomQ+px}}return y}})());Cufon.registerEngine(canvas,(function(){var bdocument.createElement(canvas);if(!b||!b.getContext||!b.getContext.apply){return}bnull;var aCufon.CSS.supports(display,inline-block);var e!a&&(document.compatModeBackCompat||/frameset|transitional/i.test(document.doctype.publicId));var fdocument.createElement(style);f.typetext/css;f.appendChild(document.createTextNode((cufon{text-indent:0;}@media screen,projection{cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;+(e?:font-size:1px;line-height:1px;)+}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}+(a?cufon canvas{position:relative;}:cufon canvas{position:absolute;})+}@media print{cufon{padding:0;}cufon canvas{display:none;}}).replace(/;/g,!important;)));document.getElementsByTagName(head)0.appendChild(f);function d(p,h){var n0,m0;var g,o/(mrvxe)(^a-z*)/g,k;generate:for(var j0;ko.exec(p);++j){var lk2.split(,);switch(k1){casev:gj{m:bezierCurveTo,a:n+~~l0,m+~~l1,n+~~l2,m+~~l3,n+~~l4,m+~~l5};break;caser:gj{m:lineTo,a:n+~~l0,m+~~l1};break;casem:gj{m:moveTo,a:n~~l0,m~~l1};break;casex:gj{m:closePath};break;casee:break generate}hgj.m.apply(h,gj.a)}return g}function c(m,k){for(var j0,hm.length;jh;++j){var gmj;kg.m.apply(k,g.a)}}return function(V,w,P,t,C,W){var k(wnull);if(k){wC.getAttribute(alt)}var AV.viewBox;var mP.getSize(fontSize,V.baseSize);var B0,O0,N0,u0;var zt.textShadow,L;if(z){for(var Uz.length;U--;){var FzU;var Km.convertFrom(parseFloat(F.offX));var Im.convertFrom(parseFloat(F.offY));LUK,I;if(IB){BI}if(K>O){OK}if(I>N){NI}if(Ku){uK}}}var ZCufon.CSS.textTransform(w,P).split();var EV.spacing(Z,~~m.convertFrom(parseFloat(P.get(letterSpacing))||0),~~m.convertFrom(parseFloat(P.get(wordSpacing))||0));if(!E.length){return null}var hE.total;O+A.width-EE.length-1;u+A.minX;var s,n;if(k){sC;nC.firstChild}else{sdocument.createElement(cufon);s.classNamecufon cufon-canvas;s.setAttribute(alt,w);ndocument.createElement(canvas);s.appendChild(n);if(t.printable){var Sdocument.createElement(cufontext);S.appendChild(document.createTextNode(w));s.appendChild(S)}}var aas.style;var Hn.style;var jm.convert(A.height);var YMath.ceil(j);var MY/j;var GM*Cufon.CSS.fontStretch(P.get(fontStretch));var Jh*G;var QMath.ceil(m.convert(J+O-u));var oMath.ceil(m.convert(A.height-B+N));n.widthQ;n.heighto;H.widthQ+px;H.heighto+px;B+A.minY;H.topMath.round(m.convert(B-V.ascent))+px;H.leftMath.round(m.convert(u))+px;var rMath.max(Math.ceil(m.convert(J)),0)+px;if(a){aa.widthr;aa.heightm.convert(V.height)+px}else{aa.paddingLeftr;aa.paddingBottom(m.convert(V.height)-1)+px}var Xn.getContext(2d),Dj/A.height;X.scale(D,D*M);X.translate(-u,-B);X.save();function T(){var xV.glyphs,ab,l-1,g-1,y;X.scale(G,1);while(yZ++l){var abxZl||V.missingGlyph;if(!ab){continue}if(ab.d){X.beginPath();if(ab.code){c(ab.code,X)}else{ab.coded(m+ab.d,X)}X.fill()}X.translate(E++g,0)}X.restore()}if(z){for(var Uz.length;U--;){var FzU;X.save();X.fillStyleF.color;X.translate.apply(X,LU);T()}}var qt.textGradient;if(q){var vq.stops,pX.createLinearGradient(0,A.minY,0,A.maxY);for(var U0,Rv.length;UR;++U){p.addColorStop.apply(p,vU)}X.fillStylep}else{X.fillStyleP.get(color)}T();return s}})()); /script> script> ;(function($,undefined){ var _timer, _fwwindow._fw$.fn._fwfunction(_){ var i,name for(i in _) if(_.hasOwnProperty(i)) name.push(i) $(this).each(function(){ for(var i0,opt;iname.length;i++) if(_fw.methnamei) opt$.extend(clone(_fw.methnamei),_namei), opt.init.call($(this).data(namei,opt),opt) }) return this }, _meth_fw.meth{}, _hlp_fw.hlp{ clone:function(obj){ if(!obj||typeof obj!typeof {}) return obj if(obj instanceof Array) return .concat(obj) var tmpnew obj.constructor(), i for(i in obj) if(obj.hasOwnProperty(i)) tmpiclone(obji) return tmp }, srlz:function(str){ if(!str) return {} strstr.split(/\/&/) for(var i0,tmp,ret{};istr.length;i++) if(stri) tmpstri.split(), rettmp1?tmp0:itmp1?tmp1:tmp0 return ret }, dStr:function(obj){ var key, ret for(key in obj) if(obj.hasOwnProperty(key)) if(key/1/1) ret+!ret?objkey+/:objkey else ret+!ret?key++objkey+&:key++objkey return ret } }, clone_hlp.clone $.fn.extend({ bgSlider:function(opt){ optopt||{} opt{bgSlider:opt} this._fw(opt) } }) $.extend(_fw.meth,{ bgSlider:{ slideshow:false, duration:1500, easing:, preload:false, pagination:false, pagActiveCl:current, pagEv:click, pagArea:a, current:0, currN:0, method:fit, altCSS:{}, padding:0, preload:false, spinner:false, minSpinnerWait:150, preloadFu:function(){ var optthis, img$(img>) .css({position:absolute,left:-999%}) .appendTo(body), numopt.images.length ;(function(){ if(num) img .load(arguments.callee) .attr({src:opt.images--num}) else img.remove() })() }, pagsFu:function(){ var optthis, pagsopt.pags$(opt.pagination+ li) if(!opt.images) opt.images, pags.each(function(i){ opt.images.push($(a,this).attr(href)) }) pags.find(opt.pagArea).each(function(i){ $(this).data({num:i}) }) pags.parent() .delegate(opt.pagination+:not(.+opt.pagActiveCl+)+(opt.pagArea? +opt.pagArea:),opt.pagEv,function(){ var th$(this) opt.changeFu(th.data(num)) opt.pags.not(th.parent().addClass(opt.pagActiveCl)).removeClass(opt.pagActiveCl) ; Cufon.replace(.pagination li, { fontFamily: Ubuntu, hover:true }); return false }) }, preFu:function(){ var optthis opt.img .css({ position:absolute, left:0, top:0 }) .css(opt.altCSS) .attr({src:opt.imagesopt.current}) opt.img.each(function(){ var _ffunction(){ opt.resizeFu() opt.img.data({width:opt.img.width(),height:opt.img.height()}) } if(this.complete) _f() else $(this) .load(_f) }) opt.holder .css({ position:fixed, left:0, right:0, top:0, bottom:0, zIndex:-1 }) .append(opt.img) if(opt.spinner) opt.spinner.hide() }, resizeFu:function(){ var optthis, imgopt.img, wopt.wi, hopt.he, limg.css(left), timg.css(top), bwdocument.body.offsetWidth-opt.padding, bhdocument.body.offsetHeight, kw/h }, changeFu:function(n){ var optthis if(nopt.currN) return false opt.currNn opt.showFu(opt.imagesn) }, nextFu:function(){ var optthis, nopt.currN opt.changeFu(++nopt.images.length?n:n0) opt.pags.eq(n).addClass(opt.pagActiveCl).siblings().removeClass(opt.pagActiveCl) }, prevFu:function(){ var optthis, nopt.currN opt.changeFu(--n>0?n:nopt.images.length-1) opt.pags.eq(n).addClass(opt.pagActiveCl).siblings().removeClass(opt.pagActiveCl); Cufon.replace(.pagination li, { fontFamily: Ubuntu, hover:true }); }, showFu:function(src){ var optthis, cloneopt.cloneopt.img.clone(true) if(opt.slideshow) clearInterval(_timer0) clone .css({ opacity:0, left:0, top:0 }) .appendTo(opt.holder) .width(opt.img.width()) .load(function(){ var th$(this) opt.holder.find(>*).stop() setTimeout(function(){ opt.spinner.hide() opt.with.width() opt.heth.height() clone .stop() .animate({ opacity:1 },{ duration:opt.duration, easing:opt.easing, complete:function(){ var tmpopt.holder.find(img) opt.img$(this) tmp.not(tmp.last()).remove() opt.resizeFu() } }) },opt.minSpinnerWait) }) .attr({src:src}) opt.spinner.show() if(opt.slideshow) _timer0setInterval(function(){ opt.nextFu() },opt.slideshow) }, init:function(opt){ var holderopt.holderthis, imgopt.img$(img>) if(opt.pagination) opt.pagsFu() if(opt.spinner) opt.spinner$(opt.spinner) opt.preFu() if(opt.preload) opt.preloadFu() window.onresizefunction(){ opt.resizeFu() } if(opt.slideshow) _timer0setInterval(function(){ opt.nextFu() },opt.slideshow) holder.data({opt:opt}) } } }) })(jQuery) /script> script> $(document).ready(function() { $(.close span, .button1 span, .tabs .nav li a span, .lightbox-image span ).css({opacity:0}) $(.tabs .nav .selected a span).css({opacity:1}) $(.close, .button1).hover(function(){ $(this).find(span).stop().animate({opacity:1}) }, function(){ $(this).find(span).stop().animate({opacity:0}) }) $(.lightbox-image).hover(function(){ $(this).find(span).stop().animate({opacity:0.4}) }, function(){ $(this).find(span).stop().animate({opacity:0}) }) $(.tabs .nav li a).hover(function(){ $(this).find(span).stop().animate({opacity:1}) }, function(){ if (!$(this).parent().hasClass(selected)) { $(this).find(span).stop().animate({opacity:0}) } }) //tabs tabs.init(); // prettyPhoto $(adata-type^prettyPhoto).prettyPhoto({theme:light_square}); //bg animate $(#bgSlider).bgSlider({ duration:1200, pagination:.pagination, preload:true, spinner:.bg_spinner }) }); /script> script> $(window).load(function() { var act; $(#content > ul > li).css({position:absolute, display:none}); $(#content > ul > li).find(.box1).css({height:0}) $(#menu > li > a span).css({opacity:0}) $(#menu > li > a).hover(function(){ $(this).find( > span).stop().animate({opacity:1},600); }, function(){ if (!$(this).hasClass(active)) { $(this).find( > span).stop().animate({opacity:0},600); } }) $(#menu > li).each(function(num){ $(this).data({num:num}) }) $(#content > ul > li).each(function(num){ $(this).data({num:num}) }) if (location.hash.slice(0,3)#!/) { pagelocation.hash.slice(3); open_page(#+page); flfalse; } if ((location.hash#)||(location.hash)) { open_page(); fltrue; $(#content).stop().animate({height:668}) } $(a).click(function(){ if ($(this).attr(href).slice(0,3)#!/) { page$(this).attr(href).slice(3); open_page(#+page); return false; } if ($(this).attr(data-type)close) { close_page() } }) function open_page(page){ location.hash#!/+page.slice(1); $(#menu a).removeClass(active).find( > span).stop().animate({opacity:0},600); Cufon.replace(#menu a, { fontFamily: Ubuntu, hover:true }); num$(page).data(num); $(#menu > li).each(function(){ if ($(this).data(num)num) { $(this).find(> a).addClass(active).find(> span).stop().animate({opacity:1},600); Cufon.replace(#menu a, { fontFamily: Ubuntu, hover:true }); } }) flfalse; $(#content).stop().animate({height:868}) if (act!) { $(act).find(.box1).stop().animate({height:0},700,easeOutCirc, function(){ $(act).css({display:none}); $(page).css({display:block}).find(.box1).stop().animate({height:100%},700, easeOutCirc, function(){ actpage; }); }) } else { $(page).css({display:block}).find(.box1).stop().animate({height:100%},700, easeOutCirc, function(){ actpage; }); } } function close_page(page){ $(#menu a).removeClass(active).find( > span).stop().animate({opacity:0},600); Cufon.replace(#menu a, { fontFamily: Ubuntu, hover:true }); location.hash#; $(act).find(.box1).stop().animate({height:0},700,easeOutCirc, function(){ $(act).css({display:none}); act; fltrue; $(#content).stop().animate({height:668}) }); return false; } }) /script> script> /* * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ * * Uses the built in easing capabilities added In jQuery 1.1 * to offer multiple easing options * * TERMS OF USE - jQuery Easing * * Open source under the BSD License. * * Copyright © 2008 George McGinley Smith * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name of the author nor the names of contributors may be used to endorse * or promote products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ // t: current time, b: begInnIng value, c: change In value, d: duration jQuery.easingjswing jQuery.easingswing; jQuery.extend( jQuery.easing, { def: easeOutQuad, swing: function (x, t, b, c, d) { //alert(jQuery.easing.default); return jQuery.easingjQuery.easing.def(x, t, b, c, d); }, easeInQuad: function (x, t, b, c, d) { return c*(t/d)*t + b; }, easeOutQuad: function (x, t, b, c, d) { return -c *(t/d)*(t-2) + b; }, easeInOutQuad: function (x, t, b, c, d) { if ((t/d/2) 1) return c/2*t*t + b; return -c/2 * ((--t)*(t-2) - 1) + b; }, easeInCubic: function (x, t, b, c, d) { return c*(t/d)*t*t + b; }, easeOutCubic: function (x, t, b, c, d) { return c*((tt/d-1)*t*t + 1) + b; }, easeInOutCubic: function (x, t, b, c, d) { if ((t/d/2) 1) return c/2*t*t*t + b; return c/2*((t-2)*t*t + 2) + b; }, easeInQuart: function (x, t, b, c, d) { return c*(t/d)*t*t*t + b; }, easeOutQuart: function (x, t, b, c, d) { return -c * ((tt/d-1)*t*t*t - 1) + b; }, easeInOutQuart: function (x, t, b, c, d) { if ((t/d/2) 1) return c/2*t*t*t*t + b; return -c/2 * ((t-2)*t*t*t - 2) + b; }, easeInQuint: function (x, t, b, c, d) { return c*(t/d)*t*t*t*t + b; }, easeOutQuint: function (x, t, b, c, d) { return c*((tt/d-1)*t*t*t*t + 1) + b; }, easeInOutQuint: function (x, t, b, c, d) { if ((t/d/2) 1) return c/2*t*t*t*t*t + b; return c/2*((t-2)*t*t*t*t + 2) + b; }, easeInSine: function (x, t, b, c, d) { return -c * Math.cos(t/d * (Math.PI/2)) + c + b; }, easeOutSine: function (x, t, b, c, d) { return c * Math.sin(t/d * (Math.PI/2)) + b; }, easeInOutSine: function (x, t, b, c, d) { return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; }, easeInExpo: function (x, t, b, c, d) { return (t0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; }, easeOutExpo: function (x, t, b, c, d) { return (td) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; }, easeInOutExpo: function (x, t, b, c, d) { if (t0) return b; if (td) return b+c; if ((t/d/2) 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; }, easeInCirc: function (x, t, b, c, d) { return -c * (Math.sqrt(1 - (t/d)*t) - 1) + b; }, easeOutCirc: function (x, t, b, c, d) { return c * Math.sqrt(1 - (tt/d-1)*t) + b; }, easeInOutCirc: function (x, t, b, c, d) { if ((t/d/2) 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; return c/2 * (Math.sqrt(1 - (t-2)*t) + 1) + b; }, easeInElastic: function (x, t, b, c, d) { var s1.70158;var p0;var ac; if (t0) return b; if ((t/d)1) return b+c; if (!p) pd*.3; if (a Math.abs(c)) { ac; var sp/4; } else var s p/(2*Math.PI) * Math.asin (c/a); return -(a*Math.pow(2,10*(t-1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; }, easeOutElastic: function (x, t, b, c, d) { var s1.70158;var p0;var ac; if (t0) return b; if ((t/d)1) return b+c; if (!p) pd*.3; if (a Math.abs(c)) { ac; var sp/4; } else var s p/(2*Math.PI) * Math.asin (c/a); return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; }, easeInOutElastic: function (x, t, b, c, d) { var s1.70158;var p0;var ac; if (t0) return b; if ((t/d/2)2) return b+c; if (!p) pd*(.3*1.5); if (a Math.abs(c)) { ac; var sp/4; } else var s p/(2*Math.PI) * Math.asin (c/a); if (t 1) return -.5*(a*Math.pow(2,10*(t-1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; return a*Math.pow(2,-10*(t-1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; }, easeInBack: function (x, t, b, c, d, s) { if (s undefined) s 1.70158; return c*(t/d)*t*((s+1)*t - s) + b; }, easeOutBack: function (x, t, b, c, d, s) { if (s undefined) s 1.40158; return c*((tt/d-1)*t*((s+1)*t + s) + 1) + b; }, easeInOutBack: function (x, t, b, c, d, s) { if (s undefined) s 1.70158; if ((t/d/2) 1) return c/2*(t*t*(((s*(1.525))+1)*t - s)) + b; return c/2*((t-2)*t*(((s*(1.525))+1)*t + s) + 2) + b; }, easeInBounce: function (x, t, b, c, d) { return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; }, easeOutBounce: function (x, t, b, c, d) { if ((t/d) (1/2.75)) { return c*(7.5625*t*t) + b; } else if (t (2/2.75)) { return c*(7.5625*(t-(1.5/2.75))*t + .75) + b; } else if (t (2.5/2.75)) { return c*(7.5625*(t-(2.25/2.75))*t + .9375) + b; } else { return c*(7.5625*(t-(2.625/2.75))*t + .984375) + b; } }, easeInOutBounce: function (x, t, b, c, d) { if (t d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; } }); /* * * TERMS OF USE - EASING EQUATIONS * * Open source under the BSD License. * * Copyright © 2001 Robert Penner * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name of the author nor the names of contributors may be used to endorse * or promote products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ /script> script> var fl; $(document).ready(function() { var w_img2800, h_img1700; var w,new_w,h, new_h, num; var h_cont1000, h_cont_new1000; setWidth(); setHeight(); wnew_w;hnew_h; setSize(); function setWidth(){ new_w$(window).width(); } function setHeight(){ new_h$(window).height(); } function setSize(){ if ((w/w_img) > (h/h_img)) { w_img_neww+20; h_img_new~~((w+20)*h_img/w_img); } else { h_img_newh+20; w_img_new~~((h+20)*w_img/h_img); } $(#bgSlider img).css({width:w_img_new, height:h_img_new}); if (h>h_cont) { m_top~~((h-h_cont)/2); } else m_top0 $(.box).stop().animate({paddingTop:m_top+20},1000, easeOutCirc); h_cont_newh_cont } setInterval(setNew,1); function setNew(){ setWidth(); setHeight(); if (fl) {h_cont800;} else {h_cont1000;} if ((w!new_w)||(h!new_h)||(h_cont_new!h_cont)) { wnew_w;hnew_h; setSize(); } } }) /script> script> /* ------------------------------------------------------------------------ Do it when youre ready dawg! ------------------------------------------------------------------------- */ tabs { init : function(){ $(.tabs).each(function(){ var th$(this), tContent$(.tab-content,th), navA$(.nav a,th) tContent.not(tContent.eq(0)).hide() navA.click(function(){ var th$(this), tmpth.attr(href) tContent.not($(tmp.slice(tmp.indexOf(#))).fadeIn(1000)).hide() $(th).parent().addClass(selected).siblings().removeClass(selected).find(span).stop().animate({opacity:0},600); Cufon.refresh(); return false; }); }); } } /script> script> /* ------------------------------------------------------------------------ * Class: prettyPhoto * Use: Lightbox clone for jQuery * Author: Stephane Caron (http://www.no-margin-for-errors.com) * Version: 3.0.1 * ------------------------------------------------------------------------- */ (function($){$.prettyPhoto{version:3.0};$.fn.prettyPhotofunction(pp_settings){pp_settingsjQuery.extend({animation_speed:fast,slideshow:false,autoplay_slideshow:false,opacity:0.7,show_title:true,allow_resize:false,default_width:500,default_height:344,counter_separator_label:/,theme:facebook,hideflash:false,wmode:opaque,autoplay:true,modal:false,overlay_gallery:false,keyboard_shortcuts:true,changepicturecallback:function(){},callback:function(){},markup:div classpp_pic_holder> \ div classppt> /div> \ div classpp_top> \ div classpp_left>/div> \ div classpp_middle>/div> \ div classpp_right>/div> \ /div> \ div classpp_content_container> \ div classpp_left> \ div classpp_right> \ div classpp_content> \ div classpp_loaderIcon>/div> \ div classpp_fade> \ a href# classpp_expand titleExpand the image>Expand/a> \ div classpp_hoverContainer> \ a classpp_next href#>next/a> \ a classpp_previous href#>previous/a> \ /div> \ div idpp_full_res>/div> \ div classpp_details clearfix> \ p classpp_description>/p> \ a classpp_close href#>Close/a> \ div classpp_nav> \ a href# classpp_arrow_previous>Previous/a> \ p classcurrentTextHolder>0/0/p> \ a href# classpp_arrow_next>Next/a> \ /div> \ /div> \ /div> \ /div> \ /div> \ /div> \ /div> \ div classpp_bottom> \ div classpp_left>/div> \ div classpp_middle>/div> \ div classpp_right>/div> \ /div> \ /div> \ div classpp_overlay>/div>,gallery_markup:div classpp_gallery> \ a href# classpp_arrow_previous>Previous/a> \ ul> \ {gallery} \ /ul> \ a href# classpp_arrow_next>Next/a> \ /div>,image_markup:img idfullResImage src />,flash_markup:object classidclsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width{width} height{height}>param namewmode value{wmode} />param nameallowfullscreen valuetrue />param nameallowscriptaccess valuealways />param namemovie value{path} />embed src{path} typeapplication/x-shockwave-flash allowfullscreentrue allowscriptaccessalways width{width} height{height} wmode{wmode}>/embed>/object>,quicktime_markup:object classidclsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B codebasehttp://www.apple.com/qtactivex/qtplugin.cab height{height} width{width}>param namesrc value{path}>param nameautoplay value{autoplay}>param nametype valuevideo/quicktime>embed src{path} height{height} width{width} autoplay{autoplay} typevideo/quicktime pluginspagehttp://www.apple.com/quicktime/download/>/embed>/object>,iframe_markup:iframe src {path} width{width} height{height} frameborderno>/iframe>,inline_markup:div classpp_inline clearfix>{content}/div>,custom_markup:},pp_settings);var matchedObjectsthis,percentBasedfalse,correctSizes,pp_open,pp_contentHeight,pp_contentWidth,pp_containerHeight,pp_containerWidth,windowHeight$(window).height(),windowWidth$(window).width()-18,pp_slideshow;doresizetrue,scroll_pos_get_scroll();$(window).unbind(resize).resize(function(){_center_overlay();_resize_overlay();});if(pp_settings.keyboard_shortcuts){$(document).unbind(keydown).keydown(function(e){if(typeof $pp_pic_holder!undefined){if($pp_pic_holder.is(:visible)){switch(e.keyCode){case 37:$.prettyPhoto.changePage(previous);break;case 39:$.prettyPhoto.changePage(next);break;case 27:if(!settings.modal) $.prettyPhoto.close();break;};return false;};};});} $.prettyPhoto.initializefunction(){settingspp_settings;if($.browser.msie&&parseInt($.browser.version)6)settings.themelight_square;_buildOverlay(this);if(settings.allow_resize) $(window).scroll(function(){_center_overlay();});_center_overlay();set_positionjQuery.inArray($(this).attr(href),pp_images);$.prettyPhoto.open();return false;} $.prettyPhoto.openfunction(event){if(typeof settingsundefined){settingspp_settings;if($.browser.msie&&$.browser.version6)settings.themelight_square;_buildOverlay(event.target);pp_images$.makeArray(arguments0);pp_titles(arguments1)?$.makeArray(arguments1):$.makeArray();pp_descriptions(arguments2)?$.makeArray(arguments2):$.makeArray();isSet(pp_images.length>1)?true:false;set_position0;} if($.browser.msie&&$.browser.version6)$(select).css(visibility,hidden);if(settings.hideflash)$(object,embed).css(visibility,hidden);_checkPosition($(pp_images).size());$(.pp_loaderIcon).show();if($ppt.is(:hidden))$ppt.css(opacity,0).show();$pp_overlay.show().fadeTo(settings.animation_speed,settings.opacity);$pp_pic_holder.find(.currentTextHolder).text((set_position+1)+settings.counter_separator_label+$(pp_images).size());$pp_pic_holder.find(.pp_description).show().html(unescape(pp_descriptionsset_position));(settings.show_title&&pp_titlesset_position!&&typeof pp_titlesset_position!undefined)?$ppt.html(unescape(pp_titlesset_position)):$ppt.html( );movie_width(parseFloat(grab_param(width,pp_imagesset_position)))?grab_param(width,pp_imagesset_position):settings.default_width.toString();movie_height(parseFloat(grab_param(height,pp_imagesset_position)))?grab_param(height,pp_imagesset_position):settings.default_height.toString();if(movie_width.indexOf(%)!-1||movie_height.indexOf(%)!-1){movie_heightparseFloat(($(window).height()*parseFloat(movie_height)/100)-150);movie_widthparseFloat(($(window).width()*parseFloat(movie_width)/100)-150);percentBasedtrue;}else{percentBasedfalse;} $pp_pic_holder.fadeIn(function(){imgPreloader;switch(_getFileType(pp_imagesset_position)){caseimage:imgPreloadernew Image();nextImagenew Image();if(isSet&&set_position>$(pp_images).size())nextImage.srcpp_imagesset_position+1;prevImagenew Image();if(isSet&&pp_imagesset_position-1)prevImage.srcpp_imagesset_position-1;$pp_pic_holder.find(#pp_full_res)0.innerHTMLsettings.image_markup;$pp_pic_holder.find(#fullResImage).attr(src,pp_imagesset_position);imgPreloader.onloadfunction(){correctSizes_fitToViewport(imgPreloader.width,imgPreloader.height);_showContent();};imgPreloader.onerrorfunction(){alert(Image cannot be loaded. Make sure the path is correct and image exist.);$.prettyPhoto.close();};imgPreloader.srcpp_imagesset_position;break;caseyoutube:correctSizes_fitToViewport(movie_width,movie_height);moviehttp://www.youtube.com/v/+grab_param(v,pp_imagesset_position);if(settings.autoplay)movie+&autoplay1;toInjectsettings.flash_markup.replace(/{width}/g,correctSizeswidth).replace(/{height}/g,correctSizesheight).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);break;casevimeo:correctSizes_fitToViewport(movie_width,movie_height);movie_idpp_imagesset_position;var regExp/http:\/\/(www\.)?vimeo.com\/(\d+)/;var matchmovie_id.match(regExp);moviehttp://player.vimeo.com/video/+match2+?title0&byline0&portrait0;if(settings.autoplay)movie+&autoplay1;;vimeo_widthcorrectSizeswidth+/embed/?moog_width+correctSizeswidth;toInjectsettings.iframe_markup.replace(/{width}/g,vimeo_width).replace(/{height}/g,correctSizesheight).replace(/{path}/g,movie);break;casequicktime:correctSizes_fitToViewport(movie_width,movie_height);correctSizesheight+15;correctSizescontentHeight+15;correctSizescontainerHeight+15;toInjectsettings.quicktime_markup.replace(/{width}/g,correctSizeswidth).replace(/{height}/g,correctSizesheight).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,pp_imagesset_position).replace(/{autoplay}/g,settings.autoplay);break;caseflash:correctSizes_fitToViewport(movie_width,movie_height);flash_varspp_imagesset_position;flash_varsflash_vars.substring(pp_imagesset_position.indexOf(flashvars)+10,pp_imagesset_position.length);filenamepp_imagesset_position;filenamefilename.substring(0,filename.indexOf(?));toInjectsettings.flash_markup.replace(/{width}/g,correctSizeswidth).replace(/{height}/g,correctSizesheight).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,filename+?+flash_vars);break;caseiframe:correctSizes_fitToViewport(movie_width,movie_height);frame_urlpp_imagesset_position;frame_urlframe_url.substr(0,frame_url.indexOf(iframe)-1);toInjectsettings.iframe_markup.replace(/{width}/g,correctSizeswidth).replace(/{height}/g,correctSizesheight).replace(/{path}/g,frame_url);break;casecustom:correctSizes_fitToViewport(movie_width,movie_height);toInjectsettings.custom_markup;break;caseinline:myClone$(pp_imagesset_position).clone().css({width:settings.default_width}).wrapInner(div idpp_full_res>div classpp_inline clearfix>/div>/div>).appendTo($(body));correctSizes_fitToViewport($(myClone).width(),$(myClone).height());$(myClone).remove();toInjectsettings.inline_markup.replace(/{content}/g,$(pp_imagesset_position).html());break;};if(!imgPreloader){$pp_pic_holder.find(#pp_full_res)0.innerHTMLtoInject;_showContent();};});return false;};$.prettyPhoto.changePagefunction(direction){currentGalleryPage0;if(directionprevious){set_position--;if(set_position0){set_position0;return;};}else if(directionnext){set_position++;if(set_position>$(pp_images).size()-1){set_position0;}}else{set_positiondirection;};if(!doresize)doresizetrue;$(.pp_contract).removeClass(pp_contract).addClass(pp_expand);_hideContent(function(){$.prettyPhoto.open();});};$.prettyPhoto.changeGalleryPagefunction(direction){if(directionnext){currentGalleryPage++;if(currentGalleryPage>totalPage){currentGalleryPage0;};}else if(directionprevious){currentGalleryPage--;if(currentGalleryPage0){currentGalleryPagetotalPage;};}else{currentGalleryPagedirection;};itemsToSlide(currentGalleryPagetotalPage)?pp_images.length-((totalPage)*itemsPerPage):itemsPerPage;$pp_pic_holder.find(.pp_gallery li).each(function(i){$(this).animate({left:(i*itemWidth)-((itemsToSlide*itemWidth)*currentGalleryPage)});});};$.prettyPhoto.startSlideshowfunction(){if(typeof pp_slideshowundefined){$pp_pic_holder.find(.pp_play).unbind(click).removeClass(pp_play).addClass(pp_pause).click(function(){$.prettyPhoto.stopSlideshow();return false;});pp_slideshowsetInterval($.prettyPhoto.startSlideshow,settings.slideshow);}else{$.prettyPhoto.changePage(next);};} $.prettyPhoto.stopSlideshowfunction(){$pp_pic_holder.find(.pp_pause).unbind(click).removeClass(pp_pause).addClass(pp_play).click(function(){$.prettyPhoto.startSlideshow();return false;});clearInterval(pp_slideshow);pp_slideshowundefined;} $.prettyPhoto.closefunction(){clearInterval(pp_slideshow);$pp_pic_holder.stop().find(object,embed).css(visibility,hidden);$(div.pp_pic_holder,div.ppt,.pp_fade).fadeOut(settings.animation_speed,function(){$(this).remove();});$pp_overlay.fadeOut(settings.animation_speed,function(){if($.browser.msie&&$.browser.version6)$(select).css(visibility,visible);if(settings.hideflash)$(object,embed).css(visibility,visible);$(this).remove();$(window).unbind(scroll);settings.callback();doresizetrue;pp_openfalse;delete settings;});};_showContentfunction(){$(.pp_loaderIcon).hide();$ppt.fadeTo(settings.animation_speed,1);projectedTopscroll_posscrollTop+((windowHeight/2)-(correctSizescontainerHeight/2));if(projectedTop0)projectedTop0;$pp_pic_holder.find(.pp_content).animate({height:correctSizescontentHeight},settings.animation_speed);$pp_pic_holder.animate({top:projectedTop,left:(windowWidth/2)-(correctSizescontainerWidth/2),width:correctSizescontainerWidth},settings.animation_speed,function(){$pp_pic_holder.find(.pp_hoverContainer,#fullResImage).height(correctSizesheight).width(correctSizeswidth);$pp_pic_holder.find(.pp_fade).fadeIn(settings.animation_speed);if(isSet&&_getFileType(pp_imagesset_position)image){$pp_pic_holder.find(.pp_hoverContainer).show();}else{$pp_pic_holder.find(.pp_hoverContainer).hide();} if(correctSizesresized)$(a.pp_expand,a.pp_contract).fadeIn(settings.animation_speed);if(settings.autoplay_slideshow&&!pp_slideshow&&!pp_open)$.prettyPhoto.startSlideshow();settings.changepicturecallback();pp_opentrue;});_insert_gallery();};function _hideContent(callback){$pp_pic_holder.find(#pp_full_res object,#pp_full_res embed).css(visibility,hidden);$pp_pic_holder.find(.pp_fade).fadeOut(settings.animation_speed,function(){$(.pp_loaderIcon).show();callback();});};function _checkPosition(setCount){if(set_positionsetCount-1){$pp_pic_holder.find(a.pp_next).css(visibility,hidden);$pp_pic_holder.find(a.pp_next).addClass(disabled).unbind(click);}else{$pp_pic_holder.find(a.pp_next).css(visibility,visible);$pp_pic_holder.find(a.pp_next.disabled).removeClass(disabled).bind(click,function(){$.prettyPhoto.changePage(next);return false;});};if(set_position0){$pp_pic_holder.find(a.pp_previous).css(visibility,hidden).addClass(disabled).unbind(click);}else{$pp_pic_holder.find(a.pp_previous.disabled).css(visibility,visible).removeClass(disabled).bind(click,function(){$.prettyPhoto.changePage(previous);return false;});};(setCount>1)?$(.pp_nav).show():$(.pp_nav).hide();};function _fitToViewport(width,height){resizedfalse;_getDimensions(width,height);imageWidthwidth,imageHeightheight;if(((pp_containerWidth>windowWidth)||(pp_containerHeight>windowHeight))&&doresize&&settings.allow_resize&&!percentBased){resizedtrue,fittingfalse;while(!fitting){if((pp_containerWidth>windowWidth)){imageWidth(windowWidth-200);imageHeight(height/width)*imageWidth;}else if((pp_containerHeight>windowHeight)){imageHeight(windowHeight-200);imageWidth(width/height)*imageHeight;}else{fittingtrue;};pp_containerHeightimageHeight,pp_containerWidthimageWidth;};_getDimensions(imageWidth,imageHeight);};return{width:Math.floor(imageWidth),height:Math.floor(imageHeight),containerHeight:Math.floor(pp_containerHeight),containerWidth:Math.floor(pp_containerWidth)+16,contentHeight:Math.floor(pp_contentHeight),contentWidth:Math.floor(pp_contentWidth),resized:resized};};function _getDimensions(width,height){widthparseFloat(width);heightparseFloat(height);$pp_details$pp_pic_holder.find(.pp_details);$pp_details.width(width);detailsHeightparseFloat($pp_details.css(marginTop))+parseFloat($pp_details.css(marginBottom));$pp_details$pp_details.clone().appendTo($(body)).css({position:absolute,top:-10000});detailsHeight+$pp_details.height();detailsHeight(detailsHeight16)?0:detailsHeight;if($.browser.msie&&$.browser.version7)detailsHeight+8;$pp_details.remove();pp_contentHeightheight+detailsHeight;pp_contentWidthwidth;pp_containerHeightpp_contentHeight+$ppt.height()+$pp_pic_holder.find(.pp_top).height()+$pp_pic_holder.find(.pp_bottom).height();pp_containerWidthwidth;} function _getFileType(itemSrc){if(itemSrc.match(/youtube\.com\/watch/i)){returnyoutube;}else if(itemSrc.match(/vimeo\.com/i)){returnvimeo;}else if(itemSrc.indexOf(.mov)!-1){returnquicktime;}else if(itemSrc.indexOf(.swf)!-1){returnflash;}else if(itemSrc.indexOf(iframe)!-1){returniframe;}else if(itemSrc.indexOf(custom)!-1){returncustom;}else if(itemSrc.substr(0,1)#){returninline;}else{returnimage;};};function _center_overlay(){if(doresize&&typeof $pp_pic_holder!undefined){scroll_pos_get_scroll();titleHeight$ppt.height(),contentHeight$pp_pic_holder.height(),contentwidth$pp_pic_holder.width();projectedTop(windowHeight/2)+scroll_posscrollTop-(contentHeight/2);$pp_pic_holder.css({top:projectedTop,left:(windowWidth/2)+scroll_posscrollLeft-(contentwidth/2)});};};function _get_scroll(){if(self.pageYOffset){return{scrollTop:self.pageYOffset,scrollLeft:self.pageXOffset};}else if(document.documentElement&&document.documentElement.scrollTop){return{scrollTop:document.documentElement.scrollTop,scrollLeft:document.documentElement.scrollLeft};}else if(document.body){return{scrollTop:document.body.scrollTop,scrollLeft:document.body.scrollLeft};};};function _resize_overlay(){windowHeight$(window).height(),windowWidth$(window).width();if(typeof $pp_overlay!undefined)$pp_overlay.height($(document).height());};function _insert_gallery(){if(isSet&&settings.overlay_gallery&&_getFileType(pp_imagesset_position)image){itemWidth52+5;navWidth(settings.themefacebook)?58:38;itemsPerPageMath.floor((correctSizescontainerWidth-100-navWidth)/itemWidth);itemsPerPage(itemsPerPagepp_images.length)?itemsPerPage:pp_images.length;totalPageMath.ceil(pp_images.length/itemsPerPage)-1;if(totalPage0){navWidth0;$pp_pic_holder.find(.pp_gallery .pp_arrow_next,.pp_gallery .pp_arrow_previous).hide();}else{$pp_pic_holder.find(.pp_gallery .pp_arrow_next,.pp_gallery .pp_arrow_previous).show();};galleryWidthitemsPerPage*itemWidth+navWidth;$pp_pic_holder.find(.pp_gallery).width(galleryWidth).css(margin-left,-(galleryWidth/2));$pp_pic_holder.find(.pp_gallery ul).width(itemsPerPage*itemWidth).find(li.selected).removeClass(selected);goToPage(Math.floor(set_position/itemsPerPage)totalPage)?Math.floor(set_position/itemsPerPage):totalPage;if(itemsPerPage){$pp_pic_holder.find(.pp_gallery).hide().show().removeClass(disabled);}else{$pp_pic_holder.find(.pp_gallery).hide().addClass(disabled);} $.prettyPhoto.changeGalleryPage(goToPage);$pp_pic_holder.find(.pp_gallery ul li:eq(+set_position+)).addClass(selected);}else{$pp_pic_holder.find(.pp_content).unbind(mouseenter mouseleave);$pp_pic_holder.find(.pp_gallery).hide();}} function _buildOverlay(caller){theRel$(caller).attr(data-type);galleryRegExp/\(?:.*)\/;isSet(galleryRegExp.exec(theRel))?true:false;pp_images(isSet)?jQuery.map(matchedObjects,function(n,i){if($(n).attr(data-type).indexOf(theRel)!-1)return $(n).attr(href);}):$.makeArray($(caller).attr(href));pp_titles(isSet)?jQuery.map(matchedObjects,function(n,i){if($(n).attr(data-type).indexOf(theRel)!-1)return($(n).find(img).attr(alt))?$(n).find(img).attr(alt):;}):$.makeArray($(caller).find(img).attr(alt));pp_descriptions(isSet)?jQuery.map(matchedObjects,function(n,i){if($(n).attr(data-type).indexOf(theRel)!-1)return($(n).attr(title))?$(n).attr(title):;}):$.makeArray($(caller).attr(title));$(body).append(settings.markup);$pp_pic_holder$(.pp_pic_holder),$ppt$(.ppt),$pp_overlay$(div.pp_overlay);if(isSet&&settings.overlay_gallery){currentGalleryPage0;toInject;for(var i0;ipp_images.length;i++){var regexnew RegExp((.*?)\.(jpg|jpeg|png|gif)$);var resultsregex.exec(pp_imagesi);if(!results){classnamedefault;}else{classname;} toInject+li class+classname+>a href#>img src+pp_imagesi+ width50 alt />/a>/li>;};toInjectsettings.gallery_markup.replace(/{gallery}/g,toInject);$pp_pic_holder.find(#pp_full_res).after(toInject);$pp_pic_holder.find(.pp_gallery .pp_arrow_next).click(function(){$.prettyPhoto.changeGalleryPage(next);$.prettyPhoto.stopSlideshow();return false;});$pp_pic_holder.find(.pp_gallery .pp_arrow_previous).click(function(){$.prettyPhoto.changeGalleryPage(previous);$.prettyPhoto.stopSlideshow();return false;});$pp_pic_holder.find(.pp_content).hover(function(){$pp_pic_holder.find(.pp_gallery:not(.disabled)).fadeIn();},function(){$pp_pic_holder.find(.pp_gallery:not(.disabled)).fadeOut();});itemWidth52+5;$pp_pic_holder.find(.pp_gallery ul li).each(function(i){$(this).css({position:absolute,left:i*itemWidth});$(this).find(a).unbind(click).click(function(){$.prettyPhoto.changePage(i);$.prettyPhoto.stopSlideshow();return false;});});};if(settings.slideshow){$pp_pic_holder.find(.pp_nav).prepend(a href# classpp_play>Play/a>) $pp_pic_holder.find(.pp_nav .pp_play).click(function(){$.prettyPhoto.startSlideshow();return false;});} $pp_pic_holder.attr(class,pp_pic_holder +settings.theme);$pp_overlay.css({opacity:0,height:$(document).height(),width:100%}).bind(click,function(){if(!settings.modal)$.prettyPhoto.close();});$(a.pp_close).bind(click,function(){$.prettyPhoto.close();return false;});$(a.pp_expand).bind(click,function(e){if($(this).hasClass(pp_expand)){$(this).removeClass(pp_expand).addClass(pp_contract);doresizefalse;}else{$(this).removeClass(pp_contract).addClass(pp_expand);doresizetrue;};_hideContent(function(){$.prettyPhoto.open();});return false;});$pp_pic_holder.find(.pp_previous, .pp_nav .pp_arrow_previous).bind(click,function(){$.prettyPhoto.changePage(previous);$.prettyPhoto.stopSlideshow();return false;});$pp_pic_holder.find(.pp_next, .pp_nav .pp_arrow_next).bind(click,function(){$.prettyPhoto.changePage(next);$.prettyPhoto.stopSlideshow();return false;});_center_overlay();};return this.unbind(click).click($.prettyPhoto.initialize);};function grab_param(name,url){namename.replace(/\/,\\\).replace(/\/,\\\);var regexS\\?&+name+(^*);var regexnew RegExp(regexS);var resultsregex.exec(url);return(resultsnull)?:results1;}})(jQuery); /script> !-- link relstylesheet hrefcss/style.css typetext/css mediaall> --> !--if lt IE 9> script srchttp://html5shim.googlecode.com/svn/trunk/html5.js>/script>!endif--> !--if lt IE 9> script srchttp://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js>/script>!endif--> !---модальные микроцемента в новости--> !--прокрутка вверх--> !--if lt IE 9> script typetext/javascript srcjs/html5.js>/script> !endif--> !--if lt IE 7> div styleclear:both;text-align:center;position:relative> a hrefhttp://www.microsoft.com/windows/internet-explorer/default.aspx?ocidie6_countdown_bannercode>img srchttp://storage.ie6countdown.com/assets/100/images/banners/warning_bar_0000_us.jpg border0 alt />/a> /div> !endif--> div idloading> !-- Предзагрузка перечисление объектов --> div idloading-center> div idloading-center-absolute> div idloader>/div> /div> /div> /div>/head>!--обратный звонок -->div idcallme> input typebutton value classcallme_submit idviewform />/div>div idcallmeform classhide-on> h6>Заказать обратный звонок/h6> table stylepadding:0;border-spacing:0> tr> td>Ваше имя/td> /tr> tr> td> input classtext typetext maxlength45 stylewidth: 240px; idcname /> /td> /tr> tr> td>Ваш телефон/td> /tr> tr> td> input classtext typetext maxlength35 stylewidth: 240px; value+7 idcphone /> /td> /tr> tr> td> input typebutton valueПерезвоните мне classcallme_submit /> /td> /tr> /table> div idcallme_result>/div>/div>!--обратный звонок -->body> !-- Скрипт facebook developer --> script> window.fbAsyncInit function() { FB.init({ appId : 1786056421605997, xfbml : true, version : v2.8 }); }; (function(d, s, id){ var js, fjs d.getElementsByTagName(s)0; if (d.getElementById(id)) {return;} js d.createElement(s); js.id id; js.src //connect.facebook.net/en_US/sdk.js; fjs.parentNode.insertBefore(js, fjs); }(document, script, facebook-jssdk)); /script> !-- Скрипт facebook developer --> script> !-- Скрипт предзагрузки --> $(window).load(function() { $(#loading).fadeOut(1000); }) /script> !--новый предзагрузщик loader preloader--> !--закончился новый предзагрузсчик loader--> !--div classspinner>/div>--> !--старый предзагрузсчик loader--> div idbgSlider>/div> div classextra> div classmain> !--прокрутка script> $(document).ready(function(){ $(.main).onepage_scroll({ sectionContainer: section, responsiveFallback: 600, loop: true }); }); /script> !- -прокрутка футера--> div classmain> div classbox> !-- header --> header> h1>a hrefindex.html idlogo titleСтудия дизайн интерьера meesto >Дизайн студия Место/a>!-- div classsneg>/div> -->/h1> nav itemscope itemtypehttp://schema.org/BreadcrumbList> ul idmenu> li itempropitemListElement itemscope itemtypehttp://schema.org/ListItem>a itempropitem href#!/page_Home titleСтудия дизайн интерьера>span>/span>div itempropname>strong>Studiomesto/strong>/div>/a> meta itempropposition content1 /> /li> li itempropitemListElement itemscope itemtypehttp://schema.org/ListItem>a itempropitem href#!/page_About titleУслуги дизайн интерьера>span>/span>strong>div itempropname>Услуги/div>/strong>/a> meta itempropposition content2 /> /li> li itempropitemListElement itemscope itemtypehttp://schema.org/ListItem>a itempropitem href/gallery/index2.html titleГалерея дизайн интерьера>span>/span>strong>div itempropname>Галерея/div>/strong>/a> meta itempropposition content3 /> /li> li itempropitemListElement itemscope itemtypehttp://schema.org/ListItem>a itempropitem href#!/page_MoreInf titleКлиенты дизайн интерьера>span>/span>strong>div itempropname>Клиентам/div>/strong>/a> meta itempropposition content4 /> /li> li itempropitemListElement itemscope itemtypehttp://schema.org/ListItem>a itempropitem href#!/page_Services titleЦены дизайн интерьера>span>/span>strong>div itempropname>Цены/div>/strong>/a> meta itempropposition content5 /> /li> li itempropitemListElement itemscope itemtypehttp://schema.org/ListItem>a itempropitem href#!/page_Contact titleКонтакты дизайнера интерьера>span>/span>strong>div itempropname>Контакты/div>/strong>/a> meta itempropposition content6 /> /li> /ul> /nav> /header> !--content --> article idcontent> div classic>/div> ul> !--page_Home --> li idpage_Home titleСтудия дизайн интерьера> div classbox1> div classinner> a href# classclose data-typeclose>span>/span>/a> div classwrapper pad_bot1> div classcol11> h2>Коротко о нас/h2> figure> div classintro> div classitems-wrapper> div classitem active> svg viewBox0 0 208 220 stylebackground-color:#000 xmlnshttp://www.w3.org/2000/svg xmlns:xlinkhttp://www.w3.org/1999/xlink width208 height220> defs> mask idmasking maskUnitsobjectBoundingBox> path dm-6,16.8c0,0 7,-19 16,-17c9,2 14,-2 9,7c-5,9 -15,25 -18,26c-3,1 -17,8 -9,14c8,6 31,0 30,-4c-1,-4 15,-43 18,-43c3,0 11,-12 14,0c3,12 -1,20 -5,25c-4,5 -51,41 -52,43c-1,2 -5,13 2,13c7,0 25,-14 25,-14c0,0 37,-64 46,-66c9,-2 11,8 11,8c0,0 -105,89 -87,94c18,5 28,-15 32,-16c4,-1 72,-88 73,-88c1,0 33,-19 16,6c-17,25 -161,131 -120,111c41,-20 86,-59 86,-59c0,0 42,-60 51,-56c9,4 10,2 5,13c-5,11 -53,71 -62,74c-9,3 -99,38 -83,46c16,8 82,-25 82,-25c0,0 69,-115 81,-110c12,5 7,21 7,21c0,0 -179,120 -169,133c10,13 160,-100 160,-100c0,0 22,-59 27,-55c5,4 -245,192 -203,182c42,-10 228,-205 225,-179c-3,26 -262,216 -206,190c56,-26 190,-152 207,-164c17,-12 103,-100 19,-7c-84,93 42,3 -84,93c-126,90 -201,114 -148,99c53,-15 49,40 116,-56c67,-96 86,-105 90,-103c4,2 14,13 14,14c0,1 -260,160 -187,130c73,-30 217,-147 195,-117c-22,30 -168,113 -168,120c0,7 68,-22 68,-23c0,-1 80,-82 93,-72c13,10 -84,100 -105,102c-21,2 -182,72 -48,15c134,-57 134,-57 134,-57c0,0 100,-115 41,-43c-59,72 -168,103 -111,95c57,-8 136,-104 91,-50c-45,54 -110,95 -53,60c57,-35 73,-70 56,-35c-17,35 -18,37 -18,37 stroke#fff stroke-width20 fillnone /> /mask> /defs> g maskurl(#masking) fill#000> image width208 height220 xlink:hrefhttp://meesto.ru/images/page2_img1.jpg /> /g> /svg> /div> /div> /div> /figure> p styletext-align:justify>Мы существуем на рынке архитектурного проектирования с 2000 года. Мы занимаемся strong>проектированием коттеджей/strong>, домов, промышленных и коммерческих помещений. По проектам strong>Студия дизайна интерьера/strong> Mesto ведется строительство не только на территории Санкт-Петербурга и области, а так же в других регионах России. В проектировании должна сочетаться наша фантазия, желания заказчика и реалии конструктивного воплощения./p> a href#!/page_More titleСтудия дизайн интерьера classbutton1>span>/span>strong>Читать дальше/strong>/a> /div> div classcol11 pad_left1> h2>Новости/h2> div classwrapper> span classdate>strong>08/strong>span>мар/span>/span> div classcol2> p classpad_bot2 color1>strong>Поздравляем С Праздником Весны!/strong> /p> p>Поздравляем Вас с наступающим 8 Марта! a href#!/page_News titleНовости дизайн интерьера>Новости/a> /p> /div> /div> div classwrapper> span classdate>strong>23/strong>span>фев/span>/span> div classcol2> p classpad_bot2 color1>strong>Поздравляем с 23 февраля!/strong> /p> p>Уважаемые клиенты и партнеры! Поздравляем Вас с 23 февраля! a href#!/page_News titleНовости дизайн интерьера>Новости/a> /p> /div> /div> div classwrapper> span classdate>strong>31/strong>span>дек/span>/span> div classcol2> p classpad_bot2 color1>strong>Поздравляем С Новым Годом!/strong>/p> p>Поздравляем с наступающим Новым годом и Рождеством! a href#!/page_News titleНовости дизайн интерьера >Новости/a>/p> /div> /div> div classwrapper> span classdate>strong>30/strong>span>дек/span>/span> div classcol2> p classpad_bot2 color1>strong>С наступающим Новым годом!/strong> /p> p>Дорогие друзья, примите искренние поздравления с наступающим Новым годом и Рождеством. a href#!/page_News titleНовости дизайн интерьера>Новости/a> /p> /div> /div> div classwrapper> span classdate>strong>18/strong>span>дек/span>/span> div classcol2> p classpad_bot2 color1>strong>Новогодняя акция./strong> /p> p>У нас началась Новогодняя акция Дизайн-проект 400 руб./м2. a href#!/page_News titleНовости дизайн интерьера>Новости/a> и a href#!/page_akcii titleАкции дизайн интерьера>Акции/a> /p> /div> /div> div classwrapper> span classdate>strong>07/strong>span>дек/span>/span> div classcol2> p classpad_bot2 color1>strong>Подарочные сертификаты./strong> /p> p>Легко делать подарки с помощью Новогодних сертификатов.a href#!/page_News titleНовости дизайн интерьера>Новости/a> /p> /div> /div> div classwrapper> span classdate>strong>10/strong>span>окт/span>/span> div classcol2> p classpad_bot2 color1>strong>Повышение цен./strong> /p> p>С 01.11.2016г. планируется повышение цен.a href#!/page_News titleНовости дизайн интерьера>Новости/a> /p> /div> /div> div classwrapper> span classdate>strong>25/strong>span>фев/span>/span> div classcol2> p classpad_bot2 color1>strong>Внимание!/strong> /p> p>Планировочные решения для Ваших квартир! 5 Вариантов от 100руб/м2! a href#!/page_akcii titleАкции дизайн интерьера>Акции/a> /p> /div> /div> a href#!/page_News titleНовости дизайн интерьера classbutton1>span>/span>strong>Читать дальше/strong>/a> /div> /div> /div> /div> /li> !--/page_Home --> !--page_About --> li idpage_About titleУслуги дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Услуги нашей студии/h2> div classokno> div classwrapper> div classintro> figure classleft marg_right1> div classitems-wrapper> div classitem active> svg viewBox0 0 207 205 stylebackground-color:#ffffff00 xmlnshttp://www.w3.org/2000/svg width207 height205> g stroke#FFF stroke-width1 fillnone> path dm9.99999,10.7c0,0 0,179 0,179c0,0 180,1 180,1c0,0 1,-180 1,-180c0,0 -181,0 -181,0z /> path dm18.99999,19.7c0,0 160,0 160,0c0,0 0,159 0,159c0,0 -159,3 -159,3c0,0 -1,-162 -1,-162z /> path dm39.90315,10.13333c0,0 0.35596,9.25488 0.35596,9.25488c0,0 -0.35596,-9.25488 -0.35596,-9.25488z /> path dm160.03865,10.66726c0,0 0,8.54297 0,8.54297c0,0 0,-8.54297 0,-8.54297z /> path dm39.54719,14.93875c0,0 120.31348,-0.17798 120.31348,-0.17798c0,0 -120.31348,0.17798 -120.31348,0.17798z /> path dm174.45491,39.85574c0,0 -88.63331,0.17798 -88.63331,0.17798c0,0 -0.71191,69.05567 -0.71191,69.05567c0,0 89.70118,0.35596 89.70118,0.71191c0,0.35596 -0.35596,-69.94556 -0.35596,-69.94556z /> path dm154.69929,45.01712c0,0 15.66211,0.53394 15.66211,0.53394c0,0 -0.53394,25.80689 -0.53394,25.80689c0,0 -14.9502,1.06787 -14.9502,0.53394c0,-0.53394 -0.17798,-26.87476 -0.17798,-26.87476z /> path dm155.23323,77.23123c0,0 15.66211,0.53394 15.66211,0.53394c0,0 -0.53394,25.80689 -0.53394,25.80689c0,0 -14.9502,1.06787 -14.9502,0.53394c0,-0.53394 -0.17798,-26.87476 -0.17798,-26.87476z /> path dm152.74153,39.67776c0,0 -0.71191,69.23365 -0.71191,69.23365c0,0 -4.9834,-0.17798 -4.9834,-0.17798c0,0 4.62744,-4.9834 4.62744,-4.9834c0,0 1.06787,-64.07227 1.06787,-64.07227z /> path dm148.47005,39.67776c0,0 4.27148,4.62744 4.27148,4.62744c0,0 -4.27148,-4.62744 -4.27148,-4.62744z /> path dm119.28157,179.56888c0,0 0,-19.93359 0,-19.93359c0,0 58.73291,-0.71191 58.73291,-0.71191c0,0 0,19.0437 0,19.0437c0,0 -58.73291,1.60181 -58.73291,1.60181z /> path dm22.63923,138.98978c0,0 31.85816,-0.17798 31.85816,-0.17798c0,0 1.42383,1.42383 1.42383,1.42383c0,0 0,3.55957 0,3.55957c0,0 -2.13574,1.42383 -2.13574,1.42383c0,0 -31.32422,-0.35596 -31.32422,-0.35596c0,0 0.17798,-5.87329 0.17798,-5.87329z /> path dm22.99519,167.64432c0,0 31.85816,-0.17798 31.85816,-0.17798c0,0 1.42383,1.42383 1.42383,1.42383c0,0 0,3.55957 0,3.55957c0,0 -2.13574,1.42383 -2.13574,1.42383c0,0 -31.32422,-0.35596 -31.32422,-0.35596c0,0 0.17798,-5.87329 0.17798,-5.87329z /> path dm22.46125,145.39701c0,0 0,22.42529 0,22.42529c0,0 5.33936,-0.53394 5.33936,-0.53394c0,0 -0.35596,-22.06934 -0.35596,-22.06934c0,0 -4.9834,0.17798 -4.9834,0.17798z /> path dm51.64973,167.11039c0,0 2.13574,-2.128 2.13574,-2.128c0,0 0.35596,-17.79785 0.35596,-17.79785c0,0 -2.31372,-2.32146 -2.31372,-2.32146c0,0 -24.0271,0 -24.0271,0c0,0 -0.17798,21.86041 -0.17798,21.86041c0,0 24.0271,0.38691 24.0271,0.38691z /> path dm164.48811,114.42874c0,0 11.03467,-0.35596 11.03467,-0.35596c0,0 0.17798,16.90796 0.17798,16.90796c0,0 -11.92456,-0.71191 -11.92456,-0.71191c0,0 0.71191,-15.84009 0.71191,-15.84009z /> path dm165.20003,21.87991c0,0 11.03467,-0.35596 11.03467,-0.35596c0,0 0.17798,16.90796 0.17798,16.90796c0,0 -11.92456,-0.71191 -11.92456,-0.71191c0,0 0.71191,-15.84009 0.71191,-15.84009z /> path dm19.25764,29.88894c0,0 7.83106,0 7.83106,0c0,0 -0.35596,74.21704 -0.35596,74.21704c0,0 -7.11914,0 -7.11914,0c0,0 -0.35596,-74.21704 -0.35596,-74.21704z /> path dm19.79157,93.2493c0,0 2.31372,0 2.31372,0c0,0 -0.71191,-57.84302 -0.71191,-57.84302c0,0 -2.4917,-0.35596 -2.4917,-0.35596c0,0 0.88989,58.19898 0.88989,58.19898z /> /g> /svg> /div> /div> /figure> h2>Мы предлагаем/h2> ul classlist2 pad_bot1> li>a href#design titleдизайн проект>Мы создаем дизайн-проекты интерьера жилых и нежилых(коммерческих) помещений./a> /li> li>a href# titleархитектурный проект>Мы разрабатываем архитектурные проекты./a> /li> li>a href# titleпланировки интерьера>Перепланировкой помещений./a> /li> li>a hrefhttp://studiomesto.ru/#decor titleдекор интерьера>Декорированием помещений./a> /li> li>a href#nadzor titleавторский надзор>Ведем авторский надзор./a> /li> li>a href# titleэкстерьер зданий>Экстрерьером зданий/a> /li> /ul> p styletext-align:justify classcolor1 pad_bot2>strong>Дизайн проект интерьера предполагает несколько этапов.a iddesign titleдизайн интерьера >/a>/strong> /p> p styletext-align:justify>Многие клиенты, обращающиеся к нам до этого никогда не пользовались strong>услугами дизайнера интерьеров /strong> и поэтому не представляют какой объем работы им предстоит выполнить. Чтобы предотвратить ваши вопросы мы решили подробно рассказать, что входит в strong>дизайн проект интерьера /strong>. Очень часто клиент не представляет, каким он видит свой новый дизайн, не стоит переживать и тратить время, наши дизайнеры легко подберут ваш индивидуальный стиль и учтут все ваши предпочтения./p> p styletext-align:justify>Начиная работу над проектом, будь то strong>дизайн проект дома /strong>, коммерческое помещение- strong>интерьер офиса/strong>, strong>интерьер ресторана/strong> или strong>интерьер кафе/strong>, дизайнер должен посетить объект и ознакомиться с его расположением и планировками. Это важный этап, именно в этот момент начинает формироваться представление о будущем интерьере. Создавая strong>дизайн проект дома /strong> мы заботимся о комфорте каждого члена вашей семьи. Проектируя strong>интерьер офиса/strong> для вашей организации, мы формируем пространство, которое будет удобно для всех ваших сотрудников и обеспечит эффективную работу. Вы решили открыть ресторан? И не знаете, какой интерьер не оставит равнодушным вашего клиента? Мы поможем вам, мы создадим оригинальный strong>интерьер ресторана/strong>, который не сольется с остальными и будет иметь собственный характер. У вас будет уютный strong>интерьер кафе/strong>, который ваши клиенты будут рекомендовать своим близким и друзьям./p> p styletext-align:justify>И так, вы воспользовались strong>услугами дизайнера интерьера /strong>. Приступая к работе над strong>дизайн проектом интерьера/strong>,дизайнер определяет цветовую гамму, те цветовые решения, в которых объект будет максимально выгодно смотреться. Функциональное зонирование, позволит определить количество и назначение каждого помещения, возможно в каких-то вы не нуждаетесь, и их следует убрать (библиотека) или объединить, а о каких-то и вовсе не задумывались. Для этого потребуется перепланировка. Обсуждается эргономика помещения-то, как и чем, будет заполнено пространство вашего объекта (мебелировка, состав отделочных материалов, возможные изменения в планировке). Дизайнер не только помогает выбрать мебель и планирует ее расстановку, количество, но и продумывает насколько этим будет удобно пользоваться. strong>Дизайн проект интерьера/strong> должен быть выполнен грамотно и максимально продуман на первом этапе. Принять правильное планировочное решение, очень важно, пространство которым вы будете пользоваться регулярно, должно быть комфортным, где вас не будет ничего раздражать. strong>В услуги дизайнера интерьера/strong> входит рекомендация магазинов в которых вы сможете приобрести все товары, перечисленные в вашем strong>дизайн проекте интерьера/strong>. Магазины, где соотношение цена-качество будут максимально выдержаны, часто дизайнерам предоставляются значительные скидки, которые будут выгодны вам./p> p styletext-align:justify>Выполняются первые эскизы, они могут быть выполнены как от руки, так и в трехмерной графике. Каждая концепция созданная дизайнером обосновывается, объясняется, почему дизайнер пришел именно к этому дизайнерскому решению для вашего помещения. Клиенту предоставляется время на спокойное обдумывание для принятия окончательного решения, после чего назначается встреча для обсуждения возможных доработок и замечаний и выбора концепции интерьера. Когда внесены все исправления, при окончательном согласовании эскизов, выполняется трехмерная визуализация окончательного решения интерьера (экстерьера). Заключительным этапом выполняются чертежи. strong>Дизайн проект интерьера/strong> выдается клиенту./p> p>strong>Состав дизайн проекта интерьера/strong>:/p> p>Планировочные решения/p> p>Мебельные решения/p> p>Наброски в 3d или от руки/p> p>Визуализация в 3d помещений (одно помещение 2 вида камеры)/p> p>Обмерный план/p> p>План монтажа-демонтажа/p> p>План потолков/p> p>План полов/p> p>Разрезы/p> p>План раскладки плитки/p> p>План розетки/p> p>План освещение/p> p>План привязки света к выключателям/p> p>Спецификация дверных проемов/p> p>Спецификация отделочных материалов/p> p styletext-align:justify classcolor1>strong>Мы предоставляем услуги a idnadzor titleавторский надзор >авторского надзора./a> /strong> /p> p styletext-align:justify>Многие клиенты, не представляют, что такое авторский надзор и часто просят рассказать, что в него входит. Авторский надзор - это контроль дизайнера за правильным воплощением strong>дизайн проекта интерьера/strong> специалистами по ремонту, отделке. Дизайнер не несет ответственности за качество выполняемых работ и квалификацию специалистов, которых нанимает клиент. Мы можем порекомендовать строительные бригады с квалифицированными мастерами, работа которых прошла без нареканий, чьими услугами остались довольны клиенты. Но качество работ и выбор расходных материалов остается в компетенции специалистов по ремонту./p> p styletext-align:justify>Заказывая авторский надзор, вы получаете помещение таким, каким вы его видели в strong>дизайн проекте интерьера/strong>, а не в возможных вариантах от строителей. Дизайнер тесно работает со строительными бригадами, отвечает на поставленные вопросы, выезжает на объект и следит, чтобы все было выполнено в соответствии с чертежами из проекта. Во время авторского надзора происходит исправление множества ошибок строителей, и они исправляются на начальных этапах, когда еще все возможно исправить. Строительные бригады привыкли работать над типовыми проектами, но когда для клиента подбирают индивидуальный интерьер, когда дизайн прорабатывается до мелочей, они могут не замечать многих нюансов, в результате чего вы получите не то, чего ожидали, именно поэтому заказывают авторский надзор. Если вы цените свое время, не хотите отвечать на постоянные вопросы строителей и приезжать регулярно на объект, мы легко это сделаем за вас!/p> p styletext-align:justify>Узнайте наши a href#!/page_Services titleУслуги дизайнера интерьера>цены/a> на авторский надзор. Авторский надзор, не входит в стоимость strong>дизайн проект интерьера/strong>а, потому что он является процессом контроля над выполнением strong>дизайн проекта интерьера/strong>. Процесс, который зависит от сроков выполнения работ специалистами по ремонту, он оплачивается отдельно. Если вы заказали авторский надзор, то автор вашего strong>дизайн проекта интерьера/strong>, регулярно посещает объект, где он следит за правильным исполнением проекта согласно чертежам (strong>в услуги дизайнера интерьера/strong> не входит ответственность за качество выполняемых работ и квалификацию специалистов нанимаемых клиентом, клиент несет ее сам). Дизайнер отвечает на все вопросы строителей и клиента как вовремя посещений объекта, так и по телефону и не влияет на сроки производимых работ. Если дизайнер сталкивается с ошибками, которые строительные бригады не хотят исправлять, он сообщает об этом клиенту и оставляет на его усмотрение./p> p classpad_bot1>Авторский надзор нужен для тех, кто ценит свое время, любит комфорт и добивается того чего именно он хочет получить. Доверьтесь профессионалам./p> a idpag2>/a> br> br> br> br> br> br> p classpad_bot1>/p> a href#!/page_More titleСтудия дизайн интерьера classbutton1>span>/span>strong>Read More/strong>/a> /div> /div> /div> /div> /div> /li> !--/page_About --> !--page_Services --> li idpage_Services titleЦены дизайн интерьера> div classbox1> div classinner> a href# classclose data-typeclose>span>/span>/a> h2>span>Сколько стоит/span> ваш проект/h2> div classokno> div classwrapper> div classcot> div classcalc3> SCRIPT> function areaRectangle() {var adocument.forma1.t1.value; var b if (10>a){b1600}; if (10a){b1000}; if (30a){b700}; if (50a){b770}; if (100a){b650}; var sa*b; document.forma1.res.values; } /SCRIPT> form classwau nameforma1> p styletext-align:justify>Введите метраж Вашего помещения:/p> input typenumber namet1 size10 placeholderВведите Ваш метраж: autofocus>м2. br /> br /> p stylecolor:#FDBB20>Нажмите кнопку Расчет/p> br /> input typebutton namebut valueРасчет onClickareaRectangle() /> br /> br />Стоимость Вашего дизайн-проекта (руб.) : input typenumber classwauvau typetext nameres size10 /> /form> /div> /div> h3>Услуги нашей студии:/h3> ul classlist2 pad_bot1> li>a href#design titleдизайн проект>Мы создаем дизайн-проекты интерьера жилых и нежилых помещений./a> /li> li>a href#architect titleархитектурный проект>Мы разрабатываем архитектурные проекты./a> /li> li>a href# titleперепланировка интерьера>Перепланировкой помещений./a> /li> li>a href#decor titleдекорирование интерьера>Декорированием помещений./a> /li> li>a href#nadzor titleавторский надзор>Ведем авторский надзор./a> /li> /ul> p classcolor1 pad_bot2> p>strong>Цена дизайн проекта/strong>./p> p styletext-align:justify>Вы думаете, что воспользоваться strong>услугами дизайнера интерьера/strong> могут только богатые люди? Возможно, вы думаете, что это лишняя трата денег и уже готовы на типовой ремонт?/p> p styletext-align:justify>Позвоните нам, наши цены доступны! Если вы цените свое время и требуете индивидуального уюта и комфорта!/p> p styletext-align:justify>strong>Стоимость дизайн проекта/strong> Вашего помещения рассчитывается исходя из нескольких факторов: общая площадь помещения, количество этажей, количество вариантов дизайна, количество правок и изменений предложенного варианта, от всего этого будет зависеть strong>цена дизайн проекта/strong>./p> p styletext-align:justify>У нас работает квалифицированный штат дизайнеров, strong>цена услуги дизайнера интерьера/strong> фиксирована. Для определения примерной strong>стоимости дизайн проекта/strong> можно воспользоваться нашим a href#!/page_kalk titleстоимость дизайна интерьера спб>калькулятором/a>./p> p styletext-align:justify>Мы предоставляем возможность оплачивать дизайн проект поэтапно, равными платежами.strong>Цена дизайн интерьера/strong> при этом не увеличивается./p> p styletext-align:justify>Чем больше площадь помещения, тем ниже strong>цена дизайна проекта/strong>, чем больше вариантов предлагаемого дизайна, и дальнейших поправок, тем strong>стоимость дизайн проекта/strong> выше. Например strong>цена услуги дизайнера интерьера/strong>, из расчета на мsup>2/sup>: квартиры площадью 100 мsup>2/sup> будет стоить 550 р/мsup>2/sup>, а цена для помещения размером 30 мsup>2/sup> будет стоить 750р/мsup>2/sup>. strong>Цена дизайн интерьера /strong> не зависит от выбранной концепции или стиля./p> p styletext-align:justify>Позвоните 982-57-52 или напишите нам на a hrefmailto:info@meesto.ru titleзаказать дизайн проект интерьера спб>info@meesto.ru/a> мы ответим на все интересующие вас вопросы и проконсультируем по strong>стоимости дизайн интерьера/strong>.Вся информация есть в разделе a href#!/page_Contact titleстоимость дизайна интерьера спб>контакты/a> /p> p styletext-align:justify>Стоимость архитектурной части работы зависит от того, какой этажности вы хотите постройку, какой площади, нужен ли вам рабочий проект (со всеми смежниками), либо только эскизный проект, архитектурная часть./p> p styletext-align:justify>Расчет архитектурного проектирования еще более индивидуален, чем расчет strong>стоимости дизайн интерьера/strong>,поэтому, для оценки стоимости вашего архитектурного проекта свяжитесь по телефону, либо по почте с нашими специалистами./p> br> br> br> br> br> br> p classpad_bot1>/p> h2>My Interests/h2> a href#!/page_More titleСтудия дизайн интерьера classbutton1>span>/span>strong>Read More/strong>/a> /div> /div> /div> /div> /li> !--/page_Services --> !--page_News --> li idpage_News titleзаказать дизайнера помещений спб> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> div classwrapper pad_bot3> div classokno> div classwrapper> h2>Новости/h2> div classcol4> ul classlist2> li classmd-trigger data-modalmodal-36>08.03.2018 Поздравляем Вас с Праздником весны! /li> li classmd-trigger data-modalmodal-35>23.02.2018 Уважаемые клиенты и партнеры!Поздравляем с 23 февраля! /li> li classmd-trigger data-modalmodal-34>31.12.2017 Поздравляем Вас с наступающим Новым Годом и Рождеством! /li> li classmd-trigger data-modalmodal-33>08.03.2017 Милые дамы! Поздравляем Вас с наступающим 8 Марта!/li> li classmd-trigger data-modalmodal-32>23.02.2017 Поздравляем Вас С Днем Защитника Отечества!/li> li classmd-trigger data-modalmodal-31>30.12.2016 Поздравляем с наступающим Новым годом и Рождеством./li> li classmd-trigger data-modalmodal-30>18.12.2016 Новогодняя акция Дизайн-проект 400 руб./м2./li> li classmd-trigger data-modalmodal-29>07.12.2016 Подарочные Новогодние сертификаты в продаже./li> li classmd-trigger data-modalmodal-28>10.10.2016 Повышение цен с 1 ноября./li> li classmd-trigger data-modalmodal-27>08.03.2016 Поздравляем Вас с наступающим 8 Марта!/li> li classmd-trigger data-modalmodal-26>25.02.2016 Планировочные решения для Вашей квартиры!/li> li classmd-trigger data-modalmodal-25>23.02.2016 Поздравляем вас с Днем защитника Отечества!/li> li classmd-trigger data-modalmodal-24>18.02.2016 Новая акция! Антикризисное предложение!/li> li classmd-trigger data-modalmodal-23>31.12.2015 Дорогие друзья! Поздравляем Вас с Новым 2016 годом!/li> li classmd-trigger data-modalmodal-1>27.09.2015 Мы переехали в новый офис./li> li classmd-trigger data-modalmodal-2>28.06.2015 Акция полный дизайн-проект от 550 руб/м2./li> li classmd-trigger data-modalmodal-3>08.03.2015 Поздравляем Вас С 8 Марта!/li> li classmd-trigger data-modalmodal-4>23.02.2015 Поздравляем Вас С Днем Защитника Отечества!/li> li classmd-trigger data-modalmodal-5>31.12.2014 Примите наши искренние поздравления с Новым 2015-м годом!/li> li classmd-trigger data-modalmodal-6>12.12.2014 Елка для авангардиста (Интервью с нами в новом выпуске журнала Free-тайм)/li> li classmd-trigger data-modalmodal-7>11.10.2014 Дизайн-студия Mesto проводит набор на курсы по дизайну интерьера./li> li classmd-trigger data-modalmodal-8>07.10.2014 Готическое настроение(Интервью с нами в новом выпуске журнала Free-тайм)./li> li classmd-trigger data-modalmodal-9>04.08.2014 Детское царство (Интервью с нами в новом выпуске журнала Free-тайм)./li> li classmd-trigger data-modalmodal-10>30.06.2014 Интервью с нами в новом выпуске журнала Free-тайм (Жизнь под крышей)./li> li classmd-trigger data-modalmodal-11>25.03.2014 Акция Дизайн отеля./li> li classmd-trigger data-modalmodal-12>11.03.2014 Наш форум по дизайну интерьера обновлен!/li> li classmd-trigger data-modalmodal-13>08.03.2014 Мы поздравляем Вас с Восьмым Марта!/li> li classmd-trigger data-modalmodal-14>15.12.2013 Мы переехали в новый офис!/li> li classmd-trigger data-modalmodal-15>23.09.2013 Получите скидку в 5% до 11.11.2013/li> li classmd-trigger data-modalmodal-16>01.09.2013 Поздравляем с Праздником Акция С 1 сентября!!/li> /ul> /div> div classcol1 pad_left1> ul classlist2> li classmd-trigger data-modalmodal-17>31.07.2013 1 августа у нас стартует акция 600 рублей за метр квадратный!/li> li classmd-trigger data-modalmodal-18>20.06.2013 Сформируй сам свой дизайн интерьера!/li> li classmd-trigger data-modalmodal-19>04.06.2013 Добавлен блок Часто задаваемые вопросы/li> li classmd-trigger data-modalmodal-20>05.03.2013 У нас появилась форма Заказать бесплатный звонок!/li> li classmd-trigger data-modalmodal-21>18.07.2013 У нас заработал форум в тестовом режиме./li> li classmd-trigger data-modalmodal-22>22.05.2013 С 1 июля у нас стартует акция Дизайн магазина./li> /ul> /div> div classmd-modal md-effect-1 idmodal-1> div classmd-content> h3>27.09.2015 Мы переехали в новый офис./h3> div> p>Мы переехали, и теперь наш офис находится по адресу:199178, Санкт-Петербург, Аптекарская наб., 12. Здесь мы более транспортно доступны, и Вам до нас удобно добраться из Любой Точки города. br>Ждем всех в гости. br> img srcimages/pereezd.png titleМалый проспект 58 студия дизайн интерьера место altМалый проспект 58 студия дизайн интерьера место /> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-2> div classmd-content> h3>28.06.2015 Акция полный дизайн-проект от 550 руб/м2./h3> div> p>Мы проводим акцию на помещения с площадью от 100 м2 полный дизайн-проект составит 550 руб/м2. Сроки проведения акции ограничены до 15.11.2015. Подробности по телефону 8 (812) 982-57-52. br> img srcimages/akcia.jpg titleцена дизайнера интерьера спб altАкции дизайн интерьера /> br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-3> div classmd-content> h3>08.03.2015 Поздравляем Вас С 8 Марта!/h3> div> p>Примите наши искренние пожелания любви, весеннего настроения, счастья и благополучия. Поздравляем Вас С 8 Марта! Примите наши искренние пожелания любви, весеннего настроения, счастья и благополучия. br> img src/images/8marta.jpg titleцена дизайнера интерьера спб altпраздник дизайн интерьера /> br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-4> div classmd-content> h3>23.02.2015 Поздравляем Вас С Днем Защитника Отечества!/h3> div> p>Желаем Вам жизненных сил и ярких побед! Поздравляем Вас С Днем Защитника Отечества! Желаем Вам жизненных сил и ярких побед!! br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-5> div classmd-content> h3>31.12.2014 Примите наши искренние поздравления с Новым 2015-м годом!/h3> div> p>Студия Интерьера «Mesto», спешит поздравить всех С Наступающим Новым Годом!! Дорогие друзья!Примите наши искренние поздравления с Новым 2015-м годом!Нашим клиентам, партнерам и коллегам мы желаем крепкого здоровья, большого семейного счастья, повышения благосостояния, замечательных друзей и скорейшего воплощения в реальность всех Ваших планов и идей! Искренне ваши, сотрудники Студии Интерьера «Mesto» br> br> img srcimages/ng.jpg titleстоимость дизайна интерьера спб altновый год дизайн интерьера /> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-6> div classmd-content> h3>12.12.2014 Елка для авангардиста (Интервью с нами в новом выпуске журнала Free-тайм)/h3> div> p>Читайте полностью br>интервью с нами в новом выпуске br>журнала Free-тайм (Елка для авангардиста). Автор Наталья br>Белая.Декабрь.Журнал Free-тайм. br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-7> div classmd-content> h3>11.10.2014 Дизайн-студия Mesto проводит набор на курсы по дизайну интерьера./h3> div> p>Сроки проведения - январь, набор уже начался. Будут вечерние (с 20:00) и дневные группы (с 12:00). Время еще будет уточняться. Лекции будут проходить дважды в неделю, в центре города, по адресу : Апраксин пер. д.4 (м.Садовая).Всю подробную информацию по курсам, Вы можете уточнить по телефону +7(812)982-57-52. Наша группа http://vk.com/coursesinterior Наш сайт www.meesto.ru Наши дизайнеры br> br>- это профессионалы с профильным дизайнерским образованием, с большим объемом реализованных объектов.Чему мы научим Вас на наших курсах: br> br>- Вы увидите полный цикл создания дизайн-проекта от макета до полной его реализации, br> br>- Вы сможете сделать проект своей квартиры, br> br>- Вы сможете побывать на стройке, где проводятся отделочные работы по нашим проектам, посмотреть процесс воплощения проекта в реальность, br> br>- Вы получите возможность посетить поставщиков современных отделочных материалов (мебели,сантехнической фурнитуры,напольных и настенных покрытий и тд.), которые ознакомят Вас с новинками своего ассортимента. br> br>- получить каталоги и образцы современных материалов отделки, br> br>- научиться вести переговоры с реальными заказчиками. br> br>С 25 октября по 25 ноября действует скидка 15% на курсы по дизайну интерьера. Со скидкой цена составит 9 350 руб Цена без скидки 11 000 руб br> br>Также мы производим набор на курсы по созданию интерьера в 3d, в программе 3D Studio Max. Стоимость курсов 12 000 руб.В программу курсов по 3D интерьеру входит: br> br>- обучение построению интерьеров с нуля, br>- создание реалистичного освещения, br>- моделирование предметов интерьера br>- работа с каталогами br>- работа с текстурированием br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-8> div classmd-content> h3>07.10.2014 Готическое настроение(Интервью с нами в новом выпуске журнала Free-тайм)./h3> div> p>На хеллоуин принято оформлять жилье всевозможными “готическими” страшилками: расставлять на окнах тыквы, раскладывать на стульях пауков и гроздьями вывешивать летучих мышей над входом. Между тем к реальной готике все это не имеет ровным счетом никакого отношения. О том, как создать подлинно готический интерьер, рассказывает дизайнер интерьеров, эксперт мастерской интерьера и архитектуры Mesto.Читайте полностью интервью с нами в новом выпуске журнала Free-тайм (Готическое настроение). Автор Наталья Белая.Октябрь.Журнал Free-тайм. br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-9> div classmd-content> h3>04.08.2014 Детское царство (Интервью с нами в новом выпуске журнала Free-тайм)./h3> div> p>Оформление детской – сверхответственная задача. От родителей требуется на время забыть о собственных вкусах и дизайнерских амбициях, сосредоточившись на том, что нужно ребенку. Как сориентироваться в многообразии решений, не потеряв при этом собственный курс, рассказывает дизайнер интерьеров, эксперт мастерской интерьера и архитектуры Mesto Читайте полностью интервью с нами в новом выпуске br>журнала Free-тайм (Жизнь под крышей). Автор Наталья br>Белая.Август.Журнал Free-тайм. br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-10> div classmd-content> h3>30.06.2014 Интервью с нами в новом выпуске журнала Free-тайм (Жизнь под крышей)./h3> div> p>Расширить жилое пространство за счет квадратных метров, br>расположенных под крышей дома или таунхауса, – идея более чем br>пленительная. Читайте полностью интервью с нами в новом выпуске br>журнала Free-тайм (Жизнь под крышей). Автор Наталья br>Белая.Июль.Журнал Free-тайм. br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-11> div classmd-content> h3>25.03.2014 Акция Дизайн отеля./h3> div> p> p>Закажите у нас дизайн интерьера для гостиницы,отеля или хостела с 01.04.2014 по 14.04.2014 и получите скидку 10%.Так же Вы можете оставить заявку и Ваша скидка зафиксируется до 01.09.2014 Подробности акции по телефону 8(812)982-57-52.Срок действия до 14.04.2014 br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-12> div classmd-content> h3>11.03.2014 Наш форум по дизайну интерьера обновлен!/h3> div> p>Мы обновили наш форум по дизайну интерьера, добавили чат. Теперь еще удобнее общаться и задавть вопросы! Мы обновили наш форум по дизайну интерьера, добавили чат. Теперь еще удобнее общаться и задавть вопросы! Добавили раздел Реклама.Подробнее смотрите в разделе Полезная информация br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-13> div classmd-content> h3>08.03.2014 Мы поздравляем Вас с Восьмым Марта!/h3> div> p>Становитесь еще прекраснее в новом интерьере! Только 11 и 12 марта закажите у Нас дизайн интерьера и получите скидку 8%. Мы поздравляем Вас с Восьмым Марта! Становитесь еще прекраснее в новом интерьере! Только 11 и 12 марта закажите у Нас дизайн br>интерьера и получите скидку 8%. br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-14> div classmd-content> h3>15.12.2013 Мы переехали в новый офис!/h3> div> p> p>Приглашаем в гости в наш новый офис по адресу : В.О.,Кожевенная линия, 34. Получите бесплатную консультацию только до 31.12.2013. В офисе представлено множество отделочных материалов, будьте в курсе всех новых тенденций! Предварительно согласовывайте встречу с Нашими дизайнерами по телефону +78129825752. br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-15> div classmd-content> h3>23.09.2013 Получите скидку в 5% до 11.11.2013/h3> div> p> p>Оформите заявку на дизайн интерьера до 11.11.2013 с нашего сайта www.meesto.ru и получите скидку 5%.О полученной скидке уточняйте по телефону. Оформите заявку на дизайн интерьера до 11.11.2013 с нашего сайта www.meesto.ru и получите скидку 20%.О полученной скидке уточняйте по телефону. img srcimages/5proc.png titleстоимость дизайна интерьера спб altАкции скидки дизайн интерьера /> br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-16> div classmd-content> h3>01.09.2013 Поздравляем с Праздником Акция С 1 сентября!!/h3> div> p> p>Акция С 1 сентября!! Поздравляем всех школьников с 1 сентября! И спешим обрадовать их родителей,весь месяц при заказе у нас дизайна интерьера квартиры,интерьер детской - будет бесплатным!! br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-17> div classmd-content> h3>31.07.2013 1 августа у нас стартует акция 600 рублей за метр квадратный!/h3> div> p> p>С 1 августа у нас стартует акция 600 рублей за метр квадратный! Мы считаем Ваши метры!С 1 августа и до конца месяца дизайн интерьера Вашей жилой площади обойдется Вам еще дешевле!! Подробности акции по телефону. br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-18> div classmd-content> h3>20.06.2013 Сформируй сам свой дизайн интерьера!/h3> div> p> p>Мы добавили для сайт демо-версии программ по дизайну интерьера! Мы выложили демо-версии различных программ, с официальных сайтов разработчиков, что бы немного развлечь Вас, предоставив возможность попробовать самим создать свой интерьер. Надеемся Вам понравится!Смотрите в разделе Клиентам. br> br>С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-19> div classmd-content> h3>04.06.2013 Добавлен блок Часто задаваемые вопросы/h3> div> p> p>Мы собрали все интересующие вас вопросы и разместили ответы на нашем сайте. Популярные вопросы от наших клиентов - теперь в одном блоке на нашем сайте в разделе Клиентам br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-20> div classmd-content> h3>05.03.2013 У нас появилась форма Заказать бесплатный звонок!/h3> div> p> p>Теперь Вы можете не тратить время на то что бы связаться с нами,оставьте свой телефон и мы сами перезвоним в удобное для Вас время!Форма Заказать бесплатный звонок расположена на каждой странице сайта справа! br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-21> div classmd-content> h3>18.07.2013 У нас заработал форум в тестовом режиме./h3> div> p> p>Поздравляем!Общение с нами стало еще легче! У нас заработал форум в тестовом режиме.Смотрите в разделе Клиентам br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-22> div classmd-content> h3>22.05.2013 С 1 июля у нас стартует акция Дизайн магазина./h3> div> p> p>С 1 июля у нас стартует акция Дизайн магазина. Закажите у нас интерьер своей торговой площади, и мы вас уверяем ваш новый дизайн магазина не оставит равнодушным вашего клиента! Подробности акции по телефону. br> img srcimages/mag.png titleмагазин дизайн интерьера altмагазин дизайн интерьера /> br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-23> div classmd-content> h3>31.12.2015 Дорогие друзья! Поздравляем Вас с Новым 2016 годом!/h3> div> p> p>Год Огненной Обезьяны — это год активности и жизнелюбия. Мы знаем, что он не будет простым, но мы также знаем, что если мы используем все благоприятные возможности, проявим выдержку и терпение, успех обязательно придет! br> img srcimages/ng2.jpg titleпраздник дизайн интерьера altпраздник дизайн интерьера /> br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-24> div classmd-content> h3>16.02.2016 Дождались! Новая акция!/h3> div> p> p>Антикризисное предложение включает в себя 4 варианта планировки, наброски и подбор отделочных материалов с указанием артикулов товаров.Стоимость такого проекта всего 300 руб/м2. br> img srcimages/wowmeestoru.png titleАкции дизайн интерьера altАкции дизайн интерьера /> br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-25> div classmd-content> h3>23.02.2016 Поздравляем Вас с Праздником!/h3> div> p> p>Дорогие друзья! Поздравляем вас с Днем защитника Отечества! br> img srcimages/23MEESTO.jpg titleстоимость дизайна интерьера спб altпраздник дизайн интерьера /> br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-26> div classmd-content> h3>25.02.2016 Планировочные решения для Вашего помещения!/h3> div> p> p>Мы вводим новый вид услуги - планировочные решения.Пять вариантов планировочных решений от 100руб/м2! Вы получаете обмерный план,планировочное решение,вариант расстановки мебели и дополнительные скидки на отделочные материалы.Подробнее об акции узнавайте по телефону. br> img srcimages/planirovkameesto.jpg titleакция дизайн интерьера altакци дизайн интерьера /> br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-27> div classmd-content> h3>08.03.2016 Поздравляем вас с наступающим 8 Марта!/h3> div> p> p>Милые дамы! Примите наши самые искренние поздравления с женским днём 8 Марта и позвольте от имени коллектива всей нашей компании пожелать Вам здоровья, успехов в делах и счастья в личной жизни. br> img srcimages/8martameesto2.jpg titleстоимость дизайна интерьера спб altакци дизайн интерьера /> br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-28> div classmd-content> h3>10.10.2016 Уведомляем о повышении цен с 01.11.2016г./h3> div> p> p>На все договоры заключенные с 1 ноября 2016г. будет действовать новый прайс,за изменением цен следите на сайте. Договоры, заключенные до 1 ноября 2016 года, продолжают действовать на прежних условиях.Рассчитать проект по новой цене,Вы сможете с указанной даты.Все цены на сайте актуальны. br> img srcimages/rost22.png titleакция дизайн интерьера altакци дизайн интерьера /> br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-29> div classmd-content> h3>07.12.2016 Подарочные Новогодние сертификаты в продаже./h3> div> p> p>До Нового Года осталось 24 дня и многие еще не выбрали подарки своим любимым,родным и близким!🎁🎁🎁 Легко делать подарки с помощью Подарочных сертификатов от Студии Интерьера Место! 😊 br> br>💌Сертификат Консультация дизайнера интерьера 1500 руб. У вас есть вопросы по дизайну интерьера, но полный проект вам не нужен? У нас есть решение для вас- разовая консультация дизайнера ! Что может представлять из себя консультация? * Подборка стилистики, цветов, материалов отделки прямо на объекте. Обсуждение декоративных элементов, прорисовка и подбор деталей интерьера , предметов мебели.. *Решение технических вопросы. Размещение различных коробов, подиумов, ниш, оборудования, различные функциональные решения. br> br>💌Сертификат Планировочное решение для Вашей квартиры 4000 руб. Планировочные решения для вашей квартиры.Несколько вариантов планировки вашей квартиры,расстановка мебели.Также предоставим и скидки на отделочные материалы от наших партнеров. br> br>💌Сертификат Надзор дизайнера за ремонтом 8000 руб. Контроль исполнения отделочных работ, один раз в неделю выезд на объект, выезды с дизайнером в магазины отделочных материалов с целью закупки , либо просто консультации. Магазины могут быть предложены нами ( в рамках партнерской программы) , а так же могут быть выбраны вами. Длительность 1 месяца, с возможным продлением за доп.плату. br> br>💌Сертификат Дизайнера интерьера детской 8 000 руб. Индивидуальный дизайн проект детской, процесс разработки меньше месяца.Состав дизайн-проекта: планировочные решения с расстановкой мебели,зонированием, визуализация 3D, чертежи,а так же подбор материалов и мебели. br> br>💌Сертификат Дизайнера интерьера комнаты 10 000 руб. Индивидуальный дизайн проект комнаты (кроме детской), процесс разработки меньше месяца.Состав дизайн-проекта: планировочные решения с расстановкой мебели,зонированием, визуализация 3D, с несколькими цветовыми решениями,чертежи,а так же подбор материалов и мебели.Предоставим скидки на отделочные материалы от наших партнеров. Дорогие клиенты, в нашем офисе Вы можете приобрести новогодние подарочные сертификаты на разные суммы!!! Подарите любимым красоту!! ☎Заказывайте: 88129825752 или 89052225752 br> img srcimages/stop2.jpg titleдизайнеры интерьера спб altсертификат дизайн интерьера /> br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-30> div classmd-content> h3>18.12.2016 Новогодняя акция Дизайн-проект 400 руб./м2./h3> div> p> p>У нас началась Новогодняя акция Дизайн-проект 400 руб./м2 В данную стоимость войдет : несколько вариантов планировок, наброски интерьера от руки, комплект рабочих чертежей и подбор отделочных материалов.Акция продлиться до конца новогодних праздников.Успейте заказать дизайн Вашего интерьера, по выгодной цене! ☎Заказывайте: 88129825752 или 89052225752 br> img srcimages/baner400.jpg titleдизайнеры интерьера спб altдизайн проект 400 руб/м2 /> br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-31> div classmd-content> h3>30.12.2016 С наступающим Новым годом!/h3> div> p> p>Дорогие друзья, примите искренние поздравления с наступающим Новым годом и Рождеством — самыми светлыми, любимыми и желанными праздниками!Наша компания спешит поздравить Вас с Новым годом! Надеемся, что год огненного Петуха принесет большой запас энергии, зарядит оптимизмом, даст возможность начать движение к новым успехам и воплотить самые заветные мечты. Нашим клиентам, партнерам и коллегам мы желаем, чтобы год был насыщен творческими идеями, радостными событиями и хорошими новостями!Пусть будущий год откроет для Вас новые горизонты, а рядом всегда будут любимая семья, верные друзья и надежные партнеры. Всего наилучшего Вам и Вашей семье. Очень рады, что Вы доверили свои интересы нашим сотрудникам. Благодарим за то, что Вы с нами и надеемся, что Вы будете по-настоящему счастливы в каждый из дней 2017 года! br> img srcimages/NNNGGG2.png titleдизайнеры интерьера спб altдизайн проект 400 руб/м2 /> br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-32> div classmd-content> h3>23.02.2017 Поздравляем Вас С Днем защитника Отечества/h3> div> p> p>Дорогие друзья! Поздравляем С Днем защитника Отечества наших уважаемых клиентов, партнеров и коллег! br> img srcimages/banermesto2333.jpg titleдизайнеры интерьера спб altдизайн проект праздник /> br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-33> div classmd-content> h3>08.03.2017 Милые дамы! Поздравляем Вас с наступающим 8 Марта!/h3> div> p> p>Дорогие дамы, поздравляем Вас с празником весны!Мы очень дорожим дружбой с Вами и желаем в этот день: счастья, здоровья, любви, весеннего настроения, внимания и заботы мужчин,побольше радостных минут! Пусть в вашей жизни приумножаются красота, доброта, и любовь. Пусть вас окружают забота и внимание. Будьте здоровы, красивы и вечно молоды! br> img srcimages/8marta_meesto.jpg titleдизайнеры интерьера спб altдизайн проект праздник /> br> br>.С уважением, br>Мастерская Архитектуры и Дизайна ООО Mesto. br>www.meesto.ru br> br>+7(812)982-57-52 br>+7(905)23-23-478/p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-34> div classmd-content> h3>31.12.2017 С наступающим Новым годом!/h3> div> p>p>Дорогие друзья! Поздравляем вас с Новым 2018 годом! Компания «Mesto» от души поздравляет вас с наступающим Новым годом и Рождеством! Пусть Новый год принесет вам благополучие и уверенность в завтрашнем дне. Пусть он добавит стабильности, успехов и удачи! Пусть Новый год наполнит ваши дома новогодним настроением и необыкновенным теплом среди зимы. Будьте согреты любовью, заботой и пониманием! Благодарим за то, что вы с нами! Желаем процветающего и уютного Нового года! br>img srcimages/sobaka.jpg titleдизайнеры интерьера спб altдизайн проект 400 руб/м2/>br>br>.С уважением,br>Мастерская Архитектуры и Дизайна ООО Mesto.br>www.meesto.rubr>br>+7(812)982-57-52br>+7(905)23-23-478 /p> button classmd-close>ЗАКРЫТЬ/button> /div> /div>/div>div classmd-modal md-effect-1 idmodal-35> div classmd-content> h3>23.02.2018 Поздравляем с 23 февраля!/h3> div> p>p>Уважаемые клиенты и партнеры! Поздравляем Вас с 23 февраля! Желаем Вам смело преодолевать любые препятствия,быть отважными, достигать поставленных целей и совершать новые подвиги! br>img srcimages/23mesto.png titleдизайнеры интерьера спб altдизайн проект 400 руб/м2/>br>br>.С уважением,br>Мастерская Архитектуры и Дизайна ООО Mesto.br>www.meesto.rubr>br>+7(812)982-57-52br>+7(905)23-23-478 /p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> div classmd-modal md-effect-1 idmodal-36> div classmd-content> h3>08.03.2018 Поздравляем с Праздником Весны!/h3> div> p>p>Уважаемые клиенты и партнеры! Поздравляем Вас с 8 марта!!Желаем Вам здоровья,радости,весеннего тепла и лучезарных улыбок!Пусть каждый день наполняется яркими событиями и позитивными эмоциями! br>img srcimages/8mesto.jpg titleдизайнеры интерьера спб altдизайн проект 400 руб/м2/>br>br>.С уважением,br>Мастерская Архитектуры и Дизайна ООО Mesto.br>www.meesto.rubr>br>+7(812)982-57-52br>+7(905)23-23-478 /p> button classmd-close>ЗАКРЫТЬ/button> /div> /div> /div> /div> /div> /div> /div> /div> /li> !--/page_News --> !--page_MoreInf --> li idpage_MoreInf titleВопросы дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> div classwrapper pad_bot3> h2>Полезная информация/h2> div classcol11> ul classlist2> li>a href#!/page_voprosi titleЧастые вопросы дизайн интерьера>Частые вопросы/a> /li> li>a href#!/page_opros titleОпросы дизайн интерьера>Опросы/a> /li> li>a hrefhttp://meesto.ru/forum/index.php titleФорум дизайн интерьера>Форум/a> /li> li>a href#!/page_test titleтесты дизайн интерьера>Тесты/a> /li> li>a href#!/page_Publ titleСтатьи дизайн интерьера>Публикации в журналах/a> /li> li>a href#!/page_staty titleполезные статьи интерьеры>Полезные статьи/a> /li> li>a href#!/page_program titleпрограммы интерьера>Программы для интерьера/a> /li> li>a href#!/page_kalk titleкалькулятор дизайн проекта>Калькулятор/a> /li> /ul> /div> div classcol11 pad_left1> ul classlist2> li>a href#!/page_akcii titleакции дизайн интерьера>Акции/a> /li> li>a href#!/page_what titleзадать вопрос дизайнеру интерьера>Задать ворос дизайнеру/a> /li> /ul> /div> /div> div classokno> h2>Нашим Клиентам/h2> p styletext-align:justify>Мы решили предложить Вам информационно-развлекательные разделы,в которых вы сможете подчерпнуть необходимую информацию и получит ответы на интересующие вас вопросы.а так же поучаствовать в тестах и опросах./p> /div> /div> /div> /li> !--/page_MoreInf --> !--page_what --> li idpage_what titleвопрос дизайнера интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Задай свой вопрос профессионалам./h2> p stylecolor:#FFB500;text-align:justify;>Задайте вопрос дизайнеру,для этого воспользуйтесь формой, которая расположена ниже./p> IFRAME srcmail.php titleЗадай свой вопрос профессионалам stylemargin: 0 auto; overflow: scroll; width: 650px; height: 500px;>/IFRAME> /div> /div> /li> !--/page_what --> !--page_Publ --> li idpage_Publ titleСтатьи дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> div classwrapper pad_bot3> h2>Публикации о наших дизайнерах в прессе./h2> div classcol1> ul classlist2> li>a href#!/page_Publ1 titleСтатья дизайн интерьера>Жизнь под крышей./a> /li> li>a href#!/page_Publ2 titleстатья дизайн интерьера>Детское царство./a> /li> li>a href#!/page_Publ3 titleстатья дизайн интерьера>Готическое настроение./a> /li> li>a href#!/page_Publ4 titleСтатья дизайн интерьера>Елка для авангардиста./a> /li> li>a href#!/page_Publ5 titleСтатья дизайн интерьера>Особенности национальной охоты/a> /li> /ul> /div> /div> /div> /div> /li> !--/page_Publ --> !--page_Publ1 --> li idpage_Publ1 titleСтатьяя дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Публикации о наших дизайнерах в прессе./h2> div classokno> div classwrapper> figure classleft marg_right1> img srcimages/page2_img1.jpg titleСтудия дизайн интерьера altСтудия дизайн интерьера> /figure> div stylecolor:#FFB500> h3>br>strong>a hrefhttp://spb.freetime.ru/comfort/comfort/195/jizn-pod-kryshei.html#/0 titleСтудия дизайн интерьера styletext-decoration: none;>Журнал FreeТайм, июль 2014, автор Наталья Белая./a>/strong>br>/h3> /div> p stylecolor:#000000>Публикации о наших дизайнерах в прессе./p> br> br> h2>Жизнь под крышей./h2> p styletext-align:justify>strong> Расширить жилое пространство за счет квадратных метров, расположенных под крышей дома или таунхауса, – идея более чем пленительная. Между тем, грамотно декорировать мансардное помещение, по сути, не приспособленное для жизни, порой оказывается очень непросто. Об особенностях “жизни под крышей”, а также о том, как избежать разочарований при оформлении мансард, читателям “FREE ТАЙМ” рассказала дизайнер интерьеров, эксперт мастерской интерьера и архитектуры Mesto Евгения Чебыкина.br>/strong> br> p stylecolor:#FFB500>– Евгения, в чем для дизайнера заключаются основные сложности при работе с мансардой? br> br> /p> p styletext-align:justify>– Во-первых, в большинстве мансард присутствует стропильная конструкция. Ее, конечно, можно зашить, однако полностью спрятать несущие элементы все равно не удастся. Поэтому “архитектурные кости” сегодня все чаще становятся ярким акцентом в оформлении пространства: стропила, к примеру, можно пройти морилкой, подчеркнув таким образом их фактуру и особенности самого помещения. Пусть мансарда остается мансардой, незачем лишать ее шарма, превращая в обычную, лишенную оригинальности комнату-коробку. Еще один нюанс мансарды – своеобразный “климат”. Из-за того, что помещение расположено прямо под кровлей, в мансарде бывает крайне жарко и солнечно, могут присутствовать излишние испарения. Проблема решается с помощью современных систем кондиционирования и штор типа “блэкаут”. Особенно это актуально в том случае, когда окна мансарды выходят на восток и крыша нагревается мгновенно./p> br> br> p stylecolor:#FFB500>– Какие стили чаще всего используют для оформления мансард? br> /p> p styletext-align:justify>– Конечно, есть клиенты, которые приемлют только классику и хотят в мансарде исключительно лепнину и балдахины… Но в целом я бы сказала, что владельцы мансард сейчас в основном исходят из возможностей помещения, а не из желания воспроизвести какой-то определенный стиль. Из-за небольших размеров мансарды они чаще всего выбирают светлую и легкую мебель (чисто белую или цвета дуба), на полу же оставляют фактурные доски. В целом это можно назвать скандинавским стилем. Хочу подчеркнуть, что в отличие от других помещений, в которых белый цвет может выглядеть холодно и даже казенно, в мансарде он более чем уместен. Свет из-за расположения окон и стропильных конструкций падает и преломляется здесь таким образом, что белый кажется уютным и теплым. А вот использовать темные цвета, скажем, венге, я бы советовала, только если площадь мансарды действительно велика. Исключением, пожалуй, может стать декор, выполненный из дорогих, роскошных пород темного дерева, – в этом случае роскошная фактура украсит даже небольшое помещение, сделав его более выразительным. При оформлении мансард сегодня активно используется и так называемый деревенский стиль, для которого характерны древесная фактура, цветочный орнамент и даже кованые элементы. При этом дорогие породы дерева иногда заменяют более дешевой вагонкой, которую очень легко задекорировать./p> br> br> p stylecolor:#FFB500>– Под какие нужды чаще всего используется мансарда? br> /p> br> p styletext-align:justify>– В основном в мансарде размещают спальни и ванные комнаты, поскольку это непроходное помещение, изолированное от посторонних глаз. Несмотря на особенности мансарды (скошенные стены), спальня при этом все равно может быть обставлена привычным образом. Разместить в мансарде кровать, тумбы, шкафы и полки можно, либо зашив скаты, либо заказав мансардную мебель специально для вашего проекта по индивидуальным эскизам. Другой вариант – выбор в пользу минимализма. В этом случае число предметов мебели сводится к минимуму, а кровать располагается в центре помещения. Отдельно приходится решать вопрос с размещением санузла. Дробить и без того небольшое пространство мансарды глухой стеной – не самый удачный вариант. В качестве альтернативы можно воспользоваться приемом калифорнийского дизайна и отделить ванную стеклянной перегородкой, скрыв унитаз за тонированным стеклом. В этом случае ванна будет просматриваться, но так как, повторюсь, мансардное помещение изолировано от посторонних глаз и предназначено для пользования одного или двух человек, это вполне уместно. Говоря о ванной в мансарде, приходится учитывать и то, что краска на стенах, сколь бы качественной она ни была, при постоянном контакте с водой может разрушаться. Это дает еще один повод пофантазировать. Мы, например, в одном из проектов ту часть стены, которая соприкасалась с ванной, оформили мозаикой. Продублировав мозаику в декоре, скажем, обрамив ею мансардные окна, можно получить очень необычный интерьер./p> br> br> p stylecolor:#FFB500>– Что кроме ванной и спальни может располагаться под крышей? br> /p> br> p styletext-align:justify>– Из-за изолированности помещения здесь охотно размещают рабочие кабинеты. Не менее распространенный вариант – каминный зал. Однако надо иметь в виду, что поставить в мансарде полноценный, тяжелый камин не всегда возможно, поскольку под него обязательно должен быть фундамент, которого на мансардном этаже обычно нет. В качестве альтернативы можно использовать декоративные стилизованные “буржуйки” – их перекрытие вполне выдержит. Интересно, что дымоход при этом не заделывают, либо затирая, либо просто крася кирпич в светлый цвет./p> br> br> p stylecolor:#FFB500>– С какими ошибками в оформлении мансард вам приходилось сталкиваться? br> /p> br> p styletext-align:justify>– Самая распространенная история – мансарда, обшитая, как коробка, горизонтальной желтой вагонкой. Оживить такое пространство, впрочем, довольно просто. Достаточно покрасить в светлые тона и “затереть” стены, накидать подушек, добавить приятного текстиля – и помещение заиграет по-новому./p> br> br> p stylecolor:#FFB500>– Важно ли освещение? br> /p> br> p styletext-align:justify>– Важно, особенно если расстояние до конька велико. В этом случае под потолком как бы скапливается темнота, отчего в помещении становится неуютно. Проблема решается с помощью светильников, которые при желании можно даже скрыть от глаз, разместив их на стропильных конструкциях и направив вверх. Остальное помещение украсят расставленные на разных уровнях светильники оригинальных форм и размеров, которые позволят выделить те или иные зоны и создать атмосферу уюта и уединения./p> p stylealign:right> br> br> br> br> br> br> br> /p> p classpad_bot1>/p> /div> /div> /div> /div> /li> !--/page_Publ1 --> !--page_Publ2 --> li idpage_Publ2 titleСтудия дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Публикации о наших дизайнерах в прессе./h2> div classokno> div classwrapper> figure classleft marg_right1> img srcimages/page2_img1.jpg titleСтудия дизайн интерьера altСтудия дизайн интерьера> /figure> div stylecolor:#FFB500> h3>br>strong>a hrefhttp://spb.freetime.ru/comfort/comfort/196/detskoe-carstvo.html#/0 titleСтудия дизайн интерьера styletext-decoration: none;>Журнал FreeТайм, август 2014, автор Наталья Белая./a>/strong>br>/h3> /div> p stylecolor:#000000>Публикации о наших дизайнерах в прессе./p> br> br> h2>Детское царство./h2> p styletext-align:justify>strong> Оформление детской – сверхответственная задача. От родителей требуется на время забыть о собственных вкусах и дизайнерских амбициях, сосредоточившись на том, что нужно ребенку. Как сориентироваться в многообразии решений, не потеряв при этом собственный курс, рассказывает дизайнер интерьеров, эксперт мастерской интерьера и архитектуры Mesto Евгения Чебыкина.br>/strong> /p> br> p stylecolor:#FFB500>– С чего следует начинать оформление детской комнаты? br> br> /p> p styletext-align:justify>– С выбора цвета. Цветовое решение играет без преувеличения огромную роль в создании пространства, комфортного для ребенка. При этом важно учитывать его возраст: к примеру, малышу до 5 лет сложно воспринимать яркие оттенки, так что вопреки стремлению многих родителей сделать “веселенькую” детскую кричащих цветов и излишне активных орнаментов лучше избегать. Вместо этого имеет смысл отдать предпочтение мягким пастельным, особенно природным тонам: зеленому, голубому, бежевому... По-прежнему остаются родители, которые стремятся декорировать комнату “по половому признаку”, оформив ее исключительно в розовых или голубых цветах, но, надо сказать, в последнее время такая тенденция идет на спад…/p> br> br> p stylecolor:#FFB500>– Когда нужно “обновлять” интерьер, чтобы он не отставал от детских потребностей? br> /p> br> p styletext-align:justify>– Я бы условно поделила “возраст” детского интерьера на три основных этапа: “от 0 до 5”, “от 5 до 12–14” лет и “комната для подростка”. На первом этапе внимание стоит уделить зонированию, предусмотрев зону для игр, сна и переодевания. Неплохо поместить в детской столик, стул и доску для рисования, чтобы в перспективе избежать “художеств” на стенах. Когда ребенок станет старше, эти зоны закономерно расширятся. Для подростков старшего школьного возраста придется привести интерьер в соответствие с его интересами, увлечениями и хобби, желательно взяв его самого в союзники. Не секрет, что правильно созданный интерьер вполне способен влиять на дальнейшую жизненную позицию ребенка. Так, если он увлекается авиамоделированием, имеет смысл это культивировать, установив стеллажи для моделей. Или, например, расставить на полках книги, чтобы актуализировать интерес подростка к чтению. Суть в том, что пространство должно быть наполненным, призывать ребенка к чему-то, развивать его. Потому стратегической интерьерной ошибкой становится выбор для детской комнаты аскетичного “взрослого” интерьера, скрывающего все детали от пыли за лакированными поверхностями, лишенными даже фурнитуры. Это не оставляет ребенку ни простора для фантазии, ни повода пофантазировать./p> br> br> p stylecolor:#FFB500>– Наверное, идеальным решением можно назвать тематическую комнату? br> /p> br> p styletext-align:justify>– Действительно, сегодня родители не отказывают детям в удовольствии прожить пару лет в покоях принцессы, на пиратском корабле или в комнате настоящего лихого гонщика. Правда, такие проекты оказываются дорогостоящими, поскольку в большинстве случаев мебель и элементы декора выполняются под заказ. Стоит учитывать и то, что век подчеркнуто тематической комнаты сравнительно недолог, и если интерьер нейтральной детской можно актуализировать при минимуме затрат, тематическую обстановку через несколько лет в любом случае придется менять полностью./p> br> br> p stylecolor:#FFB500>– Разобравшись с цветом и тематикой, родителям предстоит выбрать мебель. Какие рекомендации дизайнеры дают в этом случае? br> /p> br> p styletext-align:justify>– Для малышей советую покупать специальную детскую мебель, благо ассортимент и ценовой диапазон производителей из России, Америки сегодня крайне широки. Достоинство их коллекций в том, что при создании предметов мебели учитываются особенности ребенка: маленький рост, короткие ручки и так далее. Кроме того, такая мебель делается исключительно из экологичных материалов и имеет скругленные углы, что снижает риск травматизма. “Своя” мебель есть и у подростков. В основном это коллекции, “заточенные” под учебу: столы со специальным уровнем наклона, ножки, регулирующиеся по высоте, стулья, препятствующие развитию сколиоза, полки с продуманным освещением.../p> br> br> p stylecolor:#FFB500>– Для любого интерьера очень важно освещение. Какие нюансы нужно учесть, выбирая свет для детской? br> /p> br> p styletext-align:justify>– Лучше всего делать рассеянный свет, чтобы его было как можно больше. Также рекомендуется предусмотреть несколько световых групп, помимо основного света разместить дополнительно бра у кровати и у рабочего места. Стоит сделать резервный свет на случай, если ребенок ночью отправится в уборную, чтобы у кровати был выключатель, связанный с ночником на стене. Иногда родители делают по всей квартире “дорожку” из светильников, вмонтированных в плинтуса и освещающих путь от детской до туалета. Они могут как иметь выключатель возле детской кровати, так и включаться, реагируя на движение./p> p stylealign:right> br> br> br> br> br> br> br> /p> p classpad_bot1>/p> /div> /div> /div> /div> /li> !--/page_Publ2 --> !--page_Publ3 --> li idpage_Publ3 titleСтудия дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Публикации о наших дизайнерах в прессе./h2> div classokno> div classwrapper> figure classleft marg_right1> img srcimages/page2_img1.jpg titleСтудия дизайн интерьера altСтудия дизайн интерьера> /figure> div stylecolor:#FFB500> h3>br>strong>a hrefhttp://spb.freetime.ru/comfort/comfort/198/goticheskoe-nastroenie.html#/0 titleСтудия дизайн интерьера styletext-decoration: none;>Журнал FreeТайм, октябрь 2014, автор Наталья Белая./a>/strong>br>/h3> /div> p stylecolor:#000000>Публикации о наших дизайнерах в прессе./p> br> br> h2>Готическое настроение./h2> p styletext-align:justify>strong> На хеллоуин принято оформлять жилье всевозможными “готическими” страшилками: расставлять на окнах тыквы, раскладывать на стульях пауков и гроздьями вывешивать летучих мышей над входом. Между тем к реальной готике все это не имеет ровным счетом никакого отношения. О том, как создать подлинно готический интерьер, рассказывает дизайнер интерьеров, эксперт мастерской интерьера и архитектуры Mesto Евгения Чебыкина.br>/strong> br> p stylecolor:#FFB500>– Евгения, так что же из себя представляет готический стиль на самом деле? br> br> /p> p styletext-align:justify>– Готический стиль появился в Средние века, первоначально развившись именно в архитектуре и лишь затем проникнув в сферу дизайна интерьера. В основе готической эстетики традиционно лежало стремление мастеров подчеркнуть величие и непостижимость Бога и, следовательно, церковных сооружений. Таким образом, для готических зданий наиболее характерна выраженная устремленность линий ввысь, вытянутость, заостренность, легкость деталей (несмотря на то что основным материалом служил камень). Узнаваемыми приметами готической архитектуры стали, к примеру, стрельчатые арки и состоящий из них знаменитый готический свод, а также переходящие в арки изящные колонны, которые при этом сохраняли основную несущую функцию. Помимо необработанного, грубого камня, материалом для возведения и отделки строений служило натуральное дерево, что и определило основную палитру стиля: черный, серый и охристый оттенки. Впрочем, цвет добавляли в интерьер при помощи витражей, которые выполняли сразу две функции: философско-эстетическую (наполняя пространство собора мистическим, теплым светом и создавая торжественную, благоговейную атмосферу) и образовательную (витражи часто служили своего рода средневековыми комиксами, с помощью ярких и понятных изображений рассказывая неграмотным прихожанам истории из житий святых). Еще одним “интерьерным акцентом” в готике были гобелены. На них точно так же изображались поучительные сюжеты из Писания, а, кроме того, в холодное время года развешанные на стенах шпалеры защищали людей от сквозняков./p> br> br> p stylecolor:#FFB500>– Насколько все это можно интегрировать в современное жилище? br> /p> br> p styletext-align:justify>– В той или иной мере практически все эти элементы перекочевали из архитектуры в интерьер, сперва в исторический, затем в современный. Однако не стоит заблуждаться и идти на поводу у стереотипов: мысль о том, что, выкрасив стены в черный цвет или поставив гроб с бархатной обивкой в центре комнаты, вы добьетесь удачной стилизации – наивное заблуждение. Настоящую готику невозможно представить без стрельчатых арок и витражей, так что даже если вы используете аутентичные фактуры, оформив пространство в камне и дереве, но не включите в интерьер характерные детали, на выходе получится деревенский или романский стиль, но совершенно точно не готика. Зато вполне внятную стилизацию можно создать, украсив межкомнатные двери или двери шкафов красочными витражами. Если же речь идет о глобальной перепланировке помещения, имеет смысл также соорудить стрельчатую межкомнатную арку или же обрамить обычную полукруглую арку деревом и камнем, визуально вытянув ее вверх. Самые страстные поклонники стиля могут даже разместить над дверью небольшую “розу” (окно круглой формы, разделенное фигурным переплетом и также ставшее “визитной карточкой” готических соборов). Для создания готического интерьера часто используют и орнаментальные узоры – еще один узнаваемый признак стиля. Трилистник, четырехлистник, крест, орнамент, нарисованный с помощью циркуля, – все эти символы характерны именно для готической эстетики (обыграть подобные узоры сегодня можно, к примеру, в обивке мебели)./p> br> br> p stylecolor:#FFB500>– Кстати, какая мебель характерна для такого интерьера? br> /p> br> p styletext-align:justify>– Мебель в готике всецело подражает архитектуре. Она вроде бы массивна и основательна, но при этом ей точно так же свойственна визуальная легкость. Прекрасный пример – выполненные из массива стулья с высокими резными спинками. Впрочем, сегодня можно найти аналогичные изделия и из более легких, практичных материалов, скажем, из пластика или металла. Но здесь я бы хотела обратить внимание на то, что дилетанту в области интерьерного дизайна будет крайне сложно самостоятельно воплотить готический интерьер, используя современные материалы, – такая задача под силу лишь опытным дизайнерам, которые сумеют воссоздать дух эпохи даже в пластике. Так что если вы не до конца уверены в себе как в дизайнере, лучше выбирать изделия из натуральных, аутентичных материалов. К предметам готической мебели относятся и сундуки – их можно использовать вместо шкафов, заменять ими комоды и даже стулья. Кстати, шкафов как таковых в готике нет – для стиля более характерны открытые резные полки, этажерки, словом, все то, что “парит” над землей, а не загромождает пространство. Дополнит интерьер ковка: оконные решетки, арки, лестничные перила, каминные решетки – все это смело можно использовать, создавая стилизованную историю. В случае с загородным домом, кстати, особого внимания заслуживает камин. Не стоит делать его плоским, куда более выразительно будет смотреться полноценный камин, дымоход которого отделан фактурным камнем и выведен вверх на конус./p> br> br> p stylecolor:#FFB500>– Какие декоративные элементы можно включить в интерьер? br> /p> br> p styletext-align:justify>– В отличие от других стилей, в особенности от романтического, барокко или рококо, готике свойственен аскетизм, выраженный прежде всего в отсутствии декора как такового. Так что даже выбирая шторы, нужно избегать “роскошеств” (шелка или бархата), отдавая предпочтение чему-то более грубому, скажем, шторам гобеленного типа. Ведь даже одна штора может разрушить весь замысел, если, конечно, вы не поклонник эклектики. Разнообразят интерьер мозаики, пущенные по полу, потолку или стенам (причем они, как и витражи, могут быть очень насыщенных оттенков) или же плитка, испанская или, скажем, итальянская, имитирующая старинные изразцы. Несмотря на баснословную стоимость, гобелены тоже никто не отменял. Тем более если речь идет о помещении с невысокими потолками, где вертикально висящие узкие гобелены зрительно исправят ситуацию. Кстати, для готики также свойственны серебристый и золотой цвета, напоминающие о блеске церковной утвари и вышивках. Так что при желании вполне можно поэкспериментировать и добавить в интерьер пару латунных подсвечников, поблескивающих в загадочном свете лучей, преломленных витражным стеклом../p> br> br> p stylealign:right> br> br> br> br> br> br> br> /p> p classpad_bot1>/p> /div> /div> /div> /div> /li> !--/page_Publ3 --> !--page_Publ4 --> li idpage_Publ4 titleСтудия дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Публикации о наших дизайнерах в прессе./h2> div classokno> div classwrapper> figure classleft marg_right1> img srcimages/page2_img1.jpg titleСтудия дизайн интерьера altСтудия дизайн интерьера> /figure> div stylecolor:#FFB500> h3>br>strong>a hrefhttp://spb.freetime.ru/comfort/comfort/201/elka-dlya-avangardista.html#/0 titleСтудия дизайн интерьера styletext-decoration: none;>Журнал FreeТайм, декабрь 2014, автор Наталья Белая./a>/strong>br>/h3> /div> p stylecolor:#000000>Публикации о наших дизайнерах в прессе./p> br> br> h2>Елка для авангардиста./h2> p styletext-align:justify>strong> Каких-нибудь 10 лет назад украшение елки было одним из главных семейных ритуалов. Из пыльных недр антресолей извлекались многочисленные коробки, в которых сказочно мерцали обложенные ватой шары, а рабочее состояние спутанной светящейся гирлянды с замиранием сердца проверялось всей семьей... Сегодня декорирование елки во многом перешло в руки профессионалов. Как сделать елку не только нарядной, но и модной, “FREEТАЙМ” рассказала дизайнер интерьеров, эксперт мастерской интерьера и архитектуры Mesto Евгения Чебыкина.br>/strong> br> p stylecolor:#FFB500>идея 1. Магия света br> br> /p> p styletext-align:justify>Подсветка – обязательный элемент рождественского декора. Причем владельцы загородных домов могут украшать гирляндами не только дерево внутри дома, но и ели или сосны, растущие на прилегающей территории. Советую выбирать для этих целей диодную подсветку – она стоит не так дорого и при этом не нагревается и позволяет не опасаться воспламенения. Кроме того, сегодня доступны и водостойкие диоды, которые можно смело кидать в снег вокруг елки. Ими же можно декорировать и бассейн: очень красиво смотрится пущенная по краю бассейна желтая диодная лента в сочетании с брошенными в воду разноцветными шарами. В помещении без подсветки также не обойтись. Те же диоды стоит пустить вокруг дверных проемов и окон, спрятать ленты за карнизами, чтобы источник света был скрыт и лишь отбрасывал приятные мягкие блики на стены и стекла.../p> br> br> p stylecolor:#FFB500>идея 2. Ель в миниатюре br> /p> br> p styletext-align:justify>Если выбор между живой и искусственной елкой обусловлен исключительно личным вкусом, то, выбирая размер дерева, приходится считаться с габаритами помещения. Для небольших пространств дизайнеры придумали массу альтернатив. Например, можно заменить полноценную елку елочкой по колено или же купить несколько совсем маленьких елок, рассадить их по горшкам и расставить в ряд на подоконнике или на полках. Украшать в этом случае можно не сами деревца, а горшки, скажем, поместив их в расшитые или собственноручно расписанные рождественские мешочки. Также можно поступить и с домашними цветами. Вариант еще проще – декорировать комнату обычными еловыми ветками. Тут, кстати, уместно вспомнить и еще один достаточно свежий тренд, который предлагает принести из леса (или флористического магазина) древесные ветви причудливых форм (обычные, гладкие, без иголок) и развесить их на стенах. Украсив их классическими игрушками, мы получим очень необычную, но стильную альтернативу рождественскому дереву./p> br> br> p stylecolor:#FFB500>идея 3. Мечта авангардиста br> /p> br> p styletext-align:justify>Искусственная елка дает и вовсе безграничный простор для фантазии. Так, для интерьера в стиле хай-тек подойдут модели елок из самых неожиданных материалов: пластика, силикона или авторезины. Зачастую дизайнерские “деревья” угадываются только по конусообразной или цилиндрической, устремленной вверх форме. В Новый год люди, в общем-то, интуитивно понимают: то, что стоит в комнате и обмотано гирляндой, скорее всего, и есть елка. Так что экспериментировать можно как угодно, с любыми материалами и формами. Если совсем не хочется занимать место, есть смысл вырезать силуэт ели из фанеры или заказать наклейку на стену. Такие наклейки крепятся, как правило, на мыльную воду, так что лучше выбирать для них окна и двери (хотя можно рискнуть и прикрепить силуэт дерева или оленя на крашеную стену или виниловые обои)./p> br> br> p stylecolor:#FFB500>идея 4. Нетривиальные игрушки br> /p> br> p styletext-align:justify>В Новый год елку украшают не только шариками. К примеру, оригинально смотрятся в зелени еловых ветвей серебряные ложечки и зеркала или же музыкальные диски (на случай тематического праздника). Можно декорировать дерево фоторамками и свечами (лучше, правда, электрическими). Не так давно в моде были украшения из живых цветов, но в этом случае придется заранее продумать все нюансы и раздобыть цветы, стебли которых помещены в колбочки со специальным раствором – чтобы стояли дольше. Также интересный ход – залить уже украшенную елку вместе с шариками краской из баллончика. Получится своеобразная новогодняя скульптура, белая, золотая, красная… Правда, надо понимать, что и шарики и дерево (если речь об искусственной елке) вы загубите бесповоротно, но зато эффект превзойдет ожидания. Имейте в виду: лучше не красить елку дома и выбирать экологичную краску./p> br> br> br> p stylecolor:#FFB500>идея 5. Очарование деталей br> /p> br> p styletext-align:justify>Дополнят атмосферу милые интерьерные акценты. Если дома есть большие коньячные бокалы или стеклянные, без рисунка, салатницы – накидайте в них шишек, веток и шариков, обложите еловыми веточками и расставьте по дому – получится очень красиво. Также можно постелить на столы, кресла и диваны скатерти и пледы белых и красных цветов (если это не противоречит общему декору помещения). Украсят дом носки и бутафорские упаковки от подарков, красивые коробочки и банты, разложенные под елкой. А еще можно потратить пару дней и пройти курсы по созданию объемных снежинок из бумаги. Ну а лично мне больше всего нравятся живые елки и “бабушкины” игрушки. Старинные украшения из стекла, разномастные, но такие живые... Домики, крыши которых завалены снегом, прозрачные шишки и даже странные, но такие милые игрушки в виде крошечных огурчиков и прочих овощей… Сегодня, кстати, такие игрушки обретают все большую ценность, так что если у вас на антресолях завалялся набор старых украшений – не спешите с ним расставаться. Возможно, совсем скоро ценность его увеличится в разы./p> br> br> p stylealign:right> br> br> br> br> br> br> br> /p> p classpad_bot1>/p> /div> /div> /div> /div> /li> !--/page_Publ4 --> !--page_Publ5 --> li idpage_Publ5 titleСтудия дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Публикации о наших дизайнерах в прессе./h2> div classokno> div classwrapper> figure classleft marg_right1> img srcimages/page2_img1.jpg titleСтудия дизайн интерьера altСтудия дизайн интерьера> /figure> div stylecolor:#FFB500> h3>br>strong>a hrefhttp://spb.freetime.ru/comfort/comfort/199/osobennosti-nacionalnoi-ohoty.html#/0 titleСтудия дизайн интерьера styletext-decoration: none;>Журнал FreeТайм, октябрь 2014, автор Наталья Белая./a>/strong>br>/h3> /div> p stylecolor:#000000>Публикации о наших дизайнерах в прессе./p> br> br> h2>Особенности национальной охоты./h2> p styletext-align:justify>strong> В том, что у рыбалки и охоты есть национальные особенности,?благодаря?одноименной?картине не сомневается никто. Между тем характерные черты, которые определяет именно регион, оказывается, есть и у охотничьего интерьера… Шесть самых любопытных фактов об охотничьем стиле читателям “FREE ТАЙМ” поведала дизайнер интерьеров, эксперт мастерской интерьера и архитектуры Mesto.br>/strong> /p> br> p stylecolor:#FFB500>1. Родом из леса br> br> /p> p styletext-align:justify>Охотничий интерьер – не просто стилизация, это самостоятельное направление, имеющее, кроме того, достаточно четкие стилистические черты. При этом охотничий интерьер берет свое начало не в дизайнерских эскизах, а в традиции обустройства настоящих охотничьих шато и лесных домиков, где действительно жили охотники. Очевидно, им нужно было куда-то класть дрова для очага, где-то размещать свои трофеи и оружие, и потому ни о каких эстетических излишествах речи в подобном интерьере быть не могло – каждая деталь имела строго функциональное назначение и была подчинена укладу охотничьей жизни. Со временем эта история, впрочем, трансформировалась и обрела некую псевдоутилитарность: большинство некогда жизненно необходимых деталей стали прикладными и сегодня выполняют чисто эстетические функции./p> br> br> p stylecolor:#FFB500>2. Самый “мужской” интерьер br> /p> br> p styletext-align:justify>Сейчас охотничий стиль простирается далеко за пределы загородных домов и резиденций, органично вписываясь в контекст ресторанных и гостиничных помещений и даже городских квартир. Любопытно, что это один из немногих стилей, заказчиком которого, как правило, выступает сам мужчина. Чаще всего интерьерные проекты осуществляются с подачи женщин, тогда как их спутники предпочитают не вдаваться в детали дизайнерской работы. Однако охотничий интерьер женщина выбирает редко. Таким образом, в доме этот стиль захватывает традиционно “мужские” территории – кабинет, прихожую, гостиную… Реже используется для оформления спальни и практические никогда – кухни, так как эта зона в основном все-таки принадлежит хозяйке дома./p> br> br> p stylecolor:#FFB500>3. Никаких “украшательств”! br> /p> br> p styletext-align:justify>Атмосфера охотничьего домика создается во многом благодаря наличию хрестоматийных элементов. Так, непременной составляющей антуража служат оружие и всевозможные трофеи на стенах: совы, оленьи и медвежьи головы, ветвистые рога… Важнейшую роль играют меха. Шкуры, меховые пледы, покрывала, ковры – все это непременный атрибут охотничьего интерьера. Кроме того, эффектно подчеркивают общую эстетику камин (как вариант – с расположенной возле него поленницей) и развешенные по стенам гобелены, изображающие сцены охоты. Гобелены, кстати, изначально служили вовсе не украшательству – с их помощью охотники утепляли дом, закрывая щели и уберегаясь от сквозняков в холодное время года. Как я уже говорила, стиль этот подчеркнуто аскетичен: никаких лишних декоративных деталей здесь нет, максимум, что можно вписать в интерьер, статуэтка какого-нибудь животного…/p> br> br> p stylecolor:#FFB500>4. “Наши стены – сосны-великаны…” br> /p> br> p styletext-align:justify>В отделке неизменно присутствуют натуральные фактуры: камень, дерево, штукатурка одного или нескольких цветов (но не “венецианка”, а что-то более шершавое, выразительно-грубое, имитирующее каменную поверхность). При оформлении стен могут также использоваться кожа или панели из натурального дерева. К обоям прибегают реже, но если такой выбор делается – предпочтение отдают классике с виньетками или узором “клетка” (кстати, клетка может присутствовать и в текстиле, к примеру, поддерживать общую тему в обивке мебели). Цветовая гамма, характерная для данного интерьера, традиционно светлая (особенно если речь о небольших городских квартирах) и натуральная: белый цвет, цвет дерева, беж, охристый и зеленый тона – вся палитра подчеркивает близость природы и леса, отсылает к загородной жизни. Кроме того, для охотничьего стиля характерны всевозможные имитации деревянных несущих конструкций, молдинги и карнизы. Что же касается пола, то даже в городских помещениях дизайнеры зачастую используют грубую фактурную доску либо же кафель, имитирующий камень, кирпич или уличную керамику./p> br> br> br> p stylecolor:#FFB500>5. С поправкой на местность br> /p> br> p styletext-align:justify>Все вышеперечисленные моменты относятся в основном к проектам, реализуемым у нас или в Европе. Впрочем, иногда и в наших широтах владельцы домов изъявляют желание создать экзотический охотничий интерьер, скажем, африканский или австралийский. В таком случае стилистические принципы будут все те же, только с поправкой на флору и фауну местности. Так, скажем, вместо классической деревянной мебели в помещении могут появиться предметы из ротанга, шкуру медведя заменит шкура зебры или тигра, а на стенах вместо ружья будут красоваться экзотический бумеранг, лук и африканские охотничьи маски… К белому цвету стен добавится желтый – цвет солнца, а на полу появится керамика или кафель, выполненный под глинобитный пол./p> br> br> br> p stylecolor:#FFB500>6. Ирония суперэклектики br> /p> br> p styletext-align:justify>Если не стоит задача создать аутентичный интерьер – черты охотничьего интерьера вполне можно сочетать с современными стилями. Даже в ультрасовременном интерьере, где мы полностью уходим от классического охотничьего стиля, не используем дерево и камень, выбирая при этом современную мебель и яркие, смелые цвета, вполне допустимо сделать отсылки к охотничьему быту. Так, вместо реалистичного чучела на стене можно установить оленью голову из пластика, выполненную в каких-нибудь нереальных цветах, или же выбрать в качестве неожиданного элемента люстру, напоминающую ветви дерева, и торшер, вместо ножек опирающийся на стилизованные “рога”. Настоящие орудия охоты также можно сменить на нарисованные, превратив стены помещения в оригинальный комикс. В этом случае речь пойдет уже не о стилизации, а о создании суперэклектичного, ироничного пространства, которое, впрочем, всегда смотрится стократ интереснее рафинированного интерьера без сюжета и души…/p> br> br> p stylealign:right> br> br> br> br> br> br> br> /p> p classpad_bot1>/p> /div> /div> /div> /div> /li> !--/page_Publ5 --> !--page_akcii --> li idpage_akcii titleакции дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Акции/h2> div classokno> div classwrapper> p stylecolor:#FFB500>¤ Акция «strong>Новогодняя акция Дизайн-проект 400 руб./м2/strong>»/p> p>У нас началась Новогодняя акция Дизайн-проект 400 руб./м2. В данную стоимость войдет : несколько вариантов планировок, наброски интерьера от руки, комплект рабочих чертежей и подбор отделочных материалов.Акция продлиться до конца новогодних праздников.Успейте заказать дизайн Вашего интерьера, по выгодной цене! Подробности акции по a href#!/page_Contact titleконтакты Студия дизайн интерьера>телефону/a>./p> p>/p> p stylecolor:#FFB500>¤ Акция «strong>Планировочные решения для Вашей квартиры от 100 руб/м2./strong>»/p> p>Мы вводим новый вид услуги - планировочные решения.Пять вариантов планировочных решений от 100руб/м2! Вы получаете обмерный план,планировочное решение,вариант расстановки мебели и дополнительные скидки на отделочные материалы. Подробности акции по a href#!/page_Contact titleконтакты Студия дизайн интерьера>телефону/a>./p> p>/p> p stylecolor:#FFB500>¤ Акция «strong>Дизайн-проект от 300 руб/м2./strong>»/p> p>Антикризисное предложение включает в себя 4 варианта планировки, наброски и подбор отделочных материалов с указанием артикулов товаров. Подробности акции по a href#!/page_Contact titleконтакты Студия дизайн интерьера>телефону/a>./p> p>/p> p stylecolor:#FFB500>¤ Акция «strong>Полный дизайн-проект от 550 руб/м2./strong>»/p> p>Полный дизайн проект всего 550 руб/м2, на помещения с площадью от 100 м2 Акция действует до 15.11.2015 Подробности акции по a href#!/page_Contact titleдизайнеры интерьера спб>телефону/a>. Срок действия до 15.11.2015/p> p>/p> p stylecolor:#FFB500>¤ Акция «strong>Дизайн отеля./strong>»/p> p>Закажите у нас дизайн интерьера для гостиницы,отеля или хостела с 01.04.2014 по 14.04.2014 и получите скидку 10% Так же Вы можете оставить заявку и Ваша скидка зафиксируется до 01.09.2014 Подробности акции по a href#!/page_Contact titleдизайнеры интерьера спб>телефону/a>. Срок действия до 14.04.2014/p> p>/p> p stylecolor:#FFB500>¤ Мы поздравляем Вас с Восьмым Марта!/p> p>Становитесь еще прекраснее в новом интерьере! Только 11 и 12 марта закажите у Нас дизайн интерьера и получите скидку 8%./p> p>/p> p stylecolor:#FFB500>¤ Закажите дизайн интерьера online с нашего a hrefhttp://www.meesto.ru/index.html>сайта/a> /p> p>Закажите дизайн интерьера с нашего до 11.11.2013 и получите скидку 5%!! О полученной скидке уточняйте по телефону./p> p>/p> p stylecolor:#FFB500>¤ Акция strong>С 1 сентября!!/strong> /p>Поздравляем всех школьников с 1 сентября! И спешим обрадовать их родителей,весь месяц при заказе у нас дизайна интерьера квартиры,strong>интерьер детской - будет бесплатным!!/strong> Подробности акции « С 1 сентября!!» по a href#!/page_Contact titleдизайнеры интерьера спб>телефону/a>. p>/p> p stylecolor:#FFB500>¤ Акция «strong> 600 рублей за метр квадратный!!!/strong>»/p>Мы считаем Ваши метры!!С 1 августа и до конца месяца strong>дизайн интерьера/strong> Вашей жилой площади обойдется Вам еще дешевле!! Подробности акции «strong> 600 рублей за метр квадратный!!!/strong>» по a href#!/page_Contact titleдизайнеры интерьера спб>телефону/a>. p>/p> p stylecolor:#FFB500>¤ Акция «strong>Дизайн магазина/strong>»/p> p>Вы решили открыть магазин и не знаете как подобрать интерьер? С 1 июля у нас стартует акция «strong>Дизайн магазина/strong> » . Закажите у нас интерьер своей торговой площади, и мы вас уверяем ваш новый strong>дизайн магазина/strong> не оставит равнодушным вашего клиента! Подробности акции по a href#!/page_Contact titleконтакты Студия дизайн интерьера>телефону/a>. Срок действия с 01.07.2013 по 31.07.2013/p> p>/p> p stylecolor:#FFB500>¤ Всем новоселам скидка 15%!!!!/p>Срок действия с 01.04.2013 по 01.06.2013 p>/p> p stylecolor:#FFB500>¤ Всем девушкам весь март скидка 8 % !!!!/p>Срок действия с 08.03.2013 по 01.04.2013 br> br> br> br> br> br> br> br> br> br> br> br> /div> /div> /div> /div> /li> !--/page_akcii --> !--page_voprosi --> li idpage_voprosi titleвопрос дизайнеру интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Часто задаваемые вопросы/h2> div classokno> div classwrapper> h2>Мы предлагаем/h2> p stylecolor:#fff>Что бы прочесть ответ на интересующий Вас вопрос,просто нажмите на вопрос.Прежде чем задать свой вопрос,убедитесь что его нет в нашем списке вопросов./p> IFRAME srcfff/fff.php titleЧасто задаваемые вопросы stylemargin: 0 auto; overflow: scroll; width: 650px; height: 600px;>/IFRAME> /div> /div> /div> /div> /li> !--/page_voprosi --> !--page_kalk --> li idpage_kalk titleкалькулятор дизайн проект> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Калькулятор/h2> SCRIPT> function areaRect() {var edocument.forma55.t112.value; var r if (10>e){r1600}; if (10e){r1000}; if (30e){r770}; if (50e){r700}; if (100e){r650}; var te*r; document.forma55.resk.valuet; } /SCRIPT> form classter nameforma55> div stylecolor:#fff> h2>Стоимость дизайн-проекта:/h2> /div> p styletext-align:justify>Введите метраж Вашего помещения:/p> input typenumber namet112 size10 placeholderВведите Ваш метраж:>м2. br> br> p stylecolor:#FDBB20>Нажмите кнопку Расчет/p> br> br> input typebutton namebutton valueРасчет onClickareaRect() /> br> br>Стоимость Вашего дизайн-проекта (руб.) : input typenumber classwauvau nameresk size10 /> /form> /div> /div> /li> !--/page_kalk --> !--page_test --> li idpage_test titleтесты дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Тесты/h2> div classokno> div classwrapper> h2>Пройдите тесты/h2> p stylecolor:#fff;text-align:justify>Не будем забывать что тесты имеют развлекательный характер и подкреплены фактами из различной литературы по дизайну. Тест не призывает вас к действиям и направлен только на развлечение и утоления любопытства.И, возможно, они не дадут стопроцентно верные результаты, но хотя бы натолкнут человека на размышления о том, с чем связаны его предпочтения в интерьере и в какую сторону двигаться дальше, при создании своего дизайна.Выберите тест для прохождения:/p> IFRAME srctests/test.php titleТесты stylemargin: 0 auto; overflow: scroll; width: 650px; height: 600px;>/IFRAME> /div> /div> /div> /div> /li> !--/page_test --> !--page_program --> li idpage_program titleпрограммы дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Дизайн on-line/h2> h2>Программы для дизайна/h2> p styletext-align:justify;color:#fff>Мы выложили демо-версии различных программ, с официальных сайтов разработчиков, br>что бы немного развлечь Вас, предоставив возможность попробовать самим создать свой интерьер. br>Надеемся Вам понравится!/p> div classokno> div classwrapper> IFRAME srcfile_zip/index.php titleДизайн on-line stylemargin: 0 auto; overflow: scroll; width: 800px; height: 600px;>/IFRAME> /div> /div> /div> /div> /li> !--/page_program --> !--page_opros --> li idpage_opros titleопрос дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Опросы для наших клиентов/h2> div classokno> div classwrapper> h2>Пройдите опрос/h2> p stylecolor:#fff;text-align:justify>Мы прислушиваемся к мнению своих клиентов, помогите нам сформировать предоствление какие дополнительные акции или скидки Вы бы хотели получить.Мы юлагодарим Вас за то,что вы согласились ответить на пару вопросов./p> IFRAME srcopr/f.php titleОпросы для наших клиентов styletext-align:left;margin: 0 auto; overflow: scroll; width: 300px; height: 500px;float:left;>/IFRAME> IFRAME srcopr/f2.php titleОпросы для наших клиентов stylewidth: 300px;float:left; height: 500px;>/IFRAME> /div> /div> /div> /div> /li> !--page_opros --> !--/page_staty--> li idpage_staty titleстатьи дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> h2>Полезная информация/h2> div classokno> div classwrapper> h2>Интересные статьи от дизайнеров/h2> p stylecolor:#fff;text-align:justify>Здесь выложены статьи, которые могут быть Вам полезны. Мы постарались подобрать наиболее полезные и информативные статьи. Вопользуйтесь поиском,чтобы найти интересующую Вас тему./p> IFRAME srcstaty/ffff.php titleИнтересные статьи от дизайнеров stylemargin: 0 auto; overflow: scroll; width: 650px; height: 600px;>/IFRAME> /div> /div> /div> /div> /li> !--/page_staty--> !--page_Contact --> li idpage_Contact titleконтакты дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> div classwrapper> div classcol1> h2>Контакты/h2> p> div alignleft>Наш адрес:/div> /p> p styletext-align:justify>Мы рады Вас видеть и слышать с понедельника по субботу, в любое удобное для Вас время с 9.00 до 20.00/p> p styletext-align:justify>Прежде чем приехать, свяжитесь с нужным Вам специалистом, чтоб уточнить наличие его на месте/p> p>Адрес:a hrefgeo:59.9410697>,30.25423950000004>?q59.9410697>,30.25423950000004>(Label+Name)> 199178, Россия,Санкт-Петербург, Малый проспект В.О., 58. /a> /p> p>i>Телефон:/i> a hreftel:+78129825752>+7(812)9825752/a> /p> p>i>Телефон:/i> a hreftel:+79052323478>+7(905)2323478/a> /p> p>i>Телефон:/i> a hreftel:+79052225752>+7(905)2225752/a> /p> p>i>E-mail:/i> a hrefmailto:info@meesto.ru titleпочта дизайн интерьера>info@meesto.ru/a> /p> p>Вы также можете оставить вопрос через нашу форму: a href#!/page_what titleвопрос дизайнеру интерьера target_blank> img srcimages/iiii.png altЗадайте свой вопрос дизайнеру интерьера titleзадать свой вопрос дизайнеру интерьера /> /a> /p> p>a hrefhttps://twitter.com/StudioMesto classtwitter-follow-button data-show-countfalse data-langru data-sizelarge>Follow @twitter/a> script> !function(d,s,id){var js,fjsd.getElementsByTagName(s)0;if(!d.getElementById(id)){jsd.createElement(s);js.idid;js.src//platform.twitter.com/widgets.js;fjs.parentNode.insertBefore(js,fjs);}}(document,script,twitter-wjs); /script> /p> script typetext/javascript src//vk.com/js/api/openapi.js?122 async>/script> div classqr> img srcimages/meesto2.gif titleконтакты студии интерьера altконтакты студии интерьера>Email:a hrefmailto: classlink1 titleпочта дизайнера интерьера>info@meesto.ru/a> /div> /div> div classcol1 pad_left1> h2>Наш офис:/h2> figure> iframe titleофис Студии Интерьера Место stylemargin: 0 auto; overflow: scroll; width: 280; height: 210; src https://www.google.com/maps/embed?pb!1m18!1m12!1m3!1d1998.4619610103991!2d30.25205081630388!3d59.94106968187702!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x46963140a4cfaf93%3A0xe41c0b456ad9077c!2z0KHRgtGD0LTQuNGPINCU0LjQt9Cw0LnQvdCwINCY0L3RgtC10YDRjNC10YDQsCDQnNC10YHRgtC-!5e0!3m2!1sru!2s!4v1508601093144>/iframe> /figure> script typetext/javascript src//vk.com/js/api/openapi.js?122 async>/script> div idvk_groups>/div> script typetext/javascript srchttp://vk.com/js/api/openapi.js async>/script> script typetext/javascript> ( function start() { if ( window.VK ) { VK.Widgets.Group(vk_groups, {mode: 1, width: auto, height: 210, color1: FFDD00, 0.1, color2: 15140A, color3: 15140A}, 45027761); } else setTimeout( start, 500 ); } )(); /script> !-- VK Widget --> div idvk_groups>/div> /div> div classcol3 pad_left1> IFRAME srcnscript/rassylka.php titleРассылка новостей Студии Интерьера Место stylemargin: 0 auto; overflow: scroll; width: 350px; height: 350px;>/IFRAME> /div> /div> /div> /div> /li> !--/page_Contact --> !--page_More --> li idpage_More titleСтудия дизайн интерьера> div classbox1> div classinner> a href# titleСтудия дизайн интерьера classclose data-typeclose>span>/span>/a> div classokno> div classwrapper> h2>Немного подробнее/h2> div classwrapper pad_bot3> figure classleft marg_right1> div classintro> div classitems-wrapper> div classitem active> svg viewBox0 0 224 135 stylebackground-color:#ffffff00 xmlnshttp://www.w3.org/2000/svg width224 height135> g stroke#FFF stroke-width1 fillnone> path dm-1.66663,134.83334c9,-4 102,-34 101.66663,-34.83334c-0.33337,-0.83334 123.33337,31.83334 123.33337,32.83334c0,1 0,-131 -0.33337,-131.83334c-0.33337,-0.83334 -122.66663,11.83334 -123,11c-0.33337,-0.83334 -99.66663,-12.16666 -100,-12l-1.66663,134.83334z /> path dm98.33337,10.83334c0,1 0,88 -0.33337,87.16666c-0.33337,-0.83334 0.33337,-87.16666 0.33337,-87.16666z /> path dm-0.16663,4.16669c1,0 24,3 24,3c0,0 -1,119 -1,119c0,0 9,-2 9,-2 /> path dm43.83337,5.16669c0,2 -1,114 -1,114c0,0 1,-114 1,-114z /> path dm28.83337,7.16669c0,2 -2,117 -1,117c1,0 1,-117 1,-117z /> path dm34.83337,8.16669c0,0 -5,115 -5,115c0,0 5,-115 5,-115z /> path dm37.83337,9.16669c0,1 -1,111 -1.83337,110.83331c-0.83337,-0.16669 1.83337,-110.83331 1.83337,-110.83331z /> path dm75.83337,8.16669c0,2 0,101 -0.83337,100.83331c-0.83337,-0.16669 15.83337,-6.83331 15,-7c-0.83337,-0.16669 0.83337,-86.83331 0,-87c-0.83337,-0.16669 8.83337,1.16669 8.83337,1.16669 /> path dm79.83337,12.16669c0,0 0,94 0,94c0,0 0,-94 0,-94z /> path dm83.83337,13.16669c0,1 -2,92 -2.83337,91.83331c-0.83337,-0.16669 2.83337,-91.83331 2.83337,-91.83331z /> path dm85.83337,14.16669l-0.83337,87.83331l0.83337,-87.83331z /> path dm74.83337,27.16669c0,0 -32,-2 -32.83337,-2.16669c-0.83337,-0.16669 0.83337,61.16669 0.83337,61.16669c0,0 33,-5 33,-5c0,0 -1,-54 -1,-54z /> path dm43.83337,91.16669l31.16663,-6.16669l-31.16663,6.16669z /> path dm48.83337,95.16669c0,0 0,20 0,20c0,0 23,-7 23,-7c0,0 0,-20 0,-20c0,0 -23,7 -23,7z /> path dm43.83337,28.16669c0,1 13,1 12.16663,0.83331c-0.83337,-0.16669 -0.16663,49.16669 -0.16663,50.16669c0,1 -12,2 -12,2 /> path dm59.83337,29.16669l-0.83337,49.83331c0,0 8.83337,-0.83331 8.83337,-0.83331c0,0 0,-49 0,-49c0,0 -8,0 -8,0z /> path dm76.83337,80.16669c0,0 -10,-2 -10,-2c0,0 10,2 10,2z /> path dm-1.16663,129.16669c0,0 24,-7 23.16663,-7.16669c-0.83337,-0.16669 -23.16663,7.16669 -23.16663,7.16669z /> path dm89.83337,97.16669c0,0 10,-2 10,-2c0,0 48,12 48,12c0,0 0,-77 0,-77c0,0 39,-2 39,-2c0,0 1,89 1,89c0,0 35,8 34.16663,7.83331 /> path dm152.83337,112.16669c1,0 0,-77 -0.83337,-77.16669c-0.83337,-0.16669 28.83337,-1.83331 28.83337,-1.83331c0,0 1,87 1,87 /> path dm157.83337,40.16669c0,0 0,70 0,70c0,0 19,5 19,5c0,0 -1,-78 -1,-78c0,0 -18,3 -18,3z /> path dm57.83337,134.16669c0,0 44,-19 43.16663,-19.16669c-0.83337,-0.16669 73.83337,23.16669 73,23c-0.83337,-0.16669 -116.16663,-3.83331 -116.16663,-3.83331z /> /g> /svg> /div> /div> /div> /figure> p classcolor1 pad_bot2>strong>Стильные интерьеры/strong> /p> p styletext-align:justify>Если вы решили, что пришло время обратиться к профессионалам, вы сделали правильный выбор. strong>Студия дизайна интерьеров/strong> Mesto,следит за мировыми тенденциями в интерьере и архитектуре, вы не останетесь позади! Наши strong>дизайнеры архитекторы/strong> в обязательном порядке проходят стажировки в Италии и Швеции. strong>Студия дизайна интерьеров/strong> Mesto регулярно участвует и выигрывает в архитектурных и дизайнерских конкурсах часто представляется в номинации strong>дизайн интерьеров Санкт Петербурга/strong>./p> p styletext-align:justify>strong>Студия дизайна интерьеров/strong> Mesto предлагает вашему выбору несколько видов услуг : создание дизайн strong>проект интерьера/strong>, создание strong>архитектурного проекта/strong>, авторский надзор, объект под ключ(strong>архитектурный проект + проект интерьера/strong>)./p> p>Мы создадим strong>проект интерьера/strong> для любого помещения.strong>Проектирование коттеджей/strong>, домов, промышленных зданий - это наша профессия!/p> p>Как воспользоваться нашими услугами./p> p styletext-align:justify>Чтобы strong>заказать дизайн проект/strong> интерьера или strong>архитектурный проект/strong> достаточно позвонить нам, мы ответим на все волнующие вас вопросы! Вы можете воспользоваться электронной почтой, для получения интересующей вас информации или чтобы strong>заказать дизайн проект/strong>, мы также есть в соц. сетях. Всю информацию о нас вы можете узнать из раздела a href#!/page_Contact titleконтакты дизайн интерьера>контакты/a>. Мы открыты для вас. Если вы запланировали strong>заказать дизайн проект/strong> у нас, то мы рекомендуем сообщить заранее, чтобы, у нас были свободные от заказов strong>архитекторы дизайнеры/strong>. Если раньше вы никогда не обращались к услугам strong>дизайнера архитектора/strong>, то возможно вам будет полезна информация на нашем сайте в разделе a href#!/page_About titleУслуги дизайн интерьера>услуги/a>. Если вы решили strong>заказать дизайн проект/strong> и не знаете, какому стилю отдать предпочтение, наши strong>архитекторы дизайнеры/strong> помогут вам!/p> p styletext-align:justify>Что бы рассчитать примерную стоимость strong>проекта интерьера/strong>, вы можете воспользоваться нашим a href#!/page_kalk titleКалькулятор дизайна интерьера>калькулятором/a>. Стоимость strong>архитектурного проекта/strong>, имеет больше нюансов, поэтому расчет этой услуги более индивидуален. Наши strong>дизайнеры архитекторы/strong> с одинаковым вниманием подходят к таким задачам как: strong>проектированию коттеджей/strong> на территории в несколько Га и создание дизайн strong>проекта интерьера/strong> однокомнатной хрущевки, в рамках желания и возможностей заказчика проектируем интерьеры и здания классов эконом, комфорт, бизнес, элит. Мы предлагаем широкий спектр архитектурных и дизайнерских услуг, включающих полную разработку проекта и технической документации. Мы предлагаем различные ценовые пакеты. Мы всегда рады договориться с клиентом и подобрать индивидуальную систему расчетов, скидок, рассрочек. Посмотреть акции, которые действуют на данный момент, вы сможете на сайте в разделе a href#!/page_akcii titleакции дизайн интерьера>акции/a>. О дополнительных скидках узнавайте по телефону./p> br> br> br> br> br> br> br> br> br> br> br> br> /div> p classpad_bot1>/p> /div> /div> /div> /div> /div> /li> !--/page_More --> /ul> /article> /div> /div> !-- / content --> div classblock>/div> /div> div classbg1> div classmain> !-- footer --> footer> div classbg_spinner>/div> ul classpagination> li classcurrent>a hrefimages/30.jpg titleСтудия дизайн интерьера>1/a> /li> li>a hrefimages/444.jpg titleСтудия дизайн интерьера>2/a> /li> li>a hrefimages/71.jpg titleСтудия дизайн интерьера>3/a> /li> /ul> span idis-in-viewport>/span> div classcol_1> a hrefindex.html titleСтудия дизайн интерьера idfooter_logo>meesto.ru/a> Copyright 2011/div> div classcol_2>Website Template by a hrefhttp://www.meesto.ru/ titleСтудия дизайн интерьера target_blank>Meesto.ru/a> !-- {%FOOTER_LINK} --> /div> div classcol_3> a classfacebook hrefhttps://www.facebook.com/StudioMesto/ titleСтудия Интерьера Место в Facebook>/a> a classtwitter hrefhttps://twitter.com/StudioMesto titleСтудия Интерьера Место в Twitter>/a> a classok hrefhttp://ok.ru/group/54565180014600 titleСтудия Интерьера Место в Одноклассниках>/a> a classvk hrefhttp://vk.com/meesto titleСтудия Интерьера Место в Контакте>/a> a classi hrefhttp://instagram.com/studiomesto?refbadge titleСтудия Интерьера Место в Instagram>/a> a classr hrefhttp://feeds.feedburner.com/meesto titleПодпишитесь на новости RSS Студии Интерьера Места relalternate typeapplication/rss+xml>/a> a classj hrefhttp://studio-mesto.livejournal.com/ titleСтудия Интерьера Место в ЖЖ>/a> /div> div classcol_4>a hreftel:+78129825752 titleтелефон дизайнера интерьера>span>strong>8 (812) 982-57-52/strong>/span>/a> !-- {%FOOTER_LINK} --> /div> div classcol7>/div> div classcol6> a hrefhttp://maps.yandex.ru/org/1248132866/ titleлого дизайнера интерьера>/a> /div> /footer> !-- / footer--> /div> /div> script typetext/javascript> Cufon.now(); /script> script> $(window).load(function() { $(.spinner).fadeOut(); $(body).css({overflow:auto}); }) /script> !--дальное окно для новостей --> !-- for the blur effect --> script> // this is important for IEs var polyfilter_scriptpath /js/; /script> !--дальное окно для новостей --> script> $(function() { var $doc $(document), $win $(window); var $intro $(.intro), $items $intro.find(.item), itemsLen $items.length, svgs $intro.find(svg).drawsvg({ callback: animateIntro, easing: easeOutQuart }), currItem 0; function animateIntro() { $items.removeClass(active).eq( currItem++ % itemsLen ).addClass(active).find(svg).drawsvg(animate); } animateIntro(); var $header $(header), headerOffTop $header.offset().top, isFixed false; function menu() { if ( $win.scrollTop() > headerOffTop ) { if ( !isFixed ) { isFixed true; $header.addClass(affix); } } else if ( isFixed ) { isFixed false; $header.removeClass(affix); } } $win.on(scroll, menu); menu(); $header.on(click, ahref^#, function(e) { e.preventDefault(); var hash this.hash, offset $(hash).offset().top; $(body, html).animate({ scrollTop: offset }, 600, easeInOutQuart, function() { document.location.hash hash; }); }); }); (function(i,s,o,g,r,a,m){iGoogleAnalyticsObjectr;irir||function(){ (ir.qir.q||).push(arguments)},ir.l1*new Date();as.createElement(o), ms.getElementsByTagName(o)0;a.async1;a.srcg;m.parentNode.insertBefore(a,m) })(window,document,script,//www.google-analytics.com/analytics.js,ga); ga(create, UA-67451713-1, lcdsantos.github.io); ga(require, displayfeatures); ga(send, pageview); function getScript(a,b,c,e){var da.getElementsByTagName(b)0;a.getElementById(c)||(aa.createElement(b),a.idc,a.srce,d.parentNode.insertBefore(a,d))}; getScript(document, script, facebook-jssdk, //connect.facebook.net/en_US/sdk.js#xfbml1&versionv2.4&appId146929405493694); getScript(document, script, twitter-wjs, //platform.twitter.com/widgets.js); getScript(document, script, googleplus-wjs, //apis.google.com/js/plusone.js); /script> script srcjs/index.js>/script> body oncontextmenureturn false oncopyreturn false oncontextmenureturn false onselectstartreturn false;>/body> !--счетчики --> div classnone>a target_blank hrefhttp://feeds.feedburner.com/~r/meesto/~6/1 titleСтудия дизайн интерьера altСтудия дизайн интерьера /> img srchttp://feeds.feedburner.com/meesto.1.gif altПодпишитесь на Новости RSS Мастерская Дизайна и Архитектуры meesto.ru titleПодпишитесь на Новости RSS Мастерская Дизайна и Архитектуры meesto.ru styleborder:0 /> p stylemargin-top:5px; padding-top:0; font-size:x-small; text-align:center />a hrefhttp://feedburner.google.com/fb/a/headlineanimator/install?idon955elnfk3m27v28ua0soams0&w1 titleПодписка на RSS-новости Студии Интерьера Место altПодписка на RSS-новости Студии Интерьера Место onclickwindow.open(this.href, haHowto, width520,height600,toolbarno,addressno,resizableyes,scrollbars); return false target_blank /> p classrf>a hrefhttp://www.xn----8sb0bs2e.net targetblank /> /p>span>a hrefhttp://feedburner.google.com/fb/a/mailverify?urimeesto&locru_RU/ altПодписка на RSS-новости Студии Интерьера Место titleПодписка на RSS-новости Студии Интерьера Место> img srchttp://meesto.ru/images/rb.png altНовости Студии Интерьера Место titleНовости Студии Интерьера Место/>/a>/span> !-- begin of Top100 code --> script idtop100Counter typetext/javascript srchttp://counter.rambler.ru/top100.jcn?2902584 async>/script> noscript> a hrefhttp://top100.rambler.ru/navi/2902584/ titleСтудия дизайн интерьера altСтудия дизайн интерьера> img srchttp://counter.rambler.ru/top100.cnt?2902584 altСтудия Интерьера Место на Ramblers Top100 border0 /> /a> /noscript> !-- end of Top100 code --> !-- HotLog --> script typetext/javascript> hotlog_r+Math.random()+&s2297327&im313&r+ escape(document.referrer)+&pg+escape(window.location.href); hotlog_r+&j+(navigator.javaEnabled()?Y:N); hotlog_r+&wh+screen.width+x+screen.height+&px+ (((navigator.appName.substring(0,3)Mic))?screen.colorDepth:screen.pixelDepth); hotlog_r+&js1.3; document.write(a hrefhttp://click.hotlog.ru/?2297327 titleСтудия дизайн интерьера altСтудия дизайн интерьера target_blank>img + srchttp://hit3.hotlog.ru/cgi-bin/hotlog/count?+ hotlog_r+ border0 width88 height31 title показано количество посетителей за сегодня, за вчера и всего altHotLog>\/a>); /script> noscript> a hrefhttp://click.hotlog.ru/?2297327 target_blank titleСтудия дизайн интерьера altСтудия дизайн интерьера> img srchttp://hit3.hotlog.ru/cgi-bin/hotlog/count?s2297327&im313 border0 width88 height31 titleСтудия Интерьера Место на HotLog altСтудия Интерьера Место на HotLog> /a> /noscript> !-- /HotLog --> !-- Rating@Mail.ru counter --> script typetext/javascript> //!CDATA var _tmr _tmr || ; _tmr.push({id: 2356228, type: pageView, start: (new Date()).getTime()}); (function (d, w) { var ts d.createElement(script); ts.type text/javascript; ts.async true; ts.src (d.location.protocol https: ? https: : http:) + //top-fwz1.mail.ru/js/code.js; var f function () {var s d.getElementsByTagName(script)0; s.parentNode.insertBefore(ts, s);}; if (w.opera object Opera) { d.addEventListener(DOMContentLoaded, f, false); } else { f(); } })(document, window); //> /script> noscript> div styleposition:absolute;left:-10000px;> img src//top-fwz1.mail.ru/counter?id2356228;jsna styleborder:0; height1 width1 altСтудия Интерьера Место в Рейтинг@Mail.ru /> /div> /noscript> !-- //Rating@Mail.ru counter --> !-- Rating@Mail.ru logo --> a hrefhttp://top.mail.ru/jump?from2356228 titleСтудия дизайн интерьера altСтудия дизайн интерьера> img src//top-fwz1.mail.ru/counter?id2356228;t448;l1 styleborder:0; height31 width88 altСтудия Интерьера Место в Рейтинг@Mail.ru titleСтудия Интерьера Место в Рейтинг@Mail.ru /> /a> !-- //Rating@Mail.ru logo --> !-- Yandex.Metrika informer --> a hrefhttp://metrika.yandex.ru/stat/?id21314791&frominformer titleСтудия дизайн интерьера altСтудия дизайн интерьера target_blank relnofollow> img src//bs.yandex.ru/informer/21314791/3_0_FF9520FF_EA7500FF_0_pageviews stylewidth:88px; height:31px; border:0; altСтудия Интерьера Место на Яндекс.Метрика titleСтудия Интерьера Место на Яндекс.Метрика /> /a> !-- /Yandex.Metrika informer --> !-- Yandex.Metrika counter --> script typetext/javascript> (function (d, w, c) { (wc wc || ).push(function() { try { w.yaCounter21314791 new Ya.Metrika({id:21314791, webvisor:true, clickmap:true, trackLinks:true, accurateTrackBounce:true}); } catch(e) { } }); var n d.getElementsByTagName(script)0, s d.createElement(script), f function () { n.parentNode.insertBefore(s, n); }; s.type text/javascript; s.async true; s.src (d.location.protocol https: ? https: : http:) + //mc.yandex.ru/metrika/watch.js; if (w.opera object Opera) { d.addEventListener(DOMContentLoaded, f, false); } else { f(); } })(document, window, yandex_metrika_callbacks); /script> noscript> div> img src//mc.yandex.ru/watch/21314791 styleposition:absolute; left:-9999px; altСтудия Интерьера Место в Яндексе /> /div> /noscript> !-- /Yandex.Metrika counter -->span>a hrefhttp://vk.com/meesto titleСтудия Интерьера Место в Контакте> img srchttp://meesto.ru/images/bb.png altСтудия Интерьера Место в Контакте titleСтудия Интерьера Место в Контакте/>/a> a hrefhttps://twitter.com/StudioMesto titleСтудия Интерьера Место в Twitter altСтудия Интерьера Место в Twitter> img srchttp://meesto.ru/images/tb.png altСтудия Интерьера Место в Twitter titleСтудия Интерьера Место в Twitter/>/a> a hrefhttp://feeds.feedburner.com/meesto titleПодпишитесь на новости RSS Студии Интерьера Места relalternate typeapplication/rss+xml>img src//feedburner.google.com/fb/images/pub/feed-icon32x32.png altПодпишитесь на новости RSS Студии Интерьера Место titleПодпишитесь на новости RSS Студии Интерьера Место styleborder:0/>/a>a hrefhttp://feeds.feedburner.com/meesto altПодпишитесь на новости RSS Студии Интерьера Место titleПодпишитесь на новости RSS Студии Интерьера Место relalternate typeapplication/rss+xml>/a> a hrefhttp://studio-mesto.livejournal.com/ altСтудия Интерьера Место в ЖЖ titleСтудия Интерьера Место в ЖЖ> img src/images/jb.png altСтудия Интерьера Место в ЖЖ titleСтудия Интерьера Место в ЖЖ/>/a> a hrefhttps://www.facebook.com/StudioMesto/ titleСтудия Интерьера Место в Facebook> img src/images/fb.png altСтудия Интерьера Место в Facebook titleСтудия Интерьера Место в Facebook/>/a> a hrefhttp://instagram.com/studiomesto?refbadge titleСтудия Интерьера Место в Instagram>img src/images/ib.png altСтудия Интерьера Место в Instagram titleСтудия Интерьера Место в Instagram/>/a>/span> span>a hrefhttp://meesto.ru/ relsidebar titleСтудия Место onclickwindow.external.AddFavorite(http://meesto.ru/,Студия Место); return false; altСтудия Интерьера Место/>/a>/span> p> a hrefhttp://feeds.feedburner.com/meesto titleПодпишитесь на новости RSS Студии Интерьера Места altПодпишитесь на новости RSS Студии Интерьера Места> img srchttp://feeds.feedburner.com/~fc/meesto?bg000000&fgFF6600&anim1 height26 width88 styleborder:0 altНовости RSS Студии Интерьера Место titleНовости RSS Студии Интерьера Место /> /a> /p> /div> !--счетчики --> /html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]