// ***************************************
// **** DIZÁJN SEGÉDELEMEK - JUMPEREK ****
// ***************************************

function jumpToKalk() {
    window.location.hash = ""; 
    window.location.hash = "kalkulator"; 
    $('#kalkulator').fadeOut(1300, function() {$(this).fadeIn(1300)});
}

function jumpToAk() {
    window.location.hash = ""; 
    window.location.hash = "offer_box"; 
    $('#offer_box').fadeOut(1300, function() {$(this).fadeIn(1300)});
}

function jumpToHirlevel() {
    window.location.hash = ""; 
    window.location.hash = "hirlevel"; 
    $('#hirlevel').fadeOut(1300, function() {$(this).fadeIn(1300)});
}

function jumpToFacebook() {
    window.location.hash = ""; 
    window.location.hash = "facebookbox"; 
    $('#facebookbox').fadeOut(1300, function() {$(this).fadeIn(1300)});
}

function jumpToOnKireGondol() {
    window.location.hash = ""; 
    window.location.hash = "onkiregondolbox"; 
    $('#onkiregondolbox').fadeOut(1300, function() {$(this).fadeIn(1300)});
    $('#on_kire_gondol').fadeOut(1300, function() {$(this).fadeIn(1300)});    
}

// ***************************************
// ********* KALKULÁTOR LOGIKA ***********
// ***************************************

function logic_lakaslizing() {
    $('#calc_oneroNagysaga, #calc_lakasVetelAra').change(function() {
        setNumVal('oneroAranya',
            (getNumVal('oneroNagysaga') / getNumVal('lakasVetelAra'))* 100,
            '', " %", 2
        );
        setNumVal('lizingOsszeg',
            getNumVal('lakasVetelAra') - getNumVal('oneroNagysaga'),
            '', "", 0
        );
        toCurrency('lizingOsszeg');
    }).change(); // init
}

function logic_szemelyiautoval() {
    $('#calc_gyartasiEv').change(function() {
        setNumVal('maxFutamido',
            Math.max(0,Math.min(8, 15-(2011-getNumVal('gyartasiEv')))),
            '', " év", 0
        );
    }).change(); // init
    $('#calc_autoErteke').change(function() {
        setNumVal('maxHitelOsszeg',
            getNumVal('autoErteke') * 0.8,
            '', "", 0
        );
        toCurrency('maxHitelOsszeg');
    }).change(); // init

}

function logic_eletbiztositas() {
    $('#calc_bizt_osszeg').change(function() {
        var bo = $('#calc_bizt_osszeg').val(); // bizt. összeg millióban
        var bom = bo * 1000000; // bizt. összeg ft-ban

        var boxes = ["calc_baleseti_halal", "calc_baleseti_rokkantsag", "calc_baleseti_korhaz",
            "calc_tb_rokkantsag", "calc_kritikus", "calc_korhazi", "calc_term_halal"];
        var oldvalues = [];

        for(var i=0;i<boxes.length;i++) {
            oldvalues[i] = ($('#' +boxes[i]).val());
            listboxClear(boxes[i]);
            listboxAddItem(boxes[i], 0, " - nem kötök - ");
        }

        listboxFillNumbers("calc_baleseti_halal"     , 1, Math.min(40, bo * 2), 1, "", " millió Ft");
        listboxFillNumbers("calc_baleseti_rokkantsag", 1, Math.min(40, bo * 2), 1, "", " millió Ft");
        listboxFillNumbers("calc_term_halal"         , 1, Math.min(40, bo * 2), 1, "", " millió Ft");

        listboxFillNumbers("calc_baleseti_korhaz", 1000, Math.min(10000, bom / 90), 1000, "", " Ft");
        listboxFillNumbers("calc_korhazi"        , 1000, Math.min(10000, bom / 45), 1000, "", " Ft");

        listboxAddItem("calc_tb_rokkantsag", 10000, "10000 Ft");
        listboxAddItem("calc_kritikus", 10000, "10000 Ft");
        listboxFillNumbers("calc_tb_rokkantsag", 100000, bom, 100000, "", " Ft");
        listboxFillNumbers("calc_kritikus", 100000, bom, 100000, "", " Ft");

        for(var j=0;j<boxes.length;j++) {
            $('#'+boxes[j]).val(oldvalues[j]);
        }
        
    });

   $('#calc_bizt_osszeg').change();
}

