function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}

var http = createRequestObject();


var pathjax = new Array();
var pos = 0;

function backjax(){
    if(pos>1){
        var tmp = pos-1;
        var val = pathjax[tmp];
        pos=pos-1;
        sndReq(val, '1');
    }
}

function rejax(){
    var val = pathjax[pos];
    sndReq(val, '2');
}

function forjax(){
    if(pos<(pathjax.length-1)){
        var tmp = pos+1;
        var val = pathjax[tmp];
        pos= pos+1;
        sndReq(val, '3'); 
    }
}

function delReq(page) {
    http.open("GET", page);
    http.onreadystatechange = del;
    http.setRequestHeader("Content-Type", "html"); 
    http.send(null);
}

////////////////////////////////////////////////////QueJax///////////////////////////////////////
function ticket_roll(){
    this.num    =   0;
    this.cur    =   0;
    this.div    =   Array();
    this.page   =   Array();
    this.arg    =   Array();
    this.add    =   ticketadd;
    this.cont   =   conticket;
}

function conticket(){
    this.cur++;
    if(this.cur<this.num){
        ajExec(this.cur);
    }
}

function ticketadd(divname, page, arg){
    this.div[this.num] = divname;
    this.page[this.num] = page;
    this.arg[this.num] = arg;
    if(this.num == this.cur)
        ajExec(ticket.cur);
    this.num++;
}

function sndReq(divname, page, arg){
    if(!divname){
        divname = 'content-footer';
    }
    ticket.add(divname, page, arg);
}

function ajExec(number){
    var cmd = '\''+ticket.div[number]+'\', \''+ticket.page[number]+'\'';
    if(ticket.arg[number])
        cmd += ', \''+ticket.arg[number]+'\'';
    eval('execReq('+cmd+');');
}

ticket = new ticket_roll();
var divid = null;

function execReq(divname, page, arg) {
    divid = divname;
    pos++;
    pathjax[pos] = page;
    if(arg==null){
        http.open("GET", page);
    }else{
        http.open("POST", page);
    }
    http.onreadystatechange = handler;
    http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    http.send(arg);
}

function rdyState(){
    switch(http.readyState){
        case 4:
            return true;
            break;
        default:
            return false;
            break;
    }
}

function handler(){
    if(rdyState()){
        if(document.getElementById(divid)){
            document.getElementById(divid).innerHTML=http.responseText;
            execJS(document.getElementById(divid));
        }
    }
}

function sndSubReq(page, divname, arg) {
    if(!divname){
        divname = 'content';
    }
    ticket.add(divname, page, arg);
}

function handler() {
    if(http.readyState == 4){
        document.getElementById(divid).innerHTML = http.responseText;
        document.getElementById(divid).style.visibility = 'visible';
        execJS(document.getElementById(divid));
        ticket.cont();
    }
}

function del() {
    if(http.readyState == 4){
        document.getElementById('content').innerHTML += http.responseText;
        execJS(document.getElementById('content'));
    }
}

var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
var bMoz = (navigator.appName == 'Netscape');
function execJS(node) {
  var st = node.getElementsByTagName('SCRIPT');
  var strExec;
  for(var i=0;i<st.length; i++) {     
    if (bSaf) {
      strExec = st[i].innerHTML;
    }
    else if (bOpera) {
      strExec = st[i].text;
    }
    else if (bMoz) {
      strExec = st[i].textContent;
    }
    else {
      strExec = st[i].text;
    }
    try {
      eval(strExec);
    } catch(e) {
      alert(e);
    }
  }
}

function popitup(url, name, yheight, xwidth)
{
	eval('newwindow=window.open(\''+url+'\',\''+name+'\',\'height='+yheight+', width='+xwidth+'\');');
	if (window.focus) {newwindow.focus()}
	return false;
}

function loadContent(file){
  var scriptTag = document.getElementById('loadScript');
  var head = document.getElementsByTagName('head').item(0)
  if(scriptTag) head.removeChild(scriptTag);
  script = document.createElement('script');
  script.src = file;
	script.type = 'text/javascript';
	script.id = 'loadScript';
	head.appendChild(script)
}

function loadLink(file){
  var LinkTag = document.getElementById('loadLink');
  var head = document.getElementsByTagName('head').item(0)
  if(LinkTag) head.removeChild(LinkTag);
  link = document.createElement('link');
  link.href = file;
  link.rel ='stylesheet';
	link.type = 'text/css';
	link.id = 'loadLink';
	head.appendChild(link)
}

var binary;
var filename;
    
function ajax_upload(div, page, arg, filename){
    // request local file read permission
	try {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		alert("Permission to read file was denied.");
	}
	
	// open the local file
	var file = Components.classes["@mozilla.org/file/local;1"]
		.createInstance(Components.interfaces.nsILocalFile);
	file.initWithPath( filename );		
	stream = Components.classes["@mozilla.org/network/file-input-stream;1"]
		.createInstance(Components.interfaces.nsIFileInputStream);
	stream.init(file,	0x01, 00004, null);
	var bstream =  Components.classes["@mozilla.org/network/buffered-input-stream;1"]
		.getService();
	bstream.QueryInterface(Components.interfaces.nsIBufferedInputStream);
	bstream.init(stream, 1000);
	bstream.QueryInterface(Components.interfaces.nsIInputStream);
	binary = Components.classes["@mozilla.org/binaryinputstream;1"]
		.createInstance(Components.interfaces.nsIBinaryInputStream);
	binary.setInputStream (stream);

	// start AJAX file upload in 1 second
    var boundary = '--';
    var tmparg='';
    var tmp=arg.split("&")
    for(i=0;i<tmp.length;i++){
        line=tmp[i].split("=");
        tmparg+=boundary+'\n'+'Content-Disposition: form-data; name="'+line[0]+'"'+'\n'+'\n'+line[1]+'\n';
    }
    tmparg+=boundary+'\n'+ 'Content-Disposition: form-data; name="myfile"; filename="' + filename + '"' + '\n' + 'Content-Type: application/octet-stream' + '\n' + '\n'+ escape(binary.readBytes(binary.available()))+ '\n'+ boundary;
    arg
    window.setTimeout("sndReq(div, page, arg)", 1000);
}

