/**
 * ...
 * @author DefaultUser
 */

(function() {
	MYNAMESPACE.namespace('modules.BulkRequest');
	MYNAMESPACE.modules.BulkRequest = function() {
		this.elems = [$(".summarizeTopWrapper .summarize .requestList ul"), $(".summarizeBottomWrapper .summarize .requestList ul")];
		this.templateMaster = $(".summarizeTopWrapper .summarize .templateMaster");
		this.templateMasterForEmpty = $(".summarizeTopWrapper .summarize .templateMasterForEmpty");
		this.cookieName = "bulkRequest";
		this.initialize.apply(this, arguments);
	};
	MYNAMESPACE.modules.BulkRequest.prototype = {
		// コンストラクタ
		initialize: function() {
			var thisObj = this;
		},
		
		init: function() {
			var thisObj = this;
			$(".summarize .requestList li").remove();
			thisObj.initCount = 1;
			thisObj.setArticleFromCookie();
			thisObj.setEmptyMessage();
		},
		
		setArticleFromCookie: function() {
			var thisObj = this;
			var cookieVal = thisObj.getCookie(thisObj.cookieName);
			if (cookieVal !== "" && cookieVal !== undefined && cookieVal !== null) {
				thisObj.setCookie(thisObj.cookieName, "");
				var articleNames = cookieVal.split(",");
				for (var i=0,len=articleNames.length; i<len; i++) {
					if (articleNames[i] !== "" && articleNames[i] !== undefined && articleNames[i] !== null) {
						thisObj.checkArticle(articleNames[i], true);
					}
				}
			}
		},
		
		setEmptyMessage: function() {
			var thisObj = this;
			var selectors = [$(".summarizeTopWrapper .summarize .requestList ul"), $(".summarizeBottomWrapper .summarize .requestList ul")];
			for (var i=0,len=selectors.length; i<len; i++) {
				if (thisObj.isChecked() === false) {
					$("[data-name='empty-message']", selectors[i]).remove();
					var clone = $(thisObj.templateMasterForEmpty).clone();
					clone.attr("data-name", "empty-message");
					clone.removeClass("templateMasterForEmpty");
					selectors[i].append(clone);
				}
			}
		},
		
		setCookie: function(cookieName, cookieVal, days) {
			var thisObj = this;
			var expires;
			if (days) {
				var date = new Date();
				date.setTime(date.getTime() + (days*24*60*60*1000));
				expires = "; expires=" + date.toGMTString();
			} else {
				expires = "";
			}
			document.cookie = cookieName + "=" + escape(cookieVal) + expires + "; path=/";
		},
		
		getCookie: function(cookieName) {
			var thisObj = this;
			var nameEQ = cookieName + "=";
			var ca = unescape(document.cookie).split(';');
			for(var i=0;i < ca.length;i++) {
				var c = ca[i];
				while (c.charAt(0)==' ') {
					c = c.substring(1, c.length);
				}
				if (c.indexOf(nameEQ) == 0) {
					return c.substring(nameEQ.length, c.length);
				}
			}
			return null;
		},
		
		// 物件がチェックされていればtrueを返す
		isChecked: function(elem) {
			var checkedElem = $("input:checked", elem);
			var flg = (0 < checkedElem.length && (checkedElem.attr("name") !== "" && checkedElem.attr("name") !== undefined && checkedElem.attr("name") !== null)) ? true : false;
			return flg;
		},
		
		// 資料請求ボタンクリック時にコールされるイベントハンドラ
		requestMethod: function(event) {
			var thisObj = this;
			if (thisObj.isChecked() === true) {
				document.formName[0].submit();
			} else {
				jAlert('物件が選択されていません', '物件を選択してください');
			}
		},
		
		// 物件一覧とサイドバーのチェックボックスの値を変更するメソッド
		checkArticle: function(name, isCheck) {
			var thisObj = this;
			$("input:checkbox[value='" + name + "']", "div.residenceWrapper").eq(0).attr("checked", (isCheck === true) ? "checked" : "");
			
			if (isCheck === true) {
				$("[data-name='empty-message']").remove();
				var selectors = [$(".summarizeTopWrapper .summarize .requestList ul"), $(".summarizeBottomWrapper .summarize .requestList ul")];
				for (var i=0,len=selectors.length; i<len; i++) {
					var clone = $(thisObj.templateMaster).clone();
					clone.attr("data-name", name);
					var mSec = +new Date();
					$("label", clone).html(name);
					$("label", clone).attr("for", mSec);
					$("input:checkbox", clone).attr("value", name);
					$("input:checkbox", clone).attr("id", mSec);
					clone.removeClass("templateMaster");
					selectors[i].append(clone);
				}
				
				var cookieVal = thisObj.getCookie(thisObj.cookieName);
				var val = (cookieVal !== "" && cookieVal !== undefined && cookieVal !== null) ? cookieVal + "," + name : name;
				thisObj.setCookie(thisObj.cookieName, val);
				
			} else {
				var selectors = [$(".summarizeTopWrapper .summarize .requestList ul"), $(".summarizeBottomWrapper .summarize .requestList ul")];
				for (var i=0,len=selectors.length; i<len; i++) {
					var elem = $("li[data-name='" + name + "']", selectors[i]).eq(0);
					
					if (elem.html() !== null) {
						elem.remove();
						var cookieVal = "";
						if (thisObj.isChecked(selectors[i]) === true) {
							var articleNameArr = [];
							$("input:checkbox:checked", selectors[i]).each(
								function() {
									articleNameArr.push($(this).attr("value"));
								}
							);
							cookieVal = articleNameArr.join(",");
						} else {
							thisObj.setEmptyMessage();
						}
					}
				}
				thisObj.setCookie(thisObj.cookieName, cookieVal);
			}
			heightLineMethod("heightLine");
		},
		
		// 物件一覧のチェックボックス/サムネイルクリック時にコールされるイベントハンドラ
		onClickCheckBoxInListHandler: function(event) {
			var thisObj = this;
			thisObj.eventEnabled(false);
			
			var targetElem = event.currentTarget;
			var name = "";
			var isCheck;
			if ($(targetElem).attr("class").indexOf("thumbnail") !== -1) {
				var parentNode = $(targetElem).parent();
				name = $("input:checkbox", parentNode).val();
				isCheck = $("input:checkbox[value='" + name + "']", "div.residenceWrapper").eq(0).attr("checked");
			} else {
				name = $(targetElem).attr("value");
				isCheck = !$("input:checkbox[value='" + name + "']", "div.residenceWrapper").eq(0).attr("checked");
			}
			
			thisObj.checkArticle(name, !isCheck);
			thisObj.eventEnabled(true);
		},
		
		// リクエストリストのチェックボックス/ラベルクリック時にコールされるイベントハンドラ
		onClickCheckBoxInRequestListHandler: function(event) {
			var thisObj = this;
			var elem;
			var targetElem = event.currentTarget;
			thisObj.eventEnabled(false);
			if ($.contains(thisObj.elems[0].get(0), targetElem) === true) {
				elem = thisObj.elems[0];
			} else if ($.contains(thisObj.elems[1].get(0), targetElem) === true) {
				elem = thisObj.elems[1];
			}
			var name = $(targetElem).parent().attr("data-name");
			var isCheck = $("input:checkbox[value='" + name + "']", elem).eq(0).attr("checked");
			thisObj.checkArticle(name, isCheck);
			thisObj.eventEnabled(true);
		},
		
		eventEnabled: function(isEnabled) {
			var thisObj = this;
			var method = function(flg) {
				if (flg === true) {
					$(".cBox").css("visibility", "visible");
					$(".thumbnail").click(function(event) {
						thisObj.onClickCheckBoxInListHandler(event);
					});
					$(".cBox").click(function(event) {
						thisObj.onClickCheckBoxInListHandler(event);
					});
					$(".bulkRequestBtn").click(function(event) {
						thisObj.requestMethod(event);
						return false;
					});
					$(".articleName > input:checkbox").change(function(event) {
						thisObj.onClickCheckBoxInRequestListHandler(event);
					});
				} else {
					$(".cBox").css("visibility", "hidden");
					$(".thumbnail").unbind("click");
					$(".cBox").unbind("click");
					$(".bulkRequestBtn").unbind("click");
					$(".articleName > input:checkbox").unbind("change");
				}
			}
			
			method(!isEnabled);
			method(isEnabled);
		}
	};
})();

