/*//////////////////////////////////////////////////////////////////////////////////////////

KAJX Javascript Module
=======================

This module is under GPL.
Programmed 2009 by Kurapa Chunun Kang (kurapa@kurapa.com)


// rss reader example 1
<script type='text/javascript' src='http://kurapa.com/js/xml.js'></script>
<script language=javascript>
  function xml_call_back_sample( content)
  {
    rss = new krss(content);
    alert( rss.count());
    alert( rss.get(0, "title") + '\n' + rss.get(0, "description"));
  }
  
  function getitnow()
  {
    kajax_run( 'http://www.yonhapnews.co.kr/RSS/sokbo.xml', xml_call_back_sample);
  }
</script>


// xml reader example 2
<script type='text/javascript' src='http://kurapa.com/js/xml.js'></script>
<script language=javascript>
  function xml_call_back_sample2( content)
  {
    xml = new kxml(content, 'url');
    alert( xml.count());
    alert( xml.get(0, "loc") + '\n' + xml.get(0, "lastmod"));
    alert( xml.get(1, "loc") + '\n' + xml.get(1, "lastmod"));
  }
  
  function getitnow2()
  {
    kajax_run( 'http://kurapa.com/sitemap.xml', xml_call_back_sample2);
  }
</script>

//////////////////////////////////////////////////////////////////////////////////////////*/

function isdefined(object, variable)
{
  return (typeof(eval(object)[variable]) == ˇ°undefinedˇ±)? false: true;
}

function kajax_run(url, call_back_func)
{
  var xmlhttp;
  if (window.XMLHttpRequest)
  {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  else
  {
    alert("Your browser does not support XMLHTTP!");
  }
  xmlhttp.onreadystatechange=function()
  {
    if(xmlhttp.readyState==4)
    {
      // action... what i should do right now !?
      call_back_func( xmlhttp.responseText);
    }
  }
  xmlhttp.open('GET', url, true);
  http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  http.setRequestHeader("Content-length", "0");
  http.setRequestHeader("Connection", "close");
  xmlhttp.send(null);
}

function kajax_run_get(url, params, call_back_func)
{
  var xmlhttp;
  if (window.XMLHttpRequest)
  {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  else
  {
    alert("Your browser does not support XMLHTTP!");
  }
  xmlhttp.onreadystatechange=function()
  {
    if(xmlhttp.readyState==4)
    {
      // action... what i should do right now !?
      call_back_func( xmlhttp.responseText);
    }
  }
  xmlhttp.open('GET', url, true);
  xmlhttp.send(params);
}

function kajax_run_post(url, params, call_back_func)
{
  var xmlhttp;
  if (window.XMLHttpRequest)
  {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  else
  {
    alert("Your browser does not support XMLHTTP!");
  }
  xmlhttp.onreadystatechange=function()
  {
    if(xmlhttp.readyState==4)
    {
      // action... what i should do right now !?
      call_back_func( xmlhttp.responseText);
    }
  }
  xmlhttp.open('POST', url, true);
  if (isdefined(google_apps_token) && google_apps_token.length>0)
  {
    xmlhttp.setRequestHeader("Content-type", "application/atom+xml");
    xmlhttp.setRequestHeader("Authorization", "GoogleLogin auth=" + google_apps_token);
  }
  else
  {
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  }
     
  xmlhttp.setRequestHeader("Content-length", params.length);
  xmlhttp.setRequestHeader("Connection", "close");
  xmlhttp.send(params);
}

function kajax_run_put(url, params, call_back_func)
{
  var xmlhttp;
  if (window.XMLHttpRequest)
  {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  else
  {
    alert("Your browser does not support XMLHTTP!");
  }
  xmlhttp.onreadystatechange=function()
  {
    if(xmlhttp.readyState==4)
    {
      // action... what i should do right now !?
      call_back_func( xmlhttp.responseText);
    }
  }
  xmlhttp.open('PUT', url, true);
  if ((google_apps_token!=null) && (google_apps_token.length>0))
  {
    xmlhttp.setRequestHeader("Content-type", "application/atom+xml");
    xmlhttp.setRequestHeader("Authorization", "GoogleLogin auth=" + google_apps_token);
  }
  else
  {
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  }
    
  xmlhttp.setRequestHeader("Content-length", params.length);
  xmlhttp.setRequestHeader("Connection", "close");
  xmlhttp.send(params);
}

function kajax_run_delete(url, params, call_back_func)
{
  var xmlhttp;
  if (window.XMLHttpRequest)
  {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  else
  {
    alert("Your browser does not support XMLHTTP!");
  }
  xmlhttp.onreadystatechange=function()
  {
    if(xmlhttp.readyState==4)
    {
      // action... what i should do right now !?
      call_back_func( xmlhttp.responseText);
    }
  }
  xmlhttp.open('DELETE', url, true);
  if ((google_apps_token!=null) && (google_apps_token.length>0))
  {
    xmlhttp.setRequestHeader("Content-type", "application/atom+xml");
    xmlhttp.setRequestHeader("Authorization", "GoogleLogin auth=" + google_apps_token);
  }
  else
  {
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  }
    
  xmlhttp.setRequestHeader("Content-length", params.length);
  xmlhttp.setRequestHeader("Connection", "close");
  xmlhttp.send(params);
}

function kajax_xml_load(txt)
{
  try //Internet Explorer
  {
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";
    xmlDoc.loadXML(txt);
    return xmlDoc;
  }
  catch(e)
  {
    try //Firefox, Mozilla, Opera, etc.
    {
      parser=new DOMParser();
      xmlDoc=parser.parseFromString(txt,"text/xml");
      return xmlDoc;
    }
    catch(e) {alert(e.message)}
  }
  return null;
}

kajax = function(url,callback_function)
{
  var xmlhttp;
  if (window.XMLHttpRequest)
  {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  else
  {
    alert("Your browser does not support XMLHTTP!");
  }
  xmlhttp.onreadystatechange=function()
  {
    if(xmlhttp.readyState==4)
    {
      // action... what i should do right now !?
      call_back_func( xmlhttp.responseText);
    }
  }
  xmlhttp.open('GET', url, true);
  xmlhttp.send(null);
}

krss = function(txt)
{
  rss = kajax_xml_load(txt);
  
  // get a reference to the root-element "rss"
  var root = rss.getElementsByTagName('rss')[0];

  // get reference to "channel" element
  var channels = root.getElementsByTagName("channel");

  // now get all "item" tags in the channel
  this.items = channels[0].getElementsByTagName("item");
}

krss.prototype.count = function()
{
  return this.items.length;
}


krss.prototype.get = function(index,index_title)
{
  return this.items[index].getElementsByTagName(index_title)[0].firstChild.nodeValue;
}

kxml = function(txt, item)
{
  xml = kajax_xml_load(txt);
  
  this.items = xml.getElementsByTagName(item);
}

kxml.prototype.count = function()
{
  return this.items.length;
}

kxml.prototype.get = function(index,index_title)
{
  return this.items[index].getElementsByTagName(index_title)[0].firstChild.nodeValue;
}