var tq = {
    inited: false,
    lastResult: [],
    foreCasteTemplate: "<p>${city} 的天气预报，今天是${date_y}，农历${date}</p><table><tr><td style='width:110px'><img style='display:block' src='http://l.yimg.com/us.yimg.com/i/us/nws/weather/gr/${img1}${dorn}.png' /></td><td style='vertical-align:top'><div style='font-size:32px;font-weight:bolder'>${temp1}</div><div style='font-size:20px'>${weather1}</div></td></tr></table>",
    init: function(){
        if (tq.inited) 
            return;
        
        jQuery.ajax({
            url: "http://sly9.net/upload/weather.json",
            async: false,
            dataType: "json",
            success: function(json){
                //displayMessage("init finish, got records: " + json.length + " items");
                tq.data = json;
                tq.inited = true;
            }
        })
    },
    search: function(str){
        if (str.length == 0) 
            return [];
        var item, result = [];
        for (var i in tq.data) {
            item = tq.data[i];
            if ((item.key.indexOf(str) != -1 || item.pinyin.indexOf(str) != -1) && item.url != null) 
                result.push(item);
        }
        return result;
        //return quick_sort(result,cityComparator);
    },
    cityComparator: function(x, y){
        var sumx = 0, sumy = 0;
        sumx += x.url;
        sumy += y.url;
        return sumx > sumy ? 1 : (sumx == sumy ? 0 : -1);
    }
    
};

tq.init();

var QS = {
    partition: function(array, begin, end, pivot, comparator){
        var tmp;
        var piv = array[pivot];
        tmp = array[pivot];
        array[pivot] = array[end - 1];
        array[end - 1] = tmp;
        
        
        var store = begin;
        var ix;
        for (ix = begin; ix < end - 1; ++ix) {
            if (comparator(array[ix], piv) <= 0) {
                tmp = array[store];
                array[store] = array[ix];
                array[ix] = tmp;
                ++store;
            }
        }
        tmp = array[end - 1];
        array[end - 1] = array[store];
        array[store] = tmp;
        
        return store;
    },
    qsort: function(array, begin, end, comparator){
        if (end - 1 > begin) {
            var pivot = begin + Math.floor(Math.random() * (end - begin));
            
            pivot = QS.partition(array, begin, end, pivot, comparator);
            
            QS.qsort(array, begin, pivot, comparator);
            QS.qsort(array, pivot + 1, end, comparator);
        }
    },
    quick_sort: function(array, comparator){
        QS.qsort(array, 0, array.length, comparator);
    }
    
};




CmdUtils.CreateCommand({
    name: "tq",
    icon: "http://example.com/example.png",
    homepage: "http://example.com/",
    author: {
        name: "SLY",
        email: "sly.thu@gmail.com"
    },
    license: "GPL",
    description: "A short description of your command",
    help: "How to use your command",
    takes: {
        "input": /.*/
    },
    preview: function(pblock, input){
        tq.init();
        var result = tq.search(input.text);
        if (tq.lastResult.length > 0 && result[0] == tq.lastResult[0]) 
            return;
        tq.lastResult = result;
        
        pblock.innerHTML = "";
        if (result.length == 0) {
            pblock.innerHTML = "no results....";
            return;
        }
        //displayMessage("result length=" + result.length);
        //http://www.weather.com.cn/data/sk/101010100.html
        var foreCastResult = jQuery("<div></div>").appendTo(pblock);
        jQuery.getJSON("http://m.weather.com.cn/data/" + result[0].url + ".html", {}, function(json){
            var info = json.weatherinfo;
            var hour = new Date().getHours();
            
            info.dorn = (hour >= 6 && hour <= 18) ? "d" : "n";
            
            info.img1 = tq.legends[info.img1];
            info.img3 = tq.legends[info.img3];
            var msg = tq.foreCasteTemplate;
            foreCastResult.append(CmdUtils.renderTemplate(msg, info));
            
            //            for (var i in info) {
            //                foreCastResult.append("<div style='font-size:10px'>" + i + ":" + info[i] + "</div>");
            //            }
            
            var len = result.length > 10 ? 10 : result.length;
            for (var i = 1; i < len; i++) {
                pblock.innerHTML += "<div style='font-size:10px'>" + result[i].key + "...</div>"
            }
        });
        //pblock.innerHTML = result.length;
        //pblock.innerHTML += "AAAAAYour input is <b>" + input.text + "</b>.";
    },
    execute: function(input){
        //displayMessage("You selected: " + input.text);
        tq.init();
        var result = tq.search(input.text);
        
        //displayMessage("result length="+result.length);
        Utils.openUrlInBrowser("http://weather.com.cn/html/weather/" + result[0].url + ".shtml");
    }
});

//use numbers from weather.com.cn to get beautiful pictures from yahoo
tq.legends = {
    0: 32,//晴
    1: 30,//多云
    2: 26,//阴
    3: 10,//阵雨
    4: 0,//雷阵雨
    5: 7,//雷阵雨伴有冰雹
    6: 5,//雨夹雪
    7: 9,//小雨
    8: 9,//中雨
    9: 10,//大雨
    10: 10,//暴雨
    11: 10,//大暴雨
    12: 10,//特大暴雨
    13: 13,//阵雪
    14: 14,//小雪
    15: 14,//中雪
    16: 13,//大雪
    17: 13,//暴雪
    18: 19,//雾
    19: 7,//冻雨
    20: 44,//沙尘暴
    21: 9,//小雨-中雨
    22: 9,//中雨-大雨
    23: 10,//大雨-暴雨
    24: 11,//暴雨-大暴雨
    25: 11,//大暴雨-特大暴雨
    26: 14,//小雪-中雪
    27: 13,//中雪-大雪
    28: 13,//大雪-暴雪
    29: 44,//浮尘
    30: 44,//扬沙
    31: 44,//强沙尘暴
};

