/*
 * 必須ライブラリ　jquery-1.2.6-min.js
 * 検索結果画面
 */


/**
 * 動的にFORMを作ってPOSTする
 * 
 * @param actionUrl FORM.ACTIONに設定するurl
 * @param postParams ポストするパラメータ一覧(連想配列 {key1:value1,key2:value2, ...}形式 または jQuery.serializeArrayが返す配列形式)
 */
function dynamicPost(actionUrl, postParams)
{
    var dynForm = _createDynamicForm(actionUrl, postParams);
    if (dynForm != null) {
        dynForm.submit();
    }
}
/**
 * ポップアップダイアログを開き、動的にフォームを作ってポストした結果をポップアップで表示
 * @param actionUrl FORM.ACTIONに設定するurl
 * @param postParams ポストするパラメータ一覧(連想配列 {key1:value1,key2:value2, ...}形式 または jQuery.serializeArrayが返す配列形式)
 * @param winName ポップアップウィンドウの名前
 * @param winStyle ポップアップウィンドウのスタイルを文字列で指定
 * @return
 */
function popupPost(actionUrl, postParams, winName, winStyle)
{
    try {
        var newWin = window.open('about:blank', winName, winStyle);
        var dynForm = _createDynamicForm(actionUrl, postParams);
        dynForm.attr('target', winName);
        //$.dump(dynForm);
        //dynForm[0].submit();

        dynForm.submit();
        newWin.focus();
    } catch (e) {
        alert(e);
        return false;
    }
    return false;
}
function _createDynamicForm(actionUrl, postParams)
{
    try {
    var dynForm = $("<form/>")
        .appendTo($(document.body))
        .attr('method', 'POST')
        .attr('action', actionUrl)
    ;
    if (postParams == null) {
    } else if (postParams.length) {
        //配列(jQuery.serializeArray()型)
        for (i=0; i<postParams.length; i++) {
            var k = postParams[i].name;
            var v = postParams[i].value;
            var input = $("<input type='hidden' name='" + k + "' value='" + v + "' />");
            input.appendTo(dynForm);
        }
    } else {
        //連想配列
        for (var k in postParams) {
            var v = postParams[k];
            var input = $("<input type='hidden' name='" + k + "' value='" + v + "' />");
            input.appendTo(dynForm);
        }
    }
    //$.dump(dynForm);
    return dynForm;
    } catch (e) {
        alert(e);
        return null;
    }

}

/* 複数のチェックボックスと１つのチェックボックスのチェックを連動させる（全選択チェックボックス実装用) */
function bindAllCheck(selectorAll, selector, fnOnChange)
{
    $(selectorAll).click(function(){
        var checked = ($(this).attr('checked') == 'checked');
        //toggle
        if (checked) {
            //$(this).removeAttr('checked');
            $(selectorAll).removeAttr('checked');
            $(selector).removeAttr('checked');
        } else {
            //$(this).removeAttr('checked');
            $(selectorAll).attr('checked', 'checked');
            $(selector).attr('checked', $(this).attr('checked'));
        }
        if (typeof(fnOnChange) == 'function') {
            $(selectorAll).each(fnOnChange);
        }
        if ($(this).is('a')) {
            return false;
        }
    });
    $(selector).click(function(){
        var checked = ($(selector).size() == $(selector).filter(":checked").size());
        if (checked) {
            $(selectorAll).attr('checked', 'checked');
        } else {
            $(selectorAll).removeAttr('checked');
        }
        if (typeof(fnOnChange) == 'function') {
            $(selectorAll).each(fnOnChange);
        }
        if ($(this).is('a')) {
            return false;
        }
    });
}

