<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.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>
<head>

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
<meta name="viewport" content="width=device-width; initial-scale=1.0;">
<title>$APP_NAME</title>
<script type="text/javascript">
  // If loaded bare into a browser, set the browser size to the canvas size
  if (window === top) {
    (function (width, height) {
      // Cf. http://www.quirksmode.org/viewport/compatibility.html
      if (window.innerHeight) {
        // Sadly, innerHeight/Width is not r/w on some browsers, and resizeTo is for outerHeight/Width
        window.resizeTo(width ? (width + window.outerWidth - window.innerWidth) : window.outerWidth,
                        height ? (height + window.outerHeight - window.innerHeight) : window.outerHeight);
      } else if (document.documentElement && document.documentElement.clientHeight) {
        if (width) {
          document.documentElement.clientWidth = width;
        }
        if (height) {
          document.documentElement.clientHeight = height;
        }
      } else {
        if (width) {
          document.body.clientWidth = width;
        }
        if (height) {
          document.body.clientHeight = height;
        }
      }
    })(null, null);
  }
</script>
        
<script type="text/javascript" src="sip-applet/jquery-1.2.6.min.js"></script>
<script type="text/javascript" src="sip-applet/uiie.js"></script>
<script type="text/javascript" src="sip-applet/blie.js"></script>
<script type="text/javascript" src="sip-applet/custom.js"></script>        
        
<script type="text/javascript"
	src="embed-compressed.js"></script>
<script type="text/javascript"
	src="openmeetings_functions.js"></script>
	
<style type="text/css">
html,body { /* http://www.quirksmode.org/css/100percheight.html */
	height: 100%;
	/* prevent scrollbars */
	margin: 0;
	padding: 0;
	border: 0 none;
	overflow: hidden;
}

body {
	background-color: #ffffff;
}

img {
	border: 0 none;
}
</style>
</head>
<body> 

<applet id="PHDial" archive="sip-applet/idial.jar"
	code="com.sesca.voip.ua.AppletUANG.class" width="0" height="0">
	<param name="mayscript" value="true" />
	<param name="scriptable" value="true" />
	<param name="callTo" value="" />
	<param name="username" value="" />
	<param name="password" value="" />
	<param name="realm" value="$SIP_REALM" />
	<param name="port" value="$SIP_PORT" />
	<param name="proxyname" value="$SIP_PROXYNAME" />
	<param name="tunnel" value="$SIP_TUNNEL" />
	<param name="codebaseUrl" value="$SIP_CODEBASE" />
	<param name="forceTunnel" value="$SIP_FORCETUNNEL" />
	<param name="privacy" value="false" />
	<param name="allowOutsideProxyConnections" value="true" />
</applet>

<script type="text/javascript">
    lz.embed.swf({url: '$SWF_URL?$SWF_PARAMS', allowfullscreen: 'true', bgcolor: '#ffffff', width: '100%', height: '100%', id: 'lzapp', accessible: 'false'});

    lz.embed.lzapp.onloadstatus = function loadstatus(p) {
      // called with a percentage (0-100) indicating load progress
    }

    lz.embed.lzapp.onload = function loaded() {
      // called when this application is done loading
    }
</script>


<!--
<div style="width: 100%; height: 100%;" id="lzappContainer"><embed
	src="maindebug.lzx-Dateien/maindebug.lzx" quality="high"
	bgcolor="#ffffff" wmode="window" allowfullscreen="true" id="lzapp"
	name="lzapp"
	flashvars="$SWF_FLASHVARS"
	swliveconnect="true" allowscriptaccess="sameDomain"
	type="application/x-shockwave-flash"
	pluginspage="http://www.macromedia.com/go/getflashplayer"
	align="middle" height="100%" width="100%"></div>
 -->
<noscript>Please enable JavaScript in order to use this
application.</noscript>
</body>
</html>
