
	$(function() {
		var searchCondition = new Object();
		var serviceNames = new Array();
		initAvailableCategories();
		initAvailableServices();
		setFavorite();
		if(location.search){
			//$("#search_box_result").show();
			//$("#search_btn_result").show();
			hideResult();
			searchFromURLBar();
		}
		keyCheck();
		onChangeSort();
		onChangeRPP();
	});

	function setFavorite(){
		// ブラウザチェック
		if(navigator.userAgent.indexOf("Firefox") != -1){
			// alert("Firefox");
		}
		else if(navigator.userAgent.indexOf("Chrome") != -1){
			// alert("Chrome");
		}
		else if(navigator.userAgent.indexOf("Safari") != -1){
			// alert("Safari");
		}
		else{
			// "MSIE";
			$("#addFavorite").html('<a href="#" onclick="javascript:window.external.AddFavorite(\'http://www.shoppingfinder.jp/\', \'Shopping Finder\')"><img src="images/favicon16x16.png" alt="ショッピングファインダー">お気に入り</a>');
		}
	}

	function keyCheck(){
		// App.htmlではキーチェックをしない
		if(location.pathname != "/App.html"){
			$("#search_r").keypress(
				function(ev) {
					if ((ev.which && ev.which === 13) || (ev.keyCode && ev.keyCode === 13)) {
						searchValidation();
						return false;
					}
				}
			);
		}
	}

	function onChangeSort(){
		$("#sort").change(function () {
			var condition = getParameter(1);
			condition.keyword = encodeURIComponent(condition.keyword);
			condition.categoryId = getCategoryId();
			condition.sort = $(this).val();
			sendGet(condition);
        	});
	}

	function onChangeRPP(){
		$("#resultPerPage").change(function () {
			var condition = getParameter(1);
			condition.keyword = encodeURIComponent(condition.keyword);
			condition.categoryId = getCategoryId();
			condition.resultPerPage = $(this).val();
			sendGet(condition);
        	});
	}

	PageClick = function(pageclickednumber) {
		var condition = new Object();
		condition = getSearchCondition();
		condition.page = pageclickednumber;
		condition.categoryId = getCategoryId();
		condition.keyword = encodeURIComponent(condition.keyword);
		sendGet(condition);
	}

	function setSearchCondition(inputCondition){
		this.searchCondition = inputCondition;
	}

	function getSearchCondition(){
		return this.searchCondition;
	}

	function setServiceNames(inputArray){
		this.serviceNames = inputArray;
	}

	function getServiceNames(){
		return this.serviceNames;
	}

	function initAvailableCategories(){
		$.ajax({
			type : "GET",
			url : "/product-search/availableCategories",
			async : false,
			dataType : "xml",
			success : function(xml) {
				var categoryString = "";
				categoryString += "<select name=\"categoryId\" id=\"select_category\" class=\"dropdown\">";
				categoryString += "<option value=\"all\">全てのカテゴリー</option>";

				var categoryBoxString ="<ul class=\"box_select\">"
				categoryBoxString +="<li class=\"space\" id=\"all\"><a href onclick=\"searchFromCategory(\'all\'); return false;\" class=\"unselected\" id=\"all\">すべて</a></li>\n";
				$(xml).find("Category").each(function()
					{
						categoryString += "<option value=\"" + $(this).attr("id")  + "\">" + $(this).text() + "</option>";
						categoryBoxString += "<li><a href onclick=\"searchFromCategory("+ $(this).attr("id") +"); return false;\" class=\"unselected\" id=\"" + $(this).attr("id") + "\">"+ $(this).text() +"</a></li>\n";
					});
				categoryString += "</select>";
				categoryBoxString += "</ul>"
				$("#category").html(categoryString);
				$("#categoryBox").html(categoryBoxString);
			}
		});
		// set category color
		var categoryId = getCategoryId();
		var addWord = "<span id=\"selecting\">選択中</span>";
		if(categoryId == "all"){
			$("a#all").removeClass("unselected").addClass("selected");
		} else {
			$("a#" + categoryId).removeClass("unselected").addClass("selected");
		}
	}

	function initAvailableServices(){
		$.ajax({
			type : "GET",
			url : "/product-search/availableServices",
			async : false,
			dataType : "xml",
			success : function(xml) {
				var servicesString_shopping = "";
				var servicesString_auction = "";
				var shopNames = new Array();
				var count = 0;
				$(xml).find("Service").each(function()
					{
						shopNames[$(this).attr("id")] = $(this).text();
						if($(this).attr("id") != "YA"){
							servicesString_shopping += "<input type=\"checkbox\" id=\"" + $(this).attr("id") +"\"  name=\"serviceId\" value=\"" + $(this).attr("id")  + "\" onClick=\"checkForAuction('" + $(this).attr("id") + "')\" />" + $(this).text();
							servicesString_shopping += "<br>\n";
						} else {
							servicesString_auction += "<input type=\"checkbox\" id=\"" + $(this).attr("id") +"\"  name=\"serviceId\" value=\"" + $(this).attr("id")  + "\" onClick=\"checkForAuction('" + $(this).attr("id") + "')\" />" + $(this).text();
							servicesString_auction += "<br>\n";
						}

					});
				// オークション用
				servicesString_auction += "<div id=\"option\"><input type=\"checkbox\" id=\"auction\" name=\"options\" value=\"buyNowOnly\">即決価格で比較</input></div>";
				$("#availableServices_shopping").html(servicesString_shopping);
				$("#availableServices_auction").html(servicesString_auction);
				$("#option").hide();
				setServiceNames(shopNames);
			}
		});
	}

	function searchFromURLBar(){
		var urlString = location.search.substr(1).split("&");
		var queryString = new Array();
		for(var idx in urlString){
			queryString.push(urlString[idx].split("="));
		}
		var condition = new Object();
		var page= 1;
		for(var i = 0; i < queryString.length; i++){
			if(queryString[i][0] == "keyword"){
				condition.keyword = decodeURIComponent(queryString[i][1]);
			}
			if(queryString[i][0] == "categoryId" && queryString[i][1] != "all"){
				condition.categoryId = queryString[i][1];
			}
			if(queryString[i][0] == "productId"){
				condition.productId = queryString[i][1];
			}
			if(queryString[i][0] == "merchantId"){
				condition.merchantId = queryString[i][1];
			}
			if(queryString[i][0] == "merchantName"){
				condition.merchantName = queryString[i][1];
			}
			if(queryString[i][0] == "maximumPrice"){
				condition.maximumPrice = queryString[i][1];
			}
			if(queryString[i][0] == "minimumPrice"){
				condition.minimumPrice = queryString[i][1];
			}
			if(queryString[i][0] == "sort"){
				condition.sort = queryString[i][1];
			}
			if(queryString[i][0] == "page"){
				page = queryString[i][1];
			}
			if(queryString[i][0] == "resultPerPage"){
				condition.resultPerPage = queryString[i][1];
			}

			if(queryString[i][0] == "serviceId"){
				condition.serviceId = queryString[i][1];
			}
			if(queryString[i][0] == "options"){
				condition.options = queryString[i][1];
			}
			// debug と clearCacheが含まれている場合は検索しない
			if(queryString[i][0] == "debug" || queryString[i][0] == "clearCache" ){
				return;
			}
		}
		// resultPerPageが存在しないときはdefault で25を入力する
		if(!(condition.resultPerPage)){
			condition.resultPerPage = 25;
		}
		// sort が存在しないときの default は -price
		if(!(condition.sort)){
			condition.sort = "-price";
		}
		// serviceIdが存在しない時はすべてのserviceIdを入力する
		if(!(condition.serviceId)){
			condition.serviceId = "";
			for(var i in this.serviceNames){
				condition.serviceId += i + ",";
			}
			// serviceIdの最後につく「,」を削除
			if((m = condition.serviceId.lastIndexOf(",")) != -1) {
				condition.serviceId = condition.serviceId.substring(0, m);
			}
		}
		search(page,condition);
	}
	function searchFromCategory(cId){
		var searchCondition = getParameter(1);
		searchCondition.categoryId = cId;
		sendGet(searchCondition);
	}

	function getCategoryId(){
		if(location.search.match("categoryId=")){
			var urlString = location.search.substr(1).split("categoryId=");
			var indexNum = urlString[1].indexOf("&");
			if(indexNum > 0){
				urlString = urlString[1].substr(0,indexNum);
			} else {
				urlString = urlString[1];
			}
			return urlString;
		} else {
			// all を付与する
			return "all";
		}
	}

	function search(selected_page,condition) {
		hideResult();
		// get searching attributes
		if(condition == null){
			var searchCondition = getParameter(selected_page);
			// encording keyword for URL
			searchCondition.keyword = encodeURIComponent(searchCondition.keyword);
			sendGet(searchCondition);
		} else {
			var searchCondition = new Object();
			searchCondition = condition;
			searchCondition.page = selected_page;
		}

		// 画面項目の描画

		document.getElementsByName("keyword").item(0).value = decodeURI(searchCondition.keyword);

		if(searchCondition.minimumPrice != null){
			 $("input[name=minimum]").val(searchCondition.minimumPrice);
		}
		if(searchCondition.maximumPrice != null){
			 $("input[name=maximum]").val(searchCondition.maximumPrice);
		}
		if(searchCondition.sort != null){
			$("#sort").val(searchCondition.sort);
		}
		if(searchCondition.resultPerPage != null){
			$("#resultPerPage").val(searchCondition.resultPerPage);
		}
		if(searchCondition.serviceId){
			var searchIds = searchCondition.serviceId.split(",");
			var documents = document.getElementsByName("serviceId");
			for(var i = 0; i < searchIds.length; i++){
				for(var j = 0; j < documents.length;j++){
					if(documents[j].value == searchIds[i]){
						$("input:checkbox[value=" + documents[j].value + "]").attr("checked",true);
						checkForAuction(documents[j].value);
					} else if(searchIds[i] == "AJ" || searchIds[i] == "VA"){
						$("input:checkbox[value='AJ,VA']").attr("checked",true);
						checkForAuction("AJ,VA");
					}
				}
			}
		}

		if(searchCondition.options){
			var options = searchCondition.options.split(",");
			var documents = document.getElementsByName("options");
			for(var i = 0; i < options.length; i++){
				for(var j = 0; j < documents.length; j++){
					if(documents[j].value == options[i]){
						documents[j].checked = true;
					}
				}
			}
		}

		searchCondition = validationCondition(searchCondition);

		$.ajax({
			type : "GET",
			url : "/product-search/xml",
			data : searchCondition,
			async : true,
			dataType : "xml",
			// 検索中に再度検索するとエラーになるためコメントアウト
			//error: function(XMLHttpRequest, textStatus, errorThrown) {
	                //        alert('error search');
	                //},
			success : function(xml) {
				// 現在のページ
				var page = $(xml).find("Page").text();
				$("#current_page").html(page);
				// 総ヒット数
				var totalResults = addComma($(xml).find("TotalResults").text());
				$("#total_results").html(totalResults);
				// 1ページあたりの表示数
				var resultsPerPage = $(xml).find("ResultsPerPage").text();
				$("#result_per_page").html(resultsPerPage);
				// 総ページ数
				var totalPages = $(xml).find("TotalPages").text();
				$("#total_pages").html(totalPages);
				// オプション(YA時使用)
				var options = $(xml).find("Options").text();
				var itemString = ""
				var items = $(xml).find("Product");
				for(var i = 0, n = items.length; i < n; i++ ) {
					var serviceName = $(items[i]).find("Id").attr("s");
					var item_title = $(items[i]).find("Name").eq(0).text();
					var item_url = $(items[i]).find("Url").eq(0).text();
					var item_image = "";
					item_image = $(items[i]).find("Medium").text();
					if(item_image.length < 1){
						item_image = "./images/NoImageAvailable.png";
					}
					// jan code
					var janCode = "";
					janCode = $(items[i]).find("Jan").text();
					//alert(janCode);
					var item_price = "";
					// yahoo オークション
					if(serviceName == 'YA'){
						var item_price1 = addComma($(items[i]).find("Price").text());
						var item_price2 = addComma($(items[i]).find("Price2").text());
						if(options.indexOf("buyNowOnly") >= 0){
							if(item_price1 != item_price2){
								item_price = "<div class=\"price_optional\" >現在価格:" + item_price1 + "円</div><div class=\"price_require\" >即決価格:" + item_price2 + "円</div>";
							} else {
								item_price = "<div class=\"price_space\"></div><div class=\"price_require\" >" + item_price2 + "円</div>";
							}
						} else {
							if(item_price2 != ''){ // 即決価格が入力されていないときもある
								if(item_price1 != item_price2){
									item_price = "<div class=\"price_optional\" >即決価格:" + item_price2 + "円</div><div class=\"price_require\" >現在価格:" + item_price1 + "円</div>";
								} else {
									item_price = "<div class=\"price_space\"></div><div class=\"price_require\" >"+ item_price1 + "円</div>";
								}
							} else {
								item_price = "<div class=\"price_space\"></div><div class=\"price_require\" >" + item_price1 + "円</div>";
							}
						}
					} else {
						item_price = "<div class=\"price_space\"></div><div class=\"price_require\" >" + addComma($(items[i]).find("Price").text()) + "円</div>";
					}
					var item_store_name = $(items[i]).find("Store").find("Name").text();

					itemString += "<div class=\"result_cupsule\">";
					itemString += "<div class=\"result_image_shape\" id=\"image_shape\">";
					itemString += "<a href=\"" + item_url + "\" target=\"_blank\">";
					itemString += "<img src=\"" + item_image + "\" name=\"img_src\" class=\"picture\" id=\""+ i + "\" onload=\"imgSizeCheck2(id,src)\"></a>";
					itemString += "</div>";
					itemString += "<div class=\"goods_name\">";
					itemString += "<a href=\"" + item_url + "\" title=\""+ escapeQuote(item_title) + "\"  target=\"_blank\">";
					itemString += item_title + "</a></div>";
					var namesArray = new Array();
					namesArray = getServiceNames();
					var serviceIdName = serviceName;
					if(serviceName in namesArray){
						serviceName = namesArray[serviceName];
					}
					if(serviceName == "VA" || serviceName == "AJ"){
						serviceName = namesArray["AJ,VA"];
					}
					itemString += "<div class=\"site_name\">" + getImageIcon(serviceIdName) +"&nbsp;"+ serviceName + "</div>";
					if(serviceName != item_store_name){
						itemString += "<div class=\"store_name\">" + item_store_name + "</div>";
					}
					itemString += "<div class=\"goods_price\">" + getJanSearchLink(janCode) + item_price + "</div>";
					itemString += "</div>";
				}
				$("#search_result_items").html(itemString);
				// pager
				setSearchCondition(searchCondition);
				$("#pager").pager({ pagenumber: page, pagecount: totalPages, buttonClickCallback: PageClick });
			},
			complete: function(){
				showResult();

			}
		});
	}

	function escapeQuote(nameString){
		var value = nameString;
		return value.replace(/\"/g,"&quot;");
	}

	function getParameter(selected_page){
			var keyword = $("#search_box_result").val();
			//keyword = keyword.replace(/&/g, "and");
			var minimumPrice = "";
			if($("input[name=minimum]").val() != " 最安値"){
				minimumPrice = $("input[name=minimum]").val();
			}
			var maximumPrice = "";
			if($("input[name=maximum]").val() != " 最高値"){
				maximumPrice = $("input[name=maximum]").val();
			}
			var sort = $("#sort").val();
			var resultPerPage = $("#resultPerPage").val();
			var page = selected_page;
			var serviceId = "";
			var options = "";
			var selecteditems = $(":checkbox:checked");
			for(var i = 0, n = selecteditems.length; i < n; i++) {
				if(selecteditems[i].name == "serviceId"){
					serviceId += selecteditems[i].value + ",";
				} else if(selecteditems[i].name == "options"){
					options += selecteditems[i].value + ","
				}
			}
			if(serviceId == "" || serviceId.length == 0){
				for(var i in this.serviceNames){
					serviceId += i + ",";
				}
			}
			if((m = serviceId.lastIndexOf(",")) != -1) {
				serviceId = serviceId.substring(0, m);
			}

			if((m = options.lastIndexOf(",")) != -1) {
				options = options.substring(0, m);
			}

			// searchCondition
			var searchCondition = new Object();
			searchCondition.keyword = keyword;
			searchCondition.categoryId = getCategoryId();

			if(0 < minimumPrice.length) {
				searchCondition.minimumPrice = minimumPrice;
			}
			if(0 < maximumPrice.length) {
				searchCondition.maximumPrice = maximumPrice;
			}
			if(sort != null){
				searchCondition.sort = sort;
			}
			searchCondition.page=page;
			if(resultPerPage != ""){
				searchCondition.resultPerPage = resultPerPage;
			}
			searchCondition.serviceId = serviceId;

			// 追加項目（開発用項目) options
			if(options.length > 0){
				searchCondition.options = options;
			}

			return searchCondition;
	}

	function validationCondition(condition){
		var tmpCondition = new Object();
		// keyword required
		tmpCondition.keyword = condition.keyword;
		// categoryId
		if(condition.categoryId != "all"){
			tmpCondition.categoryId = condition.categoryId;
		}
		// productId
		if(condition.productId){
			tmpCondition.productId = condition.productId;
		}
		// merchantId
		if(condition.merchantId){
			tmpCondition.merchantId = condition.merchantId;
		}
		// merchantName
		if(condition.merchantName){
			tmpCondition.merchantName = condition.merchantName;
		}
		// maximumPrice
		if(condition.maximumPrice){
			tmpCondition.maximumPrice = condition.maximumPrice;
		}
		// minimumPrice
		if(condition.minimumPrice){
			tmpCondition.minimumPrice = condition.minimumPrice;
		}
		// sort
		if(condition.sort){
			tmpCondition.sort = condition.sort;
		}
		// page
		if(condition.page){
			tmpCondition.page = condition.page;
		}
		// resultPerPage
		if(condition.resultPerPage){
			tmpCondition.resultPerPage = condition.resultPerPage;
		}
		// options
		if(condition.options){
			tmpCondition.options = condition.options;
		}
		// serviceId required
		tmpCondition.serviceId = condition.serviceId;

		return tmpCondition;
	}

	function getImageIcon(serviceName){
		return "<img src=\"images/icon_" + serviceName +".gif\" />";
	}

	function getJanSearchLink(janString){
		if(janString.length > 0){
			return "<a href=\"Search.html?keyword=" + janString +"\"><img src=\"images/pinpoint.gif\" /></a>";
		} else {
			return "";
		}
	}

	function hideResult(){
		$("#loading").show();
		$("#sort").hide();
		$("#resultPerPage").hide();
		$("#search_result_items").hide();
		$("#line_light").hide();
		$("#result_info").addClass("result_info");
		$("#result_info").hide();
		$("#pager").hide();
	}

	function showResult(){
    		$("#loading").hide();
		$("#sort").show();
		$("#resultPerPage").show();
		$("#search_result_items").show();
		$("#line_light").show();
		$("#result_info").show();
		$("#result_info").removeClass("result_info");
		$("#search_result_header").show();
		$("#search_result_count").show();
		$("#search_result_items").show();
		//imgSizeCheck();
		$("#search_result").show();
		$("#pager").show();
	}

	function imgSizeCheck(){

		setTimeout(
 	 		function()
  				{
				var imgs = $("img[name=img_src]");
				for(var i = 0; i < imgs.length; i++){
					var newImg = new Image();
					var tmpS = imgs[i].attributes.src.value;
					newImg.src = tmpS;
					newImg.onload = function(){
						if((newImg.height * newImg.width) < 100){
							// alert(i + "番目の画像は\nHeight:" + newImg.height + "\nWidth:" + newImg.width);
							imgs[i].attributes.src.value = "./images/NoImageAvailable.png";
						}
					}
				}
			},1000
		);
	}

	function imgSizeCheck2(id,src){
			var newImg = new Image();
			newImg.src = src;
			newImg.onload = function(){
				if((newImg.height * newImg.width) < 100){
					// alert(id + "番目の画像は\nHeight:" + newImg.height + "\nWidth:" + newImg.width);
					$(".result_image_shape img[id="+id+"]").attr("src", "./images/NoImageAvailable.png");
				}
			}
	}

	function sendGet(condition){
		var locationString = "";
		var flag = false;
		for(var i in condition){
			if(condition[i] != "" && flag == false){
				locationString += "?";
				flag = true;
			} else {
				locationString += "&";
			}
			locationString += i + "=" + condition[i];
		}
		//$("#search_box_result").hide();
		//$("#search_btn_result").hide();
		return location.search = locationString;
	}

	function addComma(value){
	var i;
	for(i = 0; i < value.length/3; i++){
		value = value.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2");
	}
		return value;
	}

	function writeValue(condition){
		inputValues[0].value = condition.keyword;
	}

	function indexValidation(){
		var err_message = "";
		var input = $("#search_box").val();
		input = input.replace(/^\s+|\s+$/g, "");
		if( input.length < 1 ){
			err_message +="検索ワードを入力して下さい";
		}
		if(err_message.length < 1){
			var keyword = $("#search_box").val();
			var category = $("#select_category").val();
			var lString = location.protocol + "//" + location.host +"/Search.html?keyword=" + encodeURIComponent(keyword) + "&categoryId=" + category;
			location.href = lString;
			return false;
		} else {
			alert(err_message);
			return false;
		}
	}

	function searchValidation(){
		var err_message = "";
		var input = $("#search_box_result").val();
		input = input.replace(/^\s+|\s+$/g, "");
		if(input.length < 1){
			err_message +="検索ワードを入力して下さい\n";
		}
		if($("input:checked[name=serviceId]").length != null
			&& $("input:checked[name=serviceId]").length < 1){
			err_message +="「ショッピング」か「オークション」より一つは選択して下さい\n";
		}
		var min = $("input[name=minimum]").val();
		if(min != " 最安値") {
			if(!(parseInt(min) > 0)){
				err_message += "最安値には0以上の半角数値を入力して下さい\n";
			}
		}
		var max = $("input[name=maximum]").val();
		if(max != " 最高値") {
			if(!(parseInt(max) > 0)){
				err_message += "最高値には0以上の半角数値を入力して下さい\n";
			} else if(parseInt(min) > 0
				&& parseInt(max) < parseInt(min)) {
				err_message += "最高値には最安値以上の数値を入力して下さい\n";
			}
		}
		if(err_message.length < 1){
			return search(1);
		} else {
			if((m = err_message.lastIndexOf("\n")) != -1) {
				err_message = err_message.substring(0, m);
			}
			alert(err_message);
			return false;
		}
	}

	function appValidation(){
		var err_message = "";
		var input = $("#search_box_result").val();
		input = input.replace(/^\s+|\s+$/g, "");
		if(input.length < 1){
			err_message +="検索ワードを入力して下さい";
			alert(err_message);
			return false;
		} else {
			return true;
		}
	}

	function checkForAuction(id) {
		var inputId = id;
		if(id == 'YA'){ // ヤフーオークションID
			if($(":checkbox[id="+ id +"]").attr("checked")== true){
				$("#option").show();
			} else {
				$(":checkbox[id=auction]").attr("checked",false);
				$("#option").hide();
				return false;
			}
		}
	}

	function getImageWidth(myid)
	{
		var newImg = new Image();
		newImg.src = document.getElementById(myid).src;
		var width = newImg.width;
		return width;
	}

	function getImageHeight(myid)
	{
		var newImg = new Image();
		newImg.src = document.getElementById(myid).src;
		var height = newImg.height;
		return height;
	}

