function checkExt(value, exts)
{
    if(value=="")return true;
    var re = new RegExp("^.+\.("+exts+")$","i");
    if(!re.test(value))
    {
        return false;
    }
    return true;
}

function elementName(name)
{
	if(document.getElementById('n_' + name))
	{
		return document.getElementById('n_' + name).value;
	}
	else
	{
		return name.substr(0,1).toUpperCase()+name.substr(1);
	}
}

function conditionalValidation(element)
{
	var conditionalField = document.getElementById(document.getElementById('c_' + element).value);
	var conditionalValue = document.getElementById('e_' + element).value;

	switch(conditionalField.type) 
	{ 
        case "text":
		if(conditionalField.value==conditionalValue)
		{
			return true;
		}
		break;

        case "file":
		if(conditionalField.value==conditionalValue)
		{
			return true;
		}
		break;
		
		case "radio":
		if(conditionalField.checked==true)
		{
			return true;
		}
		break;
		
		case "checkbox":
		if(conditionalField.checked==true && conditionalValue=="true")
		{
			return true;
		}
		if(conditionalField.checked==false && conditionalValue=="false")
		{
			return true;
		}
		break;

		case "select-one":
		if(conditionalField.value==conditionalValue)
		{
			return true;
		}
		break;
		
		case "select-multiple":
		for(var i = 0; i < element.options.length; i++)
		{
			if(element.options[i].selected && element.options[i].value==conditionalValue)
			{
				return true;
			}
		}
		break;
	}
}

function regularExpresionType(type, request)
{
	if(type=="text")
	{
		var regex = "[^ \sa-zA-Z]";
		var msg = 'You may only use letters';
	}
	else if(type=="number")
	{
		var regex = "[^ \s0-9]";
		var msg = 'You may only use numbers';
	}
	else if(type=="price")
	{
		var regex = "[^ \s0-9.]";
		var msg = 'You must enter a valid price';
	}
	else if(type=="email")
	{
		var regex = "^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$";
		var msg = 'You must enter a valid email address';
	}
	else if(type=="url")
	{
		var regex = "^(http[s]?://|ftp://)?(www\.)?[a-zA-Z0-9-\.]+\.[a-zA-Z\.]+[a-zA-Z0-9\./_-]?$";
		var msg = 'You must enter a valid URL';
	}
	else if(type=="fulltext")
	{
		var regex = "[^ \sa-zA-Z0-9]";
		var msg = 'You may only use letters and numbers';
	}
	else if(type=="anytext")
	{
		var regex = "[^ \sa-zA-Z0-9-\"',.&%()_;:]";
		var msg = 'You may only use letters, numbers and the following characters -"\',.&%()_;:';
	}
	
	if(request=="reg")
	{
		return new RegExp(regex);
	}
	else
	{
		return msg;
	}
}

