
// 各ページのonload時呼び出し用クラス
var Init = Class.create({
    initialize: function(option){
        //this.debug();
    },
    debug: function(){
        createDebugBlock();
    }
});

Event.observe(window, 'load', function(event){

    var isWorksMenu = !!$('tblWrksMenu');
    if(isWorksMenu){
        WORKS_LIST_MAX = $('tblWrksMenu').select('td').size();
        TURNING = Math.ceil(WORKS_LIST_MAX / 2) ;

        // データ取得
        getWorksData();
    }

    // 各ページ処理
    new Init();

    if(isWorksMenu){
        // 事例メニュー
        $('blkWorksMenuTop').select('img').each(function(ele, idx){
            Event.observe(ele, 'mouseover', function(){
                if(idx != selectedWorksIdx) {
                    worksMenuOver(ele);
                }
            });
            Event.observe(ele, 'mouseout', function(){
                if(idx != selectedWorksIdx) {
                    worksMenuOut(ele);
                }
            });
            Event.observe(ele, 'click', function(){
                // タイマストップ
                clearTimeout(effectTimer);
                selectedWorksDetailIdx = 0;
                clickWorksMenu(idx, ele);
            });
        });
    }

    // TODO 余る場合アリ
    var winHeight = screen.height - 80;

    // 各ポップアップ呼び出しイベントセット
    $$('.clsModel').each(function(ele){
        Event.observe(ele, 'click', function(){
            window.open('modelhouse.html', 'modelhouse', 'height=' + winHeight + ',width=1050,scrollbars=yes');
        });
    });
    $$('.clsReform').each(function(ele){
        Event.observe(ele, 'click', function(){
            window.open('reform.html', 'reform', 'height=' + winHeight + ',width=1025,scrollbars=yes');
        });
    });
    $$('.clsPhotov').each(function(ele){
        Event.observe(ele, 'click', function(){
            window.open('photovoltaic.html', 'photov', 'height=750,width=1025,scrollbars=yes');
        });
    });
});

/**
 * 事例データの取得
 * @return
 */
function getWorksData(){
    for (var i = 0; i < WORKS_LIST.length; i++) {

        sendAjaxRequest('data/' + WORKS_LIST[i],
                        {unique     : +(new Date())},
                        function(httpObj){
                            var json = eval('(' + httpObj.responseText + ')');
                            worksList[i] = json;
                        },
                        false
        );
    }
}

/**
 * 事例メニュークリック時
 * @param selectIdx 選択されたインデックス
 * @return void
 */
function clickWorksMenu(selectIdx){

    var data = worksList[selectIdx];

    var list = data.categoryList;

    // ターゲット
    var element;
    if(arguments[1] != null){
         element = arguments[1];
    } else {
        $('blkWorksMenuTop').select('img').find(function(ele, idx){
            if(selectedWorksIdx == idx){
                element = ele;
            }
        });
    }
    // 選択状態に
    worksMenuOver(element);

    // 対象意外を非選択状態にする
    $('blkWorksMenuTop').select('img').each(function(ele, idx){
        if(selectIdx != idx){
            worksMenuOut(ele);
        }
    });

    $$('#tblWrksMenu caption')[0].update(data.categoryName);

    $$('#tblWrksMenu tr').each(function(ele, idx){
        var inner;

        var listImg = new Element('img', {'src' : 'img/works_menu/m_list.gif',
                                          'alt' : 'list'});
        // 左側
        if(idx <= list.length - 1){
            inner = new Element('a', {href : 'javascript:;'});
            inner.insert(listImg)
                 .insert('&nbsp;')
                 .insert(list[idx].worksName)
                 .observe('mouseover', function(event){
                     if(idx != selectedWorksDetailIdx){
                         worksDetailMenuOver(this);
                     }
                 })
                 .observe('mouseout', function(event){
                     if(idx != selectedWorksDetailIdx){
                         worksDetailMenuOut(this);
                     }
                 })
                 .observe('click', function(event){
                     // タイマストップ
                     clearTimeout(effectTimer);
                     new ClickWorksDetailMenu(idx);
                 });

        } else {
            inner = new Element('sapn').update('&nbsp;');
        }
        ele.down(0).update(inner);

        // 右側
        if(idx + TURNING <= list.length - 1){
            inner = new Element('a', {href : 'javascript:;'});
            inner.insert(listImg.clone())
                 .insert('&nbsp;')
                 .insert(list[idx + TURNING].worksName)
                 .observe('mouseover', function(event){
                     if(idx + TURNING != selectedWorksDetailIdx){
                         worksDetailMenuOver(this);
                     }
                 })
                 .observe('mouseout', function(event){
                     if(idx + TURNING != selectedWorksDetailIdx){
                         worksDetailMenuOut(this);
                     }
                 })
                 .observe('click', function(event){
                     // タイマストップ
                     clearTimeout(effectTimer);
                     new ClickWorksDetailMenu(idx + TURNING);
                 });

        } else {
            inner = new Element('sapn').update('&nbsp;');
        }
        ele.down(0).next().update(inner);

    });

    selectedWorksIdx = selectIdx;

    new ClickWorksDetailMenu(selectedWorksDetailIdx);
}

