//form validation
$(document).ready(function() {
    
    $(".form_submit").live('click',function() {
		return FormCheck();
	});
	
});


/*************************************************************************
 * ERROR MESSAGE FOCUS/BLUR HANDLERS
 * remove predefined error text for required fields if they are focussed
 * and refill them with error text if they are still empty
 *************************************************************************/

var errorMsg;

$(".error").live('focus', function() {
    errorMsg = $(this).val();
    $(this).val("");
});

$(".error").live('blur', function() {
    if ($(this).val() == "") {
        $(this).val(errorMsg);
    } else {
        $(this).removeClass("error");
    }
});


// validates if date fits format dd/mm/yyyy
function isDateValid(val){
	var validformat=/^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity
	if (!validformat.test(val))
		return false;
		
	//Detailed check for valid date ranges
	var monthfield=val.split("/")[1]
	var dayfield=val.split("/")[0]
	var yearfield=val.split("/")[2]
	var dayobj = new Date(yearfield, monthfield-1, dayfield)
	if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
		return false;
	else
		return true;
}

function isEMailValid(val){
	var validformat = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/
	return validformat.test(val);	
}





function FormCheck() {
    var error = false, globalError = false, sbt = false, dateError = false, form, items;
    
    form = $(".form_submit").parents("form");   
    
    //get required form items
    items = form.find(".required");
    items.each(function() {
        error = false;
        sbt = false;
		dateError = false;
        
        id = $(this).attr("id")
        label = $("label[for=" + id +"]");
        
        
        //get error message
        error_msg = $("input[name=input_error]").val();
		error_msg_date = $("input[name=input_error_date]").val();
        error_msg_sbt = $("input[name=sbt_error]").val();
        
        
        
        //reset error highlighting
        $(this).removeClass("error");
        $(label).removeClass("error");
        $("label[for=sbt] div.error").remove();
        
        
        //check contents
        if ($(this).val() == error_msg) {
            error = true, globalError = true;
        }
        if ($.trim($(this).val()) == "") {
            error = true, globalError = true;
        }
        if ($(this).hasClass("email") && !isEMailValid($(this).val())) {
            error = true, globalError = true;
        }
		if ($(this).hasClass("date") && !isDateValid($(this).val())) {
			dateError = true, error = true, globalError = true;
		}
        if ($(this).hasClass("sbt") && (!$(this).attr("checked"))) {
            sbt = true, error = true, globalError = true;
        }
		
		
		if (form.attr('id') == 'catalog') {			
			if (!$("#catalog1").attr("checked") && !$("#catalog2").attr("checked") && !$("#catalog3").attr("checked") && !$("#catalog4").attr("checked")) {
				globalError = true;
				$("#order_catalog div.error").css("display","inline").html($("input[name=catalog_error]").val());
			}
			else {
				$("#order_catalog div.error").css("display","none");
			}	
        }
		
        
        //invalid => add error handling
        if (error) {           
            if (sbt) {
                //sbt checkbox
                $(label).append('<div class="error">' + error_msg_sbt + '</div>');
			} else if (dateError) {
				// date error message
				$(this).addClass("error");
                $(this).val(error_msg_date);
                $(label).addClass("error");
            } else {
                //default
                $(this).addClass("error");
                $(this).val(error_msg);
                $(label).addClass("error");
            }
            
            
        }
    });    
    
    
    
    //valid => submit form
    if(!globalError) {
        
        if ($("#sbt")) {
            sbt_msg = $("input[name=sbt_text]").val();
            $("#sbt").val(sbt_msg);
        }
        
        form.submit();
        return true;
    }
    return false;
}
