/**
 * @author quickest
 */

Validation.addAllThese([
	['validate-comment-nick', TranslatorValidate.translate('login'), {
		maxLength : 50
	}],
	['validate-comment-email', TranslatorValidate.translate('login'), {
		maxLength : 100
	}],
	['validate-comment-comment', TranslatorValidate.translate('login'), {
		maxLength : 1000
	}],
	['validate-login', TranslatorValidate.translate('login'), {
		maxLength : 30,
		notOneOf : ['admin','administrator']
	}],
	['validate-password', TranslatorValidate.translate('password'), {
		minLength : 6,
		notEqualToField : 'user:login'
	}],
	['validate-password-confirmation', TranslatorValidate.translate('passwordConfirmation'), {
		equalToField : 'user:password'
	}],
	['validate-password-billing', TranslatorValidate.translate('password'), {
		minLength : 6,
		notEqualToField : 'billing:login'
	}],
	['validate-password-changepassword', TranslatorValidate.translate('passwordChange'), {
		minLength : 6
	}],
	['validate-password-confirmation-billing', TranslatorValidate.translate('passwordConfirmation'), {
		equalToField : 'billing:password'
	}],
	['validate-company', TranslatorValidate.translate('company'), {
		minLength : 2,
		maxLength : 150
	}],
	['validate-nip', TranslatorValidate.translate('nip'), function(v) {
		
		if(Validation.get('IsEmpty').test(v))
			return false;
		
		var aNip = [];
		
		for(var i = 0; i < v.length; i++) {
			
			if(v.charAt(i) != '-' && isNaN(v.charAt(i)))
				return false;
			
			if(v.charAt(i) != '-')
				aNip.push(parseInt(v.charAt(i)));
		}
		
		if (aNip.length != 10)
			return false;
		
		var aSteps = [6, 5, 7, 2, 3, 4, 5, 6, 7];
		var iSum = new Number(0);

		for (i = 0; i < 9; i++) {
			iSum += aSteps[i] * aNip[i];
		}
		
		// Wrong nip: 000-000-00-00
		if(iSum == 0)
			return false;
		
		var iResult = iSum % 11;

		var iControlNr = (iResult == 10) ? 0 : iResult;
		
		return iControlNr == aNip[9];
	}],
	['validate-telephone', TranslatorValidate.translate('telephone'), function(v) {
		return Validation.get('IsEmpty').test(v) || /^[0-9( +]?[0-9() -]{6,}$/.test(v)
	}],
	['validate-fax', TranslatorValidate.translate('fax'), function(v) {
		return Validation.get('IsEmpty').test(v) || /^[0-9( +]?[0-9() -]{6,}$/.test(v)
	}],
	['validate-first-name', TranslatorValidate.translate('firstName'), {
		minLength : 1,
		maxLength : 40
	}],
	['validate-last-name', TranslatorValidate.translate('lastName'), {
		minLength : 1,
		maxLength : 50
	}],
	['validate-street-address', TranslatorValidate.translate('streetAddress'), {
		minLength : 5,
		maxLength : 50
	}],
	['validate-postcode', TranslatorValidate.translate('postCode'), function(v) {
		return Validation.get('IsEmpty').test(v) || /^\d{2}[-]{1}\d{3}$/.test(v)
	}],
	['validate-city', TranslatorValidate.translate('city'), {
		minLength : 2,
		maxLength : 50
	}]
]);

/**
 * Show or hide Address shipping
 */
var aInputsClasses = [];
var aSelectsClasses = [];
var bReadedClassNames = false;

function setUseForShipping(bChecked, oAddressShippingBox, oValidator) {
	
	oAddressShippingBox = $(oAddressShippingBox);
	
	var oInputs = oAddressShippingBox.getElementsByTagName("input");
	var oSelects = oAddressShippingBox.getElementsByTagName("select");
	
	if(bChecked)
		new Effect.BlindDown(oAddressShippingBox, {duration : 1 });
	else {
		new Effect.BlindUp(oAddressShippingBox, {duration : 1 });	
		
		/**
		 * Hide all advices
		 */
		aAdvices = oAddressShippingBox.getElementsByClassName('validation-advice');
		
		for(var i = 0; i < aAdvices.length; i++)
			aAdvices[i].hide();

		/**
		 * Set default class name to inputs and selects
		 */
		for(var i = 0; i < oInputs.length; i++)
			reset(oInputs[i]);
		
		for(var i = 0; i < oSelects.length; i++)
			reset(oSelects[i]);
	}
}

/**
 * Reset class names properties in element
 */
function reset(element) {
	element = $(element);
	var cn = element.classNames();
	cn.each(function(value) {
		var prop = '__advice'+value.camelize();
		if(element[prop]) {
			element[prop] = '';
		}
		element.removeClassName('validation-failed');
		element.removeClassName('validation-passed');
	});
}

function setUseForNewsletter(bChecked, sNewsletterBox, oValidator) {
	
	oNewsletterBox = $(sNewsletterBox);
	
	var oInputs = oNewsletterBox.getElementsByTagName("input");
	var oSelects = oNewsletterBox.getElementsByTagName("select");
	
	if(bChecked)
		new Effect.BlindDown(oNewsletterBox, {duration : 1 });
	else {
		new Effect.BlindUp(oNewsletterBox, {duration : 1 });
		
		/**
		 * Hide all advices
		 */
		aAdvices = oNewsletterBox.getElementsByClassName('validation-advice');
		
		for(var i = 0; i < aAdvices.length; i++)
			aAdvices[i].hide();

		/**
		 * Set default class name to inputs and selects
		 */
		for(var i = 0; i < oInputs.length; i++)
			reset(oInputs[i]);
		
		for(var i = 0; i < oSelects.length; i++)
			reset(oSelects[i]);
	}
}
