/**
 * Form Validation
 */

$(document).ready(function() {
    jQuery.validator.setDefaults({
        debug: false
    });
    jQuery.validator.addMethod("alphanumeric", function(value, element) {
        return /^[A-Za-z0-9]+$/i.test(value);
    }, "Please enter only letters or numbers");
    jQuery.validator.addMethod("alphanumericwithspaces", function(value, element) {
        return /^[A-Za-z0-9 ]+$/i.test(value);
    }, "Please enter only letters, numbers or spaces");
    jQuery.validator.addMethod("customurl", function(value, element) {
        return /^http:\/\/.+$/i.test(value);
    }, "Please enter a URL starting with http://");
    jQuery.validator.addMethod("nohtml", function(value, element) {
      return ! /<\/?\w+((\s+(\w|\w[\w-]*\w)(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)\/?>/i.test(value);
    }, "Please do not enter any HTML tags");

    if (document.getElementById("formLogin") != null) {
	$("#formLogin").validate({
          rules: {
            email: {
                required: true,
                email: true
            },
	    password: "required"
          },
          messages: {
            email: "Please enter a valid email address",
	    password: "Please enter your password"
          },
          wrapper: "li",
          errorLabelContainer: $("#messageBox ul")
        });
    }

    if (document.getElementById("formSignup") != null) {
	$("#formSignup").validate({
          rules: {
            email: {
                required: true,
                email: true
            },
            displayname: {
                required: true,
                alphanumeric: true,
                minlength: 3
            },
            country: "required", 
	    password: {
                required: true,
                minlength: 6
            },
	    confirmpassword: {
                required: true,
                equalTo: "#password"
            },
	    terms: "required"
          },
          messages: {
            email: "Please enter a valid email address",
            displayname: "Please enter your display name with at least 3 letters and/or numbers and no spaces",
            country: "Please enter your country", 
	    password: "Please enter your password with length at least 6",
	    confirmpassword: {
                required: "Please confirm your password",
                equalTo: "Please confirm the same password as above"
            },
	    terms: "Please indicate if you have read and understood the terms and conditions"
          },
          errorClass: "errorInLine"
       });
    }

    if (document.getElementById("formAccountEdit") != null) {
	$("#formAccountEdit").validate({
          rules: {
            email: {
                required: true,
                email: true
            },
            displayname: {
                required: true,
                alphanumeric: true,
                minlength: 3
            },
            country: "required", 
	    newpassword: {
                required: false,
                minlength: 6
            },
	    confirmpassword: {
                required: function() { return $("#newpassword").val() != "" },
                equalTo: "#newpassword"
            }
          },
          messages: {
            email: "Please enter a valid email address",
            displayname: "Please enter your display name with at least 3 letters and/or numbers and no spaces",
            country: "Please enter your country", 
	    newpassword: "A new password must have length at least 6",
	    confirmpassword: {
                required: "Please confirm your new password",
                equalTo: "Please confirm the same new password as above"
            }
          },
          errorClass: "errorInLine"
        });
    }

    if (document.getElementById("formArticleSubmit") != null) {
	$("#formArticleSubmit").validate({
          rules: {
            url: {
                required: true,
                customurl: true
            }
          },
          messages: {
            url: "Please enter a valid url starting with http://"
          },
          wrapper: "li",
          errorLabelContainer: $("#messageBox ul")
        });
    }

    if (document.getElementById("formArticleSubmitFull") != null) {
	$("#formArticleSubmitFull").validate({
          rules: {
            url: {
                required: true,
                customurl: true
            },
            title: {
                required: true,
                minlength: 16
            },
            description: {
                required: true,
                minlength: 16,
                maxlength: 255
            },
	    category: {
                required: true,
                number: true,
                minValue: 1
            }
          },
          messages: {
            url: "Please enter a valid url starting with http://",
            title: "Please enter a title with length at least 16",
            description: "Please enter a description with length at least 16 and max of 255",
            category: "Please select a category"
          },
          wrapper: "li",
          errorLabelContainer: $("#messageBox ul")
        });
    }

    if (document.getElementById("formCreateChallenge") != null) {
	$("#formCreateChallenge").validate({
          rules: {
            name: {
                required: true,
                minlength: 6,
                alphanumericwithspaces: true
            },
            shortdesc: {
                required: true,
                minlength: 6
            },
            longdesc: {
                required: true,
                minlength: 6
            },
	    days: {
                required: true,
                minValue: 1
            },
	    co2_savings: {
                required: true,
                minValue: 0
            },
	    cash_savings: {
                required: true,
                minValue: 0
            },
	    "categoryid[]": {
                required: true
            },
	    terms: "required"
          },
          messages: {
            name: "Please enter a name with length at least 6 using letters, numbers and spaces",
            shortdesc: "Please enter a short description with length at least 6",
            longdesc: "Please enter a long description with length at least 6",
            days: "Please enter a number of days for the challenge of at least 1", 
            co2_savings: "Please enter a value for CO2 savings of at least 0", 
            cash_savings: "Please enter a value for cash savings of at least 0", 
	    "categoryid[]": "Please choose at least one category association",
	    terms: "Please indicate if you have read and understood the terms and conditions"
          },
          errorClass: "errorInLine"
        });
    }

    if (document.getElementById("formManageChallenge") != null) {
	$("#formManageChallenge").validate({
          rules: {
            name: {
                required: true,
                minlength: 6,
                alphanumericwithspaces: true
            },
            shortdesc: {
                required: true,
                minlength: 6
            },
            longdesc: {
                required: true,
                minlength: 6
            },
	    days: {
                required: true,
                minValue: 1
            },
	    co2_savings: {
                required: true,
                minValue: 0
            },
	    cash_savings: {
                required: true,
                minValue: 0
            },
	    "categoryid[]": {
                required: true
            }
          },
          messages: {
            name: "Please enter a name with length at least 6 using letters, numbers and spaces",
            shortdesc: "Please enter a short description with length at least 6",
            longdesc: "Please enter a long description with length at least 6",
            days: "Please enter a number of days for the challenge of at least 1", 
            co2_savings: "Please enter a value for CO2 savings of at least 0", 
            cash_savings: "Please enter a value for cash savings of at least 0", 
	    "categoryid[]": "Please choose at least one category association"
          },
          errorClass: "errorInLine"
        });
    }

    if (document.getElementById("formChallengeAddComment") != null) {
	$("#formChallengeAddComment").validate({
          rules: {
            comment: {
                required: true,
                nohtml: true,
                minlength: 4,
                maxlength: 1024
            }
          },
          messages: {
            comment: "Please enter a comment of at least 4 characters with no HTML tags"
          },
          wrapper: "li",
          errorLabelContainer: $("#challengeAddCommentMessageBox ul")
        });
    }

    if (document.getElementById("formDiscussAddComment") != null) {
	$("#formDiscussAddComment").validate({
          rules: {
            comment: {
                required: true,
                nohtml: true,
                minlength: 4,
                maxlength: 1024
            }
          },
          messages: {
            comment: "Please enter a comment of at least 4 characters with no HTML tags"
          },
          wrapper: "li",
          errorLabelContainer: $("#discussAddCommentMessageBox ul")
        });
    }

    if (document.getElementById("formDiscussAddThread") != null) {
	$("#formDiscussAddThread").validate({
          rules: {
            comment: {
                required: true,
                nohtml: true,
                minlength: 4,
                maxlength: 1024
            },
            title: {
                required: true,
                nohtml: true,
                minlength: 8,
                maxlength: 200
            }
          },
          messages: {
            comment: "Please enter a comment of at least 4 characters with no HTML tags",
            title: "Please enter a title of at least 8 characters and at most 200 with no HTML tags"
          },
          wrapper: "li",
          errorLabelContainer: $("#discussAddThreadMessageBox ul")
        });
    }

    if (document.getElementById("formChallengeInvite") != null) {
	$("#formChallengeInvite").validate({
          rules: {
            email: {
                required: true,
                email: true
            }
          },
          messages: {
            email: "Please enter a valid email address"
          },
          wrapper: "li",
          errorLabelContainer: $("#challengeInviteMessageBox ul")
        });
    }

    if (document.getElementById("formBaseFootprintSave") != null) {
	$("#formBaseFootprintSave").validate({
          rules: {
            footprint: {
                required: true,
                minValue: 0,
                maxValue: 1000
            }
          },
          messages: {
            footprint: "Please enter a valid number of tons of CO2"
          },
          wrapper: "li",
          errorLabelContainer: $("#baseFootprintSaveMessageBox ul")
        });
    }

    if (document.getElementById("formTreadSettings") != null) {
	$("#formTreadSettings").validate({
          rules: {
            defaultcommute: {
                required: true,
                minValue: 0,
                maxValue: 1000
            }
          },
          messages: {
            footprint: "Please enter a valid number for default commute"
          },
          wrapper: "li",
          errorLabelContainer: $("#treadSettingsMessageBox ul")
        });
    }
});
