var Validator = function() {};

Validator.mod = "";
Validator.Tip = "";
Validator.TipErr = "";
Validator.Stat = new Array();
Validator.LastVal = new Array();
Validator.Key = true;
Validator.Pair = new Array();
Validator.Pair['tel'] = 'mob_phone';
Validator.Pair['mob_phone'] = 'tel';
Validator.Pair['pc_mail'] = 'mob_mail';
Validator.Pair['mob_mail'] = 'pc_mail';
Validator.Focus = "";


//ファーカスが変更されたら送信してバリデートする
Validator.AjValidat = function(event) {
	var mod =  Event.element(event); 
	Validator.mod = mod.id; 
	var _val = $(Validator.mod).value;
	if(Validator.LastVal[Validator.mod] != _val){
		var _prm = Validator.mod+"="+_val+"&mod="+Validator.mod;
		var myAjax = new Ajax.Request("/?act=public_apply_jsvalidator", {method: "post", asynchronous:false, parameters: _prm,onComplete:Validator.CallbackSync});
		Validator.LastVal[Validator.mod] = _val;
	}
	Validator.Hiddentip(event);
}

//フォームのバリューが変更されたら送信してバリデートする
Validator.JsValidat = function(event) {
	var mod =  $(event).id; 
	Validator.mod = mod; 
	var _val = $(Validator.mod).value;
	var _prm = Validator.mod+"="+_val+"&mod="+Validator.mod;

	var myAjax = new Ajax.Request("/?act=public_apply_jsvalidator", {method: "post", asynchronous:true, parameters: _prm,onComplete:Validator.Callback});
}

//コールバック
Validator.Callback = function(request) {
	var eval_obj = eval("("+request.responseText+")");
	//レスポンスを元にスタイルとvalueをセット
	Validator._setOptions(eval_obj,false);
}

//毎回バリューを書き換えると処理が上手くいかないので
Validator.CallbackSync = function(request) {
	var eval_obj = eval("("+request.responseText+")");
	//レスポンスを元にスタイルとvalueをセット
	Validator._setOptions(eval_obj,true);
}

//optionセット
Validator._setOptions = function(eval_obj,sync){
	$H(eval_obj).each(
			function(val, idx){ //iterator
				if($(val.value.name).value != val.value.value){
					if(sync == true){
						$(val.value.name).value = val.value.value;
						Validator.LastVal[Validator.mod] = val.value.value;
					}
				}
				var item = $(val.value.name);
				//複合でバリデート結果を表示
				if(val.value.name == 'tel' || val.value.name == 'mob_phone' || val.value.name == 'pc_mail' || val.value.name == 'mob_mail'){
					Validator._setOptionsMix(val);
				}else{
					//単独でバリデート結果を表示
					Validator._setOptionsMono(val);
				}
			}
		);
}

//単独でバリデート結果を表示
Validator._setOptionsMono = function(val){

	var item = $(val.value.name);
	var item_msg = $(val.value.name+"_msg");
	var item_err = $(val.value.name+"_err");
	var item_class = item.className;
	

	if(val.value.validate == false && $(val.value.name).value != ""){
		Validator.Stat[val.value.name] = false;

		//吹き出しを切り替え
		Element.setStyle(item_msg, {
			'visibility': 'hidden'
		});
		if(Validator.Focus == val.value.name){
			Element.setStyle(item_err, {
				'visibility': 'visible'
			});
		}
		//テキストエリアクラスを変更

		Validator._ChangeTextClassErr(item);
		return;

	}else if(val.value.validate == false && $(val.value.name).value == ""){
		Validator.Stat[val.value.name] = null;

		//吹き出しを切り替え
		Element.setStyle(item_err, {
			'visibility': 'hidden'
		});
		if(Validator.Focus == val.value.name){
			Element.setStyle(item_msg, {
				'visibility': 'visible'
			});
		}
		//テキストエリアクラスを変更

		Validator._ChangeTextClassErr(item);
		return;

	}else if(val.value.validate == true && $(val.value.name).value == ""){
		Validator.Stat[val.value.name] = true;
		//吹き出しを切り替え
		if(Validator.Focus == val.value.name){
			Element.setStyle(item_msg, {
				'visibility': 'visible'
			});
			
		}
		Element.setStyle(item_err, {
			'visibility': 'hidden'
		});
		//テキストエリアクラスを変更
		Validator._ChangeTextClassOK(item);
		return;
	}else{
		Validator.Stat[val.value.name] = true;
		//吹き出しを非表示
		if(Validator.Focus == val.value.name){
			Element.setStyle(item_msg, {
				'visibility': 'visible'
			});
		}
		Element.setStyle(item_err, {
			'visibility': 'hidden'
		});
		//テキストエリアクラスを変更
		Validator._ChangeTextClassOK(item);
		if(val.value.name == 'zip'){
			SearchCity.changeCityByZipCode('zip','addr1','addr2','addr3');
		}
		return;
	}
}



