//get element/elemens by id
function $(element)
{
  if (arguments.length > 1) {
	for (var i = 0, elements = [], length = arguments.length; i < length; i++)
	  elements.push($(arguments[i]));
	return elements;
  }
  if (typeof element == 'string')
	element = document.getElementById(element);
  return element;
}

//event handlers
$Event = function()
{
	  this._handlers = new Array(); 
}
 
$Event.prototype.add = function(handler)
{
	  this._handlers.push(handler);
}
 
$Event.prototype.remove = function(handler)
{		   
	  var i;
	  for(i = 0; i < this._handlers.length; i++)
	  {
			var h = this._handlers[i];
			if(h.constructor == handler.constructor)
				  break;
	  }
 
	  if(i < this._handlers.length)
			this._handlers.splice(i, 1);
} 
 
$Event.prototype.Invoke = function()
{
	  for (var i = 0; i < this._handlers.length; ++i)
			this._handlers[i]();
} 

//window object
var $Window=new Object();
$Window.OnLoad = new $Event();

$Window.Load=function()
{
	$Window.OnLoad.Invoke();
}

window.onload=$Window.Load;

//binding functions
Function.prototype.bind=function(o)
{
	if(!window.__objs) {
		window.__objs = [];
		window.__funcs = [];
	}

	var objId = o.__oid;
	if(!objId)
		__objs[objId = o.__oid = __objs.length] = o;

	var me = this;
	var funcId = me.__fid;
	if(!funcId)
		__funcs[funcId = me.__fid = __funcs.length] = me;

	if(!o.__closures)
		o.__closures = [];

	var closure = o.__closures[funcId];
	if(closure)
		return closure;

	o = null;
	me = null;

	return __objs[objId].__closures[funcId] = function() {
		return __funcs[funcId].apply(__objs[objId], arguments);
	};
}

//AJAX supporting
$Ajx = function()
{
	this.READY_STATE_UNINITIALIZED=0;
	this.READY_STATE_LOADING=1;
	this.READY_STATE_LOADED=2;
	this.READY_STATE_INTERACTIVE=3;
	this.READY_STATE_COMPLETE=4;
	
	this.url=$Ajx.ServerPath+"AjxHandler.ashx";
	this.contentType="application/x-www-form-urlencoded";
	this.method="POST";
	this.onerror=this.defaultError;
	this.req=null;
	this.onload=null;
	this.data=null;
	this.log='';
	
	
}

$Ajx.ServerPath="";

$Ajx.prototype.defaultError=function(error)
{
   
}

$Ajx.prototype.onReadyState=function()
{
  var executed=false;  
  try
  {	 
	  if (this.req.readyState==this.READY_STATE_COMPLETE)
	  {	  
		executed=true;
		if (this.req.status==200 || this.req.status==0)
		{
		  if(this.onload)
			this.onload(this.req.responseText);		  
		}
		else
		{		  
		  this.onerror('Unknown error');
		}
	  }
  }
  catch(e){}
  finally
  {
	if(executed&&this.onload)
		this.release();
  }
}

$Ajx.prototype.release=function()
{
	delete this.req.onreadystatechange;
	delete this.req;
	delete this.onload;
	delete this.onerror;
	delete this.data;
	
}

$Ajx.prototype.Update=function(url)
{
	this.url=url;
	this.Invoke();	
}

$Ajx.prototype.createRequestInstance=function()
{
		this.req = null;
		
		if(window.XMLHttpRequest)
			this.req =new XMLHttpRequest();
		else if (window.ActiveXObject) 
		{
		 try
		 {
			this.req=new ActiveXObject('Msxml2.XMLHTTP');
		 } catch (e)
		 {
			 try
			 {
				this.req=new ActiveXObject('Microsoft.XMLHTTP');
			 } 
			 catch (e)
			   {
				   try
				   {
					  this.req=new ActiveXObject('Msxml2.XMLHTTP.4.0');
				   } 
				   catch (e)
				   {
				   }
			   }
		 }
		}	   
		  
		if(!this.req) 
		{
			if(!parent.frames['hiddenFrame'])
				window.location.replace(this.url+"?useFrames=true&href='"+window.location.href+"'"); 
			else
				this.req=new $Ajx.XmlHttpFrameRequest();				
		}	
}