function logic_megtakaritas(isGyermekTak) {
    if (isGyermekTak == undefined) isGyermekTak = false;
    
    $('#calc_cel').change(function() {
        var v = $('#calc_cel').val();
        // Form objektumok
        var idokoz = $('#calc_idokoz').parent();
        var idokozLabel = idokoz.prev();
        var ev = $('#calc_evekszama').parent();
        var evLabel = ev.prev();
        var penz = $('#calc_osszeg').parent();
        
        if (v == 1) {
            // Befektetek pénzt
            if (isGyermekTak) setLabel('calc_osszeg', 'Ennyi pénzt fektetek be a gyermekem számára');
            else setLabel('calc_osszeg', 'Ennyi pénzt fektetek be');
            setLabel('calc_idokoz', 'Ilyen időközönként');
            setLabel('calc_evekszama', 'Ennyi éven keresztül');
            
            // Pénz, időköz, év
            idokozLabel.insertAfter(penz);
            idokoz.insertAfter(idokozLabel);
            evLabel.insertAfter(idokoz);
            ev.insertAfter(evLabel);
            
        } else {
            // Szükségem lesz pénzre
            if (isGyermekTak) setLabel('calc_osszeg', 'Ennyi pénzre lesz szüksége a gyermekemnek');
            else setLabel('calc_osszeg', 'Ennyi pénzre lesz szükségem');
            setLabel('calc_idokoz', 'Ilyen időközönként fektetek be adott összeget a pénz érdekében');
            setLabel('calc_evekszama', 'Ennyi év múlva lesz rá szükségem');
            
            // Pénz, év, időköz
            evLabel.insertAfter(penz);
            ev.insertAfter(evLabel);
            idokozLabel.insertAfter(ev);
            idokoz.insertAfter(idokozLabel);
            
        }
    }).change(); // init
}

function logic_gyermekek() {
    logic_megtakaritas(true);
}

// ***************************************
// ******** AJÁNLATKÉRŐ LOGIKA************
// ***************************************

function getFormElement(name, parentFormId) {
    if (parentFormId == undefined) parentFormId = "akform";
    return $('#'+parentFormId+' [name="'+name+'"]');
}

var ak_errors;

function logic_ak_init(preSelected, initParams) {
    // *** STEP 1
    $('#ak_step1').show();
    $('#ak_step2').hide();
    $('#ak_step3').hide();
    logic_ak_init_step1();

    // Hiteltípus kiválasztása
    // Tovább a 2. lépésre
    //getFormElement('Offer[Name]').val(""); // első, üres opció kiválasztása legelőször - kiszedve, mert az utolsó üreset választja ki és több esetén zavaró
    getFormElement('Offer[Name]').change(function()
    {
        var hiteltipus = crmIdMap[getFormElement('Offer[Name]').val()];
        if (hiteltipus == "") return;

        ak_errors = [];
        logic_ak_check_step1();
        logic_ak_showerrors();

        if (ak_errors.length == 0)
        {
            $('#ak_bc1').removeClass("bc_active").addClass("bc_finished");
            $('#ak_step1').hide();
            
            // Get template for step 2
            $.get(LinkBase + 'ajax.php?type=aktemplate&param=' + hiteltipus, function(data) {

                $('#ak_step2_content').html(data);
                $('#ak_step2').show();
                $('#ak_bc2').removeClass("bc_new").addClass("bc_active");
                logic_ak_init_step2();
                
            });
        }

    }
    );

    // *** STEP 2

    // Tovább a 3. lépésre
    $('#ak_step2_next').click(function() {
        ak_errors = [];
        logic_ak_class_cancelformats();
        logic_ak_check_step2();
        logic_ak_showerrors();
        logic_ak_class_enforceformats();

        if (ak_errors.length == 0)
        {
            $('#ak_bc2').removeClass("bc_active").addClass("bc_finished");
            $('#ak_step2').hide();
            
            // Get template for step 3
            var hiteltipus = crmIdMap[getFormElement('Offer[Name]').val()];
            $.get(LinkBase + 'ajax.php?type=aktemplatestep3&param=' + hiteltipus, function(data) {
                $('#ak_step3_content').html(data);
                $('#ak_step3').show();
                $('#ak_bc3').removeClass("bc_new").addClass("bc_active");
                logic_ak_init_step3();
            });
        }        
    });

    // ********************
    // *** STEP3
    // Adatellenőrzési logika

    $('#ak_step3_submit').click(function() {
        ak_errors = [];
        logic_ak_class_cancelformats();
        logic_ak_check_step3();
        logic_ak_showerrors();

        if (ak_errors.length == 0) 
        {
            logic_ak_submit();
        }

        logic_ak_class_enforceformats();
    });
    // ********************

    // Auto-szelekció megfelelő cím esetén
    if (preSelected !== undefined && preSelected != "") {
        // pre-select
        getFormElement('Offer[Name]').val(crmIdMap[preSelected]);
        getFormElement('Offer[Name]').change();
    }
}

