﻿function validate(elem) {
    if (elem.val() == "") {
        $(elem).siblings(".validField").addClass("invalidField").removeClass("validField");
        return false;
    }
    else {
        $(elem).siblings(".invalidField").addClass("validField").removeClass("invalidField");
        $(elem).css("border-color", "")
        return true;

    }
}

function clearForm(elem) {
    $(elem).find("input").andSelf().each(function() {

        var type = this.type, tag = this.tagName.toLowerCase();
        if (type == 'text' || type == 'password' || tag == 'textarea')
            this.value = '';
        else if (type == 'checkbox' || type == 'radio')
            this.checked = false;
        else if (tag == 'select')
            this.selectedIndex = -1;
    });
}


function fixClonedElements(elem, index) {

    $(elem).find('.date-pick').removeDatepicker()


    $(elem).find("[id]").each(function() {
        $(this).attr("id", function(arr) {
            return $(this).attr("id") + "_" + index;
        });
        $(this).attr("name", function(arr) {

            return $(this).attr("name") + "_" + index;
        });

    });
    $(elem).find("[for]").each(function() {
        $(this).attr("for", function(arr) {
            return $(this).attr("for") + "_" + index;
        });

    });
    $(elem).find("legend").each(function() {

        var lastSpace = $(this).text().lastIndexOf(" ");
        var newVal = $(this).text().substring(0, lastSpace) + " " + (index + 1);

        $(this).html(newVal);

    });
    $(elem).find("[targetelement]").each(function() {
        $(this).attr("targetelement", function(arr) {

            return $(this).attr("targetelement").replace(/,/g, "_" + index + ",") + "_" + index;
        });

    });
    $(elem).find("label").filter(".error").each(function() {
        $(this).remove();

    });

    $(elem).find("[targetelement]").each(function() {
        manageEvent($(this))
    });


    $(elem).find('.date-pick').each(function() {
        var d = new Date();
        $(this).filter('.today').val(LZ(d.getDate()) + "/" + LZ(d.getMonth() + 1) + "/" + d.getFullYear());
        $(this).attachDatepicker({ defaultDate: $(this).val() });

    });

    validate($(elem).find('.date-pick'))
}

function scrollToInvalid() {

}

function manageEvent(elem) {
    // var trigger = $(elem).attr("trigger");
    var testoperator = $(elem).attr("testoperator");
    var failureaction = $(elem).attr("failureaction");
    var successaction = $(elem).attr("successaction");
    var elementvalue = $(elem).val()
    var testvalue = $(elem).attr("testvalue");
    var elementname = $(elem).attr("targetelement");

    //test for multiple value options
    var testvalueArray
    if (undefined != testvalue) {
        testvalueArray = testvalue.split(",");
    }
    var targetelementArray = elementname.split(",");
    if (undefined != failureaction) {
        var failureactionArray = failureaction.split(",");
    }
    var successactionArray = successaction.split(",");


    for (var i = 0; i < targetelementArray.length; i++) {
        if (testvalueArray != null) {
            if (testvalueArray.length > i) {
                testvalue = testvalueArray[i]
            }
            else {
                testvalue = testvalueArray[0]
            }
        }
        if (failureactionArray != null) {
            if (failureactionArray.length > i) {
                failureaction = failureactionArray[i]
            }
            else {
                failureaction = failureactionArray[0]
            }
        }
        if (successactionArray != null) {
            if (successactionArray.length > i) {
                successaction = successactionArray[i]
            }
            else {
                successaction = successactionArray[0]
            }
        }
        elementname = targetelementArray[i]

        var success = false;
        switch (testoperator) {
            case "LengthGreaterThan":
                if (elementvalue.length > testvalue) {
                    success = true;
                }
                break;
            case "LengthEquals":
                if (elementvalue.length == testvalue) {
                    success = true;
                }
                break;
            case "Equal":
                if (elementvalue == testvalue) {
                    success = true;
                }
                break;
            case "LessThanOrEqualTo":
                if (elementvalue <= testvalue) {
                    success = true;
                }
                break;
            case "GreaterThanOrEqualTo":
                if (elementvalue >= testvalue) {
                    success = true;
                }
                break;
            case "GreaterThan":
                if (elementvalue > testvalue) {
                    success = true;
                }
                break;
            case "LessThan":
                if (elementvalue < testvalue) {
                    success = true;
                }
                break;
            case "NotEqual":
                if (elementvalue != testvalue) {
                    success = true;
                }
                break;
            default:

                if ($(elem).attr("checked")) {
                    success = true;
                }
                break;
        }

        targetelement = $("#" + elementname)

        var action;
        if (success) {
            action = successaction;
        }
        else if (!success ) {
            action = failureaction;
        }
        switch (action) {
            case "show":
                $(targetelement).show().find(":input").andSelf().removeAttr("disabled")
                break;
            case "hide":
                $(targetelement).hide().find(":input").andSelf().attr('disabled', 'disabled')                
                break;
            case "clear":
                clearForm($(targetelement));
                if (elementname != elem.attr("id")) {
                    $(targetelement).trigger("change");
                }
                $("#form1").validate().element(targetelement);
                break;
            case "disable":
                $(targetelement).removeClass("error").addClass("disabled").attr('disabled', 'disabled');
                if(elementname!=elem.attr("id")){
                     $(targetelement).trigger("change");
                }
                $("#" + elementname + "_error").remove()
                break;
            case "enable":
                $(targetelement).removeClass("disabled").removeAttr("disabled")
                if (elementname != elem.attr("id")) {
                    $(targetelement).trigger("change");
                }
                $("#form1").validate().element(targetelement);
                break;
        }
        if ($(targetelement).find("[trigger]").length > 0) {
            manageEvent($(targetelement).find("[trigger]"))
        }
    }
}

function LZ(n) {
    return (n > 9 ? n : '0' + n);
}

function CreateErrorTooltop(elem) {
    var elem = elem.siblings().andSelf().filter(".error");
    if (elem.length > 0) {
        var errorMsg = elem.attr("title")

        JT_show(errorMsg, elem.id, elem.siblings("label").text())

        $(this).mouseout(function() {
            $('#JT').remove()
        });
    }
}
            
