var REGEX = {"valid_email":"^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,4})$","valid_phone":"^[\\*\\(\\)\\ \\+0-9-]{3,50}$","valid_promotion_code":"^[A-Za-z]{3}[0-9]{2,12}$","valid_zip":"^[\\ A-Za-z0-9-\\\/]{1,20}$","valid_name":"^[A-Za-z '-]{2,50}$","valid_reservnum":"^[0-9]{8}$","valid_password":"^(?=[_A-Za-z0-9-]{3,20}$).*[^0-9]","valid_address":"^[A-Za-z0-9\\.,:;\\(\\)'\"\\\/ \\u0400-\\u04FF\\u0080-\\u00FF\\u0100-\\u017F\\u0180-\\u024F-]{3,50}$","valid_flightnum":"^[A-Za-z0-9\\.,:;\\(\\)'\"\\\/ \\u0400-\\u04FF\\u0080-\\u00FF\\u0100-\\u017F\\u0180-\\u024F-]{3,20}$","valid_date":"^(19|20)[0-9][0-9][- ](0?[1-9]|1[012])[- ](0?[1-9]|[12][0-9]|3[01])$","valid_year":"^(19|20)[0-9][0-9]$","valid_month":"^(0?[1-9]|1[012])$","valid_day":"^(0?[1-9]|[12][0-9]|3[01])$","valid_age":"^[1-9][0-9]$","valid_cvv2":"^[0-9]{3,4}$","valid_time":"[0-2][0-9]:[0-5][0-9]","empty":"^$"};

function isArray(testObject) {
    return testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number';
}

function isValidRegex(input, regex) {
	return input.match(new RegExp(regex)) != null;
}

function isNameValid(nameId) {
	return isValidRegex($('#' + nameId).val(), REGEX['valid_name']);
}

function isTimeValid(timeId) {
	return isValidRegex($('# + timeId').val(), REGEX['valid_time']);
}

function isEmailValid(emailId) {
	return isValidRegex($('#' + emailId).val(), REGEX['valid_email']);
}

function isPhoneValid(phoneId) {
	return isValidRegex($('#' + phoneId).val(), REGEX['valid_phone']);
}

function isPromotionCodeValid(codeId) {
	return isValidRegex($('#' + codeId).val(), REGEX['valid_promotion_code']);
}

function isReservNumberValid(numberId) {
	return isValidRegex($('#' + numberId).val(), REGEX['valid_reservnum']);
}

function isPasswordValid(passwordId) {
	return isValidRegex($('#' + passwordId).val(), REGEX['valid_password']);
}

function isAddressValid(addressId) {
	return isValidRegex($('#' + addressId).val(), REGEX['valid_address']);
}
function isFlightValid(flightId) {
	return isValidRegex($('#' + flightId).val(), REGEX['valid_flightnum']);
}

function isZipValid(zipId) {
	return isValidRegex($('#' + zipId).val(), REGEX['valid_zip']);
}

function isAgeValid(ageId) {
	return isValidRegex($('#' + ageId).val(), REGEX['valid_age']);
}

function isCvv2Valid(id) {
	return isValidRegex($('#' + id).val(), REGEX['valid_cvv2']);
}

function equalValues(id, id2) {
	return $('#' + id).val() == $('#' + id2).val();
}

function isEmpty(id) {
	return $('#' + id).val() == '';
}

function isNonZero(id) {
	return $('#' + id).val() != '0';
}



function isChecked(id) {
	return $('#' + id + ':checked').length;
}

function fixPromotionCodeValue(id) {
	if (!isPromotionCodeValid(id.value)) {
		id.value = "";
		document.getElementById('promovalid').innerHTML = "Vigane PromoCode!";
	} else {
		document.getElementById('promovalid').innerHTML = "";
	}
}

function isCreditCardNumberValid(numberId) {
	var number = $('#' + numberId).val();
	if(number.length == 0) {
		return false;
	}
	var length = number.length;
	var idx = length - 2;
	var sum = 0;
	var digit = 0;
	var result = 0;

	for (var i = length - 1;i >= 0; i--) {
		digit = parseInt(number.substring(i, i+1), 10);
		if (i == idx) {
			idx -= 2;
			result = digit * 2;
			if (result >= 10) {
				sum += (result - 9);
			} else {
				sum += result;
			}
		} else {
			sum += digit;
		}
	}

	return sum % 10 == 0;
}