function logic_ak_init_step1() {
    // Infobox init
    initInfobox('#ak_step1 [rel]');
}
function logic_ak_init_step2() {
    // Infobox init & automatikus bevitel
    initInfobox('#ak_step2 [rel]');   
    logic_ak_class_enforceformats();

    // Prefixbe a kiválasztott hitelt
    $("#ak_step2_prefix").html(
        '<br><div align="center"><strong>' + $("#OfferName option:selected").text() + '</strong></div><br>'
    );

    // Speciális inicializációs feladatok template betöltés után
    // TODO kibontás
    var localId = crmIdMap[getFormElement('Offer[Name]').val()];
    switch (localId)
    {

        // Megtakarítás célja
        case 'vallalati_megtakaritas':
            getFormElement('Offer[Enum115]').val("1419");
            break;
        case 'gyermek_elotakarekossag':
            getFormElement('Offer[Enum115]').val("1418");
            break;
        case 'lakaskassza':
            getFormElement('Offer[Enum115]').val("1417");
            break;
        case 'nyugdijpenztar':
        case 'nyugdij_elotakarekossag':
            getFormElement('Offer[Enum115]').val("1416");
            break;
        case 'megtakaritas':
            getFormElement('Offer[Enum115]').val("1420");
            break;
            
        // Vállalati biztosítás típusa
        case 'vallalati':
            getFormElement('Offer[Enum120]').val("1435");
            break;
        case 'vallalati_flotta':
            getFormElement('Offer[Enum120]').val("1436");
            break;
        case 'csoportos':
            getFormElement('Offer[Enum120]').val("1437");
            break;
        case 'felelosseg':
            getFormElement('Offer[Enum120]').val("1438");
            break;
        case 'epszer':
            getFormElement('Offer[Enum120]').val("1439");
            break;
        case 'vallalati_hitel':
            getFormElement('Offer[Enum120]').val("1441");
            break;
        case 'szallitmany':
            getFormElement('Offer[Enum120]').val("1440");
            break;
            
            
        default:
            break;
    }    
}
function logic_ak_init_step3() {
    // Infobox & automatikus mező init
    initInfobox('#ak_step3 [rel]');    
    logic_ak_class_enforceformats();
    
    // Előre kiválasztani a választott érdeklődési kört
    // TODO szétbontás kiv. online
    var localId = crmIdMap[getFormElement('Offer[Name]').val()];
    switch (localId)
    {
        case 'hitelkivaltas': // Hitelkiváltás
        case 'kombi_hitelkivaltas':
            getFormElement('Partner[Interests][1]').attr('checked', true);
            break;
        case 'lakashitel': // Lakáshitel
        case 'lakaslizing': // Lakáslízing is
        case 'kombi_lakashitel': 
        case 'kombi_lakaslizing':
            getFormElement('Partner[Interests][2]').attr('checked', true);
            break;
        case 'epitesihitel': // Építési hitel
        case 'kombi_epitesihitel':
            getFormElement('Partner[Interests][4]').attr('checked', true);
            break;
        case 'szabfelhitel': // Szabfel hitel
        case 'kombi_szabfelhitel':
            getFormElement('Partner[Interests][8]').attr('checked', true);
            break;
        case 'nyugdijpenztar':
        case 'nyugdij_elotakarekossag':
            getFormElement('Partner[Interests][64]').attr('checked', true);
            break;
        case 'megtakaritas': // Megtakarítással dolgozó ak-k
        case 'vallalati_megtakaritas': 
        case 'gyermek_elotakarekossag':
        case 'lakaskassza':
        case 'nyugdijpenztar':
        case 'nyugdij_elotakarekossag':
            getFormElement('Partner[Interests][512]').attr('checked', true);
            break;
        
        case 'vallalati': // Vállalatival dolgozó ak-k
        case 'vallalati_flotta':
        case 'csoportos':
        case 'felelosseg':
        case 'epszer':
        case 'vallalati_hitel':
        case 'szallitmany':
            getFormElement('Partner[Interests][16384]').attr('checked', true);
            break;
            
        // ONLINE VÁLASZTÓS ESET - Megnézzük nem-e online akarja megkötni  
        case 'online_kgfb':
        case 'online_casco':
        case 'online_kgfb_casco':
        case 'online_lakas':
        case 'online_munka':
        case 'eletbiztositas':
        case 'online_utas':
            var onlineChoice = getFormElement('step2_onlinechoice').filter(":checked").val();
            // Ha online akarja megkötni, akkor továbbítjuk
            if (onlineChoice == 'online') {
                $('#ak_step3').hide(); // ne látszódjon a step3            
                switch (localId) {
                    case 'online_kgfb':top.location = LinkBase + "kalkulator/kgfb?ajanlatkeres=1";break;
                    case 'online_casco':top.location = LinkBase + "kalkulator/casco?ajanlatkeres=1";break;
                    case 'online_kgfb_casco':top.location = LinkBase + "kalkulator/kgfbcasco?ajanlatkeres=1";break;
                    case 'online_lakas':top.location = LinkBase + "kalkulator/lakasbiztositas_online?ajanlatkeres=1";break;
                    case 'online_munka':top.location = LinkBase + "kalkulator/munkanelkuli_online?ajanlatkeres=1";break;
                    case 'eletbiztositas':top.location = LinkBase + "kalkulator/eletbiztositas_online?ajanlatkeres=1";break;
                    case 'online_utas':top.location = LinkBase + "kalkulator/utasbiztositas?ajanlatkeres=1";break;
                }
            }
            break;
        
        default:
            break;

    }
}