function validate(fobj) 
{
	var out = "";
	var ok = true;
	var radio_name_array = new Array();
	var errorCounter = 0;
	
	for(var i = 0;i < fobj.elements.length;i++) 
	{
		var validate = false;
		var show = false;
		if(document.getElementById('v_' + fobj.elements[i].name))
		{
			if(document.getElementById('c_' + fobj.elements[i].name))
			{
				if(conditionalValidation(fobj.elements[i].name))
				{
					validate = true;
				}
			}
			else
			{
				validate = true;
			}
		}
		
		if(document.getElementById('r_' + fobj.elements[i].name) && fobj.elements[i].value=="")
		{
			validate = false;
		}
		
		if(validate)
		{
			if(document.getElementById('m_' + fobj.elements[i].name))
			{
				var cxt = document.getElementById('m_' + fobj.elements[i].name).value;
				var ext = document.getElementById(cxt).value;
				if(fobj.elements[i].value!=ext)
				{
					ok = false;
					out += '<li>' + elementName(fobj.elements[i].name) + ' - the ' + elementName(fobj.elements[i].name) + '\'s do not match</li>';
					errorCounter++;
				}
			}
			
			var type = document.getElementById('v_' + fobj.elements[i].name).value;
			var regex = regularExpresionType(type, 'reg');
			var msg = regularExpresionType(type, 'msg');
			
			switch(fobj.elements[i].type) 
			{
           		case "text":
				if(fobj.elements[i].value=="")
				{
					var msg = 'The field is not optional';
					var show = true;
				}
				else
				{
					if(fobj.elements[i].value.match(regex))
					{
						if(type!="email")
						{
							var show = true;
						}
					}
					else
					{
						if(type=="email")
						{
							var show = true;
						}
						if(type=="number" || type=="price")
						{
							if(fobj.elements[i].value==0)
							{
								var msg = 'You must enter an amount greater than 0';
								var show = true;
							}
						}
					}
				}
				if(show)
				{
					ok = false;
					out += '<li>' + elementName(fobj.elements[i].name) + ' - ' + msg + '</li>';
					errorCounter++;
				}
				break;

				case "password": 
				if(fobj.elements[i].value=='')
				{
					ok = false;
					out += '<li>' + elementName(fobj.elements[i].name) + ' - the field is not optional</li>';
					errorCounter++;
				}
				break;
				
				case "file": 
				if(fobj.elements[i].value=='')
				{
					ok = false;
					out += '<li>' + elementName(fobj.elements[i].name) + ' - the field is not optional</li>';
					errorCounter++;
				}
				if(!checkExt(fobj.elements[i].value, type))
				{ 
					ok = false;
					out += '<li>' + elementName(fobj.elements[i].name) + ' - please use a valid file extension: ' + type.replace('|', ', ') + '</li>';
					errorCounter++;
				}
				break;

				case "textarea": 
				if(fobj.elements[i].value=="")
				{
					ok = false;
					out += '<li>' + elementName(fobj.elements[i].name) + ' - You must enter something</li>';
					errorCounter++;
				}
				break;

				case "checkbox":
				if(fobj.elements[i].checked!=true)
				{
					ok = false;
					out += '<li>' + elementName(fobj.elements[i].name) + ' - You must tick this box</li>';
					errorCounter++;
				}
				break;
				
				case "radio": 
				var add = 0;
				for(var j = 0; j < radio_name_array.length; j++)
				{
					if(radio_name_array[j]==fobj.elements[i].name)
					{
						add = 1;
					}
				}

				if(add==0)
				{
					radio_name_array.push(fobj.elements[i].name);
				}
				break;

				case "select-one":
				if(fobj.elements[i].value=='Please Select' || fobj.elements[i].value=='-')
				{
					ok = false;
					out += '<li>' + elementName(fobj.elements[i].name) + ' - You must select a option</li>';
					errorCounter++;
				}
				break;
				
				case "select-multiple":
				var selected = null;
				for(var j = 0; j < fobj.elements[i].options.length; j++)
				{
					if(fobj.elements[i].options[j].selected)
					{
						selected = true;
					}
				}
				if(!selected)
				{
					ok = false;
					out += '<li>' + elementName(fobj.elements[i].name) + ' - You must select at least one option</li>';
					errorCounter++;
				}
			}
		}
	}
	for(var i = 0;i < radio_name_array.length;i++) 
	{
		var radioCheck = false;
		for(var j = 0;j < fobj.elements.length;j++) 
		{
			if(fobj.elements[j].name==radio_name_array[i] && fobj.elements[j].checked==true)
			{
				radioCheck = true;
			}
		}

		if(!radioCheck)
		{
			ok = false;
			out += '<li>' + elementName(radio_name_array[i]) + ' - You must choose an option</li>';
			errorCounter++;
		}
	}
	
	if(ok==true)
	{
		DMOpBox.messageBox('', '', 0);
		return true;
	}
	else
	{
		DMOpBox.messageBox('The following fields require corrections:<br><ul>' + out + '</ul>', 'error', errorCounter + 3);
		return false;
	}
}

function disableField(field, clear)
{
	var target = document.getElementById(field);
	target.disabled = true;
	
	if(clear)
	{
		target.value = '';
	}
}

function enableField(field)
{ 
	var target = document.getElementById(field);
	target.disabled = false;
}