var message = "";

function checkIfEmpty(obj) {
	if (obj.value.length == 0) {
		message = "Bitte mindestens ein Zeichen ausfüllen! "; 
		return true; 
	}
	else {
		return false;
	}
}

function enterField(node) {
	if(node === undefined || node === null) {
    	return false;
    }
	node.firstChild.nodeValue = "";
}

function sendUserValidationRequest(username) {
	var queryString = "";
	var ratingResponse = function(xmlHttpRequest, json) {
		var res = xmlHttpRequest.responseText;
		var myJson = eval('(' + res + ')');
		if (myJson.message) {
			message = myJson.message;
			displayErrorMessage("username_error");
			var username = document.getElementsByName("username");
			resetField(username[0]);
		}
	};
	
	var url = "../user/validateuser.servlet.htm";
	queryString += "username=" + encodeURIComponent(username);
	ajax(url, queryString, ratingResponse);	
}

function sendEmailValidationRequest(element) {
	var queryString = "";
	var ratingResponse = function(xmlHttpRequest, json) {
		var res = xmlHttpRequest.responseText;
		var myJson = eval('(' + res + ')');
		if (myJson.message) {
			message = myJson.message;
			displayErrorMessage("email_error");
			resetField($(element));
		}
	};
	
	var url = "../user/validateuser.servlet.htm";
	queryString += "mailaddress=" + encodeURIComponent(element.value);
	ajax(url, queryString, ratingResponse);	
}

function validateUserLogin(maintenance) {
	if (!maintenance) {
		var username = document.getElementsByName("username");
		if (!validate(username[0],3,"true","username_error"))	
			return false;
		var mail = document.getElementsByName("email");
		if (!validate(mail[0],4,"true","email_error"))
			return false;
		var password = document.getElementsByName("password");	
		if (!validate(password[0],5,"true","password_error"))
			return false;
		var confirmpassword = document.getElementsByName("confirmpassword");
		if (!validate(confirmpassword[0],6,"true","confirmpassword_error"))
			return false;
	}
	var salutation = document.getElementsByName("salutation");
	if (!validateSalutation(salutation[0],"salutation_error"))
		return false;
	var firstname = document.getElementsByName("firstName");
	if (!validate(firstname[0],1,"true","firstName_error")) 
		return false;
	var lastname = document.getElementsByName("lastName");	
	if (!validate(lastname[0],1,"true","lastName_error"))
		return false;
	var phonenumber = document.getElementsByName("phoneNumber");
	if (!validate(phonenumber[0],7,"true","phoneNumber_error"))
		return false;
	
	if ($("businessCustomer") != null && $("businessCustomer").checked == true) {
		var company = document.getElementsByName("companyName");
		if (company[0].value && !validate(company[0],2,"true","companyName_error"))
			return false;
	}
	else {
		var birthdate = document.getElementsByName("birthDate");
		if (!validate(birthdate[0],1,"true","birthDate_error"))
			return false;
	}

	/* var mobilenumber = document.getElementsByName("mobileNumber");
	if (!validate(mobilenumber[0],7,"true","mobileNumber_error"))
		return false;	 */
	var billingfirstname = document.getElementsByName("billingAddressFirstName");
	if (!validate(billingfirstname[0],1,"true","billingAddressFirstName_error"))
		return false;			
	var billinglastname = document.getElementsByName("billingAddressLastName");
	if (!validate(billinglastname[0],1,"true","billingAddressLastName_error"))
		return false;
	var billingstreet = document.getElementsByName("billingAddressStreet");
	if (!validate(billingstreet[0],1,"true","billingAddressStreet_error"))
		return false;		
	var billingnumber = document.getElementsByName("billingAddressHouseNumber");
	if (!validate(billingnumber[0],1,"true","billingAddressHouseNumber_error"))
		return false;		
	var billingzip = document.getElementsByName("billingAddressZip");
	if (!validate(billingzip[0],8,"true","billingAddressZip_error"))
		return false;		
	var billingcity = document.getElementsByName("billingAddressCity");
	if (!validate(billingcity[0],1,"true","billingAddressCity_error"))
		return false;	
	
	var addressType = document.getElementsByName("addressType");
	if(!addressType)
		return false;
	var radioLength = addressType.length;
	for(var i = 0; i < radioLength; i++) 
		if (addressType[i].checked == true)
			addressTypeString = addressType[i].value;

	if (addressTypeString == 'company') {
		var deliverycompanyname = document.getElementsByName("deliveryAddressCompanyName");
		if (!validate(deliverycompanyname[0],2,"true","deliveryAddressCompanyName_error"))
			return false;
		var deliverycompanynamemore = document.getElementsByName("deliveryAddressCompanyNameMore");
		if (!validate(deliverycompanynamemore[0],2,"false","deliveryAddressCompanyNameMore_error"))
			return false;
		var deliverystreet = document.getElementsByName("deliveryAddressStreet");
		if (!validate(deliverystreet[0],1,"true","deliveryAddressStreet_error"))
			return false;		
		var deliverynumber = document.getElementsByName("deliveryAddressHouseNumber");
		if (!validate(deliverynumber[0],1,"true","deliveryAddressHouseNumber_error"))
			return false;
	}
	else if (addressTypeString == 'packstation') {
		var deliverypostalnumber = document.getElementsByName("deliveryAddressPostalNumber");
		if (!validate(deliverypostalnumber[0],9,"true","deliveryAddressPostalNumber_error"))
			return false;
		var deliverypackstationnumber = document.getElementsByName("deliveryAddressPackstationNumber");
		if (!validate(deliverypackstationnumber[0],9,"true","deliveryAddressPackstationNumber_error"))
			return false;
	}
	else if (addressTypeString == 'private') {
		var deliverystreet = document.getElementsByName("deliveryAddressStreet");
		if (!validate(deliverystreet[0],1,"true","deliveryAddressStreet_error"))
			return false;			
		var deliverynumber = document.getElementsByName("deliveryAddressHouseNumber");
		if (!validate(deliverynumber[0],1,"true","deliveryAddressHouseNumber_error"))
			return false;			
	}	
	var deliveryfirstname = document.getElementsByName("deliveryAddressFirstName");
	if (!validate(deliveryfirstname[0],1,"true","deliveryAddressFirstName_error"))
		return false;
	var deliverylastname = document.getElementsByName("deliveryAddressLastName");
	if (!validate(deliverylastname[0],1,"true","deliveryAddressLastName_error"))
		return false;			
	var deliveryzip = document.getElementsByName("deliveryAddressZip");
	if (!validate(deliveryzip[0],8,"true","deliveryAddressZip_error"))
		return false;			
	var deliverycity = document.getElementsByName("deliveryAddressCity");
	if (!validate(deliverycity[0],1,"true","deliveryAddressCity_error"))
		return false;	
	var deliverydescription = document.getElementsByName("deliveryDescription");
	if (!validate(deliverydescription[0],1,"false","deliveryDescription_error"))
		return false;	
	
	return true;
}

