function getLabel(elemId)
{
    if (elemId) {
        var label = $('label.required[for="' + elemId + '"]');

        if (label && label.length) {
            return label[0].innerHTML;
        }
    }

    return '';
}

function checkForm(form, errorToText)
{
    var inputs = $('#' + form.id + ' .required');

    if (!inputs.length) {
        return (errorToText) ? '' : true;
    }

    var error = '';

    for (i = 0; i < inputs.length; i++) {
        el = inputs[i];
        label = getLabel(el.id).replace(/\*+$/g, '');

        if (!label) {
            continue;
        }

        if (
            !(el.value)
            || (('null' == el.value) && ('SELECT' == el.tagName))
            || (('checkbox' == el.type) && !el.checked)
        ) {
            switch (el.type) {
                case 'checkbox':
                    error += "Zaškrtněte prosím pole '" + label + "'.\n";
                    break;

                case 'select-one':
                    error += "Vyberte prosím jednu z možností v poli '" + label + "'.\n";
                    break;

                default:
                    error += "Vyplňte prosím pole '" + label + "'.\n";
                    break;
            }

            continue;
        }

        if (-1 != el.id.indexOf('email')) {
            if (window.RegExp) {
                re = new RegExp("^[_a-zA-Z0-9\.\-]+@[_a-zA-Z0-9\.\-]+[\.][a-zA-Z]{2,4}$");

                if (!re.test(el.value)) {
                    error += "Emailová adresa v poli '" + label + "' je neplatná, zadejte ji prosím znovu.\n";
                }
            }
        }
    }


    // kontrola formatu datumu
    if (!error) {
        var inputs = $('#' + form.id + ' input.required.date');

        if (inputs.length) {
            for (i = 0; i < inputs.length; i++) {
                el = inputs[i];
                label = getLabel(el.id).replace(/\*+$/g, '');

                if (!label) {
                    continue;
                }

                value = el.value;

                var dtStr = value;
                var delimiter = ".";
                var minYear = 1900;
                var maxYear = 2100;
                var daysInMonth = daysArray(12);
                var pos1 = dtStr.indexOf(delimiter);
                var pos2 = dtStr.indexOf(delimiter,pos1+1);
                var strDay = dtStr.substring(0, pos1);
                var strMonth = dtStr.substring(pos1+1, pos2);
                var strYear = dtStr.substring(pos2+1);
                strYr = strYear;
                if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1);
                if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1);

                month = parseInt(strMonth);
                day = parseInt(strDay);
                year = parseInt(strYr);

                if (pos1==-1 || pos2==-1) {
                    error += "Hodnota v poli '" + label + "' musí být platné datum ve formátu dd.mm.yyyy.\n";
                    continue;
                }
                if (strMonth.length<1 || month<1 || month>12) {
                    error += "Hodnota v poli '" + label + "' musí být platné datum ve formátu dd.mm.yyyy. (měsíc)\n";
                    continue;
                }
                if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]) {
                    error += "Hodnota v poli '" + label + "' musí být platné datum ve formátu dd.mm.yyyy. (den)\n";
                    continue;
                }
                if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
                    error += "Hodnota v poli '" + label + "' musí být platné datum ve formátu dd.mm.yyyy.\nRok musí mít 4 číslice a být mezi "+minYear+" a "+maxYear+".\n";
                    continue;
                }
                if (dtStr.indexOf(delimiter,pos2+1)!=-1) {
                    error += "Hodnota v poli '" + label + "' musí být platné datum ve formátu dd.mm.yyyy.\n";
                    continue;
                }
            }

            if (error) {
                error += "\nPro vložení data použijte ikonu kalendáře vedle vstupního pole.";
            }
        }
    }

    if (error) {
        if (errorToText) {
            return error;
        }

        alert(error);
        return false;
    }

    if (errorToText) {
        return '';
    }

    return true;
}

function daysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31;
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30;}
		if (i==2) {this[i] = 29;}
   }
   return this;
}

function daysInFebruary (year){
	// pocet dnu v unoru daneho roku
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function definedkeys_only(e, keys)
{
    switch (e.keyCode) {
        case 8:
        case 9:
        case 13:
        case 37:
        case 38:
        case 39:
        case 40:
        case 46:
            return true;
            break;
    }

    var re = new RegExp(keys);

    return re.test(String.fromCharCode((e.which) ? e.which : e.keyCode));
}

function nums_only(e)
{
    switch (e.keyCode) {
        case 8:
        case 9:
        case 13:
        case 46:
        case 116:
            return true;
            break;
    }

    k = (e.which) ? e.which : e.keyCode;
    var r = !((k < 48 || k > 57) && (k < 35 || k > 40));

    return r;
}

function date_only(e) {
    switch (e.keyCode) {
        case 8:
        case 9:
        case 13:
        case 46:
            return true;
            break;
    }

    k = (e.which) ? e.which : e.keyCode;
    dot = (k == 46);

    var r = ((k < 48 || k > 57) && !dot && (k < 35 || k > 40));

    return !r;
}

function time_only(e) {
    switch (e.keyCode) {
        case 8:
        case 9:
        case 13:
        case 58:
            return true;
            break;
    }

    k = (e.which) ? e.which : e.keyCode;
    dot = (k == 58);

    var r = ((k < 48 || k > 57) && !dot && (k < 35 || k > 40));

    return !r;
}

function nums_dot(e, box) {
    switch (e.keyCode) {
        case 8:
        case 9:
        case 13:
        case 46:
            return true;
            break;
    }

    if (e.which) {
        k = e.which;
    } else {
        k = e.keyCode;
    }

    var dot = (k == 46);

    if (dot && box && box.value && (-1 != box.value.indexOf('.'))) {
        dot = false;
    }

    var minus = (e.which == 45);
    if (minus) {
        // byl zmacknuty znak '-', pokud je na zacatku, povolim ho
        return true;
    }

    var r = ((k < 48 || k > 57) && !dot && (k < 35 || k > 40));

    return !r;
}

function setFocus(DOMdestination)
{
    setTimeout(DOMdestination, 400);
}

function changeStay(obj, url)
{
    window.location= url + obj.options[obj.options.selectedIndex].value;
}

