$(function(){


    $('.general_form input[type="text"],textarea,select').blur(formValidations.validatePresenceOf);
    $('#course_price_daily, #course_price_weekly, #course_price_monthly').blur(formValidations.onlyNumbers);
    $.validator.addMethod("lettersonly", function(value, element) {
        return this.optional(element) || /^([a-z]\s?)+$/i.test(value);
    }, "<p class='validationmsg'>Letters only please</p>");

    $.validator.addMethod("noSpecialChars", function(value, element) {
        return this.optional(element) || /^[a-z0-9\_]+$/i.test(value);
    }, "<p class='validationmsg'>Field must contain only letters, numbers, or underscore.</p>");
    jQuery.validator.addMethod("greaterThan", function(value, element, params) {
        if (!/Invalid|NaN/.test(new Date(value))) {
            return new Date(value) > new Date($(params).val());
        }
         $(".validate").validate();
        return isNaN(value) && isNaN($(params).val()) || (parseFloat(value) > parseFloat($(params).val()));
    },'Must be greater than {0}.');
    // Date pickers
    $( "#date" ).datepicker({
        changeMonth: true,
        changeYear: true,
        minDate: 0
    });
    /*$( "#birthdate" ).datepicker({
        changeMonth: true,
        changeYear: true,
        dateFormat: 'yy-mm-dd'
    });*/
    $('.timepicker').timepicker({
        hourGrid: 5,
        minuteGrid: 10
    });
    /*
   $('.timepickere').timepicker({
    // Options
    timeSeparator: ':',           // The character to use to separate hours and minutes. (default: ':')
    showLeadingZero: true,        // Define whether or not to show a leading zero for hours < 10. (default: true)
    showMinutesLeadingZero: true, // Define whether or not to show a leading zero for minutes < 10. (default: true)
    showPeriod: false,            // Define whether or not to show AM/PM with selected time. (default: false)
    showPeriodLabels: true,       // Define if the AM/PM labels on the left are displayed. (default: true)
    periodSeparator: ' ',         // The character to use to separate the time from the time period.
    altField: '#alternate_input', // Define an alternate input to parse selected time to
    defaultTime: '12:34',         // Used as default time when input field is empty or for inline timePicker
                                  // (set to 'now' for the current time, '' for no highlighted time, default value: now)

    zIndex: null,                 // Overwrite the default zIndex used by the time picker

    // trigger options
    showOn: 'focus',              // Define when the timepicker is shown.
                                  // 'focus': when the input gets focus, 'button' when the button trigger element is clicked,
                                  // 'both': when the input gets focus and when the button is clicked.
    button: null,                 // jQuery selector that acts as button trigger. ex: '#trigger_button'

    // Localization
    hourText: 'Hour',             // Define the locale text for "Hours"
    minuteText: 'Minute',         // Define the locale text for "Minute"
    amPmText: ['AM', 'PM'],       // Define the locale text for periods

    // Position
    myPosition: 'left top',       // Corner of the dialog to position, used with the jQuery UI Position utility if present.
    atPosition: 'left bottom',    // Corner of the input to position

    // Events
    beforeShow: beforeShowCallback, // Callback function executed before the timepicker is rendered and displayed.
    onSelect: onSelectCallback,   // Define a callback function when an hour / minutes is selected.
    onClose: onCloseCallback,     // Define a callback function when the timepicker is closed.
    onHourShow: onHourShow,       // Define a callback to enable / disable certain hours. ex: function onHourShow(hour)
    onMinuteShow: onMinuteShow,   // Define a callback to enable / disable certain minutes. ex: function onMinuteShow(hour, minute)

    // custom hours and minutes
    hours: {
        starts: 0,                // First displayed hour
        ends: 23                  // Last displayed hour
    },
    minutes: {
        starts: 0,                // First displayed minute
        ends: 55,                 // Last displayed minute
        interval: 5               // Interval of displayed minutes
    },
    rows: 4,                      // Number of rows for the input tables, minimum 2, makes more sense if you use multiple of 2
    showHours: true,              // Define if the hours section is displayed or not. Set to false to get a minute only dialog
    showMinutes: true             // Define if the minutes section is displayed or not. Set to false to get an hour only dialog
});
*/
    $( "#course_available_from" ).datepicker({
        changeMonth: true,
        changeYear: true,
        minDate: 0,
        altField: "#alternate",
        dateFormat: 'yy-mm-dd'
    });
    
   $('#class_day').calendarsPicker({ 
    multiSelect: 999,
    dateFormat:'yyyy-mm-dd',
    monthsToShow: 4});
    
    $( "#course_available_to" ).datepicker({
        changeMonth: true,
        changeYear: true,
        minDate: 0,
        altField: "#alternate2",
        dateFormat: 'yy-mm-dd'
    });
    $(".validate").validate();
    $("#form_compose_message").validate({
        rules: {
            message_to: {
                required:true
            },
            message_title: {
                required:true
            },
            message_desc: {
                required:true
            }
        },
        messages: {
            message_to: {
                required: "Reciver email Required",
                equalTo: "Reciver email Required"
            },
            message_title: {
                required: "Message title Required",
                equalTo: "Message title Required"
            },
            message_desc: {
                required: "Message Description Required",
                equalTo: "Message Description Required"
            }
        }
    });
    $("#form_addcourse,#form_editlist,#formteacher_editcourse").validate({
        rules: {
            course_price_daily: {
                required: true,
                number: true
            },
            course_price_weekly: {
                required: true,
                number: true
            },
            course_price_monthly: {
                required: true,
                number: true
            },
            course_available_to: {
                greaterThan: "#course_available_from"
            },
            topic: {
                required: "#newsletter:checked",
                minlength: 2
            },
            agree: "required"
        },
        messages: {
            agree: "Please accept our policy",
            course_price_daily: {
                required: 'This field is required',
                number: 'Invalid Price '

            },
            course_price_weekly: {
                required: 'This field is required',
                number: 'Invalid Price'

            },
            course_price_monthly: {
                required: 'This field is required',
                number: 'Invalid Price'

            },
            course_available_to: {
                required: 'This field is required',
                greaterThan: 'Invalid end date'

            }
        }
    });
    /*
$.validator.addMethod('phone', function(value) {
return (value.match /^\(?\d{3}\)?[-\.\s]?\d{3}[-\.\s]?\d{4}$/
}, "<p class='validationmsg'>Please enter a valid phone number</p>");
	 */
    $.validator.addMethod('phone', function(value) {
        return (value.match(/^\(?\d{3}\)?[-\.\s]?\d{3}[-\.\s]?\d{4}$/));
    }, "<p class='validationmsg'>Please enter a valid phone number</p>");

    $("#aweberform1").validate();


    $("#formLiveChineseLesson").validate({
        rules: {
            email: {
                email :true,
                required:true
            },
            confirmEmail: {
                email :true,
                equalTo :'#email',
                required:true

            },
            signuppassword: {
                required:true
            },
            signupconfirmpassword: {
                equalTo :'#signuppassword',
                required:true
            }
        },
        messages: {
            email: {
                email: "Required"
            },
            confirmEmail: {
               // equalTo: "Email Mismatch"
            },
            signupconfirmpassword: {
                equalTo: "Password Mismatch"
            }
        }

    });

    function validatePhone(telephone,format) {

        var num = telephone.value.replace(/[^\d]/g,'');

        if(num.length != 10) {

            //Alert the user that the phone number entered was invalid.

            alert("<p class='validationmsg'>Please enter a valid phone number including area code</p>");

        } else {

            //Phone number was valid.  If format type is set, format the Phone to the desired style.

            switch(format) {

                case '0': //Format (xxx)-xxx-xxxx

                    telephone.value = "(" + num.substring(0,3) + ")-" +

                    num.substring(3, 6) + "-" + num.substring(6);

                    break;

                case '1': //Format xxx-xxx-xxxx

                    telephone.value = num.substring(0,3) + "-" +

                    num.substring(3, 6) + "-" + num.substring(6);

                    break;

                default: //Format xxxxxxxxxx

                    telephone.value = num;

                    break;

            }

        }
    }



    // js for form validations of front requestcall.php
    $("#requestcallform1").validate({
        rules:{
            requestname:{
                required : true,
                minlength: 4
            },
            requesttel:{
                required : true,
                minlength: 10
            },
            requestmessage:{
                required : true
            }
        }


    });

    // js for form validations of header requestcall.php
    $("#requestcallform2").validate({
        rules:{
            requestname:{
                required : true,
                minlength: 4
            },
            requesttel:{
                required : true,
                minlength: 10
            }
        }


    });

    // js for form validations of time-zone-convertor.php
    $("#timezoneform").validate({
        rules:{
            timezone1:{
                required : true
            }
        }
    });

    // js for form validations of footer contact-us.php

    $("#footercontactus").validate({
        rules:{
            fldFullname:{
                required : true,
                minlength: 4
            },
            fldSubject:{
                required : true
            },
            fldTelephone:{
                required : true,
                minlength: 10
            },
            fldMessage:{
                required : true
            }
        }


    });


    // js for form validations of front contact-us.php

    $("#frontcontactus").validate({
        rules:{
            fldFullname:{
                required : true,
                minlength: 4
            },
            fldSubject:{
                required : true
            },
            fldTelephone:{
                required : true,
                minlength: 10
            },
            fldMessage:{
                required : true
            }
        }


    });
    // js for form validations of add event form

    $("#add_event").validate({
        rules:{
            name:{
                required : true,
                minlength: 4
            },
            desc:{
                required : true
            },
            location:{
                required : true
            },
            date:{
                required : true
            }
        },
        messages:{
            name:{
                name:"Name Required"
            },
            desc:{
                desc : "Description Required"
            },
            location:{
                location : "Location Required"
            },
            date:{
                date: "Date Required"
            }
        }
    });

    // js for validations of front signup form
    $("#trialdemo").validate({
        rules:{
            signupname:{
                required : true,
                minlength: 4
            },
            signupemail: {
                email :true,
                required:true
            },
            confirmemail:{
                required: true,
                equalTo:'#signupemail'

            }
        },

        messages: {
            signupname:{
                equalTo:'Name Required'
            },
            email: {
                email: "Email Required"
            },
            confirmEmail: {
                //equalTo: "Email Mismatch"
            }
        }

    });

    // js for validations of Free Demo Course registeration form
    $("#creataccountForm").validate({
        rules:{
            firstname:{
                required : true,
                minlength: 1
            },
            lastname:{
                required : true,
                minlength: 1
            },
            email: {
                email :true,
                required:true
            },
            confirmemail: {
                equalTo :'#email'
            },
            password: {
                required:true,
                minlength :4

            },
            confirmpassword: {
                equalTo :'#password'
            }*/,
            agree: {
                required:false,
                minlength :1
            }*/
			
        },

        messages: {
            firstname: {
                required: "First Name Required"
            },
            lastname: {
                required: "Last Name Required"
            },
            email: {
                required: "Valid email please"
            },
            confirmemail: {
                required: "Email Mismatch",
                equalTo:"Email Mismatch"
            },
            password: {
                required: "Valid password please"
            },
            confirmpassword: {
                required: "Password Mismatch",
                equalTo:"Password Mismatch"
            }/*,
            agree: {
                required: "Please check User agreement"
            }*/
        }
    });

    // js for validations of Free Demo Course registeration form
    $("#submitLesson").validate({
        rules:{
            firstName:{
                required : true,
                minlength: 4
            },
            lastname:{
                required : true
            },
            email: {
                email :true,
                required:true
            },
            confirmEmail: {
                confirmEmail :true,
                required:true,
                equalTo :'#confirmEmail'
            },
            phone: {
                required:true
            }
        },

        messages: {
            firstName: {
                firstName: "Required"
            },
            lastname: {
                lastname: "Required"
            },
            email: {
                email: "Required"
            },
            confirmEmail: {
                //equalTo: "Email Mismatch"
            },
            phone: {
                phone: "Required"
            }
        }
    });

    // js for validations for forgot password form
    $("#forgotpass_form").validate({
        rules:{
            usr_email: {
                email :true,
                required:true
            }
        },

        messages: {
            usr_email: {
                equalTo: "Required"
            }
        }
    });
    // js for validations of Profile form
    $("#profileform").validate({
        rules:{
            profilename:{
                required : true,
                minlength: 4
            },
            profileemail: {
                email :true,
                required:true
            },
            profiletel: {
                required:true
            }

        },


        messages: {
            profilename: {
                equalTo: "Profile Name Required"
            },
            profileemail: {
                equalTo: "Email Required"
            },
            profiletel: {
                equalTo: "Telephone Number Required"
            }
        }


    });

    // js for form validations of Course Update form
    $("#form_editlist").validate({
        rules:{
            course_title:{
                required : true,
                minlength: 4
            },
            total_hours:{
                required : true
            },
            course_cat: {
                required:true
            },
            course_price_daily: {
                required:true
            }
        },
        messages: {
            course_title: {
                equalTo: "Course Name Required"
            },
            total_hours:{
                equalTo : "Course Hours Required"
            },
            course_cat: {
                equalTo: "Category Required"
            },
            course_price_daily: {
                equalTo: "Course Price Required"
            }
        }
    });


    // js for form validations change password
    $("#change_pass_form").validate({
        rules:{
            user_pass: {
                required:true,
                minlength: 5
            },
            confirm_password: {
                equalTo :'#user_pass',
                required:true
            }
        },

        messages: {

            confirm_password: {
                equalTo: "Password Mismatch"
            }
        }


    });


});
var formValidations = {
    validatePresenceOf: function () {
        var currentInput = $(this);
        var val = $(this).val();
        if (val == "") {
            currentInput.parent().parent().addClass("error-field").removeClass("valid-field");
        }
        else {
            currentInput.parent().parent().removeClass("error-field").addClass("valid-field");
        }
    },
    validateEmail: function () {
        var currentInput = $(this);
        var val = $(this).val();
        if (val.match(/^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i)) {
            currentInput.parent().parent().removeClass("error-field").addClass("valid-field");
        } else {
            currentInput.parent().parent().addClass("error-field").removeClass("valid-field");
        }
    },
    onlyNumbers: function () {
        var currentInput = $(this);
        var val = $(this).val();
        if (val.match(/^\d+(?:\.\d+)?$/)) {
            currentInput.parent().parent().removeClass("error-field").addClass("valid-field");
        } else {
            currentInput.parent().parent().addClass("error-field").removeClass("valid-field");
        }
    }
};