function validateDeliveryAddress() {
	var addressType = document.getElementsByName("addressType");
	if(!addressType)
		return false;
	var radioLength = addressType.length;
	for(var i = 0; i < radioLength; i++) 
		if (addressType[i].checked == true)
			addressTypeString = addressType[i].value;

	if (addressTypeString == 'company') {
		var deliverycompanyname = document.getElementsByName("deliveryAddressCompanyName");
		if (!validate(deliverycompanyname[0],1,"true","deliveryAddressCompanyName_error"))
			return false;
		var deliverycompanynamemore = document.getElementsByName("deliveryAddressCompanyNameMore");
		if (!validate(deliverycompanynamemore[0],1,"false","deliveryAddressCompanyNameMore_error"))
			return false;
		var deliverystreet = document.getElementsByName("deliveryAddressStreet");
		if (!validate(deliverystreet[0],1,"true","deliveryAddressStreet_error"))
			return false;		
		var deliverynumber = document.getElementsByName("deliveryAddressHouseNumber");
		if (!validate(deliverynumber[0],1,"true","deliveryAddressHouseNumber_error"))
			return false;
	}
	else if (addressTypeString == 'packstation') {
		var deliverypostalnumber = document.getElementsByName("deliveryAddressPostalNumber");
		if (!validate(deliverypostalnumber[0],9,"true","deliveryAddressPostalNumber_error"))
			return false;
		var deliverypackstationnumber = document.getElementsByName("deliveryAddressPackstationNumber");
		if (!validate(deliverypackstationnumber[0],9,"true","deliveryAddressPackstationNumber_error"))
			return false;
	}
	else if (addressTypeString == 'private') {
		var deliverystreet = document.getElementsByName("deliveryAddressStreet");
		if (!validate(deliverystreet[0],1,"true","deliveryAddressStreet_error"))
			return false;			
		var deliverynumber = document.getElementsByName("deliveryAddressHouseNumber");
		if (!validate(deliverynumber[0],1,"true","deliveryAddressHouseNumber_error"))
			return false;			
	}	
	var deliveryfirstname = document.getElementsByName("deliveryAddressFirstName");
	if (!validate(deliveryfirstname[0],1,"true","deliveryAddressFirstName_error"))
		return false;
	var deliverylastname = document.getElementsByName("deliveryAddressLastName");
	if (!validate(deliverylastname[0],1,"true","deliveryAddressLastName_error"))
		return false;	
	var deliveryzip = document.getElementsByName("deliveryAddressZip");
	if (!validate(deliveryzip[0],8,"true","deliveryAddressZip_error"))
		return false;			
	var deliverycity = document.getElementsByName("deliveryAddressCity");
	if (!validate(deliverycity[0],1,"true","deliveryAddressCity_error"))
		return false;
	var deliverydescription = document.getElementsByName("deliveryDescription");
	if (!validate(deliverydescription[0],1,"false","deliveryDescription_error"))
		return false;	
	
	return true;
}

