﻿/// <reference name="MicrosoftAjax.js" />

Type.registerNamespace("Imis.Lib");

Imis.Lib.WindowOpen = function(url, features) {
    if (!features) features = {};
    if (!features.width) features.width = 500;
    if (!features.height) features.height = 500;
    if (!features.name) features.name = 'ImisLibPopup';
    if (!features.openInParent) features.openInParent = false;
    if (features.openInParent) {
        if (opener != null) {
            opener.location = url;
            opener.location.reload();
        }
        else {
            window.location = url;
        }
    }
    else {
        var w = window.open(url, features.name, "height=" + features.height + ",width=" + features.width + ",status=yes,resizable=yes,toolbars=no,location=no,scrollbars=yes");
        w.focus();
    } 
}

Imis.Lib.ToEn = function(s, e) {
    var change = 0;
    var Str;

    if (s.isASPxClientControl)
        Str = s.GetText();
    else
        Str = s.value;

    var StrL = Str.length;
    var StrOut = "";

    var c = ' ';
    var cOut = ' ';

    for (var i = 0; i < StrL; i++) {
        c = Str.substring(i, i + 1);
        cOut = '';
        if (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || c == '5' || c == '6' || c == '7' || c == '8' || c == '9') { change = 1; cOut = c; }
        if (c >= 'A' && c <= 'Z') { cOut = c; }
        if (c == ' ' || c == '-' || c == '_' || c == ',' || c == '.' || c == '(' || c == ')' || c == '/' || c == '!' || c == '@' || c == '#' ||
            c == '$' || c == '%' || c == '^' || c == '&' || c == '*' || c == '+' || c == '=' || c == '\'' || c == '\"') { cOut = c; }

        //Lowercase letters
        if (c == 'α' || c == 'ά' || c == 'a') { change = 1; cOut = 'a'; }
        if (c == 'β' || c == 'b') { change = 1; cOut = 'b'; }
        if (c == 'ψ' || c == 'c') { change = 1; cOut = 'c'; }
        if (c == 'δ' || c == 'd') { change = 1; cOut = 'd'; }
        if (c == 'ε' || c == 'έ' || c == 'e') { change = 1; cOut = 'e'; }
        if (c == 'φ' || c == 'f') { change = 1; cOut = 'f'; }
        if (c == 'γ' || c == 'g') { change = 1; cOut = 'g'; }
        if (c == 'η' || c == 'ή' || c == 'h') { change = 1; cOut = 'h'; }
        if (c == 'ι' || c == 'ί' || c == 'ϊ' || c == 'ΐ' || c == 'i') { change = 1; cOut = 'i'; }
        if (c == 'ξ' || c == 'j') { change = 1; cOut = 'j'; }
        if (c == 'κ' || c == 'k') { change = 1; cOut = 'k'; }
        if (c == 'λ' || c == 'l') { change = 1; cOut = 'l'; }
        if (c == 'μ' || c == 'm') { change = 1; cOut = 'm'; }
        if (c == 'ν' || c == 'n') { change = 1; cOut = 'n'; }
        if (c == 'ο' || c == 'ό' || c == 'o') { change = 1; cOut = 'o'; }
        if (c == 'π' || c == 'p') { change = 1; cOut = 'p'; }
        if (c == 'q') { change = 1; cOut = 'q'; }
        if (c == 'ρ' || c == 'r') { change = 1; cOut = 'r'; }
        if (c == 'σ' || c == 's') { change = 1; cOut = 's'; }
        if (c == 'τ' || c == 't') { change = 1; cOut = 't'; }
        if (c == 'θ' || c == 'u') { change = 1; cOut = 'u'; }
        if (c == 'ω' || c == 'ώ' || c == 'v') { change = 1; cOut = 'v'; }
        if (c == 'ς' || c == 'w') { change = 1; cOut = 'w'; }
        if (c == 'χ' || c == 'x') { change = 1; cOut = 'x'; }
        if (c == 'υ' || c == 'ύ' || c == 'ϋ' || c == 'ΰ' || c == 'y') { change = 1; cOut = 'y'; }
        if (c == 'ζ' || c == 'z') { change = 1; cOut = 'z'; }

        //Uppercase letters
        if (c == 'Ά' || c == 'Α') { change = 1; cOut = 'A'; }
        if (c == 'Β') { change = 1; cOut = 'B'; }
        if (c == 'Ψ') { change = 1; cOut = 'C'; }
        if (c == 'Δ') { change = 1; cOut = 'D'; }
        if (c == 'Έ' || c == 'Ε') { change = 1; cOut = 'E'; }
        if (c == 'Φ') { change = 1; cOut = 'F'; }
        if (c == 'Γ') { change = 1; cOut = 'G'; }
        if (c == 'Ή' || c == 'Η') { change = 1; cOut = 'H'; }
        if (c == 'Ί' || c == 'Ϊ' || c == 'Ι') { change = 1; cOut = 'I'; }
        if (c == 'Ξ') { change = 1; cOut = 'J'; }
        if (c == 'Κ') { change = 1; cOut = 'K'; }
        if (c == 'Λ') { change = 1; cOut = 'L'; }
        if (c == 'Μ') { change = 1; cOut = 'M'; }
        if (c == 'Ν') { change = 1; cOut = 'N'; }
        if (c == 'Ό' || c == 'Ο') { change = 1; cOut = 'Ο'; }
        if (c == 'Π') { change = 1; cOut = 'P'; }
        if (c == 'Q' || c == ';') { change = 1; cOut = 'Q'; }
        if (c == 'Ρ') { change = 1; cOut = 'R'; }
        if (c == 'Σ') { change = 1; cOut = 'S'; }
        if (c == 'Τ') { change = 1; cOut = 'T'; }
        if (c == 'Θ') { change = 1; cOut = 'U'; }
        if (c == 'Ώ' || c == 'Ω') { change = 1; cOut = 'V'; }
        if (c == 'Χ') { change = 1; cOut = 'X'; }
        if (c == 'Ύ' || c == 'Ϋ' || c == 'Υ') { change = 1; cOut = 'Y'; }
        if (c == 'Ζ') { change = 1; cOut = 'Z'; }

        if (cOut == '') { change = 1; }

        StrOut = StrOut + cOut;
    };

    if (change == 1) {
        if (s.isASPxClientControl)
            s.SetText(StrOut);
        else
            s.value = StrOut;
    }
    return;
}

