/*
 
	Awkward Check - jQuery plugin 
	http://www.jquery.com
	http://www.awkwardgroup.com/sandbox/awkward-check-a-jquery-plugin
	http://demo.awkwardgroup.com/check
	Version: 1.2

	Copyright (C) 2011 Awkward Group (http://www.awkwardgroup.com)
	Licensed under Attribution-ShareAlike 3.0 Unported
	http://creativecommons.org/licenses/by-sa/3.0/
	
*/

var aw_check_custom_rules = new Array();

function aw_check( field ) {

	checkpassed = true;
	
	jQuery(field + ' .input-box').each(function() {
	
		checkfield = jQuery(this).attr('checkfield');
		
		if ( checkfield != '' && checkfield != undefined ) {
			
			// Create all variables
			checkrule = jQuery(this).attr('checkrule');
			checkerror = jQuery(this).attr('checkerror');
			checkvalue = jQuery(this).attr('checkvalue');
			
			// Check the field
			checkpassed = aw_check_field( this, checkfield, checkrule, checkerror, checkvalue );
		}
	});
	
	return checkpassed;
}

function aw_check_init( field, autocheck ) {
	
	if ( !autocheck ) { autocheck = true };
	
	jQuery(field + ' .input-box').each(function() {
	
		checkfield = jQuery(this).attr('checkfield');
		checkvalue = jQuery(this).attr('checkvalue');
		
		if ( checkfield != '' && checkfield != undefined ) {
			
			// Make checkbox labels clickable
			if ( jQuery( this ).hasClass('check') ) {
				
				jQuery( this ).find('label').click(function() {
					
					checkfield = jQuery( this ).parent().attr( 'checkfield' );
					
					if ( jQuery( checkfield ).is( ':checked' ) ) {
					
						jQuery( checkfield ).attr('checked', false);
					}
					else {
					
						jQuery( checkfield ).attr('checked', true);
					}
				})
			}
			
			// Ovelay labels
			if ( checkvalue != '' && checkvalue != undefined ) {
				
				// Insert value field
				jQuery( checkfield ).parent().prepend( '<span class="value">' +  checkvalue + '</span>' );
				
				// Set focus on field on label click
				jQuery( checkfield ).parent().find('.value').click(function() {
					
					checkfield = jQuery(this).parent().attr('checkfield');
					jQuery( checkfield ).focus();
				});
				
				jQuery( checkfield ).keyup(function() {
				
					// Create all variables
					checkfield = jQuery(this).parent().attr('checkfield');
					value = jQuery(this).parent().find('.value');
					
					if ( jQuery( checkfield ).val() != '' ) {
						// Hide the value field
						jQuery( value ).hide(0);
					}
					else {
						// Show the value field
						jQuery( value ).fadeIn(100);
					}
				});
			}
			
			// Auto check (real-time validation)
			if ( autocheck ) {

				jQuery( checkfield ).focusout(function() {
				
					// Create all variables
					checkfield = jQuery(this).parent().attr('checkfield');
					checkrule = jQuery(this).parent().attr('checkrule');
					checkerror = jQuery(this).parent().attr('checkerror');
					checkvalue = jQuery(this).attr('checkvalue');
				
					
					if ( jQuery( checkfield ).val() != '' ) {
						
						// Only check field if it's not empty or doesn't contain the checkvalue, otherwise it's annoying
						aw_check_field( jQuery(this).parent(), checkfield, checkrule, checkerror, checkvalue );
					}
				});
			}
		}
	});
}

function aw_check_field( checkparent, checkfield, checkrule, checkerror  ) {
	
	var value = jQuery( checkfield ).val();
	
	if ( checkrule == 'email' ) {
		
		// Check if it's a valid e-mail adress	
		var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
		
		if ( value == '' || !emailReg.test( value ) ) {
		
			checkpassed = false;
			aw_check_print_error( checkparent, checkerror );
		}
		else aw_check_hide_error( checkparent );
	}
	else if ( checkrule == 'number' ) {
	
		// Check if the filed contains a number (this regular expression sucks =)
		var numberRegex = /(^(((\d)|(\d\d)|(\d\d\d))(\xA0|\x20))*((\d)|(\d\d)|(\d\d\d))([,.]\d*)?$)/;
	
		if ( !numberRegex.test( value ) ) {
		
			checkpassed = false;
			aw_check_print_error( checkparent, checkerror );
		}
		else aw_check_hide_error( checkparent );
	}
	else if ( checkrule == 'check' ) {
	
		// If checked
		if ( !jQuery( checkfield ).is( ':checked' ) ) {
		
			checkpassed = false;
			aw_check_print_error( checkparent, checkerror );
		}
		else aw_check_hide_error( checkparent );
	}
	else if ( checkrule == 'text' ) {
		
		// Check if not just empty
		if ( value == '' ) {
			
			checkpassed = false;
			aw_check_print_error( checkparent, checkerror );
		}
		else aw_check_hide_error( checkparent );
	}
	else {
	
		try
  		{
			// Get regex
			var numberRegex = aw_check_custom_rules[ checkrule ];
		
			// Custom check
			if ( !numberRegex.test( value ) ) {
			
				checkpassed = false;
				aw_check_print_error( checkparent, checkerror );
			}
			else aw_check_hide_error( checkparent );
		}
		catch(err)
		{
			alert(err);
		}
	}
	
	jQuery( checkfield ).focusout(function() {
		
		// Activate check when user change field
		aw_check_field( checkparent, checkfield, checkrule, checkerror );
	});
	
	return checkpassed;
}

function aw_check_print_error( checkparent, checkerror ) {
	
	if ( checkerror != '' || checkerror != undefined ) {
		
		// Print error message if it's provided
		jQuery( checkparent ).find( '.error' ).text( checkerror );
		jQuery( checkparent ).find( '.check' ).attr( 'title', checkerror );
	}
	
	// Change CSS class to invalid
	jQuery( checkparent ).removeClass( 'valid' );
	jQuery( checkparent ).addClass( 'invalid' );
}

function aw_check_hide_error( checkparent ) {

	// Change CSS class to valid
	jQuery( checkparent ).removeClass( 'invalid' );
	jQuery( checkparent ).addClass( 'valid' );
}

