var T = undefined, S = 0, D = 2000;
var initiated = false;
$(function(){
	$.fn.onTypeFinished = function(func) {
	    $(this).on("keypress", onKeyPress).on("focusout", onTimeOut);
	    function onKeyPress() {
	        clearTimeout(T);
	        D=2000;
	        T = setTimeout(onTimeOut, D);
	    }
	 
	    function onTimeOut() {
	    	clearTimeout(T);
	        func.apply(); S = 0;
	    }
	    return this;
	}
	 
	var tq = {
	        // declare site-wide variables
	        init: function() {
	            // initialise the site-wide variables
	        
	            // serially initialise the site component code (each component is contained in a logical block of its own)
	            tq.subform.inputs.firstname.on('focus', function(){
	            	if ( $(this).val().toLowerCase() == 'first name' ){
	            		$(this).removeClass('initiate');
	            		$(this).val('');
	            	}
	            }).on('focusout', function(){
	            	if ( !tq.subform.check_firstname() ){
	            		$(this).val('First Name');
	            	}
	            }).onTypeFinished( function(){
	            	tq.subform.check_firstname();
	            });
	            
	            // check surname
	            tq.subform.inputs.lastname.on('focus', function(){
	            	if ( $(this).val().toLowerCase() == 'surname' ){
	            		$(this).removeClass('initiate');
	            		$(this).val('');
	            	}
	            }).on('focusout', function(){
	            	if ( !tq.subform.check_lastname() ){
	            		$(this).val('Surname');
	            	}
	            }).onTypeFinished( function(){
	            	tq.subform.check_lastname();
	            });
	            
	            // check email
	            tq.subform.inputs.email.on('focus', function(){
	            	if ( $(this).val().toLowerCase() == 'email address' ){
	            		$(this).removeClass();
	            		$(this).val('');
	            	}
	            }).on('focusout', function(){
	            	clearTimeout(T);
	            	if ( !tq.subform.email_checked ){
	            		tq.subform.check_email(true);	
	            	}
	            	if ($(this).val() == ''){
	            		$(this).val('Email Address');
	            	}
	            }).onTypeFinished(function(){
	            	tq.subform.check_email(true);	
	            	
	            });
	            
	            tq.subform.inputs.country.on('change',function(){
	            	tq.subform.check_country();
	            })
	            .on('focusout', function(){
	            	tq.subform.check_country();
	            });
	            
	            tq.subform.inputs.state.on('change',function(){
	            	tq.subform.check_state();
	            });
	            
	            tq.subform.inputs.dob_day.on('change',function(){
	            	tq.subform.check_dob();
	            });
	            
	            tq.subform.inputs.dob_month.on('change',function(){
	            	tq.subform.check_dob();
	            });
	            
	            
	            $('#btn_subscribe').on('click', function(){
	            	var err = false;
	            	if ( !tq.subform.check_firstname() ){
	            		err = true;
	            	}
	            	
	            	if ( !tq.subform.check_lastname() ){
	            		err = true;
	            	}
	            	
	            	if ( !tq.subform.check_email(false) ){
	            		err = true;
	            	}
	            	
	            	if ( !tq.subform.check_country() ){
	            		err = true;
	            	}
	            	
	            	if ( !tq.subform.check_state() ){
	            		err = true;
	            	}
	            	
	            	if ( !tq.subform.check_dob() ){
	            		if ( tq.subform.inputs.dob_day.val() != '' && tq.subform.inputs.dob_month.val() == ''){
			        		tq.subform.inputs.dob_day.removeClass();
			        		tq.subform.inputs.dob_month.removeClass().addClass('error');
			        		tq.subform.msg.dob.removeClass().addClass('error').html('Please select your Birth Month!')
			        	}
			        	
			        	if ( tq.subform.inputs.dob_month.val() != '' && tq.subform.inputs.dob_day.val() == ''){
			        		tq.subform.inputs.dob_month.removeClass();
			        		tq.subform.inputs.dob_day.removeClass().addClass('error');
			        		tq.subform.msg.dob.removeClass().addClass('error').html('Please select your Birth Day!')
			        	}
			        	if ( tq.subform.inputs.dob_month.val() == '' && tq.subform.inputs.dob_day.val() == ''){
			        		
			        		tq.subform.inputs.dob_month.removeClass().addClass('error');
			        		tq.subform.inputs.dob_day.removeClass().addClass('error');
			        		tq.subform.msg.dob.removeClass().addClass('error').html('Please provide your birthday so we can send you a special birthday offer')
			        		
			        	}
			        	
			        	err = true;
	            	}
	            	
	            	if ( err ){
	            		return false;	
	            	} else {
	            		trackme();
	            		return true;
	            	}
	            });
	            
	        },
	        subform:{
	        	inputs:{
	        		firstname:	$('#firstname'),
	        		lastname:	$('#lastname'),
	        		email:		$('#email'),
	        		country:	$('#country'),
	        		state:		$('#state'),
	        		dob_day: 	$('#dob_day'),
	        		dob_month: 	$('#dob_month')
	        	},
	        	msg:{
	        		firstname:	$('#firstname_msg'),
	        		lastname:	$('#lastname_msg'),
	        		email:		$('#email_msg'),
	        		country:	$('#country_msg'),
	        		state:		$('#state_msg'),
	        		dob:		$('#dob_msg')
	        	},
	        	field:{
	        		state: $('#state_field')
	        	},
	        	ignore_keys: [9,13,16,17,18,20,27,224,37,38,39,40],
	        	email_checked: false,
	        	check_firstname:function(){
	        		if ( tq.subform.inputs.firstname.val().toLowerCase() != 'first name' && tq.subform.inputs.firstname.val() != '' ){
	        			tq.subform.msg.firstname.removeClass('error');
	        			tq.subform.inputs.firstname.removeClass('error');
	        			tq.subform.msg.firstname.html('Looks good!').addClass('okay');
	        			return true;
	        		} else {
	        			tq.subform.inputs.firstname.addClass('error');
	            		tq.subform.msg.firstname.addClass('error');
	            		tq.subform.msg.firstname.html('What name do you like to go by?');
	            		return false;
	        		}
	        	},
	        	check_lastname:function(){
	        		if ( tq.subform.inputs.lastname.val().toLowerCase() != 'surname' && tq.subform.inputs.lastname.val() != '' ){
	        			tq.subform.msg.lastname.removeClass('error');
	        			tq.subform.inputs.lastname.removeClass('error');
	        			tq.subform.msg.lastname.html('Nice work').addClass('okay');
	        			return true;
	        		} else {
	        			tq.subform.inputs.lastname.addClass('error');
	            		tq.subform.msg.lastname.addClass('error');
	            		tq.subform.msg.lastname.html('Don\'t forget your surname please');
	            		return false;
	        		}
	        	},
	        	check_email:function( full ){
	        		if ( tq.subform.inputs.email.val().toLowerCase() != 'email address' && tq.subform.inputs.email.val() != '' ){
	        			// check whether email address is valid
	        			if ( tq.subform.validate_email( tq.subform.inputs.email.val() ) ){
	        				// check whether user is already subscribed
	        				if ( full ){
	        					// check against php email validation
            					$.ajax({
            						url: '/api/validateEmail?email='+tq.subform.inputs.email.val(),
            						dataType: "json",
    	                			cache: false,
    	                			beforeSend:function(){
    	                				tq.subform.msg.email.removeClass();
    	                				tq.subform.msg.email.addClass('loading');
    	                			},
    	                			success:function(res){
    	                				tq.subform.msg.email.removeClass();
    	                				if (res.response){
    	                					tq.subform.msg.email.addClass('okay').html('Email is good');
    	                					tq.subform.email_checked = true;
    	                					$.ajax({
    	    		        					url: '/api/isSubscribed?email='+tq.subform.inputs.email.val(),
    	    		        					dataType: "json",
    	    		                			cache: false,
    	    		                			beforeSend:function(){
    	    		                				tq.subform.msg.email.removeClass();
    	    		                				tq.subform.msg.email.addClass('loading');
    	    		                			},
    	    		                			success:function(res){
    	    		                				tq.subform.msg.email.removeClass();
    	    		                				tq.subform.inputs.email.removeClass();
    	    		                				if ( res.response ){
    	    		                					tq.subform.msg.email.addClass('okay').html('Good news, your email is already in our database!<br />Want to <a href="http://www.queenslandholidays.com.au/travel-tools/e-newsletters/update-your-details.cfm?email='+tq.subform.inputs.email.val()+'" target="_parent">update your details</a>?');
    	    		                					tq.subform.email_checked = true;
    	    		                				} else {
    	    		                					tq.subform.msg.email.removeClass().addClass('okay').html('Email is good');
    	    		                				}
    	    		                			}
    	    		        				});
    	                				} else {
    	                					tq.subform.inputs.email.addClass('error');
    	        		            		tq.subform.msg.email.addClass('error').html('Doesn\'t look quite right, please try again');
    	                				}
    	                			}
            					});
	        					
	        				} else {
	        					tq.subform.msg.email.removeClass().addClass('okay').html('Email is good');
	        				}
		        			return true;
	        			} else {
	        				tq.subform.inputs.email.addClass('error');
		            		tq.subform.msg.email.addClass('error');

	        				if ( tq.subform.inputs.email.val() == '' || tq.subform.inputs.email.val().toLowerCase() == 'email address' ){
	        					tq.subform.msg.email.html('An email address is required please!');
	        				} else {
	        					tq.subform.msg.email.html('Doesn\'t look quite right, please try again');	
	        				}
		            		return false;
	        			}
	        			
	        		} else {
	        			tq.subform.inputs.email.addClass('error');
	            		tq.subform.msg.email.addClass('error');
	        			if ( tq.subform.inputs.email.val() == '' || tq.subform.inputs.email.val().toLowerCase() == 'email address' ){
		            		tq.subform.msg.email.html('An email address is required please!');
		            		return false;
	        			} else {
	        				tq.subform.msg.email.html('Doesn\'t look quite right, please try again');
	        			} 
	        		}
	        	},
	        	check_country:function(){
	        		if (tq.subform.inputs.country.val() == ''){
	        			tq.subform.inputs.country.addClass('error');
	            		tq.subform.msg.country.addClass('error');
	            		tq.subform.msg.country.html('Don\'t forget to select your Country');
	        			return false;
	        		} else {
	        			tq.subform.inputs.country.removeClass();
	            		tq.subform.msg.country.html('Thank you').removeClass().addClass('okay');
	            		if ( tq.subform.inputs.country.val() != 'AU' ){
	            			tq.subform.inputs.state.val('');
	            			tq.subform.msg.state.html('');
	            			tq.subform.msg.state.removeClass();
	            			tq.subform.field.state.hide();
	            		} else {
	            			tq.subform.field.state.fadeIn('fast');
	            		}
	        		}
	        		return true;
	        	},
	        	check_state:function(){
	        		if ( tq.subform.inputs.country.val() == 'AU' ){
	        			if ( tq.subform.inputs.state.val() == '' ){
	        				tq.subform.msg.state.html('Which State of Australia do you live in?').addClass('error');
	        				return false;
	        			} else {
	        				tq.subform.inputs.state.removeClass();
	        				tq.subform.msg.state.removeClass().html('Great').addClass('okay');
	        				return true;
	        			}
	        		} else {
	        			tq.subform.inputs.state.val('');
	        			tq.subform.msg.state.removeClass().html('');
	        			return true;
	        		}
	        	},
	        	validate_email:function(email){
	    			var emailpat;
	    			emailpat = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+$/;
	    			if( !emailpat.test( email ) ) {
	    		    	return false;
	    			} else {
	    				return true;
	    			}
		        },
		        ignoreKey:function(){
		        	
		        },
		        check_dob:function(){
		        	if ( tq.subform.inputs.dob_day.val() != '' && tq.subform.inputs.dob_month.val() != '' ){
		        		tq.subform.inputs.dob_day.removeClass();
		        		tq.subform.inputs.dob_month.removeClass();
		        		tq.subform.msg.dob.removeClass().html('Look out for a special birthday offer coming your way!').addClass('okay');
		        		return true;
		        	} else {
		        		if (tq.subform.inputs.dob_day.val() == '' && tq.subform.inputs.dob_month.val() == ''){
		        			tq.subform.inputs.dob_day.removeClass().addClass('error');
			        		tq.subform.inputs.dob_month.removeClass().addClass('error');
			        		tq.subform.msg.dob.removeClass().html('Please provide your birthday so we can send you a special birthday offer').addClass('error');
		        		}
		        	}
		        	return false;
		        }
	        }
	        
	}
	tq.init();
});

