?><html>
<head>
<meta name="description" content="Software.Xornic.com - Free contact us script">
<meta name="keywords" content="contact us,contact us script,free script">
<meta name="revisit" content="10 days">
<meta name="revisit-after" content="10 days">
<meta name="rating" content="All">  
<meta name="robots" content="All">
<meta name="audience" content="All">
<meta name="document-distribution" content="Global">
<meta name="distribution" content="Global">
<meta name="rating" content="General">
<meta name="document-rating" content="General">
	<title>Contact us</title>
<?php
include("config.php");
include("image_encoder.php");
?>

<?PHP
if($ext_css!="")
{
	echo "<link rel=\"stylesheet\" href=\"$ext_css\">";
}
else
{
	?>
<style type="text/css">
input,textarea,td,tr,body,select{
font-family:<?php echo $font_face_form ?>;
font-size:<?php echo $font_size_form ?>;
color:<?php echo $font_color_form ?>;
}
</style>
	<?
}
?>

<style type="text/css">
.copy{font-family: Arial, Verdana;font-size:10px; color: black};
</style>

<script language="javascript">
function cform()
{
	<?php
	if($name_req==1&&$name==1)
	{
	?>
	if(document.contact.name.value=="")
	{
		alert("<?PHP echo $error1 ?>");
		document.contact.name.focus();
		return false;
	}
	<?PHP
	}
	?>
	if(document.contact.email.value=="")
	{
		alert("<?PHP echo $error2 ?>");
		document.contact.email.focus();
		return false;
	}

	 a=document.contact.email.value;
	 var l=a.length-1;
	 var s=a.indexOf("@"); 
	 var d=a.lastIndexOf(".");
	 var s2=a.lastIndexOf("@");
	 if(a.charAt(0)=="@"||a.charAt(l)=="@"||d-s<3||a.charAt(0)=="."||a.charAt(l)=="."||a.length<8||s!=s2||a.indexOf("@")==-1||a.indexOf(" ")!=-1||a.indexOf("*")!=-1||a.indexOf("/")!=-1||a.indexOf("&")!=-1||a.indexOf("<")!=-1||a.indexOf(">")!=-1||a.indexOf("?")!=-1||a.indexOf("|")!=-1||a.indexOf(":")!=-1||a.indexOf(",")!=-1||a.indexOf("=")!=-1||a.indexOf(")")!=-1||a.indexOf("(")!=-1||a.indexOf("%")!=-1||a.indexOf("#")!=-1)
	 {
	 	alert("<?PHP echo $error2 ?>");
		document.contact.email.focus();
		return false;
	 }
	 
	<?php
	if($address_req==1&&$address==1)
	{
	?>
	if(document.contact.address.value=="")
	{
		alert("<?PHP echo $error3 ?>");
		document.contact.address.focus();
		return false;
	}
	<?php
	}
	if($telephone_req==1&&$telephone==1)
	{
	?>
	if(document.contact.telephone.value=="")
	{
		alert("<?PHP echo $error4 ?>");
		document.contact.telephone.focus();
		return false;
	}
	<?php
	}
	if($fax_req==1&&$fax==1)
	{
	?>
	if(document.contact.fax.value=="")
	{
		alert("<?PHP echo $error5 ?>");
		document.contact.telephone.focus();
		return false;
	}
	<?php
	}
	?>
	if(document.contact.subject.value=="")
	{
		alert("<?PHP echo $error6 ?>");
		document.contact.subject.focus();
		return false;
	}
	if(document.contact.body.value=="")
	{
		alert("<?PHP echo $error7 ?>");
		document.contact.body.focus();
		return false;
	}
}
</script>
</head>

