function AttachEvent( obj, type, fn ) 
{
	if ( obj.attachEvent ) 
	{
  		obj['e'+type+fn] = fn;
  		obj[type+fn] = function(){obj['e'+type+fn]( window.event );};
  		obj.attachEvent( 'on'+type, obj[type+fn] );
 	} 
 	else
 		obj.addEventListener( type, fn, false );
}

function DetachEvent ( obj, type, fn ) 
{
	if ( obj.detachEvent ) 
	{
		obj.detachEvent( 'on'+type, obj[type+fn] );
 		obj[type+fn] = null;
	} 
	else
		obj.removeEventListener( type, fn, false );
}



//***Adds a new class to an object, preserving existing classes
function AddClass(obj,cName){ KillClass(obj,cName); return obj && (obj.className+=(obj.className.length>0?' ':'')+cName); }

//***Removes a particular class from an object, preserving other existing classes.
function KillClass(obj,cName){ return obj && (obj.className=obj.className.replace(new RegExp("^"+cName+"\\b\\s*|\\s*\\b"+cName+"\\b",'g'),'')); }

//***Returns true if the object has the class assigned, false otherwise.
function HasClass(obj,cName){ return (!obj || !obj.className)?false:(new RegExp("\\b"+cName+"\\b")).test(obj.className) }


// getElementsByClassName
function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}


//
// addLoadEvent()
// Adds event to window.onload without overwriting currently assigned onload functions.
// Function found at Simon Willison's weblog - http://simon.incutio.com/
//
function addLoadEvent(func)
{	
	var oldonload = window.onload;
	if (typeof window.onload != 'function'){
    	window.onload = func;
	} else {
		window.onload = function(){
		func();
		oldonload();
		}
	}

}

// addHover(root, tag)
// Attaches changing of a class to replace :hover on not a elements
//
function addHover(el, tag)
{	
	var tagEls = el.getElementsByTagName(tag);
	
	for (var i=0; i<tagEls.length; i++)
	{
		AttachEvent(tagEls[i], "mouseover", function(e) { var el = e.target || e.srcElement; AddClass(el.parentNode, "over"); } );
		AttachEvent(tagEls[i], "mouseout", function(e) { var el = e.target || e.srcElement; KillClass(el.parentNode, "over"); } );
	}
}



function removeChildren(node) {
	for (i=0;i<node.childNodes.length;i++) {
		node.removeChild(node.childNodes[0]);
	}
}

function getXY(obj) 
{   
  var newObj = new Object();
  newObj.x = obj.offsetLeft;
  newObj.y = obj.offsetTop;
  theParent = obj.offsetParent;
  while(theParent != null)
  {
    newObj.y += theParent.offsetTop;
    newObj.x += theParent.offsetLeft;
    theParent = theParent.offsetParent;
  }
  
  return newObj;
}

/*
    Written by Jonathan Snook, http://www.snook.ca/jonathan
    Add-ons by Robert Nyman, http://www.robertnyman.com
*/

function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

// *** Timer for active calls
function ActiveCallsTimer(divId) {
   var div = $(divId);
   var nodes = div.getElementsByTagName('*');
   var span_min = new Array();
   var span_sec = new Array();
   var span_max = new Array();
   for (i = 0; i < nodes.length; i++) {
     if (nodes[i].className == "active_min" ) span_min.push(nodes[i]);
     if (nodes[i].className == "active_sec" ) span_sec.push(nodes[i]);
     if (nodes[i].className == "active_max" ) span_max.push(nodes[i]);
   }
   for( var i=0; i < span_min.length; i++) {
     var m = span_min[i].innerHTML.replace(/[^0-9]/g,'') * 1;
     var s = span_sec[i].innerHTML.replace(/[^0-9]/g,'') * 1;
     if (span_max[i]) {
       var max_duration = span_max[i].innerHTML.split(':');
       if (m * 60 + s == max_duration[0] * 60 + max_duration[1] * 1) continue;
     }
     s = s + 1;
     if (s >= 60) {
       s = 0;
       m = m + 1;
     }
     if (s < 10) s = "0" + s;
     if (m < 10) m = "0" + m;
     span_min[i].innerHTML = m;
     span_sec[i].innerHTML = s;
   }
}

// *** Pre-pay start/stop booth
function EnableDisableBooth(flip, p) {
	var url = window.location.protocol + '//' + window.location.hostname + '/' + window.location.pathname.substring(1, window.location.pathname.lastIndexOf('/')) + '/' + 'c.php?';
	url = url.replace(/\/\/\//g,'/');
	var start = /Tstart/.test(flip);
	var stop = /Tstop/.test(flip);
	if (start) {
		var moneyround = p.replace(/.*_moneyround=/g,'') * 1;
		var enter_prompt = p.replace(/_moneyround=.*$/g,'');
		var input_money = prompt(enter_prompt, "0.00");
		if (input_money != '' && input_money != null && input_money > 0 && ((input_money*1000) % (moneyround*1000) == 0)) {
			window.location = url + flip + '&prepaid=' + input_money;
		}
	} else
	if (stop) window.location = url + flip;
}

// *** pre-pay reload list of booth 
// called 1) when marking calls paid; 2) every time if there are ended calls (when the terminator disconnects a call because the credit ran out,
// it also blocks the booth
function ajaxReloadBoothList() {
  var xmlHttp;
  xmlHttp=new XMLHttpRequest();
  xmlHttp.onreadystatechange=function() {
    if(xmlHttp.readyState==4) {
      document.getElementById('boothcontrol').innerHTML = xmlHttp.responseText;
    }
  }
  xmlHttp.open("GET", window.location.protocol + '//' + window.location.hostname + '/' + window.location.pathname.substring(1, window.location.pathname.lastIndexOf('/')) + '/'+"boothcontrol.inc.php?ajax=1", true);
  xmlHttp.send(null);
}

function disconnectcall(message, i_account) {
  var xmlHttp;
  xmlHttp=new XMLHttpRequest();
  xmlHttp.onreadystatechange=function() {
    if(xmlHttp.readyState==4) {
      result = xmlHttp.responseText;
      if (result.match(/OK/)) alert (message);
    }
  }
  xmlHttp.open("GET", window.location.protocol + '//' + window.location.hostname + '/' + window.location.pathname.substring(1, window.location.pathname.lastIndexOf('/')) + '/'+"disconnectcall.php?i_account="+i_account, true);
  xmlHttp.send(null);
}