/* リンククリック時に指定フォームのサブミットが呼ばれるようにする */
function bindLinkClickSubmit(linkSelector, formSelector, fnConfirm)
{
    $(linkSelector).click(function() {
        try {
            if (typeof(fnConfirm) == 'function') {
                if (fnConfirm() == false) return false;
            }
            $(formSelector).attr("action", $(this).attr("href"));
            $(formSelector).submit();
            return false;
        } catch (e) {
            alert(e);
        }
        return false;
    });
}
/* リンククリック時に指定フォームのサブミットが呼ばれるようにする(target=_blnak版) */
function bindLinkClickSubmitBlank(linkSelector, formSelector, fnConfirm, clone)
{
    $(linkSelector).click(function() {
        try {
            if (typeof(fnConfirm) == 'function') {
                if (fnConfirm() == false) return false;
            }
            $(formSelector).attr("action", $(this).attr("href"));
            var targetPrev = $(formSelector).attr("target");
            $(formSelector).attr("target", "_blank");

            if(typeof clone != "undefined" && clone != "" && (navigator.appName.indexOf('Microsoft') > -1)){
                var chk = $(clone).clone().attr("checked","checked");
                $(formSelector).append(chk);
                $(formSelector).submit();
                chk.remove();
            }else{
                $(formSelector).submit();
            }
            
            $(formSelector).attr("target", targetPrev);
            return false;
        } catch (e) {
            alert(e);
        }
        return false;
    });
}
/* コンボ選択変更時に指定フォームのサブミットが呼ばれるようにする */
function bindComboChangeSubmit(comboSelector, formSelector, fnConfirm)
{
    $(comboSelector).unbind('change');
    $(comboSelector).change(function() {
        try {
            if (typeof(fnConfirm) == 'function') {
                if (fnConfirm() == false) return false;
            }
            $(formSelector).submit();
        } catch (e) { alert(e); }
        return false;
    });
}
/* 指定範囲のリンクをAjaxロード呼び出しに置き換える */
function attachAjaxLoad(divName, linkSelector, fnOnload)
{
    try {
        $(linkSelector).each(function() {
            if ($(this).is("a")) {
                $(this).click(function() {
                    var url = $(this).attr("href");
                    //loadPiece(url,divName,linkSelector,fnOnload);
                    loadSeparatePiece(url, divName, fnOnload);
                    return false;
                });
            } else if ($(this).is("form")) {
                $(this).unbind();
                $(this).submit(function() {
                    var url = $(this).attr("action");
                    loadSeparatePiece(url, divName, $(this).serializeArray(), fnOnload);
                    return false;
                });
            }
        });

        return false;
    } catch(e) {
        alert(e);
        return false;
    }
}
/* 上の関数で使われるAjaxによる部分読み込み */
function loadPiece(url,divName,linkSelector, fnOnload) {
    //$.dump($(divName));
    //alert(url + 'click');
    $(divName).each(function() {
        var myDivName = '#' + $(this).attr("id");
        //$(this).load(url+' '+myDivName, null, function(text, status){
        fixedJQueryLoad($(this), url+' '+myDivName, function(text, status){
              attachAjaxLoad(divName, linkSelector, fnOnload);
        });
    });
}
/* postした後結果の指定部分だけ読み込み・置換え */
function loadSeparatePiece(url, selector, params, callback)
{
    if (typeof url != "string") { return this._load(url); }
    callback = callback || function () {};
    var type = "GET";
    if (params) {
        if (jQuery.isFunction(params)) {
            callback = params;
            params = null;
        } else {
            params = jQuery.param(params);
            type = "POST";
        }
    }
    var self = $(selector);
    $.ajax({
        url: url,
        type: type,
        dataType: "html",
        data: params,
        async: false,
        complete: function(res, status) {
            if (status == "success" || status == "notmodified"){
                self.each(function() {
                    var myDivName = '#' + $(this).attr("id");
                    $(this).html(jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g, "")).find(myDivName).html());
                    if(pageTracker && $(this).attr("id") == "search-result-main"){
                        pageTracker._trackPageview(url);
                    }
                });
            }
            self.each(callback, [res.responseText, status, res]);
        }
    });
    return self;
}
function fixedJQueryLoad(obj, url, params, callback) {
    if (typeof url != "string") {
        return this._load(url);
    }
    var off = url.indexOf(" ");
    if (off >= 0) {
        var selector = url.slice(off, url.length);
        url = url.slice(0, off);
    }
    callback = callback || function () {};
    var type = "GET";
    if (params) {
        if (jQuery.isFunction(params)) {
            callback = params;
            params = null;
        } else {
            params = jQuery.param(params);
            type = "POST";
        }
    }
    var self = obj;
    $.ajax({
        url: url,
        type: type,
        dataType: "html",
        data: params,
        complete: function(res, status) {
            if (status == "success" || status == "notmodified") {
                self.html(selector ? jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g, "")).find(selector).html() : res.responseText);
            }
            self.each(callback, [res.responseText, status, res]);
        }
    });
    return obj;
}
