﻿/* Customer validator 1.0 
Developer:  Sarmad
Date:       2009-06-24
Version:    1.0
Iteration:  0
Depends:    jquery-1.3.2.min.js
jquery-ui-1.7.2.custom.min.js   
*/
/* 
Function:   validatorShow(ValidationSummaryControlID) 
Usage:      Gets to validation summary control Id and position it with respect to 
input field
Calls:      This function is only get called from ValidationSummaryOnSubmit(validationGroup)
*/
function validatorShow(summaryId, ValidatorID) {

    var els = $("#" + ValidatorID); //var els = $("span[class=validatorMsg]");
    var i;
    for (i = 0; i < els.length; i++) {
        if (els[i].isvalid == false) {
            if (els[i].controltovalidate) {
                var ctrl = $("#" + els[i].controltovalidate);
                ctrl = $("#" + els[i].controltovalidate);
                ctrl.addClass("validatorTxt");

                var pos = ctrl.position()
                var width = ctrl.outerWidth();
                if (ctrl.css('display') == 'none') {
                    ctrl.css('display', '');
                    var pos = ctrl.position()
                    var width = ctrl.outerWidth();
                    ctrl.css('display', 'none');
                }                


                var PositionFloat = $("#" + summaryId).attr('PositionFloat');
                if (PositionFloat == 'Right') {
                    $("#" + summaryId).css("right", pos.left - ctrl.innerWidth() + 4);
                    $("#" + summaryId).css("top", pos.top + ctrl.outerHeight() + 4);
                }
                else {
                    $("#" + summaryId).css("left", pos.left);
                    $("#" + summaryId).css("top", pos.top + ctrl.outerHeight() + 4);
                }

                $('html, body').animate({ scrollTop: pos.top - 150 }, 'fast');
                
                $("#" + summaryId).bgIframe();
                $("#" + summaryId).show();


                if ($("#" + els[i].controltovalidate).hasClass('hasDatepicker') == false) {
                    $("#" + els[i].controltovalidate).focus();
                    $("#" + els[i].controltovalidate).select();
              }
                else {

                $('html, body').animate({ scrollTop: pos.top - 200 }, 'slow');
                $("#" + summaryId + ">a").focus();
                    $("#" + summaryId).select();
               }
                
                $("#" + els[i].controltovalidate).bind("blur", function() {
                    $("#" + summaryId).fadeOut("fast");
                    $("#" + this.id).removeClass("validatorTxt");
                });
//                $("#" + summaryId + ">a").bind("blur", function() {
//                    $("#" + summaryId).fadeOut("fast");
//                    $("#" + els[i].controltovalidate).removeClass("validatorTxt");
//                });
                return;
            } else {
                $("#" + summaryId).bgIframe();
                $("#" + summaryId).show();
                return;
            }
        }
        else {
            var ctrl = $("#" + els[i].controltovalidate);
            ctrl.removeClass("validatorTxt");
        }
    }
}

/* 
Function:   validatorHide(ValidationSummaryControlID, InputControlID) 
Usage:      Gets to validation summary control Id and InputControlID on which error has occured
and hides out the validation summary and removes the red border/background from the textbox
Calls:      This function is called from ValidationSummaryOnSubmit(validationGroup).
This function is called from the onblur event of input fields
*/
function validatorHide(summaryId, ctrlId) {
    $("#" + summaryId).fadeOut("fast");
    $("#" + ctrlId).removeClass("validatorTxt");
}
/* 
Function:   ValidationSummaryOnSubmit(validationGroup)
Usage:      An overriden method form Asp.net validation JS i.e. webresourse.axd?$#%@$#%
Some added functionality for showing a single error at a time in a popup
Calls:      This function is called by Asp.net validation automaticaly
Limitation: This function should be placed at the bottom of every html file that requires 
such type of validation. (THIS BEHAVIOR IS BY DEFAULT)
                                       
*/


