//==============================
//помощни функции
//==============================

//функция проверяваща дали е скрит даден обекст с определено id
function is_shown(id)
{
    if(  (get_el(id).style.display == 'none') || (get_el(id).style.display == '') ) {
        return false;
    } else {
        return true;
    }
}

//скрива обект с ID=id
function hide_object(id)
{
    if(arguments.length > 1) {
        get_el(id).style.visibility = 'hidden';
    } else {
        get_el(id).style.display = 'none';
    }
}

//показва обект с ID=id
function show_object(id)
{
    if(arguments.length > 1) {
        get_el(id).style.visibility = 'visible';
		get_el(id).style.display = 'block';
    } else {
        get_el(id).style.display = 'block';
    }
}

//връща обекта с ID=id
function get_el(id)
{
    return document.getElementById(id);
}

//връща елемент от формуляр form_name с име element_name
function get_form_el(form_name, element_name)
{
    return document.forms[form_name].elements[element_name];
}


var preloader_func_list = new Array();
var time_out_handlers = Array();

//това е фунцкия, която извиква друга със закъснение и при повторно активиране на закъснението нулира първото
function func_preloader( preload_function, timeout )
{
    func_name = preload_function.substring(0,preload_function.indexOf("("));
    found = -1;

    for(i=0; i<preloader_func_list.length; i++) {
        if(preloader_func_list[i] == func_name) {
            //тази функция е вече активирана
            found = i;
            break;
        }
    }

    if(found < 0) {
        //не е стартирано изчакване за тази функция - активира се
        preloader_func_list[preloader_func_list.length] = func_name ;
        time_out_handlers[time_out_handlers.length] = setTimeout(preload_function, timeout);
    } else {   //вече е стартирано изчакване за тази функция - реактивира се
        clearTimeout(time_out_handlers[found]);
        time_out_handlers[found] = setTimeout(preload_function, timeout);
    }
}

//==============================
// обслужващи XAJAX функции
//==============================

//зарежда в менюто списъка с населените места, започващи с дадена буква
function menu_filter( filter_str )
{
    xajax_menu_filter( filter_str );
}


//функция за разширено търсене
function advanced_search( )
{
    switch(arguments[0]) {
        default:
        case 'get_list':    //зарежда списъка с населените места започващи с дадена буква
            filter = get_form_el('adv_search', 'filter_place');
            if(filter.value.length == 0) {
                get_form_el('adv_search', 'place_id').value = '';
                hide_object('places_list');
                return;
            }
            //show_object('xajax_loading');
            xajax_advanced_search('get_list', filter.value);
            break;

        case 'select_place':    //при избиране на даден град от разширено търсене
            place_id = arguments[1];
            place_name = arguments[2];
            get_form_el('adv_search', 'place_id').value = place_id;
            get_form_el('adv_search', 'filter_place').value = place_name;
            hide_object('places_list');
            objectsResize();
            advanced_search('update_matches');
            break;

        case 'update_matches':  //(връщане) обновяване на броя на намерените хотели
            xajax_advanced_search('update_matches', xajax.getFormValues('adv_search'));
            break;
    }
}


// функция изпрати на приятел
function send_to_friend( )
{
    switch(arguments[0]) {
        case 'send': //изпращане на информацията
            form_name = arguments[1];
            mail_str = get_form_el(form_name, 'recipient_mail').value;
            if (!is_valid_mail(mail_str)) {
                get_el('send_to_friend_status_text_' + get_form_el(form_name, 'hotel').value).innerHTML = 'Моля въведете валиден e-mail адрес.';
                show_object('send_to_friend_status_box_' + get_form_el(form_name, 'hotel').value);
            } else {
                if (get_form_el(form_name ,'captcha_code_' + get_form_el(form_name, 'hotel').value).value == 'Код') {
                    get_el('send_to_friend_status_text_' + get_form_el(form_name, 'hotel').value).innerHTML = 'Моля въведете кода.';
                    show_object('send_to_friend_status_box_' + get_form_el(form_name, 'hotel').value);
                } else {
                    xajax_send_to_friend('send', xajax.getFormValues(form_name));
                }
            }
            break;

        default:
        case 'get_form': //изтегляне на форумляра
            hotel_id = arguments[1];
            if(is_shown('sendtofriend_' + hotel_id)) {
                hide_object('sendtofriend_' + hotel_id);
                objectsResize();
            } else {
                xajax_send_to_friend('get_form', hotel_id);
            }
            break;
    }
}

//функция обслужваща формуляра за регистрация на нов потребител
function register_user( )
{
    switch(arguments[0]) {
        case 'username_check':
            username = arguments[1];
            get_form_el('reg_form','pending_request').value = '1';
            xajax_register_user('username_check', username);
            break;

        case 'captcha_check':
            username = arguments[1];
            get_form_el('reg_form','pending_request').value = '1';
            xajax_register_user('captcha_check', username);
            break;
    }
}


