/*
 * Shadowbox.js, version 3.0.3
 * http://shadowbox-js.com/
 *
 * Copyright 2007-2010, Michael J. I. Jackson
 * Date: 2010-10-21 12:51:44 +0000
 */
(function(window,undefined){var S={version:"3.0.3"};var ua=navigator.userAgent.toLowerCase();if(ua.indexOf("windows")>-1||ua.indexOf("win32")>-1){S.isWindows=true}else{if(ua.indexOf("macintosh")>-1||ua.indexOf("mac os x")>-1){S.isMac=true}else{if(ua.indexOf("linux")>-1){S.isLinux=true}}}S.isIE=ua.indexOf("msie")>-1;S.isIE6=ua.indexOf("msie 6")>-1;S.isIE7=ua.indexOf("msie 7")>-1;S.isGecko=ua.indexOf("gecko")>-1&&ua.indexOf("safari")==-1;S.isWebKit=ua.indexOf("applewebkit/")>-1;var inlineId=/#(.+)$/,galleryName=/^(light|shadow)box\[(.*?)\]/i,inlineParam=/\s*([a-z_]*?)\s*=\s*(.+)\s*/,fileExtension=/[0-9a-z]+$/i,scriptPath=/(.+\/)shadowbox\.js/i;var open=false,initialized=false,lastOptions={},slideDelay=0,slideStart,slideTimer;S.current=-1;S.dimensions=null;S.ease=function(state){return 1+Math.pow(state-1,3)};S.errorInfo={fla:{name:"Flash",url:"http://www.adobe.com/products/flashplayer/"},qt:{name:"QuickTime",url:"http://www.apple.com/quicktime/download/"},wmp:{name:"Windows Media Player",url:"http://www.microsoft.com/windows/windowsmedia/"},f4m:{name:"Flip4Mac",url:"http://www.flip4mac.com/wmv_download.htm"}};S.gallery=[];S.onReady=noop;S.path=null;S.player=null;S.playerId="sb-player";S.options={animate:true,animateFade:true,autoplayMovies:true,continuous:false,enableKeys:true,flashParams:{bgcolor:"#000000",allowfullscreen:true},flashVars:{},flashVersion:"9.0.115",handleOversize:"resize",handleUnsupported:"link",onChange:noop,onClose:noop,onFinish:noop,onOpen:noop,showMovieControls:true,skipSetup:false,slideshowDelay:0,viewportPadding:20};S.getCurrent=function(){return S.current>-1?S.gallery[S.current]:null};S.hasNext=function(){return S.gallery.length>1&&(S.current!=S.gallery.length-1||S.options.continuous)};S.isOpen=function(){return open};S.isPaused=function(){return slideTimer=="pause"};S.applyOptions=function(options){lastOptions=apply({},S.options);apply(S.options,options)};S.revertOptions=function(){apply(S.options,lastOptions)};S.init=function(options,callback){if(initialized){return}initialized=true;if(S.skin.options){apply(S.options,S.skin.options)}if(options){apply(S.options,options)}if(!S.path){var path,scripts=document.getElementsByTagName("script");for(var i=0,len=scripts.length;i<len;++i){path=scriptPath.exec(scripts[i].src);if(path){S.path=path[1];break}}}if(callback){S.onReady=callback}bindLoad()};S.open=function(obj){if(open){return}var gc=S.makeGallery(obj);S.gallery=gc[0];S.current=gc[1];obj=S.getCurrent();if(obj==null){return}S.applyOptions(obj.options||{});filterGallery();if(S.gallery.length){obj=S.getCurrent();if(S.options.onOpen(obj)===false){return}open=true;S.skin.onOpen(obj,load)}};S.close=function(){if(!open){return}open=false;if(S.player){S.player.remove();S.player=null}if(typeof slideTimer=="number"){clearTimeout(slideTimer);slideTimer=null}slideDelay=0;listenKeys(false);S.options.onClose(S.getCurrent());S.skin.onClose();S.revertOptions()};S.play=function(){if(!S.hasNext()){return}if(!slideDelay){slideDelay=S.options.slideshowDelay*1000}if(slideDelay){slideStart=now();slideTimer=setTimeout(function(){slideDelay=slideStart=0;S.next()},slideDelay);if(S.skin.onPlay){S.skin.onPlay()}}};S.pause=function(){if(typeof slideTimer!="number"){return}slideDelay=Math.max(0,slideDelay-(now()-slideStart));if(slideDelay){clearTimeout(slideTimer);slideTimer="pause";if(S.skin.onPause){S.skin.onPause()}}};S.change=function(index){if(!(index in S.gallery)){if(S.options.continuous){index=(index<0?S.gallery.length+index:0);if(!(index in S.gallery)){return}}else{return}}S.current=index;if(typeof slideTimer=="number"){clearTimeout(slideTimer);slideTimer=null;slideDelay=slideStart=0}S.options.onChange(S.getCurrent());load(true)};S.next=function(){S.change(S.current+1)};S.previous=function(){S.change(S.current-1)};S.setDimensions=function(height,width,maxHeight,maxWidth,topBottom,leftRight,padding,preserveAspect){var originalHeight=height,originalWidth=width;var extraHeight=2*padding+topBottom;if(height+extraHeight>maxHeight){height=maxHeight-extraHeight}var extraWidth=2*padding+leftRight;if(width+extraWidth>maxWidth){width=maxWidth-extraWidth}var changeHeight=(originalHeight-height)/originalHeight,changeWidth=(originalWidth-width)/originalWidth,oversized=(changeHeight>0||changeWidth>0);if(preserveAspect&&oversized){if(changeHeight>changeWidth){width=Math.round((originalWidth/originalHeight)*height)}else{if(changeWidth>changeHeight){height=Math.round((originalHeight/originalWidth)*width)}}}S.dimensions={height:height+topBottom,width:width+leftRight,innerHeight:height,innerWidth:width,top:Math.floor((maxHeight-(height+extraHeight))/2+padding),left:Math.floor((maxWidth-(width+extraWidth))/2+padding),oversized:oversized};return S.dimensions};S.makeGallery=function(obj){var gallery=[],current=-1;if(typeof obj=="string"){obj=[obj]}if(typeof obj.length=="number"){each(obj,function(i,o){if(o.content){gallery[i]=o}else{gallery[i]={content:o}}});current=0}else{if(obj.tagName){var cacheObj=S.getCache(obj);obj=cacheObj?cacheObj:S.makeObject(obj)}if(obj.gallery){gallery=[];var o;for(var key in S.cache){o=S.cache[key];if(o.gallery&&o.gallery==obj.gallery){if(current==-1&&o.content==obj.content){current=gallery.length}gallery.push(o)}}if(current==-1){gallery.unshift(obj);current=0}}else{gallery=[obj];current=0}}each(gallery,function(i,o){gallery[i]=apply({},o)});return[gallery,current]};S.makeObject=function(link,options){var obj={content:link.href,title:link.getAttribute("title")||"",link:link};if(options){options=apply({},options);each(["player","title","height","width","gallery"],function(i,o){if(typeof options[o]!="undefined"){obj[o]=options[o];delete options[o]}});obj.options=options}else{obj.options={}}if(!obj.player){obj.player=S.getPlayer(obj.content)}var rel=link.getAttribute("rel");if(rel){var match=rel.match(galleryName);if(match){obj.gallery=escape(match[2])}each(rel.split(";"),function(i,p){match=p.match(inlineParam);if(match){obj[match[1]]=match[2]}})}return obj};S.getPlayer=function(content){if(content.indexOf("#")>-1&&content.indexOf(document.location.href)==0){return"inline"}var q=content.indexOf("?");if(q>-1){content=content.substring(0,q)}var ext,m=content.match(fileExtension);if(m){ext=m[0].toLowerCase()}if(ext){if(S.img&&S.img.ext.indexOf(ext)>-1){return"img"}if(S.swf&&S.swf.ext.indexOf(ext)>-1){return"swf"}if(S.flv&&S.flv.ext.indexOf(ext)>-1){return"flv"}if(S.qt&&S.qt.ext.indexOf(ext)>-1){if(S.wmp&&S.wmp.ext.indexOf(ext)>-1){return"qtwmp"}else{return"qt"}}if(S.wmp&&S.wmp.ext.indexOf(ext)>-1){return"wmp"}}return"iframe"};function filterGallery(){var err=S.errorInfo,plugins=S.plugins,obj,remove,needed,m,format,replace,inlineEl,flashVersion;for(var i=0;i<S.gallery.length;++i){obj=S.gallery[i];remove=false;needed=null;switch(obj.player){case"flv":case"swf":if(!plugins.fla){needed="fla"}break;case"qt":if(!plugins.qt){needed="qt"}break;case"wmp":if(S.isMac){if(plugins.qt&&plugins.f4m){obj.player="qt"}else{needed="qtf4m"}}else{if(!plugins.wmp){needed="wmp"}}break;case"qtwmp":if(plugins.qt){obj.player="qt"}else{if(plugins.wmp){obj.player="wmp"}else{needed="qtwmp"}}break}if(needed){if(S.options.handleUnsupported=="link"){switch(needed){case"qtf4m":format="shared";replace=[err.qt.url,err.qt.name,err.f4m.url,err.f4m.name];break;case"qtwmp":format="either";replace=[err.qt.url,err.qt.name,err.wmp.url,err.wmp.name];break;default:format="single";replace=[err[needed].url,err[needed].name]}obj.player="html";obj.content='<div class="sb-message">'+sprintf(S.lang.errors[format],replace)+"</div>"}else{remove=true}}else{if(obj.player=="inline"){m=inlineId.exec(obj.content);if(m){inlineEl=get(m[1]);if(inlineEl){obj.content=inlineEl.innerHTML}else{remove=true}}else{remove=true}}else{if(obj.player=="swf"||obj.player=="flv"){flashVersion=(obj.options&&obj.options.flashVersion)||S.options.flashVersion;if(S.flash&&!S.flash.hasFlashPlayerVersion(flashVersion)){obj.width=310;obj.height=177}}}}if(remove){S.gallery.splice(i,1);if(i<S.current){--S.current}else{if(i==S.current){S.current=i>0?i-1:i}}--i}}}function listenKeys(on){if(!S.options.enableKeys){return}(on?addEvent:removeEvent)(document,"keydown",handleKey)}function handleKey(e){if(e.metaKey||e.shiftKey||e.altKey||e.ctrlKey){return}var code=keyCode(e),handler;switch(code){case 81:case 88:case 27:handler=S.close;break;case 37:handler=S.previous;break;case 39:handler=S.next;break;case 32:handler=typeof slideTimer=="number"?S.pause:S.play;break}if(handler){preventDefault(e);handler()}}function load(changing){listenKeys(false);var obj=S.getCurrent();var player=(obj.player=="inline"?"html":obj.player);if(typeof S[player]!="function"){throw"unknown player "+player}if(changing){S.player.remove();S.revertOptions();S.applyOptions(obj.options||{})}S.player=new S[player](obj,S.playerId);if(S.gallery.length>1){var next=S.gallery[S.current+1]||S.gallery[0];if(next.player=="img"){var a=new Image();a.src=next.content}var prev=S.gallery[S.current-1]||S.gallery[S.gallery.length-1];if(prev.player=="img"){var b=new Image();b.src=prev.content}}S.skin.onLoad(changing,waitReady)}function waitReady(){if(!open){return}if(typeof S.player.ready!="undefined"){var timer=setInterval(function(){if(open){if(S.player.ready){clearInterval(timer);timer=null;S.skin.onReady(show)}}else{clearInterval(timer);timer=null}},10)}else{S.skin.onReady(show)}}function show(){if(!open){return}S.player.append(S.skin.body,S.dimensions);S.skin.onShow(finish)}function finish(){if(!open){return}if(S.player.onLoad){S.player.onLoad()}S.options.onFinish(S.getCurrent());if(!S.isPaused()){S.play()}listenKeys(true)}if(!Array.prototype.indexOf){Array.prototype.indexOf=function(obj,from){var len=this.length>>>0;from=from||0;if(from<0){from+=len}for(;from<len;++from){if(from in this&&this[from]===obj){return from}}return -1}}function now(){return(new Date).getTime()}function apply(original,extension){for(var property in extension){original[property]=extension[property]}return original}function each(obj,callback){var i=0,len=obj.length;for(var value=obj[0];i<len&&callback.call(value,i,value)!==false;value=obj[++i]){}}function sprintf(str,replace){return str.replace(/\{(\w+?)\}/g,function(match,i){return replace[i]})}function noop(){}function get(id){return document.getElementById(id)}function remove(el){el.parentNode.removeChild(el)}var supportsOpacity=true,supportsFixed=true;function checkSupport(){var body=document.body,div=document.createElement("div");supportsOpacity=typeof div.style.opacity==="string";div.style.position="fixed";div.style.margin=0;div.style.top="20px";body.appendChild(div,body.firstChild);supportsFixed=div.offsetTop==20;body.removeChild(div)}S.getStyle=(function(){var opacity=/opacity=([^)]*)/,getComputedStyle=document.defaultView&&document.defaultView.getComputedStyle;return function(el,style){var ret;if(!supportsOpacity&&style=="opacity"&&el.currentStyle){ret=opacity.test(el.currentStyle.filter||"")?(parseFloat(RegExp.$1)/100)+"":"";return ret===""?"1":ret}if(getComputedStyle){var computedStyle=getComputedStyle(el,null);if(computedStyle){ret=computedStyle[style]}if(style=="opacity"&&ret==""){ret="1"}}else{ret=el.currentStyle[style]}return ret}})();S.appendHTML=function(el,html){if(el.insertAdjacentHTML){el.insertAdjacentHTML("BeforeEnd",html)}else{if(el.lastChild){var range=el.ownerDocument.createRange();range.setStartAfter(el.lastChild);var frag=range.createContextualFragment(html);el.appendChild(frag)}else{el.innerHTML=html}}};S.getWindowSize=function(dimension){if(document.compatMode==="CSS1Compat"){return document.documentElement["client"+dimension]}return document.body["client"+dimension]};S.setOpacity=function(el,opacity){var style=el.style;if(supportsOpacity){style.opacity=(opacity==1?"":opacity)}else{style.zoom=1;if(opacity==1){if(typeof style.filter=="string"&&(/alpha/i).test(style.filter)){style.filter=style.filter.replace(/\s*[\w\.]*alpha\([^\)]*\);?/gi,"")}}else{style.filter=(style.filter||"").replace(/\s*[\w\.]*alpha\([^\)]*\)/gi,"")+" alpha(opacity="+(opacity*100)+")"}}};S.clearOpacity=function(el){S.setOpacity(el,1)};function getTarget(e){var target=e.target?e.target:e.srcElement;return target.nodeType==3?target.parentNode:target}function getPageXY(e){var x=e.pageX||(e.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft)),y=e.pageY||(e.clientY+(document.documentElement.scrollTop||document.body.scrollTop));return[x,y]}function preventDefault(e){e.preventDefault()}function keyCode(e){return e.which?e.which:e.keyCode}function addEvent(el,type,handler){if(el.addEventListener){el.addEventListener(type,handler,false)}else{if(el.nodeType===3||el.nodeType===8){return}if(el.setInterval&&(el!==window&&!el.frameElement)){el=window}if(!handler.__guid){handler.__guid=addEvent.guid++}if(!el.events){el.events={}}var handlers=el.events[type];if(!handlers){handlers=el.events[type]={};if(el["on"+type]){handlers[0]=el["on"+type]}}handlers[handler.__guid]=handler;el["on"+type]=addEvent.handleEvent}}addEvent.guid=1;addEvent.handleEvent=function(event){var result=true;event=event||addEvent.fixEvent(((this.ownerDocument||this.document||this).parentWindow||window).event);var handlers=this.events[event.type];for(var i in handlers){this.__handleEvent=handlers[i];if(this.__handleEvent(event)===false){result=false}}return result};addEvent.preventDefault=function(){this.returnValue=false};addEvent.stopPropagation=function(){this.cancelBubble=true};addEvent.fixEvent=function(e){e.preventDefault=addEvent.preventDefault;e.stopPropagation=addEvent.stopPropagation;return e};function removeEvent(el,type,handler){if(el.removeEventListener){el.removeEventListener(type,handler,false)}else{if(el.events&&el.events[type]){delete el.events[type][handler.__guid]}}}var loaded=false,DOMContentLoaded;if(document.addEventListener){DOMContentLoaded=function(){document.removeEventListener("DOMContentLoaded",DOMContentLoaded,false);S.load()}}else{if(document.attachEvent){DOMContentLoaded=function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",DOMContentLoaded);S.load()}}}}function doScrollCheck(){if(loaded){return}try{document.documentElement.doScroll("left")}catch(e){setTimeout(doScrollCheck,1);return}S.load()}function bindLoad(){if(document.readyState==="complete"){return S.load()}if(document.addEventListener){document.addEventListener("DOMContentLoaded",DOMContentLoaded,false);window.addEventListener("load",S.load,false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",DOMContentLoaded);window.attachEvent("onload",S.load);var topLevel=false;try{topLevel=window.frameElement===null}catch(e){}if(document.documentElement.doScroll&&topLevel){doScrollCheck()}}}}S.load=function(){if(loaded){return}if(!document.body){return setTimeout(S.load,13)}loaded=true;checkSupport();S.onReady();if(!S.options.skipSetup){S.setup()}S.skin.init()};S.plugins={};if(navigator.plugins&&navigator.plugins.length){var names=[];each(navigator.plugins,function(i,p){names.push(p.name)});names=names.join(",");var f4m=names.indexOf("Flip4Mac")>-1;S.plugins={fla:names.indexOf("Shockwave Flash")>-1,qt:names.indexOf("QuickTime")>-1,wmp:!f4m&&names.indexOf("Windows Media")>-1,f4m:f4m}}else{var detectPlugin=function(name){var axo;try{axo=new ActiveXObject(name)}catch(e){}return !!axo};S.plugins={fla:detectPlugin("ShockwaveFlash.ShockwaveFlash"),qt:detectPlugin("QuickTime.QuickTime"),wmp:detectPlugin("wmplayer.ocx"),f4m:false}}var relAttr=/^(light|shadow)box/i,expando="shadowboxCacheKey",cacheKey=1;S.cache={};S.select=function(selector){var links=[];if(!selector){var rel;each(document.getElementsByTagName("a"),function(i,el){rel=el.getAttribute("rel");if(rel&&relAttr.test(rel)){links.push(el)}})}else{var length=selector.length;if(length){if(typeof selector=="string"){if(S.find){links=S.find(selector)}}else{if(length==2&&typeof selector[0]=="string"&&selector[1].nodeType){if(S.find){links=S.find(selector[0],selector[1])}}else{for(var i=0;i<length;++i){links[i]=selector[i]}}}}else{links.push(selector)}}return links};S.setup=function(selector,options){each(S.select(selector),function(i,link){S.addCache(link,options)})};S.teardown=function(selector){each(S.select(selector),function(i,link){S.removeCache(link)})};S.addCache=function(link,options){var key=link[expando];if(key==undefined){key=cacheKey++;link[expando]=key;addEvent(link,"click",handleClick)}S.cache[key]=S.makeObject(link,options)};S.removeCache=function(link){removeEvent(link,"click",handleClick);delete S.cache[link[expando]];link[expando]=null};S.getCache=function(link){var key=link[expando];return(key in S.cache&&S.cache[key])};S.clearCache=function(){for(var key in S.cache){S.removeCache(S.cache[key].link)}S.cache={}};function handleClick(e){S.open(this);if(S.gallery.length){preventDefault(e)}}
/*
 * Sizzle CSS Selector Engine - v1.0
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 *
 * Modified for inclusion in Shadowbox.js
 */
S.find = (function () {
    var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
        done = 0,
        toString = Object.prototype.toString,
        hasDuplicate = false,
        baseHasDuplicate = true;
    [0, 0].sort(function () {
        baseHasDuplicate = false;
        return 0
    });
    var Sizzle = function (selector, context, results, seed) {
        results = results || [];
        var origContext = context = context || document;
        if (context.nodeType !== 1 && context.nodeType !== 9) {
            return []
        }
        if (!selector || typeof selector !== "string") {
            return results
        }
        var parts = [],
            m, set, checkSet, extra, prune = true,
            contextXML = isXML(context),
            soFar = selector;
        while ((chunker.exec(""), m = chunker.exec(soFar)) !== null) {
            soFar = m[3];
            parts.push(m[1]);
            if (m[2]) {
                extra = m[3];
                break
            }
        }
        if (parts.length > 1 && origPOS.exec(selector)) {
            if (parts.length === 2 && Expr.relative[parts[0]]) {
                set = posProcess(parts[0] + parts[1], context)
            } else {
                set = Expr.relative[parts[0]] ? [context] : Sizzle(parts.shift(), context);
                while (parts.length) {
                    selector = parts.shift();
                    if (Expr.relative[selector]) {
                        selector += parts.shift()
                    }
                    set = posProcess(selector, set)
                }
            }
        } else {
            if (!seed && parts.length > 1 && context.nodeType === 9 && !contextXML && Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1])) {
                var ret = Sizzle.find(parts.shift(), context, contextXML);
                context = ret.expr ? Sizzle.filter(ret.expr, ret.set)[0] : ret.set[0]
            }
            if (context) {
                var ret = seed ? {
                    expr: parts.pop(),
                    set: makeArray(seed)
                } : Sizzle.find(parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML);
                set = ret.expr ? Sizzle.filter(ret.expr, ret.set) : ret.set;
                if (parts.length > 0) {
                    checkSet = makeArray(set)
                } else {
                    prune = false
                }
                while (parts.length) {
                    var cur = parts.pop(),
                        pop = cur;
                    if (!Expr.relative[cur]) {
                        cur = ""
                    } else {
                        pop = parts.pop()
                    }
                    if (pop == null) {
                        pop = context
                    }
                    Expr.relative[cur](checkSet, pop, contextXML)
                }
            } else {
                checkSet = parts = []
            }
        }
        if (!checkSet) {
            checkSet = set
        }
        if (!checkSet) {
            throw "Syntax error, unrecognized expression: " + (cur || selector)
        }
        if (toString.call(checkSet) === "[object Array]") {
            if (!prune) {
                results.push.apply(results, checkSet)
            } else {
                if (context && context.nodeType === 1) {
                    for (var i = 0; checkSet[i] != null; i++) {
                        if (checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i]))) {
                            results.push(set[i])
                        }
                    }
                } else {
                    for (var i = 0; checkSet[i] != null; i++) {
                        if (checkSet[i] && checkSet[i].nodeType === 1) {
                            results.push(set[i])
                        }
                    }
                }
            }
        } else {
            makeArray(checkSet, results)
        }
        if (extra) {
            Sizzle(extra, origContext, results, seed);
            Sizzle.uniqueSort(results)
        }
        return results
    };
    Sizzle.uniqueSort = function (results) {
        if (sortOrder) {
            hasDuplicate = baseHasDuplicate;
            results.sort(sortOrder);
            if (hasDuplicate) {
                for (var i = 1; i < results.length; i++) {
                    if (results[i] === results[i - 1]) {
                        results.splice(i--, 1)
                    }
                }
            }
        }
        return results
    };
    Sizzle.matches = function (expr, set) {
        return Sizzle(expr, null, null, set)
    };
    Sizzle.find = function (expr, context, isXML) {
        var set, match;
        if (!expr) {
            return []
        }
        for (var i = 0, l = Expr.order.length; i < l; i++) {
            var type = Expr.order[i],
                match;
            if ((match = Expr.leftMatch[type].exec(expr))) {
                var left = match[1];
                match.splice(1, 1);
                if (left.substr(left.length - 1) !== "\\") {
                    match[1] = (match[1] || "").replace(/\\/g, "");
                    set = Expr.find[type](match, context, isXML);
                    if (set != null) {
                        expr = expr.replace(Expr.match[type], "");
                        break
                    }
                }
            }
        }
        if (!set) {
            set = context.getElementsByTagName("*")
        }
        return {
            set: set,
            expr: expr
        }
    };
    Sizzle.filter = function (expr, set, inplace, not) {
        var old = expr,
            result = [],
            curLoop = set,
            match, anyFound, isXMLFilter = set && set[0] && isXML(set[0]);
        while (expr && set.length) {
            for (var type in Expr.filter) {
                if ((match = Expr.match[type].exec(expr)) != null) {
                    var filter = Expr.filter[type],
                        found, item;
                    anyFound = false;
                    if (curLoop === result) {
                        result = []
                    }
                    if (Expr.preFilter[type]) {
                        match = Expr.preFilter[type](match, curLoop, inplace, result, not, isXMLFilter);
                        if (!match) {
                            anyFound = found = true
                        } else {
                            if (match === true) {
                                continue
                            }
                        }
                    }
                    if (match) {
                        for (var i = 0;
                        (item = curLoop[i]) != null; i++) {
                            if (item) {
                                found = filter(item, match, i, curLoop);
                                var pass = not ^ !! found;
                                if (inplace && found != null) {
                                    if (pass) {
                                        anyFound = true
                                    } else {
                                        curLoop[i] = false
                                    }
                                } else {
                                    if (pass) {
                                        result.push(item);
                                        anyFound = true
                                    }
                                }
                            }
                        }
                    }
                    if (found !== undefined) {
                        if (!inplace) {
                            curLoop = result
                        }
                        expr = expr.replace(Expr.match[type], "");
                        if (!anyFound) {
                            return []
                        }
                        break
                    }
                }
            }
            if (expr === old) {
                if (anyFound == null) {
                    throw "Syntax error, unrecognized expression: " + expr
                } else {
                    break
                }
            }
            old = expr
        }
        return curLoop
    };
    var Expr = Sizzle.selectors = {
        order: ["ID", "NAME", "TAG"],
        match: {
            ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
            CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
            NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
            ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
            TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
            CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
            POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
            PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
        },
        leftMatch: {},
        attrMap: {
            "class": "className",
            "for": "htmlFor"
        },
        attrHandle: {
            href: function (elem) {
                return elem.getAttribute("href")
            }
        },
        relative: {
            "+": function (checkSet, part) {
                var isPartStr = typeof part === "string",
                    isTag = isPartStr && !/\W/.test(part),
                    isPartStrNotTag = isPartStr && !isTag;
                if (isTag) {
                    part = part.toLowerCase()
                }
                for (var i = 0, l = checkSet.length, elem; i < l; i++) {
                    if ((elem = checkSet[i])) {
                        while ((elem = elem.previousSibling) && elem.nodeType !== 1) {}
                        checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? elem || false : elem === part
                    }
                }
                if (isPartStrNotTag) {
                    Sizzle.filter(part, checkSet, true)
                }
            },
            ">": function (checkSet, part) {
                var isPartStr = typeof part === "string";
                if (isPartStr && !/\W/.test(part)) {
                    part = part.toLowerCase();
                    for (var i = 0, l = checkSet.length; i < l; i++) {
                        var elem = checkSet[i];
                        if (elem) {
                            var parent = elem.parentNode;
                            checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false
                        }
                    }
                } else {
                    for (var i = 0, l = checkSet.length; i < l; i++) {
                        var elem = checkSet[i];
                        if (elem) {
                            checkSet[i] = isPartStr ? elem.parentNode : elem.parentNode === part
                        }
                    }
                    if (isPartStr) {
                        Sizzle.filter(part, checkSet, true)
                    }
                }
            },
            "": function (checkSet, part, isXML) {
                var doneName = done++,
                    checkFn = dirCheck;
                if (typeof part === "string" && !/\W/.test(part)) {
                    var nodeCheck = part = part.toLowerCase();
                    checkFn = dirNodeCheck
                }
                checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML)
            },
            "~": function (checkSet, part, isXML) {
                var doneName = done++,
                    checkFn = dirCheck;
                if (typeof part === "string" && !/\W/.test(part)) {
                    var nodeCheck = part = part.toLowerCase();
                    checkFn = dirNodeCheck
                }
                checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML)
            }
        },
        find: {
            ID: function (match, context, isXML) {
                if (typeof context.getElementById !== "undefined" && !isXML) {
                    var m = context.getElementById(match[1]);
                    return m ? [m] : []
                }
            },
            NAME: function (match, context) {
                if (typeof context.getElementsByName !== "undefined") {
                    var ret = [],
                        results = context.getElementsByName(match[1]);
                    for (var i = 0, l = results.length; i < l; i++) {
                        if (results[i].getAttribute("name") === match[1]) {
                            ret.push(results[i])
                        }
                    }
                    return ret.length === 0 ? null : ret
                }
            },
            TAG: function (match, context) {
                return context.getElementsByTagName(match[1])
            }
        },
        preFilter: {
            CLASS: function (match, curLoop, inplace, result, not, isXML) {
                match = " " + match[1].replace(/\\/g, "") + " ";
                if (isXML) {
                    return match
                }
                for (var i = 0, elem;
                (elem = curLoop[i]) != null; i++) {
                    if (elem) {
                        if (not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0)) {
                            if (!inplace) {
                                result.push(elem)
                            }
                        } else {
                            if (inplace) {
                                curLoop[i] = false
                            }
                        }
                    }
                }
                return false
            },
            ID: function (match) {
                return match[1].replace(/\\/g, "")
            },
            TAG: function (match, curLoop) {
                return match[1].toLowerCase()
            },
            CHILD: function (match) {
                if (match[1] === "nth") {
                    var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || !/\D/.test(match[2]) && "0n+" + match[2] || match[2]);
                    match[2] = (test[1] + (test[2] || 1)) - 0;
                    match[3] = test[3] - 0
                }
                match[0] = done++;
                return match
            },
            ATTR: function (match, curLoop, inplace, result, not, isXML) {
                var name = match[1].replace(/\\/g, "");
                if (!isXML && Expr.attrMap[name]) {
                    match[1] = Expr.attrMap[name]
                }
                if (match[2] === "~=") {
                    match[4] = " " + match[4] + " "
                }
                return match
            },
            PSEUDO: function (match, curLoop, inplace, result, not) {
                if (match[1] === "not") {
                    if ((chunker.exec(match[3]) || "").length > 1 || /^\w/.test(match[3])) {
                        match[3] = Sizzle(match[3], null, null, curLoop)
                    } else {
                        var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
                        if (!inplace) {
                            result.push.apply(result, ret)
                        }
                        return false
                    }
                } else {
                    if (Expr.match.POS.test(match[0]) || Expr.match.CHILD.test(match[0])) {
                        return true
                    }
                }
                return match
            },
            POS: function (match) {
                match.unshift(true);
                return match
            }
        },
        filters: {
            enabled: function (elem) {
                return elem.disabled === false && elem.type !== "hidden"
            },
            disabled: function (elem) {
                return elem.disabled === true
            },
            checked: function (elem) {
                return elem.checked === true
            },
            selected: function (elem) {
                elem.parentNode.selectedIndex;
                return elem.selected === true
            },
            parent: function (elem) {
                return !!elem.firstChild
            },
            empty: function (elem) {
                return !elem.firstChild
            },
            has: function (elem, i, match) {
                return !!Sizzle(match[3], elem).length
            },
            header: function (elem) {
                return /h\d/i.test(elem.nodeName)
            },
            text: function (elem) {
                return "text" === elem.type
            },
            radio: function (elem) {
                return "radio" === elem.type
            },
            checkbox: function (elem) {
                return "checkbox" === elem.type
            },
            file: function (elem) {
                return "file" === elem.type
            },
            password: function (elem) {
                return "password" === elem.type
            },
            submit: function (elem) {
                return "submit" === elem.type
            },
            image: function (elem) {
                return "image" === elem.type
            },
            reset: function (elem) {
                return "reset" === elem.type
            },
            button: function (elem) {
                return "button" === elem.type || elem.nodeName.toLowerCase() === "button"
            },
            input: function (elem) {
                return /input|select|textarea|button/i.test(elem.nodeName)
            }
        },
        setFilters: {
            first: function (elem, i) {
                return i === 0
            },
            last: function (elem, i, match, array) {
                return i === array.length - 1
            },
            even: function (elem, i) {
                return i % 2 === 0
            },
            odd: function (elem, i) {
                return i % 2 === 1
            },
            lt: function (elem, i, match) {
                return i < match[3] - 0
            },
            gt: function (elem, i, match) {
                return i > match[3] - 0
            },
            nth: function (elem, i, match) {
                return match[3] - 0 === i
            },
            eq: function (elem, i, match) {
                return match[3] - 0 === i
            }
        },
        filter: {
            PSEUDO: function (elem, match, i, array) {
                var name = match[1],
                    filter = Expr.filters[name];
                if (filter) {
                    return filter(elem, i, match, array)
                } else {
                    if (name === "contains") {
                        return (elem.textContent || elem.innerText || getText([elem]) || "").indexOf(match[3]) >= 0
                    } else {
                        if (name === "not") {
                            var not = match[3];
                            for (var i = 0, l = not.length; i < l; i++) {
                                if (not[i] === elem) {
                                    return false
                                }
                            }
                            return true
                        } else {
                            throw "Syntax error, unrecognized expression: " + name
                        }
                    }
                }
            },
            CHILD: function (elem, match) {
                var type = match[1],
                    node = elem;
                switch (type) {
                case "only":
                case "first":
                    while ((node = node.previousSibling)) {
                        if (node.nodeType === 1) {
                            return false
                        }
                    }
                    if (type === "first") {
                        return true
                    }
                    node = elem;
                case "last":
                    while ((node = node.nextSibling)) {
                        if (node.nodeType === 1) {
                            return false
                        }
                    }
                    return true;
                case "nth":
                    var first = match[2],
                        last = match[3];
                    if (first === 1 && last === 0) {
                        return true
                    }
                    var doneName = match[0],
                        parent = elem.parentNode;
                    if (parent && (parent.sizcache !== doneName || !elem.nodeIndex)) {
                        var count = 0;
                        for (node = parent.firstChild; node; node = node.nextSibling) {
                            if (node.nodeType === 1) {
                                node.nodeIndex = ++count
                            }
                        }
                        parent.sizcache = doneName
                    }
                    var diff = elem.nodeIndex - last;
                    if (first === 0) {
                        return diff === 0
                    } else {
                        return (diff % first === 0 && diff / first >= 0)
                    }
                }
            },
            ID: function (elem, match) {
                return elem.nodeType === 1 && elem.getAttribute("id") === match
            },
            TAG: function (elem, match) {
                return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match
            },
            CLASS: function (elem, match) {
                return (" " + (elem.className || elem.getAttribute("class")) + " ").indexOf(match) > -1
            },
            ATTR: function (elem, match) {
                var name = match[1],
                    result = Expr.attrHandle[name] ? Expr.attrHandle[name](elem) : elem[name] != null ? elem[name] : elem.getAttribute(name),
                    value = result + "",
                    type = match[2],
                    check = match[4];
                return result == null ? type === "!=" : type === "=" ? value === check : type === "*=" ? value.indexOf(check) >= 0 : type === "~=" ? (" " + value + " ").indexOf(check) >= 0 : !check ? value && result !== false : type === "!=" ? value !== check : type === "^=" ? value.indexOf(check) === 0 : type === "$=" ? value.substr(value.length - check.length) === check : type === "|=" ? value === check || value.substr(0, check.length + 1) === check + "-" : false
            },
            POS: function (elem, match, i, array) {
                var name = match[2],
                    filter = Expr.setFilters[name];
                if (filter) {
                    return filter(elem, i, match, array)
                }
            }
        }
    };
    var origPOS = Expr.match.POS;
    for (var type in Expr.match) {
        Expr.match[type] = new RegExp(Expr.match[type].source + /(?![^\[]*\])(?![^\(]*\))/.source);
        Expr.leftMatch[type] = new RegExp(/(^(?:.|\r|\n)*?)/.source + Expr.match[type].source)
    }
    var makeArray = function (array, results) {
        array = Array.prototype.slice.call(array, 0);
        if (results) {
            results.push.apply(results, array);
            return results
        }
        return array
    };
    try {
        Array.prototype.slice.call(document.documentElement.childNodes, 0)
    } catch (e) {
        makeArray = function (array, results) {
            var ret = results || [];
            if (toString.call(array) === "[object Array]") {
                Array.prototype.push.apply(ret, array)
            } else {
                if (typeof array.length === "number") {
                    for (var i = 0, l = array.length; i < l; i++) {
                        ret.push(array[i])
                    }
                } else {
                    for (var i = 0; array[i]; i++) {
                        ret.push(array[i])
                    }
                }
            }
            return ret
        }
    }
    var sortOrder;
    if (document.documentElement.compareDocumentPosition) {
        sortOrder = function (a, b) {
            if (!a.compareDocumentPosition || !b.compareDocumentPosition) {
                if (a == b) {
                    hasDuplicate = true
                }
                return a.compareDocumentPosition ? -1 : 1
            }
            var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
            if (ret === 0) {
                hasDuplicate = true
            }
            return ret
        }
    } else {
        if ("sourceIndex" in document.documentElement) {
            sortOrder = function (a, b) {
                if (!a.sourceIndex || !b.sourceIndex) {
                    if (a == b) {
                        hasDuplicate = true
                    }
                    return a.sourceIndex ? -1 : 1
                }
                var ret = a.sourceIndex - b.sourceIndex;
                if (ret === 0) {
                    hasDuplicate = true
                }
                return ret
            }
        } else {
            if (document.createRange) {
                sortOrder = function (a, b) {
                    if (!a.ownerDocument || !b.ownerDocument) {
                        if (a == b) {
                            hasDuplicate = true
                        }
                        return a.ownerDocument ? -1 : 1
                    }
                    var aRange = a.ownerDocument.createRange(),
                        bRange = b.ownerDocument.createRange();
                    aRange.setStart(a, 0);
                    aRange.setEnd(a, 0);
                    bRange.setStart(b, 0);
                    bRange.setEnd(b, 0);
                    var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
                    if (ret === 0) {
                        hasDuplicate = true
                    }
                    return ret
                }
            }
        }
    }
    function getText(elems) {
        var ret = "",
            elem;
        for (var i = 0; elems[i]; i++) {
            elem = elems[i];
            if (elem.nodeType === 3 || elem.nodeType === 4) {
                ret += elem.nodeValue
            } else {
                if (elem.nodeType !== 8) {
                    ret += getText(elem.childNodes)
                }
            }
        }
        return ret
    }(function () {
        var form = document.createElement("div"),
            id = "script" + (new Date).getTime();
        form.innerHTML = "<a name='" + id + "'/>";
        var root = document.documentElement;
        root.insertBefore(form, root.firstChild);
        if (document.getElementById(id)) {
            Expr.find.ID = function (match, context, isXML) {
                if (typeof context.getElementById !== "undefined" && !isXML) {
                    var m = context.getElementById(match[1]);
                    return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []
                }
            };
            Expr.filter.ID = function (elem, match) {
                var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
                return elem.nodeType === 1 && node && node.nodeValue === match
            }
        }
        root.removeChild(form);
        root = form = null
    })();
    (function () {
        var div = document.createElement("div");
        div.appendChild(document.createComment(""));
        if (div.getElementsByTagName("*").length > 0) {
            Expr.find.TAG = function (match, context) {
                var results = context.getElementsByTagName(match[1]);
                if (match[1] === "*") {
                    var tmp = [];
                    for (var i = 0; results[i]; i++) {
                        if (results[i].nodeType === 1) {
                            tmp.push(results[i])
                        }
                    }
                    results = tmp
                }
                return results
            }
        }
        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)
            }
        }
        div = null
    })();
    if (document.querySelectorAll) {
        (function () {
            var oldSizzle = Sizzle,
                div = document.createElement("div");
            div.innerHTML = "<p class='TEST'></p>";
            if (div.querySelectorAll && div.querySelectorAll(".TEST").length === 0) {
                return
            }
            Sizzle = function (query, context, extra, seed) {
                context = context || document;
                if (!seed && context.nodeType === 9 && !isXML(context)) {
                    try {
                        return makeArray(context.querySelectorAll(query), extra)
                    } catch (e) {}
                }
                return oldSizzle(query, context, extra, seed)
            };
            for (var prop in oldSizzle) {
                Sizzle[prop] = oldSizzle[prop]
            }
            div = null
        })()
    }(function () {
        var div = document.createElement("div");
        div.innerHTML = "<div class='test e'></div><div class='test'></div>";
        if (!div.getElementsByClassName || div.getElementsByClassName("e").length === 0) {
            return
        }
        div.lastChild.className = "e";
        if (div.getElementsByClassName("e").length === 1) {
            return
        }
        Expr.order.splice(1, 0, "CLASS");
        Expr.find.CLASS = function (match, context, isXML) {
            if (typeof context.getElementsByClassName !== "undefined" && !isXML) {
                return context.getElementsByClassName(match[1])
            }
        };
        div = null
    })();

    function dirNodeCheck(dir, cur, doneName, checkSet, nodeCheck, isXML) {
        for (var i = 0, l = checkSet.length; i < l; i++) {
            var elem = checkSet[i];
            if (elem) {
                elem = elem[dir];
                var match = false;
                while (elem) {
                    if (elem.sizcache === doneName) {
                        match = checkSet[elem.sizset];
                        break
                    }
                    if (elem.nodeType === 1 && !isXML) {
                        elem.sizcache = doneName;
                        elem.sizset = i
                    }
                    if (elem.nodeName.toLowerCase() === cur) {
                        match = elem;
                        break
                    }
                    elem = elem[dir]
                }
                checkSet[i] = match
            }
        }
    }
    function dirCheck(dir, cur, doneName, checkSet, nodeCheck, isXML) {
        for (var i = 0, l = checkSet.length; i < l; i++) {
            var elem = checkSet[i];
            if (elem) {
                elem = elem[dir];
                var match = false;
                while (elem) {
                    if (elem.sizcache === doneName) {
                        match = checkSet[elem.sizset];
                        break
                    }
                    if (elem.nodeType === 1) {
                        if (!isXML) {
                            elem.sizcache = doneName;
                            elem.sizset = i
                        }
                        if (typeof cur !== "string") {
                            if (elem === cur) {
                                match = true;
                                break
                            }
                        } else {
                            if (Sizzle.filter(cur, [elem]).length > 0) {
                                match = elem;
                                break
                            }
                        }
                    }
                    elem = elem[dir]
                }
                checkSet[i] = match
            }
        }
    }
    var contains = document.compareDocumentPosition ?
    function (a, b) {
        return a.compareDocumentPosition(b) & 16
    } : function (a, b) {
        return a !== b && (a.contains ? a.contains(b) : true)
    };
    var isXML = function (elem) {
        var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
        return documentElement ? documentElement.nodeName !== "HTML" : false
    };
    var posProcess = function (selector, context) {
        var tmpSet = [],
            later = "",
            match, root = context.nodeType ? [context] : context;
        while ((match = Expr.match.PSEUDO.exec(selector))) {
            later += match[0];
            selector = selector.replace(Expr.match.PSEUDO, "")
        }
        selector = Expr.relative[selector] ? selector + "*" : selector;
        for (var i = 0, l = root.length; i < l; i++) {
            Sizzle(selector, root[i], tmpSet)
        }
        return Sizzle.filter(later, tmpSet)
    };
    return Sizzle
})();
/*
 * SWFObject v2.1 <http://code.google.com/p/swfobject/>
 * Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
 * This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
 *
 * Modified for inclusion in Shadowbox.js
 */