Imis.Lib.ToEnUpper = function(s, e) {
    var change = 0;
    var Str;

    if (s.isASPxClientControl)
        Str = s.GetText();
    else
        Str = s.value;

    var StrL = Str.length;
    var StrOut = "";

    var c = ' ';
    var cOut = ' ';

    for (var i = 0; i < StrL; i++) {
        c = Str.substring(i, i + 1);
        cOut = '';
        if (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || c == '5' || c == '6' || c == '7' || c == '8' || c == '9') { change = 1; cOut = c; }
        if (c >= 'A' && c <= 'Z') { cOut = c; }
        if (c == ' ' || c == '-' || c == '_' || c == ',' || c == '.' || c == '(' || c == ')' || c == '/') { cOut = c; }
        if (c == 'Ά' || c == 'α' || c == 'ά' || c == 'a' || c == 'A') { change = 1; cOut = 'A'; }
        if (c == 'β' || c == 'b' || c == 'Β') { change = 1; cOut = 'B'; }
        if (c == 'ψ' || c == 'c' || c == 'Ψ') { change = 1; cOut = 'C'; }
        if (c == 'δ' || c == 'd' || c == 'Δ') { change = 1; cOut = 'D'; }
        if (c == 'Έ' || c == 'ε' || c == 'έ' || c == 'e' || c == 'Ε') { change = 1; cOut = 'E'; }
        if (c == 'φ' || c == 'f' || c == 'Φ') { change = 1; cOut = 'F'; }
        if (c == 'γ' || c == 'g' || c == 'Γ') { change = 1; cOut = 'G'; }
        if (c == 'Ή' || c == 'η' || c == 'ή' || c == 'h' || c == 'Η') { change = 1; cOut = 'H'; }
        if (c == 'Ί' || c == 'Ϊ' || c == 'ι' || c == 'ί' || c == 'ϊ' || c == 'ΐ' || c == 'i' || c == 'Ι') { change = 1; cOut = 'I'; }
        if (c == 'ξ' || c == 'j' || c == 'Ξ') { change = 1; cOut = 'J'; }
        if (c == 'κ' || c == 'k' || c == 'Κ') { change = 1; cOut = 'K'; }
        if (c == 'λ' || c == 'l' || c == 'Λ') { change = 1; cOut = 'L'; }
        if (c == 'μ' || c == 'm' || c == 'Μ') { change = 1; cOut = 'M'; }
        if (c == 'ν' || c == 'n' || c == 'Ν') { change = 1; cOut = 'N'; }
        if (c == 'Ό' || c == 'ο' || c == 'ό' || c == 'o' || c == 'Ο') { change = 1; cOut = 'Ο'; }
        if (c == 'π' || c == 'p' || c == 'Π') { change = 1; cOut = 'P'; }
        if (c == 'q' || c == 'Q' || c == ';') { change = 1; cOut = 'Q'; }
        if (c == 'ρ' || c == 'r' || c == 'Ρ') { change = 1; cOut = 'R'; }
        if (c == 'σ' || c == 's' || c == 'Σ') { change = 1; cOut = 'S'; }
        if (c == 'τ' || c == 't' || c == 'Τ') { change = 1; cOut = 'T'; }
        if (c == 'θ' || c == 'u' || c == 'Θ') { change = 1; cOut = 'U'; }
        if (c == 'Ώ' || c == 'ω' || c == 'ώ' || c == 'v' || c == 'Ω') { change = 1; cOut = 'V'; }
        if (c == 'ς' || c == 'w') { change = 1; cOut = 'W'; }
        if (c == 'χ' || c == 'x' || c == 'Χ') { change = 1; cOut = 'X'; }
        if (c == 'Ύ' || c == 'Ϋ' || c == 'υ' || c == 'ύ' || c == 'ϋ' || c == 'ΰ' || c == 'y' || c == 'Υ') { change = 1; cOut = 'Y'; }
        if (c == 'ζ' || c == 'z' || c == 'Ζ') { change = 1; cOut = 'Z'; }
        if (cOut == '') { change = 1; }

        StrOut = StrOut + cOut;
    };

    if (change == 1) {
        if (s.isASPxClientControl)
            s.SetText(StrOut);
        else
            s.value = StrOut;
    }
    return;
}