<body onmouseover="window.status=''; return true;">
<?php	include("intro.html");	?><br><br>
<form action='contact.php' method='post' name='contact' onsubmit='return cform()'>
<center>
<table border="0px" align="center" cellpadding="0px" cellspacing="0px" width="400px">
 <tr>
  <td align="center">
   <table border="0px" cellpadding="3px" cellspacing="3px" width="100%" align="center">
	<?php
	if($name==1)
	{
	?>
	<tr>
	 <td align="right"><?php if($name_req==1){echo "<font color=\"red\">*</font>";}?></td>
	 <td><?PHP echo $text1 ?>:</td>
	 <td><input type="text" size="32" name="name"></td>
	</tr>
	<?php
	}
	?>
	 <td align="right"><font color="red">*</font></td>
	 <td><?PHP echo $text2 ?>:</td>
	 <td><input type="text" size="32" name="email"></td>
	</tr>
	<?php
	if($address==1)
	{
	?>
	<tr>
	 <td align="right"><?php if($address_req==1){echo "<font color=\"red\">*</font>";}?></td>
	 <td><?PHP echo $text3 ?>: </td>
	 <td><input type="text" size="32" name="address"></td>
	</tr>
	<?php
	}
	if($telephone==1)
	{
	?>
	<tr>
	 <td align="right"><?php if($telephone_req==1){echo "<font color=\"red\">*</font>";}?></td>
	 <td><?PHP echo $text4 ?>: </td>
	 <td><input type="text" size="32" name="telephone"></td>
	</tr>
	<?php
	}
	if($fax==1)
	{
	?>
	<tr>
	 <td align="right"><?php if($fax_req==1){echo "<font color=\"red\">*</font>";}?></td>	
	 <td><?PHP echo $text5 ?>: </td>
	 <td><input type="text" size="32" name="fax"></td>
	</tr>
	<?php
	}
	?>

		<?php
		if($contact_title[1]!="" and $contact_value[1]!="" and 
		$contact_title[2]=="" and $contact_value[2]=="" and 
		$contact_title[3]=="" and $contact_value[3]=="" and 
		$contact_title[4]=="" and $contact_value[4]=="" and 
		$contact_title[5]=="" and $contact_value[5]=="" and 
		$contact_title[6]=="" and $contact_value[6]=="" and 
		$contact_title[7]=="" and $contact_value[7]=="" and 
		$contact_title[8]=="" and $contact_value[8]=="" and 
		$contact_title[9]=="" and $contact_value[9]=="" and 
		$contact_title[10]=="" and $contact_value[10]=="")
		{
			echo "<input type=\"hidden\" name=\"to\" value=\"1\">\n";
		}
		else
		{
		?>
	<tr>
	 <td align="right"><font color="red">*</font></td>	
	 <td><?PHP echo $text6 ?>:</td>
	 <td align="center"><div align="left">
	  <table border="0px" cellpadding="0px" cellspacing="0px" width="90%">
	   <tr>
		<td>
		<select name="to">
		<?php
			if($contact_title[1]!="" and $contact_value[1]!=""){echo "<option value=\"1\">$contact_title[1]</option>\n";}
			if($contact_title[2]!="" and $contact_value[2]!=""){echo "<option value=\"2\">$contact_title[2]</option>\n";}
			if($contact_title[3]!="" and $contact_value[3]!=""){echo "<option value=\"3\">$contact_title[3]</option>\n";}
			if($contact_title[4]!="" and $contact_value[4]!=""){echo "<option value=\"4\">$contact_title[4]</option>\n";}
			if($contact_title[5]!="" and $contact_value[5]!=""){echo "<option value=\"5\">$contact_title[5]</option>\n";}
			if($contact_title[6]!="" and $contact_value[6]!=""){echo "<option value=\"6\">$contact_title[6]</option>\n";}
			if($contact_title[7]!="" and $contact_value[7]!=""){echo "<option value=\"7\">$contact_title[7]</option>\n";}
			if($contact_title[8]!="" and $contact_value[8]!=""){echo "<option value=\"8\">$contact_title[8]</option>\n";}
			if($contact_title[9]!="" and $contact_value[9]!=""){echo "<option value=\"8\">$contact_title[9]</option>\n";}
			if($contact_title[10]!="" and $contact_value[10]!=""){echo "<option value=\"10\">$contact_title[10]</option>\n";}
		?>
		</select>
		</td>
       </tr>
      </table></div>
	 </td>
    </tr>
		<?php
		}
		?>
	<tr>
	 <td align="right"><font color="red">*</font></td>
	 <td><?PHP echo $text7 ?>: </td>
	 <td><input type="text" size="32" name="subject"></td>
	</tr>
	<tr>
	 <td align="right"><font color="red">*</font></td>
	 <td><?PHP echo $text8 ?>: </td>
	 <td><textarea name="body" rows="5" cols="32"></textarea></td>
	</tr>
	<?php
	if($image_verification=="Enabled")
	{
	?>
	<tr valign="top">
	 <td align="right"><font color="red">*</font></td>
	 <td colspan="3"><input type=hidden name=image value="<?PHP $random_image=encrypt_normal(random_string(4)); echo $random_image ?>">
	 <?PHP echo $text9 ?>:
	 <center><input type="text" maxlength="4" size="10" name="image_input">&nbsp;<img src="image.php?image=<?PHP echo $random_image ?>" border="1px" height="16px" width="50px" align="absmiddle"></center>
	 </td>
	</tr>
	<?PHP } ?>
   </table></center></div>
   <table border="0" cellpadding="6" cellspacing="0">
	<tr>
	 <td><input type="submit" value="<?PHP echo $text10 ?>" class="submit"></td>
	</tr>
   </table>
  </td>
 </tr>
</table>

<!-- DO NOT REMOVE THIS -->
<p class="copy">
Free script by <a href="http://software.xornic.com" target="_blank" class="copy">&copy; Xornic Software</a>.<br>
</p>
<!-- DO NOT REMOVE THIS -->

</center>
</form>

<br><br><?php	include("signature.html");	?>

</body>
</html>