function ValidationSummaryOnPostBack(validationSummaryControlID, validationGroup, customValidatorControlID) {

    if (typeof (Page_ValidationSummaries) == "undefined")
        return;
    var summary, sums, s;
    summary = document.getElementById(validationSummaryControlID);
    summary.style.display = "none";
    Page_IsValid = false;
    if (!Page_IsValid && IsValidationGroupMatch(summary, validationGroup)) {
        var i;
        var customValidatorControlID;
        var ShowFirstMessage = $('#' + summary.id).attr("ShowFirstMessage");
        if (summary.showsummary != "False") {
            summary.style.display = "";
            if (typeof (summary.displaymode) != "string") {
                summary.displaymode = "BulletList";
            }
            switch (summary.displaymode) {
                case "List":
                    headerSep = "<br>";
                    first = "";
                    pre = "";
                    post = "<br>";
                    end = "";
                    break;
                case "BulletList":
                default:
                    headerSep = "";
                    first = "<ul>";
                    pre = "<li>";
                    post = "</li>";
                    end = "</ul>";
                    break;
                case "SingleParagraph":
                    headerSep = " ";
                    first = "";
                    pre = "";
                    post = " ";
                    end = "<br>";
                    break;
            }
            s = "";
            if (typeof (summary.headertext) == "string") {
                s += summary.headertext + headerSep;
            }
            s += first;
            for (i = 0; i < Page_Validators.length; i++) {
                if (Page_Validators[i].id == customValidatorControlID && typeof (Page_Validators[i].errormessage) == "string") {
                    Page_Validators[i].isvalid = false;

                    s += pre + Page_Validators[i].errormessage + post;
                    if (ShowFirstMessage == "true") {
                        break; //chepee by sarmad ... to show only the first message in summary box
                    }
                }
            }
            s += end;
            if (ShowFirstMessage == "true") {
                s += "<a href='javascript:void(0);' onclick='validatorHide(\"" + summary.id + "\");' style='position:absolute;top:5px;right:5px;text-decoration:none;' class='crossmid'></a>"; //chepee by sarmad.... close the summary box;
            }
            summary.innerHTML = s;
            //window.scrollTo(0, 0);
            if (ShowFirstMessage == "true") {
                validatorShow(summary.id, customValidatorControlID);
            }
        }
        if (summary.showmessagebox == "True") {
            s = "";
            if (typeof (summary.headertext) == "string") {
                s += summary.headertext + "\r\n";
            }
            var lastValIndex = Page_Validators.length - 1;
            for (i = 0; i <= lastValIndex; i++) {
                if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string") {
                    switch (summary.displaymode) {
                        case "List":
                            s += Page_Validators[i].errormessage;
                            if (i < lastValIndex) {
                                s += "\r\n";
                            }
                            break;
                        case "BulletList":
                        default:
                            s += "- " + Page_Validators[i].errormessage;
                            if (i < lastValIndex) {
                                s += "\r\n";
                            }
                            break;
                        case "SingleParagraph":
                            s += Page_Validators[i].errormessage + " ";
                            break;
                    }
                }
            }
            alert(s);
        }
    }
}

function ValidationSummaryOnPostBackWithMessage(validationSummaryControlID, validationGroup, customValidatorControlID, validationMessage) {
   
    if (typeof (Page_ValidationSummaries) == "undefined")
        return;
    
    var summary, sums, s;
    summary = document.getElementById(validationSummaryControlID);
    summary.style.display = "none";
    Page_IsValid = false;
    if (!Page_IsValid && IsValidationGroupMatch(summary, validationGroup)) {
        var i;
        var customValidatorControlID;
        var ShowFirstMessage = $('#' + summary.id).attr("ShowFirstMessage");
        if (summary.showsummary != "False") {
            summary.style.display = "";
            if (typeof (summary.displaymode) != "string") {
                summary.displaymode = "BulletList";
            }
            switch (summary.displaymode) {
                case "List":
                    headerSep = "<br>";
                    first = "";
                    pre = "";
                    post = "<br>";
                    end = "";
                    break;
                case "BulletList":
                default:
                    headerSep = "";
                    first = "<ul>";
                    pre = "<li>";
                    post = "</li>";
                    end = "</ul>";
                    break;
                case "SingleParagraph":
                    headerSep = " ";
                    first = "";
                    pre = "";
                    post = " ";
                    end = "<br>";
                    break;
            }            
            s = "";
            if (typeof (summary.headertext) == "string") {
                s += summary.headertext + headerSep;
            }
            s += first;
            for (i = 0; i < Page_Validators.length; i++) {
                if (Page_Validators[i].id == customValidatorControlID && typeof (Page_Validators[i].errormessage) == "string") {
                    Page_Validators[i].isvalid = false;
                    
                    s += pre + Page_Validators[i].errormessage + post;
                    if (ShowFirstMessage == "true") {
                        break; //chepee by sarmad ... to show only the first message in summary box
                    }
                }
                 else if(Page_Validators[i].id == customValidatorControlID)
                    {
                        Page_Validators[i].errormessage = validationMessage;
                        Page_Validators[i].isvalid = false;

                        s += pre + Page_Validators[i].errormessage + post;
                        if (ShowFirstMessage == "true") {
                            break; //chepee by sarmad ... to show only the first message in summary box
                        }
                    }
            }
            s += end;
            if (ShowFirstMessage == "true") {
                s += "<a href='javascript:void(0);' onclick='validatorHide(\"" + summary.id + "\");' style='position:absolute;top:5px;right:5px;text-decoration:none;' class='crossmid'></a>"; //chepee by sarmad.... close the summary box;
            }
            summary.innerHTML = s;
            //window.scrollTo(0, 0);
            if (ShowFirstMessage == "true") {
                validatorShow(summary.id, customValidatorControlID);
            }
        }
        if (summary.showmessagebox == "True") {
            s = "";
            if (typeof (summary.headertext) == "string") {
                s += summary.headertext + "\r\n";
            }
            var lastValIndex = Page_Validators.length - 1;
            for (i = 0; i <= lastValIndex; i++) {
                if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string") {
                    switch (summary.displaymode) {
                        case "List":
                            s += Page_Validators[i].errormessage;
                            if (i < lastValIndex) {
                                s += "\r\n";
                            }
                            break;
                        case "BulletList":
                        default:
                            s += "- " + Page_Validators[i].errormessage;
                            if (i < lastValIndex) {
                                s += "\r\n";
                            }
                            break;
                        case "SingleParagraph":
                            s += Page_Validators[i].errormessage + " ";
                            break;
                    }
                }
            }
            alert(s);
        }
    }
}

