function validate(el)
{
	var val = '';
	var tester = false;
	var error = '';
	var items = getElementsByTagNames('input,select,textarea', el);
	var m_length = /\(([^\)]+)\)$/;
	var m_clean = /[^a-z]+/i;
	var fixed_length = '';
	var how = null;
	
	for(var i = 0; i < items.length; i++)
	{
		if(!items[i].getAttribute("validate"))
			continue;
			
		fixed_length = false;	
		var tmp = items[i].getAttribute('validate');
		how = tmp.replace(m_clean, '');
		fixed_length = m_length.exec(tmp);
		if(fixed_length)
			fixed_length = fixed_length[1];
		else
			fixed_length = false;
		
		if(vObj[how])
		{
			if(items[i].type == 'text' || items[i].type == 'hidden')
				val = items[i].value;
			else if(items[i].type == 'select-one')
			{
				val = items[i].selectedIndex;
				fixed_length = items[i][items[i].selectedIndex].value;
			}
			else if(items[i].type == 'checkbox')
				val = items[i].checked;
			else if(items[i].type == 'radio')
				val = getRadioVal(items[i].name);
			else if(items[i].type == 'textarea')
				val = items[i].value;
			else
				continue;
					
			tester = eval(vObj[how] + "(val, '" + fixed_length + "')");
			if(!tester)
				{
					error += eval("errors." + items[i].getAttribute("errormsg")) + "\n";
					items[i].style.backgroundColor = '#FF968A';	
				}
				else
					items[i].style.backgroundColor = '#fff';	
		}
	}

	if(!error)
	{
		if(document.getElementById('f5'))
			document.getElementById('f5').disabled = false;
		return true;
	}
	alert(error);
	return false;
}


function getRadioVal(name)
{
	if(!document.getElementsByName(name))
		return false;
	var el = document.getElementsByName(name);
	
	for(var i = 0; i < el.length; i++)
	{
		if(el[i].checked)
			return true;
	}
	return false;
}


function getRadioValue(name)
{
	if(!document.getElementsByName(name))
		return '';
	var el = document.getElementsByName(name);
	
	for(var i = 0; i < el.length; i++)
	{
		if(el[i].checked)
			return el[i].value;
	}
	return '';
}



function sumCheckBoxes(box_names, save_to_input)
{
	sum = 0;
	for(var i = 0; i < box_names.length; i++)
	{
		if(!document.getElementById(box_names[i]))
			continue;
		sum += document.getElementById(box_names[i]).checked ? 1 : 0;
	}
	
	if(save_to_input)
	{
		document.getElementById(save_to_input).value = sum;
		return true;
	}
	
	return sum;
}


function moveBooks(box_names, move_to)
{
	move_index = 0;
	
	for(var i = 0; i < box_names.length; i++)
	{
		if(!document.getElementById(box_names[i]) || !move_to[move_index])
			continue;
		if(document.getElementById(box_names[i]).checked)
		{
			document.getElementById(move_to[move_index]).value = document.getElementById(box_names[i]).value;
			move_index++;
		}
	}
	return true;
}


function moveBirth(name)
{
	if(!document.getElementById(name))
		return true;

	var last = "";
	
	if(document.getElementById('p4'))
	{
		var last4 = document.getElementById('p4');
		last = last4.value;	
	}
	
	var yObj = document.getElementById('p1');
	var mObj = document.getElementById('p2');
	var dObj = document.getElementById('p3');
	
	
	var y = yObj[yObj.selectedIndex].value;
	var m = mObj[mObj.selectedIndex].value;
	var d = dObj[dObj.selectedIndex].value;
	
	
	document.getElementById(name).value = y+m+d+last;
	return true;
}

function moveBirth_special(name,p1,p2,p3,p4)
{
	if(!document.getElementById(name))
		return true;

	var last = "";
	
	if(document.getElementById(p4))
	{
		var last4 = document.getElementById(p4);
		last = last4.value;	
	}
	
	var yObj = document.getElementById(p1);
	var mObj = document.getElementById(p2);
	var dObj = document.getElementById(p3);
	
	
	var y = yObj[yObj.selectedIndex].value;
	var m = mObj[mObj.selectedIndex].value;
	var d = dObj[dObj.selectedIndex].value;
	
	
	document.getElementById(name).value = y+m+d+last;
	return true;
}



function getElementsByTagNames(list,obj) 
{
	var tagNames = list.split(',');
	var resultArray = new Array();
	for (var i=0;i<tagNames.length;i++) 
	{
		var tags = obj.getElementsByTagName(tagNames[i]);
		for (var j=0;j<tags.length;j++) 
		{
			resultArray.push(tags[j]);
		}
	}
	var testNode = resultArray[0];
	if (!testNode) return [];
	if (testNode.sourceIndex) 
	{
		resultArray.sort(function (a,b) 
		{
				return a.sourceIndex - b.sourceIndex;
		});
	}
	else if (testNode.compareDocumentPosition) 
	{
		resultArray.sort(function (a,b) 
		{
				return 3 - (a.compareDocumentPosition(b) & 6);
		});
	}
	return resultArray;
}

function CopyBirthTo(name)
{
	var yObj = document.getElementById('p1');
	var mObj = document.getElementById('p2');
	var dObj = document.getElementById('p3');
	
	
	var p1 = yObj[yObj.selectedIndex].value;
	var p2 = mObj[mObj.selectedIndex].value;
	var p3 = dObj[dObj.selectedIndex].value;
	
	
	document.getElementById(name).value = p1+p2+p3;	
}