$Ajx.prototype.Invoke=function()
{

	var isAsync=this.onload!=null;
	
	try
	{			  
		this.createRequestInstance();
		if(!this.req) 
		{
			return;
		}
		
//		var thiz=this;
		this.req.onreadystatechange=this.onReadyState.bind(this);
		
	  try
	   {	 
		   this.req.open(this.method,this.url,isAsync);
	   }
	   catch(e)
	   {		
	   
			var s=window.location.href.split("/");
			var s1=this.url.split("/");
			if(s[2]!=s1[2])
			{
				this.url=s[0]+"//"+s[2]+"/"+this.url.substr((s1[0]+"//"+s1[2]).length+1);				
				this.req.onreadystatechange=this.onReadyState.bind(this);
				this.req.open(this.method,this.url,isAsync);
			} 
	   }
	  
	   this.req.setRequestHeader('Connection', 'close');
//	   http_request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
	  
	  if (this.contentType)
	  {
		this.req.setRequestHeader('Content-Type', this.contentType);
	  }
	  this.req.send(this.data);
  
	  if(!isAsync)
	   return this.req.ResponseText;		
	  
	}
	catch (err)
	{	  
	  this.onerror(err.message);	  
	}
	finally
	{
	 if(!isAsync)
	  {	   
		this.release();		
	  }
	}
}

$Ajx.prototype.Execute=function()
{ 
   return this.execute(arguments);
}

$Ajx.Execute=function()
{
	var ajx=new $Ajx(); 
	return ajx.execute(arguments);	
}

$Ajx.Test=function()
{
	var ajx=new $Ajx();
	ajx.createRequestInstance();
	if(!ajx.req) 
	{
		return false;
	}
	
	return true;
}

$Ajx.prototype.execute=function(args)
{
	var i=args.length;
	
	if(i<1)
		return;	
		
	var arg0=args[0];
	var j=1;   
	
	if(typeof(arg0)=='function')
	{
		if(i<2)
			return;
			
		this.onload=arg0;
		arg0=args[1];
		j=2;
	}
	
	this.url+="?methodName="+arg0;		
	for(;j<i;j++)
	{
		if(!this.data)
		{
			this.data=args[j]+".;args";
		}
		else
		{				
			this.data+=args[j]+".;args";
		}			
		
	}
	
	return this.Invoke();
}

$Ajx.XmlHttpFrameRequest=function()
{
	this.url;
	this.method;
	this.onreadystatechange;
	this.isAxync;
	this.headers=[];
	this.data;
}

$Ajx.XmlHttpFrameRequest.prototype.open=function(method,url,isAsync)
{
	this.url=url;
	this.method=method;
	this.isAxync=isAsync;
}

$Ajx.XmlHttpFrameRequest.prototype.setRequestHeader=function(name,value)
{
		for(var i=0; i<this.headers.length; i++) 
		{
			if(this.headers[i].name == name)
			{
				this.headers[i].value = value;
				return;
			}
		}
		this.headers.push({"name":name,"value":value});
}

$Ajx.XmlHttpFrameRequest.prototype.send=function(data)
{
	this.data=data;
	return this.trySend();
}

$Ajx.XmlHttpFrameRequest.prototype.trySend=function()
{ 
	  if(!this.isAxync)
	  {
//			alert("Synchronous call is not supported.");
//			return;
	  }
	  
//	if(!this.isAxync)
//	{
//		while($Ajx.XmlHttpFrameRequest.waiting)
//		{
//		 pause(1000);
//		}
//	}
//	else
	if($Ajx.XmlHttpFrameRequest.waiting)
	{
		setTimeout(this.trySend.bind(this), 100);
		return;
	} 
	
	$Ajx.XmlHttpFrameRequest.waiting=true;	
	
	 var frame=parent.frames['hiddenFrame']; 
	 
	var doc = frame.document;   
   
	var form = doc.createElement('form'); 	
	
	doc.body.appendChild(form);
		
	form.setAttribute("action", this.url);
	form.setAttribute("method", this.method);		
	
	for(var i=0; i<this.headers.length; i++)
	{
		switch(this.headers[i].name.toLowerCase()) 
		{
//			case "content-length":
//			case "accept-encoding":
//				break;
//			case "content-type":
//				form.setAttribute("enctype", this.headers[i].value);
//				break;
//			default:
//				this.addInput(doc, form, this.headers[i].name, this.headers[i].value);
		}
	}
	
	
	var element=doc.createElement("input");
	element.setAttribute("type", 'hidden');
	element.setAttribute("name", 'data');
	element.setAttribute("value", this.data);
	form.appendChild(element);	
	
	form.submit();
	
//	if(!this.isAxync)
//	{
//		while(doc.readyState != "complete")
//		{
//		}
//		
//		$Ajx.XmlHttpFrameRequest.waiting=false;
//		return doc.body.innerText;
//	}
//	else
	 
	 $Ajx.thiz=this;
	 window.setTimeout('$Ajx.thiz.readystatechanged()', 1);
}

