/***
* 
* jQuery Evolva plugin
* 
* 
***/
if(typeof(Evolva) == 'undefined'){
    Evolva = {};
}
Evolva.NAME = 'Evolva';
Evolva.VERSION = 0.01;

Array.prototype.indexOf = function(obj){
    for(var i=0; i<this.length; i++){
        if(this[i]==obj){
            return i;
        }
    }
    return -1;
}

/*
 * 
 * 検索エンジンのキーワードを取得して辞書とマッチング
 * -Evolva.SearchQuery.get(): リンク元URLから抽出した検索キーワードを配列で返す
 * -Evolva.SearchQuery.matchWord(): 辞書とマッチした単語を配列で返す
 * -Evolva.SearchQuery.matchKeyWord(): 辞書とマッチした単語から最も優先するキーワードを抽出
 * 
 */
Evolva.SearchQuery = {
    // リンク元URLから抽出した検索キーワードを配列で返す関数
    get: function(){
        var referrer = document.referrer;
        if(!referrer){return}
        var query, google = referrer.match(/google/), yahoo = referrer.match(/yahoo/);
        if(google){
            query = decodeURI(referrer.match(/q\=([^\&]*)/)[1]);
        }
        else if(yahoo){
            query = decodeURI(referrer.match(/p\=([^\&]*)/)[1]);
        }
        else{
            query = decodeURI(referrer.match(/q\=([^\&]*)/)[1]);
        }
        for(var i=0; i<query.length; i++){
            query = query.replace(/　/, "+");
        }
        query = query.split("+");
        return query;
    },
    // 辞書とマッチした単語を配列で返す関数
    matchWord: function(){
        var dictionary = Evolva.Dictionary;
        // Evolva.Dictionary["scene"][i]["keyword"] オブジェクトを連結して words 配列に格納する
        var words = [];
        for(var i=0; i<dictionary["scene"].length; i++){
            words = words.concat(dictionary["scene"][i]["keyword"].split("・"));
        }
        // 実行関数
        return function(){
            var array = [];
            for(i=0; i<Evolva.SearchQuery.get().length; i++){
                var index = words.indexOf(Evolva.SearchQuery.get()[i]);
                if(index != -1){
                    array.push(words[index]);
                }
            }
            return array;
        };
    },
    // 辞書とマッチした単語から最も優先するキーワードを抽出する関数
    matchKeyWord: function(){
        var matchWord = Evolva.SearchQuery.matchWord();
        var word = matchWord();
        var dictionary = Evolva.Dictionary;
        // 実行関数
        return function(){
            var array = [];
            for(var i=0; i<word.length; i++){
                for(var k=0; k<dictionary["scene"].length; k++){
                    var keyArray = (!dictionary["scene"][k]["keyword"]) ?  "" : dictionary["scene"][k]["keyword"].split("・");
                    for(var j=0; j<keyArray.length; j++){
                        if(word[i].match( keyArray[j] ) ){
                            array.push(k+dictionary["scene"][k]["id"]);
                            break;
                        }
                    }
                }
            }
            array.sort();
            //console.log(array[0].match(/(\d+)(.+)/)[2])
            return array[0].match(/(\d+)(.+)/)[2];
        }
    }
}