/**
 * APP is the JavaScript namespace for this site. Similar to the
 * YAHOO object, the APP object contains a series of modules that
 * correspond to various page-level widgets and functionality.
 */
var APP = function() { return {} }();

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

YAHOO.util.Event.onContentReady("x", function () {
    });

/**
 * Non-critical functionality is initialized onDOMReady
 */
YAHOO.util.Event.onDOMReady(function() {
        APP.imageviewer.init();
        APP.toggles.init();

        APP.externals.init();
        APP.validation.init();

        if (document.getElementById("moviecontainer")) {
                var so = new SWFObject("main.swf", "mainmovie", "1000", "655", "9");
                so.addParam("wmode", "transparent");
                so.setAttribute("style", ";");
                so.useExpressInstall('expressinstall.swf');
                so.write("moviecontainer");
            }
    });


/**
 * Scan for links with rel="external" and open in new windows
 * (the XHTML Strict compliant way of doing target="_blank"
 */
APP.externals = function() {
    return {
        init: function() {
            var anchors = document.getElementsByTagName("a"); 
            for (var i=0; i<anchors.length; i++) { 
                var anchor = anchors[i]; 
                if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") 
                    anchor.target = "_blank"; 
            } 
            
            if (document.getElementById("linkMap")) {
                var hotspots = document.getElementById("linkMap").getElementsByTagName("area");
                for (var i=0; i < hotspots.length; i++) {
                    hotspots[i].target = "_blank";
                }
            }
        }
    }
}();



function portfolioPopup(imagePath) {
    var popup_width = 630;
    var popup_height = 500;
    var xpos = (screen.width - popup_width)/2;
    var ypos = (screen.height - popup_height)/2;

    var windowAttributes = "left=" + xpos + ",top=" + ypos + ",screenX=" + xpos + ",screenY=" + ypos;
    windowAttributes += ",width=" + popup_width + ",height=" + popup_height + ",resizable";

    var url = SITE_ROOT + "sketch/" + imagePath.replace(/\//g,"-");
    var popupWindow = window.open(url, 'popupWindow' + (Math.round(Math.random() * 5) +1), windowAttributes);
    if (popupWindow) { // may have been foiled by a popup blocker
        popupWindow.focus();
    }
}

/**
 * Form validation using tmt_validator.js
 *
 * This module attaches an onsubmit listener to forms that have the class "mustvalidate".
 * The validation logic is defined in attributes of the individual form fields.
 * The error messages are written to divs named after the corresponding form field.
 */
APP.validation = function() {
    return {
        init: function() {
            var form_tags = document.getElementsByTagName("form"); 
            for (i=0; i < form_tags.length; i++) {
                if (YAHOO.util.Dom.hasClass(form_tags[i], "mustvalidate")) {
                    YAHOO.util.Event.addListener(form_tags[i], "submit", APP.validation.validate);
                }

                if (YAHOO.util.Dom.hasClass(form_tags[i], "confirmdeletion")) {
                    YAHOO.util.Event.addListener(form_tags[i], "submit", APP.validation.confirmdeletion);
                }
            }

            
        },

        confirmdeletion: function(e) {
            var result = confirm('Are you sure you want to DELETE this?');
            if (result == false) {
                YAHOO.util.Event.stopEvent(e);
            }
        },
            
        validate: function(e) {
            var element = YAHOO.util.Event.getTarget(e);
            element.tmt_validator = new tmt_formValidator(element);
            element.tmt_validator.callback = APP.validation.showErrors;
            if (!tmt_validateForm(element)) {
                YAHOO.util.Event.stopEvent(e);
            }

        },

        showErrors: function(formNode, validators) {
            for (var i=0; i < validators.length; i++){
                try {
                    document.getElementById(validators[i].name + "_error").innerHTML = validators[i].message;
                } catch(e) {
                }
            }
        }
    }
}();

/*
APP.mailinglist = function() {
    return {
        init: function() {
            if (!document.getElementById("signupForm")) return;
            YAHOO.util.Event.addListener("signupForm", "submit", APP.mailinglist.validateForm);
        },

        validateForm: function(e) {
            YAHOO.util.Event.stopEvent(e);
            var post_data = "";
            var form_fields = ["signup_email"];
            for (i=0; i < form_fields.length; i++) {
                var form_field = YAHOO.util.Dom.get(form_fields[i]);
                var field_value = form_field.value.trim();
                if (field_value == "") {
                    YAHOO.util.Dom.addClass(form_field, "error");
                    form_field.focus();
                    return;
                } else {
                    YAHOO.util.Dom.removeClass(form_field, "error");
                    post_data += form_field.name + "=" + field_value + "&";
                }
            }
            
            APP.mailinglist.submitForm(post_data);
        },

        submitForm: function(post_data) {
            var callback = 
            { 
                success: APP.mailinglist.submitSuccess, 
                failure: APP.mailinglist.submitFailure
            };             
            var request = YAHOO.util.Connect.asyncRequest('POST', YAHOO.util.Dom.get('signupForm').action, callback, post_data);
        },
        
        submitSuccess: function(o) {
            if(o.responseText !== undefined){ 
                var container = YAHOO.util.Dom.get("signup_message");
                container.innerHTML = "";
            }
        },

        submitFailure: function(o) {
            if (o.responseText !== undefined) {
            }
        }
    }
}();
*/

APP.imageviewer = function() {
    return {
        init: function() {
            YAHOO.util.Event.addListener("content", "click", APP.imageviewer.preview);
        },

        preview: function(e) {
            var element = YAHOO.util.Event.getTarget(e);
            if (element.id == "preview_close") {
                YAHOO.util.Event.stopEvent(e);
                YAHOO.util.Dom.setStyle("image_overlay", "visibility", "hidden");
            }
            else if (element.nodeName == "A" && YAHOO.util.Dom.hasClass(element, "canpreview")) {
                YAHOO.util.Event.stopEvent(e);
                var overlay = document.getElementById("image_overlay");
                overlay.innerHTML = "<a href='#' id='preview_close'>close</a><br/><img src='" + element.href + "'/>";
                YAHOO.util.Dom.setXY("image_overlay", YAHOO.util.Event.getXY(e));
                YAHOO.util.Dom.setStyle("image_overlay", "visibility", "visible");
            } else {
            YAHOO.util.Dom.setStyle("image_overlay", "visibility", "hidden");
            }
            
        }


    }
}();

APP.toggles = function() {
    return {
        init: function() {
            
            YAHOO.util.Event.addListener("image_type_sketch", "click", function() {
                    YAHOO.util.Dom.removeClass("thumbnail_row", "hidden");
                    YAHOO.util.Dom.addClass("caption_row", "hidden");
                    document.getElementById("main_dimensions").innerHTML = '630x500';});
            
            YAHOO.util.Event.addListener("image_type_main", "click", function() {
                    YAHOO.util.Dom.addClass("thumbnail_row", "hidden");
                    YAHOO.util.Dom.removeClass("caption_row", "hidden");
                    document.getElementById("main_dimensions").innerHTML = '685x320';});
        }
    }
}();


/**
 * Here is a template for creating new modules. Newly added should be
 * initialized from the onDomRead listener defined above.

APP.modulename = function() {
    return {
        init: function() {
            
        }
    }
}();

*/