//複合でバリデート結果を表示
Validator._setOptionsMix = function(val){
	var item = $(val.value.name);
	var item_msg = $(val.value.name+"_msg");
	var item_err = $(val.value.name+"_err");
	var item_class = item.className;
	var item_pair = $(Validator.Pair[val.value.name]);
	var item_pair_msg = $(Validator.Pair[val.value.name]+"_msg");
	var item_pair_err = $(Validator.Pair[val.value.name]+"_err");
	var item_pair_class = item_pair.className;

	//両方とも空白の場合
	if(item_pair.value == "" && $(val.value.name).value == "" && val.value.validate == false){
		Validator.Stat[val.value.name] = null;
		Validator.Stat[Validator.Pair[val.value.name]] = null;

		//吹き出しを切り替え
		Element.setStyle(item_err, {
			'visibility': 'hidden'
		});
		if(Validator.Focus == val.value.name){
			Element.setStyle(item_msg, {
				'visibility': 'visible'
			});
		}
		//テキストエリアクラスを変更

		Validator._ChangeTextClassErr(item);
		Validator._ChangeTextClassErr(item_pair);
		return;
		
		//両方とも空白の場合
	}else if(item_pair.value == "" && $(val.value.name).value == "" && val.value.validate == true){
		Validator.Stat[val.value.name] = true;
		Validator.Stat[Validator.Pair[val.value.name]] = true;

		//吹き出しを切り替え
		if(Validator.Focus == val.value.name){
			Element.setStyle(item_msg, {
				'visibility': 'visible'
			});
		}
		Element.setStyle(item_err, {
			'visibility': 'hidden'
		});
		//テキストエリアクラスを変更

		Validator._ChangeTextClassOK(item);
		Validator._ChangeTextClassOK(item_pair);
		return;
	//自分が空白で相手が空白じゃない＆自分はFALSE＆相手はTRUE
	}else if($(val.value.name).value == "" && item_pair.value != "" && Validator.Stat[Validator.Pair[val.value.name]] == true && val.value.validate == false){
		Validator.Stat[val.value.name] = false;

		//吹き出しを切り替え
		if(Validator.Focus == val.value.name){
			Element.setStyle(item_msg, {
				'visibility': 'visible'
			});
		}
		Element.setStyle(item_err, {
			'visibility': 'hidden'
		});
		//テキストエリアクラスを変更

		Validator._ChangeTextClassOK(item);
		Validator._ChangeTextClassOK(item_pair);
		return;

	//自分が空白じゃなくエラーの時
	}else if(val.value.validate == false && $(val.value.name).value != ""){
		Validator.Stat[val.value.name] = false;
		//吹き出しを切り替え
		Element.setStyle(item_msg, {
			'visibility': 'hidden'
		});
		if(Validator.Focus == val.value.name){
			Element.setStyle(item_err, {
				'visibility': 'visible'
			});
		}
		//テキストエリアクラスを変更

		Validator._ChangeTextClassErr(item);
	}else if(val.value.validate == true && $(val.value.name).value != ""){
		Validator.Stat[val.value.name] = true;
		if(item_pair.value == ""){
			Validator.Stat[Validator.Pair[val.value.name]] = null;
		}
		if(Validator.Focus == val.value.name){
			//吹き出しを非表示
			Element.setStyle(item_msg, {
				'visibility': 'visible'
			});
		}
		Element.setStyle(item_err, {
			'visibility': 'hidden'
		});
		//テキストエリアクラスを変更
		Validator._ChangeTextClassOK(item);
		if(item_pair.value == ""){
			Validator._ChangeTextClassOK(item_pair);
		}
		return;
	}else if(val.value.validate == true && $(val.value.name).value == ""){
		Validator.Stat[val.value.name] = null;
		if(item_pair.value == ""){
			Validator.Stat[Validator.Pair[val.value.name]] = true;
		}
		//吹き出しを表示
		if(Validator.Focus == val.value.name){
			Element.setStyle(item_msg, {
				'visibility': 'visible'
			});
		}
		Element.setStyle(item_err, {
			'visibility': 'hidden'
		});
		//テキストエリアクラスを変更
		Validator._ChangeTextClassOK(item);
		return;
	}
}

//テキストエリアクラスをOKにする
Validator._ChangeTextClassOK = function(item){
	var item_class = item.className;
	item_class = item_class.replace('_err','');
	Element.removeClassName(item, item_class+'_err');
	Element.addClassName(item, item_class);	
}


//テキストエリアクラスをエラーにする
Validator._ChangeTextClassErr = function(item){
	var item_class = item.className;
	item_class = item_class.replace('_err','');
	Element.removeClassName(item, item_class);
	Element.addClassName(item, item_class+'_err');
}



Validator.Showtip= function(event) {
	var id =  Event.element(event);
	Validator.Tip = id.id+"_msg";
	Validator.TipErr = id.id+"_err";
	Validator.Focus = id.id;
	var item = $(Validator.Tip);
	var item_err = $(Validator.TipErr);
	if(Validator.Stat[id.id] == null || Validator.Stat[id.id] == true ){
		Element.setStyle(item, {
			'visibility': 'visible'
		});
	}else if(Validator.Stat[id.id] == false){
		Element.setStyle(item_err, {
			'visibility': 'visible'
		});
	}
}

Validator.Hiddentip= function(event) {
	var id =  Event.element(event);
	Validator.Tip = id.id+"_msg";
	Validator.TipErr = id.id+"_err";
	var item = $(Validator.Tip);
	var item_err = $(Validator.TipErr);
	Element.setStyle(item, {
		'visibility': 'hidden'
	});
	Element.setStyle(item_err, {
		'visibility': 'hidden'
	});
}