/**
 * 事例メニューのOver時のイベント
 * @param element 対象となる事例カテゴリメニューのイメージ
 */
function worksMenuOver(element){
    var src = element.getAttribute('src');
    var orgUri = src.substring(0, src.lastIndexOf('/') + 1);
    var fileName = src.substring(src.lastIndexOf('/') + 1);
    if(element.getAttribute('src').indexOf('select/') == -1){
        element.setAttribute('src', orgUri + 'select/' + fileName);
    }

}

/**
 * 事例メニューのOut時のイベント
 * @param element 対象となる事例カテゴリメニューのイメージ
 */
function worksMenuOut(element){
    var src = element.getAttribute('src');
    var orgUri = src.substring(0, src.lastIndexOf('select/'));
    var fileName = src.substring(src.lastIndexOf('/') + 1);
    if(element.getAttribute('src').indexOf('select/') != -1){
        element.setAttribute('src', orgUri + fileName);
    }
}


/**
 * 事例詳細メニューのOver時のイベント
 * @param element 対象となる事例詳細メニュー
 */
function worksDetailMenuOver(element){
    $(element).setStyle({backgroundColor: '#e6e6fa'});
}

/**
 * 事例詳細メニューのOut時のイベント
 * @param element 対象となる事例詳細メニュー
 */
function worksDetailMenuOut(element){
    element.setStyle({backgroundColor: '#f0f8ff'});
}
/**
 * 事例詳細メニュークリック時の処理
 */
var ClickWorksDetailMenu = Class.create({
    initialize: function(targetIdx){

        // 選択状態とページ別処理の実行
        $$('#tblWrksMenu tr').each(function(ele, idx){
            var lnk1;
            var lnk2;
            if(targetIdx < TURNING){
                lnk1 = ele.down(1);
                lnk2 = ele.down(0).next().down(0);
            } else {
                lnk1 = ele.down(0).next().down(0);
                lnk2 = ele.down(1);
            }
            if(targetIdx == idx || targetIdx == idx + TURNING){
                // 選択状態に
                worksDetailMenuOver(lnk1);
                this.pageInit(lnk1, targetIdx);

                worksDetailMenuOut(lnk2);
            } else {
                // 対象意外を非選択状態にする
                worksDetailMenuOut(lnk1);
                worksDetailMenuOut(lnk2);
            }
        }.bind(this));

        selectedWorksDetailIdx = targetIdx;
    },
    pageInit: function(element, idx){
        // 各ページで実装
        location.replace('works.html?ctgry=' + selectedWorksIdx + '&worksId=' + idx);
    }
});

/***** util ******/

/**
 * 指定文字数になるまで指定数値の前に0を付加する
 */
function padZero(num, digit, radix){

    if(isNaN(digit)){
        digit = 2;
    }

    var numStr = num.toString(radix || 10);

    var result = '';
    for(var i = 0; i < digit - numStr.length ; i++){
        result += '0';
    }

    return result + numStr;
}

/*
 * Ajax送信用関数
 */
function sendAjaxRequest(url, params, callbackFunc, async){
    if(params == null || Object.isUndefined(params)){
        params={'cache': (new Date()).getTime()};
    }
    if(async == null || Object.isUndefined(async)){
        async = true;
    }

    //var ajax = new Ajax.Request(url, {onSuccess      : callbackFunc,parameters     : '',method       : 'get'});
//dbg(ajax.getStatus());
     new AjaxRequestWrapper(url,
                            {method: 'get',
                             onSuccess: callbackFunc,
                             parameters: params,
                             asynchronous   : async
                            },
                            true,
                            '/ajaxError.html');
}

//------ 以下DEBUG用関数 -------------------------------------------------------
/**
 * debug用関数
 */
function createDebugBlock(topPoji, leftPoji, h, w){

    if(Object.isUndefined(topPoji) || topPoji == null || topPoji == ''){
        topPoji = 0;
    }

    if(Object.isUndefined(leftPoji) || leftPoji == null || leftPoji == ''){
        lefPojit = 0;
    }

    if(Object.isUndefined(h) || h == null || h == ''){
        h = 200;
    }

    if(Object.isUndefined(w) || w == null || w == ''){
        w = 300;
    }
    var tempStr
        = '<div id="debug"'
        + ' style="'
        + ' position: absolute;'
        + ' top: ' + topPoji + 'px;'
        + ' left:' + leftPoji + 'px; '
        + ' background-color: silver; '
        + ' width: ' + w + 'px; '
        + ' height: ' + h + 'px;'
        + ' overflow: scroll;'
        + ' text-align:left;'
        + ' z-index : 10000;'
        + ' ">'
        + '</div>';

    var temp = new Template(tempStr);
    var replace = {};

    Element.insert($$('body')[0], { bottom: temp.evaluate(replace)});

    new Draggable('debug');
}
var dbgId = 0;
function dbg(debugStr, delflg){
    if($('debug') != null){
        if(!!delflg){
            $('debug').innerHTML ='';
        }

        $('debug').insert({ top: (new Element('br'))});
        $('debug').insert({ top: (new Element('span', {id : 'dbg' + dbgId })).update(debugStr)});

        dbgId++;
    }
}

// Ajax通信のレスポンス調査用
function dbgdummyWin(url, query){
    window.open(url + '?' + query );
}

