/*
 * formSender 1.4_110625
 *
 * Copyright (c) 2008- tataise.com
 * 
 * Please refer "http://creativecommons.org/licenses/by/2.1/jp/"
 */


$(document).ready(function() {
	$("#confirmBt").css('display', 'inline');
	$("#isJS").val('1');

	var elms = $('.required');
	var mail1;
	var mail2;
	
	for(var i=0; i < elms.length; i++) {
		if($(elms[i]).hasClass('mail1'))	 {
			mail1 = i;
		} else if($(elms[i]).hasClass('mail2')) {
			mail2 = i;
		}
	}
	
	formSender.formElmsInit();
	formSender.init(elms, mail1, mail2);

	$("#confirmBt").click(
				   function() {
					   formSender.errResetState();
					   formSender.validate();
					   formSender.checkResult();
				   });
	
	$("#submitBt").click(
				   function() {
					   formSender.mailSend();
				   });
});

var formSender = {
	requiredObjs: new Object(),
	len: 0,
	errObj: new Object(),
	name: "formSender",
	
	formElmsInit: function() {
		if($("#defRadio").size()>0) {
			$("#defRadio").attr('checked', 'checked');
		};
	},
	
	init: function(elms, mail1, mail2) {
			
			this.submitOff();

			if(elms.length > 0) {
				this.len = elms.length;
				
				for(var i=0; i<this.len; i++) {

					var elmType;
					var tagname = elms[i].nodeName.toLowerCase();
					
					if(tagname == "input") {
						elmType = $(elms[i]).attr('type');
					} else {
						elmType = tagname;
					};
					
					var mail = false;
					if(mail1) {
						if(i == mail1 || i == mail2) mail = true;
					};
					
					var obj = {
						obj: elms[i],
						type: elmType,
						isMail: mail
					};
					
					this.requiredObjs[i] = obj;
				};
			};
	},
		
	validate: function() {
				this.errObj.name = "none";

				if(this.len > 0) {
					for(var i=0; i<this.len; i++) {
						var thisObj = this.requiredObjs[i]['obj'];
						
						switch(this.requiredObjs[i]['type']) {
							case "text":
								if($(thisObj).val() == "" || $(thisObj).val() == " " || $(thisObj).val() == "　") this.errObj.errlist.push(i);
								break;
							case "checkbox":
								if(!$(thisObj).attr('checked')) this.errObj.errlist.push(i);
								break;
							case "select":
								if($(thisObj).val() == "") this.errObj.errlist.push(i);
								break;
							case "textarea":
								if($(thisObj).val() == "") this.errObj.errlist.push(i);
								break;
								
							default:
								break;
						};
					};
					
					if(this.errObj.errlist.length > 0) {
						this.errObj.name = "empty";
						return;
						
					} else {
						var mail1;
						for(var k=0; k<this.len; k++) {
							if(this.requiredObjs[k]['isMail']) {
								var str = $(this.requiredObjs[k]['obj']).val();
								
								if(!mail1 && !str.match(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/)) {
									this.errObj.name = "mailErr";
									this.errObj.errlist.push(k);
									return;
									
								} else {
									if(!mail1) mail1 = str;
								};
								
								if(mail1) {
									if(mail1 != str) {
										this.errObj.name = "mailNotSame";
										this.errObj.errlist.push(k);
										return;
									};
								};
							};
						};
					};
						
				};
	},
	
	errResetState: function() {
					this.errObj.name = "";
					this.errObj.errlist = [];
					$(".commonerr").css('display', 'none');
					$(".errmsg").css("display", "none");
					$(".mailerr").css("display", "none");
					$(".mailnotsame").css("display", "none");
	},
	
	inputEmptyState: function() {
						for(var i=0; i<this.errObj.errlist.length; i++) {
							var e = this.errObj.errlist[i];
							var errmsg = $(this.requiredObjs[e]['obj']).siblings().filter(".errmsg").css('display', 'block');
						};
	},
	
	commonErrState: function() {
						$(".commonerr").css('display', 'block');
	},
	
	mailErrState: function() {
						$(".mailerr").css('display', 'block');
	},
	
	mailNotSameState: function() {
						$(".mailnotsame").css('display', 'block');
	},
	
	mailSend: function() {
				try {
					$('#sendform').ajaxForm({
											dataType:'json',
											beforeSubmit:function() {
												$("#confirmBt").attr('disabled','disabled');
												$("#confirmBt").css('opacity',0.3);
												$("#confirmBt").css('cursor','default');
												$("#submitBt").attr('disabled','disabled');
												$("#submitBt").css('opacity',0.3);
												$("#submitBt").css('cursor','default');
											},
											success:this.getRes,
											timeout: 5000
											});
				} catch (err){
					alert("エラーが発生しました。サイト管理者へお問合せ下さい。" + err);
				};
	},
	
	getRes: function(objHTTP, status) {
				formSender.errObj = objHTTP;
				
				if(status == "success") {
					formSender.checkResult();
				} else {
					alert("送信エラーが発生しました。サイト管理者へお問合せ下さい。" + status);
				};
	},
	
	checkResult: function() {
		//this.submitOff();
		this.confirmOn();
		//var m = this.errObj.name;
		switch(this.errObj.name) {
			case "none":
				this.submitOn();
				break;
			case "empty":
				this.submitOff();
				this.commonErrState();
				this.inputEmptyState();
				break;
			case "mailErr":
				this.submitOff();
				this.commonErrState();
				this.mailErrState();
				break;
			case "mailNotSame":
				this.submitOff();
				this.commonErrState();
				this.mailNotSameState();
				break;
			case "send":
				$('#sendform').clearForm();
				this.mailSent();
				break;
		};
	},
	
	mailSent: function() {
				$('#sendform').css('display', 'none');
				$('#sentMsg').show();
	},
	
	submitOn: function() {
			$("#submitBt").attr('disabled',false);
			$("#submitBt").css('opacity',1);
			$("#submitBt").css('cursor','pointer');
	},
	
	submitOff: function() {
			$("#submitBt").attr('disabled','disabled');
			$("#submitBt").css('opacity',0.3);
			$("#submitBt").css('cursor','default');
			$("#submitBt").css('background-position', '0 0px');
	},
	
	confirmOn: function() {
			$("#confirmBt").attr('disabled',false);
			$("#confirmBt").css('opacity',1);
			$("#confirmBt").css('cursor','pointer');
	},
	
};