Imis.Lib.ToElUpper = function(s, e) {
    var change = 0;
    var Str;

    if (s.isASPxClientControl)
        Str = s.GetText();
    else
        Str = s.value;

    var StrL = Str.length;
    var StrOut = "";

    var c = ' ';
    var cOut = ' ';

    for (var i = 0; i < StrL; i++) {
        c = Str.substring(i, i + 1);
        cOut = '';
        if (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || c == '5' || c == '6' || c == '7' || c == '8' || c == '9') { change = 1; cOut = c; }
        if (c >= 'Α' && c <= 'Ω') { cOut = c; }
        if (c == ' ' || c == '-' || c == '_' || c == ',' || c == '.' || c == '(' || c == ')' || c == '/') { cOut = c; }
        if (c == 'Ά' || c == 'α' || c == 'ά' || c == 'a' || c == 'A') { change = 1; cOut = 'Α'; }
        if (c == 'β' || c == 'b' || c == 'B') { change = 1; cOut = 'Β'; }
        if (c == 'γ' || c == 'g' || c == 'G') { change = 1; cOut = 'Γ'; }
        if (c == 'δ' || c == 'd' || c == 'D') { change = 1; cOut = 'Δ'; }
        if (c == 'Έ' || c == 'ε' || c == 'έ' || c == 'e' || c == 'E') { change = 1; cOut = 'Ε'; }
        if (c == 'ζ' || c == 'z' || c == 'Z') { change = 1; cOut = 'Ζ'; }
        if (c == 'Ή' || c == 'η' || c == 'ή' || c == 'h' || c == 'H') { change = 1; cOut = 'Η'; }
        if (c == 'θ' || c == 'u' || c == 'U') { change = 1; cOut = 'Θ'; }
        if (c == 'Ί' || c == 'Ϊ' || c == 'ι' || c == 'ί' || c == 'ϊ' || c == 'ΐ' || c == 'i' || c == 'I') { change = 1; cOut = 'Ι'; }
        if (c == 'κ' || c == 'k' || c == 'K') { change = 1; cOut = 'Κ'; }
        if (c == 'λ' || c == 'l' || c == 'L') { change = 1; cOut = 'Λ'; }
        if (c == 'μ' || c == 'm' || c == 'M') { change = 1; cOut = 'Μ'; }
        if (c == 'ν' || c == 'n' || c == 'N') { change = 1; cOut = 'Ν'; }
        if (c == 'ξ' || c == 'j' || c == 'J') { change = 1; cOut = 'Ξ'; }
        if (c == 'Ό' || c == 'ο' || c == 'ό' || c == 'o' || c == 'O') { change = 1; cOut = 'Ο'; }
        if (c == 'π' || c == 'p' || c == 'P') { change = 1; cOut = 'Π'; }
        if (c == 'ρ' || c == 'r' || c == 'R') { change = 1; cOut = 'Ρ'; }
        if (c == 'σ' || c == 'ς' || c == 's' || c == 'S') { change = 1; cOut = 'Σ'; }
        if (c == 'τ' || c == 't' || c == 'T') { change = 1; cOut = 'Τ'; }
        if (c == 'Ύ' || c == 'Ϋ' || c == 'υ' || c == 'ύ' || c == 'ϋ' || c == 'ΰ' || c == 'y' || c == 'Y') { change = 1; cOut = 'Υ'; }
        if (c == 'φ' || c == 'f' || c == 'F') { change = 1; cOut = 'Φ'; }
        if (c == 'χ' || c == 'x' || c == 'X') { change = 1; cOut = 'Χ'; }
        if (c == 'ψ' || c == 'c' || c == 'C') { change = 1; cOut = 'Ψ'; }
        if (c == 'Ώ' || c == 'ω' || c == 'ώ' || c == 'v' || c == 'V') { change = 1; cOut = 'Ω'; }
        if (c == 'ς' || c == 'w' || c == 'W') { change = 1; cOut = 'Σ'; }
        if (e && e.length) {
            for (var j in e) {
                if (c == e[j]) { cOut = ''; break; }
            }
        }
        if (cOut == '') { change = 1; }

        StrOut = StrOut + cOut;
    };

    if (change == 1) {
        if (s.isASPxClientControl)
            s.SetText(StrOut);
        else
            s.value = StrOut;
    }
    return;
}

