var forForms=new Array();
var formsDebug = false;
var initf = function()
{
	var forms = document.getElementsByTagName('form');
	$A(forms).each(function(form)
	{ 
		switch(form.id)//-----For specific forms
		{
			case 'blog.edit':
			case 'blog.add':
				forForms[form.id] = new Validation(form.id,{stopOnFirst:false, immediate : false, focusOnError : false, onFormValidate: submitForm});
			break;
			default: break;
		}
		
		if (!forForms[form.id] && Element.hasClassName(form, 'validate'))
		{
			forForms[form.id] = new Validation(form.id,{stopOnFirst:false, immediate : false, onFormValidate: submitForm});
		}
			
		if (forForms[form.id] && formsDebug)
		{
			prepareForm(form);
			onPreSubmit(form, true);
		}
			
		//Event.observe(form, 'reset', resetForm.bindAsEventListener(form, form));
	});

	Validation.add('one-required', 'Please select one of the above', function(v, element)
		{
			elements=Form.getInputs(element.form , '', element.name);
			for (i=0; i<elements.length; i++)
				if (elements[i].checked)
					return true;
			return false;
     	});
     	
	Validation.add('not-null', 'Please select something', {
     isNot : '0'
});

	Validation.add('validate-year', 'Invalid year', {
     minLength : 4, // value must be at least 6 characters
     maxLength : 4, // value must be no longer than 13 characters
     include : ['validate-numeric']
});

	Validation.add('validate-date', 'Неверный формат даты. Пожалуйста используте формат: ГГ-MM-ДД', function(v, element) {
					if(!Validation.get('IsEmpty').test(v)) {
						var upper = 31;
						if(/^(\d{4})\-(\d{2})\-(\d{2})$/.test(v)) { // mmddyy /^(\d{4})\/(\d{2})\/(\d{2})$/ <-- original regexp w/ slashes
							if(RegExp.$2 == '02') upper = 29;
							if((RegExp.$2 <= 12) && (RegExp.$3 <= upper)) {
								return true;
							} else {
								return false;
							}
						} else {
							return false;
						}
					} else {
						return true;
					}
				});
				
	Validation.add('validate-futuredate', 'You cannot choose date already past', function(v, element) {
					if(!Validation.get('IsEmpty').test(v)) 
					{
						var myDate=new Date();
						myDate.setFullYear(element.value,element.form.month.value-1,element.form.day.value);
						return (myDate.getTime()>=Now().getTime());
					}
					else return true;
				});			
	Validation.add('check-age', 'Invalid age', function(v, element) {
					if(!Validation.get('IsEmpty').test(v)) 
					{
						var d=new Date();
						d.setFullYear(element.value,element.form.month.value-1,element.form.day.value);
						age=d.getAge()
						return (age>=18);
					}
					else return true;
				});			
	//Validation.add('passconfirm', 'Подтверждение неверно', {equalToField : 'password'});
	Validation.add('unique-field', 'Значение уже существует', function(value, element) {
					frm = element.form;
					if(element.getValue())
					{
						res = getRequest({'form': frm.id, 'vals': Form.serialize(frm), 'check': 1, 'element_name': element.name},frm.getAttribute('formsfile'));
						return !res.exist;
					}
					else return true;
				});
				
	Validation.add('wordlength-validate', 'Word length limit', function(v, element)
		{
			var cur_word='';
			var max_len=element.getAttribute('maxwordlength');
			for (var i=0; i<v.length; i++)
				if (v.charAt(i)!=' ')
					cur_word+=v.charAt(i);
				else 
				{
					if (cur_word.length>max_len) return false;
					cur_word='';
				}
			if (cur_word.length>max_len) return false;
			return true;
     	});
}
				
