function print_claim(URL)
{
	claim = window.open(URL, "claim","resizable=yes,toolbar=1,location=0,directories=0,status=0,menubar=0,scrollbars=1,copyhistory=0,width=620,height=550");
	claim.location = URL;
}

function open_report(unique, URL)
{
	report = window.open(URL, unique,"resizable=yes,toolbar=1,location=0,directories=0,status=0,menubar=0,scrollbars=1,copyhistory=0,width=620,height=550");
	report.location = URL;
}

function messageSelect(field, message)
{
	alert(message);
	field.focus();
	field.select();
	
	return false;
}

function isLeapYear(year)
{
	// if not divisible by 4 definitely not
    if(year % 4 != 0) return false;	
	// year divisible by 4, but not 100
    if(year % 100 != 0) return true;
	// year divisible by 100 but not 400
	if(year % 400 != 0) return false;
	// divisible by 400 then leap
	else return true;
}

function getDigits(data)
{
	var raw="";
	for (var i=0; i < data.length; i++)
	{
		var oneChar = data.charAt(i);
		
		if (oneChar >= '0' && oneChar <= '9')  raw+=oneChar;
    }
    return raw;
}

function formatDate(field)
{
	if (checkDate(field))
	{
		var raw = getDigits(field.value);
    	field.value = raw.substring(0,2)+'-'+raw.substring(2,4)+'-'+raw.substring(4,8);
    }
}

function validDate(field)
{
	if (!isEmpty(field.value))
	{
		if (!checkDate(field))
		{
	    	messageSelect(field, 'Invalid date');
	    	return false;		
		}
		else return true;
	}
	return true;
}

function checkDate(field)
{
	var days = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

	var raw = getDigits(field.value);
	   
    if (raw.length != 8) return false
 	
	var month=raw.substring(0,2);
	var day=raw.substring(2,4);
	var year=raw.substring(4,8);
	
	if (month < 1 || month > 12) return false
    if (year < 1900 || year > 2100) return false
    
    if (isLeapYear(year)) days[1] = 29;
    
    if (day < 1 || day > days[month-1]) return false

    return true;
}

function fillCurrentDate(field)
{
	today = new Date()
	month = today.getMonth()+1;
	day   = today.getDate();
	
	if (month<10) month = ("0" + month);
	if (day<10) day = ("0" + day);
	
	field.value=month+"-"+day+"-"+today.getFullYear();
}

function validCredit(field)
{
	var raw = getDigits(field.value);

	if (raw.length < 13 || raw.length > 16)
	{
    	messageSelect(field, 'Invalid credit card number');
    	return false;
    }
    
    var type="";
    if      (raw.substring(0,2) == "34") type="AMERICAN EXPRESS";
    else if (raw.substring(0,2) == "37") type="AMERICAN EXPRESS";
    else if (raw.substring(0,1) == "4")  type="VISA";
    else if (raw.substring(0,2) == "51") type="MASTER CARD";
    else if (raw.substring(0,2) == "52") type="MASTER CARD";
    else if (raw.substring(0,2) == "53") type="MASTER CARD";
    else if (raw.substring(0,2) == "54") type="MASTER CARD";
    else if (raw.substring(0,2) == "55") type="MASTER CARD";
    else if (raw.substring(0,4) == "6011") type="DISCOVER";
    
    if (type == "") return false;
    {
    	messageSelect(field, 'Invalid credit card number');
    	return false;
    }

	var count=0;
	var digits=new Array();
	for (var i=raw.length-2; i >= 0; i-=2)
	{
		digits[count]=raw.charAt(i)*2;
		count++;		
	}
	
	var check=0;
	for (var i=raw.length-1; i >= 0; i-=2)
	{
		check+=eval(raw.charAt(i));
	}
	
	for (var i=0; i < digits.length; i++)
	{
		for (var c=0; c < digits[i].toString().length; c++)
		{
			check+=eval(digits[i].toString().charAt(c));
		}
	}
	
	if (check % 10 != 0)
	{
    	messageSelect(field, 'Invalid credit card number');
    	return false;
    }
    
    return true;
}

