(function($){
Array.prototype.indexOf = function(obj){
    for(var i=0; i<this.length; i++){
        if(this[i]==obj){
            return i;
        }
    }
    return -1;
}

jQuery.fn.set_idSearch = function( options ){
    if(!$(this)[0]){return;}
    var _this = this;
    //ulを作って変数に入れる。
    var dataBody = $('.errorMessage', this).after('<ul class="instruments" style="display:none"><li>copy<li></ul >').next();
    var data = (function(){	//xmlを取得して{itemId: html}のオブジェクトを返す
        var _node = {};
        $.ajax({
            type: "GET",
            url: options.xml,
            dataType: "xml",
            success: function(data){
                $("item",data).each(function(){
                //itemの中身をオブジェクトに入れて_nodeオブジェクトに追加していく。
                    var item={ id: $(this).attr('id'), link: $("link", this).text(), image: $('image', this).text(), url: $('url', this).text() }
                    _node[item.id] = eval(options.nodeTemplate);
                });
                setInterval(function(){	//3文字以上入力でボタンアクティブ
                    if($('input[type="text"]', _this).attr('value') && $('input[type="text"]', _this).attr('value').length > 2){
                        $('input[type="submit"]', _this).attr('disabled',false)
                    }else{
                        $('input[type="submit"]', _this).attr('disabled',true)
                    }
                },100);
            }
        });
        return _node;
    })();

    var form = document.forms['instForm_1'];
    form.onsubmit = function(){
        $(".errorMessage", _this).hide();
        var query = $('input[type="text"]', _this).attr('value')
        charTable = {
            alpha1 : "abcdefghijklmnopqrstuvwxyzａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚABCDEFGHIJKLMNOPQRSTUVWXYZＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ",
            alpha2 : "ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚABCDEFGHIJKLMNOPQRSTUVWXYZＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺabcdefghijklmnopqrstuvwxyz",
            alpha3 : "ABCDEFGHIJKLMNOPQRSTUVWXYZＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺabcdefghijklmnopqrstuvwxyzａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ",
            alpha4 : "ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺabcdefghijklmnopqrstuvwxyzａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚABCDEFGHIJKLMNOPQRSTUVWXYZ",
            number1 : "0123456789０１２３４５６７８９",
            number2 : "０１２３４５６７８９0123456789",
            meta1 : ["\\","\.","\^","\$","\?","\*","\+","\{","\}","\[","\]","\(","\)","\|","￥","．","＾","＄","？","＊","＋","｛","｝","［","］","（","）","｜"],
            meta2 : ["￥","．","＾","＄","？","＊","＋","｛","｝","［","］","（","）","｜","\\\\","\\\.","\\\^","\\\$","\\\?","\\\*","\\\+","\\\{","\\\}","\\\[","\\\]","\\\(","\\\)","\\\|"],
            meta3 : ["\\\\","\\\.","^","\\\$","\\\?","\\\*","\\\+","\\\{","\\\}","\\\[","\\\]","\\\(","\\\)","\\\|","￥","．","＾","＄","？","＊","＋","｛","｝","［","］","（","）","｜"]
        }
        var regexpSet = [];
        var splitN = 0;
        for (var i=0; i<query.length; i++) {
            _char = query.charAt(i);
            if(_char==" "|"　"){++splitN}
            if(!regexpSet[splitN]){regexpSet[splitN] = ""}
            if(charTable.alpha1.indexOf(_char,0) != -1){
                n = charTable.alpha1.indexOf(_char,0);
                var charset = []
                charset[1] = charTable.alpha1.charAt(n);
                charset[2] = charTable.alpha2.charAt(n);
                charset[3] = charTable.alpha3.charAt(n);
                charset[4] = charTable.alpha4.charAt(n);
                regexpSet[splitN] += "("+charset[1]+"-?|"+charset[2]+"-?|"+charset[3]+"-?|"+charset[4]+"-?)";
            }else if(charTable.number1.indexOf(_char,0) != -1){
                n = charTable.number1.indexOf(_char,0);
                var charset = []
                charset[1] = charTable.number1.charAt(n);
                charset[2] = charTable.number2.charAt(n);
                regexpSet[splitN] += "("+charset[1]+"-?|"+charset[2]+"-?)";
            }else if(charTable.meta1.indexOf(_char) != -1){
                n = charTable.meta1.indexOf(_char);
                var charset = []
                charset[1] = charTable.meta2[n];
                charset[2] = charTable.meta3[n];
                regexpSet[splitN] += "("+charset[1]+"-?|"+charset[2]+"-?)";
            }else if(_char!=" "|"　"){
                regexpSet[splitN] += _char+"-?"
            }
        }

        $(dataBody).empty();	//ulの中身を空にする。
        var i
        for(i in data){
            var flag = true;
            for(var j=0;j<regexpSet.length;j++){
                if(!i.match(regexpSet[j])){
                    flag = false;
                }
            }
            if(flag){$(dataBody).prepend(data[i]);}
        }
        if($("li", $(dataBody)[0]).text()==""){
            $(".errorMessage", _this).slideDown(100)
        }else{
            $(dataBody).slideDown(200,function(){$('#name').set_loader2()});
            $('#layerInstruments ul.instruments li').set_height({ items_per_row:3, group_by_parent: 'ul' });
            $('#name ul.instruments > li').set_height({ items_per_row:3, group_by_parent: 'ul' });
        }
            $(form).attr("action","javascript:void(0)");
            return false;
        };
    };
})(jQuery);