addOnLoad(initf);
function prepareForm(form){
	if(Prototype.Browser.IE)
		var h = document.createElement('<input name="__validation">');
	else
		var h = document.createElement('input');
	h.setAttribute('name', "__validation");	
	if(!formsDebug)
		h.setAttribute('type', 'hidden');
		else 	h.setAttribute('type', 'text');

	form.appendChild(h);
	if(Prototype.Browser.IE)
		var h = document.createElement('<input name="__formid">');
	else
		var h = document.createElement('input');
	h.setAttribute('name', "__formid");
	h.setAttribute('type', 'hidden');
	h.setAttribute('value', form.attributes['id'].value);

	form.appendChild(h);
}

function onPreSubmit( e, noEvent ){
	if(noEvent)
		var form = e;
	else
		var form = Event.element( e );
	var data = {};
	data['formid'] = form.attributes['id'].value;
	data['elements'] = getFormValidationData( form );
	form.elements['__validation'].value = $H(data).toJSON();
	return true;
}

function getFormValidationData(form){
	var result = new Array();
	var elems = form.getElements();
	var index = 0;
	for(var i = 0; i < elems.length; i++)
	{
		if (elems[i].name) {
			result[ index = result.size()] = {};

			result[index]['name'] = elems[i].name;

			if(elems[i].attributes['class'])
				result[index]['class'] = elems[i].attributes['class'].value;
		}
	}
	return result;
}
function goBack(form)
{
	getRequest({'form': form.id, 'returned':1});
	document.location.href=document.location.href;
}

function getRequest(params, formsphp_file)
{
	if (typeof(formsphp_file)=='undefined' || !formsphp_file && typeof(forms_file)!='undefined')
	{
		if (forms_file==1) formsphp_file='/forms.php';
		else if (forms_file==2) formsphp_file='/forms.users.php';
	}
	if (!formsphp_file) formsphp_file='/forms.php';
	var req = new Subsys_JsHttpRequest_Js();
	req.caching = false;
	req.open('POST', formsphp_file, false);
	req.send(params);
	if(req.responseText)
	{
		alert(req.responseText);
	}

	return req.responseJS;
}


function fillForm(form, data)
{
	$A(Form.getElements(form)).each(function(el)
	{
		if(typeof(data[el.name]) != 'undefined')
		SetElementValue(el, data[el.name]);
	});
}

function SetElementValue(el, newVal)
{
	switch(el.type)
	{
		case 'text':
		case 'select-one':
		case 'select-multiple':
		case 'password':
		case 'hidden':
		case 'button':
		case 'submit':
		if(new String(newVal) != 'null' && newVal!==false)
			el.value = newVal;
		else el.value = '';
		break;

		case 'radio':
		if ( (el.value==parseInt(newVal)) || el.value==newVal)
			el.checked = true;
		break;
		
		case 'checkbox':
		if (typeof(newVal)!='undefined' && newVal)
		{
			if (typeof(newVal.isarray)=='undefined')	{
				if(newVal=='on' || parseInt(newVal))
					el.checked = true;
			}
			else {
				if ($A(newVal).indexOf(el.value)!=-1)
					el.checked=true;
			}	
		}
		break;
		default:

		if(newVal && el.tagName == 'TEXTAREA')
		el.value = newVal;
		break;
	}
}

function submitForm(result, frm)
{
	if(result)
	{
		getRequest({'form': frm.id, 'vals': Form.serialize(frm)},frm.getAttribute('formsfile'));	
		document.location.href = document.location.href;
	}
}
	
function resetForm(ev, form)
{
	fillForm(form,{'Submit': 'Add'});
	forForms[form.id].reset();

	$A(Form.getElements(form)).each(function(el)
	{
		if(el.type == 'hidden')
			el.value = '';
	});
}

Date.prototype.getAge = function()
{
	var d=Now();
	age=d.getFullYear()-this.getFullYear();
	if (d.getMonth()<this.getMonth() || (d.getMonth()==this.getMonth() && d.getDate()<this.getDate()) )
		age--;
	return age;
}