// js utility library

function $(id)
{
	return document.getElementById(id);
}

function dce(s)
{
  return document.createElement(s);
}

function dctn(s)
{
  return document.createTextNode(s);
}
  
function zyColumns(num, tableId, tableClass)
{
  this.obj = dce('table');
  this.cols = new Array();
  if(tableId) this.obj.id = tableId;
  if(tableClass) this.obj.className = tableClass;
  var tbody = dce('tbody');
  this.obj.appendChild(tbody);
  var tr = dce('tr');
  tbody.appendChild(tr);
  for(var i=0; i<num; i++)
  {
    var td = dce('td');
    tr.appendChild(td);
    this.cols.push(td);
  }
}

function zyCSV(ar)
{
  var csv = '';
  for(var i in ar)
  {
    if(csv.length>0) csv += ',';
    csv += ar[i].toString();
  }
  return csv;
}

function zyAlert(str)
{
  alert(str);
}

function zyParseJSON(str)
{
  try
  {
    eval('var obj = '+str+';');
    return obj;
  } catch(e) {
    return null;
  }
}

function zyPrepareUrlForQuery(url)
{
  var lastChar = url[url.length-1];
  if(url.indexOf('?')==-1) url += '?';
  else if(lastChar!='?'&&lastChar!='&') url += '&';
  return url;
}

function zyConverMySQLDate(mysql_date)
{
  var ar = /(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/.exec(mysql_date);
  var date = new Date();
  date.setUTCFullYear(ar[1], (ar[2]-1), ar[3]);
  date.setUTCHours(ar[4], ar[5], ar[6]);
  return date
}
      

// escape '+' to '%2B' in addition to normal escape
// necessary for hashed strings that contain a '+'
function zyEscape(str)
{
  var escStr = escape(str);
  escStr = escStr.replace(/\+/g, "%2B");
  return escStr;
}

function zyClearNode(node)
{
  if(typeof(node)=='string') node = $(node);
	if ( node.hasChildNodes() )
	{
	    while ( node.childNodes.length >= 1 )
	    {
	        node.removeChild( node.firstChild );       
	    } 
	}
}

///////////////////////////////////////////////////////////////////////////
// all this stuff below is not used, to my knowledge
// it's a all legacy clutter
///////////////////////////////////////////////////////////////////////////

function zyHttpObj()
{
  var req = null;
  if(window.ActiveXObject)
  {
    req = new ActiveXObject("Microsoft.XMLHTTP");
  } else if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
  }
  return req;
}

function zyOnHttpLoadFail(obj)
{
//  alert("http get failed: "+obj.status+"\n"+obj.responseText);
}

function zyHttpGet(url, cb)
{
  var xmlObj = zyHttpObj();
  var async = (cb!=null);
  xmlObj.open("GET", url, async);
  xmlObj.onreadystatechange = xmlResp;
  xmlObj.setRequestHeader("Content-Type","text/xml");
  xmlObj.setRequestHeader("Cache-Control","no-cache"); 
  xmlObj.setRequestHeader("Pragma", "no-cache");       // these don't work
  try { xmlObj.send(null);}
  catch(e) { };

  function xmlResp()
  {
    if (xmlObj.readyState!=4) return;
    if (xmlObj.status==200)
    {
      if (cb!=null) cb(xmlObj);
    } else {
      zyOnHttpLoadFail(xmlObj);
    }
  }
  
  return xmlObj;
}