function logic_ak_check_step1() {
    logic_ak_class_check("#ak_step1");
}
function logic_ak_check_step2() {
    logic_ak_class_check("#ak_step2");
    
    var localId = crmIdMap[getFormElement('Offer[Name]').val()];
    switch (localId)
    {
        // ONLINE VÁLASZTÓS ESET - valamit ki kell választania online-nál
        case 'online_kgfb':
        case 'online_casco':
        case 'online_kgfb_casco':
        case 'online_lakas':
        case 'online_munka':
        case 'eletbiztositas':
        case 'online_utas':
            var onlineChoice = getFormElement('step2_onlinechoice').filter(":checked").val();
            if (onlineChoice == undefined) ak_errors.push( {id : 'step2_onlinechoice_online', error: "Jelöljön meg egy választási lehetőséget"} );
            break;
    }
     
}
function logic_ak_check_step3() {
    logic_ak_class_check("#ak_step3");
}

function logic_ak_class_enforceformats(ancestor) {
    if (ancestor != undefined && ancestor != null && ancestor != "") ancestor += " ";
    else ancestor = "";
    
    
    $(ancestor + '.fmCur').each(function(index) {
        var name = $(this).attr('name');
        enforceCurrencyFormat(name);
    });
    $(ancestor + '.fmCurNoReq').each(function(index) {
        var name = $(this).attr('name');
        enforceCurrencyFormat(name);
    });
    $(ancestor + '.fmDate').each(function(index) {
        var name = $(this).attr('name');
        enforceDateFormat(name);
    });
    $(ancestor + '.fmName').each(function(index) {
        var name = $(this).attr('name');
        enforceFirstCapitalFormat(name);
    });
}
function logic_ak_class_cancelformats(ancestor) {
    if (ancestor != undefined && ancestor != null && ancestor != "") ancestor += " ";
    else ancestor = "";

    $(ancestor + '.fmCur').each(function(index) {
        var name = $(this).attr('name');
        cancelCurrencyFormat(name);
    });
    $(ancestor + '.fmCurNoReq').each(function(index) {
        var name = $(this).attr('name');
        cancelCurrencyFormat(name);
    });
}
function logic_ak_class_check(ancestor) {
    if (ancestor != undefined && ancestor != null && ancestor != "") ancestor += " ";
    else ancestor = "";

    var yearMin = 1980, yearMax = 2060;

    // Működésről ld. ajanlatkerok oldal az adminon
    
    $(ancestor + '.fmReq').each(function(index) {
        var name = $(this).attr('name');
        isNotEmpty(name);
    });
    $(ancestor + '.fmCur').each(function(index) {
        var name = $(this).attr('name');
        isNotEmpty(name);
        isValidNumber(name);
    });
    $(ancestor + '.fmCurNoReq').each(function(index) {
        var name = $(this).attr('name');
        if ($(this).val() != "") isValidNumber(name);
    });
    $(ancestor + '.fmDate').each(function(index) {
        var name = $(this).attr('name');
        isNotEmpty(name);
        isValidDate(name);
    });
    $(ancestor + '.fmZip').each(function(index) {
        var name = $(this).attr('name');
        isNotEmpty(name);
        isLengthAppropriate(name, 4, 4);
        isNumbersOnly(name);
    });
    $(ancestor + '.fmPhone').each(function(index) {
        var name = $(this).attr('name');
        isNotEmpty(name);
        isLengthAppropriate(name, 6);
        isNumbersOnly(name);
    });
    $(ancestor + '.fmEmail').each(function(index) {
        var name = $(this).attr('name');
        isNotEmpty(name);
        isValidEmail(name);
    });
    $(ancestor + '.fmName').each(function(index) {
        var name = $(this).attr('name');
        isNotEmpty(name);
    });
    $(ancestor + '.fmYear').each(function(index) {
        var name = $(this).attr('name');
        isNotEmpty(name);
        isValidNumber(name, yearMin, yearMax);
    });
}

