/*
 * rankingcheck
 * 
 * Copyright (c) 2009-2010 Takao Tagawa (dounokouno.com)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Since:       2010-02-13
 * Modified:    2010-12-10
 *
 * jQuery 1.6.4
 * 
*/

(function($){
	$(function(){	
		// 初期状態でアドレスにフォーカス
		$("#address").focus();
		
		// チェックボタン
		$("#check").click($.rankingcheck.check);
		
		// リセットボタン
		$("#reset").click($.rankingcheck.reset);
		
	});
	
	// 変数
	var base_url = "rankingcheck.php";
	var loader = "<img src=\"../img/loader.gif\" />";
	var loadtime = 20000;
	var req = new Array();
	var m = 0;
	
	// 処理
	$.rankingcheck={
		// チェック
		check:function(){
			// 実行中のAjaxを中止
			m = 0;
			$.rankingcheck.abort(req);
			
			// テーブルの表示をリセット
			$("tbody td").html(" ");
			
			// キーワードを取得
			var keywords = new Array();
			if ($("#keywords").val() != "") {
				keywords = $("#keywords").val().split("\n");
			}
			
			// キーワードの空文字列を削除
			for (var i = keywords.length;i >= 0;i--) {
				if (keywords[i] == "") {
					keywords.splice(i,1);
				}
			}
			
			// アドレスを取得
			var address = $("#address").val();
			
			// キーワード分だけループ
			var n = 1;
			for (var i = 0;keywords.length > i;i++) {
				// キーワードをテーブルに表示
				$("#keyword" + n).text(keywords[i]);
				
				// 検索
				$.rankingcheck.search(keywords[i], address, "google", "google" + n);
				$.rankingcheck.search(keywords[i], address, "yahoo", "yahoo" + n);
				$.rankingcheck.search(keywords[i], address, "bing", "bing" + n);
			
				// カウントアップ
				n++;
			}
			return false;
		},
		
		// 検索
		search:function(keyword, address, engine, id){
			// 変数
			var url = "";
			var rank = 0;
			var total = 0;
			
			// URL
			url = base_url + "?engine=" + engine + "&keyword=" + keyword + "&address=" + address;
			
			// ローディング画像を表示
			$("#" + id).html(loader);
			
			// ajax
			req[m] = new Object();
			req[m] = $.ajax({
				url: url,
				type: "GET",
				dataType: "xml",
				timeout: loadtime,
				cache: false,
				error: function(){
					// 再チェック
					$.rankingcheck.search(keyword, address, engine, id);
				},
				success: function(xml){
					// 結果が正しく取得できない場合の対応
					if (($(xml).find("total").text() != "") && ($(xml).find("total").text() != "")) {
						// 空ではない場合
						rank = $(xml).find("rank").text();
						total = $(xml).find("total").text() + "件中";
						if (rank == 0) {
							rank = "圏外";
						} else {
							rank += "位";
						}
						$("#" + id).text(rank + " / " + total);
					} else {
						// 空の場合
						$.rankingcheck.search(keyword, address, engine, id);
					}
				}
			});
			
			// カウントアップ
			m++;
			
			return false;
		},
		
		// 中止
		abort:function(request){
			for (var i = 0; i < request.length; i++) {
				request[i].abort();
			}
			return false;
		},
		
		// リセット
		reset:function(){
			// 実行中のAjaxを中止
			m = 0;
			$.rankingcheck.abort(req);
			
			// 各項目の値をリセット
			$("#address").val("");
			$("#keywords").val("");
			$("tbody td").html(" ");
			$("#address").focus();
			return false;
		}
	};
})(jQuery);
