var v
var form_messages
var validator_prepared = false

// ****************************************************************************************

// ONLOAD

function registration_onload() {
	$('.nojsbutton').hide()
	$('.jsbutton').show()
	document.getElementById('submitcontainer').innerHTML='';
	
	if ( $('#overridepostcode').is(':checked') ) {
		$('#postcode_override_form').show();
	}
	if ( $('#overridepostcode').is(':checked') ) {
		$('#postcode').val('')
		$('#postcode').attr('disabled',true)
	} else {
		$('#postcode').attr('disabled',false)
	}
	
	$('.jsbutton').bind('click',function () {
		form_validation()
	})
	
	if ($('#profile').length > 0) {
		$('#profile').bind('change',function () {
			request_a_valid_profile(true)
		})
	}
}

// ****************************************************************************************

// CHECK 

function reg_strtrim(str) {
        /* Thanks http://blog.stevenlevithan.com/archives/faster-trim-javascript */
        var     str = str.replace(/^\s\s*/, ''),
                ws = /\s/,
                i = str.length;
        while (ws.test(str.charAt(--i)));
        return str.slice(0, i + 1);
}

// profile 
function request_a_valid_profile(param_bool_giveAlert) {
	$('#profile').removeClass('tfvHighlight');
	the_obj =  document.getElementById('profile');
	if ( param_bool_giveAlert == true ) {
		check_if_within_min_limit( 200, the_obj, param_bool_giveAlert );
		check_if_within_limit( 1000, the_obj, param_bool_giveAlert );
	} else {
		result = check_if_within_min_limit( 200, the_obj, false ) + check_if_within_limit( 1000, the_obj, false );
		if (param_bool_giveAlert) {
			if ( result != '' ) {
				alert(result)
				return false
			}
		} else {
			return result
		}
	}
}
function check_if_within_limit ( param_int_limit, param_object, param_bool_giveAlert, hl_object_id ) {
	if (param_object) {
                param_object.value = reg_strtrim(param_object.value)
		if ( param_object.value.length > param_int_limit ) {
			if ( true === param_bool_giveAlert ) {
				$('#profile').addClass('tfvHighlight');
				alert ( "Your Professional Profile is greater than the permitted length of " + param_int_limit + " characters.\nOnly the first " + param_int_limit + " characters will be uploaded onto our database.\nPlease rectify." );
			} else {
				$('#profile').addClass('tfvHighlight');
				return "\n\"Professional Profile\" is greater than " + param_int_limit + " characters";
			}
		} else {
			if ( true !== param_bool_giveAlert ) {
				return "";
			}
		}
	} else {
		if ( true !== param_bool_giveAlert ) {
			return "";
		}
	}
}
function check_if_within_min_limit ( param_int_limit, param_object, param_bool_giveAlert, hl_object_id ) {
	if (param_object)  {
                param_object.value = reg_strtrim(param_object.value)
		if ( param_object.value.length < param_int_limit ) {
			if ( true === param_bool_giveAlert ) {
				$('#profile').addClass('tfvHighlight');
				alert ( "Your Professional Profile is shorter than the required length of " + param_int_limit + " characters.\nPlease rectify." );
			} else {
				$('#profile').addClass('tfvHighlight');
				return "\n\"Professional Profile\" is shorter than " + param_int_limit + " characters";
			}
		} else {
			if ( true !== param_bool_giveAlert ) {
				return "";
			}
		}
	} else {
		if ( true !== param_bool_giveAlert ) {
			return "";
		}
	}
}

// postal code 
function request_a_valid_postcode(param_bool_giveAlert) {
	if ( $('#overridepostcode').is(':checked') ) {
		$('#postcode_override_form').show();
	}
	
	tmp_msg = ''
	tmp_result = false
	
	// if address is not valid 
	if ( $('#validaddress').val() == 'N' ) {
		// if user is unable to provide a postal code
		if ( $('#overridepostcode').is(':checked') ) {
			// is city is not valid
			if ( $('#validcity').val() == 'N' ) {
				tmp_msg = 'Please enter a valid city'
				tmp_result = false
			} else {
			// if city is valid
				tmp_msg = ''
				tmp_result = true
			}
		} else {
		// if user can provide a postal code
			tmp_msg = form_messages.enter_a_valid_postcode
			tmp_result = false
		}
	} else {
	// if address is valid
		$('#postcode_override_form').hide();
		tmp_msg = ''
		tmp_result = true
	}
	
	if ( param_bool_giveAlert ) {
		if ( tmp_msg != '' ) {
			alert(tmp_msg)
		}
		return tmp_result
	} else {
		return "\n" + tmp_msg
	}
}

