var ewcname = 'ewcobj';
var DialStr = '';
var CallState = 0;//0:disconnected
				//1:connected
				//2:incoming
				//3:connecting
var g_VolFactor = 36;
var IsRegistered = 0;
var g_AudioIn =0;
var g_AudioOut = 0;

function EWC_RunContent()
{
	var ret = GetArgs(arguments, "clsid:A0DA47E3-EAD6-4001-8B5F-4304CCD0D48E");
	Generateobj(ret.objAttrs, ret.params);
}

function Generateobj(objAttrs, params) 
{ 
	var str = '<object ';
	for (var item in objAttrs)
		str += item + '="' + objAttrs[item] + '" ';
	str += '>';
	for (var item in params)
		str += '<param name="' + item + '" value="' + params[item] + '" /> ';
	str += '</object>';

	document.write(str);
}

function GetArgs(args, classid)
{
	var ret = new Object();
	ret.params = new Object();
	ret.objAttrs = new Object();
	for (var i=0; i < args.length; i=i+2)
	{
		var currArg = args[i].toLowerCase();    

		switch (currArg)
		{
			case "classid":
			case "name":
			case "id":
				break;
			case "onafterupdate":
			case "onbeforeupdate":
			case "onblur":
			case "oncellchange":
			case "onclick":
			case "ondblClick":
			case "ondrag":
			case "ondragend":
			case "ondragenter":
			case "ondragleave":
			case "ondragover":
			case "ondrop":
			case "onfinish":
			case "onfocus":
			case "onhelp":
			case "onmousedown":
			case "onmouseup":
			case "onmouseover":
			case "onmousemove":
			case "onmouseout":
			case "onkeypress":
			case "onkeydown":
			case "onkeyup":
			case "onload":
			case "onlosecapture":
			case "onpropertychange":
			case "onreadystatechange":
			case "onrowsdelete":
			case "onrowenter":
			case "onrowexit":
			case "onrowsinserted":
			case "onstart":
			case "onscroll":
			case "onbeforeeditfocus":
			case "onactivate":
			case "onbeforedeactivate":
			case "ondeactivate":
			case "type":
			case "width":
			case "height":
			case "align":
			case "vspace": 
			case "hspace":
			case "class":
			case "title":
			case "accesskey":
			case "tabindex":
			case "codebase":
				ret.objAttrs[args[i]] = args[i+1];
				break;
			default:
				ret.params[args[i]] = args[i+1];
		}
	}
	ret.objAttrs["classid"] = classid;
	ret.objAttrs["name"] = ewcname;
	return ret;
}

function EWCRegister(username, password)
{
	var obj = document.getElementById(ewcname);
	if(obj == null)
		return;
	if((username!='') && (password!=''))
	{
		obj.Username = username;
		obj.Password = password;
	}
	obj.Register();
}

function EWCShutdown(version)
{
	var obj = document.getElementById(ewcname);
	if(obj == null)
		return;
  	if(version <= 2)
  		obj.PrepareShutdown();
  	else
  		obj.Unregister();
}

function EWCCallto(extension)
{
	var obj = document.getElementById(ewcname);
	if(obj == null)
		return;
	if(IsRegistered == 0)
	{
		alert('Not registered!');
	}
	else
		obj.Callto(extension);
}

function EWCHangup()
{
	var obj = document.getElementById(ewcname);
	if(obj)
		obj.Hangup();
}

function EWCAnswer()
{
	var obj = document.getElementById(ewcname);
	if(obj)
		obj.Answer();
}

function EWCDial(dialstr)
{
	var obj = document.getElementById(ewcname);
	if(obj==null)
	{
		alert('Object is null.');
		return;
	}
	if((dialstr == 'onhook') && (CallState != 3))
		;
	switch(CallState)
	{
		case 0://disconnected
			if(dialstr == 'offhook')
			{
				if((DialStr == '') && IsRegistered)
					EWCAnswer();
				else
				{
					;
					EWCCallto(DialStr);
					CallState = 3;//connecting
				}
			}
			else if(dialstr == 'onhook')
			{
				;
			}
			else
			{
				DialStr += dialstr;
				;
			}
			break;
		case 1://connected
			if(dialstr == 'onhook')
			{
				EWCHangup();
				CallState = 0;
			}
			else if(dialstr == 'offhook')
				;
			else
			{
				obj.Dial(dialstr);
				;
			}
			break;
		case 2://incoming
			if(dialstr == 'offhook')
				EWCAnswer();
			else// if(dialstr == 'onhook')
				EWCHangup();
			break;
		case 3://connecting
			if(dialstr == 'onhook')
			{
				EWCHangup();
				CallState = 0;//disconnected
				;
			}
			break;
	}
}