function edit_user_profile( )
{
    switch(arguments[0]) {
        case 'get_places_list':
            get_form_el('edit_profile_form', 'place_id').value = '';
            filter = get_form_el('edit_profile_form', 'edit_profile_place');
            if(filter.value.length == 0) {
                hide_object('places_list');
                return;
            } else {
                if( filter.value.length > 0 ) {
                    xajax_edit_user_profile('get_places_list', filter.value);
                }
            }
            break;

        case 'select_place':
            check_form_field('edit_profile_form','edit_profile_place');
            place_id = arguments[1];
            place_name = arguments[2];
            get_form_el('edit_profile_form', 'edit_profile_place').value = place_name;
            get_form_el('edit_profile_form', 'place_id').value = place_id;
            hide_object('places_list');
            break;

        case 'captcha_check':
            username = arguments[1];
            xajax_edit_user_profile('captcha_check', username);
            break;
    }
}


//функция обслужваща зареждането на допълнитена информация за даден хотел
function hotel_more_info( )
{
    switch(arguments[0]) {
        case 'show_hide_info':
            hotel_id = arguments[1];
            div_id = arguments[2];
            lang = arguments[3];
            if(is_shown(div_id)) {
                hide_object(div_id);
            } else {
                xajax_hotel_more_info('get_hotel_images', hotel_id, div_id, lang );
            }
            break;

        case 'show_hotel_images':
            hotel_id = arguments[1];
            div_id = arguments[2];
            result = arguments[3];
            get_el('ms_' + hotel_id).innerHTML = result;

            minislides.init();
            //removing first LI in ULs with class 'minislides'
            _lists = document.getElementById(div_id).getElementsByTagName('ul');
            for( var _i=0; _i<_lists.length; _i++ ) {
                if( _lists[_i].className != 'minislides' ) continue;
                firstLI = _lists[_i].getElementsByTagName('li')[0];
                firstLI.parentNode.removeChild(firstLI);
            }
            show_object(div_id);
            break;
    }
    $('maincol').fireEvent('objectsResize');
}

//функция обслужваща зареждането на допълнитена информация за даден хотел
function users_admin( )
{
    switch(arguments[0])
    {
        case 'get_hotels_list':
            filter = get_form_el('edit_users_hotels', 'hotel_name');
            if(filter.value.length == 0) {
                hide_object('hotels_list');
                return;
            } else {
                if( filter.value.length > 0 ) {
                    xajax_users_admin('get_hotels_list',filter.value);
                }
            }
            break;

        case 'select_hotel':
            hotel_id = arguments[1];
            hotel_name = arguments[2];
            hotel_oblast_mqsto = arguments[3];
            select_new_hotel(hotel_name, hotel_id, hotel_oblast_mqsto);
            hide_object('hotels_list');
            break;
    }
}

//функция обслужваща формуляра за търсене и добавяне на хотели от страна на потребителя
function hotelSearchAdd() {
    switch (arguments[0]) {
        case 'get_places_list':
            get_form_el('add_hotel_form', 'place_id').value = '';
            filter = get_form_el('add_hotel_form', 'place');
            if(filter.value.length == 0) {
                hide_object('places_list');
                return;
            } else {
                if( filter.value.length > 0 ) {
                    get_form_el('add_hotel_form','pending_request').value = '1';
                    xajax_hotelSearchAdd('get_places_list', filter.value);
                }
            }
            break;

        case 'select_place':
            place_id = arguments[1];
            place_name = arguments[2];
            get_form_el('add_hotel_form', 'place').value = place_name;
            get_form_el('add_hotel_form', 'place_id').value = place_id;
            hide_object('places_list');
            break;

        case 'get_hotels_list':
            get_form_el('add_hotel_form', 'hotel_id').value = '';
            filter = get_form_el('add_hotel_form', 'hotel_name');
            if(filter.value.length == 0) {
                hide_object('hotels_list');
                return;
            } else {
                if( filter.value.length > 0 ) {
                    get_form_el('add_hotel_form','pending_request').value = '1';
                    xajax_hotelSearchAdd('get_hotels_list', filter.value);
                }
            }
            break;

        case 'select_hotel':
            hotel_id = arguments[1];
            hotel_name = arguments[2];
            get_form_el('add_hotel_form', 'hotel_name').value = hotel_name;
            get_form_el('add_hotel_form', 'hotel_id').value = hotel_id;
            hide_object('hotels_list');
            break;
    }
}

//функция за зареждане на списък с градове по написана или избрана буква
function show_places( )
{
    switch(arguments[0]) {
        default:
        case 'get_list':    //зарежда списъка с населените места започващи с дадена буква
            filter = get_form_el('places_form', 'filter_place');
            if(filter.value.length == 0) {
                hide_object('places_list');
                objectsResize();
                return;
            }
            xajax_show_places('get_list', filter.value);
            break;
    }
}

// функция вземи линк за хотел
function get_hotel_link( )
{
    switch(arguments[0]) {
        case 'some': //изпращане на информацията
        break;

        default:
        case 'get_form': //изтегляне на форумляра
            hotel_id = arguments[1];
            if(is_shown('gethotellink_' + hotel_id)) {
                hide_object('gethotellink_' + hotel_id);
                objectsResize();
            } else {
                xajax_get_hotel_link('get_form', hotel_id);
            }
            break;
    }
}

function get_hotels()
{
    namePart = $('nameSearch').getValue();
    if (namePart != '') {
        xajax_get_hotel_list(namePart);
    }
}

function get_towns()
{
    namePart = $('townSearch').getValue();
    if (namePart != '') {
        xajax_get_town_list(namePart);
    }
}

function get_hotels_count()
{
    namePart = $('nameSearch').getValue();
    if (namePart != '') {
        xajax_get_hotel_list_count(namePart);
    }
}
