var door;

if (door == undefined) {
    door = {}
}

if (door.footer == undefined) {
    door.footer = {}
}

door.footer.config = {
    CONTAINER:                 'footerNew',
    MAX_HISTORY_NUM:           4,
    MAX_RECOMMEND_PER_PAGE:    6,
    STATUS_UNLOADED:           'unuploaded',
    STATUS_LOADING:            'uploading',
    STATUS_LOADED:             'uploaded',

    HISTORY_NO_IMAGE:          'http://lvimg.jp/door-chintai/noimage.JPG/52x52-f1-q70',
    RECOMMEND_NO_IMAGE:        'http://lvimg.jp/door-chintai/noimage.JPG/70x70-f1-q70',
    RECOMMEND_TEMPLATE:        '<div class="list"><dl><dt class="img"><a href="/detail_r/${id}.htm" target="_blank"><img src="${image}" alt=""></a></dt><dd class="layout">${room_layout}</dd><dd class="price"><span class="number">${house_rent_number}</span>${house_rent_unit}</dd><dd class="shiki">${deposit}</dd><dd class="rei">${key_money}</dd><dd class="location">${address}</dd></dl></div>',
    RECOMMEND_NULL_TEMPLATE:   '<div class="list"><dl><dt class="img"><img src="${image}" alt=""></dt><dd class="layout">${room_layout}</dd><dd class="price"><span class="number">${house_rent_number}</span>${house_rent_unit}</dd><dd class="shiki">${deposit}</dd><dd class="rei">${key_money}</dd><dd class="location">${address}</dd></dl></div>',
    RECOMMEND_WAITING_TEMPLATE:'<div style="padding-top:105px; text-align:center;height:200px;width:530px"><img src="/img/front/common/ajax-loader.gif"></div>',

    HISTORY_TEMPLATE:          '<li><dl><dd class="icon">1</dd><dt class="img"><a href="/detail_r/${id}.htm" target="_blank"><img src="${image}"></a></dt><dd class="details"><p class="layout">${simple_room_layout}</p><p class="price"><span class="number">${house_rent_number}</span>${house_rent_unit}</p><p class="shiki">${simple_deposit}</p><p class="rei">${simple_key_money}</p></dd><dd class="location">${address}</dd></dl></li>',
    HISTORY_NULL_TEMPLATE:     '<li><dl><dd class="icon"></dd><dt class="img"><img src="/img/front/common/thumb_footer_detail_no_s.png"></dt><dd class="details">該当する物件がありません</dd></dl></li>',
    HISTORY_WAITING_TEMPLATE:  '<div style="padding-top:105px; text-align:center;height:200px;width:270px"><img src="/img/front/common/ajax-loader.gif"></div>'
}

door.footer.manager = function() {
    this.history   = new door.footer.history(jQuery('#footerNew .footerHistory ol').first()[0]);
    this.recommend = new door.footer.recommend(jQuery('#footerSliderBg ul').first());
}

door.footer.manager.prototype = {

    exec: function() {
        var _manager = this;
        jQuery(window).scroll(function() {
            if (_manager.canView(_manager.history.container) || _manager.canView(_manager.recommend.container)) {
                _manager.load();
            }
        });
    },

    load: function() {
        this.history.load();
        this.recommend.load();
    },

    canView: function(element) {
        return !this.isAboveTheTop(element) && !this.isBellowTheBottom(element);
    },

    isAboveTheTop: function(element) {
        return jQuery(window).scrollTop() >= jQuery(element).parent().offset().top + jQuery(element).parent().height();
    },

    isBellowTheBottom: function(element) {
        return jQuery(window).scrollTop() + jQuery(window).height() <= jQuery(element).parent().offset().top;
    }
}

door.footer.recommend = function(container) {
    this.container  = container;
    this.status     = door.footer.config.STATUS_UNLOADED;
    this.url        = '/rent/recommendJson/';
    this.currentBox = null;
    jQuery.template("recommendTemplate", door.footer.config.RECOMMEND_TEMPLATE);
    jQuery.template('recommendNullTemplate', door.footer.config.RECOMMEND_NULL_TEMPLATE);
    jQuery.template('recommendWaitingTemplate', door.footer.config.RECOMMEND_WAITING_TEMPLATE);
}