Imis.Lib.ToUpper = function(s, e) {
    var change = 0;
    var Str;

    if (s.isASPxClientControl)
        Str = s.GetText();
    else
        Str = s.value;

    var StrL = Str.length;
    var StrOut = "";

    var c = ' ';
    var cOut = ' ';

    for (var i = 0; i < StrL; i++) {
        c = Str.substring(i, i + 1);
        cOut = '';

        /* English Characters ToUpperCase */
        if (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || c == '5' || c == '6' || c == '7' || c == '8' || c == '9') { change = 1; cOut = c; }
        if (c >= 'A' && c <= 'Z') { cOut = c; }
        if (c == ' ' || c == '-' || c == '_' || c == ',' || c == '.' || c == '(' || c == ')' || c == '/') { cOut = c; }
        if (c == 'a') { change = 1; cOut = 'A'; }
        if (c == 'b') { change = 1; cOut = 'B'; }
        if (c == 'c') { change = 1; cOut = 'C'; }
        if (c == 'd') { change = 1; cOut = 'D'; }
        if (c == 'e') { change = 1; cOut = 'E'; }
        if (c == 'f') { change = 1; cOut = 'F'; }
        if (c == 'g') { change = 1; cOut = 'G'; }
        if (c == 'h') { change = 1; cOut = 'H'; }
        if (c == 'i') { change = 1; cOut = 'I'; }
        if (c == 'j') { change = 1; cOut = 'J'; }
        if (c == 'k') { change = 1; cOut = 'K'; }
        if (c == 'l') { change = 1; cOut = 'L'; }
        if (c == 'm') { change = 1; cOut = 'M'; }
        if (c == 'n') { change = 1; cOut = 'N'; }
        if (c == 'o') { change = 1; cOut = 'Ο'; }
        if (c == 'p') { change = 1; cOut = 'P'; }
        if (c == 'q') { change = 1; cOut = 'Q'; }
        if (c == 'r') { change = 1; cOut = 'R'; }
        if (c == 's') { change = 1; cOut = 'S'; }
        if (c == 't') { change = 1; cOut = 'T'; }
        if (c == 'u') { change = 1; cOut = 'U'; }
        if (c == 'v') { change = 1; cOut = 'V'; }
        if (c == 'w') { change = 1; cOut = 'W'; }
        if (c == 'x') { change = 1; cOut = 'X'; }
        if (c == 'y') { change = 1; cOut = 'Y'; }
        if (c == 'z') { change = 1; cOut = 'Z'; }

        /* Greek Characters ToUpperCase */
        if (c >= 'Α' && c <= 'Ω') { cOut = c; }
        if (c == 'Ά' || c == 'α' || c == 'ά') { change = 1; cOut = 'Α'; }
        if (c == 'β') { change = 1; cOut = 'Β'; }
        if (c == 'γ') { change = 1; cOut = 'Γ'; }
        if (c == 'δ') { change = 1; cOut = 'Δ'; }
        if (c == 'Έ' || c == 'ε' || c == 'έ') { change = 1; cOut = 'Ε'; }
        if (c == 'ζ') { change = 1; cOut = 'Ζ'; }
        if (c == 'Ή' || c == 'η' || c == 'ή') { change = 1; cOut = 'Η'; }
        if (c == 'θ') { change = 1; cOut = 'Θ'; }
        if (c == 'Ί' || c == 'Ϊ' || c == 'ι' || c == 'ί' || c == 'ϊ' || c == 'ΐ') { change = 1; cOut = 'Ι'; }
        if (c == 'κ') { change = 1; cOut = 'Κ'; }
        if (c == 'λ') { change = 1; cOut = 'Λ'; }
        if (c == 'μ') { change = 1; cOut = 'Μ'; }
        if (c == 'ν') { change = 1; cOut = 'Ν'; }
        if (c == 'ξ') { change = 1; cOut = 'Ξ'; }
        if (c == 'Ό' || c == 'ο' || c == 'ό') { change = 1; cOut = 'Ο'; }
        if (c == 'π') { change = 1; cOut = 'Π'; }
        if (c == 'ρ') { change = 1; cOut = 'Ρ'; }
        if (c == 'σ' || c == 'ς') { change = 1; cOut = 'Σ'; }
        if (c == 'τ') { change = 1; cOut = 'Τ'; }
        if (c == 'Ύ' || c == 'Ϋ' || c == 'υ' || c == 'ύ' || c == 'ϋ' || c == 'ΰ') { change = 1; cOut = 'Υ'; }
        if (c == 'φ') { change = 1; cOut = 'Φ'; }
        if (c == 'χ') { change = 1; cOut = 'Χ'; }
        if (c == 'ψ') { change = 1; cOut = 'Ψ'; }
        if (c == 'Ώ' || c == 'ω' || c == 'ώ') { change = 1; cOut = 'Ω'; }
        if (cOut == '') { change = 1; }

        StrOut = StrOut + cOut;
    };

    if (change == 1) {
        if (s.isASPxClientControl)
            s.SetText(StrOut);
        else
            s.value = StrOut;
    }
    return;
}