function ValidationSummaryOnSubmit(validationGroup) {
    if (typeof (Page_ValidationSummaries) == "undefined")
        return;
    var summary, sums, s;
    for (sums = 0; sums < Page_ValidationSummaries.length; sums++) {
        summary = Page_ValidationSummaries[sums];
        summary.style.display = "none";
        if (!Page_IsValid && IsValidationGroupMatch(summary, validationGroup)) {
            var i;
            var ShowFirstMessage = $('#' + summary.id).attr("ShowFirstMessage");
            if (summary.showsummary != "False") {
                summary.style.display = "";
                if (typeof (summary.displaymode) != "string") {
                    summary.displaymode = "BulletList";
                }
                switch (summary.displaymode) {
                    case "List":
                        headerSep = "<br>";
                        first = "";
                        pre = "";
                        post = "<br>";
                        end = "";
                        break;
                    case "BulletList":
                    default:
                        headerSep = "";
                        first = "<ul>";
                        pre = "<li>";
                        post = "</li>";
                        end = "</ul>";
                        break;
                    case "SingleParagraph":
                        headerSep = " ";
                        first = "";
                        pre = "";
                        post = " ";
                        end = "<br>";
                        break;
                }
                s = "";
                if (typeof (summary.headertext) == "string") {
                    s += summary.headertext + headerSep;
                }
                s += first;
                var customValidatorControlID = null;
                for (i = 0; i < Page_Validators.length; i++) {
                    if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string" && Page_Validators[i].validationGroup == validationGroup) {
                        s += pre + Page_Validators[i].errormessage + post;
                        customValidatorControlID = Page_Validators[i].id
                        if (ShowFirstMessage == "true") {
                            break; //chepee by sarmad ... to show only the first message in summary box
                        }
                    }
                }
                s += end;
                if (ShowFirstMessage == "true") {
                    s += "<a href='javascript:void(0);' onclick='validatorHide(\"" + summary.id + "\");' style='position:absolute;top:5px;right:5px;text-decoration:none;' class='crossmid'></a>"; //chepee by sarmad.... close the summary box;
                }
                summary.innerHTML = s;
                //window.scrollTo(0, 0);

                if (ShowFirstMessage == "true") {
                    if (customValidatorControlID != null)
                        validatorShow(summary.id, customValidatorControlID);

                }
                
            }
            if (summary.showmessagebox == "True") {
                s = "";
                if (typeof (summary.headertext) == "string") {
                    s += summary.headertext + "\r\n";
                }
                var lastValIndex = Page_Validators.length - 1;
                for (i = 0; i <= lastValIndex; i++) {
                    if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string") {
                        switch (summary.displaymode) {
                            case "List":
                                s += Page_Validators[i].errormessage;
                                if (i < lastValIndex) {
                                    s += "\r\n";
                                }
                                break;
                            case "BulletList":
                            default:
                                s += "- " + Page_Validators[i].errormessage;
                                if (i < lastValIndex) {
                                    s += "\r\n";
                                }
                                break;
                            case "SingleParagraph":
                                s += Page_Validators[i].errormessage + " ";
                                break;
                        }
                    }
                }
                alert(s);
            }
        }
    }
}
function SyncWaterMarkTextBoxes() {
    var els = $("input[WaterMarkText],textarea[WaterMarkText]");
    var i;
    for (i = 0; i < els.length; i++) {
        SyncWaterMarkTextBox(els[i].id);
    }
}