S.flash = (function () {
    var swfobject = function () {
        var UNDEF = "undefined",
            OBJECT = "object",
            SHOCKWAVE_FLASH = "Shockwave Flash",
            SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
            FLASH_MIME_TYPE = "application/x-shockwave-flash",
            EXPRESS_INSTALL_ID = "SWFObjectExprInst",
            win = window,
            doc = document,
            nav = navigator,
            domLoadFnArr = [],
            regObjArr = [],
            objIdArr = [],
            listenersArr = [],
            script, timer = null,
            storedAltContent = null,
            storedAltContentId = null,
            isDomLoaded = false,
            isExpressInstallActive = false;
        var ua = function () {
            var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
                playerVersion = [0, 0, 0],
                d = null;
            if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
                d = nav.plugins[SHOCKWAVE_FLASH].description;
                if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) {
                    d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
                    playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
                    playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
                    playerVersion[2] = /r/.test(d) ? parseInt(d.replace(/^.*r(.*)$/, "$1"), 10) : 0
                }
            } else {
                if (typeof win.ActiveXObject != UNDEF) {
                    var a = null,
                        fp6Crash = false;
                    try {
                        a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".7")
                    } catch (e) {
                        try {
                            a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".6");
                            playerVersion = [6, 0, 21];
                            a.AllowScriptAccess = "always"
                        } catch (e) {
                            if (playerVersion[0] == 6) {
                                fp6Crash = true
                            }
                        }
                        if (!fp6Crash) {
                            try {
                                a = new ActiveXObject(SHOCKWAVE_FLASH_AX)
                            } catch (e) {}
                        }
                    }
                    if (!fp6Crash && a) {
                        try {
                            d = a.GetVariable("$version");
                            if (d) {
                                d = d.split(" ")[1].split(",");
                                playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]
                            }
                        } catch (e) {}
                    }
                }
            }
            var u = nav.userAgent.toLowerCase(),
                p = nav.platform.toLowerCase(),
                webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false,
                ie = false,
                windows = p ? /win/.test(p) : /win/.test(u),
                mac = p ? /mac/.test(p) : /mac/.test(u);
