/**
*	DM_Validator.js (jQuery.js required)
*
*	@version	0.14
*	@author		Yosuke Hiyoshi
*	@require	jquery.js
*
*	[Update history]
*	# Oct. 19 2009 (Version 0.14)	-	Add "Grouped TEXT_ELEMENTS validation (Group has one more value)"[Method:textGroupHasOneValidation]
*	# Oct. 14 2009 (Version 0.13)	-	Add "Grouped SELECT validation"[Method:selectGroupValidation]
*	# Sep. 14 2009 (Version 0.12)	-	Add "Grouped INPUT->TYPE:CHECKBOX validation"[Method:chkboxGroupValidation]
*	# May. 26 2009 (Version 0.11)	-	Add "Grouped TEXT_ELEMENTS validation"[Method:textGroupValidation] & "SELECT_ELEMENTS validation"[Method:selectValidation]
*	# May. 12 2009 (Version 0.10)	-	Development started !
*
*/

/**
* Initialize - set actions
*
* @param	Void
* @return	Void
*/
$(document).ready(function(){
	$(".requiredText").blur(function(){
		textValidation($(this));
	});
	$(".requiredGroups").find("input").blur(function(){
		textGroupValidation($(this).parents(".requiredGroups"));
	});
	$(".requiredHasOneGroups").find("input").blur(function(){
		textGroupHasOneValidation($(this).parents(".requiredHasOneGroups"));
	});
	$("*[type='submit'],input[type='image']").click(function(){
		return validateAll();
	});
});


/**
* [textValidation] Validation - input->type:text, input->type:password, textarea
*
* @param	tgtElem:Object
* @return	Boolean
*/
var textValidation = function(tgtElem){
	if($(tgtElem).val() == "" && $(tgtElem).html() == ""){
		if($(tgtElem).siblings(".warning").html() == null){
			$(tgtElem).parent().append('<p class="warning">' + $(tgtElem).attr("title") + '</p>');
			$(tgtElem).css("background", "#fee");
		}
		return false;
	}else{
		$(tgtElem).siblings(".warning").remove();
		$(tgtElem).css("background", "#fff");
		return true;
	}
}


/**
* [textGroupValidation] Validation - ELEMENT->[input->type:text], ELEMENT->[input->type:password], ELEMENT->[textarea]
*
* @param	tgtElem:Object
* @return	Boolean
*/
var textGroupValidation = function(tgtElem){
	var validFlg = true;
	$(tgtElem).find("input").each(function(){
		if($(this).val() == ""){ validFlg = false; }
	});
	if(validFlg != true){
		if($(tgtElem).siblings(".warning").html() == null){
			$(tgtElem).parent().append('<p class="warning">' + $(tgtElem).attr("title") + '</p>');
			$(tgtElem).find("input").css("background", "#fee");
		}
		return false;
	}else{
		$(tgtElem).siblings(".warning").remove();
		$(tgtElem).find("input").css("background", "#fff");
		return true;
	}
}


/**
* [textGroupHasOneValidation] Validation - ELEMENT->[input->type:text], ELEMENT->[input->type:password], ELEMENT->[textarea]
*
* @param	tgtElem:Object
* @return	Boolean
*/
var textGroupHasOneValidation = function(tgtElem){
	var validFlg = false;
	$(tgtElem).find("input").each(function(){
		if($(this).val() != ""){ validFlg = true; }
	});
	if(validFlg != true){
		if($(tgtElem).siblings(".warning").html() == null){
			$(tgtElem).parent().append('<p class="warning">' + $(tgtElem).attr("title") + '</p>');
			$(tgtElem).find("input").css("background", "#fee");
		}
		return false;
	}else{
		$(tgtElem).siblings(".warning").remove();
		$(tgtElem).find("input").css("background", "#fff");
		return true;
	}
}