function validateBillingAddress() {
	var billingcompanyname = document.getElementsByName("billingAddressCompanyName");
	if (!validate(billingcompanyname[0],1,"true","billingAddressCompanyName_error"))
		return false;
	var billingcompanynamemore = document.getElementsByName("billingAddressCompanyNameMore");
	if (!validate(billingcompanynamemore[0],1,"false","billingAddressCompanyNameMore_error"))
		return false;
	var billingfirstname = document.getElementsByName("billingAddressFirstName");
	if (!validate(billingfirstname[0],1,"true","billingAddressFirstName_error"))
		return false;			
	var billinglastname = document.getElementsByName("billingAddressLastName");
	if (!validate(billinglastname[0],1,"true","billingAddressLastName_error"))
		return false;
	var billingstreet = document.getElementsByName("billingAddressStreet");
	if (!validate(billingstreet[0],1,"true","billingAddressStreet_error"))
		return false;		
	var billingnumber = document.getElementsByName("billingAddressHouseNumber");
	if (!validate(billingnumber[0],1,"true","billingAddressHouseNumber_error"))
		return false;		
	var billingzip = document.getElementsByName("billingAddressZip");
	if (!validate(billingzip[0],8,"true","billingAddressZip_error"))
		return false;		
	var billingcity = document.getElementsByName("billingAddressCity");
	if (!validate(billingcity[0],1,"true","billingAddressCity_error"))
		return false;	
	
	return true;
}

function validateCreateProduct() {
	if (!validate($("articleNumber"),9,"true","property_error"))	
		return false;
	if (!validate($("ean"),9,"true","property_error"))	
		return false;
	if (!validate($("shortText"),2,"true","property_error"))	
		return false;
	if (!validate($("articleImage"),2,"true","property_error"))	
		return false;
	if (!validate($("multiplicator"),9,"true","property_error"))	
		return false;
	if (!validate($("quantity"),9,"true","property_error"))	
		return false;
	if (!validate($("minQuantity"),9,"true","property_error"))	
		return false;
	if (!validate($("maxQuantity"),9,"true","property_error"))	
		return false;
	if (!validate($("refQuantity"),9,"true","property_error"))	
		return false;
	if (!validate($("purchasePrice"),9,"true","property_error"))	
		return false;
	if (!validate($("salesPrice"),9,"true","property_error"))	
		return false;
	if (!saveButtonPressed)
		return false;
	
	return true;
}

/* Search result list validation */
/* Method: validateField
   Params: 	obj 			input field
			defaultValue	
			p_index			index id of edited product
*/
function validateField(field, p_index) {
	var product;
	if (p_index == "undefined") 
		product = myProduct;
	else 
		product = products[p_index];	
		
	if (isNaN(field.value)) 
		resetNumField(field, product, p_index);	
	else {
		var l_objVal = parseFloat(field.value);
		if (product.weighedGood == "true")
			if (l_objVal >= product.articles[0].minQuantity && l_objVal <= product.articles[0].maxQuantity)		
				return false;
			else
				resetNumField(field, product, p_index);
		else
			return false;	
	}
}

function resetNumField(field, product, p_index) {
	if (p_index == "undefined") 
		product.index = 0;
	else {
		if (product.weighedGood == "true" || product.weightPerUnit != 0) 
			product.index = 0;	
		else
			product.index = $("quantity_" + p_index).options[$("quantity_" + p_index).selectedIndex].value;
	}
	
    field.value = product.articles[product.index].nmbOfItems; 
}


