    var maxPhotos = 150;
    var i = 0;
    
    var map;
    
    // Creates a new Google Maps Icon, see Maps docs
    var icons = new Array();
    
    
    
    function submitTitle(AlbumID, newTitle, locked) {
        pageWorking('Saving Album Title');
        var postArray = new Array();
        postArray['tool'] = 'editTitleHomepage';
        postArray['TypeID'] = AlbumID;
        postArray['Locked'] = locked;
        postArray['Title'] = newTitle;
        ajax_query(editTitleHomepageRPCResult, webServer+'/hack/RPC/home.mg', postArray, true);
    }
    function editTitleHomepageRPCResult(response) {
        try {
            var returnedData = YAHOO.lang.JSON.parse(response);
        }
        catch (x) {
            //alert("JSON Parse failed!");
            return;
        }       
        var AlbumID = returnedData['AlbumID'];
        var title =  "<a href=\"\/gallery\/"+AlbumID+"\" class=\"nav\">"+returnedData['newTitle']+"<\/a>";
        if (returnedData['locked'] == true) {
            title += "<img src=\"\/img\/spacer.gif\" width=\"9\" height=\"12\" hspace=\"0\" vspace=\"0\" border=\"0\" alt=\"\" class=\"locked\" \/>";
        }
        title += " <a href=\"javascript:toggleDIV('editTitle_"+AlbumID+"','albumTitle_"+AlbumID+"','block');\" class=\"note\">edit<\/a>";
        document.getElementById('albumTitle_'+AlbumID).innerHTML = title;
        toggleDIV('albumTitle_'+AlbumID,'editTitle_'+AlbumID,'block');
        removePageWorking();
    }
    function submitDescription(AlbumID, newDescription, cutOff) {
        pageWorking('Saving Album Desc.');
        var postArray = new Array();
        postArray['tool'] = 'editDescriptionHomepage';
        postArray['TypeID'] = AlbumID;
        postArray['Description'] = newDescription;
        postArray['Trim'] = cutOff;
        ajax_query(editDescriptionHomepageRPCResult, webServer+'/hack/RPC/home.mg', postArray, true, true);
    }
    function editDescriptionHomepageRPCResult(response) {
        try {
            var returnedData = YAHOO.lang.JSON.parse(response);
        }
        catch (x) {
            //alert("JSON Parse failed!");
            return;
        }
        var AlbumID = returnedData['AlbumID'];
        document.getElementById('albumDescription_'+AlbumID).innerHTML = returnedData['newDescription']+" <a href=\"javascript:toggleDIV('editDescription_"+AlbumID+"','albumDescription_"+AlbumID+"','block');\">edit<\/a> ";
        toggleDIV('albumDescription_'+AlbumID,'editDescription_'+AlbumID,'block');
        removePageWorking();
    }
    function submitBio(newBio) {        
        pageWorking('Saving Bio');
        var postArray = new Array();
        postArray['tool'] = 'editBio';
        postArray['NickName'] = NickName;
        postArray['newBio'] = 'update bio';
        postArray['settings'] = 'bio';
        postArray['Bio'] = document.getElementById('newBio').value;
        ajax_query(editBioRPCResult, webServer+'/hack/RPC/home.mg', postArray, true);
    }
    function editBioRPCResult(response) {
        try {
            var returnedData = YAHOO.lang.JSON.parse(response);
        }
        catch (x) {
            //alert("JSON Parse failed!");
            return;
        }
        document.getElementById('userBio').innerHTML = returnedData['newBio'];
        toggleDIV('userBio,editBioLink','editBio', 'block,inline');
        removePageWorking();
    }
    
    function getHomepageGalleries(NickName) {
        //alert("getting "+NickName);
        var postArray = new Array();
        postArray['tool'] = 'getHomepageBlock';
        postArray['NickName'] = NickName;
        postArray['Block'] = "Galleries";
        ajax_query(setHomepageGalleries, webServer+'/hack/RPC/home.mg', postArray, true);
    }
    
    function setHomepageGalleries(response) {
        //alert(response);
        document.getElementById('AJAXGalleries').innerHTML = response;
    }
    
    function getHomepageKeywords(NickName) {
        //alert("getting "+NickName);
        var postArray = new Array();
        postArray['tool'] = 'getHomepageBlock';
        postArray['NickName'] = NickName;
        postArray['Block'] = "Keywords";
        ajax_query(setHomepageKeywords, webServer+'/hack/RPC/home.mg', postArray, true);
    }
    
    function setHomepageKeywords(response) {
        //alert("setting AJAXKeywords");
        document.getElementById('AJAXKeywords').innerHTML = response;
    } 
    
    
    function getHomepageFriendsAndFamily(NickName) {
        //alert("getting "+NickName+" : "+Block);
        var postArray = new Array();
        postArray['tool'] = 'getHomepageBlock';
        postArray['NickName'] = NickName;
        postArray['Block'] = "FriendsAndFamily";
        ajax_query(setHomepageFriendsAndFamily, webServer+'/hack/RPC/home.mg', postArray, true);
    }
    
    function setHomepageFriendsAndFamily(response) {
        //alert("setting AJAXFriendsAndFamily");
        document.getElementById('AJAXFriendsAndFamily').innerHTML = response;
    }
    
    
    function changeGalleryView(ViewBy) {
       pageWorking('Updating View');
        //document.getElementById('AJAXGalleries').innerHTML = '<p class="title" align="center"><img src="/img/ajax_green_rot.gif" border="0" width="24" height="24" />&nbsp;&nbsp;loading Galleries...</p>';
        var postArray = new Array();
        postArray['tool'] = 'changeGalleryView';
        postArray['ViewBy'] = ViewBy;
        ajax_query(setHomepageGalleries, webServer+'/hack/RPC/home.mg', postArray, true);
    }
    
    
    function changeGallerySort(SortBy) {
        pageWorking('Saving Sort Options');
        //document.getElementById('AJAXGalleries').innerHTML = '<p class="title" align="center"><img src="/img/ajax_green_rot.gif" border="0" width="24" height="24" />&nbsp;&nbsp;loading Galleries...</p>';
        var postArray = new Array();
        postArray['tool'] = 'changeGallerySort';
        postArray['SortBy'] = SortBy;
        ajax_query(setHomepageGalleries, webServer+'/hack/RPC/home.mg', postArray, true);
    }
    
    function getRecentGeoImages(start, stop) {
        var postArray = new Array();
        postArray['tool'] = 'getRecentGeoImages';
        postArray['NickName'] = NickName;
        postArray['start'] = start;
        postArray['stop'] = stop;
        ajax_query(handleJS, webServer+'/hack/RPC/home.mg', postArray, true);
    }
    
    function createMarker(point, lat, lng, icon) {
        
        var marker = new GMarker(point, icon);

        GEvent.addListener(marker, "click", function() { 
            markerPoint = marker.getPoint();
            location.href="http://" + SM.hostConfig.mapsHost + "/?feedType=geoUser&Data=" + NickName + "&Latitude=" + markerPoint.lat() + "&Longitude=" + markerPoint.lng() + "&zoom=6";
        }
        );

        return marker;
    }   
    
    function loadSmugMaps() {
    
        if (typeof GMap2 === 'function') {
    
            map = new GMap2(document.getElementById("map"));
            map.addControl(new GSmallMapControl());

            icons['green'] = new GIcon();
            icons['green'].image = "http://" + SM.hostConfig.mapsHost + "/img/greenmarker.png";
            icons['green'].shadow = "http://" + SM.hostConfig.mapsHost + "/img/shadow50.png";
            icons['green'].transparent = "http://" + SM.hostConfig.mapsHost + "/img/greenmarker_trans.png";
            icons['green'].iconSize = new GSize(20, 34);
            icons['green'].shadowSize = new GSize(37, 34);
            icons['green'].iconAnchor = new GPoint(9, 34);
            icons['green'].infoWindowAnchor = new GPoint(5, 1);
            icons['green'].imageMap = [0,0,20,0,20,34,0,34];
    
            icons['pink'] = new GIcon(icons['green']);
            icons['pink'].image = "http://" + SM.hostConfig.mapsHost + "/img/smugmarker.png";
            icons['pink'].transparent = "http://" + SM.hostConfig.mapsHost + "/img/smugmarker_trans.png";
    
            icons['blue'] = new GIcon(icons['green']);
            icons['blue'].image = "http://" + SM.hostConfig.mapsHost + "/img/bluemarker.png";
            icons['blue'].transparent = "http://" + SM.hostConfig.mapsHost + "/img/bluemarker_trans.png";
        
            setTimeout("getRecentGeoImages(0, 150)", 150);
        }
    }
    
    