Imis.Lib.CheckAfm = function(val, e) {
    if (!e || !e.value || e.value == null) return;
    if (e.value) {
        var afm = e.value;
        e.isValid = false;
        if (!afm.match(/^\d{9}$/) || afm == '000000000') {
            e.isValid = false;
            return;
        }
        afm = afm.split('').reverse().join('');

        var Num1 = 0;
        for (var iDigit = 1; iDigit <= 8; iDigit++) {
            Num1 += afm.charAt(iDigit) << iDigit;
        }
        e.isValid = (Num1 % 11) % 10 == afm.charAt(0);
    }
}

Imis.Lib.OnlyCharacters = function(s, e) {
    var noCharacters = new RegExp('[^a-zA-zα-ωΑ-Ω\\s]', 'g');
    var input = new String();
    if (s.GetText)
        input = s.GetText();
    else
        input = s.value;
    input = input.replace(noCharacters, '');
    if (s.SetText)
        s.SetText(input);
    else
        s.value = input;
    if (s.Validate) {
        s.Validate();
    }
}

Imis.Lib.OnlyDigits = function(s, e) {
    var noDigits = new RegExp('\\D', 'g');
    var input = new String();
    if (s.GetText)
        input = s.GetText();
    else
        input = s.value;
    input = input.replace(noDigits, '');
    if (s.SetText)
        s.SetText(input);
    else
        s.value = input;
    if (s.Validate) {
        s.Validate();
    }
}

Imis.Lib.CheckUri = function(s, e) {
    if (!e || !e.value || e.value == null) return;
    var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
    e.isValid = e.value.match(regexp);
}

Imis.Lib.CheckPostalCode = function(s, e) {
    if (!e || !e.value || e.value == null) return;
    var regexp = /^\d{5}$/;
    e.isValid = e.value.match(regexp);
}

Imis.Lib.CheckFixedPhone = function(s, e) {
    if (!e || !e.value || e.value == null) return;
    var regexp = /^2\d{9}$/;
    e.isValid = e.value.match(regexp);
}

Imis.Lib.CheckMobilePhone = function(s, e) {
    if (!e || !e.value || e.value == null) return;
    var regexp = /^69\d{8}$/;
    e.isValid = e.value.match(regexp);
}

Imis.Lib.CheckPhone = function(s, e) {
    if (!e || !e.value || e.value == null) return;
    var regexp = /^2\d{9}|69\d{8}$/;
    e.isValid = e.value.match(regexp);
}

Imis.Lib.CheckCheckbox = function(s, e) {
    var cb = document.getElementById(s.checkboxToValidate);
    e.IsValid = cb.checked;
    ValidatorUpdateDisplay(s);
}

Imis.Lib.DisableGreekKeyPress = function(e) {
    e = e || window.event || {};
    var charCode = e.keyCode || e.charCode || 0;
    //it's 902 actually but just in case we miss something we make it 900
    var isValid = charCode < 900;
    if (!isValid) {
        $.prompt('Παρακαλώ χρησιμοποιήστε μόνο λατινικούς χαρακτήρες.');
    }
    return isValid;
}

Imis.Lib.ValidateDateTime = function(s, e) {

    var inputDate = Date.parseLocale(e.Value.substr(0, e.Value.length - 6));
    var x = e.Value.substr(e.Value.length - 5, e.Value.length - 3);
    inputDate.setHours(x.split(/:/)[0]);
    inputDate.setMinutes(x.split(/:/)[1]);
    if (inputDate > new Date()) {
        e.IsValid = false;
    }
}

Imis.Lib.CheckEmail = function(s, e) {
    if (e.value == null) return;
    var regexp = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
    e.isValid = e.value.match(regexp);
}

Imis.Lib.GetDxValidationErrors = function(validationGroup, processInvisibleEditors) {
    var errors = [];
    var container = null;
    if (typeof (_aspxValidateProcessingProc) == 'undefined')
        return errors;
    var processingProc = _aspxValidateProcessingProc;
    var collection = ASPxClientControl.GetControlCollection();
    var choiceCondition = _aspxValidateChoiceCondition;
    for (var key in collection.elements) {
        var control = collection.elements[key];
        if (control != null && ASPxIdent.IsASPxClientEdit(control)) {
            var mainElement = control.GetMainElement();
            if (_aspxIsExists(mainElement) && (container == null || _aspxGetIsParent(container, mainElement))
                    && (processInvisibleEditors || control.IsVisible()) && choiceCondition(control, validationGroup)) {
                var isSuccess = processingProc(control);
                if (!isSuccess) {
                    errors.push({ validationGroup: control.validationGroup, message: control.GetErrorText(), control: control });
                }
            }
        }
    }
    return errors;
}