function SyncWaterMarkTextBoxesWithSelect() {
    var els = $("input[WaterMarkTextWithSelect],textarea[WaterMarkTextWithSelect]");
    var i;
    for (i = 0; i < els.length; i++) {
        SyncWaterMarkTextBoxWithSelect(els[i].id);
    }
}

function ClearWaterMarkTextBoxes() {
    var els = $("input[WaterMarkText],textarea[WaterMarkText]");
    var i;
    for (i = 0; i < els.length; i++) {
        ClearWaterMarkTextBox(els[i].id);
    }
}

function ClearWaterMarkTextBox(textBoxID) {
    var els = $("#" + textBoxID);
    var i;
    if (els.val() == els.attr("WaterMarkText")) {
        els.val('');
    }
    
    
}

function SyncWaterMarkTextBox(textBoxID) {
    var els = $("#" + textBoxID);
    var i;
    var maxLen = els.attr("MaxLength");

    if (maxLen) {
        els.attr("tempMaxLength", maxLen);
        els.removeAttr("MaxLength");
    }


    if (els.val() == els.attr("WaterMarkText") || els.val() == '') {
        els.val(els.attr("WaterMarkText"));
        els.css('color', '#999999');
    }
    els.bind('focus', function() {
        var ctrl1 = $("#" + this.id);
        if (this.value == ctrl1.attr("WaterMarkText")) {
            if (ctrl1.attr("tempMaxLength")) {
                els.attr("MaxLength", ctrl1.attr("tempMaxLength"));
            }
            this.value = '';            
            this.style.color = '#333333';
        }
    });
    els.bind('blur', function() {
        var ctrl1 = $("#" + this.id);
        if (this.value == '') {
            var maxLen = els.attr("MaxLength");
            if (maxLen) {
                els.attr("tempMaxLength", maxLen);
                els.removeAttr("MaxLength");
            }
            this.value = ctrl1.attr("WaterMarkText");
            this.style.color = '#999999';
        }
        else {
            this.style.color = '#333333';
        }

    });
}

function SyncWaterMarkTextBoxWithSelect(textBoxID) {
    var els = $("#" + textBoxID);
    var i;
    var maxLen = els.attr("MaxLength");

    if (maxLen) {
        els.attr("tempMaxLength", maxLen);
        els.removeAttr("MaxLength");
    }


    if (els.val() == els.attr("WaterMarkTextWithSelect") || els.val() == '') {
        els.val(els.attr("WaterMarkTextWithSelect"));
        els.css('color', '#999999');
    }
    els.bind('focus', function() {
        var ctrl1 = $("#" + this.id);
        if (this.value == ctrl1.attr("WaterMarkTextWithSelect")) {
            if (ctrl1.attr("tempMaxLength")) {
                els.attr("MaxLength", ctrl1.attr("tempMaxLength"));
            }
            this.select();
            this.style.color = '#333333';
        }
    });
    els.bind('keydown', function() {
        var ctrl1 = $("#" + this.id);
        if (this.value == ctrl1.attr("WaterMarkTextWithSelect")) {
            if (ctrl1.attr("tempMaxLength")) {
                els.attr("MaxLength", ctrl1.attr("tempMaxLength"));
            }
            this.value = ''
            this.style.color = '#333333';
        }
    });
    els.bind('blur', function() {
        var ctrl1 = $("#" + this.id);
        if (this.value == '') {
            var maxLen = els.attr("MaxLength");
            if (maxLen) {
                els.attr("tempMaxLength", maxLen);
                els.removeAttr("MaxLength");
            }
            this.value = ctrl1.attr("WaterMarkTextWithSelect");
            this.style.color = '#999999';
            this.select();
        }
        else {
            this.style.color = '#333333';
        }

    });
}

$(function() {
    SyncWaterMarkTextBoxesWithSelect();
    SyncWaterMarkTextBoxes();    
});

function ValidatedTextBoxOnKeyPress(event) {

    if (event.keyCode == 13) { 
    
        ValidatorOnChange(event);
        if ((typeof (event.srcElement) != "undefined") && (event.srcElement != null)) {
            vals = event.srcElement.Validators;
        }
        else {
            vals = event.target.Validators;
        }

        var fbool = AllValidatorsValid(vals);
        var srcElsID = (window.event) ? event.srcElement.id : event.target.id;
        var srcEls = $("#" + srcElsID);
        ValidationSummaryOnSubmit($("#" + srcElsID)[0].Validators[0].validationGroup);
        
        return fbool;
    }
    return true;
}