function hideQuickNews(NickName,QuickNewsID) {
    var postArray = new Array();
    postArray['tool'] = 'hideQuickNews';
    postArray['NickName'] = NickName;
    postArray['QuickNewsID'] = QuickNewsID;
    ajax_query(hideQuickNewsRPCResult, webServer+'/hack/RPC/home.mg', postArray, true);
}
function hideQuickNewsRPCResult() {
    var quickNewsBox = YD.get('quickNewsBox');
    function collapseNews() {
        var quickNewsBox = YD.get('quickNewsBox');
        var closeNews = new YAHOO.util.Anim(quickNewsBox, {
            height: { to: 0 }
        }, .5);
        closeNews.onComplete.subscribe(function(e) {
            removeFromDOM(quickNewsBox);
        });
        YD.setStyle(quickNewsBox,'overflow','hidden');
        closeNews.animate();
    }
    var fadeNews = new YAHOO.util.Anim(quickNewsBox, {
        opacity: { to: 0 }
    }, .5);
    fadeNews.onComplete.subscribe(collapseNews);
    fadeNews.animate();
}




































SM.namespace("tools");

SM.tools.homepageBoxes = {

    move: function(clickedOn) {
    
        var clickedOnBox = clickedOn.parentNode;
        while(!YD.hasClass(clickedOnBox,'box')) {
            clickedOnBox = clickedOnBox.parentNode;
        }
        
        // going up?
        if(YD.hasClass(clickedOn,'moveUpLink')) {
            var bottomBox = clickedOnBox;
            var topBox = YD.getPreviousSiblingBy(clickedOnBox,function(el){ return YD.hasClass(el,'box'); });
        }
        else {
            var topBox = clickedOnBox;
            var bottomBox = YD.getNextSiblingBy(clickedOnBox,function(el){ return YD.hasClass(el,'box'); });
        }
        
        // got two boxes?
        if(topBox && bottomBox) {
        
            var bottomBoxAnimAttr = {
                points: {
                    to: YD.getXY(topBox),
                    control: [ [YD.getX(topBox)+100, (YD.getY(topBox)+YD.getY(bottomBox))/2] ]
                }
            };
            var bottomBoxAnim = new YAHOO.util.Motion(bottomBox, bottomBoxAnimAttr, .5, YAHOO.util.Easing.easeBoth);
            
            var topBoxAnimAttr = {
                points: {
                    to: [YD.getX(bottomBox),YD.getY(bottomBox)+bottomBox.offsetHeight-topBox.offsetHeight],
                    control: [ [YD.getX(topBox)-100, (YD.getY(topBox)+YD.getY(bottomBox))/2] ]
                }
            };
            var topBoxAnim = new YAHOO.util.Motion(topBox, topBoxAnimAttr, .5, YAHOO.util.Easing.easeBoth);
            
            topBoxAnim.onComplete.subscribe(function() {
            
                // swap the two places
                var nextSibling = bottomBox.nextSibling;
                var parentNode = bottomBox.parentNode;
                topBox.parentNode.replaceChild(bottomBox, topBox);
                parentNode.insertBefore(topBox, nextSibling);
                
                // put things back to normal
                YD.setStyle(bottomBox,'position','static');
                YD.setStyle(bottomBox,'top',0);
                YD.setStyle(bottomBox,'left',0);
                YD.setStyle(topBox,'position','static');
                YD.setStyle(topBox,'top',0);
                YD.setStyle(topBox,'left',0);
                
                // go update positions
                this.updatePositions(false);
                
                // remove stuck helper
                if(YD.inDocument('helper')) {
                    removeFromDOM('helper');
                }
                
            },this,true);
            
            bottomBoxAnim.animate();
            topBoxAnim.animate();
        
        }
    
    
    },
    
    getBoxes: function() {
    
        // getChildrenBy is not working, i dunno wtf not
        var children = YD.getChildren('homepageBoxes');
        
        var boxes = new Array();
        for(var i in children) {
            if (YAHOO.lang.hasOwnProperty(children, i)) {
                if(YD.hasClass(children[i],'box')) {
                    boxes.push(children[i]);
                }
            }
        }
        
        return boxes;
    
    },
    
    updateClasses: function() {
    
        var boxes = this.getBoxes();
        
        if(boxes.length > 0) {
            
            YD.removeClass(boxes,'first-of-type');
            YD.removeClass(boxes,'last-of-type');
            YD.removeClass(boxes,'only-of-type');
            YD.addClass(boxes[0],'first-of-type');
            YD.addClass(boxes[boxes.length-1],'last-of-type');
            if(boxes.length == 1) {
                YD.addClass(boxes[0],'only-of-type');
            }
            
        }
    
    },
    
    
    updatePositions: function(reload) {
        var reloadAfterComplete = reload;
        this.updateClasses();
    
        var boxes = this.getBoxes();
        
        if(boxes.length > 0) {
            
            // find out the properNames
            var boxOrder = new Array();
            for(var i in boxes) {
                if (YAHOO.lang.hasOwnProperty(boxes, i)) {
                    boxOrder.push(this.getBoxName(boxes[i].id));
                }
            }
            
            // update the settings via RPC
            var handleSuccess = function(o){
                if (o.responseText !== undefined) {
                    //removePageWorking();
                }
                
                if(reloadAfterComplete) {
                    location.reload();
                    return;
                }
            }
            var handleFailure = function(o){
                // oops it borked
                // alert('Please refresh, the homepage broke.');
            }
            var callback = {
                success: handleSuccess,
                failure: handleFailure,
                scope: this
            };
            
            //pageWorking('Saving Layout');
            
            var postData = 'tool=orderBoxes&NickName='+NickName+'&boxOrder='+boxOrder.join(',');
            var sUrl = '/rpc/homepage.mg';
            var updateSettings = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
        }
    },
    
    
    toggleBox: function(boxName,status) {
        // check to see if the click came from the menu or the box itself
        if(!YAHOO.lang.isString(boxName)) {
            var clickedOnBox = boxName.parentNode;
            while(!YD.hasClass(clickedOnBox,'box')) {
                clickedOnBox = clickedOnBox.parentNode;
            }
            boxName = this.getBoxName(clickedOnBox.id);
            if(SM.buttons.homepageLayoutButton) {
                SM.buttons.homepageLayoutButton.setChecked(boxName,false);
            }
        }
    
        // update the settings via RPC
        var handleSuccess = function(o){
            if (o.responseText !== undefined) {
                removePageWorking();
                
                var returned = eval('('+o.responseText+')');
                
                var removeEl = this.getBoxId(returned.removedBox); 
                
                // remove the box
                if(removeEl) {
                    if(returned.removedBox == 'SmugMaps') {
                        YD.setStyle('map','visibility','hidden');
                    }
                    
                    if(YD.inDocument('controlPanel') && Yua.ie && Yua.ie <= 7) {
                        YD.setStyle(removeEl,'visibility','hidden');
                        YD.setStyle(removeEl,'overflow','hidden');
                        var collapseEl = new YAHOO.util.Anim(removeEl, {
                            height: { to: 0 }
                        }, .5);
                        collapseEl.onComplete.subscribe(function() {
                            removeFromDOM(this.getEl());
                            SM.tools.homepageBoxes.updatePositions(false);
                        });
                        collapseEl.animate();
                    }
                    else {
                        var fadeOutEl = new YAHOO.util.Anim(removeEl, {
                            opacity: { to: 0 }
                        }, .5);
                        fadeOutEl.onComplete.subscribe(function() {
                            YD.setStyle(this.getEl(),'overflow','hidden');
                            var collapseEl = new YAHOO.util.Anim(this.getEl(), {
                                height: { to: 0 }
                            }, .5);
                            collapseEl.onComplete.subscribe(function() {
                                removeFromDOM(this.getEl());
                                SM.tools.homepageBoxes.updatePositions(false);
                            });
                            collapseEl.animate();
                        });
                        fadeOutEl.animate();
                    }
                }
            }
        }
        var handleFailure = function(o){
            // oops it borked
            // alert('Please refresh, the homepage broke.');
        }
        var callback = {
            success: handleSuccess,
            failure: handleFailure,
            scope: this
        };
        
        pageWorking('Updating Layout');
        
        var postData = 'tool=toggleBox&status='+status+'&NickName='+NickName+'&box='+boxName;
        var sUrl = '/rpc/homepage.mg';
        var updateSettings = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
        
    
    },
    
    show: function(boxName) {
    
        // update the settings via RPC and get the box at the same time!!!
        var handleSuccess = function(o){
            if (o.responseText !== undefined) {
                removePageWorking();
                
                var returned = eval('('+o.responseText+')');
                
                if(boxName == 'Bio') {
                    if(returned.refreshPage) {
                        location.reload();
                        return;
                    }
                }
                
                // create a tmp div so we don't have to alter the recieved HTML
                var tmpDiv = document.createElement('div');
                tmpDiv.innerHTML = returned.HTML;
                YD.get('homepageBoxes').appendChild(tmpDiv);
                
                // get the div out
                var newDiv = YD.getFirstChildBy(tmpDiv,function(el){ return YD.hasClass(el,'box'); });
                
                
                // move the div out and nuke the tmp one
                var boxes = this.getBoxes();
                if(boxes.length > 0) {
                    YD.get('homepageBoxes').insertBefore(newDiv,boxes[0]);    
                }
                else {
                    YD.get('homepageBoxes').appendChild(newDiv);
                }
                removeFromDOM(tmpDiv);
                
                // get the height and put everything back in order
                YD.setStyle(newDiv,'opacity',0);
                var expandHeight = newDiv.offsetHeight;
                YD.setStyle(newDiv,'height',0);
                YD.setStyle(newDiv,'overflow','hidden');
                YD.setStyle(newDiv,'position','static');
                
                // update positions early!
                SM.tools.homepageBoxes.updatePositions(returned.refreshPage);
                
                if(returned.refreshPage) {
                    //location.reload();
                    return;
                }
                
                // expand in to view in to view
                var expandEl = new YAHOO.util.Anim(newDiv, {
                    height: { to: expandHeight }
                }, .5);
                expandEl.onComplete.subscribe(function() {
                    var fadeInEl = new YAHOO.util.Anim(this.getEl(), {
                        opacity: { to: 1 }
                    }, .5);
                    fadeInEl.onComplete.subscribe(function() {
                        YD.setStyle(this.getEl(),'height','auto');
                        YD.setStyle(this.getEl(),'overflow','auto');
                        
                        if(returned.addedBox == 'SmugMaps') {
                            YE.onContentReady('map',loadSmugMaps); 
                            function tryGUnload() {
                                if (typeof GUnload === 'function') {
                                    GUnload();
                                }
                                else {
                                    setTimeout(tryGUnload,1000);
                                }
                            }
                            tryGUnload();
                        }
                        
                    });
                    fadeInEl.animate();
                });
                expandEl.animate();
                
            }
        }
        var handleFailure = function(o){
            // oops it borked
            // alert('Please refresh, the homepage broke.');
        }
        var callback = {
            success: handleSuccess,
            failure: handleFailure,
            scope: this
        };
        
        pageWorking('Retrieving Layout');
        
        var postData = 'tool=showBox&NickName='+NickName+'&box='+boxName;
        var sUrl = '/rpc/homepage.mg';
        var updateSettings = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);
    
    },
    
    getBoxId: function(boxName) {
        var id = false;
    
        switch(boxName) {
            
            case 'Bio':
                var id = 'bioBox';
            break;
            
            case 'PhotoRank':
                var id = 'popularPhotos';
            break;
            
            case 'Galleries':
                if(YD.inDocument('galleriesBox')) {
                    var id = 'galleriesBox';
                }
                else {
                    var id = 'categoriesBox';
                }
            break;
            
            case 'Galleries':
                var id = 'categoriesBox';
            break;
            
            case 'Dates':
                var id = 'datesBox';
            break;
            
            case 'Featured':
                var id = 'featuredBox';
            break;
            
            case 'FriendsAndFamily':
                var id = 'ffBox';
            break;
            
            case 'Communities':
                var id = 'communitiesBox';
            break;
            
            case 'Keywords':
                var id = 'keywordsBox';
            break;
            
            case 'SmugMaps':
                var id = 'mapBox';
                break;
            case 'RecentPhotosBox':
                var id = 'recentPhotosBox';
                break;
            case 'SlideshowBox':
                var id = 'slideshowBox';
                break;
            case 'PhotoVideoBox':
                var id = 'photoVideoBox';
                break;
        }
        
        return id;
    },
    
    getBoxName : function(id) {
        var boxName = false;
    
        switch(id) {
        
            case 'bioBox':
                var boxName = 'Bio';
            break;
            
            case 'popularPhotos':
                var boxName = 'PhotoRank';
            break;
            
            case 'galleriesBox':
                var boxName = 'Galleries';
            break;
            
            case 'categoriesBox':
                var boxName = 'Galleries';
            break;
            
            case 'datesBox':
                var boxName = 'Dates';
            break;
            
            case 'featuredBox':
                var boxName = 'Featured';
            break;
            
            case 'ffBox':
                var boxName = 'FriendsAndFamily';
            break;
            
            case 'communitiesBox':
                var boxName = 'Communities';
            break;
            
            case 'keywordsBox':
                var boxName = 'Keywords';
            break;
            
            case 'mapBox':
                var boxName = 'SmugMaps';
                break;
            case 'recentPhotosBox':
                var boxName = 'RecentPhotosBox';
                break;
            case 'slideshowBox':
                var boxName = 'SlideshowBox';
                break;
            case 'photoVideoBox':
                var boxName = 'PhotoVideoBox'
                break;
        }
        
        return boxName;
    },

    swapNodes: function(thisNode,destNode) {
        var nextSibling = thisNode.nextSibling;
        var parentNode = thisNode.parentNode;
        destNode.parentNode.replaceChild(thisNode, destNode);
        parentNode.insertBefore(destNode, nextSibling);
    }
    
}

