var Contact = Class.create();

Contact.prototype = {

	initialize: function() {
		this.d = null;
		this.params = { redirect:false };
		this.IE6 = false;
		var appname = navigator.appName;
		if (appname == "Microsoft Internet Explorer") {
      		var appver = navigator.appVersion;
			var p = appver.indexOf("MSIE", 0);
			if(p >= 0) {
				var p2 = appver.indexOf(";", p);
				if(p2 >= 0) {
					var iever = appver.substring(p + 5, p2);
					if (parseInt(iever,10) <= 6) {
						this.IE6 = true;
					}
				}
			}
  		}
	},

	show: function(param) {
		//ssl
		/*
		if (document.location.protocol != "https:") {
			//var url = "https://" + window.location.host + window.location.pathname;
			var url = "https://" + window.location.host.replace(":4000", ":5000") + window.location.pathname + window.location.search;
			url += (window.location.search ? "&contactssl" : "?contactssl");
			if (param)
				url += "&param=" + encodeURIComponent(JSON.stringify(param));
			alert(url);
			window.top.name = "hasco";
			window.open(url, "hasco");
			return;
		}
		*/
	
		var url = document.location.protocol + "//" + window.location.host + "/contact/index";
		new Ajax.Request(url, {
		method:"get",
		asynchronous:false,
		onFailure : function(Response) {
			alert("ajax request failure.");
		},
		onException : function (Response) {
			alert("ajax request exception.");
		},
		onComplete : (function(c, p) {
			return function (Response) {
				c.open();
				c.setContents(Response.responseText, p);
				c.d.open();
				c.d.position();
				c.position();
				$("contact_name").focus();
			}
		})(this, param)
		});
	},

	bind: function() {
		this.open();
		this.window_contents.innerHTML = $("contact").innerHTML;
		$("contact").innerHTML = "";
		this.d.position();
		this.d.open();
		this.position();
		$("contact_name").focus();
	},

	position: function() {
		if (this.d) {
			var o = this.d.container.cumulativeOffset();
			var d = this.d.container.getDimensions();
			var h = window.document.body.clientHeight || window.innerHeight;
			var y = window.document.body.scrollTop  || window.document.documentElement.scrollTop;
			if (this.IE6)
				h = kl_windowheight();
			if (y) {
				if (h < d.height)
					Element.setStyle(this.d.container, { top:y+"px" });
			}

			if (Prototype.Browser.IE) {
				if ($("control_overlay")) {
					h = window.document.body.scrollHeight  || window.document.documentElement.scrollHeight;
					Element.setStyle($("control_overlay"), { height:h+"px" });
				}
			}
		}
	},

	sent: function() {
		var PREF = [
		'',
	 	'北海道',   '青森県',   '岩手県',   '宮城県',
	    '秋田県',   '山形県',   '福島県',   '茨城県',   '栃木県',
	    '群馬県',   '埼玉県',   '千葉県',   '東京都',   '神奈川県',
	    '新潟県',   '富山県',   '石川県',   '福井県',   '山梨県',
	    '長野県',   '岐阜県',   '静岡県',   '愛知県',   '三重県',
	    '滋賀県',   '京都府',   '大阪府',   '兵庫県',   '奈良県',
	    '和歌山県', '鳥取県',   '島根県',   '岡山県',   '広島県',
	    '山口県',   '徳島県',   '香川県',   '愛媛県',   '高知県',
	    '福岡県',   '佐賀県',   '長崎県',   '熊本県',   '大分県',
	    '宮崎県',   '鹿児島県', '沖縄県'
		];

		var CATEGORY = [
		'',
		'スノーボード商材について',
		'スケートボード商材について',
		'アパレル商材ついて',
		'ダーツ商材について',
		'アーチェリー商材について',
		'その他のお問い合わせ'
		];

		var json= {
		name:$("contact_name").value,
		ruby:$("contact_ruby").value,
		company:$("contact_company").value,
		tel1:$("contact_tel1").value,
		tel2:$("contact_tel2").value,
		tel3:$("contact_tel3").value,
		fax1:$("contact_fax1").value,
		fax2:$("contact_fax2").value,
		fax3:$("contact_fax3").value,
		zip:$("contact_zip").value,
		pref:PREF[$("contact_pref").options[$("contact_pref").selectedIndex].value],
		address:$("contact_address").value,
		mail:$("contact_mail").value,
		mail_confirmation:$("contact_mail_confirmation").value,
		category:CATEGORY[$("contact_category").options[$("contact_category").selectedIndex].value],
		comment:$("contact_comment").value
		};

		var url = document.location.protocol + "//" + window.location.host + "/contact/sent";
		new Ajax.Request(url, {
		method:"post",
		asynchronous:false,
		parameters:"contact=" + Object.toJSON(json),
		onFailure : function(Response) {
			alert("ajax request failure.");
		},
		onException : function (Response) {
			alert("ajax request exception.");
		},
		onComplete : (function(ct) {
			return function (Response, json) {
				if (json.valid) {
					ct.setContents(Response.responseText);
				} else {
					ct.addValidMessage("name", "お名前", json.name);
					ct.addValidMessage("ruby", "フリガナ", json.ruby);
					ct.addValidMessage("company", "会社名", json.company);
					ct.addValidMessage("tel1", "電話番号(加入者番号)", json.tel3, "tel1");
					ct.addValidMessage("tel2", "電話番号(市内局番)", json.tel2, "tel1");
					ct.addValidMessage("tel3", "電話番号(市外局番)", json.tel1, "tel1");
					ct.addValidMessage("fax1", "FAX番号(加入者番号)", json.fax3, "fax1");
					ct.addValidMessage("fax2", "FAX番号(市内局番)", json.fax2, "fax1");
					ct.addValidMessage("fax3", "FAX番号(市外局番)", json.fax1, "fax1");
					ct.addValidMessage("zip", "郵便番号", json.zip);
					ct.addValidMessage("pref", "都道府県", json.pref);
					ct.addValidMessage("address", "市区町村以下", json.address);
					ct.addValidMessage("mail", "E-Mail", json.mail);
					ct.addValidMessage("category", "お問い合わせ内容", json.category);
					ct.addValidMessage("comment", "お問い合わせ内容", json.comment);
				}
			}
		})(this)
		});
	},

	reset: function() {
		$("contact_name").value = ""; 
		$("contact_ruby").value = "";
		$("contact_company").value = "";
		$("contact_tel1").value = "";
		$("contact_tel2").value = "";
		$("contact_tel3").value = "";
		$("contact_fax1").value = "";
		$("contact_fax2").value = "";
		$("contact_fax3").value = "";
		$("contact_zip").value = "";
		$("contact_pref").options[0].selected = true;
		$("contact_address").value = "";
		$("contact_mail").value = "";
		$("contact_mail_confirmation").value = "";
		$("contact_category").options[0].selected = true;
		$("contact_comment").value = "";
		var n = document.getElementsByClassName("valid");
		for (var i = 0; i < n.length; i++) {
			n[i].parentNode.removeChild(n[i]);
		}
	},

	addValidMessage: function(field, label, value, element) {
		var id = "valid_" + field;
		if (value) {
			if ($(id)) {
				if (/category/.test(field))
					$(id).innerHTML = "「" + label + "」" + "を選択してください。";
				else
					$(id).innerHTML = "「" + label + "」" + "を入力してください。";
				//$(id).innerHTML = "「" + label + "」" + value;
			} else {
				var elem = "contact_" + (element || field);
				var node = document.createElement("div");
				Element.addClassName(node, "valid");
				node.setAttribute("id", id);
				if (/category/.test(field))
					node.appendChild(document.createTextNode("「" + label + "」" + "を選択してください。"));
				else
					node.appendChild(document.createTextNode("「" + label + "」" + "を入力してください。"));
				//node.appendChild(document.createTextNode("「" + label + "」" + value));
				$(elem).parentNode.insertBefore(node, $(elem));
			}
		} else {
			if ($(id)) {
				$(id).parentNode.removeChild($(id));
			}
		}
	},

	open: function() {
		if (this.window_contents)
			this.window_contents.innerHTML = "";
		if (!this.d) {
			var n = document.createElement("div");
			document.body.appendChild(n);
			this.d = this.dialogFactory(n);
		}
	},

	close: function(params) {
		var undefined;
		if (params !== undefined) {
			for (key in params)
				this.params[key] = params[key]; 
		}
		if (this.d) {
			if (this.params.redirect) {
				if (/show/.test(window.location.pathname) 
				|| /contact/.test(window.location.pathname)) {
					//window.location.href = window.location.protocol  + "//" + window.location.host;
					history.back();
				}
			}
			this.d.close();
			this.d.destroy();
			this.d = null;
			delete this.d;
		}
	},
	
	setContents: function(text, param) {
		this.window_contents.innerHTML = text;
		if (param) {
			if ("category" in param) {
				if (/SNOWBOARD/.test(param.category)) {
					$("contact_category").options[1].selected = true;
				} else if (/SKATEBOARD/.test(param.category)) {
					$("contact_category").options[2].selected = true;
				} else if (/APPAREL/.test(param.category)) {
					$("contact_category").options[3].selected = true;
				} 
			}
			if ("name" in param) {
				$("contact_comment").value = "■" + param.brand + "｜" + param.name + "｜" + param.code + "に関するお問い合わせ\n\n";
			}
			
 		}
	},

	dialogFactory: function(e) {  
	 	this.window_contents = new Element("div", {  
	    	className: "window_contents"  
	 	});
		var d = new Control.Modal(e, Object.extend({  
			overlayOpacity:0.8,
			className: 'window'
	  	}, {}));
		d.container.insert(this.window_contents);
		return d;
	}

}