// This gets loaded on every page, so keep it relatively fast.
$(document).ready(function() { 
    $('input[title*=""].text, textarea[title*=""]').labelify();
          
    // All action-boxes should use indicator/disabler convention.
    $("div.action-box span.mb-button").addClass("with-disabler mb-button-with-indicator");
   
    // Apply disabling effect where specified.
    buttonDisabler(".with-disabler");
    
    if ($.browser.mozilla && $.browser.version < '1.9') {  
        $("span.mb-button input").click(function() {$(this).closest("form").submit()})
    }
    
    // Apply indicator where specified.
    var buttonWithIndicator = $("span.mb-button-with-indicator");  
    if (buttonWithIndicator.length > 0) $.preloadImages("/images/indicator.gif");
    buttonWithIndicator.each(function() { 
        var $button = $(this); 
       
        // Must use mousedown instead of click, effect works with hyperlinks.
        $($button.find("input")[0] || $button.find("a")).mousedown(function() {
            $button.addClass("mb-button-with-indicator-on").next("a").addClass("disapear");
        });  
    });
});
function buttonDisabler(expression) {
    $(expression).each(function() {
        var $this = $(this); 
        var $form = $this.closest("form");
        var $clickable = $this;
        var disableFn;
        
        if ($this.is(".mb-button")) { 
            var $input = $this.find("input");
            var $a = $this.find("a");
            $clickable = $input[0] ? $input : $a;
            disableFn = function() { 
                var was_clicked = $a.data("clicked");
                $this.addClass("mb-button-" + $this.attr("size") + "-disable");
                $input.attr("disabled", "true"); 
                $a.data("clicked", true);
                if (was_clicked)  return false; // prevent hyperlink from directing request if it was clicked.
            };
        } else if ($this.is("input")) { 
            disableFn = function() { 
                $this.attr("disabled", "true");
                if ($this.is(":image")) $this.addClass("faded");
            }
        } 
        
        $form[0] ? 
            $form.unbind("submit.buttonDisabler").bind("submit.buttonDisabler", disableFn) : 
            $clickable.unbind("click.buttonDisabler").bind("click.buttonDisabler", disableFn);
    }); 
}
function submitWithEmailValidation() {
    return
    var args = submitWithEmailValidation.arguments; 
    var elemId = "#" + args[0].toString();
    var emailsId = args[1];
    var bookTitle = args[2];
    var formId = args[3];
    var ajax = args[4]||false;
    //preload("/images/spacer.gif");
    $(elemId).click(function() {
        var ErrorOccurred = false
        if (!validateEmails($(emailsId).value)){
            if ($('emails_error')) {Element.show('emails_error') }
            ErrorOccurred = true;
        }
        if ($(bookTitle)&&$F(bookTitle)=='') {
            Element.show('title_error');
            ErrorOccurred = true;
        }
        if (!ErrorOccurred) {
            disableSubmitButton(Event.element(event));
            //ajax ? $(formId).click() : $(formId).submit() ;
        }
        
    });
}
function validateEmails(emails) {
    //if (emails=="") {return true}
    var emails = emails.split(/\s*[,\n]\s*/)
    for (var i=0; i<emails.length; i++) {
        if (emails[i]=="") {return true;}
        if (!checkEmail(emails[i])) {return false;}
    }
    return true;
}
function checkEmail(emailAddr) {
    emailAddr =    Try.these(
    function() {return emailAddr.match(/".+"\s+<.*>/)[0].split(/[<,>]/)[1];},
    function() {return emailAddr;}
);
    if (emailAddr.match(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/)){
        return (true)
    }
    //alert("Invalid E-mail Address! Please re-enter.")
    return (false)
}
// Used for project listing.
function changeIntendedProduct(listing) {
    var selectedOption = $(".intended-product select :selected", listing);
    
    $.get('projects/ajax_change_product', { pid: listing.attr("project-id"), ipid: selectedOption.val() },
    function(data, textStatus) { 
        $('.intended-product .change, .intended-product .display', listing).toggle();
        $('.intended-product .display span', listing).html(selectedOption.text());
    });
}

// Add Short, but helpful extensions to jquery.

// Adds hoverClass function to toggle between classes on hover.
$.fn.hoverClass = function(c) {
    return this.each(function() {
        $(this).hover(function() { $(this).addClass(c); }, function() { $(this).removeClass(c); });
    });
};
// Usage: $.preloadImages("image1.gif", "/path/to/image2.png", "some/image3.jpg");
jQuery.preloadImages = function() {
    for(var i = 0; i<arguments.length; i++)  {
        jQuery("<img>").attr("src", arguments[i]);
    }
}

// Aryk  
// Add the labelify.min code here so we don't have to load labelify.min.js as a separate file on each page load.
jQuery.fn.labelify=function(c){c=jQuery.extend({text:"title",labelledClass:"label-inside"},c);var d={title:function(a){return $(a).attr("title")},label:function(a){return $("label[for="+a.id+"]").text()}};var e;var f=$(this);return $(this).each(function(){if (jQuery.trim($(this).val())!='') { return; } if(typeof c.text==="string"){e=d[c.text]}else{e=c.text};if(typeof e!=="function"){return}var a=e(this);if(!a){return}$(this).data("label",e(this).replace(/\n/g,''));$(this).focus(function(){if(this.value===$(this).data("label")){this.value=this.defaultValue;$(this).removeClass(c.labelledClass)}}).blur(function(){if(this.value===this.defaultValue){this.value=$(this).data("label");$(this).addClass(c.labelledClass)}});var b=function(){f.each(function(){if(this.value===$(this).data("label")){this.value=this.defaultValue;$(this).removeClass(c.labelledClass)}})};$(this).parents("form").submit(b);$(window).unload(b);if(this.value!==this.defaultValue){return}this.value=$(this).data("label");$(this).addClass(c.labelledClass)})};