var forForms=new Array();
var initf = function()
{
	var forms = document.getElementsByTagName('form');
	$A(forms).each(function(form)
	{ 
		switch(form.id)//-----For specific forms
		{
			case 'blogs.add':
			case 'materials.add':
			case 'things.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});
		//Event.observe(form, 'reset', resetForm.bindAsEventListener(form, form));
	});

	/*Validation.add('validate-date', 'Please use this date format: yyyy-mm-dd. For example 2006-03-17 for March 17, 2006.', function(v, element) {
					if(!Validation.get('IsEmpty').test(v)) 
						return Date. 
					else return true;
					}
				});*/
	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('check-date', 'Invalid date', function(v, element) {
					if(!Validation.get('IsEmpty').test(v)) 
					{
						var myDate=new Date();
						myDate.setFullYear(element.value,element.form.month.value-1,1);
						return (myDate.getDaysInMonth()>=element.form.day.value)
					}
					else return true;
				});	
	Validation.add('validate-date', 'Please use this date format: yyyy-mm-dd. For example 2006-03-17 for March 17, 2006.', 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});
						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 goBack(form)
{
	getRequest({'form': form.id, 'returned':1});
	document.location.href=document.location.href;
}




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')
		el.value = newVal;
		else el.value = '';
		break;

		case 'radio':
		if(el.value==parseInt(newVal))
			el.checked = true;
		break;
		
		case 'checkbox':
		//alert(newVal.length);exit;
		if (typeof(newVal)!='undefined' && newVal)
		{
			if (typeof(newVal.length)=='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 editForm(id, formid)
{
	var vals = $H({'getData':1, 'form': formid, 'id': id}).toQueryString();
	var data = getRequest({'form': 'getData',
				'vals': vals });
	data.row['Submit'] = 'Save';
	fillForm($(formid), data.row);
}

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;
}


function isCheckboxArray(form, name)
{
	if (form[name].length>1)
		return true;
	else return false;
}

function duplicateCheckBoxes(form)
{
	checkboxes=Form.getInputs(form, 'checkbox');
	checkboxes.each(function(node)
		{
			if (!isCheckboxArray(form, node.name) )
			{
				newel=document.createElement('INPUT');
				newel.type='hidden';
				newel.name=node.name;
				
				if (node.checked)
					if (!node.value!='on') newel.value=1;
					else newel.value=node.value;
				else 				newel.value=0;
				form.appendChild(newel);		
			}
		});
}

