/**
 * prototype ajax library
 * @author tayu
 */

var ajaxObj = new function() {
        this.frmID = '';
        this.showID = '';
        this.showResponse = null;
}

 /**
 *      form を解析し、送信する
 * 
 * @param {Object} frmid        form id
 * @param {Object} showid       表示先 ID
 * @param {Object} url          宛先 URL
 * @param {Object} method       POST or GET
 * @param {Object} callback     呼び出す関数
 */
function loadRecord( frmid, showid, url, method, callback )
{
        ajaxObj.frmID = frmid;
        ajaxObj.showID = showid;
        ajaxObj.showResponse = callback;

        var form = $( frmid );

        var opt = "";
        for( var i = 0; i < form.length; ++i )
        {
                opt += opt == "" ? "" : "&";
                var elm = form.elements[i];
                var elmval = $F( elm );

                if( elm.name && elmval )
                {
                        opt += elm.name + "=" + encodeURIComponent( elmval );
                }
        }

        sendRequest( url, method, opt );
}

/**
 *      送信する
 * 
 * @param {Object} url          宛先 URL
 * @param {Object} method       POST or GET
 * @param {Object} opt          渡すデータ
 */
function sendRequest( url, method, opt )
{
        myAjax = new Ajax.Request(
                                        url,
                                        {
                                                method: method,
                                                parameters: opt,
                                                onComplete: showComplete,
                                                onFailure: showError,
                                                onException: showError
                                        }
        );
        showLoading();
}

/**
 *      Loading 表示
 */
function showLoading()
{
        var div = $( ajaxObj.showID );
        div.innerHTML = "Loading ...";
}

/**
 *      エラー表示
 * 
 * @param {Object} req
 */
function showError( req )
{
        var err = $( ajaxObj.showID );
        var status = req.statusText == null ? "" : req.statusText;
        err.innerHTML = "internal error. " + status;
}

/**
 *      取得したデータを表示する
 * 
 * @param {Object} req
 */
function showComplete( req )
{
        ajaxObj.showResponse( req );
}

/**
 *      取得したデータを表示する
 * 
 * @param {Object} req
 */
function showResponse( req )
{
        var xml = req.responseXML;
        var obj = $( ajaxObj.showID );
        obj.innerHTML = "<br />";

        var dataList = xml.getElementsByTagName( 'data' );
        for( var i = 0; i < dataList.length; ++i )
        {
                obj.innerHTML += ntoBr( dataList[i].childNodes[0].nodeValue.escapeHTML() ) + "<br />";
        }
}

/**
 *      \n → <br /> に変換する
 * @param {Object} str
 */
function ntoBr( str )
{
        var reg = /\n/g;
        return str.replace( reg, "<br />" );
}