﻿var SubmitNewLine = "\r\n";
var SubmitBrTag = "<br />";

function SubmitValidate(commandControl)
{
    //Pre svega iskljucujemo klient validaciju za iframe parent controls na glavnoj strani,
    //Na serveru se parent controls validaraju naravno, jer je na serveru dostupna samo glavna strana
    if (typeof(window.Page_ClientValidate != "undefined"))
    {
        var iframes = window.document.getElementsByTagName("iframe");
        for (var i = 0; i < iframes.length; i++)
        {
            var iframe = iframes[i];
            var iframeWindow = iframe.contentWindow;
            if (iframeWindow.document.getElementById("IFrameDIV") == null)
            {
                //Ima iframe-ova u skmMenu kontroli, njih preskacemo
                continue;
            }
            var iframeParentControls = ExpansionsIFrameParentGetParentControls(iframeWindow);
            for (var j = 0; j < iframeParentControls.length; j++)
            {
                var iframeParentControl = iframeParentControls[j];
                if (typeof(window.Page_Validators) != "undefined")
                {
                    for (var k = 0; k < window.Page_Validators.length; k++)
                    {
                        var validator = window.Page_Validators[k];
                        var validatorControlToValidateId = validator.controltovalidate;
                        if (validatorControlToValidateId == iframeParentControl.id)
                        {
                            window.ValidatorEnable(validator, false);
                        }
                    }
                }
            }
        }
    }
    
    $(".Error").removeClass("Error");
    $("iframe").each(function() {
        var $iframeBody = $(this.contentWindow.document.body);
        $(".Error", $iframeBody).removeClass("Error");
    });
    
    var validationGroups = commandControl.getAttribute("validationGroups");
    var validationGroupsArray = validationGroups.split(AJAXTextSeparator);
    var panels = new Array();
    var fieldSets = new Array();
    var legends = new Array();
    var vss = new Array();
    for (var i = 0; i <  validationGroupsArray.length; i++)
    {
        for (var j = 0; j <  window.Page_ValidationSummaries.length; j++)
        {
            if (window.Page_ValidationSummaries[j].validationGroup == validationGroupsArray[i])
            {
                var k = vss.length;
                
                vss[k] = window.Page_ValidationSummaries[j];
                legends[k] = ElementGetPreviousElementSibling(vss[k]);
                fieldSets[k] = legends[k].parentNode;
                panels[k] = fieldSets[k].parentNode;
                
                break;
            }
        }
    }
    var errorMessage = SubmitValidatePanels(panels, fieldSets, vss);
    
    if (errorMessage == "")
    {
        //Uspesna validacija, idemo PostBask
        return true;
    }
    else
    {
        var message = "";
        for (var i = 0; i < vss.length; i++)
        {
            var vs = vss[i];
            var legend = legends[i];
            
            if (vs.innerHTML != "")
            {
                message += $.trim(legend.innerHTML).toUpperCase() + SubmitNewLine;
                message += $.trim(vs.innerHTML) + SubmitNewLine;
            }
        }
        message = message.StringReplaceAll("<BR>", SubmitNewLine);
        message = message.StringReplaceAll("<br>", SubmitNewLine);
        message = message.StringReplaceAll("<BR />", SubmitNewLine);
        message = message.StringReplaceAll("<br />", SubmitNewLine);
        message = $.trim(message);
        
        alert(message);
        
        //Za slucaj da je window zapravo iframe
        IFrameFixHeight();
        
        return false;
    }
}

