
// usage: $(div_id_2).update(AA_Config.loader);
var AA_Config = {
  AA_INSTAL_PATH: '/aaa/',
  SESS_NAME:      '',
  SESS_ID:        '',
  loader:         '<img src="/aaa/images/loader.gif" border="0" width="16" height="16">',
  icon_new:       '<img src="/aaa/images/icon_new.gif" border="0" width="17" height="17">',
  icon_close:     '<img src="/aaa/images/icon_close.gif" border="0" width="17" height="17">'
}


// now AA specific functions
function AA_HtmlToggle(link_id, link_text_1, div_id_1, link_text_2, div_id_2) {
    if ( $(jqid(div_id_1)).is(':visible') ) {
        $(jqid(div_id_1)).hide('fast');
        $(jqid(div_id_2)).show('fast');
        $(jqid(link_id)).html(link_text_2);
        $(jqid(link_id)).addClass("is-on");
    } else {
        $(jqid(div_id_2)).hide('fast');
        $(jqid(div_id_1)).show('fast');
        $(jqid(link_id)).html(link_text_1);
        $(jqid(link_id)).removeClass("is-on");
    }
}


function AA_Ajax(div_id, url, param, onload) {
    AA_AjaxCss(jqid(div_id), url, param, onload);
}

function AA_AjaxCss(selector, url, param, onload) {
    $(selector).html(AA_Config.loader);
    $(selector).load(url, param, onload);
}

/** selector_update is optional and is good for updating table rows, where we want to show/hide tr, but update td */
function AA_HtmlAjaxToggleCss(link_id, link_text_1, link_text_2, selector_hide, url, selector_update) {
    var link = jqid(link_id);
    if ( $(link).hasClass('is-on')) {
        $(selector_hide).hide('fast');
        $(link).html(link_text_1);
        $(link).toggleClass('is-on');
    } else {
        $(selector_hide).show('fast');
        $(link).toggleClass('is-on');
        // not loaded from remote url, yet?
        if ( !$(link).hasClass('aa-loaded')) {
            $(link).addClass('aa-loaded');
            AA_AjaxCss(selector_update ? selector_update : selector_hide, url);
        }
        $(link).html(link_text_2);
    }
}


/** calls AA responder with permissions of current user and displays returned
 *  html code into div_id
 *  Usage:
 *     FrmSelectEasy('from_slice', $slice_array, $from_slice, 'onchange="DisplayAaResponse(\'fieldselection\', \'Get_Fields\', {slice_id:this.options[this.selectedIndex].value})"');
 *     echo '<div id="fieldselection"></div>';
 **/
function DisplayAaResponse(div_id, method, params) {
    var sess = (AA_Config.SESS_NAME != '') ? AA_Config.SESS_NAME + '=' + AA_Config.SESS_ID : 'AA_CP_Session=' + GetCookie('AA_Sess');
    AA_AjaxCss(jqid(div_id), AA_Config.AA_INSTAL_PATH + 'central/responder.php?' + sess + '&command='+ method, {parameters: params});
}


function jqescape(s) {
    // escape all special characters (like [])
    return s.replace(/([^a-zA-Z0-9_-])/g, '\\$1')
}

function jqid(s) {
    // escape all special characters (like [])
    return '#' + jqescape(s);
}

/** This function replaces the older one - proposeChange
 *  The main chane is, that now we use standard AA input names:
 *   aa[i<item_id>][<field_id>][]
 */
function AA_SendWidgetAjax(id) {
    var valdiv = jqid('ajaxv_'+id);
    var code   = $(valdiv + ' *').serialize();
    $(valdiv).append(AA_Config.loader);

    var alias_name = $(valdiv).attr('data-aa-alias');

    code += '&inline=1&ret_code_enc='+alias_name;

    $.post(AA_Config.AA_INSTAL_PATH + 'filler.php3', code, function(data) {
        var res;
        // just one iteration, but without the loop we are not able to get the item_id
        for (var item_id in data) {
            res = data[item_id];
            $(valdiv).html(res.length>0 ? res : '--');
            break;
        }
        $(valdiv).attr("data-aa-edited", "0");
    });
}

/** This function replaces the older one - proposeChange
 *  The main chane is, that now we use standard AA input names:
 *   aa[i<item_id>][<field_id>][]
 */