door.footer.recommend.prototype = {
    load: function() {
        if (this.status == door.footer.config.STATUS_UNLOADED) {
            this.addWaitingImage();
            this.doLoad();
            this.status = door.footer.config.STATUS_LOADING;
        }
    },

    doLoad: function() {
        var _recommend = this;
        jQuery.getJSON(this.url,
        function(json) {
            jQuery(_recommend.container).empty();
            jQuery(json).each(function(i) {
                _recommend.append(this, i + 1);
            });
            _recommend.appendLastPage(jQuery(json).length);
            _recommend.status = door.footer.config.STATUS_LOADED;
            _recommend.removeWaitingImage();
            _recommend.addSlider();
        });
    },

    addWaitingImage: function() {
        jQuery(this.container.parent()).children().hide();
        jQuery(this.container.parent()).append(jQuery.tmpl('recommendWaitingTemplate').attr('id', 'footerRecommendWaiting'));
    },

    removeWaitingImage: function() {
        jQuery(this.container.parent()).find('#footerRecommendWaiting').remove();
        jQuery(this.container.parent()).children().fadeIn(500);
    },

    addSlider: function() {
        var footer_slider_manager = new door.slider.manager({
            elemId:          'footerSliderBg',
            prevId:          'prevBtn',
            nextId:          'nextBtn',
            showPointer:     false,
            controlsShow:    false,
            speed:           700
        });
    },

    append: function(bukken, no) {
        if (no % door.footer.config.MAX_RECOMMEND_PER_PAGE == 1) {
            this.renewBox();
        }
        jQuery(this.currentBox).append(this.getBukken(bukken, no));
    },

    appendLastPage: function(bukkenNum) {
        if (this.currentBox != null) {
            var maxBukkenNumPerPage = door.footer.config.MAX_RECOMMEND_PER_PAGE;
            for (var i=0; i < maxBukkenNumPerPage - bukkenNum % maxBukkenNumPerPage; i++) {
                if (bukkenNum % maxBukkenNumPerPage == 0) {
                    break;
                }
                jQuery(this.currentBox).append(this.getNullBukken());
            }
            jQuery(this.container).append(jQuery(this.currentBox).clone(true));
        }
    },

    renewBox: function() {
        if (this.currentBox != null) {
            jQuery(this.container).append(jQuery(this.currentBox).clone(true));
        }
        this.currentBox = document.createElement('li');
    },

    getNullBukken: function() {
        return jQuery.tmpl('recommendNullTemplate', {
            image: '/img/front/common/thumb_footer_detail_no.png',
            room_layout: '',
            house_rent_number: '--',
            house_rent_unit: '万円',
            deposit: '-',
            key_money: '-',
            address: '該当する物件がありません'
        });
    },

    getBukken: function(bukken, no) {
        bukken.image = this.getImageSrc(bukken);
        bukken = this.fixBukkenAddress(bukken);
        var divTag = jQuery.tmpl('recommendTemplate', bukken);
        if (no % door.footer.config.MAX_RECOMMEND_PER_PAGE == 1) {
            divTag.addClass('first');
        }
        return divTag;
    },

    fixBukkenAddress: function(bukken) {
        if (bukken.address.length > 14) {
            bukken.address = bukken.address.replace(bukken.pref.name, '').slice(0, 14);
        }
        return bukken;
    },

    getImageSrc: function(bukken) {
        var src;
        if ((src = this.doGetImageSrc(bukken, 'aspect')) || (src = this.doGetImageSrc(bukken, 'layout'))) {
            return src;
        }
        return bukken.image.length ? bukken.image[0].path : door.footer.config.RECOMMEND_NO_IMAGE;
    },

    doGetImageSrc: function(bukken, category) {
        for (i = 0; i < bukken.image.length; i++) {
            if (bukken.image[i].category == category) {
                return bukken.image[i].path;
            }
        }
    }
}

door.footer.history = function(container) {
    this.container = jQuery(container);
    this.status    = door.footer.config.STATUS_UNLOADED;
    this.url       = '/rent/historyJson/';
    jQuery.template('historyTemplate', door.footer.config.HISTORY_TEMPLATE);
    jQuery.template('historyNullTemplate', door.footer.config.HISTORY_NULL_TEMPLATE);
    jQuery.template('historyWaitingTemplate', door.footer.config.HISTORY_WAITING_TEMPLATE);
}

door.footer.history.prototype = {
    load: function() {
        if (this.status == door.footer.config.STATUS_UNLOADED) {
            this.addWaitingImage();
            this.doLoad();
            this.status = door.footer.config.STATUS_LOADING;
        }
    },

    doLoad: function() {
        var _history = this;
        jQuery.getJSON(
            this.url,
            function(json) {
                jQuery(_history.container).find('li').remove();
                jQuery(json).each(function(i) {
                    _history.append(this, i + 1);
                });
                _history.appendNullBukken(jQuery(json).length);
                _history.status = door.footer.config.STATUS_LOADED;
                _history.removeWaitingImage();
            }
        );
    },

    addWaitingImage: function() {
        jQuery(this.container.parent()).append(jQuery.tmpl('historyWaitingTemplate').attr('id', 'footerHistoryWaiting'));
    },

    removeWaitingImage: function() {
        jQuery(this.container.parent()).find('#footerHistoryWaiting').remove();
        jQuery(this.container.parent()).children().fadeIn(500);
    },

    append: function(bukken, no) {
        if (no > door.footer.config.MAX_HISTORY_NUM) {
            return;
        }
        jQuery(this.container).append(this.generateBukken(bukken, no));
    },

    appendNullBukken: function(no) {
        for (i = no+1; i <= door.footer.config.MAX_HISTORY_NUM; i++) {
            jQuery(this.container).append(this.generateNullBukken(i));
        }
    },

    generateNullBukken: function(no) {
        return jQuery.tmpl('historyNullTemplate').addClass('rank' + no);
    },

    generateBukken: function(bukken, no) {
        var imageSrc = this.getImageSrc(bukken);
        bukken.image = imageSrc;
        return jQuery.tmpl('historyTemplate', bukken).addClass('rank' + no);
    },

    getImageSrc: function(bukken) {
        if ((src = this.doGetImageSrc(bukken, 'aspect')) || (src = this.doGetImageSrc(bukken, 'layout'))) {
            return src;
        }
        return bukken.image.length ? bukken.image[0].path : door.footer.config.HISTORY_NO_IMAGE;
    },

    doGetImageSrc: function(bukken, category) {
        for (i = 0; i < bukken.image.length; i++) {
            if (bukken.image[i].category == category) {
                return bukken.image[i].path;
            }
        }
    }
}