$Ajx.XmlHttpFrameRequest.prototype.readystatechanged=function()
{	
	var doc = parent.frames['hiddenFrame'].document;	
	if(doc.readyState == "complete")
	{		 
		this.status = 200;
		this.readyState = 4;
		this.responseText = doc.body.innerHTML;				
		if(this.onreadystatechange)
			this.onreadystatechange();
		$Ajx.XmlHttpFrameRequest.waiting=false;
		return;
	}	
	window.setTimeout('$Ajx.thiz.readystatechanged()', 100);	
}

function Tracking()
{
	this.custID;
	this.proactive=''; 
	this.timerInterval=3000;
	document.write("<div id='TrackingDiv'></div>");
	$Window.OnLoad.add(this.Load.bind(this));	   
}

Tracking.prototype.loaded=function(result)
{
   if(result||result.length>0)
	{	
	   if(result=='proactive')
	   { 
		this.proactive=result;
		
		if(this.timerInterval&&this.timerInterval>0)
			window.setTimeout("Tracking.Check()", this.timerInterval);
	   }
	   else
		{
		   eval(result);
		}
	}
	else
	{
		if(this.timerInterval&&this.timerInterval>0)
			window.setTimeout("Tracking.Check()",this.timerInterval);   
	}	 
		  
}

Tracking.prototype.Load=function()
{
	if(this.timerInterval&&this.timerInterval>0)
		window.setTimeout("Tracking.Check()",this.timerInterval);
	else window.setTimeout("Tracking.Check()",1000);	
	
}
 
 Tracking.prototype.Check=function()
 {		   
	$Ajx.Execute(this.loaded.bind(this),"dotnetLIVEHELP.Checker.CheckForChatting",this.custID+"|"+this.proactive); 
 }
 
 Tracking=new Tracking();
 
ConfirmContent =function(){};

ConfirmContent.open =function()
{
	ConfirmContent.close();
	return ConfirmContent.openURL(ConfirmContent.url);
}

ConfirmContent.openURL =function(url)
{
        try
        {
                var popup = window.open( url, '_blank', 'width=600, height=600, resizable=0, scrollbars=1, toolbar=0, status=0');
                if ( popup == null )
                        return false;


                if ( window.opera )

                        if (!popup.opera)

                                return false;

        }

        catch(err)

        {

                return false;

        }

        return true;

}

ConfirmContent.close =function()
{
	$('confirmWindow').style.display='none';
}

ConfirmContent.closeClick =function()
{
	$Ajx.Execute("dotnetLIVEHELP.Checker.CloseChat", ConfirmContent.custId, ConfirmContent.sessionId); 
	ConfirmContent.close();
}

CheckConfirmation = function(url,showDiv, custId, sessionId)
{
	ConfirmContent.url=url;
	ConfirmContent.custId = custId;
	ConfirmContent.sessionId = sessionId;
	//var win=ConfirmContent.open();
	if(showDiv == '2')
	{
		$('confirmWindow').style.display='block';
		$('btYes').onclick= ConfirmContent.open;
		$('btNo').onclick= ConfirmContent.closeClick;
	}
	else if(showDiv == '1')
	{
		ConfirmContent.open();
	}
	else if(showDiv == '3')
	{
		if(!ConfirmContent.open())
		{
			$('confirmWindow').style.display='block';
			$('btYes').onclick= ConfirmContent.open;
			$('btNo').onclick= ConfirmContent.closeClick;
		}
	}	
}
Tracking.custID='61735';
Tracking.timerInterval=3000;
$Ajx.ServerPath='http://www.dotnetlivehelp.com/livehelp/';