/*
function colorize(labelId, inputId, regexTags) {
	var color = matchAny(inputId, regexTags) ? 'black' : 'red';
	$('#' + labelId).css('color', color);
}

function matchAny(inputId, regexTags) {
	regexTagList = regexTags.split(':');
	for (var i = 0; i < regexTagList.length; i++) {
		if (isValidRegex($('#' + inputId).val(), REGEX[regexTagList[i]])) {
			return true;
		}
	}
	return false;
}

function matchAnyF(labelId, inputId, callbackList) {
	var ok = false;
	for (var i=0; i<callbackList.length; i++) {
		if (callbackList[i](inputId)) {
			ok = true;
		}
	}
	var color = ok ? 'black' : 'red';
	$('#' + labelId).css('color', color);
}

function validate(labelId, inputId, callback) {
	if(!callback(inputId)) {
		$('#' + labelId).css('color', 'red');
	} else {
		$('#' + labelId).css('color', 'black');
	}
}

*/

function userMessage(message) {
	alert(message);
}

function validateFunction(labelId, callback) {
	if (!callback) {
		$('#' + labelId).css('color', 'red');
	} else {
		$('#' + labelId).css('color', 'black');
	}
}


function colorize (labelId, inputId, callbacks) {
	var color = validate(inputId, callbacks) ? 'black' : 'red';
	$('#' + labelId).css('color', color);
}

/* return true, if any callback returns true */
function validate(inputId, callback) {
	if (isArray(callback)) {
		for (var i=0; i<callback.length; i++) {
			if (callback[i](inputId)) return true;
		}
		return false;
	} else {
		return callback(inputId);
	}
}

function checkStep3Form() {
	var message = "";
	var ok = true;

	function report(errMessage) {
		message += errMessage + "\n";
		ok = false;
	}

	if (!document.getElementById('terms').checked) report("Lai turpin\u0101tu, apstipriniet noteikumus");
	if (!validate('firstname_input', isNameValid)) report("V\u0101rdam ir j\u0101b\u016bt vismaz no 2 l\u012bdz 50 simboliem garam un j\u0101satur tikai burti! Ja neizdodas, l\u016bdzu sazinieties ar mums zvanot uz t\u0101lruni: + 371- 67798116");
	if (!validate('lastname_input', isNameValid)) report("Uzv\u0101rdam ir j\u0101b\u016bt vismaz no 2 l\u012bdz 50 simboliem garam un j\u0101satur tikai burti!");
	if (!validate('email_input', isEmailValid)) report ("E-pasts ir neder\u012bgs, p\u0101rbaudiet v\u0113lreiz");
	if (!validate('phone_input', isPhoneValid)) report ("Telefona numurs ir neder\u012bgs!");

	$('#firstname_input').keyup();
	$('#lastname_input').keyup();
	$('#email_input').keyup();
	$('#phone_input').keyup();
	$('#terms').change();

	if (!ok) {
				userMessage(message);
	}
	return ok;
}

function validateTimes() {
	if (!validate('dropoff_hour', isTimeValid)) return false;
	if (!validate('pickup_hour', isTimeValid)) return false;
	return true;
}

function checkSearchboxForm() {
	var message = "";
	var ok = true;

	function report(errMessage) {
		message += errMessage + "\n";
		ok = false;
	}

	if (!validate('driver_age', isAgeValid)) report("Vad\u012bt\u0101ja vecums ir nepareizs");
	if ($('#pickup_country').val() == "0") report("Izv\u0113l\u0113ties valsti");
	if ($('#pickup_city').val() == "0") report("Izv\u0113l\u0113ties pils\u0113tu");
	if ($('#pickup_location').val() == "0") report("Izv\u0113l\u0113ties vietu");
	if ($('#dropoff_country').val() == "0") report("Izv\u0113l\u0113ties valsti");
	if ($('#dropoff_city').val() == "0") report("Izv\u0113l\u0113ties pils\u0113tu");
	if ($('#dropoff_location').val() == "0") report("Izv\u0113l\u0113ties vietu");


	var inputs = ['driver_age', 'pickup_country', 'pickup_city', 'pickup_location', 'dropoff_country', 'dropoff_city', 'dropoff_location'];
	for (var i=0; i<inputs.length; i++) $('#' + inputs[i]).keyup();
	if (!ok) {
				userMessage(message);
	}
	return ok;
}