// sectors
function check_sectors() {
	$('#sectors_block').removeClass('tfvHighlight');
	var num_sectors = 0;
	var val_message = '';
	var el = document.register_form.elements;
	for ( i=0; i< el.length; i++ ) {
		if ( el[i].name.indexOf('sectors') > -1 ) {
			if ( el[i].checked == true ) {
				num_sectors++;
			}
		}
	}
	if ( num_sectors > 4 ) {
		val_message = form_messages.only_select_a_maximum_of_4_sectors;
		$('#sectors_block').addClass('tfvHighlight');
	}
	if ( num_sectors == 0 ) {
		val_message = form_messages.at_least_one_job_sector_must_be_selected;
		$('#sectors_block').addClass('tfvHighlight');
	}
	return val_message;
}

// available date
function check_availability(param_bool_giveAlert) {
	$('#availability_block').removeClass('tfvHighlight');
	var radioObj = document.register_form.elements['available'];
	var radioLength = radioObj.length;
	var availability = '';
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			availability = radioObj[i].value;
		}
	}		
	if( availability == "" ) {
		$('#availability_block').addClass('tfvHighlight');
		if (param_bool_giveAlert) {
			alert( "\"Availability\" - must be selected\n" )
			return false
		} else {
			return "\n" + "\"Availability\" - must be selected"
		}
	}
	if( availability == "notice" && document.register_form.elements['notice'].value==0 ) {
		$('#availability_block').addClass('tfvHighlight');
		if (param_bool_giveAlert) {
			alert( "\"Availability\" - Notice period must be selected\n" )
			return false
		} else {
			return "\n" + "\"Availability\" - Notice period must be selected"
		}
	}
	if (param_bool_giveAlert) {
		return true;
	} else {
		return ''
	}
}

// ****************************************************************************************

// SUBMIT

function check_geolocation() {
	if ( geo_waiting_for_validation == true ) {
		setTimeout('check_geolocation()',3000);
	} else {
		if ( request_a_valid_postcode(true) == true ) {
			form_submit_call('register_form')
		} else {
			return false
		}
	}
}

function form_validation() {
    if ( uploads_in_progress > 0 ) {
        alert("File upload in progress. Please wait until upload finishes and try again.")
    } else {
        if (form_messages) {
            geo_start_waiting_for_validation()
            geo_validate_address()


            message_log = ''
            if ($('#sectors_block').length > 0) {
                message_log += check_sectors()
            }
            if ($('#availability_block').length > 0) {
                message_log += check_availability()
            }
            if ($('#profile').length > 0) {
                message_log += request_a_valid_profile()
            }

            if ( v.exec(message_log) == true ) {
                result = true
            } else {
                result = false
            }
            if ( result == true ) {
                result = check_geolocation()
            }
            return result
        } else {
            alert('Validation error, please reload the page')
        }
    }

}

function profile_register_prepare_validator(frm_msg) {
	if ( !validator_prepared ) {
		validator_prepared = true
		form_messages = frm_msg
		a_messages = form_messages.a_messages
		var a_fields = {
			'email':		{'l':form_messages.label_email_address	,'r': true,'t':'email'}
			,'password1':		{'l':form_messages.password		,'r': true,'t':'password1', 'm':'password2'}
			,'password2' :		{'l':form_messages.label_confirm_password,'r':true,'t':'password2'}
			,'first_name':		{'l':form_messages.label_first_name	,'r': true,'t':'first_name'}
			,'last_name':		{'l':form_messages.last_name		,'r': true,'t':'last_name'}
			,'country_of_residence':{'l':form_messages.country_residence	,'r': true,'t':'country_of_residence'}
			,'city':		{'l':form_messages.city			,'r': true,'t':'city'}
			,'primary_language':	{'l':form_messages.most_fluent_language	,'r': true,'t':'primary_language'}
			,'profile':		{'l':form_messages.profile		,'r': true,'t':'profile'}
			,'education':		{'l':form_messages.Education		,'r': true,'t':'education'}
			/*,'cv_to_upload':	{'l':form_messages.cv_upload		,'r': true,'t':'cv_to_upload'}*/
			,'heard_about':		{'l':form_messages.how_you_heard_about_us,'r': true,'t':'heard_about'}
			,'did_agree_to_conditions':{'l':form_messages.agree_to_conditions,'r': true,'t':'did_agree_to_conditions'}
		},
		o_config = {
			'to_disable' : ['Submit', 'Reset'],
			'alert' : 1
		}
		
		v = new validator ( 'register_form', a_fields, o_config )
	}
}