function WebForm_DoPostBackWithOptions(options) {

   
    var validationResult = true;
    if (options.validation) {
        if (typeof (Page_ClientValidate) == 'function') {
            validationResult = Page_ClientValidate(options.validationGroup);
        }
    }
    if (validationResult) {
        if ((typeof (options.actionUrl) != "undefined") && (options.actionUrl != null) && (options.actionUrl.length > 0)) {
            theForm.action = options.actionUrl;
        }
        if (options.trackFocus) {
            var lastFocus = theForm.elements["__LASTFOCUS"];
            if ((typeof (lastFocus) != "undefined") && (lastFocus != null)) {
                if (typeof (document.activeElement) == "undefined") {
                    lastFocus.value = options.eventTarget;
                }
                else {
                    var active = document.activeElement;
                    if ((typeof (active) != "undefined") && (active != null)) {
                        if ((typeof (active.id) != "undefined") && (active.id != null) && (active.id.length > 0)) {
                            lastFocus.value = active.id;
                        }
                        else if (typeof (active.name) != "undefined") {
                            lastFocus.value = active.name;
                        }
                    }
                }
            }
        }
    }
    if (options.clientSubmit) {
        ClearWaterMarkTextBoxes();
        __doPostBack(options.eventTarget, options.eventArgument);
    }
}


var j = '';
j += 'function ValidationSummaryOnSubmit(validationGroup) {';
j += '    if (typeof (Page_ValidationSummaries) == "undefined")';
j += '        return;';

j += '    var summary, sums, s;';
j += '    for (sums = 0; sums < Page_ValidationSummaries.length; sums++) {';

j += '        summary = Page_ValidationSummaries[sums];';
j += '        summary.style.display = "none";';
j += '        if (!Page_IsValid && IsValidationGroupMatch(summary, validationGroup)) {';
j += '            var i;';
j += '            var ShowFirstMessage = $("#" + summary.id).attr("ShowFirstMessage");';
j += '            if (summary.showsummary != "False") {';
j += '                summary.style.display = "";';
j += '                if (typeof (summary.displaymode) != "string") {';
j += '                    summary.displaymode = "BulletList";';
j += '                }';
j += '                switch (summary.displaymode) {';
j += '                    case "List":';
j += '                        headerSep = "<br>";';
j += '                        first = "";';
j += '                        pre = "";';
j += '                        post = "<br>";';
j += '                        end = "";';
j += '                        break;';
j += '                    case "BulletList":';
j += '                    default:';
j += '                        headerSep = "";';
j += '                        first = "<ul>";';
j += '                        pre = "<li>";';
j += '                        post = "</li>";';
j += '                        end = "</ul>";';
j += '                        break;';
j += '                    case "SingleParagraph":';
j += '                        headerSep = " ";';
j += '                        first = "";';
j += '                        pre = "";';
j += '                        post = " ";';
j += '                        end = "<br>";';
j += '                        break;';
j += '                }';
j += '                s = "";';
j += '                if (typeof (summary.headertext) == "string") {';
j += '                    s += summary.headertext + headerSep;';
j += '                }';
j += '                s += first;';
j += '                var customValidatorControlID = null;';
j += '                for (i = 0; i < Page_Validators.length; i++) {';
j += '                    if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string" && Page_Validators[i].validationGroup == validationGroup) {';
j += '                        s += pre + Page_Validators[i].errormessage + post;';
j += '                        customValidatorControlID = Page_Validators[i].id;';
j += '                        if (ShowFirstMessage == "true") {';
j += '                            break;';
j += '                        }';
j += '                    }';
j += '                }';
j += '                s += end;';
j += '                if (ShowFirstMessage == "true") {';
j += '                  s += "<a href=\'javascript:void(0);\' onclick=validatorHide(\'" + summary.id + "\'); style=\'position:absolute;top:5px;right:5px;text-decoration:none;\' class=\'crossmid\'></a>";';
j += '                }';
j += '                summary.innerHTML = s;';
j += '                if (ShowFirstMessage == "true") {';
j += '                    if (customValidatorControlID != null)';
j += '                        validatorShow(summary.id, customValidatorControlID);';
j += '                }';
j += '            }';
j += '        }';
j += '    }';
j += '}';

