// inverting items checked flag, depending on passed 'checkedFlag' and
// filling selectedItems string with values of the selected items,
// that name will be passed as parameter 'elementsName';
// for example, if we will have selected items with values 1 and 2,
// then 'selectedItems' string will contain '1,2';
// this function returns'selectedItems' string, amount of selected items
// and whole amount of proceed items.
// P.S.: if you don't want to change items selection, then skip or pass undefined value in 'checkedFlag' parameter.
function invertSelection( elementsName, checkedFlag ) {

    var selectedItems = '';
    var selectedItemsAmount = 0;

    var elementsList = document.getElementsByName( elementsName );
    for( var i = 0; i < elementsList.length; i++ )
    {
        // invert selection, only if passed defined checkedFlag
        if ( checkedFlag != undefined ) { elementsList[i].checked = checkedFlag; }

        if ( elementsList[i].checked ) {
            if ( selectedItems ) { selectedItems = selectedItems + ','; }
            selectedItems = selectedItems + elementsList[i].value;
            selectedItemsAmount++;
        }

    };

    return [ selectedItems, selectedItemsAmount, elementsList.length ];

};

function ajaxRequest( responseElementId, ajaxUrl, ajaxType, ajaxData, successFunction ) {
    $.ajax( {
        url: ajaxUrl,
        data: ajaxData,
        type: ajaxType,
        success: function ( response ) {
            if ( typeof( response ) == 'object' ) {
                if ( response['error'] ) {
                    showAlert( undefined, 'Внимание!', response['error'] );
                } else {
                    if ( !response['html'] ) { response['html'] = ''; }
                    if ( successFunction ) { successFunction( response ); }
                    if ( response['html'] && responseElementId ) { $( "#" + responseElementId ).html( response['html'] ); }
                }
            } else {
                if ( !response ) { response = ''; }
                var responseObject = new Object();
                responseObject['html'] = response;
                responseObject['error'] = '';
                if ( successFunction ) { successFunction( responseObject ); }
                if ( responseElementId ) { $( "#" + responseElementId ).html( response ); }
            }
        },
        error: function () {
        },
        complete: function () {
        },
    } );
};

function showAlert( ownerId, alertTitleHtml, alerMessagetHtml, okFunction ) {
    $( "#messageContainer" ).html( '<br /><p>' + alerMessagetHtml + '</p>' );
    $( "#messageContainer" ).dialog( {
        modal: true,
        title: alertTitleHtml,
        closeOnEscape: true,
        beforeClose: function( event, ui ) { $( '#' + ownerId ).blur(); },
        buttons: {
            Ok: function() {
                $( this ).dialog( "close" );
                if ( okFunction ) { okFunction(); }
            }
        }
    } );
};

function showDialog( dialogTitleHtml, dialogMessageHtml, yesButtonText, noButtonText, cancelButtonText, yesFunction, noFunction, cancelFunction ) {
    $( "#messageContainer" ).html( "<br /><p>" + dialogMessageHtml + "</p>" );
    $( "#messageContainer" ).dialog( {
        modal: true,
        title: dialogTitleHtml,
        closeOnEscape: true,
        buttons: [
            {
                text: yesButtonText,
                click: function() {
                    $( this ).dialog( "close" );
                    if ( yesFunction ) { yesFunction(); }
                }
            },
            {
                text: noButtonText,
                click: function() {
                    $( this ).dialog( "close" );
                    if ( noFunction ) { noFunction(); }
                }
            },
            {
                text: cancelButtonText,
                click: function() {
                    $( this ).dialog( "close" );
                    if ( cancelFunction ) { cancelFunction(); }
                }
            }
        ]
    } );
    $('.ui-dialog :button').blur();
    $('.ui-dialog :button:eq(2)').focus();
};

function showFreeow( title, message ) {
    $("#freeow").show();
    var opts = {};
    opts.classes = [ "gray", "backround" ];
    $("#freeow").freeow( '<b>' + title + '</b>', message, opts );
};

function submitForm( formsElements, locationString ) {

    var getUrl = locationString;

    for ( element in formsElements ){

        if ( $( "#" + formsElements[element] ) && $( "#" + formsElements[element] ).val() && ( $( "#" + formsElements[element] ).attr( "type" ) != 'checkbox' || $( "#" + formsElements[element] ).is( ':checked' ) ) ) {

            var parameterValue;

            if ( formsElements[element] == "page" || formsElements[element] == "view" || formsElements[element] == "title" ) {
                parameterValue = $( "#" + formsElements[element] ).val();
            } else {
                parameterValue = Base64.encode( $( "#" + formsElements[element] ).val() );
            }

            getUrl = getUrl + "/" + formsElements[element] + "/" + parameterValue;

        }

    };

    document.location = getUrl;

};

function submitLongForm( formsElements, locationString ) {

    var encodedParameters = '';
    var clearParameters = '';

    for ( element in formsElements ){

        if ( $( "#" + formsElements[element] ) && $( "#" + formsElements[element] ).val() && ( $( "#" + formsElements[element] ).attr( "type" ) != 'checkbox' || $( "#" + formsElements[element] ).is( ':checked' ) ) ) {

            var parameterValue;

            if ( formsElements[element] == "page" || formsElements[element] == "view" || formsElements[element] == "title" || formsElements[element] == "item" ) {
                parameterValue = $( "#" + formsElements[element] ).val();
                clearParameters = clearParameters + '/'+ formsElements[element] + "/" + parameterValue;
            } else {

                parameterValue = Base64.encode( $( "#" + formsElements[element] ).val() );

                if ( encodedParameters ) { encodedParameters = encodedParameters + '~'; }
                encodedParameters = encodedParameters + formsElements[element] + "~" + parameterValue;

            }

        }

    };

    if ( encodedParameters ) { encodedParameters = '/filter/' + encodedParameters; }

    document.location = locationString + encodedParameters + clearParameters;

};

function clearForm( formsElements ) {

    for ( element in formsElements ){
        $( "#" + formsElements[element] ).val( "" );
    };

};

function inputKeyDownHandler( event, eventAction ) {
    var keycode = ( event.keyCode ? event.keyCode : ( event.which ? event.which : event.charCode ) );
    if ( keycode == 13 ) {
        eventAction();
        return false;
    } else  {
        return true;
    }
};

function show_hide_info( id_block, id_img ) {

    if ( document.getElementById( id_block ).style.display == "block" ) {
        document.getElementById( id_img ).src = '/web/icons/plus-button.png';
        document.getElementById( id_block ).style.display = "none";
    } else {
        document.getElementById( id_block ).style.display = "block";
        document.getElementById( id_img ).src = '/web/icons/minus-button.png';
    }

};

function preloadImages( arrayOfImages ) {
    $( arrayOfImages ).each( function() {
        $('<img/>')[0].src = this;
    } );
};

