function initUserInformationModule() {
    jQuery('#btnCloseEast').button({
        icons: {
            primary: 'ui-icon-arrowstop-1-e'
        },
        text: false
    });
    jQuery('#acdUserNavigation').accordion({
        active: 0,
        fillSpace: true
    });
    jQuery('#us_partner_names').keyup(function() {
        var  searchFilter = $(this).val();
        $.each($('#usPartner').find('li'), function(listIndex, listItem) {
            var searchTest = new RegExp(searchFilter, 'i');
            var searchText = $(listItem).find('div').first().html();
            if (searchTest.test(searchText))
                $(listItem).show();
            else
                $(listItem).hide();
        });
    });
    jQuery('#us_guest_names').keyup(function() {
        var  searchFilter = $(this).val();
        $.each($('#usGuest').find('li'), function(listIndex, listItem) {
            var searchTest = new RegExp(searchFilter, 'i');
            var searchText = $(listItem).find('div').first().html();
            if (searchTest.test(searchText))
                $(listItem).show();
            else
                $(listItem).hide();
        });
    });
    $('button[name=btnRemoveSearch]').button({
        icons: {
            primary: 'ui-icon-circle-close'
        },
        text: false
    }).bind('click', function() {
        var searchInput = $(this).prev();
        $(searchInput).val('');
        if ($(searchInput).attr('id') == 'us_partner_names')
            $('#usPartner').find('li').show();
        else
            $('#usGuest').find('li').show();
    });

    $('#frmAddGuest').ajaxForm();
    $('input[name=us_arrival],input[name=us_departure]').datepicker({
        dateFormat: 'dd/mm/yy'
    });
    $('button[name=btnAddGuest]').button({
        icons: {
            primary: 'ui-icon-circle-plus'
        },
        text: true
    }).bind('click', function() {
        $('#usGuestForm').show();
    });
    $('button[name=btnDeactivateGuest]').button({
        icons: {
            primary: 'ui-icon-circle-minus'
        },
        text: true
    }).bind('click', function() {
        var guestlist = $('#usGuest').find('ul');
        var user = $(guestlist).find('li.ui-state-highlight');
        var us_id = $(user).attr('id').substr(11);
        
        $.getJSON('../file/guest/'+us_id+'/disable', function(response) {
            if (response.status == 0) {
                $(user).remove();
                $('#acdItemRoutesFrom').hide();
                $('#usrRouteList').find('li').remove();
                var tmpLayer = getVectorLayerByType('temporary');
                if (tmpLayer !== null) {
                    tmpLayer.removeAllFeatures();
                }
                
                notifyInfo({
                    message: {
                        title: $.r3msgs.hint,
                        text: $.r3msgs.userSuccessfulDisabled
                    }
                });
                
                $('button[name=btnDeactivateGuest]').button('disable');
            }
        });
    }).button('disable');
    $('button[name=btnSave]').button({
        icons: {
            primary: 'ui-icon-disk'
        }
    }).bind('click', function() {
        $('#frmAddGuest').ajaxSubmit({
            dataType: 'json',
            success: function(response) {
                if (response.status != 0) {
                    var msg = $.r3msgs.save_failed  + ":\n";
                    for(i in response.errors)
                        msg += " - " + response.errors[i] + "\n";
                    alert(msg);
                    return false;
                }

                // add new guest to list
                var data = {
                    guests: [
                    {
                        us_id: response.user.us_id,
                        us_name: response.user.us_name,
                        us_email: response.user.us_email,
                        us_arrival: response.user.us_arrival,
                        us_departure: response.user.us_departure
                    }
                    ]
                }
                var guestList = $('#usGuest').find('ul');
                addListItemsGuest(guestList, data, true);

                notifyInfo({
                    message: {
                        title: $.r3msgs.hint,
                        text: $.r3msgs.user_successfull_created
                    }
                });
                $('#frmAddGuest').clearForm();
                $('#usGuestForm').hide();
                return true;
            }
        });
    });
    $('button[name=btnAbort]').button({
        icons: {
            primary: 'ui-icon-cancel'
        }
    }).bind('click', function() {
        $('#usGuestForm').hide();
    });

    if (isAuth()) {
        loadUserInformation();
    } else {
        clearModule2Load();
    }
}

function setAccordionHeight() {
    // TODO: calc hidden h3
    $('#acdUserNavigation').accordion( "resize" );
    var maxHeight = parseInt($('.ui-accordion-content-active').css('height'));
    if (maxHeight > 0)
        $('.ui-accordion-content').css('height', maxHeight - 40);
}
function handleAccordion(data) {
    for(id in data.accordion) {
        if (!data.accordion[id]) {
            $('#'+id).hide().next().hide();
        } else {
            $('#'+id).show();
        }
    }
    setAccordionHeight();
}