$.fn.set_loader2 = function( options ){
    if( !this.length ){return}
    var _this = $(this);
    
    $(this).append('<div class="loader-bg"></div>');
    $('div.loader-bg').append('<div class="loader"></div>');
    $('div.loader').append('<p><img src="/musicdata/compo/img/module/loader_text.gif" alt="ただいま楽器選択中です。少々お待ちください。" widht="162" height="35" /></p>');
    var loader = {
        items: $('a.inst_select',this),
        // ローダーの背景
        bg: $('div.loader-bg'),
        bg_css: function(){
            loader.bg.css({ backgroundColor:'#fff', display:'none', position:'absolute', zIndex:'120', top:'0', left:'0', width:$("#name").width() + "px", height: $("#name").height() - 70 + "px" });
        },
        // ロード中画面
        elm: function(){
            var _top = loader.bg.height()/2-35;// 背景の高さ/2 - ロード中画面要素の高さ/2
            var _left = loader.bg.width()/2-150;// 背景の幅/2 - ロード中画面要素の幅/2
            $('div.loader').css({ position:'absolute', zIndex:'121', top:_top + "px", left:_left + "px" });
        },
        view: function(){
            loader.bg.css({display: "block"});
        }
    };
    loader.bg_css();
    loader.elm();
    loader.items.each(function(){
        $(this).click(function(){
            loader.view();
        })
    });
};


$(document).ready(function(){
options1 = {
        xml:"/musicdata/compo/xml/instruments/AllProducts.xml",
        nodeTemplate:"'<li><a href=\"'+item.link+'\" class=\"inst_select\"><img src=\"/musicdata/compo/img/module/btn_select.gif\" alt=\"選択\" /></a>'+item.id+'</li>'"
}
options2 = {
        xml:"/musicdata/compo/xml/instruments/AllProducts.xml",
        nodeTemplate:"'<li>"
                             + "<dl>"
                             + "<dt>'+item.id+'</dt>"
                             + "<dd class=\"select\"><a href=\"'+item.link+'\" class=\"inst_select\"><img src=\"/musicdata/compo/img/module/btn_thisSelect.gif\" alt=\"この楽器を選択する\" width=\"107\" height=\"16\" /></a></dd>"
							 + "'+(item.url?('<dd class=\"info\"><a href=\"'+item.url+'\" target=\"_blank\">製品情報</a></dd>'):(''))+'"
                             + "<dd class=\"photo\"><img src=\"/musicdata/compo/img/instruments/'+item.image+'\" alt=\"\" width=\"55\" height=\"55\" /></dd>"
                             + "</dl>"
                             + "</li>'"
}

        $('.searchA #name').set_idSearch(options1);
        $('.searchB #name').set_idSearch(options2);
});
