rightClickWarning = "All photos are property of Carlos Rosario & Sportsduo Photography. All rights reserved. Unauthorized use is prohibited.";
photoBarDelay = 1.0;

//------------------------------------------------------------------------------------------
// Stretchy Slideshow code
//
// See http://www.dgrin.com/showthread.php?t=141047 for documentation on parameters.

//------------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------
// Flash detection code
//
// We've change the name of the base object to avoid conflicting with anyone
// else.
//------------------------------------------------------------------------------------------

if (typeof deconceptTemp == "undefined") var deconceptTemp = new Object();
if (typeof deconceptTemp.util == "undefined") deconceptTemp.util = new Object();
if (typeof deconceptTemp.SWFObjectUtil == "undefined") deconceptTemp.SWFObjectUtil = new Object();
deconceptTemp.SWFObjectUtil.getPlayerVersion = function () {
   var PlayerVersion = new deconceptTemp.PlayerVersion([0, 0, 0]);
   if (navigator.plugins && navigator.mimeTypes.length) {
       var x = navigator.plugins["Shockwave Flash"];
       if (x && x.description) {
           PlayerVersion = new deconceptTemp.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
       }
   } else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0) {
       var axo = 1;
       var counter = 3;
       while (axo) {
           try {
               counter++;
               axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + counter);
               PlayerVersion = new deconceptTemp.PlayerVersion([counter, 0, 0]);
           } catch(e) {
               axo = null;
           }
       }
   } else {
       try {
           var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
       } catch(e) {
           try {
               var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
               PlayerVersion = new deconceptTemp.PlayerVersion([6, 0, 21]);
               axo.AllowScriptAccess = "always";
           } catch(e) {
               if (PlayerVersion.major == 6) {
                   return PlayerVersion;
               }
           }
           try {
               axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
           } catch(e) {}
       }
       if (axo != null) {
           PlayerVersion = new deconceptTemp.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
       }
   }
   return PlayerVersion;
}
deconceptTemp.PlayerVersion = function (arrVersion) {
   this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0;
   this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0;
   this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0;
}
deconceptTemp.PlayerVersion.prototype.versionIsValid = function (fv) {
   if (this.major < fv.major) return false;
   if (this.major > fv.major) return true;
   if (this.minor < fv.minor) return false;
   if (this.minor > fv.minor) return true;
   if (this.rev < fv.rev) return false;
   return true;
}



//------------------------------------------------------------------------------------------
// InsertStretchySlideshow
//
// This creates a stretchy slideshow that will size itself to the screen size.
//
// See http://www.dgrin.com/showthread.php?t=141047 for documentation on parameters.
//------------------------------------------------------------------------------------------