function handleAutocompleteFilter(data) {
    for(id in data.acFilter) {
        if (!data.acFilter[id])
            $('#'+id).hide();
        else
            $('#'+id).show();
    }
}

function loadUserInformation() {
    showLoading($.r3msgs.loadingMyInformation);
    $.getJSON('../file/mysettings', function(data) {
        if (data.status != 0)
            return false;
        $('#myUserName').html($.r3msgs.welcome + ' ' + data.user);
        if ($('#spt_id').val() > 0) {
            $('#mySportType').html($.r3msgs.routingtype + ': ' + $('#spt_id').find('option:selected').text()).show();
        } else {
            $('#mySportType').hide();
        }
        $('#layerPartner').val(data.layerPartner);
        handleAccordion(data);
        handleAutocompleteFilter(data);
        if (!data.layerPartner) {
            var tmpLayer = getVectorLayerByType('partner');
            if (tmpLayer !== null) {
                removeVectorLayerByType('partner');
                map.removeLayer(tmpLayer);
            }
        }
        mylayout.show( 'east', true );
        $('#acdUserNavigation').accordion('resize');

        // add partner list
        if (typeof data.partners != 'undefined') {
            var partnerList = $('#usPartner').find('ul');
            addListItemsPartner(partnerList, data);
        }

        // add guest list
        var guestList = $('#usGuest').find('ul');
        addListItemsGuest(guestList, data, $(guestList).find('li').length > 0);
        
        if (data.routes.length == 0) {
            $('#myRouteList').hide();
            $('#myNoRouteList').show();
            clearModule2Load();
            stopLoading();
            return false;
        }

        $('#myNoRouteList').hide();
        var usrRouteList = jQuery('#myRouteList');
        addListItemsRoute(usrRouteList, 'my_rte-', data);
        $(usrRouteList).show();
        clearModule2Load();
        stopLoading();
    });
}

function clearUserInformation() {
    if (mylayout === undefined)
        return false;
    mylayout.hide( 'east' );
    $('#myRouteList').find('li').remove();
    $('#us_partner_names').val('');
    $('#us_guest_names').val('');
    $('#us_partner_id').val('');
    $('#us_guest_id').val('');
    clearPartnerInformation();
    clearGuestInformation();
}

function loadPartnerInformation(us_id) {
    showLoading($.r3msgs.loadingPartnerInformation);
    $.getJSON('../file/partner/'+us_id, function(data) {
        if (data.status != 0)
            return false;
        handleAccordion(data);

        $('#usrName').html(data.user.us_name);

        // handle guest filter
        if (data.hasGuests) {
            $('#acNoGuest').hide();
            $('#acGuest').show();
            
            var guestList = $('#usGuest').find('ul');
            addListItemsGuest(guestList, data);
        } else {
            $('#acGuest').hide();
            $('#acNoGuest').show();
        }

        // handle poi information
        if (data.poi.poi_id !== undefined) {
            var poiTitle = "&nbsp;<div style=\"float:left\">"+data.poi.poi_name+"</div><div style=\"float:right\"><span class=\"ui-icon ui-icon-close\"></span></div>";
            $('#usPoiName').html(poiTitle);
            $('#usPoiName').find('span.ui-icon-close').click(function() {
                $('#usPartner').find('li').removeClass("ui-state-highlight");
                clearPartnerInformation();
                clearGuestInformation();
                loadUserInformation();
            });

            $('#usPoiText').html(data.poi.poi_text);
            if (data.poi.image_preview.doc_id !== undefined) {
                $('#usPoiPreview').attr('src', '../file/document/'+data.poi.image_preview.doc_id+'/thumb');
                $('#usPoiPreview').attr('alt',data.poi.image_preview.doc_title);
                $('#usPoiPreview').attr('title',data.poi.image_preview.doc_title);
            } else {
                $('#usPoiPreview').attr('src', '../images/spacer.gif');
                $('#usPoiPreview').attr('alt', '');
                $('#usPoiPreview').attr('title', '');
            }
            jQuery('#usPoi').bind('click', function() {
                abortRouting();
                jQuery('#btnSelectFeature').trigger('click');

                var poi_id = data.poi.poi_id;
                var tmpLayer = getVectorLayerByType('poi');
                var feature = tmpLayer.getFeatureById(poi_id);

                if (feature != selectedFeature)
                    clickVector.unselectAll();
                
                clickVector.clickFeature(feature);
            });
            jQuery('#usPoi').bind('mouseover', function() {
                jQuery(this).addClass('ui-state-highlight');
                var poi_id = data.poi.poi_id;
                var tmpLayer = getVectorLayerByType('poi');
                var feature = tmpLayer.getFeatureById(poi_id);
                if (feature != selectedFeature)
                    hoverVector.select(feature);
            });
            jQuery('#usPoi').bind('mouseout', function() {
                jQuery(this).removeClass('ui-state-highlight');
                var poi_id = data.poi.poi_id;
                var tmpLayer = getVectorLayerByType('poi');
                var feature = tmpLayer.getFeatureById(poi_id);
                if (feature != selectedFeature)
                    hoverVector.unselect(feature);
            });
            $('#usPoi').show();
        } else {
            $('#usPoi').hide();
        }

        if (data.routes.length == 0) {
            $('#usrRouteList').hide();
            $('#usrNoRouteList').show();
            stopLoading();
            return false;
        }

        $('#usrNoRouteList').hide();
        var usrRouteList = jQuery('#usrRouteList');
        addListItemsRoute(usrRouteList, 'us_rte-', data);
        $(usrRouteList).show();
        
        stopLoading();
    });
}