function AA_SendWidgetLive(id) {
    $$('*[id ^="'+id+'"]').invoke('addClassName', 'updating');
    var valdivid   = 'widget-' + id;
    var code = Form.serialize(valdivid);

    code += '&inline=1';  // do not send us whole page as result

    new Ajax.Request(AA_Config.AA_INSTAL_PATH + 'filler.php3', {
        parameters: code,
        requestHeaders: {Accept: 'application/json'},
        onSuccess: function(transport) {
            $$('*[id ^="'+id+'"]').invoke('removeClassName', 'updating');
        }
    });
}




function displayInput(valdivid, item_id, fid) {
    var valdiv = jqid(valdivid);

    // already editing ?
    switch ($(valdiv).attr('data-aa-edited')) {
       case '1': return;
       case '2': $(valdiv).attr("data-aa-edited", "0");  // the state 2 is needed for Firefox 3.0 - Storno not works
                 return;
    }
    var alias_name = $(valdiv).attr('data-aa-alias');
    $(valdiv).attr("data-aa-oldval", $(valdiv).html());

    AA_AjaxCss(valdiv, AA_Config.AA_INSTAL_PATH + 'misc/proposefieldchange.php', {
        field_id:   fid,
        item_id:    item_id,
        alias_name: alias_name,
        aaaction:   'DISPLAYINPUT'
    }, function(data) {
        $(this).attr('data-aa-edited', '1');
        var aa_input = $(this).children('select,textarea,input').first();
        $(aa_input).focus();  // select the input field (<select> or <input>)
        $(aa_input).keydown( function(event) {
            switch (event.which) {
            case 13: $(this).nextAll('input.save-button').click();   break; // Enter
            case 27: $(this).nextAll('input.cancel-button').click(); break; // Esc
//            case 9:  $(this).nextAll('input.save-button').click(); $(this).closest('div.ajax_container').nextAll('div.ajax_container').click(); break; // Tab
            case 9:  // Tab
                     // we must grab the next input right now - after save-button click we have no current div
                     var next_input = $('div.ajax_container').eq($('div.ajax_container').index($(this).parents('div.ajax_container'))+1);
                     $(this).nextAll('input.save-button').click();
                     $(next_input).click();
                     break;
            }
        });
    });
}

function _getInputContent(input_id) {
    var content    = Array();
    var i          = 0;
    var add_empty  = false;
    var val        = '';

    var jq_input   = jqid(input_id+'[]');

    if ( $(jq_input).length ) {
        val = $(jq_input).val();
        if ( $(jq_input).is('input:checkbox:not(:checked)')) { // val contains value also for unchecked checkboxesunchecked checkbox is undefined
            val = '0';   // should be changed to '' I think
        }
        content = content.concat( val );
    }

    while ( $(jq_input = jqid(input_id+'['+ i +']')).length ) {
        val = $(jq_input).val();
        if ( $(jq_input).is('input:checkbox:not(:checked)')) { // val contains value also for unchecked checkboxesunchecked checkbox is undefined
            add_empty = true;
        } else {
            content = content.concat( val );
        }
        i++;
    }
    if ( add_empty && content.count < 1 ) {
        content.push('');  // it is different from push('0') above, because single chbox is 1|0, but multi is value..value|''
    }
    return content;
}

/** This function replaces the older one - proposeChange
 *  The main chane is, that now we use standard AA input names:
 *   aa[i<item_id>][<field_id>][]
 */
function DoChange(input_id) {
    var valdiv   = jqid('ajaxv_'+input_id);
    var alias_name = $(valdiv).attr('data-aa-alias');
    var content    = _getInputContent(input_id);

    AA_AjaxCss(valdiv, AA_Config.AA_INSTAL_PATH + 'misc/proposefieldchange.php', {
        input_id:   input_id,
        alias_name: alias_name,
        aaaction:   'DOCHANGE',
        'content[]':    content
    }, function(data) {
        $(jqid('ajaxch_'+input_id)).text('');
        $(valdiv).attr("data-aa-edited", "0");

    });
}

/** updates database for given iten and field by Ajax
 */
function DoChangeLive(input_id) {

    $('*[id ^="'+jqescape(input_id)+'"]').addClass('updating');
    var content    = _getInputContent(input_id);

    AA_AjaxCss(valdiv, AA_Config.AA_INSTAL_PATH + 'misc/proposefieldchange.php', {
        input_id:   input_id,
        alias_name: '',
        aaaction:   'DOCHANGE',
        'content[]':    content
    }, function(data) {
        $('*[id ^="'+jqescape(input_id)+'"]').removeClass('updating');
    });
}

