/**
 * bevel.js 1.2 (04-Sep-2008)
 * (c) by Christian Effenberger 
 * All Rights Reserved
 * Source: bevel.netzgesta.de
 * Distributed under Netzgestade Software License Agreement
 * http://www.netzgesta.de/cvi/LICENSE.txt
 * License permits free of charge
 * use on non-commercial and 
 * private web sites only
**/

var tmp = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
if(tmp) var isIE = document.namespaces ? 1 : 0;

if(isIE) {
        if(document.namespaces['v'] == null) {
                var stl = document.createStyleSheet();
                stl.addRule("v\\:*", "behavior: url(#default#VML);");
                document.namespaces.add("v", "urn:schemas-microsoft-com:vml");
        }
}

function getImages(className){
        var children = document.getElementsByTagName('img'); 
        var elements = new Array(); var i = 0;
        var child; var classNames; var j = 0;
        for (i=0;i<children.length;i++) {
                child = children[i];
                classNames = child.className.split(' ');
                for (var j = 0; j < classNames.length; j++) {
                        if (classNames[j] == className) {
                                elements.push(child);
                                break;
                        }
                }
        }
        return elements;
}

function getClasses(classes,string){
        var temp = '';
        for (var j=0;j<classes.length;j++) {
                if (classes[j] != string) {
                        if (temp) {
                                temp += ' '
                        }
                        temp += classes[j];
                }
        }
        return temp;
}

function getClassValue(classes,string){
        var temp = 0; var pos = string.length;
        for (var j=0;j<classes.length;j++) {
                if (classes[j].indexOf(string) == 0) {
                        temp = Math.min(classes[j].substring(pos),100);
                        break;
                }
        }
        return Math.max(0,temp);
}

function getClassAttribute(classes,string){
        var temp = 0; var pos = string.length;
        for (var j=0;j<classes.length;j++) {
                if (classes[j].indexOf(string) == 0) {
                        temp = 1; 
                        break;
                }
        }
        return temp;
}