/**
* [chkboxValidation] Validation - ELEMENT->[input->type:checkbox]
*
* @param	tgtElem:Object
* @return	Boolean
*/
var chkboxValidation = function(tgtElem){
	if($(tgtElem).attr("checked") != true){
		if($(tgtElem).siblings(".warning").html() == null){
			$(tgtElem).parent().append('<p class="warning">' + $(tgtElem).attr("title") + '</p>');
		}
		return false;
	}else{
		$(tgtElem).siblings(".warning").remove();
		return true;
	}
}


/**
* [chkboxGroupValidation] Validation - input->type:checkbox
*
* @param	tgtElem:Object
* @return	Boolean
*/
var chkboxGroupValidation = function(tgtElem){
	var validFlg = true;
	if($(tgtElem).find("input[@type='checkbox']:checked").attr("checked") != true){
		validFlg = false;
	}
	if(validFlg != true){
		if($(tgtElem).siblings(".warning").html() == null){
			$(tgtElem).parent().append('<p class="warning">' + $(tgtElem).attr("title") + '</p>');
		}
		return false;
	}else{
		$(tgtElem).siblings(".warning").remove();
		return true;
	}
}


/**
* [radioValidation] Validation - input->type:radio
*
* @param	tgtElem:Object
* @return	Boolean
*/
var radioValidation = function(tgtElem){
	if($(tgtElem).find("input[@type='radio']:checked").attr("checked") != true){
		if($(tgtElem).siblings(".warning").html() == null){
			$(tgtElem).parent().append('<p class="warning">' + $(tgtElem).attr("title") + '</p>');
		}
		return false;
	}else{
		$(tgtElem).siblings(".warning").remove();
		return true;
	}
}


/**
* [selectValidation] Validation - select->option
*
* @param	tgtElem:Object
* @return	Boolean
*/
var selectValidation = function(tgtElem){
	if($(tgtElem).val() == ""){
		if($(tgtElem).siblings(".warning").html() == null){
			$(tgtElem).parent().append('<p class="warning">' + $(tgtElem).attr("title") + '</p>');
		}
		return false;
	}else{
		$(tgtElem).siblings(".warning").remove();
		return true;
	}
}


/**
* [selectGroupValidation] Validation - ELEMENT->select
*
* @param	tgtElem:Object
* @return	Boolean
*/
var selectGroupValidation = function(tgtElem){
	var validFlg = true;
	$(tgtElem).find("select").each(function(){
		if($(this).val() == ""){
			validFlg = false;
		}
	});
	if(validFlg != true){
		if($(tgtElem).siblings(".warning").html() == null){
			$(tgtElem).parent().append('<p class="warning">' + $(tgtElem).attr("title") + '</p>');
		}
		return false;
	}else{
		$(tgtElem).siblings(".warning").remove();
		return true;
	}
}


/**
* [validateAll] Validation - all input elements and textarea elements
*
* @param	Void
* @return	Boolean
*/
var validateAll = function(){
	var validFlg = true;
	var expFlg;
	$(".requiredText").each(function(){
		if(textValidation($(this)) != true){ validFlg = false; }
	});
	$(".requiredGroups").each(function(){
		if(textGroupValidation($(this)) != true){ validFlg = false; }
	});
	$(".requiredHasOneGroups").each(function(){
		if(textGroupHasOneValidation($(this)) != true){ validFlg = false; }
	});
	$(".requiredChkbox").each(function(){
		if(chkboxValidation($(this)) != true){ validFlg = false; }
	});
	$(".requiredChkboxGroups").each(function(){
		if(chkboxGroupValidation($(this)) != true){ validFlg = false; }
	});
	$(".requiredRadio").each(function(){
		if(radioValidation($(this)) != true){ validFlg = false; }
	});
	$(".requiredSelect").each(function(){
		if(selectValidation($(this)) != true){ validFlg = false; }
	});
	$(".requiredSelectGroup").each(function(){
		if(selectGroupValidation($(this)) != true){ validFlg = false; }
	});
	if(validFlg != true){
		return false;
	}else{
		return true;
	}
}