/** return back old value - CANCEL pressed on AJAX widget */
function DisplayInputBack(input_id) {
    var valdiv   = jqid('ajaxv_'+input_id);
    $(valdiv).html( $(valdiv).attr('data-aa-oldval') );
    $(valdiv).attr('data-aa-edited', '2');
}

/* Cookies */

function SetCookie(name, value) {
   var expires = new Date();
   expires.setTime (expires.getTime() + (1000 * 60 * 60 * 24 * 1)); // a day
   document.cookie = name + "=" + escape(value) +
                      "; expires=" + expires.toGMTString() +
                      "; path=/";
    // + ((expires == null) ? "" : ("; expires=" + expires.toGMTString()))
    // + ((path == null)    ? "" : ("; path=" + path))
    // + ((domain == null)  ? "" : ("; domain=" + domain))
    // + ((secure == true)  ? "; secure" : "");
}

function getCookieVal(offset) {
    var endstr = document.cookie.indexOf(";", offset);
    if (endstr == -1) {
        endstr = document.cookie.length;
    }
    return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie(name) {
    var arg  = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i    = 0;
    while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg) {
            return getCookieVal(j);
        }
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break;
    }
    return null;
}

function DeleteCookie(name) {
    var exp = new Date();
    exp.setTime (exp.getTime() - 1);
    var cval = GetCookie (name);
    document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString() + "; path=/";
}

function ToggleCookie(name,val) {
    if ( GetCookie(name) != val ) {
        SetCookie(name,val);
    } else {
        DeleteCookie(name);
    }
}

function NewId() {
    // Private array of chars to use
    var chars = '0123456789abcdefgh'.split('');

    var uuid = [];

    // we do not want to have 0 as the first char in pair
    for (var i = 0; i < 16; i++) {
        uuid[2*i]   = chars[0 | (Math.random()*15+1)];
        uuid[2*i+1] = chars[0 | (Math.random()*16)];
    }
    return uuid.join('');
}

// --------------------------------------------
function addToKosik(produkt_variant, mnozstvi, viewid) {

    var kid;
    viewid = viewid || 29;
    kid    = GetCookie('kosik_id');
    if (kid) {
        addPolozkaToKosik(kid, produkt_variant, mnozstvi, "#obsah-kosiku", viewid);
    } else {

        $.post(AA_Config.AA_INSTAL_PATH + 'filler.php3', {
            inline: 1,
            slice_id: '2d81635df9bbff2a7deebd89808f3cfb',
            "aa[n1_2d81635df9bbff2a7deebd89808f3cfb][highlight_______][]": 1,
            "aa[n1_2d81635df9bbff2a7deebd89808f3cfb][category_______1][]": 'pokladna'
        }, function(data) {
            // just one iteration, but without the loop we are not able to get the item_id
            for (kid in data) {
                SetCookie('kosik_id', kid);
            }
            addPolozkaToKosik(kid, produkt_variant, mnozstvi, "#obsah-kosiku", viewid);
            AA_AjaxCss("#doporucujeme", '/aaa/view.php3?vid=35&cmd[35]=o-35-'+ produkt_variant+'&als[XLANG___]='+getCurrentLanguage());
        });
    }
}

function AddCisloFaktury(kid) {
    var param = {
            inline: 1,
            ok_url: "http://biofarma.cz/aaa/view.php3?vid=71&nocache=1&cmd[71]=o-71-"+ kid+'&als[XLANG___]='+getCurrentLanguage(),
            slice_id: '2d81635df9bbff2a7deebd89808f3cfb'
         };
    param["aa[u"+kid+"][number__________][]"] = 111;

    $("#page-faktura").load(AA_Config.AA_INSTAL_PATH + 'filler.php3', param);
}

function HotovoNachstano(kid, skid) {
    var param = {
            slice_id: '2d81635df9bbff2a7deebd89808f3cfb'
         };
    param["aa[u"+kid+"][category________][]"] = 3;
    $.post(AA_Config.AA_INSTAL_PATH + 'filler.php3', param, function(data) {
        document.location = "http://admin.biofarma.cz/cz/objednavky#obj"+ skid;
    });

}

function getCurrentLanguage() {
    var txt = new String(document.location);
    return (txt.indexOf('biofarma.cz/en') == -1) ? 'cz' : 'en';
}