function getClassHexColor(classes,string,color){
        var temp, val = color, pos = string.length;
        for (var j=0;j<classes.length;j++) {
                if (classes[j].indexOf(string) == 0) {
                        temp = classes[j].substring(pos);
                        val = temp.toLowerCase();
                        break;
                }
        }
        if(!val.match(/^[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {val = color||'000000'; }
        if(isIE) {return val; }else {var mx=254;
                function hex2dec(hex){return(Math.max(0,Math.min(parseInt(hex,16),255)));}
                var cr=hex2dec(val.substr(0,2)),cg=hex2dec(val.substr(2,2)),cb=hex2dec(val.substr(4,2));
                return Math.min(cr,mx)+','+Math.min(cg,mx)+','+Math.min(cb,mx);
        }
}

function getRadius(radius,width,height){
        var part = (Math.min(width,height)/100);
        radius = Math.max(Math.min(100,radius/part),0);
        return radius+'%';
}

function applyForm(ctx,x,y,w,h,r,o,f) {
        var z=o?Math.round(r*((window.opera?0.3:0.25)*f)):0; 
        ctx.beginPath(); ctx.moveTo(x,y+r); ctx.lineTo(x,y+h-r);
        ctx.quadraticCurveTo(x+z,y+h-z,x+r,y+h); ctx.lineTo(x+w-r,y+h);
        ctx.quadraticCurveTo(x+w-z,y+h-z,x+w,y+h-r); ctx.lineTo(x+w,y+r);
        ctx.quadraticCurveTo(x+w-z,y+z,x+w-r,y); ctx.lineTo(x+r,y);
        ctx.quadraticCurveTo(x+z,y+z,x,y+r); ctx.closePath();
}

function applyFlex(ctx,x,y,w,h,r,o,c) {
        ctx.beginPath();ctx.moveTo(x-r,y-r); ctx.lineTo(x-r,y+r);
        ctx.lineTo(x,y+(r*2)); ctx.lineTo(x,y+r); ctx.quadraticCurveTo(x,y,x+r,y); 
        ctx.lineTo(x+(r*2),y); ctx.lineTo(x+r,y-r); ctx.closePath();
        var st=ctx.createRadialGradient(x+(r/4),y+(r/4),0,x+(r/4),y+(r/4),r);
        st.addColorStop(0,'rgba('+c+','+o+')'); st.addColorStop(1,'rgba('+c+',0)');
        ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.moveTo(x+w+r,y-r); ctx.lineTo(x+w+r,y+r); 
        ctx.lineTo(x+w,y+(r*2)); ctx.lineTo(x+w,y+r); ctx.quadraticCurveTo(x+w,y,x+w-r,y); 
        ctx.lineTo(x+w-(r*2),y); ctx.lineTo(x+w-r,y-r); ctx.closePath();
        st=ctx.createRadialGradient(x+w-(r/4),y+(r/4),0,x+w-(r/4),y+(r/4),r);
        st.addColorStop(0,'rgba('+c+','+o+')'); st.addColorStop(1,'rgba('+c+',0)');
        ctx.fillStyle=st; ctx.fill();
}

function applyGlow(ctx,x,y,w,h,r,o,c) {
        function setRS(ctx,x1,y1,r1,x2,y2,r2,o,c) {
                var opt=Math.min(parseFloat(o+0.1),1.0),tmp=ctx.createRadialGradient(x1,y1,r1,x2,y2,r2);
                tmp.addColorStop(0,'rgba('+c+','+opt+')'); tmp.addColorStop(0.25,'rgba('+c+','+o+')');
                tmp.addColorStop(1,'rgba('+c+',0)'); return tmp;
        }
        function setLS(ctx,x,y,w,h,o,c) {
                var opt=Math.min(parseFloat(o+0.1),1.0),tmp=ctx.createLinearGradient(x,y,w,h);
                tmp.addColorStop(0,'rgba('+c+','+opt+')'); tmp.addColorStop(0.25,'rgba('+c+','+o+')');
                tmp.addColorStop(1,'rgba('+c+',0)'); return tmp;
        }
        var st,os=Math.round(Math.min(w,h)*(window.opera?0.058:0.05));
        ctx.beginPath(); ctx.rect(x+r,y,w-(r*2),r); ctx.closePath();        
        st=setLS(ctx,x+r,y+os,x+r,y,o,c); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(x,y+r,r,h-(r*2)); ctx.closePath();
        st=setLS(ctx,x+os,y+r,x,y+r,o,c); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(x+r,y+h-r,w-x-(r*2),r); ctx.closePath();
        st=setLS(ctx,x+r,y+h-os,x+r,y+h,o,c); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(x+w-r,y+r,r,h-y-(r*2)); ctx.closePath();
        st=setLS(ctx,x+w-os,y+r,x+w,y+r,o,c); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(x,y,r,r); ctx.closePath();
        st=setRS(ctx,x+r,y+r,r-os,x+r,y+r,r,o,c); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(x,y+h-r,r,r); ctx.closePath();
        st=setRS(ctx,x+r,y+h-r,r-os,x+r,y+h-r,r,o,c); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(w-r,h-r,x+r,y+r); ctx.closePath();
        st=setRS(ctx,w-r,h-r,r-os+x,w-r,h-r,y+r,o,c); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(x+w-r,y,r,r); ctx.closePath();
        st=setRS(ctx,x+w-r,y+r,r-os,x+w-r,y+r,r,o,c); ctx.fillStyle=st; ctx.fill();
}

function applyMask(ctx,x,y,w,h,r,o,c,i,z) {
        function setRS(ctx,x1,y1,r1,x2,y2,r2,o,c,i,z) {
                var sg=(i==true?o:0),eg=(i==true?0:o),mg=eg*(z==true?0.9:0.7);
                var tmp=ctx.createRadialGradient(x1,y1,r1,x2,y2,r2); tmp.addColorStop(0,'rgba('+c+','+sg+')');
                if(z==false) {tmp.addColorStop(0.9,'rgba('+c+','+mg+')');}tmp.addColorStop(1,'rgba('+c+','+eg+')'); return tmp;
        }
        function setLS(ctx,x,y,w,h,o,c,i,z) {
                var sg=(i==true?o:0),eg=(i==true?0:o),mg=eg*(z==true?0.9:0.7);
                var tmp=ctx.createLinearGradient(x,y,w,h); tmp.addColorStop(0,'rgba('+c+','+sg+')');
                if(z==false) {tmp.addColorStop(0.9,'rgba('+c+','+mg+')');}tmp.addColorStop(1,'rgba('+c+','+eg+')'); return tmp;
        }
        var st,os=r,p=Math.round(r/8); ctx.fillStyle='rgba('+c+','+o+')';
        if(i) {ctx.beginPath(); ctx.rect(x+r,y+r,w-(r*2),h-(r*2)); ctx.closePath(); ctx.fill();}
        if(window.opera && !i) {
                ctx.beginPath(); ctx.moveTo(x,y); ctx.lineTo(x,y+r); ctx.quadraticCurveTo(x+p,y+p,x+r,y); ctx.closePath(); ctx.fill();
                ctx.beginPath(); ctx.moveTo(x+w,y); ctx.lineTo(x+w,y+r); ctx.quadraticCurveTo(x+w-p,y+p,x+w-r,y); ctx.closePath(); ctx.fill();
                ctx.beginPath(); ctx.moveTo(x+w,y+h); ctx.lineTo(x+w,y+h-r); ctx.quadraticCurveTo(x+w-p,y+h-p,x+w-r,y+h); ctx.closePath(); ctx.fill();
                ctx.beginPath(); ctx.moveTo(x,y+h); ctx.lineTo(x,y+h-r); ctx.quadraticCurveTo(x+p,y+h-p,x+r,y+h); ctx.closePath(); ctx.fill();
        }
        ctx.beginPath(); ctx.rect(x+r,y,w-(r*2),os); ctx.closePath(); st=setLS(ctx,x+r,y+os,x+r,y,o,c,i,z); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(x,y,r,r); ctx.closePath(); st=setRS(ctx,x+r,y+r,r-os,x+r,y+r,r,o,c,i,z); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(x,y+r,os,h-(r*2)); ctx.closePath(); st=setLS(ctx,x+os,y+r,x,y+r,o,c,i,z); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(x,y+h-r,r,r); ctx.closePath(); st=setRS(ctx,x+r,y+h-r,r-os,x+r,y+h-r,r,o,c,i,z); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(x+r,y+h-os,w-(r*2),os); ctx.closePath(); st=setLS(ctx,x+r,y+h-os,x+r,y+h,o,c,i,z); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(x+w-r,y+h-r,r,r); ctx.closePath(); st=setRS(ctx,x+w-r,y+h-r,r-os,x+w-r,y+h-r,r,o,c,i,z); ctx.fillStyle=st; ctx.fill();
        ctx.beginPath(); ctx.rect(x+w-os,y+r,os,h-(r*2)); ctx.closePath(); st=setLS(ctx,x+w-os,y+r,x+w,y+r,o,c,i,z); ctx.fillStyle=st; ctx.fill(); 
        ctx.beginPath(); ctx.rect(x+w-r,y,r,r); ctx.closePath(); st=setRS(ctx,x+w-r,y+r,r-os,x+w-r,y+r,r,o,c,i,z); ctx.fillStyle=st; ctx.fill();
}

function addIEBevel() {
        var theimages = getImages('bevel');
        var image, object, vml, display, flt, classes, newClasses;
        var ww, hh, iw, ih, ix, iy, i, t, f, p, ro, ri, r, mask, radius, inner;
        var iglowcol, ishinecol, ishadecol, ibackcol, ifillcol, usemask, noshine;
        var iglowopac, ishineopac, ishadeopac, iradius, noglow, noshade, islinear;
        var head, foot, glow, fill, shade, shine, high, left, right, oline;
        for (i=0;i<theimages.length;i++) {
                image = theimages[i]; object = image.parentNode;
                high = ''; shine = ''; left = ''; right = ''; shade = ''; glow = ''; oline = '';
                classes = image.className.split(' ');
                iglowcol = getClassHexColor(classes,"iglowcol",'000000');
                ibackcol = getClassHexColor(classes,"ibackcol",'0080ff');
                ifillcol = getClassHexColor(classes,"ifillcol",'000000');
                if(ifillcol=='000000') {ifillcol = ibackcol; }
                ishinecol = getClassHexColor(classes,"ishinecol",'ffffff');
                ishadecol = getClassHexColor(classes,"ishadecol",'000000');
                iradius = getClassValue(classes,"iradius");
                iglowopac = getClassValue(classes,"iglowopac");
                ishineopac = getClassValue(classes,"ishineopac");
                ishadeopac  = getClassValue(classes,"ishadeopac");
                islinear = getClassAttribute(classes,"islinear");
                usemask = getClassAttribute(classes,"usemask");
                noglow = getClassAttribute(classes,"noglow");
                noshine = getClassAttribute(classes,"noshine");
                noshade = getClassAttribute(classes,"noshade");
                iradius = iradius==0?20:iradius;
                iglowopac = Math.min(iglowopac==0?40:iglowopac*1.2,100);
                ishineopac = ishineopac==0?0.4:ishineopac/100;
                ishadeopac = ishadeopac==0?0.5:ishadeopac/100;
                newClasses = getClasses(classes,"bevel");
                ww = image.width; hh = image.height;
                mask = usemask>=1?"filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100,finishopacity=50,style=3);":"";
                if(noglow<1) {
                        radius = Math.max(Math.min(iradius,40),20);
                        ix = Math.round(Math.min(ww,hh)*0.05); 
                        iy = ix; iw = ww-(2*ix); ih = hh-(2*iy);
                        ro = Math.round(Math.min(iw,ih)*(radius/100));        
                        ri = Math.round(ro*0.8); r = ri/2;
                        inner = getRadius(ri/2,iw-ri,ih-ri); 
                        radius = radius*0.8; ro = Math.round(ro*0.8);
                }else {
                        radius = Math.max(Math.min(iradius,40),20);
                        ix = 0; iy = 0; iw = ww; ih = hh;
                        ri = Math.round(Math.min(iw,ih)*(radius/100));
                        r = ri/2; inner = getRadius(ri/2,iw-ri,ih-ri);
                        ro = ri;
                } t = Math.round(Math.max(Math.round(iw/200),1)); f = 0;
                if(noglow<1) {glow = '<v:roundrect arcsize="'+radius+'%" strokeweight="0" filled="t" stroked="f" fillcolor="#'+iglowcol+'" style="filter:Alpha(opacity='+iglowopac+'), progid:dxImageTransform.Microsoft.Blur(PixelRadius='+(ix/2)+',MakeShadow=false); zoom:1;margin:-1px 0 0 -1px;padding:0;position:absolute;top:0px;left:0px;width:'+(iw+ix)+'px;height:'+(ih+iy)+'px;"><v:fill color="#'+iglowcol+'" opacity="1" /></v:roundrect>';}
                fill = '<v:roundrect arcsize="'+radius+'%" strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="zoom:1;margin:-1px 0 0 -1px;padding:0;position:absolute;top:'+iy+'px;left:'+ix+'px;width:'+iw+'px;height:'+ih+'px;"><v:fill method="linear" type="gradient" angle="0" color="#'+ifillcol+'" color2="#'+ibackcol+'" /></v:roundrect>';
                fill += '<v:roundrect arcsize="'+radius+'%" strokeweight="0" filled="t" stroked="f" style="'+mask+'zoom:1;margin:-1px 0 0 -1px;padding:0;position:absolute;top:'+iy+'px;left:'+ix+'px;width:'+iw+'px;height:'+ih+'px;"><v:fill src="'+image.src+'" type="frame" /></v:roundrect>';
                if(noshade<1) {
                        shade = '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+ro+','+ro+'" path="m '+ro+','+ro+' l 0,'+ro+' qy '+ro+',0 l '+ro+','+ro+' x e" style="position:absolute;margin: -1px 0 0 -1px;top:'+iy+'px;left:'+ix+'px;width:'+ro+'px;height:'+ro+'px;"><v:fill method="'+(islinear>0?"linear":"sigma")+'" type="gradientradial" focus="1" focusposition="1,1" focussize="0.5,0.5" color="#'+ishadecol+'" opacity="0" color2="#'+ishadecol+'" o:opacity2="'+ishadeopac+'" /></v:shape>'; 
                        shade += '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+ro+','+ro+'" path="m 0,'+ro+' l '+ro+','+ro+' qy 0,0 l 0,'+ro+' x e" style="position:absolute;margin: -1px 0 0 -1px;top:'+iy+'px;left:'+(ix+iw-ro)+'px;width:'+ro+'px;height:'+ro+'px;"><v:fill method="'+(islinear>0?"linear":"sigma")+'" type="gradientradial" focus="1" focusposition="-0.5,1" focussize="0.5,0.5" color="#'+ishadecol+'" opacity="0" color2="#'+ishadecol+'" o:opacity2="'+ishadeopac+'" /></v:shape>'; 
                        shade += '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+ro+','+ro+'" path="m '+ro+',0 l '+ro+','+ro+' qx 0,0 l '+ro+',0 x e" style="position:absolute;margin: -1px 0 0 -1px;top:'+(iy+ih-ro)+'px;left:'+ix+'px;width:'+ro+'px;height:'+ro+'px;"><v:fill method="'+(islinear>0?"linear":"sigma")+'" type="gradientradial" focus="1" focusposition="1,-0.5" focussize="0.5,0.5" color="#'+ishadecol+'" opacity="0" color2="#'+ishadecol+'" o:opacity2="'+ishadeopac+'" /></v:shape>'; 
                        shade += '<v:shape strokeweight="0" filled="t" stroked="f" fillcolor="#000000" coordorigin="0,0" coordsize="'+ro+','+ro+'" path="m 0,0 l '+ro+',0 qy 0,'+ro+' l 0,0 x e" style="position:absolute;margin: -1px 0 0 -1px;top:'+(iy+ih-ro)+'px;left:'+(ix+iw-ro)+'px;width:'+ro+'px;height:'+ro+'px;"><v:fill method="'+(islinear>0?"linear":"sigma")+'" type="gradientradial" focus="1" focusposition="-0.5,-0.5" focussize="0.5,0.5" color="#'+ishadecol+'" opacity="0" color2="#'+ishadecol+'" o:opacity2="'+ishadeopac+'" /></v:shape>'; 
                        shade += '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#000000" style="position:absolute;margin: -1px 0 0 -1px;top:'+iy+'px;left:'+(ix+ro-f)+'px;width:'+(iw-ro-ro+f+f)+'px;height:'+ro+'px;"><v:fill method="'+(islinear>0?"linear":"sigma")+'" type="gradient" angle="0" color="#'+ishadecol+'" opacity="0" color2="#'+ishadecol+'" o:opacity2="'+ishadeopac+'" /></v:rect>';        
                        shade += '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#000000" style="position:absolute;margin: -1px 0 0 -1px;top:'+(iy+ro-f)+'px;left:'+ix+'px;width:'+ro+'px;height:'+(ih-ro-ro+f+f)+'px;"><v:fill method="'+(islinear>0?"linear":"sigma")+'" type="gradient" angle="90" color="#'+ishadecol+'" opacity="0" color2="#'+ishadecol+'" o:opacity2="'+ishadeopac+'" /></v:rect>';        
                        shade += '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#000000" style="position:absolute;margin: -1px 0 0 -1px;top:'+(iy+ro-f)+'px;left:'+(ix+iw-ro)+'px;width:'+ro+'px;height:'+(ih-ro-ro+f+f)+'px;"><v:fill method="'+(islinear>0?"linear":"sigma")+'" type="gradient" angle="270" color="#'+ishadecol+'" opacity="0" color2="#'+ishadecol+'" o:opacity2="'+ishadeopac+'" /></v:rect>';        
                        shade += '<v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#000000" style="position:absolute;margin: -1px 0 0 -1px;top:'+(iy+ih-ro)+'px;left:'+(ix+ro-f)+'px;width:'+(iw-ro-ro+f+f)+'px;height:'+ro+'px;"><v:fill method="'+(islinear>0?"linear":"sigma")+'" type="gradient" angle="180" color="#'+ishadecol+'" opacity="0" color2="#'+ishadecol+'" o:opacity2="'+ishadeopac+'" /></v:rect>';        
                        oline = '<v:roundrect arcsize="'+radius+'%" filled="f" stroked="t" style="zoom:1;margin:-1px 0 0 -1px;padding:0;position:absolute;top:'+iy+'px;left:'+ix+'px;width:'+iw+'px;height:'+ih+'px;"><v:stroke weight="1" style="single" color="#'+ishadecol+'" opacity="'+ishadeopac+'" /></v:roundrect>';
                }
                if(noshine<1) {
                        shine = '<v:roundrect arcsize="'+inner+'" strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="zoom:1;margin:-1px 0 0 -1px;padding:0;position:absolute;top:'+(iy+(ri/2))+'px;left:'+(ix+(ri/2))+'px;width:'+(iw-ri)+'px;height:'+(ih-ri)+'px;"><v:fill method="linear sigma" type="gradient" angle="0" color="#'+ishinecol+'" opacity="0" color2="#'+ishinecol+'" o:opacity2="'+ishineopac+'" /></v:roundrect>';
                        r=Math.round(r); p = "m 0,"+r+" l 0,"+(ih-ri-r)+","+t+","+(ih-ri-r)+","+t+","+r+" qy "+r+","+t+" l "+(iw-ri-r)+","+t+" qx "+(iw-ri-t)+","+r+" l "+(iw-ri-t)+","+(ih-ri-r)+","+(iw-ri)+","+(ih-ri-r)+","+(iw-ri)+","+r+" qy "+(iw-ri-r)+",0 l "+r+",0 qx 0,"+r+" x e";
                        high = '<v:shape strokeweight="0" stroked="f" filled="t" coordorigin="0,0" coordsize="'+(iw-ri)+','+(ih-ri)+'" path="'+p+'" style="zoom:1;margin:-1px 0 0 -1px;padding:0;position:absolute;top:'+(iy+(ri/2))+'px;left:'+(ix+(ri/2))+'px;width:'+(iw-ri)+'px;height:'+(ih-ri)+'px;"><v:fill method="linear sigma" type="gradient" angle="0" color="#'+ishinecol+'" opacity="0" color2="#'+ishinecol+'" o:opacity2="'+ishineopac+'" /></v:shape>';
                        left = '<v:oval stroked="f" strokeweight="0" style="zoom:1;margin:-1px 0 0 -1px;padding:0;position:absolute;top:'+(iy+(ri/8))+'px;left:'+(ix+(ri/8))+'px;width:'+ri+'px;height:'+ri+'px;"><v:fill method="any" type="gradientradial" focus="0" focussize="0,0" focusposition="0.5,0.5" on="t" color="#'+ishinecol+'" opacity="0" color2="#'+ishinecol+'" o:opacity2="'+ishineopac+'" /></v:oval>';
                        right = '<v:oval stroked="f" strokeweight="0" style="zoom:1;margin:-1px 0 0 -1px;padding:0;position:absolute;top:'+(iy+(ri/8))+'px;left:'+(ix+iw-(ri*1.125))+'px;width:'+ri+'px;height:'+ri+'px;"><v:fill method="any" type="gradientradial" focus="0" focussize="0,0" focusposition="0.5,0.5" on="t" color="#'+ishinecol+'" opacity="0" color2="#'+ishinecol+'" o:opacity2="'+ishineopac+'" /></v:oval>';
                }
                display = (image.currentStyle.display.toLowerCase()=='block')?'block':'inline-block';
                vml = document.createElement(['<var style="zoom:1;overflow:hidden;display:'+display+';width:'+ww+'px;height:'+hh+'px;padding:0;">'].join(''));
                flt = image.currentStyle.styleFloat.toLowerCase();
                display = (flt=='left'||flt=='right')?'inline':display;
                head = '<v:group style="zoom:1;display:'+display+';margin:-1px 0 0 -1px;padding:0;position:relative;width:'+ww+'px;height:'+hh+'px;" coordsize="'+ww+','+hh+'"><v:rect strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="zoom:1;margin:-1px 0 0 -1px;padding:0;position:absolute;top:0px;left:0px;width:'+ww+'px;height:'+hh+'px;"><v:fill color="#ffffff" opacity="0.0" /></v:rect>';
                foot = '</v:group>';
                vml.innerHTML = head+glow+fill+shade+shine+high+left+right+oline+foot;
                vml.className = newClasses;
                vml.style.cssText = image.style.cssText;
                vml.style.height = image.height+'px';
                vml.style.width = image.width+'px';
                vml.height = image.height;
                vml.width = image.width;
                if(image.id!=null) vml.id = image.id;
                if(image.alt!=null) vml.alt = image.alt;
                if(image.title!=null) vml.title = image.title;
                if(image.getAttribute('onclick')!=null) vml.setAttribute('onclick',image.getAttribute('onclick'));
                object.replaceChild(vml,image);
                vml.style.visibility = 'visible';
        }
}

function addBevel() {
        var theimages = getImages('bevel');
        var image, object, canvas, context, classes, newClasses;
        var ww, hh, iw, ih, ix, iy, i, r, radius, inner, outer, style, islinear;
        var iglowcol, ishinecol, ishadecol, ibackcol, ifillcol, usemask, noshine;
        var iglowopac, ishineopac, ishadeopac, iradius, noglow, noshade;
        for (i=0;i<theimages.length;i++) {
                image = theimages[i]; object = image.parentNode;
                canvas = document.createElement('canvas');
                if (canvas.getContext) {
                        classes = image.className.split(' ');
                        iglowcol = getClassHexColor(classes,"iglowcol",'000000');
                        ibackcol = getClassHexColor(classes,"ibackcol",'0080ff');
                        ifillcol = getClassHexColor(classes,"ifillcol",'000000');
                        if(ifillcol=='0,0,0') {ifillcol = ibackcol; }
                        ishinecol = getClassHexColor(classes,"ishinecol",'ffffff');
                        ishadecol = getClassHexColor(classes,"ishadecol",'000000');
                        iradius = getClassValue(classes,"iradius");
                        iglowopac = getClassValue(classes,"iglowopac");
                        ishineopac = getClassValue(classes,"ishineopac");
                        ishadeopac  = getClassValue(classes,"ishadeopac");
                        islinear = getClassAttribute(classes,"islinear");
                        usemask = getClassAttribute(classes,"usemask");
                        noglow = getClassAttribute(classes,"noglow");
                        noshine = getClassAttribute(classes,"noshine");
                        noshade = getClassAttribute(classes,"noshade");
                        iradius = iradius==0?0.2:iradius/100;
                        iglowopac = iglowopac==0?0.33:iglowopac/100;
                        ishineopac = ishineopac==0?0.4:ishineopac/100;
                        ishadeopac = ishadeopac==0?0.5:ishadeopac/100;
                        newClasses = getClasses(classes,"bevel");
                        canvas.className = newClasses;
                        canvas.style.cssText = image.style.cssText;
                        canvas.style.height = image.height+'px';
                        canvas.style.width = image.width+'px';
                        canvas.height = image.height;
                        canvas.width = image.width;
                        canvas.src = image.src; 
                        if(image.id!=null) canvas.id = image.id;
                        if(image.alt!=null) canvas.alt = image.alt;
                        if(image.title!=null) canvas.title = image.title;
                        if(image.getAttribute('onclick')!=null) canvas.setAttribute('onclick',image.getAttribute('onclick'));
                        ww = canvas.width; hh = canvas.height;
                        r = Math.max(Math.min(iradius,0.4),0.2);
                        ix = Math.round(Math.min(ww,hh)*0.05); 
                        iy = ix; iw = ww-(2*ix); ih = hh-(2*iy);
                        outer = Math.round(Math.min(iw,ih)*r);
                        radius = Math.round(outer*0.8);
                        if(noglow>0) {
                                ix = 0; iy = 0; iw = ww; ih = hh; 
                                radius = Math.round(Math.min(iw,ih)*r);
                        } inner = Math.round(radius/2);
                        context = canvas.getContext("2d");
                        object.replaceChild(canvas,image);
                        context.clearRect(0,0,ww,hh);
                        context.globalCompositeOperation = "source-over";
                        context.save();
                        if(noglow<1) {applyGlow(context,0,0,ww,hh,outer,iglowopac,iglowcol);}
                        applyForm(context,ix,iy,iw,ih,radius,true,r);
                        context.clip();
                        style = context.createLinearGradient(ix,iy,ix,iy+ih);
                        style.addColorStop(0,'rgba('+ibackcol+',1)');
                        style.addColorStop(1,'rgba('+ifillcol+',1)');
                        context.fillStyle = style; context.fill();
                        context.fillStyle = 'rgba(0,0,0,0)';
                        context.fillRect(0,0,ww,hh);
                        context.drawImage(image,0,0,ww,hh);
                        if(usemask>=1) {
                                context.globalCompositeOperation = "destination-out";
                                applyMask(context,ix,iy,iw,ih,radius,1,'0,0,0');
                                context.globalCompositeOperation = "destination-over";
                                context.fillStyle = style;
                                context.beginPath(); context.rect(ix,iy,iw,ih);
                                context.closePath(); context.fill();
                        }
                        if(noshade<1) {
                                context.globalCompositeOperation = window.opera?"source-over":"source-atop";
                                context.fillStyle = 'rgba(0,0,0,0)'; context.fillRect(ix,iy,iw,ih);
                                applyMask(context,ix,iy,iw,ih,radius,ishadeopac,ishadecol,false,islinear);
                                applyForm(context,ix,iy,iw,ih,radius,true,r);
                                context.strokeStyle = 'rgba('+ishadecol+','+ishadeopac+')';
                                context.lineWidth = 1; context.stroke();
                        }
                        if(noshine<1) {
                                context.globalCompositeOperation = window.opera?"source-over":"source-atop";
                                applyForm(context,ix+inner,iy+inner,iw-radius,ih-radius,inner);
                                if(!window.opera) {context.globalCompositeOperation = "lighter"; ishineopac = ishineopac*0.5; }
                                style = context.createLinearGradient(0,inner,0,ih-radius);
                                style.addColorStop(0,'rgba('+ishinecol+','+ishineopac+')');
                                style.addColorStop(0.25,'rgba('+ishinecol+','+(ishineopac/2)+')');
                                style.addColorStop(1,'rgba('+ishinecol+',0)');
                                context.fillStyle = style; context.fill();
                                applyForm(context,ix+inner,iy+inner,iw-radius,ih-radius,inner);
                                style = context.createLinearGradient(0,inner,0,ih-radius);
                                style.addColorStop(0,'rgba('+ishinecol+','+(ishineopac*1.25)+')');
                                style.addColorStop(0.25,'rgba('+ishinecol+','+(ishineopac/1.5)+')');
                                style.addColorStop(1,'rgba('+ishinecol+',0)');
                                context.strokeStyle = style; context.lineWidth = Math.max(Math.round(iw/200),0.5); context.stroke();                                
                                applyFlex(context,ix+inner,iy+inner,iw-radius,ih-radius,inner,ishineopac,ishinecol);
                        }
                        canvas.style.visibility = 'visible';
                }
        }
}

var bevelOnload = window.onload;
window.onload = function () { if(bevelOnload) bevelOnload(); if(isIE){addIEBevel(); }else {addBevel();}}




// -----------------------------------------------------------------------------------
//
//        Lightbox v2.03
//        by Lokesh Dhakar - http://www.huddletogether.com
//        4/9/06
//
//        For more information on this script, visit:
//        http://huddletogether.com/projects/lightbox2/
//
//        Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
//        
//        Credit also due to those who have helped, inspired, and made their code available to the public.
//        Including: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.org), Thomas Fuchs(mir.aculo.us), and others.
//
//
// -----------------------------------------------------------------------------------
/*

        Table of Contents
        -----------------
        Configuration
        Global Variables

        Extending Built-in Objects        
        - Object.extend(Element)
        - Array.prototype.removeDuplicates()
        - Array.prototype.empty()

        Lightbox Class Declaration
        - initialize()
        - start()
        - changeImage()
        - resizeImageContainer()
        - showImage()
        - updateDetails()
        - updateNav()
        - enableKeyboardNav()
        - disableKeyboardNav()
        - keyboardAction()
        - preloadNeighborImages()
        - end()
        
        Miscellaneous Functions
        - getPageScroll()
        - getPageSize()
        - getKey()
        - listenKey()
        - showSelectBoxes()
        - hideSelectBoxes()
        - showFlash()
        - hideFlash()
        - pause()
        - initLightbox()
        
        Function Calls
        - addLoadEvent(initLightbox)
        
*/
// -----------------------------------------------------------------------------------

//
//        Configuration
//
var fileLoadingImage = "images/loading.gif";                
var fileBottomNavCloseImage = "images/closelabel.gif";

var animate = true;        // toggles resizing animations
var resizeSpeed = 7;        // controls the speed of the image resizing animations (1=slowest and 10=fastest)

var borderSize = 10;        //if you adjust the padding in the CSS, you will need to update this variable

// -----------------------------------------------------------------------------------

//
//        Global Variables
//
var imageArray = new Array;
var activeImage;

if(animate == true){
        overlayDuration = 0.2;        // shadow fade in/out duration
        if(resizeSpeed > 10){ resizeSpeed = 10;}
        if(resizeSpeed < 1){ resizeSpeed = 1;}
        resizeDuration = (11 - resizeSpeed) * 0.15;
} else { 
        overlayDuration = 0;
        resizeDuration = 0;
}

// -----------------------------------------------------------------------------------

//
//        Additional methods for Element added by SU, Couloir
//        - further additions by Lokesh Dhakar (huddletogether.com)
//
Object.extend(Element, {
        getWidth: function(element) {
                   element = $(element);
                   return element.offsetWidth; 
        },
        setWidth: function(element,w) {
                   element = $(element);
            element.style.width = w +"px";
        },
        setHeight: function(element,h) {
                   element = $(element);
            element.style.height = h +"px";
        },
        setTop: function(element,t) {
                   element = $(element);
            element.style.top = t +"px";
        },
        setSrc: function(element,src) {
            element = $(element);
            element.src = src; 
        },
        setHref: function(element,href) {
            element = $(element);
            element.href = href; 
        },
        setInnerHTML: function(element,content) {
                element = $(element);
                element.innerHTML = content;
        }
});

// -----------------------------------------------------------------------------------

//
//        Extending built-in Array object
//        - array.removeDuplicates()
//        - array.empty()
//
Array.prototype.removeDuplicates = function () {
    for(i = 0; i < this.length; i++){
        for(j = this.length-1; j>i; j--){        
            if(this[i][0] == this[j][0]){
                this.splice(j,1);
            }
        }
    }
}

// -----------------------------------------------------------------------------------

Array.prototype.empty = function () {
        for(i = 0; i <= this.length; i++){
                this.shift();
        }
}

// -----------------------------------------------------------------------------------

//
//        Lightbox Class Declaration
//        - initialize()
//        - start()
//        - changeImage()
//        - resizeImageContainer()
//        - showImage()
//        - updateDetails()
//        - updateNav()
//        - enableKeyboardNav()
//        - disableKeyboardNav()
//        - keyboardNavAction()
//        - preloadNeighborImages()
//        - end()
//
//        Structuring of code inspired by Scott Upton (http://www.uptonic.com/)
//
var Lightbox = Class.create();

Lightbox.prototype = {
        
        // initialize()
        // Constructor runs on completion of the DOM loading. Loops through anchor tags looking for 
        // 'lightbox' references and applies onclick events to appropriate links. The 2nd section of
        // the function inserts html at the bottom of the page which is used to display the shadow 
        // overlay and the image container.
        //
        initialize: function() {        
                if (!document.getElementsByTagName){ return; }
                var anchors = document.getElementsByTagName('a');
                var areas = document.getElementsByTagName('area');

                // loop through all anchor tags
                for (var i=0; i<anchors.length; i++){
                        var anchor = anchors[i];
                        
                        var relAttribute = String(anchor.getAttribute('rel'));
                        
                        // use the string.match() method to catch 'lightbox' references in the rel attribute
                        if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
                                anchor.onclick = function () {myLightbox.start(this); return false;}
                        }
                }

                // loop through all area tags
                // todo: combine anchor & area tag loops
                for (var i=0; i< areas.length; i++){
                        var area = areas[i];
                        
                        var relAttribute = String(area.getAttribute('rel'));
                        
                        // use the string.match() method to catch 'lightbox' references in the rel attribute
                        if (area.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
                                area.onclick = function () {myLightbox.start(this); return false;}
                        }
                }

                // The rest of this code inserts html at the bottom of the page that looks similar to this:
                //
                //        <div id="overlay"></div>
                //        <div id="lightbox">
                //                <div id="outerImageContainer">
                //                        <div id="imageContainer">
                //                                <img id="lightboxImage">
                //                                <div style="" id="hoverNav">
                //                                        <a href="#" id="prevLink"></a>
                //                                        <a href="#" id="nextLink"></a>
                //                                </div>
                //                                <div id="loading">
                //                                        <a href="#" id="loadingLink">
                //                                                <img src="images/loading.gif">
                //                                        </a>
                //                                </div>
                //                        </div>
                //                </div>
                //                <div id="imageDataContainer">
                //                        <div id="imageData">
                //                                <div id="imageDetails">
                //                                        <span id="caption"></span>
                //                                        <span id="numberDisplay"></span>
                //                                </div>
                //                                <div id="bottomNav">
                //                                        <a href="#" id="bottomNavClose">
                //                                                <img src="images/close.gif">
                //                                        </a>
                //                                </div>
                //                        </div>
                //                </div>
                //        </div>


                var objBody = document.getElementsByTagName("body").item(0);
                
                var objOverlay = document.createElement("div");
                objOverlay.setAttribute('id','overlay');
                objOverlay.style.display = 'none';
                objOverlay.onclick = function() { myLightbox.end(); }
                objBody.appendChild(objOverlay);
                
                var objLightbox = document.createElement("div");
                objLightbox.setAttribute('id','lightbox');
                objLightbox.style.display = 'none';
                objLightbox.onclick = function(e) {        // close Lightbox is user clicks shadow overlay
                        if (!e) var e = window.event;
                        var clickObj = Event.element(e).id;
                        if ( clickObj == 'lightbox') {
                                myLightbox.end();
                        }
                };
                objBody.appendChild(objLightbox);
                        
                var objOuterImageContainer = document.createElement("div");
                objOuterImageContainer.setAttribute('id','outerImageContainer');
                objLightbox.appendChild(objOuterImageContainer);

                // When Lightbox starts it will resize itself from 250 by 250 to the current image dimension.
                // If animations are turned off, it will be hidden as to prevent a flicker of a
                // white 250 by 250 box.
                if(animate){
                        Element.setWidth('outerImageContainer', 250);
                        Element.setHeight('outerImageContainer', 250);                        
                } else {
                        Element.setWidth('outerImageContainer', 1);
                        Element.setHeight('outerImageContainer', 1);                        
                }

                var objImageContainer = document.createElement("div");
                objImageContainer.setAttribute('id','imageContainer');
                objOuterImageContainer.appendChild(objImageContainer);
        
                var objLightboxImage = document.createElement("img");
                objLightboxImage.setAttribute('id','lightboxImage');
                objImageContainer.appendChild(objLightboxImage);
        
                var objHoverNav = document.createElement("div");
                objHoverNav.setAttribute('id','hoverNav');
                objImageContainer.appendChild(objHoverNav);
        
                var objPrevLink = document.createElement("a");
                objPrevLink.setAttribute('id','prevLink');
                objPrevLink.setAttribute('href','#');
                objHoverNav.appendChild(objPrevLink);
                
                var objNextLink = document.createElement("a");
                objNextLink.setAttribute('id','nextLink');
                objNextLink.setAttribute('href','#');
                objHoverNav.appendChild(objNextLink);
        
                var objLoading = document.createElement("div");
                objLoading.setAttribute('id','loading');
                objImageContainer.appendChild(objLoading);
        
                var objLoadingLink = document.createElement("a");
                objLoadingLink.setAttribute('id','loadingLink');
                objLoadingLink.setAttribute('href','#');
                objLoadingLink.onclick = function() { myLightbox.end(); return false; }
                objLoading.appendChild(objLoadingLink);
        
                var objLoadingImage = document.createElement("img");
                objLoadingImage.setAttribute('src', fileLoadingImage);
                objLoadingLink.appendChild(objLoadingImage);

                var objImageDataContainer = document.createElement("div");
                objImageDataContainer.setAttribute('id','imageDataContainer');
                objImageDataContainer.className = 'clearfix';
                objLightbox.appendChild(objImageDataContainer);

                var objImageData = document.createElement("div");
                objImageData.setAttribute('id','imageData');
                objImageDataContainer.appendChild(objImageData);
        
                var objImageDetails = document.createElement("div");
                objImageDetails.setAttribute('id','imageDetails');
                objImageData.appendChild(objImageDetails);
        
                var objCaption = document.createElement("span");
                objCaption.setAttribute('id','caption');
                objImageDetails.appendChild(objCaption);
        
                var objNumberDisplay = document.createElement("span");
                objNumberDisplay.setAttribute('id','numberDisplay');
                objImageDetails.appendChild(objNumberDisplay);
                
                var objBottomNav = document.createElement("div");
                objBottomNav.setAttribute('id','bottomNav');
                objImageData.appendChild(objBottomNav);
        
                var objBottomNavCloseLink = document.createElement("a");
                objBottomNavCloseLink.setAttribute('id','bottomNavClose');
                objBottomNavCloseLink.setAttribute('href','#');
                objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }
                objBottomNav.appendChild(objBottomNavCloseLink);
        
                var objBottomNavCloseImage = document.createElement("img");
                objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);
                objBottomNavCloseLink.appendChild(objBottomNavCloseImage);
        },
        
        //
        //        start()
        //        Display overlay and lightbox. If image is part of a set, add siblings to imageArray.
        //
        start: function(imageLink) {        

                hideSelectBoxes();
                hideFlash();

                // stretch overlay to fill page and fade in
                var arrayPageSize = getPageSize();
                Element.setHeight('overlay', arrayPageSize[1]);

                new Effect.Appear('overlay', { duration: overlayDuration, from: 0.0, to: 0.8 });

                imageArray = [];
                imageNum = 0;                

                if (!document.getElementsByTagName){ return; }
                var anchors = document.getElementsByTagName('a');

                // if image is NOT part of a set..
                if((imageLink.getAttribute('rel') == 'lightbox')){
                        // add single image to imageArray
                        imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));                        
                } else {
                // if image is part of a set..

                        // loop through anchors, find other images in set, and add them to imageArray
                        for (var i=0; i<anchors.length; i++){
                                var anchor = anchors[i];
                                if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))){
                                        imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));
                                }
                        }
                        imageArray.removeDuplicates();
                        while(imageArray[imageNum][0] != imageLink.getAttribute('href')) { imageNum++;}
                }

                // calculate top offset for the lightbox and display 
                var arrayPageScroll = getPageScroll();
                var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 10);

                Element.setTop('lightbox', lightboxTop);
                Element.show('lightbox');
                
                this.changeImage(imageNum);
        },

        //
        //        changeImage()
        //        Hide most elements and preload image in preparation for resizing image container.
        //
        changeImage: function(imageNum) {        
                
                activeImage = imageNum;        // update global var

                // hide elements during transition
                if(animate){ Element.show('loading');}
                Element.hide('lightboxImage');
                Element.hide('hoverNav');
                Element.hide('prevLink');
                Element.hide('nextLink');
                Element.hide('imageDataContainer');
                Element.hide('numberDisplay');                
                
                imgPreloader = new Image();
                
                // once image is preloaded, resize image container
                imgPreloader.onload=function(){
                        Element.setSrc('lightboxImage', imageArray[activeImage][0]);
                        myLightbox.resizeImageContainer(imgPreloader.width, imgPreloader.height);
                }
                imgPreloader.src = imageArray[activeImage][0];
        },

        //
        //        resizeImageContainer()
        //
        resizeImageContainer: function( imgWidth, imgHeight) {

                // get curren width and height
                this.widthCurrent = Element.getWidth('outerImageContainer');
                this.heightCurrent = Element.getHeight('outerImageContainer');

                // get new width and height
                var widthNew = (imgWidth  + (borderSize * 2));
                var heightNew = (imgHeight  + (borderSize * 2));

                // scalars based on change from old to new
                this.xScale = ( widthNew / this.widthCurrent) * 100;
                this.yScale = ( heightNew / this.heightCurrent) * 100;

                // calculate size difference between new and old image, and resize if necessary
                wDiff = this.widthCurrent - widthNew;
                hDiff = this.heightCurrent - heightNew;

                if(!( hDiff == 0)){ new Effect.Scale('outerImageContainer', this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'}); }
                if(!( wDiff == 0)){ new Effect.Scale('outerImageContainer', this.xScale, {scaleY: false, delay: resizeDuration, duration: resizeDuration}); }

                // if new and old image are same size and no scaling transition is necessary, 
                // do a quick pause to prevent image flicker.
                if((hDiff == 0) && (wDiff == 0)){
                        if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(250); } else { pause(100);} 
                }

                Element.setHeight('prevLink', imgHeight);
                Element.setHeight('nextLink', imgHeight);
                Element.setWidth( 'imageDataContainer', widthNew);

                this.showImage();
        },
        
        //
        //        showImage()
        //        Display image and begin preloading neighbors.
        //
        showImage: function(){
                Element.hide('loading');
                new Effect.Appear('lightboxImage', { duration: resizeDuration, queue: 'end', afterFinish: function(){        myLightbox.updateDetails(); } });
                this.preloadNeighborImages();
        },

        //
        //        updateDetails()
        //        Display caption, image number, and bottom nav.
        //
        updateDetails: function() {
        
                Element.show('caption');
                Element.setInnerHTML( 'caption', imageArray[activeImage][1]);
                
                // if image is part of set display 'Image x of x' 
                if(imageArray.length > 1){
                        Element.show('numberDisplay');
                        Element.setInnerHTML( 'numberDisplay', "Image " + eval(activeImage + 1) + " of " + imageArray.length);
                }

                new Effect.Parallel(
                        [ new Effect.SlideDown( 'imageDataContainer', { sync: true, duration: resizeDuration, from: 0.0, to: 1.0 }), 
                          new Effect.Appear('imageDataContainer', { sync: true, duration: resizeDuration }) ], 
                        { duration: resizeDuration, afterFinish: function() {
                                // update overlay size and update nav
                                var arrayPageSize = getPageSize();
                                Element.setHeight('overlay', arrayPageSize[1]);
                                myLightbox.updateNav();
                                }
                        } 
                );
        },

        //
        //        updateNav()
        //        Display appropriate previous and next hover navigation.
        //
        updateNav: function() {

                Element.show('hoverNav');                                

                // if not first image in set, display prev image button
                if(activeImage != 0){
                        Element.show('prevLink');
                        document.getElementById('prevLink').onclick = function() {
                                myLightbox.changeImage(activeImage - 1); return false;
                        }
                }

                // if not last image in set, display next image button
                if(activeImage != (imageArray.length - 1)){
                        Element.show('nextLink');
                        document.getElementById('nextLink').onclick = function() {
                                myLightbox.changeImage(activeImage + 1); return false;
                        }
                }
                
                this.enableKeyboardNav();
        },

        //
        //        enableKeyboardNav()
        //
        enableKeyboardNav: function() {
                document.onkeydown = this.keyboardAction; 
        },

        //
        //        disableKeyboardNav()
        //
        disableKeyboardNav: function() {
                document.onkeydown = '';
        },

        //
        //        keyboardAction()
        //
        keyboardAction: function(e) {
                if (e == null) { // ie
                        keycode = event.keyCode;
                        escapeKey = 27;
                } else { // mozilla
                        keycode = e.keyCode;
                        escapeKey = e.DOM_VK_ESCAPE;
                }

                key = String.fromCharCode(keycode).toLowerCase();
                
                if((key == 'x') || (key == 'o') || (key == 'c') || (keycode == escapeKey)){        // close lightbox
                        myLightbox.end();
                } else if((key == 'p') || (keycode == 37)){        // display previous image
                        if(activeImage != 0){
                                myLightbox.disableKeyboardNav();
                                myLightbox.changeImage(activeImage - 1);
                        }
                } else if((key == 'n') || (keycode == 39)){        // display next image
                        if(activeImage != (imageArray.length - 1)){
                                myLightbox.disableKeyboardNav();
                                myLightbox.changeImage(activeImage + 1);
                        }
                }

        },

        //
        //        preloadNeighborImages()
        //        Preload previous and next images.
        //
        preloadNeighborImages: function(){

                if((imageArray.length - 1) > activeImage){
                        preloadNextImage = new Image();
                        preloadNextImage.src = imageArray[activeImage + 1][0];
                }
                if(activeImage > 0){
                        preloadPrevImage = new Image();
                        preloadPrevImage.src = imageArray[activeImage - 1][0];
                }
        
        },

        //
        //        end()
        //
        end: function() {
                this.disableKeyboardNav();
                Element.hide('lightbox');
                new Effect.Fade('overlay', { duration: overlayDuration});
                showSelectBoxes();
                showFlash();
        }
}