Imis.Lib.GetDxValidationErrors = function(validationGroup, processInvisibleEditors) {
    var errors = [];
    var container = null;
    if (typeof (_aspxValidateProcessingProc) == 'undefined')
        return errors;
    var processingProc = _aspxValidateProcessingProc;
    var collection = ASPxClientControl.GetControlCollection();
    var choiceCondition = _aspxValidateChoiceCondition;
    for (var key in collection.elements) {
        var control = collection.elements[key];
        if (control != null && ASPxIdent.IsASPxClientEdit(control)) {
            var mainElement = control.GetMainElement();
            if (_aspxIsExists(mainElement) && (container == null || _aspxGetIsParent(container, mainElement))
                    && (processInvisibleEditors || control.IsVisible()) && choiceCondition(control, validationGroup)) {
                var isSuccess = processingProc(control);
                if (!isSuccess) {
                    errors.push({ validationGroup: control.validationGroup, message: control.GetErrorText(), control: control });
                }
            }
        }
    }
    return errors;
}

Imis.Lib.GetValidationErrors = function(validationGroup, validate, arrayErrors) {
    var errors = [];

    var DxErrors = Imis.Lib.GetDxValidationErrors(validationGroup, true);
    if (DxErrors.length > 0) {
        for (var i = 0; i < DxErrors.length; i++) {
            errors.push(DxErrors[i]);
        }
    }

    if (arrayErrors.length > 0) {
        for (var i = 0; i < arrayErrors.length; i++) {
            errors.push(arrayErrors[i]);
        }
    }
    if (validate) {
        var val = new Imis.Lib.Validation();
        val.Page_ClientValidate(validationGroup);
    }

    var summary, sums;
    var i;
    if (typeof (Page_Validators) != "undefined") {
        for (i = 0; i < Page_Validators.length; i++) {
            if (!Page_Validators[i].isvalid && typeof (Page_Validators[i].errormessage) == "string") {
                errors.push({ validationGroup: Page_Validators[i].validationGroup,
                    message: Page_Validators[i].errormessage,
                    element: Page_Validators[i].controltovalidate
                });
            }
        }
    }
    return errors;
}

Imis.Lib.CreateErrorList = function(validationGroup, elemID, validate) {
    if (!elemID)
        elemID = 'error-area';
    var errors = [];

    var div = $('#' + elemID);
    if (div.length == 0) {
        div = $($.create('div', { id: elemID }, []));
        $(document.forms[0]).append(div);
    }
    errors = Imis.Lib.GetValidationErrors(validationGroup, validate, pageErrors);
    div.html('');
    if (errors.length == 0)
        return;
    div.hide();

    var ul = $($.create('ul', {}, []));
    ul.attr("style", "list-style-type: square;")

    for (var i = 0; i < errors.length; i++) {
        var o = $.create('li',
                        {}, [errors[i].message]);
        ul.append($(o));
    }
    div.append($(ul));
    div.show();
    //    div.animate({ backgroundColor: 'pink' }, 500)
    //    .animate({ backgroundColor: 'white' }, 500);
}

Imis.Lib.ClearErrorList = function(elemID) {
    if (!elemID)
        elemID = 'error-area';
    $('#' + elemID).html('');
}

Imis.Lib.EnterHandler = function(e, callback) {
    e = e || window.event || {};
    var charCode = e.keyCode || e.charCode || 0;
    if (Sys.UI.Key.enter == charCode) {
        callback();
        if (e.stopPropagation) {
            e.stopPropagation();
        } else {
            e.cancelBubble = true;
        }
    }
}

Imis.Lib.OpenPopup = function(url, width, height, name) {
    if (!width) width = '400';
    if (!height) height = '400';
    if (!name) name = 'popupWindow';
    window.open(url, name, 'height=' + height + ',width=' + width + ',status=no,toolbars=no,location=no');
}

Imis.Lib.SetLatin = function(elem) {
    elem.onkeyup = null;
    $clearHandlers(elem);
    $addHandler(elem, 'keyup', function() { Imis.Lib.NoGreekCharacters(elem, true); });
}

Imis.Lib.SetGreek = function(elem) {
    elem.onkeyup = null;
    $clearHandlers(elem);
    $addHandler(elem, 'keyup', function() { Imis.Lib.NoGreekCharacters(elem, true); });
}

Imis.Lib.OnlyLatinCharacters = function(elem, upperCase) {
    var change = 0;
    var Str = elem.value;
    var StrL = Str.length;
    var StrOut = "";

    var c = ' ';
    var cOut = ' ';

    for (var i = 0; i < StrL; i++) {
        c = Str.substring(i, i + 1);
        cOut = '';

        if ((c >= 'A' && c <= 'Z') || c == '\'' || c == ' ' || (c >= 0 && c <= 9)) {
            cOut = c;
        } else
            if (c >= 'a' && c <= 'z') {
            change = 1;
            if (upperCase) {
                cOut = c.toUpperCase();
            } else {
                cOut = c;
            }
        } else {
            alert('Επιτρέπονται μόνο λατινικοί χαρακτήρες!');
            elem.value = StrOut;
            return;
        }

        StrOut = StrOut + cOut;
    };

    if (change == 1) elem.value = StrOut;

    return;
}

