var MyList = {};
MyList.PageLoader = {
    _loading : false,
    _cover : null,
    _loadImg : null,
    getSmallImage : function() {
        if (!this._loadImg) {
            img = new Image();
            img.src = "/img/loading_small.gif";
            img.width=180;
            img.height=26;
            this._loadImg = img;
        }
        return this._loadImg;
    },
    start : function() {
        this._loading = true;
        var size = Ozein.Screen.getSize();
        var cover = document.createElement('div');
        Element.setStyle(cover, {
            backgroundColor : '#fff',
            opacity : 0.9,
            position: 'absolute',
            width   : '100%',
            height  : size[1] + 'px',
            left    : 0,
            top     : 0,
            zIndex  : 1000
        });
        document.body.appendChild(cover);
        cover.innerHTML = '<div class="ozein-reload-msg"></div>';
        var img = document.createElement('img');
        img.style.width = '330px';
        img.style.height = '140px';
        img.style.position = 'absolute';
        cover.appendChild(img);
        Ozein.Screen.setCenterPosition(img);
        img.src = '/img/loading.gif';
        this._cover = cover;
    },
    isLoading : function () {
        return this._loading;
    },
    stop : function() {
        document.body.removeChild(this._cover);
        this._loading = false;
    }
};
MyList.Process = {
    _lock : false,
    lock : function() {
        MyList.Process._lock = true;
    },
    isLocked : function(ts) {
        return MyList.Process._lock;
    },
    free : function() {
        MyList.Process._lock = false;
    }
};
MyList.Strage = new Class.create();
MyList.Strage.prototype = {
    _list : null,
    initialize : function(){
        this._list = {};
    },
    add : function (key, value) {
        if (this.has(key)) {
            this.remove(key);
        }
        if (typeof(value.cloneNode)=='undefined') {
            this._list[key] = value;
        } else {
            this._list[key] = value.cloneNode(true);
        }
    },
    remove : function (key) {
        delete this._list[key];
    },
    get : function (key) {
        return this._list[key];
    },
    has : function (key) {
        return (typeof(this._list[key])=='undefined') ? false : true;
    },
    count : function () {
        var counter=0;
        $H(this._list).each(function(){
            counter++;
        }.bind(counter));
        return counter;
    }
};
MyList.Sidebar = {
    // properties
    _cache          : null,
    _cacheEvf : null,
    _cacheSort      : {
        selecter : null, 
        index    : {history : 0, favorite : 0, inquire : 0},
        disabled : {history : false, favorite : false, inquire: false}
    },
    _baseNode       : null,
    _counterElement : null,
    _currentTab     : null,
    _currentChecked : 0,
    _uiSecStyle     : {
        mouseover : {filter : "alpha(opacity=100)" , opacity : 1},
        mouseout  : {filter : "alpha(opacity=30)"  , opacity : 0.3}
    }, 
    _modeOptions    : {
        normal : {
            id: 'memLstSec',
            width : 276
        },
        comp : {
            id: 'memCmpLstSec',
            width : 96
        }
    },
    _explanationHtml : {
        history  : '<p class="dftMes">閲覧履歴はまだありません。</p>',
        favorite : '<p class="dftMes">お気に入りに登録された物件はまだありません。</p>',
        inquire  : '<p class="dftMes">問合せした物件はまだありません。</p>'
    },
    _atOnceBtnSet : {
        comp : {
            on  : '/img/btn_memltcmp.gif', 
            off : '/img/btn_memltcmp_off.gif'
        },
        inq  : {
            on  : '/img/btn_memltinq.gif', 
            off : '/img/btn_memltinq_off.gif'
        }
    },
    
    // functions
    initialize : function(baseNode) {
        this.resetCache();
        this._baseNode = baseNode;
        
        // memTab
        var lis = $('memTab').getElementsByTagName('li');
        for (var i=0,len=lis.length; i<len; i++) {
            var typeName = '';
            switch(lis[i].firstChild.className) {
                case 'history'  : 
                    typeName = 'history';
                    break;
                case 'favorite' : 
                    typeName = 'favorite';
                    break;
                case 'inqFin'   : 
                    typeName = 'inquire';
                    break;
            }
            if (typeName) {
                if(lis[i].className=='current') {
                    this.evChangeTab(Event, typeName);
                }
                if (this._cacheEvf.has('evChangeTab')==true) {
                    Event.stopObserving(lis[i], 'click', this._cacheEvf.get('evChangeTab'));
                    this._cacheEvf.remove('evChangeTab');
                }
                this._cacheEvf.add('evChangeTab', this.evChangeTab.bindAsEventListener(this,typeName));
                Event.observe(lis[i], 'click', this._cacheEvf.get('evChangeTab'));
            }
        }
        
        // memLstUi
        this._initSort();
        var counterNodes = $('memLstUi').getElementsByClassName('bkToLst');
        var modeToNormalBtn;
        for(var i=0,len=counterNodes.length;i<len;i++) {
            modeToNormalBtn = counterNodes[i].childNodes[0];
            break;
        }
        if (this._cacheEvf.has('evModeToNormal')==true) {
            Event.stopObserving(modeToNormalBtn, 'click', this._cacheEvf.get('evModeToNormal'));
            this._cacheEvf.remove('evModeToNormal');
        }
        this._cacheEvf.add('evModeToNormal', this.evModeToNormal.bindAsEventListener(this));
        Event.observe(modeToNormalBtn, 'click', this._cacheEvf.get('evModeToNormal'));
        
        // memAtonce
        var elements = $('memAtonce').getElementsByTagName('input');
        for (var i=0, len=elements.length; i<len; i++) {
            var inputNode = elements[i];
            if (inputNode.type=='checkbox') {
                if (this._cacheEvf.has('evAtOnce')==true) {
                    Event.stopObserving(inputNode, 'click', this._cacheEvf.get('evAtOnce'));
                    this._cacheEvf.remove('evAtOnce');
                }
                this._cacheEvf.add('evAtOnce', this.evAtOnce.bindAsEventListener(this));
                Event.observe(inputNode, 'click', this._cacheEvf.get('evAtOnce'));
            }
        }
    },
    updateSidebarInfo : function(countChange) {
        var count = this.updateCount();
        this.updateSortSelecter(count);
        this.resetAtOnce();
        this.updateCompBtn();
        if (count==0) {
            this.resetCache(this._currentTab, true);
            $('memLst').innerHTML = this._explanationHtml[this._currentTab];
            MyList.Content.showExplanation();
        }
    },
    _initSort : function() {
        document.getElementsByAttribute('ozein_mylist', 'sort', 'memLstUi').each(function(selecter){
        if (!this._cacheSort.selecter) {
            this._cacheSort.selecter = selecter;
        }
        selecter.selectedIndex = this._cacheSort.index[this._currentTab];
        selecter.disabled = this._cacheSort.disabled[this._currentTab];
        if (this._cacheEvf.has('evChangeSort')==true) {
            Event.stopObserving(selecter, 'change', this._cacheEvf.get('evChangeSort'));
            this._cacheEvf.remove('evChangeSort');
        }
        this._cacheEvf.add('evChangeSort', this.evChangeSort.bindAsEventListener(this));
        Event.observe(selecter, 'change', this._cacheEvf.get('evChangeSort'));
        throw $break;
        }.bind(this));
    },
    evChangeSort : function (e) {
        Event.stop(e);
        this.closeBalloon();
        if (MyList.Process.isLocked()) {
            return;
        }
        
         MyList.Process.lock();
        // sorting
        var selecter = Event.element(e),
            sortType = selecter.options[selecter.selectedIndex].value,
            reverseType = false,
            targetList = $A(this._baseNode.getElementsByClassName('lstSec'));
        
        if(sortType.slice(-2)=='_r') {
            sortType = sortType.replace('_r','');
            reverseType = true;
        }
        targetList = targetList.sortBy(function(li) {
            eval('var data='+li.getAttribute('ozein_mylist_sort')+';');
            switch(sortType) {
                case 'price':
                case 'address':
                    data[sortType] = parseInt(data[sortType]);
                    break;
                case 'rimawari' :
                    data[sortType] = parseFloat(data[sortType]);
                    break;
            }
            return data[sortType];
        }.bind(sortType));
        if (reverseType == true) {
            targetList.reverse();
        }
        
        // rendering
        var li=null,
            ul = $('memLst').firstChild,
            memLstChilds = $A(ul.childNodes);
        while(li=memLstChilds.pop()) {
            ul.removeChild(li);
        }
        while(li=targetList.pop()) {
            ul.appendChild(li);
            // resetting list checked value & list class name
            if (li.className=='lstSec checked') {
                var ips = $A(li.getElementsByTagName('input'));
                if (ips.length>0 ) {
                    var ip = ips.pop();
                    if (ip.checked==false || ip.hasAttribute('checked')==false) {
                        ip.setAttribute('checked', 'checked');
                        ip.checked = true;
                    }
                }
            }
        }
        this.escapeSortSelecter();
        MyList.Process.free();
    },
    evChangeTab : function(e, typeTo) {
        var typeFrom = this._currentTab;
        Event.stop(e);
        this.closeBalloon();
        
        if (this._currentTab == typeTo && this._cache.has(typeTo)==true) {
            return;
        }
        if (MyList.Process.isLocked()) {
            return;
        }
        this.modeToNormal();
        this._changeTab(typeTo);
        this._escapeListToCache();
        this._currentTab = typeTo;
        this.updateList(typeTo);
    },
    _changeTab : function(typeTo) {
        var lis = $('memTab').getElementsByTagName('li');
        for(var i=0,len=lis.length;i<len;i++) {
            liNode = lis[i];
            if (typeTo=='inquire') {
                typeTo = 'inqFin';
            }
            if (liNode.firstChild.className == typeTo) {
                if (liNode.className != 'current') {
                    liNode.addClassName('current');
                }
            } else if (typeof(liNode.removeClassName)!='undefined') {
                liNode.removeClassName('current');
            }
        }
    },
    updateList : function (disp) {
        MyList.Process.lock();
        
        $A($('memLst').childNodes).each(function(node){node.parentNode.removeChild(node);});
        $('memLst').appendChild(MyList.PageLoader.getSmallImage());
        this.writeCount('-');
        var url = '/Mylist/get-'+disp+'/';
        if (this._cache.has(disp)) {
            if (!MyList.Process.isLocked()) return;
            
            var cacheElm = this._cache.get(disp);
            var onComplete;
            if (cacheElm) {
                var memLsts = $('memLst').childNodes;
                for(var i=0,len=memLsts.length;i<len;i++) {
                    memLsts[i].parentNode.removeChild(memLsts[i]);
                }
                $('memLst').appendChild(cacheElm);
                onComplete = this._initMemList(disp);
            }
            MyList.Process.free();
            if (onComplete) onComplete();
            this.updateSidebarInfo();
            return false;
        }
        if (!MyList.Process.isLocked()) {
            return ;
        }
        MyList.Process.lock();
        new Ajax.Request(MyList.Container.getBaseUrl(url), {
            method      : 'get',
            parameters    : {slt: MyList.Container.getSlt()},
            onSuccess   : function(httpObj) {
                if (!MyList.Process.isLocked()) return;
                this._changeTab(disp);
                var txt = httpObj.responseText;
                var onComplete = null;
                if (!txt) {
                    $('memLst').innerHTML='';
                    this._cacheSort.disabled[this._currentTab] = true;
                } else {
                    this._cacheSort.disabled[this._currentTab] = false;
                    $('memLst').innerHTML=txt;
                    onComplete = this._initMemList(disp);
                    Ozein.Invoker.invokeElement('memLst');
                }
                this.updateSidebarInfo();
                MyList.Process.free();
                if (onComplete) onComplete();
                if (MyList.PageLoader.isLoading()) {
                    MyList.PageLoader.stop();
                }
            }.bind(this),
            onFailure : function(httpObj) {
                MyList.Process.free();
                if (MyList.PageLoader.isLoading()) {
                    MyList.PageLoader.stop();
                }
                $('memLst').innerHTML="";
                this._cacheSort.disabled[this._currentTab] = true;
                this.updateSidebarInfo();
            }.bind(this)
        });
    },
    resetAtOnce : function() {
        var inputs = $('memAtonce').getElementsByTagName('input');
        var checkAtonce;
        for(var i=0,len=inputs.length;i<len;i++) {
            if (inputs[i].type=='checkbox') {
                checkAtonce = inputs[i];
            }
        }
        if (checkAtonce) {
            checkAtonce.checked = false;
            if (this.getCount()>0) {
                checkAtonce.disabled = false;
            } else {
                checkAtonce.disabled = true;
            }
        }
    },
    _initMemList : function (disp) {
        this._currentChecked = 0;
        MyList.Content.resetCurrentContent();
        var lstSecs = $('memLst').getElementsByClassName('lstSec'),
            currentCount = lstSecs.length;
        var fstReadBkn = null;
        if (currentCount>0) {
            this._cacheSort.disabled[this._currentTab] = false;
            for (var i=0; i<currentCount; i++) {
                if (i==0) {
                    fstReadBkn = this._initListSec(lstSecs[i]);
                } else {
                    this._initListSec(lstSecs[i]);
                }
            }
        } else {
            this._cacheSort.disabled[this._currentTab] = true;
        }
        
        if (fstReadBkn) {
            return MyList.Content.showDetail.bind(MyList.Content, fstReadBkn.bid, fstReadBkn.tab);
        }
        return MyList.Content.showExplanation.bind(MyList.Content);
    },
    _escapeListToCache : function() {
        var lstSecs = $('memLst').getElementsByClassName('lstSec'),
            currentCount = lstSecs.length;
        if (currentCount>0) {
            this._cache.add(this._currentTab, lstSecs[0].parentNode);
        } else {
            this._cache.add(this._currentTab, document.createElement('div'));
        }
    },
    resetSortList : function() {
        document.getElementsByAttribute('ozein_mylist', 'sort', $('memLstUi')).each(function(selecter){
                selecter.selectedIndex=0;
        }.bind(this));
    },
    _initListSec : function(lstSec, showDetailFirst) {
        // remove the functions from deleted bukken
        var isBukkenDeleted = false,
            inFavorite = false;
        if (parseInt(lstSec.getAttribute('ozein_mylist_bukken_status'))>2) {
            isBukkenDeleted = true;
        }
        var statusFavorite;
        eval('statusFavorite = '+ lstSec.getAttribute('ozein_mylist_status_favorite'));
        if (statusFavorite=="1") {
            inFavorite = true;
        }
        
        // implement the "dataSec" function
        var dataSec = lstSec.getElementsByClassName('dataSec')[0];
        var bukkenId = dataSec.getAttribute('ozein_mylist_detail');
        var mylistTab = lstSec.parentNode.getAttribute('ozein_mylist_tab');
        if (isBukkenDeleted==false) {
            var evfKey = 'getDetail' + bukkenId;
            var links = $A(dataSec.getElementsByTagName('a'));
            if (this._cacheEvf.has()) {
                var evFunc = this._cacheEvf.get(evfKey);
                for(var i=0,len=links.length;i<len;i++) {
                    Event.stopObserving(links[i], 'click', evFunc);
                }
                tis._cacheEvf.remove(evfKey);
            }
            this._cacheEvf.add(evfKey, this.getDetail.bindAsEventListener(this, dataSec,mylistTab));
            for(var i=0,len=links.length;i<len;i++) {
                Event.observe(links[i], 'click', this._cacheEvf.get(evfKey));
            }
        }
        // implement the "uiSec" functions
        var childs = lstSec.getElementsByClassName('uiSec');
        for (var i=0, lenI=childs.length; i<lenI; i++) {
            var uiSec = childs[i];
            // implements :hover
            if (this._cacheEvf.has('evLstSecMouseOver')) {
                this._cacheEvf.remove('evLstSecMouseOver')
            }
            this._cacheEvf.add('evLstSecMouseOver', this.evLstSecMouseOver.bindAsEventListener(this, uiSec));
            Event.observe(lstSec, 'mouseover', this._cacheEvf.get('evLstSecMouseOver'));
            
            if (this._cacheEvf.has('evLstSecMouseOut')) {
                this._cacheEvf.remove('evLstSecMouseOut')
            }
            this._cacheEvf.add('evLstSecMouseOut', this.evLstSecMouseOut.bindAsEventListener(this, uiSec));
            Event.observe(lstSec, 'mouseout' , this._cacheEvf.get('evLstSecMouseOut'));
            var lis = uiSec.getElementsByTagName('li');
            for (var j=0, lenJ=lis.length; j<lenJ; j++) {
                var className = lis[j].className;
                switch(className) {
                    case 'chk':
                        var inputs = $A(lis[j].getElementsByTagName('input'));
                        for(var k=0,len=inputs.length;k<len;k++) {
                            if(lstSec.hasClassName('checked') && inputs[k].checked==false) {
                                inputs[k].setAttribute('checked', 'checked')
                            }
                            var evFuncKey = 'observeListSec-'+bukkenId;
                            if (this._cacheEvf.has(evFuncKey)==true) {
                                Event.stopObserving(inputs[k], 'click', this._cacheEvf.get(evFuncKey));
                                this._cacheEvf.remove(evFuncKey);
                            }
                            this._cacheEvf.add(evFuncKey, this.observeListSec.bindAsEventListener(this));
                            Event.observe(inputs[k], 'click', this._cacheEvf.get(evFuncKey));
                            break;
                        }
                        break;
                    case 'del':
                        var evFuncKey = 'deleteBukken-'+bukkenId;
                        if (this._cacheEvf.has(evFuncKey)==true) {
                            Event.stopObserving(lis[j], 'click', this._cacheEvf.get(evFuncKey));
                            this._cacheEvf.remove(evFuncKey);
                        }
                        this._cacheEvf.add(evFuncKey, this.deleteBukken.bindAsEventListener(this));
                        Event.observe(lis[j], 'click', this._cacheEvf.get(evFuncKey));
                        break;
                }
            }
        }
        if (!isBukkenDeleted) {
            return {bid:bukkenId, tab:mylistTab};
        }
    },
    evLstSecMouseOver : function(e, uiSec){
        Event.stop(e);
        uiSec.setStyle(this._uiSecStyle.mouseover);
    },
    evLstSecMouseOut : function(e, uiSec){
        Event.stop(e);
        uiSec.setStyle(this._uiSecStyle.mouseout);
    },
    getCounterElement : function() {
        if (!this._counterElement) {
            var counterNodes = $('memLstUi').getElementsByClassName('count');
            for(var i=0,len=counterNodes.length;i<len;i++) {
                this._counterElement = counterNodes[i].childNodes[0];
                break;
            }
        }
        return this._counterElement;
    },
    getCount : function() {
        var lstSecs = $('memLst').getElementsByClassName('lstSec');
        return lstSecs.length;
    },
    writeCount : function(count) {
        var counter = this.getCounterElement();
        counter.innerHTML = count;
    },
    updateCount : function() {
        var count = this.getCount();
        this.writeCount(count);
        return count;
    },
    observeListSec : function(e){
        var input = Event.element(e);
        try{
            this.toggleListCheck(input, input.checked);
            this.updateCompBtn();
            this._escapeListToCache();
        } catch(e) {
            alert(e);
        }
    },
    toggleListCheck : function (input, checked) {
        if (input.disabled==true) {
            return;
        }
        var element = input;
        do {
            if (element.tagName.eqi('LI') && element.hasClassName('lstSec')) break;
            element = element.parentNode;
        } while (element);
        if (!element) return;
        
        if (checked) {
            input.setAttribute('checked', 'checked');
            element.addClassName('checked');
        } else {
            input.setAttribute('checked', null);
            element.removeClassName('checked');
        }
            input.checked = checked;
    },
    updateCompBtn : function()
    {
        if ($('memLst').firstChild && typeof($('memLst').firstChild.getElementsByClassName)!='undefined') {
            var checkedList = $('memLst').firstChild.getElementsByClassName('lstSec checked');
            this._currentChecked = checkedList.length;
        }
        
        var elements = $('memAtonce').getElementsByTagName('input');
        var btnAtonceComp, btnAtonceInq;
        for (var i=0, len=elements.length; i<len; i++) {
            var inputNode = elements[i];
            if (inputNode.parentNode.className=='compare') {
                btnAtonceComp = inputNode;
            } else if (inputNode.parentNode.className='inquire') {
                btnAtonceInq = inputNode;
            }
        }
        
        if (btnAtonceComp) {
            var evKey = '_evGetCompare';
            if (this._currentChecked>1 && this._currentChecked<=4) {
                if (btnAtonceComp.src != this._atOnceBtnSet.comp.on) {
                    btnAtonceComp.src=this._atOnceBtnSet.comp.on;
                }
                if (this._cacheEvf.has(evKey)==true) {
                    Event.stopObserving(btnAtonceComp, 'click', this._cacheEvf.get(evKey));
                    this._cacheEvf.remove(evKey);
                }
                this._cacheEvf.add(evKey, this._evGetCompare.bindAsEventListener(this, null));
                Event.observe(btnAtonceComp, 'click', this._cacheEvf.get(evKey));
            } else {
                if (this._cacheEvf.has(evKey)==true) {
                    Event.stopObserving(btnAtonceComp, 'click', this._cacheEvf.get(evKey));
                    this._cacheEvf.remove(evKey);
                }
                if (btnAtonceComp.src != this._atOnceBtnSet.comp.off) {
                    btnAtonceComp.src=this._atOnceBtnSet.comp.off;
                }
            }
        }
        if (btnAtonceInq) {
            var evKey = '_submitInquireAtOnce';
            if (this._currentChecked>0) {
                if (btnAtonceInq.src != this._atOnceBtnSet.inq.on) {
                    btnAtonceInq.src=this._atOnceBtnSet.inq.on;
                    if (this._cacheEvf.has(evKey)==false) {
                        this._cacheEvf.add(evKey, this._submitInquireAtOnce.bindAsEventListener(this));
                        Event.observe(btnAtonceInq, 'click', this._cacheEvf.get(evKey));
                    }
                }
            } else {
                if (this._cacheEvf.has(evKey)==true) {
                    Event.stopObserving(btnAtonceInq, 'click', this._cacheEvf.get(evKey));
                    this._cacheEvf.remove(evKey);
                }
                if (btnAtonceInq.src != this._atOnceBtnSet.inq.off) {
                    btnAtonceInq.src=this._atOnceBtnSet.inq.off;
                }
            }
        }
    },
    evAtOnce : function (e, node) {
        var checked = Event.element(e).checked;
        var inputs = this._getInputs();
        for(var i=0,len=inputs.length;i<len;i++) {
            if (inputs[i].checked != checked) {
                try {
                    this.toggleListCheck(inputs[i], checked);
                } catch (e) {
                    alert(e);
                    break;
                }
                }
            }
        this._escapeListToCache();
        this.updateCompBtn();
    },
    _evGetCompare : function(e, cols) {
        var bids = [];
        this._getInputs().each(function(input) {
            if (input.checked==true) bids.push(input.value);
        });
        if (bids.length<2 || bids.length>4) {
            alert('チェックは2～4つまでです');
            return false;
        }
        if (MyList.Process.isLocked()) {
            return;
        }
        this.modeToComp();
            var lstSecs = $('memLst').getElementsByClassName('lstSec');
            if (lstSecs.length > 0) {
                var mylistTab = lstSecs[0].parentNode.getAttribute('ozein_mylist_tab');
            }
            MyList.Content.showComp(bids, mylistTab, cols);
    },
    modeToComp : function() {
        this.closeBalloon();
        MyList.Content.closeExpandedImage();
        if (this._baseNode.id==this._modeOptions.comp.id) {
            return false;
        }
        this.sortSelecterHide();
        var printBtn = this.getPrintBtn();
        if (printBtn) printBtn.style.display="none";
        this._baseNode.id = this._modeOptions.comp.id;
        var to = (this._modeOptions.comp.width/this._modeOptions.normal.width)*100;
        new Effect.Scale(this._baseNode, to, {
            scaleX      : true,
            scaleY      : false,
            scaleContent: false,
            scaleMode   : {originalWidth : this._modeOptions.normal.width},
            scaleFrom   : 100,
            duration    : 0.5
        });
    },
    modeToNormal : function() {
        this.closeBalloon();
        MyList.Content.closeExpandedImage();
        if (this._baseNode.id==this._modeOptions.normal.id) {
            return false;
        }
        MyList.Content.modeToNormal();
        MyList.Content.showLoading();
        var to = (this._modeOptions.normal.width/this._modeOptions.comp.width)*100;
        new Effect.Scale(this._baseNode, to, {
            scaleX      : true,
            scaleY      : false,
            scaleContent: false,
            scaleMode   : {originalWidth : this._modeOptions.comp.width},
            scaleFrom   : 100,
            duration    : 0.5
        });
                var printBtn = this.getPrintBtn();
                if (printBtn) printBtn.style.display="block";
                this.sortSelecterShow();
                this._baseNode.id = this._modeOptions.normal.id;
    },
    getPrintBtn : function() {
        var cld = $('memLstHed').childNodes;
        for(var i=0,len=cld.length;i<len;i++) {
            if (cld[i] && cld[i].className=='subLink') {
                return cld[i];
            }
        }
    },
    evModeToNormal : function(e, node) {
        Event.stop(e);
        this.modeToNormal();
        this.updateList(this._currentTab);
        MyList.Content.setBody('');
        MyList.Content.modeToNormal();
    },
    _getSortSelecter : function() {
        var sortElms = document.getElementsByAttribute('ozein_mylist', 'sort', 'memLstUi');
        if (sortElms.length>0) {
            for(var i=0,len=sortElms.length;i<len;i++) {
                if (sortElms[i].nodeName=='SELECT') {
                    return sortElms[i];
                }
            }
        }
    },
    escapeSortSelecter : function() {
        if (this._currentTab) {
            var selecter = this._getSortSelecter();
            if (selecter) {
                this._cacheSort.index[this._currentTab] = selecter.selectedIndex;
            }
        }
    },
    updateSortSelecter : function(count) {
        var selecter = this._getSortSelecter();
        if (selecter) {
            if (count>0) {
                selecter.disabled = false;
                selecter.selectedIndex = this._cacheSort.index[this._currentTab];
            } else {
                selecter.disabled = true;
            }
        }
    },
    sortSelecterShow : function() {
        if (this._cacheSort.selecter) {
            lis = $A($('memLstUi').getElementsByClassName('sort'));
            if (lis.length==1) {
                var li = lis.pop();
                li.appendChild(this._cacheSort.selecter);
                this._getSortSelecter().selectedIndex = this._cacheSort.index[this._currentTab];
            }
        }
    },
    sortSelecterHide : function() {
        var sortElms = document.getElementsByAttribute('ozein_mylist', 'sort', 'memLstUi');
        if (sortElms.length>0) {
            sortElms.each(function(selecter){
                this._cacheSort.index[this._currentTab] = selecter.selectedIndex;
                selecter.parentNode.removeChild(selecter);
            }.bind(this));
        }
    },
    _getInputs : function() {
        var nodes = [];
        var inputs = $('memLst').getElementsByTagName('input');
        for (var i=0,len=inputs.length; i<len; i++) {
            if (inputs[i].parentNode.parentNode.className=='chk') {
                nodes.push(inputs[i]);
                if (inputs[i].checked == true) {
                    this._chkCnt++;
                }
            }
        }
        return nodes;
    },
    _submitInquireAtOnce : function(e) {
        this._chkCnt = 0;
        var mylistTab = null;
        var lstSecs = $('memLst').getElementsByClassName('lstSec');
        if (lstSecs.length > 0) {
            mylistTab = lstSecs[0].parentNode.getAttribute('ozein_mylist_tab');
        }
        var inputs = this._getInputs();
        if (inputs.length < 1) {
            return false;
        }
        if (this._chkCnt == 0) {
            if (window.confirm('リストにある全ての物件へ問い合わせますか？')) {
        for (var i=0,len=inputs.length;i<len;i++) {
                    inputs[i].checked = true;
                    inputs[i].parentNode.parentNode.parentNode.parentNode.parentNode.addClassName('checked');
                }
            }else{
                Event.stop(e);
                return false;
            }
        }
        
        MyList.Container.createInquirePrulallyForm(inputs, mylistTab);
        this._chkCnt = 0;
        
        Event.stop(e);
    },
    getDetail : function(e, node, mylistTab) {
        Event.stop(e);
        this.closeBalloon();
        if (this._baseNode.id==this._modeOptions.comp.id) {
            return false;
        }
        MyList.Content.showDetail(node.getAttribute('ozein_mylist_detail'), mylistTab);
    },
    evRegistFavorite : function(e, node) {
        var pos = [Event.pointerX(e),Event.pointerY(e)];
        Event.stop(e);
        var bid;
        var dataSecs = node.getElementsByClassName('dataSec');
        for(var i=0;i<dataSecs.length;i++) {
            var div = dataSecs[i];
            bid = div.getAttribute('ozein_mylist_detail');
            if (bid) break;
        }
        this.executeRegistFavorite({
            bukkenId    : bid,
            position    : pos,
            onSuccess   : this.postRegistFavorite.bind(this),
            onOverflow  : this.showRegistError.bind(this)
        });
    },
    registFavoriteGate : function(bid, pos) {
        return this.executeRegistFavorite({
            bukkenId    : bid,
            position    : pos,
            onSuccess   : this.postRegistFavorite.bind(this),
            onOverflow  : this.showRegistError.bind(this)
        });
    },
    executeRegistFavorite : function(options) {
        if (this._cache.has('favorite')) {
            var count = this._cache.get('favorite').getElementsByClassName('lstSec').length;
            if (count>=40) {
                options.onOverflow(count, options.bukkenId, options.position);
            } else {
                options.onSuccess(count, options.bukkenId, options.position);
            }
            return false;
        }
        new Ajax.Request(MyList.Container.getBaseUrl('/Mylist/get-counts/'), {
            method : 'get',
            asynchronous : false,
            onSuccess : function(httpObj) {
                eval('var counts = '+httpObj.responseText);
                var errflg = false;
                if (counts[1]>=40) {
                    options.onOverflow(counts[1], options.bukkenId, options.position);
                    errflg = ture;
                } else {
                    options.onSuccess(counts[1], options.bukkenId, options.position);
                    //site catalyst
					var s = s_gi(s_account);
					s.linkTrackVars="products,events,evar30,evar31";
					s.linkTrackEvents = "event9";
					s.events="event9";
					s.products="';03_" + options.bukkenId + ";;;;evar30=" + options.bukkenId.substr(0, 5) + "|evar31=base';";
					s.tl(this, "o","event9");
                }
                return errflg;
            }
        });
    },
    showRegistError : function(count, bid, pos) {
        alert('40件以上追加できません');
        // @todo show balloon
    },
    postRegistFavorite : function(count, bid, pos) {
        new Ajax.Request(MyList.Container.getBaseUrl('/Mylist/post-regist-favorite/'), {
            method : 'post',
            postBody : 'b='+bid,
            onSuccess : function(httpObj) {
                this.resetCache('favorite');
                var fsts = 0;
                var favAddNodes = $('memCntSec').getElementsByClassName('favAdd');
                for (var i=0;i<favAddNodes.length;i++) {
                    if (favAddNodes[i].id == "favAdd"+bid) {
                        var fsts = favAddNodes[i].getAttribute('ozein_favorite_sts');
                        favAddNodes[i].setAttribute('ozein_favorite_sts','1');
                        var docFrg = document.createDocumentFragment();
                        var imgNode = document.createElement('img');
                        imgNode.value = "お気に入り登録済み";
                        imgNode.src = "/img/btn_memfavfin.gif";
                        docFrg.appendChild(imgNode);
                        favAddNodes[i].replaceChild(docFrg, favAddNodes[i].firstChild);
                    }
                }
                Ozein.Invoker.var_stock['fd'].insertMylist(pos);
            }.bind(this)
        });
    },
    deleteBukken : function(e) {
        Event.stop(e);
        var bid, cat;
        var node = Event.element(e).parentNode.parentNode.parentNode.parentNode;
        var dataSecs = node.getElementsByClassName('dataSec');
        for(var i=0;i<dataSecs.length;i++) {
            var div = dataSecs[i];
            bid = div.getAttribute('ozein_mylist_detail');
            if (bid) break;
        }
        switch(this._currentTab) {
            case 'history' :cat = 4; break;
            case 'favorite' :cat = 1; break;
            case 'inquire' :cat = 8; break;
        }
        new Ajax.Request(MyList.Container.getBaseUrl('/Mylist/post-eliminate/'), {
            method : 'post',
            postBody : 'b='+bid+'&category='+cat,
            onSuccess : function(bid, httpObj) {
                var currentCount = parseInt(this.getCounterElement().innerHTML);
                node.parentNode.removeChild(node);
                this.updateSidebarInfo();
                if (MyList.Content._current.target==bid) {
                    MyList.Content.showExplanation();
                }
                this.resetCache(null);
                //global_naviの件数更新
                switch(cat) {
                  case 4:
                      this._cdownGnavi('gHistoryNum', currentCount);
                      break;
                  case 1:
                      this._cdownGnavi('gFavoriteNum', currentCount);
                      break;
                  case 8:
                      this._cdownGnavi('gInquireNum', currentCount);
                      break;
                  break;
                }
            }.bind(this, bid)
        });
    },
    resetCache : function(type, deleteSort) {

        if (type==null) {
            this._cache = new MyList.Strage();
            if (deleteSort == true) {
                this._cacheSort.index = {history : 0, favorite : 0, inquire : 0};
            }
        } else {
            this._cache.remove(type);
            if (deleteSort == true) {
                this._cacheSort.index[type] = 0;
            }
        }
        this._cacheEvf = new MyList.Strage()
    },
    closeBalloon : function() {
        if (Ozein.Invoker.var_stock['fd']) {
            Ozein.Invoker.var_stock['fd'].closeBalloon();
        }
    },
    _cdownGnavi : function(nodeId, currentCount) {
        $(nodeId).innerHTML = new Number((currentCount<1)?0:currentCount-1) +  '件';
    }
};
MyList.Content = {
    _widthSet : {normal : 516, comp : 696},
    _baseNode : null,
    _cacheEvf : null,
    _current : {
        type : null,
        target : null
    },
    _chkCnt : 0,
    initialize : function(baseNode){
        this._cacheEvf = new MyList.Strage();
        this._baseNode = baseNode;
        this.resetCurrentContent();
    },
    resetCurrentContent : function() {
        this._current.type = 
        this._current.target = null;
    },
    _explanationBody : {
        history     : '<h3>閲覧履歴とは?</h3><p>あなたが物件詳細を閲覧した際に、その物件を自動的に記憶しておけるページです。閲覧履歴は<strong>最大で40件まで</strong>追加され、40件を超えると閲覧日の古いものから削除されます。</p>',
        favorite    : '<h3>お気に入りとは？</h3><p>あなたが気になる物件を記憶しておけるページです。「収益物件検索」、「物件詳細」、「閲覧履歴」の各ページからご登録できます。お気に入りに登録できる物件は<strong>最大で40件</strong>までです。</p>',
        inquire     : '<h3>問合せ済みとは？</h3><p>あなたが問合せフォームを利用して、問合せた物件を記憶しておけるページです。問合せ済みの物件は<strong>最大で40件まで</strong>追加され、40件を超えると、自動的に問合せ日の古いものから削除されます。</p>'
    },
    _explanationTmpl : [
        '<div id="memDefault"><div class="nstDiv"><div class="body"><div class="hed"><div class="btm">',
        '</div></div></div></div></div>'
    ],
    showExplanation : function() {
        var tab = MyList.Sidebar._currentTab;
        if (tab) {
            this.setBody([
                this._explanationTmpl[0],
                this._explanationBody[tab],
                this._explanationTmpl[1]
            ].join(''));
        }
    },
    showLoading : function() {
        this.setBody(
            MyList.PageLoader.getSmallImage()
        );
    },
    showDetail : function(bid, mylistTab) {
        if (this._current.type=='detail' && this._current.target==bid) {
            return false;
        }
        this.closeExpandedImage();
        this.modeToNormal();
        this.showLoading();
        
        new Ajax.Request(MyList.Container.getBaseUrl('/Mylist/get-detail/'), {
            method      : 'get',
            parameters  : {b: bid, mylist_inquire: mylistTab, slt : MyList.Container.getSlt()},
            onSuccess   : function(httpObj) {
                var txt = httpObj.responseText;
                this.setBody(txt);
                this._current.type='detail';
                this._current.target=bid;
                Ozein.Invoker.invokeElement($('memCntSec'));
                this._setFavoriteEvent(bid);
                this._setInquireBtnEvent($('memBknDtl'), mylistTab);
                if (MyList.PageLoader.isLoading()) {
                    MyList.PageLoader.stop();
                }
                return false;
            }.bind(this)
        });
    },
    showComp : function(bids, mylistTab, cols) {
        if (!cols && this._current.type=='comp' && this._current.target==bids) {
            MyList.Process.free();
            return false;
        }
        MyList.Process.lock();
        var params = ['b[]='+bids.join('&b[]=') , 'mylist_inquire='+MyList.Sidebar._currentTab];
        if (cols) {
            params.push('cols='+cols);
        }
        this.modeToComp();
        this.showLoading();
        new Ajax.Request(MyList.Container.getBaseUrl('/Mylist/get-comp/'), {
            method      : 'post',
            postBody    : params.join('&'),
            onSuccess   : function(httpObj) {
                if (!MyList.Process.isLocked()) return;
                MyList.Process.free();
                
                var txt = httpObj.responseText;
                this._current.type='comp';
                this._current.target=bids;
                this.setBody(txt);
                Ozein.Invoker.invokeElement($('memCntSec'));
                this._setFavoriteEvent(bids);
                this._setInquirePrulallyBtnEvent($('memCmpBtm'), mylistTab);
            }.bind(this)
        });
    },
    _setFavoriteEvent: function(bids) {
        var bukkenId = null;
        var favAddNodes = $('memCntSec').getElementsByClassName('favAdd');
        for (var i=0;i<favAddNodes.length;i++) {
            var fsts = favAddNodes[i].getAttribute('ozein_favorite_sts');
            var favoriteBtnNode = favAddNodes[i].childNodes[0];
            if (fsts == 0) {
                if (bids.constructor == Array) {
                    bukkenId = bids[i];
                }else{
                    bukkenId = bids;
                }
                var evfKey = '_addFavorite-'+bukkenId+'-'+i;
                if (this._cacheEvf.has(evfKey)) {
                    Event.stopObserving(favoriteBtnNode, 'click', this._cacheEvf.get(evfKey));
                    this._cacheEvf.remove(evfKey);
                }
                this._cacheEvf.add(evfKey, this._addFavorite.bindAsEventListener(this, bukkenId, i));
                Event.observe(favoriteBtnNode, 'click', this._cacheEvf.get(evfKey));
            }
        }
    },
    _addFavorite: function(e, bid, i) {
        Event.stop(e);
        var pos = [Event.pointerX(e),Event.pointerY(e)];
        var ret = MyList.Sidebar.registFavoriteGate(bid, pos);
        if (!ret) {
            var evfKey = '_addFavorite-'+bid+'-'+i;
            this._cacheEvf.remove(evfKey);
        }
    },
    _setInquireBtnEvent : function(node, mylistTab) {
        this._chkCnt = 0;
        var elements = node.getElementsByClassName('inquire');
        for (var i=0, len=elements.length; i<len; i++) {
            if ((elements[i].tagName=='INPUT') || (elements[i].tagName=='input')) {
                this.inquire_bid = elements[i].getAttribute("ozein_inquire_bid");
                var evfKey = '_submitInquireAtOnce-'+this.inquire_bid+'-'+i;
                if (this._cacheEvf.has(evfKey)) {
                    Event.stopObserving(elements[i], 'click', this._cacheEvf.get(evfKey));
                    this._cacheEvf.remove(evfKey);
                }
                this._cacheEvf.add(evfKey, this._submitInquireAtOnce.bindAsEventListener(this, mylistTab));
                Event.observe(elements[i], 'click', this._cacheEvf.get(evfKey));
            }
        }
    },
    _submitInquireAtOnce : function(e, mylistTab) {
        MyList.Container.createInquireForm(this.inquire_bid, mylistTab);
        Event.stop(e);
    },
    _setInquirePrulallyBtnEvent : function(node, mylistTab) {
        this._chkCnt = 0;
        var elements = node.getElementsByTagName('input');
        for (var i=0, len=elements.length; i<len; i++) {
            var inputNode = elements[i];
            var evfKey = '_submitInquirePrulallyAtOnce-'+i;
            if (this._cacheEvf.has(evfKey)) {
                Event.stopObserving(inputNode, 'click', this._cacheEvf.get(evfKey));
                this._cacheEvf.remove(evfKey);
            }
            this._cacheEvf.add(evfKey, this._submitInquirePrulallyAtOnce.bindAsEventListener(this, mylistTab));
            Event.observe(inputNode, 'click', this._cacheEvf.get(evfKey));
        }
    },
    _submitInquirePrulallyAtOnce : function(e, mylistTab) {
        var inputs = this._getChkBoxs();
        if(this._chkCnt == 0) {
            if (window.confirm('見比べリストにある全ての物件へ問い合わせますか？')) {
               for (var i=0,len=inputs.length;i<len;i++) {
                   inputs[i].checked = true;
               }
           }else{
               this._chkCnt = 0;
               Event.stop(e);
               return false;
           }
        }
        
        MyList.Container.createInquirePrulallyForm(inputs, mylistTab);
        this._chkCnt = 0;
        
        Event.stop(e);
    },
    _getChkBoxs : function() {
        var nodes = [];
        var inputs = this._baseNode.getElementsByTagName('input');
        for (var i=0,len=inputs.length; i<len; i++) {
            if (inputs[i].parentNode.className=='chk') {
                nodes.push(inputs[i]);
                if (inputs[i].checked == true) {
                    this._chkCnt++;
                }
            }
        }
        return nodes;
    },
    modeToComp : function() {
        this._baseNode.style.width= this._widthSet.comp+'px';
    },
    modeToNormal : function() {
        this._baseNode.style.width= this._widthSet.normal+'px';
    },
    setBody : function (content) {
        if (typeof(content)=='string') {
            this._baseNode.innerHTML = content;
        } else {
            $A(this._baseNode.childNodes).each(function(child) {
                child.parentNode.removeChild(child);
            });
            this._baseNode.appendChild(content);
        }
    },
    getBody : function () {
        return this._baseNode.firstChild;
    },
    closeExpandedImage : function() {
        if (!hs || !hs.expanders || hs.expanders.length==0) {
            return;
        }
        $A(hs.expanders).each(function(ex){
            if (ex && typeof(ex.doClose)!='undefined') {
                ex.doClose();
            }
        });
    }
}
MyList.Container = {
    _oemKey : null,
    initialize : function(elements, oemKey) {
        this._oemKey = oemKey;
        var sidebar, content = null;
        for (var i=0,len=elements.length; i<len; i++) {
            var type = elements[i].getAttribute('ozein_mylist_component');
            switch(type) {
                case 'sidebar' :
                    sidebar = elements[i];
                    break;
                case 'content' : 
                    content = elements[i];
                    break;
            }
        }
        if (sidebar && content) {
            MyList.Content.initialize(content);
            MyList.Sidebar.initialize(sidebar);
        }
    },
    getBaseUrl : function(baseUrl) {
        return (this._oemKey) ? ['/', this._oemKey, baseUrl].join('') : baseUrl;
    },
    getSlt : function() {
        var d = new Date();
        return d.getTime();
    },
    getSidebar : function() {
        return MyList.Sidebar;
    },
    getContent : function() {
        return MyList.Content;
    },
    createInquireForm: function(inquire_bid, mylistTab) {
        var formId = 'Inquirebukken';
        var docFrg = document.createDocumentFragment();
        if (!$(formId)) {
            var form = document.createElement('form');
            docFrg.appendChild(form);
            form.method = "post";
            form.target = '_blank';
            form.id = formId;
        }else{
            var form = $(formId);
        }
            if ($('memLstBody').getAttribute('ozein_oemkey')) {
                form.action = '/'+$('memLstBody').getAttribute('ozein_oemkey')+'/物件へのお問合せメールフォーム/b='+inquire_bid+'/';
            }else{
                form.action = '/物件へのお問合せメールフォーム/b='+inquire_bid+'/';
            }
        
        var inquireFrom = document.createElement('input');
        inquireFrom.type = "hidden";
        inquireFrom.name = "inquireFrom";
        inquireFrom.value = "Bukkendetail";
        form.appendChild(inquireFrom);

        var seltab = document.createElement('input');
        seltab.type = "hidden";
        seltab.name = "mylist_inquire";
        seltab.value = mylistTab;
        form.appendChild(seltab);

        document.body.appendChild(docFrg);
        form.submit();
        
        var formNodeCnt = $(formId).childNodes.length;
        for (var i=0;i<formNodeCnt;i++) {
            $(formId).removeChild($(formId).childNodes[0]);
        }

        return false;
    },
    createInquirePrulallyForm: function(inputNodes, mylistTab) {
        var formId = 'Inquirebukkenplurally';
        var docFrg = document.createDocumentFragment();
        if (!$(formId)) {
            var form = document.createElement('form');
            docFrg.appendChild(form);
            form.method = "post";
            form.target = '_blank';
            form.id = formId;
            if ($('memLstBody').getAttribute('ozein_oemkey')) {
                form.action = '/'+$('memLstBody').getAttribute('ozein_oemkey')+'/Inquirebukkenplurally/index/';
            }else{
                form.action = '/Inquirebukkenplurally/index/';
            }
        }else{
            var form = $(formId);
        }
        var inquireFrom = document.createElement('input');
        inquireFrom.type = "hidden";
        inquireFrom.name = "inquireFrom";
        inquireFrom.value = "bukkenList";
        form.appendChild(inquireFrom);

        var seltab = document.createElement('input');
        seltab.type = "hidden";
        seltab.name = "mylist_inquire";
        seltab.value = mylistTab;
        form.appendChild(seltab);

        for (var i=0,len=inputNodes.length;i<len;i++) {
            if (inputNodes[i].checked!=false) {
                var input = document.createElement('input');
                input.type = "hidden";
                input.name = "b[]";
                input.value = inputNodes[i].value;
                form.appendChild(input);
            }
        }
        document.body.appendChild(docFrg);
        form.submit();
        
        var formNodeCnt = $(formId).childNodes.length;
        for (var i=0;i<formNodeCnt;i++) {
            $(formId).removeChild($(formId).childNodes[0]);
        }

        return false;
    }
};
Ozein.MyList = new Class.create();
Ozein.MyList.prototype = {
    container : null,
    oemKey : null,
    initialize : function(node, options){
        MyList.PageLoader.start();
        MyList.Container.initialize(document.getElementsByAttribute('ozein_mylist_component', '*', node), options.oemKey);
        this.container = MyList.Container;
    }
};