// -----------------------------------------------------------------------------------

//
// getPageScroll()
// Returns array with x,y page scroll values.
// Core code from - quirksmode.org
//
function getPageScroll(){

        var yScroll;

        if (self.pageYOffset) {
                yScroll = self.pageYOffset;
        } else if (document.documentElement && document.documentElement.scrollTop){         // Explorer 6 Strict
                yScroll = document.documentElement.scrollTop;
        } else if (document.body) {// all other Explorers
                yScroll = document.body.scrollTop;
        }

        arrayPageScroll = new Array('',yScroll) 
        return arrayPageScroll;
}

// -----------------------------------------------------------------------------------

//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize(){
        
        var xScroll, yScroll;
        
        if (window.innerHeight && window.scrollMaxY) {        
                xScroll = document.body.scrollWidth;
                yScroll = window.innerHeight + window.scrollMaxY;
        } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
                xScroll = document.body.scrollWidth;
                yScroll = document.body.scrollHeight;
        } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
                xScroll = document.body.offsetWidth;
                yScroll = document.body.offsetHeight;
        }
        
        var windowWidth, windowHeight;
        if (self.innerHeight) {        // all except Explorer
                windowWidth = self.innerWidth;
                windowHeight = self.innerHeight;
        } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
                windowWidth = document.documentElement.clientWidth;
                windowHeight = document.documentElement.clientHeight;
        } else if (document.body) { // other Explorers
                windowWidth = document.body.clientWidth;
                windowHeight = document.body.clientHeight;
        }        
        
        // for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