//Ova funkcija vrsi validaciju svakog tab-a cija vs.validationGroup se nalazi u validationGroups,
//gde vs predstavlja ValidationSummary kontrolu za taj tab
//Unutar jednog tab-a se validira:
//1) sve validatore u okviru tog tab-a i
//2) sve iframe-ove u okviru tog tab-a
//Vrednost poruke o gresci svakog validatora i svakog iframe-a se sabiraju i
//zajedno daju poruku o gresci za taj tab koja se zapisuje u vs.innerHTML,
//gde vs predstavlja ValidationSummary kontrolu za taj tab
function SubmitValidatePanels(panels, fieldSets, vss)
{
    var errorMessage = "";
    for (var i = 0; i < panels.length; i++)
    {
        var panel = panels[i];
        var fieldSet = fieldSets[i];
        var vs = vss[i];
        var errorMessageForPanel = SubmitValidatePanel(panel, fieldSet, vs);
        if (errorMessageForPanel == "")
        {
            $(vs).hide();
        }
        else
        {
            $(vs).show();
            errorMessage += errorMessageForPanel;
        }
    }
    return errorMessage;
}
function SubmitValidatePanel(panel, fieldSet, vs)
{
    vs.innerHTML = "";
    vs.style.display = "block";
    
    var fieldSetDescendants =  $("span, iframe", $(fieldSet));
    for (var j = 0; j < fieldSetDescendants.length; j++)
    {
        var c = fieldSetDescendants[j];
        if (c.tagName == "SPAN" && typeof(c.isvalid) != "undefined")
        {
            var validator = c;
            window.ValidatorValidate(validator, validator.validationGroup, null);
            if (!validator.isvalid)
            {
                vs.innerHTML += (validator.errormessage + SubmitBrTag);
                $(document.getElementById(validator.controltovalidate)).addClass("Error");
            }
        }
        else if (c.tagName == "IFRAME")
        {
            var iframe = c;
            var iframeMessages = SubmitValidateIFrame(iframe);
            
            vs.innerHTML += iframeMessages;
        }
    }
    
    return vs.innerHTML;
}

//Ova funkcija vrsi validaciju celog iframe-a
function SubmitValidateIFrame(iframe)
{
    var iframeWindow = iframe.contentWindow;
    
    if (typeof iframeWindow.Page_ClientValidate == "undefined")
    {
        return "";
    }
    
    var errorMessage = "";
    
    if (typeof(iframeWindow.Page_ValidationSummaries) == "undefined")
    {
        for (i = 0; i < iframeWindow.Page_Validators.length; i++)
        {
            var validator = iframeWindow.Page_Validators[i];
            iframeWindow.ValidatorValidate(validator, null, null);
            if (validator.style.display != "none")
            {
                errorMessage += (validator.errormessage + SubmitBrTag);
                $(iframeWindow.document.getElementById(validator.controltovalidate)).addClass("Error");
            }
        }
    }
    else
    {
        for (i = 0; i < iframeWindow.Page_ValidationSummaries.length; i++)
        {
            var vs = iframeWindow.Page_ValidationSummaries[i];
            errorMessage += SubmitValidateIFrameValidationSummary(iframeWindow, vs);
            //Posle validacije svi vs-ovi od iframeWindow se sakrivaju jer ce se
            //poruka o gresci celog iframeWindow prepisati u vs od glavnog prozora
            ElementSetVisible(vs, false);
        }
    }
    
    return errorMessage;
}
function SubmitValidateIFrameValidationSummary(iframeWindow, vs)
{
    vs.innerHTML = "";
    if (typeof(vs.validationGroup) == "undefined")
    {
        for (i = 0; i < iframeWindow.Page_Validators.length; i++)
        {
            var validator = iframeWindow.Page_Validators[i];
            iframeWindow.ValidatorValidate(validator, null, null);
            if (validator.style.display != "none")
            {
                vs.innerHTML += (validator.errormessage + SubmitBrTag);
                $(iframeWindow.document.getElementById(validator.controltovalidate)).addClass("Error");
            }
        }
    }
    else
    {
        for (i = 0; i < iframeWindow.Page_Validators.length; i++)
        {
            var validator = iframeWindow.Page_Validators[i];
            if (validator.validationGroup == vs.validationGroup)
            {
                iframeWindow.ValidatorValidate(validator, validator.validationGroup, null);
                if (validator.style.display != "none")
                {
                    vs.innerHTML += (validator.errormessage + SubmitBrTag);
                    $(iframeWindow.document.getElementById(validator.controltovalidate)).addClass("Error");
                }
            }
        }
    }
    return vs.innerHTML;
}

