/*
 * Shadowbox.js, version 3.0.3
 * http://shadowbox-js.com/
 *
 * Copyright 2007-2010, Michael J. I. Jackson
 * Date: 2011-04-11 07:27:25 +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:false,
        animateFade:false,
        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){
        return e.target
    }
    function getPageXY(e){
        return[e.pageX,e.pageY]
    }
    function preventDefault(e){
        e.preventDefault()
    }
    function keyCode(e){
        return e.keyCode
    }
    function addEvent(el,type,handler){
        jQuery(el).bind(type,handler)
    }
    function removeEvent(el,type,handler){
        jQuery(el).unbind(type,handler)
    }
    jQuery.fn.shadowbox=function(options){
        return this.each(function(){
            var el=jQuery(this);
            var opts=jQuery.extend({},options||{},jQuery.metadata?el.metadata():jQuery.meta?el.data():{});
            var cls=this.className||"";
            opts.width=parseInt((cls.match(/w:(\d+)/)||[])[1])||opts.width;
            opts.height=parseInt((cls.match(/h:(\d+)/)||[])[1])||opts.height;
            Shadowbox.setup(el,opts)
        })
    };
    
    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:"cs",
        of:"z(e)",
        loading:"nahrávám",
        cancel:"Zrušit",
        next:"Další",
        previous:"Předchozí",
        play:"Přehrát",
        pause:"Pauza",
        close:"Zavřít",
        errors:{
            single:'Pro správné zobrazení je potřeba nainstalovat tento zásuvný modul do Vašeho prohlížeče: <a href="{0}">{1}</a>.',
            shared:'Pro správné zobrazení je potřeba nainstalovat oba tyto zásuvné moduly do Vašeho prohlížeče: <a href="{0}">{1}</a> a <a href="{2}">{3}</a>.',
            either:'Pro správné zobrazení je potřeba do Vašeho prohlížeče nainstalovat jeden z následujících zásuvných modulů: <a href="{0}">{1}</a> nebo <a href="{2}">{3}</a>.'
        }
    };

    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><a id="sb-nav-close" title="{close}" onclick="Shadowbox.close()"></a></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-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);