/*@cc_on
			ie = true;
			@if (@_win32)
				windows = true;
			@elif (@_mac)
				mac = true;
			@end
		@*/
            return {
                w3cdom: w3cdom,
                pv: playerVersion,
                webkit: webkit,
                ie: ie,
                win: windows,
                mac: mac
            }
        }();
        var onDomLoad = function () {
            if (!ua.w3cdom) {
                return
            }
            addDomLoadEvent(main);
            if (ua.ie && ua.win) {
                try {
                    doc.write("<script id=__ie_ondomload defer=true src=//:><\/script>");
                    script = getElementById("__ie_ondomload");
                    if (script) {
                        addListener(script, "onreadystatechange", checkReadyState)
                    }
                } catch (e) {}
            }
            if (ua.webkit && typeof doc.readyState != UNDEF) {
                timer = setInterval(function () {
                    if (/loaded|complete/.test(doc.readyState)) {
                        callDomLoadFunctions()
                    }
                }, 10)
            }
            if (typeof doc.addEventListener != UNDEF) {
                doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, null)
            }
            addLoadEvent(callDomLoadFunctions)
        }();

        function checkReadyState() {
            if (script.readyState == "complete") {
                script.parentNode.removeChild(script);
                callDomLoadFunctions()
            }
        }
        function callDomLoadFunctions() {
            if (isDomLoaded) {
                return
            }
            if (ua.ie && ua.win) {
                var s = createElement("span");
                try {
                    var t = doc.getElementsByTagName("body")[0].appendChild(s);
                    t.parentNode.removeChild(t)
                } catch (e) {
                    return
                }
            }
            isDomLoaded = true;
            if (timer) {
                clearInterval(timer);
                timer = null
            }
            var dl = domLoadFnArr.length;
            for (var i = 0; i < dl; i++) {
                domLoadFnArr[i]()
            }
        }
        function addDomLoadEvent(fn) {
            if (isDomLoaded) {
                fn()
            } else {
                domLoadFnArr[domLoadFnArr.length] = fn
            }
        }
        function addLoadEvent(fn) {
            if (typeof win.addEventListener != UNDEF) {
                win.addEventListener("load", fn, false)
            } else {
                if (typeof doc.addEventListener != UNDEF) {
                    doc.addEventListener("load", fn, false)
                } else {
                    if (typeof win.attachEvent != UNDEF) {
                        addListener(win, "onload", fn)
                    } else {
                        if (typeof win.onload == "function") {
                            var fnOld = win.onload;
                            win.onload = function () {
                                fnOld();
                                fn()
                            }
                        } else {
                            win.onload = fn
                        }
                    }
                }
            }
        }
        function main() {
            var rl = regObjArr.length;
            for (var i = 0; i < rl; i++) {
                var id = regObjArr[i].id;
                if (ua.pv[0] > 0) {
                    var obj = getElementById(id);
                    if (obj) {
                        regObjArr[i].width = obj.getAttribute("width") ? obj.getAttribute("width") : "0";
                        regObjArr[i].height = obj.getAttribute("height") ? obj.getAttribute("height") : "0";
                        if (hasPlayerVersion(regObjArr[i].swfVersion)) {
                            if (ua.webkit && ua.webkit < 312) {
                                fixParams(obj)
                            }
                            setVisibility(id, true)
                        } else {
                            if (regObjArr[i].expressInstall && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) {
                                showExpressInstall(regObjArr[i])
                            } else {
                                displayAltContent(obj)
                            }
                        }
                    }
                } else {
                    setVisibility(id, true)
                }
            }
        }
        function fixParams(obj) {
            var nestedObj = obj.getElementsByTagName(OBJECT)[0];
            if (nestedObj) {
                var e = createElement("embed"),
                    a = nestedObj.attributes;
                if (a) {
                    var al = a.length;
                    for (var i = 0; i < al; i++) {
                        if (a[i].nodeName == "DATA") {
                            e.setAttribute("src", a[i].nodeValue)
                        } else {
                            e.setAttribute(a[i].nodeName, a[i].nodeValue)
                        }
                    }
                }
                var c = nestedObj.childNodes;
                if (c) {
                    var cl = c.length;
                    for (var j = 0; j < cl; j++) {
                        if (c[j].nodeType == 1 && c[j].nodeName == "PARAM") {
                            e.setAttribute(c[j].getAttribute("name"), c[j].getAttribute("value"))
                        }
                    }
                }
                obj.parentNode.replaceChild(e, obj)
            }
        }
        function showExpressInstall(regObj) {
            isExpressInstallActive = true;
            var obj = getElementById(regObj.id);
            if (obj) {
                if (regObj.altContentId) {
                    var ac = getElementById(regObj.altContentId);
                    if (ac) {
                        storedAltContent = ac;
                        storedAltContentId = regObj.altContentId
                    }
                } else {
                    storedAltContent = abstractAltContent(obj)
                }
                if (!(/%$/.test(regObj.width)) && parseInt(regObj.width, 10) < 310) {
                    regObj.width = "310"
                }
                if (!(/%$/.test(regObj.height)) && parseInt(regObj.height, 10) < 137) {
                    regObj.height = "137"
                }
                doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
                var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
                    dt = doc.title,
                    fv = "MMredirectURL=" + win.location + "&MMplayerType=" + pt + "&MMdoctitle=" + dt,
                    replaceId = regObj.id;
                if (ua.ie && ua.win && obj.readyState != 4) {
                    var newObj = createElement("div");
                    replaceId += "SWFObjectNew";
                    newObj.setAttribute("id", replaceId);
                    obj.parentNode.insertBefore(newObj, obj);
                    obj.style.display = "none";
                    var fn = function () {
                        obj.parentNode.removeChild(obj)
                    };
                    addListener(win, "onload", fn)
                }
                createSWF({
                    data: regObj.expressInstall,
                    id: EXPRESS_INSTALL_ID,
                    width: regObj.width,
                    height: regObj.height
                }, {
                    flashvars: fv
                }, replaceId)
            }
        }
        function displayAltContent(obj) {
            if (ua.ie && ua.win && obj.readyState != 4) {
                var el = createElement("div");
                obj.parentNode.insertBefore(el, obj);
                el.parentNode.replaceChild(abstractAltContent(obj), el);
                obj.style.display = "none";
                var fn = function () {
                    obj.parentNode.removeChild(obj)
                };
                addListener(win, "onload", fn)
            } else {
                obj.parentNode.replaceChild(abstractAltContent(obj), obj)
            }
        }
        function abstractAltContent(obj) {
            var ac = createElement("div");
            if (ua.win && ua.ie) {
                ac.innerHTML = obj.innerHTML
            } else {
                var nestedObj = obj.getElementsByTagName(OBJECT)[0];
                if (nestedObj) {
                    var c = nestedObj.childNodes;
                    if (c) {
                        var cl = c.length;
                        for (var i = 0; i < cl; i++) {
                            if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
                                ac.appendChild(c[i].cloneNode(true))
                            }
                        }
                    }
                }
            }
            return ac
        }
        function createSWF(attObj, parObj, id) {
            var r, el = getElementById(id);
            if (el) {
                if (typeof attObj.id == UNDEF) {
                    attObj.id = id
                }
                if (ua.ie && ua.win) {
                    var att = "";
                    for (var i in attObj) {
                        if (attObj[i] != Object.prototype[i]) {
                            if (i.toLowerCase() == "data") {
                                parObj.movie = attObj[i]
                            } else {
                                if (i.toLowerCase() == "styleclass") {
                                    att += ' class="' + attObj[i] + '"'
                                } else {
                                    if (i.toLowerCase() != "classid") {
                                        att += " " + i + '="' + attObj[i] + '"'
                                    }
                                }
                            }
                        }
                    }
                    var par = "";
                    for (var j in parObj) {
                        if (parObj[j] != Object.prototype[j]) {
                            par += '<param name="' + j + '" value="' + parObj[j] + '" />'
                        }
                    }
                    el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + ">" + par + "</object>";
                    objIdArr[objIdArr.length] = attObj.id;
                    r = getElementById(attObj.id)
                } else {
                    if (ua.webkit && ua.webkit < 312) {
                        var e = createElement("embed");
                        e.setAttribute("type", FLASH_MIME_TYPE);
                        for (var k in attObj) {
                            if (attObj[k] != Object.prototype[k]) {
                                if (k.toLowerCase() == "data") {
                                    e.setAttribute("src", attObj[k])
                                } else {
                                    if (k.toLowerCase() == "styleclass") {
                                        e.setAttribute("class", attObj[k])
                                    } else {
                                        if (k.toLowerCase() != "classid") {
                                            e.setAttribute(k, attObj[k])
                                        }
                                    }
                                }
                            }
                        }
                        for (var l in parObj) {
                            if (parObj[l] != Object.prototype[l]) {
                                if (l.toLowerCase() != "movie") {
                                    e.setAttribute(l, parObj[l])
                                }
                            }
                        }
                        el.parentNode.replaceChild(e, el);
                        r = e
                    } else {
                        var o = createElement(OBJECT);
                        o.setAttribute("type", FLASH_MIME_TYPE);
                        for (var m in attObj) {
                            if (attObj[m] != Object.prototype[m]) {
                                if (m.toLowerCase() == "styleclass") {
                                    o.setAttribute("class", attObj[m])
                                } else {
                                    if (m.toLowerCase() != "classid") {
                                        o.setAttribute(m, attObj[m])
                                    }
                                }
                            }
                        }
                        for (var n in parObj) {
                            if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") {
                                createObjParam(o, n, parObj[n])
                            }
                        }
                        el.parentNode.replaceChild(o, el);
                        r = o
                    }
                }
            }
            return r
        }
        function createObjParam(el, pName, pValue) {
            var p = createElement("param");
            p.setAttribute("name", pName);
            p.setAttribute("value", pValue);
            el.appendChild(p)
        }
        function removeSWF(id) {
            var obj = getElementById(id);
            if (obj && (obj.nodeName == "OBJECT" || obj.nodeName == "EMBED")) {
                if (ua.ie && ua.win) {
                    if (obj.readyState == 4) {
                        removeObjectInIE(id)
                    } else {
                        win.attachEvent("onload", function () {
                            removeObjectInIE(id)
                        })
                    }
                } else {
                    obj.parentNode.removeChild(obj)
                }
            }
        }
        function removeObjectInIE(id) {
            var obj = getElementById(id);
            if (obj) {
                for (var i in obj) {
                    if (typeof obj[i] == "function") {
                        obj[i] = null
                    }
                }
                obj.parentNode.removeChild(obj)
            }
        }
        function getElementById(id) {
            var el = null;
            try {
                el = doc.getElementById(id)
            } catch (e) {}
            return el
        }
        function createElement(el) {
            return doc.createElement(el)
        }
        function addListener(target, eventType, fn) {
            target.attachEvent(eventType, fn);
            listenersArr[listenersArr.length] = [target, eventType, fn]
        }
        function hasPlayerVersion(rv) {
            var pv = ua.pv,
                v = rv.split(".");
            v[0] = parseInt(v[0], 10);
            v[1] = parseInt(v[1], 10) || 0;
            v[2] = parseInt(v[2], 10) || 0;
            return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false
        }
        function createCSS(sel, decl) {
            if (ua.ie && ua.mac) {
                return
            }
            var h = doc.getElementsByTagName("head")[0],
                s = createElement("style");
            s.setAttribute("type", "text/css");
            s.setAttribute("media", "screen");
            if (!(ua.ie && ua.win) && typeof doc.createTextNode != UNDEF) {
                s.appendChild(doc.createTextNode(sel + " {" + decl + "}"))
            }
            h.appendChild(s);
            if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
                var ls = doc.styleSheets[doc.styleSheets.length - 1];
                if (typeof ls.addRule == OBJECT) {
                    ls.addRule(sel, decl)
                }
            }
        }
        function setVisibility(id, isVisible) {
            var v = isVisible ? "visible" : "hidden";
            if (isDomLoaded && getElementById(id)) {
                getElementById(id).style.visibility = v
            } else {
                createCSS("#" + id, "visibility:" + v)
            }
        }
        function urlEncodeIfNecessary(s) {
            var regex = /[\\\"<>\.;]/;
            var hasBadChars = regex.exec(s) != null;
            return hasBadChars ? encodeURIComponent(s) : s
        }
        var cleanup = function () {
            if (ua.ie && ua.win) {
                window.attachEvent("onunload", function () {
                    var ll = listenersArr.length;
                    for (var i = 0; i < ll; i++) {
                        listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2])
                    }
                    var il = objIdArr.length;
                    for (var j = 0; j < il; j++) {
                        removeSWF(objIdArr[j])
                    }
                    for (var k in ua) {
                        ua[k] = null
                    }
                    ua = null;
                    for (var l in swfobject) {
                        swfobject[l] = null
                    }
                    swfobject = null
                })
            }
        }();
        return {
            registerObject: function (objectIdStr, swfVersionStr, xiSwfUrlStr) {
                if (!ua.w3cdom || !objectIdStr || !swfVersionStr) {
                    return
                }
                var regObj = {};
                regObj.id = objectIdStr;
                regObj.swfVersion = swfVersionStr;
                regObj.expressInstall = xiSwfUrlStr ? xiSwfUrlStr : false;
                regObjArr[regObjArr.length] = regObj;
                setVisibility(objectIdStr, false)
            },
            getObjectById: function (objectIdStr) {
                var r = null;
                if (ua.w3cdom) {
                    var o = getElementById(objectIdStr);
                    if (o) {
                        var n = o.getElementsByTagName(OBJECT)[0];
                        if (!n || (n && typeof o.SetVariable != UNDEF)) {
                            r = o
                        } else {
                            if (typeof n.SetVariable != UNDEF) {
                                r = n
                            }
                        }
                    }
                }
                return r
            },
            embedSWF: function (swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj) {
                if (!ua.w3cdom || !swfUrlStr || !replaceElemIdStr || !widthStr || !heightStr || !swfVersionStr) {
                    return
                }
                widthStr += "";
                heightStr += "";
                if (hasPlayerVersion(swfVersionStr)) {
                    setVisibility(replaceElemIdStr, false);
                    var att = {};
                    if (attObj && typeof attObj === OBJECT) {
                        for (var i in attObj) {
                            if (attObj[i] != Object.prototype[i]) {
                                att[i] = attObj[i]
                            }
                        }
                    }
                    att.data = swfUrlStr;
                    att.width = widthStr;
                    att.height = heightStr;
                    var par = {};
                    if (parObj && typeof parObj === OBJECT) {
                        for (var j in parObj) {
                            if (parObj[j] != Object.prototype[j]) {
                                par[j] = parObj[j]
                            }
                        }
                    }
                    if (flashvarsObj && typeof flashvarsObj === OBJECT) {
                        for (var k in flashvarsObj) {
                            if (flashvarsObj[k] != Object.prototype[k]) {
                                if (typeof par.flashvars != UNDEF) {
                                    par.flashvars += "&" + k + "=" + flashvarsObj[k]
                                } else {
                                    par.flashvars = k + "=" + flashvarsObj[k]
                                }
                            }
                        }
                    }
                    addDomLoadEvent(function () {
                        createSWF(att, par, replaceElemIdStr);
                        if (att.id == replaceElemIdStr) {
                            setVisibility(replaceElemIdStr, true)
                        }
                    })
                } else {
                    if (xiSwfUrlStr && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) {
                        isExpressInstallActive = true;
                        setVisibility(replaceElemIdStr, false);
                        addDomLoadEvent(function () {
                            var regObj = {};
                            regObj.id = regObj.altContentId = replaceElemIdStr;
                            regObj.width = widthStr;
                            regObj.height = heightStr;
                            regObj.expressInstall = xiSwfUrlStr;
                            showExpressInstall(regObj)
                        })
                    }
                }
            },
            getFlashPlayerVersion: function () {
                return {
                    major: ua.pv[0],
                    minor: ua.pv[1],
                    release: ua.pv[2]
                }
            },
            hasFlashPlayerVersion: hasPlayerVersion,
            createSWF: function (attObj, parObj, replaceElemIdStr) {
                if (ua.w3cdom) {
                    return createSWF(attObj, parObj, replaceElemIdStr)
                } else {
                    return undefined
                }
            },
            removeSWF: function (objElemIdStr) {
                if (ua.w3cdom) {
                    removeSWF(objElemIdStr)
                }
            },
            createCSS: function (sel, decl) {
                if (ua.w3cdom) {
                    createCSS(sel, decl)
                }
            },
            addDomLoadEvent: addDomLoadEvent,
            addLoadEvent: addLoadEvent,
            getQueryParamValue: function (param) {
                var q = doc.location.search || doc.location.hash;
                if (param == null) {
                    return urlEncodeIfNecessary(q)
                }
                if (q) {
                    var pairs = q.substring(1).split("&");
                    for (var i = 0; i < pairs.length; i++) {
                        if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
                            return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)))
                        }
                    }
                }
                return ""
            },
            expressInstallCallback: function () {
                if (isExpressInstallActive && storedAltContent) {
                    var obj = getElementById(EXPRESS_INSTALL_ID);
                    if (obj) {
                        obj.parentNode.replaceChild(storedAltContent, obj);
                        if (storedAltContentId) {
                            setVisibility(storedAltContentId, true);
                            if (ua.ie && ua.win) {
                                storedAltContent.style.display = "block"
                            }
                        }
                        storedAltContent = null;
                        storedAltContentId = null;
                        isExpressInstallActive = false
                    }
                }
            }
        }
    }();
    return swfobject
})();
S.lang = {
    code: "es",
    of: "de",
    loading: "cargando",
    cancel: "Cancelar",
    next: "Siguiente",
    previous: "Anterior",
    play: "Reproducir",
    pause: "Pausa",
    close: "Cerrar",
    errors: {
        single: 'Debes instalar el plugin <a href="{0}">{1}</a> en el navegador para ver este contenido.',
        shared: 'Debes instalar el <a href="{0}">{1}</a> y el <a href="{2}">{3}</a> en el navegador para ver este contenido.',
        either: 'Debes instalar o bien el <a href="{0}">{1}</a> o el <a href="{2}">{3}</a> en el navegador para ver este contenido.'
    }
};
var pre, proxyId = "sb-drag-proxy",
    dragData, dragProxy, dragTarget;