function SetCallState(nState)
{
	CallState = nState;
	
	switch(nState)
	{
		case 0://disconnected
			DialStr = '';
			break;
		case 1://connected
			break;
		case 2://incoming
			break;
		case 3://connecting
			break;
	}
}

function EraseInput()
{
	if(CallState == 0)//disconnected
	{
		DialStr = '';
		DisplaySrc.innerHTML = '';
	}
}

function SetSpeakerVolume(vol)
{
	var obj = document.getElementById(ewcname);
	if(obj!=null)
		obj.SpeakerVolume = vol;
}

function GetSpeakerVolume()
{
	var obj = document.getElementById(ewcname);
	if(obj!=null)
		g_SpkVol = obj.SpeakerVolume;
}

function SetMicVolume(vol)
{
	var obj = document.getElementById(ewcname);
	if(obj!=null)
		obj.MicVolume = vol;
}

function GetMicVolume()
{
	var obj = document.getElementById(ewcname);
	if(obj!=null)
		g_MicVol = obj.MicVolume;
}

function SetLowBandwidth(b)
{
	var obj = document.getElementById(ewcname);
	if(obj != null)
	{
		if(b)
		{
			obj.SetCodecPriority("GSM/8000/1", 150);
		}
		else
		{
			obj.SetCodecPriority("GSM/8000/1", 50);
		}
	}
}

function SetAEC(b)
{
	var obj = document.getElementById(ewcname);
	if(obj != null)
	{
		obj.AEC = b;
	}
}

function SetSTUN(server)
{
	var obj = document.getElementById(ewcname);
	if(obj != null)
	{
		obj.STUNServer1 = server;
	}
}

function GetSTUN(server)
{
	var obj = document.getElementById(ewcname);
	if(obj == null)
		return;
	
	server.value = obj.STUNServer1;
}

var g_AudInName = new Array();
var g_AudInId = new Array();
var g_AudOutName = new Array();
var g_AudOutId = new Array();

function PutAudioDevices()
{
	var AudioIn = document.getElementById("Audio_In");
	var AudioOut = document.getElementById("Audio_Out");
	setSEL_VAL_CTRL(AudioIn, g_AudInName, g_AudInId, "");
	for(var i=0; i<AudioIn.options.length; i++)
	{
		if(AudioIn.options[i].value == g_AudioIn)
		{
			AudioIn.options[i].selected = true;
			break;
		}
	}
	setSEL_VAL_CTRL(AudioOut, g_AudOutName, g_AudOutId, "");
	for(var i=0; i<AudioOut.options.length; i++)
	{
		if(AudioOut.options[i].value == g_AudioOut)
		{
			AudioOut.options[i].selected = true;
			break;
		}
	}
}

function GetAudioDevices(AudioIn, AudioOut)
{
	var obj = document.getElementById(ewcname);
	if(obj != null)
	{
		g_AudInName.length = 0;
		g_AudInId.length = 0;
		g_AudOutName.length = 0;
		g_AudOutId.length = 0;
		obj.GetAudioDevice();
		window.setTimeout("PutAudioDevices()", 3000);
	}
}

function SetAudioDevices(AudioIn, AudioOut)
{
	var obj = document.getElementById(ewcname);
	if(obj == null)
		return;
		
	var devIn=0, devOut=0;
	for(var i=0; i<AudioIn.options.length; i++)
	{
		if(AudioIn.options[i].selected)
			devIn = AudioIn.options[i].value;
	}
	for(var i=0; i<AudioOut.options.length; i++)
	{
		if(AudioOut.options[i].selected)
			devOut = AudioOut.options[i].value;
	}
	obj.SetAudioDevice(devIn, devOut);
}
