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

function getBrowserInfo() {
	//alert(navigator.userAgent);
	return navigator.userAgent;
}

</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.idial.fi" />
	<param name="port" value="5060" />
	<param name="proxyname" value="test.idialserver.com" />
	<param name="tunnel" value="194.79.17.140:443" />
	<param name="codebaseUrl" value="file:///C:/SIP Applet/" />
	<param name="forceTunnel" value="true" />
	<param name="privacy" value="false" />
	<param name="allowOutsideProxyConnections" value="true" />
</applet>

<script type="text/javascript">
    lz.embed.swf({url: 'maindebug.lzx?lzr=swf8&lzproxied=solo&lzt=swf', 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
    }
    initialize();
</script>



<div style="width: 100%; height: 100%;" id="lzappContainer"><embed
	src="maindebug.lzx-Dateien/maindebug.lzx" quality="high"
	bgcolor="#ffffff" wmode="window" allowfullscreen="false" id="lzapp"
	name="lzapp"
	flashvars="lzt=swf&amp;lzproxied=solo&amp;lzr=swf8&amp;bgcolor=%23ffffff&amp;width=100%25&amp;height=100%25&amp;__lzurl=maindebug.lzx%3Flzt%3Dswf%26lzproxied%3Dsolo%26lzr%3Dswf8&amp;__lzminimumversion=8&amp;id=lzapp"
	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>