var _missingValues = false;

String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

function isEmpty(fieldName, optionalField)
{
	var el = document.getElementById(fieldName);
	
	flagField(fieldName, true);

	if (el.value.trim() == '') {
		if (!optionalField) {
			_missingValues = true;
			flagField(fieldName, false);
		}
		
		return true;
	}
	
	return false;
}

function flagField(fieldName, valid)
{
	var el = document.getElementById(fieldName);
		
	if (valid)
		el.style.backgroundColor = '#fff';
	else
		el.style.backgroundColor = '#E8A6B0';
}

function _isSomething(sValue, validChars)
{
	var isNumber = true;
	var currentChar;
	
	for (i = 0; i < sValue.length && isNumber == true; i++) 
	{ 
		currentChar = sValue.charAt(i); 
		if (validChars.indexOf(currentChar) == -1) 
		{
			isNumber = false;
		}
	}
	
	return isNumber;
}

function isNumeric(sValue)
{
	return _isSomething(sValue, "0123456789");
}

function isPhoneNo(sValue)
{
	return (isNumeric(sValue) && sValue.length == 8);
}

function isValidPostalCode(postal)
{
	return (isNumeric(postal) && postal.length == 4);
}

function goNext(doValidation, askLeads)
{
	if (askLeads)
	{
		showLeadsProgramInfo();
	}
	else if (!doValidation || validate())
	{
		document.getElementById('cbNext').value = 1;
		document.getElementById('addressForm').submit();
	}
}

function goPrevious()
{
	document.getElementById('cbPrev').value = 1;
	document.getElementById('addressForm').submit();
}

function startOver()
{
	document.location.href = 'address_change_wizard.php';
}

function goLast()
{
	var frm = document.getElementById('addressForm');
	frm.elements["step"].value = 5;
	goNext(false,false);
}

function validate()
{
	_missingValues = false;
	
	// Check if required fields have values
	isEmpty('person[firstname]');
	isEmpty('person[lastname]');
	isEmpty('person[mobile_phone]',true);
	isEmpty('person[home_phone]',true);
	isEmpty('old_address[street1]');
	isEmpty('new_address[street1]');

	var oldPostalIsEmpty = isEmpty('old_address[postal_code]');
	var oldCityIsEmpty = isEmpty('old_address[city]');
	var newPostalIsEmpty = isEmpty('new_address[postal_code]');
	var newCityIsEmpty = isEmpty('new_address[city]');
	
	var msg = '';
	
	if (_missingValues) {
		msg = 'Vennligst angi verdier i alle feltene som er merket i rødt';
	}
	
	// Validate old postal code
	if (!oldPostalIsEmpty && !isValidPostalCode(document.getElementById('old_address[postal_code]').value)) {
		msg += (msg.length > 0 ? '<br/>' : '')+ 'Postnr for din gamle adresse er ugyldig';
		flagField('old_address[postal_code]', false);
	}
	else if (oldCityIsEmpty && !oldPostalIsEmpty) {
		msg += (msg.length > 0 ? '<br/>' : '')+ 'Postnr for din gamle adresse finnes ikke registrert';
		flagField('old_address[postal_code]', false);
	}

	// Validate new postal code
	if (!newPostalIsEmpty && !isValidPostalCode(document.getElementById('new_address[postal_code]').value)) {
		msg += (msg.length > 0 ? '<br/>' : '')+ 'Postnr for din nye adresse er ugyldig';
		flagField('new_address[postal_code]', false);
	}
	else if (newCityIsEmpty && !newPostalIsEmpty) {
		msg += (msg.length > 0 ? '<br/>' : '')+ 'Postnr for nye adresse finnes ikke registrert';
		flagField('new_address[postal_code]', false);
	}
	
	// Validate street numbers and letters
	var oldStreet1Number = document.getElementById('old_address[street1_number]').value;
	var oldStreet1Letter = document.getElementById('old_address[street1_letter]').value;
	var newStreet1Number = document.getElementById('new_address[street1_number]').value;
	var newStreet1Letter = document.getElementById('new_address[street1_letter]').value;

	if (oldStreet1Number.length > 0 && isNaN(oldStreet1Number)) {
		msg += (msg.length > 0 ? '<br/>' : '')+ 'Gatenr for gammel adresse må være et tall. Evt bokstav (f.eks som i "Storgata 9A") settes i feltet "Oppgang"';
		flagField('old_address[street1_number]', false);
	}
	if (oldStreet1Letter.length > 1 || (oldStreet1Letter.length > 0 && !isNaN(oldStreet1Letter))) {
		msg += (msg.length > 0 ? '<br/>' : '')+ 'Seksjon/ oppgang for gammel adresse må være en bokstav';
		flagField('old_address[street1_letter]', false);
	}
	if (newStreet1Number.length > 0 && isNaN(newStreet1Number)) {
		msg += (msg.length > 0 ? '<br/>' : '')+ 'Gatenr for ny adresse må være et tall. Evt bokstav (f.eks som i "Storgata 9A") settes i feltet "Oppgang"';
		flagField('new_address[street1_number]', false);
	}
	if (newStreet1Letter.length > 1 || (newStreet1Letter.length > 0 && !isNaN(newStreet1Letter))) {
		msg += (msg.length > 0 ? '<br/>' : '')+ 'Seksjon/ oppgang for ny adresse må være en bokstav';
		flagField('new_address[street1_letter]', false);
	}
	
	// Validate phone numbers
	var mobilePhone = document.getElementById('person[mobile_phone]').value;
	var homePhone = document.getElementById('person[home_phone]').value;
	
	if (mobilePhone.length > 0 && !isPhoneNo(mobilePhone)) {
		msg += (msg.length > 0 ? '<br/>' : '')+ 'Mobilnr er ikke et gyldig telefonnr (8 siffer, kun tall)';
		flagField('person[mobile_phone]', false);
	}
	
	if (homePhone.length > 0 && !isPhoneNo(homePhone)) {
		msg += (msg.length > 0 ? '<br/>' : '')+ 'Tlf hjem er ikke et gyldig telefonnr (8 siffer, kun tall)';
		flagField('person[home_phone]', false);
	}
	
	// Validate move date
	var moveDate = document.getElementById('move_date[day]').value +'/'+ document.getElementById('move_date[month]').value +'/'+ document.getElementById('move_date[year]').value;
	var tmpMsg = isDate(moveDate);
	if (tmpMsg.length > 0)
	{
		switch(tmpMsg)
		{
			case 'day':
				tmpMsg = 'Dagen er ikke gyldig for valgt måned';
				flagField('move_date[day]', false);
				break;
			case 'month':
				tmpMsg = 'Måneden er ikke gyldig';
				flagField('move_date[month]', false);
				break;
			case 'year':
				tmpMsg = 'Årstallet er ikke gyldig';
				flagField('move_date[year]', false);
				break;
			default:
				tmpMsg = 'Flyttedatoen er ikke gyldig';
				flagField('move_date[day]', false);
				flagField('move_date[month]', false);
				flagField('move_date[year]', false);
		}
			
		msg += (msg.length > 0 ? '<br/>' : '')+ tmpMsg;
	}
	
	// Show message
	if (msg.length > 0)
	{
		showMsg(msg);
		return false;
	}
	
	return true;
}

function setCity(postal_code, fieldName, displayOption)
{
	if (!_ajax_enabled) {
		alert('AJAX support disabled');
		return false;
	}

	// Lookup postal code
	if (postal_code == '') {
		document.getElementById(fieldName).value = '';
	} else {
		setValue('get_postal_info.php?id='+ postal_code, fieldName, displayOption);
	}
}
