/**
 * MVC Framework html base javascript
 *
 * ajax method rapper
 * ajax request uri mapping
*/
var requesturi = new Array(
    'randing/getAjax.php' ,	// --------	0 : randing page
    'news/getAjax.php' , // ----------- 1 : topics page
    'live/getAjax.php' , // ----------- 2 : liveSchedule page
    'live/getFormAjax.php' , // -------	3 : ticket form
    'live/ticketPrevAjax.php' ,	// ---- 4 : ticket form preview
    'live/ticketRegistAjax.php' , // --	5 : ticket form registed
    'accessCounter/getAjax.php' ,// ---	6 : accessCounter
    'bbs/getAjax.php' ,//-------------- 7 : bbs content
    'link/getAjax.php' , //------------ 8 : link content
    'blog/getAjax.php' , //------------ 9 : blog content
    'blog/commentAjax.php' , //-------- 10 : blog comment regist
    'message/getAjax.php' , //--------- 11 : message input form
    'message/messagePrevAjax.php' , //- 12 : message prev
    'message/messageRegistAjax.php', // 13 : message regist
    'udhistory/getAjax.php' , //------- 14 : update history
    'ajaxInitialize.php' //-- 15 : sidebar initialize
);

/**
 * getPage()
 *
 * ajax通信で、ページを取得します。
 * 取得したJSONデータはeval()されて、表示用関数へ渡されます。
 *
 * JSONはオブジェクト形式で、
 *	'states'	=> 'ステータスメッセージ'
 *	'html'		=> '生のHTML文章'
 *	その他...
 *
 * @param int number		request target number. see requesturi
 * @param string get		getstring
*/
function getPage(number , get)
{
    //通信開始関数
    startAjax();
    _uri = requesturi[number];
    var _a = new Ajax.Request(
        _uri ,
        {
            "method" : "get" ,
            "parameters" : get ,
            onSuccess : function(request)
            {
                //取得JSONをパースしてHTML書き換え関数へ渡す。
                eval("json="+request.responseText);
                //if(json.plugin[0] = "")
                var date = new Date();
                dhtmlHistory.add('key' + date.getTime() , request.responseText);
                changeHTML(json);
            },
            onComplete : function(request)
            {
                //通信完了関数実行
                completeAjax();
            },
            onFailure : function(request)
            {
                //通信失敗関数実行
                completeAjax();
                failedAjax();
            }
        }
    );
}

/**
 * ajaxPost()
 *
 * ajax通信で、入力フォーム情報を送信。
 * 戻ってきたHTMLをパースして書き換える。
 *
 * @param mixed value		form values. (this.form)
 * @param int number		request target number. see requesturi
*/
function ajaxPost(value , number)
{
    //通信開始関数
    startAjax();
    _uri = requesturi[number];
    _a = new Ajax.Request(
        _uri ,
        {
            "method" : "post" ,
            "postBody" : Form.serialize(value) ,
            onSuccess : function(request)
            {
                //取得JSONをパースしてHTML書き換え関数へ渡す。
                eval("json="+request.responseText);
                var date = new Date();
                dhtmlHistory.add('key' + date.getTime() , request.responseText);
                changeHTML(json);
            },
            onComplete : function(request)
            {
                //通信完了関数実行
                completeAjax();
            },
            onFailure : function(request)
            {
                //通信失敗関数実行
                completeAjax();
                failedAjax();
            }
        }
    );
}

/**
 * changeHTML()
 *
 * ajax通信結果をHTMLへ書き出す。
 * 対象のidは 'content'
 *
 * @param object json
*/
function changeHTML(json)
{

    /* ajax flug change */
    completeAjax();
    /* main HTML change */
    $(json.dom).innerHTML = json.html;
    /* ajax flug change */
    switch(json.states)
    {
        case "1" :
            $('ajaxMessage').innerHTML = "Ajax Request Success.";
            break;
        case "2" :
            $('ajaxMessage').innerHTML = "fair error.";
            break;
    }
    /* sub part HTML change */
    if(json._dom != "non")
    {
        $(json._dom).innerHTML = json._html;
    }
    else
    {
        //Plugin 部分消去
        $('plugins').innerHTML = "";
    }
}

// ********** 通信中の表示 *********

/**
 * startAjax()
 *
 * 通信中を示すHTMLを表示
 *
 * @param void
*/
function startAjax()
{
    $('ajaxConnect').style.display = "block"; 	//通信中表示
    $('ajaxFailed').style.display = "none";		//通信失敗非表示
    $('ajaxMessage').innerHTML = "";
}
/**
 * completeAjax()
 *
 * 通信中を表すHTMLを非表示
 *
 * @param void
*/
function completeAjax()
{
    $('ajaxConnect').style.display = "none";	//通信中非表示
}

/**
 * failedAjax()
 *
 * 通信失敗を表すHTMLを表示
 *
 * @param void
*/
function failedAjax()
{
    $('ajaxFailed').style.display = "block";	//通信失敗表示
    $('ajaxMessage').innerHTML = "";
}
function historyExec(hush , html)
{
    eval('json=' + html);
    changeHTML(json);
}
/**
 * bb_preview()
 *
 * BBCode フォームの内容をajaxでアクセスし、結果を表示
 *
 * bb_preview(
 *    form ,      // form element
 *    to ,        // preview display dom id
 *    relative ,  // ajax uri relative number (1 : ../  0 : ./  2 : ../../)
 *
*/
function bb_preview(form , to , relative)
{
    var uri = "";
    if(relative == 0 || relative == "")
    {
        uri = "./";
    }
    else
    {
        for(i=0; i<relative; i++)
        {
            uri = uri + "../";
        }
    }
    uri = uri + "bb_preview/bb_preview.php";
    var _a = new Ajax.Request(
        uri ,
        {
    	    "method" : "get" ,
    	    "parameters" : "str="+form ,
    	    onSuccess : function(request)
    	    {
    	        //jsonデータをパースしてDOM書き換え
    	        eval("json="+request.responseText);
    	        $(to).innerHTML = json.html;
    	    } ,
    	    onFailure : function(request)
    	    {
    	        $(to).innerHTML = "Ajax Failed.";
    	    }
        }
    );
}
/** page initialize **/
getPage(15);
getPage(1);
getPage(14);

/** Initialize all of our objects now. */

window.historyStorage.init();
window.dhtmlHistory.create();
dhtmlHistory.initialize();
dhtmlHistory.addListener(historyChange);

function historyChange(newLocation, historyData) {
    historyExec(newLocation , historyData);
} 