var NO_AGENT_LISTED = "I am Not Listed";
var NO_OFFICE_LISTED = "My Office Is Not Listed";

var screenNameRequestCheck = false;
var screenNameChecking = "";
var state = 0;

var brokerProv = null;
var claimId = 0;

var page = '';
//var checkNameAjax;

function isProperName(elem, helperMsg){
	var trimmed = elem.val().replace(/^\s+|\s+$/g, '') ;
	var alphaExp;

	if (trimmed.length == 1) {
		alphaExp = /^[a-zA-Z']$/;
	} else {
		alphaExp = /^[a-zA-Z']+ *[a-zA-Z'-]+$/;
	}

	if(trimmed.match(alphaExp)){
		return true;
	}else{
		showErrorMesg(helperMsg);
		elem.focus();
		return false;
	}
}

function nameAcceptable() {
	var screenname = $("#screenname");

	if (screenname.val().length < 3) {
		$("#screennameavailable").html("&nbsp;Too Short");
		return false;
	}

	if(!screenname.val().match(/^[a-zA-Z0-9_.]+$/)){
		$("#screennameavailable").html("&nbsp;Invalid Character(s)");
		return false;
	}

	return true;
}

function validNameField(id, name) {
	var nameTag = $("#"+id);

	if (nameTag.val() == '') {
		showErrorMesg(name + " Name is Missing");
		nameTag.focus();
		return false;
	}
	if (!isProperName(nameTag, name + "Name can only contain alphabetical letters")) {
		return false;
	}

	return true;
}

function validFirstName() {
	return validNameField("fname", "First");
}

function validLastName() {
	return validNameField("lname", "Last");
}

function isScreenNameAcceptable(){
	var screenname = $("#screenname");

	if(!screenname.val().match(/^[a-zA-Z0-9_.]+$/)){
		// screen name not alpha numeric or underscore
		showErrorMesg("Screen name can only contain letters A-Z, a-z, 0-9 or an _");
		screenname.focus();
		return false;
	}

	if (screenname.val().length < 3) {
		// screen name less than 3 characters
		showErrorMesg("Screen name must be 4 letters or more");
		screenname.focus();
		return false;
	}

	return true;
}

/*
	As user is entering the screen name we fire off ajax requests to see if
	the screen name is in use.  "In Use" or "Available" is shown for the user.

	Function gets call onkeyup or onchange for the screen name field.  Frsunction
	is also recursive due to race conditions.
*/
function checkScreenName() {
	if (screenNameRequestCheck) return; // already waiting on a request check

	var screenname = $('#screenname');
	if (screenname.val() == screenNameChecking) return;
	screenNameRequestCheck = true;
	screenNameChecking = screenname.val();

	if (!nameAcceptable()) {
		screenNameRequestCheck = false;
		checkScreenName();
		return;
	}
	var url = "/phpHelpers/signup/verifyScreenName.php";
	if(!screenname.val().match(/^[a-zA-Z0-9_.]+$/)){
		$("#screennameavailable").html("&nbsp;Invalid Character(s)");
		return;
	}
	var params= "?screenname=" + screenname.val();
	checkNameAjax = new HZAjax(url+params, function() {
				if (checkNameAjax.xmlhttp.readyState == 4 && checkNameAjax.xmlhttp.status == 200) {
					count=parseInt(checkNameAjax.xmlhttp.responseText);

					if (count == 0) {
						$("#screennameavailable").html("&nbsp;Available");
					} else {
						$("#screennameavailable").html("&nbsp;In Use");
					}
					screenNameRequestCheck = false;
					screenname = $('#screenname');
					if (screenNameChecking != screenname.val()) {
					       checkScreenName();
					}
				}
			} );
	checkNameAjax.send();

}

function showErrorMesg(mesg) {
	$("#errordisplay")
		.html("<strong>" + mesg + "</strong>")
		.show();

	registerTrack(mesg);
}

function hideErrorMesg() {
	$("#errordisplay")
		.html('')
		.hide();
}

function registerTrack(error) {
	if (isRobot) return;
	var paramList = "type=register_error" 
				+ "&item1=" + error 
				+ "&item2=" + page 
				+ "&track=0";

	trackAjax = new HZAjax("/phpHelpers/util/trackAjax.php?" +paramList, null);
	trackAjax.send();	
}

function acceptedCheckboxes() {
	var privacyCheckbox = document.getElementById("privacy");

	if (privacyCheckbox.checked == false) {
		privacyCheckbox.focus();
		showErrorMesg("Privacy Policy and Terms of Service acceptance is required");
		return false;
	}

	return true;
}

function validNewPassword() {
	var newPasswordElem = $("#pw");

	if (newPasswordElem.val() != '') {
		if (passwordElem.val() == '') {
			var passwordElem = $("#oldpw");
	
			passwordElem.focus();
			showErrorMesg("Password Required to submit");
	
			return false;
		}

		return validPassword();
	}
	return true;
}

function validPassword() {
	var passwordElem = $("#pw");
	var confirmPasswordElem = $("#pwconfirm");

	if (passwordElem.val() != confirmPasswordElem.val()) {
		passwordElem.focus();
		// passwords do not match
		showErrorMesg("Passwords do not match");
		return false;
	}

	var passLength = passwordElem.val().length;
	if (passLength < 6 || passLength > 10) {
		passwordElem.focus();
		// password length not between 6 and 10 
		showErrorMesg("Password must be between 6 and 10 letters");
		return false;
	}

	return true;
}

function validHouseAddress() {
	return ($("#address").val() != '');
}

function validAgentEmail() {
	var emailElem = $("#aemail");

	if (emailElem.val() == '') {
		return true;
	}
	return validEmail("aemail");
}

function validEmail(id){
	var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
	var emailElem = $("#" + id);

	if(emailElem.val().match(emailExp)){
		return true;
	} else {
		// not a well formed email
		showErrorMesg("Email address does not appear to be valid");
		emailElem.focus();
		return false;
	}
}

function validName() {
	var firstname = $("#firstname"); 
	var lastname = $("#lastname"); 

	if (firstname.val() != '') {
		if (!isProperName(firstname, "First Name can only contain alphabetical letters")) {
			// first name not alpha
			return false;
		}
	}
	if (lastname.val() != '') {
		if (!isProperName(lastname, "Last Name can only contain alphabetical letters")){
			// last name not alpha
			return false;
		}
	}

	return true;
}

function validField(id, name) {
	var nameTag = $("#" + id);

	if (nameTag.val() == '') {
		showErrorMesg(name + " is missing");
		nameTag.focus();

		return false;
	}

	return true;
}

function validOffice() {
	return validField("office", "Office Name");
}

function validAddress() {
	return validField("address", "Address");
}

function validCity() {
	var cityId = $("#cityid").val();

	if ($("#city").val() == '' || cityId == '' || cityId == '0') {
		showErrorMesg("City is missing");
		$("#city").focus();

		return false;
	}

	return true;
}

function validPhone(id) {
	return true;
}

function onProvinceChange() {
	$("#city").removeAttr("disabled")
		.flushCache()
		.val('');
	$("#cityid").val('0');
	changeMade = true; // only used in profile
}

function onCityChange() {
	$("#office").removeAttr("disabled")
		.flushCache()
		.val('');
}

function officeHTML(jsonResults) {
	var html = "<fieldset id='officeDetails'><p><h2>" + jsonResults['name'] + "</h2></p><dl>"
	html += "<dt></dt><dd> " + jsonResults['address'] +"</dd></dl>";
	
	if (jsonResults['postal_code'] != '') {
		html += "<dl><dt></dt><dd> " + jsonResults['postal_code'] +"</dd>";
	}
	if (jsonResults['phone'] != '') {
		html += "<dl><dt>Phone:</dt><dd> " + jsonResults['phone'] +"</dd></dl>";
	}
	if (jsonResults['fax'] != '') {
		html += "<dl><dt>Fax:</dt><dd> " + jsonResults['fax'] +"</dd></dl>";
	}
	if (jsonResults['url'] != '') {
		html += "<dt></dt><dd> " + jsonResults['url'] +"</dd>";
	}
	
	html +="</dl></fieldset>";

	return html;
}

function urlencode(str) {
	return escape(str).replace(/\+/g,'%2B').replace(/%20/g, '+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/@/g, '%40');
}

function validPhoto() {
	var photoElem = $("#photo");
	var photo = photoElem.val();

	if (photo == '') {
		return true;
	}

	if (photo.match(/\.jpg|\.jpeg|\.png|\.gif$/i)) {
		return true;
	} else {
		showErrorMesg("JPG, JPEG, PNG or GIF only");
		photoElem.focus();

		return false;
	}
}

function contactLinkForm() {
	$('#contactLink').click(function (e) {
		e.preventDefault();

		$.get("/contact/data/contact.php", function(data){
			// create a modal dialog with the data
			$(data).modal({
				close: false,
				overlayId: 'contact-overlay',
				containerId: 'contact-container',
				onOpen: contact.open,
				onShow: contact.show,
				onClose: contact.close,
				closeCallback: null
			});
		});
	});


	contact.closeCallBack = contactCloseCallBack;
}

function flagInfoHTML() {
	return "<div id='responseMessage'><a id='contactLink' href='#'>Request an Office Change</a></div>";	//might change this
}

function contactCloseCallBack() {
	$("#officeHeader").html(flagInfoHTML());
	contactLinkForm();
}

function notificationUpdate() {
	var alertedMessage = "<div id='responseMessage'><strong>The HomeZilla team has been notified; expect an email within 48 hours. </strong></div>";
	$("#officeHeader").html(alertedMessage);
}

function photoLink(image, width, height, maxWidth, maxHeight) {
	var changed = false;

	if (width > maxWidth) {
		var r = maxWidth / width;

		height = parseInt(height * r);
		width = maxWidth;
		changed = true;
	}
	if (height > maxHeight) {
		var r = maxHeight / height;

		width = parseInt(width * r);
		height = maxHeight;
		changed = true;
	}

	if (changed) {
		return "<img src='" + image + "?" + Math.random() + "' width=" + width + " height=" + height + " />";
	} else {
		return "<img src='" + image + "?" + Math.random() + "'/>";
	}
}