function validYear(field)
{
	if (!isEmpty(field.value))
	{
		year=getDigits(field.value);
		
		this_year = new Date().getFullYear();
		this_year += 1;
		
		if (year.length != 4 || year < 1950 || year > this_year)
		{
	    	messageSelect(field, 'Invalid year');
	    	return false;		
		}
		
		// make sure all non digits are removed
		field.value=year;
	}
	
	return true;
}

function formatPhone(field)
{
	if (checkPhone(field))
	{
		var raw = getDigits(field.value);
		field.value='('+raw.substring(0,3)+') '+raw.substring(3,6)+'-'+raw.substring(6,10);
	}
}

function validPhone(field)
{
	if (!checkPhone(field))
	{
		messageSelect(field, 'Invalid phone number');
		return false;
    }
    else return true;
}

function checkPhone(field)
{
	var raw = getDigits(field.value);

	if (raw.length != 10) return false;
    else return true;
}

function validPassword(field, form)
{
	if (field.value != eval('form.'+field.match+'.value'))
	{
    	messageSelect(field, 'Passwords do not match');
    	return false;
    }
    return true;
}

function validObdii(field)
{
	var test = field.value.toUpperCase();
	var prefix = test.substring(0,1);
	var digits = getDigits(test.substring(1,5));
	
	if (prefix!='C' && prefix!='B' && prefix!='U' && prefix!='P' )
	{
		messageSelect(field, 'DTC must begin with B, C, P, or U');
		return false;		
	}
	
	if (digits.length != 4)
	{
		messageSelect(field, 'DTC must be in the format Xnnnn');
		return false;
    }
    
    else return true;
}

function requireField_i(item,strAlert)
{
	alert(strAlert);
	item.focus();
	item.select();
}

function isEmpty(inputStr)
{
	if (inputStr == "" || inputStr == null) { return true }
	return false
}

function isValid(form, required_group)
{
	for (var i=0; i < form.elements.length; i++)
	{
		if (form.elements[i].required)
		{
			if (!required_group || form.elements[i].required==required_group)
			{
					
				if (form.elements[i].match)
				{
					if (!isEmpty(eval('form.'+form.elements[i].match+'.value')) && isEmpty(form.elements[i].value))
					{
						requireField_i(form.elements[i], "Required Field."); 
						return false; 
					}
				}
				else
				{					
					// force single select option boxes to be selected.
					// 0 element must be the default non selected item
					if (form.elements[i].type=="select-one")
					{
						if (form.elements[i].selectedIndex==0)
						{
							alert("Required Field.");
							form.elements[i].focus();
							return false; 						
						}						
					}
					else if (form.elements[i].type=="hidden")
					{
						if (isEmpty(form.elements[i].value))
						{
							if (form.elements[i].prompt)
							{
								alert (form.elements[i].prompt);
								return false;
							}
							else 
							{
								alert("Required Field.");
								return false;
							}
						}
					}
					else if (isEmpty(form.elements[i].value))
					{
						requireField_i(form.elements[i], "Required Field."); 
						return false; 
					}				
				}
			}
		}
		
		if (form.elements[i].validate)
		{
			if (form.elements[i].validate == "date") if (!validDate(form.elements[i])) return false;
			if (form.elements[i].validate == "year") if (!validYear(form.elements[i])) return false;
			if (form.elements[i].validate == "phone") if (!validPhone(form.elements[i])) return false;
			if (form.elements[i].validate == "credit") if (!validCredit(form.elements[i])) return false;
			if (form.elements[i].validate == "password") if (!validPassword(form.elements[i], form)) return false;
			if (form.elements[i].validate == "OBDII") if (!validObdii(form.elements[i], form)) return false;
		}
	}
	return true;
}
  
function sendForm (message, required_group)
{
	for (var i=0; i < document.forms.length; ++i)
	{		
		if (!isValid(document.forms[i], required_group))
		{
			return false;
		}
	}

	if (message)
	{
		if (confirm (message)) return true;
		else return false;
	}
	
	else return true;
}