function addPolozkaToKosik(kosik, produkt_variant, mnozstvi, kosdiv, viewid) {

    // we want to invalidate the pages for this user to reload pages with new kosik
    SetCookie('changed', new Date().getTime());

    AA_AjaxCss(kosdiv, AA_Config.AA_INSTAL_PATH + 'filler.php3', {
            inline: 1,
            ok_url: "http://biofarma.cz/aaa/view.php3?vid="+ viewid +"&nocache=1&cmd["+ viewid +"]=o-"+ viewid +"-"+ kosik+'&als[XLANG___]='+getCurrentLanguage(),
            slice_id: '38b46aeec3b2bbb70ba48b31957ed322',
            "aa[n1_38b46aeec3b2bbb70ba48b31957ed322][relation________][]": kosik,
            "aa[n1_38b46aeec3b2bbb70ba48b31957ed322][relation_______1][]": produkt_variant,
            "aa[n1_38b46aeec3b2bbb70ba48b31957ed322][text____________][]": mnozstvi
        });
}

function addPolozkaToKosikAdmin(kosik, produkt_variant, mnozstvi) {
    addPolozkaToKosik(kosik, produkt_variant, mnozstvi, "#page-faktura", 71);
}

function addPolozkaToKosikSilent(kosik, produkt_variant, mnozstvi) {
        $.post(AA_Config.AA_INSTAL_PATH + 'filler.php3', {
            inline: 1,
            slice_id: '38b46aeec3b2bbb70ba48b31957ed322',
            "aa[n1_38b46aeec3b2bbb70ba48b31957ed322][relation________][]": kosik,
            "aa[n1_38b46aeec3b2bbb70ba48b31957ed322][relation_______1][]": produkt_variant,
            "aa[n1_38b46aeec3b2bbb70ba48b31957ed322][text____________][]": mnozstvi
        });
}

function deleteFromKosikAdmin(kosik, polozka_id) {
    // we want to invalidate the pages for this user to reload pages with new kosik

    if (!confirm('Tímto vymažeš položku i z objednávky a jen těžko ji půjde vrátit zpět. Opravdu chceš Položku vymazat?')) {
        return;
    }

    var param = {
            inline: 1,
            ok_url: "http://biofarma.cz/aaa/view.php3?vid=71&nocache=1&cmd[71]=o-71-"+ kosik+'&als[XLANG___]='+getCurrentLanguage(),
            slice_id: '38b46aeec3b2bbb70ba48b31957ed322'
         };
    param["aa[u"+polozka_id+"][status_code_____][]"] = 2;

    $("#page-faktura").load(AA_Config.AA_INSTAL_PATH + 'filler.php3', param);
}

function ReloadFaktura(kosik) {
    $("#page-faktura").load("/aaa/view.php3?vid=71&nocache=1&cmd[71]=o-71-"+ kosik+'&als[XLANG___]='+getCurrentLanguage(), '', function() {});
}


function deleteFromKosik(kosik, polozka_id, prehled) {
    // we want to invalidate the pages for this user to reload pages with new kosik
    SetCookie('changed', new Date().getTime());

    if(typeof(prehled) == 'undefined') {
        prehled = 29;
    }

    var param = {
            inline: 1,
            ok_url: "http://biofarma.cz/aaa/view.php3?vid="+prehled+"&nocache=1&cmd["+prehled+"]=o-"+prehled+"-"+ kosik+'&als[XLANG___]='+getCurrentLanguage(),
            slice_id: '38b46aeec3b2bbb70ba48b31957ed322'
         };
    param["aa[u"+polozka_id+"][status_code_____][]"] = 3;

    $("#obsah-kosiku").load(AA_Config.AA_INSTAL_PATH + 'filler.php3', param, function() {});
}

function QuantuitySub(fld) {
    $(jqid(fld)).val(Math.max(1, parseInt($(jqid(fld)).val())-1));
}
function QuantuityAdd(fld) {
    $(jqid(fld)).val(Math.max(1, parseInt($(jqid(fld)).val())+1));
}

function ChangeVariant(sitem_id, sb) {
    var variant;
    variant = $(sb).val().split('|');
    $('#cena'+sitem_id).html('<strong>'+variant[1]+',-</strong>/'+variant[2]+'</strong>');
    $('#variant'+sitem_id).val(variant[0]);
    $('.cls2hide'+sitem_id).css('visibility', (variant[3]==1) ? 'visible' : 'hidden');
    $('#jednotka'+sitem_id).html(variant[2]);
    $('#dostupnost'+sitem_id).html(variant[4]);
}