function InsertStretchySlideshow(parms)
{
   var slideshowInserted = false;

   // copy all attributes from src object to dest object
   // this is a shallow copy so if attributes are objects or arrays themselves, we are not doing a deep copy (thus they will be references)
   function CopyObj(dest, src)
   {
       for (var i in src)
       {
           dest[i] = src[i];
       }
   }

   // functions to determine element height and width across multiple browsers
   function GetElementWidth(whichElem)
   {
       var elem = YD.get(whichElem);
       if (!elem) return 0;
       if (typeof elem.clip !== "undefined")
       {
           return elem.clip.width;
       }
       else
       {
           if (elem.style.pixelWidth)
           {
               return elem.style.pixelWidth;
           }
           else
           {
               return elem.offsetWidth;
           }
       }
   }

   function GetElementHeight(whichElem)
   {
       var elem = YD.get(whichElem);
       if (!elem) return 0;
       if (typeof elem.clip !== "undefined")
       {
           return elem.clip.height;
       }
       else
       {
           if (elem.style.pixelHeight)
           {
               return elem.style.pixelHeight;
           }
           else
           {
               return elem.offsetHeight;
           }
       }
   }

   function DebugOut(e)
   {
       if (window.console) console.log(e);
   }

   function HandleResize()
   {
       if (!slideshowInserted) return;        // if we haven't put the slideshow object in yet, then don't try to talk to the flash object yet

       try
       {
           // make sure slideshow has been loaded before we call this
           var ssContainer = YD.get("ssLocalContainer");
           if (!ssContainer || !ssContainer.stretchySlideShowLoaded)
           {
               setTimeout(HandleResize, 10);        // keep calling until we're successful
               return;
           }

           var newSize = CalcAndSetSize();

           // set the slideshow to the right size and clear the cache here to get it to take the new size
           var ssObj = YD.get("stretchySSID");
           YD.setStyle(ssObj, "height", newSize.height + "px");
           YD.setStyle(ssObj, "width", newSize.width + "px");
           // DebugOut('Before call ssObj.extHookHandler({cmd: "clearCache"})');
           ssObj.extHookHandler({cmd: "clearCache"});
           // DebugOut('After call ssObj.extHookHandler({cmd: "clearCache"})');
       } catch (e) {DebugOut(e);}
   }

   function MakeSlideshowHTML(w, h, params)
   {
       params.name = "stretchySSID";
       params.allowedDomain = document.location.hostname;
       params.type = "gallery";
       params.transparent = "false";
       var args = "";
       for (var i in params) {
           args += i + "=" + params[i] + "&amp;";
       }
       var html = "";
       // because we need a DOM ID on the object, we can't do both object and embed and have it work right (conflicting IDs)
       // if it's navigator compatible, then just do the embed tag
       if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length)
       {
           // just embed tag
           html += '<embed id="stretchySSID" src="/ria/ShizamSlides-' + SM.appVersion['ShizamSlides'] + '.swf"';
           html += ' flashVars="' + args + '" wmode="transparent"';
           html += ' width="' + w + '" height="' + h + '"';
           html += ' type="application/x-shockwave-flash" allowScriptAccess="always" allowNetworking="all"/>';
           return(html);
       }
       else
       {
           // must be IE, just use the object tag
           //html += '<object id="stretchySSID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" align="middle">';
           html += '<object id="stretchySSID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + w + '" height="' + h + '" align="middle">';
           html += '<param name="movie" value="/ria/ShizamSlides-' + SM.appVersion['ShizamSlides'] + '.swf?' + args + '" />';
           html += '<param name="wmode" value="transparent"/>';
           html += '</object>';
           return(html);
       }
   }

   function CalcAndSetSize()
   {
       // use the width of our container as a starting point
       var ssWidth, ssHeight, viewWidth, viewHeight;
       var ssLocalContainer = YD.get("ssLocalContainer");

       // calc the desired height
       viewHeight = YD.getViewportHeight();
       var ssYPos = YD.getY(ssLocalContainer);

       // figure out if the homePageTools are there yet (probably aren't) and account for their eventual height
       // this is only an approximation and only affects the site when loggedIn
       if (YD.hasClass(document.body, "homepage") && YD.hasClass(document.body, "loggedIn"))
       {
           var homepageToolsHeight = GetElementHeight("homepageTools");
           if (homepageToolsHeight < 20)
           {
               homepageToolsHeight = 49;            // this is the approx height (measured in Firefox)
           }
           viewHeight -= homepageToolsHeight;        // account for the space that the homepage tools will take after they are added
       }

       // adjust height based on passed in parameters and our current position
       viewHeight -= localParms.extraH;                        // sutract out any extraH that was specified
       viewHeight -= ssYPos;                                // subtract out our starting y position so we just fill up the rest of the screen
       viewHeight = Math.min(viewHeight, localParms.maxH);    // don't start with more than maxH
       viewHeight = Math.max(viewHeight, localParms.minH);    // don't start with less than minH
       ssHeight = viewHeight;                                // go with this full height for now

       // set the actual height now so that a scroll bar will appear if required before we calc the width
       YD.setStyle(ssLocalContainer, "height", ssHeight + "px");

       // calc the desired width
       viewWidth = GetElementWidth(ssLocalContainer);
       if (viewWidth == 0)
       {
           viewWidth = YD.getViewportWidth() - 50;        // show something if we don't have a valid width
       }

       // if extra width padding is specified, take that out of the viewing area width
       viewWidth -= localParms.extraW;
       viewWidth = Math.min(viewWidth, localParms.maxW);    // don't start with more than maxW
       viewWidth = Math.max(viewWidth, localParms.minW);    // don't start with less than minW
       ssWidth = viewWidth;                                    // go with this full width for now

       // if constraining the aspect ratio, then find out what fits
       if (localParms.aspectHeightConstrain)
       {
           // now calc the size if we are constrained by width
           var ssHeightTest = parseInt(Math.round((ssWidth * localParms.aspectHeight) / localParms.aspectWidth, 10));

           // if the full height isn't needed, then go with only what is needed
           if (ssHeightTest < viewHeight)
           {
               ssHeight = ssHeightTest;
               YD.setStyle(ssLocalContainer, "height", ssHeight + "px");    // set the new height
               // Note: it is slightly possible that a scrollbar would have disappeared here (when we shortened the page), throwing our width calc off a little bit
               // not sure what we can do about that or that it's really a problem
           }
       }
       // return our results
       var ssSize = new Object;
       ssSize.width = ssWidth;
       ssSize.height = ssHeight;
       return(ssSize);
   }

   function CalcStandardSizeToFit(h, w)
   {
       var sizeTable = ["X3", "X2", "XL", "L", "M", "S", "Th", "Ti"];
       var widthTable = [1600, 1280, 1024, 800, 600, 400, 150, 100];
       var heightTable = [1200, 960, 768, 600, 450, 300, 150, 100];

       for (var i = 0; i < widthTable.length; i++)
       {
           if ((w > widthTable[i]) && (h > heightTable[i]))
           {
               return(sizeTable[i]);
           }
       }
       return("Ti");        // as small as we have
   }

   function AddSlideshowNow()
   {
       var ssSize = CalcAndSetSize();

       // now that we know the size, see if we should autoscale the splash image
       // http://jfriend.smugmug.com/photos/625569049_csHXe-L-3.jpg
       if (localParms.autoScaleSplash)
       {
           // get the base value of the URL
           var re = /(^.*?)(-[a-zA-Z0-9]{1,2})(-\d+){0,1}(.\w{3,})$/
           // matches[0] = whole string
           // matches[1] = first part of the string before the -X2
           // matches[2] = -X2
           // matches[3] = -2 (might be undefined)
           // matches[4] = .jpg
           var matches = re.exec(localParms.splash);
           if (matches && (matches.length >= 5))
           {
               var extension = matches[4];                        // get extension
               var version = matches[3] ? matches[3] : "";        // get version number if present
               localParms.splash = matches[1] + "-" + CalcStandardSizeToFit(ssSize.height, ssSize.width) + version + extension;
           }
       }

       // now make a clean version of the parms that doesn't have all our extra ones in it
       var cleanParms = new Object;
       for (var i in localParms)
       {
           // only copy over the params that are not our params (the ones not in our defaults table)
           if (typeof(defaultParms[i]) == "undefined")
           {
               cleanParms[i] = localParms[i];
           }
       }

       var containerObj = YD.get("ssLocalContainer");
       containerObj.innerHTML = MakeSlideshowHTML(ssSize.width, ssSize.height, cleanParms);
       slideshowInserted = true;        // now it's OK to talk to the flash object
   }

   // Here's where the actual execution of this function starts.  Everything before this was local function definitions
   var flashVersion = deconceptTemp.SWFObjectUtil.getPlayerVersion();
   var requiredVersion = new deconceptTemp.PlayerVersion([9,0,0]);
   if (!flashVersion.versionIsValid(requiredVersion))
   {
       if (parms.flashRequiredImageURL)
       {
           document.write('<div id="ssNoFlashDiv" style="text-align: center; vertical-align: middle; margin: 0 auto;"><img src=' + parms.flashRequiredImageURL + '" border="0" /></div>');
       }
       else
       {
           var noFlashHTML = 'You need the latest version of Adobe Flash Player to view the show! <a href="http://www.adobe.com/go/getflashplayer">Get it here</a>!';
           if (parms.flashRequiredHTML)
           {
               noFlashHTML = parms.flashRequiredHTML;
           }
           document.write('<div id="ssNoFlashDiv" style="text-align: center; vertical-align: middle; margin: 0 auto;">' + noFlashHTML + '</div>');
       }
       return;
   }

   // Set some default parameters if they don't already exist in the passed in parameter object.
   // We must list all possible parameters here with a default value because this list is also used
   // to strip out our extra parameters before passing the parms to the slideshow.
   var localParms = new Object;
   var defaultParms =
   {
       minW: 100,
       minH: 100,
       maxW: 5000,
       maxH: 5000,
       extraH: 10,
       extraW: 0,
       aspectWidth: 600,
       aspectHeight: 400,
       aspectHeightConstrain: "false",
       resize: "true",
       flashRequiredImageURL: "",
       flashRequiredHTML: "",
       autoScaleSplash: "false",
       easyFeedURL: ""
   };

   CopyObj(localParms, defaultParms);    // initialize with defaults
   CopyObj(localParms, parms);            // copy over the passed in parms (replacing default ones )

   // condition the input values (all numbers converted to real numbers, all booleans to real booleans, etc...
   // At this point, everyone of our defaultParms is present because we copied it in
   // so we cycle through the defaultParms list looking for each of those values in the localParms
   // and then fix it up if it needs fixing
   for (var i in defaultParms)
   {
       // Now make sure all the numeric parameters that are passed in as strings are converted to numbers
       if ((typeof(defaultParms[i]) == "number") && (typeof(localParms[i]) == "string"))
       {
           localParms[i] = parseInt(localParms[i]);
       }
       // convert all our vars to actual boolean true/false rather than strings
       if (localParms[i] == "true")
       {
           localParms[i] = true;
       }
       else if (localParms[i] == "false")
       {
           localParms[i] = false;
       }
   }

   // make sure that if we are constraining the aspect ratio that they have also passed in the aspect width and height
   if (localParms.aspectHeightConstrain)
   {
       if (!localParms.aspectWidth || !localParms.aspectHeight)
       {
           localParms.aspectHeightConstrain = false;        // turn constrain off because no height and width
       }
   }

   // make sure we aren't trying to auto scale when there is no splash image
   if (localParms.autoScaleSplash && !localParms.splash)
   {
       localParms.autoScaleSplash = false;        // turn it off, as both must be supplied
   }

   if (localParms.easyFeedURL != "")
   {
       // do the URL encoding so we don't have to do this manually - something Smugmug should have done for us
       localParms.feedURL = encodeURIComponent(localParms.easyFeedURL);
   }

   // if we are resizing, then set up a resize monitor
   if (localParms.resize)
   {
       YE.on(window, 'resize', HandleResize);
   }

   // add these additional parameters so our callback function can be hooked up
   localParms.eventHandler = "StretchySlideshowEventHandler";
   localParms.elementID = "ssLocalContainer";

   // put our place holder div into place
   document.write('<div id="ssLocalContainer" style="text-align: center; margin: 0 auto; height: auto; width: auto;"></div>');

   // wait until the document is laid out before we can actually measure the space available and insert the slideshow
   YE.onDOMReady(AddSlideshowNow);
}

// unfortunately, this has to be a globally scoped identifier
function StretchySlideshowEventHandler(elem, argObj)
{
   try
   {
       var str = "";
       if (argObj)
       {
           for (var i in argObj)
           {
               str += ", argObj[" + i + "] = " + argObj[i];
           }
       }
       if (window.console) console.log(elem + str);

       if (argObj.type == "slideshowLoaded")
       {
           YD.get(elem).stretchySlideShowLoaded = true;
       }
   }
   catch (e) {if (window.console) console.log(e);}
}

//------------------------------------------------------------------------------------------
// End of Stretchy Slideshow code
//------------------------------------------------------------------------------------------