// -----------------------------------------------------------------------------------

//
// getKey(key)
// Gets keycode. If 'x' is pressed then it hides the lightbox.
//
function getKey(e){
	if (e == null) { // ie
		keycode = event.keyCode;
	} else { // mozilla
		keycode = e.which;
	}
	key = String.fromCharCode(keycode).toLowerCase();
	
	if(key == 'x'){
	}
}

// -----------------------------------------------------------------------------------

//
// listenKey()
//
function listenKey () {	document.onkeypress = getKey; }
	
// ---------------------------------------------------

function showSelectBoxes(){
	var selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "visible";
	}
}

// ---------------------------------------------------

function hideSelectBoxes(){
	var selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "hidden";
	}
}

// ---------------------------------------------------

function showFlash(){
	var flashObjects = document.getElementsByTagName("object");
	for (i = 0; i != flashObjects.length; i++) {
		flashObjects[i].style.visibility = "visible";
	}

	var flashEmbeds = document.getElementsByTagName("embeds");
	for (i = 0; i != flashEmbeds.length; i++) {
		flashEmbeds[i].style.visibility = "visible";
	}
}

// ---------------------------------------------------

function hideFlash(){
	var flashObjects = document.getElementsByTagName("object");
	for (i = 0; i != flashObjects.length; i++) {
		flashObjects[i].style.visibility = "hidden";
	}

	var flashEmbeds = document.getElementsByTagName("embeds");
	for (i = 0; i != flashEmbeds.length; i++) {
		flashEmbeds[i].style.visibility = "hidden";
	}

}


// ---------------------------------------------------

//
// pause(numberMillis)
// Pauses code execution for specified time. Uses busy code, not good.
// Help from Ran Bar-On [ran2103@gmail.com]
//

function pause(ms){
	var date = new Date();
	curDate = null;
	do{var curDate = new Date();}
	while( curDate - date < ms);
}
/*
function pause(numberMillis) {
	var curently = new Date().getTime() + sender;
	while (new Date().getTime();	
}
*/
// ---------------------------------------------------



function initLightbox() { myLightbox = new Lightbox(); }
Event.observe(window, 'load', initLightbox, false);
