/*
 * scottahoward.com site JavaScript library. Houses functions common to most or all pages.
 *
 * @copyright Copyright 2007 Spenlen Media (http://spenlen.com)
 * @license This source code file is licensed for the exclusive private use of
 *   Scott A. Howard and may not be used for any other purpose.
 */


/* Regular image auto-fade behavior.
 */

var autoFadeElements = null;
var autoFadeIndex = 0;

function autoFadeInit() {
    autoFadeElements = YAHOO.util.Dom.getElementsByClassName('fadeInImage', 'IMG');
    if (autoFadeElements.length < 1) {
        return;
    }
    for (var elementIdx = 0; elementIdx < autoFadeElements.length; elementIdx++) {
        YAHOO.util.Dom.setStyle(autoFadeElements[elementIdx], 'opacity', 0);
        YAHOO.util.Dom.setStyle(autoFadeElements[elementIdx], 'visibility', 'visible');
    }
    setTimeout(doAutoFade, 200);
}

function doAutoFade() {
    if (autoFadeIndex >= autoFadeElements.length) {
        return;
    }
    var animation = new YAHOO.util.Anim(autoFadeElements[autoFadeIndex++], {opacity: {to: 1}}, 1.2, YAHOO.util.Easing.easeIn);
    animation.animate();
    setTimeout(doAutoFade, 600);
}

YAHOO.util.Event.addListener(window, 'load', autoFadeInit);


/* Gallery links roll-in.
 */

var galleryLinkFadeInAnimations  = {};
var galleryLinkFadeOutAnimations = {};
var galleryLinkElements          = null;
var galleryRollInIndex           = 0;

function galleryLinkRollIn() {
    galleryLinkElements = YAHOO.util.Dom.getElementsByClassName('galleryLink', 'A');
    if (galleryLinkElements.length < 1) {
        return;
    }

    for (var elementIdx = 0; elementIdx < galleryLinkElements.length; elementIdx++) {
        YAHOO.util.Dom.setStyle(galleryLinkElements[elementIdx], 'opacity', 0);
        YAHOO.util.Dom.setStyle(galleryLinkElements[elementIdx], 'visibility', 'visible');

        galleryLinkFadeInAnimations[galleryLinkElements[elementIdx].id]  = new YAHOO.util.Anim(galleryLinkElements[elementIdx], {opacity: {to: 1}}, 1, YAHOO.util.Easing.easeIn);
        YAHOO.util.Event.addListener(galleryLinkElements[elementIdx], 'mouseover', galleryLinkOnMouseOver);

        galleryLinkFadeOutAnimations[galleryLinkElements[elementIdx].id] = new YAHOO.util.Anim(galleryLinkElements[elementIdx], {opacity: {to: 0}}, 1, YAHOO.util.Easing.easeNone);
        YAHOO.util.Event.addListener(galleryLinkElements[elementIdx], 'mouseout', galleryLinkOnMouseOut);
    }

    var currentGallery = getCurrentGallery();
    if (getLastViewedGallery() != currentGallery) {
        if (currentGallery) {
            setLastViewedGallery(currentGallery);
        }
        setTimeout(doGalleryRollIn, 200);
    }
}

function doGalleryRollIn() {
    if (galleryRollInIndex >= galleryLinkElements.length) {
        setTimeout(doGalleryRollOut, 500);
        return;
    }
    fadeInGalleryLink(galleryLinkElements[galleryRollInIndex++].id, 0.5);
    setTimeout(doGalleryRollIn, 50);
}

function doGalleryRollOut() {
    for (var i = 0; i < galleryLinkElements.length; i++) {
        fadeOutGalleryLink(galleryLinkElements[i].id, 8);
    }
}

function fadeInGalleryLink(linkID, duration) {
    var animation = galleryLinkFadeOutAnimations[linkID];
    if (animation.isAnimated()) {
        YAHOO.util.AnimMgr.stop(animation);
    }
    animation = galleryLinkFadeInAnimations[linkID];
    if (animation.isAnimated()) {
        YAHOO.util.AnimMgr.stop(animation);
    }
    animation.duration = duration;
    animation.animate();
}

function fadeOutGalleryLink(linkID, duration) {
    var animation = galleryLinkFadeInAnimations[linkID];
    if (animation.isAnimated()) {
        YAHOO.util.AnimMgr.stop(animation);
    }
    animation = galleryLinkFadeOutAnimations[linkID];
    if (animation.isAnimated()) {
        YAHOO.util.AnimMgr.stop(animation);
    }
    animation.duration = duration;
    animation.animate();
}

function galleryLinkOnMouseOver() {
    fadeInGalleryLink(this.id, 0.3);
}

function galleryLinkOnMouseOut() {
    fadeOutGalleryLink(this.id, 0.8);
}

function getCurrentGallery() {
    var matches = document.URL.match(/portfolio\/([a-z0-9_]+)/i);
    if (matches[1]) {
        return matches[1];
    }
    return '';
}

function getLastViewedGallery() {
    var cookieValue = document.cookie.match(new RegExp('(^|;)\\s*' + escape('lastGallery') + '=([^;\\s]*)'));
    return (cookieValue ? unescape(cookieValue[2]) : '');
}

function setLastViewedGallery(galleryName) {
    var expires = new Date();
    expires.setFullYear(expires.getFullYear() + 1);
    newCookie = 'lastGallery=' + galleryName
              + '; expires=' + expires.toUTCString()
              + '; path=/';
    document.cookie = newCookie;
}


YAHOO.util.Event.addListener(window, 'load', galleryLinkRollIn);


/* Shopping Cart */

function updatePrintPrice(popup) {
    var priceElement = document.getElementById('print_price');
    if (! priceElement) {
        return;
    }
    var matches = popup.options[popup.selectedIndex].text.match(/\[\$([0-9.]+)\]$/);
    if (! matches[1]) {
        return;
    }
    priceElement.value = matches[1];
}