// gotta update the of-types
YE.onDOMReady(function() {
    if(YD.inDocument('homepageBoxes')) {
        SM.tools.homepageBoxes.updateClasses();
    }
});







SM.namespace("Homepage");

SM.Homepage.PhotoVideoBox = function(containerID, config, image) {
    this.init(containerID, config, image);
};

SM.Homepage.PhotoVideoBox.prototype = {
    init: function(containerID, config, image) {
        var _image = image;
        var _defaultConfig = {
                cdnHost: '',
                shizVidVersion: '',
                showCaption: true
            };
        var _config = YAHOO.lang.merge(_defaultConfig, config);
        var _containerID = containerID;
        var _container = YD.get(_containerID);
        
        var _getPerfectSize = function() {
            var containerWidth = _container.offsetWidth;
            
            if(containerWidth <= 600) {
                return 'Small';
            }
            else if(containerWidth <= 800) {
                return 'Medium';
            }
            else {
                return 'Large';
            }
        };
        
        this.render = function() {
            var imageSize = _getPerfectSize();
            var imageWidth = _image[imageSize+'Width'];
            var imageHeight = _image[imageSize+'Height'];
            var imageURL = _image[imageSize+'URL'];
            var caption = _image.Caption;
            
            if(_image.IsMovie) {
                var movieKey = _image.MovieKey;
                
                SM.flash.insertFlashIntoElement(_containerID, '100%', imageHeight+'px', 'http://' + _config.cdnHost + '/ria/ShizVidz-' + _config.shizVidVersion + '.swf', {s: movieKey});
            }
            else {
                var imageBoxHTML = '<div style="width: ' + imageWidth + 'px; height: ' + imageHeight + 'px; margin: 0 auto;"><img src="/img/spacer.gif" width="' + imageWidth + '" height="' + imageHeight + '" style="background-image: url(' + imageURL + '); background-repeat: no-repeat;" /></div>';
                
                if(_config.showCaption) {
                    imageBoxHTML += '<div class="caption" style="width: ' + imageWidth + 'px;">' + caption + '</div>';
                }
                
                _container.innerHTML = imageBoxHTML;
            }
        };
    }
};