/* field validation */
function validate(obj, type, empty, errorfield) {
	if (empty == 'true') { 
	    if (checkIfEmpty(obj)) { 
	    	displayErrorMessage(errorfield);
	    	resetField(obj);
			return false;
		}
	}
	if (checkIfEmpty(obj)) {
		return true;
	}
	else {
		switch (type) {
			/* alphanumeric */
			case 1:
				var reg = /[^a-zA-Z0-9äÄüÜöÖß\.\/\-\s%]/;
				message = "Bitte nur alphanumerische Zeichen verwenden!";
				break;
			/* alphanumeric with special characters */
			case 2:
				reg = /[^a-zA-Z0-9äÄüÜöÖß\&\.\/\-\s%,!:\)]/;
				message = "Bitte nur alphanumerische Zeichen oder . , - % / & Leerzeichen verwenden!";
				break;
			/* username */		
			case 3:
				reg = /[^A-Za-z0-9_üÜäÄöÖß@\.\-]/;
				message = "Der Benutzername enthält ungültige Zeichen!";
				break;
			/* email */
			case 4:
				reg = /([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
				message = "Die E-Mailadresse ist nicht gültig!";
				break;				
			/* password */		
			case 5:
				reg = /([a-zA-Z0-9]{6,})/;
				message = "Ein Passwort besteht aus mind. 6 alphanumerischen Zeichen!";
				break;
			/* confirm password */		
			case 6:
				reg = /([a-zA-Z0-9]{6,})/;
				message = "Die Passwörter sind nicht identisch!";
				var password = document.getElementsByName("password");
				if (password[0].value != obj.value) {
					displayErrorMessage(errorfield);
					return false;
				}
				message = "Ein Passwort besteht aus mind. 6 alphanumerischen Zeichen!";				
				break;	
			/* phone */
			case 7:
				reg = /^[0-9|+]{1}([0-9\-\(\)\.\/\s^\w]{6,24})/;
				message = "Eine Telefonnummer beginnt mit einer Ziffer oder + und hat 7 bis 25 Zeichen!";
				break;	
			/* zip */
			case 8:
				reg = /(\d){4,5}/;
				message = "Eine Plz besteht aus 4 oder 5 Ziffern!";
				break;	
			/* float */	
			case 9:
				reg = /[^0-9\.\,]/;
				message = "Die Zahl enthält ungültige Zeichen!";
				break;	
			/* ean */	
			case 10:
				reg = /(\d){8}/;
				message = "Die Ean enthält ungültige Zeichen oder ist nicht achtstellig!";
				break;
			/* credit card */
			case 11:
				reg = /[\d]{16}/;
				message = "Die Eingabe ist keine Kreditkartennummer!";
				break;
			/* secure code */
			case 12:
				reg = /[\d]{3}/;
				message = "Die Eingabe ist kein Sicherheitscode!";
				break;	
			case 13:
				reg = /[\d]*/;
				message = "Die Eingabe ist keine gültige Zahl!";
				break;				
																	
		}
		if (validateTerm(obj.value, reg, type)) {
			displayErrorMessage(errorfield);
			resetField(obj);
			return false;	
		}
		else {
			/* additionally validate username in backend */
			if (type == 3) {
				sendUserValidationRequest(obj.value);
				removeErrorMessage(errorfield);
				return true;
			}
			/* additionally validate mailaddress in backend */
			if (type == 4) {
				sendEmailValidationRequest(obj);
				removeErrorMessage(errorfield);
				return true;		
			}
			return true;
		}
	}
}

function validateTerm(str, reg, type) {
	switch (type) {
		case 1:
		case 2:
		/*	if (str.size == undefined) {
				return false;	
			} */
		case 3:
		case 9:
			if (!reg.test(str)) 
	    		return false;
			else
				return true;
		case 4:
		case 5:
		case 6:
		case 7:
		case 8:
		case 10:
		case 11:
		case 12:
		case 13:
			if (reg.test(str)) 
	    		return false;
			else 
				return true;
	}				
}

function removeErrorMessage(nodeId) {
	var error_node = $(nodeId);
	if (error_node)
		if (error_node.hasChildNodes()) 
			error_node.firstChild.nodeValue = "";
}

function displayErrorMessage(nodeId) {
	var error_node = $(nodeId);
	if (error_node) {
		error_node.parentNode.style.display = "block";
		if (error_node.hasChildNodes()) {
			error_node.firstChild.nodeValue = "";
			error_node.firstChild.nodeValue = message;
		}
		else {
			var node = createTextNode(message);
			error_node.appendChild(node);
		}
	}
}

function resetField(element) {
	if (element)
		element.value = "";
}

function validateSalutation(obj,errorfield) {
	if (obj.options[obj.selectedIndex].value == "") {
		message = "Bitte die Anredeform auswählen! ";
		displayErrorMessage(errorfield);
		resetField(obj);
		return false;
	}
	return true;
}

/* Validation of shopping lists */
function validateShoppingList() {
	if (!validate($("shoppingListTitle"),1,"true","listTitleError"))
		return false;
	if (!validate($("shoppingListDescription"),2,"true","listDescriptionError"))
		return false;
	return true;
}