function logic_ak_showerrors() {
    // Error handling & display
    $(".ak_error").html("");
    if(ak_errors.length > 0) {
        ak_errors.forEach(function(obj) {
            var errObj = getFormElement(obj.id).parent().prev(".ak_error");
            errObj.html(errObj.html() + obj.error + "<br />");
        });
        alert("Egy, vagy több mező nem megfelelően lett kitöltve!");
        //alert(ak_errors[0].id + " - " + ak_errors[0].error);
    }
}

function logic_ak_submit() {
    
    var localId = crmIdMap[getFormElement('Offer[Name]').val()];
    // TODO kibontani
    switch (localId)
    {
        case 'hitelkivaltas': // Hitelkiváltás
            getFormElement('Offer[Int107]').val( getFormElement('Partner[Int26]').val() );
            getFormElement('Offer[Int106]').val( getFormElement('Partner[Int27]').val() );
            getFormElement('Offer[Text123]').val( getFormElement('Partner[Text30]').val() );
            break;
            
        default:
            break;
    }

    parameters = $('#akform').serializeArray();
    
    // Ajánlattípus felvétele ebbe a mezőbe is
    parameters.push({name: "Partner[Enum11]", value: getFormElement('Offer[Name]').val()});
    parameters.push({name: "Partner[Varchar131]", value: getFormElement('Offer[Name]').val()}); // visszakeresés miatt

    resetMinicrmCallbacks();

    minicrmOkCallback = function() {
        // Siker esetén hírlevélre is feliratkozás, ha szükséges
        if ($('#ak_field_hirlevel').is(':checked') == true) {
            sendMinicrmNewsletterRequest(
                $('#ak_field_lastname').val(),
                $('#ak_field_firstname').val(),
                $('#ak_field_email').val()
            );            
        }
        
        // E-mail visszaigazolás kiküldése
        $.post(LinkBase + "ajax.php?type=aknotif",{
            name : $('#ak_field_lastname').val() + " " + $('#ak_field_firstname').val(),
            email : $('#ak_field_email').val(),
            aktype : $("#OfferName option:selected").text(), // a szöveges részét adjuk át
            akid : getFormElement('Offer[Name]').val(), // az azonosítót adjuk át
            query : encodeUriArray(parameters)
        },function(resp){
            // Step 4
            // Ajánlatkérés vége. Kilépő oldalra irányítás
            top.location = LinkBase + "ajanlatkero_ok";
        });

    }

    sendMinicrmRequest(parameters);
    
}

function initInfobox(jqSelector) {
    $(jqSelector).focus(function(){
        var txt = $(this).attr("rel");
        var infoMarginTop = parseInt($("#ak_infobox").css("margin-top"));
        var diff = $(this).offset().top + infoMarginTop - $('#ak_infobox').offset().top;
       
        $('#ak_infobox_content').html(txt);
        $('#ak_infobox').animate({marginTop: diff + "px"}, 1000);
        
    });
    
}

// ***************************************
// ********* MINICRM FUNCTIONS ***********
// ***************************************

var minicrmOkCallback = null;
var minicrmErrorCallback = null;
var minicrmRedirectCallback = null;

function resetMinicrmCallbacks() {
    minicrmOkCallback = null;
    minicrmErrorCallback = null;
    minicrmRedirectCallback = null;
}