function checkBookForm(form) {
	var message = "";
	var ok = true;

	function report(errMessage) {
		message += errMessage + "\n";
		ok = false;
	}

	if (!validate('firstname_input', isNameValid)) report("V\u0101rdam ir j\u0101b\u016bt vismaz no 2 l\u012bdz 50 simboliem garam un j\u0101satur tikai burti! Ja neizdodas, l\u016bdzu sazinieties ar mums zvanot uz t\u0101lruni: + 371- 67798116");
	if (!validate('lastname_input', isNameValid)) report("Uzv\u0101rdam ir j\u0101b\u016bt vismaz no 2 l\u012bdz 50 simboliem garam un j\u0101satur tikai burti!");
	if (!validate('email_input', isEmailValid)) report("E-pasts ir neder\u012bgs, p\u0101rbaudiet v\u0113lreiz");
	if (!validate('phone_input', isPhoneValid)) report("Telefona numurs ir neder\u012bgs!");
	if (!validate('city_input', isAddressValid)) report("Pils\u0113ta ir ievad\u012bta nepareizi");
	if (!validate('flight_number_input', isFlightValid)) report("");
	if (validate('flight_number_input', isEmpty)) report("");
	if (validate('airline_input', isEmpty)) report("");
	if (!$('#cc_holder').attr('disabled')) {
		if (validate('cc_holder', isEmpty)) report("L\u016bdzu ievadiet kred\u012btkartes \u012bpa\u0161nieka datus");
		else if (!validate('cc_holder', isNameValid)) report("Kred\u012btkartes \u012bpa\u0161nieka dati ir nepareizi");
		if (validate('cc_number_input', isEmpty)) report("L\u016bdzu ievadiet kred\u012btkartes numuru");
		else if (!validate('cc_number_input', isCreditCardNumberValid)) report("Kred\u012btkartes numurs ir neder\u012bgs, l\u016bdzu zvaniet uz t\u0101lruni +371-67798116");
	}
	//if (validate('cc_cvv2_input', isEmpty)) report("L\u016bdzu ievadiet CVV2 numuru");
	//else if (!validate('cc_cvv2_input', isCvv2Valid)) report("CVV2 ir neder\u012bgs");

	if (ok) {
		form.submit();
		return true;
	}

	var inputs = ['firstname_input', 'lastname_input', 'email_input', 'phone_input', 'address_input', 'city_input',
			'zip_input', 'cc_holder', 'cc_number_input'];
	for (var i=0; i<inputs.length; i++) $('#' + inputs[i]).keyup();
	userMessage(message);
	return false;
}

function checkCustomerDataForm() {
	var message = "";
	var ok = true;

	function report(errMessage) {
		message += errMessage + "\n";
		ok = false;
	}
	if (!validate('firstname_input', isNameValid)) report("V\u0101rdam ir j\u0101b\u016bt vismaz no 2 l\u012bdz 50 simboliem garam un j\u0101satur tikai burti! Ja neizdodas, l\u016bdzu sazinieties ar mums zvanot uz t\u0101lruni: + 371- 67798116");
	if (!validate('lastname_input', isNameValid)) report("Uzv\u0101rdam ir j\u0101b\u016bt vismaz no 2 l\u012bdz 50 simboliem garam un j\u0101satur tikai burti!");
	if (!validate('address', isAddressValid)) report("Adrese ievad\u012bta nepareizi. Adreses ievad\u012b\u0161anai izmantojiet lat\u012b\u0146u alfab\u0113tu.");
	if (!validate('city', isAddressValid)) report("Pils\u0113ta ir ievad\u012bta nepareizi");
	if (!validate('state', [isAddressValid,isEmpty])) report("Valsts ir ievad\u012bta nepareizi");
	if (!validate('zip', [isZipValid,isEmpty])) report("Pasta indekss ir ievad\u012bts nepareizi");
	//if (!validate('country', isAddressValid)) report("Valsts ir ievad\u012bta nepareizi");
	if (!validate('email_input', isEmailValid)) report("E-pasts ir neder\u012bgs, p\u0101rbaudiet v\u0113lreiz");
	if (!validate('telephone_input', [isPhoneValid,isEmpty])) report("Telefona numurs ir neder\u012bgs!");
	if (!validate('cellphone_input', [isPhoneValid,isEmpty])) report("Mobil\u0101 t\u0101lru\u0146a numurs ir ievad\u012bts nepareizi, l\u016bdzu zvaniet uz t\u0101lruni +371- 67798116");
	if (!validate('fax_input', [isPhoneValid,isEmpty])) report("Faksa numurs ir nepareizs, p\u0101rbaudiet v\u0113lreiz");

	if (isEmpty('telephone_input') && isEmpty('cellphone_input')) report("L\u016bdzu ievadiet J\u016bsu kontaktt\u0101lruni!");

	var inputs = ['firstname_input', 'lastname_input', 'address', 'city', 'state', 'zip', 'country', 'email_input',
				'telephone_input', 'cellphone_input', 'fax_input'];
	for (var i=0; i<inputs.length; i++) $('#' + inputs[i]).keyup();

	if (!ok) {
		userMessage(message);
	}
	return ok;
}