function resetDrag() {
    dragData = {
        x: 0,
        y: 0,
        startX: null,
        startY: null
    }
}
function updateProxy() {
    var dims = S.dimensions;
    apply(dragProxy.style, {
        height: dims.innerHeight + "px",
        width: dims.innerWidth + "px"
    })
}
function enableDrag() {
    resetDrag();
    var style = ["position:absolute", "cursor:" + (S.isGecko ? "-moz-grab" : "move"), "background-color:" + (S.isIE ? "#fff;filter:alpha(opacity=0)" : "transparent")].join(";");
    S.appendHTML(S.skin.body, '<div id="' + proxyId + '" style="' + style + '"></div>');
    dragProxy = get(proxyId);
    updateProxy();
    addEvent(dragProxy, "mousedown", startDrag)
}
function disableDrag() {
    if (dragProxy) {
        removeEvent(dragProxy, "mousedown", startDrag);
        remove(dragProxy);
        dragProxy = null
    }
    dragTarget = null
}
function startDrag(e) {
    preventDefault(e);
    var xy = getPageXY(e);
    dragData.startX = xy[0];
    dragData.startY = xy[1];
    dragTarget = get(S.player.id);
    addEvent(document, "mousemove", positionDrag);
    addEvent(document, "mouseup", endDrag);
    if (S.isGecko) {
        dragProxy.style.cursor = "-moz-grabbing"
    }
}
function positionDrag(e) {
    var player = S.player,
        dims = S.dimensions,
        xy = getPageXY(e);
    var moveX = xy[0] - dragData.startX;
    dragData.startX += moveX;
    dragData.x = Math.max(Math.min(0, dragData.x + moveX), dims.innerWidth - player.width);
    var moveY = xy[1] - dragData.startY;
    dragData.startY += moveY;
    dragData.y = Math.max(Math.min(0, dragData.y + moveY), dims.innerHeight - player.height);
    apply(dragTarget.style, {
        left: dragData.x + "px",
        top: dragData.y + "px"
    })
}
function endDrag() {
    removeEvent(document, "mousemove", positionDrag);
    removeEvent(document, "mouseup", endDrag);
    if (S.isGecko) {
        dragProxy.style.cursor = "-moz-grab"
    }
}
S.img = function (obj, id) {
    this.obj = obj;
    this.id = id;
    this.ready = false;
    var self = this;
    pre = new Image();
    pre.onload = function () {
        self.height = obj.height ? parseInt(obj.height, 10) : pre.height;
        self.width = obj.width ? parseInt(obj.width, 10) : pre.width;
        self.ready = true;
        pre.onload = null;
        pre = null
    };
    pre.src = obj.content
};
S.img.ext = ["bmp", "gif", "jpg", "jpeg", "png"];
S.img.prototype = {
    append: function (body, dims) {
        var img = document.createElement("img");
        img.id = this.id;
        img.src = this.obj.content;
        img.style.position = "absolute";
        var height, width;
        if (dims.oversized && S.options.handleOversize == "resize") {
            height = dims.innerHeight;
            width = dims.innerWidth
        } else {
            height = this.height;
            width = this.width
        }
        img.setAttribute("height", height);
        img.setAttribute("width", width);
        body.appendChild(img)
    },
    remove: function () {
        var el = get(this.id);
        if (el) {
            remove(el)
        }
        disableDrag();
        if (pre) {
            pre.onload = null;
            pre = null
        }
    },
    onLoad: function () {
        var dims = S.dimensions;
        if (dims.oversized && S.options.handleOversize == "drag") {
            enableDrag()
        }
    },
    onWindowResize: function () {
        var dims = S.dimensions;
        switch (S.options.handleOversize) {
        case "resize":
            var el = get(this.id);
            el.height = dims.innerHeight;
            el.width = dims.innerWidth;
            break;
        case "drag":
            if (dragTarget) {
                var top = parseInt(S.getStyle(dragTarget, "top")),
                    left = parseInt(S.getStyle(dragTarget, "left"));
                if (top + this.height < dims.innerHeight) {
                    dragTarget.style.top = dims.innerHeight - this.height + "px"
                }
                if (left + this.width < dims.innerWidth) {
                    dragTarget.style.left = dims.innerWidth - this.width + "px"
                }
                updateProxy()
            }
            break
        }
    }
};
S.iframe = function (obj, id) {
    this.obj = obj;
    this.id = id;
    var overlay = get("sb-overlay");
    this.height = obj.height ? parseInt(obj.height, 10) : overlay.offsetHeight;
    this.width = obj.width ? parseInt(obj.width, 10) : overlay.offsetWidth
};
S.iframe.prototype = {
    append: function (body, dims) {
        var html = '<iframe id="' + this.id + '" name="' + this.id + '" height="100%" width="100%" frameborder="0" marginwidth="0" marginheight="0" style="visibility:hidden" onload="this.style.visibility=\'visible\'" scrolling="auto"';
        if (S.isIE) {
            html += ' allowtransparency="true"';
            if (S.isIE6) {
                html += " src=\"javascript:false;document.write('');\""
            }
        }
        html += "></iframe>";
        body.innerHTML = html
    },
    remove: function () {
        var el = get(this.id);
        if (el) {
            remove(el);
            if (S.isGecko) {
                delete window.frames[this.id]
            }
        }
    },
    onLoad: function () {
        var win = S.isIE ? get(this.id).contentWindow : window.frames[this.id];
        win.location.href = this.obj.content
    }
};
S.html = function (obj, id) {
    this.obj = obj;
    this.id = id;
    this.height = obj.height ? parseInt(obj.height, 10) : 300;
    this.width = obj.width ? parseInt(obj.width, 10) : 500
};
S.html.prototype = {
    append: function (body, dims) {
        var div = document.createElement("div");
        div.id = this.id;
        div.className = "html";
        div.innerHTML = this.obj.content;
        body.appendChild(div)
    },
    remove: function () {
        var el = get(this.id);
        if (el) {
            remove(el)
        }
    }
};
S.swf = function (obj, id) {
    this.obj = obj;
    this.id = id;
    this.height = obj.height ? parseInt(obj.height, 10) : 300;
    this.width = obj.width ? parseInt(obj.width, 10) : 300
};
S.swf.ext = ["swf"];
S.swf.prototype = {
    append: function (body, dims) {
        var tmp = document.createElement("div");
        tmp.id = this.id;
        body.appendChild(tmp);
        var height = dims.innerHeight,
            width = dims.innerWidth,
            swf = this.obj.content,
            version = S.options.flashVersion,
            express = S.path + "expressInstall.swf",
            flashvars = S.options.flashVars,
            params = S.options.flashParams;
        S.flash.embedSWF(swf, this.id, width, height, version, express, flashvars, params)
    },
    remove: function () {
        S.flash.expressInstallCallback();
        S.flash.removeSWF(this.id)
    },
    onWindowResize: function () {
        var dims = S.dimensions,
            el = get(this.id);
        el.height = dims.innerHeight;
        el.width = dims.innerWidth
    }
};
var jwControllerHeight = 20;
S.flv = function (obj, id) {
    this.obj = obj;
    this.id = id;
    this.height = obj.height ? parseInt(obj.height, 10) : 300;
    if (S.options.showMovieControls) {
        this.height += jwControllerHeight
    }
    this.width = obj.width ? parseInt(obj.width, 10) : 300
};
S.flv.ext = ["flv", "m4v"];
S.flv.prototype = {
    append: function (body, dims) {
        var tmp = document.createElement("div");
        tmp.id = this.id;
        body.appendChild(tmp);
        var height = dims.innerHeight,
            width = dims.innerWidth,
            swf = S.path + "player.swf",
            version = S.options.flashVersion,
            express = S.path + "expressInstall.swf",
            flashvars = apply({
                file: this.obj.content,
                height: height,
                width: width,
                autostart: (S.options.autoplayMovies ? "true" : "false"),
                controlbar: (S.options.showMovieControls ? "bottom" : "none"),
                backcolor: "0x000000",
                frontcolor: "0xCCCCCC",
                lightcolor: "0x557722"
            }, S.options.flashVars),
            params = S.options.flashParams;
        S.flash.embedSWF(swf, this.id, width, height, version, express, flashvars, params)
    },
    remove: function () {
        S.flash.expressInstallCallback();
        S.flash.removeSWF(this.id)
    },
    onWindowResize: function () {
        var dims = S.dimensions,
            el = get(this.id);
        el.height = dims.innerHeight;
        el.width = dims.innerWidth
    }
};
var qtControllerHeight = 16;
S.qt = function (obj, id) {
    this.obj = obj;
    this.id = id;
    this.height = obj.height ? parseInt(obj.height, 10) : 300;
    if (S.options.showMovieControls) {
        this.height += qtControllerHeight
    }
    this.width = obj.width ? parseInt(obj.width, 10) : 300
};
S.qt.ext = ["dv", "mov", "moov", "movie", "mp4", "avi", "mpg", "mpeg"];
S.qt.prototype = {
    append: function (body, dims) {
        var opt = S.options,
            autoplay = String(opt.autoplayMovies),
            controls = String(opt.showMovieControls);
        var html = "<object",
            movie = {
                id: this.id,
                name: this.id,
                height: this.height,
                width: this.width,
                kioskmode: "true"
            };
        if (S.isIE) {
            movie.classid = "clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B";
            movie.codebase = "http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"
        } else {
            movie.type = "video/quicktime";
            movie.data = this.obj.content
        }
        for (var m in movie) {
            html += " " + m + '="' + movie[m] + '"'
        }
        html += ">";
        var params = {
            src: this.obj.content,
            scale: "aspect",
            controller: controls,
            autoplay: autoplay
        };
        for (var p in params) {
            html += '<param name="' + p + '" value="' + params[p] + '">'
        }
        html += "</object>";
        body.innerHTML = html
    },
    remove: function () {
        try {
            document[this.id].Stop()
        } catch (e) {}
        var el = get(this.id);
        if (el) {
            remove(el)
        }
    }
};
var wmpControllerHeight = (S.isIE ? 70 : 45);
S.wmp = function (obj, id) {
    this.obj = obj;
    this.id = id;
    this.height = obj.height ? parseInt(obj.height, 10) : 300;
    if (S.options.showMovieControls) {
        this.height += wmpControllerHeight
    }
    this.width = obj.width ? parseInt(obj.width, 10) : 300
};
S.wmp.ext = ["asf", "avi", "mpg", "mpeg", "wm", "wmv"];
S.wmp.prototype = {
    append: function (body, dims) {
        var opt = S.options,
            autoplay = opt.autoplayMovies ? 1 : 0;
        var movie = '<object id="' + this.id + '" name="' + this.id + '" height="' + this.height + '" width="' + this.width + '"',
            params = {
                autostart: opt.autoplayMovies ? 1 : 0
            };
        if (S.isIE) {
            movie += ' classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6"';
            params.url = this.obj.content;
            params.uimode = opt.showMovieControls ? "full" : "none"
        } else {
            movie += ' type="video/x-ms-wmv"';
            movie += ' data="' + this.obj.content + '"';
            params.showcontrols = opt.showMovieControls ? 1 : 0
        }
        movie += ">";
        for (var p in params) {
            movie += '<param name="' + p + '" value="' + params[p] + '">'
        }
        movie += "</object>";
        body.innerHTML = movie
    },
    remove: function () {
        if (S.isIE) {
            try {
                window[this.id].controls.stop();
                window[this.id].URL = "movie" + now() + ".wmv";
                window[this.id] = function () {}
            } catch (e) {}
        }
        var el = get(this.id);
        if (el) {
            setTimeout(function () {
                remove(el)
            }, 10)
        }
    }
};
var overlayOn = false,
    visibilityCache = [],
    pngIds = ["sb-nav-close", "sb-nav-next", "sb-nav-play", "sb-nav-pause", "sb-nav-previous"],
    container, overlay, wrapper, doWindowResize = true;