function sendMinicrmRequest(parameters, mode)
{
    // Itt már csak adminisztratív és általános értékek legyenek hozzáadva
    parameters.push({name: "1", value: "1"});
    parameters.push({name: "Referrer", value: ""});
    parameters.push({name: "Version", value: "2.4.1"});
    
    if (mode == undefined) mode = "SignupChange";
    url = "http://api.minicrm.hu/" + mode + "/";
    
    url += encodeUriArray(parameters);

    // alert(url);

    try {  
        var head = document.getElementsByTagName('head').item(0);
        var js = document.createElement('script');
        js.setAttribute('language', 'javascript');
        js.setAttribute('type', 'text/javascript');
        js.setAttribute('src', url);
        head.appendChild(js);
    } catch(err) {
       alert('Hiba az elküldés közben!');
    }

}
function encodeUriArray(uriArray) {
    var s = "";
    for (var i = 0; i < uriArray.length; i++) {
        if (i == 0) pref = "?";
        else pref = "&";
        s += pref + uriArray[i].name + "=" + encodeURIComponent(uriArray[i].value);
    }
    return s;
}

// Feliratkozás hírlevélre
function sendMinicrmNewsletterRequest(lastname, firstname, email) {
    var parameters = [];
    parameters.push({name: "MiniCRM_FormHash", value: "1439-icwZ1H9vBiWO"});
    parameters.push({name: "Contact[LastName]", value: lastname});
    parameters.push({name: "Contact[FirstName]", value: firstname});
    parameters.push({name: "Contact[Email]", value: email});
    sendMinicrmRequest(parameters, "Signup");
}

var minicrm = {
    OnRequestSuccess : function (status, msg) {
        ///alert(status + ": " + msg);
        switch(status) {
            case "OK":
                if (minicrmOkCallback != null) minicrmOkCallback(status, msg);
                break;
            case "REDIRECT":
                if (minicrmRedirectCallback != null) minicrmRedirectCallback(status, msg);
                break;
            default: // "ERROR"
                if (minicrmErrorCallback != null) minicrmErrorCallback(status, msg);
                break;
        }
    }
}

// ***************************************
// ********* HELPER FUNCTIONS ************
// ***************************************

/**
 * Keresztnevet ad vissza, ha nincs space, ha van akkor az elsőig vez.név aztán a maradék keresztnév
 */
function splitHungarianName(nameStr) {
    nameStr = trimStr(nameStr);
    var ind = nameStr.indexOf(" ");
    if (ind == -1) return ["", nameStr];
    else return [ nameStr.substr(0, ind), nameStr.substr(ind+1) ];
}

function stringEndsWith(str, suffix) {
    return str.indexOf(suffix, str.length - suffix.length) !== -1;
}
    
function isNumbersOnly(name, errorMsg) {
    var obj = getFormElement(name);
    if (obj == undefined) return;
    if (errorMsg == undefined) errorMsg = "Csak számokat használhat";

    if (obj.val() != NumbersOnly(obj.val()))
        ak_errors.push( {id : name, error: errorMsg} );
}

function isPhoneNumber(name, errorMsg) {
    var obj = getFormElement(name);
    if (obj == undefined) return;
    if (errorMsg == undefined) errorMsg = "Csak számokat, kötőjelet és szóközt használhat";

    var dateRegEx = /^[0-9 \-]*$/i;
    if (obj.val().search(dateRegEx) == -1)
        ak_errors.push( {id : name, error: errorMsg} );
}

function isValidDate(name, errorMsg) {
    var obj = getFormElement(name);
    if (obj == undefined) return;
    if (errorMsg == undefined) errorMsg = "A dátumnak ÉÉÉÉ-HH-NN formátumúnak kell lennie";

    var dateRegEx = /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/i;
    if (obj.val().search(dateRegEx) == -1)
        ak_errors.push( {id : name, error: errorMsg} );
}

function isValidNumber(name, minValue, maxValue, errorMsg) {
    var obj = getFormElement(name);
    if (obj == undefined) return;
    if (errorMsg == undefined) errorMsg = "A szám értéke nem megfelelő";

    var n = Number(obj.val());
    if (isNaN(n) ||
        (minValue != undefined && n < minValue) ||
        (maxValue != undefined && n > maxValue))
        ak_errors.push( {id : name, error: errorMsg} );
}

function isNotEmpty(name, errorMsg) {
    var obj = getFormElement(name);
    if (obj == undefined) return;
    if (errorMsg == undefined) errorMsg = "A mező kitöltése kötelező";

    if (trimStr(obj.val()) == "")
        ak_errors.push( {id : name, error: errorMsg} );
}

