/*
 * @author stuartb
 * @date 2008.10.08
 * @description Wizard forms made easy.
 */


function dbg(str) {
    if (typeof(console) == "undefined") return;
    else console.log(str);
}

 function isValidEmail(email,required){if(required==undefined){required=true}if(email==null){if(required){return false}return true}if(email.length==0){if(required){return false}return true}if(!allValidChars(email)){return false}if(email.indexOf("@")<1){return false}else if(email.lastIndexOf(".")<=email.indexOf("@")){return false}else if(email.indexOf("@")==email.length){return false}else if(email.indexOf("..")>=0){return false}else if(email.indexOf(".")==email.length){return false}return true}function allValidChars(email){var parsed=true;var validchars="abcdefghijklmnopqrstuvwxyz0123456789@.-_";for(var i=0;i<email.length;i++){var letter=email.charAt(i).toLowerCase();if(validchars.indexOf(letter)!=-1)continue;parsed=false;break}return parsed}


 function validatePage(thispage) {
    thispage.find(".fielderror").removeClass("fielderror")
    var reqinputs = new Array();
    thispage.find("label.required").each(function(){
        reqinputs.push(jQuery(this).next())
    });
    jQuery(reqinputs).each(function() {
        if (jQuery(this).val() == '') {
            jQuery(this).addClass("fielderror");
        }
        if (jQuery(this).attr('name') == 'email') {
            dbg("email");
            if(!isValidEmail(jQuery(this).val()))
                jQuery(this).addClass("fielderror");
        }
    });
 }

jQuery.fn.wizard = function(settings)
{
    settings = jQuery.extend({
         show: function(element) { return true; },
         prevnext: true,
         submitpage: null
      }, settings);

    // Hide all pages save the first.
    jQuery(this).children(".wizardpage").hide();
    jQuery(this).children(".wizardpage:first").show();
    settings.show(jQuery(this).children(".wizardpage:first"));

    // Also highlight the first nav item.
    jQuery(this).children(".wizard-nav").children("a:first").addClass("active");

    // Wire progress thingy
    jQuery(this).children(".wizard-nav").children("a").click(function(){
        /*
        var thispage = jQuery(this).parent().parent().children(".wizardpage:visible");
        validatePage(thispage);
        if (thispage.find(".fielderror").length > 0) {return false;}

        console.log(thispage.next().attr('id'));

        var target = jQuery(this).attr("href");
        jQuery(this).parent().parent().children(".wizardpage").hide();
        jQuery(target).fadeIn('slow');
        settings.show(jQuery(target));
        jQuery(this).parent().children('a').removeClass('active', 'slow');
        jQuery(this).addClass('active', 'slow');
        */
        return false;
    });

    // Prevent form submission on a wizard page...
    jQuery(this).children(".wizardpage").each(function(i){
        // unless there is a submit button on this page
        if((settings.submitpage == null && jQuery(this).find('input[type="submit"]').length < 1) ||
           (settings.submitpage != null && !$(this).is(settings.submitpage)))
        {
            $(this).find('input,select').keypress(function(event){
                return event.keyCode != 13;
            });
        }
    });

    if(settings.prevnext)
    {
        // Add prev/next step buttons
        jQuery(this).children(".wizardpage")
        .prepend('<div class="row wizardcontrols"></div>')
        .children(".wizardcontrols")
            .append('<a href="#" class="wizardprev"><img style="width:35px; height:27px;" src="http://druckbar.beibob.net/text/static/images/buttons/bob_arrow_prev.gif"/></a><label style="float:left; margin-top:5px; margin-left:5px;">Zurück</label>')
            .append('<label style="float:left; margin-top:5px; width:20px;">Vor</label><a href="#" class="wizardnext"><img style="width:35px;height:27px;" src="http://druckbar.beibob.net/text/static/images/buttons/bob_arrow_next.gif"/></a>');
        //jQuery('.wizardpage:first a.wizardprev').hide(); // hide prev button on first page
        //jQuery('.wizardpage:last input[type="button"].wizardnext').hide();  // hide next button on last page

        // Wire prev/next step buttons
        jQuery(this).children(".wizardpage")
        .children(".wizardcontrols")
        .children('a.wizardprev').click(function(){
            var wizardpage = jQuery(this).parent().parent(); // wizardcontrols div, wizardpage div
            var wizardnav  = wizardpage.parent().children(".wizard-nav")
            /*
            validatePage(wizardpage);
            if (wizardpage.find(".fielderror").length > 0) {return false;}
            */
            if (wizardpage.attr('id') == 'Textiles')
                return false;
            wizardpage.hide();
            wizardpage.prev().fadeIn();
            settings.show(wizardpage.prev());

            try{ wizardpage.prev().find("input:first").focus(); } catch(err) {}
            wizardnav.children('a').removeClass('active', 'slow');
            wizardnav.children('a[href="#' + wizardpage.attr('id') + '"]').prev().addClass('active', 'slow');
            return false;
        });
        jQuery(this).children(".wizardpage")
        .children(".wizardcontrols")
        .children('a.wizardnext').click(function(){
            var wizardpage = jQuery(this).parent().parent(); // wizardcontrols div, wizardpage div
            var wizardnav  = wizardpage.parent().children(".wizard-nav")
            validatePage(wizardpage);
            if (wizardpage.find(".fielderror").length > 0) {return false;}
            if (wizardpage.attr('id') == 'Finish')
                return false;

            wizardpage.hide();
            wizardpage.next().fadeIn();
            settings.show(wizardpage.next());

            try{ wizardpage.prev().find("input:first").focus(); } catch(err) {}
            wizardpage.prev().find("input:first").focus();
            wizardnav.children('a').removeClass('active', 'slow');
            wizardnav.children('a[href="#' + wizardpage.attr('id') + '"]').next().addClass('active', 'slow');
            return false;
        });
    }

    return jQuery(this);
};