function profile_update_prepare_validator(frm_msg) {
	if ( !validator_prepared ) {
		validator_prepared = true
		form_messages = frm_msg
		a_messages = form_messages.a_messages
		var a_fields = {
			'email':		{'l':form_messages.label_email_address	,'r': true,'t':'email'}
			,'password1':		{'l':form_messages.password		,'r': false,'t':'password1', 'm':'password2'}
			,'password2' :		{'l':form_messages.label_confirm_password,'r':false,'t':'password2'}
			,'first_name':		{'l':form_messages.label_first_name	,'r': true,'t':'first_name'}
			,'last_name':		{'l':form_messages.last_name		,'r': true,'t':'last_name'}
			,'country_of_residence':{'l':form_messages.country_residence	,'r': true,'t':'country_of_residence'}
			,'city':		{'l':form_messages.city			,'r': true,'t':'city'}
			,'primary_language':	{'l':form_messages.most_fluent_language	,'r': true,'t':'primary_language'}
			,'profile':		{'l':form_messages.profile		,'r': true,'t':'profile'}
			,'education':		{'l':form_messages.Education		,'r': true,'t':'education'}
		},
		o_config = {
			'to_disable' : ['Submit', 'Reset'],
			'alert' : 1
		}
		
		v = new validator ( 'register_form', a_fields, o_config )
	}
}

function profile_upgrade_prepare_validator(frm_msg) {
	if ( !validator_prepared ) {
		validator_prepared = true
		form_messages = frm_msg
		a_messages = form_messages.a_messages
		var a_fields = {
			'password1':		{'l':form_messages.password		,'r': true,'t':'password1', 'm':'password2'}
			,'password2':		{'l':form_messages.label_confirm_password,'r':true,'t':'password2'}
			,'country_of_residence':{'l':form_messages.country_residence	,'r': true,'t':'country_of_residence'}
			,'city':		{'l':form_messages.city			,'r': true,'t':'city'}
			,'profile':		{'l':form_messages.profile		,'r': true,'t':'profile'}
		},
		o_config = {
			'to_disable' : ['Submit', 'Reset'],
			'alert' : 1
		}
		v = new validator ( 'register_form', a_fields, o_config )
	}
}

// ****************************************************************************************

// MISC

function select_all_desired_locations() {
	$("#locations_select *").attr("selected","selected"); 
}
function authorised_open_group(group_id,closeothers) {	
	if ( closeothers == true ) {
		$('.authgroupdiv').hide();
		$('.authorised_close_link').hide();
		$('.authorised_open_link').show();
	}
	$("#authgroupdiv"+group_id).show();
	$("#authorised_open_link"+group_id).hide();
	$("#authorised_close_link"+group_id).show();
	$("#authorised_container").css('height','240px');
	$("#authorised_container").scrollTop(0);
}
function authorised_close_group(group_id) {
	$("#authgroupdiv"+group_id).hide();
	$("#authorised_close_link"+group_id).hide();
	$("#authorised_open_link"+group_id).show();
	$("#authorised_container").css('height','110px');
	$("#authorised_container").scrollTop(0);
}
function click_authgroup(group_id) {
	if ( $('#authgroup'+group_id).is(':checked') ) {
		$(".authoriseditems"+group_id).attr("checked","checked");
	} else {
		$(".authoriseditems"+group_id).attr("checked","");
	}
}