function animate(el, property, to, duration, callback) {
    var isOpacity = (property == "opacity"),
        anim = isOpacity ? S.setOpacity : function (el, value) {
            el.style[property] = "" + value + "px"
        };
    if (duration == 0 || (!isOpacity && !S.options.animate) || (isOpacity && !S.options.animateFade)) {
        anim(el, to);
        if (callback) {
            callback()
        }
        return
    }
    var from = parseFloat(S.getStyle(el, property)) || 0;
    var delta = to - from;
    if (delta == 0) {
        if (callback) {
            callback()
        }
        return
    }
    duration *= 1000;
    var begin = now(),
        ease = S.ease,
        end = begin + duration,
        time;
    var interval = setInterval(function () {
        time = now();
        if (time >= end) {
            clearInterval(interval);
            interval = null;
            anim(el, to);
            if (callback) {
                callback()
            }
        } else {
            anim(el, from + ease((time - begin) / duration) * delta)
        }
    }, 10)
}
function setSize() {
    container.style.height = S.getWindowSize("Height") + "px";
    container.style.width = S.getWindowSize("Width") + "px"
}
function setPosition() {
    container.style.top = document.documentElement.scrollTop + "px";
    container.style.left = document.documentElement.scrollLeft + "px"
}
function toggleTroubleElements(on) {
    if (on) {
        each(visibilityCache, function (i, el) {
            el[0].style.visibility = el[1] || ""
        })
    } else {
        visibilityCache = [];
        each(S.options.troubleElements, function (i, tag) {
            each(document.getElementsByTagName(tag), function (j, el) {
                visibilityCache.push([el, el.style.visibility]);
                el.style.visibility = "hidden"
            })
        })
    }
}
function toggleNav(id, on) {
    var el = get("sb-nav-" + id);
    if (el) {
        el.style.display = on ? "" : "none"
    }
}
function toggleLoading(on, callback) {
    var loading = get("sb-loading"),
        playerName = S.getCurrent().player,
        anim = (playerName == "img" || playerName == "html");
    if (on) {
        S.setOpacity(loading, 0);
        loading.style.display = "block";
        var wrapped = function () {
            S.clearOpacity(loading);
            if (callback) {
                callback()
            }
        };
        if (anim) {
            animate(loading, "opacity", 1, S.options.fadeDuration, wrapped)
        } else {
            wrapped()
        }
    } else {
        var wrapped = function () {
            loading.style.display = "none";
            S.clearOpacity(loading);
            if (callback) {
                callback()
            }
        };
        if (anim) {
            animate(loading, "opacity", 0, S.options.fadeDuration, wrapped)
        } else {
            wrapped()
        }
    }
}
function buildBars(callback) {
    var obj = S.getCurrent();
    get("sb-title-inner").innerHTML = obj.title || "";
    var close, next, play, pause, previous;
    if (S.options.displayNav) {
        close = true;
        var len = S.gallery.length;
        if (len > 1) {
            if (S.options.continuous) {
                next = previous = true
            } else {
                next = (len - 1) > S.current;
                previous = S.current > 0
            }
        }
        if (S.options.slideshowDelay > 0 && S.hasNext()) {
            pause = !S.isPaused();
            play = !pause
        }
    } else {
        close = next = play = pause = previous = false
    }
    toggleNav("close", close);
    toggleNav("next", next);
    toggleNav("play", play);
    toggleNav("pause", pause);
    toggleNav("previous", previous);
    var counter = "";
    if (S.options.displayCounter && S.gallery.length > 1) {
        var len = S.gallery.length;
        if (S.options.counterType == "skip") {
            var i = 0,
                end = len,
                limit = parseInt(S.options.counterLimit) || 0;
            if (limit < len && limit > 2) {
                var h = Math.floor(limit / 2);
                i = S.current - h;
                if (i < 0) {
                    i += len
                }
                end = S.current + (limit - h);
                if (end > len) {
                    end -= len
                }
            }
            while (i != end) {
                if (i == len) {
                    i = 0
                }
                counter += '<a onclick="Shadowbox.change(' + i + ');"';
                if (i == S.current) {
                    counter += ' class="sb-counter-current"'
                }
                counter += ">" + (++i) + "</a>"
            }
        } else {
            counter = [S.current + 1, S.lang.of, len].join(" ")
        }
    }
    get("sb-counter").innerHTML = counter;
    callback()
}
function showBars(callback) {
    var titleInner = get("sb-title-inner"),
        infoInner = get("sb-info-inner"),
        duration = 0.35;
    titleInner.style.visibility = infoInner.style.visibility = "";
    if (titleInner.innerHTML != "") {
        animate(titleInner, "marginTop", 0, duration)
    }
    animate(infoInner, "marginTop", 0, duration, callback)
}
function hideBars(anim, callback) {
    var title = get("sb-title"),
        info = get("sb-info"),
        titleHeight = title.offsetHeight,
        infoHeight = info.offsetHeight,
        titleInner = get("sb-title-inner"),
        infoInner = get("sb-info-inner"),
        duration = (anim ? 0.35 : 0);
    animate(titleInner, "marginTop", titleHeight, duration);
    animate(infoInner, "marginTop", infoHeight * -1, duration, function () {
        titleInner.style.visibility = infoInner.style.visibility = "hidden";
        callback()
    })
}
function adjustHeight(height, top, anim, callback) {
    var wrapperInner = get("sb-wrapper-inner"),
        duration = (anim ? S.options.resizeDuration : 0);
    animate(wrapper, "top", top, duration);
    animate(wrapperInner, "height", height, duration, callback)
}
function adjustWidth(width, left, anim, callback) {
    var duration = (anim ? S.options.resizeDuration : 0);
    animate(wrapper, "left", left, duration);
    animate(wrapper, "width", width, duration, callback)
}
function setDimensions(height, width) {
    var bodyInner = get("sb-body-inner"),
        height = parseInt(height),
        width = parseInt(width),
        topBottom = wrapper.offsetHeight - bodyInner.offsetHeight,
        leftRight = wrapper.offsetWidth - bodyInner.offsetWidth,
        maxHeight = overlay.offsetHeight,
        maxWidth = overlay.offsetWidth,
        padding = parseInt(S.options.viewportPadding) || 20,
        preserveAspect = (S.player && S.options.handleOversize != "drag");
    return S.setDimensions(height, width, maxHeight, maxWidth, topBottom, leftRight, padding, preserveAspect)
}
var K = {};
K.markup = '<div id="sb-container"><div id="sb-overlay"></div><div id="sb-wrapper"><div id="sb-title"><div id="sb-title-inner"></div></div><div id="sb-wrapper-inner"><div id="sb-body"><div id="sb-body-inner"></div><div id="sb-loading"><div id="sb-loading-inner"><span>{loading}</span></div></div></div></div><div id="sb-info"><div id="sb-info-inner"><div id="sb-counter"></div><div id="sb-nav"><a id="sb-nav-close" title="{close}" onclick="Shadowbox.close()"></a><a id="sb-nav-next" title="{next}" onclick="Shadowbox.next()"></a><a id="sb-nav-play" title="{play}" onclick="Shadowbox.play()"></a><a id="sb-nav-pause" title="{pause}" onclick="Shadowbox.pause()"></a><a id="sb-nav-previous" title="{previous}" onclick="Shadowbox.previous()"></a></div></div></div></div></div>';
K.options = {
    animSequence: "sync",
    counterLimit: 10,
    counterType: "default",
    displayCounter: true,
    displayNav: true,
    fadeDuration: 0.35,
    initialHeight: 160,
    initialWidth: 320,
    modal: false,
    overlayColor: "#000",
    overlayOpacity: 0.5,
    resizeDuration: 0.35,
    showOverlay: true,
    troubleElements: ["select", "object", "embed", "canvas"]
};
K.init = function () {
    S.appendHTML(document.body, sprintf(K.markup, S.lang));
    K.body = get("sb-body-inner");
    container = get("sb-container");
    overlay = get("sb-overlay");
    wrapper = get("sb-wrapper");
    if (!supportsFixed) {
        container.style.position = "absolute"
    }
    if (!supportsOpacity) {
        var el, m, re = /url\("(.*\.png)"\)/;
        each(pngIds, function (i, id) {
            el = get(id);
            if (el) {
                m = S.getStyle(el, "backgroundImage").match(re);
                if (m) {
                    el.style.backgroundImage = "none";
                    el.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,src=" + m[1] + ",sizingMethod=scale);"
                }
            }
        })
    }
    var timer;
    addEvent(window, "resize", function () {
        if (timer) {
            clearTimeout(timer);
            timer = null
        }
        if (open) {
            timer = setTimeout(K.onWindowResize, 10)
        }
    })
};
K.onOpen = function (obj, callback) {
    doWindowResize = false;
    container.style.display = "block";
    setSize();
    var dims = setDimensions(S.options.initialHeight, S.options.initialWidth);
    adjustHeight(dims.innerHeight, dims.top);
    adjustWidth(dims.width, dims.left);
    if (S.options.showOverlay) {
        overlay.style.backgroundColor = S.options.overlayColor;
        S.setOpacity(overlay, 0);
        if (!S.options.modal) {
            addEvent(overlay, "click", S.close)
        }
        overlayOn = true
    }
    if (!supportsFixed) {
        setPosition();
        addEvent(window, "scroll", setPosition)
    }
    toggleTroubleElements();
    container.style.visibility = "visible";
    if (overlayOn) {
        animate(overlay, "opacity", S.options.overlayOpacity, S.options.fadeDuration, callback)
    } else {
        callback()
    }
};
K.onLoad = function (changing, callback) {
    toggleLoading(true);
    while (K.body.firstChild) {
        remove(K.body.firstChild)
    }
    hideBars(changing, function () {
        if (!open) {
            return
        }
        if (!changing) {
            wrapper.style.visibility = "visible"
        }
        buildBars(callback)
    })
};
K.onReady = function (callback) {
    if (!open) {
        return
    }
    var player = S.player,
        dims = setDimensions(player.height, player.width);
    var wrapped = function () {
        showBars(callback)
    };
    switch (S.options.animSequence) {
    case "hw":
        adjustHeight(dims.innerHeight, dims.top, true, function () {
            adjustWidth(dims.width, dims.left, true, wrapped)
        });
        break;
    case "wh":
        adjustWidth(dims.width, dims.left, true, function () {
            adjustHeight(dims.innerHeight, dims.top, true, wrapped)
        });
        break;
    default:
        adjustWidth(dims.width, dims.left, true);
        adjustHeight(dims.innerHeight, dims.top, true, wrapped)
    }
};
K.onShow = function (callback) {
    toggleLoading(false, callback);
    doWindowResize = true
};
K.onClose = function () {
    if (!supportsFixed) {
        removeEvent(window, "scroll", setPosition)
    }
    removeEvent(overlay, "click", S.close);
    wrapper.style.visibility = "hidden";
    var callback = function () {
        container.style.visibility = "hidden";
        container.style.display = "none";
        toggleTroubleElements(true)
    };
    if (overlayOn) {
        animate(overlay, "opacity", 0, S.options.fadeDuration, callback)
    } else {
        callback()
    }
};
K.onPlay = function () {
    toggleNav("play", false);
    toggleNav("pause", true)
};
K.onPause = function () {
    toggleNav("pause", false);
    toggleNav("play", true)
};
K.onWindowResize = function () {
    if (!doWindowResize) {
        return
    }
    setSize();
    var player = S.player,
        dims = setDimensions(player.height, player.width);
    adjustWidth(dims.width, dims.left);
    adjustHeight(dims.innerHeight, dims.top);
    if (player.onWindowResize) {
        player.onWindowResize()
    }
};
S.skin = K;
window.Shadowbox = S
})(window);
