## OpenMeetings
## author swagner
## 11.05.2007
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<!--
Copyright 1999-2004 The Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='de' lang='de'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
<style type="text/css">

form, fieldset {
	margin: 0;
	padding: 0;
	}
	
fieldset { border: 1px solid #000; }

legend {
	padding: 0;
	color: #000;
}

input:focus, textarea:focus {
	color: #000; 
	background: #fff;
	outline: 1px solid black;
}


input, textarea, select {
	margin: 0;
	padding: 1px;
	position:absolute;
	left:440px;
	background: #ddd;
	font-size: 100%;
	font-family: inherit;
}

select { padding: 0; }

form.cmxform {
	width: 1024px;
	font-size: 1.1em;
	color: #333;
	}
	
form.cmxform legend { padding-left: 0; }
	
form.cmxform legend,
form.cmxform label { color: #333; }

form.cmxform fieldset {
	border: none;
	border-top: 1px solid #C9DCA6;
	}
	
form.cmxform fieldset fieldset { background: none; }
	
form.cmxform fieldset li {
	padding: 5px 10px 7px;
	}
	
form.cmxform fieldset {
  margin-bottom: 10px;
}
form.cmxform legend {
  padding: 0 2px;
  font-weight: bold;
}
form.cmxform label {
  display: inline-block;
  line-height: 1.8;
  vertical-align: top;
}
form.cmxform fieldset ol {
  margin: 0;
  padding: 0;
}
form.cmxform fieldset li {
  list-style: none;
  padding: 5px;
  margin: 0;
}
form.cmxform fieldset fieldset {
  border: none;
  margin: 3px 0 0;
}
form.cmxform fieldset fieldset legend {
  padding: 0 0 5px;
  font-weight: normal;
}
form.cmxform fieldset fieldset label {
  display: block;
  width: auto;
}
form.cmxform em {
  font-weight: bold;
  font-style: normal;
  color: #f00;
}
form.cmxform label {
  width: 420px; /* Width of labels */
}
form.cmxform fieldset fieldset label {
  margin-left: 123px; /* Width plus 3 (html space) */
}

</style>
</head>
<body>

<script language="JavaScript"> 
 
function checkEmail() 
{
    //alert(document.getElementById("useremail").value);
    
	if	(/^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{1,3})$/.test(document.getElementById("useremail").value))
	{
		document.forms[0].submit();
	}
	else
	{
		alert("Please enter a valid EMail, for example name@mail.com");
	}
}
</script>

<h1>$APP_NAME - Installation</h1>

<form name="cmxform" id="form1" class="cmxform" method="post" action="?command=step2">

    <fieldset id="userData">
    
		<legend>Userdata</legend>    
		<li>
        <label for="username">Username</label>
    	<input name="username" id="username" size="27" 
    		title="Enter a username" type="text" /><br />
		</li><li>
        <label for="userpass">Userpass</label>
    	<input name="userpass" id="userpass" size="27" 
    		title="Enter a password" type="password" /><br />
		</li><li>
        <label for="useremail">EMail</label>
    	<input name="useremail" id="useremail" size="27" 
    		title="Enter a EMail" type="text" /><br/>
		</li><li> 
    	<label for="timeZone">User Time Zone</label>
    	<select name="timeZone" id="timeZone" 
    		size="1">
			#foreach( $key in $allTimeZones.keySet() )
			    <option value="$key">$allTimeZones.get($key)</option>
			#end	
	    </select><br/>
	    </li> 
    </fieldset>
    
    <fieldset id="userOrga" >
    
		<legend>Organisation(Domains)</legend>    
		<li>
        <label for="orgname">Name</label>
    	<input name="orgname" id="orgname" size="27" 
    		title="Enter a default Organisation" type="text" />   	
    	</li>    	
    </fieldset>    
    
    <fieldset id="userConf">
    
		<legend>Configuration</legend>    
		<li>
        <label for="configdefault">Allow self-registering (allow_frontend_register)</label>
    	<select name="configdefault" id="configdefault" size="1" 
    		>
	      	<option value="1" selected>Yes</option>
	        <option value="0">No</option>
	    </select><br />
	    </li><li>
        <label for="sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</label>
    	<select name="sendEmailAtRegister" id="sendEmailAtRegister" size="1"
    		>
	      	<option value="1" selected>Yes</option>
	        <option value="0">No</option>
	    </select><br />	 
		</li><li>
        <label for="sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</label>
    	<select name="sendEmailWithVerficationCode" id="sendEmailWithVerficationCode" 
    		size="1">
	      	<option value="1" selected>Yes</option>
	        <option value="0">No</option>
	    </select><br />	 	       
		</li><li>
        <label for="createDefaultRooms">Default Rooms of all types will be created</label>
    	<select name="createDefaultRooms" id="createDefaultRooms"
    		size="1">
	      	<option value="1" selected>Yes</option>
	        <option value="0">No</option>
	    </select><br />	 	       
	    </li><li>
	    <label for="configreferer">Mail-Referer (system_email_addr)</label>
    	<input name="configreferer" id="configreferer" size="27" 
    		title="Enter a Referer" type="text" value="noreply@localhost" /><br />
    	</li><li>
        <label for="configsmtp">SMTP-Server (smtp_server)</label>
    	<input name="configsmtp" id="configsmtp" size="27" 
    		title="Enter a SMTP-Server" type="text" value="localhost" /><br/>
    	</li><li>
    	<label for="configsmtp">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</label>
    	<input name="configsmtpport" id="configsmtpport" size="27" 
    		title="Enter a SMTP-Server.Port normally 25" type="text" value="25" /><br/>
    	</li><li>
    	<label for="configmailuser">SMTP-Username (email_userpass)</label>
    	<input name="configmailuser" id="configmailuser" size="27" 
    		title="Enter the mail-username" type="text" /><br />
    	</li><li>
    	<label for="configmailpass">SMTP-Userpass (email_userpass)</label>
    	<input name="configmailpass" id="configmailpass" size="27" 
    		title="Enter the mail-userpass" type="password" /><br/>
    	</li><li>
        <label for="mailusetls">Enable TLS in Mail Server Auth</label>
    	<select name="mailusetls" id="mailusetls" 
    		size="1">
	      	<option value="1">Yes</option>
	        <option value="0" selected>No</option>
	    </select><br />	 	       
	    </li><li>
        <label for="replyToOrganizer">Set inviter's email address as ReplyTo in email invitations (inviter.email.as.replyto)</label>
    	<select name="replyToOrganizer" id="replyToOrganizer" size="1"
    		>
	      	<option value="1" selected>Yes</option>
	        <option value="0">No</option>
	    </select><br />	 
	    </li><li> 
    	<label for="configdefaultLang">Default Language</label>
    	<select name="configdefaultLang" id="configdefaultLang" 
    		size="1">
			#foreach( $key in $allLanguages.keySet() )
			    <option value="$key">$allLanguages.get($key)</option>
			#end	
	    </select><br/>
	    </li> 
	    <li> 
    	<label for="default_export_font">Default Font for Export [default_export_font]</label>
    	<select name="default_export_font" id="default_export_font" 
    		size="1">
			#foreach( $key1 in $allFonts.keySet() )
			    <option value="$key1">$allFonts.get($key1)</option>
			#end	
	    </select><br/>
	    </li>      	
    </fieldset>  
    
    <fieldset id="userConf1">
		<legend>Converters</legend>
	<li>
	        <label for="swftools_zoom">SWFTools Zoom</label>
	    	<input name="swftools_zoom" id="swftools_zoom" size="4"  value="72"
		title="Enter the dpi that swftools will use for PDF to SWF conversion" type="text" 	 />   	
	    	<p><i>You can test if swftools is installed into system path by opening a shell or cmd-prompt and type pdf2swf<br/>
	    		Enter the dpi that swftools will use for PDF to SWF conversion. Default is 72 dpi.<br/>
	    		see also <a href="http://openmeetings.apache.org/installation.html" target="_blank">Installation</a></i></p>
		
        </li>
	<li>
	        <label for="swftools_jpegquality">SWFTools JPEG Quality</label>
	    	<input name="swftools_jpegquality" id="swftools_jpegquality" size="3" value="85" 
		title="Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)"  type="text" />   	
	    	<p>
		<i>You can test if swftools is installed into system path by opening a shell or cmd-prompt and type pdf2swf<br/>
	    		Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)<br/>
	    		see also <a href="http://openmeetings.apache.org/installation.html" target="_blank">Installation</a></i>
		</p>
        </li>
    
		<li>
	        <label for="swftools_path">SWFTools Path</label>
	    	<input name="swftools_path" id="swftools_path" size="27" title="Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path" type="text" />   	
	    	<p><i>You can test if swftools is installed into system path by opening a shell or cmd-prompt and type pdf2swf<br/>
	    		If this shows a list of options leave this field blank otherwise you have to specify the path to pdf2swf on your system<br/>
	    		see also <a href="http://openmeetings.apache.org/installation.html" target="_blank">Installation</a></i></p>
        </li>
        <li>
	        <label for="imagemagick_path">ImageMagick Path</label>
	    	<input name="imagemagick_path" id="imagemagick_path" size="27" title="Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path" type="text" />   	
	    	<p><i>see also <a href="http://openmeetings.apache.org/installation.html" target="_blank">Installation</a></i></p>	
    	</li>
    	<li>
	        <label for="ffmpeg_path">FFMPEG Path</label>
	        <input name="ffmpeg_path" id="ffmpeg_path" size="27" title="Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path" type="text" />    
	        <p><i>see also <a href="http://openmeetings.apache.org/installation.html" target="_blank">Installation</a></i></p>  
        </li>
        <li>
        <label for="sox_path">SoX Path</label>
	        <input name="sox_path" id="sox_path" size="27" title="Enter the path to SoX, leave blank if SoX is successfully installed to system-path" type="text" />    
	        <p><i>see also <a href="http://openmeetings.apache.org/installation.html" target="_blank">Installation</a></i></p>  
        </li>
		<li>
	        <label for="jod_path">JOD Path</label>
	        <input name="jod_path" id="jod_path" size="27" value="./jodconverter-core-3.0-beta-4/lib" 
			title="The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar" type="text" />    
	        <p><i>see also <a href="http://openmeetings.apache.org/installation.html" target="_blank">Installation</a></i></p>  
        </li>
		<li>
	        <label for="office_path">OpenOffice/LibreOffice Path for jodconverter</label>
	        <input name="office_path" id="office_path" size="27" value="" 
			title="The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically" type="text" />    
	        <p>The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation</p>  
        </li>
    </fieldset>      
    
    <fieldset id="userConf2">
    
		<legend>Crypt Type</legend>    
		<li>
        <label for="crypt_ClassName">Crypt Class</label>
    	<input name="crypt_ClassName" id="crypt_ClassName" size="27" 
    		type="text" 
    		title="Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE"
    		value="org.apache.openmeetings.utils.crypt.MD5Implementation" />  	
		</li>
    	<p><i>
	    	You can use this default crypt type which is equal to PHP-MD5 function or BSD-Style<BR/>
	    	encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b><BR/>
	    	for more information or to write your own Crypt-Style see:<BR/>
			<a href="http://openmeetings.apache.org/CustomCryptMechanism.html" target="_blank">Custom Crypt Mechanism</a><BR/>
			You can edit this value later BUT previous created Users and Sessions might be not usable anymore<BR/>
    	</i></p>
        
    </fieldset>
    
    <fieldset id="red5sip">
        <legend>red5SIP Configuration</legend>

        <li>
        <label for="red5sip_enable">Enable SIP</label>
    	<select name="red5sip_enable" id="red5sip_enable" size="1">
    		<option value="yes">Yes</option>
	      	<option value="no" selected>No</option>
	    </select><br />
	    </li>
		<p><i>
            Enable red5SIP integration
        </i></p>
        <br />

        <li>
        <label for="red5sip_room_prefix">SIP rooms prefix</label>
        <input name="red5sip_room_prefix" id="red5sip_room_prefix" size="27" title="" type="text" value="400" />
        <p><i>Prefix for phone number of conference rooms</i></p>
        </li>

        <li>
        <label for="red5sip_exten_context">SIP extensions context</label>
        <input name="red5sip_exten_context" id="red5sip_exten_context" size="27" title="" type="text" value="rooms" />
        <p><i>Context of Asterisk extensions</i></p>
        </li>

    </fieldset>

    <fieldset>
        <legend>Submit</legend> 
        <input name="Submit" value="INSTALL" 
    		title="Submit" type="button"  onclick="checkEmail();"/>
    </fieldset>	
	
</form>

</body>
</html>