Imis.Lib.NoGreekCharacters = function(elem, upperCase) {
    var change = 0;
    var Str = elem.value;
    var StrL = Str.length;
    var StrOut = "";

    var c = ' ';
    var cOut = ' ';

    for (var i = 0; i < StrL; i++) {
        c = Str.substring(i, i + 1);
        cOut = '';

        if ((c >= 'Α' && c <= 'Ω') || (c >= 'α' && c <= 'ω') ||
             c == 'Ά' || c == 'ά' ||
             c == 'Έ' || c == 'ε' || c == 'έ' ||
             c == 'Ί' || c == 'Ϊ' || c == 'ι' || c == 'ί' || c == 'ϊ' || c == 'ΐ' ||
             c == 'Ό' || c == 'ο' || c == 'ό' || c == 'Ο' ||
             c == 'Ύ' || c == 'Ϋ' || c == 'υ' || c == 'ύ' || c == 'ϋ' || c == 'ΰ' ||
             c == 'Ώ' || c == 'ω' || c == 'ώ') {
            alert('Επιτρέπονται μόνο λατινικοί χαρακτήρες!');
            elem.value = StrOut;
            return;
        } else {
            change = 1;
            if (upperCase) {
                cOut = c.toUpperCase();
            } else {
                cOut = c;
            }
        }

        StrOut = StrOut + cOut;
    };

    if (change == 1) elem.value = StrOut;

    return;
}

Imis.Lib.OnlyGreekCharacters = function(elem, upperCase) {
    var change = 0;
    var Str = elem.value;
    var StrL = Str.length;
    var StrOut = "";

    var c = ' ';
    var cOut = ' ';

    for (var i = 0; i < StrL; i++) {
        c = Str.substring(i, i + 1);
        cOut = '';

        if ((c >= 'Α' && c <= 'Ω') || c == ' ' || (c >= 0 && c <= 9)) {
            cOut = c;
        }
        else if (c == 'Ά' || c == 'ά') { change = 1; cOut = 'Α'; }
        else if (c == 'Έ' || c == 'ε' || c == 'έ') { change = 1; cOut = 'Ε'; }
        else if (c == 'Ή' || c == 'η' || c == 'ή') { change = 1; cOut = 'Η'; }
        else if (c == 'Ί' || c == 'Ϊ' || c == 'ι' || c == 'ί' || c == 'ϊ' || c == 'ΐ') { change = 1; cOut = 'Ι'; }
        else if (c == 'Ό' || c == 'ο' || c == 'ό' || c == 'o' || c == 'O') { change = 1; cOut = 'Ο'; }
        else if (c == 'Ύ' || c == 'Ϋ' || c == 'υ' || c == 'ύ' || c == 'ϋ' || c == 'ΰ') { change = 1; cOut = 'Υ'; }
        else if (c == 'Ώ' || c == 'ω' || c == 'ώ') { change = 1; cOut = 'Ω'; }
        else if (c >= 'α' && c <= 'ω') {
            change = 1;
            if (this._convertToUpperCase) {
                if (c == 'ς') {
                    cOut = 'Σ';
                }
                else {
                    cOut = c.toUpperCase();
                }
            }
            else {
                cOut = c;
            }
        }
        else {
            alert('Επιτρέπονται μόνο ελληνικοί χαρακτήρες!');
            elem.value = StrOut;
            return;
        }

        StrOut = StrOut + cOut;
    };

    if (change == 1) elem.value = StrOut;

    return;
}

Imis.Lib.ChangeLang = function(elem, txtID) {
    var ddl = $(elem);
    var txt = $get(txtID);
    if (ddl.val() == 'el-GR') {
        Imis.Lib.SetGreek(txt);
    }
    else if (ddl.val() == 'en-US') {
        Imis.Lib.SetLatin(txt);
    }
}

Imis.Lib.Validation = function() {
};

Imis.Lib.Validation.prototype = {
    ValidatorValidate: function(val, validationGroup, event) {
        val.isvalid = true;
        if ((typeof (val.enabled) == "undefined" || val.enabled != false) && IsValidationGroupMatch(val, validationGroup)) {
            if (typeof (val.evaluationfunction) == "function") {
                val.isvalid = val.evaluationfunction(val);
                if (!val.isvalid) { ValidatorUpdateDisplay(val); }
            }
        }
    },
    Page_ClientValidate: function(validationGroup) {
        Page_InvalidControlToBeFocused = null;
        if (typeof (Page_Validators) == "undefined") {
            return true;
        }
        Page_InvalidControlToBeFocused = null;

        var i;
        for (i = 0; i < Page_Validators.length; i++) {
            this.ValidatorValidate(Page_Validators[i], validationGroup, null);
        }
        ValidationSummaryOnSubmit(validationGroup);
        Page_BlockSubmit = !Page_IsValid;
        return Page_IsValid;
    }
};


Imis.Lib.TabErrorHandler = function() {
    this._mainGroups = null;
    this._errors = null;
    this._proposalFormManager = null;
    this._proposalTabCtrl = null;
};