function clearPartnerInformation() {
    $('#acGuest').show();
    $('#acNoGuest').hide();
    $('#usPoi').hide();
    $('#usPoiName').html('');
    $('#usPoiText').html('');
    $('#usPoiPreview').attr('src', '../images/spacer.gif');
    $('#usPoiPreview').attr('alt', '');
    $('#usPoiPreview').attr('title', '');
    jQuery('#usPoi').unbind('click');
    jQuery('#usPoi').unbind('mouseover');
    jQuery('#usPoi').unbind('mouseout');
    $('#acdItemRoutesFrom').hide();
    $('#usrRouteList').find('li').remove();
    var tmpLayer = getVectorLayerByType('temporary');
    if (tmpLayer !== null) {
        tmpLayer.removeAllFeatures();
    }
}

function loadGuestInformation(us_id) {
    showLoading($.r3msgs.loadingGuestInformation);

    $.getJSON('../file/guest/'+us_id, function(data) {
        if (data.status != 0)
            return false;
        handleAccordion(data);
        
        $('#usrName').html(data.user.us_name);
        
        if (data.routes.length == 0) {
            $('#usrRouteList').hide();
            $('#usrNoRouteList').show();
            stopLoading();
            return false;
        }

        $('#usrNoRouteList').hide();
        var usrRouteList = jQuery('#usrRouteList');
        addListItemsRoute(usrRouteList, 'us_rte-', data);
        $(usrRouteList).show();

        stopLoading();
    });
}

function clearGuestInformation() {
    $('#usGuest').find('li').remove();
    $('#acdItemRoutesFrom').hide();
    $('#usrRouteList').find('li').remove();
    var tmpLayer = getVectorLayerByType('temporary');
    if (tmpLayer !== null) {
        tmpLayer.removeAllFeatures();
    }
}

function addListItemsPartner(listSelector, data, append) {
    if (typeof data.guests == 'undefined')
        return false;

    if (!append)
        jQuery(listSelector).html('');

    var i = null;
    for(i in data.partners) {
        var item = "<li id=\"partner_us_id"+data.partners[i].us_id+"\" class=\"ui-widget-content\">" +
        "<div>"+data.partners[i].us_name+"</div>" +
        "<div>E-Mail: "+data.partners[i].us_email+"</div>" +
        "</li>";
        jQuery(listSelector).append(item);
    }
    $(listSelector).find('li').click(function() {
        $('#usGuest').find('li').removeClass("ui-state-highlight");
        $('#us_guest_names').val('');
        
        $(this).addClass("ui-state-highlight").siblings().removeClass("ui-state-highlight");
        loadPartnerInformation( $(this).attr('id').substr(13) );
    });
}

function addListItemsGuest(listSelector, data, append) {
    if (typeof data.guests == 'undefined')
        return false;

    if (!append)
        jQuery(listSelector).html('');
    
    var i = null;
    for(i in data.guests) {
        var item = "<li id=\"guest_us_id"+data.guests[i].us_id+"\" class=\"ui-widget-content\">" +
        "<div>"+data.guests[i].us_name+"</div>" +
        "<div>E-Mail: "+data.guests[i].us_email+"</div>" +
        "<div>"+$.r3msgs.arrival+": "+data.guests[i].us_arrival+"</div>" +
        "<div>"+$.r3msgs.departure+": "+data.guests[i].us_departure+"</div>" +
        "</li>";
        jQuery(listSelector).append(item);
    }

    $(listSelector).find('li').click(function() {
        $('#usPartner').find('li').removeClass("ui-state-highlight");
        
        $(this).addClass("ui-state-highlight").siblings().removeClass("ui-state-highlight");
        $('button[name=btnDeactivateGuest]').button('enable');
        loadGuestInformation( $(this).attr('id').substr(11) );
    });
}