function isLengthAppropriate(name, minLength, maxLength, errorMsg) {
    var obj = getFormElement(name);
    if (obj == undefined) return;
    if (errorMsg == undefined) errorMsg = "A mező hossza nem megfelelő";

    var l = trimStr(obj.val()).length;
    if ((minLength != undefined && l < minLength) ||
        (maxLength != undefined && l > maxLength))
        ak_errors.push( {id : name, error: errorMsg} );
}


function isSpecialValue(name, value, errorMsg) {
    var obj = getFormElement(name);
    if (obj == undefined) return;
    if (errorMsg == undefined) errorMsg = "A mező értéke nem megfelelő";

    if (obj.val() != value)
        ak_errors.push( {id : name, error: errorMsg} );
}

function isValidEmail(name, errorMsg) {
    var obj = getFormElement(name);
    if (obj == undefined) return;
    if (errorMsg == undefined) errorMsg = "Nem megfelelő e-mail cím";

    if (!isValidEmailAddress(obj.val()))
        ak_errors.push( {id : name, error: errorMsg} );
}

function isValidEmailAddress(address) {
    var emailRegEx = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
    return address.search(emailRegEx) != -1;
}

// *** CURRENCY FORMATTER
// Handle events
function enforceCurrencyFormatHandler(evt) {
    doEnforceCurrencyFormat(evt.target);
}
// Do enforcing (may be called seperately)
function doEnforceCurrencyFormat(target) {
    var targetObj = $(target);
    targetObj.val( tabCurrencyString( targetObj.val() ) );
}
// Register
function enforceCurrencyFormat(name) {
    var obj = getFormElement(name);
    if (obj == undefined) return;
    obj.unbind("keyup", enforceCurrencyFormatHandler);
    obj.unbind("change", enforceCurrencyFormatHandler);
    obj.bind("keyup", enforceCurrencyFormatHandler);
    obj.bind("change", enforceCurrencyFormatHandler);
    obj.change();
}
// Cancel enforcement
function cancelCurrencyFormat(name) {
    var obj = getFormElement(name);
    if (obj == undefined) return;
    
    obj.val( NumbersOnly( obj.val() ) );
}

// *** DATE CAPITAL FORMATTER
// Handle events
function enforceDateFormatHandler(evt) {
    doEnforceDateFormat(evt.target);
}
// Do enforcing (may be called seperately)
function doEnforceDateFormat(target) {
    var targetObj = $(target);
    targetObj.val( formatCrmDateString( targetObj.val() ) );
}
// Register
function enforceDateFormat(name) {
    var obj = getFormElement(name);
    if (obj == undefined) return;
    obj.unbind("keyup", enforceDateFormatHandler);
    obj.unbind("change", enforceDateFormatHandler);
    obj.bind("keyup", enforceDateFormatHandler);
    obj.bind("change", enforceDateFormatHandler);
    obj.change();
}

// *** FIRST CAPITAL FORMATTER
// Handle events
function enforceFirstCapitalFormatHandler(evt) {
    doEnforceFirstCapitalFormat(evt.target);
}
// Do enforcing (may be called seperately)
function doEnforceFirstCapitalFormat(target) {
    var targetObj = $(target);
    targetObj.val( forceFirstLettersCapitalString( targetObj.val() ) );
}
// Register
function enforceFirstCapitalFormat(name) {
    var obj = getFormElement(name);
    if (obj == undefined) return;
    obj.unbind("blur", enforceFirstCapitalFormatHandler);
    obj.bind("blur", enforceFirstCapitalFormatHandler);
    obj.change();
}


// Visszaadja egy stringből a számokat
function NumbersOnly(str)
{
    if (str == undefined) return "";
    var patt1 = new RegExp("[0-9]","g");
    var result = str.match(patt1);
    if (result == null)
    {
        return "";
    }
    else
    {
        return result.join('');
    }
}

// Számmá próbálja konvertálni egy string számértékeit
function Number2(str)
{
    if (str == undefined) return "";
    nstr = NumbersOnly(str.toString());
    if (nstr ==  "") return 0;
    else return Number(nstr);
}

// Egy formelem értékét próbálja számmá konvertálni (probably unused)
function parseNumber(sender)
{
    if (sender.value === '') return; // ha üres, nem formázunk semmit
    sender.value = Number2(sender.value);
}