Imis.Lib.TabErrorHandler.prototype = {
    init: function(proposalFormManager, proposalTabCtrl) {
        this._proposalFormManager = proposalFormManager;
        this._proposalTabCtrl = proposalTabCtrl;
    },
    showWaitMessage: function() {
        $('#wait_message').show();
    },
    hideWaitMessage: function() {
        $('#wait_message').hide();
    },
    createList: function(errors) {
        this._errors = errors;
        this.clearList();
        var valGroups = this._proposalFormManager.get_Groups();
        this._mainGroups = {};
        var nestedGroups = {};

        var __realErrors = {};
        for (var i in this._errors) {
            if (this._errors[i] != null)
                __realErrors[i] = 'val';
        }

        for (var i in valGroups) {
            this._mainGroups[valGroups[i][0]] = { name: valGroups[i][0], text: valGroups[i][1] };
            if (valGroups[i][2] == null || valGroups[i][2].length < 1) {
                nestedGroups[valGroups[i][0]] = { name: valGroups[i][0], text: valGroups[i][1], parent: null };
            }
            else {
                for (var j in valGroups[i][2]) {
                    nestedGroups[valGroups[i][2][j][0]] = { name: valGroups[i][2][j][0], text: valGroups[i][2][j][1], parent: valGroups[i][0] };
                }
            }
        }
        for (var i in nestedGroups) {
            if (__realErrors[nestedGroups[i].parent] == 'val' || __realErrors[nestedGroups[i].name] == 'val') {
                if (nestedGroups[i].parent != null)
                    this.createNestedDiv(nestedGroups[i].name, nestedGroups[i].parent, nestedGroups[i].text, this._mainGroups[nestedGroups[i].parent].text);
                else
                    this.createDiv(nestedGroups[i].name, false, nestedGroups[i].parent, nestedGroups[i].text);
            }
        }
        for (var valGroup in this._errors) {
            for (var error in this._errors[valGroup]) {
                this.createElement(valGroup, this._errors[valGroup][error].message);
            }
        }
        return nestedGroups;
    },

    clearList: function clearList() {
        $('#errors_1').remove();
        var errdiv = $($.create('div', { id: 'errors_1' }, []));
        $('#errors_2').append(errdiv);
    },

    createElement: function(valGroup, msg) {
        var ul = $('#err_ul_' + valGroup);
        var li = $($.create('li', {}, [msg]));
        ul.append(li);
    },

    createNestedDiv: function(valGroup, parentGroup, text, parentText) {
        if (!text) text = valGroup;
        var parentDiv = this.createDiv(parentGroup, true, undefined, parentText);
        var nestedDiv = this.createDiv(valGroup, false, parentGroup, text);
        parentDiv.append(nestedDiv);
    },

    createDiv: function(valGroup, hasNested, parentName, text) {

        var div = $('#err_' + valGroup);
        if (div.length == 0) {
            if (!text) text = valGroup;
            //Δεν υπαρχει
            var errdiv = $('#errors_1');
            var ul = $('#err_ul' + valGroup);
            div = $($.create('div', { id: 'err_' + valGroup }, []));

            var title = $($.create('a', { href: 'javascript:void(0);', 'class': 'val-group' }, [text]));
            div.append(title);
            if (!hasNested) {
                ul = $($.create('ul', { id: 'err_ul_' + valGroup }, []));
                div.append(ul);
            }
            if (!parentName) {
                title.click(Function.createDelegate(this, function() {
                    tabValidate = false;
                    this._proposalTabCtrl.SetActiveTab(this._proposalTabCtrl.GetTabByName(valGroup));
                    tabValidate = true;
                })
                );
                div.addClass('main-error-div');
                title.addClass('nested');
            }
            else {
                title.click(Function.createDelegate(this, function() {
                    tabValidate = false;
                    this._proposalTabCtrl.SetActiveTab(this._proposalTabCtrl.GetTabByName(parentName));
                    var tabCtrl = window.parent[parentName + 'TabCtrl'];
                    tabCtrl.SetActiveTab(tabCtrl.GetTabByName(valGroup));
                    tabValidate = true;
                })
                );
            }
            errdiv.append(div);
        }
        return div;
    }
};

var tabErrorHandler = new Imis.Lib.TabErrorHandler();
var tabValidate = true;

var dx_cbRequired = function(s, e) {
    if (s.GetSelectedItem() == null || s.GetValue() == '') { e.isValid = false; }
};

var dx_Focus = function(s, e) {
    s.GetMainElement().className += ' dx-focused';
};

var dx_Blur = function(s, e) {
    s.GetMainElement().className = s.GetMainElement().className.replace(' dx-focused', '');
};

/**
* Cookie plugin
* Copyright (c) 2006 Klaus Hartl (stilbuero.de)
*/
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};

Imis.Lib.DisableCompression = function() {
    $.cookie('disable-compression', '1', { expires: 0.00015 });
}
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();