SM.Homepage.PhotoVideoSettingsPanel = function(containerID, panelConfig) {
    this.init(containerID, panelConfig);
};

SM.Homepage.PhotoVideoSettingsPanel.prototype = {
    init: function(containerID, panelConfig) {
        var _defaultPanelConfig = {
                nickName: ''
            };
        var _panelConfig = YAHOO.lang.merge(_defaultPanelConfig, panelConfig);
        var _container = YD.get(containerID);
        var _panel = new YAHOO.widget.Panel(_container, _panelConfig);
        var _homepagePhotoVideoElement = YD.get('homepagePhotoVideo');
        var _showCaptionElement = YD.get('hpPhotoVideoCaption');
        var _cancelButton = new YAHOO.widget.Button(_panelConfig.cancelButtonID);
        var _saveButton = new YAHOO.widget.Button(_panelConfig.saveButtonID);
        var _selectedImage;
        var _nickName = _panelConfig.nickName;
        
        var _photoPickerOptions = {
                paginated: false,
                allowPaginatedToggle: false,
                outerContainerID: 'hpPhotoVideoGalleryPicker',
                thumbsContainerID: 'hpPhotoVideoGalleryThumbs',
                thumbsMessageContainerID: 'hpPhotoVideoGalleryMessage',
                pageType: 'Album',
                albumID: '',
                albumKey: '',
                guestPage: true,
                constrainedWithinWindow: false,
                allowArrange: false,
                forcedThumbSize: 'Tiny',
                tinyHeight: 145,
                tinyWidth: 112,
                source: 'homepagePhotoVideo',
                forceViewer: true,
                photoClickFunction: function(image) {
                    var images = Sizzle('#hpPhotoVideoGalleryThumbs .photo');
                    
                    YD.removeClass(images, 'selected');
                    YD.addClass(image.containerID, 'selected');
                    _selectedImage = image;
                }
            };
            
        var _hompagePhotoVideoPicker = new SM.AllThumbsStretch.View(_photoPickerOptions);
        
        var _galleryMenu = new SM.buttons.GenericGalleryMenu('hpPhotoVideoGalleryMenu', {
                type: 'homepagePhotoVideo',
                nickName: _nickName,
                gallerySelectedCallback: function(type, args, item) {
                    var text = this.cfg.getProperty('text');
                
                    _galleryMenu.setLabel(text);
                    _hompagePhotoVideoPicker.changeAlbum(item.value.albumID, item.value.albumKey);
                }
            });
        
        var _showHidePlayButtons = function(show) {
            var buttons = Sizzle('#hpPhotoVideoGalleryThumbs .moviePlayButton');
            
            YD.setStyle(buttons, 'display', show? '' : 'none');
        };
        
        var _showHideVaultButtons = function(show) {
            var buttons = Sizzle('#hpPhotoVideoGalleryThumbs .archiveButton');
            
            YD.setStyle(buttons, 'display', show? '' : 'none');
        };
        
        var _saveUserSetting = function(image) {
            var postData = "tool=saveHomepagePhotoVideoBox";
        
            var handleSuccess = function(response) {
                removePageWorking();
            };
            
            var handleFailure = function(response) {
                removePageWorking();
            };
            
            var callback = {
                'success': handleSuccess,
                'failure': handleFailure,
                'scope': this
            };
            
            postData += "&imageID=" + image.imageID + '&showCaption=' + (_showCaptionElement.checked? 'true' : 'false') + '&NickName=' + _nickName;

            pageWorking('Saving Settings');
            var xhr = YAHOO.util.Connect.asyncRequest('POST', '/rpc/homepage.mg', callback, postData);
        };
        
        var _getImageInfo = function(imageID, imageKey) {
            var postData = "method=getImageInfo&imageId=" + imageID + '&imageKey=' + imageKey;
        
            var handleSuccess = function(response) {
                try {
                    var imageInfo = YAHOO.lang.JSON.parse(response.responseText);
                    var photoVideoBoxConfig = {
                            cdnHost: _panelConfig.cdnHost, 
                            shizVidVersion: _panelConfig.shizVidVersion, 
                            showCaption: _showCaptionElement.checked
                        };
                    var imageVideoBox = new SM.Homepage.PhotoVideoBox('homepagePhotoVideo', photoVideoBoxConfig, imageInfo.result);
                    
                    imageVideoBox.render();
                }
                catch (x) {
                    alert("JSON Parse failed!");
                    return;
                }
            };
            
            var handleFailure = function(response) {
                
            };
            
            var callback = {
                'success': handleSuccess,
                'failure': handleFailure,
                'scope': this
            };
            
            var xhr = YAHOO.util.Connect.asyncRequest('POST', '/rpc/image.mg', callback, postData);
        };
        
        var _onClickCancel = function(e, obj) {
            YAHOO.util.Event.preventDefault(e);
            
            _showHidePlayButtons(false);
            _showHideVaultButtons(false);
            _panel.hide();
        };
        
        var _onClickSave = function(e, obj) {
            YAHOO.util.Event.preventDefault(e);
            
            if(_selectedImage) {
                _getImageInfo(_selectedImage.imageID, _selectedImage.imageKey);
                _saveUserSetting(_selectedImage);
                _showHidePlayButtons(false);
                _showHideVaultButtons(false);
                _panel.hide();
            }
            else {
                alert('Please select a photo.');
            }
        };
        
        this.show = function(e) {
            YAHOO.util.Event.preventDefault(e);
            YD.setStyle(_container, 'display', '');
            _showHidePlayButtons(true);
            _showHideVaultButtons(true);
            _panel.center();
            _panel.show();
        };
        
        this.hide = function() {
            _showHidePlayButtons(false);
            _showHideVaultButtons(false);
            _panel.hide();
        };
        
        YAHOO.util.Event.addListener(_panelConfig.cancelButtonID, "click", _onClickCancel, { 'that': this });
        YAHOO.util.Event.addListener(_panelConfig.saveButtonID, "click", _onClickSave, { 'that': this });
        
        _panel.render();
    }
};

