$(function() {
    // variables
    var _calc = $('#calc');
    // events
    $('#toggle-button', _calc).click(function() {
        if($(this).is('.selected')) {
            // opened -> close
            $(this).removeClass('selected');
            $('#calccontent', _calc).slideUp('fast');
            $('p#log', _calc).html('');
        } else {
            // closed -> open
            $(this).addClass('selected');
            $('#calccontent', _calc).slideDown('fast');
        }
    });
    $('form input.submit', _calc).click(function() {
        // validate inputs
        var avgPrice = $('form #input_pc', _calc).val();
        var cntDays = $('form #input_pn', _calc).val();
        var hotelPrice = $('form #input_cp', _calc).val();
        var replyEmail = $('form #input_email', _calc).val();

        $('p#log', _calc).html('');

        var errors = "";
        var validated = true;
        if(!validateNumeric(avgPrice)) {
            errors += "Zadaná průměrná cena není ve správném formátu!<br/>";
            validated = false;
        }
        if(!validateNumeric(cntDays)) {
            errors += "Zadaný počet nocí není ve správném formátu!<br/>";
            validated = false;
        }
        if(!validateNumeric(hotelPrice)) {
            errors += "Zadaná cena hotelu Prokop není ve správném formátu!<br/>";
            validated = false;
        }
        if(!validateEmail(replyEmail)) {
            errors += "Zadaný e-mail není ve správném formátu!<br/>";
            validated = false;
        }
        if(parseFloat(avgPrice) <= parseFloat(hotelPrice)) {
            errors += "Cílová částka musí být nižší než průměrná, jinak neušetříte!<br/>";
            validated = false;
        }

        if(validated) {
            $('p#log', _calc).css({color:'#666'}).html("Odesílám požadavek ...");
            $.ajax({
                type:'POST',
                url:'/send',
                data:{
                    prumernacena:avgPrice, pocetnoci:cntDays, cenaprokop:hotelPrice, email:replyEmail
                },
                success:function(msg) {
                    $('#toggle-button, #calccontent, #log', _calc).remove();
                    var sum = ((parseFloat(avgPrice) * parseFloat(cntDays)) - (parseFloat(hotelPrice) * parseFloat(cntDays)));
                    _calc.append('<h3 style="color:#016F00;">Můžete ušetřit až '+sum+'&euro; ! Váše poptávka byla odeslána našemu obchodnímu oddělení.</h3>');
                }
            });
        } else {
            $('p#log', _calc).css({color:'#8F0000'}).html(errors);
        }
        
        return false;
    });
    // methods
    function validateEmail(val) {
        var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
        if(!filter.test(val)) {
            return false;
        }
        return true;
    }
    function validateNumeric(val) {
        var strValidChars = "0123456789.-", strChar, blnResult = true;
        if(val.length == 0) {
            return false;
        }
        // test strString consists of valid characters listed above
        for(var loop = 0; loop < val.length && blnResult == true; loop++) {
            strChar = val.charAt(loop);
            if(strValidChars.indexOf(strChar) == -1) {
                blnResult = false;
            }
        }
        return blnResult;
   }
});