// Egy számértéket tároló formelemet formáz meg pénznembe (probably unused)
function formatCurrency(sender, noCurrencySuffix)
{
    if (sender.value === '') return; // ha üres, nem formázunk semmit
    str = Number2(sender.value) + '';
    for(i=str.length-3;i>0;i-=3)
    {
            str = str.substr(0,i) + "," + str.substr(i);
    }
    sender.value = str + " Ft";
}

// Egy pénzértéket tároló stringet tagol
function tabCurrencyString(str)
{
    if (str == "") return "";
    str = Number2(str) + '';
    for(i=str.length-3;i>0;i-=3)
    {
        str = str.substr(0,i) + " " + str.substr(i);
    }
    return str;
}

// Ellenőrzi, hogy egy elem értéke megfelelő határok közt mozog-e
function checkBounds(sender, a, b)
{
    num = Number2(sender.value);
    if (num < a) num = a;
    if (num > b) num = b;
    sender.value = String(num);
    return true;
}

function getNumVal(id)
{
    if (hkFormPrefix == undefined) hkFormPrefix = '';
    return Number2($('#'+hkFormPrefix+id).val());
}
function setNumVal(id, value, nanFallback, suffix, digits)
{
    if (hkFormPrefix == undefined) hkFormPrefix = '';
    if (undefined == nanFallback) nanFallback = "";
    if (undefined == suffix) suffix = "";

    if (isNaN(value) || !isFinite(value) )
    {
        // Ha nem szám, vagy hibás
        newval = nanFallback;
    }
    else
    {
        // Ha számérték
        if (undefined == digits)
        {
            newval = value;
        } 
        else
        {
            newval = value.toFixed(digits);
        }
        newval += suffix;
    }
    $('#'+hkFormPrefix+id).val(newval).change();
}
function toCurrency(id)
{
    if (hkFormPrefix == undefined) hkFormPrefix = '';
    formatCurrency($('#'+hkFormPrefix+id)[0]);
}
function forceFirstLettersCapital(sender)
{
    sender.value = forceFirstLettersCapitalString(sender.value);
}
function forceFirstLettersCapitalString(val)
{
    newVal = '';
    val = val.split(' ');
    for(var c=0; c < val.length; c++) {
        newVal += val[c].substring(0,1).toUpperCase() + val[c].substring(1,val[c].length).toLowerCase() + ' ';
    }
    // trim
    newVal = trimStr(newVal);
    return newVal;
}
function formatCrmDate(sender)
{
    sender.value = formatCrmDateString(sender.value);
}
function formatCrmDateString(inputStr)
{
    str = NumbersOnly(inputStr).toString();
    newstr = '';
    if (str.length > 4 || str.length == 4 && inputStr.substr(4,1) == '-') newstr = str.substr(0, 4) + "-";
    else newstr = str.substr(0);
    if (str.length > 6 || str.length == 6 && inputStr.substr(7,1) == '-') newstr += str.substr(4, 2) + "-";
    else newstr += str.substr(4);
    if (str.length >= 8) newstr += str.substr(6, 2);
    else newstr += str.substr(6);
    return newstr;
}
function trimStr(str) {
    if (str == undefined) return "";
    return str.replace(/^\s+|\s+$/g, '');
}
function setLabel(elementId, htmlData) {
    $('#'+elementId).parent().prev().html(htmlData);
}

// Listbox funkciók
function htmlentities (string) {
    return $('<div/>').text(string).html();
}
function listboxClear(listboxId) {
    $("#" + listboxId).children().remove();
}
function listboxAddItem(listboxId, value, label) {
    if (label == undefined) label = value;
    $("#" + listboxId).append(
        '<option value="'+htmlentities(value)+'">'+htmlentities(label)+'</option>'
    );
}
function listboxAddItems(listboxId, items) {
    for(var i=0;i<items.length;i++)
        listBoxAddItem(listboxId, items[i][0],items[i][1]);
}
function listboxFillNumbers(listboxId, min, max, step, prefix, suffix) {
    if (prefix == undefined) prefix = "";
    if (suffix == undefined) suffix = "";
    
    for(var i=min;i<=max;i+=step) {
        listboxAddItem(listboxId, i, prefix+i+suffix);
    }
}

// Load Page function
function lp(str)
{
    top.location = LinkBase + str;
}

function jumpToValue(selObj, prefix, suffix){
    if (prefix == undefined) prefix = "";
    if (suffix == undefined) suffix = "";
    var value = selObj.options[selObj.selectedIndex].value;
    
    if (value == "") alert("Kérem, válasszon ki egy értéket!");
    else lp(prefix + value + suffix);
}