SM.Homepage.SlideshowSettingsPanel = function(containerID, panelConfig, slideshowConfig) {
    this.init(containerID, panelConfig, slideshowConfig);
};

SM.Homepage.SlideshowSettingsPanel.prototype = {
    init: function(containerID, panelConfig, slideshowConfig) {
        var _defaultPanelConfig = {};
        var _panelConfig = YAHOO.lang.merge(_defaultPanelConfig, panelConfig);
        var _slideshowConfig = slideshowConfig;
        var _container = YD.get(containerID);
        var _typeElement = YD.get('hpSSType');
        var _typeSlideshowTable = YD.get('hpSSTypeSlideshow');
        var _typeShowItTable = YD.get('hpSSTypeShowIt');
        var _sourceElement = YD.get('hpSSSource');
        var _galleryRowElement = YD.get('hpSSGalleryRow');
        var _albumNameElement = YD.get('hpSSAlbumName');
        var _albumIDElement = YD.get('hpSSAlbumID');
        var _albumKeyElement = YD.get('hpSSAlbumKey');
        var _keywordElement = YD.get('hpSSKeyword');
        var _keywordElementRow = YD.get('hpSSKeywordRow');
        var _heightElement = YD.get('hpSSHeight');
        var _clickYesElement = YD.get('hpSSClickYes');
        var _clickNoElement = YD.get('hpSSClickNo');
        var _captionsYesElement = YD.get('hpSSCaptionsYes');
        var _captionsNoElement = YD.get('hpSSCaptionsNo');
        var _thumbnailsYesElement = YD.get('hpSSThumbnailsYes');
        var _thumbnailsNoElement = YD.get('hpSSThumbnailsNo');
        var _autoStartYesElement = YD.get('hpSSAutoStartYes');
        var _autoStartNoElement = YD.get('hpSSAutoStartNo');
        var _speedElement = YD.get('hpSSSpeed');
        var _showSpeedYesElement = YD.get('hpSSShowSpeedYes');
        var _showSpeedNoElement = YD.get('hpSSShowSpeedNo');
        var _pageStyleBlackElement = YD.get('hpSSPageStyleBlack');
        var _pageStyleWhiteElement = YD.get('hpSSPageStyleWhite');
        var _showButtonsYesElement = YD.get('hpSSButtonsYes');
        var _showButtonsNoElement = YD.get('hpSSButtonsNo');
        var _randomStartYesElement = YD.get('hpSSRandomStartYes');
        var _randomStartNoElement = YD.get('hpSSRandomStartNo');
        var _randomizeYesElement = YD.get('hpSSRandomizeYes');
        var _randomizeNoElement = YD.get('hpSSRandomizeNo');
        var _splashURLElement = YD.get('hpSSSplashURL');
        var _splashDelayElement = YD.get('hpSSSplashDelay');
        var _crossFadeSpeedElement = YD.get('hpSSCrossFadeSpeed');
        var _panel = new YAHOO.widget.Panel(_container, _panelConfig);
        var _cancelButton = new YAHOO.widget.Button(_panelConfig.cancelButtonID);
        var _saveButton = new YAHOO.widget.Button(_panelConfig.saveButtonID);
        var _nickName = _panelConfig.nickName;
        var _albumName = _slideshowConfig.albumName? _slideshowConfig.albumName : '';
        
        var _setRadio = function(property, defaultValue, radios) {
            var value = property? property : defaultValue;
            
            for(var i=0; i<radios.length; i++) {
                if(radios[i].value == value) {
                    radios[i].checked = true;
                    break;
                }
            }
        };
        
        var _getRadioValue = function(radios) {
            for(var i=0; i<radios.length; i++) {
                if(radios[i].checked) {
                    return radios[i].value;
                }
            }
        };
        
        var _setTextbox = function(property, defaultValue, textbox) {
            var value = property? property : defaultValue;
            
            textbox.value = value;
        };
        
        var _galleryMenu = new SM.buttons.GenericGalleryMenu('hpSSGalleryMenu', {
                type: 'homepageslideshow',
                buttonText: _albumName,
                nickName: _nickName,
                gallerySelectedCallback: function(type, args, item) {
                    var text = this.cfg.getProperty('text');
                
                    _galleryMenu.setLabel(text);
                    _albumNameElement.value = text;
                    _albumIDElement.value = item.value.albumID;
                    _albumKeyElement.value = item.value.albumKey;
                }
            });
        
        var _initializeSSFormElements = function() {
            if(_slideshowConfig.source) {
                var optionsLength = _sourceElement.options.length;
                
                for(var i=0; i<optionsLength; i++) {
                    if(_slideshowConfig.source == _sourceElement.options[i].value) {
                        var row;
                        
                        _sourceElement.selectedIndex = i;
                        
                        switch(_sourceElement.options[i].value) {
                            case 'gallery':
                                row = _galleryRowElement;
                                break;
                            case 'keyword':
                                row = _keywordElementRow;
                                break;
                        }
                        
                        if(row) {
                            YD.setStyle(row, 'display', '');
                        }
                        
                        break;
                    }
                }
            }
            else {
                _sourceElement.selectedIndex = 0;
            }
            
            if(_slideshowConfig.setSpeed) {
                var optionsLength = _speedElement.options.length;
                
                for(var i=0; i<optionsLength; i++) {
                    if(_slideshowConfig.setSpeed == _speedElement.options[i].value) {
                        _speedElement.selectedIndex = i;
                        break;
                    }
                }
            }
            else {
                _slideshowConfig.setSpeed = 'med';
                _speedElement.selectedIndex = 1;
            }
            
            _setRadio(_slideshowConfig.clickToImage, 'false', [_clickYesElement, _clickNoElement]);
            _setRadio(_slideshowConfig.captions, 'true', [_captionsYesElement, _captionsNoElement]);
            _setRadio(_slideshowConfig.showThumbs, 'false', [_thumbnailsYesElement, _thumbnailsNoElement]);
            _setRadio(_slideshowConfig.autoStart, 'true', [_autoStartYesElement, _autoStartNoElement]);
            _setRadio(_slideshowConfig.showSpeed, 'false', [_showSpeedYesElement, _showSpeedNoElement]);
            _setRadio(_slideshowConfig.pageStyle, 'black', [_pageStyleBlackElement, _pageStyleWhiteElement]);
            _setRadio(_slideshowConfig.showButtons, 'false', [_showButtonsYesElement, _showButtonsNoElement]);
            _setRadio(_slideshowConfig.randomStart, 'false', [_randomStartYesElement, _randomStartNoElement]);
            _setRadio(_slideshowConfig.randomize, 'false', [_randomizeYesElement, _randomizeNoElement]);
            
            _setTextbox(_slideshowConfig.albumName, '', _albumNameElement);
            _setTextbox(_slideshowConfig.AlbumID, '', _albumIDElement);
            _setTextbox(_slideshowConfig.AlbumKey, '', _albumKeyElement);
            _setTextbox(_slideshowConfig.height, '500', _heightElement);
            _setTextbox(_slideshowConfig.splash, '', _splashURLElement);
            _setTextbox(_slideshowConfig.splashDelay, '0', _splashDelayElement);
            _setTextbox(_slideshowConfig.crossFadeSpeed, '350', _crossFadeSpeedElement);
            _setTextbox(_slideshowConfig.keyword, '', _keywordElement);
        };
        
        var _onClickCancel = function(e, obj) {
            YAHOO.util.Event.preventDefault(e);
        
            _panel.hide();
        };
        
        var _onClickSave = function(e, obj) {
            YAHOO.util.Event.preventDefault(e);
            
            var type = _typeElement.options[_typeElement.selectedIndex].value;
            
            switch(type) {
                case 'SmugMugSlideshow':
                    _updateSlideshow();
                    break;
                case 'ShowIt':
                    _updateShowIt();
                    break;
            }
            
            _panel.hide();
        };
        
        var _updateShowIt = function() {
            SM.flash.insertFlashIntoElement('homepageSlideshow', '100%', _heightElement.value, 'http://brian-1.smugmug.net/ria/ShizVidz-2009090604.swf', {s: 'ZT0xJmk9MTM3NTE0Jms9a0NQWUgmYT00NTY3X3NNY05a'});
        };
        
        var _updateSlideshow = function() {
            var source = _sourceElement.value;
            
            var slideshowConfigAll = slideshowConfig = {
                newWindow: 'false',
                transparent: 'true',
                showLogo: 'false',
                clickToImage: _getRadioValue([_clickYesElement, _clickNoElement]),
                captions: _getRadioValue([_captionsYesElement, _captionsNoElement]),
                showThumbs: _getRadioValue([_thumbnailsYesElement, _thumbnailsNoElement]),
                autoStart: _getRadioValue([_autoStartYesElement, _autoStartNoElement]),
                setSpeed: _speedElement.value,
                showSpeed: _getRadioValue([_showSpeedYesElement, _showSpeedNoElement]),
                pageStyle: _getRadioValue([_pageStyleBlackElement, _pageStyleWhiteElement]),
                showButtons: _getRadioValue([_showButtonsYesElement, _showButtonsNoElement]),
                randomStart: _getRadioValue([_randomStartYesElement, _randomStartNoElement]),
                randomize: _getRadioValue([_randomizeYesElement, _randomizeNoElement]),
                splash: _splashURLElement.value,
                splashDelay: _splashDelayElement.value,
                crossFadeSpeed: _crossFadeSpeedElement.value
            };
            
            if(_slideshowConfig.useInside && _slideshowConfig.useInside == 'true') {
                slideshowConfig.useInside = 'true';
            }
            
            switch(source) {
                case 'popular':
                    slideshowConfigAll.feedURL = slideshowConfig.feedURL = 'http://' + _panelConfig.apiHost + '/hack/feed.mg?Type=nicknamePopular%2526Data=' + _panelConfig.nickName;
                    break;
                case 'recent':
                    slideshowConfigAll.feedURL = slideshowConfig.feedURL = 'http://' + _panelConfig.apiHost + '/hack/feed.mg?Type=nicknameRecentPhotos%2526Data=' + _panelConfig.nickName;
                    break;
                case 'keyword':
                    slideshowConfigAll.feedURL = slideshowConfig.feedURL = 'http://' + _panelConfig.apiHost + '/hack/feed.mg?Type=userkeyword%2526NickName=' + _panelConfig.nickName + '%2526Data=' + _keywordElement.value;
                    break;
                case 'gallery':
                    slideshowConfigAll.AlbumID = slideshowConfig.AlbumID = _albumIDElement.value;
                    slideshowConfigAll.AlbumKey = slideshowConfig.AlbumKey = _albumKeyElement.value;
                    
                    break;
            }
            
            slideshowConfigAll.source = _sourceElement.value;
            slideshowConfigAll.albumName = _albumNameElement.value;
            slideshowConfigAll.height = _heightElement.value;
            slideshowConfigAll.keyword = _keywordElement.value;
            slideshowConfigAll.NickName = _panelConfig.nickName;
            slideshowConfigAll.type = 'SmugMugSlideshow';
            
            SM.flash.insertSlideshowIntoElement('homepageSlideshow', '100%', _heightElement.value, slideshowConfig);
            _saveHomepageSlideshowBox(slideshowConfigAll);
        };
        
        var _saveHomepageSlideshowBox = function(settings) {
            var postData = "tool=saveHomepageSlideshowBox";
        
            var handleSuccess = function(response) {
                removePageWorking();
            };
            
            var handleFailure = function(response) {
                removePageWorking();
            };
            
            var callback = {
                'success': handleSuccess,
                'failure': handleFailure,
                'scope': this
            };
            
            for (var i in settings) {
                postData += "&" + i + "=" + settings[i];
            }
            
            pageWorking('Saving Settings');
            var xhr = YAHOO.util.Connect.asyncRequest('POST', '/rpc/homepage.mg', callback, postData);
        };
        
        this.show = function(e) {
            YAHOO.util.Event.preventDefault(e);
            YD.setStyle(_container, 'display', '');
            _panel.center();
            _panel.show();
        };
        
        this.hide = function() {
            _panel.hide();
        };
        
        _sourceElement.onchange = function(e) {
            var selectedValue = _sourceElement.options[_sourceElement.selectedIndex].value;
            var rows = Sizzle('.hpSlideshowRow');
            var row;
            
            YD.setStyle(rows, 'display', 'none');
            
            _galleryMenu.setLabel('Choose a Gallery');
            _albumNameElement.value = '';
            _albumIDElement.value = '';
            _albumKeyElement.value = '';
            _keywordElement.value = '';
            
            switch(selectedValue) {
                case 'gallery':
                    row = _galleryRowElement;
                    break;
                case 'keyword':
                    row = _keywordElementRow;
                    break;
            }
            
            if(row) {
                YD.setStyle(row, 'display', '');
            }
        };
        
        _typeElement.onchange = function(e) {
            var selectedValue = _typeElement.options[_typeElement.selectedIndex].value;
            var tables = Sizzle('.hpSSTypeSettings');
            var table;
            
            YD.setStyle(tables, 'display', 'none');
            
            switch(selectedValue) {
                case 'SmugMugSlideshow':
                    table = _typeSlideshowTable;
                    break;
                case 'ShowIt':
                    table = _typeShowItTable;
                    break;
            }
            
            if(table) {
                YD.setStyle(table, 'display', '');
            }
        };
        
        YAHOO.util.Event.addListener(_panelConfig.cancelButtonID, "click", _onClickCancel, { 'that': this });
        YAHOO.util.Event.addListener(_panelConfig.saveButtonID, "click", _onClickSave, { 'that': this });
        
        if(!_panelConfig.type) {
            _panelConfig.type = 'SmugMugSlideshow';
        }
        
        switch(_panelConfig.type) {
            case 'SmugMugSlideshow':
                YD.setStyle(_typeSlideshowTable, 'display', '');
                _initializeSSFormElements();
                break;
            case 'ShowIt':
                YD.setStyle(_typeShowItTable, 'display', '');
                break;
        }
        
        _panel.render();
    }
};