(function(){
	if(typeof jQuery == 'undefined'){
		return;
	}
	jQuery.noConflict();
	jQuery(document).ready(function(){
		var $ = jQuery;
		var timeoutNum = 2000;
		var operationUrl = "/search/save-search-option?callback=?";

		var beforeSave = $("#beforeSave");
		var afterSave = $("#afterSave");
		var nowCondition = $("#nowCondition");
		var nowConditionMenu = $("#nowConditionMenu");
		var message = $("#message");
		var openSearchCondition = $("#openSearchCondition");
		var savedSearchCondition = $("#savedSearchCondition");

		$(function(){
			$("#saveSearchOptionTitle").css({"display":"block"});
		});

		$(function(){
			$("#searchOptionArea").css({"display":"block"});
		});

		createOperationParameterMap = function(operation) {
			var paramMap = [];
			var sortParam = '';
			var viewParam = '';
			var filterParam = [];
			var lidParam;
			if (operation == 'save') {
				lidParam = 'sd_svop_save';
			} else if (operation == 'change') {
				lidParam = 'sd_svop_change';
			} else if (operation == 'delete') {
				lidParam = 'sd_svop_clear';
			}

			if (operation != 'delete') {
				$("#saveOptionForm :hidden").each(function(){
					var name = $(this).attr('name');
					var val  = $(this).val();
					if(name != null && name.length > 0){
						if(name == 's'){
							sortParam = val;
						} else if(name == 'v') {
							viewParam = val;
						} else if(name == 'f') {
							filterParam.push(val);
						}
					}
				});
			}

			paramMap = {'s':sortParam, 'v':viewParam, 'f':filterParam, 'op':operation, 'l-id':lidParam};
			return paramMap;
		};

		executeOperation = function(operation){
			try{
				$.ajax({
					url: operationUrl,
					data: createOperationParameterMap(operation),
					dataType: "jsonp",
					timeout: timeoutNum,
					cache: false,
					traditional:true,
				    success: function(data, status) {
						if(operation == 'save'){
							saved(data, operation);
						} else if (operation == 'change') {
							saved(data, operation);
						} else if (operation == 'delete') {
							deleted(data);
						}
					},
				    error: function(data, status, errorThrown) {
						$("#pickupLoader").css({"display":"none"});
						$("#searchOptionArea").css("height","40px");
						message.html("<label class='bold'>エラーが発生しました</label>");
					}
				});
			}catch(e){
			}
		};

		$(function(){
			$("#saveButton").removeAttr("disabled");
			$("#saveOptionForm").submit(function() {
				message.html("");
				$("#saveButton").attr("disabled", "disabled");
				nowConditionMenu.css({"display":"none"});
				beforeSave.css({"display":"none"});
				$("#pickupLoader").css({"display":"block"});
				setTimeout(function(){
					executeOperation("save");
				}, 300);
				$("#saveButton").removeAttr("disabled");
				return false;
			});
		});

		$(function(){
			$("#deleteSearchOption").click(function(){
				message.html("");
				openSearchCondition.css("background","url(http://image.www.rakuten.co.jp/com/img/icon/icon_plus.gif) no-repeat");
				openSearchCondition.css("margin-bottom","5px");
				savedSearchCondition.css({"display":"none"});
				afterSave.css({"display":"none"});
				$("#pickupLoader").css({"display":"block"});
				setTimeout(function(){
					executeOperation("delete");
				}, 300);
				return false;
			});
		});

		$(function(){
			$("#changeSearchOption").click(function(){
				message.html("");
				openSearchCondition.css("background","url(http://image.www.rakuten.co.jp/com/img/icon/icon_plus.gif) no-repeat");
				openSearchCondition.css("margin-bottom","5px");
				savedSearchCondition.css({"display":"none"});
				afterSave.css({"display":"none"});
				$("#pickupLoader").css({"display":"block"});
				setTimeout(function(){
					executeOperation("change");
				}, 300);
				return false;
			});
		});

		saved = function(data, operation){
			if(data !=null && data.status == 'OK'){

				var messageStr = "";
				if (operation == "save") {
					messageStr = "保存しました";
				} else {
					messageStr = "変更しました";
				}

				message.fadeIn(500,function(){
					$("#pickupLoader").css({"display":"none"});
					message.html("<label class='bold'>" + messageStr + "</label>");
					afterSave.show(500,function(){
						var detail = data.saveSearchOptionDetails.saveSearchOptionDetail[0];
						var sortObj;
						var viewModeObj;
						var filterObjArray = new Array();
						$(detail.saveSearchOptions.saveSearchOption).each(function() {
								if (this.columnName == 'sort') {
									sortObj = this;
								} else if (this.columnName == 'viewMode') {
									viewModeObj = this;
								} else if (this.columnName == 'filter') {
									filterObjArray.push(this);
								}
						});
						var sortStr = "";
						if (sortObj != null && sortObj.description != null && sortObj.description.length > 0) {
							sortStr = sortObj.description;
						} else {
							sortStr = "保存されていません";
						}
						$("#sortResult").html("<ul><li><label class='bold'>"+ sortStr +"</label></li></ul>");

						var viewModeStr = "";
						if (viewModeObj != null && viewModeObj.description != null && viewModeObj.description.length > 0) {
							viewModeStr = viewModeObj.description;
						} else {
							viewModeStr = "保存されていません";
						}
						$("#viewModeResult").html("<ul><li><label class='bold'>" + viewModeStr + "</label></li></ul>");

						var filterStr = "";
						if	(filterObjArray != null && filterObjArray.length > 0)	{
							$(filterObjArray).each(function() {
								if(this.description != null && this.description.length > 0){
									filterStr += "<li><label class='bold'>" + this.description + "</label></li>";
								}
							});
						}

						if(filterStr.length < 1){
							filterStr = "<li><label class='bold'>絞込条件なし</label></li>";
						}

						$("#filterResult").html("<ul>" + filterStr + "</ul>");
						setHiddenParameter(sortObj, viewModeObj, filterObjArray);
					});
				});
			} else {
				var messageStr = "";
				if (operation == "save") {
					messageStr = "保存に失敗しました";
				} else {
					messageStr = "変更に失敗しました";
				}

				$("#pickupLoader").css({"display":"none"});
				$("#searchOptionArea").css("height","40px");
				message.html("<label class='bold'>" + messageStr + "</label>");
			}
		};

		setHiddenParameter = function(sortObj, viewModeObj, filterObjArray){
			var result = "";
			$("#useSavedOptionForm :hidden").each(function(){
				var name = $(this).attr('name');
				var val  = $(this).val();
				if(name != null && name.length > 0 && name != 's' && name != 'v' && name != 'f'){
					result += "<input type='hidden' name='"+ name + "' value='" + val + "'>";
				}
			});

			if (sortObj != null) {
				result += "<input type='hidden' name='s' value='" + sortObj.value + "'>";
			}
			if (viewModeObj != null) {
				result += "<input type='hidden' name='v' value='" + viewModeObj.value + "'>";
			}
			if (filterObjArray != null && filterObjArray.length > 0) {
				$(filterObjArray).each(function() {
					result += "<input type='hidden' name='f' value='" + this.value + "'>";
				});
			}
			$("#savedOption").html(result);
		};

		deleted = function(data){
			if(data !=null && data.status == 'OK'){
				$("#pickupLoader").css({"display":"none"});
				message.html("<label class='bold'>クリアしました</label>");
				nowConditionMenu.css({"display":"block"});
				beforeSave.show(700);
			} else {
				$("#pickupLoader").css({"display":"none"});
				$("#searchOptionArea").css("height","40px");
				message.html("<label class='bold'>クリアに失敗しました</label>");
			}
		};




		$(function(){
			openSearchCondition.click(function(){
				if (savedSearchCondition.css("display") == "none") {
					openSearchCondition.css("background","url(http://image.www.rakuten.co.jp/com/img/icon/icon_minus.gif) no-repeat");
					openSearchCondition.css("margin-bottom","8px");
					savedSearchCondition.show(400);
				} else {
					openSearchCondition.css("background","url(http://image.www.rakuten.co.jp/com/img/icon/icon_plus.gif) no-repeat");
					openSearchCondition.css("margin-bottom","5px");
					savedSearchCondition.hide(400);
				}
			});
		});

		$(function(){
			nowCondition.click(function(){
				if (nowConditionMenu.css("display") == "none") {
					nowCondition.css("background","url(http://image.www.rakuten.co.jp/com/img/icon/icon_minus.gif) no-repeat");
					nowConditionMenu.show(400);
				} else {
					nowCondition.css("background","url(http://image.www.rakuten.co.jp/com/img/icon/icon_plus.gif) no-repeat");
					nowConditionMenu.hide(400);
				}
			});
		});

	});
})();

